client/js/twitter-bin.js
author veltr
Tue, 14 May 2013 12:15:15 +0200
changeset 175 f636e2dcfb2c
parent 170 603ffa4c6fa5
permissions -rw-r--r--
eGonomy image fragments support
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
34
08a366a35143 First part of SH design integration
veltr
parents: 26
diff changeset
     1
Rkns.Twitter = {
170
603ffa4c6fa5 correct ";" and "," in javascripts
ymh <ymh.work@gmail.com>
parents: 160
diff changeset
     2
};
34
08a366a35143 First part of SH design integration
veltr
parents: 26
diff changeset
     3
08a366a35143 First part of SH design integration
veltr
parents: 26
diff changeset
     4
Rkns.Twitter.Search = function(_renkan, _opts) {
160
408da84d4dc0 Convert tabs added by ide configuration mistake
veltr
parents: 132
diff changeset
     5
    this.renkan = _renkan;
408da84d4dc0 Convert tabs added by ide configuration mistake
veltr
parents: 132
diff changeset
     6
    this.opts = _opts;
170
603ffa4c6fa5 correct ";" and "," in javascripts
ymh <ymh.work@gmail.com>
parents: 160
diff changeset
     7
};
34
08a366a35143 First part of SH design integration
veltr
parents: 26
diff changeset
     8
08a366a35143 First part of SH design integration
veltr
parents: 26
diff changeset
     9
Rkns.Twitter.Search.prototype.getBgClass = function() {
160
408da84d4dc0 Convert tabs added by ide configuration mistake
veltr
parents: 132
diff changeset
    10
    return "Rk-Twitter-Icon";
170
603ffa4c6fa5 correct ";" and "," in javascripts
ymh <ymh.work@gmail.com>
parents: 160
diff changeset
    11
};
21
b43dd87f7ffa Added Drag+Drop from a tweet list
veltr
parents:
diff changeset
    12
34
08a366a35143 First part of SH design integration
veltr
parents: 26
diff changeset
    13
Rkns.Twitter.Search.prototype.getSearchTitle = function() {
160
408da84d4dc0 Convert tabs added by ide configuration mistake
veltr
parents: 132
diff changeset
    14
    return this.renkan.translate("Twitter");
170
603ffa4c6fa5 correct ";" and "," in javascripts
ymh <ymh.work@gmail.com>
parents: 160
diff changeset
    15
};
34
08a366a35143 First part of SH design integration
veltr
parents: 26
diff changeset
    16
08a366a35143 First part of SH design integration
veltr
parents: 26
diff changeset
    17
Rkns.Twitter.Search.prototype.search = function(_q) {
08a366a35143 First part of SH design integration
veltr
parents: 26
diff changeset
    18
    this.renkan.tabs.push(
08a366a35143 First part of SH design integration
veltr
parents: 26
diff changeset
    19
        new Rkns.Twitter.Bin(this.renkan, {
08a366a35143 First part of SH design integration
veltr
parents: 26
diff changeset
    20
            search: _q
08a366a35143 First part of SH design integration
veltr
parents: 26
diff changeset
    21
        })
08a366a35143 First part of SH design integration
veltr
parents: 26
diff changeset
    22
    );
170
603ffa4c6fa5 correct ";" and "," in javascripts
ymh <ymh.work@gmail.com>
parents: 160
diff changeset
    23
};
34
08a366a35143 First part of SH design integration
veltr
parents: 26
diff changeset
    24
08a366a35143 First part of SH design integration
veltr
parents: 26
diff changeset
    25
Rkns.Twitter.Bin = Rkns.Utils.inherit(Rkns._BaseBin);
08a366a35143 First part of SH design integration
veltr
parents: 26
diff changeset
    26
08a366a35143 First part of SH design integration
veltr
parents: 26
diff changeset
    27
Rkns.Twitter.Bin.prototype.tweetTemplate = Rkns._.template(
68
803dbeb7c919 Improved drag-and-drop. Added ontologies for edges
veltr
parents: 66
diff changeset
    28
    '<li class="Rk-Twitter-Tweet Rk-Bin-Item" draggable="true" data-uri="http://twitter.com/<%=tweet.from_user%>/status/<%=tweet.id_str%>" '
132
860340d4c645 Improvements for CineCard
veltr
parents: 68
diff changeset
    29
    + 'data-title="Tweet by @<%- tweet.from_user %>" data-description="<%-tweet.text%>" data-image="<%- tweet.profile_image_url %>">'
21
b43dd87f7ffa Added Drag+Drop from a tweet list
veltr
parents:
diff changeset
    30
    + '<img class="Rk-Twitter-TwImage" src="<%=tweet.profile_image_url%>" />'
b43dd87f7ffa Added Drag+Drop from a tweet list
veltr
parents:
diff changeset
    31
    + '<h4 class="Rk-Twitter-TwTitle"><a href="http://twitter.com/<%=tweet.from_user%>" target="_blank">@<%=tweet.from_user%></a> (<%=tweet.from_user_name%>)</h4>'
b43dd87f7ffa Added Drag+Drop from a tweet list
veltr
parents:
diff changeset
    32
    + '<p class="Rk-Twitter-TwDate"><%=date%></p>'
b43dd87f7ffa Added Drag+Drop from a tweet list
veltr
parents:
diff changeset
    33
    + '<p class="Rk-Twitter-TwText"><%=text%></p>'
b43dd87f7ffa Added Drag+Drop from a tweet list
veltr
parents:
diff changeset
    34
    + '<p class="Rk-Twitter-TwActions"><a class="Rk-Twitter-TwAction" href="http://twitter.com/<%=tweet.from_user%>/status/<%=tweet.id_str%>" target="_blank">show original</a> · '
b43dd87f7ffa Added Drag+Drop from a tweet list
veltr
parents:
diff changeset
    35
    + '<a href="http://twitter.com/intent/tweet?in_reply_to=<%=tweet.id_str%>" target="_blank">reply</a> · '
b43dd87f7ffa Added Drag+Drop from a tweet list
veltr
parents:
diff changeset
    36
    + '<a href="http://twitter.com/intent/retweet?tweet_id=<%=tweet.id_str%>" target="_blank">retweet</a> · '
b43dd87f7ffa Added Drag+Drop from a tweet list
veltr
parents:
diff changeset
    37
    + '<a href="http://twitter.com/intent/favorite?tweet_id=<%=tweet.id_str%>" target="_blank">favorite</a></p></li>'
b43dd87f7ffa Added Drag+Drop from a tweet list
veltr
parents:
diff changeset
    38
);
b43dd87f7ffa Added Drag+Drop from a tweet list
veltr
parents:
diff changeset
    39
34
08a366a35143 First part of SH design integration
veltr
parents: 26
diff changeset
    40
Rkns.Twitter.Bin.prototype._init = function(_renkan, _opts) {
160
408da84d4dc0 Convert tabs added by ide configuration mistake
veltr
parents: 132
diff changeset
    41
    this.renkan = _renkan;
21
b43dd87f7ffa Added Drag+Drop from a tweet list
veltr
parents:
diff changeset
    42
    this.search = _opts.search;
34
08a366a35143 First part of SH design integration
veltr
parents: 26
diff changeset
    43
    this.title_icon_$.addClass('Rk-Twitter-Title-Icon');
08a366a35143 First part of SH design integration
veltr
parents: 26
diff changeset
    44
    this.title_$.html(this.search).addClass("Rk-Twitter-Title");
42
48d825187d67 Added Refresh button and Autorefresh
veltr
parents: 37
diff changeset
    45
    this.refresh();
170
603ffa4c6fa5 correct ";" and "," in javascripts
ymh <ymh.work@gmail.com>
parents: 160
diff changeset
    46
};
42
48d825187d67 Added Refresh button and Autorefresh
veltr
parents: 37
diff changeset
    47
44
869410bab434 Various changes
veltr
parents: 42
diff changeset
    48
Rkns.Twitter.Bin.prototype.render = function(searchstr) {
869410bab434 Various changes
veltr
parents: 42
diff changeset
    49
    var _rgxp = new RegExp('('+(searchstr || this.search).replace(/(\W)/g,'\\$1')+')','gi');
869410bab434 Various changes
veltr
parents: 42
diff changeset
    50
    if (searchstr) {
869410bab434 Various changes
veltr
parents: 42
diff changeset
    51
        var rxtest = new RegExp(searchstr.replace(/(\W)/g,'\\$1'),'i');
869410bab434 Various changes
veltr
parents: 42
diff changeset
    52
    }
869410bab434 Various changes
veltr
parents: 42
diff changeset
    53
    function highlight(_text) {
869410bab434 Various changes
veltr
parents: 42
diff changeset
    54
        return _text.replace(_rgxp, "<span class='searchmatch'>$1</span>");
869410bab434 Various changes
veltr
parents: 42
diff changeset
    55
    }
170
603ffa4c6fa5 correct ";" and "," in javascripts
ymh <ymh.work@gmail.com>
parents: 160
diff changeset
    56
    var _html = "",
44
869410bab434 Various changes
veltr
parents: 42
diff changeset
    57
        _this = this,
869410bab434 Various changes
veltr
parents: 42
diff changeset
    58
        count = 0;
869410bab434 Various changes
veltr
parents: 42
diff changeset
    59
    Rkns._(this.data.results).each(function(_result) {
869410bab434 Various changes
veltr
parents: 42
diff changeset
    60
        if (searchstr && !rxtest.test(_result.text)) {
869410bab434 Various changes
veltr
parents: 42
diff changeset
    61
            return;
869410bab434 Various changes
veltr
parents: 42
diff changeset
    62
        }
869410bab434 Various changes
veltr
parents: 42
diff changeset
    63
        count++;
869410bab434 Various changes
veltr
parents: 42
diff changeset
    64
        var _entities = [],
869410bab434 Various changes
veltr
parents: 42
diff changeset
    65
            _users = _result.text.match(/@[\w_]+/gm),
869410bab434 Various changes
veltr
parents: 42
diff changeset
    66
            _lastpos = 0;
869410bab434 Various changes
veltr
parents: 42
diff changeset
    67
        if (_users) {
869410bab434 Various changes
veltr
parents: 42
diff changeset
    68
            for (var _i = 0; _i < _users.length; _i++) {
869410bab434 Various changes
veltr
parents: 42
diff changeset
    69
                var _m = _users[_i],
869410bab434 Various changes
veltr
parents: 42
diff changeset
    70
                    _start = _lastpos + _result.text.substr(_lastpos).search(_m),
869410bab434 Various changes
veltr
parents: 42
diff changeset
    71
                    _lastpos = _start + _m.length;
869410bab434 Various changes
veltr
parents: 42
diff changeset
    72
                _entities.push({
869410bab434 Various changes
veltr
parents: 42
diff changeset
    73
                    "text" : _m,
869410bab434 Various changes
veltr
parents: 42
diff changeset
    74
                    "start" : _start,
869410bab434 Various changes
veltr
parents: 42
diff changeset
    75
                    "end" : _lastpos,
869410bab434 Various changes
veltr
parents: 42
diff changeset
    76
                    "link" :'<a href="http://twitter.com/' + _m.substr(1) + '" onclick="filtrerTexte(\'' + _m + '\'); return false;" target="_blank">',
869410bab434 Various changes
veltr
parents: 42
diff changeset
    77
                });
869410bab434 Various changes
veltr
parents: 42
diff changeset
    78
            }
869410bab434 Various changes
veltr
parents: 42
diff changeset
    79
        }
869410bab434 Various changes
veltr
parents: 42
diff changeset
    80
        var _hashes = _result.text.match(/([^&]|^)#[^\s,.!?=#@&;()]+/gm),
869410bab434 Various changes
veltr
parents: 42
diff changeset
    81
            _lastpos = 0;
869410bab434 Various changes
veltr
parents: 42
diff changeset
    82
        if (_hashes) {
869410bab434 Various changes
veltr
parents: 42
diff changeset
    83
            for (var _i = 0; _i < _hashes.length; _i++) {
869410bab434 Various changes
veltr
parents: 42
diff changeset
    84
                var _m = _hashes[_i],
869410bab434 Various changes
veltr
parents: 42
diff changeset
    85
                    _h = ( _m[0] == '#' ? _m : _m.substr(1) ),
869410bab434 Various changes
veltr
parents: 42
diff changeset
    86
                    _start = _lastpos + _result.text.substr(_lastpos).search(_h),
869410bab434 Various changes
veltr
parents: 42
diff changeset
    87
                    _lastpos = _start + _h.length;
869410bab434 Various changes
veltr
parents: 42
diff changeset
    88
                _entities.push({
869410bab434 Various changes
veltr
parents: 42
diff changeset
    89
                    "text" : _h,
869410bab434 Various changes
veltr
parents: 42
diff changeset
    90
                    "start" : _start,
869410bab434 Various changes
veltr
parents: 42
diff changeset
    91
                    "end" : _lastpos,
869410bab434 Various changes
veltr
parents: 42
diff changeset
    92
                    "link" :'<a href="http://twitter.com/search?q=' + encodeURIComponent(_h) + '" onclick="filtrerTexte(\'' + _.escape(_h) + '\'); return false;" target="_blank">',
869410bab434 Various changes
veltr
parents: 42
diff changeset
    93
                });
869410bab434 Various changes
veltr
parents: 42
diff changeset
    94
            }
869410bab434 Various changes
veltr
parents: 42
diff changeset
    95
        }
869410bab434 Various changes
veltr
parents: 42
diff changeset
    96
        
170
603ffa4c6fa5 correct ";" and "," in javascripts
ymh <ymh.work@gmail.com>
parents: 160
diff changeset
    97
        var _urls = _result.text.match(/(www\.|https?:\/\/)[\w.\/_\-]+/gim),
44
869410bab434 Various changes
veltr
parents: 42
diff changeset
    98
            _lastpos = 0;
869410bab434 Various changes
veltr
parents: 42
diff changeset
    99
        if (_urls) {
869410bab434 Various changes
veltr
parents: 42
diff changeset
   100
            for (var _i = 0; _i < _urls.length; _i++) {
869410bab434 Various changes
veltr
parents: 42
diff changeset
   101
                var _m = _urls[_i],
869410bab434 Various changes
veltr
parents: 42
diff changeset
   102
                    _start = _lastpos + _result.text.substr(_lastpos).search(_m),
869410bab434 Various changes
veltr
parents: 42
diff changeset
   103
                    _lastpos = _start + _m.length;
869410bab434 Various changes
veltr
parents: 42
diff changeset
   104
                _entities.push({
869410bab434 Various changes
veltr
parents: 42
diff changeset
   105
                    "text" : _m,
869410bab434 Various changes
veltr
parents: 42
diff changeset
   106
                    "start" : _start,
869410bab434 Various changes
veltr
parents: 42
diff changeset
   107
                    "end" : _lastpos,
869410bab434 Various changes
veltr
parents: 42
diff changeset
   108
                    "link" :'<a href="' + _m + '" target="_blank">',
869410bab434 Various changes
veltr
parents: 42
diff changeset
   109
                });
869410bab434 Various changes
veltr
parents: 42
diff changeset
   110
            }
869410bab434 Various changes
veltr
parents: 42
diff changeset
   111
        }
170
603ffa4c6fa5 correct ";" and "," in javascripts
ymh <ymh.work@gmail.com>
parents: 160
diff changeset
   112
        _entities = Rkns._(_entities).sortBy(function(a) { return a.start; });
44
869410bab434 Various changes
veltr
parents: 42
diff changeset
   113
        var _lastend = 0,
869410bab434 Various changes
veltr
parents: 42
diff changeset
   114
            _text = Rkns._(_entities).map(function(_e) {
869410bab434 Various changes
veltr
parents: 42
diff changeset
   115
                var _txt = highlight(_result.text.substring(_lastend, _e.start)) + _e.link + highlight(_e.text) + '</a>';
869410bab434 Various changes
veltr
parents: 42
diff changeset
   116
                _lastend = _e.end;
869410bab434 Various changes
veltr
parents: 42
diff changeset
   117
                return _txt;
869410bab434 Various changes
veltr
parents: 42
diff changeset
   118
            }).join("") + highlight(_result.text.substring(_lastend));
869410bab434 Various changes
veltr
parents: 42
diff changeset
   119
        
869410bab434 Various changes
veltr
parents: 42
diff changeset
   120
        _html += _this.tweetTemplate({
869410bab434 Various changes
veltr
parents: 42
diff changeset
   121
            tweet: _result,
869410bab434 Various changes
veltr
parents: 42
diff changeset
   122
            date: new Date(_result.created_at.replace(/(\+|-)/,'UTC$1')).toLocaleString(),
869410bab434 Various changes
veltr
parents: 42
diff changeset
   123
            text: _text
869410bab434 Various changes
veltr
parents: 42
diff changeset
   124
        });
869410bab434 Various changes
veltr
parents: 42
diff changeset
   125
    });
869410bab434 Various changes
veltr
parents: 42
diff changeset
   126
    this.main_$.html(_html);
869410bab434 Various changes
veltr
parents: 42
diff changeset
   127
    if (searchstr && count) {
869410bab434 Various changes
veltr
parents: 42
diff changeset
   128
        this.count_$.text(count).show();
869410bab434 Various changes
veltr
parents: 42
diff changeset
   129
    } else {
869410bab434 Various changes
veltr
parents: 42
diff changeset
   130
        this.count_$.hide();
869410bab434 Various changes
veltr
parents: 42
diff changeset
   131
    }
869410bab434 Various changes
veltr
parents: 42
diff changeset
   132
    if (searchstr && !count) {
869410bab434 Various changes
veltr
parents: 42
diff changeset
   133
        this.$.hide();
869410bab434 Various changes
veltr
parents: 42
diff changeset
   134
    } else {
869410bab434 Various changes
veltr
parents: 42
diff changeset
   135
        this.$.show();
869410bab434 Various changes
veltr
parents: 42
diff changeset
   136
    }
56
a9b9e6c7be63 Converging client and webapp
veltr
parents: 44
diff changeset
   137
    this.renkan.resizeBins();
170
603ffa4c6fa5 correct ";" and "," in javascripts
ymh <ymh.work@gmail.com>
parents: 160
diff changeset
   138
};
44
869410bab434 Various changes
veltr
parents: 42
diff changeset
   139
42
48d825187d67 Added Refresh button and Autorefresh
veltr
parents: 37
diff changeset
   140
Rkns.Twitter.Bin.prototype.refresh = function() {
21
b43dd87f7ffa Added Drag+Drop from a tweet list
veltr
parents:
diff changeset
   141
    var _this = this;
42
48d825187d67 Added Refresh button and Autorefresh
veltr
parents: 37
diff changeset
   142
    Rkns.$.ajax({
44
869410bab434 Various changes
veltr
parents: 42
diff changeset
   143
        url: "http://search.twitter.com/search.json",
42
48d825187d67 Added Refresh button and Autorefresh
veltr
parents: 37
diff changeset
   144
        dataType: "jsonp",
44
869410bab434 Various changes
veltr
parents: 42
diff changeset
   145
        data: {
869410bab434 Various changes
veltr
parents: 42
diff changeset
   146
            q: this.search,
869410bab434 Various changes
veltr
parents: 42
diff changeset
   147
            rpp: 100
869410bab434 Various changes
veltr
parents: 42
diff changeset
   148
        },
42
48d825187d67 Added Refresh button and Autorefresh
veltr
parents: 37
diff changeset
   149
        success: function(_data) {
44
869410bab434 Various changes
veltr
parents: 42
diff changeset
   150
            _this.data = _data;
869410bab434 Various changes
veltr
parents: 42
diff changeset
   151
            _this.render();
21
b43dd87f7ffa Added Drag+Drop from a tweet list
veltr
parents:
diff changeset
   152
        }
42
48d825187d67 Added Refresh button and Autorefresh
veltr
parents: 37
diff changeset
   153
    });
170
603ffa4c6fa5 correct ";" and "," in javascripts
ymh <ymh.work@gmail.com>
parents: 160
diff changeset
   154
};