src/js/widgets/traceWidget.js
author veltr
Mon, 05 Mar 2012 17:34:48 +0100
branchpopcorn-port
changeset 827 1dc2f85c3b89
parent 826 c7ae4f126e51
child 830 18ca612e9ff0
permissions -rw-r--r--
BUGFIX: Tooltips are now positioned relative to their parent widget.

IriSP.TraceWidget = function(Popcorn, config, Serializer) {
  IriSP.Widget.call(this, Popcorn, config, Serializer);
  this.lastEvent = "";
  var _this = this,
    _listeners = [
        "IriSP.ArrowWidget.releaseArrow",
        "IriSP.SliceWidget.hide",
        "IriSP.AnnotationsWidget.show",
        "IriSP.AnnotationsWidget.hide",
        "IriSP.ArrowWidget.blockArrow",
        "IriSP.SliceWidget.position",
        "IriSP.SliceWidget.show",
        "IriSP.SliceWidget.hide",
        "IriSP.createAnnotationWidget.addedAnnotation",
//        "IriSP.PlayerWidget.AnnotateButton.clicked",
//        "IriSP.PlayerWidget.MouseOver",
//        "IriSP.PlayerWidget.MouseOut",
        "IriSP.search.open",
        "IriSP.search.closed",
        "IriSP.search",
        "IriSP.search.cleared",
//        "IriSP.PolemicTweet.click",
        "IriSP.search.matchFound",
        "IriSP.search.noMatchFound",
//        "IriSP.SegmentsWidget.click",
        "IriSP.SliceWidget.zoneChange",
//        "IriSP.SparklineWidget.clicked",
//        "IriSP.StackGraphWidget.mouseOver",
//        "IriSP.StackGraphWidget.clicked",
        "IriSP.search.triggeredSearch",
        "IriSP.Widget.MouseEvents",
        "play",
        "pause",
        "volumechange",
        "timeupdate",
        "seeked",
        "play",
        "pause"
    ];
    IriSP._(_listeners).each(function(_listener) {
      _this._Popcorn.listen(_listener, function() {
          _this.eventHandler(_listener, arguments);
      });
    });
  
}

IriSP.TraceWidget.prototype = new IriSP.Widget();

IriSP.TraceWidget.prototype.draw = function() {
}

IriSP.TraceWidget.prototype.eventHandler = function(_listener, _args) {
    var _traceName = 'Mdp_',
        _data = {};
        
    function packArgs() {
        for (var _i = 0; _i < _args.length; _i++) {
            _data[_i] = _args[_i];
        }
    }
    
    switch(_listener) {
        case 'IriSP.Widget.MouseEvents':
            var _type = _args[0].type,
                _name = _args[0].target_name,
                _class = _args[0].target_class,
                _id = _args[0].target_id,
                _widget = _args[0].widget.match(/[^_]+widget/i)[0];
            _traceName += _widget + '_' + _type;
            _data.x = _args[0].x;
            _data.y = _args[0].y;
            _data.target = _name + (_id.length ? '#' + _id : '') + (_class.length ? '.' + _class.replace(/\s/g,'.') : '');
            if (typeof _args[0].value == "string" && _args[0].value.length) {
                _data.value = _args[0].value;
            }
            if ((_name == "button" || /button/.test(_class)) && typeof _args[0].text == "string" && _args[0].text.length) {
                _data.text = _args[0].text;
            }
            if (typeof _args[0].title == "string" && _args[0].title.length) {
                _data.title = _args[0].title;
            }
            // Filtrer les événements mouseover quand on se déplace vers des éléments non pertinents
            if (!_id.length && !_class.length && ( _type == 'mouseover' || _type == 'mouseout' ) && this.lastEvent.search('Mdp_' + _widget) == 0) {
                return;
            }
        break;
        case 'play':
        case 'pause':
        case 'seeked':
        case 'timeupdate':
        case 'volumechange':
            _traceName += 'Popcorn' + _listener;
            packArgs();
        break;
        default:
            _traceName += _listener.replace('IriSP.','').replace('.','_');
            packArgs();
    }
    this.lastEvent = _traceName;
    console.log("trace('" + _traceName + "', " + JSON.stringify(_data) + ");");
}