| OLD | NEW |
| (Empty) | |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. |
| 4 |
| 5 /** |
| 6 * @fileoverview Implements a shim so that the CFInstall scripts can be compiled |
| 7 * with or without Closure. In particular, chromeframe.js is used by the stub, |
| 8 * the implementation, and the download site, so we need to provide an |
| 9 * implementation of goog.provide. |
| 10 **/ |
| 11 |
| 12 var goog = {}; |
| 13 goog.global = this; |
| 14 |
| 15 /** |
| 16 * From closure/base.js:goog.exportPath_ . |
| 17 * @param {string} name |
| 18 * @param {Object=} opt_object |
| 19 */ |
| 20 goog.provide = function(name, opt_object) { |
| 21 var parts = name.split('.'); |
| 22 var cur = goog.global; |
| 23 |
| 24 // Internet Explorer exhibits strange behavior when throwing errors from |
| 25 // methods externed in this manner. See the testExportSymbolExceptions in |
| 26 // base_test.html for an example. |
| 27 if (!(parts[0] in cur) && cur.execScript) |
| 28 cur.execScript('var ' + parts[0]); |
| 29 |
| 30 // Certain browsers cannot parse code in the form for((a in b); c;); |
| 31 // This pattern is produced by the JSCompiler when it collapses the |
| 32 // statement above into the conditional loop below. To prevent this from |
| 33 // happening, use a for-loop and reserve the init logic as below. |
| 34 |
| 35 // Parentheses added to eliminate strict JS warning in Firefox. |
| 36 for (var part; parts.length && (part = parts.shift());) { |
| 37 if (!parts.length && opt_object !== undefined) { |
| 38 // last part and we have an object; use it |
| 39 cur[part] = opt_object; |
| 40 } else if (cur[part]) { |
| 41 cur = cur[part]; |
| 42 } else { |
| 43 cur = cur[part] = {}; |
| 44 } |
| 45 } |
| 46 }; |
| 47 |
| 48 // The following line causes the closureBuilder script to recognize this as |
| 49 // base.js . |
| 50 goog.provide('goog'); |
| 51 |
| 52 /** |
| 53 * From closure/base.js:goog.exportPath_ . |
| 54 * @param {string} name |
| 55 * @param {Object=} opt_object |
| 56 */ |
| 57 goog.exportSymbol = goog.provide; |
| 58 |
| 59 /** |
| 60 * NO-OP |
| 61 * @param {string} name |
| 62 */ |
| 63 goog.require = function(name) {}; |
| 64 |
| 65 /** |
| 66 * A simple form that supports only bound 'this', not arguments. |
| 67 * @param {Function} fn A function to partially apply. |
| 68 * @param {Object|undefined} selfObj Specifies the object which |this| should |
| 69 * point to when the function is run. |
| 70 * @return {!Function} A partially-applied form of the function bind() was |
| 71 * invoked as a method of. |
| 72 */ |
| 73 goog.bind = function(fn, selfObj) { |
| 74 return function() { |
| 75 return fn.apply(selfObj, arguments); |
| 76 }; |
| 77 }; |
| OLD | NEW |