diff -r 3ab36f402b0c -r 198c2b79f5e1 src/widgets/Slideshare.js --- a/src/widgets/Slideshare.js Thu Jan 02 16:40:25 2014 +0100 +++ b/src/widgets/Slideshare.js Thu Jan 02 16:49:20 2014 +0100 @@ -2,116 +2,129 @@ IriSP.Widgets.Slideshare = function(player, config) { IriSP.Widgets.Widget.call(this, player, config); -}; + this.lastSlide = { + presentation: "", + slide: 0 + } + this.embedObject = null; + this.oembedCache = {} +} IriSP.Widgets.Slideshare.prototype = new IriSP.Widgets.Widget(); IriSP.Widgets.Slideshare.prototype.defaults = { annotation_type: "slide", sync: true, -}; + embed_width: 400, + embed_height: 300 +} IriSP.Widgets.Slideshare.prototype.messages = { fr: { - slides_ : "Diapositives" + slides_ : "Diapositives :" }, en: { - slides_ : "Slides" + slides_ : "Slides:" } -}; +} IriSP.Widgets.Slideshare.prototype.template = '

{{l10n.slides_}}


'; IriSP.Widgets.Slideshare.prototype.draw = function() { - - function insertSlideshare(_presentation, _slide) { - if (_lastEmbedded === _presentation) { - if (_embedObject && typeof _embedObject.jumpTo === "function") { - _embedObject.jumpTo(parseInt(_slide)); - } - } else { - _lastEmbedded = _presentation; - var _id = IriSP.Model.getUID(), - _params = { - allowScriptAccess: "always" - }, - _atts = { - id: _id - }, - _flashvars = { - doc : _presentation, - startSlide : _slide - }; - $container.html('
'); - swfobject.embedSWF( - "http://static.slidesharecdn.com/swf/ssplayer2.swf", - _id, - _this.embed_width, - _this.embed_height, - "8", - null, - _flashvars, - _params, - _atts - ); - _embedObject = document.getElementById(_id); - } - $container.show(); + var _hide = false; + if (typeof this.annotation_type !== "undefined" && this.annotation_type) { + var _annType = this.source.getAnnotationTypes().searchByTitle(this.annotation_type); + _hide = !_annType.length; } - - var _annotations = this.getWidgetAnnotations(); - if (!_annotations.length) { + if (_hide) { this.$.hide(); } else { this.renderTemplate(); - var _lastPres = "", - _embedObject = null, - _oembedCache = {}, - _lastEmbedded = "", - _this = this, - $container = this.$.find(".Ldt-SlideShare-Container"); - - this.embed_width = this.embed_width || $container.innerWidth(); - this.embed_height = this.embed_height || Math.floor(this.embed_width * 3/4); - - _annotations.forEach(function(_a) { - _a.on("leave", function() { - $container.hide(); - _lastPres = ""; - }); - _a.on("enter", function() { - var _description = _a.description, - _isurl = /^https?:\/\//.test(_description), - _presentation = _description.replace(/#.*$/,''), - _slidematch = _description.match(/(#|\?|&)id=(\d+)/), - _slide = parseInt(_slidematch && _slidematch.length > 2 ? _slidematch[2] : 1); - if (_presentation !== _lastPres) { - if (_isurl) { - if (typeof _oembedCache[_presentation] === "undefined") { - var _ajaxUrl = "http://www.slideshare.net/api/oembed/1?url=" - + encodeURIComponent(_presentation) - + "&format=jsonp&callback=?"; - IriSP.jQuery.getJSON(_ajaxUrl, function(_oembedData) { - var _presmatch = _oembedData.html.match(/doc=([a-z0-9\-_%]+)/i); - if (_presmatch && _presmatch.length > 1) { - _oembedCache[_presentation] = _presmatch[1]; - insertSlideshare(_presmatch[1], _slide); - } - }); - } else { - insertSlideshare(_oembedCache[_presentation], _slide); + this.$container = this.$.find(".Ldt-SlideShare-Container"); + this.bindPopcorn("timeupdate","onTimeupdate"); + this.onTimeupdate(); + } +} + +IriSP.Widgets.Slideshare.prototype.onTimeupdate = function() { + var _list = this.getWidgetAnnotationsAtTime(); + if (_list.length) { + var _description = _list[0].description, + _isurl = /^https?:\/\//.test(_description), + _presentation = _description.replace(/#.*$/,''), + _slidematch = _description.match(/(#|\?|&)id=(\d+)/), + _slide = parseInt(_slidematch && _slidematch.length > 2 ? _slidematch[2] : 1), + _this = this; + if (_presentation !== this.lastSlide.presentation) { + if (_isurl) { + if (typeof this.oembedCache[_presentation] === "undefined") { + var _ajaxUrl = "http://www.slideshare.net/api/oembed/1?url=" + + encodeURIComponent(_presentation) + + "&format=jsonp&callback=?"; + IriSP.jQuery.getJSON(_ajaxUrl, function(_oembedData) { + var _presmatch = _oembedData.html.match(/doc=([a-z0-9\-_%]+)/i); + if (_presmatch && _presmatch.length > 1) { + _this.oembedCache[_presentation] = _presmatch[1]; + _this.insertSlideshare(_presmatch[1], _slide); } - } else { - insertSlideshare(_presentation, _slide); - } - } - if (_this.sync && _embedObject && typeof _embedObject.jumpTo === "function") { - _embedObject.jumpTo(parseInt(_slide)); + }); + } else { + this.insertSlideshare(this.oembedCache[_presentation], _slide); } - _lastPres = _presentation; - - }); - }); + } else { + this.insertSlideshare(_presentation, _slide); + } + } + if (_slide != this.lastSlide.slide && this.sync && this.embedObject && typeof this.embedObject.jumpTo === "function") { + this.embedObject.jumpTo(parseInt(_slide)); + } + this.lastSlide = { + presentation: _presentation, + slide: _slide + } + } else { + if (this.lastSlide.presentation) { + this.$container.hide(); + this.lastSlide = { + presentation: "", + slide: 0 + } + } } -}; +} + +IriSP.Widgets.Slideshare.prototype.insertSlideshare = function(_presentation, _slide) { + if (this.lastEmbedded === _presentation) { + if (this.embedObject && typeof this.embedObject.jumpTo === "function") { + this.embedObject.jumpTo(parseInt(_slide)); + } + } else { + this.lastEmbedded = _presentation; + var _id = IriSP.Model.getUID(), + _params = { + allowScriptAccess: "always" + } + _atts = { + id: _id + }, + _flashvars = { + doc : _presentation, + startSlide : _slide + }; + this.$container.html('
'); + swfobject.embedSWF( + "http://static.slidesharecdn.com/swf/ssplayer2.swf", + _id, + this.embed_width, + this.embed_height, + "8", + null, + _flashvars, + _params, + _atts + ); + this.embedObject = document.getElementById(_id); + } + this.$container.show(); +}