diff -r 353a78021ebc -r 03b03865eb9b src/js/widgets/annotationsListWidget.js --- a/src/js/widgets/annotationsListWidget.js Thu Mar 22 18:42:31 2012 +0100 +++ b/src/js/widgets/annotationsListWidget.js Mon Mar 26 19:18:04 2012 +0200 @@ -7,7 +7,19 @@ this.checkOption('project_url'); this.checkOption('default_thumbnail'); this.checkOption("cinecast_version", false); + this.searchRe = null; + this._ajax_cache = []; var _this = this; + + this._Popcorn.listen("IriSP.search", function(searchString) { + _this.searchHandler(searchString); + }); + this._Popcorn.listen("IriSP.search.closed", function() { + _this.searchHandler(false); + }); + this._Popcorn.listen("IriSP.search.cleared", function() { + _this.searchHandler(false); + }); }; @@ -19,10 +31,45 @@ IriSP.AnnotationsListWidget.prototype.clearWidget = function() { }; +IriSP.AnnotationsListWidget.prototype.searchHandler = function(searchString) { + this.searchRe = (searchString && searchString.length) ? IriSP.regexpFromText(searchString) : null; + if (this.ajax_mode) { + var _this = this, + _annotations = ( + this.searchRe === null + ? this._ajax_cache + : IriSP.underscore.filter(this._ajax_cache, function(_a) { + return (_this.searchRe.test(_a.desc) || _this.searchRe.test(_a.title)); + }) + ); + this.do_redraw(_annotations); + if (_annotations.length) { + this._Popcorn.trigger("IriSP.search.matchFound"); + } else { + this._Popcorn.trigger("IriSP.search.noMatchFound"); + } + } else { + this.drawList(); + } +} + /** effectively redraw the widget - called by drawList */ IriSP.AnnotationsListWidget.prototype.do_redraw = function(list) { - var widgetMarkup = IriSP.templToHTML(IriSP.annotationsListWidget_template, {annotations: list}); - this.selector.html(widgetMarkup); + var _html = IriSP.templToHTML( + IriSP.annotationsListWidget_template, { + annotations: list + }), + _this = this; + + this.selector.html(_html); + + if (this.searchRe !== null) { + this.selector.find(".Ldt-AnnotationsList-Title a, .Ldt-AnnotationsList-Description") + .each(function() { + var _$ = IriSP.jQuery(this); + _$.html(_$.text().replace(_this.searchRe, '$1')) + }) + } }; IriSP.AnnotationsListWidget.prototype.transformAnnotation = function(a) { @@ -83,6 +130,17 @@ } + if (this.searchRe !== null) { + list = list.filter(function(_a) { + return (_this.searchRe.test(_a.desc) || _this.searchRe.test(_a.title)); + }); + if (list.length) { + this._Popcorn.trigger("IriSP.search.matchFound"); + } else { + this._Popcorn.trigger("IriSP.search.noMatchFound"); + } + } + list = IriSP.underscore(list) .chain() .sortBy(function(_o) { @@ -176,7 +234,7 @@ } l.push(obj); } - + this._ajax_cache = l; this.do_redraw(l); }; IriSP.AnnotationsListWidget.prototype.draw = function() { @@ -192,16 +250,15 @@ this.annotations_ids.push(annotations[i]["id"]); } - this.drawList(); - var _this = this; - if (!this.ajax_mode) { - var _throttled = IriSP.underscore.throttle(function() { - _this.drawList(); - }, 1500); - this._Popcorn.listen("IriSP.createAnnotationWidget.addedAnnotation", _throttled); - this._Popcorn.listen("timeupdate", _throttled); + if (!this.ajax_mode) { + var _throttled = IriSP.underscore.throttle(function() { + _this.drawList(); + }, 1500); + _throttled(); + this._Popcorn.listen("IriSP.createAnnotationWidget.addedAnnotation", _throttled); + this._Popcorn.listen("timeupdate", _throttled); } else { /* update the widget when the video has finished loading and when it's seeked and paused */ this._Popcorn.listen("seeked", IriSP.wrap(this, this.ajaxRedraw));