moved qdb here because matt is lazy
[public/www-new.git] / pub / qdb / res / themes / default / js / tag_cloud.js
1 /*\r
2 ###############################################################################\r
3 # Chirpy! 0.3, a quote management system                                      #\r
4 # Copyright (C) 2005-2007 Tim De Pauw <ceetee@users.sourceforge.net>          #\r
5 ###############################################################################\r
6 # This program is free software; you can redistribute it and/or modify it     #\r
7 # under the terms of the GNU General Public License as published by the Free  #\r
8 # Software Foundation; either version 2 of the License, or (at your option)   #\r
9 # any later version.                                                          #\r
10 #                                                                             #\r
11 # This program is distributed in the hope that it will be useful, but WITHOUT #\r
12 # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or       #\r
13 # FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for   #\r
14 # more details.                                                               #\r
15 #                                                                             #\r
16 # You should have received a copy of the GNU General Public License along     #\r
17 # with this program; if not, write to the Free Software Foundation, Inc., 51  #\r
18 # Franklin St, Fifth Floor, Boston, MA  02110-1301  USA                       #\r
19 ###############################################################################\r
20 \r
21 ###############################################################################\r
22 # tag_cloud.js                                                                #\r
23 # Allows user interaction with the tag cloud                                  #\r
24 ###############################################################################\r
25 # $Id:: tag_cloud.js 291 2007-02-05 21:24:46Z ceetee                        $ #\r
26 ###############################################################################\r
27 */\r
28 \r
29 var tagCloudUpdateTime = 5;\r
30 \r
31 var tagUseRE = new RegExp("\\bused-(\\d+)\\b");\r
32 var tagUseMinimum = 1;\r
33 var tagCloudSliderLabelText;\r
34 var tagNodes;\r
35 \r
36 function initializeTagCloudSlider (labelPrefix) {\r
37         var cloud = document.getElementById("tag-cloud");\r
38         tagNodes = new Array();\r
39         var maxUseCount = 0;\r
40         for (var i = 0; i < cloud.childNodes.length; i++) {\r
41                 var child = cloud.childNodes[i];\r
42                 if (child.nodeName && child.nodeName.toUpperCase() == "LI") {\r
43                         var matches = child.className.match(tagUseRE);\r
44                         var cnt = parseInt(matches[1]);\r
45                         if (!tagNodes[cnt]) tagNodes[cnt] = new Array();\r
46                         tagNodes[cnt].push(child);\r
47                         if (cnt > maxUseCount) maxUseCount = cnt;\r
48                 }\r
49         }\r
50         var newMaxUseCount = Math.floor(maxUseCount / 4);\r
51         if (newMaxUseCount > 1) maxUseCount = newMaxUseCount;\r
52         var val = readCookie("tag_use");\r
53         if (!val || val <= 0 || val > maxUseCount) val = 1;\r
54         var container = document.createElement("div");\r
55         container.id = "tag-cloud-slider-container";\r
56         var sl = document.createElement("div");\r
57         sl.id = "tag-cloud-slider";\r
58         var form = document.createElement("form");\r
59         form.action = "#";\r
60         var input = document.createElement("input");\r
61         input.id = input.name = "tag-cloud-slider-input";\r
62         var label = document.createElement("div");\r
63         label.id = "tag-usage-minimum";\r
64         label.appendChild(document.createTextNode(labelPrefix + " "));\r
65         tagCloudSliderLabelText = document.createTextNode(val);\r
66         label.appendChild(tagCloudSliderLabelText);\r
67         form.appendChild(input);\r
68         sl.appendChild(form);\r
69         container.appendChild(label);\r
70         container.appendChild(sl);\r
71         var placeholder = document.getElementById("tag-cloud-slider-placeholder");\r
72         placeholder.parentNode.replaceChild(container, placeholder);\r
73         var slider = new Slider(sl, input);\r
74         slider.setMinimum(1);\r
75         slider.setMaximum(maxUseCount);\r
76         slider.setBlockIncrement(1);\r
77         slider.setValue(val);\r
78         slider.onchange = function () { setTagUseMinimum(slider.getValue()); };\r
79         setTagUseMinimum(val);\r
80 }\r
81 \r
82 function setTagUseMinimum (min) {\r
83         if (tagUseMinimum == min) return;\r
84         tagCloudSliderLabelText.nodeValue = min;\r
85         createCookie("tag_use", min);\r
86         if (min > tagUseMinimum)\r
87                 setTagNodesVisible(tagUseMinimum, min - 1, false);\r
88         else\r
89                 setTagNodesVisible(min, tagUseMinimum - 1, true);\r
90         tagUseMinimum = min;\r
91 }\r
92 \r
93 function setTagNodesVisible (first, last, visible) {\r
94         var disp = (visible ? "" : "none");\r
95         for (var i = first; i <= last; i++) {\r
96                 var nodes = tagNodes[i];\r
97                 if (!nodes) continue;\r
98                 for (var j = 0; j < nodes.length; j++)\r
99                         nodes[j].style.display = disp;\r
100         }\r
101 }\r
102 \r
103 function readCookie (name) {\r
104         var nameEq = name + "=";\r
105         var ca = document.cookie.split(/; */);\r
106         for (var i = 0; i < ca.length; i++) {\r
107                 var c = ca[i];\r
108                 if (c.indexOf(nameEq) == 0)\r
109                         return c.substring(nameEq.length, c.length);\r
110         }\r
111         return null;\r
112 }\r
113 \r
114 function createCookie (name, value) {\r
115         var date = new Date();\r
116         date.setYear(1900 + date.getYear() + 1);\r
117         document.cookie = name + "=" + value + "; expires=" + date.toGMTString()\r
118                 + "; path=" + cookiePath + "; domain=" + cookieDomain;\r
119 }