diff -r 81a8bb1d872a -r 3ba18138e37e js/startscreen.js --- a/js/startscreen.js Fri Mar 22 17:03:53 2013 +0100 +++ b/js/startscreen.js Fri Mar 22 17:54:46 2013 +0100 @@ -19,12 +19,7 @@ } $(".duration").text(secsToString(data.duration)); - - $(".topwords-list").on("click", "li", function() { - var el = $(this).toggleClass("selected"); - wordFilter(); - }); - + var nmmso = data.segments.length; data.topics.forEach(function(topic) { @@ -49,52 +44,38 @@ return b.score - a.score; }); - var selectedWords = [], searchString = ""; + var selectedWords = [], searchString = "", topicscache = {}; + + function showTopicsForWord(word) { + var topicweights = topicscache[word]; + var topiclist = data.topics.filter(function(topic) { + return topicweights[topic.index] > .01 && topic.index !== topicPoubelle; + }); + topiclist.sort(function(a,b) { + return topicweights[b.index] - topicweights[b.index] + }); + showTopics(topiclist); + } function wordFilter() { - var selectedLis = $(".topwords-list li.selected"); searchString = $(".keyword-search").val() || "", selectedWords = []; if (searchString.length) { selectedWords.push(searchString); } - selectedLis.each(function() { - selectedWords.push($(this).text().trim()); - }); if (selectedWords.length) { - /* - var topiclist = data.topics.filter(function(topic) { - if (topic.index === topicPoubelle) { - return false; - } - var found = false, - relevance = 0; - var foundWords = selectedWords.map(function() { return false }); - topic.words.forEach(function(topicword) { - selectedWords.forEach(function(selectedword, k) { - if (topicword.word.search(selectedword) !== -1) { - found = true; - relevance += (.5 + topicword.weight); - } - }); - }); - topic.relevance = relevance; - return found; - }).sort(function(a,b) { - return b.relevance - a.relevance; - }); - */ - TopicsBean.topicsForKeywords(selectedWords.join(","),{ - callback: function(topicweights) { - var topiclist = data.topics.filter(function(topic) { - return topicweights[topic.index] > .01 && topic.index !== topicPoubelle; - }); - topiclist.sort(function(a,b) { - return topicweights[b.index] - topicweights[b.index] - }); - showTopics(topiclist); - } - }); + var k = selectedWords.join(","); + if (typeof topicscache[k] === "undefined") { + TopicsBean.topicsForKeywords(k,{ + callback: function(topicweights) { + topicscache[k] = topicweights; + showTopicsForWord(k); + } + }); + } else { + showTopicsForWord(k); + } + } else { showTopics(sortedTopics); } @@ -104,15 +85,6 @@ var topicHtmls = ["", "", ""]; if (searchString.length) { var searchStringRx = new RegExp('(' + searchString.replace(/(\W)/g,'\\$1') + ')', "gim"); - $(".topwords-list li").each(function() { - var el = $(this); - el.html(el.text().replace(searchStringRx,'$1')); - }); - } else { - $(".topwords-list li").each(function() { - var el = $(this); - el.text(el.text()); - }); } var replaceRx = new RegExp('(' + selectedWords.map(function(w) { return w.replace(/(\W)/g,'\\$1') @@ -146,90 +118,38 @@ showTopicViz(); } -/* - var topwords = [], globwords = {}; - - data.topics.forEach(function(topic) { - topic.words.forEach(function(word) { - globwords[word.word] = word.weight + (globwords[word.word] || 0) - }); - }) - - for (var w in globwords) { - topwords.push({ - word : w, - weight : globwords[w] - }); - } - topwords.sort(function(a, b) { - return b.weight - a.weight; - }); - - $(".keyword-search").autocomplete({ - source: topwords.map(function(w) { return w.word }) - }).on("keyup change paste", wordFilter); - */ -// /* - var globwords = {}; + + var allwords = []; data.topics.forEach(function(topic) { topic.words.forEach(function(topicword) { topicword.word.split(" ").filter(function(w) { return w.length > 2; }).forEach(function(w) { - globwords[w] = 2 * topicword.weight + (globwords[w] || 0) + allwords.push(w); }); }); }); - - var ntw = data.topwords.length; - + data.topwords.forEach(function(v, k) { - var weight = (ntw - k)/ntw; v.split(" ").filter(function(w) { return w.length > 2; }).forEach(function(w) { - globwords[w] = weight + (globwords[w] || 0) + allwords.push(w); }); }); - - delete globwords.des; - - var allwords = _(globwords).keys(), - topwords = _(globwords).map(function(v, k) { - return { - word: k, - weight: v - } - }); - - topwords.sort(function(a,b) { - return b.weight - a.weight - }); - + + var allwords = _(allwords).uniq(); + allwords.sort(); $(".keyword-search").autocomplete({ source: allwords, change: function() { - window.setInterval(wordFilter,0); + window.setTimeout(wordFilter,0); } }).on("keyup change paste", wordFilter); // */ - - var wordsToShow = topwords.slice(0,80), - max = wordsToShow[0].weight, - min = Math.min(wordsToShow[wordsToShow.length - 1].weight, max - .01), - scale = 10 / (max - min); - - $(".topwords-list").html(wordsToShow.reduce(function(mem, d) { - return mem - + '