summaryrefslogtreecommitdiff
path: root/web/viewsjs
diff options
context:
space:
mode:
Diffstat (limited to 'web/viewsjs')
-rw-r--r--web/viewsjs/index.js.erb46
1 files changed, 46 insertions, 0 deletions
diff --git a/web/viewsjs/index.js.erb b/web/viewsjs/index.js.erb
new file mode 100644
index 0000000..575834b
--- /dev/null
+++ b/web/viewsjs/index.js.erb
@@ -0,0 +1,46 @@
+<%
+# This is the maximum number of tags in the tag cloud. Javascript code will remove tags if the
+# window is to small to show all of them.
+tagcloud_number_of_tags = 260
+tags = @db.select("SELECT key, scale1 FROM popular_keys ORDER BY scale1 DESC LIMIT #{ tagcloud_number_of_tags }").
+ execute().
+ each_with_index{ |tag, idx| tag['pos'] = (tagcloud_number_of_tags - idx) / tagcloud_number_of_tags.to_f }.
+ sort_by{ |row| row['key'] }
+%>
+
+var tagcloud_data = <%= tags.map{ |tag| [tag['key'], tagcloud_size(tag)] }.to_json.gsub(/\],/, "],\n") %>;
+
+function resize_home() {
+ var tagcloud = jQuery('#tagcloud');
+ tagcloud.empty();
+ tagcloud.height(0);
+
+ resize_box();
+
+ var height = tagcloud.parent().innerHeight();
+ tagcloud.parent().children().each(function(index) {
+ if (this.id != 'tagcloud') {
+ height -= jQuery(this).outerHeight(true);
+ }
+ });
+ tagcloud.height(height - 20);
+
+ var cloud = '';
+ for (var i=0; i < tagcloud_data.length; i++) {
+ cloud += link(url_for_key(tagcloud_data[i][0]), tagcloud_data[i][0], { style: 'font-size: ' + tagcloud_data[i][1] + 'px;' }) + ' ';
+ }
+ tagcloud.append(cloud);
+
+ var tags_array = tagcloud.children().toArray().sort(function(a, b) {
+ return parseInt(jQuery(a).css('font-size')) - parseInt(jQuery(b).css('font-size'));
+ });
+
+ while (tagcloud.get(0).scrollHeight > tagcloud.height()) {
+ jQuery(tags_array.shift()).remove();
+ }
+}
+
+function page_init() {
+ jQuery(window).resize(resize_home);
+ resize_home();
+}