web/lib/metadataplayer/Polemic.js
author ymh <ymh.work@gmail.com>
Thu, 07 Nov 2013 18:32:57 +0100
changeset 52 6c7371c8917a
parent 51 418a12ee972f
permissions -rwxr-xr-x
change mediapart url
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
     1
IriSP.Widgets.Polemic = function(player, config) {
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
     2
    IriSP.Widgets.Widget.call(this, player, config);
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
     3
};
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
     4
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
     5
IriSP.Widgets.Polemic.prototype = new IriSP.Widgets.Widget();
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
     6
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
     7
IriSP.Widgets.Polemic.prototype.messages = {
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
     8
    fr: {
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
     9
        from_: "de ",
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
    10
        _to_: " à ",
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
    11
        _annotations: " annotation(s)"
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
    12
    },
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
    13
    en: {
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
    14
        from_: "from ",
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
    15
        _to_: " to ",
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
    16
        _annotations: " annotation(s)"
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
    17
    }
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
    18
};
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
    19
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
    20
IriSP.Widgets.Polemic.prototype.defaults = {
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
    21
    element_width : 5,
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
    22
    element_height : 5,
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
    23
    max_elements: 20,
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
    24
    annotation_type : "tweet",
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
    25
    defaultcolor : "#585858",
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
    26
    foundcolor : "#fc00ff",
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
    27
    polemics : [
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
    28
        {
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
    29
            "name" : "OK",
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
    30
            "keywords" : [ "++" ],
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
    31
            "color" : "#1D973D"
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
    32
        },
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
    33
        {
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
    34
            "name" : "KO",
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
    35
            "keywords" : [ "--" ],
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
    36
            "color" : "#CE0A15"
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
    37
        },
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
    38
        {
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
    39
            "name" : "REF",
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
    40
            "keywords" : [ "==", "http://" ],
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
    41
            "color" : "#C5A62D"  
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
    42
        },
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
    43
        {
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
    44
            "name" : "Q",
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
    45
            "keywords" : [ "?" ],
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
    46
            "color" : "#036AAE"
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
    47
        }
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
    48
    ]
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
    49
};
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
    50
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
    51
IriSP.Widgets.Polemic.prototype.draw = function() {
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
    52
    
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
    53
    this.onMediaEvent("timeupdate", "onTimeupdate");
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
    54
    this.$zone = IriSP.jQuery('<div>');
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
    55
    this.$zone.addClass("Ldt-Polemic");
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
    56
    this.$.append(this.$zone);
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
    57
    
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
    58
    this.$elapsed = IriSP.jQuery('<div>')
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
    59
        .css({
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
    60
            background: '#cccccc',
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
    61
            position: "absolute",
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
    62
            top: 0,
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
    63
            left: 0,
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
    64
            width: 0,
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
    65
            height: "100%"
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
    66
        });
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
    67
        
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
    68
    this.$zone.append(this.$elapsed);
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
    69
    
51
418a12ee972f modif mdp
cavaliet
parents: 0
diff changeset
    70
    // we don't filter with null duration anymore
0
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
    71
    var _slices = [],
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
    72
        _slice_count = Math.floor( this.width / this.element_width ),
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
    73
        _duration = this.source.getDuration(),
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
    74
        _max = 0,
51
418a12ee972f modif mdp
cavaliet
parents: 0
diff changeset
    75
        _list = this.getWidgetAnnotations(),
0
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
    76
        _this = this;
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
    77
    
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
    78
    for (var _i = 0; _i < _slice_count; _i++) {
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
    79
        var _begin = new IriSP.Model.Time( _i * _duration / _slice_count ),
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
    80
            _end = new IriSP.Model.Time( ( _i + 1 ) * _duration / _slice_count ),
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
    81
            _count = 0,
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
    82
            _res = {
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
    83
                begin : _begin.toString(),
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
    84
                end : _end.toString(),
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
    85
                annotations : _list.filter(function(_annotation) {
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
    86
                    return _annotation.begin >= _begin && _annotation.begin < _end;
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
    87
                }),
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
    88
                polemicStacks : []
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
    89
            };
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
    90
            
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
    91
        for (var _j = 0; _j < this.polemics.length; _j++) {
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
    92
            var _polemic = _res.annotations.searchByDescription(this.polemics[_j].keywords);
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
    93
            _count += _polemic.length;
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
    94
            _res.polemicStacks.push(_polemic);
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
    95
        }
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
    96
        for (var _j = 0; _j < this.polemics.length; _j++) {
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
    97
            _res.annotations.removeElements(_res.polemicStacks[_j]);
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
    98
        }
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
    99
        _count += _res.annotations.length;
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   100
        _max = Math.max(_max, _count);
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   101
        _slices.push(_res);
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   102
    }
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   103
    if (_max < this.max_elements) {
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   104
        this.is_stackgraph = false;
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   105
        if (_max) {
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   106
                    
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   107
            this.height = (2 + _max) * this.element_height;
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   108
            this.$zone.css({
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   109
                width: this.width + "px",
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   110
                height: this.height + "px",
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   111
                position: "relative"
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   112
            });
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   113
            
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   114
            var _x = 0;
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   115
            
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   116
            function displayAnnotation(_elx, _ely, _pol, _col, _annotation) {
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   117
                var _html = Mustache.to_html(
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   118
                    '<div class="Ldt-Polemic-TweetDiv Ldt-TraceMe" trace-info="annotation-id:{{id}}, media-id:{{media_id}}, polemic:{{polemic}}, time:{{time}}" polemic-color="{{color}}"'
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   119
                    + ' tweet-title="{{title}}" annotation-id="{{id}}" style="width: {{width}}px; height: {{height}}px; top: {{top}}px; left: {{left}}px; background: {{color}}"></div>',
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   120
                {
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   121
                    id: _annotation.id,
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   122
                    media_id: _this.source.currentMedia.id,
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   123
                    polemic: _pol,
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   124
                    left: _elx,
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   125
                    top: _ely,
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   126
                    color: _col,
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   127
                    width: (_this.element_width-1),
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   128
                    height: _this.element_height,
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   129
                    title: _annotation.title,
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   130
                    time: _annotation.begin.toString()
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   131
                });
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   132
                var _el = IriSP.jQuery(_html);
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   133
                _el.mouseover(function() {
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   134
                    _annotation.trigger("select");
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   135
                }).mouseout(function() {
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   136
                    _annotation.trigger("unselect");
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   137
                }).click(function() {
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   138
                    _annotation.trigger("click");
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   139
                    return false;
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   140
                });
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   141
                IriSP.attachDndData(_el, {
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   142
                	title: _annotation.title,
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   143
                	description: _annotation.description,
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   144
                	image: _annotation.thumbnail,
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   145
                	uri: (typeof _annotation.url !== "undefined" 
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   146
		                ? _annotation.url
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   147
		                : (document.location.href.replace(/#.*$/,'') + '#id='  + _annotation.id))
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   148
                });
51
418a12ee972f modif mdp
cavaliet
parents: 0
diff changeset
   149
            	// test if annotation has several colors.
418a12ee972f modif mdp
cavaliet
parents: 0
diff changeset
   150
            	var colAr = [];
418a12ee972f modif mdp
cavaliet
parents: 0
diff changeset
   151
            	for (var _j = 0; _j < _this.polemics.length; _j++) {
418a12ee972f modif mdp
cavaliet
parents: 0
diff changeset
   152
            		if( IriSP.Model.regexpFromTextOrArray( _this.polemics[_j].keywords ).test( _annotation.title ) ){
418a12ee972f modif mdp
cavaliet
parents: 0
diff changeset
   153
            			colAr.push(_this.polemics[_j].color);
418a12ee972f modif mdp
cavaliet
parents: 0
diff changeset
   154
            		}
418a12ee972f modif mdp
cavaliet
parents: 0
diff changeset
   155
                }
418a12ee972f modif mdp
cavaliet
parents: 0
diff changeset
   156
            	// display annotation
0
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   157
                _annotation.on("select", function() {
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   158
                    if (_this.tooltip) {
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   159
                        _this.tooltip.show(
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   160
                            + Math.floor(_elx + (_this.element_width - 1) / 2),
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   161
                            + _ely,
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   162
                            _annotation.title,
51
418a12ee972f modif mdp
cavaliet
parents: 0
diff changeset
   163
                            ( (colAr.length>1) ? colAr : _col )
0
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   164
                        );
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   165
                    }
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   166
                    _this.$tweets.each(function() {
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   167
                        var _e = IriSP.jQuery(this);
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   168
                        _e.css(
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   169
                            "opacity",
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   170
                            ( _e.attr("annotation-id") == _annotation.id ? 1 : .3 )
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   171
                        );
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   172
                    });
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   173
                });
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   174
                _annotation.on("unselect", function() {
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   175
                    if (_this.tooltip) {
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   176
                        _this.tooltip.hide();
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   177
                    }
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   178
                    _this.$tweets.css("opacity",1);
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   179
                });
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   180
                _annotation.on("found", function() {
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   181
                    _el.css({
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   182
                        "background" : _this.foundcolor,
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   183
                        "opacity" : 1
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   184
                    });
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   185
                });
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   186
                _annotation.on("not-found", function() {
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   187
                    _el.css({
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   188
                        "background" : _col,
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   189
                        "opacity" : .3
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   190
                    });
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   191
                });
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   192
                _this.$zone.append(_el);
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   193
            }
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   194
            
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   195
            IriSP._(_slices).forEach(function(_slice) {
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   196
                var _y = _this.height;
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   197
                _slice.annotations.forEach(function(_annotation) {
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   198
                    _y -= _this.element_height;
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   199
                    displayAnnotation(_x, _y, "none", _this.defaultcolor, _annotation);
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   200
                });
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   201
                IriSP._(_slice.polemicStacks).forEach(function(_annotations, _j) {
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   202
                    var _color = _this.polemics[_j].color,
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   203
                        _polemic = _this.polemics[_j].name;
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   204
                    _annotations.forEach(function(_annotation) {
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   205
                        _y -= _this.element_height;
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   206
                        displayAnnotation(_x, _y, _polemic, _color, _annotation);
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   207
                    });
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   208
                });
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   209
                _x += _this.element_width;
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   210
            });
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   211
            
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   212
            this.$zone.append(_html);
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   213
            
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   214
            this.$tweets = this.$.find(".Ldt-Polemic-TweetDiv");
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   215
            
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   216
            this.source.getAnnotations().on("search-cleared", function() {
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   217
                _this.$tweets.each(function() {
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   218
                    var _el = IriSP.jQuery(this);
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   219
                    _el.css({
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   220
                        "background" : _el.attr("polemic-color"),
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   221
                        "opacity" : 1
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   222
                    });
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   223
                });
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   224
            });
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   225
            
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   226
        } else {
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   227
            this.$zone.hide();
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   228
        }
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   229
    } else {
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   230
        this.is_stackgraph = true;
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   231
        
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   232
        this.height = (2 + this.max_elements) * this.element_height;
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   233
        this.$zone.css({
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   234
            width: this.width + "px",
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   235
            height: this.height + "px",
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   236
            position: "relative"
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   237
        });
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   238
        
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   239
        var _x = 0,
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   240
            _html = '',
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   241
            _scale = this.max_elements * this.element_height / _max;
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   242
            
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   243
        function displayStackElement(_x, _y, _h, _color, _nums, _begin, _end, _polemic) {
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   244
            _html += Mustache.to_html(
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   245
                '<div class="Ldt-Polemic-TweetDiv Ldt-TraceMe" trace-info="annotation-block, media-id={{media_id}}, polemic={{polemic}}, time:{{begin}}" pos-x="{{posx}}" pos-y="{{top}}" annotation-counts="{{nums}}" begin-time="{{begin}}" end-time="{{end}}"'
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   246
                + ' style="width: {{width}}px; height: {{height}}px; top: {{top}}px; left: {{left}}px; background: {{color}}"></div>',
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   247
            {
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   248
                nums: _nums,
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   249
                posx: Math.floor(_x + (_this.element_width - 1) / 2),
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   250
                media_id: _this.source.currentMedia.id,
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   251
                polemic: _polemic,
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   252
                left: _x,
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   253
                top: _y,
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   254
                color: _color,
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   255
                width: (_this.element_width-1),
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   256
                height: _h,
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   257
                begin: _begin,
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   258
                end: _end
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   259
            });
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   260
        }
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   261
        
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   262
        IriSP._(_slices).forEach(function(_slice) {
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   263
            var _y = _this.height,
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   264
                _nums = _slice.annotations.length + "," + IriSP._(_slice.polemicStacks).map(function(_annotations) {
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   265
                    return _annotations.length;
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   266
                }).join(",");
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   267
            if (_slice.annotations.length) {
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   268
                var _h = Math.ceil(_scale * _slice.annotations.length);
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   269
                _y -= _h;
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   270
                displayStackElement(_x, _y, _h, _this.defaultcolor, _nums, _slice.begin, _slice.end, "none");
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   271
            }
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   272
            IriSP._(_slice.polemicStacks).forEach(function(_annotations, _j) {
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   273
                if (_annotations.length) {
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   274
                    var _color = _this.polemics[_j].color,
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   275
                        _polemic = _this.polemics[_j].name,
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   276
                        _h = Math.ceil(_scale * _annotations.length);
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   277
                    _y -= _h;
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   278
                    displayStackElement(_x, _y, _h, _color, _nums, _slice.begin, _slice.end, _polemic);
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   279
                }
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   280
            });
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   281
            _x += _this.element_width;
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   282
        });
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   283
        
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   284
        this.$zone.append(_html);
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   285
        
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   286
        this.$tweets = this.$.find(".Ldt-Polemic-TweetDiv");
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   287
        
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   288
        this.$tweets
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   289
            .mouseover(function() {
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   290
                var _el = IriSP.jQuery(this),
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   291
                    _nums = _el.attr("annotation-counts").split(","),
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   292
                    _html = '<p>' + _this.l10n.from_ + _el.attr("begin-time") + _this.l10n._to_ + _el.attr("end-time") + '</p>';
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   293
                for (var _i = 0; _i <= _this.polemics.length; _i++) {
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   294
                    var _color = _i ? _this.polemics[_i - 1].color : _this.defaultcolor;
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   295
                    _html += '<div class="Ldt-Tooltip-AltColor" style="background: ' + _color + '"></div><p>' + _nums[_i] + _this.l10n._annotations + '</p>';
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   296
                }
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   297
                if (_this.tooltip) {
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   298
                    _this.tooltip.show(+ _el.attr("pos-x"), + _el.attr("pos-y"), _html);
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   299
                }
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   300
            })
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   301
            .mouseout(function() {
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   302
                if (_this.tooltip) {
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   303
                    _this.tooltip.hide();
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   304
                }
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   305
            });
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   306
            
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   307
    };
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   308
    
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   309
    this.$position = IriSP.jQuery('<div>').addClass("Ldt-Polemic-Position");
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   310
        
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   311
    this.$zone.append(this.$position);
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   312
    
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   313
    this.$zone.click(function(_e) {
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   314
        var _x = _e.pageX - _this.$zone.offset().left;
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   315
        _this.media.setCurrentTime(_this.media.duration * _x / _this.width);
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   316
    });
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   317
    
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   318
    this.$.append('<div class="Ldt-Polemic-Tooltip"></div>');
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   319
    
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   320
    this.insertSubwidget(
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   321
        this.$.find(".Ldt-Polemic-Tooltip"),
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   322
        {
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   323
            type: "Tooltip",
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   324
            min_x: 0,
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   325
            max_x: this.width
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   326
        },
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   327
        "tooltip"
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   328
    );
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   329
};
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   330
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   331
IriSP.Widgets.Polemic.prototype.onTimeupdate = function(_time) {
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   332
    var _x = Math.floor( this.width * _time / this.media.duration);
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   333
    this.$elapsed.css({
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   334
        width:  _x + "px"
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   335
    });
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   336
    this.$position.css({
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   337
        left: _x + "px"
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   338
    });
7f8907368bd5 first commit
cavaliet
parents:
diff changeset
   339
};