src/js/widgets/tagCloudWidget.js
author veltr
Thu, 22 Mar 2012 18:42:31 +0100
branchpopcorn-port
changeset 837 353a78021ebc
parent 830 18ca612e9ff0
permissions -rw-r--r--
Added Internationalization
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
675
82a5ebbedc83 Added a Tag Cloud Widget and corrected Stack Graph Widget
veltr
parents:
diff changeset
     1
IriSP.TagCloudWidget = function(Popcorn, config, Serializer) {
82a5ebbedc83 Added a Tag Cloud Widget and corrected Stack Graph Widget
veltr
parents:
diff changeset
     2
  IriSP.Widget.call(this, Popcorn, config, Serializer);
82a5ebbedc83 Added a Tag Cloud Widget and corrected Stack Graph Widget
veltr
parents:
diff changeset
     3
}
82a5ebbedc83 Added a Tag Cloud Widget and corrected Stack Graph Widget
veltr
parents:
diff changeset
     4
82a5ebbedc83 Added a Tag Cloud Widget and corrected Stack Graph Widget
veltr
parents:
diff changeset
     5
IriSP.TagCloudWidget.prototype = new IriSP.Widget();
82a5ebbedc83 Added a Tag Cloud Widget and corrected Stack Graph Widget
veltr
parents:
diff changeset
     6
82a5ebbedc83 Added a Tag Cloud Widget and corrected Stack Graph Widget
veltr
parents:
diff changeset
     7
IriSP.TagCloudWidget.prototype.draw = function() {
82a5ebbedc83 Added a Tag Cloud Widget and corrected Stack Graph Widget
veltr
parents:
diff changeset
     8
    
829
ae16691d183d Corrected segments widget, added excludePattern option to tagcloud widget
veltr
parents: 766
diff changeset
     9
    var _urlRegExp = /https?:\/\/[0-9a-zA-Z\.%\/-_]+/g,
ae16691d183d Corrected segments widget, added excludePattern option to tagcloud widget
veltr
parents: 766
diff changeset
    10
        _stopWords = [
830
18ca612e9ff0 Lots of changes
veltr
parents: 829
diff changeset
    11
            'aussi', 'and', 'avec', 'aux', 'bien', 'car', 'cette', 'comme', 'dans', 'donc', 'des', 'elle', 'encore', 'entre', 'est',
829
ae16691d183d Corrected segments widget, added excludePattern option to tagcloud widget
veltr
parents: 766
diff changeset
    12
            'être', 'eux', 'faire', 'fait', 'http', 'ici', 'ils', 'les', 'leur', 'leurs', 'mais', 'mes', 'même', 'mon', 'notre',
830
18ca612e9ff0 Lots of changes
veltr
parents: 829
diff changeset
    13
            'non', 'nos', 'nous', 'ont', 'par', 'pas', 'peu', 'peut', 'plus', 'pour', 'que', 'qui', 'sans', 'ses' ,'son', 'sont', 'sur',
829
ae16691d183d Corrected segments widget, added excludePattern option to tagcloud widget
veltr
parents: 766
diff changeset
    14
            'tes', 'très', 'the', 'ton', 'tous', 'tout', 'une', 'votre', 'vos', 'vous' ],
675
82a5ebbedc83 Added a Tag Cloud Widget and corrected Stack Graph Widget
veltr
parents:
diff changeset
    15
        _regexpword = /[^\s\.&;,'"!\?\d\(\)\+\[\]\\\…\-«»:\/]{3,}/g,
82a5ebbedc83 Added a Tag Cloud Widget and corrected Stack Graph Widget
veltr
parents:
diff changeset
    16
        _words = {},
82a5ebbedc83 Added a Tag Cloud Widget and corrected Stack Graph Widget
veltr
parents:
diff changeset
    17
        _showTitle = !this._config.excludeTitle,
82a5ebbedc83 Added a Tag Cloud Widget and corrected Stack Graph Widget
veltr
parents:
diff changeset
    18
        _showDescription = !this._config.excludeDescription,
829
ae16691d183d Corrected segments widget, added excludePattern option to tagcloud widget
veltr
parents: 766
diff changeset
    19
        _excludePattern = this._config.excludePattern || null,
675
82a5ebbedc83 Added a Tag Cloud Widget and corrected Stack Graph Widget
veltr
parents:
diff changeset
    20
        _tagCount = this._config.tagCount || 30;
829
ae16691d183d Corrected segments widget, added excludePattern option to tagcloud widget
veltr
parents: 766
diff changeset
    21
    if (typeof this._config.excludeWords !== "undefined" && this._config.excludeWords.length) {
ae16691d183d Corrected segments widget, added excludePattern option to tagcloud widget
veltr
parents: 766
diff changeset
    22
        IriSP._(this._config.excludeWords).each(function(_w) {
ae16691d183d Corrected segments widget, added excludePattern option to tagcloud widget
veltr
parents: 766
diff changeset
    23
            _stopWords.push(_w.toLowerCase());
ae16691d183d Corrected segments widget, added excludePattern option to tagcloud widget
veltr
parents: 766
diff changeset
    24
        });
ae16691d183d Corrected segments widget, added excludePattern option to tagcloud widget
veltr
parents: 766
diff changeset
    25
    }
675
82a5ebbedc83 Added a Tag Cloud Widget and corrected Stack Graph Widget
veltr
parents:
diff changeset
    26
    
82a5ebbedc83 Added a Tag Cloud Widget and corrected Stack Graph Widget
veltr
parents:
diff changeset
    27
    IriSP._(this._serializer._data.annotations).each(function(_annotation) {
82a5ebbedc83 Added a Tag Cloud Widget and corrected Stack Graph Widget
veltr
parents:
diff changeset
    28
       if (_annotation.content && _annotation.content.description) {
82a5ebbedc83 Added a Tag Cloud Widget and corrected Stack Graph Widget
veltr
parents:
diff changeset
    29
           var _txt = (_showTitle ? _annotation.content.title : '') + ' ' + (_showDescription ? _annotation.content.description : '')
829
ae16691d183d Corrected segments widget, added excludePattern option to tagcloud widget
veltr
parents: 766
diff changeset
    30
           IriSP._(_txt.toLowerCase().replace(_urlRegExp, '').match(_regexpword)).each(function(_mot) {
ae16691d183d Corrected segments widget, added excludePattern option to tagcloud widget
veltr
parents: 766
diff changeset
    31
               if (_stopWords.indexOf(_mot) == -1 && (_excludePattern == null || !_excludePattern.test(_mot))) {
675
82a5ebbedc83 Added a Tag Cloud Widget and corrected Stack Graph Widget
veltr
parents:
diff changeset
    32
                   _words[_mot] = 1 + (_words[_mot] || 0);
82a5ebbedc83 Added a Tag Cloud Widget and corrected Stack Graph Widget
veltr
parents:
diff changeset
    33
               }
82a5ebbedc83 Added a Tag Cloud Widget and corrected Stack Graph Widget
veltr
parents:
diff changeset
    34
           })
82a5ebbedc83 Added a Tag Cloud Widget and corrected Stack Graph Widget
veltr
parents:
diff changeset
    35
       } 
82a5ebbedc83 Added a Tag Cloud Widget and corrected Stack Graph Widget
veltr
parents:
diff changeset
    36
    });
82a5ebbedc83 Added a Tag Cloud Widget and corrected Stack Graph Widget
veltr
parents:
diff changeset
    37
    
82a5ebbedc83 Added a Tag Cloud Widget and corrected Stack Graph Widget
veltr
parents:
diff changeset
    38
    _words = IriSP._(_words)
82a5ebbedc83 Added a Tag Cloud Widget and corrected Stack Graph Widget
veltr
parents:
diff changeset
    39
        .chain()
82a5ebbedc83 Added a Tag Cloud Widget and corrected Stack Graph Widget
veltr
parents:
diff changeset
    40
        .map(function(_v, _k) {
82a5ebbedc83 Added a Tag Cloud Widget and corrected Stack Graph Widget
veltr
parents:
diff changeset
    41
            return {
82a5ebbedc83 Added a Tag Cloud Widget and corrected Stack Graph Widget
veltr
parents:
diff changeset
    42
                "word" : _k,
766
aa26ddaf2556 fixed raphael's files to remove trailing colon at the end of objects to make
hamidouk
parents: 737
diff changeset
    43
                "count" : _v
675
82a5ebbedc83 Added a Tag Cloud Widget and corrected Stack Graph Widget
veltr
parents:
diff changeset
    44
            }
82a5ebbedc83 Added a Tag Cloud Widget and corrected Stack Graph Widget
veltr
parents:
diff changeset
    45
        })
82a5ebbedc83 Added a Tag Cloud Widget and corrected Stack Graph Widget
veltr
parents:
diff changeset
    46
        .filter(function(_v) {
82a5ebbedc83 Added a Tag Cloud Widget and corrected Stack Graph Widget
veltr
parents:
diff changeset
    47
            return _v.count > 2;
82a5ebbedc83 Added a Tag Cloud Widget and corrected Stack Graph Widget
veltr
parents:
diff changeset
    48
        })
82a5ebbedc83 Added a Tag Cloud Widget and corrected Stack Graph Widget
veltr
parents:
diff changeset
    49
        .sortBy(function(_v) {
82a5ebbedc83 Added a Tag Cloud Widget and corrected Stack Graph Widget
veltr
parents:
diff changeset
    50
            return - _v.count;
82a5ebbedc83 Added a Tag Cloud Widget and corrected Stack Graph Widget
veltr
parents:
diff changeset
    51
        })
82a5ebbedc83 Added a Tag Cloud Widget and corrected Stack Graph Widget
veltr
parents:
diff changeset
    52
        .first(_tagCount)
82a5ebbedc83 Added a Tag Cloud Widget and corrected Stack Graph Widget
veltr
parents:
diff changeset
    53
        .value();
82a5ebbedc83 Added a Tag Cloud Widget and corrected Stack Graph Widget
veltr
parents:
diff changeset
    54
    var _max = _words[0].count,
82a5ebbedc83 Added a Tag Cloud Widget and corrected Stack Graph Widget
veltr
parents:
diff changeset
    55
        _min = Math.min(_words[_words.length - 1].count, _max - 1),
82a5ebbedc83 Added a Tag Cloud Widget and corrected Stack Graph Widget
veltr
parents:
diff changeset
    56
        _scale = 16 / Math.sqrt(_max - _min),
728
9ee6badcb160 Search function on tagcloud widget
veltr
parents: 725
diff changeset
    57
        _this = this,
675
82a5ebbedc83 Added a Tag Cloud Widget and corrected Stack Graph Widget
veltr
parents:
diff changeset
    58
        _html = '<ul>'
82a5ebbedc83 Added a Tag Cloud Widget and corrected Stack Graph Widget
veltr
parents:
diff changeset
    59
            + IriSP._(_words)
82a5ebbedc83 Added a Tag Cloud Widget and corrected Stack Graph Widget
veltr
parents:
diff changeset
    60
                .chain()
82a5ebbedc83 Added a Tag Cloud Widget and corrected Stack Graph Widget
veltr
parents:
diff changeset
    61
                .shuffle()
82a5ebbedc83 Added a Tag Cloud Widget and corrected Stack Graph Widget
veltr
parents:
diff changeset
    62
                .map(function(_word) {
82a5ebbedc83 Added a Tag Cloud Widget and corrected Stack Graph Widget
veltr
parents:
diff changeset
    63
                    var _size = 10 + _scale * Math.sqrt(_word.count - _min);
830
18ca612e9ff0 Lots of changes
veltr
parents: 829
diff changeset
    64
                    return '<li class="Ldt-TraceMe" style="font-size:'
675
82a5ebbedc83 Added a Tag Cloud Widget and corrected Stack Graph Widget
veltr
parents:
diff changeset
    65
                        + _size
82a5ebbedc83 Added a Tag Cloud Widget and corrected Stack Graph Widget
veltr
parents:
diff changeset
    66
                        + 'px;">'
82a5ebbedc83 Added a Tag Cloud Widget and corrected Stack Graph Widget
veltr
parents:
diff changeset
    67
                        + _word.word
82a5ebbedc83 Added a Tag Cloud Widget and corrected Stack Graph Widget
veltr
parents:
diff changeset
    68
                        + '</li>'
82a5ebbedc83 Added a Tag Cloud Widget and corrected Stack Graph Widget
veltr
parents:
diff changeset
    69
                })
82a5ebbedc83 Added a Tag Cloud Widget and corrected Stack Graph Widget
veltr
parents:
diff changeset
    70
                .value()
82a5ebbedc83 Added a Tag Cloud Widget and corrected Stack Graph Widget
veltr
parents:
diff changeset
    71
                .join("")
82a5ebbedc83 Added a Tag Cloud Widget and corrected Stack Graph Widget
veltr
parents:
diff changeset
    72
            + '</ul>';
82a5ebbedc83 Added a Tag Cloud Widget and corrected Stack Graph Widget
veltr
parents:
diff changeset
    73
    this.selector
82a5ebbedc83 Added a Tag Cloud Widget and corrected Stack Graph Widget
veltr
parents:
diff changeset
    74
        .addClass("Ldt-TagCloud")
82a5ebbedc83 Added a Tag Cloud Widget and corrected Stack Graph Widget
veltr
parents:
diff changeset
    75
        .html(_html);
728
9ee6badcb160 Search function on tagcloud widget
veltr
parents: 725
diff changeset
    76
    this.selector.find("li").click(function() {
9ee6badcb160 Search function on tagcloud widget
veltr
parents: 725
diff changeset
    77
        var _txt = this.textContent.replace(/(^[\s]+|[\s]+$)/g,'');
736
eff5206f6877 tagcloud now triggers search
veltr
parents: 728
diff changeset
    78
        _this._Popcorn.trigger("IriSP.search.triggeredSearch", _txt);
728
9ee6badcb160 Search function on tagcloud widget
veltr
parents: 725
diff changeset
    79
    });
9ee6badcb160 Search function on tagcloud widget
veltr
parents: 725
diff changeset
    80
    this._Popcorn.listen("IriSP.search", IriSP.wrap(this, function(searchString) {
9ee6badcb160 Search function on tagcloud widget
veltr
parents: 725
diff changeset
    81
        var _rgxp = new RegExp("(" + searchString.replace(/(\W)/g,'\\$1') + ")","gi");
9ee6badcb160 Search function on tagcloud widget
veltr
parents: 725
diff changeset
    82
        this.selector.find("li").each(function(_i, _e) {
9ee6badcb160 Search function on tagcloud widget
veltr
parents: 725
diff changeset
    83
            _e.innerHTML = searchString.length ?
830
18ca612e9ff0 Lots of changes
veltr
parents: 829
diff changeset
    84
                _e.textContent.replace(_rgxp,'<span class="Ldt-TagCloud-actif Ldt-TraceMe">$1</span>')
728
9ee6badcb160 Search function on tagcloud widget
veltr
parents: 725
diff changeset
    85
                : _e.textContent;
9ee6badcb160 Search function on tagcloud widget
veltr
parents: 725
diff changeset
    86
        });
9ee6badcb160 Search function on tagcloud widget
veltr
parents: 725
diff changeset
    87
    }));
737
c12b9a11102c Tagcloud listens to searchend
veltr
parents: 736
diff changeset
    88
    this._Popcorn.listen("IriSP.search.closed", IriSP.wrap(this, this.endsearch));
c12b9a11102c Tagcloud listens to searchend
veltr
parents: 736
diff changeset
    89
    this._Popcorn.listen("IriSP.search.cleared", IriSP.wrap(this, this.endsearch));
675
82a5ebbedc83 Added a Tag Cloud Widget and corrected Stack Graph Widget
veltr
parents:
diff changeset
    90
}
728
9ee6badcb160 Search function on tagcloud widget
veltr
parents: 725
diff changeset
    91
9ee6badcb160 Search function on tagcloud widget
veltr
parents: 725
diff changeset
    92
IriSP.TagCloudWidget.prototype.endsearch = function() {
9ee6badcb160 Search function on tagcloud widget
veltr
parents: 725
diff changeset
    93
    this.selector.find("li").each(function(_i, _e) {
9ee6badcb160 Search function on tagcloud widget
veltr
parents: 725
diff changeset
    94
        _e.innerHTML = _e.textContent;
9ee6badcb160 Search function on tagcloud widget
veltr
parents: 725
diff changeset
    95
    });
9ee6badcb160 Search function on tagcloud widget
veltr
parents: 725
diff changeset
    96
}