',\n CDATAEnd: '\\]\\]\\>',\n\n newId: function() { return this.idCounter++ },\n getIdFromObject: function(obj) {\n return obj.hasOwnProperty(this.idProperty) ? obj[this.idProperty] : undefined;\n },\n getRegisteredObjectFromSmartRef: function(smartRef) {\n return this.getRegisteredObjectFromId(this.getIdFromObject(smartRef))\n },\n\n getRegisteredObjectFromId: function(id) {\n return this.registry[id] && this.registry[id].registeredObject\n },\n getRecreatedObjectFromId: function(id) {\n return this.registry[id] && this.registry[id].recreatedObject\n },\n setRecreatedObject: function(object, id) {\n var registryEntry = this.registry[id];\n if (!registryEntry)\n throw new Error('Trying to set recreated object in registry but cannot find registry entry!');\n registryEntry.recreatedObject = object\n },\n getRefFromId: function(id) {\n return this.registry[id] && this.registry[id].ref;\n },\n},\n'plugins', {\n addPlugin: function(plugin) {\n this.plugins.push(plugin);\n plugin.setSerializer(this);\n return this;\n },\n addPlugins: function(plugins) {\n plugins.forEach(function(ea) { this.addPlugin(ea) }, this);\n return this;\n },\n somePlugin: function(methodName, args) {\n // invoke all plugins with methodName and return the first non-undefined result (or null)\n\n for (var i = 0; i < this.plugins.length; i++) {\n var plugin = this.plugins[i],\n pluginMethod = plugin[methodName];\n if (!pluginMethod) continue;\n var result = pluginMethod.apply(plugin, args);\n if (result) return result\n }\n return null;\n },\n letAllPlugins: function(methodName, args) {\n // invoke all plugins with methodName and args\n for (var i = 0; i < this.plugins.length; i++) {\n var plugin = this.plugins[i],\n pluginMethod = plugin[methodName];\n if (!pluginMethod) continue;\n pluginMethod.apply(plugin, args);\n }\n },\n},\n'object registry -- serialization', {\n register: function(obj) {\n if (this.isValueObject(obj))\n return obj;\n\n if (Object.isArray(obj)) {\n var result = [];\n for (var i = 0; i < obj.length; i++) {\n this.path.push(i); // for debugging\n var item = obj[i];\n\n if (this.somePlugin('ignoreProp', [obj, i, item])) continue;\n result.push(this.register(item));\n this.path.pop();\n }\n return result;\n }\n\n var id = this.addIdAndAddToRegistryIfNecessary(obj);\n return this.registry[id].ref;\n },\n addIdAndAddToRegistryIfNecessary: function(obj) {\n var id = this.getIdFromObject(obj);\n if (id === undefined) id = this.addIdToObject(obj);\n if (!this.registry[id]) this.addNewRegistryEntry(id, obj)\n return id\n },\n addNewRegistryEntry: function(id, obj) {\n // copyObjectAndRegisterReferences must be done AFTER setting the registry entry\n // to allow reference cycles\n var entry = this.createRegistryEntry(obj, null/*set registered obj later*/, id);\n this.registry[id] = entry;\n entry.registeredObject = this.copyObjectAndRegisterReferences(obj)\n return entry\n },\n createRegistryEntry: function(realObject, registeredObject, id) {\n return {\n originalObject: realObject || null,\n registeredObject: registeredObject || null, // copy of original with replaced refs\n recreatedObject: null, // new created object with patched refs\n ref: {__isSmartRef__: true, id: id},\n }\n },\n copyObjectAndRegisterReferences: function(obj) {\n if (this.copyDepth > this.defaultCopyDepth) {\n alert(\"Error in copyObjectAndRegisterReferences, path: \" + this.path);\n throw new Error('Stack overflow while registering objects? ' + obj)\n }\n this.copyDepth++;\n var copy = {},\n source = this.somePlugin('serializeObj', [obj, copy]) || obj;\n for (var key in source) {\n if (!source.hasOwnProperty(key) || (key === this.idProperty && !this.keepIds)) continue;\n var value = source[key];\n if (this.somePlugin('ignoreProp', [source, key, value])) continue;\n this.path.push(key); // for debugging\n copy[key] = this.register(value);\n this.path.pop();\n }\n this.letAllPlugins('additionallySerialize', [source, copy]);\n this.copyDepth--;\n return copy;\n },\n},\n'object registry -- deserialization', {\n recreateFromId: function(id) {\n var recreated = this.getRecreatedObjectFromId(id);\n if (recreated) return recreated;\n\n // take the registered object (which has unresolveed references) and\n // create a new similiar object with patched references\n var registeredObj = this.getRegisteredObjectFromId(id),\n recreated = this.somePlugin('deserializeObj', [registeredObj]) || {};\n this.setRecreatedObject(recreated, id); // important to set recreated before patching refs!\n for (var key in registeredObj) {\n var value = registeredObj[key];\n if (this.somePlugin('ignorePropDeserialization', [registeredObj, key, value])) continue;\n this.path.push(key); // for debugging\n recreated[key] = this.patchObj(value);\n this.path.pop();\n };\n this.letAllPlugins('afterDeserializeObj', [recreated]);\n return recreated;\n },\n patchObj: function(obj) {\n if (this.isReference(obj))\n return this.recreateFromId(obj.id)\n\n if (Object.isArray(obj))\n return obj.collect(function(item, idx) {\n this.path.push(idx); // for debugging\n var result = this.patchObj(item);\n this.path.pop();\n return result;\n }, this)\n\n return obj;\n },\n},\n'serializing', {\n serialize: function(obj) {\n var time = new Date().getTime();\n var root = this.serializeToJso(obj);\n Config.lastSaveLinearizationTime = new Date().getTime() - time;\n time = new Date().getTime();\n var json = this.stringifyJSO(root);\n Config.lastSaveSerializationTime = new Date().getTime() - time;\n return json;\n },\n serializeToJso: function(obj) {\n try {\n var start = new Date();\n var ref = this.register(obj);\n this.letAllPlugins('serializationDone', [this.registry]);\n var simplifiedRegistry = this.simplifyRegistry(this.registry);\n var root = {id: ref.id, registry: simplifiedRegistry};\n this.log('Serializing done in ' + (new Date() - start) + 'ms');\n return root;\n } catch (e) {\n this.log('Cannot serialize ' + obj + ' because ' + e + '\\n' + e.stack);\n return null;\n } finally {\n this.cleanup();\n }\n },\n simplifyRegistry: function(registry) {\n var simplified = {isSimplifiedRegistry: true};\n for (var id in registry)\n simplified[id] = this.getRegisteredObjectFromId(id)\n return simplified;\n },\n addIdToObject: function(obj) { return obj[this.idProperty] = this.newId() },\n stringifyJSO: function(jso) {\n var str = this.prettyPrint ? JSON.prettyPrint(jso) : JSON.stringify(jso),\n regex = new RegExp(this.CDATAEnd, 'g');\n str = str.replace(regex, this.escapedCDATAEnd);\n return str\n },\n reset: function() {\n this.registry = {};\n },\n},\n'deserializing',{\n deserialize: function(json) {\n var jso = this.parseJSON(json);\n return this.deserializeJso(jso);\n },\n deserializeJso: function(jsoObj) {\n var start = new Date(),\n id = jsoObj.id;\n this.registry = this.createRealRegistry(jsoObj.registry);\n var result = this.recreateFromId(id);\n this.letAllPlugins('deserializationDone');\n this.cleanup();\n this.log('Deserializing done in ' + (new Date() - start) + 'ms');\n return result;\n },\n parseJSON: function(json) {\n return this.constructor.parseJSON(json);\n },\n createRealRegistry: function(registry) {\n if (!registry.isSimplifiedRegistry) return registry;\n var realRegistry = {};\n for (var id in registry)\n realRegistry[id] = this.createRegistryEntry(null, registry[id], id);\n return realRegistry;\n },\n},\n'copying', {\n copy: function(obj) {\n var rawCopy = this.serializeToJso(obj);\n if (!rawCopy) throw new Error('Cannot copy ' + obj)\n return this.deserializeJso(rawCopy);\n },\n},\n'debugging', {\n log: function(msg) {\n if (!this.showLog) return;\n Global.lively.morphic.World && lively.morphic.World.current() ?\n lively.morphic.World.current().setStatusMessage(msg, Color.blue, 6) :\n console.log(msg);\n },\n getPath: function() { return '[\"' + this.path.join('\"][\"') + '\"]' },\n});\n\nObject.extend(ObjectGraphLinearizer, {\n forLively: function() {\n return this.withPlugins([\n new DEPRECATEDScriptFilter(),\n new ClosurePlugin(),\n new RegExpPlugin(),\n new IgnoreFunctionsPlugin(),\n new ClassPlugin(),\n new LivelyWrapperPlugin(),\n new DoNotSerializePlugin(),\n new DoWeakSerializePlugin(),\n new StoreAndRestorePlugin(),\n new OldModelFilter(),\n new LayerPlugin(),\n new lively.persistence.DatePlugin()\n ]);\n },\n forLivelyCopy: function() {\n var serializer = this.forLively();\n var p = new GenericFilter();\n var world = lively.morphic.World.current();\n p.addFilter(function(obj, prop, value) { return value === world })\n serializer.addPlugins([p]);\n return serializer;\n },\n withPlugins: function(plugins) {\n var serializer = new ObjectGraphLinearizer();\n serializer.addPlugins(plugins);\n return serializer;\n },\n allRegisteredObjectsDo: function(registryObj, func, context) {\n for (var id in registryObj) {\n var registeredObject = registryObj[id];\n if (!registryObj.isSimplifiedRegistry)\n registeredObject = registeredObject.registeredObject;\n func.call(context || Global, id, registeredObject)\n }\n },\n parseJSON: function(json) {\n if (typeof json !== 'string') return json; // already is JSO?\n var regex = new RegExp(this.prototype.escapedCDATAEnd, 'g'),\n converted = json.replace(regex, this.prototype.CDATAEnd);\n return JSON.parse(converted);\n },\n\n});\n\nObject.subclass('ObjectLinearizerPlugin',\n'accessing', {\n getSerializer: function() { return this.serializer },\n setSerializer: function(s) { this.serializer = s },\n},\n'plugin interface', {\n /* interface methods that can be reimplemented by subclasses:\n serializeObj: function(original) {},\n additionallySerialize: function(original, persistentCopy) {},\n deserializeObj: function(persistentCopy) {},\n ignoreProp: function(obj, propName, value) {},\n ignorePropDeserialization: function(obj, propName, value) {},\n afterDeserializeObj: function(obj) {},\n deserializationDone: function() {},\n serializationDone: function(registry) {},\n */\n});\n\nObjectLinearizerPlugin.subclass('ClassPlugin',\n'properties', {\n isInstanceRestorer: true, // for Class.intializer\n classNameProperty: '__LivelyClassName__',\n sourceModuleNameProperty: '__SourceModuleName__',\n},\n'plugin interface', {\n additionallySerialize: function(original, persistentCopy) {\n this.addClassInfoIfPresent(original, persistentCopy);\n },\n deserializeObj: function(persistentCopy) {\n return this.restoreIfClassInstance(persistentCopy);\n },\n ignoreProp: function(obj, propName) {\n return propName == this.classNameProperty\n },\n ignorePropDeserialization: function(regObj, propName) {\n return this.classNameProperty === propName\n },\n afterDeserializeObj: function(obj) {\n this.removeClassInfoIfPresent(obj)\n },\n},\n'class info persistence', {\n addClassInfoIfPresent: function(original, persistentCopy) {\n // store class into persistentCopy if original is an instance\n if (!original || !original.constructor) return;\n var className = original.constructor.type;\n persistentCopy[this.classNameProperty] = className;\n var srcModule = original.constructor.sourceModule\n if (srcModule)\n persistentCopy[this.sourceModuleNameProperty] = srcModule.namespaceIdentifier;\n },\n restoreIfClassInstance: function(persistentCopy) {\n // if (!persistentCopy.hasOwnProperty[this.classNameProperty]) return;\n var className = persistentCopy[this.classNameProperty];\n if (!className) return;\n var klass = Class.forName(className);\n if (!klass || ! (klass instanceof Function)) {\n var msg = 'ObjectGraphLinearizer is trying to deserialize instance of ' +\n className + ' but this class cannot be found!';\n dbgOn(true);\n if (!Config.ignoreClassNotFound) throw new Error(msg);\n console.error(msg);\n lively.bindings.callWhenNotNull(lively.morphic.World, 'currentWorld', {warn: function(world) { world.alert(msg) }}, 'warn');\n return {isClassPlaceHolder: true, className: className, position: persistentCopy._Position};\n }\n return new klass(this);\n },\n removeClassInfoIfPresent: function(obj) {\n if (obj[this.classNameProperty])\n delete obj[this.classNameProperty];\n },\n},\n'searching', {\n sourceModulesIn: function(registryObj) {\n var moduleNames = [],\n partsBinRequiredModulesProperty = 'requiredModules',\n sourceModuleProperty = this.sourceModuleNameProperty;\n\n ObjectGraphLinearizer.allRegisteredObjectsDo(registryObj, function(id, value) {\n if (value[sourceModuleProperty])\n moduleNames.push(value[sourceModuleProperty]);\n if (value[partsBinRequiredModulesProperty])\n moduleNames.pushAll(value[partsBinRequiredModulesProperty]);\n })\n\n return moduleNames.reject(function(ea) {\n return ea.startsWith('Global.anonymous_') || ea.include('undefined') }).uniq();\n },\n});\n\nObjectLinearizerPlugin.subclass('LayerPlugin',\n'properties', {\n withLayersPropName: 'withLayers',\n withoutLayersPropName: 'withoutLayers'\n\n},\n'plugin interface', {\n additionallySerialize: function(original, persistentCopy) {\n this.serializeLayerArray(original, persistentCopy, this.withLayersPropName)\n this.serializeLayerArray(original, persistentCopy, this.withoutLayersPropName)\n },\n afterDeserializeObj: function(obj) {\n this.deserializeLayerArray(obj, this.withLayersPropName)\n this.deserializeLayerArray(obj, this.withoutLayersPropName)\n },\n ignoreProp: function(obj, propName, value) {\n return propName == this.withLayersPropName || propName == this.withoutLayersPropName;\n },\n},\n'helper',{\n serializeLayerArray: function(original, persistentCopy, propname) {\n var layers = original[propname]\n if (!layers || layers.length == 0) return;\n persistentCopy[propname] = layers.collect(function(ea) {\n return ea instanceof Layer ? ea.fullName() : ea })\n },\n deserializeLayerArray: function(obj, propname) {\n var layers = obj[propname];\n if (!layers || layers.length == 0) return;\n module('cop.Layers').load(true); // FIXME\n obj[propname] = layers.collect(function(ea) {\n console.log(ea)\n return Object.isString(ea) ? cop.create(ea, true) : ea;\n });\n },\n});\n\nObjectLinearizerPlugin.subclass('StoreAndRestorePlugin',\n'initializing', {\n initialize: function($super) {\n $super();\n this.restoreObjects = [];\n },\n},\n'plugin interface', {\n serializeObj: function(original, persistentCopy) {\n if (typeof original.onstore === 'function')\n original.onstore(persistentCopy);\n },\n afterDeserializeObj: function(obj) {\n if (typeof obj.onrestore === 'function')\n this.restoreObjects.push(obj);\n },\n deserializationDone: function() {\n this.restoreObjects.forEach(function(ea){\n try {\n ea.onrestore()\n } catch(e) {\n // be forgiving because a failure in an onrestore method should not break \n // the entire page\n console.error('Deserialization Error during runing onrestore in: ' + ea \n + '\\nError:' + e)\n } \n })\n },\n});\nObjectLinearizerPlugin.subclass('DoNotSerializePlugin',\n'testing', {\n doNotSerialize: function(obj, propName) {\n if (!obj.doNotSerialize) return false;\n var merged = Object.mergePropertyInHierarchy(obj, 'doNotSerialize');\n return merged.include(propName);\n },\n},\n'plugin interface', {\n ignoreProp: function(obj, propName, value) {\n return this.doNotSerialize(obj, propName);\n },\n});\n\nObjectLinearizerPlugin.subclass('DoWeakSerializePlugin',\n'initialization', {\n initialize: function($super) {\n $super();\n this.weakRefs = [];\n this.nonWeakObjs = []\n },\n},\n'testing', {\n doWeakSerialize: function(obj, propName) {\n if (!obj.doWeakSerialize) return false;\n var merged = Object.mergePropertyInHierarchy(obj, 'doWeakSerialize');\n return merged.include(propName);\n },\n},\n'plugin interface', {\n ignoreProp: function(obj, propName, value) {\n if(this.doWeakSerialize(obj, propName)){\n // remember weak reference to install it later if neccesary\n this.weakRefs.push({obj: obj, propName: propName, value: value})\n return true\n }\n return false\n },\n serializationDone: function(registry) {\n var serializer = this.getSerializer();\n this.weakRefs.forEach(function(ea) {\n var id = serializer.getIdFromObject(ea.value);\n if (id === undefined) return;\n var ownerId = serializer.getIdFromObject(ea.obj),\n persistentCopyFromOwner = serializer.getRegisteredObjectFromId(ownerId);\n persistentCopyFromOwner[ea.propName] = serializer.getRefFromId(id);\n })\n },\n additionallySerialize: function(obj, persistentCopy) {\n return;\n // 1. Save persistentCopy for future manipulation\n this.weakRefs.forEach(function(ea) {\n alertOK(\"ok\")\n if(ea.obj === obj) {\n ea.objCopy = persistentCopy;\n }\n\n // we maybe reached an object, which was marked weak?\n // alertOK(\"all \" + this.weakRefs.length)\n if (ea.value === obj) {\n // var source = this.getSerializer().register(ea.obj);\n var ref = this.getSerializer().register(ea.value);\n source[ea.propName]\n alertOK('got something:' + ea.propName + \" -> \" + printObject(ref))\n ea.objCopy[ea.propName] = ref\n\n LastEA = ea\n }\n }, this)\n },\n\n});\n\nObjectLinearizerPlugin.subclass('LivelyWrapperPlugin', // for serializing lively.data.Wrappers\n'names', {\n rawNodeInfoProperty: '__rawNodeInfo__',\n},\n'testing', {\n hasRawNode: function(obj) {\n // FIXME how to ensure that it's really a node? instanceof?\n return obj.rawNode && obj.rawNode.nodeType\n },\n},\n'plugin interface', {\n additionallySerialize: function(original, persistentCopy) {\n if (this.hasRawNode(original))\n this.captureRawNode(original, persistentCopy);\n },\n ignoreProp: function(obj, propName, value) {\n if (!value) return false;\n if (value.nodeType) return true; // FIXME dont serialize nodes\n if (value === Global) return true;\n return false;\n },\n afterDeserializeObj: function(obj) {\n this.restoreRawNode(obj);\n },\n},\n'rawNode handling', {\n captureRawNode: function(original, copy) {\n var attribs = $A(original.rawNode.attributes).collect(function(attr) {\n return {key: attr.name, value: attr.value, namespaceURI: attr.namespaceURI}\n })\n var rawNodeInfo = {\n tagName: original.rawNode.tagName,\n namespaceURI: original.rawNode.namespaceURI,\n attributes: attribs,\n };\n copy[this.rawNodeInfoProperty] = rawNodeInfo;\n },\n\n restoreRawNode: function(newObj) {\n var rawNodeInfo = newObj[this.rawNodeInfoProperty];\n if (!rawNodeInfo) return;\n delete newObj[this.rawNodeInfoProperty];\n var rawNode = document.createElementNS(rawNodeInfo.namespaceURI, rawNodeInfo.tagName);\n rawNodeInfo.attributes.forEach(function(attr) {\n rawNode.setAttributeNS(attr.namespaceURI, attr.key, attr.value);\n });\n newObj.rawNode = rawNode;\n },\n});\n\nObjectLinearizerPlugin.subclass('IgnoreDOMElementsPlugin', // for serializing lively.data.Wrappers\n'plugin interface', {\n ignoreProp: function(obj, propName, value) {\n if (!value) return false;\n if (value.nodeType) {\n // alert('trying to deserialize node ' + value + ' (pointer from ' + obj + '[' + propName + ']'\n // + '\\n path:' + this.serializer.getPath())\n return true;\n }\n if (value === Global) {\n alert('trying to deserialize Global (pointer from ' + obj + '[' + propName + ']'\n + '\\n path:' + this.serializer.getPath())\n return true;\n }\n return false;\n },\n});\n\nObjectLinearizerPlugin.subclass('RegExpPlugin',\n'accessing', {\n serializedRegExpProperty: '__regExp__',\n},\n'plugin interface', {\n serializeObj: function(original) {\n if (original instanceof RegExp)\n return this.serializeRegExp(original);\n },\n serializeRegExp: function(regExp) {\n var serialized = {};\n serialized[this.serializedRegExpProperty] = regExp.toString();\n return serialized;\n },\n\n deserializeObj: function(obj) {\n var serializedRegExp = obj[this.serializedRegExpProperty];\n if (!serializedRegExp) return null;\n delete obj[this.serializedRegExpProperty];\n try {\n return eval(serializedRegExp);\n } catch(e) {\n console.error('Cannot deserialize RegExp ' + e + '\\n' + e.stack);\n }\n },\n});\n\nObjectLinearizerPlugin.subclass('OldModelFilter',\n'initializing', {\n initialize: function($super) {\n $super();\n this.relays = [];\n },\n},\n'plugin interface', {\n ignoreProp: function(source, propName, value) {\n // if (propName === 'formalModel') return true;\n // if (value && value.constructor && value.constructor.name.startsWith('anonymous_')) return true;\n return false;\n },\n additionallySerialize: function(original, persistentCopy) {\n var klass = original.constructor;\n // FIX for IE9+ which does not implement Function.name\n if (!klass.name) {\n var n = klass.toString().match('^function\\s*([^(]*)\\\\(');\n klass.name = (n ? n[1].strip() : '');\n }\n if (!klass || !klass.name.startsWith('anonymous_')) return;\n ClassPlugin.prototype.removeClassInfoIfPresent(persistentCopy);\n var def = JSON.stringify(original.definition);\n def = def.replace(/[\\\\]/g, '')\n def = def.replace(/\"+\\{/g, '{')\n def = def.replace(/\\}\"+/g, '}')\n persistentCopy.definition = def;\n persistentCopy.isInstanceOfAnonymousClass = true;\n if (klass.superclass == Relay) {\n persistentCopy.isRelay = true;\n } else if (klass.superclass == PlainRecord) {\n persistentCopy.isPlainRecord = true;\n } else {\n alert('Cannot serialize model stuff of type ' + klass.superclass.type)\n }\n },\n afterDeserializeObj: function(obj) {\n // if (obj.isRelay) this.relays.push(obj);\n },\n deserializationDone: function() {\n // this.relays.forEach(function(relay) {\n // var def = JSON.parse(relay.definition);\n // })\n },\n deserializeObj: function(persistentCopy) {\n if (!persistentCopy.isInstanceOfAnonymousClass) return null;\n var instance;\n function createInstance(ctor, ctorMethodName, argIfAny) {\n var string = persistentCopy.definition, def;\n string = string.replace(/[\\\\]/g, '')\n string = string.replace(/\"+\\{/g, '{')\n string = string.replace(/\\}\"+/g, '}')\n try {\n def = JSON.parse(string);\n } catch(e) {\n console.error('Cannot correctly deserialize ' + ctor + '>>' + ctorMethodName + '\\n' + e);\n def = {};\n }\n return ctor[ctorMethodName](def, argIfAny)\n }\n\n if (persistentCopy.isRelay) {\n var delegate = this.getSerializer().patchObj(persistentCopy.delegate);\n instance = createInstance(Relay, 'newInstance', delegate);\n }\n\n if (persistentCopy.isPlainRecord) {\n instance = createInstance(Record, 'newPlainInstance');\n }\n\n if (!instance) alert('Cannot serialize old model object: ' + JSON.stringify(persistentCopy))\n return instance;\n },\n\n});\n\n\nObjectLinearizerPlugin.subclass('DEPRECATEDScriptFilter',\n'accessing', {\n serializedScriptsProperty: '__serializedScripts__',\n getSerializedScriptsFrom: function(obj) {\n if (!obj.hasOwnProperty(this.serializedScriptsProperty)) return null;\n return obj[this.serializedScriptsProperty]\n },\n},\n'plugin interface', {\n additionallySerialize: function(original, persistentCopy) {\n var scripts = {}, found = false;\n Functions.own(original).forEach(function(funcName) {\n var func = original[funcName];\n if (!func.isSerializable) return;\n found = true;\n scripts[funcName] = func.toString();\n });\n if (!found) return;\n persistentCopy[this.serializedScriptsProperty] = scripts;\n },\n afterDeserializeObj: function(obj) {\n var scripts = this.getSerializedScriptsFrom(obj);\n if (!scripts) return;\n Properties.forEachOwn(scripts, function(scriptName, scriptSource) {\n Function.fromString(scriptSource).asScriptOf(obj, scriptName);\n })\n delete obj[this.serializedScriptsProperty];\n },\n});\n\nObjectLinearizerPlugin.subclass('ClosurePlugin',\n'initializing', {\n initialize: function($super) {\n $super();\n this.objectsMethodNamesAndClosures = [];\n },\n},\n'accessing', {\n serializedClosuresProperty: '__serializedLivelyClosures__',\n getSerializedClosuresFrom: function(obj) {\n return obj.hasOwnProperty(this.serializedClosuresProperty) ?\n obj[this.serializedClosuresProperty] : null;\n },\n},\n'plugin interface', {\n serializeObj: function(closure) { // for serializing lively.Closures\n if (!closure || !closure.isLivelyClosure || closure.hasFuncSource()) return;\n if (closure.originalFunc)\n closure.setFuncSource(closure.originalFunc.toString());\n return closure;\n },\n additionallySerialize: function(original, persistentCopy) {\n var closures = {}, found = false;\n Functions.own(original).forEach(function(funcName) {\n var func = original[funcName];\n if (!func || !func.hasLivelyClosure) return;\n found = true;\n closures[funcName] = func.livelyClosure;\n });\n if (!found) return;\n // if we found closures, serialize closures object, this will also trigger\n // ClosurePlugin>>serializeObj for those closures\n persistentCopy[this.serializedClosuresProperty] = this.getSerializer().register(closures);\n },\n afterDeserializeObj: function(obj) {\n var closures = this.getSerializedClosuresFrom(obj);\n if (!closures) return;\n Properties.forEachOwn(closures, function(name, closure) {\n // we defer the recreation of the actual function so that all of the\n // function's properties are already deserialized\n if (closure instanceof lively.Closure) {\n // obj[name] = closure.recreateFunc();\n obj.__defineSetter__(name, function(v) { delete obj[name]; obj[name] = v });\n // in case the method is accessed or called before we are done with serializing\n // everything, we do an 'early recreation'\n obj.__defineGetter__(name, function() {\n // alert('early closure recreation ' + name)\n return closure.recreateFunc().addToObject(obj, name);\n })\n this.objectsMethodNamesAndClosures.push({obj: obj, name: name, closure: closure});\n }\n }, this);\n delete obj[this.serializedClosuresProperty];\n },\n deserializationDone: function() {\n this.objectsMethodNamesAndClosures.forEach(function(ea) {\n ea.closure.recreateFunc().addToObject(ea.obj, ea.name);\n })\n },\n});\n\nObjectLinearizerPlugin.subclass('IgnoreFunctionsPlugin',\n'interface', {\n ignoreProp: function(obj, propName, value) {\n return value && typeof value === 'function' && !value.isLivelyClosure && !(value instanceof RegExp);\n },\n});\n\nObjectLinearizerPlugin.subclass('lively.persistence.DatePlugin',\n'interface', {\n serializeObj: function(obj, copy) {\n return obj instanceof Date ? {isSerializedDate: true, string: String(obj)} : null;\n },\n deserializeObj: function(copy) {\n return copy && copy.isSerializedDate ? new Date(copy.string): null;\n },\n});\n\nObjectLinearizerPlugin.subclass('GenericFilter',\n// example\n// f = new GenericFilter()\n// f.addPropertyToIgnore('owner')\n//\n'initializing', {\n initialize: function($super) {\n $super();\n this.ignoredClasses = [];\n this.ignoredProperties = [];\n this.filterFunctions = [];\n },\n},\n'plugin interface', {\n addClassToIgnore: function(klass) {\n this.ignoredClasses.push(klass.type);\n },\n addPropertyToIgnore: function(name) {\n this.ignoredProperties.push(name);\n },\n\n addFilter: function(filterFunction) {\n this.filterFunctions.push(filterFunction);\n },\n ignoreProp: function(obj, propName, value) {\n return this.ignoredProperties.include(propName) ||\n (value && this.ignoredClasses.include(value.constructor.type)) ||\n this.filterFunctions.any(function(func) { return func(obj, propName, value) });\n },\n});\n\nObjectLinearizerPlugin.subclass('ConversionPlugin',\n'initializing', {\n initialize: function(deserializeFunc, afterDeserializeFunc) {\n this.deserializeFunc = deserializeFunc || Functions.Null;\n this.afterDeserializeFunc = afterDeserializeFunc || Functions.Null;\n this.objectLayouts = {}\n },\n},\n'object layout recording', {\n addObjectLayoutOf: function(obj) {\n var cName = this.getClassName(obj),\n layout = this.objectLayouts[cName] = this.objectLayouts[cName] || {};\n if (!layout.properties) layout.properties = [];\n layout.properties = layout.properties.concat(Properties.all(obj)).uniq();\n },\n printObjectLayouts: function() {\n var str = Properties.own(this.objectLayouts).collect(function(cName) {\n return cName + '\\n ' + this.objectLayouts[cName].properties.join('\\n ')\n }, this).join('\\n\\n')\n return str\n },\n},\n'accessing', {\n getClassName: function(obj) {\n return obj[ClassPlugin.prototype.classNameProperty]\n },\n},\n'plugin interface', {\n afterDeserializeObj: function(obj) {\n return this.afterDeserializeFunc.call(this, obj);\n },\n deserializeObj: function(rawObj) {\n var result = this.deserializeFunc.call(this, rawObj);\n this.addObjectLayoutOf(rawObj);\n return result;\n },\n},\n'registry', {\n patchRegistry: function(oldRegistry, jso) {\n return new ObjectGraphLinearizer().serializeToJso(jso)\n },\n registerWithPlugins: function(obj, plugins) {\n // for object conversion when objects need to register new ones during conversion\n var serializer = this.getSerializer();\n serializer.addPlugins(plugins);\n var id = serializer.register(obj);\n serializer.plugins = serializer.plugins.withoutAll(plugins);\n return id;\n },\n\n},\n'EXAMPLES', {\n convertHPICross: function() {\nJSON.prettyPrint(json)\njso = JSON.parse(json)\n\ndeserialize = function(obj) {\n var serializer = this.getSerializer();\n if (this.getClassName(obj) == 'Morph') {\n delete obj.pvtCachedTransform\n delete obj.__rawNodeInfo__\n obj._Position = obj.origin\n delete obj.origin\n obj._Rotation = obj.rotation\n delete obj.rotation\n obj._Scale = 1;\n delete obj.scalePoint\n delete obj.priorExtent\n obj.scripts = []\n obj.id = obj._livelyDataWrapperId_\n delete obj._livelyDataWrapperId_\n obj.__SourceModuleName__ = 'lively.morphic.Core'\n obj.__LivelyClassName__ = 'lively.morphic.Morph'\n\nobj.halosEnabled = true\nobj.droppingEnabled = true\n }\n if (this.getClassName(obj) == 'lively.scene.Rectangle') {\nif (obj.__rawNodeInfo__) {\n// var rawNodeInfo = serializer.getRegisteredObjectFromSmartRef(obj.__rawNodeInfo__)\nvar rawNodeInfo = obj.__rawNodeInfo__\nvar xAttr = rawNodeInfo.attributes.detect(function(ea) { return ea.key === 'x' })\nvar yAttr = rawNodeInfo.attributes.detect(function(ea) { return ea.key === 'y' })\nif (xAttr && yAttr)\n obj._Position = this.registerWithPlugins(pt(Number(xAttr.value), Number(yAttr.value)), [new ClassPlugin()])\nvar widthAttr = rawNodeInfo.attributes.detect(function(ea) { return ea.key === 'width' })\nvar heightAttr = rawNodeInfo.attributes.detect(function(ea) { return ea.key === 'height' })\nif (widthAttr && heightAttr )\n obj._Extent = this.registerWithPlugins(pt(Number(widthAttr.value), Number(heightAttr.value)), [new ClassPlugin()])\n\nvar attr = rawNodeInfo.attributes.detect(function(ea) { return ea.key === 'fill-opacity' })\nobj._FillOpacity = attr && Number(attr.value)\nvar attr = rawNodeInfo.attributes.detect(function(ea) { return ea.key === 'stroke-opacity' })\nobj._StrokeOpacity = attr && Number(attr.value)\nvar attr = rawNodeInfo.attributes.detect(function(ea) { return ea.key === 'stroke-width' })\nobj._BorderWidth = attr && Number(attr.value)\n}\n delete obj.__rawNodeInfo__\n obj._BorderColor = obj._stroke\n obj._Fill = obj._fill\n obj.id = obj._livelyDataWrapperId_\n delete obj._livelyDataWrapperId_\n obj.__SourceModuleName__ = 'lively.morphic.Shapes'\n obj.__LivelyClassName__ = 'lively.morphic.Shapes.Rectangle'\n }\n\n // return obj\n}\n\nconversionPlugin = new ConversionPlugin(deserialize)\nserializer = ObjectGraphLinearizer.withPlugins([conversionPlugin])\n// set id counter so new objects can be registered\nserializer.idCounter = Math.max.apply(null, Properties.all(jso.registry).collect(function(prop) { return Number(prop) || -1})) + 1\nconvertedRawObj = serializer.deserialize(jso)\nconversionPlugin.printObjectLayouts()\n\nconvertedRawObjRegistry = new ObjectGraphLinearizer().serializeToJso(convertedRawObj)\nobj = ObjectGraphLinearizer.forNewLively().deserializeJso(convertedRawObjRegistry)\n\nobj\nobj.prepareForNewRenderContext(obj.renderContext())\nobj.openInWorld()\n },\n});\n\nObjectLinearizerPlugin.subclass('AttributeConnectionPlugin',\n'plugin interface', {\n deserializeObj: function(persistentCopy) {\n var className = persistentCopy[ClassPlugin.prototype.classNameProperty];\n if (!className || className != 'AttributeConnection') return;\n },\n});\n\nObjectLinearizerPlugin.subclass('CopyOnlySubmorphsPlugin',\n'initializing', {\n initialize: function() {\n this.morphRefId = 0;\n this.idMorphMapping = {};\n this.root = 0;\n },\n},\n'copying', {\n copyAsMorphRef: function(morph) {\n var id = ++this.morphRefId;\n this.idMorphMapping[id] = morph;\n return {isCopyMorphRef: true, morphRefId: id};\n },\n},\n'plugin interface', {\n ignoreProp: function(obj, key, value) {\n if (!value || !this.root || !this.root.isMorph) return false;\n return value === this.root.owner;\n },\n serializeObj: function(obj) {\n // if obj is a morph and the root obj that is copied is a morph then\n // copy this object only if it is a submorph of the root obj\n // otherwise the new copy should directly reference the object\n return (!obj || !this.root || !this.root.isMorph || obj === this.root || !obj.isMorph || !obj.isSubmorphOf || obj.isSubmorphOf(this.root) || !obj.world()) ? null : this.copyAsMorphRef(obj);\n },\n deserializeObj: function(persistentCopy) {\n return persistentCopy.isCopyMorphRef ? this.idMorphMapping[persistentCopy.morphRefId] : undefined;\n },\n});\n\nObjectLinearizerPlugin.subclass('IgnoreEpiMorphsPlugin',\n'plugin interface', {\n ignoreProp: function(obj, key, value) { return value && value.isEpiMorph },\n});\n\n// (de)serialize objects that inherit stuff from a constructor function\nObjectLinearizerPlugin.subclass('lively.persistence.GenericConstructorPlugin',\n'accessing', {\n constructorProperty: '__constructorName__',\n\n getConstructorName: function(obj) {\n return obj && obj.constructor && obj.constructor.name;\n },\n\n isLivelyClassInstance: function(obj) {\n return obj && obj.constructor && obj.constructor.type !== undefined;\n }\n},\n'plugin interface', {\n\n additionallySerialize: function(original, persistentCopy) {\n var name = this.getConstructorName(original);\n if (name && name !== 'Object' && !this.isLivelyClassInstance(original)) {\n persistentCopy[this.constructorProperty] = name;\n return true;\n }\n return false;\n },\n\n deserializeObj: function(persistentCopy) {\n var name = persistentCopy[this.constructorProperty],\n constr = name && Class.forName(name);\n if (!constr) return undefined;\n // we use a new constructor function instead of the real constructor\n // here so that we don't need to know any arguments that might be expected\n // by the original constructor. To correctly make inheritance work\n // (instanceof and .constructor) we set the prototype property of our helper\n // constructor to the real constructor.prototype\n function HelperConstructor() {};\n HelperConstructor.prototype = constr.prototype;\n return new HelperConstructor();\n }\n});\n\nObject.extend(lively.persistence.Serializer, {\n\n jsonWorldId: 'LivelyJSONWorld',\n changeSetElementId: 'WorldChangeSet',\n\n createObjectGraphLinearizer: function() {\n return Config.isNewMorphic ? ObjectGraphLinearizer.forNewLively() : ObjectGraphLinearizer.forLively()\n },\n\n createObjectGraphLinearizerForCopy: function() {\n return Config.isNewMorphic ? ObjectGraphLinearizer.forNewLivelyCopy() : ObjectGraphLinearizer.forLivelyCopy()\n },\n\n serialize: function(obj, optPlugins, optSerializer) {\n var serializer = optSerializer || this.createObjectGraphLinearizer();\n if (optPlugins) optPlugins.forEach(function(plugin) { serializer.addPlugin(plugin) });\n var json = serializer.serialize(obj);\n return json;\n },\n\n serializeWorld: function(world) {\n var doc = new Importer().getBaseDocument(); // FIXME\n return this.serializeWorldToDocument(world, doc);\n },\n\n serializeWorldToDocument: function(world, doc) {\n return this.serializeWorldToDocumentWithSerializer(world, doc, this.createObjectGraphLinearizer());\n },\n\n serializeWorldToDocumentWithSerializer: function(world, doc, serializer) {\n // this helper object was introduced to make the code that is browser dependent\n // (currently IE9 vs the rest) easier to read. It sould be moved to dome general DOM abstraction layer\n var domAccess = {\n getSystemDictNode: function(doc) {\n return (doc.getElementById ?\n doc.getElementById('SystemDictionary') :\n doc.selectSingleNode('//*[@id=\"SystemDictionary\"]'));\n },\n createMetaNode: function(doc) {\n return UserAgent.isIE ? doc.createNode(1, 'meta', Namespace.XHTML) : XHTMLNS.create('meta')\n },\n getCSNode: function(doc, changeSet) {\n var changeSetNode;\n if (!changeSet) {\n alert('Found no ChangeSet while serializing ' + world + '! Adding an empty CS.');\n changeSetNode = LivelyNS.create('code');\n } else {\n changeSetNode = cs.getXMLElement();\n }\n if (!UserAgent.isIE) return doc.importNode(changeSetNode, true);\n // mr: this is a real IE hack!\n var helperDoc = new ActiveXObject('MSXML2.DOMDocument.6.0');\n helperDoc.loadXML(new XMLSerializer().serializeToString(changeSetNode));\n return doc.importNode(helperDoc.firstChild, true);\n },\n getHeadNode: function(doc) {\n return doc.getElementsByTagName('head')[0] || doc.selectSingleNode('//*[\"head\"=name()]');\n },\n }\n\n var head = domAccess.getHeadNode(doc);\n\n // FIXME remove previous meta elements - is this really necessary?\n //var metaElement;\n //while (metaElement = doc.getElementsByTagName('meta')[0])\n // metaElement.parentNode.removeChild(metaElement)\n // removed 2012-01-5 fabian\n // doing this instead: remove old serialized data.. is it necessary or not?\n // we need additional meta tags for better iPad touch support, can't remove all of them..\n var metaToBeRemoved = ['LivelyMigrationLevel', 'WorldChangeSet', 'LivelyJSONWorld'];\n metaToBeRemoved.forEach(function(ea) {\n var element = doc.getElementById(ea);\n if (element) {\n element.parentNode.removeChild(element);\n }});\n\n\n // FIXME remove system dictionary\n var sysDict = domAccess.getSystemDictNode(doc);\n if (sysDict) sysDict.parentNode.removeChild(sysDict);\n\n // store migration level\n var migrationLevel = LivelyMigrationSupport.migrationLevel,\n migrationLevelNode = domAccess.createMetaNode(doc);\n migrationLevelNode.setAttribute('id', LivelyMigrationSupport.migrationLevelNodeId);\n migrationLevelNode.appendChild(doc.createCDATASection(migrationLevel));\n head.appendChild(migrationLevelNode);\n\n // serialize changeset\n var cs = world.getChangeSet(),\n csElement = domAccess.getCSNode(doc, cs),\n metaCSNode = domAccess.createMetaNode(doc);\n metaCSNode.setAttribute('id', this.changeSetElementId);\n metaCSNode.appendChild(csElement);\n head.appendChild(metaCSNode);\n\n // serialize world\n var json = this.serialize(world, null, serializer),\n metaWorldNode = domAccess.createMetaNode(doc);\n if (!json) throw new Error('Cannot serialize world -- serialize returned no JSON!');\n metaWorldNode.setAttribute('id', this.jsonWorldId)\n metaWorldNode.appendChild(doc.createCDATASection(json))\n head.appendChild(metaWorldNode);\n\n return doc;\n },\n deserialize: function(json, optDeserializer) {\n var deserializer = optDeserializer || this.createObjectGraphLinearizer();\n var obj = deserializer.deserialize(json);\n return obj;\n },\n\n deserializeWorldFromDocument: function(doc) {\n var worldMetaElement = doc.getElementById(this.jsonWorldId);\n if (!worldMetaElement)\n throw new Error('Cannot find JSONified world when deserializing');\n var serializer = this.createObjectGraphLinearizer(),\n json = worldMetaElement.textContent,\n world = serializer.deserialize(json);\n return world;\n },\n\n deserializeWorldFromJso: function(jso) {\n var serializer = this.createObjectGraphLinearizer(),\n world = serializer.deserializeJso(jso);\n return world;\n },\n\n deserializeChangeSetFromDocument: function(doc) {\n var csMetaElement = doc.getElementById(this.changeSetElementId);\n if (!csMetaElement)\n throw new Error('Cannot find ChangeSet meta element when deserializing');\n return ChangeSet.fromNode(csMetaElement);\n },\n\n sourceModulesIn: function(jso) {\n return new ClassPlugin().sourceModulesIn(jso.registry);\n },\n\n parseJSON: function(json) {\n return ObjectGraphLinearizer.parseJSON(json);\n },\n\n copyWithoutWorld: function(obj) {\n var serializer = this.createObjectGraphLinearizerForCopy(),\n dontCopyWorldPlugin = new GenericFilter();\n dontCopyWorldPlugin.addFilter(function(obj, propName, value) { return value === lively.morphic.World.current() })\n serializer.addPlugin(dontCopyWorldPlugin);\n var copy = serializer.copy(obj);\n return copy;\n },\n\n newMorphicCopy: function(obj) {\n var serializer = this.createObjectGraphLinearizerForCopy();\n serializer.showLog = false;\n var copyPlugin = new CopyOnlySubmorphsPlugin();\n copyPlugin.root = obj;\n serializer.addPlugin(copyPlugin);\n return serializer.copy(obj);\n },\n});\n\nObject.extend(lively.persistence, {\n getPluginsForLively: function() {\n return this.pluginsForLively.collect(function(klass) {\n return new klass();\n })\n },\n\n pluginsForLively: [\n StoreAndRestorePlugin,\n ClosurePlugin,\n RegExpPlugin,\n IgnoreFunctionsPlugin,\n ClassPlugin,\n IgnoreEpiMorphsPlugin,\n DoNotSerializePlugin,\n DoWeakSerializePlugin,\n IgnoreDOMElementsPlugin,\n LayerPlugin,\n lively.persistence.DatePlugin]\n});\n\nObject.extend(ObjectGraphLinearizer, {\n forNewLively: function() {\n var serializer = new ObjectGraphLinearizer();\n serializer.addPlugins(lively.persistence.getPluginsForLively());\n return serializer;\n },\n\n forNewLivelyCopy: function() {\n var serializer = this.forNewLively(),\n p = new GenericFilter(),\n world = lively.morphic.World.current();\n p.addFilter(function(obj, prop, value) { return value === world })\n serializer.addPlugins([p]);\n return serializer;\n }\n});\n\n\n// Proper namespacing\nObject.extend(lively.persistence, {\n ObjectGraphLinearizer: ObjectGraphLinearizer,\n ObjectLinearizerPlugin: ObjectLinearizerPlugin,\n ClassPlugin: ClassPlugin,\n LayerPlugin: LayerPlugin,\n StoreAndRestorePlugin: StoreAndRestorePlugin,\n DoNotSerializePlugin: DoNotSerializePlugin,\n DoWeakSerializePlugin: DoWeakSerializePlugin,\n LivelyWrapperPlugin: LivelyWrapperPlugin,\n IgnoreDOMElementsPlugin: IgnoreDOMElementsPlugin,\n RegExpPlugin: RegExpPlugin,\n OldModelFilter: OldModelFilter,\n DEPRECATEDScriptFilter: DEPRECATEDScriptFilter,\n ClosurePlugin: ClosurePlugin,\n IgnoreFunctionsPlugin: IgnoreFunctionsPlugin,\n GenericFilter: GenericFilter,\n ConversionPlugin: ConversionPlugin,\n AttributeConnectionPlugin: AttributeConnectionPlugin\n});\n\n}) // end of module\n","sourceString":"/*\n * Copyright (c) 2008-2012 Hasso Plattner Institute\n *\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\nmodule('lively.persistence.Serializer').requires().toRun(function() {\n\nObject.subclass('ObjectGraphLinearizer',\n'settings', {\n defaultCopyDepth: 100,\n keepIds: Config.keepSerializerIds || false,\n showLog: false,\n prettyPrint: false\n},\n'initializing', {\n initialize: function() {\n this.idCounter = 0;\n this.registry = {};\n this.plugins = [];\n this.copyDepth = 0;\n this.path = [];\n },\n cleanup: function() {\n // remove ids from all original objects and the original objects as well as any recreated objects\n for (var id in this.registry) {\n var entry = this.registry[id];\n if (!this.keepIds && entry.originalObject)\n delete entry.originalObject[this.idProperty]\n if (!this.keepIds && entry.recreatedObject)\n delete entry.recreatedObject[this.idProperty]\n delete entry.originalObject;\n delete entry.recreatedObject;\n }\n },\n},\n'testing', {\n isReference: function(obj) { return obj && obj.__isSmartRef__ },\n isValueObject: function(obj) {\n if (obj == null) return true;\n if ((typeof obj !== 'object') && (typeof obj !== 'function')) return true;\n if (this.isReference(obj)) return true;\n return false\n },\n},\n'accessing', {\n idProperty: '__SmartId__',\n escapedCDATAEnd: '<=CDATAEND=>',\n CDATAEnd: '\\]\\]\\>',\n\n newId: function() { return this.idCounter++ },\n getIdFromObject: function(obj) {\n return obj.hasOwnProperty(this.idProperty) ? obj[this.idProperty] : undefined;\n },\n getRegisteredObjectFromSmartRef: function(smartRef) {\n return this.getRegisteredObjectFromId(this.getIdFromObject(smartRef))\n },\n\n getRegisteredObjectFromId: function(id) {\n return this.registry[id] && this.registry[id].registeredObject\n },\n getRecreatedObjectFromId: function(id) {\n return this.registry[id] && this.registry[id].recreatedObject\n },\n setRecreatedObject: function(object, id) {\n var registryEntry = this.registry[id];\n if (!registryEntry)\n throw new Error('Trying to set recreated object in registry but cannot find registry entry!');\n registryEntry.recreatedObject = object\n },\n getRefFromId: function(id) {\n return this.registry[id] && this.registry[id].ref;\n },\n},\n'plugins', {\n addPlugin: function(plugin) {\n this.plugins.push(plugin);\n plugin.setSerializer(this);\n return this;\n },\n addPlugins: function(plugins) {\n plugins.forEach(function(ea) { this.addPlugin(ea) }, this);\n return this;\n },\n somePlugin: function(methodName, args) {\n // invoke all plugins with methodName and return the first non-undefined result (or null)\n\n for (var i = 0; i < this.plugins.length; i++) {\n var plugin = this.plugins[i],\n pluginMethod = plugin[methodName];\n if (!pluginMethod) continue;\n var result = pluginMethod.apply(plugin, args);\n if (result) return result\n }\n return null;\n },\n letAllPlugins: function(methodName, args) {\n // invoke all plugins with methodName and args\n for (var i = 0; i < this.plugins.length; i++) {\n var plugin = this.plugins[i],\n pluginMethod = plugin[methodName];\n if (!pluginMethod) continue;\n pluginMethod.apply(plugin, args);\n }\n },\n},\n'object registry -- serialization', {\n register: function(obj) {\n if (this.isValueObject(obj))\n return obj;\n\n if (Object.isArray(obj)) {\n var result = [];\n for (var i = 0; i < obj.length; i++) {\n this.path.push(i); // for debugging\n var item = obj[i];\n\n if (this.somePlugin('ignoreProp', [obj, i, item])) continue;\n result.push(this.register(item));\n this.path.pop();\n }\n return result;\n }\n\n var id = this.addIdAndAddToRegistryIfNecessary(obj);\n return this.registry[id].ref;\n },\n addIdAndAddToRegistryIfNecessary: function(obj) {\n var id = this.getIdFromObject(obj);\n if (id === undefined) id = this.addIdToObject(obj);\n if (!this.registry[id]) this.addNewRegistryEntry(id, obj)\n return id\n },\n addNewRegistryEntry: function(id, obj) {\n // copyObjectAndRegisterReferences must be done AFTER setting the registry entry\n // to allow reference cycles\n var entry = this.createRegistryEntry(obj, null/*set registered obj later*/, id);\n this.registry[id] = entry;\n entry.registeredObject = this.copyObjectAndRegisterReferences(obj)\n return entry\n },\n createRegistryEntry: function(realObject, registeredObject, id) {\n return {\n originalObject: realObject || null,\n registeredObject: registeredObject || null, // copy of original with replaced refs\n recreatedObject: null, // new created object with patched refs\n ref: {__isSmartRef__: true, id: id},\n }\n },\n copyObjectAndRegisterReferences: function(obj) {\n if (this.copyDepth > this.defaultCopyDepth) {\n alert(\"Error in copyObjectAndRegisterReferences, path: \" + this.path);\n throw new Error('Stack overflow while registering objects? ' + obj)\n }\n this.copyDepth++;\n var copy = {},\n source = this.somePlugin('serializeObj', [obj, copy]) || obj;\n for (var key in source) {\n if (!source.hasOwnProperty(key) || (key === this.idProperty && !this.keepIds)) continue;\n var value = source[key];\n if (this.somePlugin('ignoreProp', [source, key, value])) continue;\n this.path.push(key); // for debugging\n copy[key] = this.register(value);\n this.path.pop();\n }\n this.letAllPlugins('additionallySerialize', [source, copy]);\n this.copyDepth--;\n return copy;\n },\n},\n'object registry -- deserialization', {\n recreateFromId: function(id) {\n var recreated = this.getRecreatedObjectFromId(id);\n if (recreated) return recreated;\n\n // take the registered object (which has unresolveed references) and\n // create a new similiar object with patched references\n var registeredObj = this.getRegisteredObjectFromId(id),\n recreated = this.somePlugin('deserializeObj', [registeredObj]) || {};\n this.setRecreatedObject(recreated, id); // important to set recreated before patching refs!\n for (var key in registeredObj) {\n var value = registeredObj[key];\n if (this.somePlugin('ignorePropDeserialization', [registeredObj, key, value])) continue;\n this.path.push(key); // for debugging\n recreated[key] = this.patchObj(value);\n this.path.pop();\n };\n this.letAllPlugins('afterDeserializeObj', [recreated]);\n return recreated;\n },\n patchObj: function(obj) {\n if (this.isReference(obj))\n return this.recreateFromId(obj.id)\n\n if (Object.isArray(obj))\n return obj.collect(function(item, idx) {\n this.path.push(idx); // for debugging\n var result = this.patchObj(item);\n this.path.pop();\n return result;\n }, this)\n\n return obj;\n },\n},\n'serializing', {\n serialize: function(obj) {\n var time = new Date().getTime();\n var root = this.serializeToJso(obj);\n Config.lastSaveLinearizationTime = new Date().getTime() - time;\n time = new Date().getTime();\n var json = this.stringifyJSO(root);\n Config.lastSaveSerializationTime = new Date().getTime() - time;\n return json;\n },\n serializeToJso: function(obj) {\n try {\n var start = new Date();\n var ref = this.register(obj);\n this.letAllPlugins('serializationDone', [this.registry]);\n var simplifiedRegistry = this.simplifyRegistry(this.registry);\n var root = {id: ref.id, registry: simplifiedRegistry};\n this.log('Serializing done in ' + (new Date() - start) + 'ms');\n return root;\n } catch (e) {\n this.log('Cannot serialize ' + obj + ' because ' + e + '\\n' + e.stack);\n return null;\n } finally {\n this.cleanup();\n }\n },\n simplifyRegistry: function(registry) {\n var simplified = {isSimplifiedRegistry: true};\n for (var id in registry)\n simplified[id] = this.getRegisteredObjectFromId(id)\n return simplified;\n },\n addIdToObject: function(obj) { return obj[this.idProperty] = this.newId() },\n stringifyJSO: function(jso) {\n var str = this.prettyPrint ? JSON.prettyPrint(jso) : JSON.stringify(jso),\n regex = new RegExp(this.CDATAEnd, 'g');\n str = str.replace(regex, this.escapedCDATAEnd);\n return str\n },\n reset: function() {\n this.registry = {};\n },\n},\n'deserializing',{\n deserialize: function(json) {\n var jso = this.parseJSON(json);\n return this.deserializeJso(jso);\n },\n deserializeJso: function(jsoObj) {\n var start = new Date(),\n id = jsoObj.id;\n this.registry = this.createRealRegistry(jsoObj.registry);\n var result = this.recreateFromId(id);\n this.letAllPlugins('deserializationDone');\n this.cleanup();\n this.log('Deserializing done in ' + (new Date() - start) + 'ms');\n return result;\n },\n parseJSON: function(json) {\n return this.constructor.parseJSON(json);\n },\n createRealRegistry: function(registry) {\n if (!registry.isSimplifiedRegistry) return registry;\n var realRegistry = {};\n for (var id in registry)\n realRegistry[id] = this.createRegistryEntry(null, registry[id], id);\n return realRegistry;\n },\n},\n'copying', {\n copy: function(obj) {\n var rawCopy = this.serializeToJso(obj);\n if (!rawCopy) throw new Error('Cannot copy ' + obj)\n return this.deserializeJso(rawCopy);\n },\n},\n'debugging', {\n log: function(msg) {\n if (!this.showLog) return;\n Global.lively.morphic.World && lively.morphic.World.current() ?\n lively.morphic.World.current().setStatusMessage(msg, Color.blue, 6) :\n console.log(msg);\n },\n getPath: function() { return '[\"' + this.path.join('\"][\"') + '\"]' },\n});\n\nObject.extend(ObjectGraphLinearizer, {\n forLively: function() {\n return this.withPlugins([\n new DEPRECATEDScriptFilter(),\n new ClosurePlugin(),\n new RegExpPlugin(),\n new IgnoreFunctionsPlugin(),\n new ClassPlugin(),\n new LivelyWrapperPlugin(),\n new DoNotSerializePlugin(),\n new DoWeakSerializePlugin(),\n new StoreAndRestorePlugin(),\n new OldModelFilter(),\n new LayerPlugin(),\n new lively.persistence.DatePlugin()\n ]);\n },\n forLivelyCopy: function() {\n var serializer = this.forLively();\n var p = new GenericFilter();\n var world = lively.morphic.World.current();\n p.addFilter(function(obj, prop, value) { return value === world })\n serializer.addPlugins([p]);\n return serializer;\n },\n withPlugins: function(plugins) {\n var serializer = new ObjectGraphLinearizer();\n serializer.addPlugins(plugins);\n return serializer;\n },\n allRegisteredObjectsDo: function(registryObj, func, context) {\n for (var id in registryObj) {\n var registeredObject = registryObj[id];\n if (!registryObj.isSimplifiedRegistry)\n registeredObject = registeredObject.registeredObject;\n func.call(context || Global, id, registeredObject)\n }\n },\n parseJSON: function(json) {\n if (typeof json !== 'string') return json; // already is JSO?\n var regex = new RegExp(this.prototype.escapedCDATAEnd, 'g'),\n converted = json.replace(regex, this.prototype.CDATAEnd);\n return JSON.parse(converted);\n },\n\n});\n\nObject.subclass('ObjectLinearizerPlugin',\n'accessing', {\n getSerializer: function() { return this.serializer },\n setSerializer: function(s) { this.serializer = s },\n},\n'plugin interface', {\n /* interface methods that can be reimplemented by subclasses:\n serializeObj: function(original) {},\n additionallySerialize: function(original, persistentCopy) {},\n deserializeObj: function(persistentCopy) {},\n ignoreProp: function(obj, propName, value) {},\n ignorePropDeserialization: function(obj, propName, value) {},\n afterDeserializeObj: function(obj) {},\n deserializationDone: function() {},\n serializationDone: function(registry) {},\n */\n});\n\nObjectLinearizerPlugin.subclass('ClassPlugin',\n'properties', {\n isInstanceRestorer: true, // for Class.intializer\n classNameProperty: '__LivelyClassName__',\n sourceModuleNameProperty: '__SourceModuleName__',\n},\n'plugin interface', {\n additionallySerialize: function(original, persistentCopy) {\n this.addClassInfoIfPresent(original, persistentCopy);\n },\n deserializeObj: function(persistentCopy) {\n return this.restoreIfClassInstance(persistentCopy);\n },\n ignoreProp: function(obj, propName) {\n return propName == this.classNameProperty\n },\n ignorePropDeserialization: function(regObj, propName) {\n return this.classNameProperty === propName\n },\n afterDeserializeObj: function(obj) {\n this.removeClassInfoIfPresent(obj)\n },\n},\n'class info persistence', {\n addClassInfoIfPresent: function(original, persistentCopy) {\n // store class into persistentCopy if original is an instance\n if (!original || !original.constructor) return;\n var className = original.constructor.type;\n persistentCopy[this.classNameProperty] = className;\n var srcModule = original.constructor.sourceModule\n if (srcModule)\n persistentCopy[this.sourceModuleNameProperty] = srcModule.namespaceIdentifier;\n },\n restoreIfClassInstance: function(persistentCopy) {\n // if (!persistentCopy.hasOwnProperty[this.classNameProperty]) return;\n var className = persistentCopy[this.classNameProperty];\n if (!className) return;\n var klass = Class.forName(className);\n if (!klass || ! (klass instanceof Function)) {\n var msg = 'ObjectGraphLinearizer is trying to deserialize instance of ' +\n className + ' but this class cannot be found!';\n dbgOn(true);\n if (!Config.ignoreClassNotFound) throw new Error(msg);\n console.error(msg);\n lively.bindings.callWhenNotNull(lively.morphic.World, 'currentWorld', {warn: function(world) { world.alert(msg) }}, 'warn');\n return {isClassPlaceHolder: true, className: className, position: persistentCopy._Position};\n }\n return new klass(this);\n },\n removeClassInfoIfPresent: function(obj) {\n if (obj[this.classNameProperty])\n delete obj[this.classNameProperty];\n },\n},\n'searching', {\n sourceModulesIn: function(registryObj) {\n var moduleNames = [],\n partsBinRequiredModulesProperty = 'requiredModules',\n sourceModuleProperty = this.sourceModuleNameProperty;\n\n ObjectGraphLinearizer.allRegisteredObjectsDo(registryObj, function(id, value) {\n if (value[sourceModuleProperty])\n moduleNames.push(value[sourceModuleProperty]);\n if (value[partsBinRequiredModulesProperty])\n moduleNames.pushAll(value[partsBinRequiredModulesProperty]);\n })\n\n return moduleNames.reject(function(ea) {\n return ea.startsWith('Global.anonymous_') || ea.include('undefined') }).uniq();\n },\n});\n\nObjectLinearizerPlugin.subclass('LayerPlugin',\n'properties', {\n withLayersPropName: 'withLayers',\n withoutLayersPropName: 'withoutLayers'\n\n},\n'plugin interface', {\n additionallySerialize: function(original, persistentCopy) {\n this.serializeLayerArray(original, persistentCopy, this.withLayersPropName)\n this.serializeLayerArray(original, persistentCopy, this.withoutLayersPropName)\n },\n afterDeserializeObj: function(obj) {\n this.deserializeLayerArray(obj, this.withLayersPropName)\n this.deserializeLayerArray(obj, this.withoutLayersPropName)\n },\n ignoreProp: function(obj, propName, value) {\n return propName == this.withLayersPropName || propName == this.withoutLayersPropName;\n },\n},\n'helper',{\n serializeLayerArray: function(original, persistentCopy, propname) {\n var layers = original[propname]\n if (!layers || layers.length == 0) return;\n persistentCopy[propname] = layers.collect(function(ea) {\n return ea instanceof Layer ? ea.fullName() : ea })\n },\n deserializeLayerArray: function(obj, propname) {\n var layers = obj[propname];\n if (!layers || layers.length == 0) return;\n module('cop.Layers').load(true); // FIXME\n obj[propname] = layers.collect(function(ea) {\n console.log(ea)\n return Object.isString(ea) ? cop.create(ea, true) : ea;\n });\n },\n});\n\nObjectLinearizerPlugin.subclass('StoreAndRestorePlugin',\n'initializing', {\n initialize: function($super) {\n $super();\n this.restoreObjects = [];\n },\n},\n'plugin interface', {\n serializeObj: function(original, persistentCopy) {\n if (typeof original.onstore === 'function')\n original.onstore(persistentCopy);\n },\n afterDeserializeObj: function(obj) {\n if (typeof obj.onrestore === 'function')\n this.restoreObjects.push(obj);\n },\n deserializationDone: function() {\n this.restoreObjects.forEach(function(ea){\n try {\n ea.onrestore()\n } catch(e) {\n // be forgiving because a failure in an onrestore method should not break \n // the entire page\n console.error('Deserialization Error during runing onrestore in: ' + ea \n + '\\nError:' + e)\n } \n })\n },\n});\nObjectLinearizerPlugin.subclass('DoNotSerializePlugin',\n'testing', {\n doNotSerialize: function(obj, propName) {\n if (!obj.doNotSerialize) return false;\n var merged = Object.mergePropertyInHierarchy(obj, 'doNotSerialize');\n return merged.include(propName);\n },\n},\n'plugin interface', {\n ignoreProp: function(obj, propName, value) {\n return this.doNotSerialize(obj, propName);\n },\n});\n\nObjectLinearizerPlugin.subclass('DoWeakSerializePlugin',\n'initialization', {\n initialize: function($super) {\n $super();\n this.weakRefs = [];\n this.nonWeakObjs = []\n },\n},\n'testing', {\n doWeakSerialize: function(obj, propName) {\n if (!obj.doWeakSerialize) return false;\n var merged = Object.mergePropertyInHierarchy(obj, 'doWeakSerialize');\n return merged.include(propName);\n },\n},\n'plugin interface', {\n ignoreProp: function(obj, propName, value) {\n if(this.doWeakSerialize(obj, propName)){\n // remember weak reference to install it later if neccesary\n this.weakRefs.push({obj: obj, propName: propName, value: value})\n return true\n }\n return false\n },\n serializationDone: function(registry) {\n var serializer = this.getSerializer();\n this.weakRefs.forEach(function(ea) {\n var id = serializer.getIdFromObject(ea.value);\n if (id === undefined) return;\n var ownerId = serializer.getIdFromObject(ea.obj),\n persistentCopyFromOwner = serializer.getRegisteredObjectFromId(ownerId);\n persistentCopyFromOwner[ea.propName] = serializer.getRefFromId(id);\n })\n },\n additionallySerialize: function(obj, persistentCopy) {\n return;\n // 1. Save persistentCopy for future manipulation\n this.weakRefs.forEach(function(ea) {\n alertOK(\"ok\")\n if(ea.obj === obj) {\n ea.objCopy = persistentCopy;\n }\n\n // we maybe reached an object, which was marked weak?\n // alertOK(\"all \" + this.weakRefs.length)\n if (ea.value === obj) {\n // var source = this.getSerializer().register(ea.obj);\n var ref = this.getSerializer().register(ea.value);\n source[ea.propName]\n alertOK('got something:' + ea.propName + \" -> \" + printObject(ref))\n ea.objCopy[ea.propName] = ref\n\n LastEA = ea\n }\n }, this)\n },\n\n});\n\nObjectLinearizerPlugin.subclass('LivelyWrapperPlugin', // for serializing lively.data.Wrappers\n'names', {\n rawNodeInfoProperty: '__rawNodeInfo__',\n},\n'testing', {\n hasRawNode: function(obj) {\n // FIXME how to ensure that it's really a node? instanceof?\n return obj.rawNode && obj.rawNode.nodeType\n },\n},\n'plugin interface', {\n additionallySerialize: function(original, persistentCopy) {\n if (this.hasRawNode(original))\n this.captureRawNode(original, persistentCopy);\n },\n ignoreProp: function(obj, propName, value) {\n if (!value) return false;\n if (value.nodeType) return true; // FIXME dont serialize nodes\n if (value === Global) return true;\n return false;\n },\n afterDeserializeObj: function(obj) {\n this.restoreRawNode(obj);\n },\n},\n'rawNode handling', {\n captureRawNode: function(original, copy) {\n var attribs = $A(original.rawNode.attributes).collect(function(attr) {\n return {key: attr.name, value: attr.value, namespaceURI: attr.namespaceURI}\n })\n var rawNodeInfo = {\n tagName: original.rawNode.tagName,\n namespaceURI: original.rawNode.namespaceURI,\n attributes: attribs,\n };\n copy[this.rawNodeInfoProperty] = rawNodeInfo;\n },\n\n restoreRawNode: function(newObj) {\n var rawNodeInfo = newObj[this.rawNodeInfoProperty];\n if (!rawNodeInfo) return;\n delete newObj[this.rawNodeInfoProperty];\n var rawNode = document.createElementNS(rawNodeInfo.namespaceURI, rawNodeInfo.tagName);\n rawNodeInfo.attributes.forEach(function(attr) {\n rawNode.setAttributeNS(attr.namespaceURI, attr.key, attr.value);\n });\n newObj.rawNode = rawNode;\n },\n});\n\nObjectLinearizerPlugin.subclass('IgnoreDOMElementsPlugin', // for serializing lively.data.Wrappers\n'plugin interface', {\n ignoreProp: function(obj, propName, value) {\n if (!value) return false;\n if (value.nodeType) {\n // alert('trying to deserialize node ' + value + ' (pointer from ' + obj + '[' + propName + ']'\n // + '\\n path:' + this.serializer.getPath())\n return true;\n }\n if (value === Global) {\n alert('trying to deserialize Global (pointer from ' + obj + '[' + propName + ']'\n + '\\n path:' + this.serializer.getPath())\n return true;\n }\n return false;\n },\n});\n\nObjectLinearizerPlugin.subclass('RegExpPlugin',\n'accessing', {\n serializedRegExpProperty: '__regExp__',\n},\n'plugin interface', {\n serializeObj: function(original) {\n if (original instanceof RegExp)\n return this.serializeRegExp(original);\n },\n serializeRegExp: function(regExp) {\n var serialized = {};\n serialized[this.serializedRegExpProperty] = regExp.toString();\n return serialized;\n },\n\n deserializeObj: function(obj) {\n var serializedRegExp = obj[this.serializedRegExpProperty];\n if (!serializedRegExp) return null;\n delete obj[this.serializedRegExpProperty];\n try {\n return eval(serializedRegExp);\n } catch(e) {\n console.error('Cannot deserialize RegExp ' + e + '\\n' + e.stack);\n }\n },\n});\n\nObjectLinearizerPlugin.subclass('OldModelFilter',\n'initializing', {\n initialize: function($super) {\n $super();\n this.relays = [];\n },\n},\n'plugin interface', {\n ignoreProp: function(source, propName, value) {\n // if (propName === 'formalModel') return true;\n // if (value && value.constructor && value.constructor.name.startsWith('anonymous_')) return true;\n return false;\n },\n additionallySerialize: function(original, persistentCopy) {\n var klass = original.constructor;\n // FIX for IE9+ which does not implement Function.name\n if (!klass.name) {\n var n = klass.toString().match('^function\\s*([^(]*)\\\\(');\n klass.name = (n ? n[1].strip() : '');\n }\n if (!klass || !klass.name.startsWith('anonymous_')) return;\n ClassPlugin.prototype.removeClassInfoIfPresent(persistentCopy);\n var def = JSON.stringify(original.definition);\n def = def.replace(/[\\\\]/g, '')\n def = def.replace(/\"+\\{/g, '{')\n def = def.replace(/\\}\"+/g, '}')\n persistentCopy.definition = def;\n persistentCopy.isInstanceOfAnonymousClass = true;\n if (klass.superclass == Relay) {\n persistentCopy.isRelay = true;\n } else if (klass.superclass == PlainRecord) {\n persistentCopy.isPlainRecord = true;\n } else {\n alert('Cannot serialize model stuff of type ' + klass.superclass.type)\n }\n },\n afterDeserializeObj: function(obj) {\n // if (obj.isRelay) this.relays.push(obj);\n },\n deserializationDone: function() {\n // this.relays.forEach(function(relay) {\n // var def = JSON.parse(relay.definition);\n // })\n },\n deserializeObj: function(persistentCopy) {\n if (!persistentCopy.isInstanceOfAnonymousClass) return null;\n var instance;\n function createInstance(ctor, ctorMethodName, argIfAny) {\n var string = persistentCopy.definition, def;\n string = string.replace(/[\\\\]/g, '')\n string = string.replace(/\"+\\{/g, '{')\n string = string.replace(/\\}\"+/g, '}')\n try {\n def = JSON.parse(string);\n } catch(e) {\n console.error('Cannot correctly deserialize ' + ctor + '>>' + ctorMethodName + '\\n' + e);\n def = {};\n }\n return ctor[ctorMethodName](def, argIfAny)\n }\n\n if (persistentCopy.isRelay) {\n var delegate = this.getSerializer().patchObj(persistentCopy.delegate);\n instance = createInstance(Relay, 'newInstance', delegate);\n }\n\n if (persistentCopy.isPlainRecord) {\n instance = createInstance(Record, 'newPlainInstance');\n }\n\n if (!instance) alert('Cannot serialize old model object: ' + JSON.stringify(persistentCopy))\n return instance;\n },\n\n});\n\n\nObjectLinearizerPlugin.subclass('DEPRECATEDScriptFilter',\n'accessing', {\n serializedScriptsProperty: '__serializedScripts__',\n getSerializedScriptsFrom: function(obj) {\n if (!obj.hasOwnProperty(this.serializedScriptsProperty)) return null;\n return obj[this.serializedScriptsProperty]\n },\n},\n'plugin interface', {\n additionallySerialize: function(original, persistentCopy) {\n var scripts = {}, found = false;\n Functions.own(original).forEach(function(funcName) {\n var func = original[funcName];\n if (!func.isSerializable) return;\n found = true;\n scripts[funcName] = func.toString();\n });\n if (!found) return;\n persistentCopy[this.serializedScriptsProperty] = scripts;\n },\n afterDeserializeObj: function(obj) {\n var scripts = this.getSerializedScriptsFrom(obj);\n if (!scripts) return;\n Properties.forEachOwn(scripts, function(scriptName, scriptSource) {\n Function.fromString(scriptSource).asScriptOf(obj, scriptName);\n })\n delete obj[this.serializedScriptsProperty];\n },\n});\n\nObjectLinearizerPlugin.subclass('ClosurePlugin',\n'initializing', {\n initialize: function($super) {\n $super();\n this.objectsMethodNamesAndClosures = [];\n },\n},\n'accessing', {\n serializedClosuresProperty: '__serializedLivelyClosures__',\n getSerializedClosuresFrom: function(obj) {\n return obj.hasOwnProperty(this.serializedClosuresProperty) ?\n obj[this.serializedClosuresProperty] : null;\n },\n},\n'plugin interface', {\n serializeObj: function(closure) { // for serializing lively.Closures\n if (!closure || !closure.isLivelyClosure || closure.hasFuncSource()) return;\n if (closure.originalFunc)\n closure.setFuncSource(closure.originalFunc.toString());\n return closure;\n },\n additionallySerialize: function(original, persistentCopy) {\n var closures = {}, found = false;\n Functions.own(original).forEach(function(funcName) {\n var func = original[funcName];\n if (!func || !func.hasLivelyClosure) return;\n found = true;\n closures[funcName] = func.livelyClosure;\n });\n if (!found) return;\n // if we found closures, serialize closures object, this will also trigger\n // ClosurePlugin>>serializeObj for those closures\n persistentCopy[this.serializedClosuresProperty] = this.getSerializer().register(closures);\n },\n afterDeserializeObj: function(obj) {\n var closures = this.getSerializedClosuresFrom(obj);\n if (!closures) return;\n Properties.forEachOwn(closures, function(name, closure) {\n // we defer the recreation of the actual function so that all of the\n // function's properties are already deserialized\n if (closure instanceof lively.Closure) {\n // obj[name] = closure.recreateFunc();\n obj.__defineSetter__(name, function(v) { delete obj[name]; obj[name] = v });\n // in case the method is accessed or called before we are done with serializing\n // everything, we do an 'early recreation'\n obj.__defineGetter__(name, function() {\n // alert('early closure recreation ' + name)\n return closure.recreateFunc().addToObject(obj, name);\n })\n this.objectsMethodNamesAndClosures.push({obj: obj, name: name, closure: closure});\n }\n }, this);\n delete obj[this.serializedClosuresProperty];\n },\n deserializationDone: function() {\n this.objectsMethodNamesAndClosures.forEach(function(ea) {\n ea.closure.recreateFunc().addToObject(ea.obj, ea.name);\n })\n },\n});\n\nObjectLinearizerPlugin.subclass('IgnoreFunctionsPlugin',\n'interface', {\n ignoreProp: function(obj, propName, value) {\n return value && typeof value === 'function' && !value.isLivelyClosure && !(value instanceof RegExp);\n },\n});\n\nObjectLinearizerPlugin.subclass('lively.persistence.DatePlugin',\n'interface', {\n serializeObj: function(obj, copy) {\n return obj instanceof Date ? {isSerializedDate: true, string: String(obj)} : null;\n },\n deserializeObj: function(copy) {\n return copy && copy.isSerializedDate ? new Date(copy.string): null;\n },\n});\n\nObjectLinearizerPlugin.subclass('GenericFilter',\n// example\n// f = new GenericFilter()\n// f.addPropertyToIgnore('owner')\n//\n'initializing', {\n initialize: function($super) {\n $super();\n this.ignoredClasses = [];\n this.ignoredProperties = [];\n this.filterFunctions = [];\n },\n},\n'plugin interface', {\n addClassToIgnore: function(klass) {\n this.ignoredClasses.push(klass.type);\n },\n addPropertyToIgnore: function(name) {\n this.ignoredProperties.push(name);\n },\n\n addFilter: function(filterFunction) {\n this.filterFunctions.push(filterFunction);\n },\n ignoreProp: function(obj, propName, value) {\n return this.ignoredProperties.include(propName) ||\n (value && this.ignoredClasses.include(value.constructor.type)) ||\n this.filterFunctions.any(function(func) { return func(obj, propName, value) });\n },\n});\n\nObjectLinearizerPlugin.subclass('ConversionPlugin',\n'initializing', {\n initialize: function(deserializeFunc, afterDeserializeFunc) {\n this.deserializeFunc = deserializeFunc || Functions.Null;\n this.afterDeserializeFunc = afterDeserializeFunc || Functions.Null;\n this.objectLayouts = {}\n },\n},\n'object layout recording', {\n addObjectLayoutOf: function(obj) {\n var cName = this.getClassName(obj),\n layout = this.objectLayouts[cName] = this.objectLayouts[cName] || {};\n if (!layout.properties) layout.properties = [];\n layout.properties = layout.properties.concat(Properties.all(obj)).uniq();\n },\n printObjectLayouts: function() {\n var str = Properties.own(this.objectLayouts).collect(function(cName) {\n return cName + '\\n ' + this.objectLayouts[cName].properties.join('\\n ')\n }, this).join('\\n\\n')\n return str\n },\n},\n'accessing', {\n getClassName: function(obj) {\n return obj[ClassPlugin.prototype.classNameProperty]\n },\n},\n'plugin interface', {\n afterDeserializeObj: function(obj) {\n return this.afterDeserializeFunc.call(this, obj);\n },\n deserializeObj: function(rawObj) {\n var result = this.deserializeFunc.call(this, rawObj);\n this.addObjectLayoutOf(rawObj);\n return result;\n },\n},\n'registry', {\n patchRegistry: function(oldRegistry, jso) {\n return new ObjectGraphLinearizer().serializeToJso(jso)\n },\n registerWithPlugins: function(obj, plugins) {\n // for object conversion when objects need to register new ones during conversion\n var serializer = this.getSerializer();\n serializer.addPlugins(plugins);\n var id = serializer.register(obj);\n serializer.plugins = serializer.plugins.withoutAll(plugins);\n return id;\n },\n\n},\n'EXAMPLES', {\n convertHPICross: function() {\nJSON.prettyPrint(json)\njso = JSON.parse(json)\n\ndeserialize = function(obj) {\n var serializer = this.getSerializer();\n if (this.getClassName(obj) == 'Morph') {\n delete obj.pvtCachedTransform\n delete obj.__rawNodeInfo__\n obj._Position = obj.origin\n delete obj.origin\n obj._Rotation = obj.rotation\n delete obj.rotation\n obj._Scale = 1;\n delete obj.scalePoint\n delete obj.priorExtent\n obj.scripts = []\n obj.id = obj._livelyDataWrapperId_\n delete obj._livelyDataWrapperId_\n obj.__SourceModuleName__ = 'lively.morphic.Core'\n obj.__LivelyClassName__ = 'lively.morphic.Morph'\n\nobj.halosEnabled = true\nobj.droppingEnabled = true\n }\n if (this.getClassName(obj) == 'lively.scene.Rectangle') {\nif (obj.__rawNodeInfo__) {\n// var rawNodeInfo = serializer.getRegisteredObjectFromSmartRef(obj.__rawNodeInfo__)\nvar rawNodeInfo = obj.__rawNodeInfo__\nvar xAttr = rawNodeInfo.attributes.detect(function(ea) { return ea.key === 'x' })\nvar yAttr = rawNodeInfo.attributes.detect(function(ea) { return ea.key === 'y' })\nif (xAttr && yAttr)\n obj._Position = this.registerWithPlugins(pt(Number(xAttr.value), Number(yAttr.value)), [new ClassPlugin()])\nvar widthAttr = rawNodeInfo.attributes.detect(function(ea) { return ea.key === 'width' })\nvar heightAttr = rawNodeInfo.attributes.detect(function(ea) { return ea.key === 'height' })\nif (widthAttr && heightAttr )\n obj._Extent = this.registerWithPlugins(pt(Number(widthAttr.value), Number(heightAttr.value)), [new ClassPlugin()])\n\nvar attr = rawNodeInfo.attributes.detect(function(ea) { return ea.key === 'fill-opacity' })\nobj._FillOpacity = attr && Number(attr.value)\nvar attr = rawNodeInfo.attributes.detect(function(ea) { return ea.key === 'stroke-opacity' })\nobj._StrokeOpacity = attr && Number(attr.value)\nvar attr = rawNodeInfo.attributes.detect(function(ea) { return ea.key === 'stroke-width' })\nobj._BorderWidth = attr && Number(attr.value)\n}\n delete obj.__rawNodeInfo__\n obj._BorderColor = obj._stroke\n obj._Fill = obj._fill\n obj.id = obj._livelyDataWrapperId_\n delete obj._livelyDataWrapperId_\n obj.__SourceModuleName__ = 'lively.morphic.Shapes'\n obj.__LivelyClassName__ = 'lively.morphic.Shapes.Rectangle'\n }\n\n // return obj\n}\n\nconversionPlugin = new ConversionPlugin(deserialize)\nserializer = ObjectGraphLinearizer.withPlugins([conversionPlugin])\n// set id counter so new objects can be registered\nserializer.idCounter = Math.max.apply(null, Properties.all(jso.registry).collect(function(prop) { return Number(prop) || -1})) + 1\nconvertedRawObj = serializer.deserialize(jso)\nconversionPlugin.printObjectLayouts()\n\nconvertedRawObjRegistry = new ObjectGraphLinearizer().serializeToJso(convertedRawObj)\nobj = ObjectGraphLinearizer.forNewLively().deserializeJso(convertedRawObjRegistry)\n\nobj\nobj.prepareForNewRenderContext(obj.renderContext())\nobj.openInWorld()\n },\n});\n\nObjectLinearizerPlugin.subclass('AttributeConnectionPlugin',\n'plugin interface', {\n deserializeObj: function(persistentCopy) {\n var className = persistentCopy[ClassPlugin.prototype.classNameProperty];\n if (!className || className != 'AttributeConnection') return;\n },\n});\n\nObjectLinearizerPlugin.subclass('CopyOnlySubmorphsPlugin',\n'initializing', {\n initialize: function() {\n this.morphRefId = 0;\n this.idMorphMapping = {};\n this.root = 0;\n },\n},\n'copying', {\n copyAsMorphRef: function(morph) {\n var id = ++this.morphRefId;\n this.idMorphMapping[id] = morph;\n return {isCopyMorphRef: true, morphRefId: id};\n },\n},\n'plugin interface', {\n ignoreProp: function(obj, key, value) {\n if (!value || !this.root || !this.root.isMorph) return false;\n return value === this.root.owner;\n },\n serializeObj: function(obj) {\n // if obj is a morph and the root obj that is copied is a morph then\n // copy this object only if it is a submorph of the root obj\n // otherwise the new copy should directly reference the object\n return (!obj || !this.root || !this.root.isMorph || obj === this.root || !obj.isMorph || !obj.isSubmorphOf || obj.isSubmorphOf(this.root) || !obj.world()) ? null : this.copyAsMorphRef(obj);\n },\n deserializeObj: function(persistentCopy) {\n return persistentCopy.isCopyMorphRef ? this.idMorphMapping[persistentCopy.morphRefId] : undefined;\n },\n});\n\nObjectLinearizerPlugin.subclass('IgnoreEpiMorphsPlugin',\n'plugin interface', {\n ignoreProp: function(obj, key, value) { return value && value.isEpiMorph },\n});\n\n// (de)serialize objects that inherit stuff from a constructor function\nObjectLinearizerPlugin.subclass('lively.persistence.GenericConstructorPlugin',\n'accessing', {\n constructorProperty: '__constructorName__',\n\n getConstructorName: function(obj) {\n return obj && obj.constructor && obj.constructor.name;\n },\n\n isLivelyClassInstance: function(obj) {\n return obj && obj.constructor && obj.constructor.type !== undefined;\n }\n},\n'plugin interface', {\n\n additionallySerialize: function(original, persistentCopy) {\n var name = this.getConstructorName(original);\n if (name && name !== 'Object' && !this.isLivelyClassInstance(original)) {\n persistentCopy[this.constructorProperty] = name;\n return true;\n }\n return false;\n },\n\n deserializeObj: function(persistentCopy) {\n var name = persistentCopy[this.constructorProperty],\n constr = name && Class.forName(name);\n if (!constr) return undefined;\n // we use a new constructor function instead of the real constructor\n // here so that we don't need to know any arguments that might be expected\n // by the original constructor. To correctly make inheritance work\n // (instanceof and .constructor) we set the prototype property of our helper\n // constructor to the real constructor.prototype\n function HelperConstructor() {};\n HelperConstructor.prototype = constr.prototype;\n return new HelperConstructor();\n }\n});\n\nObject.extend(lively.persistence.Serializer, {\n\n jsonWorldId: 'LivelyJSONWorld',\n changeSetElementId: 'WorldChangeSet',\n\n createObjectGraphLinearizer: function() {\n return Config.isNewMorphic ? ObjectGraphLinearizer.forNewLively() : ObjectGraphLinearizer.forLively()\n },\n\n createObjectGraphLinearizerForCopy: function() {\n return Config.isNewMorphic ? ObjectGraphLinearizer.forNewLivelyCopy() : ObjectGraphLinearizer.forLivelyCopy()\n },\n\n serialize: function(obj, optPlugins, optSerializer) {\n var serializer = optSerializer || this.createObjectGraphLinearizer();\n if (optPlugins) optPlugins.forEach(function(plugin) { serializer.addPlugin(plugin) });\n var json = serializer.serialize(obj);\n return json;\n },\n\n serializeWorld: function(world) {\n var doc = new Importer().getBaseDocument(); // FIXME\n return this.serializeWorldToDocument(world, doc);\n },\n\n serializeWorldToDocument: function(world, doc) {\n return this.serializeWorldToDocumentWithSerializer(world, doc, this.createObjectGraphLinearizer());\n },\n\n serializeWorldToDocumentWithSerializer: function(world, doc, serializer) {\n // this helper object was introduced to make the code that is browser dependent\n // (currently IE9 vs the rest) easier to read. It sould be moved to dome general DOM abstraction layer\n var domAccess = {\n getSystemDictNode: function(doc) {\n return (doc.getElementById ?\n doc.getElementById('SystemDictionary') :\n doc.selectSingleNode('//*[@id=\"SystemDictionary\"]'));\n },\n createMetaNode: function(doc) {\n return UserAgent.isIE ? doc.createNode(1, 'meta', Namespace.XHTML) : XHTMLNS.create('meta')\n },\n getCSNode: function(doc, changeSet) {\n var changeSetNode;\n if (!changeSet) {\n alert('Found no ChangeSet while serializing ' + world + '! Adding an empty CS.');\n changeSetNode = LivelyNS.create('code');\n } else {\n changeSetNode = cs.getXMLElement();\n }\n if (!UserAgent.isIE) return doc.importNode(changeSetNode, true);\n // mr: this is a real IE hack!\n var helperDoc = new ActiveXObject('MSXML2.DOMDocument.6.0');\n helperDoc.loadXML(new XMLSerializer().serializeToString(changeSetNode));\n return doc.importNode(helperDoc.firstChild, true);\n },\n getHeadNode: function(doc) {\n return doc.getElementsByTagName('head')[0] || doc.selectSingleNode('//*[\"head\"=name()]');\n },\n }\n\n var head = domAccess.getHeadNode(doc);\n\n // FIXME remove previous meta elements - is this really necessary?\n //var metaElement;\n //while (metaElement = doc.getElementsByTagName('meta')[0])\n // metaElement.parentNode.removeChild(metaElement)\n // removed 2012-01-5 fabian\n // doing this instead: remove old serialized data.. is it necessary or not?\n // we need additional meta tags for better iPad touch support, can't remove all of them..\n var metaToBeRemoved = ['LivelyMigrationLevel', 'WorldChangeSet', 'LivelyJSONWorld'];\n metaToBeRemoved.forEach(function(ea) {\n var element = doc.getElementById(ea);\n if (element) {\n element.parentNode.removeChild(element);\n }});\n\n\n // FIXME remove system dictionary\n var sysDict = domAccess.getSystemDictNode(doc);\n if (sysDict) sysDict.parentNode.removeChild(sysDict);\n\n // store migration level\n var migrationLevel = LivelyMigrationSupport.migrationLevel,\n migrationLevelNode = domAccess.createMetaNode(doc);\n migrationLevelNode.setAttribute('id', LivelyMigrationSupport.migrationLevelNodeId);\n migrationLevelNode.appendChild(doc.createCDATASection(migrationLevel));\n head.appendChild(migrationLevelNode);\n\n // serialize changeset\n var cs = world.getChangeSet(),\n csElement = domAccess.getCSNode(doc, cs),\n metaCSNode = domAccess.createMetaNode(doc);\n metaCSNode.setAttribute('id', this.changeSetElementId);\n metaCSNode.appendChild(csElement);\n head.appendChild(metaCSNode);\n\n // serialize world\n var json = this.serialize(world, null, serializer),\n metaWorldNode = domAccess.createMetaNode(doc);\n if (!json) throw new Error('Cannot serialize world -- serialize returned no JSON!');\n metaWorldNode.setAttribute('id', this.jsonWorldId)\n metaWorldNode.appendChild(doc.createCDATASection(json))\n head.appendChild(metaWorldNode);\n\n return doc;\n },\n deserialize: function(json, optDeserializer) {\n var deserializer = optDeserializer || this.createObjectGraphLinearizer();\n var obj = deserializer.deserialize(json);\n return obj;\n },\n\n deserializeWorldFromDocument: function(doc) {\n var worldMetaElement = doc.getElementById(this.jsonWorldId);\n if (!worldMetaElement)\n throw new Error('Cannot find JSONified world when deserializing');\n var serializer = this.createObjectGraphLinearizer(),\n json = worldMetaElement.textContent,\n world = serializer.deserialize(json);\n return world;\n },\n\n deserializeWorldFromJso: function(jso) {\n var serializer = this.createObjectGraphLinearizer(),\n world = serializer.deserializeJso(jso);\n return world;\n },\n\n deserializeChangeSetFromDocument: function(doc) {\n var csMetaElement = doc.getElementById(this.changeSetElementId);\n if (!csMetaElement)\n throw new Error('Cannot find ChangeSet meta element when deserializing');\n return ChangeSet.fromNode(csMetaElement);\n },\n\n sourceModulesIn: function(jso) {\n return new ClassPlugin().sourceModulesIn(jso.registry);\n },\n\n parseJSON: function(json) {\n return ObjectGraphLinearizer.parseJSON(json);\n },\n\n copyWithoutWorld: function(obj) {\n var serializer = this.createObjectGraphLinearizerForCopy(),\n dontCopyWorldPlugin = new GenericFilter();\n dontCopyWorldPlugin.addFilter(function(obj, propName, value) { return value === lively.morphic.World.current() })\n serializer.addPlugin(dontCopyWorldPlugin);\n var copy = serializer.copy(obj);\n return copy;\n },\n\n newMorphicCopy: function(obj) {\n var serializer = this.createObjectGraphLinearizerForCopy();\n serializer.showLog = false;\n var copyPlugin = new CopyOnlySubmorphsPlugin();\n copyPlugin.root = obj;\n serializer.addPlugin(copyPlugin);\n return serializer.copy(obj);\n },\n});\n\nObject.extend(lively.persistence, {\n getPluginsForLively: function() {\n return this.pluginsForLively.collect(function(klass) {\n return new klass();\n })\n },\n\n pluginsForLively: [\n StoreAndRestorePlugin,\n ClosurePlugin,\n RegExpPlugin,\n IgnoreFunctionsPlugin,\n ClassPlugin,\n IgnoreEpiMorphsPlugin,\n DoNotSerializePlugin,\n DoWeakSerializePlugin,\n IgnoreDOMElementsPlugin,\n LayerPlugin,\n lively.persistence.DatePlugin]\n});\n\nObject.extend(ObjectGraphLinearizer, {\n forNewLively: function() {\n var serializer = new ObjectGraphLinearizer();\n serializer.addPlugins(lively.persistence.getPluginsForLively());\n return serializer;\n },\n\n forNewLivelyCopy: function() {\n var serializer = this.forNewLively(),\n p = new GenericFilter(),\n world = lively.morphic.World.current();\n p.addFilter(function(obj, prop, value) { return value === world })\n serializer.addPlugins([p]);\n return serializer;\n }\n});\n\n\n// Proper namespacing\nObject.extend(lively.persistence, {\n ObjectGraphLinearizer: ObjectGraphLinearizer,\n ObjectLinearizerPlugin: ObjectLinearizerPlugin,\n ClassPlugin: ClassPlugin,\n LayerPlugin: LayerPlugin,\n StoreAndRestorePlugin: StoreAndRestorePlugin,\n DoNotSerializePlugin: DoNotSerializePlugin,\n DoWeakSerializePlugin: DoWeakSerializePlugin,\n LivelyWrapperPlugin: LivelyWrapperPlugin,\n IgnoreDOMElementsPlugin: IgnoreDOMElementsPlugin,\n RegExpPlugin: RegExpPlugin,\n OldModelFilter: OldModelFilter,\n DEPRECATEDScriptFilter: DEPRECATEDScriptFilter,\n ClosurePlugin: ClosurePlugin,\n IgnoreFunctionsPlugin: IgnoreFunctionsPlugin,\n GenericFilter: GenericFilter,\n ConversionPlugin: ConversionPlugin,\n AttributeConnectionPlugin: AttributeConnectionPlugin\n});\n\n}) // end of module\n","doNotSerialize":["$$targetURL"],"doNotCopyProperties":["$$targetURL"],"targetURL":{"__isSmartRef__":true,"id":1187},"_rootNode":{"__isSmartRef__":true,"id":648},"Pane1Selection":null,"pane1Selection":null,"Pane2Selection":null,"pane2Selection":null,"Pane3Selection":null,"pane3Selection":null,"Pane4Selection":null,"pane4Selection":null,"Pane4Content":["-----"],"Pane3Content":["-----"],"Pane2Content":["-----"],"Pane1Content":[{"__isSmartRef__":true,"id":645},{"__isSmartRef__":true,"id":669},{"__isSmartRef__":true,"id":670},{"__isSmartRef__":true,"id":671},{"__isSmartRef__":true,"id":672},{"__isSmartRef__":true,"id":673},{"__isSmartRef__":true,"id":674},{"__isSmartRef__":true,"id":675},{"__isSmartRef__":true,"id":676},{"__isSmartRef__":true,"id":677},{"__isSmartRef__":true,"id":678},{"__isSmartRef__":true,"id":679},{"__isSmartRef__":true,"id":680},{"__isSmartRef__":true,"id":681},{"__isSmartRef__":true,"id":682},{"__isSmartRef__":true,"id":683}],"Pane1Menu":[["Add to world requirements"],["remove"],["reparse"],["-------"],["open in text editor"],["show versions"],["diff versions"],["get module part"]],"Pane2Menu":[["-------"],["add class"],["add object extension"],["add layer"],["open in text editor"],["show versions"],["diff versions"],["get module part"]],"Pane3Menu":[["-------"],["open in text editor"],["show versions"],["diff versions"],["get module part"]],"currentModuleName":"lively.persistence.Serializer","Pane4Menu":[["-------"],["add method"]],"__LivelyClassName__":"lively.ide.SystemBrowser","__SourceModuleName__":"Global.lively.ide.SystemCodeBrowser"},"385":{"browser":{"__isSmartRef__":true,"id":384},"button":{"__isSmartRef__":true,"id":386},"__LivelyClassName__":"lively.ide.AddNewFileCommand","__SourceModuleName__":"Global.lively.ide.BrowserCommands"},"386":{"submorphs":[{"__isSmartRef__":true,"id":387}],"scripts":[],"shape":{"__isSmartRef__":true,"id":399},"derivationIds":[null],"id":"13DDAD6B-5C0D-49D5-81A2-CD3C095098D5","renderContextTable":{"__isSmartRef__":true,"id":404},"eventHandler":{"__isSmartRef__":true,"id":405},"grabbingEnabled":false,"droppingEnabled":false,"halosEnabled":true,"_Position":{"__isSmartRef__":true,"id":406},"priorExtent":{"__isSmartRef__":true,"id":407},"value":false,"toggle":false,"isActive":true,"normalFill":{"__isSmartRef__":true,"id":104},"lighterFill":{"__isSmartRef__":true,"id":408},"label":{"__isSmartRef__":true,"id":387},"command":{"__isSmartRef__":true,"id":385},"attributeConnections":[{"__isSmartRef__":true,"id":417},{"__isSmartRef__":true,"id":418}],"doNotSerialize":["$$fire"],"doNotCopyProperties":["$$fire"],"owner":{"__isSmartRef__":true,"id":370},"__LivelyClassName__":"lively.morphic.Button","__SourceModuleName__":"Global.lively.morphic.Widgets"},"387":{"submorphs":[],"scripts":[],"shape":{"__isSmartRef__":true,"id":388},"derivationIds":[null],"id":"0D9C2EA0-4190-46FD-80F2-78E72142A054","renderContextTable":{"__isSmartRef__":true,"id":393},"_WhiteSpaceHandling":"pre-wrap","textChunks":[{"__isSmartRef__":true,"id":394}],"eventHandler":{"__isSmartRef__":true,"id":396},"grabbingEnabled":false,"droppingEnabled":false,"halosEnabled":true,"_ClipMode":"hidden","fixedWidth":true,"fixedHeight":true,"allowInput":false,"_FontFamily":"Helvetica","_FontSize":10,"_Position":{"__isSmartRef__":true,"id":397},"priorExtent":{"__isSmartRef__":true,"id":398},"_MaxTextWidth":117.14285714285714,"_MinTextWidth":117.14285714285714,"_MaxTextHeight":null,"_MinTextHeight":null,"evalEnabled":false,"owner":{"__isSmartRef__":true,"id":386},"isLabel":true,"_HandStyle":"default","_TextColor":{"__isSmartRef__":true,"id":77},"_Align":"center","eventsAreIgnored":true,"__LivelyClassName__":"lively.morphic.Text","__SourceModuleName__":"Global.lively.morphic.TextCore"},"388":{"_Position":{"__isSmartRef__":true,"id":389},"renderContextTable":{"__isSmartRef__":true,"id":390},"_Extent":{"__isSmartRef__":true,"id":391},"_ClipMode":"hidden","_Padding":{"__isSmartRef__":true,"id":392},"_BorderWidth":0,"_BorderColor":{"__isSmartRef__":true,"id":77},"_Fill":null,"__LivelyClassName__":"lively.morphic.Shapes.Rectangle","__SourceModuleName__":"Global.lively.morphic.Shapes"},"389":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global.lively.morphic.Graphics"},"390":{"init":"initHTML","appendShape":"renderHTML","setPosition":"setPositionHTML","setExtent":"setExtentHTML","setPadding":"setPaddingHTML","setFill":"setFillHTML","setBorderColor":"setBorderColorHTML","setBorderWidth":"setBorderWidthHTML","setStrokeOpacity":"setStrokeOpacityHTML","setBorderRadius":"setBorderRadiusHTML","setBorderStyle":"setBorderStyleHTML","setOpacity":"setOpacityHTML","setClipMode":"setClipModeHTML"},"391":{"x":117.14285714285714,"y":22,"__LivelyClassName__":"Point","__SourceModuleName__":"Global.lively.morphic.Graphics"},"392":{"x":0,"y":4,"width":0,"height":0,"__LivelyClassName__":"Rectangle","__SourceModuleName__":"Global.lively.morphic.Graphics"},"393":{"replaceRenderContext":"replaceRenderContextHTML","init":"initHTML","append":"appendHTML","remove":"removeHTML","triggerEvent":"triggerEventHTML","setTransform":"setTransformHTML","setPosition":"setPositionHTML","setRotation":"setRotationHTML","setExtent":"setExtentHTML","setScale":"setScaleHTML","setVisible":"setVisibleHTML","adjustOrigin":"adjustOriginHTML","setPivotPoint":"setPivotPointHTML","setClipMode":"setClipModeHTML","showsVerticalScrollBar":"showsVerticalScrollBarHTML","showsHorizontalScrollBar":"showsHorizontalScrollBarHTML","getScrollBarExtent":"getScrollBarExtentHTML","setHandStyle":"setHandStyleHTML","setPointerEvents":"setPointerEventsHTML","setToolTip":"setToolTipHTML","focus":"focusHTML","blur":"blurHTML","setFocusable":"setFocusableHTML","updateText":"updateTextHTML","setTextExtent":"setTextExtentHTML","setMaxTextWidth":"setMaxTextWidthHTML","setMaxTextHeight":"setMaxTextHeightHTML","setMinTextWidth":"setMinTextWidthHTML","setMinTextHeight":"setMinTextHeightHTML","getTextExtent":"getTextExtentHTML","getTextString":"getTextStringHTML","ignoreTextEvents":"ignoreTextEventsHTML","unignoreTextEvents":"unignoreTextEventsHTML","enableTextEvents":"enableTextEventsHTML","setFontFamily":"setFontFamilyHTML","setFontSize":"setFontSizeHTML","setTextColor":"setTextColorHTML","setPadding":"setPaddingHTML","setAlign":"setAlignHTML","setVerticalAlign":"setVerticalAlignHTML","setDisplay":"setDisplayHTML","setWhiteSpaceHandling":"setWhiteSpaceHandlingHTML","focusMorph":"focusMorphHTML"},"394":{"style":{"__isSmartRef__":true,"id":395},"chunkOwner":{"__isSmartRef__":true,"id":387},"storedString":"Add module","__LivelyClassName__":"lively.morphic.TextChunk","__SourceModuleName__":"Global.lively.morphic.TextCore"},"395":{"__LivelyClassName__":"lively.morphic.TextEmphasis","__SourceModuleName__":"Global.lively.morphic.TextCore"},"396":{"morph":{"__isSmartRef__":true,"id":387},"__LivelyClassName__":"lively.morphic.EventHandler","__SourceModuleName__":"Global.lively.morphic.Events"},"397":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global.lively.morphic.Graphics"},"398":{"x":117.14285714285714,"y":22,"__LivelyClassName__":"Point","__SourceModuleName__":"Global.lively.morphic.Graphics"},"399":{"_Position":{"__isSmartRef__":true,"id":400},"renderContextTable":{"__isSmartRef__":true,"id":401},"_Extent":{"__isSmartRef__":true,"id":402},"_ClipMode":"visible","_Padding":{"__isSmartRef__":true,"id":403},"_BorderWidth":1,"_BorderColor":{"__isSmartRef__":true,"id":103},"_Fill":{"__isSmartRef__":true,"id":104},"_BorderRadius":5,"__LivelyClassName__":"lively.morphic.Shapes.Rectangle","__SourceModuleName__":"Global.lively.morphic.Shapes"},"400":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global.lively.morphic.Graphics"},"401":{"init":"initHTML","appendShape":"renderHTML","setPosition":"setPositionHTML","setExtent":"setExtentHTML","setPadding":"setPaddingHTML","setFill":"setFillHTML","setBorderColor":"setBorderColorHTML","setBorderWidth":"setBorderWidthHTML","setStrokeOpacity":"setStrokeOpacityHTML","setBorderRadius":"setBorderRadiusHTML","setBorderStyle":"setBorderStyleHTML","setOpacity":"setOpacityHTML","setClipMode":"setClipModeHTML"},"402":{"x":117.14285714285714,"y":22,"__LivelyClassName__":"Point","__SourceModuleName__":"Global.lively.morphic.Graphics"},"403":{"x":0,"y":0,"width":0,"height":0,"__LivelyClassName__":"Rectangle","__SourceModuleName__":"Global.lively.morphic.Graphics"},"404":{"replaceRenderContext":"replaceRenderContextHTML","init":"initHTML","append":"appendHTML","remove":"removeHTML","triggerEvent":"triggerEventHTML","setTransform":"setTransformHTML","setPosition":"setPositionHTML","setRotation":"setRotationHTML","setExtent":"setExtentHTML","setScale":"setScaleHTML","setVisible":"setVisibleHTML","adjustOrigin":"adjustOriginHTML","setPivotPoint":"setPivotPointHTML","setClipMode":"setClipModeHTML","showsVerticalScrollBar":"showsVerticalScrollBarHTML","showsHorizontalScrollBar":"showsHorizontalScrollBarHTML","getScrollBarExtent":"getScrollBarExtentHTML","setHandStyle":"setHandStyleHTML","setPointerEvents":"setPointerEventsHTML","setToolTip":"setToolTipHTML","focus":"focusHTML","blur":"blurHTML","setFocusable":"setFocusableHTML"},"405":{"morph":{"__isSmartRef__":true,"id":386},"__LivelyClassName__":"lively.morphic.EventHandler","__SourceModuleName__":"Global.lively.morphic.Events"},"406":{"x":0,"y":220,"__LivelyClassName__":"Point","__SourceModuleName__":"Global.lively.morphic.Graphics"},"407":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global.lively.morphic.Graphics"},"408":{"stops":[{"__isSmartRef__":true,"id":409},{"__isSmartRef__":true,"id":411},{"__isSmartRef__":true,"id":413},{"__isSmartRef__":true,"id":415}],"vector":{"__isSmartRef__":true,"id":113},"__LivelyClassName__":"lively.morphic.LinearGradient","__SourceModuleName__":"Global.lively.morphic.Shapes"},"409":{"offset":0,"color":{"__isSmartRef__":true,"id":410}},"410":{"r":0.98,"g":0.98,"b":0.98,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global.lively.morphic.Graphics"},"411":{"offset":0.4,"color":{"__isSmartRef__":true,"id":412}},"412":{"r":0.91,"g":0.91,"b":0.91,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global.lively.morphic.Graphics"},"413":{"offset":0.6,"color":{"__isSmartRef__":true,"id":414}},"414":{"r":0.91,"g":0.91,"b":0.91,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global.lively.morphic.Graphics"},"415":{"offset":1,"color":{"__isSmartRef__":true,"id":416}},"416":{"r":0.97,"g":0.97,"b":0.97,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global.lively.morphic.Graphics"},"417":{"sourceObj":{"__isSmartRef__":true,"id":386},"sourceAttrName":"fire","targetObj":{"__isSmartRef__":true,"id":385},"targetMethodName":"trigger","__LivelyClassName__":"AttributeConnection","__SourceModuleName__":"Global.lively.bindings"},"418":{"sourceObj":{"__isSmartRef__":true,"id":386},"sourceAttrName":"fire","targetObj":{"__isSmartRef__":true,"id":386},"targetMethodName":"setLabel","converter":null,"converterString":"function () { return this.getSourceObj().command.asString() }","updater":null,"updaterString":null,"varMapping":{"__isSmartRef__":true,"id":419},"__LivelyClassName__":"AttributeConnection","__SourceModuleName__":"Global.lively.bindings"},"419":{"source":{"__isSmartRef__":true,"id":386},"target":{"__isSmartRef__":true,"id":386}},"420":{"browser":{"__isSmartRef__":true,"id":384},"button":{"__isSmartRef__":true,"id":421},"__LivelyClassName__":"lively.ide.AllModulesLoadCommand","__SourceModuleName__":"Global.lively.ide.BrowserCommands"},"421":{"submorphs":[{"__isSmartRef__":true,"id":422}],"scripts":[],"shape":{"__isSmartRef__":true,"id":434},"derivationIds":[null],"id":"A65DF687-B976-497C-98C8-5C65752CD308","renderContextTable":{"__isSmartRef__":true,"id":439},"eventHandler":{"__isSmartRef__":true,"id":440},"grabbingEnabled":false,"droppingEnabled":false,"halosEnabled":true,"_Position":{"__isSmartRef__":true,"id":441},"priorExtent":{"__isSmartRef__":true,"id":442},"value":false,"toggle":false,"isActive":true,"normalFill":{"__isSmartRef__":true,"id":104},"lighterFill":{"__isSmartRef__":true,"id":443},"label":{"__isSmartRef__":true,"id":422},"command":{"__isSmartRef__":true,"id":420},"attributeConnections":[{"__isSmartRef__":true,"id":452},{"__isSmartRef__":true,"id":453}],"doNotSerialize":["$$fire"],"doNotCopyProperties":["$$fire"],"owner":{"__isSmartRef__":true,"id":370},"__LivelyClassName__":"lively.morphic.Button","__SourceModuleName__":"Global.lively.morphic.Widgets"},"422":{"submorphs":[],"scripts":[],"shape":{"__isSmartRef__":true,"id":423},"derivationIds":[null],"id":"247EAE61-BBFA-44BF-870C-47456AB7911C","renderContextTable":{"__isSmartRef__":true,"id":428},"_WhiteSpaceHandling":"pre-wrap","textChunks":[{"__isSmartRef__":true,"id":429}],"eventHandler":{"__isSmartRef__":true,"id":431},"grabbingEnabled":false,"droppingEnabled":false,"halosEnabled":true,"_ClipMode":"hidden","fixedWidth":true,"fixedHeight":true,"allowInput":false,"_FontFamily":"Helvetica","_FontSize":10,"_Position":{"__isSmartRef__":true,"id":432},"priorExtent":{"__isSmartRef__":true,"id":433},"_MaxTextWidth":117.14285714285714,"_MinTextWidth":117.14285714285714,"_MaxTextHeight":null,"_MinTextHeight":null,"evalEnabled":false,"owner":{"__isSmartRef__":true,"id":421},"isLabel":true,"_HandStyle":"default","_TextColor":{"__isSmartRef__":true,"id":77},"_Align":"center","eventsAreIgnored":true,"__LivelyClassName__":"lively.morphic.Text","__SourceModuleName__":"Global.lively.morphic.TextCore"},"423":{"_Position":{"__isSmartRef__":true,"id":424},"renderContextTable":{"__isSmartRef__":true,"id":425},"_Extent":{"__isSmartRef__":true,"id":426},"_ClipMode":"hidden","_Padding":{"__isSmartRef__":true,"id":427},"_BorderWidth":0,"_BorderColor":{"__isSmartRef__":true,"id":77},"_Fill":null,"__LivelyClassName__":"lively.morphic.Shapes.Rectangle","__SourceModuleName__":"Global.lively.morphic.Shapes"},"424":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global.lively.morphic.Graphics"},"425":{"init":"initHTML","appendShape":"renderHTML","setPosition":"setPositionHTML","setExtent":"setExtentHTML","setPadding":"setPaddingHTML","setFill":"setFillHTML","setBorderColor":"setBorderColorHTML","setBorderWidth":"setBorderWidthHTML","setStrokeOpacity":"setStrokeOpacityHTML","setBorderRadius":"setBorderRadiusHTML","setBorderStyle":"setBorderStyleHTML","setOpacity":"setOpacityHTML","setClipMode":"setClipModeHTML"},"426":{"x":117.14285714285714,"y":22,"__LivelyClassName__":"Point","__SourceModuleName__":"Global.lively.morphic.Graphics"},"427":{"x":0,"y":4,"width":0,"height":0,"__LivelyClassName__":"Rectangle","__SourceModuleName__":"Global.lively.morphic.Graphics"},"428":{"replaceRenderContext":"replaceRenderContextHTML","init":"initHTML","append":"appendHTML","remove":"removeHTML","triggerEvent":"triggerEventHTML","setTransform":"setTransformHTML","setPosition":"setPositionHTML","setRotation":"setRotationHTML","setExtent":"setExtentHTML","setScale":"setScaleHTML","setVisible":"setVisibleHTML","adjustOrigin":"adjustOriginHTML","setPivotPoint":"setPivotPointHTML","setClipMode":"setClipModeHTML","showsVerticalScrollBar":"showsVerticalScrollBarHTML","showsHorizontalScrollBar":"showsHorizontalScrollBarHTML","getScrollBarExtent":"getScrollBarExtentHTML","setHandStyle":"setHandStyleHTML","setPointerEvents":"setPointerEventsHTML","setToolTip":"setToolTipHTML","focus":"focusHTML","blur":"blurHTML","setFocusable":"setFocusableHTML","updateText":"updateTextHTML","setTextExtent":"setTextExtentHTML","setMaxTextWidth":"setMaxTextWidthHTML","setMaxTextHeight":"setMaxTextHeightHTML","setMinTextWidth":"setMinTextWidthHTML","setMinTextHeight":"setMinTextHeightHTML","getTextExtent":"getTextExtentHTML","getTextString":"getTextStringHTML","ignoreTextEvents":"ignoreTextEventsHTML","unignoreTextEvents":"unignoreTextEventsHTML","enableTextEvents":"enableTextEventsHTML","setFontFamily":"setFontFamilyHTML","setFontSize":"setFontSizeHTML","setTextColor":"setTextColorHTML","setPadding":"setPaddingHTML","setAlign":"setAlignHTML","setVerticalAlign":"setVerticalAlignHTML","setDisplay":"setDisplayHTML","setWhiteSpaceHandling":"setWhiteSpaceHandlingHTML","focusMorph":"focusMorphHTML"},"429":{"style":{"__isSmartRef__":true,"id":430},"chunkOwner":{"__isSmartRef__":true,"id":422},"storedString":"Load all","__LivelyClassName__":"lively.morphic.TextChunk","__SourceModuleName__":"Global.lively.morphic.TextCore"},"430":{"__LivelyClassName__":"lively.morphic.TextEmphasis","__SourceModuleName__":"Global.lively.morphic.TextCore"},"431":{"morph":{"__isSmartRef__":true,"id":422},"__LivelyClassName__":"lively.morphic.EventHandler","__SourceModuleName__":"Global.lively.morphic.Events"},"432":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global.lively.morphic.Graphics"},"433":{"x":117.14285714285714,"y":22,"__LivelyClassName__":"Point","__SourceModuleName__":"Global.lively.morphic.Graphics"},"434":{"_Position":{"__isSmartRef__":true,"id":435},"renderContextTable":{"__isSmartRef__":true,"id":436},"_Extent":{"__isSmartRef__":true,"id":437},"_ClipMode":"visible","_Padding":{"__isSmartRef__":true,"id":438},"_BorderWidth":1,"_BorderColor":{"__isSmartRef__":true,"id":103},"_Fill":{"__isSmartRef__":true,"id":104},"_BorderRadius":5,"__LivelyClassName__":"lively.morphic.Shapes.Rectangle","__SourceModuleName__":"Global.lively.morphic.Shapes"},"435":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global.lively.morphic.Graphics"},"436":{"init":"initHTML","appendShape":"renderHTML","setPosition":"setPositionHTML","setExtent":"setExtentHTML","setPadding":"setPaddingHTML","setFill":"setFillHTML","setBorderColor":"setBorderColorHTML","setBorderWidth":"setBorderWidthHTML","setStrokeOpacity":"setStrokeOpacityHTML","setBorderRadius":"setBorderRadiusHTML","setBorderStyle":"setBorderStyleHTML","setOpacity":"setOpacityHTML","setClipMode":"setClipModeHTML"},"437":{"x":117.14285714285714,"y":22,"__LivelyClassName__":"Point","__SourceModuleName__":"Global.lively.morphic.Graphics"},"438":{"x":0,"y":0,"width":0,"height":0,"__LivelyClassName__":"Rectangle","__SourceModuleName__":"Global.lively.morphic.Graphics"},"439":{"replaceRenderContext":"replaceRenderContextHTML","init":"initHTML","append":"appendHTML","remove":"removeHTML","triggerEvent":"triggerEventHTML","setTransform":"setTransformHTML","setPosition":"setPositionHTML","setRotation":"setRotationHTML","setExtent":"setExtentHTML","setScale":"setScaleHTML","setVisible":"setVisibleHTML","adjustOrigin":"adjustOriginHTML","setPivotPoint":"setPivotPointHTML","setClipMode":"setClipModeHTML","showsVerticalScrollBar":"showsVerticalScrollBarHTML","showsHorizontalScrollBar":"showsHorizontalScrollBarHTML","getScrollBarExtent":"getScrollBarExtentHTML","setHandStyle":"setHandStyleHTML","setPointerEvents":"setPointerEventsHTML","setToolTip":"setToolTipHTML","focus":"focusHTML","blur":"blurHTML","setFocusable":"setFocusableHTML"},"440":{"morph":{"__isSmartRef__":true,"id":421},"__LivelyClassName__":"lively.morphic.EventHandler","__SourceModuleName__":"Global.lively.morphic.Events"},"441":{"x":117.14285714285714,"y":220,"__LivelyClassName__":"Point","__SourceModuleName__":"Global.lively.morphic.Graphics"},"442":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global.lively.morphic.Graphics"},"443":{"stops":[{"__isSmartRef__":true,"id":444},{"__isSmartRef__":true,"id":446},{"__isSmartRef__":true,"id":448},{"__isSmartRef__":true,"id":450}],"vector":{"__isSmartRef__":true,"id":113},"__LivelyClassName__":"lively.morphic.LinearGradient","__SourceModuleName__":"Global.lively.morphic.Shapes"},"444":{"offset":0,"color":{"__isSmartRef__":true,"id":445}},"445":{"r":0.98,"g":0.98,"b":0.98,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global.lively.morphic.Graphics"},"446":{"offset":0.4,"color":{"__isSmartRef__":true,"id":447}},"447":{"r":0.91,"g":0.91,"b":0.91,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global.lively.morphic.Graphics"},"448":{"offset":0.6,"color":{"__isSmartRef__":true,"id":449}},"449":{"r":0.91,"g":0.91,"b":0.91,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global.lively.morphic.Graphics"},"450":{"offset":1,"color":{"__isSmartRef__":true,"id":451}},"451":{"r":0.97,"g":0.97,"b":0.97,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global.lively.morphic.Graphics"},"452":{"sourceObj":{"__isSmartRef__":true,"id":421},"sourceAttrName":"fire","targetObj":{"__isSmartRef__":true,"id":420},"targetMethodName":"trigger","__LivelyClassName__":"AttributeConnection","__SourceModuleName__":"Global.lively.bindings"},"453":{"sourceObj":{"__isSmartRef__":true,"id":421},"sourceAttrName":"fire","targetObj":{"__isSmartRef__":true,"id":421},"targetMethodName":"setLabel","converter":null,"converterString":"function () { return this.getSourceObj().command.asString() }","updater":null,"updaterString":null,"varMapping":{"__isSmartRef__":true,"id":454},"__LivelyClassName__":"AttributeConnection","__SourceModuleName__":"Global.lively.bindings"},"454":{"source":{"__isSmartRef__":true,"id":421},"target":{"__isSmartRef__":true,"id":421}},"455":{"browser":{"__isSmartRef__":true,"id":384},"button":{"__isSmartRef__":true,"id":456},"__LivelyClassName__":"lively.ide.ShowLineNumbersCommand","__SourceModuleName__":"Global.lively.ide.BrowserCommands"},"456":{"submorphs":[{"__isSmartRef__":true,"id":457}],"scripts":[],"shape":{"__isSmartRef__":true,"id":469},"derivationIds":[null],"id":"18A2C4FD-934A-47F5-83C9-B50D5DE005E3","renderContextTable":{"__isSmartRef__":true,"id":474},"eventHandler":{"__isSmartRef__":true,"id":475},"grabbingEnabled":false,"droppingEnabled":false,"halosEnabled":true,"_Position":{"__isSmartRef__":true,"id":476},"priorExtent":{"__isSmartRef__":true,"id":477},"value":false,"toggle":false,"isActive":true,"normalFill":{"__isSmartRef__":true,"id":104},"lighterFill":{"__isSmartRef__":true,"id":478},"label":{"__isSmartRef__":true,"id":457},"command":{"__isSmartRef__":true,"id":455},"attributeConnections":[{"__isSmartRef__":true,"id":487},{"__isSmartRef__":true,"id":488}],"doNotSerialize":["$$fire"],"doNotCopyProperties":["$$fire"],"owner":{"__isSmartRef__":true,"id":370},"__LivelyClassName__":"lively.morphic.Button","__SourceModuleName__":"Global.lively.morphic.Widgets"},"457":{"submorphs":[],"scripts":[],"shape":{"__isSmartRef__":true,"id":458},"derivationIds":[null],"id":"9A4E0A3A-7098-4FBE-88A0-A1E3DFF50311","renderContextTable":{"__isSmartRef__":true,"id":463},"_WhiteSpaceHandling":"pre-wrap","textChunks":[{"__isSmartRef__":true,"id":464}],"eventHandler":{"__isSmartRef__":true,"id":466},"grabbingEnabled":false,"droppingEnabled":false,"halosEnabled":true,"_ClipMode":"hidden","fixedWidth":true,"fixedHeight":true,"allowInput":false,"_FontFamily":"Helvetica","_FontSize":10,"_Position":{"__isSmartRef__":true,"id":467},"priorExtent":{"__isSmartRef__":true,"id":468},"_MaxTextWidth":117.14285714285714,"_MinTextWidth":117.14285714285714,"_MaxTextHeight":null,"_MinTextHeight":null,"evalEnabled":false,"owner":{"__isSmartRef__":true,"id":456},"isLabel":true,"_HandStyle":"default","_TextColor":{"__isSmartRef__":true,"id":77},"_Align":"center","eventsAreIgnored":true,"__LivelyClassName__":"lively.morphic.Text","__SourceModuleName__":"Global.lively.morphic.TextCore"},"458":{"_Position":{"__isSmartRef__":true,"id":459},"renderContextTable":{"__isSmartRef__":true,"id":460},"_Extent":{"__isSmartRef__":true,"id":461},"_ClipMode":"hidden","_Padding":{"__isSmartRef__":true,"id":462},"_BorderWidth":0,"_BorderColor":{"__isSmartRef__":true,"id":77},"_Fill":null,"__LivelyClassName__":"lively.morphic.Shapes.Rectangle","__SourceModuleName__":"Global.lively.morphic.Shapes"},"459":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global.lively.morphic.Graphics"},"460":{"init":"initHTML","appendShape":"renderHTML","setPosition":"setPositionHTML","setExtent":"setExtentHTML","setPadding":"setPaddingHTML","setFill":"setFillHTML","setBorderColor":"setBorderColorHTML","setBorderWidth":"setBorderWidthHTML","setStrokeOpacity":"setStrokeOpacityHTML","setBorderRadius":"setBorderRadiusHTML","setBorderStyle":"setBorderStyleHTML","setOpacity":"setOpacityHTML","setClipMode":"setClipModeHTML"},"461":{"x":117.14285714285714,"y":22,"__LivelyClassName__":"Point","__SourceModuleName__":"Global.lively.morphic.Graphics"},"462":{"x":0,"y":4,"width":0,"height":0,"__LivelyClassName__":"Rectangle","__SourceModuleName__":"Global.lively.morphic.Graphics"},"463":{"replaceRenderContext":"replaceRenderContextHTML","init":"initHTML","append":"appendHTML","remove":"removeHTML","triggerEvent":"triggerEventHTML","setTransform":"setTransformHTML","setPosition":"setPositionHTML","setRotation":"setRotationHTML","setExtent":"setExtentHTML","setScale":"setScaleHTML","setVisible":"setVisibleHTML","adjustOrigin":"adjustOriginHTML","setPivotPoint":"setPivotPointHTML","setClipMode":"setClipModeHTML","showsVerticalScrollBar":"showsVerticalScrollBarHTML","showsHorizontalScrollBar":"showsHorizontalScrollBarHTML","getScrollBarExtent":"getScrollBarExtentHTML","setHandStyle":"setHandStyleHTML","setPointerEvents":"setPointerEventsHTML","setToolTip":"setToolTipHTML","focus":"focusHTML","blur":"blurHTML","setFocusable":"setFocusableHTML","updateText":"updateTextHTML","setTextExtent":"setTextExtentHTML","setMaxTextWidth":"setMaxTextWidthHTML","setMaxTextHeight":"setMaxTextHeightHTML","setMinTextWidth":"setMinTextWidthHTML","setMinTextHeight":"setMinTextHeightHTML","getTextExtent":"getTextExtentHTML","getTextString":"getTextStringHTML","ignoreTextEvents":"ignoreTextEventsHTML","unignoreTextEvents":"unignoreTextEventsHTML","enableTextEvents":"enableTextEventsHTML","setFontFamily":"setFontFamilyHTML","setFontSize":"setFontSizeHTML","setTextColor":"setTextColorHTML","setPadding":"setPaddingHTML","setAlign":"setAlignHTML","setVerticalAlign":"setVerticalAlignHTML","setDisplay":"setDisplayHTML","setWhiteSpaceHandling":"setWhiteSpaceHandlingHTML","focusMorph":"focusMorphHTML"},"464":{"style":{"__isSmartRef__":true,"id":465},"chunkOwner":{"__isSmartRef__":true,"id":457},"storedString":"LineNo","__LivelyClassName__":"lively.morphic.TextChunk","__SourceModuleName__":"Global.lively.morphic.TextCore"},"465":{"__LivelyClassName__":"lively.morphic.TextEmphasis","__SourceModuleName__":"Global.lively.morphic.TextCore"},"466":{"morph":{"__isSmartRef__":true,"id":457},"__LivelyClassName__":"lively.morphic.EventHandler","__SourceModuleName__":"Global.lively.morphic.Events"},"467":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global.lively.morphic.Graphics"},"468":{"x":117.14285714285714,"y":22,"__LivelyClassName__":"Point","__SourceModuleName__":"Global.lively.morphic.Graphics"},"469":{"_Position":{"__isSmartRef__":true,"id":470},"renderContextTable":{"__isSmartRef__":true,"id":471},"_Extent":{"__isSmartRef__":true,"id":472},"_ClipMode":"visible","_Padding":{"__isSmartRef__":true,"id":473},"_BorderWidth":1,"_BorderColor":{"__isSmartRef__":true,"id":103},"_Fill":{"__isSmartRef__":true,"id":104},"_BorderRadius":5,"__LivelyClassName__":"lively.morphic.Shapes.Rectangle","__SourceModuleName__":"Global.lively.morphic.Shapes"},"470":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global.lively.morphic.Graphics"},"471":{"init":"initHTML","appendShape":"renderHTML","setPosition":"setPositionHTML","setExtent":"setExtentHTML","setPadding":"setPaddingHTML","setFill":"setFillHTML","setBorderColor":"setBorderColorHTML","setBorderWidth":"setBorderWidthHTML","setStrokeOpacity":"setStrokeOpacityHTML","setBorderRadius":"setBorderRadiusHTML","setBorderStyle":"setBorderStyleHTML","setOpacity":"setOpacityHTML","setClipMode":"setClipModeHTML"},"472":{"x":117.14285714285714,"y":22,"__LivelyClassName__":"Point","__SourceModuleName__":"Global.lively.morphic.Graphics"},"473":{"x":0,"y":0,"width":0,"height":0,"__LivelyClassName__":"Rectangle","__SourceModuleName__":"Global.lively.morphic.Graphics"},"474":{"replaceRenderContext":"replaceRenderContextHTML","init":"initHTML","append":"appendHTML","remove":"removeHTML","triggerEvent":"triggerEventHTML","setTransform":"setTransformHTML","setPosition":"setPositionHTML","setRotation":"setRotationHTML","setExtent":"setExtentHTML","setScale":"setScaleHTML","setVisible":"setVisibleHTML","adjustOrigin":"adjustOriginHTML","setPivotPoint":"setPivotPointHTML","setClipMode":"setClipModeHTML","showsVerticalScrollBar":"showsVerticalScrollBarHTML","showsHorizontalScrollBar":"showsHorizontalScrollBarHTML","getScrollBarExtent":"getScrollBarExtentHTML","setHandStyle":"setHandStyleHTML","setPointerEvents":"setPointerEventsHTML","setToolTip":"setToolTipHTML","focus":"focusHTML","blur":"blurHTML","setFocusable":"setFocusableHTML"},"475":{"morph":{"__isSmartRef__":true,"id":456},"__LivelyClassName__":"lively.morphic.EventHandler","__SourceModuleName__":"Global.lively.morphic.Events"},"476":{"x":234.28571428571428,"y":220,"__LivelyClassName__":"Point","__SourceModuleName__":"Global.lively.morphic.Graphics"},"477":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global.lively.morphic.Graphics"},"478":{"stops":[{"__isSmartRef__":true,"id":479},{"__isSmartRef__":true,"id":481},{"__isSmartRef__":true,"id":483},{"__isSmartRef__":true,"id":485}],"vector":{"__isSmartRef__":true,"id":113},"__LivelyClassName__":"lively.morphic.LinearGradient","__SourceModuleName__":"Global.lively.morphic.Shapes"},"479":{"offset":0,"color":{"__isSmartRef__":true,"id":480}},"480":{"r":0.98,"g":0.98,"b":0.98,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global.lively.morphic.Graphics"},"481":{"offset":0.4,"color":{"__isSmartRef__":true,"id":482}},"482":{"r":0.91,"g":0.91,"b":0.91,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global.lively.morphic.Graphics"},"483":{"offset":0.6,"color":{"__isSmartRef__":true,"id":484}},"484":{"r":0.91,"g":0.91,"b":0.91,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global.lively.morphic.Graphics"},"485":{"offset":1,"color":{"__isSmartRef__":true,"id":486}},"486":{"r":0.97,"g":0.97,"b":0.97,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global.lively.morphic.Graphics"},"487":{"sourceObj":{"__isSmartRef__":true,"id":456},"sourceAttrName":"fire","targetObj":{"__isSmartRef__":true,"id":455},"targetMethodName":"trigger","__LivelyClassName__":"AttributeConnection","__SourceModuleName__":"Global.lively.bindings"},"488":{"sourceObj":{"__isSmartRef__":true,"id":456},"sourceAttrName":"fire","targetObj":{"__isSmartRef__":true,"id":456},"targetMethodName":"setLabel","converter":null,"converterString":"function () { return this.getSourceObj().command.asString() }","updater":null,"updaterString":null,"varMapping":{"__isSmartRef__":true,"id":489},"__LivelyClassName__":"AttributeConnection","__SourceModuleName__":"Global.lively.bindings"},"489":{"source":{"__isSmartRef__":true,"id":456},"target":{"__isSmartRef__":true,"id":456}},"490":{"browser":{"__isSmartRef__":true,"id":384},"button":{"__isSmartRef__":true,"id":491},"__LivelyClassName__":"lively.ide.ParserDebugCommand","__SourceModuleName__":"Global.lively.ide.BrowserCommands"},"491":{"submorphs":[{"__isSmartRef__":true,"id":492}],"scripts":[],"shape":{"__isSmartRef__":true,"id":504},"derivationIds":[null],"id":"6479217A-8833-4724-B9BE-22A13EC3EC29","renderContextTable":{"__isSmartRef__":true,"id":509},"eventHandler":{"__isSmartRef__":true,"id":510},"grabbingEnabled":false,"droppingEnabled":false,"halosEnabled":true,"_Position":{"__isSmartRef__":true,"id":511},"priorExtent":{"__isSmartRef__":true,"id":512},"value":false,"toggle":false,"isActive":true,"normalFill":{"__isSmartRef__":true,"id":104},"lighterFill":{"__isSmartRef__":true,"id":513},"label":{"__isSmartRef__":true,"id":492},"command":{"__isSmartRef__":true,"id":490},"attributeConnections":[{"__isSmartRef__":true,"id":522},{"__isSmartRef__":true,"id":523}],"doNotSerialize":["$$fire"],"doNotCopyProperties":["$$fire"],"owner":{"__isSmartRef__":true,"id":370},"__LivelyClassName__":"lively.morphic.Button","__SourceModuleName__":"Global.lively.morphic.Widgets"},"492":{"submorphs":[],"scripts":[],"shape":{"__isSmartRef__":true,"id":493},"derivationIds":[null],"id":"17C8198D-FA0C-4841-A0D0-5763E2C7DD55","renderContextTable":{"__isSmartRef__":true,"id":498},"_WhiteSpaceHandling":"pre-wrap","textChunks":[{"__isSmartRef__":true,"id":499}],"eventHandler":{"__isSmartRef__":true,"id":501},"grabbingEnabled":false,"droppingEnabled":false,"halosEnabled":true,"_ClipMode":"hidden","fixedWidth":true,"fixedHeight":true,"allowInput":false,"_FontFamily":"Helvetica","_FontSize":10,"_Position":{"__isSmartRef__":true,"id":502},"priorExtent":{"__isSmartRef__":true,"id":503},"_MaxTextWidth":117.14285714285714,"_MinTextWidth":117.14285714285714,"_MaxTextHeight":null,"_MinTextHeight":null,"evalEnabled":false,"owner":{"__isSmartRef__":true,"id":491},"isLabel":true,"_HandStyle":"default","_TextColor":{"__isSmartRef__":true,"id":77},"_Align":"center","eventsAreIgnored":true,"__LivelyClassName__":"lively.morphic.Text","__SourceModuleName__":"Global.lively.morphic.TextCore"},"493":{"_Position":{"__isSmartRef__":true,"id":494},"renderContextTable":{"__isSmartRef__":true,"id":495},"_Extent":{"__isSmartRef__":true,"id":496},"_ClipMode":"hidden","_Padding":{"__isSmartRef__":true,"id":497},"_BorderWidth":0,"_BorderColor":{"__isSmartRef__":true,"id":77},"_Fill":null,"__LivelyClassName__":"lively.morphic.Shapes.Rectangle","__SourceModuleName__":"Global.lively.morphic.Shapes"},"494":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global.lively.morphic.Graphics"},"495":{"init":"initHTML","appendShape":"renderHTML","setPosition":"setPositionHTML","setExtent":"setExtentHTML","setPadding":"setPaddingHTML","setFill":"setFillHTML","setBorderColor":"setBorderColorHTML","setBorderWidth":"setBorderWidthHTML","setStrokeOpacity":"setStrokeOpacityHTML","setBorderRadius":"setBorderRadiusHTML","setBorderStyle":"setBorderStyleHTML","setOpacity":"setOpacityHTML","setClipMode":"setClipModeHTML"},"496":{"x":117.14285714285714,"y":22,"__LivelyClassName__":"Point","__SourceModuleName__":"Global.lively.morphic.Graphics"},"497":{"x":0,"y":4,"width":0,"height":0,"__LivelyClassName__":"Rectangle","__SourceModuleName__":"Global.lively.morphic.Graphics"},"498":{"replaceRenderContext":"replaceRenderContextHTML","init":"initHTML","append":"appendHTML","remove":"removeHTML","triggerEvent":"triggerEventHTML","setTransform":"setTransformHTML","setPosition":"setPositionHTML","setRotation":"setRotationHTML","setExtent":"setExtentHTML","setScale":"setScaleHTML","setVisible":"setVisibleHTML","adjustOrigin":"adjustOriginHTML","setPivotPoint":"setPivotPointHTML","setClipMode":"setClipModeHTML","showsVerticalScrollBar":"showsVerticalScrollBarHTML","showsHorizontalScrollBar":"showsHorizontalScrollBarHTML","getScrollBarExtent":"getScrollBarExtentHTML","setHandStyle":"setHandStyleHTML","setPointerEvents":"setPointerEventsHTML","setToolTip":"setToolTipHTML","focus":"focusHTML","blur":"blurHTML","setFocusable":"setFocusableHTML","updateText":"updateTextHTML","setTextExtent":"setTextExtentHTML","setMaxTextWidth":"setMaxTextWidthHTML","setMaxTextHeight":"setMaxTextHeightHTML","setMinTextWidth":"setMinTextWidthHTML","setMinTextHeight":"setMinTextHeightHTML","getTextExtent":"getTextExtentHTML","getTextString":"getTextStringHTML","ignoreTextEvents":"ignoreTextEventsHTML","unignoreTextEvents":"unignoreTextEventsHTML","enableTextEvents":"enableTextEventsHTML","setFontFamily":"setFontFamilyHTML","setFontSize":"setFontSizeHTML","setTextColor":"setTextColorHTML","setPadding":"setPaddingHTML","setAlign":"setAlignHTML","setVerticalAlign":"setVerticalAlignHTML","setDisplay":"setDisplayHTML","setWhiteSpaceHandling":"setWhiteSpaceHandlingHTML","focusMorph":"focusMorphHTML"},"499":{"style":{"__isSmartRef__":true,"id":500},"chunkOwner":{"__isSmartRef__":true,"id":492},"storedString":"Dbg errors is off","__LivelyClassName__":"lively.morphic.TextChunk","__SourceModuleName__":"Global.lively.morphic.TextCore"},"500":{"__LivelyClassName__":"lively.morphic.TextEmphasis","__SourceModuleName__":"Global.lively.morphic.TextCore"},"501":{"morph":{"__isSmartRef__":true,"id":492},"__LivelyClassName__":"lively.morphic.EventHandler","__SourceModuleName__":"Global.lively.morphic.Events"},"502":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global.lively.morphic.Graphics"},"503":{"x":117.14285714285714,"y":22,"__LivelyClassName__":"Point","__SourceModuleName__":"Global.lively.morphic.Graphics"},"504":{"_Position":{"__isSmartRef__":true,"id":505},"renderContextTable":{"__isSmartRef__":true,"id":506},"_Extent":{"__isSmartRef__":true,"id":507},"_ClipMode":"visible","_Padding":{"__isSmartRef__":true,"id":508},"_BorderWidth":1,"_BorderColor":{"__isSmartRef__":true,"id":103},"_Fill":{"__isSmartRef__":true,"id":104},"_BorderRadius":5,"__LivelyClassName__":"lively.morphic.Shapes.Rectangle","__SourceModuleName__":"Global.lively.morphic.Shapes"},"505":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global.lively.morphic.Graphics"},"506":{"init":"initHTML","appendShape":"renderHTML","setPosition":"setPositionHTML","setExtent":"setExtentHTML","setPadding":"setPaddingHTML","setFill":"setFillHTML","setBorderColor":"setBorderColorHTML","setBorderWidth":"setBorderWidthHTML","setStrokeOpacity":"setStrokeOpacityHTML","setBorderRadius":"setBorderRadiusHTML","setBorderStyle":"setBorderStyleHTML","setOpacity":"setOpacityHTML","setClipMode":"setClipModeHTML"},"507":{"x":117.14285714285714,"y":22,"__LivelyClassName__":"Point","__SourceModuleName__":"Global.lively.morphic.Graphics"},"508":{"x":0,"y":0,"width":0,"height":0,"__LivelyClassName__":"Rectangle","__SourceModuleName__":"Global.lively.morphic.Graphics"},"509":{"replaceRenderContext":"replaceRenderContextHTML","init":"initHTML","append":"appendHTML","remove":"removeHTML","triggerEvent":"triggerEventHTML","setTransform":"setTransformHTML","setPosition":"setPositionHTML","setRotation":"setRotationHTML","setExtent":"setExtentHTML","setScale":"setScaleHTML","setVisible":"setVisibleHTML","adjustOrigin":"adjustOriginHTML","setPivotPoint":"setPivotPointHTML","setClipMode":"setClipModeHTML","showsVerticalScrollBar":"showsVerticalScrollBarHTML","showsHorizontalScrollBar":"showsHorizontalScrollBarHTML","getScrollBarExtent":"getScrollBarExtentHTML","setHandStyle":"setHandStyleHTML","setPointerEvents":"setPointerEventsHTML","setToolTip":"setToolTipHTML","focus":"focusHTML","blur":"blurHTML","setFocusable":"setFocusableHTML"},"510":{"morph":{"__isSmartRef__":true,"id":491},"__LivelyClassName__":"lively.morphic.EventHandler","__SourceModuleName__":"Global.lively.morphic.Events"},"511":{"x":351.42857142857144,"y":220,"__LivelyClassName__":"Point","__SourceModuleName__":"Global.lively.morphic.Graphics"},"512":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global.lively.morphic.Graphics"},"513":{"stops":[{"__isSmartRef__":true,"id":514},{"__isSmartRef__":true,"id":516},{"__isSmartRef__":true,"id":518},{"__isSmartRef__":true,"id":520}],"vector":{"__isSmartRef__":true,"id":113},"__LivelyClassName__":"lively.morphic.LinearGradient","__SourceModuleName__":"Global.lively.morphic.Shapes"},"514":{"offset":0,"color":{"__isSmartRef__":true,"id":515}},"515":{"r":0.98,"g":0.98,"b":0.98,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global.lively.morphic.Graphics"},"516":{"offset":0.4,"color":{"__isSmartRef__":true,"id":517}},"517":{"r":0.91,"g":0.91,"b":0.91,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global.lively.morphic.Graphics"},"518":{"offset":0.6,"color":{"__isSmartRef__":true,"id":519}},"519":{"r":0.91,"g":0.91,"b":0.91,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global.lively.morphic.Graphics"},"520":{"offset":1,"color":{"__isSmartRef__":true,"id":521}},"521":{"r":0.97,"g":0.97,"b":0.97,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global.lively.morphic.Graphics"},"522":{"sourceObj":{"__isSmartRef__":true,"id":491},"sourceAttrName":"fire","targetObj":{"__isSmartRef__":true,"id":490},"targetMethodName":"trigger","__LivelyClassName__":"AttributeConnection","__SourceModuleName__":"Global.lively.bindings"},"523":{"sourceObj":{"__isSmartRef__":true,"id":491},"sourceAttrName":"fire","targetObj":{"__isSmartRef__":true,"id":491},"targetMethodName":"setLabel","converter":null,"converterString":"function () { return this.getSourceObj().command.asString() }","updater":null,"updaterString":null,"varMapping":{"__isSmartRef__":true,"id":524},"__LivelyClassName__":"AttributeConnection","__SourceModuleName__":"Global.lively.bindings"},"524":{"source":{"__isSmartRef__":true,"id":491},"target":{"__isSmartRef__":true,"id":491}},"525":{"browser":{"__isSmartRef__":true,"id":384},"button":{"__isSmartRef__":true,"id":526},"__LivelyClassName__":"lively.ide.EvaluateCommand","__SourceModuleName__":"Global.lively.ide.BrowserCommands"},"526":{"submorphs":[{"__isSmartRef__":true,"id":527}],"scripts":[],"shape":{"__isSmartRef__":true,"id":539},"derivationIds":[null],"id":"07511B39-9BFA-483F-A9B0-14F812FB55E5","renderContextTable":{"__isSmartRef__":true,"id":544},"eventHandler":{"__isSmartRef__":true,"id":545},"grabbingEnabled":false,"droppingEnabled":false,"halosEnabled":true,"_Position":{"__isSmartRef__":true,"id":546},"priorExtent":{"__isSmartRef__":true,"id":547},"value":false,"toggle":false,"isActive":true,"normalFill":{"__isSmartRef__":true,"id":104},"lighterFill":{"__isSmartRef__":true,"id":548},"label":{"__isSmartRef__":true,"id":527},"command":{"__isSmartRef__":true,"id":525},"attributeConnections":[{"__isSmartRef__":true,"id":557},{"__isSmartRef__":true,"id":558}],"doNotSerialize":["$$fire"],"doNotCopyProperties":["$$fire"],"owner":{"__isSmartRef__":true,"id":370},"__LivelyClassName__":"lively.morphic.Button","__SourceModuleName__":"Global.lively.morphic.Widgets"},"527":{"submorphs":[],"scripts":[],"shape":{"__isSmartRef__":true,"id":528},"derivationIds":[null],"id":"9E7C48A2-D6AE-406D-9985-CF6CDE94C253","renderContextTable":{"__isSmartRef__":true,"id":533},"_WhiteSpaceHandling":"pre-wrap","textChunks":[{"__isSmartRef__":true,"id":534}],"eventHandler":{"__isSmartRef__":true,"id":536},"grabbingEnabled":false,"droppingEnabled":false,"halosEnabled":true,"_ClipMode":"hidden","fixedWidth":true,"fixedHeight":true,"allowInput":false,"_FontFamily":"Helvetica","_FontSize":10,"_Position":{"__isSmartRef__":true,"id":537},"priorExtent":{"__isSmartRef__":true,"id":538},"_MaxTextWidth":117.14285714285714,"_MinTextWidth":117.14285714285714,"_MaxTextHeight":null,"_MinTextHeight":null,"evalEnabled":false,"owner":{"__isSmartRef__":true,"id":526},"isLabel":true,"_HandStyle":"default","_TextColor":{"__isSmartRef__":true,"id":77},"_Align":"center","eventsAreIgnored":true,"__LivelyClassName__":"lively.morphic.Text","__SourceModuleName__":"Global.lively.morphic.TextCore"},"528":{"_Position":{"__isSmartRef__":true,"id":529},"renderContextTable":{"__isSmartRef__":true,"id":530},"_Extent":{"__isSmartRef__":true,"id":531},"_ClipMode":"hidden","_Padding":{"__isSmartRef__":true,"id":532},"_BorderWidth":0,"_BorderColor":{"__isSmartRef__":true,"id":77},"_Fill":null,"__LivelyClassName__":"lively.morphic.Shapes.Rectangle","__SourceModuleName__":"Global.lively.morphic.Shapes"},"529":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global.lively.morphic.Graphics"},"530":{"init":"initHTML","appendShape":"renderHTML","setPosition":"setPositionHTML","setExtent":"setExtentHTML","setPadding":"setPaddingHTML","setFill":"setFillHTML","setBorderColor":"setBorderColorHTML","setBorderWidth":"setBorderWidthHTML","setStrokeOpacity":"setStrokeOpacityHTML","setBorderRadius":"setBorderRadiusHTML","setBorderStyle":"setBorderStyleHTML","setOpacity":"setOpacityHTML","setClipMode":"setClipModeHTML"},"531":{"x":117.14285714285714,"y":22,"__LivelyClassName__":"Point","__SourceModuleName__":"Global.lively.morphic.Graphics"},"532":{"x":0,"y":4,"width":0,"height":0,"__LivelyClassName__":"Rectangle","__SourceModuleName__":"Global.lively.morphic.Graphics"},"533":{"replaceRenderContext":"replaceRenderContextHTML","init":"initHTML","append":"appendHTML","remove":"removeHTML","triggerEvent":"triggerEventHTML","setTransform":"setTransformHTML","setPosition":"setPositionHTML","setRotation":"setRotationHTML","setExtent":"setExtentHTML","setScale":"setScaleHTML","setVisible":"setVisibleHTML","adjustOrigin":"adjustOriginHTML","setPivotPoint":"setPivotPointHTML","setClipMode":"setClipModeHTML","showsVerticalScrollBar":"showsVerticalScrollBarHTML","showsHorizontalScrollBar":"showsHorizontalScrollBarHTML","getScrollBarExtent":"getScrollBarExtentHTML","setHandStyle":"setHandStyleHTML","setPointerEvents":"setPointerEventsHTML","setToolTip":"setToolTipHTML","focus":"focusHTML","blur":"blurHTML","setFocusable":"setFocusableHTML","updateText":"updateTextHTML","setTextExtent":"setTextExtentHTML","setMaxTextWidth":"setMaxTextWidthHTML","setMaxTextHeight":"setMaxTextHeightHTML","setMinTextWidth":"setMinTextWidthHTML","setMinTextHeight":"setMinTextHeightHTML","getTextExtent":"getTextExtentHTML","getTextString":"getTextStringHTML","ignoreTextEvents":"ignoreTextEventsHTML","unignoreTextEvents":"unignoreTextEventsHTML","enableTextEvents":"enableTextEventsHTML","setFontFamily":"setFontFamilyHTML","setFontSize":"setFontSizeHTML","setTextColor":"setTextColorHTML","setPadding":"setPaddingHTML","setAlign":"setAlignHTML","setVerticalAlign":"setVerticalAlignHTML","setDisplay":"setDisplayHTML","setWhiteSpaceHandling":"setWhiteSpaceHandlingHTML","focusMorph":"focusMorphHTML"},"534":{"style":{"__isSmartRef__":true,"id":535},"chunkOwner":{"__isSmartRef__":true,"id":527},"storedString":"Eval on","__LivelyClassName__":"lively.morphic.TextChunk","__SourceModuleName__":"Global.lively.morphic.TextCore"},"535":{"__LivelyClassName__":"lively.morphic.TextEmphasis","__SourceModuleName__":"Global.lively.morphic.TextCore"},"536":{"morph":{"__isSmartRef__":true,"id":527},"__LivelyClassName__":"lively.morphic.EventHandler","__SourceModuleName__":"Global.lively.morphic.Events"},"537":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global.lively.morphic.Graphics"},"538":{"x":117.14285714285714,"y":22,"__LivelyClassName__":"Point","__SourceModuleName__":"Global.lively.morphic.Graphics"},"539":{"_Position":{"__isSmartRef__":true,"id":540},"renderContextTable":{"__isSmartRef__":true,"id":541},"_Extent":{"__isSmartRef__":true,"id":542},"_ClipMode":"visible","_Padding":{"__isSmartRef__":true,"id":543},"_BorderWidth":1,"_BorderColor":{"__isSmartRef__":true,"id":103},"_Fill":{"__isSmartRef__":true,"id":104},"_BorderRadius":5,"__LivelyClassName__":"lively.morphic.Shapes.Rectangle","__SourceModuleName__":"Global.lively.morphic.Shapes"},"540":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global.lively.morphic.Graphics"},"541":{"init":"initHTML","appendShape":"renderHTML","setPosition":"setPositionHTML","setExtent":"setExtentHTML","setPadding":"setPaddingHTML","setFill":"setFillHTML","setBorderColor":"setBorderColorHTML","setBorderWidth":"setBorderWidthHTML","setStrokeOpacity":"setStrokeOpacityHTML","setBorderRadius":"setBorderRadiusHTML","setBorderStyle":"setBorderStyleHTML","setOpacity":"setOpacityHTML","setClipMode":"setClipModeHTML"},"542":{"x":117.14285714285714,"y":22,"__LivelyClassName__":"Point","__SourceModuleName__":"Global.lively.morphic.Graphics"},"543":{"x":0,"y":0,"width":0,"height":0,"__LivelyClassName__":"Rectangle","__SourceModuleName__":"Global.lively.morphic.Graphics"},"544":{"replaceRenderContext":"replaceRenderContextHTML","init":"initHTML","append":"appendHTML","remove":"removeHTML","triggerEvent":"triggerEventHTML","setTransform":"setTransformHTML","setPosition":"setPositionHTML","setRotation":"setRotationHTML","setExtent":"setExtentHTML","setScale":"setScaleHTML","setVisible":"setVisibleHTML","adjustOrigin":"adjustOriginHTML","setPivotPoint":"setPivotPointHTML","setClipMode":"setClipModeHTML","showsVerticalScrollBar":"showsVerticalScrollBarHTML","showsHorizontalScrollBar":"showsHorizontalScrollBarHTML","getScrollBarExtent":"getScrollBarExtentHTML","setHandStyle":"setHandStyleHTML","setPointerEvents":"setPointerEventsHTML","setToolTip":"setToolTipHTML","focus":"focusHTML","blur":"blurHTML","setFocusable":"setFocusableHTML"},"545":{"morph":{"__isSmartRef__":true,"id":526},"__LivelyClassName__":"lively.morphic.EventHandler","__SourceModuleName__":"Global.lively.morphic.Events"},"546":{"x":468.57142857142856,"y":220,"__LivelyClassName__":"Point","__SourceModuleName__":"Global.lively.morphic.Graphics"},"547":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global.lively.morphic.Graphics"},"548":{"stops":[{"__isSmartRef__":true,"id":549},{"__isSmartRef__":true,"id":551},{"__isSmartRef__":true,"id":553},{"__isSmartRef__":true,"id":555}],"vector":{"__isSmartRef__":true,"id":113},"__LivelyClassName__":"lively.morphic.LinearGradient","__SourceModuleName__":"Global.lively.morphic.Shapes"},"549":{"offset":0,"color":{"__isSmartRef__":true,"id":550}},"550":{"r":0.98,"g":0.98,"b":0.98,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global.lively.morphic.Graphics"},"551":{"offset":0.4,"color":{"__isSmartRef__":true,"id":552}},"552":{"r":0.91,"g":0.91,"b":0.91,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global.lively.morphic.Graphics"},"553":{"offset":0.6,"color":{"__isSmartRef__":true,"id":554}},"554":{"r":0.91,"g":0.91,"b":0.91,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global.lively.morphic.Graphics"},"555":{"offset":1,"color":{"__isSmartRef__":true,"id":556}},"556":{"r":0.97,"g":0.97,"b":0.97,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global.lively.morphic.Graphics"},"557":{"sourceObj":{"__isSmartRef__":true,"id":526},"sourceAttrName":"fire","targetObj":{"__isSmartRef__":true,"id":525},"targetMethodName":"trigger","__LivelyClassName__":"AttributeConnection","__SourceModuleName__":"Global.lively.bindings"},"558":{"sourceObj":{"__isSmartRef__":true,"id":526},"sourceAttrName":"fire","targetObj":{"__isSmartRef__":true,"id":526},"targetMethodName":"setLabel","converter":null,"converterString":"function () { return this.getSourceObj().command.asString() }","updater":null,"updaterString":null,"varMapping":{"__isSmartRef__":true,"id":559},"__LivelyClassName__":"AttributeConnection","__SourceModuleName__":"Global.lively.bindings"},"559":{"source":{"__isSmartRef__":true,"id":526},"target":{"__isSmartRef__":true,"id":526}},"560":{"browser":{"__isSmartRef__":true,"id":384},"button":{"__isSmartRef__":true,"id":561},"__LivelyClassName__":"lively.ide.SortCommand","__SourceModuleName__":"Global.lively.ide.BrowserCommands"},"561":{"submorphs":[{"__isSmartRef__":true,"id":562}],"scripts":[],"shape":{"__isSmartRef__":true,"id":574},"derivationIds":[null],"id":"8D356A40-DF5F-4025-BFA3-CC4BE8E6616F","renderContextTable":{"__isSmartRef__":true,"id":579},"eventHandler":{"__isSmartRef__":true,"id":580},"grabbingEnabled":false,"droppingEnabled":false,"halosEnabled":true,"_Position":{"__isSmartRef__":true,"id":581},"priorExtent":{"__isSmartRef__":true,"id":582},"value":false,"toggle":false,"isActive":true,"normalFill":{"__isSmartRef__":true,"id":104},"lighterFill":{"__isSmartRef__":true,"id":583},"label":{"__isSmartRef__":true,"id":562},"command":{"__isSmartRef__":true,"id":560},"attributeConnections":[{"__isSmartRef__":true,"id":592},{"__isSmartRef__":true,"id":593}],"doNotSerialize":["$$fire"],"doNotCopyProperties":["$$fire"],"owner":{"__isSmartRef__":true,"id":370},"__LivelyClassName__":"lively.morphic.Button","__SourceModuleName__":"Global.lively.morphic.Widgets"},"562":{"submorphs":[],"scripts":[],"shape":{"__isSmartRef__":true,"id":563},"derivationIds":[null],"id":"BBE5343C-C3D5-48C6-BBFF-1356830E6140","renderContextTable":{"__isSmartRef__":true,"id":568},"_WhiteSpaceHandling":"pre-wrap","textChunks":[{"__isSmartRef__":true,"id":569}],"eventHandler":{"__isSmartRef__":true,"id":571},"grabbingEnabled":false,"droppingEnabled":false,"halosEnabled":true,"_ClipMode":"hidden","fixedWidth":true,"fixedHeight":true,"allowInput":false,"_FontFamily":"Helvetica","_FontSize":10,"_Position":{"__isSmartRef__":true,"id":572},"priorExtent":{"__isSmartRef__":true,"id":573},"_MaxTextWidth":117.14285714285714,"_MinTextWidth":117.14285714285714,"_MaxTextHeight":null,"_MinTextHeight":null,"evalEnabled":false,"owner":{"__isSmartRef__":true,"id":561},"isLabel":true,"_HandStyle":"default","_TextColor":{"__isSmartRef__":true,"id":77},"_Align":"center","eventsAreIgnored":true,"__LivelyClassName__":"lively.morphic.Text","__SourceModuleName__":"Global.lively.morphic.TextCore"},"563":{"_Position":{"__isSmartRef__":true,"id":564},"renderContextTable":{"__isSmartRef__":true,"id":565},"_Extent":{"__isSmartRef__":true,"id":566},"_ClipMode":"hidden","_Padding":{"__isSmartRef__":true,"id":567},"_BorderWidth":0,"_BorderColor":{"__isSmartRef__":true,"id":77},"_Fill":null,"__LivelyClassName__":"lively.morphic.Shapes.Rectangle","__SourceModuleName__":"Global.lively.morphic.Shapes"},"564":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global.lively.morphic.Graphics"},"565":{"init":"initHTML","appendShape":"renderHTML","setPosition":"setPositionHTML","setExtent":"setExtentHTML","setPadding":"setPaddingHTML","setFill":"setFillHTML","setBorderColor":"setBorderColorHTML","setBorderWidth":"setBorderWidthHTML","setStrokeOpacity":"setStrokeOpacityHTML","setBorderRadius":"setBorderRadiusHTML","setBorderStyle":"setBorderStyleHTML","setOpacity":"setOpacityHTML","setClipMode":"setClipModeHTML"},"566":{"x":117.14285714285714,"y":22,"__LivelyClassName__":"Point","__SourceModuleName__":"Global.lively.morphic.Graphics"},"567":{"x":0,"y":4,"width":0,"height":0,"__LivelyClassName__":"Rectangle","__SourceModuleName__":"Global.lively.morphic.Graphics"},"568":{"replaceRenderContext":"replaceRenderContextHTML","init":"initHTML","append":"appendHTML","remove":"removeHTML","triggerEvent":"triggerEventHTML","setTransform":"setTransformHTML","setPosition":"setPositionHTML","setRotation":"setRotationHTML","setExtent":"setExtentHTML","setScale":"setScaleHTML","setVisible":"setVisibleHTML","adjustOrigin":"adjustOriginHTML","setPivotPoint":"setPivotPointHTML","setClipMode":"setClipModeHTML","showsVerticalScrollBar":"showsVerticalScrollBarHTML","showsHorizontalScrollBar":"showsHorizontalScrollBarHTML","getScrollBarExtent":"getScrollBarExtentHTML","setHandStyle":"setHandStyleHTML","setPointerEvents":"setPointerEventsHTML","setToolTip":"setToolTipHTML","focus":"focusHTML","blur":"blurHTML","setFocusable":"setFocusableHTML","updateText":"updateTextHTML","setTextExtent":"setTextExtentHTML","setMaxTextWidth":"setMaxTextWidthHTML","setMaxTextHeight":"setMaxTextHeightHTML","setMinTextWidth":"setMinTextWidthHTML","setMinTextHeight":"setMinTextHeightHTML","getTextExtent":"getTextExtentHTML","getTextString":"getTextStringHTML","ignoreTextEvents":"ignoreTextEventsHTML","unignoreTextEvents":"unignoreTextEventsHTML","enableTextEvents":"enableTextEventsHTML","setFontFamily":"setFontFamilyHTML","setFontSize":"setFontSizeHTML","setTextColor":"setTextColorHTML","setPadding":"setPaddingHTML","setAlign":"setAlignHTML","setVerticalAlign":"setVerticalAlignHTML","setDisplay":"setDisplayHTML","setWhiteSpaceHandling":"setWhiteSpaceHandlingHTML","focusMorph":"focusMorphHTML"},"569":{"style":{"__isSmartRef__":true,"id":570},"chunkOwner":{"__isSmartRef__":true,"id":562},"storedString":"Sort","__LivelyClassName__":"lively.morphic.TextChunk","__SourceModuleName__":"Global.lively.morphic.TextCore"},"570":{"__LivelyClassName__":"lively.morphic.TextEmphasis","__SourceModuleName__":"Global.lively.morphic.TextCore"},"571":{"morph":{"__isSmartRef__":true,"id":562},"__LivelyClassName__":"lively.morphic.EventHandler","__SourceModuleName__":"Global.lively.morphic.Events"},"572":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global.lively.morphic.Graphics"},"573":{"x":117.14285714285714,"y":22,"__LivelyClassName__":"Point","__SourceModuleName__":"Global.lively.morphic.Graphics"},"574":{"_Position":{"__isSmartRef__":true,"id":575},"renderContextTable":{"__isSmartRef__":true,"id":576},"_Extent":{"__isSmartRef__":true,"id":577},"_ClipMode":"visible","_Padding":{"__isSmartRef__":true,"id":578},"_BorderWidth":1,"_BorderColor":{"__isSmartRef__":true,"id":103},"_Fill":{"__isSmartRef__":true,"id":104},"_BorderRadius":5,"__LivelyClassName__":"lively.morphic.Shapes.Rectangle","__SourceModuleName__":"Global.lively.morphic.Shapes"},"575":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global.lively.morphic.Graphics"},"576":{"init":"initHTML","appendShape":"renderHTML","setPosition":"setPositionHTML","setExtent":"setExtentHTML","setPadding":"setPaddingHTML","setFill":"setFillHTML","setBorderColor":"setBorderColorHTML","setBorderWidth":"setBorderWidthHTML","setStrokeOpacity":"setStrokeOpacityHTML","setBorderRadius":"setBorderRadiusHTML","setBorderStyle":"setBorderStyleHTML","setOpacity":"setOpacityHTML","setClipMode":"setClipModeHTML"},"577":{"x":117.14285714285714,"y":22,"__LivelyClassName__":"Point","__SourceModuleName__":"Global.lively.morphic.Graphics"},"578":{"x":0,"y":0,"width":0,"height":0,"__LivelyClassName__":"Rectangle","__SourceModuleName__":"Global.lively.morphic.Graphics"},"579":{"replaceRenderContext":"replaceRenderContextHTML","init":"initHTML","append":"appendHTML","remove":"removeHTML","triggerEvent":"triggerEventHTML","setTransform":"setTransformHTML","setPosition":"setPositionHTML","setRotation":"setRotationHTML","setExtent":"setExtentHTML","setScale":"setScaleHTML","setVisible":"setVisibleHTML","adjustOrigin":"adjustOriginHTML","setPivotPoint":"setPivotPointHTML","setClipMode":"setClipModeHTML","showsVerticalScrollBar":"showsVerticalScrollBarHTML","showsHorizontalScrollBar":"showsHorizontalScrollBarHTML","getScrollBarExtent":"getScrollBarExtentHTML","setHandStyle":"setHandStyleHTML","setPointerEvents":"setPointerEventsHTML","setToolTip":"setToolTipHTML","focus":"focusHTML","blur":"blurHTML","setFocusable":"setFocusableHTML"},"580":{"morph":{"__isSmartRef__":true,"id":561},"__LivelyClassName__":"lively.morphic.EventHandler","__SourceModuleName__":"Global.lively.morphic.Events"},"581":{"x":585.7142857142857,"y":220,"__LivelyClassName__":"Point","__SourceModuleName__":"Global.lively.morphic.Graphics"},"582":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global.lively.morphic.Graphics"},"583":{"stops":[{"__isSmartRef__":true,"id":584},{"__isSmartRef__":true,"id":586},{"__isSmartRef__":true,"id":588},{"__isSmartRef__":true,"id":590}],"vector":{"__isSmartRef__":true,"id":113},"__LivelyClassName__":"lively.morphic.LinearGradient","__SourceModuleName__":"Global.lively.morphic.Shapes"},"584":{"offset":0,"color":{"__isSmartRef__":true,"id":585}},"585":{"r":0.98,"g":0.98,"b":0.98,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global.lively.morphic.Graphics"},"586":{"offset":0.4,"color":{"__isSmartRef__":true,"id":587}},"587":{"r":0.91,"g":0.91,"b":0.91,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global.lively.morphic.Graphics"},"588":{"offset":0.6,"color":{"__isSmartRef__":true,"id":589}},"589":{"r":0.91,"g":0.91,"b":0.91,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global.lively.morphic.Graphics"},"590":{"offset":1,"color":{"__isSmartRef__":true,"id":591}},"591":{"r":0.97,"g":0.97,"b":0.97,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global.lively.morphic.Graphics"},"592":{"sourceObj":{"__isSmartRef__":true,"id":561},"sourceAttrName":"fire","targetObj":{"__isSmartRef__":true,"id":560},"targetMethodName":"trigger","__LivelyClassName__":"AttributeConnection","__SourceModuleName__":"Global.lively.bindings"},"593":{"sourceObj":{"__isSmartRef__":true,"id":561},"sourceAttrName":"fire","targetObj":{"__isSmartRef__":true,"id":561},"targetMethodName":"setLabel","converter":null,"converterString":"function () { return this.getSourceObj().command.asString() }","updater":null,"updaterString":null,"varMapping":{"__isSmartRef__":true,"id":594},"__LivelyClassName__":"AttributeConnection","__SourceModuleName__":"Global.lively.bindings"},"594":{"source":{"__isSmartRef__":true,"id":561},"target":{"__isSmartRef__":true,"id":561}},"595":{"browser":{"__isSmartRef__":true,"id":384},"button":{"__isSmartRef__":true,"id":596},"__LivelyClassName__":"lively.ide.ViewSourceCommand","__SourceModuleName__":"Global.lively.ide.BrowserCommands"},"596":{"submorphs":[{"__isSmartRef__":true,"id":597}],"scripts":[],"shape":{"__isSmartRef__":true,"id":609},"derivationIds":[null],"id":"256D0E09-3D94-49B5-A82A-6230E55E8262","renderContextTable":{"__isSmartRef__":true,"id":614},"eventHandler":{"__isSmartRef__":true,"id":615},"grabbingEnabled":false,"droppingEnabled":false,"halosEnabled":true,"_Position":{"__isSmartRef__":true,"id":616},"priorExtent":{"__isSmartRef__":true,"id":617},"value":false,"toggle":false,"isActive":true,"normalFill":{"__isSmartRef__":true,"id":104},"lighterFill":{"__isSmartRef__":true,"id":618},"label":{"__isSmartRef__":true,"id":597},"command":{"__isSmartRef__":true,"id":595},"attributeConnections":[{"__isSmartRef__":true,"id":627},{"__isSmartRef__":true,"id":628}],"doNotSerialize":["$$fire"],"doNotCopyProperties":["$$fire"],"owner":{"__isSmartRef__":true,"id":370},"__LivelyClassName__":"lively.morphic.Button","__SourceModuleName__":"Global.lively.morphic.Widgets"},"597":{"submorphs":[],"scripts":[],"shape":{"__isSmartRef__":true,"id":598},"derivationIds":[null],"id":"78C6E24B-E317-4C23-97A1-E2132FD24339","renderContextTable":{"__isSmartRef__":true,"id":603},"_WhiteSpaceHandling":"pre-wrap","textChunks":[{"__isSmartRef__":true,"id":604}],"eventHandler":{"__isSmartRef__":true,"id":606},"grabbingEnabled":false,"droppingEnabled":false,"halosEnabled":true,"_ClipMode":"hidden","fixedWidth":true,"fixedHeight":true,"allowInput":false,"_FontFamily":"Helvetica","_FontSize":10,"_Position":{"__isSmartRef__":true,"id":607},"priorExtent":{"__isSmartRef__":true,"id":608},"_MaxTextWidth":117.14285714285714,"_MinTextWidth":117.14285714285714,"_MaxTextHeight":null,"_MinTextHeight":null,"evalEnabled":false,"owner":{"__isSmartRef__":true,"id":596},"isLabel":true,"_HandStyle":"default","_TextColor":{"__isSmartRef__":true,"id":77},"_Align":"center","eventsAreIgnored":true,"__LivelyClassName__":"lively.morphic.Text","__SourceModuleName__":"Global.lively.morphic.TextCore"},"598":{"_Position":{"__isSmartRef__":true,"id":599},"renderContextTable":{"__isSmartRef__":true,"id":600},"_Extent":{"__isSmartRef__":true,"id":601},"_ClipMode":"hidden","_Padding":{"__isSmartRef__":true,"id":602},"_BorderWidth":0,"_BorderColor":{"__isSmartRef__":true,"id":77},"_Fill":null,"__LivelyClassName__":"lively.morphic.Shapes.Rectangle","__SourceModuleName__":"Global.lively.morphic.Shapes"},"599":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global.lively.morphic.Graphics"},"600":{"init":"initHTML","appendShape":"renderHTML","setPosition":"setPositionHTML","setExtent":"setExtentHTML","setPadding":"setPaddingHTML","setFill":"setFillHTML","setBorderColor":"setBorderColorHTML","setBorderWidth":"setBorderWidthHTML","setStrokeOpacity":"setStrokeOpacityHTML","setBorderRadius":"setBorderRadiusHTML","setBorderStyle":"setBorderStyleHTML","setOpacity":"setOpacityHTML","setClipMode":"setClipModeHTML"},"601":{"x":117.14285714285714,"y":22,"__LivelyClassName__":"Point","__SourceModuleName__":"Global.lively.morphic.Graphics"},"602":{"x":0,"y":4,"width":0,"height":0,"__LivelyClassName__":"Rectangle","__SourceModuleName__":"Global.lively.morphic.Graphics"},"603":{"replaceRenderContext":"replaceRenderContextHTML","init":"initHTML","append":"appendHTML","remove":"removeHTML","triggerEvent":"triggerEventHTML","setTransform":"setTransformHTML","setPosition":"setPositionHTML","setRotation":"setRotationHTML","setExtent":"setExtentHTML","setScale":"setScaleHTML","setVisible":"setVisibleHTML","adjustOrigin":"adjustOriginHTML","setPivotPoint":"setPivotPointHTML","setClipMode":"setClipModeHTML","showsVerticalScrollBar":"showsVerticalScrollBarHTML","showsHorizontalScrollBar":"showsHorizontalScrollBarHTML","getScrollBarExtent":"getScrollBarExtentHTML","setHandStyle":"setHandStyleHTML","setPointerEvents":"setPointerEventsHTML","setToolTip":"setToolTipHTML","focus":"focusHTML","blur":"blurHTML","setFocusable":"setFocusableHTML","updateText":"updateTextHTML","setTextExtent":"setTextExtentHTML","setMaxTextWidth":"setMaxTextWidthHTML","setMaxTextHeight":"setMaxTextHeightHTML","setMinTextWidth":"setMinTextWidthHTML","setMinTextHeight":"setMinTextHeightHTML","getTextExtent":"getTextExtentHTML","getTextString":"getTextStringHTML","ignoreTextEvents":"ignoreTextEventsHTML","unignoreTextEvents":"unignoreTextEventsHTML","enableTextEvents":"enableTextEventsHTML","setFontFamily":"setFontFamilyHTML","setFontSize":"setFontSizeHTML","setTextColor":"setTextColorHTML","setPadding":"setPaddingHTML","setAlign":"setAlignHTML","setVerticalAlign":"setVerticalAlignHTML","setDisplay":"setDisplayHTML","setWhiteSpaceHandling":"setWhiteSpaceHandlingHTML","focusMorph":"focusMorphHTML"},"604":{"style":{"__isSmartRef__":true,"id":605},"chunkOwner":{"__isSmartRef__":true,"id":597},"storedString":"View as...","__LivelyClassName__":"lively.morphic.TextChunk","__SourceModuleName__":"Global.lively.morphic.TextCore"},"605":{"__LivelyClassName__":"lively.morphic.TextEmphasis","__SourceModuleName__":"Global.lively.morphic.TextCore"},"606":{"morph":{"__isSmartRef__":true,"id":597},"__LivelyClassName__":"lively.morphic.EventHandler","__SourceModuleName__":"Global.lively.morphic.Events"},"607":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global.lively.morphic.Graphics"},"608":{"x":117.14285714285714,"y":22,"__LivelyClassName__":"Point","__SourceModuleName__":"Global.lively.morphic.Graphics"},"609":{"_Position":{"__isSmartRef__":true,"id":610},"renderContextTable":{"__isSmartRef__":true,"id":611},"_Extent":{"__isSmartRef__":true,"id":612},"_ClipMode":"visible","_Padding":{"__isSmartRef__":true,"id":613},"_BorderWidth":1,"_BorderColor":{"__isSmartRef__":true,"id":103},"_Fill":{"__isSmartRef__":true,"id":104},"_BorderRadius":5,"__LivelyClassName__":"lively.morphic.Shapes.Rectangle","__SourceModuleName__":"Global.lively.morphic.Shapes"},"610":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global.lively.morphic.Graphics"},"611":{"init":"initHTML","appendShape":"renderHTML","setPosition":"setPositionHTML","setExtent":"setExtentHTML","setPadding":"setPaddingHTML","setFill":"setFillHTML","setBorderColor":"setBorderColorHTML","setBorderWidth":"setBorderWidthHTML","setStrokeOpacity":"setStrokeOpacityHTML","setBorderRadius":"setBorderRadiusHTML","setBorderStyle":"setBorderStyleHTML","setOpacity":"setOpacityHTML","setClipMode":"setClipModeHTML"},"612":{"x":117.14285714285714,"y":22,"__LivelyClassName__":"Point","__SourceModuleName__":"Global.lively.morphic.Graphics"},"613":{"x":0,"y":0,"width":0,"height":0,"__LivelyClassName__":"Rectangle","__SourceModuleName__":"Global.lively.morphic.Graphics"},"614":{"replaceRenderContext":"replaceRenderContextHTML","init":"initHTML","append":"appendHTML","remove":"removeHTML","triggerEvent":"triggerEventHTML","setTransform":"setTransformHTML","setPosition":"setPositionHTML","setRotation":"setRotationHTML","setExtent":"setExtentHTML","setScale":"setScaleHTML","setVisible":"setVisibleHTML","adjustOrigin":"adjustOriginHTML","setPivotPoint":"setPivotPointHTML","setClipMode":"setClipModeHTML","showsVerticalScrollBar":"showsVerticalScrollBarHTML","showsHorizontalScrollBar":"showsHorizontalScrollBarHTML","getScrollBarExtent":"getScrollBarExtentHTML","setHandStyle":"setHandStyleHTML","setPointerEvents":"setPointerEventsHTML","setToolTip":"setToolTipHTML","focus":"focusHTML","blur":"blurHTML","setFocusable":"setFocusableHTML"},"615":{"morph":{"__isSmartRef__":true,"id":596},"__LivelyClassName__":"lively.morphic.EventHandler","__SourceModuleName__":"Global.lively.morphic.Events"},"616":{"x":702.8571428571429,"y":220,"__LivelyClassName__":"Point","__SourceModuleName__":"Global.lively.morphic.Graphics"},"617":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global.lively.morphic.Graphics"},"618":{"stops":[{"__isSmartRef__":true,"id":619},{"__isSmartRef__":true,"id":621},{"__isSmartRef__":true,"id":623},{"__isSmartRef__":true,"id":625}],"vector":{"__isSmartRef__":true,"id":113},"__LivelyClassName__":"lively.morphic.LinearGradient","__SourceModuleName__":"Global.lively.morphic.Shapes"},"619":{"offset":0,"color":{"__isSmartRef__":true,"id":620}},"620":{"r":0.98,"g":0.98,"b":0.98,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global.lively.morphic.Graphics"},"621":{"offset":0.4,"color":{"__isSmartRef__":true,"id":622}},"622":{"r":0.91,"g":0.91,"b":0.91,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global.lively.morphic.Graphics"},"623":{"offset":0.6,"color":{"__isSmartRef__":true,"id":624}},"624":{"r":0.91,"g":0.91,"b":0.91,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global.lively.morphic.Graphics"},"625":{"offset":1,"color":{"__isSmartRef__":true,"id":626}},"626":{"r":0.97,"g":0.97,"b":0.97,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global.lively.morphic.Graphics"},"627":{"sourceObj":{"__isSmartRef__":true,"id":596},"sourceAttrName":"fire","targetObj":{"__isSmartRef__":true,"id":595},"targetMethodName":"trigger","__LivelyClassName__":"AttributeConnection","__SourceModuleName__":"Global.lively.bindings"},"628":{"sourceObj":{"__isSmartRef__":true,"id":596},"sourceAttrName":"fire","targetObj":{"__isSmartRef__":true,"id":596},"targetMethodName":"setLabel","converter":null,"converterString":"function () { return this.getSourceObj().command.asString() }","updater":null,"updaterString":null,"varMapping":{"__isSmartRef__":true,"id":629},"__LivelyClassName__":"AttributeConnection","__SourceModuleName__":"Global.lively.bindings"},"629":{"source":{"__isSmartRef__":true,"id":596},"target":{"__isSmartRef__":true,"id":596}},"630":{"__LivelyClassName__":"lively.ide.NodeFilter","__SourceModuleName__":"Global.lively.ide.BrowserFramework"},"631":{"__LivelyClassName__":"lively.ide.NodeFilter","__SourceModuleName__":"Global.lively.ide.BrowserFramework"},"632":{"attributes":["isClassNode","isGrammarNode","isChangeNode","isFunctionNode","isObjectNode"],"__LivelyClassName__":"lively.ide.NodeTypeFilter","__SourceModuleName__":"Global.lively.ide.BrowserFramework"},"633":{"__LivelyClassName__":"lively.ide.NodeFilter","__SourceModuleName__":"Global.lively.ide.BrowserFramework"},"634":{"__LivelyClassName__":"lively.ide.NodeFilter","__SourceModuleName__":"Global.lively.ide.BrowserFramework"},"635":{"__LivelyClassName__":"lively.ide.NodeFilter","__SourceModuleName__":"Global.lively.ide.BrowserFramework"},"636":{"sourceObj":{"__isSmartRef__":true,"id":384},"sourceAttrName":"setPane1Content","targetObj":{"__isSmartRef__":true,"id":637},"targetMethodName":"updateList","converter":null,"converterString":null,"updater":null,"updaterString":null,"varMapping":{"__isSmartRef__":true,"id":1002},"__LivelyClassName__":"AttributeConnection","__SourceModuleName__":"Global.lively.bindings"},"637":{"submorphs":[],"scripts":[],"shape":{"__isSmartRef__":true,"id":638},"derivationIds":[null],"id":"46A0F4A5-976F-4041-ADD3-0CCD31E23D88","renderContextTable":{"__isSmartRef__":true,"id":644},"itemList":[{"__isSmartRef__":true,"id":645},{"__isSmartRef__":true,"id":669},{"__isSmartRef__":true,"id":670},{"__isSmartRef__":true,"id":671},{"__isSmartRef__":true,"id":672},{"__isSmartRef__":true,"id":673},{"__isSmartRef__":true,"id":674},{"__isSmartRef__":true,"id":675},{"__isSmartRef__":true,"id":676},{"__isSmartRef__":true,"id":677},{"__isSmartRef__":true,"id":678},{"__isSmartRef__":true,"id":679},{"__isSmartRef__":true,"id":680},{"__isSmartRef__":true,"id":681},{"__isSmartRef__":true,"id":682},{"__isSmartRef__":true,"id":683}],"_FontFamily":"Helvetica","eventHandler":{"__isSmartRef__":true,"id":684},"droppingEnabled":true,"halosEnabled":true,"_ClipMode":"auto","_FontSize":10,"_Position":{"__isSmartRef__":true,"id":685},"selectedLineNo":4,"owner":{"__isSmartRef__":true,"id":370},"attributeConnections":[{"__isSmartRef__":true,"id":686},{"__isSmartRef__":true,"id":691},{"__isSmartRef__":true,"id":693},{"__isSmartRef__":true,"id":695}],"doNotSerialize":["$$selection"],"doNotCopyProperties":["$$selection"],"selection":{"__isSmartRef__":true,"id":697},"prevScroll":[0,16],"__serializedLivelyClosures__":{"__isSmartRef__":true,"id":987},"__LivelyClassName__":"lively.morphic.List","__SourceModuleName__":"Global.lively.morphic.Core"},"638":{"_Position":{"__isSmartRef__":true,"id":639},"renderContextTable":{"__isSmartRef__":true,"id":640},"_Extent":{"__isSmartRef__":true,"id":641},"_Padding":{"__isSmartRef__":true,"id":642},"_BorderWidth":0,"_BorderColor":{"__isSmartRef__":true,"id":77},"_Fill":{"__isSmartRef__":true,"id":643},"__LivelyClassName__":"lively.morphic.Shapes.Rectangle","__SourceModuleName__":"Global.lively.morphic.Shapes"},"639":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global.lively.morphic.Graphics"},"640":{"init":"initHTML","appendShape":"renderHTML","setPosition":"setPositionHTML","setExtent":"setExtentHTML","setPadding":"setPaddingHTML","setFill":"setFillHTML","setBorderColor":"setBorderColorHTML","setBorderWidth":"setBorderWidthHTML","setStrokeOpacity":"setStrokeOpacityHTML","setBorderRadius":"setBorderRadiusHTML","setBorderStyle":"setBorderStyleHTML","setOpacity":"setOpacityHTML","setClipMode":"setClipModeHTML"},"641":{"x":205,"y":192.5,"__LivelyClassName__":"Point","__SourceModuleName__":"Global.lively.morphic.Graphics"},"642":{"x":0,"y":0,"width":0,"height":0,"__LivelyClassName__":"Rectangle","__SourceModuleName__":"Global.lively.morphic.Graphics"},"643":{"r":0.95,"g":0.95,"b":0.95,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global.lively.morphic.Graphics"},"644":{"replaceRenderContext":"replaceRenderContextHTML","init":"initHTML","append":"appendHTML","remove":"removeHTML","triggerEvent":"triggerEventHTML","setTransform":"setTransformHTML","setPosition":"setPositionHTML","setRotation":"setRotationHTML","setExtent":"setExtentHTML","setScale":"setScaleHTML","setVisible":"setVisibleHTML","adjustOrigin":"adjustOriginHTML","setPivotPoint":"setPivotPointHTML","setClipMode":"setClipModeHTML","showsVerticalScrollBar":"showsVerticalScrollBarHTML","showsHorizontalScrollBar":"showsHorizontalScrollBarHTML","getScrollBarExtent":"getScrollBarExtentHTML","setHandStyle":"setHandStyleHTML","setPointerEvents":"setPointerEventsHTML","setToolTip":"setToolTipHTML","focus":"focusHTML","blur":"blurHTML","setFocusable":"setFocusableHTML","updateListContent":"updateListContentHTML","resizeList":"resizeListHTML","getItemIndexFromEvent":"getItemIndexFromEventHTML","getListExtent":"getListExtentHTML","setSize":"setSizeHTML","renderAsDropDownList":"renderAsDropDownListHTML","setFontSize":"setFontSizeHTML","setFontFamily":"setFontFamilyHTML","getSelectedIndexes":"getSelectedIndexesHTML","enableMultipleSelections":"enableMultipleSelectionsHTML","selectAllAt":"selectAllAtHTML","clearSelections":"clearSelectionsHTML","deselectAt":"deselectAtHTML"},"645":{"isListItem":true,"string":"crabGame/","value":{"__isSmartRef__":true,"id":646}},"646":{"target":{"__isSmartRef__":true,"id":647},"browser":{"__isSmartRef__":true,"id":384},"parent":{"__isSmartRef__":true,"id":648},"localName":"crabGame/","__LivelyClassName__":"lively.ide.NamespaceNode","__SourceModuleName__":"Global.lively.ide.SystemBrowserNodes"},"647":{"protocol":"http:","hostname":"lively-kernel.org","pathname":"/repository/webwerkstatt/users/fbo/crabGame/","__LivelyClassName__":"URL","__SourceModuleName__":"Global.lively.Network"},"648":{"target":{"__isSmartRef__":true,"id":649},"browser":{"__isSmartRef__":true,"id":384},"parent":null,"allFiles":["../users/fbo/DraftLayout.js","../users/fbo/LayoutContainers.js","../users/fbo/config.js","../users/fbo/TileSupport.js","../users/fbo/DigestAuth.js","../users/fbo/TabContainer.js","../users/fbo/GameLogger.js","../users/fbo/LayoutPlayground.js","../users/fbo/DomPlayground.js","../users/fbo/Feeds.js","../users/fbo/MyModule.js"],"subNamespacePaths":[{"__isSmartRef__":true,"id":650},{"__isSmartRef__":true,"id":647},{"__isSmartRef__":true,"id":651}],"parentNamespacePath":{"__isSmartRef__":true,"id":652},"_childNodes":[{"__isSmartRef__":true,"id":646},{"__isSmartRef__":true,"id":653},{"__isSmartRef__":true,"id":654},{"__isSmartRef__":true,"id":655},{"__isSmartRef__":true,"id":656},{"__isSmartRef__":true,"id":657},{"__isSmartRef__":true,"id":658},{"__isSmartRef__":true,"id":659},{"__isSmartRef__":true,"id":660},{"__isSmartRef__":true,"id":661},{"__isSmartRef__":true,"id":662},{"__isSmartRef__":true,"id":663},{"__isSmartRef__":true,"id":664},{"__isSmartRef__":true,"id":665},{"__isSmartRef__":true,"id":666},{"__isSmartRef__":true,"id":667}],"__LivelyClassName__":"lively.ide.SourceControlNode","__SourceModuleName__":"Global.lively.ide.SystemBrowserNodes"},"649":{"__LivelyClassName__":"AnotherSourceDatabase","__SourceModuleName__":"Global.lively.ide.SourceDatabase"},"650":{"protocol":"http:","hostname":"lively-kernel.org","pathname":"/repository/webwerkstatt/users/fbo/doc/","__LivelyClassName__":"URL","__SourceModuleName__":"Global.lively.Network"},"651":{"protocol":"http:","hostname":"lively-kernel.org","pathname":"/repository/webwerkstatt/users/fbo/myChild/","__LivelyClassName__":"URL","__SourceModuleName__":"Global.lively.Network"},"652":{"protocol":"http:","hostname":"lively-kernel.org","pathname":"/repository/webwerkstatt/users/fbo/../","__LivelyClassName__":"URL","__SourceModuleName__":"Global.lively.Network"},"653":{"target":{"__isSmartRef__":true,"id":650},"browser":{"__isSmartRef__":true,"id":384},"parent":{"__isSmartRef__":true,"id":648},"localName":"doc/","__LivelyClassName__":"lively.ide.NamespaceNode","__SourceModuleName__":"Global.lively.ide.SystemBrowserNodes"},"654":{"target":{"__isSmartRef__":true,"id":651},"browser":{"__isSmartRef__":true,"id":384},"parent":{"__isSmartRef__":true,"id":648},"localName":"myChild/","__LivelyClassName__":"lively.ide.NamespaceNode","__SourceModuleName__":"Global.lively.ide.SystemBrowserNodes"},"655":{"target":{"__isSmartRef__":true,"id":652},"browser":{"__isSmartRef__":true,"id":384},"parent":{"__isSmartRef__":true,"id":648},"localName":"../","__LivelyClassName__":"lively.ide.NamespaceNode","__SourceModuleName__":"Global.lively.ide.SystemBrowserNodes"},"656":{"browser":{"__isSmartRef__":true,"id":384},"parent":{"__isSmartRef__":true,"id":648},"moduleName":"../users/fbo/config.js","showAll":false,"__LivelyClassName__":"lively.ide.CompleteFileFragmentNode","__SourceModuleName__":"Global.lively.ide.SystemBrowserNodes"},"657":{"browser":{"__isSmartRef__":true,"id":384},"parent":{"__isSmartRef__":true,"id":648},"moduleName":"../users/fbo/DigestAuth.js","showAll":false,"__LivelyClassName__":"lively.ide.CompleteFileFragmentNode","__SourceModuleName__":"Global.lively.ide.SystemBrowserNodes"},"658":{"browser":{"__isSmartRef__":true,"id":384},"parent":{"__isSmartRef__":true,"id":648},"moduleName":"../users/fbo/DomPlayground.js","showAll":false,"__LivelyClassName__":"lively.ide.CompleteFileFragmentNode","__SourceModuleName__":"Global.lively.ide.SystemBrowserNodes"},"659":{"browser":{"__isSmartRef__":true,"id":384},"parent":{"__isSmartRef__":true,"id":648},"moduleName":"../users/fbo/DraftLayout.js","showAll":false,"__LivelyClassName__":"lively.ide.CompleteFileFragmentNode","__SourceModuleName__":"Global.lively.ide.SystemBrowserNodes"},"660":{"browser":{"__isSmartRef__":true,"id":384},"parent":{"__isSmartRef__":true,"id":648},"moduleName":"../users/fbo/Feeds.js","showAll":false,"__LivelyClassName__":"lively.ide.CompleteFileFragmentNode","__SourceModuleName__":"Global.lively.ide.SystemBrowserNodes"},"661":{"browser":{"__isSmartRef__":true,"id":384},"parent":{"__isSmartRef__":true,"id":648},"moduleName":"../users/fbo/GameLogger.js","showAll":false,"__LivelyClassName__":"lively.ide.CompleteFileFragmentNode","__SourceModuleName__":"Global.lively.ide.SystemBrowserNodes"},"662":{"browser":{"__isSmartRef__":true,"id":384},"parent":{"__isSmartRef__":true,"id":648},"moduleName":"../users/fbo/LayoutContainers.js","showAll":false,"__LivelyClassName__":"lively.ide.CompleteFileFragmentNode","__SourceModuleName__":"Global.lively.ide.SystemBrowserNodes"},"663":{"browser":{"__isSmartRef__":true,"id":384},"parent":{"__isSmartRef__":true,"id":648},"moduleName":"../users/fbo/LayoutPlayground.js","showAll":false,"__LivelyClassName__":"lively.ide.CompleteFileFragmentNode","__SourceModuleName__":"Global.lively.ide.SystemBrowserNodes"},"664":{"browser":{"__isSmartRef__":true,"id":384},"parent":{"__isSmartRef__":true,"id":648},"moduleName":"../users/fbo/MyModule.js","showAll":false,"__LivelyClassName__":"lively.ide.CompleteFileFragmentNode","__SourceModuleName__":"Global.lively.ide.SystemBrowserNodes"},"665":{"browser":{"__isSmartRef__":true,"id":384},"parent":{"__isSmartRef__":true,"id":648},"moduleName":"../users/fbo/TabContainer.js","showAll":false,"__LivelyClassName__":"lively.ide.CompleteFileFragmentNode","__SourceModuleName__":"Global.lively.ide.SystemBrowserNodes"},"666":{"browser":{"__isSmartRef__":true,"id":384},"parent":{"__isSmartRef__":true,"id":648},"moduleName":"../users/fbo/TileSupport.js","showAll":false,"__LivelyClassName__":"lively.ide.CompleteFileFragmentNode","__SourceModuleName__":"Global.lively.ide.SystemBrowserNodes"},"667":{"target":{"__isSmartRef__":true,"id":668},"browser":{"__isSmartRef__":true,"id":384},"__LivelyClassName__":"lively.ide.ChangeSetNode","__SourceModuleName__":"Global.lively.ide.LocalBrowser"},"668":{"name":"Local code","__LivelyClassName__":"ChangeSet","__SourceModuleName__":"Global.lively.ChangeSet"},"669":{"isListItem":true,"string":"doc/","value":{"__isSmartRef__":true,"id":653}},"670":{"isListItem":true,"string":"myChild/","value":{"__isSmartRef__":true,"id":654}},"671":{"isListItem":true,"string":"../","value":{"__isSmartRef__":true,"id":655}},"672":{"isListItem":true,"string":"config.js (not parsed)","value":{"__isSmartRef__":true,"id":656}},"673":{"isListItem":true,"string":"DigestAuth.js (not parsed)","value":{"__isSmartRef__":true,"id":657}},"674":{"isListItem":true,"string":"DomPlayground.js (not parsed)","value":{"__isSmartRef__":true,"id":658}},"675":{"isListItem":true,"string":"DraftLayout.js (not parsed)","value":{"__isSmartRef__":true,"id":659}},"676":{"isListItem":true,"string":"Feeds.js (not parsed)","value":{"__isSmartRef__":true,"id":660}},"677":{"isListItem":true,"string":"GameLogger.js (not parsed)","value":{"__isSmartRef__":true,"id":661}},"678":{"isListItem":true,"string":"LayoutContainers.js (not parsed)","value":{"__isSmartRef__":true,"id":662}},"679":{"isListItem":true,"string":"LayoutPlayground.js (not parsed)","value":{"__isSmartRef__":true,"id":663}},"680":{"isListItem":true,"string":"MyModule.js (not parsed)","value":{"__isSmartRef__":true,"id":664}},"681":{"isListItem":true,"string":"TabContainer.js (not parsed)","value":{"__isSmartRef__":true,"id":665}},"682":{"isListItem":true,"string":"TileSupport.js (not parsed)","value":{"__isSmartRef__":true,"id":666}},"683":{"isListItem":true,"string":"Local code","value":{"__isSmartRef__":true,"id":667}},"684":{"morph":{"__isSmartRef__":true,"id":637},"__LivelyClassName__":"lively.morphic.EventHandler","__SourceModuleName__":"Global.lively.morphic.Events"},"685":{"x":0,"y":27.5,"__LivelyClassName__":"Point","__SourceModuleName__":"Global.lively.morphic.Graphics"},"686":{"sourceObj":{"__isSmartRef__":true,"id":637},"sourceAttrName":"selection","targetObj":{"__isSmartRef__":true,"id":384},"targetMethodName":"setPane1Selection","converter":null,"converterString":null,"updaterString":"function ($upd, v) { $upd(v, this.sourceObj) }","varMapping":{"__isSmartRef__":true,"id":687},"__serializedLivelyClosures__":{"__isSmartRef__":true,"id":688},"__LivelyClassName__":"AttributeConnection","__SourceModuleName__":"Global.lively.bindings"},"687":{"source":{"__isSmartRef__":true,"id":637},"target":{"__isSmartRef__":true,"id":384}},"688":{"updater":{"__isSmartRef__":true,"id":689}},"689":{"originalFunc":null,"varMapping":{"__isSmartRef__":true,"id":687},"source":"function ($upd, v) { $upd(v, this.sourceObj) }","funcProperties":{"__isSmartRef__":true,"id":690},"__LivelyClassName__":"lively.Closure","__SourceModuleName__":"Global.lively.lang.Closure"},"690":{},"691":{"sourceObj":{"__isSmartRef__":true,"id":637},"sourceAttrName":"getSelection","targetObj":{"__isSmartRef__":true,"id":384},"targetMethodName":"getPane1Selection","converter":null,"converterString":null,"updater":null,"updaterString":null,"varMapping":{"__isSmartRef__":true,"id":692},"__LivelyClassName__":"AttributeConnection","__SourceModuleName__":"Global.lively.bindings"},"692":{"source":{"__isSmartRef__":true,"id":637},"target":{"__isSmartRef__":true,"id":384}},"693":{"sourceObj":{"__isSmartRef__":true,"id":637},"sourceAttrName":"getList","targetObj":{"__isSmartRef__":true,"id":384},"targetMethodName":"getPane1Content","converter":null,"converterString":null,"updater":null,"updaterString":null,"varMapping":{"__isSmartRef__":true,"id":694},"__LivelyClassName__":"AttributeConnection","__SourceModuleName__":"Global.lively.bindings"},"694":{"source":{"__isSmartRef__":true,"id":637},"target":{"__isSmartRef__":true,"id":384}},"695":{"sourceObj":{"__isSmartRef__":true,"id":637},"sourceAttrName":"getMenu","targetObj":{"__isSmartRef__":true,"id":384},"targetMethodName":"getPane1Menu","converter":null,"converterString":null,"updater":null,"updaterString":null,"varMapping":{"__isSmartRef__":true,"id":696},"__LivelyClassName__":"AttributeConnection","__SourceModuleName__":"Global.lively.bindings"},"696":{"source":{"__isSmartRef__":true,"id":637},"target":{"__isSmartRef__":true,"id":384}},"697":{"target":{"__isSmartRef__":true,"id":698},"browser":{"__isSmartRef__":true,"id":384},"parent":{"__isSmartRef__":true,"id":648},"moduleName":"lively/persistence/Serializer.js","showAll":false,"__LivelyClassName__":"lively.ide.CompleteFileFragmentNode","__SourceModuleName__":"Global.lively.ide.SystemBrowserNodes"},"698":{"name":"lively.persistence.Serializer","type":"moduleDef","startIndex":1136,"stopIndex":50367,"fileName":"lively/persistence/Serializer.js","_subElements":[{"__isSmartRef__":true,"id":699},{"__isSmartRef__":true,"id":700},{"__isSmartRef__":true,"id":754},{"__isSmartRef__":true,"id":755},{"__isSmartRef__":true,"id":762},{"__isSmartRef__":true,"id":763},{"__isSmartRef__":true,"id":767},{"__isSmartRef__":true,"id":768},{"__isSmartRef__":true,"id":785},{"__isSmartRef__":true,"id":786},{"__isSmartRef__":true,"id":797},{"__isSmartRef__":true,"id":798},{"__isSmartRef__":true,"id":805},{"__isSmartRef__":true,"id":810},{"__isSmartRef__":true,"id":811},{"__isSmartRef__":true,"id":820},{"__isSmartRef__":true,"id":821},{"__isSmartRef__":true,"id":833},{"__isSmartRef__":true,"id":834},{"__isSmartRef__":true,"id":837},{"__isSmartRef__":true,"id":838},{"__isSmartRef__":true,"id":845},{"__isSmartRef__":true,"id":846},{"__isSmartRef__":true,"id":855},{"__isSmartRef__":true,"id":856},{"__isSmartRef__":true,"id":863},{"__isSmartRef__":true,"id":864},{"__isSmartRef__":true,"id":875},{"__isSmartRef__":true,"id":876},{"__isSmartRef__":true,"id":879},{"__isSmartRef__":true,"id":880},{"__isSmartRef__":true,"id":884},{"__isSmartRef__":true,"id":885},{"__isSmartRef__":true,"id":893},{"__isSmartRef__":true,"id":894},{"__isSmartRef__":true,"id":910},{"__isSmartRef__":true,"id":911},{"__isSmartRef__":true,"id":914},{"__isSmartRef__":true,"id":915},{"__isSmartRef__":true,"id":924},{"__isSmartRef__":true,"id":925},{"__isSmartRef__":true,"id":928},{"__isSmartRef__":true,"id":929},{"__isSmartRef__":true,"id":937},{"__isSmartRef__":true,"id":938},{"__isSmartRef__":true,"id":956},{"__isSmartRef__":true,"id":957},{"__isSmartRef__":true,"id":961},{"__isSmartRef__":true,"id":962},{"__isSmartRef__":true,"id":966},{"__isSmartRef__":true,"id":967},{"__isSmartRef__":true,"id":986}],"sourceControl":{"__isSmartRef__":true,"id":649},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"699":{"name":null,"type":"comment","startIndex":1206,"stopIndex":1206,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"700":{"name":"ObjectGraphLinearizer","type":"klassDef","startIndex":1207,"stopIndex":11703,"fileName":"lively/persistence/Serializer.js","_subElements":[{"__isSmartRef__":true,"id":701},{"__isSmartRef__":true,"id":703},{"__isSmartRef__":true,"id":704},{"__isSmartRef__":true,"id":705},{"__isSmartRef__":true,"id":706},{"__isSmartRef__":true,"id":708},{"__isSmartRef__":true,"id":709},{"__isSmartRef__":true,"id":711},{"__isSmartRef__":true,"id":712},{"__isSmartRef__":true,"id":714},{"__isSmartRef__":true,"id":715},{"__isSmartRef__":true,"id":716},{"__isSmartRef__":true,"id":717},{"__isSmartRef__":true,"id":718},{"__isSmartRef__":true,"id":719},{"__isSmartRef__":true,"id":720},{"__isSmartRef__":true,"id":721},{"__isSmartRef__":true,"id":722},{"__isSmartRef__":true,"id":723},{"__isSmartRef__":true,"id":725},{"__isSmartRef__":true,"id":726},{"__isSmartRef__":true,"id":727},{"__isSmartRef__":true,"id":728},{"__isSmartRef__":true,"id":730},{"__isSmartRef__":true,"id":731},{"__isSmartRef__":true,"id":732},{"__isSmartRef__":true,"id":733},{"__isSmartRef__":true,"id":734},{"__isSmartRef__":true,"id":736},{"__isSmartRef__":true,"id":737},{"__isSmartRef__":true,"id":739},{"__isSmartRef__":true,"id":740},{"__isSmartRef__":true,"id":741},{"__isSmartRef__":true,"id":742},{"__isSmartRef__":true,"id":743},{"__isSmartRef__":true,"id":744},{"__isSmartRef__":true,"id":746},{"__isSmartRef__":true,"id":747},{"__isSmartRef__":true,"id":748},{"__isSmartRef__":true,"id":749},{"__isSmartRef__":true,"id":751},{"__isSmartRef__":true,"id":753}],"sourceControl":{"__isSmartRef__":true,"id":649},"superclassName":"Object","categories":[{"__isSmartRef__":true,"id":702},{"__isSmartRef__":true,"id":707},{"__isSmartRef__":true,"id":710},{"__isSmartRef__":true,"id":713},{"__isSmartRef__":true,"id":724},{"__isSmartRef__":true,"id":729},{"__isSmartRef__":true,"id":735},{"__isSmartRef__":true,"id":738},{"__isSmartRef__":true,"id":745},{"__isSmartRef__":true,"id":750},{"__isSmartRef__":true,"id":752}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"701":{"name":"defaultCopyDepth","type":"propertyDef","startIndex":1262,"stopIndex":1287,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":702},"className":"ObjectGraphLinearizer","_owner":{"__isSmartRef__":true,"id":700},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"702":{"name":"settings","type":"categoryDef","startIndex":1248,"stopIndex":1381,"fileName":"lively/persistence/Serializer.js","_subElements":[{"__isSmartRef__":true,"id":701},{"__isSmartRef__":true,"id":703},{"__isSmartRef__":true,"id":704},{"__isSmartRef__":true,"id":705}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"703":{"name":"keepIds","type":"propertyDef","startIndex":1289,"stopIndex":1335,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":702},"className":"ObjectGraphLinearizer","_owner":{"__isSmartRef__":true,"id":700},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"704":{"name":"showLog","type":"propertyDef","startIndex":1337,"stopIndex":1355,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":702},"className":"ObjectGraphLinearizer","_owner":{"__isSmartRef__":true,"id":700},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"705":{"name":"prettyPrint","type":"propertyDef","startIndex":1357,"stopIndex":1379,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":702},"className":"ObjectGraphLinearizer","_owner":{"__isSmartRef__":true,"id":700},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"706":{"name":"initialize","type":"propertyDef","startIndex":1401,"stopIndex":1570,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":707},"className":"ObjectGraphLinearizer","_owner":{"__isSmartRef__":true,"id":700},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"707":{"name":"initializing","type":"categoryDef","startIndex":1383,"stopIndex":2122,"fileName":"lively/persistence/Serializer.js","_subElements":[{"__isSmartRef__":true,"id":706},{"__isSmartRef__":true,"id":708}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"708":{"name":"cleanup","type":"propertyDef","startIndex":1572,"stopIndex":2119,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":707},"className":"ObjectGraphLinearizer","_owner":{"__isSmartRef__":true,"id":700},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"709":{"name":"isReference","type":"propertyDef","startIndex":2137,"stopIndex":2204,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":710},"className":"ObjectGraphLinearizer","_owner":{"__isSmartRef__":true,"id":700},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"710":{"name":"testing","type":"categoryDef","startIndex":2124,"stopIndex":2439,"fileName":"lively/persistence/Serializer.js","_subElements":[{"__isSmartRef__":true,"id":709},{"__isSmartRef__":true,"id":711}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"711":{"name":"isValueObject","type":"propertyDef","startIndex":2206,"stopIndex":2436,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":710},"className":"ObjectGraphLinearizer","_owner":{"__isSmartRef__":true,"id":700},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"712":{"name":"idProperty","type":"propertyDef","startIndex":2456,"stopIndex":2485,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":713},"className":"ObjectGraphLinearizer","_owner":{"__isSmartRef__":true,"id":700},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"713":{"name":"accessing","type":"categoryDef","startIndex":2441,"stopIndex":3507,"fileName":"lively/persistence/Serializer.js","_subElements":[{"__isSmartRef__":true,"id":712},{"__isSmartRef__":true,"id":714},{"__isSmartRef__":true,"id":715},{"__isSmartRef__":true,"id":716},{"__isSmartRef__":true,"id":717},{"__isSmartRef__":true,"id":718},{"__isSmartRef__":true,"id":719},{"__isSmartRef__":true,"id":720},{"__isSmartRef__":true,"id":721},{"__isSmartRef__":true,"id":722}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"714":{"name":"escapedCDATAEnd","type":"propertyDef","startIndex":2487,"stopIndex":2522,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":713},"className":"ObjectGraphLinearizer","_owner":{"__isSmartRef__":true,"id":700},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"715":{"name":"CDATAEnd","type":"propertyDef","startIndex":2524,"stopIndex":2546,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":713},"className":"ObjectGraphLinearizer","_owner":{"__isSmartRef__":true,"id":700},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"716":{"name":"newId","type":"propertyDef","startIndex":2549,"stopIndex":2601,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":713},"className":"ObjectGraphLinearizer","_owner":{"__isSmartRef__":true,"id":700},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"717":{"name":"getIdFromObject","type":"propertyDef","startIndex":2603,"stopIndex":2732,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":713},"className":"ObjectGraphLinearizer","_owner":{"__isSmartRef__":true,"id":700},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"718":{"name":"getRegisteredObjectFromSmartRef","type":"propertyDef","startIndex":2734,"stopIndex":2875,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":713},"className":"ObjectGraphLinearizer","_owner":{"__isSmartRef__":true,"id":700},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"719":{"name":"getRegisteredObjectFromId","type":"propertyDef","startIndex":2878,"stopIndex":3000,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":713},"className":"ObjectGraphLinearizer","_owner":{"__isSmartRef__":true,"id":700},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"720":{"name":"getRecreatedObjectFromId","type":"propertyDef","startIndex":3002,"stopIndex":3122,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":713},"className":"ObjectGraphLinearizer","_owner":{"__isSmartRef__":true,"id":700},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"721":{"name":"setRecreatedObject","type":"propertyDef","startIndex":3124,"stopIndex":3405,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":713},"className":"ObjectGraphLinearizer","_owner":{"__isSmartRef__":true,"id":700},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"722":{"name":"getRefFromId","type":"propertyDef","startIndex":3407,"stopIndex":3504,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":713},"className":"ObjectGraphLinearizer","_owner":{"__isSmartRef__":true,"id":700},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"723":{"name":"addPlugin","type":"propertyDef","startIndex":3522,"stopIndex":3653,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":724},"className":"ObjectGraphLinearizer","_owner":{"__isSmartRef__":true,"id":700},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"724":{"name":"plugins","type":"categoryDef","startIndex":3509,"stopIndex":4613,"fileName":"lively/persistence/Serializer.js","_subElements":[{"__isSmartRef__":true,"id":723},{"__isSmartRef__":true,"id":725},{"__isSmartRef__":true,"id":726},{"__isSmartRef__":true,"id":727}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"725":{"name":"addPlugins","type":"propertyDef","startIndex":3655,"stopIndex":3785,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":724},"className":"ObjectGraphLinearizer","_owner":{"__isSmartRef__":true,"id":700},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"726":{"name":"somePlugin","type":"propertyDef","startIndex":3787,"stopIndex":4254,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":724},"className":"ObjectGraphLinearizer","_owner":{"__isSmartRef__":true,"id":700},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"727":{"name":"letAllPlugins","type":"propertyDef","startIndex":4256,"stopIndex":4610,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":724},"className":"ObjectGraphLinearizer","_owner":{"__isSmartRef__":true,"id":700},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"728":{"name":"register","type":"propertyDef","startIndex":4653,"stopIndex":5264,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":729},"className":"ObjectGraphLinearizer","_owner":{"__isSmartRef__":true,"id":700},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"729":{"name":"object registry -- serialization","type":"categoryDef","startIndex":4615,"stopIndex":7197,"fileName":"lively/persistence/Serializer.js","_subElements":[{"__isSmartRef__":true,"id":728},{"__isSmartRef__":true,"id":730},{"__isSmartRef__":true,"id":731},{"__isSmartRef__":true,"id":732},{"__isSmartRef__":true,"id":733}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"730":{"name":"addIdAndAddToRegistryIfNecessary","type":"propertyDef","startIndex":5266,"stopIndex":5513,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":729},"className":"ObjectGraphLinearizer","_owner":{"__isSmartRef__":true,"id":700},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"731":{"name":"addNewRegistryEntry","type":"propertyDef","startIndex":5515,"stopIndex":5911,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":729},"className":"ObjectGraphLinearizer","_owner":{"__isSmartRef__":true,"id":700},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"732":{"name":"createRegistryEntry","type":"propertyDef","startIndex":5913,"stopIndex":6282,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":729},"className":"ObjectGraphLinearizer","_owner":{"__isSmartRef__":true,"id":700},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"733":{"name":"copyObjectAndRegisterReferences","type":"propertyDef","startIndex":6284,"stopIndex":7194,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":729},"className":"ObjectGraphLinearizer","_owner":{"__isSmartRef__":true,"id":700},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"734":{"name":"recreateFromId","type":"propertyDef","startIndex":7239,"stopIndex":8184,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":735},"className":"ObjectGraphLinearizer","_owner":{"__isSmartRef__":true,"id":700},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"735":{"name":"object registry -- deserialization","type":"categoryDef","startIndex":7199,"stopIndex":8603,"fileName":"lively/persistence/Serializer.js","_subElements":[{"__isSmartRef__":true,"id":734},{"__isSmartRef__":true,"id":736}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"736":{"name":"patchObj","type":"propertyDef","startIndex":8186,"stopIndex":8600,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":735},"className":"ObjectGraphLinearizer","_owner":{"__isSmartRef__":true,"id":700},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"737":{"name":"serialize","type":"propertyDef","startIndex":8622,"stopIndex":8990,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":738},"className":"ObjectGraphLinearizer","_owner":{"__isSmartRef__":true,"id":700},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"738":{"name":"serializing","type":"categoryDef","startIndex":8605,"stopIndex":10249,"fileName":"lively/persistence/Serializer.js","_subElements":[{"__isSmartRef__":true,"id":737},{"__isSmartRef__":true,"id":739},{"__isSmartRef__":true,"id":740},{"__isSmartRef__":true,"id":741},{"__isSmartRef__":true,"id":742},{"__isSmartRef__":true,"id":743}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"739":{"name":"serializeToJso","type":"propertyDef","startIndex":8992,"stopIndex":9627,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":738},"className":"ObjectGraphLinearizer","_owner":{"__isSmartRef__":true,"id":700},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"740":{"name":"simplifyRegistry","type":"propertyDef","startIndex":9629,"stopIndex":9856,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":738},"className":"ObjectGraphLinearizer","_owner":{"__isSmartRef__":true,"id":700},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"741":{"name":"addIdToObject","type":"propertyDef","startIndex":9858,"stopIndex":9937,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":738},"className":"ObjectGraphLinearizer","_owner":{"__isSmartRef__":true,"id":700},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"742":{"name":"stringifyJSO","type":"propertyDef","startIndex":9939,"stopIndex":10187,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":738},"className":"ObjectGraphLinearizer","_owner":{"__isSmartRef__":true,"id":700},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"743":{"name":"reset","type":"propertyDef","startIndex":10189,"stopIndex":10246,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":738},"className":"ObjectGraphLinearizer","_owner":{"__isSmartRef__":true,"id":700},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"744":{"name":"deserialize","type":"propertyDef","startIndex":10269,"stopIndex":10389,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":745},"className":"ObjectGraphLinearizer","_owner":{"__isSmartRef__":true,"id":700},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"745":{"name":"deserializing","type":"categoryDef","startIndex":10251,"stopIndex":11157,"fileName":"lively/persistence/Serializer.js","_subElements":[{"__isSmartRef__":true,"id":744},{"__isSmartRef__":true,"id":746},{"__isSmartRef__":true,"id":747},{"__isSmartRef__":true,"id":748}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"746":{"name":"deserializeJso","type":"propertyDef","startIndex":10391,"stopIndex":10779,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":745},"className":"ObjectGraphLinearizer","_owner":{"__isSmartRef__":true,"id":700},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"747":{"name":"parseJSON","type":"propertyDef","startIndex":10781,"stopIndex":10867,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":745},"className":"ObjectGraphLinearizer","_owner":{"__isSmartRef__":true,"id":700},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"748":{"name":"createRealRegistry","type":"propertyDef","startIndex":10869,"stopIndex":11154,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":745},"className":"ObjectGraphLinearizer","_owner":{"__isSmartRef__":true,"id":700},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"749":{"name":"copy","type":"propertyDef","startIndex":11172,"stopIndex":11356,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":750},"className":"ObjectGraphLinearizer","_owner":{"__isSmartRef__":true,"id":700},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"750":{"name":"copying","type":"categoryDef","startIndex":11159,"stopIndex":11359,"fileName":"lively/persistence/Serializer.js","_subElements":[{"__isSmartRef__":true,"id":749}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"751":{"name":"log","type":"propertyDef","startIndex":11376,"stopIndex":11625,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":752},"className":"ObjectGraphLinearizer","_owner":{"__isSmartRef__":true,"id":700},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"752":{"name":"debugging","type":"categoryDef","startIndex":11361,"stopIndex":11700,"fileName":"lively/persistence/Serializer.js","_subElements":[{"__isSmartRef__":true,"id":751},{"__isSmartRef__":true,"id":753}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"753":{"name":"getPath","type":"propertyDef","startIndex":11627,"stopIndex":11698,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":752},"className":"ObjectGraphLinearizer","_owner":{"__isSmartRef__":true,"id":700},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"754":{"name":null,"type":"comment","startIndex":11704,"stopIndex":11704,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"755":{"name":"ObjectGraphLinearizer","type":"klassExtensionDef","startIndex":11705,"stopIndex":13401,"fileName":"lively/persistence/Serializer.js","_subElements":[{"__isSmartRef__":true,"id":756},{"__isSmartRef__":true,"id":758},{"__isSmartRef__":true,"id":759},{"__isSmartRef__":true,"id":760},{"__isSmartRef__":true,"id":761}],"sourceControl":{"__isSmartRef__":true,"id":649},"categories":[{"__isSmartRef__":true,"id":757}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"756":{"name":"forLively","type":"propertyDef","startIndex":11744,"stopIndex":12276,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":true,"category":{"__isSmartRef__":true,"id":757},"className":"ObjectGraphLinearizer","_owner":{"__isSmartRef__":true,"id":755},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"757":{"name":"default category","type":"categoryDef","startIndex":11742,"stopIndex":13398,"fileName":"lively/persistence/Serializer.js","_subElements":[{"__isSmartRef__":true,"id":756},{"__isSmartRef__":true,"id":758},{"__isSmartRef__":true,"id":759},{"__isSmartRef__":true,"id":760},{"__isSmartRef__":true,"id":761}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"758":{"name":"forLivelyCopy","type":"propertyDef","startIndex":12278,"stopIndex":12586,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":true,"category":{"__isSmartRef__":true,"id":757},"className":"ObjectGraphLinearizer","_owner":{"__isSmartRef__":true,"id":755},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"759":{"name":"withPlugins","type":"propertyDef","startIndex":12588,"stopIndex":12751,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":true,"category":{"__isSmartRef__":true,"id":757},"className":"ObjectGraphLinearizer","_owner":{"__isSmartRef__":true,"id":755},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"760":{"name":"allRegisteredObjectsDo","type":"propertyDef","startIndex":12753,"stopIndex":13109,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":true,"category":{"__isSmartRef__":true,"id":757},"className":"ObjectGraphLinearizer","_owner":{"__isSmartRef__":true,"id":755},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"761":{"name":"parseJSON","type":"propertyDef","startIndex":13111,"stopIndex":13395,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":true,"category":{"__isSmartRef__":true,"id":757},"className":"ObjectGraphLinearizer","_owner":{"__isSmartRef__":true,"id":755},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"762":{"name":null,"type":"comment","startIndex":13402,"stopIndex":13402,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"763":{"name":"ObjectLinearizerPlugin","type":"klassDef","startIndex":13403,"stopIndex":14077,"fileName":"lively/persistence/Serializer.js","_subElements":[{"__isSmartRef__":true,"id":764},{"__isSmartRef__":true,"id":766}],"sourceControl":{"__isSmartRef__":true,"id":649},"superclassName":"Object","categories":[{"__isSmartRef__":true,"id":765}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"764":{"name":"getSerializer","type":"propertyDef","startIndex":13460,"stopIndex":13516,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":765},"className":"ObjectLinearizerPlugin","_owner":{"__isSmartRef__":true,"id":763},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"765":{"name":"accessing","type":"categoryDef","startIndex":13445,"stopIndex":13575,"fileName":"lively/persistence/Serializer.js","_subElements":[{"__isSmartRef__":true,"id":764},{"__isSmartRef__":true,"id":766}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"766":{"name":"setSerializer","type":"propertyDef","startIndex":13518,"stopIndex":13572,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":765},"className":"ObjectLinearizerPlugin","_owner":{"__isSmartRef__":true,"id":763},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"767":{"name":null,"type":"comment","startIndex":14078,"stopIndex":14078,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"768":{"name":"ClassPlugin","type":"klassDef","startIndex":14079,"stopIndex":17142,"fileName":"lively/persistence/Serializer.js","_subElements":[{"__isSmartRef__":true,"id":769},{"__isSmartRef__":true,"id":771},{"__isSmartRef__":true,"id":772},{"__isSmartRef__":true,"id":773},{"__isSmartRef__":true,"id":775},{"__isSmartRef__":true,"id":776},{"__isSmartRef__":true,"id":777},{"__isSmartRef__":true,"id":778},{"__isSmartRef__":true,"id":779},{"__isSmartRef__":true,"id":781},{"__isSmartRef__":true,"id":782},{"__isSmartRef__":true,"id":783}],"sourceControl":{"__isSmartRef__":true,"id":649},"superclassName":"ObjectLinearizerPlugin","categories":[{"__isSmartRef__":true,"id":770},{"__isSmartRef__":true,"id":774},{"__isSmartRef__":true,"id":780},{"__isSmartRef__":true,"id":784}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"769":{"name":"isInstanceRestorer","type":"propertyDef","startIndex":14142,"stopIndex":14170,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":770},"className":"ClassPlugin","_owner":{"__isSmartRef__":true,"id":768},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"770":{"name":"properties","type":"categoryDef","startIndex":14126,"stopIndex":14297,"fileName":"lively/persistence/Serializer.js","_subElements":[{"__isSmartRef__":true,"id":769},{"__isSmartRef__":true,"id":771},{"__isSmartRef__":true,"id":772}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"771":{"name":"classNameProperty","type":"propertyDef","startIndex":14171,"stopIndex":14240,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":770},"className":"ClassPlugin","_owner":{"__isSmartRef__":true,"id":768},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"772":{"name":"sourceModuleNameProperty","type":"propertyDef","startIndex":14242,"stopIndex":14294,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":770},"className":"ClassPlugin","_owner":{"__isSmartRef__":true,"id":768},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"773":{"name":"additionallySerialize","type":"propertyDef","startIndex":14321,"stopIndex":14452,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":774},"className":"ClassPlugin","_owner":{"__isSmartRef__":true,"id":768},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"774":{"name":"plugin interface","type":"categoryDef","startIndex":14299,"stopIndex":14877,"fileName":"lively/persistence/Serializer.js","_subElements":[{"__isSmartRef__":true,"id":773},{"__isSmartRef__":true,"id":775},{"__isSmartRef__":true,"id":776},{"__isSmartRef__":true,"id":777},{"__isSmartRef__":true,"id":778}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"775":{"name":"deserializeObj","type":"propertyDef","startIndex":14454,"stopIndex":14566,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":774},"className":"ClassPlugin","_owner":{"__isSmartRef__":true,"id":768},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"776":{"name":"ignoreProp","type":"propertyDef","startIndex":14568,"stopIndex":14665,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":774},"className":"ClassPlugin","_owner":{"__isSmartRef__":true,"id":768},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"777":{"name":"ignorePropDeserialization","type":"propertyDef","startIndex":14667,"stopIndex":14783,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":774},"className":"ClassPlugin","_owner":{"__isSmartRef__":true,"id":768},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"778":{"name":"afterDeserializeObj","type":"propertyDef","startIndex":14785,"stopIndex":14874,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":774},"className":"ClassPlugin","_owner":{"__isSmartRef__":true,"id":768},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"779":{"name":"addClassInfoIfPresent","type":"propertyDef","startIndex":14907,"stopIndex":15385,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":780},"className":"ClassPlugin","_owner":{"__isSmartRef__":true,"id":768},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"780":{"name":"class info persistence","type":"categoryDef","startIndex":14879,"stopIndex":16426,"fileName":"lively/persistence/Serializer.js","_subElements":[{"__isSmartRef__":true,"id":779},{"__isSmartRef__":true,"id":781},{"__isSmartRef__":true,"id":782}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"781":{"name":"restoreIfClassInstance","type":"propertyDef","startIndex":15387,"stopIndex":16281,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":780},"className":"ClassPlugin","_owner":{"__isSmartRef__":true,"id":768},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"782":{"name":"removeClassInfoIfPresent","type":"propertyDef","startIndex":16283,"stopIndex":16423,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":780},"className":"ClassPlugin","_owner":{"__isSmartRef__":true,"id":768},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"783":{"name":"sourceModulesIn","type":"propertyDef","startIndex":16443,"stopIndex":17137,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":784},"className":"ClassPlugin","_owner":{"__isSmartRef__":true,"id":768},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"784":{"name":"searching","type":"categoryDef","startIndex":16428,"stopIndex":17139,"fileName":"lively/persistence/Serializer.js","_subElements":[{"__isSmartRef__":true,"id":783}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"785":{"name":null,"type":"comment","startIndex":17143,"stopIndex":17143,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"786":{"name":"LayerPlugin","type":"klassDef","startIndex":17144,"stopIndex":18561,"fileName":"lively/persistence/Serializer.js","_subElements":[{"__isSmartRef__":true,"id":787},{"__isSmartRef__":true,"id":789},{"__isSmartRef__":true,"id":790},{"__isSmartRef__":true,"id":792},{"__isSmartRef__":true,"id":793},{"__isSmartRef__":true,"id":794},{"__isSmartRef__":true,"id":796}],"sourceControl":{"__isSmartRef__":true,"id":649},"superclassName":"ObjectLinearizerPlugin","categories":[{"__isSmartRef__":true,"id":788},{"__isSmartRef__":true,"id":791},{"__isSmartRef__":true,"id":795}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"787":{"name":"withLayersPropName","type":"propertyDef","startIndex":17207,"stopIndex":17243,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":788},"className":"LayerPlugin","_owner":{"__isSmartRef__":true,"id":786},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"788":{"name":"properties","type":"categoryDef","startIndex":17191,"stopIndex":17290,"fileName":"lively/persistence/Serializer.js","_subElements":[{"__isSmartRef__":true,"id":787},{"__isSmartRef__":true,"id":789}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"789":{"name":"withoutLayersPropName","type":"propertyDef","startIndex":17245,"stopIndex":17288,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":788},"className":"LayerPlugin","_owner":{"__isSmartRef__":true,"id":786},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"790":{"name":"additionallySerialize","type":"propertyDef","startIndex":17314,"stopIndex":17554,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":791},"className":"LayerPlugin","_owner":{"__isSmartRef__":true,"id":786},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"791":{"name":"plugin interface","type":"categoryDef","startIndex":17292,"stopIndex":17888,"fileName":"lively/persistence/Serializer.js","_subElements":[{"__isSmartRef__":true,"id":790},{"__isSmartRef__":true,"id":792},{"__isSmartRef__":true,"id":793}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"792":{"name":"afterDeserializeObj","type":"propertyDef","startIndex":17556,"stopIndex":17735,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":791},"className":"LayerPlugin","_owner":{"__isSmartRef__":true,"id":786},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"793":{"name":"ignoreProp","type":"propertyDef","startIndex":17737,"stopIndex":17885,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":791},"className":"LayerPlugin","_owner":{"__isSmartRef__":true,"id":786},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"794":{"name":"serializeLayerArray","type":"propertyDef","startIndex":17901,"stopIndex":18197,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":795},"className":"LayerPlugin","_owner":{"__isSmartRef__":true,"id":786},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"795":{"name":"helper","type":"categoryDef","startIndex":17890,"stopIndex":18558,"fileName":"lively/persistence/Serializer.js","_subElements":[{"__isSmartRef__":true,"id":794},{"__isSmartRef__":true,"id":796}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"796":{"name":"deserializeLayerArray","type":"propertyDef","startIndex":18199,"stopIndex":18556,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":795},"className":"LayerPlugin","_owner":{"__isSmartRef__":true,"id":786},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"797":{"name":null,"type":"comment","startIndex":18562,"stopIndex":18562,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"798":{"name":"StoreAndRestorePlugin","type":"klassDef","startIndex":18563,"stopIndex":19508,"fileName":"lively/persistence/Serializer.js","_subElements":[{"__isSmartRef__":true,"id":799},{"__isSmartRef__":true,"id":801},{"__isSmartRef__":true,"id":803},{"__isSmartRef__":true,"id":804}],"sourceControl":{"__isSmartRef__":true,"id":649},"superclassName":"ObjectLinearizerPlugin","categories":[{"__isSmartRef__":true,"id":800},{"__isSmartRef__":true,"id":802}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"799":{"name":"initialize","type":"propertyDef","startIndex":18638,"stopIndex":18730,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":800},"className":"StoreAndRestorePlugin","_owner":{"__isSmartRef__":true,"id":798},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"800":{"name":"initializing","type":"categoryDef","startIndex":18620,"stopIndex":18733,"fileName":"lively/persistence/Serializer.js","_subElements":[{"__isSmartRef__":true,"id":799}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"801":{"name":"serializeObj","type":"propertyDef","startIndex":18757,"stopIndex":18915,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":802},"className":"StoreAndRestorePlugin","_owner":{"__isSmartRef__":true,"id":798},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"802":{"name":"plugin interface","type":"categoryDef","startIndex":18735,"stopIndex":19505,"fileName":"lively/persistence/Serializer.js","_subElements":[{"__isSmartRef__":true,"id":801},{"__isSmartRef__":true,"id":803},{"__isSmartRef__":true,"id":804}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"803":{"name":"afterDeserializeObj","type":"propertyDef","startIndex":18917,"stopIndex":19055,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":802},"className":"StoreAndRestorePlugin","_owner":{"__isSmartRef__":true,"id":798},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"804":{"name":"deserializationDone","type":"propertyDef","startIndex":19057,"stopIndex":19503,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":802},"className":"StoreAndRestorePlugin","_owner":{"__isSmartRef__":true,"id":798},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"805":{"name":"DoNotSerializePlugin","type":"klassDef","startIndex":19509,"stopIndex":19931,"fileName":"lively/persistence/Serializer.js","_subElements":[{"__isSmartRef__":true,"id":806},{"__isSmartRef__":true,"id":808}],"sourceControl":{"__isSmartRef__":true,"id":649},"superclassName":"ObjectLinearizerPlugin","categories":[{"__isSmartRef__":true,"id":807},{"__isSmartRef__":true,"id":809}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"806":{"name":"doNotSerialize","type":"propertyDef","startIndex":19578,"stopIndex":19794,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":807},"className":"DoNotSerializePlugin","_owner":{"__isSmartRef__":true,"id":805},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"807":{"name":"testing","type":"categoryDef","startIndex":19565,"stopIndex":19797,"fileName":"lively/persistence/Serializer.js","_subElements":[{"__isSmartRef__":true,"id":806}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"808":{"name":"ignoreProp","type":"propertyDef","startIndex":19821,"stopIndex":19926,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":809},"className":"DoNotSerializePlugin","_owner":{"__isSmartRef__":true,"id":805},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"809":{"name":"plugin interface","type":"categoryDef","startIndex":19799,"stopIndex":19928,"fileName":"lively/persistence/Serializer.js","_subElements":[{"__isSmartRef__":true,"id":808}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"810":{"name":null,"type":"comment","startIndex":19932,"stopIndex":19932,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"811":{"name":"DoWeakSerializePlugin","type":"klassDef","startIndex":19933,"stopIndex":22013,"fileName":"lively/persistence/Serializer.js","_subElements":[{"__isSmartRef__":true,"id":812},{"__isSmartRef__":true,"id":814},{"__isSmartRef__":true,"id":816},{"__isSmartRef__":true,"id":818},{"__isSmartRef__":true,"id":819}],"sourceControl":{"__isSmartRef__":true,"id":649},"superclassName":"ObjectLinearizerPlugin","categories":[{"__isSmartRef__":true,"id":813},{"__isSmartRef__":true,"id":815},{"__isSmartRef__":true,"id":817}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"812":{"name":"initialize","type":"propertyDef","startIndex":20010,"stopIndex":20126,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":813},"className":"DoWeakSerializePlugin","_owner":{"__isSmartRef__":true,"id":811},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"813":{"name":"initialization","type":"categoryDef","startIndex":19990,"stopIndex":20129,"fileName":"lively/persistence/Serializer.js","_subElements":[{"__isSmartRef__":true,"id":812}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"814":{"name":"doWeakSerialize","type":"propertyDef","startIndex":20144,"stopIndex":20363,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":815},"className":"DoWeakSerializePlugin","_owner":{"__isSmartRef__":true,"id":811},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"815":{"name":"testing","type":"categoryDef","startIndex":20131,"stopIndex":20366,"fileName":"lively/persistence/Serializer.js","_subElements":[{"__isSmartRef__":true,"id":814}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"816":{"name":"ignoreProp","type":"propertyDef","startIndex":20390,"stopIndex":20697,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":817},"className":"DoWeakSerializePlugin","_owner":{"__isSmartRef__":true,"id":811},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"817":{"name":"plugin interface","type":"categoryDef","startIndex":20368,"stopIndex":22010,"fileName":"lively/persistence/Serializer.js","_subElements":[{"__isSmartRef__":true,"id":816},{"__isSmartRef__":true,"id":818},{"__isSmartRef__":true,"id":819}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"818":{"name":"serializationDone","type":"propertyDef","startIndex":20699,"stopIndex":21183,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":817},"className":"DoWeakSerializePlugin","_owner":{"__isSmartRef__":true,"id":811},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"819":{"name":"additionallySerialize","type":"propertyDef","startIndex":21185,"stopIndex":22007,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":817},"className":"DoWeakSerializePlugin","_owner":{"__isSmartRef__":true,"id":811},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"820":{"name":null,"type":"comment","startIndex":22014,"stopIndex":22014,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"821":{"name":"LivelyWrapperPlugin","type":"klassDef","startIndex":22015,"stopIndex":23795,"fileName":"lively/persistence/Serializer.js","_subElements":[{"__isSmartRef__":true,"id":822},{"__isSmartRef__":true,"id":824},{"__isSmartRef__":true,"id":826},{"__isSmartRef__":true,"id":828},{"__isSmartRef__":true,"id":829},{"__isSmartRef__":true,"id":830},{"__isSmartRef__":true,"id":832}],"sourceControl":{"__isSmartRef__":true,"id":649},"superclassName":"ObjectLinearizerPlugin","categories":[{"__isSmartRef__":true,"id":823},{"__isSmartRef__":true,"id":825},{"__isSmartRef__":true,"id":827},{"__isSmartRef__":true,"id":831}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"822":{"name":"rawNodeInfoProperty","type":"propertyDef","startIndex":22121,"stopIndex":22163,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":823},"className":"LivelyWrapperPlugin","_owner":{"__isSmartRef__":true,"id":821},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"823":{"name":"names","type":"categoryDef","startIndex":22110,"stopIndex":22166,"fileName":"lively/persistence/Serializer.js","_subElements":[{"__isSmartRef__":true,"id":822}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"824":{"name":"hasRawNode","type":"propertyDef","startIndex":22181,"stopIndex":22337,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":825},"className":"LivelyWrapperPlugin","_owner":{"__isSmartRef__":true,"id":821},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"825":{"name":"testing","type":"categoryDef","startIndex":22168,"stopIndex":22340,"fileName":"lively/persistence/Serializer.js","_subElements":[{"__isSmartRef__":true,"id":824}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"826":{"name":"additionallySerialize","type":"propertyDef","startIndex":22364,"stopIndex":22531,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":827},"className":"LivelyWrapperPlugin","_owner":{"__isSmartRef__":true,"id":821},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"827":{"name":"plugin interface","type":"categoryDef","startIndex":22342,"stopIndex":22842,"fileName":"lively/persistence/Serializer.js","_subElements":[{"__isSmartRef__":true,"id":826},{"__isSmartRef__":true,"id":828},{"__isSmartRef__":true,"id":829}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"828":{"name":"ignoreProp","type":"propertyDef","startIndex":22533,"stopIndex":22757,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":827},"className":"LivelyWrapperPlugin","_owner":{"__isSmartRef__":true,"id":821},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"829":{"name":"afterDeserializeObj","type":"propertyDef","startIndex":22759,"stopIndex":22839,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":827},"className":"LivelyWrapperPlugin","_owner":{"__isSmartRef__":true,"id":821},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"830":{"name":"captureRawNode","type":"propertyDef","startIndex":22866,"stopIndex":23326,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":831},"className":"LivelyWrapperPlugin","_owner":{"__isSmartRef__":true,"id":821},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"831":{"name":"rawNode handling","type":"categoryDef","startIndex":22844,"stopIndex":23792,"fileName":"lively/persistence/Serializer.js","_subElements":[{"__isSmartRef__":true,"id":830},{"__isSmartRef__":true,"id":832}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"832":{"name":"restoreRawNode","type":"propertyDef","startIndex":23329,"stopIndex":23790,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":831},"className":"LivelyWrapperPlugin","_owner":{"__isSmartRef__":true,"id":821},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"833":{"name":null,"type":"comment","startIndex":23796,"stopIndex":23796,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"834":{"name":"IgnoreDOMElementsPlugin","type":"klassDef","startIndex":23797,"stopIndex":24477,"fileName":"lively/persistence/Serializer.js","_subElements":[{"__isSmartRef__":true,"id":835}],"sourceControl":{"__isSmartRef__":true,"id":649},"superclassName":"ObjectLinearizerPlugin","categories":[{"__isSmartRef__":true,"id":836}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"835":{"name":"ignoreProp","type":"propertyDef","startIndex":23918,"stopIndex":24472,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":836},"className":"IgnoreDOMElementsPlugin","_owner":{"__isSmartRef__":true,"id":834},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"836":{"name":"plugin interface","type":"categoryDef","startIndex":23896,"stopIndex":24474,"fileName":"lively/persistence/Serializer.js","_subElements":[{"__isSmartRef__":true,"id":835}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"837":{"name":null,"type":"comment","startIndex":24478,"stopIndex":24478,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"838":{"name":"RegExpPlugin","type":"klassDef","startIndex":24479,"stopIndex":25297,"fileName":"lively/persistence/Serializer.js","_subElements":[{"__isSmartRef__":true,"id":839},{"__isSmartRef__":true,"id":841},{"__isSmartRef__":true,"id":843},{"__isSmartRef__":true,"id":844}],"sourceControl":{"__isSmartRef__":true,"id":649},"superclassName":"ObjectLinearizerPlugin","categories":[{"__isSmartRef__":true,"id":840},{"__isSmartRef__":true,"id":842}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"839":{"name":"serializedRegExpProperty","type":"propertyDef","startIndex":24542,"stopIndex":24584,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":840},"className":"RegExpPlugin","_owner":{"__isSmartRef__":true,"id":838},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"840":{"name":"accessing","type":"categoryDef","startIndex":24527,"stopIndex":24587,"fileName":"lively/persistence/Serializer.js","_subElements":[{"__isSmartRef__":true,"id":839}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"841":{"name":"serializeObj","type":"propertyDef","startIndex":24611,"stopIndex":24746,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":842},"className":"RegExpPlugin","_owner":{"__isSmartRef__":true,"id":838},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"842":{"name":"plugin interface","type":"categoryDef","startIndex":24589,"stopIndex":25294,"fileName":"lively/persistence/Serializer.js","_subElements":[{"__isSmartRef__":true,"id":841},{"__isSmartRef__":true,"id":843},{"__isSmartRef__":true,"id":844}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"843":{"name":"serializeRegExp","type":"propertyDef","startIndex":24748,"stopIndex":24920,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":842},"className":"RegExpPlugin","_owner":{"__isSmartRef__":true,"id":838},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"844":{"name":"deserializeObj","type":"propertyDef","startIndex":24923,"stopIndex":25292,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":842},"className":"RegExpPlugin","_owner":{"__isSmartRef__":true,"id":838},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"845":{"name":null,"type":"comment","startIndex":25298,"stopIndex":25298,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"846":{"name":"OldModelFilter","type":"klassDef","startIndex":25299,"stopIndex":28196,"fileName":"lively/persistence/Serializer.js","_subElements":[{"__isSmartRef__":true,"id":847},{"__isSmartRef__":true,"id":849},{"__isSmartRef__":true,"id":851},{"__isSmartRef__":true,"id":852},{"__isSmartRef__":true,"id":853},{"__isSmartRef__":true,"id":854}],"sourceControl":{"__isSmartRef__":true,"id":649},"superclassName":"ObjectLinearizerPlugin","categories":[{"__isSmartRef__":true,"id":848},{"__isSmartRef__":true,"id":850}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"847":{"name":"initialize","type":"propertyDef","startIndex":25367,"stopIndex":25451,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":848},"className":"OldModelFilter","_owner":{"__isSmartRef__":true,"id":846},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"848":{"name":"initializing","type":"categoryDef","startIndex":25349,"stopIndex":25454,"fileName":"lively/persistence/Serializer.js","_subElements":[{"__isSmartRef__":true,"id":847}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"849":{"name":"ignoreProp","type":"propertyDef","startIndex":25478,"stopIndex":25720,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":850},"className":"OldModelFilter","_owner":{"__isSmartRef__":true,"id":846},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"850":{"name":"plugin interface","type":"categoryDef","startIndex":25456,"stopIndex":28193,"fileName":"lively/persistence/Serializer.js","_subElements":[{"__isSmartRef__":true,"id":849},{"__isSmartRef__":true,"id":851},{"__isSmartRef__":true,"id":852},{"__isSmartRef__":true,"id":853},{"__isSmartRef__":true,"id":854}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"851":{"name":"additionallySerialize","type":"propertyDef","startIndex":25722,"stopIndex":26763,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":850},"className":"OldModelFilter","_owner":{"__isSmartRef__":true,"id":846},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"852":{"name":"afterDeserializeObj","type":"propertyDef","startIndex":26765,"stopIndex":26862,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":850},"className":"OldModelFilter","_owner":{"__isSmartRef__":true,"id":846},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"853":{"name":"deserializationDone","type":"propertyDef","startIndex":26864,"stopIndex":27025,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":850},"className":"OldModelFilter","_owner":{"__isSmartRef__":true,"id":846},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"854":{"name":"deserializeObj","type":"propertyDef","startIndex":27027,"stopIndex":28190,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":850},"className":"OldModelFilter","_owner":{"__isSmartRef__":true,"id":846},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"855":{"name":null,"type":"comment","startIndex":28197,"stopIndex":28198,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"856":{"name":"DEPRECATEDScriptFilter","type":"klassDef","startIndex":28199,"stopIndex":29331,"fileName":"lively/persistence/Serializer.js","_subElements":[{"__isSmartRef__":true,"id":857},{"__isSmartRef__":true,"id":859},{"__isSmartRef__":true,"id":860},{"__isSmartRef__":true,"id":862}],"sourceControl":{"__isSmartRef__":true,"id":649},"superclassName":"ObjectLinearizerPlugin","categories":[{"__isSmartRef__":true,"id":858},{"__isSmartRef__":true,"id":861}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"857":{"name":"serializedScriptsProperty","type":"propertyDef","startIndex":28272,"stopIndex":28326,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":858},"className":"DEPRECATEDScriptFilter","_owner":{"__isSmartRef__":true,"id":856},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"858":{"name":"accessing","type":"categoryDef","startIndex":28257,"stopIndex":28511,"fileName":"lively/persistence/Serializer.js","_subElements":[{"__isSmartRef__":true,"id":857},{"__isSmartRef__":true,"id":859}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"859":{"name":"getSerializedScriptsFrom","type":"propertyDef","startIndex":28328,"stopIndex":28508,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":858},"className":"DEPRECATEDScriptFilter","_owner":{"__isSmartRef__":true,"id":856},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"860":{"name":"additionallySerialize","type":"propertyDef","startIndex":28535,"stopIndex":28976,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":861},"className":"DEPRECATEDScriptFilter","_owner":{"__isSmartRef__":true,"id":856},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"861":{"name":"plugin interface","type":"categoryDef","startIndex":28513,"stopIndex":29328,"fileName":"lively/persistence/Serializer.js","_subElements":[{"__isSmartRef__":true,"id":860},{"__isSmartRef__":true,"id":862}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"862":{"name":"afterDeserializeObj","type":"propertyDef","startIndex":28978,"stopIndex":29326,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":861},"className":"DEPRECATEDScriptFilter","_owner":{"__isSmartRef__":true,"id":856},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"863":{"name":null,"type":"comment","startIndex":29332,"stopIndex":29332,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"864":{"name":"ClosurePlugin","type":"klassDef","startIndex":29333,"stopIndex":32015,"fileName":"lively/persistence/Serializer.js","_subElements":[{"__isSmartRef__":true,"id":865},{"__isSmartRef__":true,"id":867},{"__isSmartRef__":true,"id":869},{"__isSmartRef__":true,"id":870},{"__isSmartRef__":true,"id":872},{"__isSmartRef__":true,"id":873},{"__isSmartRef__":true,"id":874}],"sourceControl":{"__isSmartRef__":true,"id":649},"superclassName":"ObjectLinearizerPlugin","categories":[{"__isSmartRef__":true,"id":866},{"__isSmartRef__":true,"id":868},{"__isSmartRef__":true,"id":871}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"865":{"name":"initialize","type":"propertyDef","startIndex":29400,"stopIndex":29507,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":866},"className":"ClosurePlugin","_owner":{"__isSmartRef__":true,"id":864},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"866":{"name":"initializing","type":"categoryDef","startIndex":29382,"stopIndex":29510,"fileName":"lively/persistence/Serializer.js","_subElements":[{"__isSmartRef__":true,"id":865}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"867":{"name":"serializedClosuresProperty","type":"propertyDef","startIndex":29527,"stopIndex":29589,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":868},"className":"ClosurePlugin","_owner":{"__isSmartRef__":true,"id":864},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"868":{"name":"accessing","type":"categoryDef","startIndex":29512,"stopIndex":29772,"fileName":"lively/persistence/Serializer.js","_subElements":[{"__isSmartRef__":true,"id":867},{"__isSmartRef__":true,"id":869}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"869":{"name":"getSerializedClosuresFrom","type":"propertyDef","startIndex":29591,"stopIndex":29769,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":868},"className":"ClosurePlugin","_owner":{"__isSmartRef__":true,"id":864},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"870":{"name":"serializeObj","type":"propertyDef","startIndex":29796,"stopIndex":30085,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":871},"className":"ClosurePlugin","_owner":{"__isSmartRef__":true,"id":864},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"871":{"name":"plugin interface","type":"categoryDef","startIndex":29774,"stopIndex":32012,"fileName":"lively/persistence/Serializer.js","_subElements":[{"__isSmartRef__":true,"id":870},{"__isSmartRef__":true,"id":872},{"__isSmartRef__":true,"id":873},{"__isSmartRef__":true,"id":874}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"872":{"name":"additionallySerialize","type":"propertyDef","startIndex":30087,"stopIndex":30718,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":871},"className":"ClosurePlugin","_owner":{"__isSmartRef__":true,"id":864},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"873":{"name":"afterDeserializeObj","type":"propertyDef","startIndex":30720,"stopIndex":31820,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":871},"className":"ClosurePlugin","_owner":{"__isSmartRef__":true,"id":864},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"874":{"name":"deserializationDone","type":"propertyDef","startIndex":31822,"stopIndex":32010,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":871},"className":"ClosurePlugin","_owner":{"__isSmartRef__":true,"id":864},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"875":{"name":null,"type":"comment","startIndex":32016,"stopIndex":32016,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"876":{"name":"IgnoreFunctionsPlugin","type":"klassDef","startIndex":32017,"stopIndex":32257,"fileName":"lively/persistence/Serializer.js","_subElements":[{"__isSmartRef__":true,"id":877}],"sourceControl":{"__isSmartRef__":true,"id":649},"superclassName":"ObjectLinearizerPlugin","categories":[{"__isSmartRef__":true,"id":878}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"877":{"name":"ignoreProp","type":"propertyDef","startIndex":32089,"stopIndex":32252,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":878},"className":"IgnoreFunctionsPlugin","_owner":{"__isSmartRef__":true,"id":876},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"878":{"name":"interface","type":"categoryDef","startIndex":32074,"stopIndex":32254,"fileName":"lively/persistence/Serializer.js","_subElements":[{"__isSmartRef__":true,"id":877}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"879":{"name":null,"type":"comment","startIndex":32258,"stopIndex":32258,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"880":{"name":"lively.persistence.DatePlugin","type":"klassDef","startIndex":32259,"stopIndex":32600,"fileName":"lively/persistence/Serializer.js","_subElements":[{"__isSmartRef__":true,"id":881},{"__isSmartRef__":true,"id":883}],"sourceControl":{"__isSmartRef__":true,"id":649},"superclassName":"ObjectLinearizerPlugin","categories":[{"__isSmartRef__":true,"id":882}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"881":{"name":"serializeObj","type":"propertyDef","startIndex":32339,"stopIndex":32475,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":882},"className":"lively.persistence.DatePlugin","_owner":{"__isSmartRef__":true,"id":880},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"882":{"name":"interface","type":"categoryDef","startIndex":32324,"stopIndex":32597,"fileName":"lively/persistence/Serializer.js","_subElements":[{"__isSmartRef__":true,"id":881},{"__isSmartRef__":true,"id":883}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"883":{"name":"deserializeObj","type":"propertyDef","startIndex":32477,"stopIndex":32595,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":882},"className":"lively.persistence.DatePlugin","_owner":{"__isSmartRef__":true,"id":880},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"884":{"name":null,"type":"comment","startIndex":32601,"stopIndex":32601,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"885":{"name":"GenericFilter","type":"klassDef","startIndex":32602,"stopIndex":33509,"fileName":"lively/persistence/Serializer.js","_subElements":[{"__isSmartRef__":true,"id":886},{"__isSmartRef__":true,"id":888},{"__isSmartRef__":true,"id":890},{"__isSmartRef__":true,"id":891},{"__isSmartRef__":true,"id":892}],"sourceControl":{"__isSmartRef__":true,"id":649},"superclassName":"ObjectLinearizerPlugin","categories":[{"__isSmartRef__":true,"id":887},{"__isSmartRef__":true,"id":889}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"886":{"name":"initialize","type":"propertyDef","startIndex":32744,"stopIndex":32908,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":887},"className":"GenericFilter","_owner":{"__isSmartRef__":true,"id":885},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"887":{"name":"initializing","type":"categoryDef","startIndex":32726,"stopIndex":32911,"fileName":"lively/persistence/Serializer.js","_subElements":[{"__isSmartRef__":true,"id":886}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"888":{"name":"addClassToIgnore","type":"propertyDef","startIndex":32935,"stopIndex":33026,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":889},"className":"GenericFilter","_owner":{"__isSmartRef__":true,"id":885},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"889":{"name":"plugin interface","type":"categoryDef","startIndex":32913,"stopIndex":33506,"fileName":"lively/persistence/Serializer.js","_subElements":[{"__isSmartRef__":true,"id":888},{"__isSmartRef__":true,"id":890},{"__isSmartRef__":true,"id":891},{"__isSmartRef__":true,"id":892}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"890":{"name":"addPropertyToIgnore","type":"propertyDef","startIndex":33028,"stopIndex":33118,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":889},"className":"GenericFilter","_owner":{"__isSmartRef__":true,"id":885},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"891":{"name":"addFilter","type":"propertyDef","startIndex":33121,"stopIndex":33219,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":889},"className":"GenericFilter","_owner":{"__isSmartRef__":true,"id":885},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"892":{"name":"ignoreProp","type":"propertyDef","startIndex":33221,"stopIndex":33504,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":889},"className":"GenericFilter","_owner":{"__isSmartRef__":true,"id":885},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"893":{"name":null,"type":"comment","startIndex":33510,"stopIndex":33510,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"894":{"name":"ConversionPlugin","type":"klassDef","startIndex":33511,"stopIndex":38383,"fileName":"lively/persistence/Serializer.js","_subElements":[{"__isSmartRef__":true,"id":895},{"__isSmartRef__":true,"id":897},{"__isSmartRef__":true,"id":899},{"__isSmartRef__":true,"id":900},{"__isSmartRef__":true,"id":902},{"__isSmartRef__":true,"id":904},{"__isSmartRef__":true,"id":905},{"__isSmartRef__":true,"id":907},{"__isSmartRef__":true,"id":908}],"sourceControl":{"__isSmartRef__":true,"id":649},"superclassName":"ObjectLinearizerPlugin","categories":[{"__isSmartRef__":true,"id":896},{"__isSmartRef__":true,"id":898},{"__isSmartRef__":true,"id":901},{"__isSmartRef__":true,"id":903},{"__isSmartRef__":true,"id":906},{"__isSmartRef__":true,"id":909}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"895":{"name":"initialize","type":"propertyDef","startIndex":33581,"stopIndex":33826,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":896},"className":"ConversionPlugin","_owner":{"__isSmartRef__":true,"id":894},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"896":{"name":"initializing","type":"categoryDef","startIndex":33563,"stopIndex":33829,"fileName":"lively/persistence/Serializer.js","_subElements":[{"__isSmartRef__":true,"id":895}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"897":{"name":"addObjectLayoutOf","type":"propertyDef","startIndex":33860,"stopIndex":34168,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":898},"className":"ConversionPlugin","_owner":{"__isSmartRef__":true,"id":894},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"898":{"name":"object layout recording","type":"categoryDef","startIndex":33831,"stopIndex":34429,"fileName":"lively/persistence/Serializer.js","_subElements":[{"__isSmartRef__":true,"id":897},{"__isSmartRef__":true,"id":899}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"899":{"name":"printObjectLayouts","type":"propertyDef","startIndex":34170,"stopIndex":34426,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":898},"className":"ConversionPlugin","_owner":{"__isSmartRef__":true,"id":894},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"900":{"name":"getClassName","type":"propertyDef","startIndex":34446,"stopIndex":34545,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":901},"className":"ConversionPlugin","_owner":{"__isSmartRef__":true,"id":894},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"901":{"name":"accessing","type":"categoryDef","startIndex":34431,"stopIndex":34548,"fileName":"lively/persistence/Serializer.js","_subElements":[{"__isSmartRef__":true,"id":900}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"902":{"name":"afterDeserializeObj","type":"propertyDef","startIndex":34572,"stopIndex":34684,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":903},"className":"ConversionPlugin","_owner":{"__isSmartRef__":true,"id":894},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"903":{"name":"plugin interface","type":"categoryDef","startIndex":34550,"stopIndex":34858,"fileName":"lively/persistence/Serializer.js","_subElements":[{"__isSmartRef__":true,"id":902},{"__isSmartRef__":true,"id":904}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"904":{"name":"deserializeObj","type":"propertyDef","startIndex":34686,"stopIndex":34855,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":903},"className":"ConversionPlugin","_owner":{"__isSmartRef__":true,"id":894},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"905":{"name":"patchRegistry","type":"propertyDef","startIndex":34874,"stopIndex":34990,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":906},"className":"ConversionPlugin","_owner":{"__isSmartRef__":true,"id":894},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"906":{"name":"registry","type":"categoryDef","startIndex":34860,"stopIndex":35359,"fileName":"lively/persistence/Serializer.js","_subElements":[{"__isSmartRef__":true,"id":905},{"__isSmartRef__":true,"id":907}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"907":{"name":"registerWithPlugins","type":"propertyDef","startIndex":34992,"stopIndex":35355,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":906},"className":"ConversionPlugin","_owner":{"__isSmartRef__":true,"id":894},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"908":{"name":"convertHPICross","type":"propertyDef","startIndex":35375,"stopIndex":38378,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":909},"className":"ConversionPlugin","_owner":{"__isSmartRef__":true,"id":894},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"909":{"name":"EXAMPLES","type":"categoryDef","startIndex":35361,"stopIndex":38380,"fileName":"lively/persistence/Serializer.js","_subElements":[{"__isSmartRef__":true,"id":908}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"910":{"name":null,"type":"comment","startIndex":38384,"stopIndex":38384,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"911":{"name":"AttributeConnectionPlugin","type":"klassDef","startIndex":38385,"stopIndex":38676,"fileName":"lively/persistence/Serializer.js","_subElements":[{"__isSmartRef__":true,"id":912}],"sourceControl":{"__isSmartRef__":true,"id":649},"superclassName":"ObjectLinearizerPlugin","categories":[{"__isSmartRef__":true,"id":913}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"912":{"name":"deserializeObj","type":"propertyDef","startIndex":38468,"stopIndex":38671,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":913},"className":"AttributeConnectionPlugin","_owner":{"__isSmartRef__":true,"id":911},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"913":{"name":"plugin interface","type":"categoryDef","startIndex":38446,"stopIndex":38673,"fileName":"lively/persistence/Serializer.js","_subElements":[{"__isSmartRef__":true,"id":912}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"914":{"name":null,"type":"comment","startIndex":38677,"stopIndex":38677,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"915":{"name":"CopyOnlySubmorphsPlugin","type":"klassDef","startIndex":38678,"stopIndex":39878,"fileName":"lively/persistence/Serializer.js","_subElements":[{"__isSmartRef__":true,"id":916},{"__isSmartRef__":true,"id":918},{"__isSmartRef__":true,"id":920},{"__isSmartRef__":true,"id":922},{"__isSmartRef__":true,"id":923}],"sourceControl":{"__isSmartRef__":true,"id":649},"superclassName":"ObjectLinearizerPlugin","categories":[{"__isSmartRef__":true,"id":917},{"__isSmartRef__":true,"id":919},{"__isSmartRef__":true,"id":921}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"916":{"name":"initialize","type":"propertyDef","startIndex":38755,"stopIndex":38875,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":917},"className":"CopyOnlySubmorphsPlugin","_owner":{"__isSmartRef__":true,"id":915},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"917":{"name":"initializing","type":"categoryDef","startIndex":38737,"stopIndex":38878,"fileName":"lively/persistence/Serializer.js","_subElements":[{"__isSmartRef__":true,"id":916}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"918":{"name":"copyAsMorphRef","type":"propertyDef","startIndex":38893,"stopIndex":39068,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":919},"className":"CopyOnlySubmorphsPlugin","_owner":{"__isSmartRef__":true,"id":915},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"919":{"name":"copying","type":"categoryDef","startIndex":38880,"stopIndex":39071,"fileName":"lively/persistence/Serializer.js","_subElements":[{"__isSmartRef__":true,"id":918}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"920":{"name":"ignoreProp","type":"propertyDef","startIndex":39095,"stopIndex":39256,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":921},"className":"CopyOnlySubmorphsPlugin","_owner":{"__isSmartRef__":true,"id":915},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"921":{"name":"plugin interface","type":"categoryDef","startIndex":39073,"stopIndex":39875,"fileName":"lively/persistence/Serializer.js","_subElements":[{"__isSmartRef__":true,"id":920},{"__isSmartRef__":true,"id":922},{"__isSmartRef__":true,"id":923}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"922":{"name":"serializeObj","type":"propertyDef","startIndex":39258,"stopIndex":39712,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":921},"className":"CopyOnlySubmorphsPlugin","_owner":{"__isSmartRef__":true,"id":915},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"923":{"name":"deserializeObj","type":"propertyDef","startIndex":39714,"stopIndex":39873,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":921},"className":"CopyOnlySubmorphsPlugin","_owner":{"__isSmartRef__":true,"id":915},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"924":{"name":null,"type":"comment","startIndex":39879,"stopIndex":39879,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"925":{"name":"IgnoreEpiMorphsPlugin","type":"klassDef","startIndex":39880,"stopIndex":40042,"fileName":"lively/persistence/Serializer.js","_subElements":[{"__isSmartRef__":true,"id":926}],"sourceControl":{"__isSmartRef__":true,"id":649},"superclassName":"ObjectLinearizerPlugin","categories":[{"__isSmartRef__":true,"id":927}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"926":{"name":"ignoreProp","type":"propertyDef","startIndex":39959,"stopIndex":40037,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":927},"className":"IgnoreEpiMorphsPlugin","_owner":{"__isSmartRef__":true,"id":925},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"927":{"name":"plugin interface","type":"categoryDef","startIndex":39937,"stopIndex":40039,"fileName":"lively/persistence/Serializer.js","_subElements":[{"__isSmartRef__":true,"id":926}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"928":{"name":null,"type":"comment","startIndex":40043,"stopIndex":40115,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"929":{"name":"lively.persistence.GenericConstructorPlugin","type":"klassDef","startIndex":40116,"stopIndex":41568,"fileName":"lively/persistence/Serializer.js","_subElements":[{"__isSmartRef__":true,"id":930},{"__isSmartRef__":true,"id":932},{"__isSmartRef__":true,"id":933},{"__isSmartRef__":true,"id":934},{"__isSmartRef__":true,"id":936}],"sourceControl":{"__isSmartRef__":true,"id":649},"superclassName":"ObjectLinearizerPlugin","categories":[{"__isSmartRef__":true,"id":931},{"__isSmartRef__":true,"id":935}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"930":{"name":"constructorProperty","type":"propertyDef","startIndex":40210,"stopIndex":40256,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":931},"className":"lively.persistence.GenericConstructorPlugin","_owner":{"__isSmartRef__":true,"id":929},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"931":{"name":"accessing","type":"categoryDef","startIndex":40195,"stopIndex":40497,"fileName":"lively/persistence/Serializer.js","_subElements":[{"__isSmartRef__":true,"id":930},{"__isSmartRef__":true,"id":932},{"__isSmartRef__":true,"id":933}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"932":{"name":"getConstructorName","type":"propertyDef","startIndex":40259,"stopIndex":40367,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":931},"className":"lively.persistence.GenericConstructorPlugin","_owner":{"__isSmartRef__":true,"id":929},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"933":{"name":"isLivelyClassInstance","type":"propertyDef","startIndex":40370,"stopIndex":40495,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":931},"className":"lively.persistence.GenericConstructorPlugin","_owner":{"__isSmartRef__":true,"id":929},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"934":{"name":"additionallySerialize","type":"propertyDef","startIndex":40522,"stopIndex":40845,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":935},"className":"lively.persistence.GenericConstructorPlugin","_owner":{"__isSmartRef__":true,"id":929},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"935":{"name":"plugin interface","type":"categoryDef","startIndex":40499,"stopIndex":41565,"fileName":"lively/persistence/Serializer.js","_subElements":[{"__isSmartRef__":true,"id":934},{"__isSmartRef__":true,"id":936}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"936":{"name":"deserializeObj","type":"propertyDef","startIndex":40848,"stopIndex":41564,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":935},"className":"lively.persistence.GenericConstructorPlugin","_owner":{"__isSmartRef__":true,"id":929},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"937":{"name":null,"type":"comment","startIndex":41569,"stopIndex":41569,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"938":{"name":"lively.persistence.Serializer","type":"klassExtensionDef","startIndex":41570,"stopIndex":48456,"fileName":"lively/persistence/Serializer.js","_subElements":[{"__isSmartRef__":true,"id":939},{"__isSmartRef__":true,"id":941},{"__isSmartRef__":true,"id":942},{"__isSmartRef__":true,"id":943},{"__isSmartRef__":true,"id":944},{"__isSmartRef__":true,"id":945},{"__isSmartRef__":true,"id":946},{"__isSmartRef__":true,"id":947},{"__isSmartRef__":true,"id":948},{"__isSmartRef__":true,"id":949},{"__isSmartRef__":true,"id":950},{"__isSmartRef__":true,"id":951},{"__isSmartRef__":true,"id":952},{"__isSmartRef__":true,"id":953},{"__isSmartRef__":true,"id":954},{"__isSmartRef__":true,"id":955}],"sourceControl":{"__isSmartRef__":true,"id":649},"categories":[{"__isSmartRef__":true,"id":940}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"939":{"name":"jsonWorldId","type":"propertyDef","startIndex":41618,"stopIndex":41652,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":true,"category":{"__isSmartRef__":true,"id":940},"className":"lively.persistence.Serializer","_owner":{"__isSmartRef__":true,"id":938},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"940":{"name":"default category","type":"categoryDef","startIndex":41615,"stopIndex":48453,"fileName":"lively/persistence/Serializer.js","_subElements":[{"__isSmartRef__":true,"id":939},{"__isSmartRef__":true,"id":941},{"__isSmartRef__":true,"id":942},{"__isSmartRef__":true,"id":943},{"__isSmartRef__":true,"id":944},{"__isSmartRef__":true,"id":945},{"__isSmartRef__":true,"id":946},{"__isSmartRef__":true,"id":947},{"__isSmartRef__":true,"id":948},{"__isSmartRef__":true,"id":949},{"__isSmartRef__":true,"id":950},{"__isSmartRef__":true,"id":951},{"__isSmartRef__":true,"id":952},{"__isSmartRef__":true,"id":953},{"__isSmartRef__":true,"id":954},{"__isSmartRef__":true,"id":955}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"941":{"name":"changeSetElementId","type":"propertyDef","startIndex":41654,"stopIndex":41694,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":true,"category":{"__isSmartRef__":true,"id":940},"className":"lively.persistence.Serializer","_owner":{"__isSmartRef__":true,"id":938},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"942":{"name":"createObjectGraphLinearizer","type":"propertyDef","startIndex":41697,"stopIndex":41858,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":true,"category":{"__isSmartRef__":true,"id":940},"className":"lively.persistence.Serializer","_owner":{"__isSmartRef__":true,"id":938},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"943":{"name":"createObjectGraphLinearizerForCopy","type":"propertyDef","startIndex":41861,"stopIndex":42037,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":true,"category":{"__isSmartRef__":true,"id":940},"className":"lively.persistence.Serializer","_owner":{"__isSmartRef__":true,"id":938},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"944":{"name":"serialize","type":"propertyDef","startIndex":42040,"stopIndex":42343,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":true,"category":{"__isSmartRef__":true,"id":940},"className":"lively.persistence.Serializer","_owner":{"__isSmartRef__":true,"id":938},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"945":{"name":"serializeWorld","type":"propertyDef","startIndex":42346,"stopIndex":42508,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":true,"category":{"__isSmartRef__":true,"id":940},"className":"lively.persistence.Serializer","_owner":{"__isSmartRef__":true,"id":938},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"946":{"name":"serializeWorldToDocument","type":"propertyDef","startIndex":42511,"stopIndex":42677,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":true,"category":{"__isSmartRef__":true,"id":940},"className":"lively.persistence.Serializer","_owner":{"__isSmartRef__":true,"id":938},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"947":{"name":"serializeWorldToDocumentWithSerializer","type":"propertyDef","startIndex":42680,"stopIndex":46414,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":true,"category":{"__isSmartRef__":true,"id":940},"className":"lively.persistence.Serializer","_owner":{"__isSmartRef__":true,"id":938},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"948":{"name":"deserialize","type":"propertyDef","startIndex":46416,"stopIndex":46624,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":true,"category":{"__isSmartRef__":true,"id":940},"className":"lively.persistence.Serializer","_owner":{"__isSmartRef__":true,"id":938},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"949":{"name":"deserializeWorldFromDocument","type":"propertyDef","startIndex":46627,"stopIndex":47043,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":true,"category":{"__isSmartRef__":true,"id":940},"className":"lively.persistence.Serializer","_owner":{"__isSmartRef__":true,"id":938},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"950":{"name":"deserializeWorldFromJso","type":"propertyDef","startIndex":47046,"stopIndex":47231,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":true,"category":{"__isSmartRef__":true,"id":940},"className":"lively.persistence.Serializer","_owner":{"__isSmartRef__":true,"id":938},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"951":{"name":"deserializeChangeSetFromDocument","type":"propertyDef","startIndex":47234,"stopIndex":47530,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":true,"category":{"__isSmartRef__":true,"id":940},"className":"lively.persistence.Serializer","_owner":{"__isSmartRef__":true,"id":938},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"952":{"name":"sourceModulesIn","type":"propertyDef","startIndex":47533,"stopIndex":47639,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":true,"category":{"__isSmartRef__":true,"id":940},"className":"lively.persistence.Serializer","_owner":{"__isSmartRef__":true,"id":938},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"953":{"name":"parseJSON","type":"propertyDef","startIndex":47642,"stopIndex":47733,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":true,"category":{"__isSmartRef__":true,"id":940},"className":"lively.persistence.Serializer","_owner":{"__isSmartRef__":true,"id":938},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"954":{"name":"copyWithoutWorld","type":"propertyDef","startIndex":47736,"stopIndex":48137,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":true,"category":{"__isSmartRef__":true,"id":940},"className":"lively.persistence.Serializer","_owner":{"__isSmartRef__":true,"id":938},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"955":{"name":"newMorphicCopy","type":"propertyDef","startIndex":48140,"stopIndex":48451,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":true,"category":{"__isSmartRef__":true,"id":940},"className":"lively.persistence.Serializer","_owner":{"__isSmartRef__":true,"id":938},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"956":{"name":null,"type":"comment","startIndex":48457,"stopIndex":48457,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"957":{"name":"lively.persistence","type":"klassExtensionDef","startIndex":48458,"stopIndex":48986,"fileName":"lively/persistence/Serializer.js","_subElements":[{"__isSmartRef__":true,"id":958},{"__isSmartRef__":true,"id":960}],"sourceControl":{"__isSmartRef__":true,"id":649},"categories":[{"__isSmartRef__":true,"id":959}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"958":{"name":"getPluginsForLively","type":"propertyDef","startIndex":48494,"stopIndex":48643,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":true,"category":{"__isSmartRef__":true,"id":959},"className":"lively.persistence","_owner":{"__isSmartRef__":true,"id":957},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"959":{"name":"default category","type":"categoryDef","startIndex":48492,"stopIndex":48983,"fileName":"lively/persistence/Serializer.js","_subElements":[{"__isSmartRef__":true,"id":958},{"__isSmartRef__":true,"id":960}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"960":{"name":"pluginsForLively","type":"propertyDef","startIndex":48646,"stopIndex":48982,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":true,"category":{"__isSmartRef__":true,"id":959},"className":"lively.persistence","_owner":{"__isSmartRef__":true,"id":957},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"961":{"name":null,"type":"comment","startIndex":48987,"stopIndex":48987,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"962":{"name":"ObjectGraphLinearizer","type":"klassExtensionDef","startIndex":48988,"stopIndex":49537,"fileName":"lively/persistence/Serializer.js","_subElements":[{"__isSmartRef__":true,"id":963},{"__isSmartRef__":true,"id":965}],"sourceControl":{"__isSmartRef__":true,"id":649},"categories":[{"__isSmartRef__":true,"id":964}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"963":{"name":"forNewLively","type":"propertyDef","startIndex":49027,"stopIndex":49217,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":true,"category":{"__isSmartRef__":true,"id":964},"className":"ObjectGraphLinearizer","_owner":{"__isSmartRef__":true,"id":962},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"964":{"name":"default category","type":"categoryDef","startIndex":49025,"stopIndex":49534,"fileName":"lively/persistence/Serializer.js","_subElements":[{"__isSmartRef__":true,"id":963},{"__isSmartRef__":true,"id":965}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"965":{"name":"forNewLivelyCopy","type":"propertyDef","startIndex":49220,"stopIndex":49533,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":true,"category":{"__isSmartRef__":true,"id":964},"className":"ObjectGraphLinearizer","_owner":{"__isSmartRef__":true,"id":962},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"966":{"name":null,"type":"comment","startIndex":49538,"stopIndex":49561,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"967":{"name":"lively.persistence","type":"klassExtensionDef","startIndex":49562,"stopIndex":50346,"fileName":"lively/persistence/Serializer.js","_subElements":[{"__isSmartRef__":true,"id":968},{"__isSmartRef__":true,"id":970},{"__isSmartRef__":true,"id":971},{"__isSmartRef__":true,"id":972},{"__isSmartRef__":true,"id":973},{"__isSmartRef__":true,"id":974},{"__isSmartRef__":true,"id":975},{"__isSmartRef__":true,"id":976},{"__isSmartRef__":true,"id":977},{"__isSmartRef__":true,"id":978},{"__isSmartRef__":true,"id":979},{"__isSmartRef__":true,"id":980},{"__isSmartRef__":true,"id":981},{"__isSmartRef__":true,"id":982},{"__isSmartRef__":true,"id":983},{"__isSmartRef__":true,"id":984},{"__isSmartRef__":true,"id":985}],"sourceControl":{"__isSmartRef__":true,"id":649},"categories":[{"__isSmartRef__":true,"id":969}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"968":{"name":"ObjectGraphLinearizer","type":"propertyDef","startIndex":49598,"stopIndex":49646,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":true,"category":{"__isSmartRef__":true,"id":969},"className":"lively.persistence","_owner":{"__isSmartRef__":true,"id":967},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"969":{"name":"default category","type":"categoryDef","startIndex":49596,"stopIndex":50343,"fileName":"lively/persistence/Serializer.js","_subElements":[{"__isSmartRef__":true,"id":968},{"__isSmartRef__":true,"id":970},{"__isSmartRef__":true,"id":971},{"__isSmartRef__":true,"id":972},{"__isSmartRef__":true,"id":973},{"__isSmartRef__":true,"id":974},{"__isSmartRef__":true,"id":975},{"__isSmartRef__":true,"id":976},{"__isSmartRef__":true,"id":977},{"__isSmartRef__":true,"id":978},{"__isSmartRef__":true,"id":979},{"__isSmartRef__":true,"id":980},{"__isSmartRef__":true,"id":981},{"__isSmartRef__":true,"id":982},{"__isSmartRef__":true,"id":983},{"__isSmartRef__":true,"id":984},{"__isSmartRef__":true,"id":985}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"970":{"name":"ObjectLinearizerPlugin","type":"propertyDef","startIndex":49648,"stopIndex":49698,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":true,"category":{"__isSmartRef__":true,"id":969},"className":"lively.persistence","_owner":{"__isSmartRef__":true,"id":967},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"971":{"name":"ClassPlugin","type":"propertyDef","startIndex":49700,"stopIndex":49728,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":true,"category":{"__isSmartRef__":true,"id":969},"className":"lively.persistence","_owner":{"__isSmartRef__":true,"id":967},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"972":{"name":"LayerPlugin","type":"propertyDef","startIndex":49730,"stopIndex":49758,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":true,"category":{"__isSmartRef__":true,"id":969},"className":"lively.persistence","_owner":{"__isSmartRef__":true,"id":967},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"973":{"name":"StoreAndRestorePlugin","type":"propertyDef","startIndex":49760,"stopIndex":49808,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":true,"category":{"__isSmartRef__":true,"id":969},"className":"lively.persistence","_owner":{"__isSmartRef__":true,"id":967},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"974":{"name":"DoNotSerializePlugin","type":"propertyDef","startIndex":49810,"stopIndex":49856,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":true,"category":{"__isSmartRef__":true,"id":969},"className":"lively.persistence","_owner":{"__isSmartRef__":true,"id":967},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"975":{"name":"DoWeakSerializePlugin","type":"propertyDef","startIndex":49858,"stopIndex":49906,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":true,"category":{"__isSmartRef__":true,"id":969},"className":"lively.persistence","_owner":{"__isSmartRef__":true,"id":967},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"976":{"name":"LivelyWrapperPlugin","type":"propertyDef","startIndex":49908,"stopIndex":49952,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":true,"category":{"__isSmartRef__":true,"id":969},"className":"lively.persistence","_owner":{"__isSmartRef__":true,"id":967},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"977":{"name":"IgnoreDOMElementsPlugin","type":"propertyDef","startIndex":49954,"stopIndex":50006,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":true,"category":{"__isSmartRef__":true,"id":969},"className":"lively.persistence","_owner":{"__isSmartRef__":true,"id":967},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"978":{"name":"RegExpPlugin","type":"propertyDef","startIndex":50008,"stopIndex":50038,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":true,"category":{"__isSmartRef__":true,"id":969},"className":"lively.persistence","_owner":{"__isSmartRef__":true,"id":967},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"979":{"name":"OldModelFilter","type":"propertyDef","startIndex":50040,"stopIndex":50074,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":true,"category":{"__isSmartRef__":true,"id":969},"className":"lively.persistence","_owner":{"__isSmartRef__":true,"id":967},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"980":{"name":"DEPRECATEDScriptFilter","type":"propertyDef","startIndex":50076,"stopIndex":50126,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":true,"category":{"__isSmartRef__":true,"id":969},"className":"lively.persistence","_owner":{"__isSmartRef__":true,"id":967},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"981":{"name":"ClosurePlugin","type":"propertyDef","startIndex":50128,"stopIndex":50160,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":true,"category":{"__isSmartRef__":true,"id":969},"className":"lively.persistence","_owner":{"__isSmartRef__":true,"id":967},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"982":{"name":"IgnoreFunctionsPlugin","type":"propertyDef","startIndex":50162,"stopIndex":50210,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":true,"category":{"__isSmartRef__":true,"id":969},"className":"lively.persistence","_owner":{"__isSmartRef__":true,"id":967},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"983":{"name":"GenericFilter","type":"propertyDef","startIndex":50212,"stopIndex":50244,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":true,"category":{"__isSmartRef__":true,"id":969},"className":"lively.persistence","_owner":{"__isSmartRef__":true,"id":967},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"984":{"name":"ConversionPlugin","type":"propertyDef","startIndex":50246,"stopIndex":50284,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":true,"category":{"__isSmartRef__":true,"id":969},"className":"lively.persistence","_owner":{"__isSmartRef__":true,"id":967},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"985":{"name":"AttributeConnectionPlugin","type":"propertyDef","startIndex":50286,"stopIndex":50342,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":true,"category":{"__isSmartRef__":true,"id":969},"className":"lively.persistence","_owner":{"__isSmartRef__":true,"id":967},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"986":{"name":null,"type":"comment","startIndex":50347,"stopIndex":50347,"fileName":"lively/persistence/Serializer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"987":{"onDownPressed":{"__isSmartRef__":true,"id":988},"onUpPressed":{"__isSmartRef__":true,"id":995}},"988":{"varMapping":{"__isSmartRef__":true,"id":989},"source":"function onDownPressed(evt) {\n $super(evt);\n this.focus.bind(this).delay(0);\n return true;\n }","funcProperties":{"__isSmartRef__":true,"id":994},"__LivelyClassName__":"lively.Closure","__SourceModuleName__":"Global.lively.lang.Closure"},"989":{"this":{"__isSmartRef__":true,"id":637},"__serializedLivelyClosures__":{"__isSmartRef__":true,"id":990}},"990":{"$super":{"__isSmartRef__":true,"id":991}},"991":{"varMapping":{"__isSmartRef__":true,"id":992},"source":"function () {\n try {\n return obj.constructor.prototype[name].apply(obj, arguments)\n } catch (e) {\n alert('Error in $super call: ' + e + '\\n' + e.stack);\n return null;\n }\n }","funcProperties":{"__isSmartRef__":true,"id":993},"__LivelyClassName__":"lively.Closure","__SourceModuleName__":"Global.lively.lang.Closure"},"992":{"obj":{"__isSmartRef__":true,"id":637},"name":"onDownPressed"},"993":{},"994":{},"995":{"varMapping":{"__isSmartRef__":true,"id":996},"source":"function onUpPressed(evt) {\n $super(evt);\n this.focus.bind(this).delay(0);\n return true;\n }","funcProperties":{"__isSmartRef__":true,"id":1001},"__LivelyClassName__":"lively.Closure","__SourceModuleName__":"Global.lively.lang.Closure"},"996":{"this":{"__isSmartRef__":true,"id":637},"__serializedLivelyClosures__":{"__isSmartRef__":true,"id":997}},"997":{"$super":{"__isSmartRef__":true,"id":998}},"998":{"varMapping":{"__isSmartRef__":true,"id":999},"source":"function () {\n try {\n return obj.constructor.prototype[name].apply(obj, arguments)\n } catch (e) {\n alert('Error in $super call: ' + e + '\\n' + e.stack);\n return null;\n }\n }","funcProperties":{"__isSmartRef__":true,"id":1000},"__LivelyClassName__":"lively.Closure","__SourceModuleName__":"Global.lively.lang.Closure"},"999":{"obj":{"__isSmartRef__":true,"id":637},"name":"onUpPressed"},"1000":{},"1001":{},"1002":{"source":{"__isSmartRef__":true,"id":384},"target":{"__isSmartRef__":true,"id":637}},"1003":{"sourceObj":{"__isSmartRef__":true,"id":384},"sourceAttrName":"setPane2Content","targetObj":{"__isSmartRef__":true,"id":1004},"targetMethodName":"updateList","converter":null,"converterString":null,"updater":null,"updaterString":null,"varMapping":{"__isSmartRef__":true,"id":1089},"__LivelyClassName__":"AttributeConnection","__SourceModuleName__":"Global.lively.bindings"},"1004":{"submorphs":[],"scripts":[],"shape":{"__isSmartRef__":true,"id":1005},"derivationIds":[null],"id":"1A842310-7C48-485C-8390-7510F3E31BF8","renderContextTable":{"__isSmartRef__":true,"id":1011},"itemList":["-----"],"_FontFamily":"Helvetica","eventHandler":{"__isSmartRef__":true,"id":1012},"droppingEnabled":true,"halosEnabled":true,"_ClipMode":"auto","_FontSize":10,"_Position":{"__isSmartRef__":true,"id":1013},"selectedLineNo":0,"owner":{"__isSmartRef__":true,"id":370},"attributeConnections":[{"__isSmartRef__":true,"id":1014},{"__isSmartRef__":true,"id":1019},{"__isSmartRef__":true,"id":1021},{"__isSmartRef__":true,"id":1023}],"doNotSerialize":["$$selection"],"doNotCopyProperties":["$$selection"],"selection":{"__isSmartRef__":true,"id":1025},"prevScroll":[0,208],"__serializedLivelyClosures__":{"__isSmartRef__":true,"id":1074},"__LivelyClassName__":"lively.morphic.List","__SourceModuleName__":"Global.lively.morphic.Core"},"1005":{"_Position":{"__isSmartRef__":true,"id":1006},"renderContextTable":{"__isSmartRef__":true,"id":1007},"_Extent":{"__isSmartRef__":true,"id":1008},"_Padding":{"__isSmartRef__":true,"id":1009},"_BorderWidth":0,"_BorderColor":{"__isSmartRef__":true,"id":77},"_Fill":{"__isSmartRef__":true,"id":1010},"__LivelyClassName__":"lively.morphic.Shapes.Rectangle","__SourceModuleName__":"Global.lively.morphic.Shapes"},"1006":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global.lively.morphic.Graphics"},"1007":{"init":"initHTML","appendShape":"renderHTML","setPosition":"setPositionHTML","setExtent":"setExtentHTML","setPadding":"setPaddingHTML","setFill":"setFillHTML","setBorderColor":"setBorderColorHTML","setBorderWidth":"setBorderWidthHTML","setStrokeOpacity":"setStrokeOpacityHTML","setBorderRadius":"setBorderRadiusHTML","setBorderStyle":"setBorderStyleHTML","setOpacity":"setOpacityHTML","setClipMode":"setClipModeHTML"},"1008":{"x":205,"y":192.5,"__LivelyClassName__":"Point","__SourceModuleName__":"Global.lively.morphic.Graphics"},"1009":{"x":0,"y":0,"width":0,"height":0,"__LivelyClassName__":"Rectangle","__SourceModuleName__":"Global.lively.morphic.Graphics"},"1010":{"r":0.95,"g":0.95,"b":0.95,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global.lively.morphic.Graphics"},"1011":{"replaceRenderContext":"replaceRenderContextHTML","init":"initHTML","append":"appendHTML","remove":"removeHTML","triggerEvent":"triggerEventHTML","setTransform":"setTransformHTML","setPosition":"setPositionHTML","setRotation":"setRotationHTML","setExtent":"setExtentHTML","setScale":"setScaleHTML","setVisible":"setVisibleHTML","adjustOrigin":"adjustOriginHTML","setPivotPoint":"setPivotPointHTML","setClipMode":"setClipModeHTML","showsVerticalScrollBar":"showsVerticalScrollBarHTML","showsHorizontalScrollBar":"showsHorizontalScrollBarHTML","getScrollBarExtent":"getScrollBarExtentHTML","setHandStyle":"setHandStyleHTML","setPointerEvents":"setPointerEventsHTML","setToolTip":"setToolTipHTML","focus":"focusHTML","blur":"blurHTML","setFocusable":"setFocusableHTML","updateListContent":"updateListContentHTML","resizeList":"resizeListHTML","getItemIndexFromEvent":"getItemIndexFromEventHTML","getListExtent":"getListExtentHTML","setSize":"setSizeHTML","renderAsDropDownList":"renderAsDropDownListHTML","setFontSize":"setFontSizeHTML","setFontFamily":"setFontFamilyHTML","getSelectedIndexes":"getSelectedIndexesHTML","enableMultipleSelections":"enableMultipleSelectionsHTML","selectAllAt":"selectAllAtHTML","clearSelections":"clearSelectionsHTML","deselectAt":"deselectAtHTML"},"1012":{"morph":{"__isSmartRef__":true,"id":1004},"__LivelyClassName__":"lively.morphic.EventHandler","__SourceModuleName__":"Global.lively.morphic.Events"},"1013":{"x":205,"y":27.5,"__LivelyClassName__":"Point","__SourceModuleName__":"Global.lively.morphic.Graphics"},"1014":{"sourceObj":{"__isSmartRef__":true,"id":1004},"sourceAttrName":"selection","targetObj":{"__isSmartRef__":true,"id":384},"targetMethodName":"setPane2Selection","converter":null,"converterString":null,"updaterString":"function ($upd, v) { $upd(v, this.sourceObj) }","varMapping":{"__isSmartRef__":true,"id":1015},"__serializedLivelyClosures__":{"__isSmartRef__":true,"id":1016},"__LivelyClassName__":"AttributeConnection","__SourceModuleName__":"Global.lively.bindings"},"1015":{"source":{"__isSmartRef__":true,"id":1004},"target":{"__isSmartRef__":true,"id":384}},"1016":{"updater":{"__isSmartRef__":true,"id":1017}},"1017":{"originalFunc":null,"varMapping":{"__isSmartRef__":true,"id":1015},"source":"function ($upd, v) { $upd(v, this.sourceObj) }","funcProperties":{"__isSmartRef__":true,"id":1018},"__LivelyClassName__":"lively.Closure","__SourceModuleName__":"Global.lively.lang.Closure"},"1018":{},"1019":{"sourceObj":{"__isSmartRef__":true,"id":1004},"sourceAttrName":"getSelection","targetObj":{"__isSmartRef__":true,"id":384},"targetMethodName":"getPane2Selection","converter":null,"converterString":null,"updater":null,"updaterString":null,"varMapping":{"__isSmartRef__":true,"id":1020},"__LivelyClassName__":"AttributeConnection","__SourceModuleName__":"Global.lively.bindings"},"1020":{"source":{"__isSmartRef__":true,"id":1004},"target":{"__isSmartRef__":true,"id":384}},"1021":{"sourceObj":{"__isSmartRef__":true,"id":1004},"sourceAttrName":"getList","targetObj":{"__isSmartRef__":true,"id":384},"targetMethodName":"getPane2Content","converter":null,"converterString":null,"updater":null,"updaterString":null,"varMapping":{"__isSmartRef__":true,"id":1022},"__LivelyClassName__":"AttributeConnection","__SourceModuleName__":"Global.lively.bindings"},"1022":{"source":{"__isSmartRef__":true,"id":1004},"target":{"__isSmartRef__":true,"id":384}},"1023":{"sourceObj":{"__isSmartRef__":true,"id":1004},"sourceAttrName":"getMenu","targetObj":{"__isSmartRef__":true,"id":384},"targetMethodName":"getPane2Menu","converter":null,"converterString":null,"updater":null,"updaterString":null,"varMapping":{"__isSmartRef__":true,"id":1024},"__LivelyClassName__":"AttributeConnection","__SourceModuleName__":"Global.lively.bindings"},"1024":{"source":{"__isSmartRef__":true,"id":1004},"target":{"__isSmartRef__":true,"id":384}},"1025":{"target":{"__isSmartRef__":true,"id":1026},"browser":{"__isSmartRef__":true,"id":384},"__LivelyClassName__":"lively.ide.CategorizedClassFragmentNode","__SourceModuleName__":"Global.lively.ide.SystemBrowserNodes"},"1026":{"name":"TestCase","type":"klassDef","startIndex":1267,"stopIndex":13273,"fileName":"lively/TestFramework.js","_subElements":[{"__isSmartRef__":true,"id":1027},{"__isSmartRef__":true,"id":1029},{"__isSmartRef__":true,"id":1030},{"__isSmartRef__":true,"id":1031},{"__isSmartRef__":true,"id":1033},{"__isSmartRef__":true,"id":1034},{"__isSmartRef__":true,"id":1036},{"__isSmartRef__":true,"id":1037},{"__isSmartRef__":true,"id":1038},{"__isSmartRef__":true,"id":1039},{"__isSmartRef__":true,"id":1040},{"__isSmartRef__":true,"id":1041},{"__isSmartRef__":true,"id":1042},{"__isSmartRef__":true,"id":1044},{"__isSmartRef__":true,"id":1045},{"__isSmartRef__":true,"id":1046},{"__isSmartRef__":true,"id":1047},{"__isSmartRef__":true,"id":1048},{"__isSmartRef__":true,"id":1049},{"__isSmartRef__":true,"id":1051},{"__isSmartRef__":true,"id":1052},{"__isSmartRef__":true,"id":1053},{"__isSmartRef__":true,"id":1054},{"__isSmartRef__":true,"id":1055},{"__isSmartRef__":true,"id":1056},{"__isSmartRef__":true,"id":1058},{"__isSmartRef__":true,"id":1059},{"__isSmartRef__":true,"id":1060},{"__isSmartRef__":true,"id":1061},{"__isSmartRef__":true,"id":1062},{"__isSmartRef__":true,"id":1063},{"__isSmartRef__":true,"id":1065},{"__isSmartRef__":true,"id":1067},{"__isSmartRef__":true,"id":1069},{"__isSmartRef__":true,"id":1070},{"__isSmartRef__":true,"id":1071},{"__isSmartRef__":true,"id":1072}],"sourceControl":{"__isSmartRef__":true,"id":649},"superclassName":"Object","categories":[{"__isSmartRef__":true,"id":1028},{"__isSmartRef__":true,"id":1032},{"__isSmartRef__":true,"id":1035},{"__isSmartRef__":true,"id":1043},{"__isSmartRef__":true,"id":1050},{"__isSmartRef__":true,"id":1057},{"__isSmartRef__":true,"id":1064},{"__isSmartRef__":true,"id":1066},{"__isSmartRef__":true,"id":1068},{"__isSmartRef__":true,"id":1073}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1027":{"name":"isTestCase","type":"propertyDef","startIndex":1309,"stopIndex":1329,"fileName":"lively/TestFramework.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1028},"className":"TestCase","_owner":{"__isSmartRef__":true,"id":1026},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1028":{"name":"settings","type":"categoryDef","startIndex":1295,"stopIndex":1382,"fileName":"lively/TestFramework.js","_subElements":[{"__isSmartRef__":true,"id":1027},{"__isSmartRef__":true,"id":1029},{"__isSmartRef__":true,"id":1030}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1029":{"name":"shouldRun","type":"propertyDef","startIndex":1331,"stopIndex":1350,"fileName":"lively/TestFramework.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1028},"className":"TestCase","_owner":{"__isSmartRef__":true,"id":1026},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1030":{"name":"verbose","type":"propertyDef","startIndex":1352,"stopIndex":1379,"fileName":"lively/TestFramework.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1028},"className":"TestCase","_owner":{"__isSmartRef__":true,"id":1026},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1031":{"name":"initialize","type":"propertyDef","startIndex":1402,"stopIndex":1603,"fileName":"lively/TestFramework.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1032},"className":"TestCase","_owner":{"__isSmartRef__":true,"id":1026},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1032":{"name":"initializing","type":"categoryDef","startIndex":1384,"stopIndex":1783,"fileName":"lively/TestFramework.js","_subElements":[{"__isSmartRef__":true,"id":1031},{"__isSmartRef__":true,"id":1033}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1033":{"name":"createTests","type":"propertyDef","startIndex":1605,"stopIndex":1780,"fileName":"lively/TestFramework.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1032},"className":"TestCase","_owner":{"__isSmartRef__":true,"id":1026},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1034":{"name":"name","type":"propertyDef","startIndex":1800,"stopIndex":1853,"fileName":"lively/TestFramework.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1035},"className":"TestCase","_owner":{"__isSmartRef__":true,"id":1026},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1035":{"name":"accessing","type":"categoryDef","startIndex":1785,"stopIndex":3250,"fileName":"lively/TestFramework.js","_subElements":[{"__isSmartRef__":true,"id":1034},{"__isSmartRef__":true,"id":1036},{"__isSmartRef__":true,"id":1037},{"__isSmartRef__":true,"id":1038},{"__isSmartRef__":true,"id":1039},{"__isSmartRef__":true,"id":1040},{"__isSmartRef__":true,"id":1041}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1036":{"name":"testName","type":"propertyDef","startIndex":1855,"stopIndex":1932,"fileName":"lively/TestFramework.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1035},"className":"TestCase","_owner":{"__isSmartRef__":true,"id":1026},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1037":{"name":"id","type":"propertyDef","startIndex":1934,"stopIndex":2005,"fileName":"lively/TestFramework.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1035},"className":"TestCase","_owner":{"__isSmartRef__":true,"id":1026},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1038":{"name":"allTestSelectors","type":"propertyDef","startIndex":2007,"stopIndex":2146,"fileName":"lively/TestFramework.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1035},"className":"TestCase","_owner":{"__isSmartRef__":true,"id":1026},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1039":{"name":"getTestSelectorFilter","type":"propertyDef","startIndex":2149,"stopIndex":3021,"fileName":"lively/TestFramework.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1035},"className":"TestCase","_owner":{"__isSmartRef__":true,"id":1026},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1040":{"name":"setTestSelectorFilter","type":"propertyDef","startIndex":3024,"stopIndex":3138,"fileName":"lively/TestFramework.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1035},"className":"TestCase","_owner":{"__isSmartRef__":true,"id":1026},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1041":{"name":"toString","type":"propertyDef","startIndex":3141,"stopIndex":3248,"fileName":"lively/TestFramework.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1035},"className":"TestCase","_owner":{"__isSmartRef__":true,"id":1026},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1042":{"name":"runAll","type":"propertyDef","startIndex":3265,"stopIndex":3663,"fileName":"lively/TestFramework.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1043},"className":"TestCase","_owner":{"__isSmartRef__":true,"id":1026},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1043":{"name":"running","type":"categoryDef","startIndex":3252,"stopIndex":4694,"fileName":"lively/TestFramework.js","_subElements":[{"__isSmartRef__":true,"id":1042},{"__isSmartRef__":true,"id":1044},{"__isSmartRef__":true,"id":1045},{"__isSmartRef__":true,"id":1046},{"__isSmartRef__":true,"id":1047},{"__isSmartRef__":true,"id":1048}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1044":{"name":"runAllThenDo","type":"propertyDef","startIndex":3665,"stopIndex":3794,"fileName":"lively/TestFramework.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1043},"className":"TestCase","_owner":{"__isSmartRef__":true,"id":1026},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1045":{"name":"setUp","type":"propertyDef","startIndex":3796,"stopIndex":3820,"fileName":"lively/TestFramework.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1043},"className":"TestCase","_owner":{"__isSmartRef__":true,"id":1026},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1046":{"name":"tearDown","type":"propertyDef","startIndex":3822,"stopIndex":3849,"fileName":"lively/TestFramework.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1043},"className":"TestCase","_owner":{"__isSmartRef__":true,"id":1026},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1047":{"name":"runTest","type":"propertyDef","startIndex":3851,"stopIndex":4432,"fileName":"lively/TestFramework.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1043},"className":"TestCase","_owner":{"__isSmartRef__":true,"id":1026},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1048":{"name":"debugTest","type":"propertyDef","startIndex":4434,"stopIndex":4691,"fileName":"lively/TestFramework.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1043},"className":"TestCase","_owner":{"__isSmartRef__":true,"id":1026},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1049":{"name":"show","type":"propertyDef","startIndex":4719,"stopIndex":4766,"fileName":"lively/TestFramework.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1050},"className":"TestCase","_owner":{"__isSmartRef__":true,"id":1026},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1050":{"name":"running (private)","type":"categoryDef","startIndex":4696,"stopIndex":5819,"fileName":"lively/TestFramework.js","_subElements":[{"__isSmartRef__":true,"id":1049},{"__isSmartRef__":true,"id":1051},{"__isSmartRef__":true,"id":1052},{"__isSmartRef__":true,"id":1053},{"__isSmartRef__":true,"id":1054},{"__isSmartRef__":true,"id":1055}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1051":{"name":"running","type":"propertyDef","startIndex":4768,"stopIndex":4915,"fileName":"lively/TestFramework.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1050},"className":"TestCase","_owner":{"__isSmartRef__":true,"id":1026},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1052":{"name":"success","type":"propertyDef","startIndex":4917,"stopIndex":5077,"fileName":"lively/TestFramework.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1050},"className":"TestCase","_owner":{"__isSmartRef__":true,"id":1026},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1053":{"name":"failure","type":"propertyDef","startIndex":5079,"stopIndex":5518,"fileName":"lively/TestFramework.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1050},"className":"TestCase","_owner":{"__isSmartRef__":true,"id":1026},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1054":{"name":"addAndSignalSuccess","type":"propertyDef","startIndex":5520,"stopIndex":5664,"fileName":"lively/TestFramework.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1050},"className":"TestCase","_owner":{"__isSmartRef__":true,"id":1026},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1055":{"name":"addAndSignalFailure","type":"propertyDef","startIndex":5666,"stopIndex":5815,"fileName":"lively/TestFramework.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1050},"className":"TestCase","_owner":{"__isSmartRef__":true,"id":1026},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1056":{"name":"assert","type":"propertyDef","startIndex":5837,"stopIndex":6085,"fileName":"lively/TestFramework.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1057},"className":"TestCase","_owner":{"__isSmartRef__":true,"id":1026},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1057":{"name":"assertion","type":"categoryDef","startIndex":5822,"stopIndex":9943,"fileName":"lively/TestFramework.js","_subElements":[{"__isSmartRef__":true,"id":1056},{"__isSmartRef__":true,"id":1058},{"__isSmartRef__":true,"id":1059},{"__isSmartRef__":true,"id":1060},{"__isSmartRef__":true,"id":1061},{"__isSmartRef__":true,"id":1062}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1058":{"name":"assertEquals","type":"propertyDef","startIndex":6087,"stopIndex":6892,"fileName":"lively/TestFramework.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1057},"className":"TestCase","_owner":{"__isSmartRef__":true,"id":1026},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1059":{"name":"assertEqualsEpsilon","type":"propertyDef","startIndex":6894,"stopIndex":7706,"fileName":"lively/TestFramework.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1057},"className":"TestCase","_owner":{"__isSmartRef__":true,"id":1026},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1060":{"name":"assertIdentity","type":"propertyDef","startIndex":7708,"stopIndex":7913,"fileName":"lively/TestFramework.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1057},"className":"TestCase","_owner":{"__isSmartRef__":true,"id":1026},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1061":{"name":"assertEqualState","type":"propertyDef","startIndex":7915,"stopIndex":9042,"fileName":"lively/TestFramework.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1057},"className":"TestCase","_owner":{"__isSmartRef__":true,"id":1026},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1062":{"name":"assertMatches","type":"propertyDef","startIndex":9044,"stopIndex":9941,"fileName":"lively/TestFramework.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1057},"className":"TestCase","_owner":{"__isSmartRef__":true,"id":1026},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1063":{"name":"log","type":"propertyDef","startIndex":9959,"stopIndex":10055,"fileName":"lively/TestFramework.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1064},"className":"TestCase","_owner":{"__isSmartRef__":true,"id":1026},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1064":{"name":"logging","type":"categoryDef","startIndex":9946,"stopIndex":10058,"fileName":"lively/TestFramework.js","_subElements":[{"__isSmartRef__":true,"id":1063}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1065":{"name":"answerPromptsDuring","type":"propertyDef","startIndex":10084,"stopIndex":11100,"fileName":"lively/TestFramework.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1066},"className":"TestCase","_owner":{"__isSmartRef__":true,"id":1026},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1066":{"name":"world test support","type":"categoryDef","startIndex":10060,"stopIndex":11103,"fileName":"lively/TestFramework.js","_subElements":[{"__isSmartRef__":true,"id":1065}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1067":{"name":"createMouseEvent","type":"propertyDef","startIndex":11129,"stopIndex":11764,"fileName":"lively/TestFramework.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1068},"className":"TestCase","_owner":{"__isSmartRef__":true,"id":1026},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1068":{"name":"event test support","type":"categoryDef","startIndex":11105,"stopIndex":13096,"fileName":"lively/TestFramework.js","_subElements":[{"__isSmartRef__":true,"id":1067},{"__isSmartRef__":true,"id":1069},{"__isSmartRef__":true,"id":1070},{"__isSmartRef__":true,"id":1071}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1069":{"name":"doMouseEvent","type":"propertyDef","startIndex":11766,"stopIndex":12686,"fileName":"lively/TestFramework.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1068},"className":"TestCase","_owner":{"__isSmartRef__":true,"id":1026},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1070":{"name":"createKeyboardEvent","type":"propertyDef","startIndex":12688,"stopIndex":12919,"fileName":"lively/TestFramework.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1068},"className":"TestCase","_owner":{"__isSmartRef__":true,"id":1026},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1071":{"name":"doKeyboardEvent","type":"propertyDef","startIndex":12921,"stopIndex":13093,"fileName":"lively/TestFramework.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1068},"className":"TestCase","_owner":{"__isSmartRef__":true,"id":1026},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1072":{"name":"addScript","type":"propertyDef","startIndex":13113,"stopIndex":13269,"fileName":"lively/TestFramework.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":649},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1073},"className":"TestCase","_owner":{"__isSmartRef__":true,"id":1026},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1073":{"name":"scripting","type":"categoryDef","startIndex":13098,"stopIndex":13270,"fileName":"lively/TestFramework.js","_subElements":[{"__isSmartRef__":true,"id":1072}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1074":{"onDownPressed":{"__isSmartRef__":true,"id":1075},"onUpPressed":{"__isSmartRef__":true,"id":1082}},"1075":{"varMapping":{"__isSmartRef__":true,"id":1076},"source":"function onDownPressed(evt) {\n $super(evt);\n this.focus.bind(this).delay(0);\n return true;\n }","funcProperties":{"__isSmartRef__":true,"id":1081},"__LivelyClassName__":"lively.Closure","__SourceModuleName__":"Global.lively.lang.Closure"},"1076":{"this":{"__isSmartRef__":true,"id":1004},"__serializedLivelyClosures__":{"__isSmartRef__":true,"id":1077}},"1077":{"$super":{"__isSmartRef__":true,"id":1078}},"1078":{"varMapping":{"__isSmartRef__":true,"id":1079},"source":"function () {\n try {\n return obj.constructor.prototype[name].apply(obj, arguments)\n } catch (e) {\n alert('Error in $super call: ' + e + '\\n' + e.stack);\n return null;\n }\n }","funcProperties":{"__isSmartRef__":true,"id":1080},"__LivelyClassName__":"lively.Closure","__SourceModuleName__":"Global.lively.lang.Closure"},"1079":{"obj":{"__isSmartRef__":true,"id":1004},"name":"onDownPressed"},"1080":{},"1081":{},"1082":{"varMapping":{"__isSmartRef__":true,"id":1083},"source":"function onUpPressed(evt) {\n $super(evt);\n this.focus.bind(this).delay(0);\n return true;\n }","funcProperties":{"__isSmartRef__":true,"id":1088},"__LivelyClassName__":"lively.Closure","__SourceModuleName__":"Global.lively.lang.Closure"},"1083":{"this":{"__isSmartRef__":true,"id":1004},"__serializedLivelyClosures__":{"__isSmartRef__":true,"id":1084}},"1084":{"$super":{"__isSmartRef__":true,"id":1085}},"1085":{"varMapping":{"__isSmartRef__":true,"id":1086},"source":"function () {\n try {\n return obj.constructor.prototype[name].apply(obj, arguments)\n } catch (e) {\n alert('Error in $super call: ' + e + '\\n' + e.stack);\n return null;\n }\n }","funcProperties":{"__isSmartRef__":true,"id":1087},"__LivelyClassName__":"lively.Closure","__SourceModuleName__":"Global.lively.lang.Closure"},"1086":{"obj":{"__isSmartRef__":true,"id":1004},"name":"onUpPressed"},"1087":{},"1088":{},"1089":{"source":{"__isSmartRef__":true,"id":384},"target":{"__isSmartRef__":true,"id":1004}},"1090":{"sourceObj":{"__isSmartRef__":true,"id":384},"sourceAttrName":"setPane3Content","targetObj":{"__isSmartRef__":true,"id":1091},"targetMethodName":"updateList","converter":null,"converterString":null,"updater":null,"updaterString":null,"varMapping":{"__isSmartRef__":true,"id":1128},"__LivelyClassName__":"AttributeConnection","__SourceModuleName__":"Global.lively.bindings"},"1091":{"submorphs":[],"scripts":[],"shape":{"__isSmartRef__":true,"id":1092},"derivationIds":[null],"id":"6304A5ED-7C36-49DD-A525-4C03D895E7AE","renderContextTable":{"__isSmartRef__":true,"id":1098},"itemList":["-----"],"_FontFamily":"Helvetica","eventHandler":{"__isSmartRef__":true,"id":1099},"droppingEnabled":true,"halosEnabled":true,"_ClipMode":"auto","_FontSize":10,"_Position":{"__isSmartRef__":true,"id":1100},"selectedLineNo":0,"owner":{"__isSmartRef__":true,"id":370},"attributeConnections":[{"__isSmartRef__":true,"id":1101},{"__isSmartRef__":true,"id":1106},{"__isSmartRef__":true,"id":1108},{"__isSmartRef__":true,"id":1110}],"doNotSerialize":["$$selection"],"doNotCopyProperties":["$$selection"],"selection":{"__isSmartRef__":true,"id":1112},"__serializedLivelyClosures__":{"__isSmartRef__":true,"id":1113},"__LivelyClassName__":"lively.morphic.List","__SourceModuleName__":"Global.lively.morphic.Core"},"1092":{"_Position":{"__isSmartRef__":true,"id":1093},"renderContextTable":{"__isSmartRef__":true,"id":1094},"_Extent":{"__isSmartRef__":true,"id":1095},"_Padding":{"__isSmartRef__":true,"id":1096},"_BorderWidth":0,"_BorderColor":{"__isSmartRef__":true,"id":77},"_Fill":{"__isSmartRef__":true,"id":1097},"__LivelyClassName__":"lively.morphic.Shapes.Rectangle","__SourceModuleName__":"Global.lively.morphic.Shapes"},"1093":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global.lively.morphic.Graphics"},"1094":{"init":"initHTML","appendShape":"renderHTML","setPosition":"setPositionHTML","setExtent":"setExtentHTML","setPadding":"setPaddingHTML","setFill":"setFillHTML","setBorderColor":"setBorderColorHTML","setBorderWidth":"setBorderWidthHTML","setStrokeOpacity":"setStrokeOpacityHTML","setBorderRadius":"setBorderRadiusHTML","setBorderStyle":"setBorderStyleHTML","setOpacity":"setOpacityHTML","setClipMode":"setClipModeHTML"},"1095":{"x":205,"y":192.5,"__LivelyClassName__":"Point","__SourceModuleName__":"Global.lively.morphic.Graphics"},"1096":{"x":0,"y":0,"width":0,"height":0,"__LivelyClassName__":"Rectangle","__SourceModuleName__":"Global.lively.morphic.Graphics"},"1097":{"r":0.95,"g":0.95,"b":0.95,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global.lively.morphic.Graphics"},"1098":{"replaceRenderContext":"replaceRenderContextHTML","init":"initHTML","append":"appendHTML","remove":"removeHTML","triggerEvent":"triggerEventHTML","setTransform":"setTransformHTML","setPosition":"setPositionHTML","setRotation":"setRotationHTML","setExtent":"setExtentHTML","setScale":"setScaleHTML","setVisible":"setVisibleHTML","adjustOrigin":"adjustOriginHTML","setPivotPoint":"setPivotPointHTML","setClipMode":"setClipModeHTML","showsVerticalScrollBar":"showsVerticalScrollBarHTML","showsHorizontalScrollBar":"showsHorizontalScrollBarHTML","getScrollBarExtent":"getScrollBarExtentHTML","setHandStyle":"setHandStyleHTML","setPointerEvents":"setPointerEventsHTML","setToolTip":"setToolTipHTML","focus":"focusHTML","blur":"blurHTML","setFocusable":"setFocusableHTML","updateListContent":"updateListContentHTML","resizeList":"resizeListHTML","getItemIndexFromEvent":"getItemIndexFromEventHTML","getListExtent":"getListExtentHTML","setSize":"setSizeHTML","renderAsDropDownList":"renderAsDropDownListHTML","setFontSize":"setFontSizeHTML","setFontFamily":"setFontFamilyHTML","getSelectedIndexes":"getSelectedIndexesHTML","enableMultipleSelections":"enableMultipleSelectionsHTML","selectAllAt":"selectAllAtHTML","clearSelections":"clearSelectionsHTML","deselectAt":"deselectAtHTML"},"1099":{"morph":{"__isSmartRef__":true,"id":1091},"__LivelyClassName__":"lively.morphic.EventHandler","__SourceModuleName__":"Global.lively.morphic.Events"},"1100":{"x":410,"y":27.5,"__LivelyClassName__":"Point","__SourceModuleName__":"Global.lively.morphic.Graphics"},"1101":{"sourceObj":{"__isSmartRef__":true,"id":1091},"sourceAttrName":"selection","targetObj":{"__isSmartRef__":true,"id":384},"targetMethodName":"setPane3Selection","converter":null,"converterString":null,"updaterString":"function ($upd, v) { $upd(v, this.sourceObj) }","varMapping":{"__isSmartRef__":true,"id":1102},"__serializedLivelyClosures__":{"__isSmartRef__":true,"id":1103},"__LivelyClassName__":"AttributeConnection","__SourceModuleName__":"Global.lively.bindings"},"1102":{"source":{"__isSmartRef__":true,"id":1091},"target":{"__isSmartRef__":true,"id":384}},"1103":{"updater":{"__isSmartRef__":true,"id":1104}},"1104":{"originalFunc":null,"varMapping":{"__isSmartRef__":true,"id":1102},"source":"function ($upd, v) { $upd(v, this.sourceObj) }","funcProperties":{"__isSmartRef__":true,"id":1105},"__LivelyClassName__":"lively.Closure","__SourceModuleName__":"Global.lively.lang.Closure"},"1105":{},"1106":{"sourceObj":{"__isSmartRef__":true,"id":1091},"sourceAttrName":"getSelection","targetObj":{"__isSmartRef__":true,"id":384},"targetMethodName":"getPane3Selection","converter":null,"converterString":null,"updater":null,"updaterString":null,"varMapping":{"__isSmartRef__":true,"id":1107},"__LivelyClassName__":"AttributeConnection","__SourceModuleName__":"Global.lively.bindings"},"1107":{"source":{"__isSmartRef__":true,"id":1091},"target":{"__isSmartRef__":true,"id":384}},"1108":{"sourceObj":{"__isSmartRef__":true,"id":1091},"sourceAttrName":"getList","targetObj":{"__isSmartRef__":true,"id":384},"targetMethodName":"getPane3Content","converter":null,"converterString":null,"updater":null,"updaterString":null,"varMapping":{"__isSmartRef__":true,"id":1109},"__LivelyClassName__":"AttributeConnection","__SourceModuleName__":"Global.lively.bindings"},"1109":{"source":{"__isSmartRef__":true,"id":1091},"target":{"__isSmartRef__":true,"id":384}},"1110":{"sourceObj":{"__isSmartRef__":true,"id":1091},"sourceAttrName":"getMenu","targetObj":{"__isSmartRef__":true,"id":384},"targetMethodName":"getPane3Menu","converter":null,"converterString":null,"updater":null,"updaterString":null,"varMapping":{"__isSmartRef__":true,"id":1111},"__LivelyClassName__":"AttributeConnection","__SourceModuleName__":"Global.lively.bindings"},"1111":{"source":{"__isSmartRef__":true,"id":1091},"target":{"__isSmartRef__":true,"id":384}},"1112":{"target":{"__isSmartRef__":true,"id":1026},"browser":{"__isSmartRef__":true,"id":384},"parent":{"__isSmartRef__":true,"id":1025},"__LivelyClassName__":"lively.ide.AllMethodCategoryFragmentNode","__SourceModuleName__":"Global.lively.ide.SystemBrowserNodes"},"1113":{"onDownPressed":{"__isSmartRef__":true,"id":1114},"onUpPressed":{"__isSmartRef__":true,"id":1121}},"1114":{"varMapping":{"__isSmartRef__":true,"id":1115},"source":"function onDownPressed(evt) {\n $super(evt);\n this.focus.bind(this).delay(0);\n return true;\n }","funcProperties":{"__isSmartRef__":true,"id":1120},"__LivelyClassName__":"lively.Closure","__SourceModuleName__":"Global.lively.lang.Closure"},"1115":{"this":{"__isSmartRef__":true,"id":1091},"__serializedLivelyClosures__":{"__isSmartRef__":true,"id":1116}},"1116":{"$super":{"__isSmartRef__":true,"id":1117}},"1117":{"varMapping":{"__isSmartRef__":true,"id":1118},"source":"function () {\n try {\n return obj.constructor.prototype[name].apply(obj, arguments)\n } catch (e) {\n alert('Error in $super call: ' + e + '\\n' + e.stack);\n return null;\n }\n }","funcProperties":{"__isSmartRef__":true,"id":1119},"__LivelyClassName__":"lively.Closure","__SourceModuleName__":"Global.lively.lang.Closure"},"1118":{"obj":{"__isSmartRef__":true,"id":1091},"name":"onDownPressed"},"1119":{},"1120":{},"1121":{"varMapping":{"__isSmartRef__":true,"id":1122},"source":"function onUpPressed(evt) {\n $super(evt);\n this.focus.bind(this).delay(0);\n return true;\n }","funcProperties":{"__isSmartRef__":true,"id":1127},"__LivelyClassName__":"lively.Closure","__SourceModuleName__":"Global.lively.lang.Closure"},"1122":{"this":{"__isSmartRef__":true,"id":1091},"__serializedLivelyClosures__":{"__isSmartRef__":true,"id":1123}},"1123":{"$super":{"__isSmartRef__":true,"id":1124}},"1124":{"varMapping":{"__isSmartRef__":true,"id":1125},"source":"function () {\n try {\n return obj.constructor.prototype[name].apply(obj, arguments)\n } catch (e) {\n alert('Error in $super call: ' + e + '\\n' + e.stack);\n return null;\n }\n }","funcProperties":{"__isSmartRef__":true,"id":1126},"__LivelyClassName__":"lively.Closure","__SourceModuleName__":"Global.lively.lang.Closure"},"1125":{"obj":{"__isSmartRef__":true,"id":1091},"name":"onUpPressed"},"1126":{},"1127":{},"1128":{"source":{"__isSmartRef__":true,"id":384},"target":{"__isSmartRef__":true,"id":1091}},"1129":{"sourceObj":{"__isSmartRef__":true,"id":384},"sourceAttrName":"setPane4Content","targetObj":{"__isSmartRef__":true,"id":1130},"targetMethodName":"updateList","converter":null,"converterString":null,"updater":null,"updaterString":null,"varMapping":{"__isSmartRef__":true,"id":1163},"__LivelyClassName__":"AttributeConnection","__SourceModuleName__":"Global.lively.bindings"},"1130":{"submorphs":[],"scripts":[],"shape":{"__isSmartRef__":true,"id":1131},"derivationIds":[null],"id":"1F8453E7-B0D5-497A-B4CE-E055A64D248A","renderContextTable":{"__isSmartRef__":true,"id":1137},"itemList":["-----"],"_FontFamily":"Helvetica","eventHandler":{"__isSmartRef__":true,"id":1138},"droppingEnabled":true,"halosEnabled":true,"_ClipMode":"auto","_FontSize":10,"_Position":{"__isSmartRef__":true,"id":1139},"selectedLineNo":-1,"owner":{"__isSmartRef__":true,"id":370},"attributeConnections":[{"__isSmartRef__":true,"id":1140},{"__isSmartRef__":true,"id":1142},{"__isSmartRef__":true,"id":1144},{"__isSmartRef__":true,"id":1146}],"doNotSerialize":["$$selection"],"doNotCopyProperties":["$$selection"],"selection":null,"__serializedLivelyClosures__":{"__isSmartRef__":true,"id":1148},"__LivelyClassName__":"lively.morphic.List","__SourceModuleName__":"Global.lively.morphic.Core"},"1131":{"_Position":{"__isSmartRef__":true,"id":1132},"renderContextTable":{"__isSmartRef__":true,"id":1133},"_Extent":{"__isSmartRef__":true,"id":1134},"_Padding":{"__isSmartRef__":true,"id":1135},"_BorderWidth":0,"_BorderColor":{"__isSmartRef__":true,"id":77},"_Fill":{"__isSmartRef__":true,"id":1136},"__LivelyClassName__":"lively.morphic.Shapes.Rectangle","__SourceModuleName__":"Global.lively.morphic.Shapes"},"1132":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global.lively.morphic.Graphics"},"1133":{"init":"initHTML","appendShape":"renderHTML","setPosition":"setPositionHTML","setExtent":"setExtentHTML","setPadding":"setPaddingHTML","setFill":"setFillHTML","setBorderColor":"setBorderColorHTML","setBorderWidth":"setBorderWidthHTML","setStrokeOpacity":"setStrokeOpacityHTML","setBorderRadius":"setBorderRadiusHTML","setBorderStyle":"setBorderStyleHTML","setOpacity":"setOpacityHTML","setClipMode":"setClipModeHTML"},"1134":{"x":205,"y":192.5,"__LivelyClassName__":"Point","__SourceModuleName__":"Global.lively.morphic.Graphics"},"1135":{"x":0,"y":0,"width":0,"height":0,"__LivelyClassName__":"Rectangle","__SourceModuleName__":"Global.lively.morphic.Graphics"},"1136":{"r":0.95,"g":0.95,"b":0.95,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global.lively.morphic.Graphics"},"1137":{"replaceRenderContext":"replaceRenderContextHTML","init":"initHTML","append":"appendHTML","remove":"removeHTML","triggerEvent":"triggerEventHTML","setTransform":"setTransformHTML","setPosition":"setPositionHTML","setRotation":"setRotationHTML","setExtent":"setExtentHTML","setScale":"setScaleHTML","setVisible":"setVisibleHTML","adjustOrigin":"adjustOriginHTML","setPivotPoint":"setPivotPointHTML","setClipMode":"setClipModeHTML","showsVerticalScrollBar":"showsVerticalScrollBarHTML","showsHorizontalScrollBar":"showsHorizontalScrollBarHTML","getScrollBarExtent":"getScrollBarExtentHTML","setHandStyle":"setHandStyleHTML","setPointerEvents":"setPointerEventsHTML","setToolTip":"setToolTipHTML","focus":"focusHTML","blur":"blurHTML","setFocusable":"setFocusableHTML","updateListContent":"updateListContentHTML","resizeList":"resizeListHTML","getItemIndexFromEvent":"getItemIndexFromEventHTML","getListExtent":"getListExtentHTML","setSize":"setSizeHTML","renderAsDropDownList":"renderAsDropDownListHTML","setFontSize":"setFontSizeHTML","setFontFamily":"setFontFamilyHTML","getSelectedIndexes":"getSelectedIndexesHTML","enableMultipleSelections":"enableMultipleSelectionsHTML","selectAllAt":"selectAllAtHTML","clearSelections":"clearSelectionsHTML","deselectAt":"deselectAtHTML"},"1138":{"morph":{"__isSmartRef__":true,"id":1130},"__LivelyClassName__":"lively.morphic.EventHandler","__SourceModuleName__":"Global.lively.morphic.Events"},"1139":{"x":615,"y":27.5,"__LivelyClassName__":"Point","__SourceModuleName__":"Global.lively.morphic.Graphics"},"1140":{"sourceObj":{"__isSmartRef__":true,"id":1130},"sourceAttrName":"selection","targetObj":{"__isSmartRef__":true,"id":384},"targetMethodName":"setPane4Selection","converter":null,"converterString":null,"updater":null,"updaterString":"function ($upd, v) { $upd(v, this.sourceObj) }","varMapping":{"__isSmartRef__":true,"id":1141},"__LivelyClassName__":"AttributeConnection","__SourceModuleName__":"Global.lively.bindings"},"1141":{"source":{"__isSmartRef__":true,"id":1130},"target":{"__isSmartRef__":true,"id":384}},"1142":{"sourceObj":{"__isSmartRef__":true,"id":1130},"sourceAttrName":"getSelection","targetObj":{"__isSmartRef__":true,"id":384},"targetMethodName":"getPane4Selection","converter":null,"converterString":null,"updater":null,"updaterString":null,"varMapping":{"__isSmartRef__":true,"id":1143},"__LivelyClassName__":"AttributeConnection","__SourceModuleName__":"Global.lively.bindings"},"1143":{"source":{"__isSmartRef__":true,"id":1130},"target":{"__isSmartRef__":true,"id":384}},"1144":{"sourceObj":{"__isSmartRef__":true,"id":1130},"sourceAttrName":"getList","targetObj":{"__isSmartRef__":true,"id":384},"targetMethodName":"getPane4Content","converter":null,"converterString":null,"updater":null,"updaterString":null,"varMapping":{"__isSmartRef__":true,"id":1145},"__LivelyClassName__":"AttributeConnection","__SourceModuleName__":"Global.lively.bindings"},"1145":{"source":{"__isSmartRef__":true,"id":1130},"target":{"__isSmartRef__":true,"id":384}},"1146":{"sourceObj":{"__isSmartRef__":true,"id":1130},"sourceAttrName":"getMenu","targetObj":{"__isSmartRef__":true,"id":384},"targetMethodName":"getPane4Menu","converter":null,"converterString":null,"updater":null,"updaterString":null,"varMapping":{"__isSmartRef__":true,"id":1147},"__LivelyClassName__":"AttributeConnection","__SourceModuleName__":"Global.lively.bindings"},"1147":{"source":{"__isSmartRef__":true,"id":1130},"target":{"__isSmartRef__":true,"id":384}},"1148":{"onDownPressed":{"__isSmartRef__":true,"id":1149},"onUpPressed":{"__isSmartRef__":true,"id":1156}},"1149":{"varMapping":{"__isSmartRef__":true,"id":1150},"source":"function onDownPressed(evt) {\n $super(evt);\n this.focus.bind(this).delay(0);\n return true;\n }","funcProperties":{"__isSmartRef__":true,"id":1155},"__LivelyClassName__":"lively.Closure","__SourceModuleName__":"Global.lively.lang.Closure"},"1150":{"this":{"__isSmartRef__":true,"id":1130},"__serializedLivelyClosures__":{"__isSmartRef__":true,"id":1151}},"1151":{"$super":{"__isSmartRef__":true,"id":1152}},"1152":{"varMapping":{"__isSmartRef__":true,"id":1153},"source":"function () {\n try {\n return obj.constructor.prototype[name].apply(obj, arguments)\n } catch (e) {\n alert('Error in $super call: ' + e + '\\n' + e.stack);\n return null;\n }\n }","funcProperties":{"__isSmartRef__":true,"id":1154},"__LivelyClassName__":"lively.Closure","__SourceModuleName__":"Global.lively.lang.Closure"},"1153":{"obj":{"__isSmartRef__":true,"id":1130},"name":"onDownPressed"},"1154":{},"1155":{},"1156":{"varMapping":{"__isSmartRef__":true,"id":1157},"source":"function onUpPressed(evt) {\n $super(evt);\n this.focus.bind(this).delay(0);\n return true;\n }","funcProperties":{"__isSmartRef__":true,"id":1162},"__LivelyClassName__":"lively.Closure","__SourceModuleName__":"Global.lively.lang.Closure"},"1157":{"this":{"__isSmartRef__":true,"id":1130},"__serializedLivelyClosures__":{"__isSmartRef__":true,"id":1158}},"1158":{"$super":{"__isSmartRef__":true,"id":1159}},"1159":{"varMapping":{"__isSmartRef__":true,"id":1160},"source":"function () {\n try {\n return obj.constructor.prototype[name].apply(obj, arguments)\n } catch (e) {\n alert('Error in $super call: ' + e + '\\n' + e.stack);\n return null;\n }\n }","funcProperties":{"__isSmartRef__":true,"id":1161},"__LivelyClassName__":"lively.Closure","__SourceModuleName__":"Global.lively.lang.Closure"},"1160":{"obj":{"__isSmartRef__":true,"id":1130},"name":"onUpPressed"},"1161":{},"1162":{},"1163":{"source":{"__isSmartRef__":true,"id":384},"target":{"__isSmartRef__":true,"id":1130}},"1164":{"sourceObj":{"__isSmartRef__":true,"id":384},"sourceAttrName":"setSourceString","targetObj":{"__isSmartRef__":true,"id":1165},"targetMethodName":"setTextString","converter":null,"converterString":null,"updater":null,"updaterString":null,"varMapping":{"__isSmartRef__":true,"id":1181},"__LivelyClassName__":"AttributeConnection","__SourceModuleName__":"Global.lively.bindings"},"1165":{"submorphs":[],"scripts":[],"shape":{"__isSmartRef__":true,"id":1166},"derivationIds":[null],"id":"A3EA63D7-385F-4F69-B87B-206E406EEA93","renderContextTable":{"__isSmartRef__":true,"id":1171},"_WhiteSpaceHandling":"pre-wrap","textChunks":[{"__isSmartRef__":true,"id":1172}],"eventHandler":{"__isSmartRef__":true,"id":1174},"grabbingEnabled":false,"droppingEnabled":false,"halosEnabled":true,"_ClipMode":"auto","fixedWidth":true,"fixedHeight":true,"allowInput":true,"_FontFamily":"Courier","_FontSize":10,"_Position":{"__isSmartRef__":true,"id":1175},"priorExtent":{"__isSmartRef__":true,"id":1176},"_MaxTextWidth":808,"_MinTextWidth":808,"_MaxTextHeight":null,"_MinTextHeight":null,"evalEnabled":false,"owner":{"__isSmartRef__":true,"id":370},"accessibleInInactiveWindow":true,"layout":{"__isSmartRef__":true,"id":1177},"noEval":true,"syntaxHighlightingWhileTyping":true,"attributeConnections":[{"__isSmartRef__":true,"id":1178},{"__isSmartRef__":true,"id":1179}],"doNotSerialize":["$$textString","$$savedTextString"],"doNotCopyProperties":["$$textString","$$savedTextString"],"textString":"/*\n * Copyright (c) 2008-2012 Hasso Plattner Institute\n *\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\nmodule('lively.persistence.Serializer').requires().toRun(function() {\n\nObject.subclass('ObjectGraphLinearizer',\n'settings', {\n defaultCopyDepth: 100,\n keepIds: Config.keepSerializerIds || false,\n showLog: false,\n prettyPrint: false\n},\n'initializing', {\n initialize: function() {\n this.idCounter = 0;\n this.registry = {};\n this.plugins = [];\n this.copyDepth = 0;\n this.path = [];\n },\n cleanup: function() {\n // remove ids from all original objects and the original objects as well as any recreated objects\n for (var id in this.registry) {\n var entry = this.registry[id];\n if (!this.keepIds && entry.originalObject)\n delete entry.originalObject[this.idProperty]\n if (!this.keepIds && entry.recreatedObject)\n delete entry.recreatedObject[this.idProperty]\n delete entry.originalObject;\n delete entry.recreatedObject;\n }\n },\n},\n'testing', {\n isReference: function(obj) { return obj && obj.__isSmartRef__ },\n isValueObject: function(obj) {\n if (obj == null) return true;\n if ((typeof obj !== 'object') && (typeof obj !== 'function')) return true;\n if (this.isReference(obj)) return true;\n return false\n },\n},\n'accessing', {\n idProperty: '__SmartId__',\n escapedCDATAEnd: '<=CDATAEND=>',\n CDATAEnd: '\\]\\]\\>',\n\n newId: function() { return this.idCounter++ },\n getIdFromObject: function(obj) {\n return obj.hasOwnProperty(this.idProperty) ? obj[this.idProperty] : undefined;\n },\n getRegisteredObjectFromSmartRef: function(smartRef) {\n return this.getRegisteredObjectFromId(this.getIdFromObject(smartRef))\n },\n\n getRegisteredObjectFromId: function(id) {\n return this.registry[id] && this.registry[id].registeredObject\n },\n getRecreatedObjectFromId: function(id) {\n return this.registry[id] && this.registry[id].recreatedObject\n },\n setRecreatedObject: function(object, id) {\n var registryEntry = this.registry[id];\n if (!registryEntry)\n throw new Error('Trying to set recreated object in registry but cannot find registry entry!');\n registryEntry.recreatedObject = object\n },\n getRefFromId: function(id) {\n return this.registry[id] && this.registry[id].ref;\n },\n},\n'plugins', {\n addPlugin: function(plugin) {\n this.plugins.push(plugin);\n plugin.setSerializer(this);\n return this;\n },\n addPlugins: function(plugins) {\n plugins.forEach(function(ea) { this.addPlugin(ea) }, this);\n return this;\n },\n somePlugin: function(methodName, args) {\n // invoke all plugins with methodName and return the first non-undefined result (or null)\n\n for (var i = 0; i < this.plugins.length; i++) {\n var plugin = this.plugins[i],\n pluginMethod = plugin[methodName];\n if (!pluginMethod) continue;\n var result = pluginMethod.apply(plugin, args);\n if (result) return result\n }\n return null;\n },\n letAllPlugins: function(methodName, args) {\n // invoke all plugins with methodName and args\n for (var i = 0; i < this.plugins.length; i++) {\n var plugin = this.plugins[i],\n pluginMethod = plugin[methodName];\n if (!pluginMethod) continue;\n pluginMethod.apply(plugin, args);\n }\n },\n},\n'object registry -- serialization', {\n register: function(obj) {\n if (this.isValueObject(obj))\n return obj;\n\n if (Object.isArray(obj)) {\n var result = [];\n for (var i = 0; i < obj.length; i++) {\n this.path.push(i); // for debugging\n var item = obj[i];\n\n if (this.somePlugin('ignoreProp', [obj, i, item])) continue;\n result.push(this.register(item));\n this.path.pop();\n }\n return result;\n }\n\n var id = this.addIdAndAddToRegistryIfNecessary(obj);\n return this.registry[id].ref;\n },\n addIdAndAddToRegistryIfNecessary: function(obj) {\n var id = this.getIdFromObject(obj);\n if (id === undefined) id = this.addIdToObject(obj);\n if (!this.registry[id]) this.addNewRegistryEntry(id, obj)\n return id\n },\n addNewRegistryEntry: function(id, obj) {\n // copyObjectAndRegisterReferences must be done AFTER setting the registry entry\n // to allow reference cycles\n var entry = this.createRegistryEntry(obj, null/*set registered obj later*/, id);\n this.registry[id] = entry;\n entry.registeredObject = this.copyObjectAndRegisterReferences(obj)\n return entry\n },\n createRegistryEntry: function(realObject, registeredObject, id) {\n return {\n originalObject: realObject || null,\n registeredObject: registeredObject || null, // copy of original with replaced refs\n recreatedObject: null, // new created object with patched refs\n ref: {__isSmartRef__: true, id: id},\n }\n },\n copyObjectAndRegisterReferences: function(obj) {\n if (this.copyDepth > this.defaultCopyDepth) {\n alert(\"Error in copyObjectAndRegisterReferences, path: \" + this.path);\n throw new Error('Stack overflow while registering objects? ' + obj)\n }\n this.copyDepth++;\n var copy = {},\n source = this.somePlugin('serializeObj', [obj, copy]) || obj;\n for (var key in source) {\n if (!source.hasOwnProperty(key) || (key === this.idProperty && !this.keepIds)) continue;\n var value = source[key];\n if (this.somePlugin('ignoreProp', [source, key, value])) continue;\n this.path.push(key); // for debugging\n copy[key] = this.register(value);\n this.path.pop();\n }\n this.letAllPlugins('additionallySerialize', [source, copy]);\n this.copyDepth--;\n return copy;\n },\n},\n'object registry -- deserialization', {\n recreateFromId: function(id) {\n var recreated = this.getRecreatedObjectFromId(id);\n if (recreated) return recreated;\n\n // take the registered object (which has unresolveed references) and\n // create a new similiar object with patched references\n var registeredObj = this.getRegisteredObjectFromId(id),\n recreated = this.somePlugin('deserializeObj', [registeredObj]) || {};\n this.setRecreatedObject(recreated, id); // important to set recreated before patching refs!\n for (var key in registeredObj) {\n var value = registeredObj[key];\n if (this.somePlugin('ignorePropDeserialization', [registeredObj, key, value])) continue;\n this.path.push(key); // for debugging\n recreated[key] = this.patchObj(value);\n this.path.pop();\n };\n this.letAllPlugins('afterDeserializeObj', [recreated]);\n return recreated;\n },\n patchObj: function(obj) {\n if (this.isReference(obj))\n return this.recreateFromId(obj.id)\n\n if (Object.isArray(obj))\n return obj.collect(function(item, idx) {\n this.path.push(idx); // for debugging\n var result = this.patchObj(item);\n this.path.pop();\n return result;\n }, this)\n\n return obj;\n },\n},\n'serializing', {\n serialize: function(obj) {\n var time = new Date().getTime();\n var root = this.serializeToJso(obj);\n Config.lastSaveLinearizationTime = new Date().getTime() - time;\n time = new Date().getTime();\n var json = this.stringifyJSO(root);\n Config.lastSaveSerializationTime = new Date().getTime() - time;\n return json;\n },\n serializeToJso: function(obj) {\n try {\n var start = new Date();\n var ref = this.register(obj);\n this.letAllPlugins('serializationDone', [this.registry]);\n var simplifiedRegistry = this.simplifyRegistry(this.registry);\n var root = {id: ref.id, registry: simplifiedRegistry};\n this.log('Serializing done in ' + (new Date() - start) + 'ms');\n return root;\n } catch (e) {\n this.log('Cannot serialize ' + obj + ' because ' + e + '\\n' + e.stack);\n return null;\n } finally {\n this.cleanup();\n }\n },\n simplifyRegistry: function(registry) {\n var simplified = {isSimplifiedRegistry: true};\n for (var id in registry)\n simplified[id] = this.getRegisteredObjectFromId(id)\n return simplified;\n },\n addIdToObject: function(obj) { return obj[this.idProperty] = this.newId() },\n stringifyJSO: function(jso) {\n var str = this.prettyPrint ? JSON.prettyPrint(jso) : JSON.stringify(jso),\n regex = new RegExp(this.CDATAEnd, 'g');\n str = str.replace(regex, this.escapedCDATAEnd);\n return str\n },\n reset: function() {\n this.registry = {};\n },\n},\n'deserializing',{\n deserialize: function(json) {\n var jso = this.parseJSON(json);\n return this.deserializeJso(jso);\n },\n deserializeJso: function(jsoObj) {\n var start = new Date(),\n id = jsoObj.id;\n this.registry = this.createRealRegistry(jsoObj.registry);\n var result = this.recreateFromId(id);\n this.letAllPlugins('deserializationDone');\n this.cleanup();\n this.log('Deserializing done in ' + (new Date() - start) + 'ms');\n return result;\n },\n parseJSON: function(json) {\n return this.constructor.parseJSON(json);\n },\n createRealRegistry: function(registry) {\n if (!registry.isSimplifiedRegistry) return registry;\n var realRegistry = {};\n for (var id in registry)\n realRegistry[id] = this.createRegistryEntry(null, registry[id], id);\n return realRegistry;\n },\n},\n'copying', {\n copy: function(obj) {\n var rawCopy = this.serializeToJso(obj);\n if (!rawCopy) throw new Error('Cannot copy ' + obj)\n return this.deserializeJso(rawCopy);\n },\n},\n'debugging', {\n log: function(msg) {\n if (!this.showLog) return;\n Global.lively.morphic.World && lively.morphic.World.current() ?\n lively.morphic.World.current().setStatusMessage(msg, Color.blue, 6) :\n console.log(msg);\n },\n getPath: function() { return '[\"' + this.path.join('\"][\"') + '\"]' },\n});\n\nObject.extend(ObjectGraphLinearizer, {\n forLively: function() {\n return this.withPlugins([\n new DEPRECATEDScriptFilter(),\n new ClosurePlugin(),\n new RegExpPlugin(),\n new IgnoreFunctionsPlugin(),\n new ClassPlugin(),\n new LivelyWrapperPlugin(),\n new DoNotSerializePlugin(),\n new DoWeakSerializePlugin(),\n new StoreAndRestorePlugin(),\n new OldModelFilter(),\n new LayerPlugin(),\n new lively.persistence.DatePlugin()\n ]);\n },\n forLivelyCopy: function() {\n var serializer = this.forLively();\n var p = new GenericFilter();\n var world = lively.morphic.World.current();\n p.addFilter(function(obj, prop, value) { return value === world })\n serializer.addPlugins([p]);\n return serializer;\n },\n withPlugins: function(plugins) {\n var serializer = new ObjectGraphLinearizer();\n serializer.addPlugins(plugins);\n return serializer;\n },\n allRegisteredObjectsDo: function(registryObj, func, context) {\n for (var id in registryObj) {\n var registeredObject = registryObj[id];\n if (!registryObj.isSimplifiedRegistry)\n registeredObject = registeredObject.registeredObject;\n func.call(context || Global, id, registeredObject)\n }\n },\n parseJSON: function(json) {\n if (typeof json !== 'string') return json; // already is JSO?\n var regex = new RegExp(this.prototype.escapedCDATAEnd, 'g'),\n converted = json.replace(regex, this.prototype.CDATAEnd);\n return JSON.parse(converted);\n },\n\n});\n\nObject.subclass('ObjectLinearizerPlugin',\n'accessing', {\n getSerializer: function() { return this.serializer },\n setSerializer: function(s) { this.serializer = s },\n},\n'plugin interface', {\n /* interface methods that can be reimplemented by subclasses:\n serializeObj: function(original) {},\n additionallySerialize: function(original, persistentCopy) {},\n deserializeObj: function(persistentCopy) {},\n ignoreProp: function(obj, propName, value) {},\n ignorePropDeserialization: function(obj, propName, value) {},\n afterDeserializeObj: function(obj) {},\n deserializationDone: function() {},\n serializationDone: function(registry) {},\n */\n});\n\nObjectLinearizerPlugin.subclass('ClassPlugin',\n'properties', {\n isInstanceRestorer: true, // for Class.intializer\n classNameProperty: '__LivelyClassName__',\n sourceModuleNameProperty: '__SourceModuleName__',\n},\n'plugin interface', {\n additionallySerialize: function(original, persistentCopy) {\n this.addClassInfoIfPresent(original, persistentCopy);\n },\n deserializeObj: function(persistentCopy) {\n return this.restoreIfClassInstance(persistentCopy);\n },\n ignoreProp: function(obj, propName) {\n return propName == this.classNameProperty\n },\n ignorePropDeserialization: function(regObj, propName) {\n return this.classNameProperty === propName\n },\n afterDeserializeObj: function(obj) {\n this.removeClassInfoIfPresent(obj)\n },\n},\n'class info persistence', {\n addClassInfoIfPresent: function(original, persistentCopy) {\n // store class into persistentCopy if original is an instance\n if (!original || !original.constructor) return;\n var className = original.constructor.type;\n persistentCopy[this.classNameProperty] = className;\n var srcModule = original.constructor.sourceModule\n if (srcModule)\n persistentCopy[this.sourceModuleNameProperty] = srcModule.namespaceIdentifier;\n },\n restoreIfClassInstance: function(persistentCopy) {\n // if (!persistentCopy.hasOwnProperty[this.classNameProperty]) return;\n var className = persistentCopy[this.classNameProperty];\n if (!className) return;\n var klass = Class.forName(className);\n if (!klass || ! (klass instanceof Function)) {\n var msg = 'ObjectGraphLinearizer is trying to deserialize instance of ' +\n className + ' but this class cannot be found!';\n dbgOn(true);\n if (!Config.ignoreClassNotFound) throw new Error(msg);\n console.error(msg);\n lively.bindings.callWhenNotNull(lively.morphic.World, 'currentWorld', {warn: function(world) { world.alert(msg) }}, 'warn');\n return {isClassPlaceHolder: true, className: className, position: persistentCopy._Position};\n }\n return new klass(this);\n },\n removeClassInfoIfPresent: function(obj) {\n if (obj[this.classNameProperty])\n delete obj[this.classNameProperty];\n },\n},\n'searching', {\n sourceModulesIn: function(registryObj) {\n var moduleNames = [],\n partsBinRequiredModulesProperty = 'requiredModules',\n sourceModuleProperty = this.sourceModuleNameProperty;\n\n ObjectGraphLinearizer.allRegisteredObjectsDo(registryObj, function(id, value) {\n if (value[sourceModuleProperty])\n moduleNames.push(value[sourceModuleProperty]);\n if (value[partsBinRequiredModulesProperty])\n moduleNames.pushAll(value[partsBinRequiredModulesProperty]);\n })\n\n return moduleNames.reject(function(ea) {\n return ea.startsWith('Global.anonymous_') || ea.include('undefined') }).uniq();\n },\n});\n\nObjectLinearizerPlugin.subclass('LayerPlugin',\n'properties', {\n withLayersPropName: 'withLayers',\n withoutLayersPropName: 'withoutLayers'\n\n},\n'plugin interface', {\n additionallySerialize: function(original, persistentCopy) {\n this.serializeLayerArray(original, persistentCopy, this.withLayersPropName)\n this.serializeLayerArray(original, persistentCopy, this.withoutLayersPropName)\n },\n afterDeserializeObj: function(obj) {\n this.deserializeLayerArray(obj, this.withLayersPropName)\n this.deserializeLayerArray(obj, this.withoutLayersPropName)\n },\n ignoreProp: function(obj, propName, value) {\n return propName == this.withLayersPropName || propName == this.withoutLayersPropName;\n },\n},\n'helper',{\n serializeLayerArray: function(original, persistentCopy, propname) {\n var layers = original[propname]\n if (!layers || layers.length == 0) return;\n persistentCopy[propname] = layers.collect(function(ea) {\n return ea instanceof Layer ? ea.fullName() : ea })\n },\n deserializeLayerArray: function(obj, propname) {\n var layers = obj[propname];\n if (!layers || layers.length == 0) return;\n module('cop.Layers').load(true); // FIXME\n obj[propname] = layers.collect(function(ea) {\n console.log(ea)\n return Object.isString(ea) ? cop.create(ea, true) : ea;\n });\n },\n});\n\nObjectLinearizerPlugin.subclass('StoreAndRestorePlugin',\n'initializing', {\n initialize: function($super) {\n $super();\n this.restoreObjects = [];\n },\n},\n'plugin interface', {\n serializeObj: function(original, persistentCopy) {\n if (typeof original.onstore === 'function')\n original.onstore(persistentCopy);\n },\n afterDeserializeObj: function(obj) {\n if (typeof obj.onrestore === 'function')\n this.restoreObjects.push(obj);\n },\n deserializationDone: function() {\n this.restoreObjects.forEach(function(ea){\n try {\n ea.onrestore()\n } catch(e) {\n // be forgiving because a failure in an onrestore method should not break \n // the entire page\n console.error('Deserialization Error during runing onrestore in: ' + ea \n + '\\nError:' + e)\n } \n })\n },\n});\nObjectLinearizerPlugin.subclass('DoNotSerializePlugin',\n'testing', {\n doNotSerialize: function(obj, propName) {\n if (!obj.doNotSerialize) return false;\n var merged = Object.mergePropertyInHierarchy(obj, 'doNotSerialize');\n return merged.include(propName);\n },\n},\n'plugin interface', {\n ignoreProp: function(obj, propName, value) {\n return this.doNotSerialize(obj, propName);\n },\n});\n\nObjectLinearizerPlugin.subclass('DoWeakSerializePlugin',\n'initialization', {\n initialize: function($super) {\n $super();\n this.weakRefs = [];\n this.nonWeakObjs = []\n },\n},\n'testing', {\n doWeakSerialize: function(obj, propName) {\n if (!obj.doWeakSerialize) return false;\n var merged = Object.mergePropertyInHierarchy(obj, 'doWeakSerialize');\n return merged.include(propName);\n },\n},\n'plugin interface', {\n ignoreProp: function(obj, propName, value) {\n if(this.doWeakSerialize(obj, propName)){\n // remember weak reference to install it later if neccesary\n this.weakRefs.push({obj: obj, propName: propName, value: value})\n return true\n }\n return false\n },\n serializationDone: function(registry) {\n var serializer = this.getSerializer();\n this.weakRefs.forEach(function(ea) {\n var id = serializer.getIdFromObject(ea.value);\n if (id === undefined) return;\n var ownerId = serializer.getIdFromObject(ea.obj),\n persistentCopyFromOwner = serializer.getRegisteredObjectFromId(ownerId);\n persistentCopyFromOwner[ea.propName] = serializer.getRefFromId(id);\n })\n },\n additionallySerialize: function(obj, persistentCopy) {\n return;\n // 1. Save persistentCopy for future manipulation\n this.weakRefs.forEach(function(ea) {\n alertOK(\"ok\")\n if(ea.obj === obj) {\n ea.objCopy = persistentCopy;\n }\n\n // we maybe reached an object, which was marked weak?\n // alertOK(\"all \" + this.weakRefs.length)\n if (ea.value === obj) {\n // var source = this.getSerializer().register(ea.obj);\n var ref = this.getSerializer().register(ea.value);\n source[ea.propName]\n alertOK('got something:' + ea.propName + \" -> \" + printObject(ref))\n ea.objCopy[ea.propName] = ref\n\n LastEA = ea\n }\n }, this)\n },\n\n});\n\nObjectLinearizerPlugin.subclass('LivelyWrapperPlugin', // for serializing lively.data.Wrappers\n'names', {\n rawNodeInfoProperty: '__rawNodeInfo__',\n},\n'testing', {\n hasRawNode: function(obj) {\n // FIXME how to ensure that it's really a node? instanceof?\n return obj.rawNode && obj.rawNode.nodeType\n },\n},\n'plugin interface', {\n additionallySerialize: function(original, persistentCopy) {\n if (this.hasRawNode(original))\n this.captureRawNode(original, persistentCopy);\n },\n ignoreProp: function(obj, propName, value) {\n if (!value) return false;\n if (value.nodeType) return true; // FIXME dont serialize nodes\n if (value === Global) return true;\n return false;\n },\n afterDeserializeObj: function(obj) {\n this.restoreRawNode(obj);\n },\n},\n'rawNode handling', {\n captureRawNode: function(original, copy) {\n var attribs = $A(original.rawNode.attributes).collect(function(attr) {\n return {key: attr.name, value: attr.value, namespaceURI: attr.namespaceURI}\n })\n var rawNodeInfo = {\n tagName: original.rawNode.tagName,\n namespaceURI: original.rawNode.namespaceURI,\n attributes: attribs,\n };\n copy[this.rawNodeInfoProperty] = rawNodeInfo;\n },\n\n restoreRawNode: function(newObj) {\n var rawNodeInfo = newObj[this.rawNodeInfoProperty];\n if (!rawNodeInfo) return;\n delete newObj[this.rawNodeInfoProperty];\n var rawNode = document.createElementNS(rawNodeInfo.namespaceURI, rawNodeInfo.tagName);\n rawNodeInfo.attributes.forEach(function(attr) {\n rawNode.setAttributeNS(attr.namespaceURI, attr.key, attr.value);\n });\n newObj.rawNode = rawNode;\n },\n});\n\nObjectLinearizerPlugin.subclass('IgnoreDOMElementsPlugin', // for serializing lively.data.Wrappers\n'plugin interface', {\n ignoreProp: function(obj, propName, value) {\n if (!value) return false;\n if (value.nodeType) {\n // alert('trying to deserialize node ' + value + ' (pointer from ' + obj + '[' + propName + ']'\n // + '\\n path:' + this.serializer.getPath())\n return true;\n }\n if (value === Global) {\n alert('trying to deserialize Global (pointer from ' + obj + '[' + propName + ']'\n + '\\n path:' + this.serializer.getPath())\n return true;\n }\n return false;\n },\n});\n\nObjectLinearizerPlugin.subclass('RegExpPlugin',\n'accessing', {\n serializedRegExpProperty: '__regExp__',\n},\n'plugin interface', {\n serializeObj: function(original) {\n if (original instanceof RegExp)\n return this.serializeRegExp(original);\n },\n serializeRegExp: function(regExp) {\n var serialized = {};\n serialized[this.serializedRegExpProperty] = regExp.toString();\n return serialized;\n },\n\n deserializeObj: function(obj) {\n var serializedRegExp = obj[this.serializedRegExpProperty];\n if (!serializedRegExp) return null;\n delete obj[this.serializedRegExpProperty];\n try {\n return eval(serializedRegExp);\n } catch(e) {\n console.error('Cannot deserialize RegExp ' + e + '\\n' + e.stack);\n }\n },\n});\n\nObjectLinearizerPlugin.subclass('OldModelFilter',\n'initializing', {\n initialize: function($super) {\n $super();\n this.relays = [];\n },\n},\n'plugin interface', {\n ignoreProp: function(source, propName, value) {\n // if (propName === 'formalModel') return true;\n // if (value && value.constructor && value.constructor.name.startsWith('anonymous_')) return true;\n return false;\n },\n additionallySerialize: function(original, persistentCopy) {\n var klass = original.constructor;\n // FIX for IE9+ which does not implement Function.name\n if (!klass.name) {\n var n = klass.toString().match('^function\\s*([^(]*)\\\\(');\n klass.name = (n ? n[1].strip() : '');\n }\n if (!klass || !klass.name.startsWith('anonymous_')) return;\n ClassPlugin.prototype.removeClassInfoIfPresent(persistentCopy);\n var def = JSON.stringify(original.definition);\n def = def.replace(/[\\\\]/g, '')\n def = def.replace(/\"+\\{/g, '{')\n def = def.replace(/\\}\"+/g, '}')\n persistentCopy.definition = def;\n persistentCopy.isInstanceOfAnonymousClass = true;\n if (klass.superclass == Relay) {\n persistentCopy.isRelay = true;\n } else if (klass.superclass == PlainRecord) {\n persistentCopy.isPlainRecord = true;\n } else {\n alert('Cannot serialize model stuff of type ' + klass.superclass.type)\n }\n },\n afterDeserializeObj: function(obj) {\n // if (obj.isRelay) this.relays.push(obj);\n },\n deserializationDone: function() {\n // this.relays.forEach(function(relay) {\n // var def = JSON.parse(relay.definition);\n // })\n },\n deserializeObj: function(persistentCopy) {\n if (!persistentCopy.isInstanceOfAnonymousClass) return null;\n var instance;\n function createInstance(ctor, ctorMethodName, argIfAny) {\n var string = persistentCopy.definition, def;\n string = string.replace(/[\\\\]/g, '')\n string = string.replace(/\"+\\{/g, '{')\n string = string.replace(/\\}\"+/g, '}')\n try {\n def = JSON.parse(string);\n } catch(e) {\n console.error('Cannot correctly deserialize ' + ctor + '>>' + ctorMethodName + '\\n' + e);\n def = {};\n }\n return ctor[ctorMethodName](def, argIfAny)\n }\n\n if (persistentCopy.isRelay) {\n var delegate = this.getSerializer().patchObj(persistentCopy.delegate);\n instance = createInstance(Relay, 'newInstance', delegate);\n }\n\n if (persistentCopy.isPlainRecord) {\n instance = createInstance(Record, 'newPlainInstance');\n }\n\n if (!instance) alert('Cannot serialize old model object: ' + JSON.stringify(persistentCopy))\n return instance;\n },\n\n});\n\n\nObjectLinearizerPlugin.subclass('DEPRECATEDScriptFilter',\n'accessing', {\n serializedScriptsProperty: '__serializedScripts__',\n getSerializedScriptsFrom: function(obj) {\n if (!obj.hasOwnProperty(this.serializedScriptsProperty)) return null;\n return obj[this.serializedScriptsProperty]\n },\n},\n'plugin interface', {\n additionallySerialize: function(original, persistentCopy) {\n var scripts = {}, found = false;\n Functions.own(original).forEach(function(funcName) {\n var func = original[funcName];\n if (!func.isSerializable) return;\n found = true;\n scripts[funcName] = func.toString();\n });\n if (!found) return;\n persistentCopy[this.serializedScriptsProperty] = scripts;\n },\n afterDeserializeObj: function(obj) {\n var scripts = this.getSerializedScriptsFrom(obj);\n if (!scripts) return;\n Properties.forEachOwn(scripts, function(scriptName, scriptSource) {\n Function.fromString(scriptSource).asScriptOf(obj, scriptName);\n })\n delete obj[this.serializedScriptsProperty];\n },\n});\n\nObjectLinearizerPlugin.subclass('ClosurePlugin',\n'initializing', {\n initialize: function($super) {\n $super();\n this.objectsMethodNamesAndClosures = [];\n },\n},\n'accessing', {\n serializedClosuresProperty: '__serializedLivelyClosures__',\n getSerializedClosuresFrom: function(obj) {\n return obj.hasOwnProperty(this.serializedClosuresProperty) ?\n obj[this.serializedClosuresProperty] : null;\n },\n},\n'plugin interface', {\n serializeObj: function(closure) { // for serializing lively.Closures\n if (!closure || !closure.isLivelyClosure || closure.hasFuncSource()) return;\n if (closure.originalFunc)\n closure.setFuncSource(closure.originalFunc.toString());\n return closure;\n },\n additionallySerialize: function(original, persistentCopy) {\n var closures = {}, found = false;\n Functions.own(original).forEach(function(funcName) {\n var func = original[funcName];\n if (!func || !func.hasLivelyClosure) return;\n found = true;\n closures[funcName] = func.livelyClosure;\n });\n if (!found) return;\n // if we found closures, serialize closures object, this will also trigger\n // ClosurePlugin>>serializeObj for those closures\n persistentCopy[this.serializedClosuresProperty] = this.getSerializer().register(closures);\n },\n afterDeserializeObj: function(obj) {\n var closures = this.getSerializedClosuresFrom(obj);\n if (!closures) return;\n Properties.forEachOwn(closures, function(name, closure) {\n // we defer the recreation of the actual function so that all of the\n // function's properties are already deserialized\n if (closure instanceof lively.Closure) {\n // obj[name] = closure.recreateFunc();\n obj.__defineSetter__(name, function(v) { delete obj[name]; obj[name] = v });\n // in case the method is accessed or called before we are done with serializing\n // everything, we do an 'early recreation'\n obj.__defineGetter__(name, function() {\n // alert('early closure recreation ' + name)\n return closure.recreateFunc().addToObject(obj, name);\n })\n this.objectsMethodNamesAndClosures.push({obj: obj, name: name, closure: closure});\n }\n }, this);\n delete obj[this.serializedClosuresProperty];\n },\n deserializationDone: function() {\n this.objectsMethodNamesAndClosures.forEach(function(ea) {\n ea.closure.recreateFunc().addToObject(ea.obj, ea.name);\n })\n },\n});\n\nObjectLinearizerPlugin.subclass('IgnoreFunctionsPlugin',\n'interface', {\n ignoreProp: function(obj, propName, value) {\n return value && typeof value === 'function' && !value.isLivelyClosure && !(value instanceof RegExp);\n },\n});\n\nObjectLinearizerPlugin.subclass('lively.persistence.DatePlugin',\n'interface', {\n serializeObj: function(obj, copy) {\n return obj instanceof Date ? {isSerializedDate: true, string: String(obj)} : null;\n },\n deserializeObj: function(copy) {\n return copy && copy.isSerializedDate ? new Date(copy.string): null;\n },\n});\n\nObjectLinearizerPlugin.subclass('GenericFilter',\n// example\n// f = new GenericFilter()\n// f.addPropertyToIgnore('owner')\n//\n'initializing', {\n initialize: function($super) {\n $super();\n this.ignoredClasses = [];\n this.ignoredProperties = [];\n this.filterFunctions = [];\n },\n},\n'plugin interface', {\n addClassToIgnore: function(klass) {\n this.ignoredClasses.push(klass.type);\n },\n addPropertyToIgnore: function(name) {\n this.ignoredProperties.push(name);\n },\n\n addFilter: function(filterFunction) {\n this.filterFunctions.push(filterFunction);\n },\n ignoreProp: function(obj, propName, value) {\n return this.ignoredProperties.include(propName) ||\n (value && this.ignoredClasses.include(value.constructor.type)) ||\n this.filterFunctions.any(function(func) { return func(obj, propName, value) });\n },\n});\n\nObjectLinearizerPlugin.subclass('ConversionPlugin',\n'initializing', {\n initialize: function(deserializeFunc, afterDeserializeFunc) {\n this.deserializeFunc = deserializeFunc || Functions.Null;\n this.afterDeserializeFunc = afterDeserializeFunc || Functions.Null;\n this.objectLayouts = {}\n },\n},\n'object layout recording', {\n addObjectLayoutOf: function(obj) {\n var cName = this.getClassName(obj),\n layout = this.objectLayouts[cName] = this.objectLayouts[cName] || {};\n if (!layout.properties) layout.properties = [];\n layout.properties = layout.properties.concat(Properties.all(obj)).uniq();\n },\n printObjectLayouts: function() {\n var str = Properties.own(this.objectLayouts).collect(function(cName) {\n return cName + '\\n ' + this.objectLayouts[cName].properties.join('\\n ')\n }, this).join('\\n\\n')\n return str\n },\n},\n'accessing', {\n getClassName: function(obj) {\n return obj[ClassPlugin.prototype.classNameProperty]\n },\n},\n'plugin interface', {\n afterDeserializeObj: function(obj) {\n return this.afterDeserializeFunc.call(this, obj);\n },\n deserializeObj: function(rawObj) {\n var result = this.deserializeFunc.call(this, rawObj);\n this.addObjectLayoutOf(rawObj);\n return result;\n },\n},\n'registry', {\n patchRegistry: function(oldRegistry, jso) {\n return new ObjectGraphLinearizer().serializeToJso(jso)\n },\n registerWithPlugins: function(obj, plugins) {\n // for object conversion when objects need to register new ones during conversion\n var serializer = this.getSerializer();\n serializer.addPlugins(plugins);\n var id = serializer.register(obj);\n serializer.plugins = serializer.plugins.withoutAll(plugins);\n return id;\n },\n\n},\n'EXAMPLES', {\n convertHPICross: function() {\nJSON.prettyPrint(json)\njso = JSON.parse(json)\n\ndeserialize = function(obj) {\n var serializer = this.getSerializer();\n if (this.getClassName(obj) == 'Morph') {\n delete obj.pvtCachedTransform\n delete obj.__rawNodeInfo__\n obj._Position = obj.origin\n delete obj.origin\n obj._Rotation = obj.rotation\n delete obj.rotation\n obj._Scale = 1;\n delete obj.scalePoint\n delete obj.priorExtent\n obj.scripts = []\n obj.id = obj._livelyDataWrapperId_\n delete obj._livelyDataWrapperId_\n obj.__SourceModuleName__ = 'lively.morphic.Core'\n obj.__LivelyClassName__ = 'lively.morphic.Morph'\n\nobj.halosEnabled = true\nobj.droppingEnabled = true\n }\n if (this.getClassName(obj) == 'lively.scene.Rectangle') {\nif (obj.__rawNodeInfo__) {\n// var rawNodeInfo = serializer.getRegisteredObjectFromSmartRef(obj.__rawNodeInfo__)\nvar rawNodeInfo = obj.__rawNodeInfo__\nvar xAttr = rawNodeInfo.attributes.detect(function(ea) { return ea.key === 'x' })\nvar yAttr = rawNodeInfo.attributes.detect(function(ea) { return ea.key === 'y' })\nif (xAttr && yAttr)\n obj._Position = this.registerWithPlugins(pt(Number(xAttr.value), Number(yAttr.value)), [new ClassPlugin()])\nvar widthAttr = rawNodeInfo.attributes.detect(function(ea) { return ea.key === 'width' })\nvar heightAttr = rawNodeInfo.attributes.detect(function(ea) { return ea.key === 'height' })\nif (widthAttr && heightAttr )\n obj._Extent = this.registerWithPlugins(pt(Number(widthAttr.value), Number(heightAttr.value)), [new ClassPlugin()])\n\nvar attr = rawNodeInfo.attributes.detect(function(ea) { return ea.key === 'fill-opacity' })\nobj._FillOpacity = attr && Number(attr.value)\nvar attr = rawNodeInfo.attributes.detect(function(ea) { return ea.key === 'stroke-opacity' })\nobj._StrokeOpacity = attr && Number(attr.value)\nvar attr = rawNodeInfo.attributes.detect(function(ea) { return ea.key === 'stroke-width' })\nobj._BorderWidth = attr && Number(attr.value)\n}\n delete obj.__rawNodeInfo__\n obj._BorderColor = obj._stroke\n obj._Fill = obj._fill\n obj.id = obj._livelyDataWrapperId_\n delete obj._livelyDataWrapperId_\n obj.__SourceModuleName__ = 'lively.morphic.Shapes'\n obj.__LivelyClassName__ = 'lively.morphic.Shapes.Rectangle'\n }\n\n // return obj\n}\n\nconversionPlugin = new ConversionPlugin(deserialize)\nserializer = ObjectGraphLinearizer.withPlugins([conversionPlugin])\n// set id counter so new objects can be registered\nserializer.idCounter = Math.max.apply(null, Properties.all(jso.registry).collect(function(prop) { return Number(prop) || -1})) + 1\nconvertedRawObj = serializer.deserialize(jso)\nconversionPlugin.printObjectLayouts()\n\nconvertedRawObjRegistry = new ObjectGraphLinearizer().serializeToJso(convertedRawObj)\nobj = ObjectGraphLinearizer.forNewLively().deserializeJso(convertedRawObjRegistry)\n\nobj\nobj.prepareForNewRenderContext(obj.renderContext())\nobj.openInWorld()\n },\n});\n\nObjectLinearizerPlugin.subclass('AttributeConnectionPlugin',\n'plugin interface', {\n deserializeObj: function(persistentCopy) {\n var className = persistentCopy[ClassPlugin.prototype.classNameProperty];\n if (!className || className != 'AttributeConnection') return;\n },\n});\n\nObjectLinearizerPlugin.subclass('CopyOnlySubmorphsPlugin',\n'initializing', {\n initialize: function() {\n this.morphRefId = 0;\n this.idMorphMapping = {};\n this.root = 0;\n },\n},\n'copying', {\n copyAsMorphRef: function(morph) {\n var id = ++this.morphRefId;\n this.idMorphMapping[id] = morph;\n return {isCopyMorphRef: true, morphRefId: id};\n },\n},\n'plugin interface', {\n ignoreProp: function(obj, key, value) {\n if (!value || !this.root || !this.root.isMorph) return false;\n return value === this.root.owner;\n },\n serializeObj: function(obj) {\n // if obj is a morph and the root obj that is copied is a morph then\n // copy this object only if it is a submorph of the root obj\n // otherwise the new copy should directly reference the object\n return (!obj || !this.root || !this.root.isMorph || obj === this.root || !obj.isMorph || !obj.isSubmorphOf || obj.isSubmorphOf(this.root) || !obj.world()) ? null : this.copyAsMorphRef(obj);\n },\n deserializeObj: function(persistentCopy) {\n return persistentCopy.isCopyMorphRef ? this.idMorphMapping[persistentCopy.morphRefId] : undefined;\n },\n});\n\nObjectLinearizerPlugin.subclass('IgnoreEpiMorphsPlugin',\n'plugin interface', {\n ignoreProp: function(obj, key, value) { return value && value.isEpiMorph },\n});\n\n// (de)serialize objects that inherit stuff from a constructor function\nObjectLinearizerPlugin.subclass('lively.persistence.GenericConstructorPlugin',\n'accessing', {\n constructorProperty: '__constructorName__',\n\n getConstructorName: function(obj) {\n return obj && obj.constructor && obj.constructor.name;\n },\n\n isLivelyClassInstance: function(obj) {\n return obj && obj.constructor && obj.constructor.type !== undefined;\n }\n},\n'plugin interface', {\n\n additionallySerialize: function(original, persistentCopy) {\n var name = this.getConstructorName(original);\n if (name && name !== 'Object' && !this.isLivelyClassInstance(original)) {\n persistentCopy[this.constructorProperty] = name;\n return true;\n }\n return false;\n },\n\n deserializeObj: function(persistentCopy) {\n var name = persistentCopy[this.constructorProperty],\n constr = name && Class.forName(name);\n if (!constr) return undefined;\n // we use a new constructor function instead of the real constructor\n // here so that we don't need to know any arguments that might be expected\n // by the original constructor. To correctly make inheritance work\n // (instanceof and .constructor) we set the prototype property of our helper\n // constructor to the real constructor.prototype\n function HelperConstructor() {};\n HelperConstructor.prototype = constr.prototype;\n return new HelperConstructor();\n }\n});\n\nObject.extend(lively.persistence.Serializer, {\n\n jsonWorldId: 'LivelyJSONWorld',\n changeSetElementId: 'WorldChangeSet',\n\n createObjectGraphLinearizer: function() {\n return Config.isNewMorphic ? ObjectGraphLinearizer.forNewLively() : ObjectGraphLinearizer.forLively()\n },\n\n createObjectGraphLinearizerForCopy: function() {\n return Config.isNewMorphic ? ObjectGraphLinearizer.forNewLivelyCopy() : ObjectGraphLinearizer.forLivelyCopy()\n },\n\n serialize: function(obj, optPlugins, optSerializer) {\n var serializer = optSerializer || this.createObjectGraphLinearizer();\n if (optPlugins) optPlugins.forEach(function(plugin) { serializer.addPlugin(plugin) });\n var json = serializer.serialize(obj);\n return json;\n },\n\n serializeWorld: function(world) {\n var doc = new Importer().getBaseDocument(); // FIXME\n return this.serializeWorldToDocument(world, doc);\n },\n\n serializeWorldToDocument: function(world, doc) {\n return this.serializeWorldToDocumentWithSerializer(world, doc, this.createObjectGraphLinearizer());\n },\n\n serializeWorldToDocumentWithSerializer: function(world, doc, serializer) {\n // this helper object was introduced to make the code that is browser dependent\n // (currently IE9 vs the rest) easier to read. It sould be moved to dome general DOM abstraction layer\n var domAccess = {\n getSystemDictNode: function(doc) {\n return (doc.getElementById ?\n doc.getElementById('SystemDictionary') :\n doc.selectSingleNode('//*[@id=\"SystemDictionary\"]'));\n },\n createMetaNode: function(doc) {\n return UserAgent.isIE ? doc.createNode(1, 'meta', Namespace.XHTML) : XHTMLNS.create('meta')\n },\n getCSNode: function(doc, changeSet) {\n var changeSetNode;\n if (!changeSet) {\n alert('Found no ChangeSet while serializing ' + world + '! Adding an empty CS.');\n changeSetNode = LivelyNS.create('code');\n } else {\n changeSetNode = cs.getXMLElement();\n }\n if (!UserAgent.isIE) return doc.importNode(changeSetNode, true);\n // mr: this is a real IE hack!\n var helperDoc = new ActiveXObject('MSXML2.DOMDocument.6.0');\n helperDoc.loadXML(new XMLSerializer().serializeToString(changeSetNode));\n return doc.importNode(helperDoc.firstChild, true);\n },\n getHeadNode: function(doc) {\n return doc.getElementsByTagName('head')[0] || doc.selectSingleNode('//*[\"head\"=name()]');\n },\n }\n\n var head = domAccess.getHeadNode(doc);\n\n // FIXME remove previous meta elements - is this really necessary?\n //var metaElement;\n //while (metaElement = doc.getElementsByTagName('meta')[0])\n // metaElement.parentNode.removeChild(metaElement)\n // removed 2012-01-5 fabian\n // doing this instead: remove old serialized data.. is it necessary or not?\n // we need additional meta tags for better iPad touch support, can't remove all of them..\n var metaToBeRemoved = ['LivelyMigrationLevel', 'WorldChangeSet', 'LivelyJSONWorld'];\n metaToBeRemoved.forEach(function(ea) {\n var element = doc.getElementById(ea);\n if (element) {\n element.parentNode.removeChild(element);\n }});\n\n\n // FIXME remove system dictionary\n var sysDict = domAccess.getSystemDictNode(doc);\n if (sysDict) sysDict.parentNode.removeChild(sysDict);\n\n // store migration level\n var migrationLevel = LivelyMigrationSupport.migrationLevel,\n migrationLevelNode = domAccess.createMetaNode(doc);\n migrationLevelNode.setAttribute('id', LivelyMigrationSupport.migrationLevelNodeId);\n migrationLevelNode.appendChild(doc.createCDATASection(migrationLevel));\n head.appendChild(migrationLevelNode);\n\n // serialize changeset\n var cs = world.getChangeSet(),\n csElement = domAccess.getCSNode(doc, cs),\n metaCSNode = domAccess.createMetaNode(doc);\n metaCSNode.setAttribute('id', this.changeSetElementId);\n metaCSNode.appendChild(csElement);\n head.appendChild(metaCSNode);\n\n // serialize world\n var json = this.serialize(world, null, serializer),\n metaWorldNode = domAccess.createMetaNode(doc);\n if (!json) throw new Error('Cannot serialize world -- serialize returned no JSON!');\n metaWorldNode.setAttribute('id', this.jsonWorldId)\n metaWorldNode.appendChild(doc.createCDATASection(json))\n head.appendChild(metaWorldNode);\n\n return doc;\n },\n deserialize: function(json, optDeserializer) {\n var deserializer = optDeserializer || this.createObjectGraphLinearizer();\n var obj = deserializer.deserialize(json);\n return obj;\n },\n\n deserializeWorldFromDocument: function(doc) {\n var worldMetaElement = doc.getElementById(this.jsonWorldId);\n if (!worldMetaElement)\n throw new Error('Cannot find JSONified world when deserializing');\n var serializer = this.createObjectGraphLinearizer(),\n json = worldMetaElement.textContent,\n world = serializer.deserialize(json);\n return world;\n },\n\n deserializeWorldFromJso: function(jso) {\n var serializer = this.createObjectGraphLinearizer(),\n world = serializer.deserializeJso(jso);\n return world;\n },\n\n deserializeChangeSetFromDocument: function(doc) {\n var csMetaElement = doc.getElementById(this.changeSetElementId);\n if (!csMetaElement)\n throw new Error('Cannot find ChangeSet meta element when deserializing');\n return ChangeSet.fromNode(csMetaElement);\n },\n\n sourceModulesIn: function(jso) {\n return new ClassPlugin().sourceModulesIn(jso.registry);\n },\n\n parseJSON: function(json) {\n return ObjectGraphLinearizer.parseJSON(json);\n },\n\n copyWithoutWorld: function(obj) {\n var serializer = this.createObjectGraphLinearizerForCopy(),\n dontCopyWorldPlugin = new GenericFilter();\n dontCopyWorldPlugin.addFilter(function(obj, propName, value) { return value === lively.morphic.World.current() })\n serializer.addPlugin(dontCopyWorldPlugin);\n var copy = serializer.copy(obj);\n return copy;\n },\n\n newMorphicCopy: function(obj) {\n var serializer = this.createObjectGraphLinearizerForCopy();\n serializer.showLog = false;\n var copyPlugin = new CopyOnlySubmorphsPlugin();\n copyPlugin.root = obj;\n serializer.addPlugin(copyPlugin);\n return serializer.copy(obj);\n },\n});\n\nObject.extend(lively.persistence, {\n getPluginsForLively: function() {\n return this.pluginsForLively.collect(function(klass) {\n return new klass();\n })\n },\n\n pluginsForLively: [\n StoreAndRestorePlugin,\n ClosurePlugin,\n RegExpPlugin,\n IgnoreFunctionsPlugin,\n ClassPlugin,\n IgnoreEpiMorphsPlugin,\n DoNotSerializePlugin,\n DoWeakSerializePlugin,\n IgnoreDOMElementsPlugin,\n LayerPlugin,\n lively.persistence.DatePlugin]\n});\n\nObject.extend(ObjectGraphLinearizer, {\n forNewLively: function() {\n var serializer = new ObjectGraphLinearizer();\n serializer.addPlugins(lively.persistence.getPluginsForLively());\n return serializer;\n },\n\n forNewLivelyCopy: function() {\n var serializer = this.forNewLively(),\n p = new GenericFilter(),\n world = lively.morphic.World.current();\n p.addFilter(function(obj, prop, value) { return value === world })\n serializer.addPlugins([p]);\n return serializer;\n }\n});\n\n\n// Proper namespacing\nObject.extend(lively.persistence, {\n ObjectGraphLinearizer: ObjectGraphLinearizer,\n ObjectLinearizerPlugin: ObjectLinearizerPlugin,\n ClassPlugin: ClassPlugin,\n LayerPlugin: LayerPlugin,\n StoreAndRestorePlugin: StoreAndRestorePlugin,\n DoNotSerializePlugin: DoNotSerializePlugin,\n DoWeakSerializePlugin: DoWeakSerializePlugin,\n LivelyWrapperPlugin: LivelyWrapperPlugin,\n IgnoreDOMElementsPlugin: IgnoreDOMElementsPlugin,\n RegExpPlugin: RegExpPlugin,\n OldModelFilter: OldModelFilter,\n DEPRECATEDScriptFilter: DEPRECATEDScriptFilter,\n ClosurePlugin: ClosurePlugin,\n IgnoreFunctionsPlugin: IgnoreFunctionsPlugin,\n GenericFilter: GenericFilter,\n ConversionPlugin: ConversionPlugin,\n AttributeConnectionPlugin: AttributeConnectionPlugin\n});\n\n}) // end of module\n","lastSyntaxHighlightTime":1330040660934,"styleClass":["Browser_codePaneText"],"focusHaloBorderWidth":0.5,"priorSelectionRange":[697,697],"showsHalos":false,"__LivelyClassName__":"lively.morphic.Text","__SourceModuleName__":"Global.lively.morphic.TextCore"},"1166":{"_Position":{"__isSmartRef__":true,"id":1167},"renderContextTable":{"__isSmartRef__":true,"id":1168},"_Extent":{"__isSmartRef__":true,"id":1169},"_ClipMode":"auto","_Padding":{"__isSmartRef__":true,"id":1170},"_BorderWidth":1,"_BorderColor":{"__isSmartRef__":true,"id":77},"_Fill":{"__isSmartRef__":true,"id":209},"__LivelyClassName__":"lively.morphic.Shapes.Rectangle","__SourceModuleName__":"Global.lively.morphic.Shapes"},"1167":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global.lively.morphic.Graphics"},"1168":{"init":"initHTML","appendShape":"renderHTML","setPosition":"setPositionHTML","setExtent":"setExtentHTML","setPadding":"setPaddingHTML","setFill":"setFillHTML","setBorderColor":"setBorderColorHTML","setBorderWidth":"setBorderWidthHTML","setStrokeOpacity":"setStrokeOpacityHTML","setBorderRadius":"setBorderRadiusHTML","setBorderStyle":"setBorderStyleHTML","setOpacity":"setOpacityHTML","setClipMode":"setClipModeHTML"},"1169":{"x":820,"y":302.5,"__LivelyClassName__":"Point","__SourceModuleName__":"Global.lively.morphic.Graphics"},"1170":{"x":5,"y":5,"width":0,"height":0,"__LivelyClassName__":"Rectangle","__SourceModuleName__":"Global.lively.morphic.Graphics"},"1171":{"replaceRenderContext":"replaceRenderContextHTML","init":"initHTML","append":"appendHTML","remove":"removeHTML","triggerEvent":"triggerEventHTML","setTransform":"setTransformHTML","setPosition":"setPositionHTML","setRotation":"setRotationHTML","setExtent":"setExtentHTML","setScale":"setScaleHTML","setVisible":"setVisibleHTML","adjustOrigin":"adjustOriginHTML","setPivotPoint":"setPivotPointHTML","setClipMode":"setClipModeHTML","showsVerticalScrollBar":"showsVerticalScrollBarHTML","showsHorizontalScrollBar":"showsHorizontalScrollBarHTML","getScrollBarExtent":"getScrollBarExtentHTML","setHandStyle":"setHandStyleHTML","setPointerEvents":"setPointerEventsHTML","setToolTip":"setToolTipHTML","focus":"focusHTML","blur":"blurHTML","setFocusable":"setFocusableHTML","updateText":"updateTextHTML","setTextExtent":"setTextExtentHTML","setMaxTextWidth":"setMaxTextWidthHTML","setMaxTextHeight":"setMaxTextHeightHTML","setMinTextWidth":"setMinTextWidthHTML","setMinTextHeight":"setMinTextHeightHTML","getTextExtent":"getTextExtentHTML","getTextString":"getTextStringHTML","ignoreTextEvents":"ignoreTextEventsHTML","unignoreTextEvents":"unignoreTextEventsHTML","enableTextEvents":"enableTextEventsHTML","setFontFamily":"setFontFamilyHTML","setFontSize":"setFontSizeHTML","setTextColor":"setTextColorHTML","setPadding":"setPaddingHTML","setAlign":"setAlignHTML","setVerticalAlign":"setVerticalAlignHTML","setDisplay":"setDisplayHTML","setWhiteSpaceHandling":"setWhiteSpaceHandlingHTML","focusMorph":"focusMorphHTML"},"1172":{"style":{"__isSmartRef__":true,"id":1173},"chunkOwner":{"__isSmartRef__":true,"id":1165},"storedString":"/*\n * Copyright (c) 2008-2012 Hasso Plattner Institute\n *\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\nmodule('lively.persistence.Serializer').requires().toRun(function() {\n\nObject.subclass('ObjectGraphLinearizer',\n'settings', {\n defaultCopyDepth: 100,\n keepIds: Config.keepSerializerIds || false,\n showLog: false,\n prettyPrint: false\n},\n'initializing', {\n initialize: function() {\n this.idCounter = 0;\n this.registry = {};\n this.plugins = [];\n this.copyDepth = 0;\n this.path = [];\n },\n cleanup: function() {\n // remove ids from all original objects and the original objects as well as any recreated objects\n for (var id in this.registry) {\n var entry = this.registry[id];\n if (!this.keepIds && entry.originalObject)\n delete entry.originalObject[this.idProperty]\n if (!this.keepIds && entry.recreatedObject)\n delete entry.recreatedObject[this.idProperty]\n delete entry.originalObject;\n delete entry.recreatedObject;\n }\n },\n},\n'testing', {\n isReference: function(obj) { return obj && obj.__isSmartRef__ },\n isValueObject: function(obj) {\n if (obj == null) return true;\n if ((typeof obj !== 'object') && (typeof obj !== 'function')) return true;\n if (this.isReference(obj)) return true;\n return false\n },\n},\n'accessing', {\n idProperty: '__SmartId__',\n escapedCDATAEnd: '<=CDATAEND=>',\n CDATAEnd: '\\]\\]\\>',\n\n newId: function() { return this.idCounter++ },\n getIdFromObject: function(obj) {\n return obj.hasOwnProperty(this.idProperty) ? obj[this.idProperty] : undefined;\n },\n getRegisteredObjectFromSmartRef: function(smartRef) {\n return this.getRegisteredObjectFromId(this.getIdFromObject(smartRef))\n },\n\n getRegisteredObjectFromId: function(id) {\n return this.registry[id] && this.registry[id].registeredObject\n },\n getRecreatedObjectFromId: function(id) {\n return this.registry[id] && this.registry[id].recreatedObject\n },\n setRecreatedObject: function(object, id) {\n var registryEntry = this.registry[id];\n if (!registryEntry)\n throw new Error('Trying to set recreated object in registry but cannot find registry entry!');\n registryEntry.recreatedObject = object\n },\n getRefFromId: function(id) {\n return this.registry[id] && this.registry[id].ref;\n },\n},\n'plugins', {\n addPlugin: function(plugin) {\n this.plugins.push(plugin);\n plugin.setSerializer(this);\n return this;\n },\n addPlugins: function(plugins) {\n plugins.forEach(function(ea) { this.addPlugin(ea) }, this);\n return this;\n },\n somePlugin: function(methodName, args) {\n // invoke all plugins with methodName and return the first non-undefined result (or null)\n\n for (var i = 0; i < this.plugins.length; i++) {\n var plugin = this.plugins[i],\n pluginMethod = plugin[methodName];\n if (!pluginMethod) continue;\n var result = pluginMethod.apply(plugin, args);\n if (result) return result\n }\n return null;\n },\n letAllPlugins: function(methodName, args) {\n // invoke all plugins with methodName and args\n for (var i = 0; i < this.plugins.length; i++) {\n var plugin = this.plugins[i],\n pluginMethod = plugin[methodName];\n if (!pluginMethod) continue;\n pluginMethod.apply(plugin, args);\n }\n },\n},\n'object registry -- serialization', {\n register: function(obj) {\n if (this.isValueObject(obj))\n return obj;\n\n if (Object.isArray(obj)) {\n var result = [];\n for (var i = 0; i < obj.length; i++) {\n this.path.push(i); // for debugging\n var item = obj[i];\n\n if (this.somePlugin('ignoreProp', [obj, i, item])) continue;\n result.push(this.register(item));\n this.path.pop();\n }\n return result;\n }\n\n var id = this.addIdAndAddToRegistryIfNecessary(obj);\n return this.registry[id].ref;\n },\n addIdAndAddToRegistryIfNecessary: function(obj) {\n var id = this.getIdFromObject(obj);\n if (id === undefined) id = this.addIdToObject(obj);\n if (!this.registry[id]) this.addNewRegistryEntry(id, obj)\n return id\n },\n addNewRegistryEntry: function(id, obj) {\n // copyObjectAndRegisterReferences must be done AFTER setting the registry entry\n // to allow reference cycles\n var entry = this.createRegistryEntry(obj, null/*set registered obj later*/, id);\n this.registry[id] = entry;\n entry.registeredObject = this.copyObjectAndRegisterReferences(obj)\n return entry\n },\n createRegistryEntry: function(realObject, registeredObject, id) {\n return {\n originalObject: realObject || null,\n registeredObject: registeredObject || null, // copy of original with replaced refs\n recreatedObject: null, // new created object with patched refs\n ref: {__isSmartRef__: true, id: id},\n }\n },\n copyObjectAndRegisterReferences: function(obj) {\n if (this.copyDepth > this.defaultCopyDepth) {\n alert(\"Error in copyObjectAndRegisterReferences, path: \" + this.path);\n throw new Error('Stack overflow while registering objects? ' + obj)\n }\n this.copyDepth++;\n var copy = {},\n source = this.somePlugin('serializeObj', [obj, copy]) || obj;\n for (var key in source) {\n if (!source.hasOwnProperty(key) || (key === this.idProperty && !this.keepIds)) continue;\n var value = source[key];\n if (this.somePlugin('ignoreProp', [source, key, value])) continue;\n this.path.push(key); // for debugging\n copy[key] = this.register(value);\n this.path.pop();\n }\n this.letAllPlugins('additionallySerialize', [source, copy]);\n this.copyDepth--;\n return copy;\n },\n},\n'object registry -- deserialization', {\n recreateFromId: function(id) {\n var recreated = this.getRecreatedObjectFromId(id);\n if (recreated) return recreated;\n\n // take the registered object (which has unresolveed references) and\n // create a new similiar object with patched references\n var registeredObj = this.getRegisteredObjectFromId(id),\n recreated = this.somePlugin('deserializeObj', [registeredObj]) || {};\n this.setRecreatedObject(recreated, id); // important to set recreated before patching refs!\n for (var key in registeredObj) {\n var value = registeredObj[key];\n if (this.somePlugin('ignorePropDeserialization', [registeredObj, key, value])) continue;\n this.path.push(key); // for debugging\n recreated[key] = this.patchObj(value);\n this.path.pop();\n };\n this.letAllPlugins('afterDeserializeObj', [recreated]);\n return recreated;\n },\n patchObj: function(obj) {\n if (this.isReference(obj))\n return this.recreateFromId(obj.id)\n\n if (Object.isArray(obj))\n return obj.collect(function(item, idx) {\n this.path.push(idx); // for debugging\n var result = this.patchObj(item);\n this.path.pop();\n return result;\n }, this)\n\n return obj;\n },\n},\n'serializing', {\n serialize: function(obj) {\n var time = new Date().getTime();\n var root = this.serializeToJso(obj);\n Config.lastSaveLinearizationTime = new Date().getTime() - time;\n time = new Date().getTime();\n var json = this.stringifyJSO(root);\n Config.lastSaveSerializationTime = new Date().getTime() - time;\n return json;\n },\n serializeToJso: function(obj) {\n try {\n var start = new Date();\n var ref = this.register(obj);\n this.letAllPlugins('serializationDone', [this.registry]);\n var simplifiedRegistry = this.simplifyRegistry(this.registry);\n var root = {id: ref.id, registry: simplifiedRegistry};\n this.log('Serializing done in ' + (new Date() - start) + 'ms');\n return root;\n } catch (e) {\n this.log('Cannot serialize ' + obj + ' because ' + e + '\\n' + e.stack);\n return null;\n } finally {\n this.cleanup();\n }\n },\n simplifyRegistry: function(registry) {\n var simplified = {isSimplifiedRegistry: true};\n for (var id in registry)\n simplified[id] = this.getRegisteredObjectFromId(id)\n return simplified;\n },\n addIdToObject: function(obj) { return obj[this.idProperty] = this.newId() },\n stringifyJSO: function(jso) {\n var str = this.prettyPrint ? JSON.prettyPrint(jso) : JSON.stringify(jso),\n regex = new RegExp(this.CDATAEnd, 'g');\n str = str.replace(regex, this.escapedCDATAEnd);\n return str\n },\n reset: function() {\n this.registry = {};\n },\n},\n'deserializing',{\n deserialize: function(json) {\n var jso = this.parseJSON(json);\n return this.deserializeJso(jso);\n },\n deserializeJso: function(jsoObj) {\n var start = new Date(),\n id = jsoObj.id;\n this.registry = this.createRealRegistry(jsoObj.registry);\n var result = this.recreateFromId(id);\n this.letAllPlugins('deserializationDone');\n this.cleanup();\n this.log('Deserializing done in ' + (new Date() - start) + 'ms');\n return result;\n },\n parseJSON: function(json) {\n return this.constructor.parseJSON(json);\n },\n createRealRegistry: function(registry) {\n if (!registry.isSimplifiedRegistry) return registry;\n var realRegistry = {};\n for (var id in registry)\n realRegistry[id] = this.createRegistryEntry(null, registry[id], id);\n return realRegistry;\n },\n},\n'copying', {\n copy: function(obj) {\n var rawCopy = this.serializeToJso(obj);\n if (!rawCopy) throw new Error('Cannot copy ' + obj)\n return this.deserializeJso(rawCopy);\n },\n},\n'debugging', {\n log: function(msg) {\n if (!this.showLog) return;\n Global.lively.morphic.World && lively.morphic.World.current() ?\n lively.morphic.World.current().setStatusMessage(msg, Color.blue, 6) :\n console.log(msg);\n },\n getPath: function() { return '[\"' + this.path.join('\"][\"') + '\"]' },\n});\n\nObject.extend(ObjectGraphLinearizer, {\n forLively: function() {\n return this.withPlugins([\n new DEPRECATEDScriptFilter(),\n new ClosurePlugin(),\n new RegExpPlugin(),\n new IgnoreFunctionsPlugin(),\n new ClassPlugin(),\n new LivelyWrapperPlugin(),\n new DoNotSerializePlugin(),\n new DoWeakSerializePlugin(),\n new StoreAndRestorePlugin(),\n new OldModelFilter(),\n new LayerPlugin(),\n new lively.persistence.DatePlugin()\n ]);\n },\n forLivelyCopy: function() {\n var serializer = this.forLively();\n var p = new GenericFilter();\n var world = lively.morphic.World.current();\n p.addFilter(function(obj, prop, value) { return value === world })\n serializer.addPlugins([p]);\n return serializer;\n },\n withPlugins: function(plugins) {\n var serializer = new ObjectGraphLinearizer();\n serializer.addPlugins(plugins);\n return serializer;\n },\n allRegisteredObjectsDo: function(registryObj, func, context) {\n for (var id in registryObj) {\n var registeredObject = registryObj[id];\n if (!registryObj.isSimplifiedRegistry)\n registeredObject = registeredObject.registeredObject;\n func.call(context || Global, id, registeredObject)\n }\n },\n parseJSON: function(json) {\n if (typeof json !== 'string') return json; // already is JSO?\n var regex = new RegExp(this.prototype.escapedCDATAEnd, 'g'),\n converted = json.replace(regex, this.prototype.CDATAEnd);\n return JSON.parse(converted);\n },\n\n});\n\nObject.subclass('ObjectLinearizerPlugin',\n'accessing', {\n getSerializer: function() { return this.serializer },\n setSerializer: function(s) { this.serializer = s },\n},\n'plugin interface', {\n /* interface methods that can be reimplemented by subclasses:\n serializeObj: function(original) {},\n additionallySerialize: function(original, persistentCopy) {},\n deserializeObj: function(persistentCopy) {},\n ignoreProp: function(obj, propName, value) {},\n ignorePropDeserialization: function(obj, propName, value) {},\n afterDeserializeObj: function(obj) {},\n deserializationDone: function() {},\n serializationDone: function(registry) {},\n */\n});\n\nObjectLinearizerPlugin.subclass('ClassPlugin',\n'properties', {\n isInstanceRestorer: true, // for Class.intializer\n classNameProperty: '__LivelyClassName__',\n sourceModuleNameProperty: '__SourceModuleName__',\n},\n'plugin interface', {\n additionallySerialize: function(original, persistentCopy) {\n this.addClassInfoIfPresent(original, persistentCopy);\n },\n deserializeObj: function(persistentCopy) {\n return this.restoreIfClassInstance(persistentCopy);\n },\n ignoreProp: function(obj, propName) {\n return propName == this.classNameProperty\n },\n ignorePropDeserialization: function(regObj, propName) {\n return this.classNameProperty === propName\n },\n afterDeserializeObj: function(obj) {\n this.removeClassInfoIfPresent(obj)\n },\n},\n'class info persistence', {\n addClassInfoIfPresent: function(original, persistentCopy) {\n // store class into persistentCopy if original is an instance\n if (!original || !original.constructor) return;\n var className = original.constructor.type;\n persistentCopy[this.classNameProperty] = className;\n var srcModule = original.constructor.sourceModule\n if (srcModule)\n persistentCopy[this.sourceModuleNameProperty] = srcModule.namespaceIdentifier;\n },\n restoreIfClassInstance: function(persistentCopy) {\n // if (!persistentCopy.hasOwnProperty[this.classNameProperty]) return;\n var className = persistentCopy[this.classNameProperty];\n if (!className) return;\n var klass = Class.forName(className);\n if (!klass || ! (klass instanceof Function)) {\n var msg = 'ObjectGraphLinearizer is trying to deserialize instance of ' +\n className + ' but this class cannot be found!';\n dbgOn(true);\n if (!Config.ignoreClassNotFound) throw new Error(msg);\n console.error(msg);\n lively.bindings.callWhenNotNull(lively.morphic.World, 'currentWorld', {warn: function(world) { world.alert(msg) }}, 'warn');\n return {isClassPlaceHolder: true, className: className, position: persistentCopy._Position};\n }\n return new klass(this);\n },\n removeClassInfoIfPresent: function(obj) {\n if (obj[this.classNameProperty])\n delete obj[this.classNameProperty];\n },\n},\n'searching', {\n sourceModulesIn: function(registryObj) {\n var moduleNames = [],\n partsBinRequiredModulesProperty = 'requiredModules',\n sourceModuleProperty = this.sourceModuleNameProperty;\n\n ObjectGraphLinearizer.allRegisteredObjectsDo(registryObj, function(id, value) {\n if (value[sourceModuleProperty])\n moduleNames.push(value[sourceModuleProperty]);\n if (value[partsBinRequiredModulesProperty])\n moduleNames.pushAll(value[partsBinRequiredModulesProperty]);\n })\n\n return moduleNames.reject(function(ea) {\n return ea.startsWith('Global.anonymous_') || ea.include('undefined') }).uniq();\n },\n});\n\nObjectLinearizerPlugin.subclass('LayerPlugin',\n'properties', {\n withLayersPropName: 'withLayers',\n withoutLayersPropName: 'withoutLayers'\n\n},\n'plugin interface', {\n additionallySerialize: function(original, persistentCopy) {\n this.serializeLayerArray(original, persistentCopy, this.withLayersPropName)\n this.serializeLayerArray(original, persistentCopy, this.withoutLayersPropName)\n },\n afterDeserializeObj: function(obj) {\n this.deserializeLayerArray(obj, this.withLayersPropName)\n this.deserializeLayerArray(obj, this.withoutLayersPropName)\n },\n ignoreProp: function(obj, propName, value) {\n return propName == this.withLayersPropName || propName == this.withoutLayersPropName;\n },\n},\n'helper',{\n serializeLayerArray: function(original, persistentCopy, propname) {\n var layers = original[propname]\n if (!layers || layers.length == 0) return;\n persistentCopy[propname] = layers.collect(function(ea) {\n return ea instanceof Layer ? ea.fullName() : ea })\n },\n deserializeLayerArray: function(obj, propname) {\n var layers = obj[propname];\n if (!layers || layers.length == 0) return;\n module('cop.Layers').load(true); // FIXME\n obj[propname] = layers.collect(function(ea) {\n console.log(ea)\n return Object.isString(ea) ? cop.create(ea, true) : ea;\n });\n },\n});\n\nObjectLinearizerPlugin.subclass('StoreAndRestorePlugin',\n'initializing', {\n initialize: function($super) {\n $super();\n this.restoreObjects = [];\n },\n},\n'plugin interface', {\n serializeObj: function(original, persistentCopy) {\n if (typeof original.onstore === 'function')\n original.onstore(persistentCopy);\n },\n afterDeserializeObj: function(obj) {\n if (typeof obj.onrestore === 'function')\n this.restoreObjects.push(obj);\n },\n deserializationDone: function() {\n this.restoreObjects.forEach(function(ea){\n try {\n ea.onrestore()\n } catch(e) {\n // be forgiving because a failure in an onrestore method should not break \n // the entire page\n console.error('Deserialization Error during runing onrestore in: ' + ea \n + '\\nError:' + e)\n } \n })\n },\n});\nObjectLinearizerPlugin.subclass('DoNotSerializePlugin',\n'testing', {\n doNotSerialize: function(obj, propName) {\n if (!obj.doNotSerialize) return false;\n var merged = Object.mergePropertyInHierarchy(obj, 'doNotSerialize');\n return merged.include(propName);\n },\n},\n'plugin interface', {\n ignoreProp: function(obj, propName, value) {\n return this.doNotSerialize(obj, propName);\n },\n});\n\nObjectLinearizerPlugin.subclass('DoWeakSerializePlugin',\n'initialization', {\n initialize: function($super) {\n $super();\n this.weakRefs = [];\n this.nonWeakObjs = []\n },\n},\n'testing', {\n doWeakSerialize: function(obj, propName) {\n if (!obj.doWeakSerialize) return false;\n var merged = Object.mergePropertyInHierarchy(obj, 'doWeakSerialize');\n return merged.include(propName);\n },\n},\n'plugin interface', {\n ignoreProp: function(obj, propName, value) {\n if(this.doWeakSerialize(obj, propName)){\n // remember weak reference to install it later if neccesary\n this.weakRefs.push({obj: obj, propName: propName, value: value})\n return true\n }\n return false\n },\n serializationDone: function(registry) {\n var serializer = this.getSerializer();\n this.weakRefs.forEach(function(ea) {\n var id = serializer.getIdFromObject(ea.value);\n if (id === undefined) return;\n var ownerId = serializer.getIdFromObject(ea.obj),\n persistentCopyFromOwner = serializer.getRegisteredObjectFromId(ownerId);\n persistentCopyFromOwner[ea.propName] = serializer.getRefFromId(id);\n })\n },\n additionallySerialize: function(obj, persistentCopy) {\n return;\n // 1. Save persistentCopy for future manipulation\n this.weakRefs.forEach(function(ea) {\n alertOK(\"ok\")\n if(ea.obj === obj) {\n ea.objCopy = persistentCopy;\n }\n\n // we maybe reached an object, which was marked weak?\n // alertOK(\"all \" + this.weakRefs.length)\n if (ea.value === obj) {\n // var source = this.getSerializer().register(ea.obj);\n var ref = this.getSerializer().register(ea.value);\n source[ea.propName]\n alertOK('got something:' + ea.propName + \" -> \" + printObject(ref))\n ea.objCopy[ea.propName] = ref\n\n LastEA = ea\n }\n }, this)\n },\n\n});\n\nObjectLinearizerPlugin.subclass('LivelyWrapperPlugin', // for serializing lively.data.Wrappers\n'names', {\n rawNodeInfoProperty: '__rawNodeInfo__',\n},\n'testing', {\n hasRawNode: function(obj) {\n // FIXME how to ensure that it's really a node? instanceof?\n return obj.rawNode && obj.rawNode.nodeType\n },\n},\n'plugin interface', {\n additionallySerialize: function(original, persistentCopy) {\n if (this.hasRawNode(original))\n this.captureRawNode(original, persistentCopy);\n },\n ignoreProp: function(obj, propName, value) {\n if (!value) return false;\n if (value.nodeType) return true; // FIXME dont serialize nodes\n if (value === Global) return true;\n return false;\n },\n afterDeserializeObj: function(obj) {\n this.restoreRawNode(obj);\n },\n},\n'rawNode handling', {\n captureRawNode: function(original, copy) {\n var attribs = $A(original.rawNode.attributes).collect(function(attr) {\n return {key: attr.name, value: attr.value, namespaceURI: attr.namespaceURI}\n })\n var rawNodeInfo = {\n tagName: original.rawNode.tagName,\n namespaceURI: original.rawNode.namespaceURI,\n attributes: attribs,\n };\n copy[this.rawNodeInfoProperty] = rawNodeInfo;\n },\n\n restoreRawNode: function(newObj) {\n var rawNodeInfo = newObj[this.rawNodeInfoProperty];\n if (!rawNodeInfo) return;\n delete newObj[this.rawNodeInfoProperty];\n var rawNode = document.createElementNS(rawNodeInfo.namespaceURI, rawNodeInfo.tagName);\n rawNodeInfo.attributes.forEach(function(attr) {\n rawNode.setAttributeNS(attr.namespaceURI, attr.key, attr.value);\n });\n newObj.rawNode = rawNode;\n },\n});\n\nObjectLinearizerPlugin.subclass('IgnoreDOMElementsPlugin', // for serializing lively.data.Wrappers\n'plugin interface', {\n ignoreProp: function(obj, propName, value) {\n if (!value) return false;\n if (value.nodeType) {\n // alert('trying to deserialize node ' + value + ' (pointer from ' + obj + '[' + propName + ']'\n // + '\\n path:' + this.serializer.getPath())\n return true;\n }\n if (value === Global) {\n alert('trying to deserialize Global (pointer from ' + obj + '[' + propName + ']'\n + '\\n path:' + this.serializer.getPath())\n return true;\n }\n return false;\n },\n});\n\nObjectLinearizerPlugin.subclass('RegExpPlugin',\n'accessing', {\n serializedRegExpProperty: '__regExp__',\n},\n'plugin interface', {\n serializeObj: function(original) {\n if (original instanceof RegExp)\n return this.serializeRegExp(original);\n },\n serializeRegExp: function(regExp) {\n var serialized = {};\n serialized[this.serializedRegExpProperty] = regExp.toString();\n return serialized;\n },\n\n deserializeObj: function(obj) {\n var serializedRegExp = obj[this.serializedRegExpProperty];\n if (!serializedRegExp) return null;\n delete obj[this.serializedRegExpProperty];\n try {\n return eval(serializedRegExp);\n } catch(e) {\n console.error('Cannot deserialize RegExp ' + e + '\\n' + e.stack);\n }\n },\n});\n\nObjectLinearizerPlugin.subclass('OldModelFilter',\n'initializing', {\n initialize: function($super) {\n $super();\n this.relays = [];\n },\n},\n'plugin interface', {\n ignoreProp: function(source, propName, value) {\n // if (propName === 'formalModel') return true;\n // if (value && value.constructor && value.constructor.name.startsWith('anonymous_')) return true;\n return false;\n },\n additionallySerialize: function(original, persistentCopy) {\n var klass = original.constructor;\n // FIX for IE9+ which does not implement Function.name\n if (!klass.name) {\n var n = klass.toString().match('^function\\s*([^(]*)\\\\(');\n klass.name = (n ? n[1].strip() : '');\n }\n if (!klass || !klass.name.startsWith('anonymous_')) return;\n ClassPlugin.prototype.removeClassInfoIfPresent(persistentCopy);\n var def = JSON.stringify(original.definition);\n def = def.replace(/[\\\\]/g, '')\n def = def.replace(/\"+\\{/g, '{')\n def = def.replace(/\\}\"+/g, '}')\n persistentCopy.definition = def;\n persistentCopy.isInstanceOfAnonymousClass = true;\n if (klass.superclass == Relay) {\n persistentCopy.isRelay = true;\n } else if (klass.superclass == PlainRecord) {\n persistentCopy.isPlainRecord = true;\n } else {\n alert('Cannot serialize model stuff of type ' + klass.superclass.type)\n }\n },\n afterDeserializeObj: function(obj) {\n // if (obj.isRelay) this.relays.push(obj);\n },\n deserializationDone: function() {\n // this.relays.forEach(function(relay) {\n // var def = JSON.parse(relay.definition);\n // })\n },\n deserializeObj: function(persistentCopy) {\n if (!persistentCopy.isInstanceOfAnonymousClass) return null;\n var instance;\n function createInstance(ctor, ctorMethodName, argIfAny) {\n var string = persistentCopy.definition, def;\n string = string.replace(/[\\\\]/g, '')\n string = string.replace(/\"+\\{/g, '{')\n string = string.replace(/\\}\"+/g, '}')\n try {\n def = JSON.parse(string);\n } catch(e) {\n console.error('Cannot correctly deserialize ' + ctor + '>>' + ctorMethodName + '\\n' + e);\n def = {};\n }\n return ctor[ctorMethodName](def, argIfAny)\n }\n\n if (persistentCopy.isRelay) {\n var delegate = this.getSerializer().patchObj(persistentCopy.delegate);\n instance = createInstance(Relay, 'newInstance', delegate);\n }\n\n if (persistentCopy.isPlainRecord) {\n instance = createInstance(Record, 'newPlainInstance');\n }\n\n if (!instance) alert('Cannot serialize old model object: ' + JSON.stringify(persistentCopy))\n return instance;\n },\n\n});\n\n\nObjectLinearizerPlugin.subclass('DEPRECATEDScriptFilter',\n'accessing', {\n serializedScriptsProperty: '__serializedScripts__',\n getSerializedScriptsFrom: function(obj) {\n if (!obj.hasOwnProperty(this.serializedScriptsProperty)) return null;\n return obj[this.serializedScriptsProperty]\n },\n},\n'plugin interface', {\n additionallySerialize: function(original, persistentCopy) {\n var scripts = {}, found = false;\n Functions.own(original).forEach(function(funcName) {\n var func = original[funcName];\n if (!func.isSerializable) return;\n found = true;\n scripts[funcName] = func.toString();\n });\n if (!found) return;\n persistentCopy[this.serializedScriptsProperty] = scripts;\n },\n afterDeserializeObj: function(obj) {\n var scripts = this.getSerializedScriptsFrom(obj);\n if (!scripts) return;\n Properties.forEachOwn(scripts, function(scriptName, scriptSource) {\n Function.fromString(scriptSource).asScriptOf(obj, scriptName);\n })\n delete obj[this.serializedScriptsProperty];\n },\n});\n\nObjectLinearizerPlugin.subclass('ClosurePlugin',\n'initializing', {\n initialize: function($super) {\n $super();\n this.objectsMethodNamesAndClosures = [];\n },\n},\n'accessing', {\n serializedClosuresProperty: '__serializedLivelyClosures__',\n getSerializedClosuresFrom: function(obj) {\n return obj.hasOwnProperty(this.serializedClosuresProperty) ?\n obj[this.serializedClosuresProperty] : null;\n },\n},\n'plugin interface', {\n serializeObj: function(closure) { // for serializing lively.Closures\n if (!closure || !closure.isLivelyClosure || closure.hasFuncSource()) return;\n if (closure.originalFunc)\n closure.setFuncSource(closure.originalFunc.toString());\n return closure;\n },\n additionallySerialize: function(original, persistentCopy) {\n var closures = {}, found = false;\n Functions.own(original).forEach(function(funcName) {\n var func = original[funcName];\n if (!func || !func.hasLivelyClosure) return;\n found = true;\n closures[funcName] = func.livelyClosure;\n });\n if (!found) return;\n // if we found closures, serialize closures object, this will also trigger\n // ClosurePlugin>>serializeObj for those closures\n persistentCopy[this.serializedClosuresProperty] = this.getSerializer().register(closures);\n },\n afterDeserializeObj: function(obj) {\n var closures = this.getSerializedClosuresFrom(obj);\n if (!closures) return;\n Properties.forEachOwn(closures, function(name, closure) {\n // we defer the recreation of the actual function so that all of the\n // function's properties are already deserialized\n if (closure instanceof lively.Closure) {\n // obj[name] = closure.recreateFunc();\n obj.__defineSetter__(name, function(v) { delete obj[name]; obj[name] = v });\n // in case the method is accessed or called before we are done with serializing\n // everything, we do an 'early recreation'\n obj.__defineGetter__(name, function() {\n // alert('early closure recreation ' + name)\n return closure.recreateFunc().addToObject(obj, name);\n })\n this.objectsMethodNamesAndClosures.push({obj: obj, name: name, closure: closure});\n }\n }, this);\n delete obj[this.serializedClosuresProperty];\n },\n deserializationDone: function() {\n this.objectsMethodNamesAndClosures.forEach(function(ea) {\n ea.closure.recreateFunc().addToObject(ea.obj, ea.name);\n })\n },\n});\n\nObjectLinearizerPlugin.subclass('IgnoreFunctionsPlugin',\n'interface', {\n ignoreProp: function(obj, propName, value) {\n return value && typeof value === 'function' && !value.isLivelyClosure && !(value instanceof RegExp);\n },\n});\n\nObjectLinearizerPlugin.subclass('lively.persistence.DatePlugin',\n'interface', {\n serializeObj: function(obj, copy) {\n return obj instanceof Date ? {isSerializedDate: true, string: String(obj)} : null;\n },\n deserializeObj: function(copy) {\n return copy && copy.isSerializedDate ? new Date(copy.string): null;\n },\n});\n\nObjectLinearizerPlugin.subclass('GenericFilter',\n// example\n// f = new GenericFilter()\n// f.addPropertyToIgnore('owner')\n//\n'initializing', {\n initialize: function($super) {\n $super();\n this.ignoredClasses = [];\n this.ignoredProperties = [];\n this.filterFunctions = [];\n },\n},\n'plugin interface', {\n addClassToIgnore: function(klass) {\n this.ignoredClasses.push(klass.type);\n },\n addPropertyToIgnore: function(name) {\n this.ignoredProperties.push(name);\n },\n\n addFilter: function(filterFunction) {\n this.filterFunctions.push(filterFunction);\n },\n ignoreProp: function(obj, propName, value) {\n return this.ignoredProperties.include(propName) ||\n (value && this.ignoredClasses.include(value.constructor.type)) ||\n this.filterFunctions.any(function(func) { return func(obj, propName, value) });\n },\n});\n\nObjectLinearizerPlugin.subclass('ConversionPlugin',\n'initializing', {\n initialize: function(deserializeFunc, afterDeserializeFunc) {\n this.deserializeFunc = deserializeFunc || Functions.Null;\n this.afterDeserializeFunc = afterDeserializeFunc || Functions.Null;\n this.objectLayouts = {}\n },\n},\n'object layout recording', {\n addObjectLayoutOf: function(obj) {\n var cName = this.getClassName(obj),\n layout = this.objectLayouts[cName] = this.objectLayouts[cName] || {};\n if (!layout.properties) layout.properties = [];\n layout.properties = layout.properties.concat(Properties.all(obj)).uniq();\n },\n printObjectLayouts: function() {\n var str = Properties.own(this.objectLayouts).collect(function(cName) {\n return cName + '\\n ' + this.objectLayouts[cName].properties.join('\\n ')\n }, this).join('\\n\\n')\n return str\n },\n},\n'accessing', {\n getClassName: function(obj) {\n return obj[ClassPlugin.prototype.classNameProperty]\n },\n},\n'plugin interface', {\n afterDeserializeObj: function(obj) {\n return this.afterDeserializeFunc.call(this, obj);\n },\n deserializeObj: function(rawObj) {\n var result = this.deserializeFunc.call(this, rawObj);\n this.addObjectLayoutOf(rawObj);\n return result;\n },\n},\n'registry', {\n patchRegistry: function(oldRegistry, jso) {\n return new ObjectGraphLinearizer().serializeToJso(jso)\n },\n registerWithPlugins: function(obj, plugins) {\n // for object conversion when objects need to register new ones during conversion\n var serializer = this.getSerializer();\n serializer.addPlugins(plugins);\n var id = serializer.register(obj);\n serializer.plugins = serializer.plugins.withoutAll(plugins);\n return id;\n },\n\n},\n'EXAMPLES', {\n convertHPICross: function() {\nJSON.prettyPrint(json)\njso = JSON.parse(json)\n\ndeserialize = function(obj) {\n var serializer = this.getSerializer();\n if (this.getClassName(obj) == 'Morph') {\n delete obj.pvtCachedTransform\n delete obj.__rawNodeInfo__\n obj._Position = obj.origin\n delete obj.origin\n obj._Rotation = obj.rotation\n delete obj.rotation\n obj._Scale = 1;\n delete obj.scalePoint\n delete obj.priorExtent\n obj.scripts = []\n obj.id = obj._livelyDataWrapperId_\n delete obj._livelyDataWrapperId_\n obj.__SourceModuleName__ = 'lively.morphic.Core'\n obj.__LivelyClassName__ = 'lively.morphic.Morph'\n\nobj.halosEnabled = true\nobj.droppingEnabled = true\n }\n if (this.getClassName(obj) == 'lively.scene.Rectangle') {\nif (obj.__rawNodeInfo__) {\n// var rawNodeInfo = serializer.getRegisteredObjectFromSmartRef(obj.__rawNodeInfo__)\nvar rawNodeInfo = obj.__rawNodeInfo__\nvar xAttr = rawNodeInfo.attributes.detect(function(ea) { return ea.key === 'x' })\nvar yAttr = rawNodeInfo.attributes.detect(function(ea) { return ea.key === 'y' })\nif (xAttr && yAttr)\n obj._Position = this.registerWithPlugins(pt(Number(xAttr.value), Number(yAttr.value)), [new ClassPlugin()])\nvar widthAttr = rawNodeInfo.attributes.detect(function(ea) { return ea.key === 'width' })\nvar heightAttr = rawNodeInfo.attributes.detect(function(ea) { return ea.key === 'height' })\nif (widthAttr && heightAttr )\n obj._Extent = this.registerWithPlugins(pt(Number(widthAttr.value), Number(heightAttr.value)), [new ClassPlugin()])\n\nvar attr = rawNodeInfo.attributes.detect(function(ea) { return ea.key === 'fill-opacity' })\nobj._FillOpacity = attr && Number(attr.value)\nvar attr = rawNodeInfo.attributes.detect(function(ea) { return ea.key === 'stroke-opacity' })\nobj._StrokeOpacity = attr && Number(attr.value)\nvar attr = rawNodeInfo.attributes.detect(function(ea) { return ea.key === 'stroke-width' })\nobj._BorderWidth = attr && Number(attr.value)\n}\n delete obj.__rawNodeInfo__\n obj._BorderColor = obj._stroke\n obj._Fill = obj._fill\n obj.id = obj._livelyDataWrapperId_\n delete obj._livelyDataWrapperId_\n obj.__SourceModuleName__ = 'lively.morphic.Shapes'\n obj.__LivelyClassName__ = 'lively.morphic.Shapes.Rectangle'\n }\n\n // return obj\n}\n\nconversionPlugin = new ConversionPlugin(deserialize)\nserializer = ObjectGraphLinearizer.withPlugins([conversionPlugin])\n// set id counter so new objects can be registered\nserializer.idCounter = Math.max.apply(null, Properties.all(jso.registry).collect(function(prop) { return Number(prop) || -1})) + 1\nconvertedRawObj = serializer.deserialize(jso)\nconversionPlugin.printObjectLayouts()\n\nconvertedRawObjRegistry = new ObjectGraphLinearizer().serializeToJso(convertedRawObj)\nobj = ObjectGraphLinearizer.forNewLively().deserializeJso(convertedRawObjRegistry)\n\nobj\nobj.prepareForNewRenderContext(obj.renderContext())\nobj.openInWorld()\n },\n});\n\nObjectLinearizerPlugin.subclass('AttributeConnectionPlugin',\n'plugin interface', {\n deserializeObj: function(persistentCopy) {\n var className = persistentCopy[ClassPlugin.prototype.classNameProperty];\n if (!className || className != 'AttributeConnection') return;\n },\n});\n\nObjectLinearizerPlugin.subclass('CopyOnlySubmorphsPlugin',\n'initializing', {\n initialize: function() {\n this.morphRefId = 0;\n this.idMorphMapping = {};\n this.root = 0;\n },\n},\n'copying', {\n copyAsMorphRef: function(morph) {\n var id = ++this.morphRefId;\n this.idMorphMapping[id] = morph;\n return {isCopyMorphRef: true, morphRefId: id};\n },\n},\n'plugin interface', {\n ignoreProp: function(obj, key, value) {\n if (!value || !this.root || !this.root.isMorph) return false;\n return value === this.root.owner;\n },\n serializeObj: function(obj) {\n // if obj is a morph and the root obj that is copied is a morph then\n // copy this object only if it is a submorph of the root obj\n // otherwise the new copy should directly reference the object\n return (!obj || !this.root || !this.root.isMorph || obj === this.root || !obj.isMorph || !obj.isSubmorphOf || obj.isSubmorphOf(this.root) || !obj.world()) ? null : this.copyAsMorphRef(obj);\n },\n deserializeObj: function(persistentCopy) {\n return persistentCopy.isCopyMorphRef ? this.idMorphMapping[persistentCopy.morphRefId] : undefined;\n },\n});\n\nObjectLinearizerPlugin.subclass('IgnoreEpiMorphsPlugin',\n'plugin interface', {\n ignoreProp: function(obj, key, value) { return value && value.isEpiMorph },\n});\n\n// (de)serialize objects that inherit stuff from a constructor function\nObjectLinearizerPlugin.subclass('lively.persistence.GenericConstructorPlugin',\n'accessing', {\n constructorProperty: '__constructorName__',\n\n getConstructorName: function(obj) {\n return obj && obj.constructor && obj.constructor.name;\n },\n\n isLivelyClassInstance: function(obj) {\n return obj && obj.constructor && obj.constructor.type !== undefined;\n }\n},\n'plugin interface', {\n\n additionallySerialize: function(original, persistentCopy) {\n var name = this.getConstructorName(original);\n if (name && name !== 'Object' && !this.isLivelyClassInstance(original)) {\n persistentCopy[this.constructorProperty] = name;\n return true;\n }\n return false;\n },\n\n deserializeObj: function(persistentCopy) {\n var name = persistentCopy[this.constructorProperty],\n constr = name && Class.forName(name);\n if (!constr) return undefined;\n // we use a new constructor function instead of the real constructor\n // here so that we don't need to know any arguments that might be expected\n // by the original constructor. To correctly make inheritance work\n // (instanceof and .constructor) we set the prototype property of our helper\n // constructor to the real constructor.prototype\n function HelperConstructor() {};\n HelperConstructor.prototype = constr.prototype;\n return new HelperConstructor();\n }\n});\n\nObject.extend(lively.persistence.Serializer, {\n\n jsonWorldId: 'LivelyJSONWorld',\n changeSetElementId: 'WorldChangeSet',\n\n createObjectGraphLinearizer: function() {\n return Config.isNewMorphic ? ObjectGraphLinearizer.forNewLively() : ObjectGraphLinearizer.forLively()\n },\n\n createObjectGraphLinearizerForCopy: function() {\n return Config.isNewMorphic ? ObjectGraphLinearizer.forNewLivelyCopy() : ObjectGraphLinearizer.forLivelyCopy()\n },\n\n serialize: function(obj, optPlugins, optSerializer) {\n var serializer = optSerializer || this.createObjectGraphLinearizer();\n if (optPlugins) optPlugins.forEach(function(plugin) { serializer.addPlugin(plugin) });\n var json = serializer.serialize(obj);\n return json;\n },\n\n serializeWorld: function(world) {\n var doc = new Importer().getBaseDocument(); // FIXME\n return this.serializeWorldToDocument(world, doc);\n },\n\n serializeWorldToDocument: function(world, doc) {\n return this.serializeWorldToDocumentWithSerializer(world, doc, this.createObjectGraphLinearizer());\n },\n\n serializeWorldToDocumentWithSerializer: function(world, doc, serializer) {\n // this helper object was introduced to make the code that is browser dependent\n // (currently IE9 vs the rest) easier to read. It sould be moved to dome general DOM abstraction layer\n var domAccess = {\n getSystemDictNode: function(doc) {\n return (doc.getElementById ?\n doc.getElementById('SystemDictionary') :\n doc.selectSingleNode('//*[@id=\"SystemDictionary\"]'));\n },\n createMetaNode: function(doc) {\n return UserAgent.isIE ? doc.createNode(1, 'meta', Namespace.XHTML) : XHTMLNS.create('meta')\n },\n getCSNode: function(doc, changeSet) {\n var changeSetNode;\n if (!changeSet) {\n alert('Found no ChangeSet while serializing ' + world + '! Adding an empty CS.');\n changeSetNode = LivelyNS.create('code');\n } else {\n changeSetNode = cs.getXMLElement();\n }\n if (!UserAgent.isIE) return doc.importNode(changeSetNode, true);\n // mr: this is a real IE hack!\n var helperDoc = new ActiveXObject('MSXML2.DOMDocument.6.0');\n helperDoc.loadXML(new XMLSerializer().serializeToString(changeSetNode));\n return doc.importNode(helperDoc.firstChild, true);\n },\n getHeadNode: function(doc) {\n return doc.getElementsByTagName('head')[0] || doc.selectSingleNode('//*[\"head\"=name()]');\n },\n }\n\n var head = domAccess.getHeadNode(doc);\n\n // FIXME remove previous meta elements - is this really necessary?\n //var metaElement;\n //while (metaElement = doc.getElementsByTagName('meta')[0])\n // metaElement.parentNode.removeChild(metaElement)\n // removed 2012-01-5 fabian\n // doing this instead: remove old serialized data.. is it necessary or not?\n // we need additional meta tags for better iPad touch support, can't remove all of them..\n var metaToBeRemoved = ['LivelyMigrationLevel', 'WorldChangeSet', 'LivelyJSONWorld'];\n metaToBeRemoved.forEach(function(ea) {\n var element = doc.getElementById(ea);\n if (element) {\n element.parentNode.removeChild(element);\n }});\n\n\n // FIXME remove system dictionary\n var sysDict = domAccess.getSystemDictNode(doc);\n if (sysDict) sysDict.parentNode.removeChild(sysDict);\n\n // store migration level\n var migrationLevel = LivelyMigrationSupport.migrationLevel,\n migrationLevelNode = domAccess.createMetaNode(doc);\n migrationLevelNode.setAttribute('id', LivelyMigrationSupport.migrationLevelNodeId);\n migrationLevelNode.appendChild(doc.createCDATASection(migrationLevel));\n head.appendChild(migrationLevelNode);\n\n // serialize changeset\n var cs = world.getChangeSet(),\n csElement = domAccess.getCSNode(doc, cs),\n metaCSNode = domAccess.createMetaNode(doc);\n metaCSNode.setAttribute('id', this.changeSetElementId);\n metaCSNode.appendChild(csElement);\n head.appendChild(metaCSNode);\n\n // serialize world\n var json = this.serialize(world, null, serializer),\n metaWorldNode = domAccess.createMetaNode(doc);\n if (!json) throw new Error('Cannot serialize world -- serialize returned no JSON!');\n metaWorldNode.setAttribute('id', this.jsonWorldId)\n metaWorldNode.appendChild(doc.createCDATASection(json))\n head.appendChild(metaWorldNode);\n\n return doc;\n },\n deserialize: function(json, optDeserializer) {\n var deserializer = optDeserializer || this.createObjectGraphLinearizer();\n var obj = deserializer.deserialize(json);\n return obj;\n },\n\n deserializeWorldFromDocument: function(doc) {\n var worldMetaElement = doc.getElementById(this.jsonWorldId);\n if (!worldMetaElement)\n throw new Error('Cannot find JSONified world when deserializing');\n var serializer = this.createObjectGraphLinearizer(),\n json = worldMetaElement.textContent,\n world = serializer.deserialize(json);\n return world;\n },\n\n deserializeWorldFromJso: function(jso) {\n var serializer = this.createObjectGraphLinearizer(),\n world = serializer.deserializeJso(jso);\n return world;\n },\n\n deserializeChangeSetFromDocument: function(doc) {\n var csMetaElement = doc.getElementById(this.changeSetElementId);\n if (!csMetaElement)\n throw new Error('Cannot find ChangeSet meta element when deserializing');\n return ChangeSet.fromNode(csMetaElement);\n },\n\n sourceModulesIn: function(jso) {\n return new ClassPlugin().sourceModulesIn(jso.registry);\n },\n\n parseJSON: function(json) {\n return ObjectGraphLinearizer.parseJSON(json);\n },\n\n copyWithoutWorld: function(obj) {\n var serializer = this.createObjectGraphLinearizerForCopy(),\n dontCopyWorldPlugin = new GenericFilter();\n dontCopyWorldPlugin.addFilter(function(obj, propName, value) { return value === lively.morphic.World.current() })\n serializer.addPlugin(dontCopyWorldPlugin);\n var copy = serializer.copy(obj);\n return copy;\n },\n\n newMorphicCopy: function(obj) {\n var serializer = this.createObjectGraphLinearizerForCopy();\n serializer.showLog = false;\n var copyPlugin = new CopyOnlySubmorphsPlugin();\n copyPlugin.root = obj;\n serializer.addPlugin(copyPlugin);\n return serializer.copy(obj);\n },\n});\n\nObject.extend(lively.persistence, {\n getPluginsForLively: function() {\n return this.pluginsForLively.collect(function(klass) {\n return new klass();\n })\n },\n\n pluginsForLively: [\n StoreAndRestorePlugin,\n ClosurePlugin,\n RegExpPlugin,\n IgnoreFunctionsPlugin,\n ClassPlugin,\n IgnoreEpiMorphsPlugin,\n DoNotSerializePlugin,\n DoWeakSerializePlugin,\n IgnoreDOMElementsPlugin,\n LayerPlugin,\n lively.persistence.DatePlugin]\n});\n\nObject.extend(ObjectGraphLinearizer, {\n forNewLively: function() {\n var serializer = new ObjectGraphLinearizer();\n serializer.addPlugins(lively.persistence.getPluginsForLively());\n return serializer;\n },\n\n forNewLivelyCopy: function() {\n var serializer = this.forNewLively(),\n p = new GenericFilter(),\n world = lively.morphic.World.current();\n p.addFilter(function(obj, prop, value) { return value === world })\n serializer.addPlugins([p]);\n return serializer;\n }\n});\n\n\n// Proper namespacing\nObject.extend(lively.persistence, {\n ObjectGraphLinearizer: ObjectGraphLinearizer,\n ObjectLinearizerPlugin: ObjectLinearizerPlugin,\n ClassPlugin: ClassPlugin,\n LayerPlugin: LayerPlugin,\n StoreAndRestorePlugin: StoreAndRestorePlugin,\n DoNotSerializePlugin: DoNotSerializePlugin,\n DoWeakSerializePlugin: DoWeakSerializePlugin,\n LivelyWrapperPlugin: LivelyWrapperPlugin,\n IgnoreDOMElementsPlugin: IgnoreDOMElementsPlugin,\n RegExpPlugin: RegExpPlugin,\n OldModelFilter: OldModelFilter,\n DEPRECATEDScriptFilter: DEPRECATEDScriptFilter,\n ClosurePlugin: ClosurePlugin,\n IgnoreFunctionsPlugin: IgnoreFunctionsPlugin,\n GenericFilter: GenericFilter,\n ConversionPlugin: ConversionPlugin,\n AttributeConnectionPlugin: AttributeConnectionPlugin\n});\n\n}) // end of module\n","__LivelyClassName__":"lively.morphic.TextChunk","__SourceModuleName__":"Global.lively.morphic.TextCore"},"1173":{"__LivelyClassName__":"lively.morphic.TextEmphasis","__SourceModuleName__":"Global.lively.morphic.TextCore"},"1174":{"morph":{"__isSmartRef__":true,"id":1165},"__LivelyClassName__":"lively.morphic.EventHandler","__SourceModuleName__":"Global.lively.morphic.Events"},"1175":{"x":0,"y":247.5,"__LivelyClassName__":"Point","__SourceModuleName__":"Global.lively.morphic.Graphics"},"1176":{"x":820,"y":302.5,"__LivelyClassName__":"Point","__SourceModuleName__":"Global.lively.morphic.Graphics"},"1177":{"resizeWidth":true,"resizeHeight":true},"1178":{"sourceObj":{"__isSmartRef__":true,"id":1165},"sourceAttrName":"textString","targetObj":{"__isSmartRef__":true,"id":1165},"targetMethodName":"highlightJavaScriptSyntax","__LivelyClassName__":"AttributeConnection","__SourceModuleName__":"Global.lively.bindings"},"1179":{"sourceObj":{"__isSmartRef__":true,"id":1165},"sourceAttrName":"savedTextString","targetObj":{"__isSmartRef__":true,"id":384},"targetMethodName":"setSourceString","converter":null,"converterString":null,"updater":null,"updaterString":null,"varMapping":{"__isSmartRef__":true,"id":1180},"__LivelyClassName__":"AttributeConnection","__SourceModuleName__":"Global.lively.bindings"},"1180":{"source":{"__isSmartRef__":true,"id":1165},"target":{"__isSmartRef__":true,"id":384}},"1181":{"source":{"__isSmartRef__":true,"id":384},"target":{"__isSmartRef__":true,"id":1165}},"1182":{"sourceObj":{"__isSmartRef__":true,"id":384},"sourceAttrName":"targetURL","targetObj":{"__isSmartRef__":true,"id":371},"targetMethodName":"setTextString","converter":null,"converterString":null,"updaterString":"function ($upd, value) { value && $upd(String(value)) }","varMapping":{"__isSmartRef__":true,"id":1183},"__serializedLivelyClosures__":{"__isSmartRef__":true,"id":1184},"__LivelyClassName__":"AttributeConnection","__SourceModuleName__":"Global.lively.bindings"},"1183":{"source":{"__isSmartRef__":true,"id":384},"target":{"__isSmartRef__":true,"id":371}},"1184":{"updater":{"__isSmartRef__":true,"id":1185}},"1185":{"originalFunc":null,"varMapping":{"__isSmartRef__":true,"id":1183},"source":"function ($upd, value) { value && $upd(String(value)) }","funcProperties":{"__isSmartRef__":true,"id":1186},"__LivelyClassName__":"lively.Closure","__SourceModuleName__":"Global.lively.lang.Closure"},"1186":{},"1187":{"protocol":"http:","hostname":"lively-kernel.org","pathname":"/repository/webwerkstatt/users/fbo/","__LivelyClassName__":"URL","__SourceModuleName__":"Global.lively.Network"},"1188":{"source":{"__isSmartRef__":true,"id":371},"target":{"__isSmartRef__":true,"id":384}},"1189":{"submorphs":[{"__isSmartRef__":true,"id":1190}],"scripts":[],"shape":{"__isSmartRef__":true,"id":1202},"derivationIds":[null],"id":"5D3D173F-8AE1-4269-BC77-04AA3AB4AF0D","renderContextTable":{"__isSmartRef__":true,"id":1207},"eventHandler":{"__isSmartRef__":true,"id":1208},"grabbingEnabled":false,"droppingEnabled":false,"halosEnabled":true,"_Position":{"__isSmartRef__":true,"id":1209},"priorExtent":{"__isSmartRef__":true,"id":1210},"value":false,"toggle":false,"isActive":true,"normalFill":{"__isSmartRef__":true,"id":104},"lighterFill":{"__isSmartRef__":true,"id":1211},"label":{"__isSmartRef__":true,"id":1190},"owner":{"__isSmartRef__":true,"id":370},"attributeConnections":[{"__isSmartRef__":true,"id":1220}],"doNotSerialize":["$$fire"],"doNotCopyProperties":["$$fire"],"layout":{"__isSmartRef__":true,"id":1222},"__LivelyClassName__":"lively.morphic.Button","__SourceModuleName__":"Global.lively.morphic.Widgets"},"1190":{"submorphs":[],"scripts":[],"shape":{"__isSmartRef__":true,"id":1191},"derivationIds":[null],"id":"6DA4785C-B287-4283-886E-7A84BF3B3FC5","renderContextTable":{"__isSmartRef__":true,"id":1196},"_WhiteSpaceHandling":"pre-wrap","textChunks":[{"__isSmartRef__":true,"id":1197}],"eventHandler":{"__isSmartRef__":true,"id":1199},"grabbingEnabled":false,"droppingEnabled":false,"halosEnabled":true,"_ClipMode":"hidden","fixedWidth":true,"fixedHeight":true,"allowInput":false,"_FontFamily":"Helvetica","_FontSize":10,"_Position":{"__isSmartRef__":true,"id":1200},"priorExtent":{"__isSmartRef__":true,"id":1201},"_MaxTextWidth":98.39999999999999,"_MinTextWidth":98.39999999999999,"_MaxTextHeight":null,"_MinTextHeight":null,"evalEnabled":false,"owner":{"__isSmartRef__":true,"id":1189},"isLabel":true,"_HandStyle":"default","_TextColor":{"__isSmartRef__":true,"id":77},"_Align":"center","eventsAreIgnored":true,"__LivelyClassName__":"lively.morphic.Text","__SourceModuleName__":"Global.lively.morphic.TextCore"},"1191":{"_Position":{"__isSmartRef__":true,"id":1192},"renderContextTable":{"__isSmartRef__":true,"id":1193},"_Extent":{"__isSmartRef__":true,"id":1194},"_ClipMode":"hidden","_Padding":{"__isSmartRef__":true,"id":1195},"_BorderWidth":0,"_BorderColor":{"__isSmartRef__":true,"id":77},"_Fill":null,"__LivelyClassName__":"lively.morphic.Shapes.Rectangle","__SourceModuleName__":"Global.lively.morphic.Shapes"},"1192":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global.lively.morphic.Graphics"},"1193":{"init":"initHTML","appendShape":"renderHTML","setPosition":"setPositionHTML","setExtent":"setExtentHTML","setPadding":"setPaddingHTML","setFill":"setFillHTML","setBorderColor":"setBorderColorHTML","setBorderWidth":"setBorderWidthHTML","setStrokeOpacity":"setStrokeOpacityHTML","setBorderRadius":"setBorderRadiusHTML","setBorderStyle":"setBorderStyleHTML","setOpacity":"setOpacityHTML","setClipMode":"setClipModeHTML"},"1194":{"x":98.39999999999999,"y":22,"__LivelyClassName__":"Point","__SourceModuleName__":"Global.lively.morphic.Graphics"},"1195":{"x":0,"y":0,"width":0,"height":0,"__LivelyClassName__":"Rectangle","__SourceModuleName__":"Global.lively.morphic.Graphics"},"1196":{"replaceRenderContext":"replaceRenderContextHTML","init":"initHTML","append":"appendHTML","remove":"removeHTML","triggerEvent":"triggerEventHTML","setTransform":"setTransformHTML","setPosition":"setPositionHTML","setRotation":"setRotationHTML","setExtent":"setExtentHTML","setScale":"setScaleHTML","setVisible":"setVisibleHTML","adjustOrigin":"adjustOriginHTML","setPivotPoint":"setPivotPointHTML","setClipMode":"setClipModeHTML","showsVerticalScrollBar":"showsVerticalScrollBarHTML","showsHorizontalScrollBar":"showsHorizontalScrollBarHTML","getScrollBarExtent":"getScrollBarExtentHTML","setHandStyle":"setHandStyleHTML","setPointerEvents":"setPointerEventsHTML","setToolTip":"setToolTipHTML","focus":"focusHTML","blur":"blurHTML","setFocusable":"setFocusableHTML","updateText":"updateTextHTML","setTextExtent":"setTextExtentHTML","setMaxTextWidth":"setMaxTextWidthHTML","setMaxTextHeight":"setMaxTextHeightHTML","setMinTextWidth":"setMinTextWidthHTML","setMinTextHeight":"setMinTextHeightHTML","getTextExtent":"getTextExtentHTML","getTextString":"getTextStringHTML","ignoreTextEvents":"ignoreTextEventsHTML","unignoreTextEvents":"unignoreTextEventsHTML","enableTextEvents":"enableTextEventsHTML","setFontFamily":"setFontFamilyHTML","setFontSize":"setFontSizeHTML","setTextColor":"setTextColorHTML","setPadding":"setPaddingHTML","setAlign":"setAlignHTML","setVerticalAlign":"setVerticalAlignHTML","setDisplay":"setDisplayHTML","setWhiteSpaceHandling":"setWhiteSpaceHandlingHTML","focusMorph":"focusMorphHTML"},"1197":{"style":{"__isSmartRef__":true,"id":1198},"chunkOwner":{"__isSmartRef__":true,"id":1190},"storedString":"codebase","__LivelyClassName__":"lively.morphic.TextChunk","__SourceModuleName__":"Global.lively.morphic.TextCore"},"1198":{"__LivelyClassName__":"lively.morphic.TextEmphasis","__SourceModuleName__":"Global.lively.morphic.TextCore"},"1199":{"morph":{"__isSmartRef__":true,"id":1190},"__LivelyClassName__":"lively.morphic.EventHandler","__SourceModuleName__":"Global.lively.morphic.Events"},"1200":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global.lively.morphic.Graphics"},"1201":{"x":98.39999999999999,"y":22,"__LivelyClassName__":"Point","__SourceModuleName__":"Global.lively.morphic.Graphics"},"1202":{"_Position":{"__isSmartRef__":true,"id":1203},"renderContextTable":{"__isSmartRef__":true,"id":1204},"_Extent":{"__isSmartRef__":true,"id":1205},"_ClipMode":"visible","_Padding":{"__isSmartRef__":true,"id":1206},"_BorderWidth":1,"_BorderColor":{"__isSmartRef__":true,"id":103},"_Fill":{"__isSmartRef__":true,"id":104},"_BorderRadius":5,"__LivelyClassName__":"lively.morphic.Shapes.Rectangle","__SourceModuleName__":"Global.lively.morphic.Shapes"},"1203":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global.lively.morphic.Graphics"},"1204":{"init":"initHTML","appendShape":"renderHTML","setPosition":"setPositionHTML","setExtent":"setExtentHTML","setPadding":"setPaddingHTML","setFill":"setFillHTML","setBorderColor":"setBorderColorHTML","setBorderWidth":"setBorderWidthHTML","setStrokeOpacity":"setStrokeOpacityHTML","setBorderRadius":"setBorderRadiusHTML","setBorderStyle":"setBorderStyleHTML","setOpacity":"setOpacityHTML","setClipMode":"setClipModeHTML"},"1205":{"x":98.39999999999999,"y":22,"__LivelyClassName__":"Point","__SourceModuleName__":"Global.lively.morphic.Graphics"},"1206":{"x":0,"y":0,"width":0,"height":0,"__LivelyClassName__":"Rectangle","__SourceModuleName__":"Global.lively.morphic.Graphics"},"1207":{"replaceRenderContext":"replaceRenderContextHTML","init":"initHTML","append":"appendHTML","remove":"removeHTML","triggerEvent":"triggerEventHTML","setTransform":"setTransformHTML","setPosition":"setPositionHTML","setRotation":"setRotationHTML","setExtent":"setExtentHTML","setScale":"setScaleHTML","setVisible":"setVisibleHTML","adjustOrigin":"adjustOriginHTML","setPivotPoint":"setPivotPointHTML","setClipMode":"setClipModeHTML","showsVerticalScrollBar":"showsVerticalScrollBarHTML","showsHorizontalScrollBar":"showsHorizontalScrollBarHTML","getScrollBarExtent":"getScrollBarExtentHTML","setHandStyle":"setHandStyleHTML","setPointerEvents":"setPointerEventsHTML","setToolTip":"setToolTipHTML","focus":"focusHTML","blur":"blurHTML","setFocusable":"setFocusableHTML"},"1208":{"morph":{"__isSmartRef__":true,"id":1189},"__LivelyClassName__":"lively.morphic.EventHandler","__SourceModuleName__":"Global.lively.morphic.Events"},"1209":{"x":656,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global.lively.morphic.Graphics"},"1210":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global.lively.morphic.Graphics"},"1211":{"stops":[{"__isSmartRef__":true,"id":1212},{"__isSmartRef__":true,"id":1214},{"__isSmartRef__":true,"id":1216},{"__isSmartRef__":true,"id":1218}],"vector":{"__isSmartRef__":true,"id":113},"__LivelyClassName__":"lively.morphic.LinearGradient","__SourceModuleName__":"Global.lively.morphic.Shapes"},"1212":{"offset":0,"color":{"__isSmartRef__":true,"id":1213}},"1213":{"r":0.98,"g":0.98,"b":0.98,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global.lively.morphic.Graphics"},"1214":{"offset":0.4,"color":{"__isSmartRef__":true,"id":1215}},"1215":{"r":0.91,"g":0.91,"b":0.91,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global.lively.morphic.Graphics"},"1216":{"offset":0.6,"color":{"__isSmartRef__":true,"id":1217}},"1217":{"r":0.91,"g":0.91,"b":0.91,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global.lively.morphic.Graphics"},"1218":{"offset":1,"color":{"__isSmartRef__":true,"id":1219}},"1219":{"r":0.97,"g":0.97,"b":0.97,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global.lively.morphic.Graphics"},"1220":{"sourceObj":{"__isSmartRef__":true,"id":1189},"sourceAttrName":"fire","targetObj":{"__isSmartRef__":true,"id":384},"targetMethodName":"setTargetURL","converter":null,"converterString":"function () { return URL.codeBase.withFilename('lively/')}","updater":null,"updaterString":null,"varMapping":{"__isSmartRef__":true,"id":1221},"__LivelyClassName__":"AttributeConnection","__SourceModuleName__":"Global.lively.bindings"},"1221":{"source":{"__isSmartRef__":true,"id":1189},"target":{"__isSmartRef__":true,"id":384}},"1222":{"moveHorizontal":true},"1223":{"submorphs":[{"__isSmartRef__":true,"id":1224}],"scripts":[],"shape":{"__isSmartRef__":true,"id":1236},"derivationIds":[null],"id":"E2B20EE1-3589-4E34-81B7-2EA0342A7986","renderContextTable":{"__isSmartRef__":true,"id":1241},"eventHandler":{"__isSmartRef__":true,"id":1242},"grabbingEnabled":false,"droppingEnabled":false,"halosEnabled":true,"_Position":{"__isSmartRef__":true,"id":1243},"priorExtent":{"__isSmartRef__":true,"id":1244},"value":false,"toggle":false,"isActive":true,"normalFill":{"__isSmartRef__":true,"id":104},"lighterFill":{"__isSmartRef__":true,"id":1245},"label":{"__isSmartRef__":true,"id":1224},"owner":{"__isSmartRef__":true,"id":370},"attributeConnections":[{"__isSmartRef__":true,"id":1254}],"doNotSerialize":["$$fire"],"doNotCopyProperties":["$$fire"],"layout":{"__isSmartRef__":true,"id":1259},"__LivelyClassName__":"lively.morphic.Button","__SourceModuleName__":"Global.lively.morphic.Widgets"},"1224":{"submorphs":[],"scripts":[],"shape":{"__isSmartRef__":true,"id":1225},"derivationIds":[null],"id":"5CD3FD3C-2338-4A86-AE65-FC449FFA1EFD","renderContextTable":{"__isSmartRef__":true,"id":1230},"_WhiteSpaceHandling":"pre-wrap","textChunks":[{"__isSmartRef__":true,"id":1231}],"eventHandler":{"__isSmartRef__":true,"id":1233},"grabbingEnabled":false,"droppingEnabled":false,"halosEnabled":true,"_ClipMode":"hidden","fixedWidth":true,"fixedHeight":true,"allowInput":false,"_FontFamily":"Helvetica","_FontSize":10,"_Position":{"__isSmartRef__":true,"id":1234},"priorExtent":{"__isSmartRef__":true,"id":1235},"_MaxTextWidth":65.6,"_MinTextWidth":65.6,"_MaxTextHeight":null,"_MinTextHeight":null,"evalEnabled":false,"owner":{"__isSmartRef__":true,"id":1223},"isLabel":true,"_HandStyle":"default","_TextColor":{"__isSmartRef__":true,"id":77},"_Align":"center","eventsAreIgnored":true,"__LivelyClassName__":"lively.morphic.Text","__SourceModuleName__":"Global.lively.morphic.TextCore"},"1225":{"_Position":{"__isSmartRef__":true,"id":1226},"renderContextTable":{"__isSmartRef__":true,"id":1227},"_Extent":{"__isSmartRef__":true,"id":1228},"_ClipMode":"hidden","_Padding":{"__isSmartRef__":true,"id":1229},"_BorderWidth":0,"_BorderColor":{"__isSmartRef__":true,"id":77},"_Fill":null,"__LivelyClassName__":"lively.morphic.Shapes.Rectangle","__SourceModuleName__":"Global.lively.morphic.Shapes"},"1226":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global.lively.morphic.Graphics"},"1227":{"init":"initHTML","appendShape":"renderHTML","setPosition":"setPositionHTML","setExtent":"setExtentHTML","setPadding":"setPaddingHTML","setFill":"setFillHTML","setBorderColor":"setBorderColorHTML","setBorderWidth":"setBorderWidthHTML","setStrokeOpacity":"setStrokeOpacityHTML","setBorderRadius":"setBorderRadiusHTML","setBorderStyle":"setBorderStyleHTML","setOpacity":"setOpacityHTML","setClipMode":"setClipModeHTML"},"1228":{"x":65.6,"y":22,"__LivelyClassName__":"Point","__SourceModuleName__":"Global.lively.morphic.Graphics"},"1229":{"x":0,"y":0,"width":0,"height":0,"__LivelyClassName__":"Rectangle","__SourceModuleName__":"Global.lively.morphic.Graphics"},"1230":{"replaceRenderContext":"replaceRenderContextHTML","init":"initHTML","append":"appendHTML","remove":"removeHTML","triggerEvent":"triggerEventHTML","setTransform":"setTransformHTML","setPosition":"setPositionHTML","setRotation":"setRotationHTML","setExtent":"setExtentHTML","setScale":"setScaleHTML","setVisible":"setVisibleHTML","adjustOrigin":"adjustOriginHTML","setPivotPoint":"setPivotPointHTML","setClipMode":"setClipModeHTML","showsVerticalScrollBar":"showsVerticalScrollBarHTML","showsHorizontalScrollBar":"showsHorizontalScrollBarHTML","getScrollBarExtent":"getScrollBarExtentHTML","setHandStyle":"setHandStyleHTML","setPointerEvents":"setPointerEventsHTML","setToolTip":"setToolTipHTML","focus":"focusHTML","blur":"blurHTML","setFocusable":"setFocusableHTML","updateText":"updateTextHTML","setTextExtent":"setTextExtentHTML","setMaxTextWidth":"setMaxTextWidthHTML","setMaxTextHeight":"setMaxTextHeightHTML","setMinTextWidth":"setMinTextWidthHTML","setMinTextHeight":"setMinTextHeightHTML","getTextExtent":"getTextExtentHTML","getTextString":"getTextStringHTML","ignoreTextEvents":"ignoreTextEventsHTML","unignoreTextEvents":"unignoreTextEventsHTML","enableTextEvents":"enableTextEventsHTML","setFontFamily":"setFontFamilyHTML","setFontSize":"setFontSizeHTML","setTextColor":"setTextColorHTML","setPadding":"setPaddingHTML","setAlign":"setAlignHTML","setVerticalAlign":"setVerticalAlignHTML","setDisplay":"setDisplayHTML","setWhiteSpaceHandling":"setWhiteSpaceHandlingHTML","focusMorph":"focusMorphHTML"},"1231":{"style":{"__isSmartRef__":true,"id":1232},"chunkOwner":{"__isSmartRef__":true,"id":1224},"storedString":"local","__LivelyClassName__":"lively.morphic.TextChunk","__SourceModuleName__":"Global.lively.morphic.TextCore"},"1232":{"__LivelyClassName__":"lively.morphic.TextEmphasis","__SourceModuleName__":"Global.lively.morphic.TextCore"},"1233":{"morph":{"__isSmartRef__":true,"id":1224},"__LivelyClassName__":"lively.morphic.EventHandler","__SourceModuleName__":"Global.lively.morphic.Events"},"1234":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global.lively.morphic.Graphics"},"1235":{"x":65.6,"y":22,"__LivelyClassName__":"Point","__SourceModuleName__":"Global.lively.morphic.Graphics"},"1236":{"_Position":{"__isSmartRef__":true,"id":1237},"renderContextTable":{"__isSmartRef__":true,"id":1238},"_Extent":{"__isSmartRef__":true,"id":1239},"_ClipMode":"visible","_Padding":{"__isSmartRef__":true,"id":1240},"_BorderWidth":1,"_BorderColor":{"__isSmartRef__":true,"id":103},"_Fill":{"__isSmartRef__":true,"id":104},"_BorderRadius":5,"__LivelyClassName__":"lively.morphic.Shapes.Rectangle","__SourceModuleName__":"Global.lively.morphic.Shapes"},"1237":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global.lively.morphic.Graphics"},"1238":{"init":"initHTML","appendShape":"renderHTML","setPosition":"setPositionHTML","setExtent":"setExtentHTML","setPadding":"setPaddingHTML","setFill":"setFillHTML","setBorderColor":"setBorderColorHTML","setBorderWidth":"setBorderWidthHTML","setStrokeOpacity":"setStrokeOpacityHTML","setBorderRadius":"setBorderRadiusHTML","setBorderStyle":"setBorderStyleHTML","setOpacity":"setOpacityHTML","setClipMode":"setClipModeHTML"},"1239":{"x":65.6,"y":22,"__LivelyClassName__":"Point","__SourceModuleName__":"Global.lively.morphic.Graphics"},"1240":{"x":0,"y":0,"width":0,"height":0,"__LivelyClassName__":"Rectangle","__SourceModuleName__":"Global.lively.morphic.Graphics"},"1241":{"replaceRenderContext":"replaceRenderContextHTML","init":"initHTML","append":"appendHTML","remove":"removeHTML","triggerEvent":"triggerEventHTML","setTransform":"setTransformHTML","setPosition":"setPositionHTML","setRotation":"setRotationHTML","setExtent":"setExtentHTML","setScale":"setScaleHTML","setVisible":"setVisibleHTML","adjustOrigin":"adjustOriginHTML","setPivotPoint":"setPivotPointHTML","setClipMode":"setClipModeHTML","showsVerticalScrollBar":"showsVerticalScrollBarHTML","showsHorizontalScrollBar":"showsHorizontalScrollBarHTML","getScrollBarExtent":"getScrollBarExtentHTML","setHandStyle":"setHandStyleHTML","setPointerEvents":"setPointerEventsHTML","setToolTip":"setToolTipHTML","focus":"focusHTML","blur":"blurHTML","setFocusable":"setFocusableHTML"},"1242":{"morph":{"__isSmartRef__":true,"id":1223},"__LivelyClassName__":"lively.morphic.EventHandler","__SourceModuleName__":"Global.lively.morphic.Events"},"1243":{"x":754.4,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global.lively.morphic.Graphics"},"1244":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global.lively.morphic.Graphics"},"1245":{"stops":[{"__isSmartRef__":true,"id":1246},{"__isSmartRef__":true,"id":1248},{"__isSmartRef__":true,"id":1250},{"__isSmartRef__":true,"id":1252}],"vector":{"__isSmartRef__":true,"id":113},"__LivelyClassName__":"lively.morphic.LinearGradient","__SourceModuleName__":"Global.lively.morphic.Shapes"},"1246":{"offset":0,"color":{"__isSmartRef__":true,"id":1247}},"1247":{"r":0.98,"g":0.98,"b":0.98,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global.lively.morphic.Graphics"},"1248":{"offset":0.4,"color":{"__isSmartRef__":true,"id":1249}},"1249":{"r":0.91,"g":0.91,"b":0.91,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global.lively.morphic.Graphics"},"1250":{"offset":0.6,"color":{"__isSmartRef__":true,"id":1251}},"1251":{"r":0.91,"g":0.91,"b":0.91,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global.lively.morphic.Graphics"},"1252":{"offset":1,"color":{"__isSmartRef__":true,"id":1253}},"1253":{"r":0.97,"g":0.97,"b":0.97,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global.lively.morphic.Graphics"},"1254":{"sourceObj":{"__isSmartRef__":true,"id":1223},"sourceAttrName":"fire","targetObj":{"__isSmartRef__":true,"id":384},"targetMethodName":"setTargetURL","converterString":"function () { return URL.source.getDirectory() }","updater":null,"updaterString":null,"varMapping":{"__isSmartRef__":true,"id":1255},"__serializedLivelyClosures__":{"__isSmartRef__":true,"id":1256},"__LivelyClassName__":"AttributeConnection","__SourceModuleName__":"Global.lively.bindings"},"1255":{"source":{"__isSmartRef__":true,"id":1223},"target":{"__isSmartRef__":true,"id":384}},"1256":{"converter":{"__isSmartRef__":true,"id":1257}},"1257":{"originalFunc":null,"varMapping":{"__isSmartRef__":true,"id":1255},"source":"function () { return URL.source.getDirectory() }","funcProperties":{"__isSmartRef__":true,"id":1258},"__LivelyClassName__":"lively.Closure","__SourceModuleName__":"Global.lively.lang.Closure"},"1258":{},"1259":{"moveHorizontal":true},"1260":{"submorphs":[],"scripts":[],"shape":{"__isSmartRef__":true,"id":1261},"derivationIds":[null],"id":"EDAEC03B-D1F3-4D07-9BEC-F321E5E6C542","renderContextTable":{"__isSmartRef__":true,"id":1267},"eventHandler":{"__isSmartRef__":true,"id":1268},"droppingEnabled":true,"halosEnabled":true,"draggingEnabled":true,"_Position":{"__isSmartRef__":true,"id":1269},"fixed":[{"__isSmartRef__":true,"id":386},{"__isSmartRef__":true,"id":421},{"__isSmartRef__":true,"id":456},{"__isSmartRef__":true,"id":491},{"__isSmartRef__":true,"id":526},{"__isSmartRef__":true,"id":561},{"__isSmartRef__":true,"id":596}],"scalingBelow":[{"__isSmartRef__":true,"id":1165}],"scalingAbove":[{"__isSmartRef__":true,"id":637},{"__isSmartRef__":true,"id":1004},{"__isSmartRef__":true,"id":1091},{"__isSmartRef__":true,"id":1130}],"minHeight":20,"pointerConnection":null,"owner":{"__isSmartRef__":true,"id":370},"styleClass":["Browser_resizer"],"__LivelyClassName__":"lively.morphic.HorizontalDivider","__SourceModuleName__":"Global.lively.morphic.Widgets"},"1261":{"_Position":{"__isSmartRef__":true,"id":1262},"renderContextTable":{"__isSmartRef__":true,"id":1263},"_Extent":{"__isSmartRef__":true,"id":1264},"_ClipMode":"visible","_Padding":{"__isSmartRef__":true,"id":1265},"_Fill":{"__isSmartRef__":true,"id":1266},"__LivelyClassName__":"lively.morphic.Shapes.Rectangle","__SourceModuleName__":"Global.lively.morphic.Shapes"},"1262":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global.lively.morphic.Graphics"},"1263":{"init":"initHTML","appendShape":"renderHTML","setPosition":"setPositionHTML","setExtent":"setExtentHTML","setPadding":"setPaddingHTML","setFill":"setFillHTML","setBorderColor":"setBorderColorHTML","setBorderWidth":"setBorderWidthHTML","setStrokeOpacity":"setStrokeOpacityHTML","setBorderRadius":"setBorderRadiusHTML","setBorderStyle":"setBorderStyleHTML","setOpacity":"setOpacityHTML","setClipMode":"setClipModeHTML"},"1264":{"x":820,"y":5.5,"__LivelyClassName__":"Point","__SourceModuleName__":"Global.lively.morphic.Graphics"},"1265":{"x":0,"y":0,"width":0,"height":0,"__LivelyClassName__":"Rectangle","__SourceModuleName__":"Global.lively.morphic.Graphics"},"1266":{"r":0.95,"g":0.95,"b":0.95,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global.lively.morphic.Graphics"},"1267":{"replaceRenderContext":"replaceRenderContextHTML","init":"initHTML","append":"appendHTML","remove":"removeHTML","triggerEvent":"triggerEventHTML","setTransform":"setTransformHTML","setPosition":"setPositionHTML","setRotation":"setRotationHTML","setExtent":"setExtentHTML","setScale":"setScaleHTML","setVisible":"setVisibleHTML","adjustOrigin":"adjustOriginHTML","setPivotPoint":"setPivotPointHTML","setClipMode":"setClipModeHTML","showsVerticalScrollBar":"showsVerticalScrollBarHTML","showsHorizontalScrollBar":"showsHorizontalScrollBarHTML","getScrollBarExtent":"getScrollBarExtentHTML","setHandStyle":"setHandStyleHTML","setPointerEvents":"setPointerEventsHTML","setToolTip":"setToolTipHTML","focus":"focusHTML","blur":"blurHTML","setFocusable":"setFocusableHTML"},"1268":{"morph":{"__isSmartRef__":true,"id":1260},"__LivelyClassName__":"lively.morphic.EventHandler","__SourceModuleName__":"Global.lively.morphic.Events"},"1269":{"x":0,"y":242,"__LivelyClassName__":"Point","__SourceModuleName__":"Global.lively.morphic.Graphics"},"1270":{"_Position":{"__isSmartRef__":true,"id":1271},"renderContextTable":{"__isSmartRef__":true,"id":1272},"_Extent":{"__isSmartRef__":true,"id":1273},"_ClipMode":"visible","_Padding":{"__isSmartRef__":true,"id":1274},"_Fill":{"__isSmartRef__":true,"id":1275},"__LivelyClassName__":"lively.morphic.Shapes.Rectangle","__SourceModuleName__":"Global.lively.morphic.Shapes"},"1271":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global.lively.morphic.Graphics"},"1272":{"init":"initHTML","appendShape":"renderHTML","setPosition":"setPositionHTML","setExtent":"setExtentHTML","setPadding":"setPaddingHTML","setFill":"setFillHTML","setBorderColor":"setBorderColorHTML","setBorderWidth":"setBorderWidthHTML","setStrokeOpacity":"setStrokeOpacityHTML","setBorderRadius":"setBorderRadiusHTML","setBorderStyle":"setBorderStyleHTML","setOpacity":"setOpacityHTML","setClipMode":"setClipModeHTML"},"1273":{"x":820,"y":550,"__LivelyClassName__":"Point","__SourceModuleName__":"Global.lively.morphic.Graphics"},"1274":{"x":0,"y":0,"width":0,"height":0,"__LivelyClassName__":"Rectangle","__SourceModuleName__":"Global.lively.morphic.Graphics"},"1275":{"r":0.9019607843137255,"g":0.9019607843137255,"b":0.9019607843137255,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global.lively.morphic.Graphics"},"1276":{"replaceRenderContext":"replaceRenderContextHTML","init":"initHTML","append":"appendHTML","remove":"removeHTML","triggerEvent":"triggerEventHTML","setTransform":"setTransformHTML","setPosition":"setPositionHTML","setRotation":"setRotationHTML","setExtent":"setExtentHTML","setScale":"setScaleHTML","setVisible":"setVisibleHTML","adjustOrigin":"adjustOriginHTML","setPivotPoint":"setPivotPointHTML","setClipMode":"setClipModeHTML","showsVerticalScrollBar":"showsVerticalScrollBarHTML","showsHorizontalScrollBar":"showsHorizontalScrollBarHTML","getScrollBarExtent":"getScrollBarExtentHTML","setHandStyle":"setHandStyleHTML","setPointerEvents":"setPointerEventsHTML","setToolTip":"setToolTipHTML","focus":"focusHTML","blur":"blurHTML","setFocusable":"setFocusableHTML"},"1277":{"morph":{"__isSmartRef__":true,"id":370},"__LivelyClassName__":"lively.morphic.EventHandler","__SourceModuleName__":"Global.lively.morphic.Events"},"1278":{"adjustForNewBounds":true,"resizeWidth":true,"resizeHeight":true},"1279":{"x":0,"y":21,"__SourceModuleName__":"Global.lively.morphic.Graphics","__LivelyClassName__":"Point"},"1280":{"renderContextTable":{"__isSmartRef__":true,"id":1281},"_ClipMode":"visible","_Padding":{"__isSmartRef__":true,"id":1282},"_BorderWidth":0,"_Fill":null,"_StrokeOpacity":0,"_BorderRadius":0,"_Extent":{"__isSmartRef__":true,"id":1283},"__SourceModuleName__":"Global.lively.morphic.Shapes","__LivelyClassName__":"lively.morphic.Shapes.Rectangle"},"1281":{"init":"initHTML","appendShape":"renderHTML","setPosition":"setPositionHTML","setExtent":"setExtentHTML","setPadding":"setPaddingHTML","setFill":"setFillHTML","setBorderColor":"setBorderColorHTML","setBorderWidth":"setBorderWidthHTML","setStrokeOpacity":"setStrokeOpacityHTML","setBorderRadius":"setBorderRadiusHTML","setBorderStyle":"setBorderStyleHTML","setOpacity":"setOpacityHTML","setClipMode":"setClipModeHTML"},"1282":{"x":0,"y":0,"width":0,"height":0,"__SourceModuleName__":"Global.lively.morphic.Graphics","__LivelyClassName__":"Rectangle"},"1283":{"x":820,"y":571,"__SourceModuleName__":"Global.lively.morphic.Graphics","__LivelyClassName__":"Point"},"1284":{"replaceRenderContext":"replaceRenderContextHTML","init":"initHTML","append":"appendHTML","remove":"removeHTML","triggerEvent":"triggerEventHTML","setTransform":"setTransformHTML","setPosition":"setPositionHTML","setRotation":"setRotationHTML","setExtent":"setExtentHTML","setScale":"setScaleHTML","setVisible":"setVisibleHTML","adjustOrigin":"adjustOriginHTML","setPivotPoint":"setPivotPointHTML","setClipMode":"setClipModeHTML","showsVerticalScrollBar":"showsVerticalScrollBarHTML","showsHorizontalScrollBar":"showsHorizontalScrollBarHTML","getScrollBarExtent":"getScrollBarExtentHTML","setHandStyle":"setHandStyleHTML","setPointerEvents":"setPointerEventsHTML","setToolTip":"setToolTipHTML","focus":"focusHTML","blur":"blurHTML","setFocusable":"setFocusableHTML"},"1285":{"morph":{"__isSmartRef__":true,"id":227},"__SourceModuleName__":"Global.lively.morphic.Events","__LivelyClassName__":"lively.morphic.EventHandler"},"1286":{"adjustForNewBounds":true},"1287":{"x":67,"y":364.5,"__LivelyClassName__":"Point","__SourceModuleName__":"Global.lively.morphic.Graphics"},"1288":{"x":820,"y":571,"__SourceModuleName__":"Global.lively.morphic.Graphics","__LivelyClassName__":"Point"},"1289":{"x":167,"y":373,"__LivelyClassName__":"Point","__SourceModuleName__":"Global.lively.morphic.Graphics"},"1290":{"submorphs":[],"scripts":[],"id":226,"shape":{"__isSmartRef__":true,"id":1291},"grabbingEnabled":false,"droppingEnabled":false,"showsMorphMenu":false,"halosEnabled":false,"registeredForMouseEvents":true,"_world":{"__isSmartRef__":true,"id":0},"_Position":{"__isSmartRef__":true,"id":1297},"owner":{"__isSmartRef__":true,"id":0},"__SourceModuleName__":"Global.lively.morphic.Events","carriesGrabbedMorphs":false,"_Scale":1.002003004005006,"_Rotation":0,"renderContextTable":{"__isSmartRef__":true,"id":1298},"eventHandler":{"__isSmartRef__":true,"id":1299},"clickedOnMorph":{"__isSmartRef__":true,"id":0},"lastScrollTime":1330040693782,"internalClickedOnMorph":{"__isSmartRef__":true,"id":1300},"scrollFocusMorph":{"__isSmartRef__":true,"id":1332},"__LivelyClassName__":"lively.morphic.HandMorph","withLayers":["Global.NoMagnetsLayer"]},"1291":{"__SourceModuleName__":"Global.lively.morphic.Shapes","_Position":{"__isSmartRef__":true,"id":1292},"_Extent":{"__isSmartRef__":true,"id":1293},"_Fill":{"__isSmartRef__":true,"id":1294},"renderContextTable":{"__isSmartRef__":true,"id":1295},"_ClipMode":"visible","_Padding":{"__isSmartRef__":true,"id":1296},"__LivelyClassName__":"lively.morphic.Shapes.Rectangle"},"1292":{"x":0,"y":0,"__SourceModuleName__":"Global.lively.morphic.Graphics","__LivelyClassName__":"Point"},"1293":{"x":2,"y":2,"__SourceModuleName__":"Global.lively.morphic.Graphics","__LivelyClassName__":"Point"},"1294":{"r":0.8,"g":0,"b":0,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global.lively.morphic.Graphics"},"1295":{"init":"initHTML","appendShape":"renderHTML","setPosition":"setPositionHTML","setExtent":"setExtentHTML","setPadding":"setPaddingHTML","setFill":"setFillHTML","setBorderColor":"setBorderColorHTML","setBorderWidth":"setBorderWidthHTML","setStrokeOpacity":"setStrokeOpacityHTML","setBorderRadius":"setBorderRadiusHTML","setBorderStyle":"setBorderStyleHTML","setOpacity":"setOpacityHTML","setClipMode":"setClipModeHTML"},"1296":{"x":0,"y":0,"width":0,"height":0,"__SourceModuleName__":"Global.lively.morphic.Graphics","__LivelyClassName__":"Rectangle"},"1297":{"x":169,"y":375,"__LivelyClassName__":"Point","__SourceModuleName__":"Global.lively.morphic.Graphics"},"1298":{"replaceRenderContext":"replaceRenderContextHTML","init":"initHTML","append":"appendHTML","remove":"removeHTML","triggerEvent":"triggerEventHTML","setTransform":"setTransformHTML","setPosition":"setPositionHTML","setRotation":"setRotationHTML","setExtent":"setExtentHTML","setScale":"setScaleHTML","setVisible":"setVisibleHTML","adjustOrigin":"adjustOriginHTML","setPivotPoint":"setPivotPointHTML","setClipMode":"setClipModeHTML","showsVerticalScrollBar":"showsVerticalScrollBarHTML","showsHorizontalScrollBar":"showsHorizontalScrollBarHTML","getScrollBarExtent":"getScrollBarExtentHTML","setHandStyle":"setHandStyleHTML","setPointerEvents":"setPointerEventsHTML","setToolTip":"setToolTipHTML","focus":"focusHTML","blur":"blurHTML","setFocusable":"setFocusableHTML"},"1299":{"morph":{"__isSmartRef__":true,"id":1290},"__SourceModuleName__":"Global.lively.morphic.Events","__LivelyClassName__":"lively.morphic.EventHandler"},"1300":{"submorphs":[],"scripts":[],"shape":{"__isSmartRef__":true,"id":1301},"derivationIds":[null],"id":"13C48991-7758-43B0-89C3-BEA73BC4449D","renderContextTable":{"__isSmartRef__":true,"id":1311},"_WhiteSpaceHandling":"pre","textChunks":[{"__isSmartRef__":true,"id":1312}],"eventHandler":{"__isSmartRef__":true,"id":1314},"grabbingEnabled":false,"droppingEnabled":false,"halosEnabled":true,"_ClipMode":"hidden","fixedWidth":false,"fixedHeight":true,"allowInput":false,"_FontFamily":"Helvetica","_FontSize":10.5,"_Position":{"__isSmartRef__":true,"id":1315},"priorExtent":{"__isSmartRef__":true,"id":1316},"_MaxTextWidth":null,"_MinTextWidth":null,"_MaxTextHeight":null,"_MinTextHeight":null,"evalEnabled":false,"_HandStyle":"default","_TextColor":{"__isSmartRef__":true,"id":209},"__serializedLivelyClosures__":{"__isSmartRef__":true,"id":1317},"__LivelyClassName__":"lively.morphic.Text","__SourceModuleName__":"Global.lively.morphic.TextCore"},"1301":{"_Position":{"__isSmartRef__":true,"id":1302},"renderContextTable":{"__isSmartRef__":true,"id":1303},"_Extent":{"__isSmartRef__":true,"id":1304},"_ClipMode":"hidden","_Padding":{"__isSmartRef__":true,"id":1305},"_BorderWidth":0,"_BorderColor":{"__isSmartRef__":true,"id":77},"_Fill":{"__isSmartRef__":true,"id":1306},"_BorderRadius":4,"__LivelyClassName__":"lively.morphic.Shapes.Rectangle","__SourceModuleName__":"Global.lively.morphic.Shapes"},"1302":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global.lively.morphic.Graphics"},"1303":{"init":"initHTML","appendShape":"renderHTML","setPosition":"setPositionHTML","setExtent":"setExtentHTML","setPadding":"setPaddingHTML","setFill":"setFillHTML","setBorderColor":"setBorderColorHTML","setBorderWidth":"setBorderWidthHTML","setStrokeOpacity":"setStrokeOpacityHTML","setBorderRadius":"setBorderRadiusHTML","setBorderStyle":"setBorderStyleHTML","setOpacity":"setOpacityHTML","setClipMode":"setClipModeHTML"},"1304":{"x":184,"y":23,"__LivelyClassName__":"Point","__SourceModuleName__":"Global.lively.morphic.Graphics"},"1305":{"x":3,"y":2,"width":0,"height":0,"__LivelyClassName__":"Rectangle","__SourceModuleName__":"Global.lively.morphic.Graphics"},"1306":{"stops":[{"__isSmartRef__":true,"id":1307},{"__isSmartRef__":true,"id":1309}],"vector":{"__isSmartRef__":true,"id":113},"__LivelyClassName__":"lively.morphic.LinearGradient","__SourceModuleName__":"Global.lively.morphic.Shapes"},"1307":{"offset":0,"color":{"__isSmartRef__":true,"id":1308}},"1308":{"r":0.39215686274509803,"g":0.5137254901960784,"b":0.9725490196078431,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global.lively.morphic.Graphics"},"1309":{"offset":1,"color":{"__isSmartRef__":true,"id":1310}},"1310":{"r":0.13333333333333333,"g":0.3333333333333333,"b":0.9607843137254902,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global.lively.morphic.Graphics"},"1311":{"replaceRenderContext":"replaceRenderContextHTML","init":"initHTML","append":"appendHTML","remove":"removeHTML","triggerEvent":"triggerEventHTML","setTransform":"setTransformHTML","setPosition":"setPositionHTML","setRotation":"setRotationHTML","setExtent":"setExtentHTML","setScale":"setScaleHTML","setVisible":"setVisibleHTML","adjustOrigin":"adjustOriginHTML","setPivotPoint":"setPivotPointHTML","setClipMode":"setClipModeHTML","showsVerticalScrollBar":"showsVerticalScrollBarHTML","showsHorizontalScrollBar":"showsHorizontalScrollBarHTML","getScrollBarExtent":"getScrollBarExtentHTML","setHandStyle":"setHandStyleHTML","setPointerEvents":"setPointerEventsHTML","setToolTip":"setToolTipHTML","focus":"focusHTML","blur":"blurHTML","setFocusable":"setFocusableHTML","updateText":"updateTextHTML","setTextExtent":"setTextExtentHTML","setMaxTextWidth":"setMaxTextWidthHTML","setMaxTextHeight":"setMaxTextHeightHTML","setMinTextWidth":"setMinTextWidthHTML","setMinTextHeight":"setMinTextHeightHTML","getTextExtent":"getTextExtentHTML","getTextString":"getTextStringHTML","ignoreTextEvents":"ignoreTextEventsHTML","unignoreTextEvents":"unignoreTextEventsHTML","enableTextEvents":"enableTextEventsHTML","setFontFamily":"setFontFamilyHTML","setFontSize":"setFontSizeHTML","setTextColor":"setTextColorHTML","setPadding":"setPaddingHTML","setAlign":"setAlignHTML","setVerticalAlign":"setVerticalAlignHTML","setDisplay":"setDisplayHTML","setWhiteSpaceHandling":"setWhiteSpaceHandlingHTML","focusMorph":"focusMorphHTML"},"1312":{"style":{"__isSmartRef__":true,"id":1313},"chunkOwner":{"__isSmartRef__":true,"id":1300},"storedString":"save world as ...","__LivelyClassName__":"lively.morphic.TextChunk","__SourceModuleName__":"Global.lively.morphic.TextCore"},"1313":{"__LivelyClassName__":"lively.morphic.TextEmphasis","__SourceModuleName__":"Global.lively.morphic.TextCore"},"1314":{"morph":{"__isSmartRef__":true,"id":1300},"__LivelyClassName__":"lively.morphic.EventHandler","__SourceModuleName__":"Global.lively.morphic.Events"},"1315":{"x":0,"y":161,"__LivelyClassName__":"Point","__SourceModuleName__":"Global.lively.morphic.Graphics"},"1316":{"x":180,"y":23,"__LivelyClassName__":"Point","__SourceModuleName__":"Global.lively.morphic.Graphics"},"1317":{"onMouseWheel":{"__isSmartRef__":true,"id":1318},"onSelectStart":{"__isSmartRef__":true,"id":1325}},"1318":{"varMapping":{"__isSmartRef__":true,"id":1319},"source":"function onMouseWheel(evt) {\n return false; // to allow scrolling\n }","funcProperties":{"__isSmartRef__":true,"id":1324},"__LivelyClassName__":"lively.Closure","__SourceModuleName__":"Global.lively.lang.Closure"},"1319":{"this":{"__isSmartRef__":true,"id":1300},"__serializedLivelyClosures__":{"__isSmartRef__":true,"id":1320}},"1320":{"$super":{"__isSmartRef__":true,"id":1321}},"1321":{"varMapping":{"__isSmartRef__":true,"id":1322},"source":"function () {\n try {\n return obj.constructor.prototype[name].apply(obj, arguments)\n } catch (e) {\n alert('Error in $super call: ' + e + '\\n' + e.stack);\n return null;\n }\n }","funcProperties":{"__isSmartRef__":true,"id":1323},"__LivelyClassName__":"lively.Closure","__SourceModuleName__":"Global.lively.lang.Closure"},"1322":{"obj":{"__isSmartRef__":true,"id":1300},"name":"onMouseWheel"},"1323":{},"1324":{},"1325":{"varMapping":{"__isSmartRef__":true,"id":1326},"source":"function onSelectStart(evt) {\n return false; // to allow scrolling\n }","funcProperties":{"__isSmartRef__":true,"id":1331},"__LivelyClassName__":"lively.Closure","__SourceModuleName__":"Global.lively.lang.Closure"},"1326":{"this":{"__isSmartRef__":true,"id":1300},"__serializedLivelyClosures__":{"__isSmartRef__":true,"id":1327}},"1327":{"$super":{"__isSmartRef__":true,"id":1328}},"1328":{"varMapping":{"__isSmartRef__":true,"id":1329},"source":"function () {\n try {\n return obj.constructor.prototype[name].apply(obj, arguments)\n } catch (e) {\n alert('Error in $super call: ' + e + '\\n' + e.stack);\n return null;\n }\n }","funcProperties":{"__isSmartRef__":true,"id":1330},"__LivelyClassName__":"lively.Closure","__SourceModuleName__":"Global.lively.lang.Closure"},"1329":{"obj":{"__isSmartRef__":true,"id":1300},"name":"onSelectStart"},"1330":{},"1331":{},"1332":{"submorphs":[],"scripts":[],"shape":{"__isSmartRef__":true,"id":1333},"derivationIds":[null],"id":"7ED74E6D-7C2B-452F-A3B2-B8B68285F2BD","renderContextTable":{"__isSmartRef__":true,"id":1338},"eventHandler":{"__isSmartRef__":true,"id":1339},"droppingEnabled":true,"halosEnabled":true,"_Position":{"__isSmartRef__":true,"id":1340},"owner":{"__isSmartRef__":true,"id":1341},"__LivelyClassName__":"lively.morphic.Box","__SourceModuleName__":"Global.lively.morphic.Core"},"1333":{"_Position":{"__isSmartRef__":true,"id":1334},"renderContextTable":{"__isSmartRef__":true,"id":1335},"_Extent":{"__isSmartRef__":true,"id":1336},"_ClipMode":"visible","_Padding":{"__isSmartRef__":true,"id":1337},"_BorderWidth":1,"_BorderColor":{"__isSmartRef__":true,"id":77},"_Fill":{"__isSmartRef__":true,"id":77},"_Opacity":0.5,"__LivelyClassName__":"lively.morphic.Shapes.Rectangle","__SourceModuleName__":"Global.lively.morphic.Shapes"},"1334":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global.lively.morphic.Graphics"},"1335":{"init":"initHTML","appendShape":"renderHTML","setPosition":"setPositionHTML","setExtent":"setExtentHTML","setPadding":"setPaddingHTML","setFill":"setFillHTML","setBorderColor":"setBorderColorHTML","setBorderWidth":"setBorderWidthHTML","setStrokeOpacity":"setStrokeOpacityHTML","setBorderRadius":"setBorderRadiusHTML","setBorderStyle":"setBorderStyleHTML","setOpacity":"setOpacityHTML","setClipMode":"setClipModeHTML"},"1336":{"x":2800,"y":2900,"__LivelyClassName__":"Point","__SourceModuleName__":"Global.lively.morphic.Graphics"},"1337":{"x":0,"y":0,"width":0,"height":0,"__LivelyClassName__":"Rectangle","__SourceModuleName__":"Global.lively.morphic.Graphics"},"1338":{"replaceRenderContext":"replaceRenderContextHTML","init":"initHTML","append":"appendHTML","remove":"removeHTML","triggerEvent":"triggerEventHTML","setTransform":"setTransformHTML","setPosition":"setPositionHTML","setRotation":"setRotationHTML","setExtent":"setExtentHTML","setScale":"setScaleHTML","setVisible":"setVisibleHTML","adjustOrigin":"adjustOriginHTML","setPivotPoint":"setPivotPointHTML","setClipMode":"setClipModeHTML","showsVerticalScrollBar":"showsVerticalScrollBarHTML","showsHorizontalScrollBar":"showsHorizontalScrollBarHTML","getScrollBarExtent":"getScrollBarExtentHTML","setHandStyle":"setHandStyleHTML","setPointerEvents":"setPointerEventsHTML","setToolTip":"setToolTipHTML","focus":"focusHTML","blur":"blurHTML","setFocusable":"setFocusableHTML"},"1339":{"morph":{"__isSmartRef__":true,"id":1332},"__LivelyClassName__":"lively.morphic.EventHandler","__SourceModuleName__":"Global.lively.morphic.Events"},"1340":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global.lively.morphic.Graphics"},"1341":{"submorphs":[{"__isSmartRef__":true,"id":1332}],"scripts":[],"shape":{"__isSmartRef__":true,"id":1342},"derivationIds":[null],"id":"4B5CADF0-84CD-4731-9190-B6E9316C2FD0","renderContextTable":{"__isSmartRef__":true,"id":1347},"eventHandler":{"__isSmartRef__":true,"id":1348},"droppingEnabled":true,"halosEnabled":true,"_Position":{"__isSmartRef__":true,"id":1349},"owner":null,"__LivelyClassName__":"lively.morphic.Box","__SourceModuleName__":"Global.lively.morphic.Core"},"1342":{"_Position":{"__isSmartRef__":true,"id":1343},"renderContextTable":{"__isSmartRef__":true,"id":1344},"_Extent":{"__isSmartRef__":true,"id":1345},"_ClipMode":"visible","_Padding":{"__isSmartRef__":true,"id":1346},"_BorderWidth":0,"_BorderColor":{"__isSmartRef__":true,"id":77},"_Fill":null,"__LivelyClassName__":"lively.morphic.Shapes.Rectangle","__SourceModuleName__":"Global.lively.morphic.Shapes"},"1343":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global.lively.morphic.Graphics"},"1344":{"init":"initHTML","appendShape":"renderHTML","setPosition":"setPositionHTML","setExtent":"setExtentHTML","setPadding":"setPaddingHTML","setFill":"setFillHTML","setBorderColor":"setBorderColorHTML","setBorderWidth":"setBorderWidthHTML","setStrokeOpacity":"setStrokeOpacityHTML","setBorderRadius":"setBorderRadiusHTML","setBorderStyle":"setBorderStyleHTML","setOpacity":"setOpacityHTML","setClipMode":"setClipModeHTML"},"1345":{"x":2800,"y":2900,"__LivelyClassName__":"Point","__SourceModuleName__":"Global.lively.morphic.Graphics"},"1346":{"x":0,"y":0,"width":0,"height":0,"__LivelyClassName__":"Rectangle","__SourceModuleName__":"Global.lively.morphic.Graphics"},"1347":{"replaceRenderContext":"replaceRenderContextHTML","init":"initHTML","append":"appendHTML","remove":"removeHTML","triggerEvent":"triggerEventHTML","setTransform":"setTransformHTML","setPosition":"setPositionHTML","setRotation":"setRotationHTML","setExtent":"setExtentHTML","setScale":"setScaleHTML","setVisible":"setVisibleHTML","adjustOrigin":"adjustOriginHTML","setPivotPoint":"setPivotPointHTML","setClipMode":"setClipModeHTML","showsVerticalScrollBar":"showsVerticalScrollBarHTML","showsHorizontalScrollBar":"showsHorizontalScrollBarHTML","getScrollBarExtent":"getScrollBarExtentHTML","setHandStyle":"setHandStyleHTML","setPointerEvents":"setPointerEventsHTML","setToolTip":"setToolTipHTML","focus":"focusHTML","blur":"blurHTML","setFocusable":"setFocusableHTML"},"1348":{"morph":{"__isSmartRef__":true,"id":1341},"__LivelyClassName__":"lively.morphic.EventHandler","__SourceModuleName__":"Global.lively.morphic.Events"},"1349":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global.lively.morphic.Graphics"},"1350":{"__SourceModuleName__":"Global.lively.morphic.Shapes","_Position":{"__isSmartRef__":true,"id":1351},"_Extent":{"__isSmartRef__":true,"id":1352},"_Fill":{"__isSmartRef__":true,"id":1353},"renderContextTable":{"__isSmartRef__":true,"id":1354},"_ClipMode":"visible","_Padding":{"__isSmartRef__":true,"id":1355},"__LivelyClassName__":"lively.morphic.Shapes.Rectangle"},"1351":{"x":0,"y":0,"__SourceModuleName__":"Global.lively.morphic.Graphics","__LivelyClassName__":"Point"},"1352":{"x":2800,"y":2900,"__SourceModuleName__":"Global.lively.morphic.Graphics","__LivelyClassName__":"Point"},"1353":{"r":1,"g":1,"b":1,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global.lively.morphic.Graphics"},"1354":{"init":"initHTML","appendShape":"renderHTML","setPosition":"setPositionHTML","setExtent":"setExtentHTML","setPadding":"setPaddingHTML","setFill":"setFillHTML","setBorderColor":"setBorderColorHTML","setBorderWidth":"setBorderWidthHTML","setStrokeOpacity":"setStrokeOpacityHTML","setBorderRadius":"setBorderRadiusHTML","setBorderStyle":"setBorderStyleHTML","setOpacity":"setOpacityHTML","setClipMode":"setClipModeHTML"},"1355":{"x":0,"y":0,"width":0,"height":0,"__SourceModuleName__":"Global.lively.morphic.Graphics","__LivelyClassName__":"Rectangle"},"1356":{"x":0,"y":0,"__SourceModuleName__":"Global.lively.morphic.Graphics","__LivelyClassName__":"Point"},"1357":{"replaceRenderContext":"replaceRenderContextHTML","init":"initHTML","append":"appendHTML","remove":"removeHTML","triggerEvent":"triggerEventHTML","setTransform":"setTransformHTML","setPosition":"setPositionHTML","setRotation":"setRotationHTML","setExtent":"setExtentHTML","setScale":"setScaleHTML","setVisible":"setVisibleHTML","adjustOrigin":"adjustOriginHTML","setPivotPoint":"setPivotPointHTML","setClipMode":"setClipModeHTML","showsVerticalScrollBar":"showsVerticalScrollBarHTML","showsHorizontalScrollBar":"showsHorizontalScrollBarHTML","getScrollBarExtent":"getScrollBarExtentHTML","setHandStyle":"setHandStyleHTML","setPointerEvents":"setPointerEventsHTML","setToolTip":"setToolTipHTML","focus":"focusHTML","blur":"blurHTML","setFocusable":"setFocusableHTML","setScroll":"setScrollHTML"},"1358":{"morph":{"__isSmartRef__":true,"id":0},"__SourceModuleName__":"Global.lively.morphic.Events","__LivelyClassName__":"lively.morphic.EventHandler"},"1359":{"sourceObj":{"__isSmartRef__":true,"id":0},"sourceAttrName":"savedWorldAsURL","targetObj":{"__isSmartRef__":true,"id":0},"targetMethodName":"visitNewPageAfterSaveAs","converter":null,"converterString":null,"updaterString":"function ($upd, v) { \n if (v && v.toString() !== URL.source.toString()) {\n $upd(v) \n }\n }","varMapping":{"__isSmartRef__":true,"id":1360},"__SourceModuleName__":"Global.lively.bindings","__serializedLivelyClosures__":{"__isSmartRef__":true,"id":1361},"__LivelyClassName__":"AttributeConnection"},"1360":{"source":{"__isSmartRef__":true,"id":0},"target":{"__isSmartRef__":true,"id":0}},"1361":{"updater":{"__isSmartRef__":true,"id":1362}},"1362":{"originalFunc":null,"varMapping":{"__isSmartRef__":true,"id":1360},"source":"function ($upd, v) { \n if (v && v.toString() !== URL.source.toString()) {\n $upd(v) \n }\n }","funcProperties":{"__isSmartRef__":true,"id":1363},"__SourceModuleName__":"Global.lively.lang.Closure","__LivelyClassName__":"lively.Closure"},"1363":{},"1364":{"protocol":"http:","hostname":"lively-kernel.org","pathname":"/repository/webwerkstatt/users/fbo/empty.xhtml","__SourceModuleName__":"Global.lively.Network","__LivelyClassName__":"URL"},"1365":{"submorphs":[{"__isSmartRef__":true,"id":1366}],"scripts":[],"id":"B1504754-B362-462F-9628-D1506BC41340","shape":{"__isSmartRef__":true,"id":1395},"droppingEnabled":true,"halosEnabled":true,"registeredForMouseEvents":true,"_Position":{"__isSmartRef__":true,"id":1402},"showsHalos":false,"name":"LoadingMorph","partsBinMetaInfo":{"__isSmartRef__":true,"id":1403},"__SourceModuleName__":"Global.lively.morphic.Core","renderContextTable":{"__isSmartRef__":true,"id":1496},"eventHandler":{"__isSmartRef__":true,"id":1497},"attributeConnections":[],"doNotSerialize":[],"doNotCopyProperties":[],"derivationIds":[127,"59692BC3-6C7B-4E23-B820-8699260EA722","486BB935-1313-4103-B2A8-642B19437478","18AFFD44-46CD-489E-B1D6-DED43E2B6B06","2608C892-2204-4981-9A87-8E749F8944AB","5535861F-4EA2-44AB-8A40-0538124E0AAC","16C292B3-86E8-4622-B516-27C48263B8CC","87731A20-D455-44D0-97E5-98A7CFD4E417","A17081E7-E597-47ED-BD32-6E4D206BD7D7","CFB4A44C-BFEA-4584-BCBA-AE2A56739200","76B3DD9B-8D01-42BA-A574-AB99D5F899BB","1EBC5512-8F54-4B24-998C-69A285EC8533","DD1165C7-6C1A-4361-A4AE-FCF6F31152FD","4D6D36E8-48F3-408A-B03C-202E4DC182BD","5F3B3E0F-BBC6-4DDA-BAA0-7EFC05FF2011","E0A6B33B-767A-4532-9021-892414520200","F5F5E2B1-5FF0-4E09-B323-AE88A3920B8D","0C7E832A-A741-430F-B295-8BC181D066FE","472AED3B-CB76-49BD-BF49-354A2D568F86","A7C52F65-D140-4791-880F-F7584C7BB570","3516412B-8B36-4E52-9416-6B7FB358BDC2","1840CACC-078C-4795-AD3F-E9D6F8D557A0","1FEDCA25-0131-46FA-840F-DC5F1B05C6CA","C620CED3-0AE9-4097-9AA7-2706A042F9C9","679A861B-40E0-4DB2-B22F-95B454C6978D"],"isBeingDragged":false,"priorExtent":{"__isSmartRef__":true,"id":1498},"layout":{"__isSmartRef__":true,"id":1499},"distanceToDragEvent":{"__isSmartRef__":true,"id":1500},"prevScroll":[0,0],"_Rotation":0,"_Scale":1,"__serializedLivelyClosures__":{"__isSmartRef__":true,"id":1501},"__LivelyClassName__":"lively.morphic.Box"},"1366":{"submorphs":[{"__isSmartRef__":true,"id":1367}],"scripts":[],"shape":{"__isSmartRef__":true,"id":1383},"id":"B55E1136-5F8B-482F-BEB1-13EB40699744","renderContextTable":{"__isSmartRef__":true,"id":1388},"eventHandler":{"__isSmartRef__":true,"id":1389},"droppingEnabled":true,"halosEnabled":true,"_Position":{"__isSmartRef__":true,"id":1390},"name":"ProgressIndicator","priorExtent":{"__isSmartRef__":true,"id":1391},"showsHalos":false,"distanceToDragEvent":{"__isSmartRef__":true,"id":1392},"partsBinMetaInfo":{"__isSmartRef__":true,"id":1393},"__SourceModuleName__":"Global.lively.morphic.Widgets","derivationIds":[520,"071F18BE-FF28-40F5-ACAD-1916E0D25C38","DF185A10-743D-45FC-B9C2-76E12D908BCF","BF125D2C-596A-4C1E-A5F8-DAE4801E9497","3CEE8CFF-B8F1-4B4B-A405-CB583080252A","D0652878-8F9C-4591-8A82-296898AACDB6","31441DDF-2220-43BE-A99F-69E1FEC68030","14A90039-0D3E-46DC-8445-D42B8E02EB42","681EF5DE-A344-4114-B2F3-B96CE3872524","C0381116-5116-4F33-B082-A411D0E4534E","24E9581E-B008-46EE-9CBC-D5190E100D98","C69D1041-2C5E-48FE-B04C-04E66450658A","4830945B-4FFF-4564-9424-34D7995DAE60","8602C233-B3E7-4682-9B0E-D7549761D934","B4E0E11F-2BED-462E-B708-89D63971856E","EE0144C2-D016-4390-8A67-4E7DEF171C83","F44DF6E4-5F27-440E-AB5F-3721C0A10CA6","73FC6648-DAAF-4673-8CF4-7DA219513F22","B78EB1B5-780C-45F7-B0A7-B988B52B1FF1","DFDB8CD1-72F7-40F4-849B-1F9B866277AB","66111105-B1FC-41F7-BF70-D45118C9E09F","02420416-1E35-4831-AABB-91CD0460CA1A","7C6B2EB2-4510-4A8E-BAFF-5CF0040DD7F5","0503F5A1-1732-4610-9A5A-920D658CA766","07C5AE03-36AD-4849-BACD-27D7D9A2CCF2"],"attributeConnections":[],"doNotSerialize":[],"doNotCopyProperties":[],"owner":{"__isSmartRef__":true,"id":1365},"isBeingDragged":false,"layout":{"__isSmartRef__":true,"id":1394},"_Rotation":0,"_Scale":1,"prevScroll":[0,0],"__LivelyClassName__":"lively.morphic.Image"},"1367":{"submorphs":[],"scripts":[],"id":"A00BBB58-D633-4ECE-9AE4-BE893AC48596","shape":{"__isSmartRef__":true,"id":1368},"grabbingEnabled":false,"droppingEnabled":false,"halosEnabled":true,"fixedWidth":true,"fixedHeight":false,"allowsInput":true,"_FontFamily":"Arial, sans-serif","registeredForMouseEvents":true,"_Position":{"__isSmartRef__":true,"id":1374},"_MaxTextWidth":257,"_MaxTextHeight":null,"textColor":{"__isSmartRef__":true,"id":1371},"showsHalos":false,"_FontSize":14,"__SourceModuleName__":"Global.lively.morphic.TextCore","name":"loadedMorphName","partsBinMetaInfo":{"__isSmartRef__":true,"id":1375},"textChunks":[{"__isSmartRef__":true,"id":1376}],"charsReplaced":"MorphName","lastFindLoc":18,"priorSelectionRange":[9,0],"prevScroll":[0,0],"priorExtent":{"__isSmartRef__":true,"id":1378},"renderContextTable":{"__isSmartRef__":true,"id":1379},"eventHandler":{"__isSmartRef__":true,"id":1380},"attributeConnections":[],"doNotSerialize":[],"doNotCopyProperties":[],"_Padding":{"__isSmartRef__":true,"id":1381},"_ClipMode":"visible","derivationIds":[355,"023045B3-2D6B-4425-89FB-F4806D527BE0","DC0C2365-868C-41AE-8369-51C31E91493E","C6D9D314-86A1-4015-970B-F6787F535E1A","6AA4552E-2E85-447E-9033-99D5AA1A94BC","D94BE49C-8A3E-4F1F-BF28-FEDD9B40D213","AA8F0470-654C-4AA2-8135-4607F5429AC5","E0BAABCC-FFB2-4EDF-BAE5-C63CC99B6A97","1A86AE17-73AE-442E-AB36-DD90C6DFC8BC","EF750075-E964-4CD3-B6A4-161511E1D058","CED69CBF-FFA5-45E7-B333-FBACE4F278AC","E56978C1-7424-4C10-8168-11FD3237B540","D5AB2532-A4DC-42D6-AF17-99CBBCEAA848","245866CB-598A-4172-A3A0-A06D4D26C6AD","43B0F12E-5793-43AA-80E1-496774E0EBA6","1B776A8C-0413-475F-8EBD-120BBD91D2BB","F84F2C9A-8003-4E81-833A-83F48C92F3B8","3124B389-9FA4-4348-BC5D-0DFF9C59CD1B","1A1BCBAC-D7CC-4BAE-B8C2-7C693F7327A1","1CB201BA-5E0B-4771-821A-139FA2AEFBC2","195520FA-4816-47A4-B0F5-BA890AFD9DF9","0D15F28A-24C9-46B7-89C5-6D2354728AC1","316FE9D3-62EC-4FD6-9B0F-FFA622B79575","739F3743-9BE1-48C8-813D-C0BFB0DCACA6","01877B3B-7DA7-4222-B011-7B5F4E501862"],"_WhiteSpaceHandling":"pre-wrap","owner":{"__isSmartRef__":true,"id":1366},"_MinTextWidth":257,"_MinTextHeight":null,"previousSelection":[6,6],"_Align":"center","distanceToDragEvent":{"__isSmartRef__":true,"id":1382},"isBeingDragged":false,"_Rotation":0,"_Scale":1,"__LivelyClassName__":"lively.morphic.Text"},"1368":{"fill":null,"__SourceModuleName__":"Global.lively.morphic.Shapes","_Position":{"__isSmartRef__":true,"id":1369},"_Extent":{"__isSmartRef__":true,"id":1370},"_BorderWidth":0,"_BorderColor":{"__isSmartRef__":true,"id":1371},"renderContextTable":{"__isSmartRef__":true,"id":1372},"_ClipMode":"visible","_Padding":{"__isSmartRef__":true,"id":1373},"_BorderRadius":0,"_Opacity":1,"_BorderStyle":"solid","__LivelyClassName__":"lively.morphic.Shapes.Rectangle"},"1369":{"x":0,"y":0,"__SourceModuleName__":"Global.lively.morphic.Graphics","__LivelyClassName__":"Point"},"1370":{"x":257,"y":23,"__LivelyClassName__":"Point","__SourceModuleName__":"Global.lively.morphic.Graphics"},"1371":{"r":0,"g":0,"b":0,"a":1,"__SourceModuleName__":"Global.lively.morphic.Graphics","__LivelyClassName__":"Color"},"1372":{"init":"initHTML","appendShape":"renderHTML","setPosition":"setPositionHTML","setExtent":"setExtentHTML","setPadding":"setPaddingHTML","setFill":"setFillHTML","setBorderColor":"setBorderColorHTML","setBorderWidth":"setBorderWidthHTML","setStrokeOpacity":"setStrokeOpacityHTML","setBorderRadius":"setBorderRadiusHTML","setBorderStyle":"setBorderStyleHTML","setOpacity":"setOpacityHTML","setClipMode":"setClipModeHTML"},"1373":{"x":0,"y":0,"width":0,"height":0,"__SourceModuleName__":"Global.lively.morphic.Graphics","__LivelyClassName__":"Rectangle"},"1374":{"x":-109,"y":38,"__SourceModuleName__":"Global.lively.morphic.Graphics","__LivelyClassName__":"Point"},"1375":{"partsSpaceName":"PartsBin/Basic","__SourceModuleName__":"Global.lively.PartsBin","migrationLevel":4,"comment":"a simple text morph","partName":"Text","__LivelyClassName__":"lively.PartsBin.PartsBinMetaInfo"},"1376":{"style":{"__isSmartRef__":true,"id":1377},"chunkOwner":{"__isSmartRef__":true,"id":1367},"__SourceModuleName__":"Global.lively.morphic.TextCore","storedString":"loading part","__LivelyClassName__":"lively.morphic.TextChunk"},"1377":{"__SourceModuleName__":"Global.lively.morphic.TextCore","__LivelyClassName__":"lively.morphic.TextEmphasis"},"1378":{"x":257,"y":23,"__LivelyClassName__":"Point","__SourceModuleName__":"Global.lively.morphic.Graphics"},"1379":{"replaceRenderContext":"replaceRenderContextHTML","init":"initHTML","append":"appendHTML","remove":"removeHTML","triggerEvent":"triggerEventHTML","setTransform":"setTransformHTML","setPosition":"setPositionHTML","setRotation":"setRotationHTML","setExtent":"setExtentHTML","setScale":"setScaleHTML","setVisible":"setVisibleHTML","adjustOrigin":"adjustOriginHTML","setPivotPoint":"setPivotPointHTML","setClipMode":"setClipModeHTML","showsVerticalScrollBar":"showsVerticalScrollBarHTML","showsHorizontalScrollBar":"showsHorizontalScrollBarHTML","getScrollBarExtent":"getScrollBarExtentHTML","setHandStyle":"setHandStyleHTML","setPointerEvents":"setPointerEventsHTML","setToolTip":"setToolTipHTML","focus":"focusHTML","blur":"blurHTML","setFocusable":"setFocusableHTML","updateText":"updateTextHTML","setTextExtent":"setTextExtentHTML","setMaxTextWidth":"setMaxTextWidthHTML","setMaxTextHeight":"setMaxTextHeightHTML","setMinTextWidth":"setMinTextWidthHTML","setMinTextHeight":"setMinTextHeightHTML","getTextExtent":"getTextExtentHTML","getTextString":"getTextStringHTML","ignoreTextEvents":"ignoreTextEventsHTML","unignoreTextEvents":"unignoreTextEventsHTML","enableTextEvents":"enableTextEventsHTML","setFontFamily":"setFontFamilyHTML","setFontSize":"setFontSizeHTML","setTextColor":"setTextColorHTML","setPadding":"setPaddingHTML","setAlign":"setAlignHTML","setVerticalAlign":"setVerticalAlignHTML","setDisplay":"setDisplayHTML","setWhiteSpaceHandling":"setWhiteSpaceHandlingHTML","focusMorph":"focusMorphHTML"},"1380":{"morph":{"__isSmartRef__":true,"id":1367},"__SourceModuleName__":"Global.lively.morphic.Events","__LivelyClassName__":"lively.morphic.EventHandler"},"1381":{"x":5,"y":5,"width":0,"height":0,"__SourceModuleName__":"Global.lively.morphic.Graphics","__LivelyClassName__":"Rectangle"},"1382":{"x":179,"y":-11,"__SourceModuleName__":"Global.lively.morphic.Graphics","__LivelyClassName__":"Point"},"1383":{"_Position":{"__isSmartRef__":true,"id":1384},"renderContextTable":{"__isSmartRef__":true,"id":1385},"_Extent":{"__isSmartRef__":true,"id":1386},"_ImageURL":"data:image/gif;base64,R0lGODlhEAAQAPIAAP///wAAAMLCwkJCQgAAAGJiYoKCgpKSkiH/C05FVFNDQVBFMi4wAwEAAAAh/hpDcmVhdGVkIHdpdGggYWpheGxvYWQuaW5mbwAh+QQJCgAAACwAAAAAEAAQAAADMwi63P4wyklrE2MIOggZnAdOmGYJRbExwroUmcG2LmDEwnHQLVsYOd2mBzkYDAdKa+dIAAAh+QQJCgAAACwAAAAAEAAQAAADNAi63P5OjCEgG4QMu7DmikRxQlFUYDEZIGBMRVsaqHwctXXf7WEYB4Ag1xjihkMZsiUkKhIAIfkECQoAAAAsAAAAABAAEAAAAzYIujIjK8pByJDMlFYvBoVjHA70GU7xSUJhmKtwHPAKzLO9HMaoKwJZ7Rf8AYPDDzKpZBqfvwQAIfkECQoAAAAsAAAAABAAEAAAAzMIumIlK8oyhpHsnFZfhYumCYUhDAQxRIdhHBGqRoKw0R8DYlJd8z0fMDgsGo/IpHI5TAAAIfkECQoAAAAsAAAAABAAEAAAAzIIunInK0rnZBTwGPNMgQwmdsNgXGJUlIWEuR5oWUIpz8pAEAMe6TwfwyYsGo/IpFKSAAAh+QQJCgAAACwAAAAAEAAQAAADMwi6IMKQORfjdOe82p4wGccc4CEuQradylesojEMBgsUc2G7sDX3lQGBMLAJibufbSlKAAAh+QQJCgAAACwAAAAAEAAQAAADMgi63P7wCRHZnFVdmgHu2nFwlWCI3WGc3TSWhUFGxTAUkGCbtgENBMJAEJsxgMLWzpEAACH5BAkKAAAALAAAAAAQABAAAAMyCLrc/jDKSatlQtScKdceCAjDII7HcQ4EMTCpyrCuUBjCYRgHVtqlAiB1YhiCnlsRkAAAOwAAAAAAAAAAAA==","attributeConnections":[],"doNotSerialize":[],"doNotCopyProperties":[],"isLoaded":true,"__SourceModuleName__":"Global.lively.morphic.Shapes","_ClipMode":"visible","_Padding":{"__isSmartRef__":true,"id":1387},"_BorderWidth":0,"_BorderRadius":0,"_Opacity":1,"_BorderStyle":"solid","__LivelyClassName__":"lively.morphic.Shapes.Image"},"1384":{"x":0,"y":0,"__SourceModuleName__":"Global.lively.morphic.Graphics","__LivelyClassName__":"Point"},"1385":{"init":"initHTML","appendShape":"renderHTML","setPosition":"setPositionHTML","setExtent":"setExtentHTML","setPadding":"setPaddingHTML","setFill":"setFillHTML","setBorderColor":"setBorderColorHTML","setBorderWidth":"setBorderWidthHTML","setStrokeOpacity":"setStrokeOpacityHTML","setBorderRadius":"setBorderRadiusHTML","setBorderStyle":"setBorderStyleHTML","setOpacity":"setOpacityHTML","setClipMode":"setClipModeHTML","setImageURL":"setImageURLHTML","getNativeExtent":"getNativeExtentHTML"},"1386":{"x":31,"y":31,"__SourceModuleName__":"Global.lively.morphic.Graphics","__LivelyClassName__":"Point"},"1387":{"x":0,"y":0,"width":0,"height":0,"__SourceModuleName__":"Global.lively.morphic.Graphics","__LivelyClassName__":"Rectangle"},"1388":{"replaceRenderContext":"replaceRenderContextHTML","init":"initHTML","append":"appendHTML","remove":"removeHTML","triggerEvent":"triggerEventHTML","setTransform":"setTransformHTML","setPosition":"setPositionHTML","setRotation":"setRotationHTML","setExtent":"setExtentHTML","setScale":"setScaleHTML","setVisible":"setVisibleHTML","adjustOrigin":"adjustOriginHTML","setPivotPoint":"setPivotPointHTML","setClipMode":"setClipModeHTML","showsVerticalScrollBar":"showsVerticalScrollBarHTML","showsHorizontalScrollBar":"showsHorizontalScrollBarHTML","getScrollBarExtent":"getScrollBarExtentHTML","setHandStyle":"setHandStyleHTML","setPointerEvents":"setPointerEventsHTML","setToolTip":"setToolTipHTML","focus":"focusHTML","blur":"blurHTML","setFocusable":"setFocusableHTML"},"1389":{"morph":{"__isSmartRef__":true,"id":1366},"__SourceModuleName__":"Global.lively.morphic.Events","__LivelyClassName__":"lively.morphic.EventHandler"},"1390":{"x":113.5,"y":81,"__SourceModuleName__":"Global.lively.morphic.Graphics","__LivelyClassName__":"Point"},"1391":{"x":30,"y":31,"__SourceModuleName__":"Global.lively.morphic.Graphics","__LivelyClassName__":"Point"},"1392":{"x":39,"y":-11,"__SourceModuleName__":"Global.lively.morphic.Graphics","__LivelyClassName__":"Point"},"1393":{"partName":"ProgressIndicator","requiredModules":[],"migrationLevel":2,"partsSpaceName":"PartsBin/Widgets/","__SourceModuleName__":"Global.lively.PartsBin","__LivelyClassName__":"lively.PartsBin.PartsBinMetaInfo"},"1394":{"centeredHorizontal":true,"centeredVertical":true},"1395":{"position":{"__isSmartRef__":true,"id":1396},"_Extent":{"__isSmartRef__":true,"id":1397},"_BorderWidth":1,"_BorderColor":{"__isSmartRef__":true,"id":1398},"_Fill":{"__isSmartRef__":true,"id":1399},"__SourceModuleName__":"Global.lively.morphic.Shapes","renderContextTable":{"__isSmartRef__":true,"id":1400},"_ClipMode":"visible","_Padding":{"__isSmartRef__":true,"id":1401},"_BorderRadius":8.515,"_Opacity":0.8146,"_BorderStyle":"solid","__LivelyClassName__":"lively.morphic.Shapes.Rectangle"},"1396":{"x":0,"y":0,"__SourceModuleName__":"Global.lively.morphic.Graphics","__LivelyClassName__":"Point"},"1397":{"x":266,"y":223,"__SourceModuleName__":"Global.lively.morphic.Graphics","__LivelyClassName__":"Point"},"1398":{"r":0,"g":0,"b":0,"a":1,"__SourceModuleName__":"Global.lively.morphic.Graphics","__LivelyClassName__":"Color"},"1399":{"r":0.839,"g":0.839,"b":0.839,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global.lively.morphic.Graphics"},"1400":{"init":"initHTML","appendShape":"renderHTML","setPosition":"setPositionHTML","setExtent":"setExtentHTML","setPadding":"setPaddingHTML","setFill":"setFillHTML","setBorderColor":"setBorderColorHTML","setBorderWidth":"setBorderWidthHTML","setStrokeOpacity":"setStrokeOpacityHTML","setBorderRadius":"setBorderRadiusHTML","setBorderStyle":"setBorderStyleHTML","setOpacity":"setOpacityHTML","setClipMode":"setClipModeHTML"},"1401":{"x":0,"y":0,"width":0,"height":0,"__SourceModuleName__":"Global.lively.morphic.Graphics","__LivelyClassName__":"Rectangle"},"1402":{"x":0,"y":0,"__SourceModuleName__":"Global.lively.morphic.Graphics","__LivelyClassName__":"Point"},"1403":{"partsSpaceName":"PartsBin/iPad Widgets","__SourceModuleName__":"Global.lively.PartsBin","comment":"This is a placeholder to indicate that a morph is being loaded. It will be replaced by the morph as soon as the requested morph finished loading.","migrationLevel":4,"partName":"LoadingMorph","changes":[{"__isSmartRef__":true,"id":1404},{"__isSmartRef__":true,"id":1406},{"__isSmartRef__":true,"id":1408},{"__isSmartRef__":true,"id":1410},{"__isSmartRef__":true,"id":1412},{"__isSmartRef__":true,"id":1414},{"__isSmartRef__":true,"id":1416},{"__isSmartRef__":true,"id":1418},{"__isSmartRef__":true,"id":1420},{"__isSmartRef__":true,"id":1422},{"__isSmartRef__":true,"id":1424},{"__isSmartRef__":true,"id":1426},{"__isSmartRef__":true,"id":1428},{"__isSmartRef__":true,"id":1430},{"__isSmartRef__":true,"id":1432},{"__isSmartRef__":true,"id":1434},{"__isSmartRef__":true,"id":1436},{"__isSmartRef__":true,"id":1438},{"__isSmartRef__":true,"id":1440},{"__isSmartRef__":true,"id":1442},{"__isSmartRef__":true,"id":1444},{"__isSmartRef__":true,"id":1446},{"__isSmartRef__":true,"id":1448},{"__isSmartRef__":true,"id":1450},{"__isSmartRef__":true,"id":1452},{"__isSmartRef__":true,"id":1454},{"__isSmartRef__":true,"id":1456},{"__isSmartRef__":true,"id":1458},{"__isSmartRef__":true,"id":1460},{"__isSmartRef__":true,"id":1462},{"__isSmartRef__":true,"id":1464},{"__isSmartRef__":true,"id":1466},{"__isSmartRef__":true,"id":1468},{"__isSmartRef__":true,"id":1470},{"__isSmartRef__":true,"id":1472},{"__isSmartRef__":true,"id":1474},{"__isSmartRef__":true,"id":1476},{"__isSmartRef__":true,"id":1478},{"__isSmartRef__":true,"id":1480},{"__isSmartRef__":true,"id":1482},{"__isSmartRef__":true,"id":1484},{"__isSmartRef__":true,"id":1486},{"__isSmartRef__":true,"id":1488},{"__isSmartRef__":true,"id":1490},{"__isSmartRef__":true,"id":1492},{"__isSmartRef__":true,"id":1494}],"__LivelyClassName__":"lively.PartsBin.PartsBinMetaInfo"},"1404":{"date":{"__isSmartRef__":true,"id":1405},"author":"sstamm","message":"first attempt to introduce callback functions to part loading","id":"22BD0B95-8948-411A-A56E-AD7CBE445F1D"},"1405":{"isSerializedDate":true,"string":"Thu Feb 09 2012 11:20:11 GMT-0800 (PST)"},"1406":{"date":{"__isSmartRef__":true,"id":1407},"author":"sstamm","message":"","id":"19CE12E4-5AA5-48DC-B1D1-B0EB0EDF1CB9"},"1407":{"isSerializedDate":true,"string":"Tue Feb 07 2012 03:03:42 GMT-0800 (PST)"},"1408":{"date":{"__isSmartRef__":true,"id":1409},"author":"sstamm","message":"","id":"63EC8D07-AB6A-450A-BB84-9B4D37E03647"},"1409":{"isSerializedDate":true,"string":"Tue Feb 07 2012 03:02:33 GMT-0800 (PST)"},"1410":{"date":{"__isSmartRef__":true,"id":1411},"author":"sstamm","message":"","id":"EB6BDD0C-7EEC-4124-B77F-2F106A601538"},"1411":{"isSerializedDate":true,"string":"Tue Feb 07 2012 02:59:48 GMT-0800 (PST)"},"1412":{"date":{"__isSmartRef__":true,"id":1413},"author":"sstamm","message":"","id":"2A718D1F-1036-41D6-999A-336F2B14E65D"},"1413":{"isSerializedDate":true,"string":"Tue Feb 07 2012 02:49:47 GMT-0800 (PST)"},"1414":{"date":{"__isSmartRef__":true,"id":1415},"author":"sstamm","message":"","id":"1159C5B4-724E-4124-9D7B-5CD5DC4A8EE3"},"1415":{"isSerializedDate":true,"string":"Tue Feb 07 2012 02:48:14 GMT-0800 (PST)"},"1416":{"date":{"__isSmartRef__":true,"id":1417},"author":"sstamm","message":"","id":"5179AEF9-E19F-4B0C-BBD8-556C5687988A"},"1417":{"isSerializedDate":true,"string":"Tue Feb 07 2012 02:44:11 GMT-0800 (PST)"},"1418":{"date":{"__isSmartRef__":true,"id":1419},"author":"sstamm","message":"","id":"882082E1-29B6-418D-9B8B-672729D60619"},"1419":{"isSerializedDate":true,"string":"Tue Feb 07 2012 02:38:26 GMT-0800 (PST)"},"1420":{"date":{"__isSmartRef__":true,"id":1421},"author":"sstamm","message":"added benchmarking output","id":"249CFF90-DDF5-4A83-9759-0289E96D7D58"},"1421":{"isSerializedDate":true,"string":"Tue Feb 07 2012 02:31:50 GMT-0800 (PST)"},"1422":{"date":{"__isSmartRef__":true,"id":1423},"author":"sstamm","message":"load request in new thread if loading should be async","id":"18282D28-D6D4-48C9-A508-6E3244449BD8"},"1423":{"isSerializedDate":true,"string":"Tue Feb 07 2012 02:10:27 GMT-0800 (PST)"},"1424":{"date":{"__isSmartRef__":true,"id":1425},"author":"sstamm","message":"","id":"DEBFACE2-7EC5-4A86-AD46-5A0A88A73707"},"1425":{"isSerializedDate":true,"string":"Thu Feb 02 2012 08:04:28 GMT-0800 (PST)"},"1426":{"date":{"__isSmartRef__":true,"id":1427},"author":"sstamm","message":"","id":"220821B3-C589-41C9-A324-8E7E6D9D6CEB"},"1427":{"isSerializedDate":true,"string":"Thu Feb 02 2012 07:58:43 GMT-0800 (PST)"},"1428":{"date":{"__isSmartRef__":true,"id":1429},"author":"sstamm","message":"","id":"DF0AE4EA-1B08-4556-8BBE-E6488F23B8A3"},"1429":{"isSerializedDate":true,"string":"Thu Feb 02 2012 07:49:48 GMT-0800 (PST)"},"1430":{"date":{"__isSmartRef__":true,"id":1431},"author":"sstamm","message":"display the loadingMorph in new thread","id":"2BA51E30-F02B-4AF0-B3BE-52DD4ED522CC"},"1431":{"isSerializedDate":true,"string":"Thu Feb 02 2012 06:53:49 GMT-0800 (PST)"},"1432":{"date":{"__isSmartRef__":true,"id":1433},"author":"sstamm","message":"loadingMorph is sync now","id":"12ACFFC9-BA53-4A2A-ABD4-894A5ECE1145"},"1433":{"isSerializedDate":true,"string":"Thu Feb 02 2012 06:48:04 GMT-0800 (PST)"},"1434":{"date":{"__isSmartRef__":true,"id":1435},"author":"sstamm","message":"now with round corners","id":"F42C39CB-CC37-467D-BF10-D362241F047E"},"1435":{"isSerializedDate":true,"string":"Thu Feb 02 2012 06:26:23 GMT-0800 (PST)"},"1436":{"date":{"__isSmartRef__":true,"id":1437},"author":"sstamm","message":"now able to load parts by name and category as well as per partItem","id":"F36A5782-461D-4813-95F8-0207990A261C"},"1437":{"isSerializedDate":true,"string":"Thu Feb 02 2012 06:24:30 GMT-0800 (PST)"},"1438":{"date":{"__isSmartRef__":true,"id":1439},"author":"sstamm","message":"removed connections before deletion","id":"35A88218-6864-4D52-83A2-BFF7B9A6907C"},"1439":{"isSerializedDate":true,"string":"Thu Feb 02 2012 05:41:00 GMT-0800 (PST)"},"1440":{"date":{"__isSmartRef__":true,"id":1441},"author":"sstamm","message":"added disconnection","id":"11F19267-924E-4087-99ED-998245576BD2"},"1441":{"isSerializedDate":true,"string":"Thu Feb 02 2012 05:32:58 GMT-0800 (PST)"},"1442":{"date":{"__isSmartRef__":true,"id":1443},"author":"sstamm","message":"added loading script","id":"EE9B8F4D-1F03-4232-82E6-794046974F8F"},"1443":{"isSerializedDate":true,"string":"Thu Feb 02 2012 05:28:30 GMT-0800 (PST)"},"1444":{"date":{"__isSmartRef__":true,"id":1445},"author":"sstamm","message":"changed text morph name","id":"80E88A3C-5AF3-48F2-A600-710877630997"},"1445":{"isSerializedDate":true,"string":"Thu Feb 02 2012 05:04:01 GMT-0800 (PST)"},"1446":{"date":{"__isSmartRef__":true,"id":1447},"author":"sstamm","message":"initial commit","id":"8920D925-DD16-4667-B8C7-FB74D78C2424"},"1447":{"isSerializedDate":true,"string":"Thu Feb 02 2012 04:26:01 GMT-0800 (PST)"},"1448":{"date":{"__isSmartRef__":true,"id":1449},"author":"sstamm","message":"should be centered now","id":"EE366B4D-C272-477F-8C28-4EAE5A7EC7CB"},"1449":{"isSerializedDate":true,"string":"Thu Feb 02 2012 05:54:35 GMT-0800 (PST)"},"1450":{"date":{"__isSmartRef__":true,"id":1451},"author":"sstamm","message":"trollolol","id":"F6CFAD78-AC72-4DE2-9F38-79776C2E9462"},"1451":{"isSerializedDate":true,"string":"Thu Feb 02 2012 05:55:14 GMT-0800 (PST)"},"1452":{"date":{"__isSmartRef__":true,"id":1453},"author":"sstamm","message":"","id":"A0C2D7C1-04AF-493A-A7D7-70750F7D3E2F"},"1453":{"isSerializedDate":true,"string":"Thu Feb 02 2012 08:22:07 GMT-0800 (PST)"},"1454":{"date":{"__isSmartRef__":true,"id":1455},"author":"sstamm","message":"","id":"0FB41D7D-2A52-4782-814B-A66C24FCE569"},"1455":{"isSerializedDate":true,"string":"Tue Feb 07 2012 02:13:49 GMT-0800 (PST)"},"1456":{"date":{"__isSmartRef__":true,"id":1457},"author":"sstamm","message":"made it more opaque","id":"1B84264C-2822-407F-A58F-19217BCD2762"},"1457":{"isSerializedDate":true,"string":"Wed Feb 08 2012 02:41:50 GMT-0800 (PST)"},"1458":{"date":{"__isSmartRef__":true,"id":1459},"author":"sstamm","message":"callbacks are working","id":"9348260A-3B55-4659-BC85-440BFBD98EA4"},"1459":{"isSerializedDate":true,"string":"Fri Feb 10 2012 00:45:55 GMT-0800 (PST)"},"1460":{"date":{"__isSmartRef__":true,"id":1461},"author":"sstamm","message":"","id":"B6FE0805-0D24-4267-8238-8B332352617E"},"1461":{"isSerializedDate":true,"string":"Wed Feb 22 2012 01:55:44 GMT-0800 (PST)"},"1462":{"date":{"__isSmartRef__":true,"id":1463},"author":"sstamm","message":"","id":"890D14F4-E89D-4E05-BFB9-875D6AB6C765"},"1463":{"isSerializedDate":true,"string":"Wed Feb 22 2012 02:01:50 GMT-0800 (PST)"},"1464":{"date":{"__isSmartRef__":true,"id":1465},"author":"sstamm","message":"","id":"BCDCC505-534C-45E5-9BB2-5238959A5AD0"},"1465":{"isSerializedDate":true,"string":"Wed Feb 22 2012 02:02:56 GMT-0800 (PST)"},"1466":{"date":{"__isSmartRef__":true,"id":1467},"author":"sstamm","message":"","id":"5AA50B7E-7D33-44C4-807B-BF1ABA31D530"},"1467":{"isSerializedDate":true,"string":"Wed Feb 22 2012 02:14:10 GMT-0800 (PST)"},"1468":{"date":{"__isSmartRef__":true,"id":1469},"author":"sstamm","message":"","id":"75A31364-B380-4312-BB5B-F8F2DA1CE824"},"1469":{"isSerializedDate":true,"string":"Wed Feb 22 2012 02:31:52 GMT-0800 (PST)"},"1470":{"date":{"__isSmartRef__":true,"id":1471},"author":"sstamm","message":"","id":"57213D63-7147-4057-ADC9-30994443B066"},"1471":{"isSerializedDate":true,"string":"Wed Feb 22 2012 02:35:29 GMT-0800 (PST)"},"1472":{"date":{"__isSmartRef__":true,"id":1473},"author":"sstamm","message":"","id":"FFE16986-548D-4AC2-A627-CF6416282BC4"},"1473":{"isSerializedDate":true,"string":"Wed Feb 22 2012 02:37:15 GMT-0800 (PST)"},"1474":{"date":{"__isSmartRef__":true,"id":1475},"author":"sstamm","message":"","id":"C0CE1397-6E2E-4E8C-AEFF-9017E24BB7E4"},"1475":{"isSerializedDate":true,"string":"Wed Feb 22 2012 02:45:05 GMT-0800 (PST)"},"1476":{"date":{"__isSmartRef__":true,"id":1477},"author":"sstamm","message":"","id":"009DC4E0-23CA-485A-A796-801AA0F75049"},"1477":{"isSerializedDate":true,"string":"Wed Feb 22 2012 02:46:25 GMT-0800 (PST)"},"1478":{"date":{"__isSmartRef__":true,"id":1479},"author":"sstamm","message":"","id":"E5E808CA-06AB-47DC-A9C9-CA7967591545"},"1479":{"isSerializedDate":true,"string":"Wed Feb 22 2012 02:47:19 GMT-0800 (PST)"},"1480":{"date":{"__isSmartRef__":true,"id":1481},"author":"sstamm","message":"","id":"F2157D66-1571-4B9A-B325-6FA96488260F"},"1481":{"isSerializedDate":true,"string":"Wed Feb 22 2012 02:51:05 GMT-0800 (PST)"},"1482":{"date":{"__isSmartRef__":true,"id":1483},"author":"sstamm","message":"","id":"8A697DF5-9A45-4A84-B709-9719BF55083E"},"1483":{"isSerializedDate":true,"string":"Wed Feb 22 2012 02:56:54 GMT-0800 (PST)"},"1484":{"date":{"__isSmartRef__":true,"id":1485},"author":"sstamm","message":"","id":"97D20633-F76C-46A5-A32A-FFE9BC83CAB3"},"1485":{"isSerializedDate":true,"string":"Wed Feb 22 2012 02:59:10 GMT-0800 (PST)"},"1486":{"date":{"__isSmartRef__":true,"id":1487},"author":"sstamm","message":"","id":"AB2484A6-0707-4E13-845E-F0A5F48BBA3D"},"1487":{"isSerializedDate":true,"string":"Wed Feb 22 2012 02:59:45 GMT-0800 (PST)"},"1488":{"date":{"__isSmartRef__":true,"id":1489},"author":"sstamm","message":"","id":"568D2EFD-C535-43AE-8944-6D8B967129F5"},"1489":{"isSerializedDate":true,"string":"Wed Feb 22 2012 03:23:04 GMT-0800 (PST)"},"1490":{"date":{"__isSmartRef__":true,"id":1491},"author":"sstamm","message":"","id":"F72B746E-B170-4EFB-9074-5E8770640B8A"},"1491":{"isSerializedDate":true,"string":"Wed Feb 22 2012 03:36:14 GMT-0800 (PST)"},"1492":{"date":{"__isSmartRef__":true,"id":1493},"author":"sstamm","message":"","id":"663F147A-9084-4AC3-81A7-1E7BA6547F08"},"1493":{"isSerializedDate":true,"string":"Wed Feb 22 2012 03:43:10 GMT-0800 (PST)"},"1494":{"date":{"__isSmartRef__":true,"id":1495},"author":"sstamm","message":"","id":"1C1391AE-5722-4707-BE52-F0094FC56829"},"1495":{"isSerializedDate":true,"string":"Wed Feb 22 2012 05:02:04 GMT-0800 (PST)"},"1496":{"replaceRenderContext":"replaceRenderContextHTML","init":"initHTML","append":"appendHTML","remove":"removeHTML","triggerEvent":"triggerEventHTML","setTransform":"setTransformHTML","setPosition":"setPositionHTML","setRotation":"setRotationHTML","setExtent":"setExtentHTML","setScale":"setScaleHTML","setVisible":"setVisibleHTML","adjustOrigin":"adjustOriginHTML","setPivotPoint":"setPivotPointHTML","setClipMode":"setClipModeHTML","showsVerticalScrollBar":"showsVerticalScrollBarHTML","showsHorizontalScrollBar":"showsHorizontalScrollBarHTML","getScrollBarExtent":"getScrollBarExtentHTML","setHandStyle":"setHandStyleHTML","setPointerEvents":"setPointerEventsHTML","setToolTip":"setToolTipHTML","focus":"focusHTML","blur":"blurHTML","setFocusable":"setFocusableHTML"},"1497":{"morph":{"__isSmartRef__":true,"id":1365},"__SourceModuleName__":"Global.lively.morphic.Events","__LivelyClassName__":"lively.morphic.EventHandler"},"1498":{"x":266,"y":223,"__SourceModuleName__":"Global.lively.morphic.Graphics","__LivelyClassName__":"Point"},"1499":{"adjustForNewBounds":true},"1500":{"x":171,"y":-13,"__SourceModuleName__":"Global.lively.morphic.Graphics","__LivelyClassName__":"Point"},"1501":{"loadPart":{"__isSmartRef__":true,"id":1502},"loadFinished":{"__isSmartRef__":true,"id":1506},"loadPartByName":{"__isSmartRef__":true,"id":1510}},"1502":{"varMapping":{"__isSmartRef__":true,"id":1503},"source":"function loadPart(partItem, isAsync) {\n this.partItem = partItem;\n \n this.openInWorld();\n if(partItem.part) {\n this.setExtent(partItem.part.getExtent());\n }\n this.align(this.bounds().center(), $world.visibleBounds().center());\n \n \n if(typeof isAsync === \"function\") {\n this.callback = isAsync;\n }\n\n connect(partItem, 'part', this, \"loadFinished\");\n\n partItem.loadPart(isAsync);\n\n return partItem.part;\n\n}","funcProperties":{"__isSmartRef__":true,"id":1504},"__SourceModuleName__":"Global.lively.lang.Closure","__LivelyClassName__":"lively.Closure"},"1503":{"this":{"__isSmartRef__":true,"id":1365}},"1504":{"timestamp":{"__isSmartRef__":true,"id":1505},"user":"sstamm","tags":[]},"1505":{"isSerializedDate":true,"string":"Wed Feb 22 2012 05:01:53 GMT-0800 (PST)"},"1506":{"varMapping":{"__isSmartRef__":true,"id":1507},"source":"function loadFinished(part) {\n if(this.owner === $world.firstHand()) {\n $world.firstHand().removeAllMorphs();\n } else {\n this.owner.addMorph(part);\n part.align(part.bounds().center(), this.bounds().center());\n this.remove();\n }\n disconnect(this.partItem, 'part', this, \"loadFinished\");\n if(this.callback) {\n this.callback(part);\n }\n}","funcProperties":{"__isSmartRef__":true,"id":1508},"__SourceModuleName__":"Global.lively.lang.Closure","__LivelyClassName__":"lively.Closure"},"1507":{"this":{"__isSmartRef__":true,"id":1365}},"1508":{"timestamp":{"__isSmartRef__":true,"id":1509},"user":"sstamm","tags":[]},"1509":{"isSerializedDate":true,"string":"Wed Feb 22 2012 05:01:53 GMT-0800 (PST)"},"1510":{"varMapping":{"__isSmartRef__":true,"id":1511},"source":"function loadPartByName(partName, optPartsSpaceName, isAsync) {\n var partItem = lively.PartsBin.getPartItem(partName, optPartsSpaceName);\n return this.loadPart(partItem, isAsync);\n}","funcProperties":{"__isSmartRef__":true,"id":1512},"__SourceModuleName__":"Global.lively.lang.Closure","__LivelyClassName__":"lively.Closure"},"1511":{"this":{"__isSmartRef__":true,"id":1365}},"1512":{"timestamp":{"__isSmartRef__":true,"id":1513},"user":"sstamm","tags":[]},"1513":{"isSerializedDate":true,"string":"Thu Feb 02 2012 08:03:18 GMT-0800 (PST)"},"isSimplifiedRegistry":true}}]]>