js/startscreen-fake.js
author veltr
Fri, 15 Feb 2013 12:23:01 +0100
changeset 3 7fa607ed7e82
parent 2 0d947d167ec5
child 4 26a901771957
permissions -rw-r--r--
Saving point
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
2
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
     1
PATH_MODE = false;
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
     2
1
1f574d93e195 First tests
veltr
parents:
diff changeset
     3
$(function() {
1f574d93e195 First tests
veltr
parents:
diff changeset
     4
    
2
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
     5
    var colorset_pastel = ["#FBB4AE", "#B3CDE3", "#CCEBC5", "#DECBE4", "#FED9A6", "#E5D8BD", "#FDDAEC"];
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
     6
    var colorset_vivid = ["#E41A1C", "#377EB8", "#4DAF4A", "#984EA3", "#FF7F00", "#A65628", "#F781BF"];
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
     7
    
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
     8
    $(".topics-block").draggable({axis:"y"})
1
1f574d93e195 First tests
veltr
parents:
diff changeset
     9
    
1f574d93e195 First tests
veltr
parents:
diff changeset
    10
    $.getJSON("fakedata/data.json", function(data) {
2
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
    11
        
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
    12
        function secsToString(seconds) {
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
    13
            var hours = Math.floor(seconds/3600),
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
    14
                minutes = Math.floor(seconds/60) % 60,
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
    15
                secs = Math.floor(seconds % 60);
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
    16
            function pad(n) {
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
    17
                var r = n.toString();
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
    18
                while (r.length < 2) {
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
    19
                    r = "0" + r;
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
    20
                }
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
    21
                return r;
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
    22
            }
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
    23
            return (hours ? (hours + ":") : "") + pad(minutes) + ":" + pad(secs);
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
    24
        }
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
    25
        
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
    26
        $(".duration").text(secsToString(data.duration));
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
    27
        
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
    28
        $(".topwords-block").on("click", "li", function() {
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
    29
            var el = $(this).toggleClass("selected");
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
    30
            wordFilter();
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
    31
        });
1
1f574d93e195 First tests
veltr
parents:
diff changeset
    32
        
1f574d93e195 First tests
veltr
parents:
diff changeset
    33
        var nmmso = data.segments.length;
1f574d93e195 First tests
veltr
parents:
diff changeset
    34
        
1f574d93e195 First tests
veltr
parents:
diff changeset
    35
        data.topics.forEach(function(topic) {
1f574d93e195 First tests
veltr
parents:
diff changeset
    36
            topic.score = 0;
2
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
    37
            topic.weights = [];
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
    38
            topic.scores = [];
1
1f574d93e195 First tests
veltr
parents:
diff changeset
    39
            for (var i = 0; i < nmmso; i++) {
2
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
    40
                topic.weights.push(0);
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
    41
                topic.scores.push(0);
1
1f574d93e195 First tests
veltr
parents:
diff changeset
    42
            }
1f574d93e195 First tests
veltr
parents:
diff changeset
    43
        });
1f574d93e195 First tests
veltr
parents:
diff changeset
    44
        
1f574d93e195 First tests
veltr
parents:
diff changeset
    45
        data.segments.forEach(function(mmso, i) {
1f574d93e195 First tests
veltr
parents:
diff changeset
    46
            mmso.topics.forEach(function(t) {
1f574d93e195 First tests
veltr
parents:
diff changeset
    47
                var score = t.weight * mmso.tweet_count;
2
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
    48
                data.topics[t.topic].weights[i] = t.weight;
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
    49
                data.topics[t.topic].scores[i] = score;
1
1f574d93e195 First tests
veltr
parents:
diff changeset
    50
                data.topics[t.topic].score += score;
1f574d93e195 First tests
veltr
parents:
diff changeset
    51
            });
2
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
    52
            mmso.tweet_rate = mmso.tweet_count / mmso.duration; 
1
1f574d93e195 First tests
veltr
parents:
diff changeset
    53
        });
1f574d93e195 First tests
veltr
parents:
diff changeset
    54
        
2
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
    55
        var sortedTopics = data.topics.slice().sort(function(a,b) {
1
1f574d93e195 First tests
veltr
parents:
diff changeset
    56
            return b.score - a.score;
1f574d93e195 First tests
veltr
parents:
diff changeset
    57
        });
1f574d93e195 First tests
veltr
parents:
diff changeset
    58
        
2
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
    59
        var selectedWords = [];
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
    60
        
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
    61
        function wordFilter() {
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
    62
            var selectedLis = $(".topwords-block li.selected");
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
    63
            selectedWords = [];
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
    64
            selectedLis.each(function() {
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
    65
                selectedWords.push($(this).text().trim());
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
    66
            });
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
    67
            console.log(selectedWords);
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
    68
            if (selectedWords.length) {
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
    69
                showTopics(data.topics.filter(function(topic) {
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
    70
                    var foundWords = selectedWords.map(function() { return false });
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
    71
                    topic.words.forEach(function(topicword) {
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
    72
                        selectedWords.forEach(function(selectedword, k) {
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
    73
                            if (!foundWords[k] && selectedword === topicword.word) {
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
    74
                                foundWords[k] = true;
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
    75
                            }
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
    76
                        })
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
    77
                    });
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
    78
                    return foundWords.reduce(function(mem, w) { return mem && w}, true);
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
    79
                }).sort(function(a,b) {
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
    80
                    return b.score - a.score;
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
    81
                }));
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
    82
            } else {
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
    83
                showTopics(sortedTopics);
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
    84
            }
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
    85
        }
1
1f574d93e195 First tests
veltr
parents:
diff changeset
    86
        
2
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
    87
        function showTopics(topiclist) {
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
    88
            var topicHtmls = ["", "", ""],
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
    89
                globwords = {},
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
    90
                topwords = [];
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
    91
            topiclist.forEach(function(topic,i) {
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
    92
                var wordsToShow = topic.words.slice(0,5),
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
    93
                    max = wordsToShow[0].weight,
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
    94
                    min = Math.min(wordsToShow[wordsToShow.length - 1].weight, max - .01),
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
    95
                    scale = 10 / (max - min);
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
    96
                var li = '<li class="shadow-block topic" data-topic-id="'
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
    97
                    + topic.index
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
    98
                    + '" data-viz-color="'
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
    99
                    + Raphael.hsl(topic.index / data.topics.length, .8, .5) //colorset_vivid[topic.index % colorset_vivid.length] //colorset_vivid[i % colorset_vivid.length]
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   100
                    + '"" data-li-color="'
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   101
                    + Raphael.hsl(topic.index / data.topics.length, .7, .8) //colorset_pastel[topic.index % colorset_pastel.length] //colorset_pastel[i % colorset_pastel.length]
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   102
                    + '"><ul class="topic-words">'
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   103
                    + wordsToShow.reduce(function(memwords, word) {
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   104
                        return memwords
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   105
                            + '<li style="font-size: '
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   106
                            + ( 10 + scale * (word.weight - min) )
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   107
                            + 'px;">'
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   108
                            + word.word
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   109
                            + '</li>';
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   110
                    },"")
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   111
                    + '</ul></li>';
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   112
                topicHtmls[i % 3] += li;
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   113
                topic.words.forEach(function(word) {
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   114
                    globwords[word.word] = word.weight + (globwords[word.word] || 0)
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   115
                });
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   116
            });
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   117
            var tb = $(".topics-block");
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   118
            tb.html(topicHtmls.reduce(function(mem,html) {
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   119
               return mem + '<ul class="topic-column">' + html + '</ul>' 
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   120
            },""));
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   121
            tb.css("top",0);
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   122
            
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   123
            for (var w in globwords) {
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   124
                topwords.push({
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   125
                    word : w,
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   126
                    weight : globwords[w]
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   127
                });
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   128
            }
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   129
            topwords.sort(function(a, b) {
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   130
                return b.weight - a.weight;
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   131
            });
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   132
            
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   133
            var wordsToShow = topwords.slice(0,30),
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   134
                max = wordsToShow[0].weight,
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   135
                min = Math.min(wordsToShow[wordsToShow.length - 1].weight, max - .01),
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   136
                scale = 10 / (max - min);
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   137
            
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   138
            $(".topwords-block").html(wordsToShow.reduce(function(mem, d) {
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   139
                return mem
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   140
                    + '<li style="font-size: '
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   141
                    + ( 10 + scale * (d.weight - min) )
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   142
                    + 'px;"'
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   143
                    + (selectedWords.indexOf(d.word) !== -1 ? ' class="selected"' : '')
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   144
                    + '>'
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   145
                    + d.word
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   146
                    + '</li>'
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   147
            },""));
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   148
            
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   149
            showTopicViz();
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   150
        }
1
1f574d93e195 First tests
veltr
parents:
diff changeset
   151
        
2
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   152
        function showTopicViz() {
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   153
            var selectedBlocks = $(".topic.selected, .topic.hover"),
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   154
                sbl = selectedBlocks.length;
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   155
            if (!sbl) {
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   156
                selectedBlocks = $(".topic");
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   157
                sbl = selectedBlocks.length;
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   158
            }
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   159
            if (sbl) {
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   160
                $(".topic").css("background","");
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   161
                selectedBlocks.each(function() {
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   162
                    var el = $(this);
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   163
                    el.css("background",el.attr("data-li-color"));
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   164
                });
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   165
            } else {
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   166
                $(".topic").each(function() {
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   167
                    var el = $(this);
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   168
                    el.css("background",el.attr("data-li-color"));
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   169
                });
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   170
            }
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   171
            var topicsAndColors = selectedBlocks.map(function() {
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   172
                var el = $(this),
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   173
                    topicid = parseInt(el.attr("data-topic-id")),
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   174
                    vizcolor = el.attr("data-viz-color");
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   175
                return {
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   176
                    topic: data.topics[topicid],
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   177
                    id: topicid,
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   178
                    color: vizcolor
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   179
                };
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   180
            });
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   181
            if (PATH_MODE) {
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   182
                topicpaths.forEach(function(p) {
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   183
                    p.hide();
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   184
                });
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   185
                topicsAndColors.each(function(j, t) {
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   186
                    var p = topicpaths[t.id];
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   187
                    p.attr({
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   188
                        stroke: t.color,
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   189
                        fill: t.color,
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   190
                        "fill-opacity": .25
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   191
                    });
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   192
                    p.show();
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   193
                });
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   194
                if (sbl > 1 && sbl < data.topics.length) {
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   195
                    var d = "M0,0L" + data.segments.map(function(mmso, i) {
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   196
                        var tweets = 0;
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   197
                        for (var j = 0; j < sbl; j++) {
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   198
                            tweets += topicsAndColors[j].topic.scores[i]
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   199
                        }
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   200
                        x = xscale * tweets / mmso.duration;
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   201
                    return x
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   202
                        + ","
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   203
                        + yscale * (mmso.start + mmso.duration / 3)
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   204
                        + "L"
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   205
                        + x
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   206
                        + ","
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   207
                        + yscale * (mmso.start + 2 * mmso.duration / 3);
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   208
                    }).join("L") + "L0,"+(yscale * data.duration);
3
7fa607ed7e82 Saving point
veltr
parents: 2
diff changeset
   209
                    sumpatha.attr({ path: d });
7fa607ed7e82 Saving point
veltr
parents: 2
diff changeset
   210
                    sumpathb.attr({ path: d });
7fa607ed7e82 Saving point
veltr
parents: 2
diff changeset
   211
                    sumpatha.show();
7fa607ed7e82 Saving point
veltr
parents: 2
diff changeset
   212
                    sumpathb.show();
2
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   213
                } else {
3
7fa607ed7e82 Saving point
veltr
parents: 2
diff changeset
   214
                    sumpatha.hide();
7fa607ed7e82 Saving point
veltr
parents: 2
diff changeset
   215
                    sumpathb.hide();
2
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   216
                }
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   217
            } else {
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   218
                for (var i = 0; i < nmmso; i++) {
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   219
                    var opacity = 0,
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   220
                        rgb = [0,0,0];
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   221
                    for (var j = 0; j < sbl; j++) {
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   222
                        var c = Raphael.getRGB(topicsAndColors[j].color),
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   223
                            o = topicsAndColors[j].topic.weights[i];
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   224
                        rgb[0] += c.r * o;
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   225
                        rgb[1] += c.g * o;
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   226
                        rgb[2] += c.b * o;
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   227
                        opacity += o;
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   228
                    }
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   229
                    if (opacity) {
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   230
                        color = Raphael.rgb.apply(Raphael, rgb.map(function(c) {
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   231
                            return c/opacity;
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   232
                        }));
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   233
                        segmentrects[i].show();
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   234
                        segmentrects[i].attr({
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   235
                            fill: color,
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   236
                            opacity: .2 + .8 * opacity
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   237
                        });
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   238
                    } else {
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   239
                        segmentrects[i].hide();
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   240
                    }
1
1f574d93e195 First tests
veltr
parents:
diff changeset
   241
                }
1f574d93e195 First tests
veltr
parents:
diff changeset
   242
            }
2
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   243
            
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   244
        }
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   245
        
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   246
        var jqsvg = $(".start-svg");
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   247
            paper = new Raphael(jqsvg[0]),
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   248
            ph = jqsvg.height(),
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   249
            pw = jqsvg.width(),
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   250
            yscale = ph / data.duration,
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   251
            mx = Math.max.apply(Math, data.segments.map(function(s) { return s.tweet_rate})),
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   252
            xscale = (pw - 10)/mx;
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   253
        
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   254
        if (PATH_MODE) {
3
7fa607ed7e82 Saving point
veltr
parents: 2
diff changeset
   255
            var sumpatha = paper.path();
7fa607ed7e82 Saving point
veltr
parents: 2
diff changeset
   256
            sumpatha.attr({
2
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   257
                fill: "#f0f0f0",
3
7fa607ed7e82 Saving point
veltr
parents: 2
diff changeset
   258
                stroke: "none"
2
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   259
            });
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   260
            var topicpaths = data.topics.map(function(topic) {
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   261
                var d = "M0,0L" + topic.scores.map(function(s, i) {
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   262
                    var mmso = data.segments[i],
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   263
                        x = xscale * s / mmso.duration;
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   264
                    return x
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   265
                        + ","
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   266
                        + yscale * (mmso.start + mmso.duration / 3)
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   267
                        + "L"
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   268
                        + x
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   269
                        + ","
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   270
                        + yscale * (mmso.start + 2 * mmso.duration / 3);
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   271
                }).join("L") + "L0,"+(yscale * data.duration);
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   272
                return paper.path(d);
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   273
            });
3
7fa607ed7e82 Saving point
veltr
parents: 2
diff changeset
   274
            var sumpathb = paper.path();
7fa607ed7e82 Saving point
veltr
parents: 2
diff changeset
   275
            sumpathb.attr({
7fa607ed7e82 Saving point
veltr
parents: 2
diff changeset
   276
                stroke: "#666666",
7fa607ed7e82 Saving point
veltr
parents: 2
diff changeset
   277
                "stroke-width": 2
7fa607ed7e82 Saving point
veltr
parents: 2
diff changeset
   278
            });
2
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   279
        } else {
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   280
            var segmentrects = data.segments.map(function(mmso) {
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   281
                var rect = paper.rect(0, yscale * mmso.start, pw - 50, yscale * mmso.duration);
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   282
                rect.attr({stroke: "none"});
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   283
                return rect;
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   284
            });
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   285
        }
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   286
        
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   287
        var d = "M" + data.segments.map(function(s) {
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   288
                var x = xscale * s.tweet_rate;
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   289
                return x
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   290
                    + ","
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   291
                    + yscale * (s.start + s.duration / 3)
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   292
                    + "L"
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   293
                    + x
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   294
                    + ","
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   295
                    + yscale * (s.start + 2 * s.duration / 3);
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   296
            }).join("L");
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   297
            
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   298
        paper.path(d);
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   299
        
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   300
        
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   301
        for (var i=0; i < data.duration; i += 1800) {
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   302
            var y = yscale * i;
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   303
            paper.path("M0," + y + "L" + pw + "," + y).attr({
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   304
                stroke: "#666"
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   305
            });
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   306
            paper.text(pw - 2, y + 6, secsToString(i)).attr({
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   307
                "text-anchor": "end"
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   308
            });
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   309
        }
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   310
        paper.text(pw-2, ph-6, secsToString(data.duration)).attr({
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   311
            "text-anchor": "end"
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   312
        });
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   313
        
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   314
        wordFilter();
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   315
        
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   316
        $(".topics-block").on("mouseenter", ".topic", function() {
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   317
            var topicid = parseInt($(this).attr("data-topic-id")),
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   318
                color = $(this).attr("data-viz-color"),
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   319
                topic = data.topics[topicid];
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   320
            $(this).addClass("hover");
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   321
            showTopicViz();
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   322
        }).on("mouseleave", ".topic", function() {
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   323
            $(this).removeClass("hover");
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   324
            showTopicViz();
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   325
        }).on("click", ".topic", function() {
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   326
            $(this).toggleClass("selected");
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   327
            showTopicViz();
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   328
        });
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   329
        
1
1f574d93e195 First tests
veltr
parents:
diff changeset
   330
        
1f574d93e195 First tests
veltr
parents:
diff changeset
   331
    });
1f574d93e195 First tests
veltr
parents:
diff changeset
   332
});