diff options
| author | Max Kremmel <xing@synapse.plus.com> | 2005-12-18 22:32:29 +0000 |
|---|---|---|
| committer | Max Kremmel <xing@synapse.plus.com> | 2005-12-18 22:32:29 +0000 |
| commit | d53ed996cccd22b00d6631bd634cef53c553a4f2 (patch) | |
| tree | c2edbd077b82b725d28b4d632f9e6ba0e4dad7e4 | |
| parent | 6da711f6b15d5fb88f9ddeb2d3eff7375639b140 (diff) | |
| download | themes-d53ed996cccd22b00d6631bd634cef53c553a4f2.tar.gz themes-d53ed996cccd22b00d6631bd634cef53c553a4f2.tar.bz2 themes-d53ed996cccd22b00d6631bd634cef53c553a4f2.zip | |
merge recent changes into HEAD
| -rw-r--r-- | ajax.php | 5 | ||||
| -rw-r--r-- | js/ajax.js | 51 | ||||
| -rw-r--r-- | js/bitweaver.js | 273 | ||||
| -rw-r--r-- | js/debugger.js | 15 | ||||
| -rw-r--r-- | js/prototype.js | 1017 | ||||
| -rw-r--r-- | templates/admin_content_templates.tpl | 8 | ||||
| -rw-r--r-- | templates/admin_themes_manager.tpl | 2 |
7 files changed, 1163 insertions, 208 deletions
diff --git a/ajax.php b/ajax.php deleted file mode 100644 index 8c34f08..0000000 --- a/ajax.php +++ /dev/null @@ -1,5 +0,0 @@ -<?php -require_once( '../bit_setup_inc.php' ); -include_once( LIBERTY_PKG_PATH.'attachment_browser.php' ); -echo $_REQUEST['ajaxid'].'||'.$gBitSmarty->fetch( 'bitpackage:liberty/attachment_browser.tpl' ); -?> @@ -1,45 +1,10 @@ -// based on http://rajshekhar.net/blog/archives/85-Rasmus-30-second-AJAX-Tutorial.html -function createXMLHttpRequest() { - var ua; - if(window.XMLHttpRequest) { - try { - ua = new XMLHttpRequest(); - } catch(e) { - ua = false; - } - } else if(window.ActiveXObject) { - try { - ua = new ActiveXObject("Microsoft.XMLHTTP"); - } catch(e) { - ua = false; - } - } - return ua; +function ajax_updater(target, url, data) { + var myAjax = new Ajax.Updater( + {success: target}, + url, + {parameters: data, onFailure: ajax_error} + ); } -var req = createXMLHttpRequest(); -function sendRequest(id,params) { - if(req) { - document.getElementById(id).innerHTML = '<img src="'+bitIconDir+'busy.gif" alt="Loading" title="Loading" style="vertical-align:middle; position:absolute;" /> '+document.getElementById(id).innerHTML; - } else { - document.getElementById(id).innerHTML = 'Your browser cannot display the content. Please upgrade your browser to a more recent version.'; - } - if(params) { - params = '&'+params; - } else { - var params = ''; - } - req.open('get', bitRootUrl+'themes/ajax.php?ajaxid='+id+params); - req.onreadystatechange = handleResponse; - req.send(null); -} -function handleResponse() { - if(req.readyState == 4){ - var response = req.responseText; - var update = new Array(); - - if(response.indexOf('||' != -1)) { - update = response.split('||'); - document.getElementById(update[0]).innerHTML = update[1]; - } - } +function ajax_error( request ) { + alert( 'Sorry, there was a problem getting the requested data.' ); } diff --git a/js/bitweaver.js b/js/bitweaver.js index 12399e4..8f9342e 100644 --- a/js/bitweaver.js +++ b/js/bitweaver.js @@ -1,27 +1,34 @@ -// $Header: /cvsroot/bitweaver/_bit_themes/js/Attic/bitweaver.js,v 1.3 2005/12/05 23:54:18 squareing Exp $ - -// -// Set client offset (in minutes) to a cookie to avoid server-side DST issues -// Added 7/25/03 by Jeremy Jongsma (jjongsma@tickchat.com) -// -//alert( bitCookiePath ); -//alert( bitCookieDomain ); +// $Header: /cvsroot/bitweaver/_bit_themes/js/Attic/bitweaver.js,v 1.4 2005/12/18 22:32:27 squareing Exp $ var expires = new Date(); var offset = -(expires.getTimezoneOffset() * 60); expires.setFullYear(expires.getFullYear() + 1); setCookie("tz_offset", offset); +/*--- moved here from prototype - start ---*/ +function $() { + var elements = new Array(); + for (var i = 0; i < arguments.length; i++) { + var element = arguments[i]; + if (typeof element == 'string') + element = document.getElementById(element); + if (arguments.length == 1) + return element; + elements.push(element); + } + return elements; +} +/*----------- prototype - end -------------*/ + function toggle_dynamic_var($name) { name1 = 'dyn_'+$name+'_display'; name2 = 'dyn_'+$name+'_edit'; - if(document.getElementById(name1).style.display == "none") { - document.getElementById(name2).style.display = "none"; - document.getElementById(name1).style.display = "inline"; + if($(name1).style.display == "none") { + $(name2).style.display = "none"; + $(name1).style.display = "inline"; } else { - document.getElementById(name1).style.display = "none"; - document.getElementById(name2).style.display = "inline"; + $(name1).style.display = "none"; + $(name2).style.display = "inline"; } - } function genPass(w1, w2, w3) { @@ -34,32 +41,22 @@ function genPass(w1, w2, w3) { for (i = 0; i < l; i++) { if (s) { letter = vo.charAt(Math.round(Math.random() * (vo.length - 1))); - s = 0; } else { letter = co.charAt(Math.round(Math.random() * (co.length - 1))); - s = 1; } p = p + letter; } - document.getElementById(w1).value = p; - document.getElementById(w2).value = p; - document.getElementById(w3).value = p; + $(w1).value = p; + $(w2).value = p; + $(w3).value = p; } function setSomeElement(fooel, foo1) { - document.getElementById(fooel).value = document.getElementById(fooel).value + foo1; -} - -function replaceSome(fooel, what, repl) { - document.getElementById(fooel).value = document.getElementById(fooel).value.replace(what, repl); -} - -function replaceLimon(vec) { - document.getElementById(vec[0]).value = document.getElementById(vec[0]).value.replace(vec[1], vec[2]); + $(fooel).value = $(fooel).value + foo1; } // used by insertAt() @@ -67,8 +64,7 @@ function setSelectionRange(textarea, selectionStart, selectionEnd) { if (textarea.setSelectionRange) { textarea.focus(); textarea.setSelectionRange(selectionStart, selectionEnd); - } - else if (textarea.createTextRange) { + } else if (textarea.createTextRange) { var range = textarea.createTextRange(); textarea.collapse(true); textarea.moveEnd('character', selectionEnd); @@ -85,22 +81,22 @@ function setCaretToPos (textarea, pos) { // inserts replaceString in elementId - used for quicktags function insertAt(elementId, replaceString) { //inserts given text at selection or cursor position - textarea = document.getElementById(elementId); + textarea = $(elementId); var toBeReplaced = /text|page|textarea_id/;//substrings in replaceString to be replaced by the selection if a selection was done if (textarea.setSelectionRange) { //Mozilla UserAgent Gecko-1.4 var selectionStart = textarea.selectionStart; var selectionEnd = textarea.selectionEnd; if (selectionStart != selectionEnd) { // has there been a selection - var newString = replaceString.replace(toBeReplaced, textarea.value.substring(selectionStart, selectionEnd)); + var newString = replaceString.replace(toBeReplaced, textarea.value.substring(selectionStart, selectionEnd)); textarea.value = textarea.value.substring(0, selectionStart) - + newString - + textarea.value.substring(selectionEnd); + + newString + + textarea.value.substring(selectionEnd); setSelectionRange(textarea, selectionStart, selectionStart + newString.length); } else {// set caret textarea.value = textarea.value.substring(0, selectionStart) - + replaceString - + textarea.value.substring(selectionEnd); + + replaceString + + textarea.value.substring(selectionEnd); setCaretToPos(textarea, selectionStart + replaceString.length); } } else if (document.selection) { @@ -124,28 +120,22 @@ function insertAt(elementId, replaceString) { } } -function setUserModuleFromCombo(id) { - document.getElementById('usermoduledata').value = document.getElementById('usermoduledata').value - + document.getElementById(id).options[document.getElementById(id).selectedIndex].value; -//document.getElementById('usermoduledata').value='das'; -} - +/*--- show - hide - flip - toggle ---*/ function show(foo,f) { - document.getElementById(foo).style.display = "block"; + $(foo).style.display = "block"; if (f) { setCookie(foo, "o"); } } -// show, hide, flip and toggle should be removed at some point as they are can't be navigated without js if the initial setting is hidden. function hide(foo,f) { - document.getElementById(foo).style.display = "none"; + $(foo).style.display = "none"; if (f) { setCookie(foo, "c"); } } function flip(foo) { - if (document.getElementById(foo).style.display == "none") { + if ($(foo).style.display == "none") { show(foo); } else { - if (document.getElementById(foo).style.display == "block") { + if ($(foo).style.display == "block") { hide(foo); } else { show(foo); @@ -154,12 +144,11 @@ function flip(foo) { } function toggle(foo) { - if (document.getElementById(foo).style.display == "none") { + if ($(foo).style.display == "none") { show(foo); - setCookie(foo, "o"); } else { - if (document.getElementById(foo).style.display == "block") { + if ($(foo).style.display == "block") { hide(foo,1); } else { show(foo,1); @@ -177,7 +166,6 @@ function settogglestate(foo) { function setfoldericonstate(foo) { pic = new Image(); - cookie_value = getCookie(foo); if (cookie_value == "o") { pic.src = bitIconDir + "expanded.gif"; @@ -186,15 +174,11 @@ function setfoldericonstate(foo) { } else { return; } - -//alert(document.getElementById(foo+"img").src); -//alert(pic.src); - document.getElementById(foo+"img").src = pic.src; + $(foo+"img").src = pic.src; } -// used in conjunction with setfoldericonstate() function icntoggle(foo) { - if (document.getElementById(foo).style.display == "none") { + if ($(foo).style.display == "none") { show(foo); setCookie(foo, "o"); } else { @@ -204,6 +188,61 @@ function icntoggle(foo) { setfoldericonstate(foo); } +function flipWithSign(foo) { + if ($(foo).style.display == "none") { + show(foo); + collapseSign("flipper" + foo); + setCookie(foo, "o"); + } else { + hide(foo); + expandSign("flipper" + foo); + setCookie(foo, "c"); + } +} + +function setFlipWithSign(foo) { + if (getCookie(foo) == "o") { + collapseSign("flipper" + foo); + show(foo); + } else { + expandSign("flipper" + foo); + hide(foo); + } +} + +function expandSign(foo) { + $(foo).firstChild.nodeValue = "[+]"; +} + +function collapseSign(foo) { + $(foo).firstChild.nodeValue = "[-]"; +} + +function toggleBlockDisplay(item) { + if (document.layers) { + current = (document.layers[item].display == 'none') ? 'block' : 'none'; + document.layers[item].display = current; + } else if (document.all) { + current = (document.all[item].style.display == 'none') ? 'block' : 'none'; + document.all[item].style.display = current; + } else if (document.getElementById) { + vista = ($(item).style.display == 'none') ? 'block' : 'none'; + $(item).style.display = vista; + } +} + +function setBlockDisplay(item,vizFlag) { + current = (vizFlag) ? 'block' : 'none'; + if (document.layers) { + document.layers[item].display = current; + } else if (document.all) { + document.all[item].style.display = current; + } else if (document.getElementById) { + $(item).style.display = current; + } +} +/*--- show - hide - flip - toggle ---*/ + // name - name of the cookie // value - value of the cookie // [expires] - expiration date of the cookie (defaults to end of current session) @@ -213,13 +252,14 @@ function icntoggle(foo) { // * an argument defaults when it is assigned null as a placeholder // * a null placeholder is not required for trailing omitted arguments function setCookie(name, value, expire, path, domain, secure) { - var cookie_path = bitCookiePath; - var cookie_domain = escape(bitCookieDomain); + var cookie_path = (path) ? path : bitCookiePath; + var cookie_domain = escape((domain) ? domain : bitCookieDomain); + var cookie_expire = (expire) ? expire.toGMTString() : expires.toGMTString(); var curCookie = name + "=" + escape(value) - + ((expire) ? "; expires=" + expire.toGMTString() : "; expires=" + expires.toGMTString()) - + ((path) ? "; path=" + path : "; path=" + cookie_path) - + ((domain) ? "; domain=" + domain : "; domain=" + cookie_domain) - + ((secure) ? "; secure" : ""); + + "; path=" + cookie_path + + "; domain=" + cookie_domain + + "; expires=" + cookie_expire + + ((secure) ? "; secure" : ""); //alert(curCookie); document.cookie = curCookie; } @@ -228,13 +268,11 @@ function setCookie(name, value, expire, path, domain, secure) { // * return string containing value of specified cookie or null if cookie does not exist function getCookie(name) { var dc = document.cookie; - var prefix = name + "="; var begin = dc.indexOf("; " + prefix); if (begin == -1) { begin = dc.indexOf(prefix); - if (begin != 0) return null; } else begin += 2; @@ -252,56 +290,19 @@ function getCookie(name) { // [domain] - domain of the cookie (must be same as domain used to create cookie) // * path and domain default if assigned null or omitted if no explicit argument proceeds function deleteCookie(name, path, domain) { - var cookie_path = bitCookiePath; - var cookie_domain = escape(bitCookieDomain); + var cookie_path = (path) ? path : bitCookiePath; + var cookie_domain = escape((domain) ? domain : bitCookieDomain); if (getCookie(name)) { document.cookie = name + "=" - + ((path) ? "; path=" + path : cookie_path) + ((domain) ? "; domain=" + domain : cookie_domain) + "; expires=Thu, 01-Jan-70 00:00:01 GMT"; - } -} - -// Expand/collapse lists -function flipWithSign(foo) { - if (document.getElementById(foo).style.display == "none") { - show(foo); - - collapseSign("flipper" + foo); - setCookie(foo, "o"); - } else { - hide(foo); - - expandSign("flipper" + foo); - setCookie(foo, "c"); - } -} - -// set the state of a flipped entry after page reload -function setFlipWithSign(foo) { - if (getCookie(foo) == "o") { - collapseSign("flipper" + foo); - - show(foo); - } else { - expandSign("flipper" + foo); - - hide(foo); + + "; path=" + cookie_path + "; domain=" + cookie_domain + "; expires=Thu, 01-Jan-70 00:00:01 GMT"; } } -function expandSign(foo) { - document.getElementById(foo).firstChild.nodeValue = "[+]"; -} - -function collapseSign(foo) { - document.getElementById(foo).firstChild.nodeValue = "[-]"; -} // flipWithSign() - // Check / Uncheck all Checkboxes +// checkboxes need to have the same name elements_name +// e.g. <input type="checkbox" name="my_ename[]">, will arrive as Array in php. function switchCheckboxes(the_form, elements_name, switcher_name) { - // checkboxes need to have the same name elements_name - // e.g. <input type="checkbox" name="my_ename[]">, will arrive as Array in php. - var elements = document.getElementById(the_form).elements[elements_name]; - + var elements = $(the_form).elements[elements_name]; var elements_cnt = ( typeof (elements.length) != 'undefined') ? elements.length : 0; if (elements_cnt) { @@ -310,12 +311,9 @@ function switchCheckboxes(the_form, elements_name, switcher_name) { } } else { elements.checked = document.forms[the_form].elements[switcher_name].checked; - - ; - } // end if... else - + } return true; -} // switchCheckboxes() +} // function added for use in navigation dropdown @@ -331,21 +329,6 @@ function go(o) { return false; } -// function: confirmTheLink -// desc: pop up a dialog box to confirm the action -// added by: Franck Martin -// date: Oct 12, 2003 -// params: theLink: The link where it is called from -// params: theMsg: The message to display -function confirmTheLink(theLink, theMsg) { - // Confirmation is not required if browser is Opera (crappy js implementation) - if (typeof(window.opera) != 'undefined') { - return true; - } - var is_confirmed = confirm(theMsg); - return is_confirmed; -} - /** \brief: modif a textarea dimension * \elementId = textarea idea * \height = nb pixels to add to the height (the number can be negative) @@ -353,8 +336,8 @@ function confirmTheLink(theLink, theMsg) { * \formid = form id (needs to have 2 input rows and cols **/ function textareasize(elementId, height, width, formId) { - textarea = document.getElementById(elementId); - form = document.getElementById(formId); + textarea = $(elementId); + form = $(formId); if (textarea && height != 0 && textarea.rows + height > 5) { textarea.rows += height; if (form.rows) @@ -369,8 +352,6 @@ function textareasize(elementId, height, width, formId) { // function: popUpWin // desc: span a new window which is XHTML 1.0 Strict compliant and in accordance with WCAG -// added by: xing -// date: 2004-12-27 // params: url: the url for the new window // type: standard or fullscreen // strWidth: width of the window @@ -397,27 +378,9 @@ function popUpWin(url, type, strWidth, strHeight) { newWindow.focus(); } -function toggleBlockDisplay(item) { - if (document.layers) { - current = (document.layers[item].display == 'none') ? 'block' : 'none'; - document.layers[item].display = current; - } else if (document.all) { - current = (document.all[item].style.display == 'none') ? 'block' : 'none'; - document.all[item].style.display = current; - } else if (document.getElementById) { - vista = (document.getElementById(item).style.display == 'none') ? 'block' : 'none'; - document.getElementById(item).style.display = vista; - } -} - -function setBlockDisplay(item,vizFlag) { - current = (vizFlag) ? 'block' : 'none'; - if (document.layers) { - document.layers[item].display = current; - } else if (document.all) { - document.all[item].style.display = current; - } else if (document.getElementById) { - document.getElementById(item).style.display = current; - } +/*----------- functions that might not be in use anymore -----------*/ +function setUserModuleFromCombo(id) { + $('usermoduledata').value = $('usermoduledata').value + + $(id).options[$(id).selectedIndex].value; +//$('usermoduledata').value='das'; } - diff --git a/js/debugger.js b/js/debugger.js new file mode 100644 index 0000000..6c8876e --- /dev/null +++ b/js/debugger.js @@ -0,0 +1,15 @@ +// this will dump the contents of an object into the page +function dump( theObj ) { + var tx="<table width='600'>"; + var props = new Array(); + for( var i in theObj ) { props.push(i); } + props.sort(); + for( var i=0; i<props.length; i++ ) { + var style = 'background:#fff;'; + j = i % 2; + if( j == 0 ) { style = 'background:#ccc;'; } + tx+= "<tr style='"+style+";'><td style='padding:5px;'>"+props[i]+"</td><td>"+theObj[props[i]]+"</td></tr>"; + } + tx+="</table>" + document.write(tx); +} diff --git a/js/prototype.js b/js/prototype.js new file mode 100644 index 0000000..c340893 --- /dev/null +++ b/js/prototype.js @@ -0,0 +1,1017 @@ +/* Prototype JavaScript framework, version 1.3.1 + * (c) 2005 Sam Stephenson <sam@conio.net> + * THIS FILE IS AUTOMATICALLY GENERATED. When sending patches, please diff + * against the source tree, available from the Prototype darcs repository. + * Prototype is freely distributable under the terms of an MIT-style license. + * For details, see the Prototype web site: http://prototype.conio.net/ +/*--------------------------------------------------------------------------*/ + +var Prototype = { + Version: '1.3.1', + emptyFunction: function() {} +} + +var Class = { + create: function() { + return function() { + this.initialize.apply(this, arguments); + } + } +} + +var Abstract = new Object(); + +Object.extend = function(destination, source) { + for (property in source) { + destination[property] = source[property]; + } + return destination; +} + +Object.prototype.extend = function(object) { + return Object.extend.apply(this, [this, object]); +} + +Function.prototype.bind = function(object) { + var __method = this; + return function() { + __method.apply(object, arguments); + } +} + +Function.prototype.bindAsEventListener = function(object) { + var __method = this; + return function(event) { + __method.call(object, event || window.event); + } +} + +Number.prototype.toColorPart = function() { + var digits = this.toString(16); + if (this < 16) return '0' + digits; + return digits; +} + +var Try = { + these: function() { + var returnValue; + + for (var i = 0; i < arguments.length; i++) { + var lambda = arguments[i]; + try { + returnValue = lambda(); + break; + } catch (e) {} + } + + return returnValue; + } +} + +/*--------------------------------------------------------------------------*/ + +var PeriodicalExecuter = Class.create(); +PeriodicalExecuter.prototype = { + initialize: function(callback, frequency) { + this.callback = callback; + this.frequency = frequency; + this.currentlyExecuting = false; + + this.registerCallback(); + }, + + registerCallback: function() { + setInterval(this.onTimerEvent.bind(this), this.frequency * 1000); + }, + + onTimerEvent: function() { + if (!this.currentlyExecuting) { + try { + this.currentlyExecuting = true; + this.callback(); + } finally { + this.currentlyExecuting = false; + } + } + } +} + +/*--------------------------------------------------------------------------*/ + +if (!Array.prototype.push) { + Array.prototype.push = function() { + var startLength = this.length; + for (var i = 0; i < arguments.length; i++) + this[startLength + i] = arguments[i]; + return this.length; + } +} + +if (!Function.prototype.apply) { + // Based on code from http://www.youngpup.net/ + Function.prototype.apply = function(object, parameters) { + var parameterStrings = new Array(); + if (!object) object = window; + if (!parameters) parameters = new Array(); + + for (var i = 0; i < parameters.length; i++) + parameterStrings[i] = 'parameters[' + i + ']'; + + object.__apply__ = this; + var result = eval('object.__apply__(' + + parameterStrings.join(', ') + ')'); + object.__apply__ = null; + + return result; + } +} + +String.prototype.extend({ + stripTags: function() { + return this.replace(/<\/?[^>]+>/gi, ''); + }, + + escapeHTML: function() { + var div = document.createElement('div'); + var text = document.createTextNode(this); + div.appendChild(text); + return div.innerHTML; + }, + + unescapeHTML: function() { + var div = document.createElement('div'); + div.innerHTML = this.stripTags(); + return div.childNodes[0].nodeValue; + } +}); + +var Ajax = { + getTransport: function() { + return Try.these( + function() {return new ActiveXObject('Msxml2.XMLHTTP')}, + function() {return new ActiveXObject('Microsoft.XMLHTTP')}, + function() {return new XMLHttpRequest()} + ) || false; + } +} + +Ajax.Base = function() {}; +Ajax.Base.prototype = { + setOptions: function(options) { + this.options = { + method: 'post', + asynchronous: true, + parameters: '' + }.extend(options || {}); + }, + + responseIsSuccess: function() { + return this.transport.status == undefined + || this.transport.status == 0 + || (this.transport.status >= 200 && this.transport.status < 300); + }, + + responseIsFailure: function() { + return !this.responseIsSuccess(); + } +} + +Ajax.Request = Class.create(); +Ajax.Request.Events = + ['Uninitialized', 'Loading', 'Loaded', 'Interactive', 'Complete']; + +Ajax.Request.prototype = (new Ajax.Base()).extend({ + initialize: function(url, options) { + this.transport = Ajax.getTransport(); + this.setOptions(options); + this.request(url); + }, + + request: function(url) { + var parameters = this.options.parameters || ''; + if (parameters.length > 0) parameters += '&_='; + + try { + if (this.options.method == 'get') + url += '?' + parameters; + + this.transport.open(this.options.method, url, + this.options.asynchronous); + + if (this.options.asynchronous) { + this.transport.onreadystatechange = this.onStateChange.bind(this); + setTimeout((function() {this.respondToReadyState(1)}).bind(this), 10); + } + + this.setRequestHeaders(); + + var body = this.options.postBody ? this.options.postBody : parameters; + this.transport.send(this.options.method == 'post' ? body : null); + + } catch (e) { + } + }, + + setRequestHeaders: function() { + var requestHeaders = + ['X-Requested-With', 'XMLHttpRequest', + 'X-Prototype-Version', Prototype.Version]; + + if (this.options.method == 'post') { + requestHeaders.push('Content-type', + 'application/x-www-form-urlencoded'); + + /* Force "Connection: close" for Mozilla browsers to work around + * a bug where XMLHttpReqeuest sends an incorrect Content-length + * header. See Mozilla Bugzilla #246651. + */ + if (this.transport.overrideMimeType) + requestHeaders.push('Connection', 'close'); + } + + if (this.options.requestHeaders) + requestHeaders.push.apply(requestHeaders, this.options.requestHeaders); + + for (var i = 0; i < requestHeaders.length; i += 2) + this.transport.setRequestHeader(requestHeaders[i], requestHeaders[i+1]); + }, + + onStateChange: function() { + var readyState = this.transport.readyState; + if (readyState != 1) + this.respondToReadyState(this.transport.readyState); + }, + + respondToReadyState: function(readyState) { + var event = Ajax.Request.Events[readyState]; + + if (event == 'Complete') + (this.options['on' + this.transport.status] + || this.options['on' + (this.responseIsSuccess() ? 'Success' : 'Failure')] + || Prototype.emptyFunction)(this.transport); + + (this.options['on' + event] || Prototype.emptyFunction)(this.transport); + + /* Avoid memory leak in MSIE: clean up the oncomplete event handler */ + if (event == 'Complete') + this.transport.onreadystatechange = Prototype.emptyFunction; + } +}); + +Ajax.Updater = Class.create(); +Ajax.Updater.ScriptFragment = '(?:<script.*?>)((\n|.)*?)(?:<\/script>)'; + +Ajax.Updater.prototype.extend(Ajax.Request.prototype).extend({ + initialize: function(container, url, options) { + this.containers = { + success: container.success ? $(container.success) : $(container), + failure: container.failure ? $(container.failure) : + (container.success ? null : $(container)) + } + + this.transport = Ajax.getTransport(); + this.setOptions(options); + + var onComplete = this.options.onComplete || Prototype.emptyFunction; + this.options.onComplete = (function() { + this.updateContent(); + onComplete(this.transport); + }).bind(this); + + this.request(url); + }, + + updateContent: function() { + var receiver = this.responseIsSuccess() ? + this.containers.success : this.containers.failure; + + var match = new RegExp(Ajax.Updater.ScriptFragment, 'img'); + var response = this.transport.responseText.replace(match, ''); + var scripts = this.transport.responseText.match(match); + + if (receiver) { + if (this.options.insertion) { + new this.options.insertion(receiver, response); + } else { + receiver.innerHTML = response; + } + } + + if (this.responseIsSuccess()) { + if (this.onComplete) + setTimeout((function() {this.onComplete( + this.transport)}).bind(this), 10); + } + + if (this.options.evalScripts && scripts) { + match = new RegExp(Ajax.Updater.ScriptFragment, 'im'); + setTimeout((function() { + for (var i = 0; i < scripts.length; i++) + eval(scripts[i].match(match)[1]); + }).bind(this), 10); + } + } +}); + +Ajax.PeriodicalUpdater = Class.create(); +Ajax.PeriodicalUpdater.prototype = (new Ajax.Base()).extend({ + initialize: function(container, url, options) { + this.setOptions(options); + this.onComplete = this.options.onComplete; + + this.frequency = (this.options.frequency || 2); + this.decay = 1; + + this.updater = {}; + this.container = container; + this.url = url; + + this.start(); + }, + + start: function() { + this.options.onComplete = this.updateComplete.bind(this); + this.onTimerEvent(); + }, + + stop: function() { + this.updater.onComplete = undefined; + clearTimeout(this.timer); + (this.onComplete || Ajax.emptyFunction).apply(this, arguments); + }, + + updateComplete: function(request) { + if (this.options.decay) { + this.decay = (request.responseText == this.lastText ? + this.decay * this.options.decay : 1); + + this.lastText = request.responseText; + } + this.timer = setTimeout(this.onTimerEvent.bind(this), + this.decay * this.frequency * 1000); + }, + + onTimerEvent: function() { + this.updater = new Ajax.Updater(this.container, this.url, this.options); + } +}); + +document.getElementsByClassName = function(className) { + var children = document.getElementsByTagName('*') || document.all; + var elements = new Array(); + + for (var i = 0; i < children.length; i++) { + var child = children[i]; + var classNames = child.className.split(' '); + for (var j = 0; j < classNames.length; j++) { + if (classNames[j] == className) { + elements.push(child); + break; + } + } + } + + return elements; +} + +/*--------------------------------------------------------------------------*/ + +if (!window.Element) { + var Element = new Object(); +} + +Object.extend(Element, { + toggle: function() { + for (var i = 0; i < arguments.length; i++) { + var element = $(arguments[i]); + element.style.display = + (element.style.display == 'none' ? '' : 'none'); + } + }, + + hide: function() { + for (var i = 0; i < arguments.length; i++) { + var element = $(arguments[i]); + element.style.display = 'none'; + } + }, + + show: function() { + for (var i = 0; i < arguments.length; i++) { + var element = $(arguments[i]); + element.style.display = ''; + } + }, + + remove: function(element) { + element = $(element); + element.parentNode.removeChild(element); + }, + + getHeight: function(element) { + element = $(element); + return element.offsetHeight; + }, + + hasClassName: function(element, className) { + element = $(element); + if (!element) + return; + var a = element.className.split(' '); + for (var i = 0; i < a.length; i++) { + if (a[i] == className) + return true; + } + return false; + }, + + addClassName: function(element, className) { + element = $(element); + Element.removeClassName(element, className); + element.className += ' ' + className; + }, + + removeClassName: function(element, className) { + element = $(element); + if (!element) + return; + var newClassName = ''; + var a = element.className.split(' '); + for (var i = 0; i < a.length; i++) { + if (a[i] != className) { + if (i > 0) + newClassName += ' '; + newClassName += a[i]; + } + } + element.className = newClassName; + }, + + // removes whitespace-only text node children + cleanWhitespace: function(element) { + var element = $(element); + for (var i = 0; i < element.childNodes.length; i++) { + var node = element.childNodes[i]; + if (node.nodeType == 3 && !/\S/.test(node.nodeValue)) + Element.remove(node); + } + } +}); + +var Toggle = new Object(); +Toggle.display = Element.toggle; + +/*--------------------------------------------------------------------------*/ + +Abstract.Insertion = function(adjacency) { + this.adjacency = adjacency; +} + +Abstract.Insertion.prototype = { + initialize: function(element, content) { + this.element = $(element); + this.content = content; + + if (this.adjacency && this.element.insertAdjacentHTML) { + this.element.insertAdjacentHTML(this.adjacency, this.content); + } else { + this.range = this.element.ownerDocument.createRange(); + if (this.initializeRange) this.initializeRange(); + this.fragment = this.range.createContextualFragment(this.content); + this.insertContent(); + } + } +} + +var Insertion = new Object(); + +Insertion.Before = Class.create(); +Insertion.Before.prototype = (new Abstract.Insertion('beforeBegin')).extend({ + initializeRange: function() { + this.range.setStartBefore(this.element); + }, + + insertContent: function() { + this.element.parentNode.insertBefore(this.fragment, this.element); + } +}); + +Insertion.Top = Class.create(); +Insertion.Top.prototype = (new Abstract.Insertion('afterBegin')).extend({ + initializeRange: function() { + this.range.selectNodeContents(this.element); + this.range.collapse(true); + }, + + insertContent: function() { + this.element.insertBefore(this.fragment, this.element.firstChild); + } +}); + +Insertion.Bottom = Class.create(); +Insertion.Bottom.prototype = (new Abstract.Insertion('beforeEnd')).extend({ + initializeRange: function() { + this.range.selectNodeContents(this.element); + this.range.collapse(this.element); + }, + + insertContent: function() { + this.element.appendChild(this.fragment); + } +}); + +Insertion.After = Class.create(); +Insertion.After.prototype = (new Abstract.Insertion('afterEnd')).extend({ + initializeRange: function() { + this.range.setStartAfter(this.element); + }, + + insertContent: function() { + this.element.parentNode.insertBefore(this.fragment, + this.element.nextSibling); + } +}); + +var Field = { + clear: function() { + for (var i = 0; i < arguments.length; i++) + $(arguments[i]).value = ''; + }, + + focus: function(element) { + $(element).focus(); + }, + + present: function() { + for (var i = 0; i < arguments.length; i++) + if ($(arguments[i]).value == '') return false; + return true; + }, + + select: function(element) { + $(element).select(); + }, + + activate: function(element) { + $(element).focus(); + $(element).select(); + } +} + +/*--------------------------------------------------------------------------*/ + +var Form = { + serialize: function(form) { + var elements = Form.getElements($(form)); + var queryComponents = new Array(); + + for (var i = 0; i < elements.length; i++) { + var queryComponent = Form.Element.serialize(elements[i]); + if (queryComponent) + queryComponents.push(queryComponent); + } + + return queryComponents.join('&'); + }, + + getElements: function(form) { + var form = $(form); + var elements = new Array(); + + for (tagName in Form.Element.Serializers) { + var tagElements = form.getElementsByTagName(tagName); + for (var j = 0; j < tagElements.length; j++) + elements.push(tagElements[j]); + } + return elements; + }, + + getInputs: function(form, typeName, name) { + var form = $(form); + var inputs = form.getElementsByTagName('input'); + + if (!typeName && !name) + return inputs; + + var matchingInputs = new Array(); + for (var i = 0; i < inputs.length; i++) { + var input = inputs[i]; + if ((typeName && input.type != typeName) || + (name && input.name != name)) + continue; + matchingInputs.push(input); + } + + return matchingInputs; + }, + + disable: function(form) { + var elements = Form.getElements(form); + for (var i = 0; i < elements.length; i++) { + var element = elements[i]; + element.blur(); + element.disabled = 'true'; + } + }, + + enable: function(form) { + var elements = Form.getElements(form); + for (var i = 0; i < elements.length; i++) { + var element = elements[i]; + element.disabled = ''; + } + }, + + focusFirstElement: function(form) { + var form = $(form); + var elements = Form.getElements(form); + for (var i = 0; i < elements.length; i++) { + var element = elements[i]; + if (element.type != 'hidden' && !element.disabled) { + Field.activate(element); + break; + } + } + }, + + reset: function(form) { + $(form).reset(); + } +} + +Form.Element = { + serialize: function(element) { + var element = $(element); + var method = element.tagName.toLowerCase(); + var parameter = Form.Element.Serializers[method](element); + + if (parameter) + return encodeURIComponent(parameter[0]) + '=' + + encodeURIComponent(parameter[1]); + }, + + getValue: function(element) { + var element = $(element); + var method = element.tagName.toLowerCase(); + var parameter = Form.Element.Serializers[method](element); + + if (parameter) + return parameter[1]; + } +} + +Form.Element.Serializers = { + input: function(element) { + switch (element.type.toLowerCase()) { + case 'submit': + case 'hidden': + case 'password': + case 'text': + return Form.Element.Serializers.textarea(element); + case 'checkbox': + case 'radio': + return Form.Element.Serializers.inputSelector(element); + } + return false; + }, + + inputSelector: function(element) { + if (element.checked) + return [element.name, element.value]; + }, + + textarea: function(element) { + return [element.name, element.value]; + }, + + select: function(element) { + var value = ''; + if (element.type == 'select-one') { + var index = element.selectedIndex; + if (index >= 0) + value = element.options[index].value || element.options[index].text; + } else { + value = new Array(); + for (var i = 0; i < element.length; i++) { + var opt = element.options[i]; + if (opt.selected) + value.push(opt.value || opt.text); + } + } + return [element.name, value]; + } +} + +/*--------------------------------------------------------------------------*/ + +var $F = Form.Element.getValue; + +/*--------------------------------------------------------------------------*/ + +Abstract.TimedObserver = function() {} +Abstract.TimedObserver.prototype = { + initialize: function(element, frequency, callback) { + this.frequency = frequency; + this.element = $(element); + this.callback = callback; + + this.lastValue = this.getValue(); + this.registerCallback(); + }, + + registerCallback: function() { + setInterval(this.onTimerEvent.bind(this), this.frequency * 1000); + }, + + onTimerEvent: function() { + var value = this.getValue(); + if (this.lastValue != value) { + this.callback(this.element, value); + this.lastValue = value; + } + } +} + +Form.Element.Observer = Class.create(); +Form.Element.Observer.prototype = (new Abstract.TimedObserver()).extend({ + getValue: function() { + return Form.Element.getValue(this.element); + } +}); + +Form.Observer = Class.create(); +Form.Observer.prototype = (new Abstract.TimedObserver()).extend({ + getValue: function() { + return Form.serialize(this.element); + } +}); + +/*--------------------------------------------------------------------------*/ + +Abstract.EventObserver = function() {} +Abstract.EventObserver.prototype = { + initialize: function(element, callback) { + this.element = $(element); + this.callback = callback; + + this.lastValue = this.getValue(); + if (this.element.tagName.toLowerCase() == 'form') + this.registerFormCallbacks(); + else + this.registerCallback(this.element); + }, + + onElementEvent: function() { + var value = this.getValue(); + if (this.lastValue != value) { + this.callback(this.element, value); + this.lastValue = value; + } + }, + + registerFormCallbacks: function() { + var elements = Form.getElements(this.element); + for (var i = 0; i < elements.length; i++) + this.registerCallback(elements[i]); + }, + + registerCallback: function(element) { + if (element.type) { + switch (element.type.toLowerCase()) { + case 'checkbox': + case 'radio': + element.target = this; + element.prev_onclick = element.onclick || Prototype.emptyFunction; + element.onclick = function() { + this.prev_onclick(); + this.target.onElementEvent(); + } + break; + case 'password': + case 'text': + case 'textarea': + case 'select-one': + case 'select-multiple': + element.target = this; + element.prev_onchange = element.onchange || Prototype.emptyFunction; + element.onchange = function() { + this.prev_onchange(); + this.target.onElementEvent(); + } + break; + } + } + } +} + +Form.Element.EventObserver = Class.create(); +Form.Element.EventObserver.prototype = (new Abstract.EventObserver()).extend({ + getValue: function() { + return Form.Element.getValue(this.element); + } +}); + +Form.EventObserver = Class.create(); +Form.EventObserver.prototype = (new Abstract.EventObserver()).extend({ + getValue: function() { + return Form.serialize(this.element); + } +}); + + +if (!window.Event) { + var Event = new Object(); +} + +Object.extend(Event, { + KEY_BACKSPACE: 8, + KEY_TAB: 9, + KEY_RETURN: 13, + KEY_ESC: 27, + KEY_LEFT: 37, + KEY_UP: 38, + KEY_RIGHT: 39, + KEY_DOWN: 40, + KEY_DELETE: 46, + + element: function(event) { + return event.target || event.srcElement; + }, + + isLeftClick: function(event) { + return (((event.which) && (event.which == 1)) || + ((event.button) && (event.button == 1))); + }, + + pointerX: function(event) { + return event.pageX || (event.clientX + + (document.documentElement.scrollLeft || document.body.scrollLeft)); + }, + + pointerY: function(event) { + return event.pageY || (event.clientY + + (document.documentElement.scrollTop || document.body.scrollTop)); + }, + + stop: function(event) { + if (event.preventDefault) { + event.preventDefault(); + event.stopPropagation(); + } else { + event.returnValue = false; + } + }, + + // find the first node with the given tagName, starting from the + // node the event was triggered on; traverses the DOM upwards + findElement: function(event, tagName) { + var element = Event.element(event); + while (element.parentNode && (!element.tagName || + (element.tagName.toUpperCase() != tagName.toUpperCase()))) + element = element.parentNode; + return element; + }, + + observers: false, + + _observeAndCache: function(element, name, observer, useCapture) { + if (!this.observers) this.observers = []; + if (element.addEventListener) { + this.observers.push([element, name, observer, useCapture]); + element.addEventListener(name, observer, useCapture); + } else if (element.attachEvent) { + this.observers.push([element, name, observer, useCapture]); + element.attachEvent('on' + name, observer); + } + }, + + unloadCache: function() { + if (!Event.observers) return; + for (var i = 0; i < Event.observers.length; i++) { + Event.stopObserving.apply(this, Event.observers[i]); + Event.observers[i][0] = null; + } + Event.observers = false; + }, + + observe: function(element, name, observer, useCapture) { + var element = $(element); + useCapture = useCapture || false; + + if (name == 'keypress' && + ((navigator.appVersion.indexOf('AppleWebKit') > 0) + || element.attachEvent)) + name = 'keydown'; + + this._observeAndCache(element, name, observer, useCapture); + }, + + stopObserving: function(element, name, observer, useCapture) { + var element = $(element); + useCapture = useCapture || false; + + if (name == 'keypress' && + ((navigator.appVersion.indexOf('AppleWebKit') > 0) + || element.detachEvent)) + name = 'keydown'; + + if (element.removeEventListener) { + element.removeEventListener(name, observer, useCapture); + } else if (element.detachEvent) { + element.detachEvent('on' + name, observer); + } + } +}); + +/* prevent memory leaks in IE */ +Event.observe(window, 'unload', Event.unloadCache, false); + +var Position = { + + // set to true if needed, warning: firefox performance problems + // NOT neeeded for page scrolling, only if draggable contained in + // scrollable elements + includeScrollOffsets: false, + + // must be called before calling withinIncludingScrolloffset, every time the + // page is scrolled + prepare: function() { + this.deltaX = window.pageXOffset + || document.documentElement.scrollLeft + || document.body.scrollLeft + || 0; + this.deltaY = window.pageYOffset + || document.documentElement.scrollTop + || document.body.scrollTop + || 0; + }, + + realOffset: function(element) { + var valueT = 0, valueL = 0; + do { + valueT += element.scrollTop || 0; + valueL += element.scrollLeft || 0; + element = element.parentNode; + } while (element); + return [valueL, valueT]; + }, + + cumulativeOffset: function(element) { + var valueT = 0, valueL = 0; + do { + valueT += element.offsetTop || 0; + valueL += element.offsetLeft || 0; + element = element.offsetParent; + } while (element); + return [valueL, valueT]; + }, + + // caches x/y coordinate pair to use with overlap + within: function(element, x, y) { + if (this.includeScrollOffsets) + return this.withinIncludingScrolloffsets(element, x, y); + this.xcomp = x; + this.ycomp = y; + this.offset = this.cumulativeOffset(element); + + return (y >= this.offset[1] && + y < this.offset[1] + element.offsetHeight && + x >= this.offset[0] && + x < this.offset[0] + element.offsetWidth); + }, + + withinIncludingScrolloffsets: function(element, x, y) { + var offsetcache = this.realOffset(element); + + this.xcomp = x + offsetcache[0] - this.deltaX; + this.ycomp = y + offsetcache[1] - this.deltaY; + this.offset = this.cumulativeOffset(element); + + return (this.ycomp >= this.offset[1] && + this.ycomp < this.offset[1] + element.offsetHeight && + this.xcomp >= this.offset[0] && + this.xcomp < this.offset[0] + element.offsetWidth); + }, + + // within must be called directly before + overlap: function(mode, element) { + if (!mode) return 0; + if (mode == 'vertical') + return ((this.offset[1] + element.offsetHeight) - this.ycomp) / + element.offsetHeight; + if (mode == 'horizontal') + return ((this.offset[0] + element.offsetWidth) - this.xcomp) / + element.offsetWidth; + }, + + clone: function(source, target) { + source = $(source); + target = $(target); + target.style.position = 'absolute'; + var offsets = this.cumulativeOffset(source); + target.style.top = offsets[1] + 'px'; + target.style.left = offsets[0] + 'px'; + target.style.width = source.offsetWidth + 'px'; + target.style.height = source.offsetHeight + 'px'; + } +} diff --git a/templates/admin_content_templates.tpl b/templates/admin_content_templates.tpl index ebc99ac..ac3ac49 100644 --- a/templates/admin_content_templates.tpl +++ b/templates/admin_content_templates.tpl @@ -73,11 +73,11 @@ <td>{$channels[user].created|bit_short_datetime}</td>
<td>
{section name=ix loop=$channels[user].sections}
- {$channels[user].sections[ix]} <a href="{$smarty.const.THEMES_PKG_URL}admin/admin_content_templates.php?removesection={$channels[user].sections[ix]}&rtemplate_id={$channels[user].template_id}" onclick="return confirmTheLink(this,'{tr}Are you sure you want to delete this template?{/tr}')" title="{tr}Click here to delete this template{/tr}">{biticon ipackage=liberty iname="delete_small" iexplain="remove"}</a> |
+ {$channels[user].sections[ix]} <a href="{$smarty.const.THEMES_PKG_URL}admin/admin_content_templates.php?removesection={$channels[user].sections[ix]}&rtemplate_id={$channels[user].template_id}" onclick="return confirm('{tr}Are you sure you want to delete this template?{/tr}')" title="{tr}Click here to delete this template{/tr}">{biticon ipackage=liberty iname="delete_small" iexplain="remove"}</a> |
{/section}
</td>
<td>
- <a href="{$smarty.const.THEMES_PKG_URL}admin/admin_content_templates.php?offset={$offset}&sort_mode={$sort_mode}&remove={$channels[user].template_id}" onclick="return confirmTheLink(this,'{tr}Are you sure you want to delete this template?{/tr}')" title="{tr}Click here to delete this template{/tr}">{biticon ipackage=liberty iname="delete" iexplain="remove"}</a>
+ <a href="{$smarty.const.THEMES_PKG_URL}admin/admin_content_templates.php?offset={$offset}&sort_mode={$sort_mode}&remove={$channels[user].template_id}" onclick="return confirm('{tr}Are you sure you want to delete this template?{/tr}')" title="{tr}Click here to delete this template{/tr}">{biticon ipackage=liberty iname="delete" iexplain="remove"}</a>
<a href="{$smarty.const.THEMES_PKG_URL}admin/admin_content_templates.php?offset={$offset}&sort_mode={$sort_mode}&template_id={$channels[user].template_id}"><img class="icon" alt="{tr}Edit{/tr}" src="{$smarty.const.LIBERTY_PKG_URL}icons/edit.gif" /></a>
</td>
</tr>
@@ -87,11 +87,11 @@ <td>{$channels[user].created|bit_short_datetime}</td>
<td>
{section name=ix loop=$channels[user].sections}
- {$channels[user].sections[ix]} <a href="{$smarty.const.THEMES_PKG_URL}admin/admin_content_templates.php?removesection={$channels[user].sections[ix]}&rtemplate_id={$channels[user].template_id}" onclick="return confirmTheLink(this,'{tr}Are you sure you want to delete this template?{/tr}')" title="{tr}Click here to delete this template{/tr}">{biticon ipackage=liberty iname="delete_small" iexplain="remove"}</a> |
+ {$channels[user].sections[ix]} <a href="{$smarty.const.THEMES_PKG_URL}admin/admin_content_templates.php?removesection={$channels[user].sections[ix]}&rtemplate_id={$channels[user].template_id}" onclick="return confirm('{tr}Are you sure you want to delete this template?{/tr}')" title="{tr}Click here to delete this template{/tr}">{biticon ipackage=liberty iname="delete_small" iexplain="remove"}</a> |
{/section}
</td>
<td>
- <a href="{$smarty.const.THEMES_PKG_URL}admin/admin_content_templates.php?offset={$offset}&sort_mode={$sort_mode}&remove={$channels[user].template_id}" onclick="return confirmTheLink(this,'{tr}Are you sure you want to delete this template?{/tr}')" title="{tr}Click here to delete this template{/tr}">{biticon ipackage=liberty iname="delete" iexplain="remove"}</a>
+ <a href="{$smarty.const.THEMES_PKG_URL}admin/admin_content_templates.php?offset={$offset}&sort_mode={$sort_mode}&remove={$channels[user].template_id}" onclick="return confirm('{tr}Are you sure you want to delete this template?{/tr}')" title="{tr}Click here to delete this template{/tr}">{biticon ipackage=liberty iname="delete" iexplain="remove"}</a>
<a href="{$smarty.const.THEMES_PKG_URL}admin/admin_content_templates.php?offset={$offset}&sort_mode={$sort_mode}&template_id={$channels[user].template_id}">{biticon ipackage=liberty iname="edit" iexplain="edit"}</a>
</td>
</tr>
diff --git a/templates/admin_themes_manager.tpl b/templates/admin_themes_manager.tpl index 522302c..19b7551 100644 --- a/templates/admin_themes_manager.tpl +++ b/templates/admin_themes_manager.tpl @@ -32,7 +32,7 @@ <div class="clear"></div> </li> {/foreach} - <ul> + </ul> {/legend} {/jstab} |
