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 |