web/js/code.js (331 lines of code) (raw):

/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ var toggledRows = new Array(); var toggledCols = new Array(); var mouseX = 0; var mouseY = 0; var passvar = 0; var browser = ""; function setBrowser() { browser = navigator.appName; if(navigator.appName == 'Netscape') { var regex = new RegExp('Safari'); if(navigator.appVersion.match(regex)) { browser = 'Safari'; } } else if(navigator.appName == 'Microsoft Internet Explorer') { browser = 'IE'; } } setBrowser(); function init() { if(typeof(dojo) == 'undefined') { setTimeout(init, 250); return; } if(typeof(tzoffset) != undefined && tzoffset == 'unset') { var now = new Date(); var data = {mode: 'AJsetTZoffset', offset: now.getTimezoneOffset()}; RPCwrapper(data, null, 0); } } function _(str) { if(typeof usenls == 'undefined' || typeof nlsmessages == 'undefined' || ! (str in nlsmessages) || nlsmessages[str] == '') return str; return nlsmessages[str]; } Date.prototype.getDayName = function() { return [_('Sunday'), _('Monday'), _('Tuesday'), _('Wednesday'), _('Thursday'), _('Friday'), _('Saturday')][this.getDay()]; } function testJS() { if(document.getElementById('testjavascript')) document.getElementById('testjavascript').value = '1'; } function RPCwrapper(data, CB, dojson, timeout) { if(typeof timeout === 'undefined') timeout = 15000; if(dojson) { return dojo.xhrPost({ url: 'index.php', load: function(data, ioArgs) {returnCheck(CB, data, ioArgs);}, //load: CB, //handleAs: "json", error: errorHandler, content: data, timeout: timeout }); } else { return dojo.xhrPost({ url: 'index.php', load: CB, error: errorHandler, content: data, timeout: timeout }); } } function returnCheck(CB, data, ioArgs) { try { var json = dojo.fromJson(data); } catch(error) { if((! data.match(/-- continuationserror --/)) && (data.match(/<html/) || ! error.message.match(/syntax error/))) { alert(_('Error encountered:') + " " + _('Please try again later')); return; } else if(data.match(/-- continuationserror --/)) { var i = data.indexOf('<div id="continuationserrormessage'); i = data.indexOf('>', i) + 2; var j = data.indexOf('</div>', i); data = data.slice(i, j); } var div = document.createElement('div'); div.innerHTML = data; var msg = div.textContent || div.innerText || ""; alert(_('Error encountered:') + '\n\n' + msg); return; } CB(json, ioArgs); } Array.prototype.inArray = function(data) { for(var i = 0; i < this.length; i++) { if(this[i] === data) { return true; } } return false; } Array.prototype.search = function(data) { for (var i = 0; i < this.length; i++) { if(this[i] === data) { return i; } } return false; } function generalCB(data, ioArgs) { unsetLoading(); var regex = new RegExp('^<!DOCTYPE html'); if(data.match(regex)) { var mesg = 'A minor error has occurred. It is probably safe to ' + 'ignore. However, if you keep getting this message and ' + 'are unable to use VCL, you may contact the ' + 'administrators of this site for further assistance.'; alert(mesg); var d = {mode: 'errorrpt', data: data}; RPCwrapper(d, function(data, ioArgs) {}); return; } eval(data); } var errorHandler = function(error, ioArgs) { /*if(error.name == 'cancel') return; alert('AJAX Error: ' + error.message + '\nLine ' + error.lineNumber + ' in ' + error.fileName);*/ //console.log(error); } function errorHandler(data, ioArgs) { alert('Error encountered while processing AJAX callback'); } function AJdojoCreate(objid) { if(dojo.byId(objid)) { dojo.parser.parse(document.getElementById(objid)); } } function setLoading() { document.body.style.cursor = 'wait'; if(dijit.byId('workingDialog')) dijit.byId('workingDialog').show(); } function unsetLoading() { document.body.style.cursor = 'default'; if(dijit.byId('workingDialog')) dijit.byId('workingDialog').hide(); } function updateMouseXY(e) { if(e) { mouseX = e.pageX; mouseY = e.pageY; } else if(event) { mouseX = event.clientX + document.documentElement.scrollLeft; mouseY = event.clientY + document.documentElement.scrollTop; } } function findPosX(obj) { var curleft = 0; if(obj.offsetParent) while(1) { curleft += obj.offsetLeft; if(!obj.offsetParent) break; obj = obj.offsetParent; } else if(obj.x) curleft += obj.x; return curleft; } function findPosY(obj) { var curtop = 0; if(obj.offsetParent) while(1) { curtop += obj.offsetTop; if(!obj.offsetParent) break; obj = obj.offsetParent; } else if(obj.y) curtop += obj.y; return curtop; } function showScriptOnly() { if(!document.styleSheets) return; var cssobj = new Array(); if(document.styleSheets[0].cssRules) // Standards Compliant cssobj = document.styleSheets[0].cssRules; else cssobj = document.styleSheets[0].rules; // IE var stop = 0; for(var i = 0; i < cssobj.length; i++) { if(cssobj[i].selectorText) { if(cssobj[i].selectorText.toLowerCase() == '.scriptonly') { //cssobj[i].style.display = "inline"; cssobj[i].style.cssText = "display: inline;"; stop++; } if(cssobj[i].selectorText.toLowerCase() == '.scriptoff') { cssobj[i].style.cssText = "display: none;"; stop++; } if(stop > 1) return; } } } function showGroupInfo(data, ioArgs) { var members = data.items.members; var mx = data.items.x; var my = data.items.y; var text = ""; for(var i = 0; i < members.length; i++) { text = text + members[i] + '<br>'; } var obj = document.getElementById('content'); var x = findPosX(obj); var y = findPosY(obj); obj = document.getElementById('listitems'); obj.innerHTML = text; obj.style.left = mx - x - obj.clientWidth; obj.style.top = my - y - obj.clientWidth; obj.style.zIndex = 10; } function checkNewLocalPassword() { var pwd1 = document.getElementById('newpassword'); var pwd2 = document.getElementById('confirmpassword'); var stat = document.getElementById('pwdstatus'); if(pwd1.value == "" && pwd2.value == "") { stat.innerHTML = ''; } else if(pwd1.value == pwd2.value) { stat.innerHTML = '<font color="#008000">' + _('match') + '</font>'; } else { stat.innerHTML = '<font color="red">' + _('no match') + '</font>'; } } function sortSelect(selobj) { var values = new Array(); var texts = new Array(); for(var i = 0; i < selobj.options.length; i++) { values[selobj.options[i].text] = selobj.options[i].value; texts[i] = selobj.options[i].text; } texts.sort(ignoreCaseSort); for(var i = 0; i < selobj.options.length; i++) { selobj.options[i].text = texts[i]; selobj.options[i].value = values[texts[i]]; } } function ignoreCaseSort(a, b) { a = a.toLowerCase(); b = b.toLowerCase(); if(a > b) return 1; if(a < b) return -1; return 0; } function getSelectText(objid) { if(dijit.byId(objid)) return dijit.byId(objid).textbox.value; var obj = dojo.byId(objid); return obj.options[obj.selectedIndex].text; } function getSelectValue(objid) { if(dijit.byId(objid)) return dijit.byId(objid).value; return dojo.byId(objid).value; } function get12from24(hour) { if(hour == 0) return {hour: 12, meridian: 'am'}; if(hour < 12) return {hour: hour, meridian: 'am'}; if(hour == 12) return {hour: hour, meridian: 'pm'}; return {hour: hour - 12, meridian: 'pm'}; } function hideDijitButton(id) { dojo.style(dijit.byId(id).domNode, { display: 'none' }); } function showDijitButton(id) { dojo.style(dijit.byId(id).domNode, { display: 'inline' }); } function recenterDijitDialog(id) { if(dijit.byId(id)._relativePosition) delete dijit.byId(id)._relativePosition; dijit.byId(id)._position(); } function resizeRecenterDijitDialog(id) { // taken from Dialog.js _size function /*var d = dijit.byId(id); var mb = dojo._getMarginSize(d.domNode); var viewport = dojo.window.getBox(); if(mb.h >= viewport.h) { // Reduce size of dialog contents so that dialog fits in viewport var h = Math.min(mb.h, Math.floor(viewport.h * 0.75)); dojo.style(d.containerNode, { height: h + "px", overflow: "auto", position: "relative" // workaround IE bug moving scrollbar or dragging dialog }); }*/ dijit.byId(id)._size(); recenterDijitDialog(id); } function checkValidatedObj(objid, errobj) { if(dijit.byId(objid) && ! dijit.byId(objid).get('disabled') && 'isValid' in dijit.byId(objid) && ! dijit.byId(objid).isValid()) { dijit.byId(objid)._hasBeenBlurred = true; dijit.byId(objid).validate(); //dijit.byId(objid).focus(); if(typeof errobj == 'string') { if(dijit.byId(errobj)) dijit.byId(errobj).set('value', ''); else if(dojo.byId(errobj)) dojo.byId(errobj).innerHTML = ''; else errobj = null; } if(errobj !== null && typeof errobj != 'undefined') errobj.innerHTML = ''; return 0; } return 1; } function resetSelect(objid) { if(dijit.byId(objid)) { dijit.byId(objid).reset(); return; } var obj = dojo.byId(objid); var found = 0; for(var i = 0; i < obj.options.length; i++) { if(obj.options[i].defaultSelected) { obj.selectedIndex = i; found = 1; } } if(! found) obj.selectedIndex = 0; }