client/js/ldtjson-bin.js
changeset 64 3a5a9421687b
parent 61 cf48c6d69717
child 66 9b459e41e2df
--- a/client/js/ldtjson-bin.js	Thu Feb 14 17:39:52 2013 +0100
+++ b/client/js/ldtjson-bin.js	Thu Feb 21 17:36:29 2013 +0100
@@ -17,6 +17,7 @@
     this.proj_id = _opts.project_id;
     this.ldt_platform = _opts.ldt_platform || "http://ldt.iri.centrepompidou.fr/";
     this.title_$.html(_opts.title);
+    this.title_icon_$.addClass('Rk-Ldt-Title-Icon');
     this.refresh();
 }
 
@@ -122,4 +123,137 @@
             _this.render();
         }
     });
+}
+
+Rkns.Ldt.Search = function(_renkan, _opts) {
+    this.renkan = _renkan;
+    this.lang = _opts.lang || "en";
+}
+
+Rkns.Ldt.Search.prototype.getBgClass = function() {
+    return "Rk-Ldt-Icon";
+}
+
+Rkns.Ldt.Search.prototype.getSearchTitle = function() {
+    return this.renkan.l10n.search_ldt;
+}
+
+Rkns.Ldt.Search.prototype.search = function(_q) {
+    this.renkan.tabs.push(
+        new Rkns.Ldt.ResultsBin(this.renkan, {
+            search: _q
+        })
+    );
+}
+
+Rkns.Ldt.ResultsBin = Rkns.Utils.inherit(Rkns._BaseBin);
+
+Rkns.Ldt.ResultsBin.prototype.segmentTemplate = Rkns._.template(
+    '<li class="Rk-Bin-Item" data-image="<%=image%>" data-uri="<%=ldt_platform%>ldtplatform/ldt/front/player/<%=mediaid%>/<%=projectid%>/<%=cuttingid%>/#id=<%=annotationid%>" data-title="<%-title%>" data-description="<%-description%>">'
+    + '<img class="Rk-Ldt-Annotation-Icon" src="<%=image%>"/><h4><%=htitle%></h4><p><%=hdescription%></p><p>Start: <%=start%>, End: <%=end%>, Duration: <%=duration%></p><div class="Rk-Clear"></div></li>'
+);
+
+Rkns.Ldt.ResultsBin.prototype._init = function(_renkan, _opts) {
+    this.renkan = _renkan;
+    this.ldt_platform = _opts.ldt_platform || "http://ldt.iri.centrepompidou.fr/";
+    this.max_results = _opts.max_results || 50;
+    this.search = _opts.search;
+    this.title_$.html('Lignes de Temps: "' + _opts.search + '"');
+    this.title_icon_$.addClass('Rk-Ldt-Title-Icon');
+    this.refresh();
+}
+
+Rkns.Ldt.ResultsBin.prototype.render = function(searchstr) {
+    if (searchstr) {
+        var rxbase = searchstr.replace(/(\W)/g,'\\$1'),
+            _rgxp = new RegExp('('+rxbase+')','gi'),
+            rxtest = new RegExp(rxbase,'i')
+    }
+    function highlight(_text) {
+        return searchstr ? _text.replace(_rgxp, "<span class='searchmatch'>$1</span>") : _text;
+    }
+    function convertTC(_ms) {
+        function pad(_n) {
+            var _res = _n.toString();
+            while (_res.length < 2) {
+                _res = '0' + _res;
+            }
+            return _res;
+        }
+        var _totalSeconds = Math.abs(Math.floor(_ms/1000)),
+            _hours = Math.floor(_totalSeconds / 3600),
+            _minutes = (Math.floor(_totalSeconds / 60) % 60),
+            _seconds = _totalSeconds % 60,
+            _res = '';
+        if (_hours) {
+            _res += pad(_hours) + ':'
+        }
+        _res += pad(_minutes) + ':' + pad(_seconds);
+        return _res;
+    }
+    
+    var _html = '',
+        _this = this,
+        count = 0;
+    Rkns._(_this.data.objects).each(function(_segment) {
+        var _description = _segment.abstract,
+            _title = _segment.title;
+        if (searchstr && !rxtest.test(_title) && !rxtest.test(_description)) {
+            return;
+        }
+        count++;
+        var _duration = _segment.duration,
+            _begin = _segment.start_ts,
+            _end = + _segment.duration + _begin
+            _img = (
+                _duration
+                ? _this.renkan.static_url + "img/ldt-segment.png"
+                : _this.renkan.static_url + "img/ldt-point.png"
+            );
+        _html += _this.segmentTemplate({
+            ldt_platform: _this.ldt_platform,
+            title: _title,
+            htitle: highlight(_title),
+            description: _description,
+            hdescription: highlight(_description),
+            start: convertTC(_begin),
+            end: convertTC(_end),
+            duration: convertTC(_duration),
+            mediaid: _segment.iri_id,
+            projectid: _segment.project_id,
+            cuttingid: _segment.cutting_id,
+            annotationid: _segment.element_id,
+            image: _img
+        });
+    });
+    
+    this.main_$.html(_html);
+    if (searchstr && count) {
+        this.count_$.text(count).show();
+    } else {
+        this.count_$.hide();
+    }
+    if (searchstr && !count) {
+        this.$.hide();
+    } else {
+        this.$.show();
+    }
+    this.renkan.resizeBins();
+}
+
+Rkns.Ldt.ResultsBin.prototype.refresh = function() {
+    var _this = this;
+    Rkns.$.ajax({
+        url: this.ldt_platform + 'ldtplatform/api/ldt/1.0/segments/search/',
+        data: {
+            format: "jsonp",
+            q: this.search,
+            limit: this.max_results
+        },
+        dataType: "jsonp",
+        success: function(_data) {
+            _this.data = _data;
+            _this.render();
+        }
+    });
 }
\ No newline at end of file