src/widgets/Trace.js
branchnew-model
changeset 1020 198c2b79f5e1
parent 1019 3ab36f402b0c
equal deleted inserted replaced
1019:3ab36f402b0c 1020:198c2b79f5e1
     1 IriSP.Widgets.Trace = function(player, config) {
     1 IriSP.Widgets.Trace = function(player, config) {
     2   IriSP.Widgets.Widget.call(this, player, config);
     2   IriSP.Widgets.Widget.call(this, player, config);
     3     
     3     
     4 };
     4 }
     5 
     5 
     6 IriSP.Widgets.Trace.prototype = new IriSP.Widgets.Widget();
     6 IriSP.Widgets.Trace.prototype = new IriSP.Widgets.Widget();
     7 
     7 
     8 IriSP.Widgets.Trace.prototype.defaults = {
     8 IriSP.Widgets.Trace.prototype.defaults = {
     9     js_console : false,
     9     js_console : false,
    11     requestmode: 'GET',
    11     requestmode: 'GET',
    12     syncmode: "sync",
    12     syncmode: "sync",
    13     default_subject: "IRI",
    13     default_subject: "IRI",
    14     tracer: null,
    14     tracer: null,
    15     extend: false
    15     extend: false
    16 };
    16 }
    17 
    17 
    18 IriSP.Widgets.Trace.prototype.draw = function() {
    18 IriSP.Widgets.Trace.prototype.draw = function() {
       
    19   this.lastEvent = "";
    19   if (typeof window.tracemanager === "undefined") {
    20   if (typeof window.tracemanager === "undefined") {
    20       console.log("Tracemanager not found");
    21       console.log("Tracemanager not found");
    21       return;
    22       return;
    22   }
    23   }
    23   var _this = this,
    24   var _this = this,
    24     _medialisteners = {
    25     _listeners = {
       
    26         "IriSP.search.open" : 0,
       
    27         "IriSP.search.closed" : 0,
       
    28         "IriSP.search" : 0,
       
    29         "IriSP.search.cleared" : 0,
       
    30         "IriSP.search.matchFound" : 0,
       
    31         "IriSP.search.noMatchFound" : 0,
       
    32         "IriSP.search.triggeredSearch" : 0,
       
    33         "IriSP.TraceWidget.MouseEvents" : 0,
    25         "play" : 0,
    34         "play" : 0,
    26         "pause" : 0,
    35         "pause" : 0,
    27         "volumechange" : 0,
    36         "volumechange" : 0,
    28         "seeked" : 0,
    37         "seeked" : 0,
    29         "play" : 0,
    38         "play" : 0,
    30         "pause" : 0,
    39         "pause" : 0,
    31         "timeupdate" : 10000
    40         "timeupdate" : 2000
    32     },
       
    33     _annlisteners = {
       
    34         search: 0,
       
    35         "search-cleared": 0
       
    36     };
    41     };
    37     IriSP._(_medialisteners).each(function(_ms, _listener) {
    42     IriSP._(_listeners).each(function(_ms, _listener) {
    38         var _f = function(_arg) {
    43         var _f = function(_arg) {
    39             _this.eventHandler(_listener, _arg);
    44             _this.eventHandler(_listener, _arg);
    40         };
    45         }
    41         if (_ms) {
    46         if (_ms) {
    42             _f = IriSP._.throttle(_f, _ms);
    47             _f = IriSP._.throttle(_f, _ms);
    43         }
    48         }
    44         _this.media.on(_listener, _f);
    49         _this.player.popcorn.listen(_listener, _f);
    45     });
       
    46     var _annotations = this.source.getAnnotations();
       
    47     IriSP._(_annlisteners).each(function(_ms, _listener) {
       
    48         var _f = function(_arg) {
       
    49             _this.eventHandler(_listener, _arg);
       
    50         };
       
    51         if (_ms) {
       
    52             _f = IriSP._.throttle(_f, _ms);
       
    53         }
       
    54         _annotations.on(_listener, _f);
       
    55     });
    50     });
    56     
    51     
    57     if (!this.tracer) {
    52     if (!this.tracer) {
    58     
    53     
    59         this.tracer = window.tracemanager.init_trace("test", {
    54         this.tracer = window.tracemanager.init_trace("test", {
    63             default_subject: this.default_subject
    58             default_subject: this.default_subject
    64         });
    59         });
    65     
    60     
    66     }
    61     }
    67     
    62     
    68     
       
    69     
       
    70     this.tracer.trace("TraceWidgetInit", {});
    63     this.tracer.trace("TraceWidgetInit", {});
    71     
    64     
    72     this.mouseLocation = '';
    65     this.mouseLocation = '';
    73     IriSP.jQuery(".Ldt-Widget").on("click mouseenter mouseleave", ".Ldt-TraceMe", function(_e) {
    66     IriSP.jQuery(".Ldt-Widget").bind("click mouseover mouseout", function(_e) {
    74         var _target = IriSP.jQuery(this);
    67         var _target = IriSP.jQuery(_e.target);
       
    68 
       
    69         while (!_target.hasClass("Ldt-TraceMe") && !_target.hasClass("Ldt-Widget") && _target.length) {
       
    70             _target = _target.parent();
       
    71         }
    75         
    72         
    76         var _widget = _target.attr("widget-type") || _target.parents(".Ldt-Widget").attr("widget-type"),
    73         var _widget = IriSP.jQuery(this).attr("widget-type"),
    77             _data = {
    74             _data = {
    78                 "type": _e.type,
    75                 "type": _e.type,
       
    76                 "x": _e.clientX,
       
    77                 "y": _e.clientY,
    79                 "widget": _widget
    78                 "widget": _widget
    80             },
    79             },
    81             _targetEl = _target[0],
    80             _targetEl = _target[0],
    82             _class = _targetEl.className,
    81             _class = _targetEl.className,
    83             _name = _targetEl.localName,
    82             _name = _targetEl.localName,
    84             _id = _targetEl.id,
    83             _id = _targetEl.id,
    85             _value = _target.val(),
    84             _value = _targetEl.value,
    86             _traceInfo = _target.attr("trace-info");
    85             _traceInfo = _target.attr("trace-info"),
    87         _data.target = _name + (_id && _id.length ? '#' + IriSP.jqEscape(_id) : '') + (_class && _class.length ? ('.' + IriSP.jqEscape(_class).replace(/\s/g,'.')).replace(/\.Ldt-(Widget|TraceMe)/g,'') : '');
    86             _lastTarget = _name + (_id && _id.length ? '#' + IriSP.jqEscape(_id) : '') + (_class && _class.length ? ('.' + IriSP.jqEscape(_class).replace(/\s/g,'.')).replace(/\.Ldt-(Widget|TraceMe)/g,'') : '');
    88         if (typeof _traceInfo == "string" && _traceInfo) {
    87         _data.target = _lastTarget
       
    88         if (typeof _traceInfo == "string" && _traceInfo.length) {
    89             _data.traceInfo = _traceInfo;
    89             _data.traceInfo = _traceInfo;
       
    90             _lastTarget += ( ";" + _traceInfo );
    90         }
    91         }
    91         if (typeof _value == "string" && _value.length) {
    92         if (typeof _value == "string" && _value.length) {
    92             _data.value = _value;
    93             _data.value = _value;
    93         }
    94         }
    94         _this.eventHandler('UIEvent', _data);
    95         switch(_e.type) {
       
    96             case "mouseover":
       
    97                 if (_this.lastTarget != _lastTarget) {
       
    98                     _this.player.popcorn.trigger('IriSP.TraceWidget.MouseEvents', _data);
       
    99                 } else {
       
   100                     if (typeof _this.moTimeout != "undefined") {
       
   101                         clearTimeout(_this.moTimeout);
       
   102                         _this.moTimeout = undefined;
       
   103                     }
       
   104                 }
       
   105             break;
       
   106             case "mouseout":
       
   107                 if (typeof _this.moTimeout != "undefined") {
       
   108                     clearTimeout(_this.moTimeout);
       
   109                 }
       
   110                 _this.moTimeout = setTimeout(function() {
       
   111                    if (_lastTarget != _this.lastTarget) {
       
   112                        _this.player.popcorn.trigger('IriSP.TraceWidget.MouseEvents', _data);
       
   113                    }
       
   114                 },100);
       
   115             break;
       
   116             default:
       
   117                 _this.player.popcorn.trigger('IriSP.TraceWidget.MouseEvents', _data);
       
   118         }
       
   119         _this.lastTarget = _lastTarget;
    95     });
   120     });
    96 };
   121 }
    97 
   122 
    98 IriSP.Widgets.Trace.prototype.eventHandler = function(_listener, _arg) {
   123 IriSP.Widgets.Trace.prototype.eventHandler = function(_listener, _arg) {
    99     var _traceName = 'Mdp_';
   124     var _traceName = 'Mdp_';
   100     if (typeof _arg == "string" || typeof _arg == "number") {
   125     if (typeof _arg == "string" || typeof _arg == "number") {
   101         _arg = { "value" : _arg };
   126         _arg = { "value" : _arg }
   102     }
   127     }
   103     if (typeof _arg == "undefined") {
   128     if (typeof _arg == "undefined") {
   104         _arg = {};
   129         _arg = {}
   105     }
   130     }
   106     switch(_listener) {
   131     switch(_listener) {
   107         case 'UIEvent':
   132         case 'IriSP.TraceWidget.MouseEvents':
   108             _traceName += _arg.widget + '_' + _arg.type;
   133             _traceName += _arg.widget + '_' + _arg.type;
   109             delete _arg.widget;
   134             delete _arg.widget;
   110             delete _arg.type;
   135             delete _arg.type;
   111         break;
   136         break;
       
   137         case 'timeupdate':
   112         case 'play':
   138         case 'play':
   113         case 'pause':
   139         case 'pause':
   114             _arg.milliseconds = this.media.getCurrentTime().milliseconds;
   140             _arg.time = this.player.popcorn.currentTime() * 1000;
   115         case 'timeupdate':
       
   116         case 'seeked':
   141         case 'seeked':
   117         case 'volumechange':
   142         case 'volumechange':
   118             _traceName += 'media_' + _listener;
   143             _traceName += 'Popcorn_' + _listener;
   119         break;
   144         break;
   120         default:
   145         default:
   121             _traceName += _listener.replace('.','_');
   146             _traceName += _listener.replace('IriSP.','').replace('.','_');
   122     }
   147     }
       
   148     this.lastEvent = _traceName;
   123     if (typeof this.extend === "object" && this.extend) {
   149     if (typeof this.extend === "object" && this.extend) {
   124         IriSP._(_arg).extend(this.extend);
   150         IriSP._(_arg).extend(this.extend);
   125     }
   151     }
   126     this.tracer.trace(_traceName, _arg);
   152     this.tracer.trace(_traceName, _arg);
   127     if (this.js_console && typeof window.console !== "undefined" && typeof console.log !== "undefined") {
   153     if (this.js_console && typeof window.console !== "undefined" && typeof console.log !== "undefined") {
   128         console.log("tracer.trace('" + _traceName + "', " + JSON.stringify(_arg) + ");");
   154         console.log("tracer.trace('" + _traceName + "', " + JSON.stringify(_arg) + ");");
   129     }
   155     }
   130 };
   156 }