src/widgets/Trace.js
branchnew-model
changeset 1020 198c2b79f5e1
parent 1019 3ab36f402b0c
--- a/src/widgets/Trace.js	Thu Jan 02 16:40:25 2014 +0100
+++ b/src/widgets/Trace.js	Thu Jan 02 16:49:20 2014 +0100
@@ -1,7 +1,7 @@
 IriSP.Widgets.Trace = function(player, config) {
   IriSP.Widgets.Widget.call(this, player, config);
     
-};
+}
 
 IriSP.Widgets.Trace.prototype = new IriSP.Widgets.Widget();
 
@@ -13,45 +13,40 @@
     default_subject: "IRI",
     tracer: null,
     extend: false
-};
+}
 
 IriSP.Widgets.Trace.prototype.draw = function() {
+  this.lastEvent = "";
   if (typeof window.tracemanager === "undefined") {
       console.log("Tracemanager not found");
       return;
   }
   var _this = this,
-    _medialisteners = {
+    _listeners = {
+        "IriSP.search.open" : 0,
+        "IriSP.search.closed" : 0,
+        "IriSP.search" : 0,
+        "IriSP.search.cleared" : 0,
+        "IriSP.search.matchFound" : 0,
+        "IriSP.search.noMatchFound" : 0,
+        "IriSP.search.triggeredSearch" : 0,
+        "IriSP.TraceWidget.MouseEvents" : 0,
         "play" : 0,
         "pause" : 0,
         "volumechange" : 0,
         "seeked" : 0,
         "play" : 0,
         "pause" : 0,
-        "timeupdate" : 10000
-    },
-    _annlisteners = {
-        search: 0,
-        "search-cleared": 0
+        "timeupdate" : 2000
     };
-    IriSP._(_medialisteners).each(function(_ms, _listener) {
+    IriSP._(_listeners).each(function(_ms, _listener) {
         var _f = function(_arg) {
             _this.eventHandler(_listener, _arg);
-        };
+        }
         if (_ms) {
             _f = IriSP._.throttle(_f, _ms);
         }
-        _this.media.on(_listener, _f);
-    });
-    var _annotations = this.source.getAnnotations();
-    IriSP._(_annlisteners).each(function(_ms, _listener) {
-        var _f = function(_arg) {
-            _this.eventHandler(_listener, _arg);
-        };
-        if (_ms) {
-            _f = IriSP._.throttle(_f, _ms);
-        }
-        _annotations.on(_listener, _f);
+        _this.player.popcorn.listen(_listener, _f);
     });
     
     if (!this.tracer) {
@@ -65,61 +60,92 @@
     
     }
     
-    
-    
     this.tracer.trace("TraceWidgetInit", {});
     
     this.mouseLocation = '';
-    IriSP.jQuery(".Ldt-Widget").on("click mouseenter mouseleave", ".Ldt-TraceMe", function(_e) {
-        var _target = IriSP.jQuery(this);
+    IriSP.jQuery(".Ldt-Widget").bind("click mouseover mouseout", function(_e) {
+        var _target = IriSP.jQuery(_e.target);
+
+        while (!_target.hasClass("Ldt-TraceMe") && !_target.hasClass("Ldt-Widget") && _target.length) {
+            _target = _target.parent();
+        }
         
-        var _widget = _target.attr("widget-type") || _target.parents(".Ldt-Widget").attr("widget-type"),
+        var _widget = IriSP.jQuery(this).attr("widget-type"),
             _data = {
                 "type": _e.type,
+                "x": _e.clientX,
+                "y": _e.clientY,
                 "widget": _widget
             },
             _targetEl = _target[0],
             _class = _targetEl.className,
             _name = _targetEl.localName,
             _id = _targetEl.id,
-            _value = _target.val(),
-            _traceInfo = _target.attr("trace-info");
-        _data.target = _name + (_id && _id.length ? '#' + IriSP.jqEscape(_id) : '') + (_class && _class.length ? ('.' + IriSP.jqEscape(_class).replace(/\s/g,'.')).replace(/\.Ldt-(Widget|TraceMe)/g,'') : '');
-        if (typeof _traceInfo == "string" && _traceInfo) {
+            _value = _targetEl.value,
+            _traceInfo = _target.attr("trace-info"),
+            _lastTarget = _name + (_id && _id.length ? '#' + IriSP.jqEscape(_id) : '') + (_class && _class.length ? ('.' + IriSP.jqEscape(_class).replace(/\s/g,'.')).replace(/\.Ldt-(Widget|TraceMe)/g,'') : '');
+        _data.target = _lastTarget
+        if (typeof _traceInfo == "string" && _traceInfo.length) {
             _data.traceInfo = _traceInfo;
+            _lastTarget += ( ";" + _traceInfo );
         }
         if (typeof _value == "string" && _value.length) {
             _data.value = _value;
         }
-        _this.eventHandler('UIEvent', _data);
+        switch(_e.type) {
+            case "mouseover":
+                if (_this.lastTarget != _lastTarget) {
+                    _this.player.popcorn.trigger('IriSP.TraceWidget.MouseEvents', _data);
+                } else {
+                    if (typeof _this.moTimeout != "undefined") {
+                        clearTimeout(_this.moTimeout);
+                        _this.moTimeout = undefined;
+                    }
+                }
+            break;
+            case "mouseout":
+                if (typeof _this.moTimeout != "undefined") {
+                    clearTimeout(_this.moTimeout);
+                }
+                _this.moTimeout = setTimeout(function() {
+                   if (_lastTarget != _this.lastTarget) {
+                       _this.player.popcorn.trigger('IriSP.TraceWidget.MouseEvents', _data);
+                   }
+                },100);
+            break;
+            default:
+                _this.player.popcorn.trigger('IriSP.TraceWidget.MouseEvents', _data);
+        }
+        _this.lastTarget = _lastTarget;
     });
-};
+}
 
 IriSP.Widgets.Trace.prototype.eventHandler = function(_listener, _arg) {
     var _traceName = 'Mdp_';
     if (typeof _arg == "string" || typeof _arg == "number") {
-        _arg = { "value" : _arg };
+        _arg = { "value" : _arg }
     }
     if (typeof _arg == "undefined") {
-        _arg = {};
+        _arg = {}
     }
     switch(_listener) {
-        case 'UIEvent':
+        case 'IriSP.TraceWidget.MouseEvents':
             _traceName += _arg.widget + '_' + _arg.type;
             delete _arg.widget;
             delete _arg.type;
         break;
+        case 'timeupdate':
         case 'play':
         case 'pause':
-            _arg.milliseconds = this.media.getCurrentTime().milliseconds;
-        case 'timeupdate':
+            _arg.time = this.player.popcorn.currentTime() * 1000;
         case 'seeked':
         case 'volumechange':
-            _traceName += 'media_' + _listener;
+            _traceName += 'Popcorn_' + _listener;
         break;
         default:
-            _traceName += _listener.replace('.','_');
+            _traceName += _listener.replace('IriSP.','').replace('.','_');
     }
+    this.lastEvent = _traceName;
     if (typeof this.extend === "object" && this.extend) {
         IriSP._(_arg).extend(this.extend);
     }
@@ -127,4 +153,4 @@
     if (this.js_console && typeof window.console !== "undefined" && typeof console.log !== "undefined") {
         console.log("tracer.trace('" + _traceName + "', " + JSON.stringify(_arg) + ");");
     }
-};
\ No newline at end of file
+}