increment platform version + version
authorymh <ymh.work@gmail.com>
Thu, 31 Dec 2015 15:51:09 +0100
changeset 1070 36517cb225fe
parent 1069 2409cb4cebaf
child 1071 02c04d2c8fd8
increment platform version + version
src/js/version.js
src/widgets/Polemic.js
test/placeholderplayer.htm
--- a/src/js/version.js	Mon Dec 28 15:50:04 2015 +0100
+++ b/src/js/version.js	Thu Dec 31 15:51:09 2015 +0100
@@ -1,1 +1,1 @@
-// Metadataplayer - version 0.2
+// Metadataplayer - version 0.3
--- a/src/widgets/Polemic.js	Mon Dec 28 15:50:04 2015 +0100
+++ b/src/widgets/Polemic.js	Thu Dec 31 15:51:09 2015 +0100
@@ -84,6 +84,228 @@
     }
 };
 
+IriSP.Widgets.Polemic.prototype.drawNoStackgraph = function(_max, _slices) {
+
+    var _this = this;
+    this.is_stackgraph = false;
+    if (_max) {
+
+        this.height = (2 + _max) * this.element_height;
+        this.$zone.css({
+            width: this.width + "px",
+            height: this.height + "px",
+            position: "relative"
+        });
+
+        var _x = 0;
+
+        function displayAnnotation(_elx, _ely, _pol, _col, _annotation) {
+            var _htmlAnnot = Mustache.to_html(
+                '<div class="Ldt-Polemic-TweetDiv Ldt-TraceMe" trace-info="annotation-id:{{id}}, media-id:{{media_id}}, polemic:{{polemic}}, time:{{time}}" polemic-color="{{color}}"'
+                + ' tweet-title="{{title}}" annotation-id="{{id}}" style="width: {{width}}px; height: {{height}}px; top: {{top}}px; left: {{left}}px; background: {{color}}"></div>',
+            {
+                id: _annotation.id,
+                media_id: _this.source.currentMedia.id,
+                polemic: _pol,
+                left: _elx,
+                top: _ely,
+                color: _col,
+                width: (_this.element_width-1),
+                height: _this.element_height,
+                title: _annotation.title,
+                time: _annotation.begin.toString()
+            });
+            var _el = IriSP.jQuery(_htmlAnnot);
+            _el.mouseover(function() {
+                _annotation.trigger("select");
+            }).mouseout(function() {
+                _annotation.trigger("unselect");
+            }).click(function() {
+                _annotation.trigger("click");
+                return false;
+            });
+            IriSP.attachDndData(_el, {
+                title: _annotation.title,
+                description: _annotation.description,
+                image: _annotation.thumbnail,
+                uri: (typeof _annotation.url !== "undefined"
+                    ? _annotation.url
+                    : (document.location.href.replace(/#.*$/,'') + '#id='  + _annotation.id)),
+            text: '[' + _annotation.begin.toString() + '] ' + _annotation.title
+            });
+            // test if annotation has several colors.
+            var colAr = [];
+            var _polemicVersion = (_annotation.content && _annotation.content.polemic_version) || _this.default_version,
+                _polemics = _this.getPolemics(_polemicVersion) || [],
+                _pol,
+                _polKey,
+                _polDef,
+                _rgxp;
+
+            for(var _j = 0; _j < _polemics.length; _j++) {
+                _pol = _polemics[_j];
+                _rgxp = _pol.rgxp || (_pol.rgxp = IriSP.Model.regexpFromTextOrArray(_pol.keywords));
+                if(_rgxp.test(_annotation.description)) {
+                    colAr.push(_pol.color);
+                }
+            }
+
+            // display annotation
+            _annotation.on("select", function() {
+                if (_this.tooltip) {
+                    _this.tooltip.show(
+                        + Math.floor(_elx + (_this.element_width - 1) / 2),
+                        + _ely,
+                        _annotation.title,
+                        ( (colAr.length>1) ? colAr : _col )
+                    );
+                }
+                _this.$tweets.each(function() {
+                    var _e = IriSP.jQuery(this);
+                    _e.css(
+                        "opacity",
+                        ( _e.attr("annotation-id") == _annotation.id ? 1 : .3 )
+                    );
+                });
+            });
+            _annotation.on("unselect", function() {
+                if (_this.tooltip) {
+                    _this.tooltip.hide();
+                }
+                _this.$tweets.css("opacity",1);
+            });
+            _annotation.on("found", function() {
+                _el.css({
+                    "background" : _this.foundcolor,
+                    "opacity" : 1
+                });
+            });
+            _annotation.on("not-found", function() {
+                _el.css({
+                    "background" : _col,
+                    "opacity" : .3
+                });
+            });
+            _this.$zone.append(_el);
+        };
+
+        IriSP._(_slices).forEach(function(_slice) {
+            var _y = _this.height;
+            _slice.annotations.forEach(function(_annotation) {
+                _y -= _this.element_height;
+                displayAnnotation(_x, _y, "none", _this.defaultcolor, _annotation);
+            });
+            IriSP._(_slice.polemicStacks).forEach(function(_annotations) {
+                var _color = _annotations.polemicDef.color,
+                    _polemic = _annotations.polemicDef.name;
+                _annotations.annotations.forEach(function(_annotation) {
+                    _y -= _this.element_height;
+                    displayAnnotation(_x, _y, _polemic, _color, _annotation);
+                });
+            });
+            _x += _this.element_width;
+        });
+
+        this.$tweets = this.$.find(".Ldt-Polemic-TweetDiv");
+
+        this.source.getAnnotations().on("search-cleared", function() {
+            _this.$tweets.each(function() {
+                var _el = IriSP.jQuery(this);
+                _el.css({
+                    "background" : _el.attr("polemic-color"),
+                    "opacity" : 1
+                });
+            });
+        });
+
+    } else {
+        this.$zone.hide();
+    }
+}
+
+IriSP.Widgets.Polemic.prototype.drawStackgraph = function(_max, _slices) {
+    this.is_stackgraph = true;
+
+    var _this = this;
+
+    this.height = (2 + this.max_elements) * this.element_height;
+    this.$zone.css({
+        width: this.width + "px",
+        height: this.height + "px",
+        position: "relative"
+    });
+
+    var _x = 0,
+        _html = '',
+        _scale = this.max_elements * this.element_height / _max;
+
+    function displayStackElement(_x, _y, _h, _color, _nums, _begin, _end, _polemic) {
+        _html += Mustache.to_html(
+            '<div class="Ldt-Polemic-TweetDiv Ldt-TraceMe" trace-info="annotation-block, media-id={{media_id}}, polemic={{polemic}}, time:{{begin}}" pos-x="{{posx}}" pos-y="{{top}}" annotation-counts="{{nums}}" begin-time="{{begin}}" end-time="{{end}}"'
+            + ' style="width: {{width}}px; height: {{height}}px; top: {{top}}px; left: {{left}}px; background: {{color}}"></div>',
+        {
+            nums: _nums,
+            posx: Math.floor(_x + (_this.element_width - 1) / 2),
+            media_id: _this.source.currentMedia.id,
+            polemic: _polemic,
+            left: _x,
+            top: _y,
+            color: _color,
+            width: (_this.element_width-1),
+            height: _h,
+            begin: _begin,
+            end: _end
+        });
+    }
+
+    IriSP._(_slices).forEach(function(_slice) {
+        var _y = _this.height,
+            _nums = _slice.annotations.length + "|" + _this.defaultcolor + "," + IriSP._(_slice.polemicStacks).map(function(_annotations) {
+                return _annotations.annotations.length + "|" + _annotations.polemicDef.color;
+            }).join(",");
+        if (_slice.annotations.length) {
+            var _h = Math.ceil(_scale * _slice.annotations.length);
+            _y -= _h;
+            displayStackElement(_x, _y, _h, _this.defaultcolor, _nums, _slice.begin, _slice.end, "none");
+        }
+        IriSP._(_slice.polemicStacks).forEach(function(_annotations) {
+            if (_annotations.annotations.length) {
+                var _color = _annotations.polemicDef.color,
+                    _polemic = _annotations.polemicDef.name,
+                    _h = Math.ceil(_scale * _annotations.annotations.length);
+                _y -= _h;
+                displayStackElement(_x, _y, _h, _color, _nums, _slice.begin, _slice.end, _polemic);
+            }
+        });
+        _x += _this.element_width;
+    });
+
+    this.$zone.append(_html);
+
+    this.$tweets = this.$.find(".Ldt-Polemic-TweetDiv");
+
+    this.$tweets
+        .mouseover(function() {
+            var _el = IriSP.jQuery(this),
+                _nums = _el.attr("annotation-counts").split(","),
+                _html = '<p>' + _this.l10n.from_ + _el.attr("begin-time") + _this.l10n._to_ + _el.attr("end-time") + '</p>';
+            _html = IriSP._.reduce(_nums, function(_htmlStr, _countStr) {
+                var _components = _countStr.split("|");
+                _htmlStr += '<div class="Ldt-Tooltip-AltColor" style="background: ' + _components[1] + '"></div><p>' + _components[0] + _this.l10n._annotations + '</p>';
+                return _htmlStr;
+            }, _html);
+            if (_this.tooltip) {
+                _this.tooltip.show(+ _el.attr("pos-x"), + _el.attr("pos-y"), _html);
+            }
+        })
+        .mouseout(function() {
+            if (_this.tooltip) {
+                _this.tooltip.hide();
+            }
+        });
+}
+
+
 IriSP.Widgets.Polemic.prototype.draw = function() {
 
     this.onMediaEvent("timeupdate", "onTimeupdate");
@@ -121,227 +343,40 @@
                 annotations : _list.filter(function(_annotation) {
                     return _annotation.begin >= _begin && _annotation.begin < _end;
                 }),
-                polemicStacks : []
+                polemicStacks : {}
             };
 
-        for (var _j = 0; _j < this.getPolemics().length; _j++) {
-            var _polemic = _res.annotations.searchByDescription(this.getPolemics()[_j].keywords);
-            _count += _polemic.length;
-            _res.polemicStacks.push(_polemic);
-        }
-        for (var _j = 0; _j < this.getPolemics().length; _j++) {
-            _res.annotations.removeElements(_res.polemicStacks[_j]);
-        }
-        _count += _res.annotations.length;
+        _count = _res.annotations.length;
+        _res.annotations = _res.annotations.filter(function(_annotation) {
+            var _polemicVersion = (_annotation.content && _annotation.content.polemic_version) || _this.default_version,
+                _polemics = _this.getPolemics(_polemicVersion) || [],
+                _pol,
+                _polKey,
+                _polDef,
+                _rgxp;
+
+            for(var _j = 0; _j < _polemics.length; _j++) {
+                _pol = _polemics[_j];
+                _rgxp = _pol.rgxp || (_pol.rgxp = IriSP.Model.regexpFromTextOrArray(_pol.keywords));
+                if(_rgxp.test(_annotation.description)) {
+                    _polKey = _polemicVersion + "_" + _pol.name;
+                    _polDef = _res.polemicStacks[_polKey] || (_res.polemicStacks[_polKey] = { 'polemicDef' : _pol, 'annotations': []});
+                    _polDef.annotations.push(_annotation);
+                    return false;
+                }
+            }
+            return true;
+        });
+
         _max = Math.max(_max, _count);
         _slices.push(_res);
     }
+
     if (_max < this.max_elements) {
-        this.is_stackgraph = false;
-        if (_max) {
-
-            this.height = (2 + _max) * this.element_height;
-            this.$zone.css({
-                width: this.width + "px",
-                height: this.height + "px",
-                position: "relative"
-            });
-
-            var _x = 0;
-
-            function displayAnnotation(_elx, _ely, _pol, _col, _annotation) {
-                var _html = Mustache.to_html(
-                    '<div class="Ldt-Polemic-TweetDiv Ldt-TraceMe" trace-info="annotation-id:{{id}}, media-id:{{media_id}}, polemic:{{polemic}}, time:{{time}}" polemic-color="{{color}}"'
-                    + ' tweet-title="{{title}}" annotation-id="{{id}}" style="width: {{width}}px; height: {{height}}px; top: {{top}}px; left: {{left}}px; background: {{color}}"></div>',
-                {
-                    id: _annotation.id,
-                    media_id: _this.source.currentMedia.id,
-                    polemic: _pol,
-                    left: _elx,
-                    top: _ely,
-                    color: _col,
-                    width: (_this.element_width-1),
-                    height: _this.element_height,
-                    title: _annotation.title,
-                    time: _annotation.begin.toString()
-                });
-                var _el = IriSP.jQuery(_html);
-                _el.mouseover(function() {
-                    _annotation.trigger("select");
-                }).mouseout(function() {
-                    _annotation.trigger("unselect");
-                }).click(function() {
-                    _annotation.trigger("click");
-                    return false;
-                });
-                IriSP.attachDndData(_el, {
-                	title: _annotation.title,
-                	description: _annotation.description,
-                	image: _annotation.thumbnail,
-                	uri: (typeof _annotation.url !== "undefined"
-		                ? _annotation.url
-		                : (document.location.href.replace(/#.*$/,'') + '#id='  + _annotation.id)),
-                text: '[' + _annotation.begin.toString() + '] ' + _annotation.title
-                });
-            	// test if annotation has several colors.
-            	var colAr = [];
-            	for (var _j = 0; _j < _this.getPolemics().length; _j++) {
-            		if( IriSP.Model.regexpFromTextOrArray( _this.getPolemics()[_j].keywords ).test( _annotation.title ) ){
-            			colAr.push(_this.getPolemics()[_j].color);
-            		}
-                }
-            	// display annotation
-                _annotation.on("select", function() {
-                    if (_this.tooltip) {
-                        _this.tooltip.show(
-                            + Math.floor(_elx + (_this.element_width - 1) / 2),
-                            + _ely,
-                            _annotation.title,
-                            ( (colAr.length>1) ? colAr : _col )
-                        );
-                    }
-                    _this.$tweets.each(function() {
-                        var _e = IriSP.jQuery(this);
-                        _e.css(
-                            "opacity",
-                            ( _e.attr("annotation-id") == _annotation.id ? 1 : .3 )
-                        );
-                    });
-                });
-                _annotation.on("unselect", function() {
-                    if (_this.tooltip) {
-                        _this.tooltip.hide();
-                    }
-                    _this.$tweets.css("opacity",1);
-                });
-                _annotation.on("found", function() {
-                    _el.css({
-                        "background" : _this.foundcolor,
-                        "opacity" : 1
-                    });
-                });
-                _annotation.on("not-found", function() {
-                    _el.css({
-                        "background" : _col,
-                        "opacity" : .3
-                    });
-                });
-                _this.$zone.append(_el);
-            }
-
-            IriSP._(_slices).forEach(function(_slice) {
-                var _y = _this.height;
-                _slice.annotations.forEach(function(_annotation) {
-                    _y -= _this.element_height;
-                    displayAnnotation(_x, _y, "none", _this.defaultcolor, _annotation);
-                });
-                IriSP._(_slice.polemicStacks).forEach(function(_annotations, _j) {
-                    var _color = _this.getPolemics()[_j].color,
-                        _polemic = _this.getPolemics()[_j].name;
-                    _annotations.forEach(function(_annotation) {
-                        _y -= _this.element_height;
-                        displayAnnotation(_x, _y, _polemic, _color, _annotation);
-                    });
-                });
-                _x += _this.element_width;
-            });
-
-            this.$zone.append(_html);
-
-            this.$tweets = this.$.find(".Ldt-Polemic-TweetDiv");
-
-            this.source.getAnnotations().on("search-cleared", function() {
-                _this.$tweets.each(function() {
-                    var _el = IriSP.jQuery(this);
-                    _el.css({
-                        "background" : _el.attr("polemic-color"),
-                        "opacity" : 1
-                    });
-                });
-            });
-
-        } else {
-            this.$zone.hide();
-        }
+        this.drawNoStackgraph(_max, _slices);
     } else {
-        this.is_stackgraph = true;
-
-        this.height = (2 + this.max_elements) * this.element_height;
-        this.$zone.css({
-            width: this.width + "px",
-            height: this.height + "px",
-            position: "relative"
-        });
-
-        var _x = 0,
-            _html = '',
-            _scale = this.max_elements * this.element_height / _max;
-
-        function displayStackElement(_x, _y, _h, _color, _nums, _begin, _end, _polemic) {
-            _html += Mustache.to_html(
-                '<div class="Ldt-Polemic-TweetDiv Ldt-TraceMe" trace-info="annotation-block, media-id={{media_id}}, polemic={{polemic}}, time:{{begin}}" pos-x="{{posx}}" pos-y="{{top}}" annotation-counts="{{nums}}" begin-time="{{begin}}" end-time="{{end}}"'
-                + ' style="width: {{width}}px; height: {{height}}px; top: {{top}}px; left: {{left}}px; background: {{color}}"></div>',
-            {
-                nums: _nums,
-                posx: Math.floor(_x + (_this.element_width - 1) / 2),
-                media_id: _this.source.currentMedia.id,
-                polemic: _polemic,
-                left: _x,
-                top: _y,
-                color: _color,
-                width: (_this.element_width-1),
-                height: _h,
-                begin: _begin,
-                end: _end
-            });
-        }
-
-        IriSP._(_slices).forEach(function(_slice) {
-            var _y = _this.height,
-                _nums = _slice.annotations.length + "," + IriSP._(_slice.polemicStacks).map(function(_annotations) {
-                    return _annotations.length;
-                }).join(",");
-            if (_slice.annotations.length) {
-                var _h = Math.ceil(_scale * _slice.annotations.length);
-                _y -= _h;
-                displayStackElement(_x, _y, _h, _this.defaultcolor, _nums, _slice.begin, _slice.end, "none");
-            }
-            IriSP._(_slice.polemicStacks).forEach(function(_annotations, _j) {
-                if (_annotations.length) {
-                    var _color = _this.getPolemics()[_j].color,
-                        _polemic = _this.getPolemics()[_j].name,
-                        _h = Math.ceil(_scale * _annotations.length);
-                    _y -= _h;
-                    displayStackElement(_x, _y, _h, _color, _nums, _slice.begin, _slice.end, _polemic);
-                }
-            });
-            _x += _this.element_width;
-        });
-
-        this.$zone.append(_html);
-
-        this.$tweets = this.$.find(".Ldt-Polemic-TweetDiv");
-
-        this.$tweets
-            .mouseover(function() {
-                var _el = IriSP.jQuery(this),
-                    _nums = _el.attr("annotation-counts").split(","),
-                    _html = '<p>' + _this.l10n.from_ + _el.attr("begin-time") + _this.l10n._to_ + _el.attr("end-time") + '</p>';
-                for (var _i = 0; _i <= _this.getPolemics().length; _i++) {
-                    var _color = _i ? _this.getPolemics()[_i - 1].color : _this.defaultcolor;
-                    _html += '<div class="Ldt-Tooltip-AltColor" style="background: ' + _color + '"></div><p>' + _nums[_i] + _this.l10n._annotations + '</p>';
-                }
-                if (_this.tooltip) {
-                    _this.tooltip.show(+ _el.attr("pos-x"), + _el.attr("pos-y"), _html);
-                }
-            })
-            .mouseout(function() {
-                if (_this.tooltip) {
-                    _this.tooltip.hide();
-                }
-            });
-
-    };
+        this.drawStackgraph(_max, _slices);
+    }
 
     this.$position = IriSP.jQuery('<div>').addClass("Ldt-Polemic-Position");
 
--- a/test/placeholderplayer.htm	Mon Dec 28 15:50:04 2015 +0100
+++ b/test/placeholderplayer.htm	Thu Dec 31 15:51:09 2015 +0100
@@ -53,9 +53,9 @@
             { type: "Mediafragment"}
         ]
     };
-    
+
     var _myPlayer = new IriSP.Metadataplayer(_config);
-    
+
         </script>
     </body>
 </html>