diff -r 8dfeaec4724b -r a06527b99f22 src/js/widgets/sparklineWidget.js --- a/src/js/widgets/sparklineWidget.js Fri Dec 23 12:47:17 2011 +0100 +++ b/src/js/widgets/sparklineWidget.js Fri Dec 23 15:44:16 2011 +0100 @@ -13,23 +13,60 @@ }; +/** draw the sparkline using jquery sparkline */ IriSP.SparklineWidget.prototype.draw = function() { - var templ = Mustache.to_html(IriSP.SparklineWidget_template, {}); + var templ = Mustache.to_html(IriSP.SparklineWidget_template, {width: this.width, height: this.height}); /** this widget uses three divs - the first is the sparkline, which is generated by jquery sparkline, the second is an overlay div to display the progression in the video, and the third is a div to react to clicks */ + + /* we suppose that a column is 5 pixels wide */ + var num_columns = (this.selector.width()) / 10; + var duration = +this._serializer.currentMedia().meta["dc:duration"]; + var time_step = duration / num_columns; /* the time interval between two columns */ + var results = []; + var i = 0; /* the index in the loop */ + + /* this algorithm makes one assumption : that the array is sorted + (it's done for us by the JSONSerializer). We go through the array + and count how many comments fall within a peculiar time piece. + As i is preserved between each iteration, it's O(n). + */ + for(var j = 0; j < num_columns; j++) { + var count = 0; + + var annotation_begin = +(this._serializer._data.annotations[i].begin); + + while(annotation_begin >= j * time_step && annotation_begin <= (j + 1) * time_step ) { + count++; + i++; + if (i >= this._serializer._data.annotations.length) + break; + + annotation_begin = +(this._serializer._data.annotations[i].begin); + + } + + results.push(count); + } + this.selector.append(templ); - this.selector.find(".Ldt-sparkLine").sparkline([1, 34, 56, 45, 34, 67, 78, 84], {width: "640px", height: "60px"}); + this.selector.find(".Ldt-sparkLine").css("background", "#c7c8cc"); + this.selector.find(".Ldt-sparkLine").sparkline(results, {lineColor: "#7492b4", fillColor: "#aeaeb8", + spotColor: "#b70056", + width: this.width, height: this.height}); this._Popcorn.listen("timeupdate", IriSP.wrap(this, this.timeUpdateHandler)); + + this.spacer.css("height", "2px"); }; /** react to a timeupdate event */ IriSP.SparklineWidget.prototype.timeUpdateHandler = function() { var currentTime = this._Popcorn.currentTime(); var duration = +this._serializer.currentMedia().meta["dc:duration"] / 1000; - var proportion = ((currentTime / duration) * 100).toFixed(3); - + var proportion = ((currentTime / duration) * 100).toFixed(4); + IriSP.jQuery(".Ldt-sparkLinePositionMarker").css("width", proportion + "%"); }