]> git.mjollnir.org Git - s9y.git/commitdiff
Add JS selector
authorgarvinhicking <garvinhicking>
Wed, 30 May 2007 11:59:56 +0000 (11:59 +0000)
committergarvinhicking <garvinhicking>
Wed, 30 May 2007 11:59:56 +0000 (11:59 +0000)
templates/default/admin/category_selector.js [new file with mode: 0644]

diff --git a/templates/default/admin/category_selector.js b/templates/default/admin/category_selector.js
new file mode 100644 (file)
index 0000000..447460e
--- /dev/null
@@ -0,0 +1,118 @@
+function toggle_extended(setCookie) {
+    var textarea = document.getElementById('serendipity[extended]');
+    var button   = document.getElementById('option_extended');
+    var tools    = document.getElementById('tools_extended');
+    if ( textarea.style.display == 'none' ) {
+        textarea.style.display = '';
+        tools.style.display = '';
+        button.src = minus_img;
+        if (setCookie == true) {
+            document.cookie = 'serendipity[toggle_extended]=true;';
+        }
+    } else {
+        textarea.style.display = 'none';
+        tools.style.display = 'none';
+        button.src = plus_img;
+        if (setCookie == true) {
+            document.cookie = 'serendipity[toggle_extended]=;';
+        }}
+    }}
+}
+
+function showItem(id) {
+    var selected = 0;
+    if (typeof(id) == 'undefined' || typeof(id) == 'object') {
+        id = 'categoryselector';
+    }
+
+    if (document.getElementById) {
+        el = document.getElementById(id);
+        if (selector_toggle[id] && selector_toggle[id] == 'off') {
+            selector_restore[id] = new Array();
+            selector_toggle[id]  = 'on';
+
+            /* Hack to make sure that when the single dropdown is shown, don't have multiple selections */
+            last = 0;
+
+            for (i=0; i < el.options.length; i++) {
+                if (el.options[i].selected == true) {
+                    selected++;
+                    last = i;
+                    selector_restore[id][last] = 'on';
+                }
+
+                if (selected > 1) {
+                    /* If there is more than one selected, we reset all those to false
+                       This is because otherwise the label will say 'No Category', but the categories will still be selected */
+                    for (j=0; j < el.options.length; j++) {
+                        /* Save selection in array to later restore them */
+                        if (el.options[j].selected == true) {
+                            el.options[j].selected = false;
+                            selector_restore[id][j] = 'on';
+                            last = j;
+                        } else {
+                            selector_restore[id][j] = false;
+                        }
+                    }
+                    break;
+                }
+            }
+
+            el.selectedIndex = null;
+            if (last > 0) {
+                el.selectedIndex = last;
+            }
+
+            el.size = 1;
+
+            /* Show a normal dropdown */
+            if (el.multiple) {
+                el.multiple = false;
+            }
+
+            document.getElementById('option_' + id).src = plus_img;
+        } else {
+            selector_store[id] = el.size;
+            if (selector_store[id] == 0) {
+                selector_store[id] = 5;
+            }
+
+            last = 0;
+            if (el.selectedIndex > 0) {
+                if (!selector_restore[id]) {
+                    selector_restore[id] = new Array();
+                }
+
+                for (j=0; j < el.options.length; j++) {
+                    /* Save selection in array to later restore them */
+                    if (el.options[j].selected == true) {
+                        selector_restore[id][j] = 'on';
+                        last = j;
+                    }
+                }
+            }
+            el.selectedIndex = -1;
+            el.size = cat_count;
+            selector_toggle[id] = 'off';
+
+            /* Show multiple items */
+            el.multiple = true;
+
+            /* Restore previously selected items? */
+            last = 0;
+            for (i = 0; i < el.options.length; i++) {
+                if (selector_restore && selector_restore[id] && selector_restore[id][i] && selector_restore[id][i] == 'on') {
+                    val = el.options[i].value;
+                    if (el.options[i].selected != true) {
+                        el.options[i].selected = true;
+                        last = i;
+                        // [TODO] IE Bug: Don't ask me why, but this restoring only works in Internet Explorer if you put this:
+                        // alert('it doesnt matter what, just the alert is important');
+                    }
+                }
+            }
+
+            document.getElementById('option_' + id).src = minus_img;
+        }
+    }
+}