js/startscreen.js
author veltr
Mon, 22 Apr 2013 18:42:40 +0200
changeset 21 007254e97333
parent 19 685c406c7d8c
child 23 933b388521f6
permissions -rw-r--r--
improvements for better code reuse
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
5
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
     1
function showData() {
21
007254e97333 improvements for better code reuse
veltr
parents: 19
diff changeset
     2
    
007254e97333 improvements for better code reuse
veltr
parents: 19
diff changeset
     3
    var nmmso = data.segments.length;
14
3aa6b9963de0 Added topic labels
veltr
parents: 13
diff changeset
     4
	
21
007254e97333 improvements for better code reuse
veltr
parents: 19
diff changeset
     5
    data.topics.forEach(function(topic) {
007254e97333 improvements for better code reuse
veltr
parents: 19
diff changeset
     6
        topic.score = 0;
007254e97333 improvements for better code reuse
veltr
parents: 19
diff changeset
     7
        topic.weights = [];
007254e97333 improvements for better code reuse
veltr
parents: 19
diff changeset
     8
        for (var i = 0; i < nmmso; i++) {
007254e97333 improvements for better code reuse
veltr
parents: 19
diff changeset
     9
            topic.weights.push(0);
007254e97333 improvements for better code reuse
veltr
parents: 19
diff changeset
    10
        }
007254e97333 improvements for better code reuse
veltr
parents: 19
diff changeset
    11
    });
007254e97333 improvements for better code reuse
veltr
parents: 19
diff changeset
    12
    
007254e97333 improvements for better code reuse
veltr
parents: 19
diff changeset
    13
    data.segments.forEach(function(mmso, i) {
007254e97333 improvements for better code reuse
veltr
parents: 19
diff changeset
    14
        mmso.topics.forEach(function(t) {
007254e97333 improvements for better code reuse
veltr
parents: 19
diff changeset
    15
            data.topics[t.topic].weights[i] = t.weight;
007254e97333 improvements for better code reuse
veltr
parents: 19
diff changeset
    16
            data.topics[t.topic].score += t.weight;
007254e97333 improvements for better code reuse
veltr
parents: 19
diff changeset
    17
        });
007254e97333 improvements for better code reuse
veltr
parents: 19
diff changeset
    18
    });
007254e97333 improvements for better code reuse
veltr
parents: 19
diff changeset
    19
    
007254e97333 improvements for better code reuse
veltr
parents: 19
diff changeset
    20
    var topicPoubelle = removeBiggestTopic ? _(data.topics.slice()).sortBy(function(t) { return -t.score; })[0].index : -1;
007254e97333 improvements for better code reuse
veltr
parents: 19
diff changeset
    21
    
14
3aa6b9963de0 Added topic labels
veltr
parents: 13
diff changeset
    22
	data.topiclabels.forEach(function(v) {
3aa6b9963de0 Added topic labels
veltr
parents: 13
diff changeset
    23
		var words = _(v.words).map(function(v, k) {
3aa6b9963de0 Added topic labels
veltr
parents: 13
diff changeset
    24
			return {
3aa6b9963de0 Added topic labels
veltr
parents: 13
diff changeset
    25
				word: k,
3aa6b9963de0 Added topic labels
veltr
parents: 13
diff changeset
    26
				weight: v
3aa6b9963de0 Added topic labels
veltr
parents: 13
diff changeset
    27
			}
3aa6b9963de0 Added topic labels
veltr
parents: 13
diff changeset
    28
		});
3aa6b9963de0 Added topic labels
veltr
parents: 13
diff changeset
    29
		words.sort(function(a,b) {
3aa6b9963de0 Added topic labels
veltr
parents: 13
diff changeset
    30
			return b.weight - a.weight;
3aa6b9963de0 Added topic labels
veltr
parents: 13
diff changeset
    31
		})
3aa6b9963de0 Added topic labels
veltr
parents: 13
diff changeset
    32
		data.topics[v.topic_id].words = words;
3aa6b9963de0 Added topic labels
veltr
parents: 13
diff changeset
    33
	});
17
8ee8c9ea2a9f Added user tweets
veltr
parents: 14
diff changeset
    34
	    
5
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
    35
    var ordertag = 0;
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
    36
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
    37
    function secsToString(seconds) {
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
    38
        var hours = Math.floor(seconds/3600),
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
    39
            minutes = Math.floor(seconds/60) % 60,
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
    40
            secs = Math.floor(seconds % 60);
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
    41
        function pad(n) {
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
    42
            var r = n.toString();
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
    43
            while (r.length < 2) {
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
    44
                r = "0" + r;
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
    45
            }
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
    46
            return r;
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
    47
        }
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
    48
        return (hours ? (hours + ":") : "") + pad(minutes) + ":" + pad(secs);
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
    49
    }
1
1f574d93e195 First tests
veltr
parents:
diff changeset
    50
    
5
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
    51
    $(".duration").text(secsToString(data.duration));
13
3ba18138e37e Removed Tagcloud
veltr
parents: 12
diff changeset
    52
  
5
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
    53
    
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
    54
    var sortedTopics = data.topics.filter(function(t) {
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
    55
        return t.index !== topicPoubelle;
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
    56
    }).sort(function(a,b) {
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
    57
        return b.score - a.score;
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
    58
    });
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
    59
    
13
3ba18138e37e Removed Tagcloud
veltr
parents: 12
diff changeset
    60
    var selectedWords = [], searchString = "", topicscache = {};
3ba18138e37e Removed Tagcloud
veltr
parents: 12
diff changeset
    61
    
3ba18138e37e Removed Tagcloud
veltr
parents: 12
diff changeset
    62
    function showTopicsForWord(word) {
3ba18138e37e Removed Tagcloud
veltr
parents: 12
diff changeset
    63
    	var topicweights = topicscache[word];
3ba18138e37e Removed Tagcloud
veltr
parents: 12
diff changeset
    64
    	var topiclist = data.topics.filter(function(topic) {
3ba18138e37e Removed Tagcloud
veltr
parents: 12
diff changeset
    65
            return topicweights[topic.index] > .01 && topic.index !== topicPoubelle;
3ba18138e37e Removed Tagcloud
veltr
parents: 12
diff changeset
    66
        });
3ba18138e37e Removed Tagcloud
veltr
parents: 12
diff changeset
    67
        topiclist.sort(function(a,b) {
3ba18138e37e Removed Tagcloud
veltr
parents: 12
diff changeset
    68
            return topicweights[b.index] - topicweights[b.index]
3ba18138e37e Removed Tagcloud
veltr
parents: 12
diff changeset
    69
        });
3ba18138e37e Removed Tagcloud
veltr
parents: 12
diff changeset
    70
        showTopics(topiclist);
3ba18138e37e Removed Tagcloud
veltr
parents: 12
diff changeset
    71
    }
5
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
    72
    
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
    73
    function wordFilter() {
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
    74
        searchString = $(".keyword-search").val() || "",
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
    75
        selectedWords = [];
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
    76
        if (searchString.length) {
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
    77
            selectedWords.push(searchString);
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
    78
        }
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
    79
        if (selectedWords.length) {
13
3ba18138e37e Removed Tagcloud
veltr
parents: 12
diff changeset
    80
        	var k = selectedWords.join(",");
3ba18138e37e Removed Tagcloud
veltr
parents: 12
diff changeset
    81
        	if (typeof topicscache[k] === "undefined") {
3ba18138e37e Removed Tagcloud
veltr
parents: 12
diff changeset
    82
        		TopicsBean.topicsForKeywords(k,{
3ba18138e37e Removed Tagcloud
veltr
parents: 12
diff changeset
    83
	                callback: function(topicweights) {
3ba18138e37e Removed Tagcloud
veltr
parents: 12
diff changeset
    84
	                    topicscache[k] = topicweights;
3ba18138e37e Removed Tagcloud
veltr
parents: 12
diff changeset
    85
	                    showTopicsForWord(k);
3ba18138e37e Removed Tagcloud
veltr
parents: 12
diff changeset
    86
	                }
3ba18138e37e Removed Tagcloud
veltr
parents: 12
diff changeset
    87
	            });
3ba18138e37e Removed Tagcloud
veltr
parents: 12
diff changeset
    88
        	} else {
3ba18138e37e Removed Tagcloud
veltr
parents: 12
diff changeset
    89
        		showTopicsForWord(k);
3ba18138e37e Removed Tagcloud
veltr
parents: 12
diff changeset
    90
        	}
3ba18138e37e Removed Tagcloud
veltr
parents: 12
diff changeset
    91
            
5
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
    92
        } else {
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
    93
            showTopics(sortedTopics);
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
    94
        }
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
    95
    }
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
    96
    
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
    97
    function showTopics(topiclist) {
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
    98
        var topicHtmls = ["", "", ""];
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
    99
        if (searchString.length) {
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   100
            var searchStringRx = new RegExp('(' + searchString.replace(/(\W)/g,'\\$1') + ')', "gim");
2
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   101
        }
5
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   102
        var replaceRx = new RegExp('(' + selectedWords.map(function(w) {
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   103
            return w.replace(/(\W)/g,'\\$1')
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   104
        }).join("|") + ')', "gim");
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   105
        topiclist.forEach(function(topic,i) {
14
3aa6b9963de0 Added topic labels
veltr
parents: 13
diff changeset
   106
            var wordsToShow = topic.words.slice(),
5
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   107
                max = wordsToShow[0].weight,
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   108
                min = Math.min(wordsToShow[wordsToShow.length - 1].weight, max - .01),
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   109
                scale = 10 / (max - min);
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   110
            var li = '<li class="shadow-block topic" data-topic-id="'
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   111
                + topic.index
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   112
                + '" data-timestamp="999999"><ul class="topic-words">'
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   113
                + wordsToShow.reduce(function(memwords, word) {
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   114
                    return memwords
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   115
                        + '<li style="font-size: '
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   116
                        + ( 10 + scale * (word.weight - min) )
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   117
                        + 'px;">'
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   118
                        + ( selectedWords.length
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   119
                            ? word.word.replace(replaceRx,'<span class="highlight">$1</span>')
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   120
                            : word.word )
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   121
                        + '</li>';
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   122
                },"")
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   123
                + '</ul></li>';
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   124
            topicHtmls[i % 3] += li;
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   125
        });
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   126
        var tb = $(".topics-block");
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   127
        tb.html(topicHtmls.reduce(function(mem,html) {
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   128
           return mem + '<ul class="topic-column">' + html + '</ul>' 
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   129
        },""));
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   130
        tb.css("top",0);
1
1f574d93e195 First tests
veltr
parents:
diff changeset
   131
        
5
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   132
        showTopicViz();
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   133
    }
13
3ba18138e37e Removed Tagcloud
veltr
parents: 12
diff changeset
   134
    
3ba18138e37e Removed Tagcloud
veltr
parents: 12
diff changeset
   135
    var allwords = [];
5
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   136
    
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   137
    data.topics.forEach(function(topic) {
6
14dd1980b0b9 MMSO Caching
veltr
parents: 5
diff changeset
   138
        topic.words.forEach(function(topicword) {
14dd1980b0b9 MMSO Caching
veltr
parents: 5
diff changeset
   139
        	topicword.word.split(" ").filter(function(w) {
14dd1980b0b9 MMSO Caching
veltr
parents: 5
diff changeset
   140
        		return w.length > 2;
14dd1980b0b9 MMSO Caching
veltr
parents: 5
diff changeset
   141
        	}).forEach(function(w) {
13
3ba18138e37e Removed Tagcloud
veltr
parents: 12
diff changeset
   142
        		allwords.push(w);
6
14dd1980b0b9 MMSO Caching
veltr
parents: 5
diff changeset
   143
        	});
5
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   144
        });
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   145
    });
13
3ba18138e37e Removed Tagcloud
veltr
parents: 12
diff changeset
   146
        
6
14dd1980b0b9 MMSO Caching
veltr
parents: 5
diff changeset
   147
    data.topwords.forEach(function(v, k) {
14dd1980b0b9 MMSO Caching
veltr
parents: 5
diff changeset
   148
    	v.split(" ").filter(function(w) {
14dd1980b0b9 MMSO Caching
veltr
parents: 5
diff changeset
   149
    		return w.length > 2;
14dd1980b0b9 MMSO Caching
veltr
parents: 5
diff changeset
   150
    	}).forEach(function(w) {
13
3ba18138e37e Removed Tagcloud
veltr
parents: 12
diff changeset
   151
    		allwords.push(w);
6
14dd1980b0b9 MMSO Caching
veltr
parents: 5
diff changeset
   152
    	});
5
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   153
    });
13
3ba18138e37e Removed Tagcloud
veltr
parents: 12
diff changeset
   154
        
3ba18138e37e Removed Tagcloud
veltr
parents: 12
diff changeset
   155
    var allwords = _(allwords).uniq();
3ba18138e37e Removed Tagcloud
veltr
parents: 12
diff changeset
   156
        
5
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   157
    allwords.sort();
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   158
    
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   159
    $(".keyword-search").autocomplete({
7
a2d5b669f663 new data access method
veltr
parents: 6
diff changeset
   160
        source: allwords,
a2d5b669f663 new data access method
veltr
parents: 6
diff changeset
   161
        change: function() {
13
3ba18138e37e Removed Tagcloud
veltr
parents: 12
diff changeset
   162
        	window.setTimeout(wordFilter,0);
21
007254e97333 improvements for better code reuse
veltr
parents: 19
diff changeset
   163
        },
007254e97333 improvements for better code reuse
veltr
parents: 19
diff changeset
   164
        select: function() {
007254e97333 improvements for better code reuse
veltr
parents: 19
diff changeset
   165
        	window.setTimeout(wordFilter,0);
7
a2d5b669f663 new data access method
veltr
parents: 6
diff changeset
   166
        }
5
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   167
    }).on("keyup change paste", wordFilter);
6
14dd1980b0b9 MMSO Caching
veltr
parents: 5
diff changeset
   168
// */
5
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   169
    
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   170
    function showTopicViz() {
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   171
        var selectedBlocks = $(".topic.selected, .topic.hover"),
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   172
            sbl = selectedBlocks.length,
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   173
            topicBlocks = $(".topic");
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   174
        var topicsAndColors = [];
7
a2d5b669f663 new data access method
veltr
parents: 6
diff changeset
   175
        selectedBlocks.each(function() {
5
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   176
            var el = $(this),
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   177
                topicid = parseInt(el.attr("data-topic-id"));
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   178
            topicsAndColors.push({
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   179
                "$": el,
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   180
                timestamp: parseInt(el.attr("data-timestamp")),
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   181
                hovered: el.hasClass("hover"),
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   182
                id: topicid,
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   183
                topic: data.topics[topicid]
4
26a901771957 Black Background
veltr
parents: 3
diff changeset
   184
            });
5
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   185
        });
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   186
        topicsAndColors.sort(function(a,b) {
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   187
           return ( a.timestamp - b.timestamp ) || ( a.id - b.id );
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   188
        });
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   189
        topicBlocks.css("background","");
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   190
        topicsAndColors.forEach(function(topic, i) {
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   191
            topic.color = topic.hovered ? "#ffff00" : colorset[i % colorset.length];
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   192
            topic.$.css("background", topic.color);
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   193
        });
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   194
        
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   195
        for (var i = 0; i < nmmso; i++) {
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   196
            var opacity = 0,
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   197
                rgb = [0,0,0];
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   198
            topicsAndColors.forEach(function(topic) {
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   199
                var c = Raphael.getRGB(topic.color),
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   200
                    o = topic.topic.weights[i];
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   201
                rgb[0] += c.r * o;
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   202
                rgb[1] += c.g * o;
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   203
                rgb[2] += c.b * o;
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   204
                opacity += o;
4
26a901771957 Black Background
veltr
parents: 3
diff changeset
   205
            });
5
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   206
            if (opacity) {
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   207
                color = Raphael.rgb.apply(Raphael, rgb.map(function(c) {
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   208
                    return c/opacity;
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   209
                }));
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   210
                segmentrects[i].show();
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   211
                segmentrects[i].attr({
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   212
                    fill: color,
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   213
                    opacity: .5 + .5 * opacity
4
26a901771957 Black Background
veltr
parents: 3
diff changeset
   214
                });
5
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   215
            } else {
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   216
                segmentrects[i].hide();
1
1f574d93e195 First tests
veltr
parents:
diff changeset
   217
            }
2
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   218
        }
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   219
        
12
81a8bb1d872a ipad bugfixes
veltr
parents: 11
diff changeset
   220
        var hash = "#visibletopics="
7
a2d5b669f663 new data access method
veltr
parents: 6
diff changeset
   221
        	+ Array.prototype.join.call($(".topic:visible").map(function(){return $(this).attr("data-topic-id")}))
a2d5b669f663 new data access method
veltr
parents: 6
diff changeset
   222
        	+ "&selectedtopics="
a2d5b669f663 new data access method
veltr
parents: 6
diff changeset
   223
        	+ Array.prototype.slice.call(topicsAndColors.map(function(t){return t.id}))
a2d5b669f663 new data access method
veltr
parents: 6
diff changeset
   224
        	+ "&keywords="
a2d5b669f663 new data access method
veltr
parents: 6
diff changeset
   225
        	+ selectedWords.map(function(w) {
a2d5b669f663 new data access method
veltr
parents: 6
diff changeset
   226
        		return encodeURIComponent(w);
a2d5b669f663 new data access method
veltr
parents: 6
diff changeset
   227
        	}).join(",");
a2d5b669f663 new data access method
veltr
parents: 6
diff changeset
   228
        	
12
81a8bb1d872a ipad bugfixes
veltr
parents: 11
diff changeset
   229
    	document.querySelector(".play-button").hash = hash;
7
a2d5b669f663 new data access method
veltr
parents: 6
diff changeset
   230
        
5
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   231
    }
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   232
    
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   233
    var jqsvg = $(".start-svg");
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   234
        paper = new Raphael(jqsvg[0]),
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   235
        ph = jqsvg.height(),
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   236
        pw = jqsvg.width(),
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   237
        yscale = (ph - 20) / data.duration,
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   238
        mx = Math.max.apply(Math, data.minutes.map(function(s) { return s.count})),
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   239
        xscale = (pw - 50)/mx;
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   240
    
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   241
    var segmentrects = data.segments.map(function(mmso) {
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   242
        var rect = paper.rect(0, yscale * mmso.start, pw - 50, 1+yscale * mmso.duration);
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   243
        rect.attr({stroke: "none"});
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   244
        return rect;
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   245
    });
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   246
    
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   247
    var d = "M" + data.minutes.map(function(s) {
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   248
            var x = xscale * s.count;
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   249
            return x
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   250
                + ","
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   251
                + yscale * (s.from + 20)
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   252
                + "L"
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   253
                + x
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   254
                + ","
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   255
                + yscale * (s.from + 40);
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   256
        }).join("L");
2
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   257
        
5
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   258
    paper.path(d).attr({
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   259
        "stroke-width": 4,
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   260
        "stroke": "#000000",
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   261
        opacity: .5
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   262
    });
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   263
    paper.path(d).attr({
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   264
        "stroke-width": 1,
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   265
        "stroke": "#ffffff"
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   266
    });
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   267
    
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   268
    for (var i=0; i < data.duration; i += 1800) {
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   269
        var y = yscale * i;
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   270
        paper.path("M0," + y + "L" + pw + "," + y).attr({
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   271
            stroke: "#666"
4
26a901771957 Black Background
veltr
parents: 3
diff changeset
   272
        });
5
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   273
        paper.text(pw - 2, y + 6, secsToString(i)).attr({
4
26a901771957 Black Background
veltr
parents: 3
diff changeset
   274
            "text-anchor": "end",
26a901771957 Black Background
veltr
parents: 3
diff changeset
   275
            "fill": "#ffffff"
26a901771957 Black Background
veltr
parents: 3
diff changeset
   276
        });
5
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   277
    }
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   278
    paper.text(pw-2, ph-14, secsToString(data.duration)).attr({
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   279
        "text-anchor": "end",
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   280
        "fill": "#ffffff"
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   281
    });
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   282
    paper.path("M0," + (ph-20) + "L" + pw + "," + (ph-20)).attr({
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   283
        stroke: "#666"
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   284
    });
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   285
    paper.text(0, ph - 14,"tweets/min.").attr({
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   286
        "text-anchor": "start",
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   287
        "fill": "#ffffff"
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   288
    });
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   289
    
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   290
    for (var k = 2; k < 6; k++) {
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   291
        var x = xscale * k * 1000;
4
26a901771957 Black Background
veltr
parents: 3
diff changeset
   292
        paper.path("M" + x + ",0L" + x + "," + (ph - 10)).attr({
26a901771957 Black Background
veltr
parents: 3
diff changeset
   293
            stroke: "#666"
26a901771957 Black Background
veltr
parents: 3
diff changeset
   294
        });
26a901771957 Black Background
veltr
parents: 3
diff changeset
   295
        
5
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   296
        paper.text(x-2, ph - 14,k+"k").attr({
4
26a901771957 Black Background
veltr
parents: 3
diff changeset
   297
            "fill": "#ffffff"
2
0d947d167ec5 More tests
veltr
parents: 1
diff changeset
   298
        });
5
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   299
    }
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   300
    
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   301
    wordFilter();
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   302
    
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   303
    $(".topics-block").on("mouseenter", ".topic", function() {
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   304
        var el = $(this);
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   305
        el.addClass("hover");
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   306
        showTopicViz();
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   307
    }).on("mouseleave", ".topic", function() {
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   308
        $(this).removeClass("hover");
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   309
        showTopicViz();
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   310
    }).on("click", ".topic", function() {
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   311
        var el = $(this);
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   312
        $(this).toggleClass("selected");
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   313
        el.attr("data-timestamp", el.hasClass("selected") ? ++ordertag : 999999);
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   314
        showTopicViz();
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   315
    });
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   316
}
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   317
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   318
var data = { duration: 10200, topics: [] },
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   319
    colorset = ["#E41A1C", "#377EB8", "#4DAF4A", "#984EA3", "#FF7F00", "#A65628", "#F781BF"];
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   320
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   321
$(function() {
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   322
    
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   323
    $(".topics-block").draggable({axis:"y"});
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   324
    
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   325
    var loadedSteps = 0,
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   326
        stepsToFullyLoaded = 0;
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   327
    
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   328
    function checkIfLoaded() {
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   329
        loadedSteps++;
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   330
        if (loadedSteps >= stepsToFullyLoaded) {
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   331
            setTimeout(showData,0);
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   332
        }
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   333
    }
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   334
    
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   335
    function loadJson(url, propname, callback) {
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   336
        stepsToFullyLoaded++;
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   337
        $.getJSON(url, function(d) {
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   338
            if (callback) {
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   339
                var res = callback(d);
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   340
            } else {
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   341
                var res = d;
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   342
            }
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   343
            if (propname) {
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   344
                data[propname] = res;
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   345
            }
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   346
            checkIfLoaded();
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   347
        });
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   348
    }
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   349
    
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   350
    function solrUrl(table, params) {
21
007254e97333 improvements for better code reuse
veltr
parents: 19
diff changeset
   351
        return solrUrlBase + table + "/select?" + $.param(params) + "&wt=json&json.wrf=?";
5
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   352
    }
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   353
    
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   354
    function loadFromTopicsBean(method, propname, args, callback) {
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   355
        stepsToFullyLoaded++;
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   356
        var arg = args || [],
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   357
            cb = function(d) {
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   358
                if (callback) {
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   359
                    var res = callback(d);
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   360
                } else {
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   361
                    var res = d;
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   362
                }
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   363
                if (propname) {
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   364
                    data[propname] = res;
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   365
                }
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   366
                checkIfLoaded();
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   367
            }
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   368
        arg.push({callback: cb});
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   369
        TopicsBean[method].apply(TopicsBean,arg);
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   370
    }
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   371
    
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   372
    loadJson("data/minutes.json", "minutes");
14
3aa6b9963de0 Added topic labels
veltr
parents: 13
diff changeset
   373
    loadJson("data/topiclabels.json", "topiclabels");
5
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   374
    
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   375
    loadJson(
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   376
        solrUrl("MMSO", {q: "*:*", fl: "topic*,MMSO_id,multimediaSegment", rows: 250 }),
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   377
        "segments",
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   378
        function(d) {
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   379
            return d.response.docs.map(function(mmso) {
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   380
                var tc = mmso.multimediaSegment.match(/\d+/g),
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   381
                    start = parseInt(tc[0]),
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   382
                    end = parseInt(tc[1]),
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   383
                    topics = [];
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   384
                for (var k in mmso) {
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   385
                    if (k.substr(0,5) === "topic" && mmso[k] > .01) {
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   386
                        topics.push({
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   387
                            topic: parseInt(k.substr(5)),
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   388
                            weight: mmso[k]
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   389
                        })
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   390
                    }
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   391
                }
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   392
                topics.sort(function(a,b) {
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   393
                    return b.weight - a.weight;
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   394
                });
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   395
                return {
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   396
                    id: mmso.MMSO_id,
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   397
                    start: start,
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   398
                    end: end,
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   399
                    duration: end - start,
6
14dd1980b0b9 MMSO Caching
veltr
parents: 5
diff changeset
   400
                    topics: topics
5
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   401
                }
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   402
            }).sort(function(a,b) {
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   403
                return a.start - b.start;
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   404
            });
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   405
        })
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   406
    
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   407
    dwr.engine.setTimeout(60000);
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   408
    TopicsBean._path = "http://159.217.144.101:8050/sia-solr/dwr";
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   409
    
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   410
    loadFromTopicsBean("getTopicsNumber",false,false,function(topic_count) {
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   411
        for (var i = 0; i < topic_count; i++) {
14
3aa6b9963de0 Added topic labels
veltr
parents: 13
diff changeset
   412
            data.topics.push({ index: i, words: [ { word: "(no label)", weight: 1 }] });
5
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   413
        }
1
1f574d93e195 First tests
veltr
parents:
diff changeset
   414
    });
5
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   415
    
6
14dd1980b0b9 MMSO Caching
veltr
parents: 5
diff changeset
   416
    loadFromTopicsBean("getTopWords","topwords",[200]);
5
490e4d1b6fee started work on "play" screen
veltr
parents: 4
diff changeset
   417
    
1
1f574d93e195 First tests
veltr
parents:
diff changeset
   418
});