summaryrefslogtreecommitdiff
path: root/chimere/static/jme/plugins/timerange.js
diff options
context:
space:
mode:
Diffstat (limited to 'chimere/static/jme/plugins/timerange.js')
-rw-r--r--chimere/static/jme/plugins/timerange.js165
1 files changed, 165 insertions, 0 deletions
diff --git a/chimere/static/jme/plugins/timerange.js b/chimere/static/jme/plugins/timerange.js
new file mode 100644
index 0000000..e01352b
--- /dev/null
+++ b/chimere/static/jme/plugins/timerange.js
@@ -0,0 +1,165 @@
+/**
+ * timerange plugin for the jMediaelement project | http://github.com/aFarkas/jMediaelement
+ * @author Alexander Farkas
+ * Copyright 2010, Alexander Farkas
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ *
+ *
+ * $('video').addTimeRange('timeRangeID-1', {
+ * enter: 1,
+ * leave: 12,
+ * callback:function(e){
+ * console.log(e);
+ * }
+ * }
+ * );
+ *
+ * $('video').addTimeRange('timeRangeID-1', {
+ * enter: 23,
+ * leave: 26
+ * }
+ * );
+ *
+ * $('video').addTimeRange('timeRangeID-2', {
+ * enter: 3,
+ * leave: 21
+ * }
+ * );
+ *
+ * $('video').addTimeRange('timeRangeID-2', {
+ * enter: 25,
+ * leave: 31,
+ * callback:function(e){
+ * console.log(e);
+ * }
+ * }
+ * );
+ */
+(function($){
+ function isBetweenRange(elem, timerange, time){
+ if(!timerange.active){return;}
+
+ var e = {time: time};
+
+ if(!timerange.entered){
+ var i = timerange.lastIndex,
+ len = timerange.enterRanges.length,
+ createEvent = function(index){
+ e.rangeEnter = timerange.enterRanges[index];
+ e.rangeLeave = timerange.leaveRanges[index];
+ e.rangeIndex = index;
+ timerange.lastIndex = e.rangeIndex;
+ timerange.lastTime = timerange.enterRanges[index];
+ e.type = 'rangeenter';
+ timerange.entered = [ e.rangeEnter, e.rangeLeave, e.rangeIndex ];
+ }
+ ;
+ if(timerange.lastTime > time){
+ while(i--){
+ if(timerange.enterRanges[i] <= time && timerange.leaveRanges[i] >= time){
+ createEvent(i);
+ break;
+ } else if(timerange.leaveRanges[i] < time){
+ timerange.lastIndex = i;
+ timerange.lastTime = timerange.enterRanges[i];
+ break;
+ }
+ }
+ } else {
+ for(; i < len; i++){
+ if(timerange.enterRanges[i] <= time && timerange.leaveRanges[i] >= time){
+ createEvent(i);
+ break;
+ } else if(timerange.leaveRanges[i] > time){
+ if(timerange.enterRanges[i] < time){
+ timerange.lastIndex = i;
+ timerange.lastTime = timerange.leaveRanges[i];
+ }
+ break;
+ }
+ }
+ }
+ } else if(time < timerange.entered[0] || timerange.entered[1] < time){
+ e.rangeEnter = timerange.entered[0];
+ e.rangeLeave = timerange.entered[1];
+ e.rangeIndex = timerange.entered[2];
+ e.type = 'rangeleave';
+ timerange.entered = false;
+ }
+ if(e.type){
+ if(timerange.callback){
+ timerange.callback.call(elem, e );
+ }
+ $(elem).triggerHandler(e);
+ }
+
+ }
+
+ var numsort = function(a, b) {
+ return a - b;
+ };
+
+ $.fn.addTimeRange = function(name, o){
+ if(typeof o === 'boolean'){
+ o = {activate: o};
+ }
+
+ o = $.extend({}, $.fn.addTimeRange.defaults, o);
+
+ return this.each(function(){
+ var api = $.data(this, 'mediaElemSupport');
+ if(!api){
+ return;
+ }
+ if(!api.timeRanges){
+ api.timeRanges = {};
+ }
+
+ if(!api.timeRanges[name]){
+ api.timeRanges[name] = {
+ enterRanges: [],
+ leaveRanges: [],
+ lastIndex: 0,
+ lastTime: 0,
+ entered: false,
+ active: false,
+ callback: o.callback
+ };
+ }
+
+ if(o.callback){
+ api.timeRanges[name].callback = o.callback;
+ }
+ if( typeof o.enter !== 'boolean' && isFinite(o.enter) && typeof o.leave !== 'boolean' && isFinite(o.leave) ) {
+ api.timeRanges[name].enterRanges.push(o.enter);
+ api.timeRanges[name].leaveRanges.push(o.leave);
+ }
+
+ if(o.activate && !api.timeRanges[name].active){
+ api.timeRanges[name].active = true;
+ $(this).bind('timechange.'+name, function(e, evt){
+ isBetweenRange(this, api.timeRanges[name], evt.time);
+ });
+ } else if(!o.activate && api.timeRanges[name].active){
+ api.timeRanges[name].active = false;
+ api.timeRanges[name].entered = false;
+ $(this).unbind('timechange.'+ name);
+ }
+
+
+ if(o.resort){
+ api.timeRanges[name].enterRanges.sort(numsort);
+ api.timeRanges[name].leaveRanges.sort(numsort);
+ }
+
+ });
+ };
+
+ $.fn.addTimeRange.defaults = {
+ enter: false,
+ leave: false,
+ callback: false,
+ resort: false,
+ activate: true
+ };
+})(jQuery);