From 7ecb326b32fdbb01286e980afb453460d661f7b8 Mon Sep 17 00:00:00 2001 From: garvinhicking Date: Wed, 30 May 2007 11:59:56 +0000 Subject: [PATCH] Add JS selector --- templates/default/admin/category_selector.js | 118 +++++++++++++++++++ 1 file changed, 118 insertions(+) create mode 100644 templates/default/admin/category_selector.js diff --git a/templates/default/admin/category_selector.js b/templates/default/admin/category_selector.js new file mode 100644 index 0000000..447460e --- /dev/null +++ b/templates/default/admin/category_selector.js @@ -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; + } + } +} -- 2.39.5