src/widgets/Slideshare.js
author veltr
Wed, 29 Aug 2012 18:34:11 +0200
branchnew-model
changeset 937 eb3c442cec50
parent 921 d4dc652bf050
child 957 4da0a5740b6c
child 1019 3ab36f402b0c
permissions -rw-r--r--
Added events on annotation for inter widget communication
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
    this.lastSlide = {
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
     6
        presentation: "",
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
     7
        slide: 0
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
     8
    }
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
     9
    this.embedObject = null;
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
    10
    this.oembedCache = {}
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
    11
}
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
    12
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
    13
IriSP.Widgets.Slideshare.prototype = new IriSP.Widgets.Widget();
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
    14
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
    15
IriSP.Widgets.Slideshare.prototype.defaults = {
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
    16
    annotation_type: "slide",
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
    17
    sync: true,
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
    18
    embed_width: 400,
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
    19
    embed_height: 300
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
    20
}
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
    21
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
    22
IriSP.Widgets.Slideshare.prototype.messages = {
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
    23
    fr: {
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
    24
        slides_ : "Diapositives :"
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
    25
    },
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
    26
    en: {
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
    27
        slides_ : "Slides:"
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
    28
    }
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
    29
}
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
    30
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
    31
IriSP.Widgets.Slideshare.prototype.template =
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
    32
    '<div class="Ldt-SlideShare"><h2>{{l10n.slides_}}</h2><hr /><div class="Ldt-SlideShare-Container"></div></div>';
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
    33
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
    34
IriSP.Widgets.Slideshare.prototype.draw = function() {
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
    35
    var _hide = false;
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
    36
    if (typeof this.annotation_type !== "undefined" && this.annotation_type) {
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
    37
        var _annType = this.source.getAnnotationTypes().searchByTitle(this.annotation_type);
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
    38
        _hide = !_annType.length;
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
    39
    }
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
    40
    if (_hide) {
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
    41
        this.$.hide();
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
    42
    } else {
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
    43
        this.renderTemplate();
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
    44
        this.$container = this.$.find(".Ldt-SlideShare-Container");
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
    45
        this.bindPopcorn("timeupdate","onTimeupdate");
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
    46
        this.onTimeupdate();
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
    47
    }
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
    48
}
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
    49
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
    50
IriSP.Widgets.Slideshare.prototype.onTimeupdate = function() {
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
    51
    var _list = this.getWidgetAnnotationsAtTime();
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
    52
    if (_list.length) {
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
    53
        var _description = _list[0].description,
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
    54
            _isurl = /^https?:\/\//.test(_description),
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
    55
            _presentation = _description.replace(/#.*$/,''),
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
    56
            _slidematch = _description.match(/(#|\?|&)id=(\d+)/),
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
    57
            _slide = parseInt(_slidematch && _slidematch.length > 2 ? _slidematch[2] : 1),
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
    58
            _this = this;
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
    59
        if (_presentation !== this.lastSlide.presentation) {
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
    60
            if (_isurl) {
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
    61
                if (typeof this.oembedCache[_presentation] === "undefined") {
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
    62
                    var _ajaxUrl = "http://www.slideshare.net/api/oembed/1?url="
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
    63
                        + encodeURIComponent(_presentation)
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
    64
                        + "&format=jsonp&callback=?";
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
    65
                    IriSP.jQuery.getJSON(_ajaxUrl, function(_oembedData) {
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
    66
                        var _presmatch = _oembedData.html.match(/doc=([a-z0-9\-_%]+)/i);
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
    67
                        if (_presmatch && _presmatch.length > 1) {
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
    68
                            _this.oembedCache[_presentation] =  _presmatch[1];
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
    69
                            _this.insertSlideshare(_presmatch[1], _slide);
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
    70
                        }
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
    71
                    });
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
    72
                } else {
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
    73
                    this.insertSlideshare(this.oembedCache[_presentation], _slide);
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
    74
                }
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
    75
            } else {
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
    76
                this.insertSlideshare(_presentation, _slide);
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
    77
            }
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
    78
        }
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
    79
        if (_slide != this.lastSlide.slide && this.sync && this.embedObject && typeof this.embedObject.jumpTo === "function") {
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
    80
            this.embedObject.jumpTo(parseInt(_slide));
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
    81
        }
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
    82
        this.lastSlide = {
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
    83
            presentation: _presentation,
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
    84
            slide: _slide
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
    85
        }
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
    86
    } else {
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
    87
        if (this.lastSlide.presentation) {
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
    88
            this.$container.hide();
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
    89
            this.lastSlide = {
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
    90
                presentation: "",
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
    91
                slide: 0
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
    92
            }
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
    93
        }
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
    94
    }
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
    95
}
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
    96
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
    97
IriSP.Widgets.Slideshare.prototype.insertSlideshare = function(_presentation, _slide) {
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
    98
    if (this.lastEmbedded === _presentation) {
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
    99
        if (this.embedObject && typeof this.embedObject.jumpTo === "function") {
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
   100
            this.embedObject.jumpTo(parseInt(_slide));
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
   101
        }
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
   102
    } else {
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
   103
        this.lastEmbedded = _presentation;
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
   104
        var _id = IriSP.Model.getUID(),
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
   105
            _params = {
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
   106
                allowScriptAccess: "always"
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
   107
            }
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
   108
            _atts = {
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
   109
                id: _id
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
   110
            },
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
   111
            _flashvars = {
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
   112
                doc : _presentation,
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
   113
                startSlide : _slide
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
   114
            };
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
   115
        this.$container.html('<div id="' + _id + '"></div>');
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
   116
        swfobject.embedSWF(
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
   117
            "http://static.slidesharecdn.com/swf/ssplayer2.swf",
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
   118
            _id,
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
   119
            this.embed_width,
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
   120
            this.embed_height,
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
   121
            "8",
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
   122
            null,
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
   123
            _flashvars,
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
   124
            _params,
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
   125
            _atts
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
   126
        );
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
   127
        this.embedObject = document.getElementById(_id);
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
   128
    }
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
   129
    this.$container.show();
d4dc652bf050 Added Slideshare Widget
veltr
parents:
diff changeset
   130
}