diff -r 919e362b9db1 -r 3ab36f402b0c src/widgets/Polemic.js --- a/src/widgets/Polemic.js Thu Aug 30 14:45:23 2012 +0200 +++ b/src/widgets/Polemic.js Thu Jan 02 16:40:25 2014 +0100 @@ -15,11 +15,12 @@ _to_: " to ", _annotations: " annotation(s)" } -} +}; + IriSP.Widgets.Polemic.prototype.defaults = { element_width : 5, element_height : 5, - max_elements : 15, + max_elements: 20, annotation_type : "tweet", defaultcolor : "#585858", foundcolor : "#fc00ff", @@ -47,45 +48,9 @@ ] }; -IriSP.Widgets.Polemic.prototype.onSearch = function(searchString) { - this.searchString = typeof searchString !== "undefined" ? searchString : ''; - var _found = 0, - _re = IriSP.Model.regexpFromTextOrArray(searchString, true), - _this = this; - this.$tweets.each(function() { - var _el = IriSP.jQuery(this); - if (_this.searchString) { - if (_re.test(_el.attr("tweet-title"))) { - _el.css({ - "background" : _this.foundcolor, - "opacity" : 1 - }); - _found++; - } else { - _el.css({ - "background" : _el.attr("polemic-color"), - "opacity" : .3 - }); - } - } else { - _el.css({ - "background" : _el.attr("polemic-color"), - "opacity" : 1 - }); - } - }); - if (this.searchString) { - if (_found) { - this.player.popcorn.trigger("IriSP.search.matchFound"); - } else { - this.player.popcorn.trigger("IriSP.search.noMatchFound"); - } - } -} - IriSP.Widgets.Polemic.prototype.draw = function() { - this.bindPopcorn("timeupdate", "onTimeupdate"); + this.onMediaEvent("timeupdate", "onTimeupdate"); this.$zone = IriSP.jQuery('
'); this.$zone.addClass("Ldt-Polemic"); this.$.append(this.$zone); @@ -102,6 +67,7 @@ this.$zone.append(this.$elapsed); + // we don't filter with null duration anymore var _slices = [], _slice_count = Math.floor( this.width / this.element_width ), _duration = this.source.getDuration(), @@ -117,10 +83,10 @@ begin : _begin.toString(), end : _end.toString(), annotations : _list.filter(function(_annotation) { - return _annotation.begin >= _begin && _annotation.end < _end; + return _annotation.begin >= _begin && _annotation.begin < _end; }), polemicStacks : [] - } + }; for (var _j = 0; _j < this.polemics.length; _j++) { var _polemic = _res.annotations.searchByDescription(this.polemics[_j].keywords); @@ -149,7 +115,7 @@ function displayAnnotation(_elx, _ely, _pol, _col, _annotation) { var _html = Mustache.to_html( - '
', { id: _annotation.id, @@ -160,7 +126,8 @@ color: _col, width: (_this.element_width-1), height: _this.element_height, - title: _annotation.title + title: _annotation.title, + time: _annotation.begin.toString() }); var _el = IriSP.jQuery(_html); _el.mouseover(function() { @@ -168,16 +135,34 @@ }).mouseout(function() { _annotation.trigger("unselect"); }).click(function() { - _this.player.popcorn.trigger("IriSP.Mediafragment.setHashToAnnotation", _annotation.id); - _this.player.popcorn.trigger("IriSP.Tweet.show", _annotation.id); + _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)) + }); + // test if annotation has several colors. + var colAr = []; + for (var _j = 0; _j < _this.polemics.length; _j++) { + if( IriSP.Model.regexpFromTextOrArray( _this.polemics[_j].keywords ).test( _annotation.title ) ){ + colAr.push(_this.polemics[_j].color); + } + } + // display annotation _annotation.on("select", function() { - _this.tooltip.show( - Math.floor(_elx + (_this.element_width - 1) / 2), - _ely, - _annotation.title, - _col - ); + 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( @@ -187,9 +172,23 @@ }); }); _annotation.on("unselect", function() { - _this.tooltip.hide(); + 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); } @@ -214,9 +213,15 @@ this.$tweets = this.$.find(".Ldt-Polemic-TweetDiv"); - this.bindPopcorn("IriSP.search", "onSearch"); - this.bindPopcorn("IriSP.search.closed", "onSearch"); - this.bindPopcorn("IriSP.search.cleared", "onSearch"); + 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(); @@ -257,7 +262,7 @@ IriSP._(_slices).forEach(function(_slice) { var _y = _this.height, _nums = _slice.annotations.length + "," + IriSP._(_slice.polemicStacks).map(function(_annotations) { - return _annotations.length + return _annotations.length; }).join(","); if (_slice.annotations.length) { var _h = Math.ceil(_scale * _slice.annotations.length); @@ -287,15 +292,19 @@ _html = '

' + _this.l10n.from_ + _el.attr("begin-time") + _this.l10n._to_ + _el.attr("end-time") + '

'; for (var _i = 0; _i <= _this.polemics.length; _i++) { var _color = _i ? _this.polemics[_i - 1].color : _this.defaultcolor; - _html += '

' + _nums[_i] + _this.l10n._annotations + '

' + _html += '

' + _nums[_i] + _this.l10n._annotations + '

'; } - _this.tooltip.show(_el.attr("pos-x"), _el.attr("pos-y"), _html); + if (_this.tooltip) { + _this.tooltip.show(+ _el.attr("pos-x"), + _el.attr("pos-y"), _html); + } }) .mouseout(function() { - _this.tooltip.hide(); - }) + if (_this.tooltip) { + _this.tooltip.hide(); + } + }); - } + }; this.$position = IriSP.jQuery('
').addClass("Ldt-Polemic-Position"); @@ -303,20 +312,28 @@ this.$zone.click(function(_e) { var _x = _e.pageX - _this.$zone.offset().left; - _this.player.popcorn.currentTime(_this.source.getDuration().getSeconds() * _x / _this.width); + _this.media.setCurrentTime(_this.media.duration * _x / _this.width); }); this.$.append('
'); - this.insertSubwidget(this.$.find(".Ldt-Polemic-Tooltip"), "tooltip", { type: "Tooltip" }); -} + this.insertSubwidget( + this.$.find(".Ldt-Polemic-Tooltip"), + { + type: "Tooltip", + min_x: 0, + max_x: this.width + }, + "tooltip" + ); +}; -IriSP.Widgets.Polemic.prototype.onTimeupdate = function() { - var _x = Math.floor( this.width * this.player.popcorn.currentTime() / this.source.getDuration().getSeconds()); +IriSP.Widgets.Polemic.prototype.onTimeupdate = function(_time) { + var _x = Math.floor( this.width * _time / this.media.duration); this.$elapsed.css({ width: _x + "px" }); this.$position.css({ left: _x + "px" - }) -} + }); +};