src/js/widgets/slideShareWidget.js
author cavaliet
Wed, 18 Apr 2012 13:37:00 +0200
changeset 869 faae5df935de
parent 862 71d80cda96de
child 871 a5607fa1ef0b
permissions -rw-r--r--
update slide share widget with flash embed and js slide number control.
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
  
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
    12
  var templ = Mustache.to_html(IriSP.slideShareWidget_template);
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
    13
  this.selector.append(templ);
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
    14
  
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
    15
  // Synchro management
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
    16
  this._disableUpdate = false;
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
    17
  this.selector.find('.sync_on').click(function(event) { self.syncHandler.call(self, event); });
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
    18
  this.selector.find('.sync_off').click(function(event) { self.unSyncHandler.call(self, event); });
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
    19
  
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
    20
  // global variables used to keep the position and width of the zone.  
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
    21
  this.zoneLeft = 0;
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
    22
  this.zoneWidth = 0;
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
    23
  // 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
    24
  this.lastSSFullUrl = "";
faae5df935de update slide share widget with flash embed and js slide number control.
cavaliet
parents: 862
diff changeset
    25
  this.lastSSUrl = "";
faae5df935de update slide share widget with flash embed and js slide number control.
cavaliet
parents: 862
diff changeset
    26
  this.lastSSId = "";
861
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
    27
  this.containerDiv = this.selector.find('.SlideShareContainer');
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
    28
  
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
    29
  // Update the slide from timeupdate event
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
    30
  this._Popcorn.listen("timeupdate", IriSP.wrap(this, this.slideShareUpdater));
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
    31
  
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
    32
  this._Popcorn.listen("IriSP.SlideShareWidget.show", IriSP.wrap(this, this.show));
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
    33
  this._Popcorn.listen("IriSP.SlideShareWidget.hide", IriSP.wrap(this, this.hide));
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
    34
  
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
    35
  // Get data from "slideshare" cutting/annotation-type
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
    36
  var annotations = this._serializer._data.annotations;
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
    37
  var view_type = this._serializer.getSlideShareType();
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
    38
  if(typeof(view_type) === "undefined") {
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
    39
    return;  
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
    40
  }
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
    41
  var i = 0;
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
    42
  this.segments_slides = [];
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
    43
  var nb_annot = annotations.length;
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
    44
  for (i = 0; i < nb_annot; i++) {
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
    45
    var annotation = annotations[i];
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
    46
    /* filter the annotations whose type is not the one we want */
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
    47
    if (view_type != "" && typeof(annotation.meta) !== "undefined" && typeof(annotation.meta["id-ref"]) !== "undefined"
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
    48
          && annotation.meta["id-ref"] != view_type) {
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
    49
        continue;
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
    50
    }
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
    51
    this.segments_slides.push(annotation);
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
    52
  }
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
    53
};
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
    54
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
    55
/* update the slider and the position marker as time passes */
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
    56
IriSP.SlideShareWidget.prototype.slideShareUpdater = function() {
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
    57
  // If it is asked not to synchronize, we do nothing
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
    58
  if(this._disableUpdate)
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
    59
    return;
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
    60
  
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
    61
  var self = this;
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
    62
  
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
    63
  // We search if a segments_slides is in the current timecode
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
    64
  var time = this._Popcorn.currentTime() * 1000;
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
    65
  var nb_slides = this.segments_slides.length;
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
    66
  var found = false;
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
    67
  for (i = 0; i < nb_slides; i++) {
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
    68
    var segment_slide = this.segments_slides[i];
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
    69
    if(segment_slide.begin<time && time<segment_slide.end){
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
    70
    	found = true;
869
faae5df935de update slide share widget with flash embed and js slide number control.
cavaliet
parents: 862
diff changeset
    71
    	if(segment_slide.content.description!=this.lastSSFullUrl){
861
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
    72
			// 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
    73
    		this.lastSSFullUrl = segment_slide.content.description;
faae5df935de update slide share widget with flash embed and js slide number control.
cavaliet
parents: 862
diff changeset
    74
    		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
    75
    		var slideNb = 1;
faae5df935de update slide share widget with flash embed and js slide number control.
cavaliet
parents: 862
diff changeset
    76
    		if(description_ar[1]){
faae5df935de update slide share widget with flash embed and js slide number control.
cavaliet
parents: 862
diff changeset
    77
    			slideNb = description_ar[1];
faae5df935de update slide share widget with flash embed and js slide number control.
cavaliet
parents: 862
diff changeset
    78
    		}
faae5df935de update slide share widget with flash embed and js slide number control.
cavaliet
parents: 862
diff changeset
    79
    		if(description_ar[0]!=this.lastSSUrl){
faae5df935de update slide share widget with flash embed and js slide number control.
cavaliet
parents: 862
diff changeset
    80
    			this.lastSSUrl = description_ar[0];
faae5df935de update slide share widget with flash embed and js slide number control.
cavaliet
parents: 862
diff changeset
    81
	    		// We have the slideshare oembed url.
faae5df935de update slide share widget with flash embed and js slide number control.
cavaliet
parents: 862
diff changeset
    82
	    		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
    83
	    		
faae5df935de update slide share widget with flash embed and js slide number control.
cavaliet
parents: 862
diff changeset
    84
	    		IriSP.jQuery.ajax({
faae5df935de update slide share widget with flash embed and js slide number control.
cavaliet
parents: 862
diff changeset
    85
					url: url,
faae5df935de update slide share widget with flash embed and js slide number control.
cavaliet
parents: 862
diff changeset
    86
					dataType: "jsonp",
faae5df935de update slide share widget with flash embed and js slide number control.
cavaliet
parents: 862
diff changeset
    87
					success: function(data) {
faae5df935de update slide share widget with flash embed and js slide number control.
cavaliet
parents: 862
diff changeset
    88
						self.lastSSId = data["slideshow_id"];
faae5df935de update slide share widget with flash embed and js slide number control.
cavaliet
parents: 862
diff changeset
    89
						embed_code = data["html"];
faae5df935de update slide share widget with flash embed and js slide number control.
cavaliet
parents: 862
diff changeset
    90
						// 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
    91
						if(slideNb){
faae5df935de update slide share widget with flash embed and js slide number control.
cavaliet
parents: 862
diff changeset
    92
							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
    93
						}
faae5df935de update slide share widget with flash embed and js slide number control.
cavaliet
parents: 862
diff changeset
    94
						self.containerDiv.html(embed_code);
faae5df935de update slide share widget with flash embed and js slide number control.
cavaliet
parents: 862
diff changeset
    95
					},
faae5df935de update slide share widget with flash embed and js slide number control.
cavaliet
parents: 862
diff changeset
    96
					error: function(jqXHR, textStatus, errorThrown){
faae5df935de update slide share widget with flash embed and js slide number control.
cavaliet
parents: 862
diff changeset
    97
						self.containerDiv.html("Error while downloading the slideshow. jqXHR = " + jqXHR + ", textStatus = " + textStatus + ", errorThrown = " + errorThrown);
861
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
    98
					}
869
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
    		}
faae5df935de update slide share widget with flash embed and js slide number control.
cavaliet
parents: 862
diff changeset
   101
    		else{
faae5df935de update slide share widget with flash embed and js slide number control.
cavaliet
parents: 862
diff changeset
   102
    			// 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
   103
    			if(this.lastSSId!=""){
faae5df935de update slide share widget with flash embed and js slide number control.
cavaliet
parents: 862
diff changeset
   104
    				// We get the embed flash element
faae5df935de update slide share widget with flash embed and js slide number control.
cavaliet
parents: 862
diff changeset
   105
    				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
   106
    				if(embed){
faae5df935de update slide share widget with flash embed and js slide number control.
cavaliet
parents: 862
diff changeset
   107
    					embed.jumpTo(parseInt(slideNb));
faae5df935de update slide share widget with flash embed and js slide number control.
cavaliet
parents: 862
diff changeset
   108
    				}
faae5df935de update slide share widget with flash embed and js slide number control.
cavaliet
parents: 862
diff changeset
   109
    			}
faae5df935de update slide share widget with flash embed and js slide number control.
cavaliet
parents: 862
diff changeset
   110
    		}
861
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
   111
    		return;
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
   112
    	}
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
   113
    }
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
   114
  }
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
   115
  if(found==false){
869
faae5df935de update slide share widget with flash embed and js slide number control.
cavaliet
parents: 862
diff changeset
   116
	this.lastSSFullUrl = "";
faae5df935de update slide share widget with flash embed and js slide number control.
cavaliet
parents: 862
diff changeset
   117
	this.lastSSUrl = "";
faae5df935de update slide share widget with flash embed and js slide number control.
cavaliet
parents: 862
diff changeset
   118
	this.lastSSId = "";
861
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
   119
  	this.containerDiv.html("");
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
   120
  }
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
   121
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
   122
};
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
   123
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
   124
// Functions to stop or trigger sync between timeupdate event and slides        
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
   125
IriSP.SlideShareWidget.prototype.unSyncHandler = function(params) {
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
   126
	//console.log("slideShare NO SYNC !");
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
   127
	this._disableUpdate = true;
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
   128
};
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
   129
IriSP.SlideShareWidget.prototype.syncHandler = function(params) {
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
   130
	//console.log("slideShare SYNC PLEASE !");
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
   131
	this._disableUpdate = false;
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
   132
};
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
   133
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
   134
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
   135
/** responds to an "IriSP.SlideShareWidget.position" message
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
   136
    @param params an array with the first element being the left distance in
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
   137
           percents and the second element the width of the slice in pixels
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
   138
*/        
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
   139
IriSP.SlideShareWidget.prototype.positionSlideShareHandler = function(params) {
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
   140
  //console.log("positionSlideShareHandler");
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
   141
};
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
   142
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
   143
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
   144
IriSP.SlideShareWidget.prototype.show = function() {
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
   145
  this.selector.show();
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
   146
};
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
   147
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
   148
IriSP.SlideShareWidget.prototype.hide = function() {
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
   149
  this.selector.hide();
05f75ca6b5de Add slide share widget.
cavaliet
parents:
diff changeset
   150
};