src/js/widgets/slideShareWidget.js
author cavaliet
Thu, 19 Apr 2012 15:47:34 +0200
changeset 871 a5607fa1ef0b
parent 869 faae5df935de
child 877 2e9467422f64
permissions -rw-r--r--
Enhance SlideShare widget for it to point the a specified div (like annotationListWidget).
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
861
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
     1
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
     2
/** A widget to display slide show from embed slide share */
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
     3
IriSP.SlideShareWidget = function(Popcorn, config, Serializer) {
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
     4
  IriSP.Widget.call(this, Popcorn, config, Serializer);
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
     5
};
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
     6
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
     7
IriSP.SlideShareWidget.prototype = new IriSP.Widget();
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
     8
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
     9
IriSP.SlideShareWidget.prototype.draw = function() {
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
    10
  var self = this;
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
    11
  
871
a5607fa1ef0b Enhance SlideShare widget for it to point the a specified div (like annotationListWidget).
cavaliet
parents: 869
diff changeset
    12
  // If the div supposed to host the slides does not exist, we cancel
a5607fa1ef0b Enhance SlideShare widget for it to point the a specified div (like annotationListWidget).
cavaliet
parents: 869
diff changeset
    13
  if(this.selector.length==0){
a5607fa1ef0b Enhance SlideShare widget for it to point the a specified div (like annotationListWidget).
cavaliet
parents: 869
diff changeset
    14
	  if(console){ if(console.log){ console.log("No div for slideshare widget, this widget is canceled. id = " + this._id); } }
a5607fa1ef0b Enhance SlideShare widget for it to point the a specified div (like annotationListWidget).
cavaliet
parents: 869
diff changeset
    15
	  return;
a5607fa1ef0b Enhance SlideShare widget for it to point the a specified div (like annotationListWidget).
cavaliet
parents: 869
diff changeset
    16
  }
861
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
    17
  var templ = Mustache.to_html(IriSP.slideShareWidget_template);
871
a5607fa1ef0b Enhance SlideShare widget for it to point the a specified div (like annotationListWidget).
cavaliet
parents: 869
diff changeset
    18
  this.selector.html(templ);
861
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
    19
  
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
    20
  // Synchro management
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
    21
  this._disableUpdate = false;
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
    22
  this.selector.find('.sync_on').click(function(event) { self.syncHandler.call(self, event); });
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
    23
  this.selector.find('.sync_off').click(function(event) { self.unSyncHandler.call(self, event); });
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
    24
  
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
    25
  // global variables used to keep the position and width of the zone.  
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
    26
  this.zoneLeft = 0;
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
    27
  this.zoneWidth = 0;
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
    28
  // global variable to save the last slide url
869
faae5df935de update slide share widget with flash embed and js slide number control.
cavaliet
parents: 862
diff changeset
    29
  this.lastSSFullUrl = "";
faae5df935de update slide share widget with flash embed and js slide number control.
cavaliet
parents: 862
diff changeset
    30
  this.lastSSUrl = "";
faae5df935de update slide share widget with flash embed and js slide number control.
cavaliet
parents: 862
diff changeset
    31
  this.lastSSId = "";
861
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
    32
  this.containerDiv = this.selector.find('.SlideShareContainer');
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
    33
  
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
    34
  // Update the slide from timeupdate event
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
    35
  this._Popcorn.listen("timeupdate", IriSP.wrap(this, this.slideShareUpdater));
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
    36
  
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
    37
  this._Popcorn.listen("IriSP.SlideShareWidget.show", IriSP.wrap(this, this.show));
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
    38
  this._Popcorn.listen("IriSP.SlideShareWidget.hide", IriSP.wrap(this, this.hide));
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
    39
  
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
    40
  // Get data from "slideshare" cutting/annotation-type
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
    41
  var annotations = this._serializer._data.annotations;
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
    42
  var view_type = this._serializer.getSlideShareType();
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
    43
  if(typeof(view_type) === "undefined") {
871
a5607fa1ef0b Enhance SlideShare widget for it to point the a specified div (like annotationListWidget).
cavaliet
parents: 869
diff changeset
    44
	  if(console){ if(console.log){ console.log("No annotation-type for slideshare widget, this widget is canceled."); } }
a5607fa1ef0b Enhance SlideShare widget for it to point the a specified div (like annotationListWidget).
cavaliet
parents: 869
diff changeset
    45
	  return;
861
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
    46
  }
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
    47
  var i = 0;
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
    48
  this.segments_slides = [];
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
    49
  var nb_annot = annotations.length;
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
    50
  for (i = 0; i < nb_annot; i++) {
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
    51
    var annotation = annotations[i];
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
    52
    /* filter the annotations whose type is not the one we want */
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
    53
    if (view_type != "" && typeof(annotation.meta) !== "undefined" && typeof(annotation.meta["id-ref"]) !== "undefined"
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
    54
          && annotation.meta["id-ref"] != view_type) {
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
    55
        continue;
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
    56
    }
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
    57
    this.segments_slides.push(annotation);
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
    58
  }
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
    59
};
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
    60
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
    61
/* update the slider and the position marker as time passes */
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
    62
IriSP.SlideShareWidget.prototype.slideShareUpdater = function() {
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
    63
  // If it is asked not to synchronize, we do nothing
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
    64
  if(this._disableUpdate)
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
    65
    return;
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
    66
  
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
    67
  var self = this;
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
    68
  
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
    69
  // We search if a segments_slides is in the current timecode
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
    70
  var time = this._Popcorn.currentTime() * 1000;
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
    71
  var nb_slides = this.segments_slides.length;
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
    72
  var found = false;
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
    73
  for (i = 0; i < nb_slides; i++) {
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
    74
    var segment_slide = this.segments_slides[i];
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
    75
    if(segment_slide.begin<time && time<segment_slide.end){
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
    76
    	found = true;
869
faae5df935de update slide share widget with flash embed and js slide number control.
cavaliet
parents: 862
diff changeset
    77
    	if(segment_slide.content.description!=this.lastSSFullUrl){
861
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
    78
			// The url is like http://stuf.com#X and X is the slide number. So we split and save it.
869
faae5df935de update slide share widget with flash embed and js slide number control.
cavaliet
parents: 862
diff changeset
    79
    		this.lastSSFullUrl = segment_slide.content.description;
faae5df935de update slide share widget with flash embed and js slide number control.
cavaliet
parents: 862
diff changeset
    80
    		var description_ar = this.lastSSFullUrl.split("#id=");
faae5df935de update slide share widget with flash embed and js slide number control.
cavaliet
parents: 862
diff changeset
    81
    		var slideNb = 1;
faae5df935de update slide share widget with flash embed and js slide number control.
cavaliet
parents: 862
diff changeset
    82
    		if(description_ar[1]){
faae5df935de update slide share widget with flash embed and js slide number control.
cavaliet
parents: 862
diff changeset
    83
    			slideNb = description_ar[1];
faae5df935de update slide share widget with flash embed and js slide number control.
cavaliet
parents: 862
diff changeset
    84
    		}
faae5df935de update slide share widget with flash embed and js slide number control.
cavaliet
parents: 862
diff changeset
    85
    		if(description_ar[0]!=this.lastSSUrl){
faae5df935de update slide share widget with flash embed and js slide number control.
cavaliet
parents: 862
diff changeset
    86
    			this.lastSSUrl = description_ar[0];
faae5df935de update slide share widget with flash embed and js slide number control.
cavaliet
parents: 862
diff changeset
    87
	    		// We have the slideshare oembed url.
faae5df935de update slide share widget with flash embed and js slide number control.
cavaliet
parents: 862
diff changeset
    88
	    		var url = "http://www.slideshare.net/api/oembed/1?format=jsonp&url=" + this.lastSSUrl;
faae5df935de update slide share widget with flash embed and js slide number control.
cavaliet
parents: 862
diff changeset
    89
	    		
faae5df935de update slide share widget with flash embed and js slide number control.
cavaliet
parents: 862
diff changeset
    90
	    		IriSP.jQuery.ajax({
faae5df935de update slide share widget with flash embed and js slide number control.
cavaliet
parents: 862
diff changeset
    91
					url: url,
faae5df935de update slide share widget with flash embed and js slide number control.
cavaliet
parents: 862
diff changeset
    92
					dataType: "jsonp",
faae5df935de update slide share widget with flash embed and js slide number control.
cavaliet
parents: 862
diff changeset
    93
					success: function(data) {
faae5df935de update slide share widget with flash embed and js slide number control.
cavaliet
parents: 862
diff changeset
    94
						self.lastSSId = data["slideshow_id"];
faae5df935de update slide share widget with flash embed and js slide number control.
cavaliet
parents: 862
diff changeset
    95
						embed_code = data["html"];
faae5df935de update slide share widget with flash embed and js slide number control.
cavaliet
parents: 862
diff changeset
    96
						// If slideNb exist, we hack the embed code to add ?startSlide=X
faae5df935de update slide share widget with flash embed and js slide number control.
cavaliet
parents: 862
diff changeset
    97
						if(slideNb){
faae5df935de update slide share widget with flash embed and js slide number control.
cavaliet
parents: 862
diff changeset
    98
							embed_code = embed_code.replace(new RegExp("ssplayer2.swf\\?","g"), "ssplayer2.swf?startSlide=" + slideNb + "&");
faae5df935de update slide share widget with flash embed and js slide number control.
cavaliet
parents: 862
diff changeset
    99
						}
faae5df935de update slide share widget with flash embed and js slide number control.
cavaliet
parents: 862
diff changeset
   100
						self.containerDiv.html(embed_code);
faae5df935de update slide share widget with flash embed and js slide number control.
cavaliet
parents: 862
diff changeset
   101
					},
faae5df935de update slide share widget with flash embed and js slide number control.
cavaliet
parents: 862
diff changeset
   102
					error: function(jqXHR, textStatus, errorThrown){
faae5df935de update slide share widget with flash embed and js slide number control.
cavaliet
parents: 862
diff changeset
   103
						self.containerDiv.html("Error while downloading the slideshow. jqXHR = " + jqXHR + ", textStatus = " + textStatus + ", errorThrown = " + errorThrown);
861
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
   104
					}
869
faae5df935de update slide share widget with flash embed and js slide number control.
cavaliet
parents: 862
diff changeset
   105
	    		});
faae5df935de update slide share widget with flash embed and js slide number control.
cavaliet
parents: 862
diff changeset
   106
    		}
faae5df935de update slide share widget with flash embed and js slide number control.
cavaliet
parents: 862
diff changeset
   107
    		else{
faae5df935de update slide share widget with flash embed and js slide number control.
cavaliet
parents: 862
diff changeset
   108
    			// If the presentation was already loaded, we only use the ss js api to load the wanted slide number
faae5df935de update slide share widget with flash embed and js slide number control.
cavaliet
parents: 862
diff changeset
   109
    			if(this.lastSSId!=""){
faae5df935de update slide share widget with flash embed and js slide number control.
cavaliet
parents: 862
diff changeset
   110
    				// We get the embed flash element
faae5df935de update slide share widget with flash embed and js slide number control.
cavaliet
parents: 862
diff changeset
   111
    				var embed = document.getElementsByName("__sse" + this.lastSSId)[0];
faae5df935de update slide share widget with flash embed and js slide number control.
cavaliet
parents: 862
diff changeset
   112
    				if(embed){
faae5df935de update slide share widget with flash embed and js slide number control.
cavaliet
parents: 862
diff changeset
   113
    					embed.jumpTo(parseInt(slideNb));
faae5df935de update slide share widget with flash embed and js slide number control.
cavaliet
parents: 862
diff changeset
   114
    				}
faae5df935de update slide share widget with flash embed and js slide number control.
cavaliet
parents: 862
diff changeset
   115
    			}
faae5df935de update slide share widget with flash embed and js slide number control.
cavaliet
parents: 862
diff changeset
   116
    		}
861
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
   117
    		return;
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
   118
    	}
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
   119
    }
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
   120
  }
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
   121
  if(found==false){
869
faae5df935de update slide share widget with flash embed and js slide number control.
cavaliet
parents: 862
diff changeset
   122
	this.lastSSFullUrl = "";
faae5df935de update slide share widget with flash embed and js slide number control.
cavaliet
parents: 862
diff changeset
   123
	this.lastSSUrl = "";
faae5df935de update slide share widget with flash embed and js slide number control.
cavaliet
parents: 862
diff changeset
   124
	this.lastSSId = "";
861
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
   125
  	this.containerDiv.html("");
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
   126
  }
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
   127
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
   128
};
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
   129
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
   130
// Functions to stop or trigger sync between timeupdate event and slides        
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
   131
IriSP.SlideShareWidget.prototype.unSyncHandler = function(params) {
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
   132
	//console.log("slideShare NO SYNC !");
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
   133
	this._disableUpdate = true;
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
   134
};
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
   135
IriSP.SlideShareWidget.prototype.syncHandler = function(params) {
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
   136
	//console.log("slideShare SYNC PLEASE !");
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
   137
	this._disableUpdate = false;
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
   138
};
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
   139
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
   140
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
   141
/** responds to an "IriSP.SlideShareWidget.position" message
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
   142
    @param params an array with the first element being the left distance in
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
   143
           percents and the second element the width of the slice in pixels
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
   144
*/        
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
   145
IriSP.SlideShareWidget.prototype.positionSlideShareHandler = function(params) {
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
   146
  //console.log("positionSlideShareHandler");
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
   147
};
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
   148
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
   149
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
   150
IriSP.SlideShareWidget.prototype.show = function() {
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
   151
  this.selector.show();
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
   152
};
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
   153
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
   154
IriSP.SlideShareWidget.prototype.hide = function() {
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
   155
  this.selector.hide();
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
   156
};