src/js/widgets/tagCloudWidget.js
author hamidouk
Fri, 03 Feb 2012 16:42:07 +0100
branchpopcorn-port
changeset 776 f3c758ef9952
parent 766 aa26ddaf2556
child 829 ae16691d183d
permissions -rw-r--r--
moar checking.
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
    
82a5ebbedc83 Added a Tag Cloud Widget and corrected Stack Graph Widget
veltr
parents:
diff changeset
     9
    var _stopwords = [
82a5ebbedc83 Added a Tag Cloud Widget and corrected Stack Graph Widget
veltr
parents:
diff changeset
    10
            'aussi', 'and', 'avec', 'aux', 'car', 'cette', 'comme', 'dans', 'donc', 'des', 'elle', 'est',
82a5ebbedc83 Added a Tag Cloud Widget and corrected Stack Graph Widget
veltr
parents:
diff changeset
    11
            'être', 'eux', 'fait', 'ici', 'ils', 'les', 'leur', 'leurs', 'mais', 'mes', 'même', 'mon', 'notre',
725
067002a5131d a minor change
veltr
parents: 675
diff changeset
    12
            'non', 'nos', 'nous', 'ont', 'par', 'pas', 'peu', 'pour', 'que', 'qui', 'ses' ,'son', 'sont', 'sur',
675
82a5ebbedc83 Added a Tag Cloud Widget and corrected Stack Graph Widget
veltr
parents:
diff changeset
    13
            'tes', 'très', 'the', 'ton', 'tous', 'tout', 'une', 'votre', 'vos', 'vous'
82a5ebbedc83 Added a Tag Cloud Widget and corrected Stack Graph Widget
veltr
parents:
diff changeset
    14
        ],
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,
82a5ebbedc83 Added a Tag Cloud Widget and corrected Stack Graph Widget
veltr
parents:
diff changeset
    19
        _tagCount = this._config.tagCount || 30;
82a5ebbedc83 Added a Tag Cloud Widget and corrected Stack Graph Widget
veltr
parents:
diff changeset
    20
    
82a5ebbedc83 Added a Tag Cloud Widget and corrected Stack Graph Widget
veltr
parents:
diff changeset
    21
    IriSP._(this._serializer._data.annotations).each(function(_annotation) {
82a5ebbedc83 Added a Tag Cloud Widget and corrected Stack Graph Widget
veltr
parents:
diff changeset
    22
       if (_annotation.content && _annotation.content.description) {
82a5ebbedc83 Added a Tag Cloud Widget and corrected Stack Graph Widget
veltr
parents:
diff changeset
    23
           var _txt = (_showTitle ? _annotation.content.title : '') + ' ' + (_showDescription ? _annotation.content.description : '')
82a5ebbedc83 Added a Tag Cloud Widget and corrected Stack Graph Widget
veltr
parents:
diff changeset
    24
           IriSP._(_txt.toLowerCase().match(_regexpword)).each(function(_mot) {
82a5ebbedc83 Added a Tag Cloud Widget and corrected Stack Graph Widget
veltr
parents:
diff changeset
    25
               if (_stopwords.indexOf(_mot) == -1) {
82a5ebbedc83 Added a Tag Cloud Widget and corrected Stack Graph Widget
veltr
parents:
diff changeset
    26
                   _words[_mot] = 1 + (_words[_mot] || 0);
82a5ebbedc83 Added a Tag Cloud Widget and corrected Stack Graph Widget
veltr
parents:
diff changeset
    27
               }
82a5ebbedc83 Added a Tag Cloud Widget and corrected Stack Graph Widget
veltr
parents:
diff changeset
    28
           })
82a5ebbedc83 Added a Tag Cloud Widget and corrected Stack Graph Widget
veltr
parents:
diff changeset
    29
       } 
82a5ebbedc83 Added a Tag Cloud Widget and corrected Stack Graph Widget
veltr
parents:
diff changeset
    30
    });
82a5ebbedc83 Added a Tag Cloud Widget and corrected Stack Graph Widget
veltr
parents:
diff changeset
    31
    
82a5ebbedc83 Added a Tag Cloud Widget and corrected Stack Graph Widget
veltr
parents:
diff changeset
    32
    _words = IriSP._(_words)
82a5ebbedc83 Added a Tag Cloud Widget and corrected Stack Graph Widget
veltr
parents:
diff changeset
    33
        .chain()
82a5ebbedc83 Added a Tag Cloud Widget and corrected Stack Graph Widget
veltr
parents:
diff changeset
    34
        .map(function(_v, _k) {
82a5ebbedc83 Added a Tag Cloud Widget and corrected Stack Graph Widget
veltr
parents:
diff changeset
    35
            return {
82a5ebbedc83 Added a Tag Cloud Widget and corrected Stack Graph Widget
veltr
parents:
diff changeset
    36
                "word" : _k,
766
aa26ddaf2556 fixed raphael's files to remove trailing colon at the end of objects to make
hamidouk
parents: 737
diff changeset
    37
                "count" : _v
675
82a5ebbedc83 Added a Tag Cloud Widget and corrected Stack Graph Widget
veltr
parents:
diff changeset
    38
            }
82a5ebbedc83 Added a Tag Cloud Widget and corrected Stack Graph Widget
veltr
parents:
diff changeset
    39
        })
82a5ebbedc83 Added a Tag Cloud Widget and corrected Stack Graph Widget
veltr
parents:
diff changeset
    40
        .filter(function(_v) {
82a5ebbedc83 Added a Tag Cloud Widget and corrected Stack Graph Widget
veltr
parents:
diff changeset
    41
            return _v.count > 2;
82a5ebbedc83 Added a Tag Cloud Widget and corrected Stack Graph Widget
veltr
parents:
diff changeset
    42
        })
82a5ebbedc83 Added a Tag Cloud Widget and corrected Stack Graph Widget
veltr
parents:
diff changeset
    43
        .sortBy(function(_v) {
82a5ebbedc83 Added a Tag Cloud Widget and corrected Stack Graph Widget
veltr
parents:
diff changeset
    44
            return - _v.count;
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
        .first(_tagCount)
82a5ebbedc83 Added a Tag Cloud Widget and corrected Stack Graph Widget
veltr
parents:
diff changeset
    47
        .value();
82a5ebbedc83 Added a Tag Cloud Widget and corrected Stack Graph Widget
veltr
parents:
diff changeset
    48
    var _max = _words[0].count,
82a5ebbedc83 Added a Tag Cloud Widget and corrected Stack Graph Widget
veltr
parents:
diff changeset
    49
        _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
    50
        _scale = 16 / Math.sqrt(_max - _min),
728
9ee6badcb160 Search function on tagcloud widget
veltr
parents: 725
diff changeset
    51
        _this = this,
675
82a5ebbedc83 Added a Tag Cloud Widget and corrected Stack Graph Widget
veltr
parents:
diff changeset
    52
        _html = '<ul>'
82a5ebbedc83 Added a Tag Cloud Widget and corrected Stack Graph Widget
veltr
parents:
diff changeset
    53
            + IriSP._(_words)
82a5ebbedc83 Added a Tag Cloud Widget and corrected Stack Graph Widget
veltr
parents:
diff changeset
    54
                .chain()
82a5ebbedc83 Added a Tag Cloud Widget and corrected Stack Graph Widget
veltr
parents:
diff changeset
    55
                .shuffle()
82a5ebbedc83 Added a Tag Cloud Widget and corrected Stack Graph Widget
veltr
parents:
diff changeset
    56
                .map(function(_word) {
82a5ebbedc83 Added a Tag Cloud Widget and corrected Stack Graph Widget
veltr
parents:
diff changeset
    57
                    var _size = 10 + _scale * Math.sqrt(_word.count - _min);
82a5ebbedc83 Added a Tag Cloud Widget and corrected Stack Graph Widget
veltr
parents:
diff changeset
    58
                    return '<li style="font-size:'
82a5ebbedc83 Added a Tag Cloud Widget and corrected Stack Graph Widget
veltr
parents:
diff changeset
    59
                        + _size
82a5ebbedc83 Added a Tag Cloud Widget and corrected Stack Graph Widget
veltr
parents:
diff changeset
    60
                        + 'px;">'
82a5ebbedc83 Added a Tag Cloud Widget and corrected Stack Graph Widget
veltr
parents:
diff changeset
    61
                        + _word.word
82a5ebbedc83 Added a Tag Cloud Widget and corrected Stack Graph Widget
veltr
parents:
diff changeset
    62
                        + '</li>'
82a5ebbedc83 Added a Tag Cloud Widget and corrected Stack Graph Widget
veltr
parents:
diff changeset
    63
                })
82a5ebbedc83 Added a Tag Cloud Widget and corrected Stack Graph Widget
veltr
parents:
diff changeset
    64
                .value()
82a5ebbedc83 Added a Tag Cloud Widget and corrected Stack Graph Widget
veltr
parents:
diff changeset
    65
                .join("")
82a5ebbedc83 Added a Tag Cloud Widget and corrected Stack Graph Widget
veltr
parents:
diff changeset
    66
            + '</ul>';
82a5ebbedc83 Added a Tag Cloud Widget and corrected Stack Graph Widget
veltr
parents:
diff changeset
    67
    this.selector
82a5ebbedc83 Added a Tag Cloud Widget and corrected Stack Graph Widget
veltr
parents:
diff changeset
    68
        .addClass("Ldt-TagCloud")
82a5ebbedc83 Added a Tag Cloud Widget and corrected Stack Graph Widget
veltr
parents:
diff changeset
    69
        .html(_html);
728
9ee6badcb160 Search function on tagcloud widget
veltr
parents: 725
diff changeset
    70
    this.selector.find("li").click(function() {
9ee6badcb160 Search function on tagcloud widget
veltr
parents: 725
diff changeset
    71
        var _txt = this.textContent.replace(/(^[\s]+|[\s]+$)/g,'');
736
eff5206f6877 tagcloud now triggers search
veltr
parents: 728
diff changeset
    72
        _this._Popcorn.trigger("IriSP.search.triggeredSearch", _txt);
728
9ee6badcb160 Search function on tagcloud widget
veltr
parents: 725
diff changeset
    73
    });
9ee6badcb160 Search function on tagcloud widget
veltr
parents: 725
diff changeset
    74
    this._Popcorn.listen("IriSP.search", IriSP.wrap(this, function(searchString) {
9ee6badcb160 Search function on tagcloud widget
veltr
parents: 725
diff changeset
    75
        var _rgxp = new RegExp("(" + searchString.replace(/(\W)/g,'\\$1') + ")","gi");
9ee6badcb160 Search function on tagcloud widget
veltr
parents: 725
diff changeset
    76
        this.selector.find("li").each(function(_i, _e) {
9ee6badcb160 Search function on tagcloud widget
veltr
parents: 725
diff changeset
    77
            _e.innerHTML = searchString.length ?
9ee6badcb160 Search function on tagcloud widget
veltr
parents: 725
diff changeset
    78
                _e.textContent.replace(_rgxp,'<span class="Ldt-TagCloud-actif">$1</span>')
9ee6badcb160 Search function on tagcloud widget
veltr
parents: 725
diff changeset
    79
                : _e.textContent;
9ee6badcb160 Search function on tagcloud widget
veltr
parents: 725
diff changeset
    80
        });
9ee6badcb160 Search function on tagcloud widget
veltr
parents: 725
diff changeset
    81
    }));
737
c12b9a11102c Tagcloud listens to searchend
veltr
parents: 736
diff changeset
    82
    this._Popcorn.listen("IriSP.search.closed", IriSP.wrap(this, this.endsearch));
c12b9a11102c Tagcloud listens to searchend
veltr
parents: 736
diff changeset
    83
    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
    84
}
728
9ee6badcb160 Search function on tagcloud widget
veltr
parents: 725
diff changeset
    85
9ee6badcb160 Search function on tagcloud widget
veltr
parents: 725
diff changeset
    86
IriSP.TagCloudWidget.prototype.endsearch = function() {
9ee6badcb160 Search function on tagcloud widget
veltr
parents: 725
diff changeset
    87
    this.selector.find("li").each(function(_i, _e) {
9ee6badcb160 Search function on tagcloud widget
veltr
parents: 725
diff changeset
    88
        _e.innerHTML = _e.textContent;
9ee6badcb160 Search function on tagcloud widget
veltr
parents: 725
diff changeset
    89
    });
9ee6badcb160 Search function on tagcloud widget
veltr
parents: 725
diff changeset
    90
}