Skip to content

Commit

Permalink
Simplified closure compiler helpers
Browse files Browse the repository at this point in the history
  • Loading branch information
SteveSanderson committed Oct 15, 2010
1 parent 48a1152 commit a5640ff
Show file tree
Hide file tree
Showing 18 changed files with 182 additions and 353 deletions.
220 changes: 70 additions & 150 deletions build/output/knockout-latest.js

Large diffs are not rendered by default.

108 changes: 54 additions & 54 deletions build/output/knockout-latest.min.js

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion build/source-references.js
@@ -1,6 +1,6 @@
knockoutDebugCallback([
'src/google-closure-compiler-utils.js',
'src/namespace.js',
'src/google-closure-compiler-utils.js',
'src/utils.js',
'src/memoization.js',
'src/subscribables/subscribable.js',
Expand Down
4 changes: 2 additions & 2 deletions src/binding/bindingAttributeSyntax.js
Expand Up @@ -55,6 +55,6 @@
});
};

goog.exportSymbol('ko.bindingHandlers', ko.bindingHandlers);
goog.exportSymbol('ko.applyBindings', ko.applyBindings);
ko.exportSymbol('ko.bindingHandlers', ko.bindingHandlers);
ko.exportSymbol('ko.applyBindings', ko.applyBindings);
})();
2 changes: 1 addition & 1 deletion src/binding/editDetection/arrayToDomNodeChildren.js
Expand Up @@ -109,4 +109,4 @@
}
})();

goog.exportSymbol('ko.utils.setDomNodeChildrenFromArrayMapping', ko.utils.setDomNodeChildrenFromArrayMapping);
ko.exportSymbol('ko.utils.setDomNodeChildrenFromArrayMapping', ko.utils.setDomNodeChildrenFromArrayMapping);
2 changes: 1 addition & 1 deletion src/binding/editDetection/compareArrays.js
Expand Up @@ -82,4 +82,4 @@
};
})();

goog.exportSymbol('ko.utils.compareArrays', ko.utils.compareArrays);
ko.exportSymbol('ko.utils.compareArrays', ko.utils.compareArrays);
6 changes: 3 additions & 3 deletions src/binding/jsonExpressionRewriting.js
Expand Up @@ -98,6 +98,6 @@ ko.jsonExpressionRewriting = (function () {
};
})();

goog.exportSymbol('ko.jsonExpressionRewriting', ko.jsonExpressionRewriting);
goog.exportSymbol('ko.jsonExpressionRewriting.parseJson', ko.jsonExpressionRewriting.parseJson);
goog.exportSymbol('ko.jsonExpressionRewriting.insertPropertyAccessorsIntoJson', ko.jsonExpressionRewriting.insertPropertyAccessorsIntoJson);
ko.exportSymbol('ko.jsonExpressionRewriting', ko.jsonExpressionRewriting);
ko.exportSymbol('ko.jsonExpressionRewriting.parseJson', ko.jsonExpressionRewriting.parseJson);
ko.exportSymbol('ko.jsonExpressionRewriting.insertPropertyAccessorsIntoJson', ko.jsonExpressionRewriting.insertPropertyAccessorsIntoJson);
6 changes: 3 additions & 3 deletions src/binding/selectExtensions.js
Expand Up @@ -32,6 +32,6 @@
};
})();

goog.exportSymbol('ko.selectExtensions', ko.selectExtensions);
goog.exportSymbol('ko.selectExtensions.readValue', ko.selectExtensions.readValue);
goog.exportSymbol('ko.selectExtensions.writeValue', ko.selectExtensions.writeValue);
ko.exportSymbol('ko.selectExtensions', ko.selectExtensions);
ko.exportSymbol('ko.selectExtensions.readValue', ko.selectExtensions.readValue);
ko.exportSymbol('ko.selectExtensions.writeValue', ko.selectExtensions.writeValue);
109 changes: 9 additions & 100 deletions src/google-closure-compiler-utils.js
@@ -1,102 +1,11 @@
// This code is used only to make the minified file smaller
// Extraced from http://closure-library.googlecode.com/svn/docs/closure_goog_base.js.source.html

var goog = window.goog = window.goog || { };

/**
* Reference to the global context. In most cases this will be 'window'.
*/
goog.global = goog.global || this;

/**
* 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. Additionally, this function assumes that the global
* undefined variable has not been redefined.
* @param {*} val Variable to test.
* @return {boolean} Whether variable is defined.
*/
goog.isDef = goog.isDef || function(val) {
return val !== undefined;
// Google Closure Compiler helpers (used only to make the minified file smaller)
ko.exportSymbol = function(publicPath, object) {
var tokens = publicPath.split(".");
var target = window;
for (var i = 0; i < tokens.length - 1; i++)
target = target[tokens[i]];
target[tokens[tokens.length - 1]] = object;
};

/**
* 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 the name should point to.
* @param {Object=} opt_objectToExportTo The object to add the path to; default
* is |goog.global|.
*/
goog.exportSymbol = goog.exportSymbol || function(publicPath, object, opt_objectToExportTo) {
goog.exportPath_(publicPath, object, opt_objectToExportTo);
};

/**
* 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 {*} symbol Object the name should point to.
*/
goog.exportProperty = goog.exportProperty || function(object, publicName, symbol) {
object[publicName] = symbol;
};

/**
* 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 {*=} 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 |goog.global|.
* @private
*/
goog.exportPath_ = goog.exportPath_ || function(name, opt_object, opt_objectToExportTo) {
var parts = name.split('.');
var cur = opt_objectToExportTo || goog.global;

// 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]);
}

// Certain browsers cannot parse code in the form for((a in b); c;);
// This pattern is produced by the JSCompiler when it collapses the
// statement above into the conditional loop below. To prevent this from
// happening, use a for-loop and reserve the init logic as below.

// Parentheses added to eliminate strict JS warning in Firefox.
for (var part; parts.length && (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] = {};
}
}
ko.exportProperty = function(owner, publicName, object) {
owner[publicName] = object;
};
10 changes: 5 additions & 5 deletions src/memoization.js
Expand Up @@ -64,8 +64,8 @@ ko.memoization = (function () {
};
})();

goog.exportSymbol('ko.memoization', ko.memoization);
goog.exportSymbol('ko.memoization.memoize', ko.memoization.memoize);
goog.exportSymbol('ko.memoization.unmemoize', ko.memoization.unmemoize);
goog.exportSymbol('ko.memoization.parseMemoText', ko.memoization.parseMemoText);
goog.exportSymbol('ko.memoization.unmemoizeDomNodeAndDescendants', ko.memoization.unmemoizeDomNodeAndDescendants);
ko.exportSymbol('ko.memoization', ko.memoization);
ko.exportSymbol('ko.memoization.memoize', ko.memoization.memoize);
ko.exportSymbol('ko.memoization.unmemoize', ko.memoization.unmemoize);
ko.exportSymbol('ko.memoization.parseMemoText', ko.memoization.parseMemoText);
ko.exportSymbol('ko.memoization.unmemoizeDomNodeAndDescendants', ko.memoization.unmemoizeDomNodeAndDescendants);
6 changes: 3 additions & 3 deletions src/subscribables/dependentObservable.js
Expand Up @@ -56,11 +56,11 @@ ko.dependentObservable = function (evaluatorFunction, evaluatorFunctionTarget, o
ko.subscribable.call(dependentObservable);
evaluate();

goog.exportProperty(dependentObservable, 'dispose', dependentObservable.dispose);
goog.exportProperty(dependentObservable, 'getDependenciesCount', dependentObservable.getDependenciesCount);
ko.exportProperty(dependentObservable, 'dispose', dependentObservable.dispose);
ko.exportProperty(dependentObservable, 'getDependenciesCount', dependentObservable.getDependenciesCount);

return dependentObservable;
};
ko.dependentObservable.__ko_proto__ = ko.observable;

goog.exportSymbol('ko.dependentObservable', ko.dependentObservable);
ko.exportSymbol('ko.dependentObservable', ko.dependentObservable);
8 changes: 4 additions & 4 deletions src/subscribables/observable.js
Expand Up @@ -21,7 +21,7 @@ ko.observable = function (initialValue) {

ko.subscribable.call(observable);

goog.exportProperty(observable, "valueHasMutated", observable.valueHasMutated);
ko.exportProperty(observable, "valueHasMutated", observable.valueHasMutated);

return observable;
}
Expand All @@ -35,6 +35,6 @@ ko.isWriteableObservable = function (instance) {
}


goog.exportSymbol('ko.observable', ko.observable);
goog.exportSymbol('ko.isObservable', ko.isObservable);
goog.exportSymbol('ko.isWriteableObservable', ko.isWriteableObservable);
ko.exportSymbol('ko.observable', ko.observable);
ko.exportSymbol('ko.isObservable', ko.isObservable);
ko.exportSymbol('ko.isWriteableObservable', ko.isWriteableObservable);
12 changes: 6 additions & 6 deletions src/subscribables/observableArray.js
Expand Up @@ -67,13 +67,13 @@ ko.observableArray = function (initialValues) {
return ko.utils.arrayIndexOf(underlyingArray, item);
};

goog.exportProperty(result, "remove", result.remove);
goog.exportProperty(result, "removeAll", result.removeAll);
goog.exportProperty(result, "destroy", result.destroy);
goog.exportProperty(result, "destroyAll", result.destroyAll);
goog.exportProperty(result, "indexOf", result.indexOf);
ko.exportProperty(result, "remove", result.remove);
ko.exportProperty(result, "removeAll", result.removeAll);
ko.exportProperty(result, "destroy", result.destroy);
ko.exportProperty(result, "destroyAll", result.destroyAll);
ko.exportProperty(result, "indexOf", result.indexOf);

return result;
}

goog.exportSymbol('ko.observableArray', ko.observableArray);
ko.exportSymbol('ko.observableArray', ko.observableArray);
12 changes: 6 additions & 6 deletions src/subscribables/subscribable.js
Expand Up @@ -4,7 +4,7 @@ ko.subscription = function (callback, disposeCallback) {
this.callback = callback;
this.dispose = disposeCallback;

goog.exportProperty(this, 'dispose', this.dispose);
ko.exportProperty(this, 'dispose', this.dispose);
};

ko.subscribable = function () {
Expand All @@ -31,14 +31,14 @@ ko.subscribable = function () {
return _subscriptions.length;
};

goog.exportProperty(this, 'subscribe', this.subscribe);
goog.exportProperty(this, 'notifySubscribers', this.notifySubscribers);
goog.exportProperty(this, 'getSubscriptionsCount', this.getSubscriptionsCount);
ko.exportProperty(this, 'subscribe', this.subscribe);
ko.exportProperty(this, 'notifySubscribers', this.notifySubscribers);
ko.exportProperty(this, 'getSubscriptionsCount', this.getSubscriptionsCount);
}

ko.isSubscribable = function (instance) {
return typeof instance.subscribe == "function" && typeof instance.notifySubscribers == "function";
};

goog.exportSymbol('ko.subscribable', ko.subscribable);
goog.exportSymbol('ko.isSubscribable', ko.isSubscribable);
ko.exportSymbol('ko.subscribable', ko.subscribable);
ko.exportSymbol('ko.isSubscribable', ko.isSubscribable);
2 changes: 1 addition & 1 deletion src/templating/templateEngine.js
Expand Up @@ -15,4 +15,4 @@ ko.templateEngine = function () {
}
};

goog.exportSymbol('ko.templateEngine', ko.templateEngine);
ko.exportSymbol('ko.templateEngine', ko.templateEngine);
4 changes: 2 additions & 2 deletions src/templating/templateRewriting.js
Expand Up @@ -36,5 +36,5 @@ ko.templateRewriting = (function () {
}
})();

goog.exportSymbol('ko.templateRewriting', ko.templateRewriting);
goog.exportSymbol('ko.templateRewriting.applyMemoizedBindingsToNextSibling', ko.templateRewriting.applyMemoizedBindingsToNextSibling); // Exported only because it has to be referenced by string lookup from within rewritten template
ko.exportSymbol('ko.templateRewriting', ko.templateRewriting);
ko.exportSymbol('ko.templateRewriting.applyMemoizedBindingsToNextSibling', ko.templateRewriting.applyMemoizedBindingsToNextSibling); // Exported only because it has to be referenced by string lookup from within rewritten template
4 changes: 2 additions & 2 deletions src/templating/templating.js
Expand Up @@ -106,5 +106,5 @@
};
})();

goog.exportSymbol('ko.setTemplateEngine', ko.setTemplateEngine);
goog.exportSymbol('ko.renderTemplate', ko.renderTemplate);
ko.exportSymbol('ko.setTemplateEngine', ko.setTemplateEngine);
ko.exportSymbol('ko.renderTemplate', ko.renderTemplate);
18 changes: 9 additions & 9 deletions src/utils.js
Expand Up @@ -339,15 +339,15 @@ ko.utils = new (function () {
}
})();

goog.exportSymbol('ko.utils', ko.utils);
goog.exportSymbol('ko.utils.arrayMap', ko.utils.arrayMap);
goog.exportSymbol('ko.utils.arrayForEach', ko.utils.arrayForEach);
goog.exportSymbol('ko.utils.arrayFirst', ko.utils.arrayFirst);
goog.exportSymbol('ko.utils.arrayFilter', ko.utils.arrayFilter);
goog.exportSymbol('ko.utils.getFormFields', ko.utils.getFormFields);
goog.exportSymbol('ko.utils.postJson', ko.utils.postJson);
goog.exportSymbol('ko.utils.triggerEvent', ko.utils.triggerEvent);
goog.exportSymbol('ko.utils.unwrapObservable', ko.utils.unwrapObservable);
ko.exportSymbol('ko.utils', ko.utils);
ko.exportSymbol('ko.utils.arrayMap', ko.utils.arrayMap);
ko.exportSymbol('ko.utils.arrayForEach', ko.utils.arrayForEach);
ko.exportSymbol('ko.utils.arrayFirst', ko.utils.arrayFirst);
ko.exportSymbol('ko.utils.arrayFilter', ko.utils.arrayFilter);
ko.exportSymbol('ko.utils.getFormFields', ko.utils.getFormFields);
ko.exportSymbol('ko.utils.postJson', ko.utils.postJson);
ko.exportSymbol('ko.utils.triggerEvent', ko.utils.triggerEvent);
ko.exportSymbol('ko.utils.unwrapObservable', ko.utils.unwrapObservable);

if (!Function.prototype['bind']) {
// Function.prototype.bind is a standard part of ECMAScript 5th Edition (December 2009, http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-262.pdf)
Expand Down

0 comments on commit a5640ff

Please sign in to comment.