An alternative is to modify the original Caja code. On Jan 15, 2008 9:46 AM, Cassie <[EMAIL PROTECTED]> wrote:
> It is because of IntelliJ, it automatically goes through and deletes all > the > extra spaces at the end of every line. Some people really like getting rid > of all the spaces so I just had it on by default. Most files won't have > this > many empty diff lines but caja.js (copied from the code.google.com caja > project) was apparently edited by someone who didn't have this feature > turned on. > > I think I can modify IntelliJ to only change lines I modify, rather than > all. But it would be better if we could just have smarter diffs. > > Does anyone know how to make the diffs less sensitive to whitespace > changes? > Thanks. > > - Cassie > > > On Mon, Jan 14, 2008 at 9:12 PM, Bruno Bowden <[EMAIL PROTECTED]> wrote: > > > Cassie - there's lots of no-op changes in your diff. Probably line > ending > > changes. Though harmless it makes it harder to read the diff. Do what's > > causing it and how it can be avoided in the future? > > > > Examples: > > > > -// > > +// > > .... > > -// translator. This module exports two globals: > > +// translator. This module exports two globals: > > > > On Jan 14, 2008 5:30 PM, <[EMAIL PROTECTED]> wrote: > > > > > Author: doll > > > Date: Mon Jan 14 17:30:24 2008 > > > New Revision: 611991 > > > > > > URL: http://svn.apache.org/viewvc?rev=611991&view=rev > > > Log: > > > Removed accidental window.console.log lines in opensocial js. Updated > > > caja.js with a version that understand the Number constructor. > > > > > > Modified: > > > incubator/shindig/trunk/features/caja/caja.js > > > > > incubator/shindig/trunk/features/opensocial-samplecontainer/feature.xml > > > > > > > > > > incubator/shindig/trunk/features/opensocial-samplecontainer/statefileparser.js > > > > > > Modified: incubator/shindig/trunk/features/caja/caja.js > > > URL: > > > > > > http://svn.apache.org/viewvc/incubator/shindig/trunk/features/caja/caja.js?rev=611991&r1=611990&r2=611991&view=diff > > > > > > > > > ============================================================================== > > > --- incubator/shindig/trunk/features/caja/caja.js (original) > > > +++ incubator/shindig/trunk/features/caja/caja.js Mon Jan 14 17:30:24 > > 2008 > > > @@ -1,5 +1,5 @@ > > > // Copyright (C) 2007 Google Inc. > > > -// > > > +// > > > // Licensed under the Apache License, Version 2.0 (the "License"); > > > // you may not use this file except in compliance with the License. > > > // You may obtain a copy of the License at > > > @@ -15,7 +15,7 @@ > > > > > > // This module is the Caja runtime library. It is written in > > > // Javascript, not Caja, and would be rejected by the Caja > > > -// translator. This module exports two globals: > > > +// translator. This module exports two globals: > > > // * "___" for use by the output of the Caja translator and by some > > > // other untranslated Javascript code. > > > // * "caja" providing some common services to the Caja programmer. > > > @@ -32,9 +32,9 @@ > > > > > > //////////////////////////////////////////////////////////////////////// > > > > > > if (Array.prototype.indexOf === undefined) { > > > - /** > > > + /** > > > * Returns the first index at which the specimen is found (by > > > - * "===") or -1 if none. > > > + * "===") or -1 if none. > > > */ > > > Array.prototype.indexOf = function(specimen) { > > > var len = this.length; > > > @@ -48,9 +48,9 @@ > > > } > > > > > > if (Array.prototype.lastIndexOf === undefined) { > > > - /** > > > + /** > > > * Returns the last index at which the specimen is found (by > > > - * "===") or -1 if none. > > > + * "===") or -1 if none. > > > */ > > > Array.prototype.lastIndexOf = function(specimen) { > > > for (var i = this.length; --i >= 0; ) { > > > @@ -101,16 +101,16 @@ > > > // like HTMLDivElement. > > > > > > (function(global) { > > > - > > > + > > > > > //////////////////////////////////////////////////////////////////////// > > > // Diagnostics and condition enforcement > > > > > //////////////////////////////////////////////////////////////////////// > > > - > > > + > > > /** > > > - * The initial default ___.log(str) does nothing. > > > + * The initial default ___.log(str) does nothing. > > > * <p> > > > * Note: JavaScript has no macros, so even in the "does nothing" > > > - * case, remember that the arguments are still evaluated. > > > + * case, remember that the arguments are still evaluated. > > > */ > > > var myLogFunc_ = function(str) {}; > > > > > > @@ -130,7 +130,7 @@ > > > function log(str) { myLogFunc_(String(str)); } > > > > > > > > > - /** > > > + /** > > > * Throw, and optionally log, an error whose message is the > > > * concatentation of the arguments. > > > * <p> > > > @@ -143,8 +143,8 @@ > > > log(message); > > > throw new Error(message); > > > } > > > - > > > - /** > > > + > > > + /** > > > * Like an assert that can't be turned off. > > > * <p> > > > * Either returns true (on success) or throws (on failure). The > > > @@ -159,10 +159,10 @@ > > > * </pre> > > > */ > > > function enforce(test, var_args) { > > > - return test || fail.apply({}, > > > + return test || fail.apply({}, > > > Array.prototype.slice.call(arguments, > 1)); > > > } > > > - > > > + > > > /** > > > * Enforces <tt>typeof specimen === typename</tt>, in which case > > > * specimen is returned. > > > @@ -179,7 +179,7 @@ > > > } > > > return specimen; > > > } > > > - > > > + > > > /** > > > * Enforces that specimen is a non-negative integer within the range > > > * of exactly representable consecutive integers, in which case > > > @@ -205,13 +205,13 @@ > > > } > > > return specimen; > > > } > > > - > > > + > > > > > //////////////////////////////////////////////////////////////////////// > > > // Privileged fault handlers > > > > > //////////////////////////////////////////////////////////////////////// > > > - > > > + > > > /** > > > - * > > > + * > > > */ > > > var myKeeper_ = { > > > > > > @@ -221,29 +221,29 @@ > > > toString: function() { return '<Logging Keeper>'; }, > > > > > > /** > > > - * > > > + * > > > */ > > > handleRead: function(obj, name) { > > > log('Not readable: (' + obj + ').' + name); > > > - return undefined; > > > + return undefined; > > > }, > > > > > > /** > > > - * > > > + * > > > */ > > > handleCall: function(obj, name, args) { > > > fail('Not callable: (', obj, ').', name); > > > }, > > > > > > /** > > > - * > > > + * > > > */ > > > handleSet: function(obj, name, val) { > > > fail('Not settable: (', obj, ').', name); > > > }, > > > > > > /** > > > - * > > > + * > > > */ > > > handleDelete: function(obj, name) { > > > fail('Not deletable: (', obj, ').', name); > > > @@ -251,17 +251,17 @@ > > > }; > > > > > > /** > > > - * > > > + * > > > */ > > > function getKeeper() { return myKeeper_; } > > > > > > /** > > > - * > > > + * > > > */ > > > function setKeeper(newKeeper) { myKeeper_ = newKeeper; } > > > > > > /** > > > - * > > > + * > > > */ > > > Object.prototype.handleRead___ = function(name) { > > > var handlerName = name + '_getter___'; > > > @@ -272,7 +272,7 @@ > > > }; > > > > > > /** > > > - * > > > + * > > > */ > > > Object.prototype.handleCall___ = function(name, args) { > > > var handlerName = name + '_handler___'; > > > @@ -283,7 +283,7 @@ > > > }; > > > > > > /** > > > - * > > > + * > > > */ > > > Object.prototype.handleSet___ = function(name, val) { > > > var handlerName = name + '_setter___'; > > > @@ -294,7 +294,7 @@ > > > }; > > > > > > /** > > > - * > > > + * > > > */ > > > Object.prototype.handleDelete___ = function(name) { > > > var handlerName = name + '_deleter___'; > > > @@ -303,15 +303,15 @@ > > > } > > > return myKeeper_.handleDelete(this, name); > > > }; > > > - > > > + > > > > > //////////////////////////////////////////////////////////////////////// > > > // Overriding some very basic primordial methods > > > > > //////////////////////////////////////////////////////////////////////// > > > - > > > + > > > /** > > > * Returns true only if we can call > > > * Object.prototype.hasOwnProperty on this object without > > > - * exploding. > > > + * exploding. > > > * <p> > > > * On Firefox, it seems that calling hasOwnProperty on an > > > * HTMLDivElement sometimes causes an > > > @@ -320,7 +320,7 @@ > > > * SECURITY BUG STOPGAP TODO(erights) > > > */ > > > var canCallHasOwnProperty = function(obj) { return true; }; > > > - > > > + > > > // When we're in a non-browser environment, such that there isn't > > > // a global HTMLDivElement, then we don't need to worry about > > > // this bug. > > > @@ -329,45 +329,45 @@ > > > return !(obj instanceof global.HTMLDivElement); > > > }; > > > } > > > - > > > + > > > var originalHOP_ = Object.prototype.hasOwnProperty; > > > - > > > + > > > /** > > > * <tt>hasOwnProp(obj.prop)</tt> means what > > > * <tt>obj.hasOwnProperty(prop)</tt> would normally mean in an > > > * unmodified Javascript system. > > > */ > > > - function hasOwnProp(obj, name) { > > > + function hasOwnProp(obj, name) { > > > var t = typeof obj; > > > - if (t !== 'object' && t !== 'function') { > > > - return false; > > > + if (t !== 'object' && t !== 'function') { > > > + return false; > > > } > > > if (canCallHasOwnProperty(obj)) { > > > - // Fails in Firefox for some DOM objects intermittently(?!) > > > + // Fails in Firefox for some DOM objects intermittently(?!) > > > // with "Illegal operation on WrappedNative prototype object". > > > // For these, canCallHasOwnProperty must say false. > > > - return originalHOP_.call(obj, name); > > > + return originalHOP_.call(obj, name); > > > } else { > > > return false; > > > } > > > } > > > - > > > + > > > > > //////////////////////////////////////////////////////////////////////// > > > // walking prototype chain, checking JSON containers > > > > > //////////////////////////////////////////////////////////////////////// > > > - > > > + > > > /** > > > - * Does str end with suffix? > > > + * Does str end with suffix? > > > */ > > > function endsWith(str, suffix) { > > > enforceType(str, 'string'); > > > enforceType(suffix, 'string'); > > > var strLen = str.length; > > > var sufLen = suffix.length; > > > - return strLen >= sufLen && > > > + return strLen >= sufLen && > > > (str.substring(strLen-sufLen, strLen) === suffix); > > > } > > > - > > > + > > > /** > > > * Returns the 'constructor' property of obj's prototype. > > > * <p> > > > @@ -389,12 +389,12 @@ > > > return undefined; > > > } > > > // The following test will initially return false in IE > > > - if (hasOwnProp(obj, '__proto__')) { > > > + if (hasOwnProp(obj, '__proto__')) { > > > if (obj.__proto__ === null) { return undefined; } > > > - return obj.__proto__.constructor; > > > + return obj.__proto__.constructor; > > > } > > > var result; > > > - if (!hasOwnProp(obj, 'constructor')) { > > > + if (!hasOwnProp(obj, 'constructor')) { > > > result = obj.constructor; > > > } else { > > > var oldConstr = obj.constructor; > > > @@ -408,7 +408,7 @@ > > > } > > > return result; > > > } > > > - > > > + > > > /** > > > * A JSON container is an object whose direct constructor is > > > * Object or Array. > > > @@ -420,7 +420,7 @@ > > > var constr = directConstructor(obj); > > > return constr === Object || constr === Array; > > > } > > > - > > > + > > > /** > > > * If obj is frozen, Caja code cannot directly assign to > > > * properties of obj, nor directly add or delete properties to > > > @@ -433,14 +433,14 @@ > > > * If typeof <tt>obj</tt> is neither 'object' nor 'function', then > > > * it's currently considered frozen. > > > */ > > > - function isFrozen(obj) { > > > + function isFrozen(obj) { > > > var t = typeof obj; > > > - if (t !== 'object' && t !== 'function') { > > > - return true; > > > + if (t !== 'object' && t !== 'function') { > > > + return true; > > > } > > > - return hasOwnProp(obj, '___FROZEN___'); > > > + return hasOwnProp(obj, '___FROZEN___'); > > > } > > > - > > > + > > > /** > > > * Mark obj as frozen so that Caja code cannot directly assign to > its > > > * properties. > > > @@ -459,9 +459,9 @@ > > > // badFlags are names of properties we need to turn off. > > > // We accumulate these first, so that we're not in the midst of a > > > // for/in loop on obj while we're deleting properties from obj. > > > - var badFlags = []; > > > + var badFlags = []; > > > for (var k in obj) { > > > - if (endsWith(k, '_canSet___') || endsWith(k, '_canDelete___')) > { > > > + if (endsWith(k, '_canSet___') || endsWith(k, '_canDelete___')) > { > > > if (obj[k]) { > > > badFlags.push(k); > > > } > > > @@ -483,7 +483,7 @@ > > > // for a future optimization, where the > > > // prototype can record as canSet those > > > // properties that appear in instances that > > > - // inherit from this prototype. > > > + // inherit from this prototype. > > > obj[flag] = false; > > > } > > > } > > > @@ -494,7 +494,7 @@ > > > } > > > return obj; > > > } > > > - > > > + > > > /** > > > * Like primFreeze(obj), but applicable only to JSON containers. > > > */ > > > @@ -504,7 +504,7 @@ > > > } > > > return primFreeze(obj); > > > } > > > - > > > + > > > /** > > > * Makes a mutable copy of a JSON container. > > > * <p> > > > @@ -520,19 +520,19 @@ > > > })); > > > return result; > > > } > > > - > > > + > > > /** > > > * A snapshot of a JSON container is a frozen copy of that > > > - * container. > > > + * container. > > > */ > > > function snapshot(obj) { > > > return primFreeze(copy(obj)); > > > } > > > - > > > + > > > > > //////////////////////////////////////////////////////////////////////// > > > // Accessing property attributes > > > > > //////////////////////////////////////////////////////////////////////// > > > - > > > + > > > /** Tests whether the fast-path canRead flag is set. */ > > > function canRead(obj, name) { return !!obj[name + '_canRead___']; > } > > > /** Tests whether the fast-path canEnum flag is set. */ > > > @@ -543,33 +543,33 @@ > > > function canSet(obj, name) { return !!obj[name + '_canSet___']; } > > > /** Tests whether the fast-path canDelete flag is set. */ > > > function canDelete(obj, name) { return !!obj[name + > '_canDelete___']; > > } > > > - > > > - /** > > > + > > > + /** > > > * Sets the fast-path canRead flag. > > > * <p> > > > * The various <tt>allow*</tt> functions are called externally by > > > * Javascript code to express whitelisting taming decisions. And > > > * they are called internally to memoize decisions arrived at by > > > - * other means. > > > + * other means. > > > */ > > > - function allowRead(obj, name) { > > > - obj[name + '_canRead___'] = true; > > > + function allowRead(obj, name) { > > > + obj[name + '_canRead___'] = true; > > > } > > > - > > > + > > > /** allowEnum implies allowRead */ > > > - function allowEnum(obj, name) { > > > + function allowEnum(obj, name) { > > > allowRead(obj, name); > > > obj[name + '_canEnum___'] = true; > > > } > > > - > > > - /** > > > + > > > + /** > > > * Simple functions should callable and readable, but methods > > > * should only be callable. > > > */ > > > - function allowCall(obj, name) { > > > - obj[name + '_canCall___'] = true; > > > + function allowCall(obj, name) { > > > + obj[name + '_canCall___'] = true; > > > } > > > - > > > + > > > /** > > > * allowSet implies allowEnum and allowRead. > > > */ > > > @@ -580,10 +580,10 @@ > > > allowEnum(obj, name); > > > obj[name + '_canSet___'] = true; > > > } > > > - > > > + > > > /** > > > * BUG TODO(erights): allowDelete is not yet specified or > > > - * implemented. > > > + * implemented. > > > */ > > > function allowDelete(obj, name) { > > > if (isFrozen(obj)) { > > > @@ -592,16 +592,16 @@ > > > fail('TODO(erights): allowDelete() not yet implemented'); > > > obj[name + '_canDelete___'] = true; > > > } > > > - > > > + > > > > > //////////////////////////////////////////////////////////////////////// > > > // Classifying functions > > > > > //////////////////////////////////////////////////////////////////////// > > > - > > > + > > > function isCtor(constr) { return !!constr.___CONSTRUCTOR___; } > > > function isMethod(meth) { return '___METHOD_OF___' in meth; } > > > function isSimpleFunc(fun) { return !!fun.___SIMPLE_FUNC___; } > > > - > > > - /** > > > + > > > + /** > > > * Mark constr as a constructor. > > > * <p> > > > * If opt_Sup is provided, set constr.Super = opt_Sup. > > > @@ -610,7 +610,7 @@ > > > * method(), or simpleFunc(). Each of these checks that the > > > * function hasn't already been classified by any of the others. A > > > * function which has not been so classified is an <i>untamed > > > - * function</i>. > > > + * function</i>. > > > * <p> > > > * opt_name, if provided, should be the name of the constructor > > > * function. Currently, this is used only to generate friendlier > > > @@ -640,9 +640,9 @@ > > > } > > > return constr; // translator freezes constructor later > > > } > > > - > > > - /** > > > - * Mark meth as a method of instances of constr. > > > + > > > + /** > > > + * Mark meth as a method of instances of constr. > > > * <p> > > > * opt_name, if provided, should be the message name associated > > > * with the method. Currently, this is used only to generate > > > @@ -659,11 +659,11 @@ > > > meth.___METHOD_OF___ = asCtorOnly(constr); > > > return primFreeze(meth); > > > } > > > - > > > - /** > > > + > > > + /** > > > * Mark fun as a simple function. > > > * <p> > > > - * opt_name, if provided, should be the name of the > > > + * opt_name, if provided, should be the name of the > > > * function. Currently, this is used only to generate friendlier > > > * error messages. > > > */ > > > @@ -680,58 +680,64 @@ > > > fun.call_canCall___ = true; > > > return fun; // translator freezes fun later > > > } > > > - > > > + > > > /** This "Only" form doesn't freeze */ > > > function asCtorOnly(constr) { > > > - if (isCtor(constr) || isSimpleFunc(constr)) { > > > - return constr; > > > + if (isCtor(constr) || isSimpleFunc(constr)) { > > > + return constr; > > > } > > > - > > > + > > > enforceType(constr, 'function'); > > > if (isMethod(constr)) { > > > fail("Methods can't be called as constructors: ", constr); > > > } > > > fail("Untamed functions can't be called as constructors: ", > constr); > > > } > > > - > > > + > > > /** Only constructors and simple functions can be called as > > constructors > > > */ > > > function asCtor(constr) { > > > - return primFreeze(asCtorOnly(constr)); > > > + return primFreeze(asCtorOnly(constr)); > > > } > > > - > > > + > > > /** Only methods and simple functions can be called as methods */ > > > function asMethod(meth) { > > > - if (isSimpleFunc(meth) || isMethod(meth)) { > > > + if (isSimpleFunc(meth) || isMethod(meth)) { > > > if (!isFrozen(meth)) { > > > fail('internal: non-frozen func stored as method: ', meth); > > > } > > > - return meth; > > > + return meth; > > > } > > > - > > > + > > > enforceType(meth, 'function'); > > > if (isCtor(meth)) { > > > fail("Constructors can't be called as methods: ", meth); > > > } > > > fail("Untamed functions can't be called as methods: ", meth); > > > } > > > - > > > - /** Only simple functions can be called as simple functions */ > > > - function asSimpleFunc(fun) { > > > - if (isSimpleFunc(fun)) { > > > - return primFreeze(fun); > > > - } > > > - > > > - enforceType(fun, 'function'); > > > - if (isCtor(fun)) { > > > - fail("Constructors can't be called as simple functions: ", > fun); > > > - } > > > - if (isMethod(fun)) { > > > - fail("Methods can't be called as simple functions: ", fun); > > > - } > > > - fail("Untamed functions can't be called as simple functions: ", > > fun); > > > - } > > > - > > > - /** > > > + > > > + /** > > > + * Only simple functions or primitive casts can be called > > > + * as simple functions. > > > + */ > > > + function asSimpleFunc(fun) { > > > + if (isSimpleFunc(fun)) { > > > + return primFreeze(fun); > > > + } > > > + > > > + enforceType(fun, 'function'); > > > + if (isCtor(fun)) { > > > + if (fun === String || fun === Number || fun === Boolean) { > > > + return fun; > > > + } > > > + fail("Constructors can't be called as simple functions: ", fun); > > > + } > > > + if (isMethod(fun)) { > > > + fail("Methods can't be called as simple functions: ", fun); > > > + } > > > + fail("Untamed functions can't be called as simple functions: ", > > fun); > > > + } > > > + > > > + /** > > > * Sets constr.prototype[name] = member. > > > * <p> > > > * If member is a method of constr, make it callable. > > > @@ -758,13 +764,13 @@ > > > } > > > proto[name] = member; > > > } > > > - > > > + > > > > > //////////////////////////////////////////////////////////////////////// > > > // Accessing properties > > > > > //////////////////////////////////////////////////////////////////////// > > > - > > > - /** > > > - * Can a constructed Caja object read this property on itself? > > > + > > > + /** > > > + * Can a constructed Caja object read this property on itself? > > > * <p> > > > * Can a Caja method whose <tt>this</tt> is bound to <tt>that</tt> > > > * read its own <tt>name</tt> property? For properties added to > > > @@ -778,8 +784,8 @@ > > > if (endsWith(name, '__')) { return false; } > > > return canRead(that, name); > > > } > > > - > > > - /** > > > + > > > + /** > > > * A constructed Caja object's attempt to read this property on > > > * itself. > > > * <p> > > > @@ -789,9 +795,9 @@ > > > name = String(name); > > > return canReadProp(that, name) ? that[name] : that.handleRead__ > > > _(name); > > > } > > > - > > > - /** > > > - * Can a Caja client of <tt>obj</tt> read its <name> property? > > > + > > > + /** > > > + * Can a Caja client of <tt>obj</tt> read its <name> property? > > > * <p> > > > * If the property is Internal (i.e. ends in an '_'), then no. > > > * If the property was defined by Caja code, then yes. If it was > > > @@ -807,7 +813,7 @@ > > > allowRead(obj, name); // memoize > > > return true; > > > } > > > - > > > + > > > /** > > > * Caja code attempting to read a property on something besides > > > * <tt>this</tt>. > > > @@ -818,7 +824,7 @@ > > > name = String(name); > > > return canReadPub(obj, name) ? obj[name] : obj.handleRead__ > _(name); > > > } > > > - > > > + > > > /** > > > * Can "innocent" code enumerate the named property on this object? > > > * <p> > > > @@ -844,9 +850,9 @@ > > > if (endsWith(name, '___')) { return false; } > > > return true; > > > } > > > - > > > - /** > > > - * Would a Caja for/in loop on <tt>this</tt> see this name? > > > + > > > + /** > > > + * Would a Caja for/in loop on <tt>this</tt> see this name? > > > * <p> > > > * For properties defined in Caja, this is generally the same as > > > * canReadProp. Otherwise according to whitelisting. > > > @@ -856,9 +862,9 @@ > > > if (endsWith(name, '__')) { return false; } > > > return canEnum(that, name); > > > } > > > - > > > - /** > > > - * Would a Caja for/in loop by a client of obj see this name? > > > + > > > + /** > > > + * Would a Caja for/in loop by a client of obj see this name? > > > * <p> > > > * For properties defined in Caja, this is generally the same as > > > * canReadProp. Otherwise according to whitelisting. > > > @@ -872,7 +878,7 @@ > > > allowEnum(obj, name); // memoize > > > return true; > > > } > > > - > > > + > > > /** > > > * Like canEnumPub, but allows only non-inherited properties. > > > */ > > > @@ -880,14 +886,14 @@ > > > name = String(name); > > > return hasOwnProp(obj, name) && canEnumPub(obj, name); > > > } > > > - > > > + > > > /** > > > * Inside a <tt>caja.each()</tt>, the body function can terminate > > > * early, as if with a conventional <tt>break;</tt>, by doing a > > > * <pre>return caja.BREAK;</pre> > > > */ > > > var BREAK = {}; > > > - > > > + > > > /** > > > * For each sensible key/value pair in obj, call fn with that > > > * pair. > > > @@ -914,7 +920,7 @@ > > > } > > > } > > > } > > > - > > > + > > > /** > > > * Can this be called as an internal method? > > > * <p> > > > @@ -924,7 +930,7 @@ > > > * which we can memoize. > > > * <p> > > > * SECURITY HAZARD TODO(erights): If a settable property is > > > - * first set to a > > > + * first set to a > > > * simple function, which is then called, memoizing canCall, and > > > * then set to some other kind of function which leaked (such as > > > * an untamed function), then that other function can be > > > @@ -943,7 +949,7 @@ > > > * after a set will re-check the value to be called. > > > * <p> > > > * This plan will need to be thought through again when we > > > - * implement property deletion. > > > + * implement property deletion. > > > */ > > > function canCallProp(that, name) { > > > name = String(name); > > > @@ -955,7 +961,7 @@ > > > allowCall(that, name); // memoize > > > return true; > > > } > > > - > > > + > > > /** > > > * A Caja method tries to call one of its Internal methods. > > > */ > > > @@ -968,7 +974,7 @@ > > > return that.handleCall___(name, args); > > > } > > > } > > > - > > > + > > > /** > > > * Like canCallProp(), with differences that parallel the > > > * differences between canReadProp vs canReadPub. > > > @@ -983,7 +989,7 @@ > > > allowCall(obj, name); // memoize > > > return true; > > > } > > > - > > > + > > > /** > > > * A client of obj tries to call one of its methods. > > > */ > > > @@ -996,8 +1002,8 @@ > > > return obj.handleCall___(name, args); > > > } > > > } > > > - > > > - /** > > > + > > > + /** > > > * Can a method of a Caja constructed object directly assign to > > > * this property of its object? > > > * <p> > > > @@ -1009,7 +1015,7 @@ > > > if (canSet(that, name)) { return true; } > > > return !isFrozen(that); > > > } > > > - > > > + > > > /** > > > * A Caja method tries to assign to this property of its object. > > > */ > > > @@ -1023,12 +1029,12 @@ > > > return that.handleSet___(name, val); > > > } > > > } > > > - > > > + > > > /** > > > * Can a client of obj directly assign to its name property? > > > * <p> > > > * If this property is Internal (i.e., ends with a '_') or if this > > > - * object is frozen, then no. > > > + * object is frozen, then no. > > > * If this property is not Internal and was defined by Caja code, > > > * then yes. If the object is a JSON container, then > > > * yes. Otherwise according to whitelisting decisions. > > > @@ -1045,7 +1051,7 @@ > > > if (canSet(obj, name)) { return true; } > > > return !isFrozen(obj) && isJSONContainer(obj); > > > } > > > - > > > + > > > /** A client of obj attempts to assign to one of its properties. */ > > > function setPub(obj, name, val) { > > > name = String(name); > > > @@ -1057,22 +1063,22 @@ > > > return obj.handleSet___(name, val); > > > } > > > } > > > - > > > + > > > /** > > > * Can a Caja constructed object delete the named property? > > > * <p> > > > * BUG TODO(erights): This is not yet supported. The precise > > > * enabling conditions are not yet determined, as is the implied > > > - * bookkeeping. > > > + * bookkeeping. > > > */ > > > function canDeleteProp(that, name) { > > > fail('TODO(erights): deletion not yet supported'); > > > return false; > > > } > > > - > > > + > > > /** > > > * A Caja constructed object attempts to delete one of its own > > > - * properties. > > > + * properties. > > > * <p> > > > * BUG TODO(erights): This is not yet supported. The precise > > > * enabling conditions are not yet determined, as is the implied > > > @@ -1088,26 +1094,26 @@ > > > return that.handleDelete___(name); > > > } > > > } > > > - > > > + > > > /** > > > * Can a client of obj delete the named property? > > > * <p> > > > * BUG TODO(erights): This is not yet supported. The precise > > > * enabling conditions are not yet determined, as is the implied > > > - * bookkeeping. > > > + * bookkeeping. > > > */ > > > function canDeletePub(obj, name) { > > > fail('TODO(erights): deletion not yet supported'); > > > return false; > > > } > > > - > > > + > > > /** > > > * A client of obj can only delete a property of obj if obj is a > > > * non-frozen JSON container. > > > * <p> > > > * BUG TODO(erights): This is not yet supported. The precise > > > * enabling conditions are not yet determined, as is the implied > > > - * bookkeeping. > > > + * bookkeeping. > > > */ > > > function deletePub(obj, name) { > > > name = String(name); > > > @@ -1122,11 +1128,11 @@ > > > return obj.handleDelete___(name); > > > } > > > } > > > - > > > + > > > > > //////////////////////////////////////////////////////////////////////// > > > // Other > > > > > //////////////////////////////////////////////////////////////////////// > > > - > > > + > > > /** > > > * This returns a frozen array copy of the original array or > > > * array-like object. > > > @@ -1142,7 +1148,7 @@ > > > function args(original) { > > > return primFreeze(Array.prototype.slice.call(original, 0)); > > > } > > > - > > > + > > > /** > > > * > > > */ > > > @@ -1151,7 +1157,7 @@ > > > setMember(sub, mname, member); > > > })); > > > } > > > - > > > + > > > /** > > > * Provides a shorthand for a class-like declaration of a fresh > > > * Caja constructor. > > > @@ -1163,7 +1169,7 @@ > > > * opt_statics added as members to sub. > > > * <p> > > > * TODO(erights): return a builder object that allows further > > > - * initialization. > > > + * initialization. > > > */ > > > function def(sub, opt_Sup, opt_members, opt_statics) { > > > var sup = opt_Sup || Object; > > > @@ -1173,21 +1179,21 @@ > > > fail('The static name "Super" is reserved ', > > > 'for the super-constructor'); > > > } > > > - > > > + > > > ctor(sub, sup); > > > function PseudoSuper() {} > > > PseudoSuper.prototype = sup.prototype; > > > sub.prototype = new PseudoSuper(); > > > sub.prototype.constructor = sub; > > > - > > > + > > > setMemberMap(sub, members); > > > each(statics, simpleFunc(function(sname, staticMember) { > > > setPub(sub, sname, staticMember); > > > })); > > > - > > > + > > > // translator freezes sub and sub.prototype later. > > > } > > > - > > > + > > > > > //////////////////////////////////////////////////////////////////////// > > > // Taming mechanism > > > > > //////////////////////////////////////////////////////////////////////// > > > @@ -1195,7 +1201,7 @@ > > > /** > > > * Arrange to handle read-faults on <tt>obj[name]</tt> > > > * by calling <tt>getHandler()</tt> as a method on the faulted > > > - * object. > > > + * object. > > > * <p> > > > * In order for this fault-handler to get control, it's important > > > * that no one does a conflicting allowRead(). > > > @@ -1207,7 +1213,7 @@ > > > /** > > > * Arrange to handle call-faults on <tt>obj[name](args...)</tt> by > > > * calling <tt>applyHandler(args)</tt> as a method on the faulted > > > - * object. > > > + * object. > > > * <p> > > > * Note that <tt>applyHandler</tt> is called with a single argument, > > > * which is the list of arguments in the original call. > > > @@ -1223,10 +1229,10 @@ > > > /** > > > * Arrange to handle call-faults on <tt>obj[name](args...)</tt> by > > > * calling <tt>callHandler(args...)</tt> as a method on the faulted > > > - * object. > > > + * object. > > > * <p> > > > * Note that <tt>callHandler</tt> is called with the same arguments > > > - * as the original call. > > > + * as the original call. > > > * <p> > > > * In order for this fault-handler to get control, it's important > > > * that no one does a conflicting allowCall(), allowSimpleFunc(), or > > > @@ -1241,7 +1247,7 @@ > > > /** > > > * Arrange to handle set-faults on <tt>obj[name] = newValue</tt> by > > > * calling <tt>setHandler(newValue)</tt> as a method on the faulted > > > - * object. > > > + * object. > > > * <p> > > > * In order for this fault-handler to get control, it's important > > > * that no one does a conflicting allowSet(). > > > @@ -1252,7 +1258,7 @@ > > > > > > /** > > > * Arrange to handle delete-faults on <tt>delete obj[name]</tt> by > > > - * calling <tt>deleteHandler()</tt> as a method on the faulted > > object. > > > + * calling <tt>deleteHandler()</tt> as a method on the faulted > > object. > > > * <p> > > > * In order for this fault-handler to get control, it's important > > > * that no one does a conflicting allowDelete(). > > > @@ -1270,7 +1276,7 @@ > > > allowCall(obj, name); > > > allowRead(obj, name); > > > } > > > - > > > + > > > /** > > > * Whitelist constr.prototype[name] as a method that can be called > > > * on instances of constr. > > > @@ -1279,7 +1285,7 @@ > > > method(constr, constr.prototype[name], name); > > > allowCall(constr.prototype, name); > > > } > > > - > > > + > > > /** > > > * Virtually replace constr.prototype[name] with a fault-handler > > > * wrapper that first verifies that <tt>this</tt> isn't frozen. > > > @@ -1289,7 +1295,7 @@ > > > * mutation from violating Caja semantics. In order for this fault > > > * handler to get control, it's important that no one does an > > > * allowCall(), allowSimpleFunc(), or allowMethod() on the > > > - * original method. > > > + * original method. > > > */ > > > function allowMutator(constr, name) { > > > var original = constr.prototype[name]; > > > @@ -1300,7 +1306,7 @@ > > > return original.apply(this, args); > > > }); > > > } > > > - > > > + > > > /** > > > * Verifies that regexp is something that can appear as a > > > * parameter to a Javascript method that would use it in a match. > > > @@ -1315,7 +1321,7 @@ > > > } > > > } > > > } > > > - > > > + > > > /** > > > * A shorthand that happens to be useful here. > > > * <p> > > > @@ -1327,7 +1333,7 @@ > > > func2(arg1, arg2s[i]); > > > } > > > } > > > - > > > + > > > > > //////////////////////////////////////////////////////////////////////// > > > // Taming decisions > > > > > //////////////////////////////////////////////////////////////////////// > > > @@ -1340,8 +1346,8 @@ > > > 'abs', 'acos', 'asin', 'atan', 'atan2', 'ceil', 'cos', 'exp', > > 'floor', > > > 'log', 'max', 'min', 'pow', 'random', 'round', 'sin', 'sqrt', > 'tan' > > > ]); > > > - > > > - > > > + > > > + > > > ctor(Object, undefined, 'Object'); > > > all2(allowMethod, Object, [ > > > 'toString', 'toLocaleString', 'valueOf', 'isPrototypeOf' > > > @@ -1369,13 +1375,13 @@ > > > useCallHandler(Object.prototype, 'freeze_', function() { > > > return primFreeze(this); > > > }); > > > - > > > - > > > + > > > + > > > // SECURITY HAZARD TODO(erights): Seems dangerous, but doesn't add > > > - // risk. Or does it? > > > + // risk. Or does it? > > > ctor(Function, Object, 'Function'); > > > // SECURITY HAZARD TODO(erights): Seems dangerous, but doesn't add > > > - // risk. Or does it? > > > + // risk. Or does it? > > > allowRead(Function.prototype, 'prototype'); > > > > > > useCallHandler(Function.prototype, 'apply', function(that, realArgs) > { > > > @@ -1384,8 +1390,8 @@ > > > useCallHandler(Function.prototype, 'call', function(that, realArgs) > { > > > return asSimpleFunc(this).apply(that, realArgs); > > > }); > > > - > > > - > > > + > > > + > > > ctor(Array, Object, 'Array'); > > > all2(allowMethod, Array, [ > > > 'concat', 'join', 'slice', 'indexOf', 'lastIndexOf' > > > @@ -1393,8 +1399,8 @@ > > > all2(allowMutator, Array, [ > > > 'pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift' > > > ]); > > > - > > > - > > > + > > > + > > > ctor(String, Object, 'String'); > > > allowSimpleFunc(String, 'fromCharCode'); > > > all2(allowMethod, String, [ > > > @@ -1406,7 +1412,7 @@ > > > enforceMatchable(regexp); > > > return this.match(regexp); > > > }); > > > - useCallHandler(String.prototype, 'replace', function(searchValue, > > > + useCallHandler(String.prototype, 'replace', function(searchValue, > > > replaceValue) { > > > enforceMatchable(searchValue); > > > return this.replace(searchValue, replaceValue); > > > @@ -1419,11 +1425,11 @@ > > > enforceMatchable(separator); > > > return this.split(separator, limit); > > > }); > > > - > > > - > > > + > > > + > > > ctor(Boolean, Object, 'Boolean'); > > > - > > > - > > > + > > > + > > > ctor(Number, Object, 'Number'); > > > all2(allowRead, Number, [ > > > 'MAX_VALUE', 'MIN_VALUE', 'NaN', > > > @@ -1432,18 +1438,18 @@ > > > all2(allowMethod, Number, [ > > > 'toFixed', 'toExponential', 'toPrecision' > > > ]); > > > - > > > - > > > + > > > + > > > ctor(Date, Object, 'Date'); > > > allowSimpleFunc(Date, 'parse'); > > > allowSimpleFunc(Date, 'UTC'); > > > - > > > + > > > all2(allowMethod, Date, [ > > > 'toDateString', 'toTimeString', 'toUTCString', > > > 'toLocaleString', 'toLocaleDateString', 'toLocaleTimeString', > > > 'toISOString', > > > 'getDay', 'getUTCDay', 'getTimezoneOffset', > > > - > > > + > > > 'getTime', 'getFullYear', 'getUTCFullYear', 'getMonth', > > 'getUTCMonth', > > > 'getDate', 'getUTCDate', 'getHours', 'getUTCHours', > > > 'getMinutes', 'getUTCMinutes', 'getSeconds', 'getUTCSeconds', > > > @@ -1455,17 +1461,17 @@ > > > 'setMinutes', 'setUTCMinutes', 'setSeconds', 'setUTCSeconds', > > > 'setMilliseconds', 'setUTCMilliseconds' > > > ]); > > > - > > > - > > > + > > > + > > > ctor(RegExp, Object, 'RegExp'); > > > allowMutator(RegExp, 'exec'); > > > allowMutator(RegExp, 'test'); > > > - > > > + > > > all2(allowRead, RegExp, [ > > > 'source', 'global', 'ignoreCase', 'multiline', 'lastIndex' > > > ]); > > > - > > > - > > > + > > > + > > > ctor(Error, Object, 'Error'); > > > allowRead(Error, 'name'); > > > allowRead(Error, 'message'); > > > @@ -1475,23 +1481,23 @@ > > > ctor(SyntaxError, Error, 'SyntaxError'); > > > ctor(TypeError, Error, 'TypeError'); > > > ctor(URIError, Error, 'URIError'); > > > - > > > - > > > + > > > + > > > var sharedOuters; > > > - > > > + > > > > > //////////////////////////////////////////////////////////////////////// > > > // Module loading > > > > > //////////////////////////////////////////////////////////////////////// > > > - > > > + > > > var myNewModuleHandler; > > > - > > > + > > > /** > > > * Gets the current module handler. > > > */ > > > function getNewModuleHandler() { > > > return myNewModuleHandler; > > > } > > > - > > > + > > > /** > > > * Registers a new-module-handler, to be called back when a new > > > * module is loaded. > > > @@ -1505,14 +1511,14 @@ > > > function setNewModuleHandler(newModuleHandler) { > > > myNewModuleHandler = newModuleHandler; > > > } > > > - > > > + > > > /** > > > * A new-module-handler which does nothing. > > > */ > > > var ignoreNewModule = freeze({ > > > handle: simpleFunc(function(newModule){}) > > > }); > > > - > > > + > > > /** > > > * Makes and returns a fresh "normal" module handler whose outers > > > * are initialized to a copy of the sharedOuters. > > > @@ -1532,13 +1538,13 @@ > > > }) > > > }); > > > } > > > - > > > + > > > /** > > > * A module is a plugin-maker function. > > > * <p> > > > * loadModule(module) marks module as a simpleFunc, freezes it, > > > * asks the current new-module-handler to handle it (thereby > > > - * notifying the handler), and returns the new module. > > > + * notifying the handler), and returns the new module. > > > */ > > > function loadModule(module) { > > > callPub(myNewModuleHandler, 'handle', > > > @@ -1550,7 +1556,7 @@ > > > > > > /** > > > * Gets or assigns the id associated with this (assumed to be) > > > - * outers object, registering it so that > > > + * outers object, registering it so that > > > * <tt>getOuters(getId(outers)) ==== outers</tt>. > > > * <p> > > > * This system of registration and identification allows us to > > > @@ -1611,21 +1617,21 @@ > > > * reregisters itself at its old id. > > > */ > > > function unregister(outers) { > > > - enforceType(outers, 'object', 'outers'); > > > + enforceType(outers, 'object', 'outers'); > > > if ('id___' in outers) { > > > var id = enforceType(outers.id___, 'number', 'id'); > > > registeredOuters[id] = undefined; > > > } > > > } > > > - > > > + > > > > > //////////////////////////////////////////////////////////////////////// > > > // Exports > > > > > //////////////////////////////////////////////////////////////////////// > > > - > > > + > > > caja = { > > > > > > // Diagnostics and condition enforcement > > > - getLogFunc: getLogFunc, > > > + getLogFunc: getLogFunc, > > > setLogFunc: setLogFunc, > > > log: log, > > > > > > @@ -1633,29 +1639,29 @@ > > > enforce: enforce, > > > enforceType: enforceType, > > > enforceNat: enforceNat, > > > - > > > + > > > // walking prototype chain, checking JSON containers > > > isJSONContainer: isJSONContainer, > > > freeze: freeze, > > > copy: copy, > > > snapshot: snapshot, > > > - > > > + > > > // Accessing properties > > > canReadPub: canReadPub, readPub: readPub, > > > canEnumPub: canEnumPub, > > > - canEnumOwn: canEnumOwn, > > > - BREAK: BREAK, each: each, > > > + canEnumOwn: canEnumOwn, > > > + BREAK: BREAK, each: each, > > > canCallPub: canCallPub, callPub: callPub, > > > canSetPub: canSetPub, setPub: setPub, > > > canDeletePub: canDeletePub, deletePub: deletePub, > > > - > > > + > > > // Other > > > def: def > > > }; > > > - > > > + > > > sharedOuters = { > > > caja: caja, > > > - > > > + > > > 'null': null, > > > 'false': false, > > > 'true': true, > > > @@ -1671,7 +1677,7 @@ > > > encodeURI: encodeURI, > > > encodeURIComponent: encodeURIComponent, > > > Math: Math, > > > - > > > + > > > Object: Object, > > > Array: Array, > > > String: String, > > > @@ -1679,7 +1685,7 @@ > > > Number: Number, > > > Date: Date, > > > RegExp: RegExp, > > > - > > > + > > > Error: Error, > > > EvalError: EvalError, > > > RangeError: RangeError, > > > @@ -1688,7 +1694,7 @@ > > > TypeError: TypeError, > > > URIError: URIError > > > }; > > > - > > > + > > > each(sharedOuters, simpleFunc(function(k, v) { > > > switch (typeof v) { > > > case 'object': > > > @@ -1700,7 +1706,7 @@ > > > } > > > })); > > > primFreeze(sharedOuters); > > > - > > > + > > > ___ = { > > > > > > // Privileged fault handlers > > > @@ -1711,14 +1717,14 @@ > > > directConstructor: directConstructor, > > > isFrozen: isFrozen, > > > primFreeze: primFreeze, > > > - > > > + > > > // Accessing property attributes > > > canRead: canRead, allowRead: allowRead, > > > canEnum: canEnum, allowEnum: allowEnum, > > > canCall: canCall, allowCall: allowCall, > > > canSet: canSet, allowSet: allowSet, > > > canDelete: canDelete, allowDelete: allowDelete, > > > - > > > + > > > // Classifying functions > > > isCtor: isCtor, > > > isMethod: isMethod, > > > @@ -1729,7 +1735,7 @@ > > > simpleFunc: simpleFunc, asSimpleFunc: asSimpleFunc, > > > setMember: setMember, > > > setMemberMap: setMemberMap, > > > - > > > + > > > // Accessing properties > > > canReadProp: canReadProp, readProp: readProp, > > > canInnocentEnum: canInnocentEnum, > > > @@ -1737,13 +1743,13 @@ > > > canCallProp: canCallProp, callProp: callProp, > > > canSetProp: canSetProp, setProp: setProp, > > > canDeleteProp: canDeleteProp, deleteProp: deleteProp, > > > - > > > + > > > // Other > > > hasOwnProp: hasOwnProp, > > > args: args, > > > - > > > + > > > // Taming mechanism > > > - useGetHandler: useGetHandler, > > > + useGetHandler: useGetHandler, > > > useApplyHandler: useApplyHandler, > > > useCallHandler: useCallHandler, > > > useSetHandler: useSetHandler, > > > @@ -1754,10 +1760,10 @@ > > > allowMutator: allowMutator, > > > enforceMatchable: enforceMatchable, > > > all2: all2, > > > - > > > + > > > // Taming decisions > > > sharedOuters: sharedOuters, > > > - > > > + > > > // Module loading > > > getNewModuleHandler: getNewModuleHandler, > > > setNewModuleHandler: setNewModuleHandler, > > > @@ -1769,7 +1775,7 @@ > > > getOuters: getOuters, > > > unregister: unregister > > > }; > > > - > > > + > > > each(caja, simpleFunc(function(k, v) { > > > if (k in ___) { > > > fail('internal: initialization conflict: ', k); > > > @@ -1781,7 +1787,7 @@ > > > ___[k] = v; > > > })); > > > primFreeze(caja); > > > - > > > + > > > setNewModuleHandler(makeNormalNewModuleHandler()); > > > - > > > + > > > })(this); > > > > > > Modified: > > > > incubator/shindig/trunk/features/opensocial-samplecontainer/feature.xml > > > URL: > > > > > > http://svn.apache.org/viewvc/incubator/shindig/trunk/features/opensocial-samplecontainer/feature.xml?rev=611991&r1=611990&r2=611991&view=diff > > > > > > > > > ============================================================================== > > > --- > > > > incubator/shindig/trunk/features/opensocial-samplecontainer/feature.xml > > > (original) > > > +++ > > > > incubator/shindig/trunk/features/opensocial-samplecontainer/feature.xml > > Mon > > > Jan 14 17:30:24 2008 > > > @@ -71,7 +71,7 @@ > > > var stateXml = document.getElementById("stateXml").value; > > > var stateXmlObject = (new > DOMParser()).parseFromString(stateXml, > > > "text/xml"); > > > StateFileParser.onLoadState(stateXmlObject, null, messageDiv, > > > - opensocial.Container.get(), function() { > window.console.log( > > > messageDiv.innerHTML); gadgets.util.runOnLoadHandlers();}); > > > + opensocial.Container.get(), function() { > > > gadgets.util.runOnLoadHandlers();}); > > > } > > > > > > function dumpState() { > > > > > > Modified: > > > > > > incubator/shindig/trunk/features/opensocial-samplecontainer/statefileparser.js > > > URL: > > > > > > http://svn.apache.org/viewvc/incubator/shindig/trunk/features/opensocial-samplecontainer/statefileparser.js?rev=611991&r1=611990&r2=611991&view=diff > > > > > > > > > ============================================================================== > > > --- > > > > > > incubator/shindig/trunk/features/opensocial-samplecontainer/statefileparser.js > > > (original) > > > +++ > > > > > > incubator/shindig/trunk/features/opensocial-samplecontainer/statefileparser.js > > > Mon Jan 14 17:30:24 2008 > > > @@ -74,7 +74,6 @@ > > > */ > > > StateFileParser.onLoadState = function(xmlState, stateUrl, > > > gadgetMessageDiv, > > > container, callback) { > > > - window.console.log(xmlState); > > > // Get the high level container node > > > var containerNode = $(xmlState).find('container')[0]; > > > if (!containerNode) { > > > @@ -219,7 +218,6 @@ > > > * Dumps the current state of the container in XML. > > > */ > > > StateFileParser.dumpState = function(container, stateDiv) { > > > - window.console.log("dumping state"); > > > var xmlText = '<container>\n'; > > > > > > xmlText += ' <viewer>\n'; > > > @@ -339,7 +337,6 @@ > > > xmlText += ' </activities>\n'; > > > > > > xmlText += '</container>'; > > > - window.console.log("got to the end with this " + xmlText); > > > stateDiv.value = xmlText; > > > }; > > > > > > > > > > > > > > >

