src/widgets/Tagcloud.js
author veltr
Thu, 12 Jul 2012 15:30:34 +0200
branchnew-model
changeset 927 977a39c4ee80
parent 908 f56199193fad
child 957 4da0a5740b6c
child 1019 3ab36f402b0c
permissions -rw-r--r--
Added URL Copy function to the Social Widget
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
880
4c7b33bf2795 Started work on CreateAnnotation and Mediafragment
veltr
parents:
diff changeset
     1
IriSP.Widgets.Tagcloud = function(player, config) {
4c7b33bf2795 Started work on CreateAnnotation and Mediafragment
veltr
parents:
diff changeset
     2
    IriSP.Widgets.Widget.call(this, player, config);
882
61c384dda19e Big refactoring
veltr
parents: 880
diff changeset
     3
    this.stopwords = IriSP._.uniq([].concat(this.custom_stopwords).concat(this.stopword_lists[this.stopword_language]));
880
4c7b33bf2795 Started work on CreateAnnotation and Mediafragment
veltr
parents:
diff changeset
     4
}
4c7b33bf2795 Started work on CreateAnnotation and Mediafragment
veltr
parents:
diff changeset
     5
4c7b33bf2795 Started work on CreateAnnotation and Mediafragment
veltr
parents:
diff changeset
     6
IriSP.Widgets.Tagcloud.prototype = new IriSP.Widgets.Widget();
4c7b33bf2795 Started work on CreateAnnotation and Mediafragment
veltr
parents:
diff changeset
     7
4c7b33bf2795 Started work on CreateAnnotation and Mediafragment
veltr
parents:
diff changeset
     8
IriSP.Widgets.Tagcloud.prototype.template =
4c7b33bf2795 Started work on CreateAnnotation and Mediafragment
veltr
parents:
diff changeset
     9
    '<div class="Ldt-Tagcloud-Container"><ul class="Ldt-Tagcloud-List">'
906
4b6e154ae8de modifs traces
veltr
parents: 883
diff changeset
    10
    + '{{#words}}<li class="Ldt-Tagcloud-item Ldt-TraceMe" trace-info="tag:{{word}}" content="{{word}}" style="font-size: {{size}}px">{{word}}</li>{{/words}}'
880
4c7b33bf2795 Started work on CreateAnnotation and Mediafragment
veltr
parents:
diff changeset
    11
    + '</ul></div>';
4c7b33bf2795 Started work on CreateAnnotation and Mediafragment
veltr
parents:
diff changeset
    12
4c7b33bf2795 Started work on CreateAnnotation and Mediafragment
veltr
parents:
diff changeset
    13
IriSP.Widgets.Tagcloud.prototype.defaults = {
4c7b33bf2795 Started work on CreateAnnotation and Mediafragment
veltr
parents:
diff changeset
    14
    include_titles: true,
4c7b33bf2795 Started work on CreateAnnotation and Mediafragment
veltr
parents:
diff changeset
    15
    include_descriptions: true,
908
f56199193fad CreateAnnotation widget now posts annotations, Tagcloud can be made segment-dependent
veltr
parents: 906
diff changeset
    16
    include_tag_texts: true,
880
4c7b33bf2795 Started work on CreateAnnotation and Mediafragment
veltr
parents:
diff changeset
    17
    tag_count: 30,
4c7b33bf2795 Started work on CreateAnnotation and Mediafragment
veltr
parents:
diff changeset
    18
    stopword_language: "fr",
4c7b33bf2795 Started work on CreateAnnotation and Mediafragment
veltr
parents:
diff changeset
    19
    custom_stopwords: [],
4c7b33bf2795 Started work on CreateAnnotation and Mediafragment
veltr
parents:
diff changeset
    20
    exclude_pattern: false,
4c7b33bf2795 Started work on CreateAnnotation and Mediafragment
veltr
parents:
diff changeset
    21
    annotation_type: false,
908
f56199193fad CreateAnnotation widget now posts annotations, Tagcloud can be made segment-dependent
veltr
parents: 906
diff changeset
    22
    segment_annotation_type: false,
880
4c7b33bf2795 Started work on CreateAnnotation and Mediafragment
veltr
parents:
diff changeset
    23
    min_font_size: 10,
4c7b33bf2795 Started work on CreateAnnotation and Mediafragment
veltr
parents:
diff changeset
    24
    max_font_size: 26
4c7b33bf2795 Started work on CreateAnnotation and Mediafragment
veltr
parents:
diff changeset
    25
}
4c7b33bf2795 Started work on CreateAnnotation and Mediafragment
veltr
parents:
diff changeset
    26
4c7b33bf2795 Started work on CreateAnnotation and Mediafragment
veltr
parents:
diff changeset
    27
IriSP.Widgets.Tagcloud.prototype.stopword_lists = {
4c7b33bf2795 Started work on CreateAnnotation and Mediafragment
veltr
parents:
diff changeset
    28
    "fr" : [
4c7b33bf2795 Started work on CreateAnnotation and Mediafragment
veltr
parents:
diff changeset
    29
        'aussi', 'avec', 'aux', 'bien', 'car', 'cette', 'comme', 'dans', 'des', 'donc', 'dont', 'elle', 'encore', 'entre', 'est',
4c7b33bf2795 Started work on CreateAnnotation and Mediafragment
veltr
parents:
diff changeset
    30
        'être', 'eux', 'faire', 'fait', 'http', 'ici', 'ils', 'les', 'leur', 'leurs', 'mais', 'mes', 'même', 'mon', 'notre',
4c7b33bf2795 Started work on CreateAnnotation and Mediafragment
veltr
parents:
diff changeset
    31
        'non', 'nos', 'nous', 'ont', 'par', 'pas', 'peu', 'peut', 'plus', 'pour', 'quand', 'que', 'qui', 'quoi', 'sans',
4c7b33bf2795 Started work on CreateAnnotation and Mediafragment
veltr
parents:
diff changeset
    32
        'ses' ,'son', 'sont', 'sur', 'tes', 'très', 'the', 'ton', 'tous', 'tout', 'une', 'votre', 'vos', 'vous'
4c7b33bf2795 Started work on CreateAnnotation and Mediafragment
veltr
parents:
diff changeset
    33
    ],
4c7b33bf2795 Started work on CreateAnnotation and Mediafragment
veltr
parents:
diff changeset
    34
    "en" : [
4c7b33bf2795 Started work on CreateAnnotation and Mediafragment
veltr
parents:
diff changeset
    35
        'about', 'again', 'are', 'and', 'because', 'being', 'but', 'can', 'done', 'have', 'for', 'from',
4c7b33bf2795 Started work on CreateAnnotation and Mediafragment
veltr
parents:
diff changeset
    36
        'get', 'here', 'http', 'like', 'more', 'one', 'our', 'she', 'that', 'the', 'their', 'then', 'there',
4c7b33bf2795 Started work on CreateAnnotation and Mediafragment
veltr
parents:
diff changeset
    37
        'they', 'this', 'very', 'what', 'when', 'where', 'who', 'why', 'will', 'with', 'www', 'you', 'your'
4c7b33bf2795 Started work on CreateAnnotation and Mediafragment
veltr
parents:
diff changeset
    38
    ]
4c7b33bf2795 Started work on CreateAnnotation and Mediafragment
veltr
parents:
diff changeset
    39
}
4c7b33bf2795 Started work on CreateAnnotation and Mediafragment
veltr
parents:
diff changeset
    40
4c7b33bf2795 Started work on CreateAnnotation and Mediafragment
veltr
parents:
diff changeset
    41
IriSP.Widgets.Tagcloud.prototype.draw = function() {
908
f56199193fad CreateAnnotation widget now posts annotations, Tagcloud can be made segment-dependent
veltr
parents: 906
diff changeset
    42
    this.bindPopcorn("IriSP.search", "onSearch");
f56199193fad CreateAnnotation widget now posts annotations, Tagcloud can be made segment-dependent
veltr
parents: 906
diff changeset
    43
    this.bindPopcorn("IriSP.search.closed", "onSearch");
f56199193fad CreateAnnotation widget now posts annotations, Tagcloud can be made segment-dependent
veltr
parents: 906
diff changeset
    44
    this.bindPopcorn("IriSP.search.cleared", "onSearch");
880
4c7b33bf2795 Started work on CreateAnnotation and Mediafragment
veltr
parents:
diff changeset
    45
    
908
f56199193fad CreateAnnotation widget now posts annotations, Tagcloud can be made segment-dependent
veltr
parents: 906
diff changeset
    46
    if (this.segment_annotation_type) {
f56199193fad CreateAnnotation widget now posts annotations, Tagcloud can be made segment-dependent
veltr
parents: 906
diff changeset
    47
        this.bindPopcorn("timeupdate","onTimeupdate");
f56199193fad CreateAnnotation widget now posts annotations, Tagcloud can be made segment-dependent
veltr
parents: 906
diff changeset
    48
    } else {
f56199193fad CreateAnnotation widget now posts annotations, Tagcloud can be made segment-dependent
veltr
parents: 906
diff changeset
    49
        this.redraw();
f56199193fad CreateAnnotation widget now posts annotations, Tagcloud can be made segment-dependent
veltr
parents: 906
diff changeset
    50
    }
f56199193fad CreateAnnotation widget now posts annotations, Tagcloud can be made segment-dependent
veltr
parents: 906
diff changeset
    51
}
f56199193fad CreateAnnotation widget now posts annotations, Tagcloud can be made segment-dependent
veltr
parents: 906
diff changeset
    52
f56199193fad CreateAnnotation widget now posts annotations, Tagcloud can be made segment-dependent
veltr
parents: 906
diff changeset
    53
IriSP.Widgets.Tagcloud.prototype.onTimeupdate = function() {
f56199193fad CreateAnnotation widget now posts annotations, Tagcloud can be made segment-dependent
veltr
parents: 906
diff changeset
    54
    var _time = Math.floor(this.player.popcorn.currentTime() * 1000),
f56199193fad CreateAnnotation widget now posts annotations, Tagcloud can be made segment-dependent
veltr
parents: 906
diff changeset
    55
        _list = this.source.getAnnotationsByTypeTitle(this.segment_annotation_type).filter(function(_annotation) {
f56199193fad CreateAnnotation widget now posts annotations, Tagcloud can be made segment-dependent
veltr
parents: 906
diff changeset
    56
            return _annotation.begin <= _time && _annotation.end > _time;
f56199193fad CreateAnnotation widget now posts annotations, Tagcloud can be made segment-dependent
veltr
parents: 906
diff changeset
    57
        });
f56199193fad CreateAnnotation widget now posts annotations, Tagcloud can be made segment-dependent
veltr
parents: 906
diff changeset
    58
    if (_list.length) {
f56199193fad CreateAnnotation widget now posts annotations, Tagcloud can be made segment-dependent
veltr
parents: 906
diff changeset
    59
        if (_list[0].begin !== this.begin_time || _list[0].end !== this.end_time) {
f56199193fad CreateAnnotation widget now posts annotations, Tagcloud can be made segment-dependent
veltr
parents: 906
diff changeset
    60
            this.begin_time = _list[0].begin;
f56199193fad CreateAnnotation widget now posts annotations, Tagcloud can be made segment-dependent
veltr
parents: 906
diff changeset
    61
            this.end_time = _list[0].end;
f56199193fad CreateAnnotation widget now posts annotations, Tagcloud can be made segment-dependent
veltr
parents: 906
diff changeset
    62
            this.redraw();
f56199193fad CreateAnnotation widget now posts annotations, Tagcloud can be made segment-dependent
veltr
parents: 906
diff changeset
    63
        }
f56199193fad CreateAnnotation widget now posts annotations, Tagcloud can be made segment-dependent
veltr
parents: 906
diff changeset
    64
    }
f56199193fad CreateAnnotation widget now posts annotations, Tagcloud can be made segment-dependent
veltr
parents: 906
diff changeset
    65
}
f56199193fad CreateAnnotation widget now posts annotations, Tagcloud can be made segment-dependent
veltr
parents: 906
diff changeset
    66
f56199193fad CreateAnnotation widget now posts annotations, Tagcloud can be made segment-dependent
veltr
parents: 906
diff changeset
    67
IriSP.Widgets.Tagcloud.prototype.redraw = function() {
880
4c7b33bf2795 Started work on CreateAnnotation and Mediafragment
veltr
parents:
diff changeset
    68
    var _urlRegExp = /https?:\/\/[0-9a-zA-Z\.%\/-_]+/g,
4c7b33bf2795 Started work on CreateAnnotation and Mediafragment
veltr
parents:
diff changeset
    69
        _regexpword = /[^\s\.&;,'"!\?\d\(\)\+\[\]\\\…\-«»:\/]{3,}/g,
4c7b33bf2795 Started work on CreateAnnotation and Mediafragment
veltr
parents:
diff changeset
    70
        _words = {},
908
f56199193fad CreateAnnotation widget now posts annotations, Tagcloud can be made segment-dependent
veltr
parents: 906
diff changeset
    71
        _this = this,
f56199193fad CreateAnnotation widget now posts annotations, Tagcloud can be made segment-dependent
veltr
parents: 906
diff changeset
    72
        _annotations = this.getWidgetAnnotations();
f56199193fad CreateAnnotation widget now posts annotations, Tagcloud can be made segment-dependent
veltr
parents: 906
diff changeset
    73
        
f56199193fad CreateAnnotation widget now posts annotations, Tagcloud can be made segment-dependent
veltr
parents: 906
diff changeset
    74
    if (typeof this.begin_time !== "undefined" && typeof this.end_time !== "undefined") {
f56199193fad CreateAnnotation widget now posts annotations, Tagcloud can be made segment-dependent
veltr
parents: 906
diff changeset
    75
        _annotations = _annotations.filter(function(_annotation) {
f56199193fad CreateAnnotation widget now posts annotations, Tagcloud can be made segment-dependent
veltr
parents: 906
diff changeset
    76
            return _annotation.begin >= _this.begin_time && _annotation.end <= _this.end_time;
f56199193fad CreateAnnotation widget now posts annotations, Tagcloud can be made segment-dependent
veltr
parents: 906
diff changeset
    77
        })
f56199193fad CreateAnnotation widget now posts annotations, Tagcloud can be made segment-dependent
veltr
parents: 906
diff changeset
    78
    }
f56199193fad CreateAnnotation widget now posts annotations, Tagcloud can be made segment-dependent
veltr
parents: 906
diff changeset
    79
    
f56199193fad CreateAnnotation widget now posts annotations, Tagcloud can be made segment-dependent
veltr
parents: 906
diff changeset
    80
    _annotations.forEach(function(_annotation) {
f56199193fad CreateAnnotation widget now posts annotations, Tagcloud can be made segment-dependent
veltr
parents: 906
diff changeset
    81
       var _txt =
f56199193fad CreateAnnotation widget now posts annotations, Tagcloud can be made segment-dependent
veltr
parents: 906
diff changeset
    82
            (_this.include_titles ? _annotation.title : '')
f56199193fad CreateAnnotation widget now posts annotations, Tagcloud can be made segment-dependent
veltr
parents: 906
diff changeset
    83
            + ' '
f56199193fad CreateAnnotation widget now posts annotations, Tagcloud can be made segment-dependent
veltr
parents: 906
diff changeset
    84
            + (_this.include_descriptions ? _annotation.description : '')
f56199193fad CreateAnnotation widget now posts annotations, Tagcloud can be made segment-dependent
veltr
parents: 906
diff changeset
    85
            + ' '
f56199193fad CreateAnnotation widget now posts annotations, Tagcloud can be made segment-dependent
veltr
parents: 906
diff changeset
    86
            + (_this.include_tag_texts ? _annotation.getTagTexts() : '');
880
4c7b33bf2795 Started work on CreateAnnotation and Mediafragment
veltr
parents:
diff changeset
    87
       IriSP._(_txt.toLowerCase().replace(_urlRegExp, '').match(_regexpword)).each(function(_word) {
4c7b33bf2795 Started work on CreateAnnotation and Mediafragment
veltr
parents:
diff changeset
    88
           if (IriSP._(_this.stopwords).indexOf(_word) == -1 && (!_this.exclude_pattern || !_this.exclude_pattern.test(_word))) {
4c7b33bf2795 Started work on CreateAnnotation and Mediafragment
veltr
parents:
diff changeset
    89
               _words[_word] = 1 + (_words[_word] || 0);
4c7b33bf2795 Started work on CreateAnnotation and Mediafragment
veltr
parents:
diff changeset
    90
           }
4c7b33bf2795 Started work on CreateAnnotation and Mediafragment
veltr
parents:
diff changeset
    91
       })
4c7b33bf2795 Started work on CreateAnnotation and Mediafragment
veltr
parents:
diff changeset
    92
    });
4c7b33bf2795 Started work on CreateAnnotation and Mediafragment
veltr
parents:
diff changeset
    93
    _words = IriSP._(_words)
4c7b33bf2795 Started work on CreateAnnotation and Mediafragment
veltr
parents:
diff changeset
    94
        .chain()
4c7b33bf2795 Started work on CreateAnnotation and Mediafragment
veltr
parents:
diff changeset
    95
        .map(function(_v, _k) {
4c7b33bf2795 Started work on CreateAnnotation and Mediafragment
veltr
parents:
diff changeset
    96
            return {
4c7b33bf2795 Started work on CreateAnnotation and Mediafragment
veltr
parents:
diff changeset
    97
                "word" : _k,
4c7b33bf2795 Started work on CreateAnnotation and Mediafragment
veltr
parents:
diff changeset
    98
                "count" : _v
4c7b33bf2795 Started work on CreateAnnotation and Mediafragment
veltr
parents:
diff changeset
    99
            }
4c7b33bf2795 Started work on CreateAnnotation and Mediafragment
veltr
parents:
diff changeset
   100
        })
4c7b33bf2795 Started work on CreateAnnotation and Mediafragment
veltr
parents:
diff changeset
   101
        .filter(function(_v) {
4c7b33bf2795 Started work on CreateAnnotation and Mediafragment
veltr
parents:
diff changeset
   102
            return _v.count > 2;
4c7b33bf2795 Started work on CreateAnnotation and Mediafragment
veltr
parents:
diff changeset
   103
        })
4c7b33bf2795 Started work on CreateAnnotation and Mediafragment
veltr
parents:
diff changeset
   104
        .sortBy(function(_v) {
4c7b33bf2795 Started work on CreateAnnotation and Mediafragment
veltr
parents:
diff changeset
   105
            return - _v.count;
4c7b33bf2795 Started work on CreateAnnotation and Mediafragment
veltr
parents:
diff changeset
   106
        })
4c7b33bf2795 Started work on CreateAnnotation and Mediafragment
veltr
parents:
diff changeset
   107
        .first(this.tag_count)
4c7b33bf2795 Started work on CreateAnnotation and Mediafragment
veltr
parents:
diff changeset
   108
        .value();
908
f56199193fad CreateAnnotation widget now posts annotations, Tagcloud can be made segment-dependent
veltr
parents: 906
diff changeset
   109
    if (_words.length) {
f56199193fad CreateAnnotation widget now posts annotations, Tagcloud can be made segment-dependent
veltr
parents: 906
diff changeset
   110
        var _max = _words[0].count,
f56199193fad CreateAnnotation widget now posts annotations, Tagcloud can be made segment-dependent
veltr
parents: 906
diff changeset
   111
            _min = Math.min(_words[_words.length - 1].count, _max - 1),
f56199193fad CreateAnnotation widget now posts annotations, Tagcloud can be made segment-dependent
veltr
parents: 906
diff changeset
   112
            _scale = (this.max_font_size - this.min_font_size) / Math.sqrt(_max - _min);
f56199193fad CreateAnnotation widget now posts annotations, Tagcloud can be made segment-dependent
veltr
parents: 906
diff changeset
   113
        IriSP._(_words).each(function(_word) {
f56199193fad CreateAnnotation widget now posts annotations, Tagcloud can be made segment-dependent
veltr
parents: 906
diff changeset
   114
                _word.size = Math.floor( _this.min_font_size + _scale * Math.sqrt(_word.count - _min) );
f56199193fad CreateAnnotation widget now posts annotations, Tagcloud can be made segment-dependent
veltr
parents: 906
diff changeset
   115
            });
883
d35ad8111c5e Updated Popcorn and JwPlayer to the latest versions
veltr
parents: 882
diff changeset
   116
    }
908
f56199193fad CreateAnnotation widget now posts annotations, Tagcloud can be made segment-dependent
veltr
parents: 906
diff changeset
   117
    this.$.html(Mustache.to_html(this.template,  {words: _words }));
f56199193fad CreateAnnotation widget now posts annotations, Tagcloud can be made segment-dependent
veltr
parents: 906
diff changeset
   118
    this.$.find(".Ldt-Tagcloud-item").click(function() {
880
4c7b33bf2795 Started work on CreateAnnotation and Mediafragment
veltr
parents:
diff changeset
   119
        var _txt = IriSP.jQuery(this).attr("content");
4c7b33bf2795 Started work on CreateAnnotation and Mediafragment
veltr
parents:
diff changeset
   120
        _this.player.popcorn.trigger("IriSP.search.triggeredSearch", _txt);
4c7b33bf2795 Started work on CreateAnnotation and Mediafragment
veltr
parents:
diff changeset
   121
    });
908
f56199193fad CreateAnnotation widget now posts annotations, Tagcloud can be made segment-dependent
veltr
parents: 906
diff changeset
   122
    
880
4c7b33bf2795 Started work on CreateAnnotation and Mediafragment
veltr
parents:
diff changeset
   123
}
4c7b33bf2795 Started work on CreateAnnotation and Mediafragment
veltr
parents:
diff changeset
   124
4c7b33bf2795 Started work on CreateAnnotation and Mediafragment
veltr
parents:
diff changeset
   125
IriSP.Widgets.Tagcloud.prototype.onSearch = function(searchString) {
4c7b33bf2795 Started work on CreateAnnotation and Mediafragment
veltr
parents:
diff changeset
   126
    searchString = typeof searchString !== "undefined" ? searchString : '';
4c7b33bf2795 Started work on CreateAnnotation and Mediafragment
veltr
parents:
diff changeset
   127
    if (searchString) {
4c7b33bf2795 Started work on CreateAnnotation and Mediafragment
veltr
parents:
diff changeset
   128
        var _rgxp = IriSP.Model.regexpFromTextOrArray(searchString);
4c7b33bf2795 Started work on CreateAnnotation and Mediafragment
veltr
parents:
diff changeset
   129
    }
908
f56199193fad CreateAnnotation widget now posts annotations, Tagcloud can be made segment-dependent
veltr
parents: 906
diff changeset
   130
    this.$.find(".Ldt-Tagcloud-item").each(function() {
880
4c7b33bf2795 Started work on CreateAnnotation and Mediafragment
veltr
parents:
diff changeset
   131
        var _el = IriSP.jQuery(this),
4c7b33bf2795 Started work on CreateAnnotation and Mediafragment
veltr
parents:
diff changeset
   132
            _txt = _el.attr("content");
4c7b33bf2795 Started work on CreateAnnotation and Mediafragment
veltr
parents:
diff changeset
   133
        if (searchString) {
4c7b33bf2795 Started work on CreateAnnotation and Mediafragment
veltr
parents:
diff changeset
   134
            _el.html(_txt.replace(_rgxp, '<span class="Ldt-Tagcloud-active">$1</span>'));
4c7b33bf2795 Started work on CreateAnnotation and Mediafragment
veltr
parents:
diff changeset
   135
        } else {
4c7b33bf2795 Started work on CreateAnnotation and Mediafragment
veltr
parents:
diff changeset
   136
            _el.html(_txt);
4c7b33bf2795 Started work on CreateAnnotation and Mediafragment
veltr
parents:
diff changeset
   137
        }
4c7b33bf2795 Started work on CreateAnnotation and Mediafragment
veltr
parents:
diff changeset
   138
    });
4c7b33bf2795 Started work on CreateAnnotation and Mediafragment
veltr
parents:
diff changeset
   139
}