js/startscreen.js
changeset 23 933b388521f6
parent 21 007254e97333
--- a/js/startscreen.js	Wed Apr 24 17:54:48 2013 +0200
+++ b/js/startscreen.js	Thu Apr 25 13:21:59 2013 +0200
@@ -57,7 +57,7 @@
         return b.score - a.score;
     });
     
-    var selectedWords = [], searchString = "", topicscache = {};
+    var selectedWords = [], topicscache = {};
     
     function showTopicsForWord(word) {
     	var topicweights = topicscache[word];
@@ -71,13 +71,11 @@
     }
     
     function wordFilter() {
-        searchString = $(".keyword-search").val() || "",
-        selectedWords = [];
-        if (searchString.length) {
-            selectedWords.push(searchString);
-        }
+        selectedWords = $(".keyword-search").tagit("assignedTags");
+        
         if (selectedWords.length) {
         	var k = selectedWords.join(",");
+        	console.log(k);
         	if (typeof topicscache[k] === "undefined") {
         		TopicsBean.topicsForKeywords(k,{
 	                callback: function(topicweights) {
@@ -94,39 +92,50 @@
         }
     }
     
+    var currenttopics;
+    
     function showTopics(topiclist) {
-        var topicHtmls = ["", "", ""];
-        if (searchString.length) {
-            var searchStringRx = new RegExp('(' + searchString.replace(/(\W)/g,'\\$1') + ')', "gim");
+        var tb = $(".topics-block");
+        if (topiclist.join(",") !== currenttopics) {
+            currenttopics = topiclist.join(",");
+            var topicHtmls = ["", "", ""];
+            topiclist.forEach(function(topic,i) {
+                var wordsToShow = topic.words.slice(),
+                    max = wordsToShow[0].weight,
+                    min = Math.min(wordsToShow[wordsToShow.length - 1].weight, max - .01),
+                    scale = 10 / (max - min);
+                var li = '<li class="shadow-block topic" data-topic-id="'
+                    + topic.index
+                    + '" data-timestamp="999999"><ul class="topic-words">'
+                    + wordsToShow.reduce(function(memwords, word) {
+                        return memwords
+                            + '<li style="font-size: '
+                            + ( 10 + scale * (word.weight - min) )
+                            + 'px;">'
+                            + word.word
+                            + '</li>';
+                    },"")
+                    + '</ul></li>';
+                topicHtmls[i % 3] += li;
+            });
+            tb.html(topicHtmls.reduce(function(mem,html) {
+               return mem + '<ul class="topic-column">' + html + '</ul>' 
+            },""));
         }
-        var replaceRx = new RegExp('(' + selectedWords.map(function(w) {
-            return w.replace(/(\W)/g,'\\$1')
-        }).join("|") + ')', "gim");
-        topiclist.forEach(function(topic,i) {
-            var wordsToShow = topic.words.slice(),
-                max = wordsToShow[0].weight,
-                min = Math.min(wordsToShow[wordsToShow.length - 1].weight, max - .01),
-                scale = 10 / (max - min);
-            var li = '<li class="shadow-block topic" data-topic-id="'
-                + topic.index
-                + '" data-timestamp="999999"><ul class="topic-words">'
-                + wordsToShow.reduce(function(memwords, word) {
-                    return memwords
-                        + '<li style="font-size: '
-                        + ( 10 + scale * (word.weight - min) )
-                        + 'px;">'
-                        + ( selectedWords.length
-                            ? word.word.replace(replaceRx,'<span class="highlight">$1</span>')
-                            : word.word )
-                        + '</li>';
-                },"")
-                + '</ul></li>';
-            topicHtmls[i % 3] += li;
+        if (selectedWords.length) {
+            var replaceRx = new RegExp('(' + selectedWords.map(function(w) {
+                return w.replace(/(\W)/g,'\\$1')
+            }).join("|") + ')', "gim");
+        }
+        tb.find(".topic-words li").each(function() {
+            var el = $(this);
+            if (selectedWords.length) {
+                var w = _(el.text()).escape().replace(replaceRx,'<span class="highlight">$1</span>');
+                el.html(w);
+            } else {
+                el.text(el.text());
+            }
         });
-        var tb = $(".topics-block");
-        tb.html(topicHtmls.reduce(function(mem,html) {
-           return mem + '<ul class="topic-column">' + html + '</ul>' 
-        },""));
         tb.css("top",0);
         
         showTopicViz();
@@ -156,6 +165,13 @@
         
     allwords.sort();
     
+    $(".keyword-search").tagit({
+        availableTags: allwords,
+        afterTagAdded: wordFilter,
+        afterTagRemoved: wordFilter
+    })
+    
+/*    
     $(".keyword-search").autocomplete({
         source: allwords,
         change: function() {