📄 util.js
字号:
/* * Copyright 2005 Joe Walker * * Licensed 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. *//** * Declare a constructor function to which we can add real functions. * @constructor */function DWRUtil() { }/** * Enables you to react to return being pressed in an input * @see http://getahead.ltd.uk/dwr/browser/util/selectrange */DWRUtil.onReturn = function(event, action) { if (!event) { event = window.event; } if (event && event.keyCode && event.keyCode == 13) { action(); }};/** * Select a specific range in a text box. Useful for 'google suggest' type functions. * @see http://getahead.ltd.uk/dwr/browser/util/selectrange */DWRUtil.selectRange = function(ele, start, end) { var orig = ele; ele = $(ele); if (ele == null) { DWRUtil.debug("selectRange() can't find an element with id: " + orig + "."); return; } if (ele.setSelectionRange) { ele.setSelectionRange(start, end); } else if (ele.createTextRange) { var range = ele.createTextRange(); range.moveStart("character", start); range.moveEnd("character", end - ele.value.length); range.select(); } ele.focus();};/** * Find the element in the current HTML document with the given id or ids * @see http://getahead.ltd.uk/dwr/browser/util/$ */var $;if (!$ && document.getElementById) { $ = 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; }}else if (!$ && document.all) { $ = function() { var elements = new Array(); for (var i = 0; i < arguments.length; i++) { var element = arguments[i]; if (typeof element == 'string') { element = document.all[element]; } if (arguments.length == 1) { return element; } elements.push(element); } return elements; }}/** * Like toString but aimed at debugging * @see http://getahead.ltd.uk/dwr/browser/util/todescriptivestring */DWRUtil.toDescriptiveString = function(data, level, depth) { var reply = ""; var i = 0; var value; var obj; if (level == null) level = 0; if (depth == null) depth = 0; if (data == null) return "null"; if (DWRUtil._isArray(data)) { if (data.length == 0) reply += "[]"; else { if (level != 0) reply += "[\n"; else reply = "["; for (i = 0; i < data.length; i++) { try { obj = data[i]; if (obj == null || typeof obj == "function") { continue; } else if (typeof obj == "object") { if (level > 0) value = DWRUtil.toDescriptiveString(obj, level - 1, depth + 1); else value = DWRUtil._detailedTypeOf(obj); } else { value = "" + obj; value = value.replace(/\/n/g, "\\n"); value = value.replace(/\/t/g, "\\t"); } } catch (ex) { value = "" + ex; } if (level != 0) { reply += DWRUtil._indent(level, depth + 2) + value + ", \n"; } else { if (value.length > 13) value = value.substring(0, 10) + "..."; reply += value + ", "; if (i > 5) { reply += "..."; break; } } } if (level != 0) reply += DWRUtil._indent(level, depth) + "]"; else reply += "]"; } return reply; } if (typeof data == "string" || typeof data == "number" || DWRUtil._isDate(data)) { return data.toString(); } if (typeof data == "object") { var typename = DWRUtil._detailedTypeOf(data); if (typename != "Object") reply = typename + " "; if (level != 0) reply += "{\n"; else reply = "{"; var isHtml = DWRUtil._isHTMLElement(data); for (var prop in data) { if (isHtml) { // HTML nodes have far too much stuff. Chop out the constants if (prop.toUpperCase() == prop || prop == "title" || prop == "lang" || prop == "dir" || prop == "className" || prop == "form" || prop == "name" || prop == "prefix" || prop == "namespaceURI" || prop == "nodeType" || prop == "firstChild" || prop == "lastChild" || prop.match(/^offset/)) { continue; } } value = ""; try { obj = data[prop]; if (obj == null || typeof obj == "function") { continue; } else if (typeof obj == "object") { if (level > 0) { value = "\n"; value += DWRUtil._indent(level, depth + 2); value = DWRUtil.toDescriptiveString(obj, level - 1, depth + 1); } else { value = DWRUtil._detailedTypeOf(obj); } } else { value = "" + obj; value = value.replace(/\/n/g, "\\n"); value = value.replace(/\/t/g, "\\t"); } } catch (ex) { value = "" + ex; } if (level == 0 && value.length > 13) value = value.substring(0, 10) + "..."; var propStr = prop; if (propStr.length > 30) propStr = propStr.substring(0, 27) + "..."; if (level != 0) reply += DWRUtil._indent(level, depth + 1); reply += prop + ":" + value + ", "; if (level != 0) reply += "\n"; i++; if (level == 0 && i > 5) { reply += "..."; break; } } reply += DWRUtil._indent(level, depth); reply += "}"; return reply; } return data.toString();};/** * @private Indenting for DWRUtil.toDescriptiveString */DWRUtil._indent = function(level, depth) { var reply = ""; if (level != 0) { for (var j = 0; j < depth; j++) { reply += "\u00A0\u00A0"; } reply += " "; } return reply;};/** * Setup a GMail style loading message. * @see http://getahead.ltd.uk/dwr/browser/util/useloadingmessage */DWRUtil.useLoadingMessage = function(message) { var loadingMessage; if (message) loadingMessage = message; else loadingMessage = "Loading"; DWREngine.setPreHook(function() { var disabledZone = $('disabledZone'); if (!disabledZone) { disabledZone = document.createElement('div'); disabledZone.setAttribute('id', 'disabledZone'); disabledZone.style.position = "absolute"; disabledZone.style.zIndex = "1000"; disabledZone.style.left = "0px"; disabledZone.style.top = "0px"; disabledZone.style.width = "100%"; disabledZone.style.height = "100%"; document.body.appendChild(disabledZone); var messageZone = document.createElement('div'); messageZone.setAttribute('id', 'messageZone'); messageZone.style.position = "absolute"; messageZone.style.top = "0px"; messageZone.style.right = "0px"; messageZone.style.background = "red"; messageZone.style.color = "white"; messageZone.style.fontFamily = "Arial,Helvetica,sans-serif"; messageZone.style.padding = "4px"; disabledZone.appendChild(messageZone); var text = document.createTextNode(loadingMessage); messageZone.appendChild(text); } else { $('messageZone').innerHTML = loadingMessage; disabledZone.style.visibility = 'visible'; } }); DWREngine.setPostHook(function() { $('disabledZone').style.visibility = 'hidden'; });}/** * Set the value an HTML element to the specified value. * @see http://getahead.ltd.uk/dwr/browser/util/setvalue */DWRUtil.setValue = function(ele, val) { if (val == null) val = ""; var orig = ele; var nodes, i; ele = $(ele); // We can work with names and need to sometimes for radio buttons if (ele == null) { nodes = document.getElementsByName(orig); if (nodes.length >= 1) { ele = nodes.item(0); } } if (ele == null) { DWRUtil.debug("setValue() can't find an element with id/name: " + orig + "."); return; } if (DWRUtil._isHTMLElement(ele, "select")) { if (ele.type == "select-multiple" && DWRUtil._isArray(val)) { DWRUtil._selectListItems(ele, val); } else { DWRUtil._selectListItem(ele, val); } return; } if (DWRUtil._isHTMLElement(ele, "input")) { if (nodes && ele.type == "radio") { for (i = 0; i < nodes.length; i++) { if (nodes.item(i).type == "radio") { nodes.item(i).checked = (nodes.item(i).value == val); } } } else { switch (ele.type) { case "checkbox": case "check-box": case "radio": ele.checked = (val == true); return; default: ele.value = val; return; } } } if (DWRUtil._isHTMLElement(ele, "textarea")) { ele.value = val; return; } // If the value to be set is a DOM object then we try importing the node // rather than serializing it out if (val.nodeType) { if (val.nodeType == 9 /*Node.DOCUMENT_NODE*/) { val = val.documentElement; } val = DWRUtil._importNode(ele.ownerDocument, val, true); ele.appendChild(val); return; } // Fall back to innerHTML ele.innerHTML = val;};/** * @private Find multiple items in a select list and select them. Used by setValue() * @param ele The select list item * @param val The array of values to select */DWRUtil._selectListItems = function(ele, val) { // We deal with select list elements by selecting the matching option // Begin by searching through the values var found = false; var i; var j; for (i = 0; i < ele.options.length; i++) { ele.options[i].selected = false; for (j = 0; j < val.length; j++) { if (ele.options[i].value == val[j]) { ele.options[i].selected = true; } } } // If that fails then try searching through the visible text if (found) return; for (i = 0; i < ele.options.length; i++) { for (j = 0; j < val.length; j++) { if (ele.options[i].text == val[j]) { ele.options[i].selected = true; } } }};/** * @private Find an item in a select list and select it. Used by setValue() * @param ele The select list item * @param val The value to select */DWRUtil._selectListItem = function(ele, val) { // We deal with select list elements by selecting the matching option // Begin by searching through the values var found = false; var i; for (i = 0; i < ele.options.length; i++) { if (ele.options[i].value == val) { ele.options[i].selected = true; found = true; } else { ele.options[i].selected = false; } } // If that fails then try searching through the visible text if (found) return; for (i = 0; i < ele.options.length; i++) { if (ele.options[i].text == val) { ele.options[i].selected = true; break; } }}/** * Read the current value for a given HTML element. * @see http://getahead.ltd.uk/dwr/browser/util/getvalue */DWRUtil.getValue = function(ele) { var orig = ele; ele = $(ele); // We can work with names and need to sometimes for radio buttons, and IE has // an annoying bug where var nodes = document.getElementsByName(orig); if (ele == null && nodes.length >= 1) { ele = nodes.item(0); } if (ele == null) { DWRUtil.debug("getValue() can't find an element with id/name: " + orig + "."); return ""; } if (DWRUtil._isHTMLElement(ele, "select")) { // This is a bit of a scam because it assumes single select // but I'm not sure how we should treat multi-select. var sel = ele.selectedIndex; if (sel != -1) { var reply = ele.options[sel].value; if (reply == null || reply == "") { reply = ele.options[sel].text; } return reply; } else { return ""; } } if (DWRUtil._isHTMLElement(ele, "input")) { if (nodes && ele.type == "radio") { for (i = 0; i < nodes.length; i++) {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -