| // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| 'use strict'; |
| |
| |
| /** |
| * The global object. |
| * @type {!Object} |
| * @const |
| */ |
| var global = this; |
| |
| |
| /** Platform, package, object property, and Event support. */ |
| this.base = (function() { |
| |
| function mLog(text, opt_indentLevel) { |
| if (true) |
| return; |
| |
| var spacing = ''; |
| var indentLevel = opt_indentLevel || 0; |
| for (var i = 0; i < indentLevel; i++) |
| spacing += ' '; |
| console.log(spacing + text); |
| } |
| |
| /** |
| * 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={}; |
| * @param {string} name Name of the object that this file defines. |
| * @param {*=} opt_object The object to expose at the end of the path. |
| * @param {Object=} opt_objectToExportTo The object to add the path to; |
| * default is {@code global}. |
| * @private |
| */ |
| function exportPath(name, opt_object, opt_objectToExportTo) { |
| var parts = name.split('.'); |
| var cur = opt_objectToExportTo || global; |
| |
| for (var part; parts.length && (part = parts.shift());) { |
| if (!parts.length && opt_object !== undefined) { |
| // last part and we have an object; use it |
| cur[part] = opt_object; |
| } else if (part in cur) { |
| cur = cur[part]; |
| } else { |
| cur = cur[part] = {}; |
| } |
| } |
| return cur; |
| } |
| |
| function exportTo(namespace, fn) { |
| var obj = exportPath(namespace); |
| try { |
| var exports = fn(); |
| } catch (e) { |
| console.log('While running exports for ', name, ':'); |
| console.log(e.stack || e); |
| return; |
| } |
| |
| for (var propertyName in exports) { |
| // Maybe we should check the prototype chain here? The current usage |
| // pattern is always using an object literal so we only care about own |
| // properties. |
| var propertyDescriptor = Object.getOwnPropertyDescriptor(exports, |
| propertyName); |
| if (propertyDescriptor) { |
| Object.defineProperty(obj, propertyName, propertyDescriptor); |
| mLog(' +' + propertyName); |
| } |
| } |
| } |
| |
| return { |
| exportTo: exportTo |
| }; |
| })(); |