diff options
Diffstat (limited to 'rt/html/NoAuth/js/util.js')
-rw-r--r-- | rt/html/NoAuth/js/util.js | 250 |
1 files changed, 250 insertions, 0 deletions
diff --git a/rt/html/NoAuth/js/util.js b/rt/html/NoAuth/js/util.js new file mode 100644 index 000000000..0de071ad3 --- /dev/null +++ b/rt/html/NoAuth/js/util.js @@ -0,0 +1,250 @@ +%# BEGIN BPS TAGGED BLOCK {{{ +%# +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> +%# +%# (Except where explicitly superseded by other copyright notices) +%# +%# +%# LICENSE: +%# +%# This work is made available to you under the terms of Version 2 of +%# the GNU General Public License. A copy of that license should have +%# been provided with this software, but in any event can be snarfed +%# from www.gnu.org. +%# +%# This work is distributed in the hope that it will be useful, but +%# WITHOUT ANY WARRANTY; without even the implied warranty of +%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +%# General Public License for more details. +%# +%# You should have received a copy of the GNU General Public License +%# along with this program; if not, write to the Free Software +%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +%# 02110-1301 or visit their web page on the internet at +%# http://www.gnu.org/copyleft/gpl.html. +%# +%# +%# CONTRIBUTION SUBMISSION POLICY: +%# +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) +%# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. +%# +%# END BPS TAGGED BLOCK }}} +/* $(...) + Returns DOM node or array of nodes (if more then one argument passed). + If argument is node object allready then do nothing. + // Stolen from Prototype +*/ +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; +} + +/* Visibility */ + +function show(id) { delClass( id, 'hidden' ) } +function hide(id) { addClass( id, 'hidden' ) } + +function hideshow(id) { return toggleVisibility( id ) } +function toggleVisibility(id) { + var e = $(id); + + if ( e.className.match( /\bhidden\b/ ) ) + show(e); + else + hide(e); + + return false; +} + +function setVisibility(id, visibility) { + if ( visibility ) show(id); + else hide(id); +} + +function switchVisibility(id1, id2) { + // Show both and then hide the one we want + show(id1); + show(id2); + hide(id2); + return false; +} + +/* Classes */ + +function addClass(id, value) { + var e = $(id); + if ( e.className.match( new RegExp('\b'+ value +'\b') ) ) + return; + e.className += e.className? ' '+value : value; +} + +function delClass(id, value) { + var e = $(id); + e.className = e.className.replace( new RegExp('\\s?\\b'+ value +'\\b', 'g'), '' ); +} + +/* Rollups */ + +function rollup(id) { + var e = $(id); + var e2 = e.parentNode; + + if (e.className.match(/\bhidden\b/)) { + set_rollup_state(e,e2,'shown'); + createCookie(id,1,365); + } + else { + set_rollup_state(e,e2,'hidden'); + createCookie(id,0,365); + } + return false; +} + +function set_rollup_state(e,e2,state) { + if (e && e2) { + if (state == 'shown') { + show(e); + delClass( e2, 'rolled-up' ); + } + else if (state == 'hidden') { + hide(e); + addClass( e2, 'rolled-up' ); + } + } +} + + +/* onload handlers */ + +var onLoadStack = new Array(); +var onLoadLastStack = new Array(); +var onLoadExecuted = 0; + +function onLoadHook(commandStr) { + if(typeof(commandStr) == "string") { + onLoadStack[ onLoadStack.length ] = commandStr; + return true; + } + return false; +} + +// some things *really* need to be done after everything else +function onLoadLastHook(commandStr) { + if(typeof(commandStr) == "string"){ + onLoadLastStack[onLoadLastStack.length] = commandStr; + return true; + } + return false; +} + +function doOnLoadHooks() { + if(onLoadExecuted) return; + + var i; + for ( i in onLoadStack ) { + eval( onLoadStack[i] ); + } + for ( i in onLoadLastStack ) { + eval( onLoadLastStack[i] ); + } + onLoadExecuted = 1; +} + +window.onload = doOnLoadHooks; + +/* calendar functions */ + +function openCalWindow(field) { + var objWindow = window.open('<%$RT::WebPath%>/Helpers/CalPopup.html?field='+field, + 'RT_Calendar', + 'height=235,width=285,scrollbars=1'); + objWindow.focus(); +} + +function createCalendarLink(input) { + var e = $(input); + if (e) { + var link = document.createElement('a'); + link.setAttribute('href', '#'); + + clickevent = function clickevent(e) { openCalWindow(input); return false; }; + if (! addEvent(link, "click", clickevent)) { + return false; + } + + var text = document.createTextNode('<% loc("Choose a date") %>'); + link.appendChild(text); + + var space = document.createTextNode(' '); + + e.parentNode.insertBefore(link, e.nextSibling); + e.parentNode.insertBefore(space, e.nextSibling); + + return true; + } + return false; +} + +/* other utils */ + +function focusElementById(id) { + var e = $(id); + if (e) e.focus(); +} + +function updateParentField(field, value) { + if (window.opener) { + window.opener.$(field).value = value; + window.close(); + } +} + +function addEvent(obj, sType, fn) { + if (obj.addEventListener) { + obj.addEventListener(sType, fn, false); + } else if (obj.attachEvent) { + var r = obj.attachEvent("on"+sType, fn); + } else { + return false; + } + return true; +} + +function setCheckbox(form, name, val) { + var myfield = form.getElementsByTagName('input'); + for ( var i = 0; i < myfield.length; i++ ) { + if ( name && myfield[i].name != name ) continue; + if ( myfield[i].type != 'checkbox' ) continue; + + myfield[i].checked = val; + } +} + |