src/widgets/Slideshare.js
author veltr
Wed, 19 Dec 2012 19:02:52 +0100
changeset 986 f9d51dd4a3fe
parent 965 eadb7290c325
child 988 eefd336335f9
permissions -rw-r--r--
Tooltip Improvements, Update Popcorn
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
921
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
     1
/* TODO: Add Slide synchronization */
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
     2
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
     3
IriSP.Widgets.Slideshare = function(player, config) {
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
     4
    IriSP.Widgets.Widget.call(this, player, config);
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
     5
}
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
     6
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
     7
IriSP.Widgets.Slideshare.prototype = new IriSP.Widgets.Widget();
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
     8
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
     9
IriSP.Widgets.Slideshare.prototype.defaults = {
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
    10
    annotation_type: "slide",
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
    11
    sync: true,
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
    12
    embed_width: 400,
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
    13
    embed_height: 300
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
    14
}
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
    15
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
    16
IriSP.Widgets.Slideshare.prototype.messages = {
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
    17
    fr: {
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
    18
        slides_ : "Diapositives :"
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
    19
    },
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
    20
    en: {
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
    21
        slides_ : "Slides:"
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
    22
    }
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
    23
}
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
    24
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
    25
IriSP.Widgets.Slideshare.prototype.template =
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
    26
    '<div class="Ldt-SlideShare"><h2>{{l10n.slides_}}</h2><hr /><div class="Ldt-SlideShare-Container"></div></div>';
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
    27
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
    28
IriSP.Widgets.Slideshare.prototype.draw = function() {
965
eadb7290c325 Improvements in widget communication
veltr
parents: 957
diff changeset
    29
    
eadb7290c325 Improvements in widget communication
veltr
parents: 957
diff changeset
    30
    var _embedObject = null,
eadb7290c325 Improvements in widget communication
veltr
parents: 957
diff changeset
    31
        $container,
eadb7290c325 Improvements in widget communication
veltr
parents: 957
diff changeset
    32
        _lastEmbedded = "",
eadb7290c325 Improvements in widget communication
veltr
parents: 957
diff changeset
    33
        _this = this;
eadb7290c325 Improvements in widget communication
veltr
parents: 957
diff changeset
    34
    
eadb7290c325 Improvements in widget communication
veltr
parents: 957
diff changeset
    35
    function insertSlideshare(_presentation, _slide) {
eadb7290c325 Improvements in widget communication
veltr
parents: 957
diff changeset
    36
        if (_lastEmbedded === _presentation) {
eadb7290c325 Improvements in widget communication
veltr
parents: 957
diff changeset
    37
            if (_.embedObject && typeof _embedObject.jumpTo === "function") {
eadb7290c325 Improvements in widget communication
veltr
parents: 957
diff changeset
    38
                _embedObject.jumpTo(parseInt(_slide));
eadb7290c325 Improvements in widget communication
veltr
parents: 957
diff changeset
    39
            }
eadb7290c325 Improvements in widget communication
veltr
parents: 957
diff changeset
    40
        } else {
eadb7290c325 Improvements in widget communication
veltr
parents: 957
diff changeset
    41
            _lastEmbedded = _presentation;
eadb7290c325 Improvements in widget communication
veltr
parents: 957
diff changeset
    42
            var _id = IriSP.Model.getUID(),
eadb7290c325 Improvements in widget communication
veltr
parents: 957
diff changeset
    43
                _params = {
eadb7290c325 Improvements in widget communication
veltr
parents: 957
diff changeset
    44
                    allowScriptAccess: "always"
eadb7290c325 Improvements in widget communication
veltr
parents: 957
diff changeset
    45
                }
eadb7290c325 Improvements in widget communication
veltr
parents: 957
diff changeset
    46
                _atts = {
eadb7290c325 Improvements in widget communication
veltr
parents: 957
diff changeset
    47
                    id: _id
eadb7290c325 Improvements in widget communication
veltr
parents: 957
diff changeset
    48
                },
eadb7290c325 Improvements in widget communication
veltr
parents: 957
diff changeset
    49
                _flashvars = {
eadb7290c325 Improvements in widget communication
veltr
parents: 957
diff changeset
    50
                    doc : _presentation,
eadb7290c325 Improvements in widget communication
veltr
parents: 957
diff changeset
    51
                    startSlide : _slide
eadb7290c325 Improvements in widget communication
veltr
parents: 957
diff changeset
    52
                };
eadb7290c325 Improvements in widget communication
veltr
parents: 957
diff changeset
    53
            $container.html('<div id="' + _id + '"></div>');
eadb7290c325 Improvements in widget communication
veltr
parents: 957
diff changeset
    54
            swfobject.embedSWF(
eadb7290c325 Improvements in widget communication
veltr
parents: 957
diff changeset
    55
                "http://static.slidesharecdn.com/swf/ssplayer2.swf",
eadb7290c325 Improvements in widget communication
veltr
parents: 957
diff changeset
    56
                _id,
eadb7290c325 Improvements in widget communication
veltr
parents: 957
diff changeset
    57
                _this.embed_width,
eadb7290c325 Improvements in widget communication
veltr
parents: 957
diff changeset
    58
                _this.embed_height,
eadb7290c325 Improvements in widget communication
veltr
parents: 957
diff changeset
    59
                "8",
eadb7290c325 Improvements in widget communication
veltr
parents: 957
diff changeset
    60
                null,
eadb7290c325 Improvements in widget communication
veltr
parents: 957
diff changeset
    61
                _flashvars,
eadb7290c325 Improvements in widget communication
veltr
parents: 957
diff changeset
    62
                _params,
eadb7290c325 Improvements in widget communication
veltr
parents: 957
diff changeset
    63
                _atts
eadb7290c325 Improvements in widget communication
veltr
parents: 957
diff changeset
    64
            );
eadb7290c325 Improvements in widget communication
veltr
parents: 957
diff changeset
    65
            _embedObject = document.getElementById(_id);
eadb7290c325 Improvements in widget communication
veltr
parents: 957
diff changeset
    66
        }
eadb7290c325 Improvements in widget communication
veltr
parents: 957
diff changeset
    67
        $container.show();
921
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
    68
    }
965
eadb7290c325 Improvements in widget communication
veltr
parents: 957
diff changeset
    69
    
eadb7290c325 Improvements in widget communication
veltr
parents: 957
diff changeset
    70
    var _annotations = this.getWidgetAnnotations();
eadb7290c325 Improvements in widget communication
veltr
parents: 957
diff changeset
    71
    if (!_annotations.length) {
921
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
    72
        this.$.hide();
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
    73
    } else {
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
    74
        this.renderTemplate();
965
eadb7290c325 Improvements in widget communication
veltr
parents: 957
diff changeset
    75
        var _lastPres = "",
eadb7290c325 Improvements in widget communication
veltr
parents: 957
diff changeset
    76
            _embedObject = null,
eadb7290c325 Improvements in widget communication
veltr
parents: 957
diff changeset
    77
            _oembedCache = {},
eadb7290c325 Improvements in widget communication
veltr
parents: 957
diff changeset
    78
            _this = this;
eadb7290c325 Improvements in widget communication
veltr
parents: 957
diff changeset
    79
        $container = this.$.find(".Ldt-SlideShare-Container");
eadb7290c325 Improvements in widget communication
veltr
parents: 957
diff changeset
    80
        _annotations.forEach(function(_a) {
eadb7290c325 Improvements in widget communication
veltr
parents: 957
diff changeset
    81
            _a.on("leave", function() {
eadb7290c325 Improvements in widget communication
veltr
parents: 957
diff changeset
    82
                $container.hide();
eadb7290c325 Improvements in widget communication
veltr
parents: 957
diff changeset
    83
                _lastPres = "";
eadb7290c325 Improvements in widget communication
veltr
parents: 957
diff changeset
    84
            });
eadb7290c325 Improvements in widget communication
veltr
parents: 957
diff changeset
    85
            _a.on("enter", function() {
eadb7290c325 Improvements in widget communication
veltr
parents: 957
diff changeset
    86
                var _description = _a.description,
eadb7290c325 Improvements in widget communication
veltr
parents: 957
diff changeset
    87
                    _isurl = /^https?:\/\//.test(_description),
eadb7290c325 Improvements in widget communication
veltr
parents: 957
diff changeset
    88
                    _presentation = _description.replace(/#.*$/,''),
eadb7290c325 Improvements in widget communication
veltr
parents: 957
diff changeset
    89
                    _slidematch = _description.match(/(#|\?|&)id=(\d+)/),
eadb7290c325 Improvements in widget communication
veltr
parents: 957
diff changeset
    90
                    _slide = parseInt(_slidematch && _slidematch.length > 2 ? _slidematch[2] : 1);
eadb7290c325 Improvements in widget communication
veltr
parents: 957
diff changeset
    91
                if (_presentation !== _lastPres) {
eadb7290c325 Improvements in widget communication
veltr
parents: 957
diff changeset
    92
                    if (_isurl) {
eadb7290c325 Improvements in widget communication
veltr
parents: 957
diff changeset
    93
                        if (typeof _oembedCache[_presentation] === "undefined") {
eadb7290c325 Improvements in widget communication
veltr
parents: 957
diff changeset
    94
                            var _ajaxUrl = "http://www.slideshare.net/api/oembed/1?url="
eadb7290c325 Improvements in widget communication
veltr
parents: 957
diff changeset
    95
                                + encodeURIComponent(_presentation)
eadb7290c325 Improvements in widget communication
veltr
parents: 957
diff changeset
    96
                                + "&format=jsonp&callback=?";
eadb7290c325 Improvements in widget communication
veltr
parents: 957
diff changeset
    97
                            IriSP.jQuery.getJSON(_ajaxUrl, function(_oembedData) {
eadb7290c325 Improvements in widget communication
veltr
parents: 957
diff changeset
    98
                                var _presmatch = _oembedData.html.match(/doc=([a-z0-9\-_%]+)/i);
eadb7290c325 Improvements in widget communication
veltr
parents: 957
diff changeset
    99
                                if (_presmatch && _presmatch.length > 1) {
eadb7290c325 Improvements in widget communication
veltr
parents: 957
diff changeset
   100
                                    _oembedCache[_presentation] =  _presmatch[1];
eadb7290c325 Improvements in widget communication
veltr
parents: 957
diff changeset
   101
                                    insertSlideshare(_presmatch[1], _slide);
eadb7290c325 Improvements in widget communication
veltr
parents: 957
diff changeset
   102
                                }
eadb7290c325 Improvements in widget communication
veltr
parents: 957
diff changeset
   103
                            });
eadb7290c325 Improvements in widget communication
veltr
parents: 957
diff changeset
   104
                        } else {
eadb7290c325 Improvements in widget communication
veltr
parents: 957
diff changeset
   105
                            insertSlideshare(_oembedCache[_presentation], _slide);
eadb7290c325 Improvements in widget communication
veltr
parents: 957
diff changeset
   106
                        }
eadb7290c325 Improvements in widget communication
veltr
parents: 957
diff changeset
   107
                    } else {
eadb7290c325 Improvements in widget communication
veltr
parents: 957
diff changeset
   108
                        insertSlideshare(_presentation, _slide);
eadb7290c325 Improvements in widget communication
veltr
parents: 957
diff changeset
   109
                    }
eadb7290c325 Improvements in widget communication
veltr
parents: 957
diff changeset
   110
                }
eadb7290c325 Improvements in widget communication
veltr
parents: 957
diff changeset
   111
                if (_this.sync && _embedObject && typeof _embedObject.jumpTo === "function") {
eadb7290c325 Improvements in widget communication
veltr
parents: 957
diff changeset
   112
                    _embedObject.jumpTo(parseInt(_slide));
eadb7290c325 Improvements in widget communication
veltr
parents: 957
diff changeset
   113
                }
eadb7290c325 Improvements in widget communication
veltr
parents: 957
diff changeset
   114
                _lastPres = _presentation;
eadb7290c325 Improvements in widget communication
veltr
parents: 957
diff changeset
   115
                
eadb7290c325 Improvements in widget communication
veltr
parents: 957
diff changeset
   116
            })
eadb7290c325 Improvements in widget communication
veltr
parents: 957
diff changeset
   117
        })
921
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
   118
    }
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
   119
}