diff options
author | yurys@chromium.org <yurys@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-02-09 18:26:06 +0000 |
---|---|---|
committer | yurys@chromium.org <yurys@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-02-09 18:26:06 +0000 |
commit | 75a2c3b76edcaba820e96e5e202a7cf5c2f5f088 (patch) | |
tree | 6c332e9132dda63cd3a30be222643bb653c65b6e /webkit/glue/devtools | |
parent | 9e84a876a00b07cbb0d160788f764b3c1d0ba7bd (diff) | |
download | chromium_src-75a2c3b76edcaba820e96e5e202a7cf5c2f5f088.zip chromium_src-75a2c3b76edcaba820e96e5e202a7cf5c2f5f088.tar.gz chromium_src-75a2c3b76edcaba820e96e5e202a7cf5c2f5f088.tar.bz2 |
Move base.js file to the renderer/resources since it's not used by DevTools any more
Review URL: http://codereview.chromium.org/593015
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@38476 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'webkit/glue/devtools')
-rw-r--r-- | webkit/glue/devtools/js/base.js | 1015 |
1 files changed, 0 insertions, 1015 deletions
diff --git a/webkit/glue/devtools/js/base.js b/webkit/glue/devtools/js/base.js deleted file mode 100644 index 1a76aee..0000000 --- a/webkit/glue/devtools/js/base.js +++ /dev/null @@ -1,1015 +0,0 @@ -// Copyright 2006 Google Inc. -// All Rights Reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions -// are met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in -// the documentation and/or other materials provided with the -// distribution. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS -// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE -// COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, -// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN -// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -// POSSIBILITY OF SUCH DAMAGE. - -// NOTE: This file has been changed from the one on doctype. The following -// changes were made: -// - Removed goog.globalEval because it calls eval() which is not allowed from -// inside v8 extensions. If we ever need to use globalEval, we will need to -// find a way to work around this problem. -// - Remove Function.prototype.apply() emulation for the same reason. This one -// is useless anyway because V8 supports apply() natively. - -/** - * @fileoverview Bootstrap for the Google JS Library - */ - -/** - * @define {boolean} Overridden to true by the compiler when - * --mark_as_compiled is specified. - */ -var COMPILED = true; - - -/** - * Base namespace for the Google JS library. Checks to see goog is - * already defined in the current scope before assigning to prevent - * clobbering if base.js is loaded more than once. - */ -var goog = {}; // Check to see if already defined in current scope - - -/** - * Reference to the global context. In most cases this will be 'window'. - */ -goog.global = this; - - -/** - * Indicates whether or not we can call 'eval' directly to eval code in the - * global scope. Set to a Boolean by the first call to goog.globalEval (which - * empirically tests whether eval works for globals). @see goog.globalEval - * @type {boolean?} - * @private - */ -goog.evalWorksForGlobals_ = null; - - -/** - * Creates object stubs for a namespace. When present in a file, goog.provide - * also indicates that the file defines the indicated object. - * @param {string} name name of the object that this file defines. - */ -goog.provide = function(name) { - if (!COMPILED) { - // Ensure that the same namespace isn't provided twice. This is intended - // to teach new developers that 'goog.provide' is effectively a variable - // declaration. And when JSCompiler transforms goog.provide into a real - // variable declaration, the compiled JS should work the same as the raw - // JS--even when the raw JS uses goog.provide incorrectly. - if (goog.getObjectByName(name) && !goog.implicitNamespaces_[name]) { - throw 'Namespace "' + name + '" already declared.'; - } - - var namespace = name; - while ((namespace = namespace.substr(0, namespace.lastIndexOf('.')))) { - goog.implicitNamespaces_[namespace] = true; - } - } - - goog.exportPath_(name); -}; - - -if (!COMPILED) { - /** - * Namespaces implicitly defined by goog.provide. For example, - * goog.provide('goog.events.Event') implicitly declares - * that 'goog' and 'goog.events' must be namespaces. - * - * @type {Object} - * @private - */ - goog.implicitNamespaces_ = {}; -} - - -/** - * Builds an object structure for the provided namespace path, - * ensuring that names that already exist are not overwritten. For - * example: - * "a.b.c" -> a = {};a.b={};a.b.c={}; - * Used by goog.provide and goog.exportSymbol. - * @param {string} name name of the object that this file defines. - * @param {Object} opt_object the object to expose at the end of the path. - * @private - */ -goog.exportPath_ = function(name, opt_object) { - var parts = name.split('.'); - var cur = goog.global; - var part; - - // Internet Explorer exhibits strange behavior when throwing errors from - // methods externed in this manner. See the testExportSymbolExceptions in - // base_test.html for an example. - if (!(parts[0] in cur) && cur.execScript) { - cur.execScript('var ' + parts[0]); - } - - // Parentheses added to eliminate strict JS warning in Firefox. - while ((part = parts.shift())) { - if (!parts.length && goog.isDef(opt_object)) { - // last part and we have an object; use it - cur[part] = opt_object; - } else if (cur[part]) { - cur = cur[part]; - } else { - cur = cur[part] = {}; - } - } -}; - - -/** - * Returns an object based on its fully qualified name - * @param {string} name The fully qualified name. - * @return {Object?} The object or, if not found, null. - */ -goog.getObjectByName = function(name) { - var parts = name.split('.'); - var cur = goog.global; - for (var part; part = parts.shift(); ) { - if (cur[part]) { - cur = cur[part]; - } else { - return null; - } - } - return cur; -}; - - -/** - * Globalizes a whole namespace, such as goog or goog.lang. - * - * @param {Object} obj The namespace to globalize. - * @param {Object} opt_global The object to add the properties to. - * @deprecated Properties may be explicitly exported to the global scope, but - * this should no longer be done in bulk. - */ -goog.globalize = function(obj, opt_global) { - var global = opt_global || goog.global; - for (var x in obj) { - global[x] = obj[x]; - } -}; - - -/** - * Adds a dependency from a file to the files it requires. - * @param {string} relPath The path to the js file. - * @param {Array} provides An array of strings with the names of the objects - * this file provides. - * @param {Array} requires An array of strings with the names of the objects - * this file requires. - */ -goog.addDependency = function(relPath, provides, requires) { - if (!COMPILED) { - var provide, require; - var path = relPath.replace(/\\/g, '/'); - var deps = goog.dependencies_; - for (var i = 0; provide = provides[i]; i++) { - deps.nameToPath[provide] = path; - if (!(path in deps.pathToNames)) { - deps.pathToNames[path] = {}; - } - deps.pathToNames[path][provide] = true; - } - for (var j = 0; require = requires[j]; j++) { - if (!(path in deps.requires)) { - deps.requires[path] = {}; - } - deps.requires[path][require] = true; - } - } -}; - - -/** - * Implements a system for the dynamic resolution of dependencies - * that works in parallel with the BUILD system. - * @param {string} rule Rule to include, in the form goog.package.part. - */ -goog.require = function(rule) { - - // if the object already exists we do not need do do anything - if (!COMPILED) { - if (goog.getObjectByName(rule)) { - return; - } - var path = goog.getPathFromDeps_(rule); - if (path) { - goog.included_[path] = true; - goog.writeScripts_(); - } else { - // NOTE(nicksantos): We could throw an error, but this would break - // legacy users that depended on this failing silently. Instead, the - // compiler should warn us when there are invalid goog.require calls. - } - } -}; - - -/** - * Path for included scripts - * @type {string} - */ -goog.basePath = ''; - - -/** - * Null function used for default values of callbacks, etc. - * @type {Function} - */ -goog.nullFunction = function() {}; - - -/** - * When defining a class Foo with an abstract method bar(), you can do: - * - * Foo.prototype.bar = goog.abstractMethod - * - * Now if a subclass of Foo fails to override bar(), an error - * will be thrown when bar() is invoked. - * - * Note: This does not take the name of the function to override as - * an argument because that would make it more difficult to obfuscate - * our JavaScript code. - * - * @throws {Error} when invoked to indicate the method should be - * overridden. - */ -goog.abstractMethod = function() { - throw Error('unimplemented abstract method'); -}; - - -if (!COMPILED) { - /** - * Object used to keep track of urls that have already been added. This - * record allows the prevention of circular dependencies. - * @type {Object} - * @private - */ - goog.included_ = {}; - - - /** - * This object is used to keep track of dependencies and other data that is - * used for loading scripts - * @private - * @type {Object} - */ - goog.dependencies_ = { - pathToNames: {}, // 1 to many - nameToPath: {}, // 1 to 1 - requires: {}, // 1 to many - visited: {}, // used when resolving dependencies to prevent us from - // visiting the file twice - written: {} // used to keep track of script files we have written - }; - - - /** - * Tries to detect the base path of the base.js script that bootstraps - * Google JS Library - * @private - */ - goog.findBasePath_ = function() { - var doc = goog.global.document; - if (typeof doc == 'undefined') { - return; - } - if (goog.global.GOOG_BASE_PATH) { - goog.basePath = goog.global.GOOG_BASE_PATH; - return; - } else { - goog.global.GOOG_BASE_PATH = null; - } - var scripts = doc.getElementsByTagName('script'); - for (var script, i = 0; script = scripts[i]; i++) { - var src = script.src; - var l = src.length; - if (src.substr(l - 7) == 'base.js') { - goog.basePath = src.substr(0, l - 7); - return; - } - } - }; - - - /** - * Writes a script tag if, and only if, that script hasn't already been added - * to the document. (Must be called at execution time) - * @param {string} src Script source. - * @private - */ - goog.writeScriptTag_ = function(src) { - var doc = goog.global.document; - if (typeof doc != 'undefined' && - !goog.dependencies_.written[src]) { - goog.dependencies_.written[src] = true; - doc.write('<script type="text/javascript" src="' + - src + '"></' + 'script>'); - } - }; - - - /** - * Resolves dependencies based on the dependencies added using addDependency - * and calls writeScriptTag_ in the correct order. - * @private - */ - goog.writeScripts_ = function() { - // the scripts we need to write this time - var scripts = []; - var seenScript = {}; - var deps = goog.dependencies_; - - function visitNode(path) { - if (path in deps.written) { - return; - } - - // we have already visited this one. We can get here if we have cyclic - // dependencies - if (path in deps.visited) { - if (!(path in seenScript)) { - seenScript[path] = true; - scripts.push(path); - } - return; - } - - deps.visited[path] = true; - - if (path in deps.requires) { - for (var requireName in deps.requires[path]) { - visitNode(deps.nameToPath[requireName]); - } - } - - if (!(path in seenScript)) { - seenScript[path] = true; - scripts.push(path); - } - } - - for (var path in goog.included_) { - if (!deps.written[path]) { - visitNode(path); - } - } - - for (var i = 0; i < scripts.length; i++) { - if (scripts[i]) { - goog.writeScriptTag_(goog.basePath + scripts[i]); - } else { - throw Error('Undefined script input'); - } - } - }; - - - /** - * Looks at the dependency rules and tries to determine the script file that - * fulfills a particular rule. - * @param {string} rule In the form goog.namespace.Class or project.script. - * @return {string?} Url corresponding to the rule, or null. - * @private - */ - goog.getPathFromDeps_ = function(rule) { - if (rule in goog.dependencies_.nameToPath) { - return goog.dependencies_.nameToPath[rule]; - } else { - return null; - } - }; - - goog.findBasePath_(); - goog.writeScriptTag_(goog.basePath + 'deps.js'); -} - - - -//============================================================================== -// Language Enhancements -//============================================================================== - - -/** - * This is a "fixed" version of the typeof operator. It differs from the typeof - * operator in such a way that null returns 'null' and arrays return 'array'. - * @param {*} value The value to get the type of. - * @return {string} The name of the type. - */ -goog.typeOf = function(value) { - var s = typeof value; - if (s == 'object') { - if (value) { - // We cannot use constructor == Array or instanceof Array because - // different frames have different Array objects. In IE6, if the iframe - // where the array was created is destroyed, the array loses its - // prototype. Then dereferencing val.splice here throws an exception, so - // we can't use goog.isFunction. Calling typeof directly returns 'unknown' - // so that will work. In this case, this function will return false and - // most array functions will still work because the array is still - // array-like (supports length and []) even though it has lost its - // prototype. Custom object cannot have non enumerable length and - // NodeLists don't have a slice method. - if (typeof value.length == 'number' && - typeof value.splice != 'undefined' && - !goog.propertyIsEnumerable_(value, 'length')) { - return 'array'; - } - - // IE in cross-window calls does not correctly marshal the function type - // (it appears just as an object) so we cannot use just typeof val == - // 'function'. However, if the object has a call property, it is a - // function. - if (typeof value.call != 'undefined') { - return 'function'; - } - } else { - return 'null'; - } - - // In Safari typeof nodeList returns function. We would like to return - // object for those and we can detect an invalid function by making sure that - // the function object has a call method - } else if (s == 'function' && typeof value.call == 'undefined') { - return 'object'; - } - return s; -}; - -if (Object.prototype.propertyIsEnumerable) { - /** - * Safe way to test whether a property is enumarable. It allows testing - * for enumarable on objects where 'propertyIsEnumerable' is overridden or - * does not exist (like DOM nodes in IE). - * @param {Object} object The object to test if the property is enumerable. - * @param {string} propName The property name to check for. - * @return {boolean} True if the property is enumarable. - * @private - */ - goog.propertyIsEnumerable_ = function(object, propName) { - return Object.prototype.propertyIsEnumerable.call(object, propName); - }; -} else { - /** - * Safe way to test whether a property is enumarable. It allows testing - * for enumarable on objects where 'propertyIsEnumerable' is overridden or - * does not exist (like DOM nodes in IE). - * @param {Object} object The object to test if the property is enumerable. - * @param {string} propName The property name to check for. - * @return {boolean} True if the property is enumarable. - * @private - */ - goog.propertyIsEnumerable_ = function(object, propName) { - // KJS in Safari 2 is not ECMAScript compatible and lacks crucial methods - // such as propertyIsEnumerable. We therefore use a workaround. - // Does anyone know a more efficient work around? - if (propName in object) { - for (var key in object) { - if (key == propName) { - return true; - } - } - } - return false; - }; -} - -/** - * Returns true if the specified value is not |undefined|. - * WARNING: Do not use this to test if an object has a property. Use the in - * operator instead. - * @param {*} val Variable to test. - * @return {boolean} Whether variable is defined. - */ -goog.isDef = function(val) { - return typeof val != 'undefined'; -}; - - -/** - * Returns true if the specified value is |null| - * @param {*} val Variable to test. - * @return {boolean} Whether variable is null. - */ -goog.isNull = function(val) { - return val === null; -}; - - -/** - * Returns true if the specified value is defined and not null - * @param {*} val Variable to test. - * @return {boolean} Whether variable is defined and not null. - */ -goog.isDefAndNotNull = function(val) { - return goog.isDef(val) && !goog.isNull(val); -}; - - -/** - * Returns true if the specified value is an array - * @param {*} val Variable to test. - * @return {boolean} Whether variable is an array. - */ -goog.isArray = function(val) { - return goog.typeOf(val) == 'array'; -}; - - -/** - * Returns true if the object looks like an array. To qualify as array like - * the value needs to be either a NodeList or an object with a Number length - * property. - * @param {*} val Variable to test. - * @return {boolean} Whether variable is an array. - */ -goog.isArrayLike = function(val) { - var type = goog.typeOf(val); - return type == 'array' || type == 'object' && typeof val.length == 'number'; -}; - - -/** - * Returns true if the object looks like a Date. To qualify as Date-like - * the value needs to be an object and have a getFullYear() function. - * @param {*} val Variable to test. - * @return {boolean} Whether variable is a like a Date. - */ -goog.isDateLike = function(val) { - return goog.isObject(val) && typeof val.getFullYear == 'function'; -}; - - -/** - * Returns true if the specified value is a string - * @param {*} val Variable to test. - * @return {boolean} Whether variable is a string. - */ -goog.isString = function(val) { - return typeof val == 'string'; -}; - - -/** - * Returns true if the specified value is a boolean - * @param {*} val Variable to test. - * @return {boolean} Whether variable is boolean. - */ -goog.isBoolean = function(val) { - return typeof val == 'boolean'; -}; - - -/** - * Returns true if the specified value is a number - * @param {*} val Variable to test. - * @return {boolean} Whether variable is a number. - */ -goog.isNumber = function(val) { - return typeof val == 'number'; -}; - - -/** - * Returns true if the specified value is a function - * @param {*} val Variable to test. - * @return {boolean} Whether variable is a function. - */ -goog.isFunction = function(val) { - return goog.typeOf(val) == 'function'; -}; - - -/** - * Returns true if the specified value is an object. This includes arrays - * and functions. - * @param {*} val Variable to test. - * @return {boolean} Whether variable is an object. - */ -goog.isObject = function(val) { - var type = goog.typeOf(val); - return type == 'object' || type == 'array' || type == 'function'; -}; - - -/** - * Adds a hash code field to an object. The hash code is unique for the - * given object. - * @param {Object} obj The object to get the hash code for. - * @return {number} The hash code for the object. - */ -goog.getHashCode = function(obj) { - // In IE, DOM nodes do not extend Object so they do not have this method. - // we need to check hasOwnProperty because the proto might have this set. - - if (obj.hasOwnProperty && obj.hasOwnProperty(goog.HASH_CODE_PROPERTY_)) { - return obj[goog.HASH_CODE_PROPERTY_]; - } - if (!obj[goog.HASH_CODE_PROPERTY_]) { - obj[goog.HASH_CODE_PROPERTY_] = ++goog.hashCodeCounter_; - } - return obj[goog.HASH_CODE_PROPERTY_]; -}; - - -/** - * Removes the hash code field from an object. - * @param {Object} obj The object to remove the field from. - */ -goog.removeHashCode = function(obj) { - // DOM nodes in IE are not instance of Object and throws exception - // for delete. Instead we try to use removeAttribute - if ('removeAttribute' in obj) { - obj.removeAttribute(goog.HASH_CODE_PROPERTY_); - } - /** @preserveTry */ - try { - delete obj[goog.HASH_CODE_PROPERTY_]; - } catch (ex) { - } -}; - - -/** - * {String} Name for hash code property - * @private - */ -goog.HASH_CODE_PROPERTY_ = 'goog_hashCode_'; - - -/** - * @type {number} Counter for hash codes. - * @private - */ -goog.hashCodeCounter_ = 0; - - -/** - * Clone an object/array (recursively) - * @param {Object} proto Object to clone. - * @return {Object} Clone of x;. - */ -goog.cloneObject = function(proto) { - var type = goog.typeOf(proto); - if (type == 'object' || type == 'array') { - if (proto.clone) { - return proto.clone(); - } - var clone = type == 'array' ? [] : {}; - for (var key in proto) { - clone[key] = goog.cloneObject(proto[key]); - } - return clone; - } - - return proto; -}; - - -/** - * Partially applies this function to a particular 'this object' and zero or - * more arguments. The result is a new function with some arguments of the first - * function pre-filled and the value of |this| 'pre-specified'.<br><br> - * - * Remaining arguments specified at call-time are appended to the pre- - * specified ones.<br><br> - * - * Also see: {@link #partial}.<br><br> - * - * Note that bind and partial are optimized such that repeated calls to it do - * not create more than one function object, so there is no additional cost for - * something like:<br> - * - * <pre>var g = bind(f, obj); - * var h = partial(g, 1, 2, 3); - * var k = partial(h, a, b, c);</pre> - * - * Usage: - * <pre>var barMethBound = bind(myFunction, myObj, 'arg1', 'arg2'); - * barMethBound('arg3', 'arg4');</pre> - * - * @param {Function} fn A function to partially apply. - * @param {Object} self Specifies the object which |this| should point to - * when the function is run. If the value is null or undefined, it will - * default to the global object. - * @param {Object} var_args Additional arguments that are partially - * applied to the function. - * - * @return {Function} A partially-applied form of the function bind() was - * invoked as a method of. - */ -goog.bind = function(fn, self, var_args) { - var boundArgs = fn.boundArgs_; - - if (arguments.length > 2) { - var args = Array.prototype.slice.call(arguments, 2); - if (boundArgs) { - args.unshift.apply(args, boundArgs); - } - boundArgs = args; - } - - self = fn.boundSelf_ || self; - fn = fn.boundFn_ || fn; - - var newfn; - var context = self || goog.global; - - if (boundArgs) { - newfn = function() { - // Combine the static args and the new args into one big array - var args = Array.prototype.slice.call(arguments); - args.unshift.apply(args, boundArgs); - return fn.apply(context, args); - } - } else { - newfn = function() { - return fn.apply(context, arguments); - } - } - - newfn.boundArgs_ = boundArgs; - newfn.boundSelf_ = self; - newfn.boundFn_ = fn; - - return newfn; -}; - - -/** - * Like bind(), except that a 'this object' is not required. Useful when the - * target function is already bound. - * - * Usage: - * var g = partial(f, arg1, arg2); - * g(arg3, arg4); - * - * @param {Function} fn A function to partially apply. - * @param {Object} var_args Additional arguments that are partially - * applied to fn. - * @return {Function} A partially-applied form of the function bind() was - * invoked as a method of. - */ -goog.partial = function(fn, var_args) { - var args = Array.prototype.slice.call(arguments, 1); - args.unshift(fn, null); - return goog.bind.apply(null, args); -}; - - -/** - * Copies all the members of a source object to a target object. - * This is deprecated. Use goog.object.extend instead. - * @param {Object} target Target. - * @param {Object} source Source. - * @deprecated - */ -goog.mixin = function(target, source) { - for (var x in source) { - target[x] = source[x]; - } - - // For IE the for-in-loop does not contain any properties that are not - // enumerable on the prototype object (for example, isPrototypeOf from - // Object.prototype) but also it will not include 'replace' on objects that - // extend String and change 'replace' (not that it is common for anyone to - // extend anything except Object). -}; - - -/** - * A simple wrapper for new Date().getTime(). - * - * @return {number} An integer value representing the number of milliseconds - * between midnight, January 1, 1970 and the current time. - */ -goog.now = Date.now || (function() { - return new Date().getTime(); -}); - - -/** - * Abstract implementation of goog.getMsg for use with localized messages - * @param {string} str Translatable string, places holders in the form.{$foo} - * @param {Object} opt_values Map of place holder name to value. - */ -goog.getMsg = function(str, opt_values) { - var values = opt_values || {}; - for (var key in values) { - str = str.replace(new RegExp('\\{\\$' + key + '\\}', 'gi'), values[key]); - } - return str; -}; - - -/** - * Exposes an unobfuscated global namespace path for the given object. - * Note that fields of the exported object *will* be obfuscated, - * unless they are exported in turn via this function or - * goog.exportProperty - * - * <p>Also handy for making public items that are defined in anonymous - * closures. - * - * ex. goog.exportSymbol('Foo', Foo); - * - * ex. goog.exportSymbol('public.path.Foo.staticFunction', - * Foo.staticFunction); - * public.path.Foo.staticFunction(); - * - * ex. goog.exportSymbol('public.path.Foo.prototype.myMethod', - * Foo.prototype.myMethod); - * new public.path.Foo().myMethod(); - * - * @param {string} publicPath Unobfuscated name to export. - * @param {Object} object Object the name should point to. - */ -goog.exportSymbol = function(publicPath, object) { - goog.exportPath_(publicPath, object); -}; - - -/** - * Exports a property unobfuscated into the object's namespace. - * ex. goog.exportProperty(Foo, 'staticFunction', Foo.staticFunction); - * ex. goog.exportProperty(Foo.prototype, 'myMethod', Foo.prototype.myMethod); - * @param {Object} object Object whose static property is being exported. - * @param {string} publicName Unobfuscated name to export. - * @param {Object} symbol Object the name should point to. - */ -goog.exportProperty = function(object, publicName, symbol) { - object[publicName] = symbol; -}; - - - -//============================================================================== -// Extending Function -//============================================================================== - - -/** - * An alias to the {@link goog.bind()} global function. - * - * Usage: - * var g = f.bind(obj, arg1, arg2); - * g(arg3, arg4); - * - * @param {Object} self Specifies the object to which |this| should point - * when the function is run. If the value is null or undefined, it will - * default to the global object. - * @param {Object} var_args Additional arguments that are partially - * applied to fn. - * @return {Function} A partially-applied form of the Function on which bind() - * was invoked as a method. - * @deprecated - */ -Function.prototype.bind = function(self, var_args) { - if (arguments.length > 1) { - var args = Array.prototype.slice.call(arguments, 1); - args.unshift(this, self); - return goog.bind.apply(null, args); - } else { - return goog.bind(this, self); - } -}; - - -/** - * An alias to the {@link goog.partial()} global function. - * - * Usage: - * var g = f.partial(arg1, arg2); - * g(arg3, arg4); - * - * @param {Object} var_args Additional arguments that are partially - * applied to fn. - * @return {Function} A partially-applied form of the function partial() was - * invoked as a method of. - * @deprecated - */ -Function.prototype.partial = function(var_args) { - var args = Array.prototype.slice.call(arguments); - args.unshift(this, null); - return goog.bind.apply(null, args); -}; - - -/** - * Inherit the prototype methods from one constructor into another. - * - * Usage: - * <pre> - * function ParentClass(a, b) { } - * ParentClass.prototype.foo = function(a) { } - * - * function ChildClass(a, b, c) { - * ParentClass.call(this, a, b); - * } - * - * ChildClass.inherits(ParentClass); - * - * var child = new ChildClass('a', 'b', 'see'); - * child.foo(); // works - * </pre> - * - * In addition, a superclass' implementation of a method can be invoked - * as follows: - * - * <pre> - * ChildClass.prototype.foo = function(a) { - * ChildClass.superClass_.foo.call(this, a); - * // other code - * }; - * </pre> - * - * @param {Function} parentCtor Parent class. - */ -Function.prototype.inherits = function(parentCtor) { - goog.inherits(this, parentCtor); -}; - - -/** - * Static variant of Function.prototype.inherits. - * @param {Function} childCtor Child class. - * @param {Function} parentCtor Parent class. - */ -goog.inherits = function(childCtor, parentCtor) { - /** @constructor */ - function tempCtor() {}; - tempCtor.prototype = parentCtor.prototype; - childCtor.superClass_ = parentCtor.prototype; - childCtor.prototype = new tempCtor(); - childCtor.prototype.constructor = childCtor; -}; - - -/** - * Mixes in an object's properties and methods into the callee's prototype. - * Basically mixin based inheritance, thus providing an alternative method for - * adding properties and methods to a class' prototype. - * - * <pre> - * function X() {} - * X.mixin({ - * one: 1, - * two: 2, - * three: 3, - * doit: function() { return this.one + this.two + this.three; } - * }); - * - * function Y() { } - * Y.mixin(X.prototype); - * Y.prototype.four = 15; - * Y.prototype.doit2 = function() { return this.doit() + this.four; } - * }); - * - * // or - * - * function Y() { } - * Y.inherits(X); - * Y.mixin({ - * one: 10, - * four: 15, - * doit2: function() { return this.doit() + this.four; } - * }); - * </pre> - * - * @param {Object} source from which to copy properties. - * @see goog.mixin - * @deprecated - */ -Function.prototype.mixin = function(source) { - goog.mixin(this.prototype, source); -}; |