// ========================================================================== // Project: SproutCore Costello - Property Observing Library // Copyright: ©2006-2011 Strobe Inc. and contributors. // Portions ©2008-2011 Apple Inc. All rights reserved. // License: Licensed under MIT license (see license.js) // ========================================================================== /** @class */ SC.Function = /** @scope SC.Function.prototype */{ /** @see Function.prototype.property */ property: function (fn, keys) { fn.dependentKeys = SC.$A(keys); var guid = SC.guidFor(fn); fn.cacheKey = "__cache__" + guid; fn.lastSetValueKey = "__lastValue__" + guid; fn.isProperty = true; return fn; }, /** @see Function.prototype.cacheable */ cacheable: function (fn, aFlag) { fn.isProperty = true; // also make a property just in case if (!fn.dependentKeys) fn.dependentKeys = []; fn.isCacheable = (aFlag === undefined) ? true : aFlag; return fn; }, /** @see Function.prototype.idempotent */ idempotent: function (fn, aFlag) { fn.isProperty = true; // also make a property just in case if (!fn.dependentKeys) this.dependentKeys = []; fn.isVolatile = (aFlag === undefined) ? true : aFlag; return fn; }, /** @see Function.prototype.enhance */ enhance: function (fn) { fn.isEnhancement = true; return fn; }, /** @see Function.prototype.observes */ observes: function (fn, propertyPaths) { // sort property paths into local paths (i.e just a property name) and // full paths (i.e. those with a . or * in them) var loc = propertyPaths.length, local = null, paths = null; while (--loc >= 0) { var path = propertyPaths[loc]; // local if ((path.indexOf('.') < 0) && (path.indexOf('*') < 0)) { if (!local) local = fn.localPropertyPaths = []; local.push(path); // regular } else { if (!paths) paths = fn.propertyPaths = []; paths.push(path); } } return fn; } };