added a modules dir to the build. moved mediafragment.js module inside it. popcorn-port
authorhamidouk
Wed, 14 Dec 2011 16:37:04 +0100
branchpopcorn-port
changeset 462 3583ef3b208b
parent 461 a9c5eeca190c
child 463 7ef123b2410f
added a modules dir to the build. moved mediafragment.js module inside it.
sbin/build/client.xml
src/js/modules/mediafragment.js
--- a/sbin/build/client.xml	Wed Dec 14 14:56:40 2011 +0100
+++ b/sbin/build/client.xml	Wed Dec 14 16:37:04 2011 +0100
@@ -84,7 +84,10 @@
     	<filelist dir="../../src/js" files="pop.js utils.js data.js site.js ui.js widgets.js modules.js layout.js init.js" />
 
       <!-- modules -->
-    	<filelist dir="../../src/js" files="mediafragment" />
+			<fileset dir="../../src/js/modules" casesensitive="yes">
+					<include name="**/*.js"/>					
+			</fileset>
+
 
       <!-- widgets -->
 			<fileset dir="../../src/js/widgets" casesensitive="yes">
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/js/modules/mediafragment.js	Wed Dec 14 16:37:04 2011 +0100
@@ -0,0 +1,76 @@
+/* mediafragment module */
+
+IriSP.MediaFragment = function(Popcorn, config, Serializer) {
+  IriSP.Module.call(this, Popcorn, config, Serializer);
+
+  this._Popcorn.listen( "loadedmetadata", IriSP.wrap(this, IriSP.MediaFragment.advanceTime));
+//  this._Popcorn.listen( "pause", IriSP.wrap(this, IriSP.MediaFragment.updateTime));
+//  this._Popcorn.listen( "seeked", IriSP.wrap(this, IriSP.MediaFragment.updateTime));
+  this._Popcorn.listen( "IriSP.PolemicTweet.click", IriSP.wrap(this, IriSP.MediaFragment.updateAnnotation));
+  this._Popcorn.listen( "IriSP.SegmentsWidget.click", IriSP.wrap(this, IriSP.MediaFragment.updateAnnotation));
+};
+
+IriSP.MediaFragment.advanceTime = function() {
+             var url = window.location.href;
+
+              if ( url.split( "#" )[ 1 ] != null ) {
+                  pageoffset = url.split( "#" )[1];
+
+                  if ( pageoffset.substring(0, 2) === "t=") {
+                    // timecode 
+                    if ( pageoffset.substring( 2 ) != null ) {
+                    var offsettime = pageoffset.substring( 2 );
+                    this._Popcorn.currentTime( parseFloat( offsettime ) );
+                    }
+                  } else if ( pageoffset.substring(0, 2) === "a=") {
+                    // annotation
+                    var annotationId = pageoffset.substring( 2 );
+
+                    // there's no better way than that because
+                    // of possible race conditions
+                    this._serializer.sync(IriSP.wrap(this, function() {
+                          IriSP.MediaFragment.lookupAnnotation.call(this, annotationId); 
+                          }));
+                  }
+              }
+};
+
+IriSP.MediaFragment.updateTime = function() {
+  var history = window.history;
+  if ( !history.pushState ) {
+    return false;
+  }
+  
+  splitArr = window.location.href.split( "#" )
+  history.replaceState( {}, "", splitArr[0] + "#t=" + this._Popcorn.currentTime().toFixed( 2 ) );
+};
+
+
+IriSP.MediaFragment.updateAnnotation = function(annotationId) {
+  var history = window.history;
+  if ( !history.pushState ) {
+    return false;
+  }
+  
+  splitArr = window.location.href.split( "#" )
+  history.replaceState( {}, "", splitArr[0] + "#a=" + annotationId);
+ 
+};
+
+// lookup and seek to the beginning of an annotation
+IriSP.MediaFragment.lookupAnnotation = function(annotationId) {
+  var annotation = undefined;
+  var annotations = this._serializer._data.annotations;
+
+  var i;
+  for (i = 0; i < annotations.length; i++) {
+      if (annotations[i].id === annotationId) {
+        annotation = annotations[i];
+        break;
+      }
+  }
+
+  if (typeof(annotation) !== "undefined") {
+    this._Popcorn.currentTime(annotation.begin / 1000);
+  }
+};