diff options
Diffstat (limited to 'third_party/jstemplate/util.js')
-rw-r--r-- | third_party/jstemplate/util.js | 466 |
1 files changed, 0 insertions, 466 deletions
diff --git a/third_party/jstemplate/util.js b/third_party/jstemplate/util.js deleted file mode 100644 index beed591..0000000 --- a/third_party/jstemplate/util.js +++ /dev/null @@ -1,466 +0,0 @@ -// Copyright 2006 Google Inc. -// -// 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. -/** - * @fileoverview Miscellaneous constants and functions referenced in - * the main source files. - */ - -function log(msg) {} - -// String literals defined globally and not to be inlined. (IE6 perf) -/** @const */ var STRING_empty = ''; - -/** @const */ var CSS_display = 'display'; -/** @const */ var CSS_position = 'position'; - -// Constants for possible values of the typeof operator. -var TYPE_boolean = 'boolean'; -var TYPE_number = 'number'; -var TYPE_object = 'object'; -var TYPE_string = 'string'; -var TYPE_function = 'function'; -var TYPE_undefined = 'undefined'; - - -/** - * Wrapper for the eval() builtin function to evaluate expressions and - * obtain their value. It wraps the expression in parentheses such - * that object literals are really evaluated to objects. Without the - * wrapping, they are evaluated as block, and create syntax - * errors. Also protects against other syntax errors in the eval()ed - * code and returns null if the eval throws an exception. - * - * @param {string} expr - * @return {Object|null} - */ -function jsEval(expr) { - try { - // NOTE(mesch): An alternative idiom would be: - // - // eval('(' + expr + ')'); - // - // Note that using the square brackets as below, "" evals to undefined. - // The alternative of using parentheses does not work when evaluating - // function literals in IE. - // e.g. eval("(function() {})") returns undefined, and not a function - // object, in IE. - return eval('[' + expr + '][0]'); - } catch (e) { - log('EVAL FAILED ' + expr + ': ' + e); - return null; - } -} - -function jsLength(obj) { - return obj.length; -} - -function assert(obj) {} - -/** - * Copies all properties from second object to the first. Modifies to. - * - * @param {Object} to The target object. - * @param {Object} from The source object. - */ -function copyProperties(to, from) { - for (var p in from) { - to[p] = from[p]; - } -} - - -/** - * @param {Object|null|undefined} value The possible value to use. - * @param {Object} defaultValue The default if the value is not set. - * @return {Object} The value, if it is - * defined and not null; otherwise the default - */ -function getDefaultObject(value, defaultValue) { - if (typeof value != TYPE_undefined && value != null) { - return /** @type Object */(value); - } else { - return defaultValue; - } -} - -/** - * Detect if an object looks like an Array. - * Note that instanceof Array is not robust; for example an Array - * created in another iframe fails instanceof Array. - * @param {Object|null} value Object to interrogate - * @return {boolean} Is the object an array? - */ -function isArray(value) { - return value != null && - typeof value == TYPE_object && - typeof value.length == TYPE_number; -} - - -/** - * Finds a slice of an array. - * - * @param {Array} array Array to be sliced. - * @param {number} start The start of the slice. - * @param {number} opt_end The end of the slice (optional). - * @return {Array} array The slice of the array from start to end. - */ -function arraySlice(array, start, opt_end) { - // Use - // return Function.prototype.call.apply(Array.prototype.slice, arguments); - // instead of the simpler - // return Array.prototype.slice.call(array, start, opt_end); - // here because of a bug in the FF and IE implementations of - // Array.prototype.slice which causes this function to return an empty list - // if opt_end is not provided. - return Function.prototype.call.apply(Array.prototype.slice, arguments); -} - - -/** - * Jscompiler wrapper for parseInt() with base 10. - * - * @param {string} s string repersentation of a number. - * - * @return {number} The integer contained in s, converted on base 10. - */ -function parseInt10(s) { - return parseInt(s, 10); -} - - -/** - * Clears the array by setting the length property to 0. This usually - * works, and if it should turn out not to work everywhere, here would - * be the place to implement the browser specific workaround. - * - * @param {Array} array Array to be cleared. - */ -function arrayClear(array) { - array.length = 0; -} - - -/** - * Prebinds "this" within the given method to an object, but ignores all - * arguments passed to the resulting function. - * I.e. var_args are all the arguments that method is invoked with when - * invoking the bound function. - * - * @param {Object|null} object The object that the method call targets. - * @param {Function} method The target method. - * @return {Function} Method with the target object bound to it and curried by - * the provided arguments. - */ -function bindFully(object, method, var_args) { - var args = arraySlice(arguments, 2); - return function() { - return method.apply(object, args); - } -} - -// Based on <http://www.w3.org/TR/2000/ REC-DOM-Level-2-Core-20001113/ -// core.html#ID-1950641247>. -var DOM_ELEMENT_NODE = 1; -var DOM_ATTRIBUTE_NODE = 2; -var DOM_TEXT_NODE = 3; -var DOM_CDATA_SECTION_NODE = 4; -var DOM_ENTITY_REFERENCE_NODE = 5; -var DOM_ENTITY_NODE = 6; -var DOM_PROCESSING_INSTRUCTION_NODE = 7; -var DOM_COMMENT_NODE = 8; -var DOM_DOCUMENT_NODE = 9; -var DOM_DOCUMENT_TYPE_NODE = 10; -var DOM_DOCUMENT_FRAGMENT_NODE = 11; -var DOM_NOTATION_NODE = 12; - - - -function domGetElementById(document, id) { - return document.getElementById(id); -} - -/** - * Creates a new node in the given document - * - * @param {Document} doc Target document. - * @param {string} name Name of new element (i.e. the tag name).. - * @return {Element} Newly constructed element. - */ -function domCreateElement(doc, name) { - return doc.createElement(name); -} - -/** - * Traverses the element nodes in the DOM section underneath the given - * node and invokes the given callback as a method on every element - * node encountered. - * - * @param {Element} node Parent element of the subtree to traverse. - * @param {Function} callback Called on each node in the traversal. - */ -function domTraverseElements(node, callback) { - var traverser = new DomTraverser(callback); - traverser.run(node); -} - -/** - * A class to hold state for a dom traversal. - * @param {Function} callback Called on each node in the traversal. - * @constructor - * @class - */ -function DomTraverser(callback) { - this.callback_ = callback; -} - -/** - * Processes the dom tree in breadth-first order. - * @param {Element} root The root node of the traversal. - */ -DomTraverser.prototype.run = function(root) { - var me = this; - me.queue_ = [ root ]; - while (jsLength(me.queue_)) { - me.process_(me.queue_.shift()); - } -} - -/** - * Processes a single node. - * @param {Element} node The current node of the traversal. - */ -DomTraverser.prototype.process_ = function(node) { - var me = this; - - me.callback_(node); - - for (var c = node.firstChild; c; c = c.nextSibling) { - if (c.nodeType == DOM_ELEMENT_NODE) { - me.queue_.push(c); - } - } -} - -/** - * Get an attribute from the DOM. Simple redirect, exists to compress code. - * - * @param {Element} node Element to interrogate. - * @param {string} name Name of parameter to extract. - * @return {string|null} Resulting attribute. - */ -function domGetAttribute(node, name) { - return node.getAttribute(name); - // NOTE(mesch): Neither in IE nor in Firefox, HTML DOM attributes - // implement namespaces. All items in the attribute collection have - // null localName and namespaceURI attribute values. In IE, we even - // encounter DIV elements that don't implement the method - // getAttributeNS(). -} - - -/** - * Set an attribute in the DOM. Simple redirect to compress code. - * - * @param {Element} node Element to interrogate. - * @param {string} name Name of parameter to set. - * @param {string|number} value Set attribute to this value. - */ -function domSetAttribute(node, name, value) { - node.setAttribute(name, value); -} - -/** - * Remove an attribute from the DOM. Simple redirect to compress code. - * - * @param {Element} node Element to interrogate. - * @param {string} name Name of parameter to remove. - */ -function domRemoveAttribute(node, name) { - node.removeAttribute(name); -} - -/** - * Clone a node in the DOM. - * - * @param {Node} node Node to clone. - * @return {Node} Cloned node. - */ -function domCloneNode(node) { - return node.cloneNode(true); - // NOTE(mesch): we never so far wanted to use cloneNode(false), - // hence the default. -} - -/** - * Clone a element in the DOM. - * - * @param {Element} element Element to clone. - * @return {Element} Cloned element. - */ -function domCloneElement(element) { - return /** @type {Element} */(domCloneNode(element)); -} - -/** - * Returns the document owner of the given element. In particular, - * returns window.document if node is null or the browser does not - * support ownerDocument. If the node is a document itself, returns - * itself. - * - * @param {Node|null|undefined} node The node whose ownerDocument is required. - * @returns {Document} The owner document or window.document if unsupported. - */ -function ownerDocument(node) { - if (!node) { - return document; - } else if (node.nodeType == DOM_DOCUMENT_NODE) { - return /** @type Document */(node); - } else { - return node.ownerDocument || document; - } -} - -/** - * Creates a new text node in the given document. - * - * @param {Document} doc Target document. - * @param {string} text Text composing new text node. - * @return {Text} Newly constructed text node. - */ -function domCreateTextNode(doc, text) { - return doc.createTextNode(text); -} - -/** - * Appends a new child to the specified (parent) node. - * - * @param {Element} node Parent element. - * @param {Node} child Child node to append. - * @return {Node} Newly appended node. - */ -function domAppendChild(node, child) { - return node.appendChild(child); -} - -/** - * Sets display to default. - * - * @param {Element} node The dom element to manipulate. - */ -function displayDefault(node) { - node.style[CSS_display] = ''; -} - -/** - * Sets display to none. Doing this as a function saves a few bytes for - * the 'style.display' property and the 'none' literal. - * - * @param {Element} node The dom element to manipulate. - */ -function displayNone(node) { - node.style[CSS_display] = 'none'; -} - - -/** - * Sets position style attribute to absolute. - * - * @param {Element} node The dom element to manipulate. - */ -function positionAbsolute(node) { - node.style[CSS_position] = 'absolute'; -} - - -/** - * Inserts a new child before a given sibling. - * - * @param {Node} newChild Node to insert. - * @param {Node} oldChild Sibling node. - * @return {Node} Reference to new child. - */ -function domInsertBefore(newChild, oldChild) { - return oldChild.parentNode.insertBefore(newChild, oldChild); -} - -/** - * Replaces an old child node with a new child node. - * - * @param {Node} newChild New child to append. - * @param {Node} oldChild Old child to remove. - * @return {Node} Replaced node. - */ -function domReplaceChild(newChild, oldChild) { - return oldChild.parentNode.replaceChild(newChild, oldChild); -} - -/** - * Removes a node from the DOM. - * - * @param {Node} node The node to remove. - * @return {Node} The removed node. - */ -function domRemoveNode(node) { - return domRemoveChild(node.parentNode, node); -} - -/** - * Remove a child from the specified (parent) node. - * - * @param {Element} node Parent element. - * @param {Node} child Child node to remove. - * @return {Node} Removed node. - */ -function domRemoveChild(node, child) { - return node.removeChild(child); -} - - -/** - * Trim whitespace from begin and end of string. - * - * @see testStringTrim(); - * - * @param {string} str Input string. - * @return {string} Trimmed string. - */ -function stringTrim(str) { - return stringTrimRight(stringTrimLeft(str)); -} - -/** - * Trim whitespace from beginning of string. - * - * @see testStringTrimLeft(); - * - * @param {string} str Input string. - * @return {string} Trimmed string. - */ -function stringTrimLeft(str) { - return str.replace(/^\s+/, ""); -} - -/** - * Trim whitespace from end of string. - * - * @see testStringTrimRight(); - * - * @param {string} str Input string. - * @return {string} Trimmed string. - */ -function stringTrimRight(str) { - return str.replace(/\s+$/, ""); -} |