","__LivelyClassName__":"lively.morphic.TextChunk"},"326":{"__SourceModuleName__":"Global.lively.morphic.TextCore","__LivelyClassName__":"lively.morphic.TextEmphasis"},"327":{"x":0,"y":0,"width":0,"height":0,"__SourceModuleName__":"Global","__LivelyClassName__":"Rectangle"},"328":{"submorphs":[{"__isSmartRef__":true,"id":329}],"scripts":[],"id":148,"shape":{"__isSmartRef__":true,"id":337},"grabbingEnabled":false,"droppingEnabled":false,"halosEnabled":true,"_Position":{"__isSmartRef__":true,"id":351},"value":false,"toggle":false,"isActive":true,"normalFill":{"__isSmartRef__":true,"id":341},"lighterFill":{"__isSmartRef__":true,"id":352},"label":{"__isSmartRef__":true,"id":329},"owner":{"__isSmartRef__":true,"id":319},"layout":{"__isSmartRef__":true,"id":361},"attributeConnections":[{"__isSmartRef__":true,"id":362},{"__isSmartRef__":true,"id":363}],"doNotSerialize":["$$getHelpText","$$fire"],"doNotCopyProperties":["$$getHelpText","$$fire"],"__SourceModuleName__":"Global.lively.morphic.Widgets","__LivelyClassName__":"lively.morphic.WindowControl"},"329":{"submorphs":[],"scripts":[],"id":149,"shape":{"__isSmartRef__":true,"id":330},"grabbingEnabled":false,"droppingEnabled":false,"halosEnabled":true,"fixedWidth":false,"_WhiteSpaceHandling":"pre","fixedHeight":true,"allowInput":false,"_FontFamily":"Helvetica","_Position":{"__isSmartRef__":true,"id":333},"_MaxTextWidth":null,"_MaxTextHeight":17,"textChunks":[{"__isSmartRef__":true,"id":334}],"_Padding":{"__isSmartRef__":true,"id":336},"owner":{"__isSmartRef__":true,"id":328},"isLabel":true,"eventsAreIgnored":true,"_FontSize":8,"__SourceModuleName__":"Global.lively.morphic.TextCore","_ClipMode":"hidden","__LivelyClassName__":"lively.morphic.Text"},"330":{"position":{"__isSmartRef__":true,"id":331},"_Extent":{"__isSmartRef__":true,"id":332},"_BorderWidth":0,"_BorderColor":{"__isSmartRef__":true,"id":313},"_Fill":null,"__SourceModuleName__":"Global.lively.morphic.Shapes","__LivelyClassName__":"lively.morphic.Shapes.Rectangle"},"331":{"x":0,"y":0,"__SourceModuleName__":"Global","__LivelyClassName__":"Point"},"332":{"x":17,"y":17,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"333":{"x":0,"y":0,"__SourceModuleName__":"Global","__LivelyClassName__":"Point"},"334":{"style":{"__isSmartRef__":true,"id":335},"morph":{"__isSmartRef__":true,"id":329},"__SourceModuleName__":"Global.lively.morphic.TextCore","storedString":"X","__LivelyClassName__":"lively.morphic.TextChunk"},"335":{"__SourceModuleName__":"Global.lively.morphic.TextCore","__LivelyClassName__":"lively.morphic.TextEmphasis"},"336":{"x":5,"y":0,"width":0,"height":0,"__SourceModuleName__":"Global","__LivelyClassName__":"Rectangle"},"337":{"position":{"__isSmartRef__":true,"id":338},"_Extent":{"__isSmartRef__":true,"id":339},"_BorderWidth":0,"_BorderColor":{"__isSmartRef__":true,"id":340},"_Fill":{"__isSmartRef__":true,"id":341},"_StrokeOpacity":0,"_BorderRadius":5,"__SourceModuleName__":"Global.lively.morphic.Shapes","__LivelyClassName__":"lively.morphic.Shapes.Rectangle"},"338":{"x":0,"y":0,"__SourceModuleName__":"Global","__LivelyClassName__":"Point"},"339":{"x":17,"y":17,"__SourceModuleName__":"Global","__LivelyClassName__":"Point"},"340":{"r":0.8392156862745098,"g":0.8392156862745098,"b":0.8392156862745098,"a":1,"__SourceModuleName__":"Global","__LivelyClassName__":"Color"},"341":{"stops":[{"__isSmartRef__":true,"id":342},{"__isSmartRef__":true,"id":344},{"__isSmartRef__":true,"id":346},{"__isSmartRef__":true,"id":348}],"vector":{"__isSmartRef__":true,"id":350},"__SourceModuleName__":"Global.lively.morphic.Shapes","__LivelyClassName__":"lively.morphic.LinearGradient"},"342":{"offset":0,"color":{"__isSmartRef__":true,"id":343}},"343":{"r":0.9600000000000001,"g":0.9600000000000001,"b":0.9600000000000001,"a":1,"__SourceModuleName__":"Global","__LivelyClassName__":"Color"},"344":{"offset":0.4,"color":{"__isSmartRef__":true,"id":345}},"345":{"r":0.8200000000000001,"g":0.8200000000000001,"b":0.8200000000000001,"a":1,"__SourceModuleName__":"Global","__LivelyClassName__":"Color"},"346":{"offset":0.6,"color":{"__isSmartRef__":true,"id":347}},"347":{"r":0.8200000000000001,"g":0.8200000000000001,"b":0.8200000000000001,"a":1,"__SourceModuleName__":"Global","__LivelyClassName__":"Color"},"348":{"offset":1,"color":{"__isSmartRef__":true,"id":349}},"349":{"r":0.94,"g":0.94,"b":0.94,"a":1,"__SourceModuleName__":"Global","__LivelyClassName__":"Color"},"350":{"x":0,"y":0,"width":0,"height":1,"__SourceModuleName__":"Global","__LivelyClassName__":"Rectangle"},"351":{"x":480,"y":3,"__SourceModuleName__":"Global","__LivelyClassName__":"Point"},"352":{"stops":[{"__isSmartRef__":true,"id":353},{"__isSmartRef__":true,"id":355},{"__isSmartRef__":true,"id":357},{"__isSmartRef__":true,"id":359}],"vector":{"__isSmartRef__":true,"id":350},"__SourceModuleName__":"Global.lively.morphic.Shapes","__LivelyClassName__":"lively.morphic.LinearGradient"},"353":{"offset":0,"color":{"__isSmartRef__":true,"id":354}},"354":{"r":0.98,"g":0.98,"b":0.98,"a":1,"__SourceModuleName__":"Global","__LivelyClassName__":"Color"},"355":{"offset":0.4,"color":{"__isSmartRef__":true,"id":356}},"356":{"r":0.91,"g":0.91,"b":0.91,"a":1,"__SourceModuleName__":"Global","__LivelyClassName__":"Color"},"357":{"offset":0.6,"color":{"__isSmartRef__":true,"id":358}},"358":{"r":0.91,"g":0.91,"b":0.91,"a":1,"__SourceModuleName__":"Global","__LivelyClassName__":"Color"},"359":{"offset":1,"color":{"__isSmartRef__":true,"id":360}},"360":{"r":0.97,"g":0.97,"b":0.97,"a":1,"__SourceModuleName__":"Global","__LivelyClassName__":"Color"},"361":{"moveHorizontal":true},"362":{"sourceObj":{"__isSmartRef__":true,"id":328},"sourceAttrName":"getHelpText","targetObj":{"__isSmartRef__":true,"id":308},"targetMethodName":"getCloseHelp","converter":null,"converterString":null,"updater":null,"updaterString":null,"__SourceModuleName__":"Global.lively.bindings","__LivelyClassName__":"AttributeConnection"},"363":{"sourceObj":{"__isSmartRef__":true,"id":328},"sourceAttrName":"fire","targetObj":{"__isSmartRef__":true,"id":308},"targetMethodName":"initiateShutdown","converter":null,"converterString":null,"updater":null,"updaterString":null,"__SourceModuleName__":"Global.lively.bindings","__LivelyClassName__":"AttributeConnection"},"364":{"submorphs":[{"__isSmartRef__":true,"id":365}],"scripts":[],"id":150,"shape":{"__isSmartRef__":true,"id":373},"grabbingEnabled":false,"droppingEnabled":false,"halosEnabled":true,"_Position":{"__isSmartRef__":true,"id":376},"value":false,"toggle":false,"isActive":true,"normalFill":{"__isSmartRef__":true,"id":341},"lighterFill":{"__isSmartRef__":true,"id":377},"label":{"__isSmartRef__":true,"id":365},"owner":{"__isSmartRef__":true,"id":319},"attributeConnections":[{"__isSmartRef__":true,"id":386},{"__isSmartRef__":true,"id":387}],"doNotSerialize":["$$getHelpText","$$fire"],"doNotCopyProperties":["$$getHelpText","$$fire"],"__SourceModuleName__":"Global.lively.morphic.Widgets","__LivelyClassName__":"lively.morphic.WindowControl"},"365":{"submorphs":[],"scripts":[],"id":151,"shape":{"__isSmartRef__":true,"id":366},"grabbingEnabled":false,"droppingEnabled":false,"halosEnabled":true,"fixedWidth":false,"_WhiteSpaceHandling":"pre","fixedHeight":true,"allowInput":false,"_FontFamily":"Helvetica","_Position":{"__isSmartRef__":true,"id":369},"_MaxTextWidth":null,"_MaxTextHeight":17,"textChunks":[{"__isSmartRef__":true,"id":370}],"_Padding":{"__isSmartRef__":true,"id":372},"owner":{"__isSmartRef__":true,"id":364},"isLabel":true,"eventsAreIgnored":true,"_FontSize":8,"__SourceModuleName__":"Global.lively.morphic.TextCore","_ClipMode":"hidden","__LivelyClassName__":"lively.morphic.Text"},"366":{"position":{"__isSmartRef__":true,"id":367},"_Extent":{"__isSmartRef__":true,"id":368},"_BorderWidth":0,"_BorderColor":{"__isSmartRef__":true,"id":313},"_Fill":null,"__SourceModuleName__":"Global.lively.morphic.Shapes","__LivelyClassName__":"lively.morphic.Shapes.Rectangle"},"367":{"x":0,"y":0,"__SourceModuleName__":"Global","__LivelyClassName__":"Point"},"368":{"x":17,"y":17,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"369":{"x":0,"y":0,"__SourceModuleName__":"Global","__LivelyClassName__":"Point"},"370":{"style":{"__isSmartRef__":true,"id":371},"morph":{"__isSmartRef__":true,"id":365},"__SourceModuleName__":"Global.lively.morphic.TextCore","storedString":"M","__LivelyClassName__":"lively.morphic.TextChunk"},"371":{"__SourceModuleName__":"Global.lively.morphic.TextCore","__LivelyClassName__":"lively.morphic.TextEmphasis"},"372":{"x":5,"y":0,"width":0,"height":0,"__SourceModuleName__":"Global","__LivelyClassName__":"Rectangle"},"373":{"position":{"__isSmartRef__":true,"id":374},"_Extent":{"__isSmartRef__":true,"id":375},"_BorderWidth":0,"_BorderColor":{"__isSmartRef__":true,"id":340},"_Fill":{"__isSmartRef__":true,"id":341},"_StrokeOpacity":0,"_BorderRadius":5,"__SourceModuleName__":"Global.lively.morphic.Shapes","__LivelyClassName__":"lively.morphic.Shapes.Rectangle"},"374":{"x":0,"y":0,"__SourceModuleName__":"Global","__LivelyClassName__":"Point"},"375":{"x":17,"y":17,"__SourceModuleName__":"Global","__LivelyClassName__":"Point"},"376":{"x":3,"y":3,"__SourceModuleName__":"Global","__LivelyClassName__":"Point"},"377":{"stops":[{"__isSmartRef__":true,"id":378},{"__isSmartRef__":true,"id":380},{"__isSmartRef__":true,"id":382},{"__isSmartRef__":true,"id":384}],"vector":{"__isSmartRef__":true,"id":350},"__SourceModuleName__":"Global.lively.morphic.Shapes","__LivelyClassName__":"lively.morphic.LinearGradient"},"378":{"offset":0,"color":{"__isSmartRef__":true,"id":379}},"379":{"r":0.98,"g":0.98,"b":0.98,"a":1,"__SourceModuleName__":"Global","__LivelyClassName__":"Color"},"380":{"offset":0.4,"color":{"__isSmartRef__":true,"id":381}},"381":{"r":0.91,"g":0.91,"b":0.91,"a":1,"__SourceModuleName__":"Global","__LivelyClassName__":"Color"},"382":{"offset":0.6,"color":{"__isSmartRef__":true,"id":383}},"383":{"r":0.91,"g":0.91,"b":0.91,"a":1,"__SourceModuleName__":"Global","__LivelyClassName__":"Color"},"384":{"offset":1,"color":{"__isSmartRef__":true,"id":385}},"385":{"r":0.97,"g":0.97,"b":0.97,"a":1,"__SourceModuleName__":"Global","__LivelyClassName__":"Color"},"386":{"sourceObj":{"__isSmartRef__":true,"id":364},"sourceAttrName":"getHelpText","targetObj":{"__isSmartRef__":true,"id":308},"targetMethodName":"getMenuHelp","converter":null,"converterString":null,"updater":null,"updaterString":null,"__SourceModuleName__":"Global.lively.bindings","__LivelyClassName__":"AttributeConnection"},"387":{"sourceObj":{"__isSmartRef__":true,"id":364},"sourceAttrName":"fire","targetObj":{"__isSmartRef__":true,"id":308},"targetMethodName":"showTargetMorphMenu","converter":null,"converterString":null,"updater":null,"updaterString":null,"__SourceModuleName__":"Global.lively.bindings","__LivelyClassName__":"AttributeConnection"},"388":{"submorphs":[{"__isSmartRef__":true,"id":389}],"scripts":[],"id":152,"shape":{"__isSmartRef__":true,"id":397},"grabbingEnabled":false,"droppingEnabled":false,"halosEnabled":true,"_Position":{"__isSmartRef__":true,"id":400},"value":false,"toggle":false,"isActive":true,"normalFill":{"__isSmartRef__":true,"id":341},"lighterFill":{"__isSmartRef__":true,"id":401},"label":{"__isSmartRef__":true,"id":389},"owner":{"__isSmartRef__":true,"id":319},"layout":{"__isSmartRef__":true,"id":410},"attributeConnections":[{"__isSmartRef__":true,"id":411},{"__isSmartRef__":true,"id":412}],"doNotSerialize":["$$getHelpText","$$fire"],"doNotCopyProperties":["$$getHelpText","$$fire"],"__SourceModuleName__":"Global.lively.morphic.Widgets","__LivelyClassName__":"lively.morphic.WindowControl"},"389":{"submorphs":[],"scripts":[],"id":153,"shape":{"__isSmartRef__":true,"id":390},"grabbingEnabled":false,"droppingEnabled":false,"halosEnabled":true,"fixedWidth":false,"_WhiteSpaceHandling":"pre","fixedHeight":true,"allowInput":false,"_FontFamily":"Helvetica","_Position":{"__isSmartRef__":true,"id":393},"_MaxTextWidth":null,"_MaxTextHeight":17,"textChunks":[{"__isSmartRef__":true,"id":394}],"_Padding":{"__isSmartRef__":true,"id":396},"owner":{"__isSmartRef__":true,"id":388},"isLabel":true,"eventsAreIgnored":true,"_FontSize":8,"__SourceModuleName__":"Global.lively.morphic.TextCore","_ClipMode":"hidden","__LivelyClassName__":"lively.morphic.Text"},"390":{"position":{"__isSmartRef__":true,"id":391},"_Extent":{"__isSmartRef__":true,"id":392},"_BorderWidth":0,"_BorderColor":{"__isSmartRef__":true,"id":313},"_Fill":null,"__SourceModuleName__":"Global.lively.morphic.Shapes","__LivelyClassName__":"lively.morphic.Shapes.Rectangle"},"391":{"x":0,"y":0,"__SourceModuleName__":"Global","__LivelyClassName__":"Point"},"392":{"x":17,"y":17,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"393":{"x":0,"y":0,"__SourceModuleName__":"Global","__LivelyClassName__":"Point"},"394":{"style":{"__isSmartRef__":true,"id":395},"morph":{"__isSmartRef__":true,"id":389},"__SourceModuleName__":"Global.lively.morphic.TextCore","storedString":"–","__LivelyClassName__":"lively.morphic.TextChunk"},"395":{"__SourceModuleName__":"Global.lively.morphic.TextCore","__LivelyClassName__":"lively.morphic.TextEmphasis"},"396":{"x":5,"y":0,"width":0,"height":0,"__SourceModuleName__":"Global","__LivelyClassName__":"Rectangle"},"397":{"position":{"__isSmartRef__":true,"id":398},"_Extent":{"__isSmartRef__":true,"id":399},"_BorderWidth":0,"_BorderColor":{"__isSmartRef__":true,"id":340},"_Fill":{"__isSmartRef__":true,"id":341},"_StrokeOpacity":0,"_BorderRadius":5,"__SourceModuleName__":"Global.lively.morphic.Shapes","__LivelyClassName__":"lively.morphic.Shapes.Rectangle"},"398":{"x":0,"y":0,"__SourceModuleName__":"Global","__LivelyClassName__":"Point"},"399":{"x":17,"y":17,"__SourceModuleName__":"Global","__LivelyClassName__":"Point"},"400":{"x":461,"y":3,"__SourceModuleName__":"Global","__LivelyClassName__":"Point"},"401":{"stops":[{"__isSmartRef__":true,"id":402},{"__isSmartRef__":true,"id":404},{"__isSmartRef__":true,"id":406},{"__isSmartRef__":true,"id":408}],"vector":{"__isSmartRef__":true,"id":350},"__SourceModuleName__":"Global.lively.morphic.Shapes","__LivelyClassName__":"lively.morphic.LinearGradient"},"402":{"offset":0,"color":{"__isSmartRef__":true,"id":403}},"403":{"r":0.98,"g":0.98,"b":0.98,"a":1,"__SourceModuleName__":"Global","__LivelyClassName__":"Color"},"404":{"offset":0.4,"color":{"__isSmartRef__":true,"id":405}},"405":{"r":0.91,"g":0.91,"b":0.91,"a":1,"__SourceModuleName__":"Global","__LivelyClassName__":"Color"},"406":{"offset":0.6,"color":{"__isSmartRef__":true,"id":407}},"407":{"r":0.91,"g":0.91,"b":0.91,"a":1,"__SourceModuleName__":"Global","__LivelyClassName__":"Color"},"408":{"offset":1,"color":{"__isSmartRef__":true,"id":409}},"409":{"r":0.97,"g":0.97,"b":0.97,"a":1,"__SourceModuleName__":"Global","__LivelyClassName__":"Color"},"410":{"moveHorizontal":true},"411":{"sourceObj":{"__isSmartRef__":true,"id":388},"sourceAttrName":"getHelpText","targetObj":{"__isSmartRef__":true,"id":308},"targetMethodName":"getCollapseHelp","converter":null,"converterString":null,"updater":null,"updaterString":null,"__SourceModuleName__":"Global.lively.bindings","__LivelyClassName__":"AttributeConnection"},"412":{"sourceObj":{"__isSmartRef__":true,"id":388},"sourceAttrName":"fire","targetObj":{"__isSmartRef__":true,"id":308},"targetMethodName":"toggleCollapse","converter":null,"converterString":null,"updater":null,"updaterString":null,"__SourceModuleName__":"Global.lively.bindings","__LivelyClassName__":"AttributeConnection"},"413":{"position":{"__isSmartRef__":true,"id":414},"_Extent":{"__isSmartRef__":true,"id":415},"_BorderWidth":2,"_BorderColor":{"__isSmartRef__":true,"id":416},"_Fill":{"__isSmartRef__":true,"id":282},"_StrokeOpacity":1,"_BorderRadius":"8px 8px 0px 0px","__SourceModuleName__":"Global.lively.morphic.Shapes","__LivelyClassName__":"lively.morphic.Shapes.Rectangle"},"414":{"x":0,"y":0,"__SourceModuleName__":"Global","__LivelyClassName__":"Point"},"415":{"x":500,"y":22,"__SourceModuleName__":"Global","__LivelyClassName__":"Point"},"416":{"r":0.4,"g":0.4,"b":0.4,"a":1,"__SourceModuleName__":"Global","__LivelyClassName__":"Color"},"417":{"resizeWidth":true,"adjustForNewBounds":true},"418":{"x":0,"y":0,"__SourceModuleName__":"Global","__LivelyClassName__":"Point"},"419":{"x":500,"y":22,"__SourceModuleName__":"Global","__LivelyClassName__":"Point"},"420":{"_BorderWidth":0,"_Fill":null,"_StrokeOpacity":0,"_BorderRadius":0,"_Extent":{"__isSmartRef__":true,"id":421},"__SourceModuleName__":"Global.lively.morphic.Shapes","__LivelyClassName__":"lively.morphic.Shapes.Rectangle"},"421":{"x":500,"y":222,"__SourceModuleName__":"Global","__LivelyClassName__":"Point"},"422":{"adjustForNewBounds":true},"423":{"x":9.07811715619522,"y":814.4441658876093,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"424":{"x":500,"y":222,"__SourceModuleName__":"Global","__LivelyClassName__":"Point"},"425":{"x":400,"y":819,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"426":{"submorphs":[{"__isSmartRef__":true,"id":427},{"__isSmartRef__":true,"id":1615}],"scripts":[],"id":639,"shape":{"__isSmartRef__":true,"id":1705},"droppingEnabled":true,"halosEnabled":true,"draggingEnabled":true,"layout":{"__isSmartRef__":true,"id":1707},"_Position":{"__isSmartRef__":true,"id":1708},"priorExtent":{"__isSmartRef__":true,"id":1709},"targetMorph":{"__isSmartRef__":true,"id":427},"titleBar":{"__isSmartRef__":true,"id":1615},"contentOffset":{"__isSmartRef__":true,"id":1614},"collapsedTransform":null,"collapsedExtent":null,"expandedTransform":null,"expandedExtent":null,"ignoreEventsOnExpand":false,"owner":{"__isSmartRef__":true,"id":0},"highlighted":true,"_Rotation":0,"_Scale":1,"prevDragPos":{"__isSmartRef__":true,"id":1710},"__LivelyClassName__":"lively.morphic.Window","__SourceModuleName__":"Global.lively.morphic.Widgets"},"427":{"submorphs":[{"__isSmartRef__":true,"id":428},{"__isSmartRef__":true,"id":1547},{"__isSmartRef__":true,"id":1569},{"__isSmartRef__":true,"id":627},{"__isSmartRef__":true,"id":1493},{"__isSmartRef__":true,"id":1515},{"__isSmartRef__":true,"id":1525},{"__isSmartRef__":true,"id":1591},{"__isSmartRef__":true,"id":1535},{"__isSmartRef__":true,"id":1597},{"__isSmartRef__":true,"id":1602},{"__isSmartRef__":true,"id":441},{"__isSmartRef__":true,"id":477},{"__isSmartRef__":true,"id":501},{"__isSmartRef__":true,"id":525},{"__isSmartRef__":true,"id":549},{"__isSmartRef__":true,"id":573},{"__isSmartRef__":true,"id":597}],"scripts":[],"id":611,"shape":{"__isSmartRef__":true,"id":1609},"droppingEnabled":true,"halosEnabled":true,"layout":{"__isSmartRef__":true,"id":1613},"_Position":{"__isSmartRef__":true,"id":1614},"locationPane":{"__isSmartRef__":true,"id":428},"codeBaseDirBtn":{"__isSmartRef__":true,"id":1547},"localDirBtn":{"__isSmartRef__":true,"id":1569},"Pane1":{"__isSmartRef__":true,"id":627},"Pane2":{"__isSmartRef__":true,"id":1493},"Pane3":{"__isSmartRef__":true,"id":1515},"Pane4":{"__isSmartRef__":true,"id":1525},"midResizer":{"__isSmartRef__":true,"id":1591},"sourcePane":{"__isSmartRef__":true,"id":1535},"bottomResizer":{"__isSmartRef__":true,"id":1597},"commentPane":{"__isSmartRef__":true,"id":1602},"ownerWidget":{"__isSmartRef__":true,"id":439},"owner":{"__isSmartRef__":true,"id":426},"ownerApp":{"__isSmartRef__":true,"id":439},"targetURL":{"__isSmartRef__":true,"id":1546},"__LivelyClassName__":"lively.ide.BrowserPanel","__SourceModuleName__":"Global.lively.ide.BrowserFramework"},"428":{"submorphs":[],"scripts":[],"id":612,"shape":{"__isSmartRef__":true,"id":429},"grabbingEnabled":false,"droppingEnabled":false,"halosEnabled":true,"_Padding":{"__isSmartRef__":true,"id":434},"_ClipMode":"hidden","fixedWidth":true,"_WhiteSpaceHandling":"pre-wrap","fixedHeight":true,"allowInput":true,"_FontFamily":"Helvetica","_Position":{"__isSmartRef__":true,"id":435},"_MaxTextWidth":656,"_MaxTextHeight":22,"textChunks":[{"__isSmartRef__":true,"id":436}],"owner":{"__isSmartRef__":true,"id":427},"isInputLine":true,"noEval":true,"styleClass":["Browser_locationInput"],"attributeConnections":[{"__isSmartRef__":true,"id":438}],"doNotSerialize":["$$savedTextString"],"doNotCopyProperties":["$$savedTextString"],"__LivelyClassName__":"lively.morphic.Text","__SourceModuleName__":"Global.lively.morphic.TextCore"},"429":{"_Position":{"__isSmartRef__":true,"id":430},"_Extent":{"__isSmartRef__":true,"id":431},"_BorderWidth":1,"_BorderColor":{"__isSmartRef__":true,"id":432},"_Fill":{"__isSmartRef__":true,"id":433},"__LivelyClassName__":"lively.morphic.Shapes.Rectangle","__SourceModuleName__":"Global.lively.morphic.Shapes"},"430":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"431":{"x":656,"y":22,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"432":{"r":0,"g":0,"b":0,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global"},"433":{"r":1,"g":1,"b":1,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global"},"434":{"x":2,"y":1,"width":0,"height":0,"__LivelyClassName__":"Rectangle","__SourceModuleName__":"Global"},"435":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"436":{"style":{"__isSmartRef__":true,"id":437},"morph":{"__isSmartRef__":true,"id":428},"storedString":"http://www.lively-kernel.org/repository/webwerkstatt/lively/morphic/","__LivelyClassName__":"lively.morphic.TextChunk","__SourceModuleName__":"Global.lively.morphic.TextCore"},"437":{"__LivelyClassName__":"lively.morphic.TextEmphasis","__SourceModuleName__":"Global.lively.morphic.TextCore"},"438":{"sourceObj":{"__isSmartRef__":true,"id":428},"sourceAttrName":"savedTextString","targetObj":{"__isSmartRef__":true,"id":439},"targetMethodName":"setTargetURL","converter":null,"converterString":"function (value) { return new URL(value) }","updater":null,"updaterString":null,"__LivelyClassName__":"AttributeConnection","__SourceModuleName__":"Global.lively.bindings"},"439":{"buttonCommands":[{"__isSmartRef__":true,"id":440},{"__isSmartRef__":true,"id":476},{"__isSmartRef__":true,"id":500},{"__isSmartRef__":true,"id":524},{"__isSmartRef__":true,"id":548},{"__isSmartRef__":true,"id":572},{"__isSmartRef__":true,"id":596}],"RootFilters":[{"__isSmartRef__":true,"id":620}],"Pane1Filters":[{"__isSmartRef__":true,"id":621},{"__isSmartRef__":true,"id":622}],"Pane2Filters":[{"__isSmartRef__":true,"id":623}],"Pane3Filters":[{"__isSmartRef__":true,"id":624}],"Pane4Filters":[{"__isSmartRef__":true,"id":625}],"evaluate":true,"panel":{"__isSmartRef__":true,"id":427},"attributeConnections":[{"__isSmartRef__":true,"id":626},{"__isSmartRef__":true,"id":1492},{"__isSmartRef__":true,"id":1514},{"__isSmartRef__":true,"id":1524},{"__isSmartRef__":true,"id":1534},{"__isSmartRef__":true,"id":1545}],"SourceString":"module('lively.morphic.TextCore').requires('cop.Layers', 'lively.morphic.Core').toRun(function() {\n\nlively.morphic.Morph.subclass('lively.morphic.Text', Trait('ScrollableTrait'),\n'properties', {\n\tstyle: {\n\t\tborderWidth: 1,\n\t\tborderColor: Color.black,\n\t\tfill: Color.veryLightGray,\n\t\tfixedWidth: true,\n\t\tfixedHeight: true,\n\t\tenableGrabbing: false,\n\t\tenableDropping: false,\n\t\tallowInput: true,\n\t\tclipMode: 'visible',\n\t\tfontFamily: 'Helvetica',\n\t\twhiteSpaceHandling: 'pre-wrap',\n\t\tpadding: Rectangle.inset(2, 1),\n\t},\n\t\n\tautoAdjustPadding: true,\n\tsuppressDropping: true,\n\n\t// wrap: lively.Text.WrapStyle.Normal,\n\t// tabWidth: 4,\n\t// maxSafeSize: 10e4,\n\t// locale: Locale,\n\t// acceptInput: true, // whether it accepts changes to text KP: change: interactive changes\n\t// autoAccept: false,\n\t// isSelecting: false, // true if last onmousedown was in character area (hit>0)\n\t// selectionPivot: null, // index of hit at onmousedown\n\t// lineNumberHint: 0,\n\t// hasKeyboardFocus: false,\n\t// useChangeClue: false,\n},\n'initializing', {\n\tinitialize: function($super, bounds, string) {\n\t\t$super(this.defaultShape());\n\t\tif (bounds) this.setBounds(bounds);\n\t\tthis.textString = string || '';\n\t\tthis.charsTyped = '';\n\t\tthis.fit();\n\t},\n},\n'styling', {\n\tapplyStyle: function($super, spec) {\n\t\t$super(spec);\n\t\tif (spec.fixedWidth !== undefined) this.setFixedWidth(spec.fixedWidth);\n\t\tif (spec.fixedHeight !== undefined) this.setFixedHeight(spec.fixedHeight);\n\t\tif (spec.allowInput !== undefined) this.allowInput = spec.allowInput;\n\t\tif (spec.fontFamily !== undefined) this.setFontFamily(spec.fontFamily);\n\t\tif (spec.fontSize !== undefined) this.setFontSize(spec.fontSize);\n\t\tif (spec.textColor !== undefined) this.setTextColor(spec.textColor);\n\t\tif (spec.padding !== undefined) this.setPadding(spec.padding);\t\n\t\tif (spec.whiteSpaceHandling !== undefined) this.setWhiteSpaceHandling(spec.whiteSpaceHandling);\n\t},\n},\n'accessing', {\n\tsetExtent: function($super, value) {\n\t\t$super(value);\n\t\tthis.setMaxTextWidth(this.fixedWidth ? value.x : null);\n\t\tthis.setMaxTextHeight(this.fixedHeight ? value.y : null);\n\t},\n\tgetTextExtent: function() { return this.renderContextDispatch('getTextExtent') },\n\tgetTextBounds: function() { return pt(0,0).extent(this.getTextExtent()) },\n\n\tget textString() {\n\t\t// when the prototype property is accessed\n\t\tif (this === this.constructor.prototype) return;\n\t\tif (!this.cachedTextString)\n\t\t\tthis.cachedTextString = this.renderContextDispatch('getTextString');\n\t\treturn this.cachedTextString;\n\t},\n\tset textString(string) {\n\t\tstring = String(string);\n\n\t\tthis.fixChunks();\n\t\tthis.removeTextChunks();\n\n\t\tthis.firstTextChunk().textString = string;\n\t\t\n\t\tthis.cachedTextString = string;\n\n\t\tlively.bindings.signal(this, 'textString', string);\n\t\treturn string;\n\t},\n\n\tsetTextString: function(string) { return this.textString = string },\n\tgetTextString: function() { return this.textString },\n\tappendTextString: function(string) { return this.textString += string },\n\n\tsetTextColor: function(color) { return this.morphicSetter('TextColor', color) },\n\tgetTextColor: function() { return this.morphicGetter('TextColor') },\n\tsetFontSize: function(size) { return this.morphicSetter('FontSize', size) },\n\tgetFontSize: function() { return this.morphicGetter('FontSize') },\n\tsetFontFamily: function(fontName) { return this.morphicSetter('FontFamily', fontName) },\n\tgetFontFamily: function() { return this.morphicGetter('FontFamily') },\n\n\tsetPadding: function(rect) { return this.morphicSetter('Padding', rect) },\n\tgetPadding: function() { return this.morphicGetter('Padding') },\n\tsetFixedWidth: function(bool) {\n\t\tthis.fixedWidth = bool;\n\t\tthis.setWhiteSpaceHandling(bool ? 'pre-wrap' : 'pre');\n\t\tthis.fit();\nthis.fit();\n\t},\n\tsetFixedHeight: function(bool) {\n\t\tthis.fixedHeight = bool\n\t\tthis.fit();\n\t},\n\tsetMaxTextWidth: function(value) {\n\t\tthis.morphicSetter('MaxTextWidth', value)\n\t},\n\tsetMaxTextHeight: function(value) {\n\t\tthis.morphicSetter('MaxTextHeight', value)\n\t},\n},\n'rendering', {\n\tupdateText: function(string) {\n\t\tthis.renderContextDispatch('updateText', string || this.textString);\n\t\tthis.fit();\n\t},\n\tgrowOrShrinkToFit: function() { this.setExtent(this.getTextExtent()) },\n\tfit: function() {\n\t\tif (!this.owner) return;\n\t\tvar extent = this.getExtent(),\n\t\t\ttextExtent = this.getTextExtent(),\n\t\t\twidth = this.fixedWidth ? extent.x : textExtent.x,\n\t\t\theight = this.fixedHeight ? extent.y : textExtent.y;\n\t\tthis.setExtent(pt(width, height));\n\t},\n},\n'text modes', {\n\tbeLabel: function(customStyle) {\n\t\tthis.isLabel = true;\n\t\tvar labelStyle = {\n\t\t\tfill: null,\n\t\t\tborderWidth: 0,\n\t\t\tfixedWidth: false,\n\t\t\tfixedHeight: true,\n\t\t\tallowInput: false,\n\t\t\tclipMode: 'hidden',\n\t\t};\n\t\tif (customStyle) labelStyle = Object.merge([labelStyle, customStyle]);\n\t\tthis.applyStyle(labelStyle);\n\t\tthis.ignoreEvents();\n\t\treturn this;\n\t},\n\tbeInputLine: function(customStyle) {\n\t\tthis.isInputLine = true;\n\t\tvar inputLineStyle = {\n\t\t\tfixedWidth: false,\n\t\t\tfixedHeight: true,\n\t\t\tclipMode: 'hidden',\n\t\t\tallowInput: true,\n\t\t};\n\t\tif (customStyle) inputLineStyle = Object.merge([inputLineStyle, customStyle]);\n\t\tthis.applyStyle(inputLineStyle);\n\t\treturn this;\n\t},\n},\n'keyboard events', {\n\n\tonKeyDown: function(evt) {\n\t\tthis.cachedTextString = null;\n\n\t\tif (evt.isAltDown()) {\n\t\t\t// alt with arrow keys can trigger browser forward/backward actions\n\t\t\t// that can just navigate away from the current world and thus\n\t\t\t// causing data loss. this disables it\n\t\t\tUserAgent.isWindows && evt.stop();\n\t\t}\n\n\t\tif (evt.isCommandKey() || evt.isCtrlDown()) {\n\t\t\tvar result = this.processCommandKeys(evt);\n\t\t\tif (result) evt.stop();\n\t\t\t// return result;\n\t\t}\n\n\t\t// Opera fix: evt.stop in onKeyPress does not seem to work\n\t\tevt.stopPropagation();\n\n\t\tvar c = evt.getKeyCode();\n\t\tif (c === Event.KEY_DELETE) return this.onDelPressed(evt);\n\t\tif (c === Event.KEY_BACKSPACE) return this.onBackspacePressed(evt);\n\t\tif (c === Event.KEY_TAB) return this.onTabPressed(evt);\n\t\tif (c === Event.KEY_RETURN) return this.onEnterPressed(evt);\n\t\tif (c === Event.KEY_HOME) return this.onHomePressed(evt);\n\t\tif (c === Event.KEY_END) return this.onEndPressed(evt);\n\t\tif (c === Event.KEY_PAGEUP) return this.onPageUpPressed(evt);\n\t\tif (c === Event.KEY_PAGEDOWN) return this.onPageDownPressed(evt);\n\n\t\treturn true;\n\t},\n\tonKeyUp: function(evt) {\n\t\t// textString getter is expensive so only trigger when observers exist\n\t\t// Note that textString may not be changed, e.g. when pressing a control key only\n\t\tif (this.attributeConnections)\n\t\t\tlively.bindings.signal(this, 'textString', this.textString);\n\n\t\tthis.fit();\n\n\t\tevt.stop();\n\t\treturn true;\n\t},\n\tonKeyPress: function(evt) {\n\t\tthis.cachedTextString = null;\n\n\t\t// save info for 'More' command\n\t\tthis.rememberSelectionForDoMore('onKeyPress');\n\n\t\tvar key = evt.getKeyChar();\n\t\tif (key && key.toLowerCase() == \"v\" && evt.isCommandKey()) {\n\t\t\tthis.charsTyped += TextMorph.clipboardString;\n\t\t} else {\n\t\t\tthis.charsTyped += key;\n\t\t}\n\n\t\t// if (this.textString.length == 0) this.textString += key;\n\n\t\tthis.fixChunksDelayed();\n\t\tevt.stopPropagation()\n\t\treturn true;\n\t},\n\tonPaste: function(evt) {\n\t\tthis.fixChunksDelayed()\n\t},\n\n\tprocessCommandKeys: function(evt) {\n\t\tvar key = evt.getKeyChar();\n\t\t// alert(\"key \" + key)\n\t\tif (key) key = key.toLowerCase();\n\n\t\tif (evt.isShiftDown()) { // shifted commands here...\n\t\t\tswitch (key) {\n\t\t\t\tcase \"i\": { this.doInspect(); return true; }\n\t\t\t\tcase \"p\": { this.doListProtocol(); return true; }\n\t\t\t}\n\t\t}\n\n\t\tswitch (key) {\n\t\t\tcase \"d\": { this.doDoit(); return true; } // Doit\n\t\t\tcase \"p\": { this.doPrintit(); return true; } // Printit\n\t\t\tcase \"s\": { this.doSave(); return true; }\n\t\t\tcase \"b\": { this.toggleEmphasisForSelection('Boldness'); return true; }\n\t\t\tcase \"i\": { this.toggleEmphasisForSelection('Italics'); return true; }\n\t\t\tcase \"k\": { this.toggleEmphasisForSelection('Link'); return true; }\n\t\t\tcase \"o\": { this.toggleEmphasisForSelection('Doit'); return true; }\n\t\t\tcase \"t\": { alert(\"browser intercepts this t\"); return true;}\n\t\t\tcase \"l\": { this.toggleEmphasisForSelection('Font'); return true; }\n\t\t\tcase \"u\": { this.toggleEmphasisForSelection('Underline'); return true; }\n\t\t\t\n\n\t\t\tcase \"l\": { this.emphasizeSelection({align: 'left'}); return true; }\n\t\t\tcase \"r\": { this.emphasizeSelection({align: 'right'}); return true; }\n\t\t\tcase \"h\": { this.emphasizeSelection({align: 'center'}); return true; }\n\t\t\t// case \"j\": { this.emphasize({italic: true}); return true; }\n\n\t\t\tcase \"f\": { this.doFind(); return true; }\n\t\t\tcase \"g\": { this.doFindNext(); return true; }\n\t\t\tcase \"m\": { this.doMore(evt.isShiftDown()); return true; }\n\n\t\t \n\t\t\tcase \"a\": { if (this.charsTyped && this.charsTyped.length > 0) {\n\t\t\t\t\t// select recent typing, if any\n\t\t\t\t\tvar i = this.getSelectionRange()[1];\n\t\t\t\t\tthis.setSelectionRange(i - this.charsTyped.length, i);\n\t\t\t\t\tthis.charsTyped = '';\n\t\t\t\t\treturn true; }\n\t\t\t\t// Otherwise, do a normal select-all\n\t\t\t\treturn false; }\n\t\t\tcase \"x\": { lively.morphic.Text.clipboardString = this.selectionString();\n\t\t\t\treturn false; }\n\t\t\tcase \"c\": { lively.morphic.Text.clipboardString = this.selectionString();\n\t\t\t\treturn false; }\n\t\t\tcase \"v\": { // Just do the native paste\n\t\t\t\treturn false; }\n\t\t}\n\n\t\tswitch(evt.getKeyCode()) {\n\t\t\t// Font Size\n\t\t\tcase 187/*cmd+'+'*/: { \n\t\t\t\tif (this.hasNullSelection())\n\t\t\t\t\tthis.setFontSize(this.getFontSize() + 1);\n\t\t\t\telse\n\t\t\t\t\tthis.increaseFontSizeOfSelection();\n\t\t\t\treturn true;\n\t\t\t} \t\n\t\t\tcase 189/*cmd+'-'*/: { \n\t\t\t\tif (this.hasNullSelection())\n\t\t\t\t\tthis.setFontSize(this.getFontSize() - 1);\n\t\t\t\telse\n\t\t\t\t\tthis.decreaseFontSizeOfSelection();\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\t// indent/outdent selection\n\t\t\tcase 221/*cmd+]*/: { this.indentSelection(); return true }\n\t\t\tcase 219/*cmd+[*/: { this.outdentSelection(); return true }\n\t\t\t\n\t\t\t// comment/uncoment selection\n\t\t\tcase 191 /*cmd+/*/: { this.addOrRemoveComment(); return true }\n\t\t}\n\n\t\treturn false;\n\t},\t\t\n\tdoDoit: function() { this.evalSelection(false) },\n\tdoPrintit: function() { this.evalSelection(true) },\n\tdoSave: function() {\n\t\t// resetting cachedTextString is necessary when doSave is not triggered by\n\t\t// cmd+s but from outside (e.g. from a button). The cachedTextString would not have\n\t\t// the current textString but an old one\n\t\tthis.cachedTextString = null;\n\t\tthis.savedTextString = this.textString;\n\t},\n\tdoListProtocol: function() {\n\t\tnew lively.morphic.Text.ProtocolLister(this).evalSelectionAndOpenListForProtocol();\n\t},\n\n\tdoFind: function() {\n\t\tvar text = this;\n\t\tthis.world() && this.world().prompt(\n\t\t\t\"Enter the text you wish to find...\", \n\t\t\tfunction(response) {\n\t\t\t\tif (!response) return;\n\t\t\t\ttext.focus();\n\t\t\t\treturn text.searchForFind(response, text.getSelectionRange()[1]);\n\t\t\t}, this.lastSearchString);\n\t},\n\n\tdoFindNext: function() {\n\t\tif (this.lastSearchString)\n\t\tthis.searchForFind(this.lastSearchString,\n\t\t\t// this.getSelectionRange()[0]\n\t\t\tthis.lastFindLoc + this.lastSearchString.length\n\t\t);\n\t},\n\t\n\tdoMore: function(doMuchMore) {\n\t\tif (doMuchMore) { // call with true (shift-M) for replace-all\n\t\t\t// Simplest way: just do N replacements\n\t\t\twhile (this.doMore(false)) { } // Keep repeating the change while possible\n\t\t\treturn;\n\t\t}\n\t\t// Return of true or false used by doMuchMore\n\t\tif (!this.charsReplaced || this.charsReplaced.length == 0) return false;\n\t\tthis.searchForFind(this.charsReplaced, this.lastFindLoc, 'noWrap');\n\t\tif (this.selectionString() != this.charsReplaced) return false;\n\t\tvar holdChars = this.charsReplaced;\t // Save charsReplaced\n\t\tvar holdLastFindLoc = this.lastFindLoc;\n\t\tthis.insertAtCursor(this.charsTyped, true, true); \n\t\tthis.charsReplaced = holdChars ; // Restore charsReplaced after above\n\t\tthis.lastFindLoc = holdLastFindLoc;\n\t\treturn true;\n\t},\n\tdoInspect: function() {\n\t\tvar obj = this.evalSelection();\n\t\tif (obj) this.world().openInspectorFor(obj)\n\t},\n\n\trememberSelectionForDoMore: function(fromWhere) {\n\t\t// This gets called from any typing. It can tell what is being\n\t\t// replaced by testing for a non-zero selection.\n\t\t// At that point, it also records the location consistent with DoMore\n\t\t// and initializes charsTyped which will collect the replacement characters\n\t\tvar sel = this.selectionString();\n\t\tif (!sel || sel == '') return; // null selection means no replacement\n\n\t\tthis.charsReplaced = sel;\n\t\tthis.lastFindLoc = this.getSelectionRange()[0] - sel.length;\n\t\tthis.charsTyped = '';\n\t},\n\n\n\tindentSelection: function() {\n\t\tvar tab = '\\t';\n\t\tthis.modifySelectedLines(function(line) { return line.length == 0 ? line : tab + line });\n\t},\n\toutdentSelection: function() {\n\t\tvar tab = '\\t', space = ' ';\n\t\tthis.modifySelectedLines(function(line) {\n\t\t\treturn (line.startsWith(space) || line.startsWith(tab)) ? line.substring(1,line.length) : line\n\t\t});\n\t},\n\tdoExchange: function() {\n\t\t// Not yet working - DI\n\t\tvar sel1 = this.selectionRange;\n\t\tvar sel2 = this.previousSelection;\n\n\t\tvar d = 1;\t// direction current selection will move\n\t\tif (sel1[0] > sel2[0]) {var t = sel1; sel1 = sel2; sel2 = t; d = -1} // swap so sel1 is first\n\t\tif (sel1[1] >= sel2[0]) return; // ranges must not overlap\n\n\t\tvar fullText = (this.textStyle) ? this.getRichText() : this.textString;\n\t\tvar txt1 = fullText.substring(sel1[0], sel1[1]+1);\n\t\tvar txt2 = fullText.substring(sel2[0], sel2[1]+1);\n\t\tvar between = fullText.substring(sel1[1]+1, sel2[0]);\n\n\t\tvar d1 = (txt2.size() + between.size()); // amount to move sel1\n\t\tvar d2 = (txt1.size() + between.size()); // amount to move sel2\n\t\tvar newSel = [sel1[0]+d1, sel1[1]+d1];\n\t\tvar newPrev = [sel2[0]-d2, sel2[1]-d2];\n\t\tif (d < 0) { var t = newSel; newSel = newPrev;\t newPrev = t; }\n\t\tvar replacement = txt2.concat(between.concat(txt1));\n\t\tthis.setSelectionRange(sel1[0], sel2[1]+1);\t // select range including both selections\n\t\tthis.replaceSelectionWith(replacement);\t // replace by swapped text\n\t\tthis.setSelectionRange(newSel[0], newSel[1]+1);\n\t\tthis.previousSelection = newPrev;\n\t\tthis.undoSelectionRange = d>0 ? sel1 : sel2;\n\t},\n\taddOrRemoveBrackets: function(bracketIndex) {\n\t\t// Not yet working - DI \n\t\tvar left = this.locale.charSet.leftBrackets[bracketIndex];\n\t\tvar right = this.locale.charSet.rightBrackets[bracketIndex];\n\t\t\n\t\tif (bracketIndex == 0) { left = \"/*\"; right = \"*/\"; }\n\t\n\t\tvar i1 = this.selectionRange[0];\n\t\tvar i2 = this.selectionRange[1];\n\t\t\n\t\tif (i1 - left.length >= 0 && this.textString.substring(i1-left.length,i1) == left &&\n\t\t\ti2 + right.length < this.textString.length && this.textString.substring(i2+1,i2+right.length+1) == right) {\n\t\t\t// selection was already in brackets -- remove them\n\t\t\tvar before = this.textString.substring(0,i1-left.length);\n\t\t\tvar replacement = this.textString.substring(i1,i2+1);\n\t\t\tvar after = this.textString.substring(i2+right.length+1,this.textString.length);\n\t\t\tthis.setTextString(before.concat(replacement,after));\n\t\t\tthis.setSelectionRange(before.length,before.length+replacement.length); \n\t\t} else { // enclose selection in brackets\n\t\t\tvar before = this.textString.substring(0,i1);\n\t\t\tvar replacement = this.textString.substring(i1,i2+1);\n\t\t\tvar after = this.textString.substring(i2+1,this.textString.length); \n\t\t\tthis.setTextString(before.concat(left,replacement,right,after));\n\t\t\tthis.setSelectionRange(before.length+left.length,before.length+left.length+replacement.length); \n\t\t}\n\t},\n\taddOrRemoveComment: function() {\n\t\tvar commentRegex = /^(\\s*)(\\/\\/\\s*)(.*)/,\n\t\t\tspacesRegex = /^(\\s*)(.*)/,\n\t\t\tnoSelection = this.selectionString() == '';\n\n\t\tif (noSelection) this.selectCurrentLine();\n\n\t\tthis.modifySelectedLines(function(line) {\n\t\t\tvar commented = commentRegex.test(line);\n\t\t\treturn (commented) ?\n\t\t\t\tline.replace(commentRegex, '$1$3') :\n\t\t\t\tline.replace(spacesRegex, '$1// $2');\n\t\t});\n\t},\n\tmodifySelectedLines: function(modifyFunc) {\n\t\t// this function calls modifyFunc on each line that is selected\n\t\t// modifyFunc can somehow change the line\n\t\t// the selection grows/shrinks with the modifications\n\t\tvar lines = this.selectionString().split('\\n')\n\t\tfor (var i = 0; i < lines.length; i++) {\n\t\t\tlines[i] = modifyFunc(lines[i], i);\n\t\t}\n\t\tvar replacement = lines.join('\\n');\n\t\tthis.insertAtCursor(replacement, true, true);\n\t},\n},\n'keyboard event reaction', {\n\tonEnterPressed: function(evt) {\n\t\tif (this.isInputLine) {\n\t\t\tthis.doSave();\n\t\t} else {\n\t\t\tvar range = this.getSelectionRange(),\n\t\t\t\tendIdx = Math.max(range[0], range[1]);\n\t\t\t// when at end insert a br alement if none is there\n\t\t\tif (this.textString.length == endIdx) {\n\t\t\t\tvar chunk = this.getTextChunks().last();\n\t\t\t\tchunk.ensureEndsWithBr();\n\t\t\t}\n\n\t\t\tthis.insertAtCursor('\\n', false, true)\n\t\t}\n\t\tevt.stop();\n\t\treturn true;\n\t},\n\tonBackspacePressed: function(evt) {\n\t\tif (this.charsTyped.length > 0)\n\t\t\tthis.charsTyped = this.charsTyped.substring(0, this.charsTyped.length-1);\n\t\tthis.fixChunksDelayed();\n\t\treturn true;\n\t},\n\tonDelPressed: function(evt) {\n\t\t// evt.stop();\n\t\t// if (this.hasNullSelection()) {\n\t\t\t// var sel = this.getSelectionRange();\n\t\t\t// this.setSelectionRange(sel[0], sel[0]+1);\n\t\t// }\n// alert('del ' + this.selectionString())\n\t\t// this.insertAtCursor('', false, true)\n\t\t// this.removeChunksNotUsed();\n\t\t// return true;\n\n\t\tif (this.charsTyped.length > 0)\n\t\t\tthis.charsTyped = this.charsTyped.substring(0, this.charsTyped.length-1);\n\t\tthis.fixChunksDelayed();\n\t\treturn true;\n\t},\n\tonTabPressed: function(evt) {\n\t\tthis.insertAtCursor('\\t', false, true)\n\n// FIXME implement better tabs\n// var span = XHTMLNS.create('span');\n// span.style.backgroundColor = 'green';\n// span.style.width = '2ex';\n// span.style.display = 'inline-block';\n// span.textContent = '\\t';\t\t\t\t\t\t\t\t\n// this.insertElementAtCursor(elem, false, true);\n// var nodeAndIdx = this.getTextElementAndLocalIndexForGlobalIndex(this.getSelectionRange()[0]);\n// var replacement = nodeAndIdx[0].splitText(nodeAndIdx[1]);\n// replacement.parentNode.insertBefore(span, replacement)\n// var sel = this.domSelection();\n// sel.removeAllRanges();\n// var range = document.createRange()\n// range.setStartAfter(span)\n// range.setEndAfter(span)\n// sel.addRange(range);\n// document.execCommand('insertHTML', null, Exporter.stringify(elem))\n\n\t\tevt.stop();\n\t\treturn true;\n\t},\n\tonHomePressed: function(evt) { return true },\n\tonEndPressed: function(evt) { return true },\n\tonPageUpPressed: function(evt) { return true },\n\tonPageDownPressed: function(evt) { return true },\n},\n'mouse events', {\n\tonMouseDown: function($super, evt) {\n\t\t// if clicked in the text we want the default thing to happen, at least in HTML\n\t\t// but do not want other morphs to handle the event as well, so return true for was handled\n\n\t\tif (!evt.isLeftMouseButtonDown()) return $super(evt);\n\t\tif (evt.isCommandKey()) { // for halos\n\t\t\t$super(evt);\n\t\t\tevt.stop();\n\t\t\treturn false;\n\t\t}\n\n\t\tif (this.isFocused())\n\t\t\tthis.priorSelectionRange = this.getSelectionRange(); // save for onMouseUp\n\n\t\t$super(evt); \n\n\t\tif (!this.allowInput && !this.allowsInput) {\n\t\t\tevt.stop();\n\t\t\treturn false;\n\t\t}\n\n\t\t// to prevent accidental scrolling to the top of the text\n\t\t// if (!this.isFocused()) evt.stop();\n\n\t\t// we clicked in morph but not in the text element itself\n\t\t// if (!this.getTextBounds().containsPoint(this.localize(evt.getPosition()))) {\n\t\t\t// this.focus();\n\t\t\t// evt.stop();\n\t\t// }\n\n\t\treturn true;\n\t},\n\tonSelectStart: function($super, evt) {\n\t\t// Allow HTML selection\n\t\treturn true;\n\t},\n\tonMouseUp: function($super, evt) {\n\n\t\tvar a = this.getSelectionRange();\n\t\t// this happens when text has lost selection\n\t\tif (!a) return $super(evt);\n\n\t\tthis.charsTyped = '';\n\n\t\t// test if we have a null selection and same as before\n\t\tif (this.priorSelectionRange != null\n\t\t && a[0] == a[1] // null selection\n\t\t && this.priorSelectionRange[0] == a[0]\n\t\t && this.priorSelectionRange[1] == a[1]) {\n\t\t\t// It is a null selection, repeated in the same place --\n\t\t\t// select word or range\n\t\t\tif (a[0] == 0 || a[0] == this.textString.length) {\n\t\t\t\tthis.setSelectionRange(0, this.textString.length); \n\t\t\t} else {\n\t\t\t\tvar range = this.selectWord(this.textString, a[0]);\n\t\t\t\tthis.setSelectionRange(range[0], range[1]+1); \n\t\t\t}\n\t\t}\n\t\treturn $super(evt);\n\t},\n\n\n},\n'selection', {\n\tdomSelection: function() {\n\t\tvar sel = Global.getSelection(), node = sel.focusNode, textNode = this.renderContext().textNode;\n\t\twhile(node) {\n\t\t\tif (textNode === node) return sel;\n\t\t\tnode = node.parentNode;\n\t\t}\n\n\t\t// we have no focus? ...try again\n\t\tthis.focus();\n\t\tsel = Global.getSelection(), node = sel.focusNode;\n\t\twhile(node) {\n\t\t\tif (textNode === node) return sel;\n\t\t\tnode = node.parentNode;\n\t\t}\n\n\t\treturn null\n\t},\n\n\tselectionString: function() {\n\t\tvar sel = this.domSelection();\n\t\treturn sel ? sel.toString() : '';\n\t},\n\n\tinsertAtCursor: function(string, selectIt, overwriteSelection) {\n\t\tthis.insertElementAtCursor(NodeFactory.createText(String(string)), selectIt, overwriteSelection);\n\t},\n\n\tinsertElementAtCursor: function(element, selectIt, overwriteSelection) {\n\t\t// FIXME refactor!!!\n\t\tvar node = element,\n\t\t\tselRange = this.getSelectionRange(),\n\t\t\tsel = this.domSelection(),\n\t\t\trange = sel.getRangeAt(0);\n\n\t\tif (overwriteSelection) {\n\t\t\t// save info for 'More' command\n\t\t\tthis.charsReplaced = range.toString();\n\t\t\tthis.lastFindLoc = this.getSelectionRange()[0] + element.textContent.length;\n\t\t\trange.deleteContents();\n\t\t\tvar selPosAfterOverwrite = Math.min(selRange[0],selRange[1]);\n\t\t\tthis.setSelectionRange(selPosAfterOverwrite, selPosAfterOverwrite)\n\t\t} else {\n\t\t\t// insert new node after current selection\n\t\t\t// after current selection depends on selection direction\n\t\t\t// either focusNode or anchorNode\n\t\t\tif (selRange[0] < selRange[1])\n\t\t\t\trange.setStart(sel.focusNode, sel.focusOffset);\n\t\t\telse\n\t\t\t\trange.setStart(sel.anchorNode, sel.anchorOffset);\n\t\t}\n\t\trange.insertNode(node);\n\t\tsel.removeAllRanges();\n\n\t\trange = document.createRange()\n\t\tif (selectIt) {\n\t\t\trange.selectNode(node)\n\t\t} else { // no real selection but set cursor, FIXME use setCursor or something\n\t\t\trange.setStartAfter(node)\n\t\t\trange.setEndAfter(node)\n\t\t}\n\t\tsel.addRange(range);\n\n\t\t// string has changed, removed cached version\n\t\tthis.cachedTextString = null;\n\t},\n\tremoveTextSelection: function() {},\n\tgetSelectionOrLineString: function() {\n\t\tvar sel = this.domSelection(),\n\t\t\trange = sel.getRangeAt(0);\n\t\tif (range.collapsed)\n\t\t\tthis.selectCurrentLine();\n\t\treturn this.selectionString();\n\t},\n\tselectCurrentLine: function() {\n\t\tvar sel = this.domSelection();\n\t\tif (sel.anchorNode) {\n\t\t\tsel.modify('move', 'left', 'lineboundary');\n\t\t\tsel.modify('extend', 'right', 'lineboundary')\n\t\t}\n\t},\n\n\tsetSelectionRange: function(start, end) {\n\t\tvar sel = this.domSelection();\n\t\tif (sel) sel.removeAllRanges();\n\n\t\t// actually it should not be necessary to switch the values\n\t\t// bot somehow range expects smaller value in setStart....\n\t\tif (start > end) {\n\t\t\tvar temp = end;\n\t\t\tend = start;\n\t\t\tstart = temp;\n\t\t}\n\t\tvar startBoundaryPoint = this.getTextElementAndLocalIndexForGlobalIndex(start),\n\t\t\tendBoundaryPoint = this.getTextElementAndLocalIndexForGlobalIndex(end);\n\n\t\t// found nothing to select...\n\t\tif (startBoundaryPoint === undefined && endBoundaryPoint === undefined) return;\n\t\tif (startBoundaryPoint === undefined) startBoundaryPoint = endBoundaryPoint;\n\t\tif (endBoundaryPoint === undefined) endBoundaryPoint = startBoundaryPoint;\n\t\tvar range = document.createRange();\n// alert('selecting ' + startBoundaryPoint[0].textContent + '[' + startBoundaryPoint[1] + ']-'\n\t// + endBoundaryPoint[0].textContent + '[' + endBoundaryPoint[1] + ']')\n\t\trange.setStart(startBoundaryPoint[0], startBoundaryPoint[1])\n\t\trange.setEnd(endBoundaryPoint[0], endBoundaryPoint[1])\n\t\tif (!sel) sel = Global.getSelection();\n\t\tsel.addRange(range);\n\t},\n\n\tgetSelectionRange: function() {\n\n\t\t// FIXME this only works for textNodes that have the form\n\t\t//
or \n\t\tvar parent = this.renderContext().textNode;\n\t\tvar textNodeType = parent.TEXT_NODE;\n\t\tvar textNodes = [];\n\t\tfor (var i = 0; i < parent.childNodes.length; i++) {\n\t\t\tvar child = parent.childNodes[i];\n\t\t\tif (child.nodeType === textNodeType) {\n\t\t\t\ttextNodes.push(child)\n\t\t\t} else {\n\t\t\t\tfor (var j = 0; j < child.childNodes.length; j++) {\n\t\t\t\t\tvar childchild = child.childNodes[j];\n\t\t\t\t\tif (childchild.nodeType === textNodeType)\n\t\t\t\t\t\ttextNodes.push(childchild)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// --------\n\n\t\t// this function calculates how many characters are between the start of\n\t\t// the parent element and the node.\n\t\t// The node is expected to be a childNode of parent\n\t\tfunction nodeOffsetFrom(node, offset) {\n\t\t\tvar offset = 0;\n\t\t\tfor (var i = 0; i < textNodes.length; i++) {\n\t\t\t\tvar nodeBefore = textNodes[i];\n\t\t\t\t// careful, actually this must be bitmasked\n\t\t\t\tif (node.compareDocumentPosition(nodeBefore) == node.DOCUMENT_POSITION_PRECEDING) {\n\t\t\t\t\toffset += nodeBefore.textContent.length;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn offset;\n\t\t}\n\t\tvar sel = this.domSelection();\n\t\tif (!sel) return null;\n\t\t// anchor is the start node, focusNode is the end node of the selection\n\t\t// see https://developer.mozilla.org/en/DOM/Selection\n\n\t\t// there is a problem with the above algorithm when calling getSelectionRange\n\t\t// when the caret is at the end of the text. In this case anchorNode and focusNode\n\t\t// are not textNodes and nodeOffsetFrom() would not return anything meaningful\n\t\t// Since anchorNode.childNodes[anchorOffset] and focusNode.childNodes[focusOffset] \n\t\t// identify the node from/to selection was exist, use this node for calculation\n\t\t// In this case return the text length as indexes of the range\n\t\tvar anchorIsText = sel.anchorNode.nodeType == textNodeType;\n\t\tvar anchorNode = anchorIsText ? sel.anchorNode : sel.anchorNode.childNodes[sel.anchorOffset];\n\t\tvar anchorOffset = anchorIsText ? sel.anchorOffset : 0;\n\n\t\tvar focusIsText = sel.focusNode.nodeType == textNodeType;\n\t\tvar focusNode = focusIsText ? sel.focusNode : sel.focusNode.childNodes[sel.focusOffset];\n\t\tvar focusOffset = focusIsText ? sel.focusOffset : 0;\n\n\t\treturn [nodeOffsetFrom(anchorNode) + anchorOffset,\n\t\t\tnodeOffsetFrom(focusNode) + focusOffset]\n\t},\n\tselectAll: function() {\n\t\tif (this.textString.length > 0)\n\t\t\tthis.setSelectionRange(0, this.textString.length);\n\t\telse\n\t\t\tthis.focus();\n\t},\n\thasNullSelection: function() {\n\t\tvar range = this.getSelectionRange();\n\t\treturn range[0] === range[1]\n\t},\n\n\tsetNullSelectionAt: function(idx) { this.setSelectionRange(idx, idx) },\n\tgetSelectionBounds: function() {\n\t\tvar sel = this.domSelection();\n\t\tif (!sel) return new Rectangle(0,0,0,0);\n\t\tvar range = sel.getRangeAt(0);\n\t\tif (!range) return new Rectangle(0,0,0,0);\n\t\t// FIXME HTML specific\n\t\tvar domR = range.getBoundingClientRect();\n\t\tif (!domR) return new Rectangle(0,0,0,0);\n\t\tvar s = this.getScroll(),\n\t\t\tr = new Rectangle(domR.left+s[0], domR.top+s[1], domR.width, domR.height),\n\t\t\tworld = this.world(),\n\t\t\ttransformed = world ? world.transformToMorph(this).transformRectToRect(r):r;\n\t\treturn transformed;\n\t},\n selectWord: function(str, i1) { // Selection caret before char i1\n\t// Most of the logic here is devoted to selecting matching backets\n var rightBrackets = \"*)}]>'\\\"\";\n\tvar leftBrackets = \"*({[<'\\\"\";\n\tfunction isWhiteSpace(c) { return c === '\\t' || c === ' '; }\n\tfunction isAlpha(s) {\n\t\tvar regEx = /^[a-zA-Z0-9\\-]+$/;\n\t\treturn s.match(regEx);\n\t};\n\tfunction periodWithDigit(c, prev) {\n\t\t// return true iff c is a period and prev is a digit\n \tif (c != \".\") return false;\n \treturn \"0123456789\".indexOf(prev) >= 0;\n \t};\n\tvar i2 = i1 - 1;\n if (i1 > 0) { // look left for open backets\n if(str[i1-1] == \"\\n\" || str[i1-1] == \"\\r\") return this.findLine(str, i1, 1, str[i1-1]);\n\t var i = leftBrackets.indexOf(str[i1-1]);\n if (str[i1 - 1] == \"*\" && (i1-2 < 0 || str[i1-2] != \"/\")) \n i = -1; // spl check for /*\n if (i >= 0) {\n var i2 = this.matchBrackets(str, leftBrackets[i], rightBrackets[i], i1 - 1, 1);\n return [i1, i2 - 1]; \n } \n }\n if (i1 < str.length) { // look right for close brackets\n if(str[i1] == \"\\n\" || str[i1] == \"\\r\") return this.findLine(str, i1, -1, str[i1]);\n var i = rightBrackets.indexOf(str[i1]);\n if (str[i1]== \"*\" && (i1+1 >= str.length || str[i1+1] != \"/\")) \n i = -1; // spl check for */\n if (i >= 0) {\n i1 = this.matchBrackets(str, rightBrackets[i], leftBrackets[i],i1,-1);\n return [i1+1, i2]; \n } \n }\n\n\t\t// is a '//' left of me?\n\t\tif (str[i1-1] === '/' && str[i1-2] === '/') {\n\t\t\twhile (i2+1= 0 && isWhiteSpace(str[myI1-1])) {\n\t\t\tmyI1 --;\n\t\t}\n\t\twhile (myI2 < str.length && isWhiteSpace(str[myI2+1])) {\n\t\t myI2 ++;\n\t\t}\n\t\tif (myI2-myI1 >= 1) return [myI1, myI2];\n\t\n var prev = (i1= 0 && (isAlpha(str[i1-1]) || periodWithDigit(str[i1-1], prev))) {\n\t prev = str[i1-1];\n\t\t i1 --;\n\t }\n\t\twhile (i2+1 < str.length && (isAlpha(str[i2+1]) || periodWithDigit(str[i2+1], prev))) {\n\t prev = str[i2+1];\n\t\t i2 ++;\n\t\t}\n return [i1, i2]; \n },\n matchBrackets: function(str, chin, chout, start, dir) { \n var i = start;\n var depth = 1;\n while ((dir < 0) ? i - 1 >= 0 : i + 1 < str.length ) {\n i += dir;\n if (str[i] == chin && chin != chout) depth++;\n if (str[i] == chout) depth--;\n if (depth == 0) return i; \n }\n return i; \n },\n\tfindLine: function(str, start, dir, endChar) { // start points to a CR or LF (== endChar)\n\t\tvar i = start;\n\t\twhile ((dir < 0) ? i - 1 >= 0 : i + 1 < str.length ) {\n\t\t\ti += dir;\n\t\t\tif (str[i] == endChar) return dir>0 ? [start, i] : [i+1, start];\n\t\t}\n\t\treturn dir>0 ? [start+1, str.length-1] : [0, start];\n\t},\n\n},\n'scrolling', {\n\tgetScrollableNode: function() {\n\t\t// for ScrollableTrait\n\t\treturn this.renderContext().textNode\n\t},\n\tscrollSelectionIntoView: function() {\n\t\tthis.scrollRectIntoView(this.getSelectionBounds(), true)\n\t},\n},\n'evaluation', {\n\tevalSelection: function(printIt) {\n\t\tvar str = this.getSelectionOrLineString(),\n\t\t\tresult = this.tryBoundEval(str);\n\t\tif (printIt) this.insertAtCursor(String(result), true);\n\t\treturn result;\n\t},\n\tboundEval: function (str) {\t \n\t\t// Evaluate the string argument in a context in which \"this\" may be supplied by the modelPlug\n\t\tvar ctx = this.getDoitContext() || this,\n\t\t\tinteractiveEval = function(text) { return eval(text) };\n\t\treturn interactiveEval.call(ctx, str);\n\t},\n\ttryBoundEval: function(str) {\n\t\ttry { return this.boundEval(str) } catch(e) { alert(e) }\n\t},\n\n\tgetDoitContext: function() { return this.doitContext },\n},\n'focus', {\n\tfocus: function() {\n\t\tif (!this.isFocused()) this.renderContext().textNode.focus();\n\t},\n},\n'testing', {\n\thasUnsavedChanges: function() {\n\t\treturn false;\n\t\t// return this.savedTextString !== this.textString;\n\t},\n\tisFocused: function() { return lively.morphic.Text.activeInstance() === this },\n\n},\n'searching', {\n\tsearchForFind: function(str, start, noWrap) {\n\t\t// if (this.world()) this.focus();\n\t\tvar i1 = this.textString.indexOf(str, start);\n\t\tif (i1 < 0 && !noWrap) i1 = this.textString.indexOf(str, 0); // wrap\n\t\tif (i1 >= 0) this.setSelectionRange(i1, i1+str.length);\n\t\t\telse this.setNullSelectionAt(0);\n\t\tthis.scrollSelectionIntoView();\n\t\tthis.lastSearchString = str;\n\t\tthis.lastFindLoc = i1;\n\t},\t\n},\n'debugging', {\n\tshowError: function(e, offset) {\n\t\toffset = offset || 0;\n\t\tvar msg = \"\" + e + \"\\n\" + \n\t\t\t\"Line: \" + e.line + \"\\n\" +\n\t\t\t(e.sourceURL ? (\"URL: \" + (new URL(e.sourceURL).filename()) + \"\\n\") : \"\");\n\t\tif (e.stack) {\n\t\t\t// make the stack fit into status window\n\t\t\tmsg += e.stack.replace(new RegExp(URL.codeBase.toString(), \"g\"),\"\");\n\t\t}\n\n\t\tvar world = lively.morphic.World.current();\n\t\tif (!world) {\n\t\t\tconsole.log(\"Error in \" +this.id() + \" bound eval: \\n\" + msg)\n\t\t\treturn\n\t\t};\n\n\t\tworld.setStatusMessage(msg, Color.red, 15,\n\t\t\tfunction() { require('lively.Helper').toRun(function() {\n\t\t\t\tworld.showErrorDialog(e)\n\t\t\t }) },\n\t\t\t{fontSize: 12, fillOpacity: 1});\n\n\t\tif (e.expressionEndOffset) {\n\t\t\tthis.setSelectionRange(e.expressionBeginOffset + offset, e.expressionEndOffset + offset);\n\t\t} else if (e.line) {\n\t\t\tvar lineOffset = this.lineNumberForIndex(offset);\n\t\t\t// console.log(\"line: \" + e.line + \" offset: \" + lineOffset)\n\t\t\tvar line = this.lines[e.line + lineOffset - 1]\n\t\t\tif (line && line.startIndex) {\n\t\t\t\t// console.log(\" set to \" + line.startIndex)\n\t\t\t\tthis.setSelectionRange(line.startIndex, line.getStopIndex());\n\t\t\t}\n\t\t}\n\t\tthis.setStatusMessage(\"\" + e, Color.red);\n\t},\n\ttextNodeString: function() {\n\t\tvar textNode = this.renderContext().textNode;\n\t\tif (!textNode) return 'textNode not yet accessible';\n\t\tvar isolatedTextNode = textNode.cloneNode(false/*no children*/)\n\t\tvar string = Exporter.stringify(isolatedTextNode);\n\t\tvar midIdx = string.indexOf('');\n\t\tvar childrenString = $A(textNode.childNodes).collect(function(ea) { return ' ' + Exporter.stringify(ea) }).join('\\n');\n\t\tstring = string.slice(0, midIdx) + '\\n' + childrenString + '\\n' + string.slice(midIdx)\n\t\treturn string;\nthis. textNodeString()\n\t},\n\n},\n'experimentation', {\n\tsetWhiteSpaceHandling: function(modeString) {\n\t\treturn this.morphicSetter('WhiteSpaceHandling', modeString);\n\t},\n\tgetWhiteSpaceHandling: function(modeString) {\n\t\treturn this.morphicGetter('WhiteSpaceHandling') || 'pre-wrap';\n\t},\n\tgetTextElements: function() {\n\t\t// returns js objects for subnodes of this.renderContext().textNode\n\t\t// they have the following properties:\n\t\t// node: the text node,\n\t\t// startIndex: the (global)startIndex of the node in the whole text,\n\t\t// endIndex: global end index\n\t\t// method toString for debugging\n\n\t\tvar textNodeType = this.renderContext().textNode.TEXT_NODE;\n\t\tfunction isTextNode(node) { return node && node.nodeType == textNodeType }\n\t\tfunction flattenTextNodes(node) {\n\t\t\tif (!node) return [];\n\t\t\tif (isTextNode(node)) return [node];\n\t\t\tvar result = [];\n\t\t\tfor (var i = 0; i < node.childNodes.length; i++)\n\t\t\t\tresult = result.concat(flattenTextNodes(node.childNodes[i]))\n\t\t\treturn result;\n\t\t}\n\n\n//var endlessProtection = 0;\n//endlessProtection++\n//if (endlessProtection > 10000) throw new Error('Endless loop in getTextElements!')\n\n\t\tvar nodes = flattenTextNodes(this.renderContext().textNode),\n\t\t\tresult = [],\n\t\t\tindex = 0;\n\n\t\tfor (var i = 0; i < nodes.length; i++) {\n\t\t\tvar part = nodes[i];\n\t\t\tif (!part.textContent) continue;\n\t\t\tvar start = index,\n\t\t\t\tlength = part.textContent.length,\n\t\t\t\tend = start + length;\n\t\t\tindex = end;\n\t\t\tresult.push({\n\t\t\t\tnode: part,\n\t\t\t\tstartIndex: start,\n\t\t\t\tendIndex: end,\n\t\t\t\ttoString: function() {\n\t\t\t\t\treturn '<' + this.node.textContent.replace(/\\n/, '\\\\n') + '>: ' + this.startIndex + '-' + this.endIndex;\n\t\t\t\t}})\n\t\t}\n\t\treturn result;\n\t},\n\n\tgetTextElementAndLocalIndexForGlobalIndex: function(idx) {\n\t\t// returns a subnode and the index in the subnode that responds to the global index\n\t\t// of the whole text\n\t\t// the index used for lookup is sanitized\n\t\t// example: subnodes: foobar, idx: 5\n\t\t// would return [bar, 2] (local idx between a and r)\n\t\tidx = Math.max(0, Math.min(idx, this.textString.length));\n\t\tvar textParts = this.getTextElements();\n\t\tfor (var i = 0; i < textParts.length; i++) {\n\t\t\tif (idx >= textParts[i]. startIndex && idx <= textParts[i].endIndex) {\n\t\t\t\tvar node = textParts[i].node,\n\t\t\t\t\tlocalIdx = idx - textParts[i].startIndex;\n\t\t\t\treturn [node, localIdx]\n\t\t\t}\n\t\t}\n\t\treturn [this.renderContext().textNode, 0];\n\t},\n\tsetRichText: function(richText) {\n\t\t// FIXME implement\n\t\tthis.setTextString(richText.string || 'ERROR: setRichText did not work!');\n\n\t\talert('setRichText not yet implemented'); return richText.string;\n\t\tthis.textString = richText.string;\n\t\tthis.textStyle = richText.style;\n\t\trichText.applyToMorph(this);\n\t\treturn richText;\n\t},\n\tgetTextStyle: function() {\n\t\talert('getTextStyle not yet implemented'); return;\n\t\t// if (!this.textStyle)\n\t\t\t// this.textStyle = new lively.RunArray([this.textString.length], [new lively.TextEmphasis({})]);\n\t\t// return this.textStyle;\n\t},\n\tgetRange: function(from, to) {\n\t\tvar range = document.createRange(),\n\t\t\tstartNodeAndIdx = this.getTextElementAndLocalIndexForGlobalIndex(from),\n\t\t\tendNodeAndIdx = this.getTextElementAndLocalIndexForGlobalIndex(to);\n\t\trange.setStart(startNodeAndIdx[0], startNodeAndIdx[1]);\n\t\trange.setEnd(endNodeAndIdx[0], endNodeAndIdx[1]);\n\t\treturn range\n\t},\n},\n'text chunks', {\n\tcreateChunk: function() {\n\t\tvar c = new lively.morphic.TextChunk();\n\t\tc.addTo(this);\n\t\treturn c;\n\t},\n\tgetTextChunks: function() {\n\t\tif (!this.textChunks || this.textChunks.length === 0)\n\t\t\tthis.textChunks = [this.createChunk()];\n\t\treturn this.textChunks;\n\t},\n\tfirstTextChunk: function() {\n\t\treturn this.getTextChunks()[0];\n\t},\n\tremoveTextChunks: function() {\n\t\tif (!this.textChunks) return;\n\t\twhile (this.textChunks.length > 0) {\n\t\t\tvar chunk = this.textChunks.shift();\n\t\t\tchunk.remove();\n\t\t}\n\t},\n\tgetChunkAndLocalIndex: function(idx, useChunkStart) {\n\t\t// when useChunkStart = false and a chunk ends at idx then we return that\n\t\t// when useChunkStart = true then we return the next chunk if there is one\n\t\t// if chunk ranges are [[0, 1], [1, 3], [3, 6]]\n\t\t// useChunkStart == false, idx == 1 returns [chunk[0],1]\n\t\t// useChunkStart == false, idx == 2 returns [chunk[1],1]\n\t\t// useChunkStart == true, idx == 1 returns [chunk[1],0]\n\t\tvar offset = 0, chunks = this.getTextChunks();\n\t\tfor (var i = 0; i < chunks.length; i++) {\n\t\t\tvar nextOffset = offset + chunks[i].textString.length;\n\t\t\tif (!useChunkStart && idx <= nextOffset) return [chunks[i], idx-offset];\n\t\t\tif (useChunkStart && idx < nextOffset) return [chunks[i], idx-offset];\n\t\t\toffset = nextOffset;\n\t\t}\n\t},\n\tsliceTextChunks: function(from, to) {\n\t\t// sanitize indexes\n\t\tvar maxLength = this.textString.length,\n\t\t\tfromSafe = Math.min(from, to),\n\t\t\ttoSafe = Math.max(from, to);\n\t\tfromSafe = Math.max(0, Math.min(maxLength, fromSafe));\n\t\ttoSafe = Math.max(0, Math.min(maxLength, toSafe));\n\n\t\t// split the chunks and retrieve chunks inbetween from-to\n\t\tvar start = this.getChunkAndLocalIndex(fromSafe);\nif (!start) return [];\n\t\tvar startChunk = start[0].splitAfter(start[1]);\n\n\t\tvar end = this.getChunkAndLocalIndex(toSafe);\nif (!end) return [];\n\t\tvar endChunk = end[0].splitBefore(end[1]);\n\n\t\tvar chunks = this.getTextChunks(),\n\t\t\tstartIdx = chunks.indexOf(startChunk),\n\t\t\tendIdx = chunks.indexOf(endChunk);\n\n\t\treturn chunks.slice(Math.min(startIdx, endIdx),endIdx+1);\n\t},\n\n\tcoalesceChunks: function () {\n\t\tvar chunk = this.firstTextChunk();\n\t\twhile (chunk)\n\t\t\tchunk = chunk.joinWithNextIfEqualStyle() ? chunk : chunk.next();\n\t},\n\tremoveChunksNotUsed: function() {\n\t\t// garbage collect unused chunks, e.g. when the user has selected and removed\n\t\t// a part of the text that did cross chunk bounds\n\t\tvar oldChunks = this.getTextChunks(), newChunks = [];\n\t\tfor (var i = 0; i < oldChunks.length; i++)\n\t\t\tif (oldChunks[i].chunkNode && oldChunks[i].chunkNode.parentNode)\n\t\t\t\tnewChunks.push(oldChunks[i])\n\t\treturn this.textChunks = newChunks;\n\t},\n\tremoveNonChunkNodes: function(chunks) {\n\t\tfor (var i = 0; i < chunks.length; i++)\n\t\t\tchunks[i].removeNonChunkNodes()\n\t},\n\n\tgetChunkRanges: function() {\n\t\t// only used for debugging\n\t\tvar offset = 0;\n\t\treturn this.textChunks.collect(function(chunk) {\n\t\t\treturn [offset, offset += chunk.textString.length];\n\t\t})\n\t},\n\tfixTextBeforeAndAfterChunks: function(chunks) {\n\t\t// this removes the focus and selection...\n\t\tchunks = this.getTextChunks();\n\t\tchunks[0].ingestAllPrecedingElements();\n\t\tfor (var i = 0; i < chunks.length; i++)\n\t\t\tchunks[i].ingestAllFollowingElements(chunks[i+1]);\n\t},\n\tfixChunks: function() {\n\t\tvar selRange = this.isFocused() && this.getSelectionRange();\n\n\t\tvar chunks = this.removeChunksNotUsed();\n\n\t\t// this.removeNonChunkNodes(chunks)\n\t\tthis.fixTextBeforeAndAfterChunks(chunks);\n\t\tthis.removeNonChunkNodes(chunks);\n\n\t\tselRange && this.setSelectionRange(selRange[0], selRange[1]);\n\t},\n\tfixChunksDelayed: function() {\n\t\tthis.fixChunks.bind(this).delay(0);\n\t},\n\n},\n'rich text', {\n\temphasize: function(styleSpec, from, to) {\n\t\tvar chunks = this.sliceTextChunks(from, to);\n\t\tfor (var i = 0; i < chunks.length; i++)\n\t\t\tchunks[i].styleText(styleSpec);\n\t\tthis.coalesceChunks();\n\t},\n\tchangeEmphasis: function(from, to, callback) {\n\t\t// callback is called with the first emphasis that is found in the range from-to\n\t\t// callback should return a new emphasis\n\t\tvar emph = this.getEmphasisAt(from);\n\t\tif (!emph) return;\n\t\tcallback(emph, function doEmph(newEmph) {\ndebugger\n\t\t\tthis.emphasize(newEmph, from, to);\n\t\t\tthis.setSelectionRange(from, to);\n\t\t}.bind(this));\n\t},\n\ttoggleItalics: function(from, to) {\n\t\tthis.changeEmphasis(from, to, function(emph, doEmph) {\n\t\t\tdoEmph({italics: emph.getItalics() === 'italic' ? 'normal' : 'italic'})\n\t\t})\n\t},\n\n\n\ttoggleBoldness: function(from, to) {\n\t\tthis.changeEmphasis(from, to, function(emph, doEmph) {\n\t\t\tdoEmph({fontWeight: emph.getFontWeight() === 'bold' ? 'normal' : 'bold'})\n\t\t})\n\t},\n\ttoggleUnderline: function(from, to) {\n\t\tthis.changeEmphasis(from, to, function(emph, doEmph) {\n\t\t\tdoEmph({textDecoration: emph.getTextDecoration() === 'underline' ? 'normal' : 'underline'})\n\t\t})\n\t},\n\n\ttoggleLink: function(from, to) {\n\t\tvar world = this.world()\n\t\tthis.changeEmphasis(from, to, function(emph, doEmph) {\n\t\t\tworld.prompt('Enter link URL', function(input) {\n\t\t\t\tif (input == '') input = null;\n\t\t\t\tdoEmph({uri: input})\n\t\t\t}, emph.uri);\n\t\t})\n\t},\n\ttoggleDoit: function(from, to) {\n\t\tvar world = this.world(), text = this;\n\t\tthis.changeEmphasis(from, to, function(emph, doEmph) {\n\t\t\tworld.prompt('Enter doit code', function(input) {\n\t\t\t\tif (input == '') input = null;\n\t\t\t\tdoEmph({doit: input ? {code: input, context: text} : null})\n\t\t\t}, emph.doit && emph.doit.code);\n\t\t})\n\t},\n\ttoggleFont: function(from, to) {\n\t\tvar world = this.world(), text = this;\n\t\tthis.changeEmphasis(from, to, function(emph, doEmph) {\n\t\t\tvar fontChooser = lively.PartsBin.getPart('FontChooserDialog', 'PartsBin/NewWorld');\n\t\t\tfontChooser.listAvailableFonts();\n\t\t\tworld.addMorph(fontChooser);\n\t\t\tfontChooser.align(fontChooser.bounds().center(), world.firstHand().getPosition());\n\t\t\tconnect(fontChooser, 'selectedFont', {doEmph: doEmph}, 'doEmph', {\n\t\t\t\tconverter: function(font) { return {fontFamily: font} }\n\t\t\t})\n\t\t})\n\t},\n\n\n\n\n\ttoggleEmphasisForSelection: function(emphAttributeType) {\n\t\t// emphAttributeType can be Boldness, ...\n\t\ttry {\n\t\t\tvar selRange = this.getSelectionRange(),\n\t\t\t\temphRange = this.convertSelectionRangeForEmphasis(selRange);\n\t\t\tthis['toggle' + emphAttributeType](emphRange[0], emphRange[1]);\n\t\t\t// this.setSelectionRange(selRange[0], selRange[1]);\n\t\t} catch(e) {\n\t\t\talert('Error when doing toggle' + emphAttributeType + ': ' + e);\n\t\t\tdebugger;\n\t\t}\t\t\n\t},\n\temphasizeSelection: function(emphSpec) {\n\t\t// emphAttributeType can be Boldness, ...\n\t\ttry {\n\t\t\tvar selRange = this.getSelectionRange(),\n\t\t\t\temphRange = this.convertSelectionRangeForEmphasis(selRange);\n\t\t\tthis.emphasize(emphSpec, emphRange[0], emphRange[1]);\n\t\t\tthis.setSelectionRange(selRange[0], selRange[1]);\n\t\t} catch(e) {\n\t\t\talert('Error when doing emphasizing' + JSON.stringify(emphSpec) + ': ' + e);\n\t\t\tdebugger;\n\t\t}\t\t\n\t},\n\n\n\tconvertSelectionRangeForEmphasis: function(selRange) {\n\t\tvar from = selRange[0], to = selRange[1];\n\t\treturn from > to ? [to, from] : [from, to];\n\t},\n\tincreaseFontSizeOfSelection: function() {\n\t\tthis.setFontSizeOfSelectionDo(function(oldSize) { return oldSize + 1});\n\t},\n\tdecreaseFontSizeOfSelection: function() {\n\t\tthis.setFontSizeOfSelectionDo(function(oldSize) { return oldSize - 1});\n\t},\n\n\tsetFontSizeOfSelectionDo: function(callback) {\n\t\tvar range = this.getSelectionRange(),\n\t\t\tfrom = range[0], to = range[1],\n\t\t\tfontSize = this.getFontSize();\n\t\tthis.changeEmphasis(from, to, function(emph, doEmph) {\n\t\t\tdoEmph({fontSize: callback((emph.getFontSize() || fontSize))})\n\t\t})\n\t},\n\n\n\tgetEmphasisAt: function(idx) {\n\t\tvar chunkAndIdx = this.getChunkAndLocalIndex(idx, true);\n\t\treturn chunkAndIdx && chunkAndIdx[0].style;\n\t},\n\n},\n'status messages', {\n\tsetStatusMessage: function(msg, color, delay) {\n\t\tconsole.log(\"status: \" + msg)\n\t\tif (!this._statusMorph) {\n\t\t\tthis._statusMorph = new lively.morphic.Text(pt(300,30).extentAsRectangle());\n\t\t\tthis._statusMorph.applyStyle({borderWidth: 0, strokeOpacity: 0, fill: Color.gray, fontSize: 16, fillOpacity: 1})\n\t\t\tthis._statusMorph.isEpiMorph = true;\n\t\t}\n\t\tvar statusMorph = this._statusMorph;\n\t\tstatusMorph.textString = msg;\n\t\tthis.world().addMorph(statusMorph);\n\t\tstatusMorph.setTextColor(color || Color.black);\n\t\tstatusMorph.ignoreEvents();\n\t\t// FIXME getSelectionBounds does not work yet when there is a null selection\n\t\tif (false && this.isFocused()) {\n\t\t\tvar bounds = this.getSelectionBounds(),\n\t\t\t\tpos = bounds ? bounds.bottomLeft() : pt(0, 20);\n\t\t\tstatusMorph.setPosition(this.worldPoint(pos));\n\t\t} else {\n\t\t\tstatusMorph.centerAt(this.worldPoint(this.innerBounds().center()));\n\t\t};\n\t\t(function() { statusMorph.remove() }).delay(delay || 4);\n\t},\n});\nObject.extend(lively.morphic.Text, {\n\tactiveInstance: function() {\n\t\t// returns the text that currently has a focus\n\t\t// set in onFocus and onBlur\n\t\treturn this.prototype.activeInstance;\n\t},\n});\nObject.subclass('lively.morphic.Text.ProtocolLister',\n'initializing', {\n\tinitialize: function(textMorph) {\n\t\tthis.textMorph = textMorph;\n\t},\n},\n'interface', {\n\tevalSelectionAndOpenListForProtocol: function() {\n\t\tvar obj = this.evalCurrentSelection(this.textMorph);\n\t\tif (!obj) return;\n\n\t\tvar items = this.getListForProtocolOf(obj);\n\t\tlively.morphic.Menu.openAtHand(String(obj), items);\n\t},\n\n},\n'accessing', {\n\n\tgetPrototypeChainOf: function(obj) {\n\t\tvar result = [obj], proto = Class.getPrototype(obj);\n\t\twhile(proto) { result.push(proto); proto = Class.getSuperPrototype(proto) }\n\t\treturn result;\n\t},\n\n\tfuncSignaturesOf: function(obj) {\n\t\tvar funcs = obj && obj.nodeType ? Functions.all(obj) : Functions.own(obj)\n\t\tfuncs = funcs.select(function(name) { return !Class.isClass(obj[name]) });\n\t\treturn funcs.collect(function(name) {\n\t\t\tvar source = obj[name].toString(),\n\t\t\t\tmatch = source.match(/function\\s*[a-zA-Z0-9_$]*\\s*\\(([^\\)]*)\\)/),\n\t\t\t\tparams = (match && match[1]) || '';\n\t\t\treturn name + '(' + params + ')';\n\t\t}).sort()\n\t},\n\n\tgetListForProtocolOf: function(obj) {\n\t\tvar items = this.getPrototypeChainOf(obj).collect(function(proto) {\n\t\t\treturn this.menuItemForProto(obj, proto);\n\t\t}, this).select(function(ea) { return ea != undefined });\n\t\treturn items;\n\t},\n\n\tmenuItemForProto: function(originalObject, proto) {\n\t\tvar subItems = this.funcSignaturesOf(proto).collect(function(signa) {\n\t\t\treturn this.createSubMenuItemFromSignature(signa);\n\t\t}, this);\n\t\tif (subItems.length == 0) return null;\n\t\tvar name = (originalObject === proto) ? originalObject.toString().truncate(60) :\n\t\t\tproto.constructor.type || proto.constructor.name || '';\n\t\treturn [name, subItems];\n\t},\n\tcreateSubMenuItemFromSignature: function(signature) {\n\t\tvar textMorph = this.textMorph,\n\t\t\trange = textMorph && textMorph.getSelectionRange();\n\t\treturn [signature, function() {\n\t\t\t// FIXME not sure if this has to be delayed\n\t\t\t(function() {\n\t\t\t\ttextMorph.focus();\n\t\t\t\trange && textMorph.setSelectionRange(range[0], range[1]);\n\t\t\t\ttextMorph.insertAtCursor(signature, true)\n\t\t\t}).delay(0)\n\t\t}]\n\t},\n\n\n\tevalCurrentSelection: function(textMorph) {\n\t\tvar selection = Strings.removeSurroundingWhitespaces(textMorph.getSelectionOrLineString());\n\t\tif (selection.endsWith('.'))\n\t\t\tselection = selection.slice(0, selection.length-1);\n\t\treturn textMorph.tryBoundEval(selection);\n\t},\n\n});\n\nObject.subclass('lively.morphic.TextChunk',\n'settings', {\n\tdoNotSerialize: ['chunkNode'],\n},\n'initializing', {\n\tinitialize: function(str, style) {\n\t\tif (str) this.textString = str;\n\t\tthis.style = style || new lively.morphic.TextEmphasis();\n\t},\n},\n'accessing', {\n\tget textString() {\n\t\treturn this.getChunkNode().textContent;\n\t},\n\tset textString(string) {\n\t\treturn this.getChunkNode().textContent = string;\n\t},\n\tgetChunkNode: function() {\n\t\tif (!this.chunkNode)\n\t\t\tthis.chunkNode = XHTMLNS.create('span');\n\t\treturn this.chunkNode;\n\t},\n\tnext: function() {\n\t\tvar chunks = this.morph.getTextChunks(), chunkIdx = chunks.indexOf(this);\n\t\treturn chunks[chunkIdx+1];\n\t},\n\tprev: function() {\n\t\tvar chunks = this.morph.getTextChunks(), chunkIdx = chunks.indexOf(this);\n\t\treturn chunks[chunkIdx-1];\n\t},\n},\n'adding', {\n\taddTo: function(textMorph, optChunkAfter) {\n\t\tthis.morph = textMorph;\n\t\tvar textNode = textMorph.renderContext().textNode,\n\t\t\tchunkNode = this.getChunkNode();\n\t\t\totherChunkNode = optChunkAfter && optChunkAfter.getChunkNode();\n\t\tif (!textNode) {\n\t\t\t// alert('Cannot add text chunk ' + this + ' to ' + textMorph + ' because no textNode is present');\n\t\t\treturn;\n\t\t}\n\t\tif (chunkNode.parentNode) this.remove();\n\t\tif (otherChunkNode && otherChunkNode.parentNode === textNode)\n\t\t\ttextNode.insertBefore(chunkNode, otherChunkNode);\n\t\telse textNode.appendChild(chunkNode);\n\t\tthis.styleText();\n\t},\n\n},\n'removing', {\n\tremove: function() {\n\t\tvar n = this.getChunkNode();\n\t\tn.parentNode && n.parentNode.removeChild(n);\n\t},\n},\n'splitting', {\n\tsplitAfter: function(localIdx) { return this.split(localIdx, true) },\n\tsplitBefore: function(localIdx) { return this.split(localIdx, false) },\n\tsplit: function(localIdx, returnRight) {\n\t\t// remove text from localIdx to textString.length\n\t\t// let morph add new chunk\n\t\t// if returnRight == true return the chunk after localIdx, otherwise before\n\t\tvar str = this.textString,\n\t\t\tmyString = str.substring(0, localIdx),\n\t\t\tnewString = str.substring(localIdx);\n\n\t\t// corner cases: if we are already at the end of the chunk and want to have\n\t\t// the right of the split then return the next chunk if it exists\n\t\t// otherwise split the existing into an empty chunk\n\t\t// When returning left localIdx chunk do the same\n\t\tif (returnRight && newString.length === 0) {\n\t\t\tvar next = this.next();\n\t\t\tif (next) return next;\n\t\t}\n\t\tif (!returnRight && myString.length === 0) {\n\t\t\tvar prev = this.prev();\n\t\t\tif (prev) return prev;\n\t\t};\n\n\t\t// We dont care we want to have the right so use this as right and dont split\n\t\tif (returnRight && myString.length === 0)\n\t\t\treturn this;\n\t\t// same thing\n\t\tif (!returnRight && newString.length === 0)\n\t\t\treturn this;\n\n\t\tthis.textString = myString;\n\t\tvar newChunk = this.createForSplit(newString),\n\t\t\tchunks = this.morph.getTextChunks(),\n\t\t\tchunkIdx = chunks.indexOf(this),\n\t\t\tnext = chunks[chunkIdx+1];\n\n\t\t// add new chunk in chunk collection of morph\n\t\tchunks.pushAt(newChunk, chunkIdx+1);\n\t\tnewChunk.addTo(this.morph, next);\n\n\t\treturn returnRight ? newChunk : this;\n\t},\n\tcreateForSplit: function(str) { return new this.constructor(str, this.style.clone()) },\n\n},\n'joining', {\n\tjoinWithNext: function() {\n\t\tvar chunks = this.morph.getTextChunks();\n\t\tvar chunkIdx = chunks.indexOf(this);\n\t\tvar next = chunks[chunkIdx+1];\n\t\tif (!next) return false;\n\t\tnext.remove();\n\t\tchunks.removeAt(chunkIdx+1);\n\t\tthis.textString += next.textString;\n\t\treturn true;\n\t},\n\tjoinWithNextIfEqualStyle: function() {\n\t\tvar next = this.next();\n\t\tif (next && this.style.equals(next.style))\n\t\t\treturn this.joinWithNext();\n\t},\n\n},\n'styling', {\n\tstyleText: function(styleSpec) {\n\t\tthis.normalize();\n\t\tif (styleSpec) this.style.add(styleSpec);\n\t\tthis.style.applyToHTML(this.getChunkNode());\n\t},\n},\n'subnodes', {\n\tnormalize: function() {\n\t\tthis.getChunkNode().normalize();\n\t},\n\tingestAllFollowingElements: function(nextChunk) {\n\t\tvar ownChunkNode = this.getChunkNode(),\n\t\t\tnextChunkNode = nextChunk && nextChunk.getChunkNode(),\n\t\t\tcontent = '';\n\t\twhile (true) {\n\t\t\tvar nextNode = ownChunkNode.nextSibling;\n\t\t\tif (!nextNode || nextNode === nextChunkNode) break;\n\t\t\tcontent += nextNode.textContent;\n\t\t\tif (nextNode.parentNode) nextNode.parentNode.removeChild(nextNode);\n\t\t}\n\t\tif (content) this.textString += content;\n\t},\n\tingestAllPrecedingElements: function(prevChunk/*FIXME not used*/) {\n\t\tvar ownChunkNode = this.getChunkNode(),\n\t\t\tprevChunkNode = prevChunk && prevChunk.getChunkNode(),\n\t\t\tcontent = '';\n\n\t\twhile (true) {\n\t\t\tvar prevNode = ownChunkNode.previousSibling;\n\t\t\tif (!prevNode || prevNode === prevChunkNode) break;\n\t\t\tcontent = prevNode.textContent + content;\n\t\t\tif (prevNode.parentNode) prevNode.parentNode.removeChild(prevNode);\n\t\t}\n\t\tif (content) this.textString = content + this.textString;\n\t},\n\tensureEndsWithBr: function() {\n\t\tvar chunkNode = this.getChunkNode();\n\t\tvar lastBrFound = false;\n\t\tfor (var i = 0; i < chunkNode.childNodes.length; i++) {\n\t\t\tvar node = chunkNode.childNodes[i];\n\t\t\tif (node.tagName === 'br') { lastBrFound = true; continue };\n\t\t\tif (node.textContent.length > 0) lastBrFound = false;\n\t\t}\n\t\tif (lastBrFound) return;\n\t\tchunkNode.appendChild(XHTMLNS.create('br'));\n\t},\n\tremoveNonChunkNodes: function() {\n\t\tvar node = this.getChunkNode(),\n\t\t\tchildNode = node.firstChild;\n\t\twhile(childNode) {\n\t\t\tvar next = childNode.nextSibling\n\t\t\tif (!NodeFactory.isTextNode(childNode)) {\n\t\t\t\tnode.insertBefore(NodeFactory.createText(childNode.textContent), next);\n\t\t\t\tnode.removeChild(childNode);\n\t\t\t}\n\t\t\tchildNode = next;\n\t\t}\n\t},\n\n},\n'debugging', {\n\ttoString: function() { return 'TextChunk(' + this.textString.truncate(10) + ',' + this.style + ')' },\n});\n\nObject.subclass('lively.morphic.TextEmphasis',\n'initializing', {\n\tinitialize: function(spec) {\n\t\tspec && this.add(spec);\n\t},\n},\n'accessing', {\n\tgetFontWeight: function() {\n\t\treturn (this.fontWeight && this.fontWeight !== '') ? this.fontWeight : 'normal';\n\t},\n\tsetFontWeight: function(fontWeight) { this.fontWeight = fontWeight },\n\tgetItalics: function() { return (this.italics && this.italics !== '') ? this.italics : 'normal' },\n\tsetItalics: function(italics) { this.italics = italics },\n\tgetURI: function() { return this.uri },\n\tsetURI: function(link) { return this.uri = uri },\n\tgetDoit: function() { return this.doit },\n\tsetDoit: function(doit) { return this.doit = doit },\n\tgetFontFamily: function() { return this.fontFamily },\n\tsetFontFamily: function(fontFamily) { return this.fontFamily = fontFamily },\n\tgetColor: function() { return this.color },\n\tsetColor: function(color) { return this.color = color },\n\tgetTextDecoration: function() { return this.textDecoration },\n\tsetTextDecoration: function(textDecoration) { return this.textDecoration = textDecoration },\n\tgetTextAlignment: function() { return this.textAlign },\n\tsetTextAlignment: function(textAlign) { return this.textAlign = textAlign },\n\tgetFontSize: function() { return this.fontSize },\n\tsetFontSize: function(fontSize) { return this.fontSize = fontSize },\n},\n'cloning', {\n\tclone: function() { return new this.constructor(this) },\n},\n'changing', {\n\tadd: function(spec) {\n\t\tfor (var name in spec) {\n\t\t\tif (!spec.hasOwnProperty(name)) return;\n\t\t\tthis[name] = spec[name];\n\t\t}\n\t},\n},\n'testing', {\n\tequals: function(other) {\n\t\tif (this.getFontWeight() == other.getFontWeight() &&\n\t\t\tthis.getItalics() == other.getItalics() &&\n\t\t\tthis.getURI() == other.getURI() &&\n\t\t\tthis.getFontFamily() == other.getFontFamily() &&\n\t\t\tthis.getColor() == other.getColor() &&\n\t\t\tthis.getTextDecoration() == other.getTextDecoration() &&\n\t\t\tthis.getTextAlignment() == other.getTextAlignment() &&\n\t\t\tthis.getFontSize() == other.getFontSize() &&\n\t\t\t!this.getDoit() && !other.getDoit()) return true;\n\n\t\tif (this.getDoit() && other.getDoit() &&\n\t\t\tthis.getDoit().code == other.getDoit().code) return true\n\n\t\treturn false;\n\t},\n},\n'rendering', {\n\tapplyToHTML: function(node) {\n\t\tvar clickCallbacks = [], cursor, textDecoration, color;\n\n\t\tif (this.doit) {\n\t\t\tvar doit = this.doit;\n\t\t\tclickCallbacks.push(function(evt) {\n\t\t\t\tvar src = '(function() {\\n' + doit.code + '\\n})';\n\t\t\t\ttry {\n\t\t\t\t\tvar func = eval(src);\n\t\t\t\t\tfunc.call(doit.context);\n\t\t\t\t} catch(e) {\n\t\t\t\t\talert('Error in text doit\\n' + e.stack);\n\t\t\t\t}\n\t\t\t\treturn true\n\t\t\t});\n\t\t\tcursor = 'pointer';\n\t\t\ttextDecoration = 'underline';\n\t\t\tcolor = 'darkgreen';\n\t\t}\t\n\n\t\tif (this.uri) {\n\t\t\tvar uri = this.uri;\n\t\t\tclickCallbacks.push(function(evt) {debugger; window.open(uri) });\n\t\t\tcursor = 'pointer';\n\t\t\ttextDecoration = 'underline';\n\t\t\tcolor = 'blue';\n\t\t}\n\n\t\tif (clickCallbacks.length > 0) {\n\t\t\tnode.onclick = function(evt) {\n\t\t\t\tfor (var i = 0; i < clickCallbacks.length; i++)\n\t\t\t\t\tclickCallbacks[i].call(this, evt);\n\t\t\t\tevt.stop();\n\t\t\t\treturn true;\n\t\t\t}\n\t\t} else {\n\t\t\tdelete node.onmouseup;\n\t\t}\n\n\t\tnode.style.color = color || '';\n\t\tnode.style.textDecoration = textDecoration || 'none';\n\t\tnode.style.cursor = cursor || 'auto';\n\n\n\t\tfor (var name in this) {\n\t\t\tif (!this.hasOwnProperty(name)) continue;\n\t\t\t// ignore none style properties\n\t\t\tif (name == 'uri') continue;\n\t\t\tif (name == 'doit') continue;\n\t\t\tvar styleName = name;\n\t\t\tif (name === 'italics') styleName = 'fontStyle';\n\t\t\tif (name === 'fontSize') { node.style[styleName] = this[name] + 'pt'; continue }\n\t\t\tnode.style[styleName] = this[name];\n\t\t}\n\t},\n},\n'debugging', {\n\ttoString: function() {\n\t\tvar propStrings = [];\n\t\tProperties.forEachOwn(this, function(key, value) {\n\t\t\tpropStrings.push(key + ':' + value)\n\t\t})\n\t\treturn 'TextEmphasis(' + propStrings.join(',') + ')'\n\t},\n});\n\n\ncop.create('TextDevLayer')\n.refineClass(lively.morphic.TextChunk, {\n// this is for development and trying out new features without affecting the whole system\n\tingestAllPrecedingElements: function(prevChunk/*FIXME not used*/) {\n\t\tvar ownChunkNode = this.getChunkNode(),\n\t\t\ttextNode = ownChunkNode.parentNode,\n\t\t\tcontent = '';\n\n\t\tif (!textNode) return; // we are probably in deserialization\n\n\t\tvar before = textNode.childNodes[0], content = '';\n\t\twhile (before && before !== ownChunkNode) {\n\t\t\tcontent += before.textContent;\n\t\t\tbefore.parentNode && before.parentNode.removeChild(before);\n\t\t\tbefore = before.nextSibling;\n\t\t}\n\t\tif (content != '')\n\t\t\tthis.textString = content + this.textString;\n\t},\n});\n\n}) // end of module","sourceString":"module('lively.morphic.TextCore').requires('cop.Layers', 'lively.morphic.Core').toRun(function() {\n\nlively.morphic.Morph.subclass('lively.morphic.Text', Trait('ScrollableTrait'),\n'properties', {\n\tstyle: {\n\t\tborderWidth: 1,\n\t\tborderColor: Color.black,\n\t\tfill: Color.veryLightGray,\n\t\tfixedWidth: true,\n\t\tfixedHeight: true,\n\t\tenableGrabbing: false,\n\t\tenableDropping: false,\n\t\tallowInput: true,\n\t\tclipMode: 'visible',\n\t\tfontFamily: 'Helvetica',\n\t\twhiteSpaceHandling: 'pre-wrap',\n\t\tpadding: Rectangle.inset(2, 1),\n\t},\n\t\n\tautoAdjustPadding: true,\n\tsuppressDropping: true,\n\n\t// wrap: lively.Text.WrapStyle.Normal,\n\t// tabWidth: 4,\n\t// maxSafeSize: 10e4,\n\t// locale: Locale,\n\t// acceptInput: true, // whether it accepts changes to text KP: change: interactive changes\n\t// autoAccept: false,\n\t// isSelecting: false, // true if last onmousedown was in character area (hit>0)\n\t// selectionPivot: null, // index of hit at onmousedown\n\t// lineNumberHint: 0,\n\t// hasKeyboardFocus: false,\n\t// useChangeClue: false,\n},\n'initializing', {\n\tinitialize: function($super, bounds, string) {\n\t\t$super(this.defaultShape());\n\t\tif (bounds) this.setBounds(bounds);\n\t\tthis.textString = string || '';\n\t\tthis.charsTyped = '';\n\t\tthis.fit();\n\t},\n},\n'styling', {\n\tapplyStyle: function($super, spec) {\n\t\t$super(spec);\n\t\tif (spec.fixedWidth !== undefined) this.setFixedWidth(spec.fixedWidth);\n\t\tif (spec.fixedHeight !== undefined) this.setFixedHeight(spec.fixedHeight);\n\t\tif (spec.allowInput !== undefined) this.allowInput = spec.allowInput;\n\t\tif (spec.fontFamily !== undefined) this.setFontFamily(spec.fontFamily);\n\t\tif (spec.fontSize !== undefined) this.setFontSize(spec.fontSize);\n\t\tif (spec.textColor !== undefined) this.setTextColor(spec.textColor);\n\t\tif (spec.padding !== undefined) this.setPadding(spec.padding);\t\n\t\tif (spec.whiteSpaceHandling !== undefined) this.setWhiteSpaceHandling(spec.whiteSpaceHandling);\n\t},\n},\n'accessing', {\n\tsetExtent: function($super, value) {\n\t\t$super(value);\n\t\tthis.setMaxTextWidth(this.fixedWidth ? value.x : null);\n\t\tthis.setMaxTextHeight(this.fixedHeight ? value.y : null);\n\t},\n\tgetTextExtent: function() { return this.renderContextDispatch('getTextExtent') },\n\tgetTextBounds: function() { return pt(0,0).extent(this.getTextExtent()) },\n\n\tget textString() {\n\t\t// when the prototype property is accessed\n\t\tif (this === this.constructor.prototype) return;\n\t\tif (!this.cachedTextString)\n\t\t\tthis.cachedTextString = this.renderContextDispatch('getTextString');\n\t\treturn this.cachedTextString;\n\t},\n\tset textString(string) {\n\t\tstring = String(string);\n\n\t\tthis.fixChunks();\n\t\tthis.removeTextChunks();\n\n\t\tthis.firstTextChunk().textString = string;\n\t\t\n\t\tthis.cachedTextString = string;\n\n\t\tlively.bindings.signal(this, 'textString', string);\n\t\treturn string;\n\t},\n\n\tsetTextString: function(string) { return this.textString = string },\n\tgetTextString: function() { return this.textString },\n\tappendTextString: function(string) { return this.textString += string },\n\n\tsetTextColor: function(color) { return this.morphicSetter('TextColor', color) },\n\tgetTextColor: function() { return this.morphicGetter('TextColor') },\n\tsetFontSize: function(size) { return this.morphicSetter('FontSize', size) },\n\tgetFontSize: function() { return this.morphicGetter('FontSize') },\n\tsetFontFamily: function(fontName) { return this.morphicSetter('FontFamily', fontName) },\n\tgetFontFamily: function() { return this.morphicGetter('FontFamily') },\n\n\tsetPadding: function(rect) { return this.morphicSetter('Padding', rect) },\n\tgetPadding: function() { return this.morphicGetter('Padding') },\n\tsetFixedWidth: function(bool) {\n\t\tthis.fixedWidth = bool;\n\t\tthis.setWhiteSpaceHandling(bool ? 'pre-wrap' : 'pre');\n\t\tthis.fit();\nthis.fit();\n\t},\n\tsetFixedHeight: function(bool) {\n\t\tthis.fixedHeight = bool\n\t\tthis.fit();\n\t},\n\tsetMaxTextWidth: function(value) {\n\t\tthis.morphicSetter('MaxTextWidth', value)\n\t},\n\tsetMaxTextHeight: function(value) {\n\t\tthis.morphicSetter('MaxTextHeight', value)\n\t},\n},\n'rendering', {\n\tupdateText: function(string) {\n\t\tthis.renderContextDispatch('updateText', string || this.textString);\n\t\tthis.fit();\n\t},\n\tgrowOrShrinkToFit: function() { this.setExtent(this.getTextExtent()) },\n\tfit: function() {\n\t\tif (!this.owner) return;\n\t\tvar extent = this.getExtent(),\n\t\t\ttextExtent = this.getTextExtent(),\n\t\t\twidth = this.fixedWidth ? extent.x : textExtent.x,\n\t\t\theight = this.fixedHeight ? extent.y : textExtent.y;\n\t\tthis.setExtent(pt(width, height));\n\t},\n},\n'text modes', {\n\tbeLabel: function(customStyle) {\n\t\tthis.isLabel = true;\n\t\tvar labelStyle = {\n\t\t\tfill: null,\n\t\t\tborderWidth: 0,\n\t\t\tfixedWidth: false,\n\t\t\tfixedHeight: true,\n\t\t\tallowInput: false,\n\t\t\tclipMode: 'hidden',\n\t\t};\n\t\tif (customStyle) labelStyle = Object.merge([labelStyle, customStyle]);\n\t\tthis.applyStyle(labelStyle);\n\t\tthis.ignoreEvents();\n\t\treturn this;\n\t},\n\tbeInputLine: function(customStyle) {\n\t\tthis.isInputLine = true;\n\t\tvar inputLineStyle = {\n\t\t\tfixedWidth: false,\n\t\t\tfixedHeight: true,\n\t\t\tclipMode: 'hidden',\n\t\t\tallowInput: true,\n\t\t};\n\t\tif (customStyle) inputLineStyle = Object.merge([inputLineStyle, customStyle]);\n\t\tthis.applyStyle(inputLineStyle);\n\t\treturn this;\n\t},\n},\n'keyboard events', {\n\n\tonKeyDown: function(evt) {\n\t\tthis.cachedTextString = null;\n\n\t\tif (evt.isAltDown()) {\n\t\t\t// alt with arrow keys can trigger browser forward/backward actions\n\t\t\t// that can just navigate away from the current world and thus\n\t\t\t// causing data loss. this disables it\n\t\t\tUserAgent.isWindows && evt.stop();\n\t\t}\n\n\t\tif (evt.isCommandKey() || evt.isCtrlDown()) {\n\t\t\tvar result = this.processCommandKeys(evt);\n\t\t\tif (result) evt.stop();\n\t\t\t// return result;\n\t\t}\n\n\t\t// Opera fix: evt.stop in onKeyPress does not seem to work\n\t\tevt.stopPropagation();\n\n\t\tvar c = evt.getKeyCode();\n\t\tif (c === Event.KEY_DELETE) return this.onDelPressed(evt);\n\t\tif (c === Event.KEY_BACKSPACE) return this.onBackspacePressed(evt);\n\t\tif (c === Event.KEY_TAB) return this.onTabPressed(evt);\n\t\tif (c === Event.KEY_RETURN) return this.onEnterPressed(evt);\n\t\tif (c === Event.KEY_HOME) return this.onHomePressed(evt);\n\t\tif (c === Event.KEY_END) return this.onEndPressed(evt);\n\t\tif (c === Event.KEY_PAGEUP) return this.onPageUpPressed(evt);\n\t\tif (c === Event.KEY_PAGEDOWN) return this.onPageDownPressed(evt);\n\n\t\treturn true;\n\t},\n\tonKeyUp: function(evt) {\n\t\t// textString getter is expensive so only trigger when observers exist\n\t\t// Note that textString may not be changed, e.g. when pressing a control key only\n\t\tif (this.attributeConnections)\n\t\t\tlively.bindings.signal(this, 'textString', this.textString);\n\n\t\tthis.fit();\n\n\t\tevt.stop();\n\t\treturn true;\n\t},\n\tonKeyPress: function(evt) {\n\t\tthis.cachedTextString = null;\n\n\t\t// save info for 'More' command\n\t\tthis.rememberSelectionForDoMore('onKeyPress');\n\n\t\tvar key = evt.getKeyChar();\n\t\tif (key && key.toLowerCase() == \"v\" && evt.isCommandKey()) {\n\t\t\tthis.charsTyped += TextMorph.clipboardString;\n\t\t} else {\n\t\t\tthis.charsTyped += key;\n\t\t}\n\n\t\t// if (this.textString.length == 0) this.textString += key;\n\n\t\tthis.fixChunksDelayed();\n\t\tevt.stopPropagation()\n\t\treturn true;\n\t},\n\tonPaste: function(evt) {\n\t\tthis.fixChunksDelayed()\n\t},\n\n\tprocessCommandKeys: function(evt) {\n\t\tvar key = evt.getKeyChar();\n\t\t// alert(\"key \" + key)\n\t\tif (key) key = key.toLowerCase();\n\n\t\tif (evt.isShiftDown()) { // shifted commands here...\n\t\t\tswitch (key) {\n\t\t\t\tcase \"i\": { this.doInspect(); return true; }\n\t\t\t\tcase \"p\": { this.doListProtocol(); return true; }\n\t\t\t}\n\t\t}\n\n\t\tswitch (key) {\n\t\t\tcase \"d\": { this.doDoit(); return true; } // Doit\n\t\t\tcase \"p\": { this.doPrintit(); return true; } // Printit\n\t\t\tcase \"s\": { this.doSave(); return true; }\n\t\t\tcase \"b\": { this.toggleEmphasisForSelection('Boldness'); return true; }\n\t\t\tcase \"i\": { this.toggleEmphasisForSelection('Italics'); return true; }\n\t\t\tcase \"k\": { this.toggleEmphasisForSelection('Link'); return true; }\n\t\t\tcase \"o\": { this.toggleEmphasisForSelection('Doit'); return true; }\n\t\t\tcase \"t\": { alert(\"browser intercepts this t\"); return true;}\n\t\t\tcase \"l\": { this.toggleEmphasisForSelection('Font'); return true; }\n\t\t\tcase \"u\": { this.toggleEmphasisForSelection('Underline'); return true; }\n\t\t\t\n\n\t\t\tcase \"l\": { this.emphasizeSelection({align: 'left'}); return true; }\n\t\t\tcase \"r\": { this.emphasizeSelection({align: 'right'}); return true; }\n\t\t\tcase \"h\": { this.emphasizeSelection({align: 'center'}); return true; }\n\t\t\t// case \"j\": { this.emphasize({italic: true}); return true; }\n\n\t\t\tcase \"f\": { this.doFind(); return true; }\n\t\t\tcase \"g\": { this.doFindNext(); return true; }\n\t\t\tcase \"m\": { this.doMore(evt.isShiftDown()); return true; }\n\n\t\t \n\t\t\tcase \"a\": { if (this.charsTyped && this.charsTyped.length > 0) {\n\t\t\t\t\t// select recent typing, if any\n\t\t\t\t\tvar i = this.getSelectionRange()[1];\n\t\t\t\t\tthis.setSelectionRange(i - this.charsTyped.length, i);\n\t\t\t\t\tthis.charsTyped = '';\n\t\t\t\t\treturn true; }\n\t\t\t\t// Otherwise, do a normal select-all\n\t\t\t\treturn false; }\n\t\t\tcase \"x\": { lively.morphic.Text.clipboardString = this.selectionString();\n\t\t\t\treturn false; }\n\t\t\tcase \"c\": { lively.morphic.Text.clipboardString = this.selectionString();\n\t\t\t\treturn false; }\n\t\t\tcase \"v\": { // Just do the native paste\n\t\t\t\treturn false; }\n\t\t}\n\n\t\tswitch(evt.getKeyCode()) {\n\t\t\t// Font Size\n\t\t\tcase 187/*cmd+'+'*/: { \n\t\t\t\tif (this.hasNullSelection())\n\t\t\t\t\tthis.setFontSize(this.getFontSize() + 1);\n\t\t\t\telse\n\t\t\t\t\tthis.increaseFontSizeOfSelection();\n\t\t\t\treturn true;\n\t\t\t} \t\n\t\t\tcase 189/*cmd+'-'*/: { \n\t\t\t\tif (this.hasNullSelection())\n\t\t\t\t\tthis.setFontSize(this.getFontSize() - 1);\n\t\t\t\telse\n\t\t\t\t\tthis.decreaseFontSizeOfSelection();\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\t// indent/outdent selection\n\t\t\tcase 221/*cmd+]*/: { this.indentSelection(); return true }\n\t\t\tcase 219/*cmd+[*/: { this.outdentSelection(); return true }\n\t\t\t\n\t\t\t// comment/uncoment selection\n\t\t\tcase 191 /*cmd+/*/: { this.addOrRemoveComment(); return true }\n\t\t}\n\n\t\treturn false;\n\t},\t\t\n\tdoDoit: function() { this.evalSelection(false) },\n\tdoPrintit: function() { this.evalSelection(true) },\n\tdoSave: function() {\n\t\t// resetting cachedTextString is necessary when doSave is not triggered by\n\t\t// cmd+s but from outside (e.g. from a button). The cachedTextString would not have\n\t\t// the current textString but an old one\n\t\tthis.cachedTextString = null;\n\t\tthis.savedTextString = this.textString;\n\t},\n\tdoListProtocol: function() {\n\t\tnew lively.morphic.Text.ProtocolLister(this).evalSelectionAndOpenListForProtocol();\n\t},\n\n\tdoFind: function() {\n\t\tvar text = this;\n\t\tthis.world() && this.world().prompt(\n\t\t\t\"Enter the text you wish to find...\", \n\t\t\tfunction(response) {\n\t\t\t\tif (!response) return;\n\t\t\t\ttext.focus();\n\t\t\t\treturn text.searchForFind(response, text.getSelectionRange()[1]);\n\t\t\t}, this.lastSearchString);\n\t},\n\n\tdoFindNext: function() {\n\t\tif (this.lastSearchString)\n\t\tthis.searchForFind(this.lastSearchString,\n\t\t\t// this.getSelectionRange()[0]\n\t\t\tthis.lastFindLoc + this.lastSearchString.length\n\t\t);\n\t},\n\t\n\tdoMore: function(doMuchMore) {\n\t\tif (doMuchMore) { // call with true (shift-M) for replace-all\n\t\t\t// Simplest way: just do N replacements\n\t\t\twhile (this.doMore(false)) { } // Keep repeating the change while possible\n\t\t\treturn;\n\t\t}\n\t\t// Return of true or false used by doMuchMore\n\t\tif (!this.charsReplaced || this.charsReplaced.length == 0) return false;\n\t\tthis.searchForFind(this.charsReplaced, this.lastFindLoc, 'noWrap');\n\t\tif (this.selectionString() != this.charsReplaced) return false;\n\t\tvar holdChars = this.charsReplaced;\t // Save charsReplaced\n\t\tvar holdLastFindLoc = this.lastFindLoc;\n\t\tthis.insertAtCursor(this.charsTyped, true, true); \n\t\tthis.charsReplaced = holdChars ; // Restore charsReplaced after above\n\t\tthis.lastFindLoc = holdLastFindLoc;\n\t\treturn true;\n\t},\n\tdoInspect: function() {\n\t\tvar obj = this.evalSelection();\n\t\tif (obj) this.world().openInspectorFor(obj)\n\t},\n\n\trememberSelectionForDoMore: function(fromWhere) {\n\t\t// This gets called from any typing. It can tell what is being\n\t\t// replaced by testing for a non-zero selection.\n\t\t// At that point, it also records the location consistent with DoMore\n\t\t// and initializes charsTyped which will collect the replacement characters\n\t\tvar sel = this.selectionString();\n\t\tif (!sel || sel == '') return; // null selection means no replacement\n\n\t\tthis.charsReplaced = sel;\n\t\tthis.lastFindLoc = this.getSelectionRange()[0] - sel.length;\n\t\tthis.charsTyped = '';\n\t},\n\n\n\tindentSelection: function() {\n\t\tvar tab = '\\t';\n\t\tthis.modifySelectedLines(function(line) { return line.length == 0 ? line : tab + line });\n\t},\n\toutdentSelection: function() {\n\t\tvar tab = '\\t', space = ' ';\n\t\tthis.modifySelectedLines(function(line) {\n\t\t\treturn (line.startsWith(space) || line.startsWith(tab)) ? line.substring(1,line.length) : line\n\t\t});\n\t},\n\tdoExchange: function() {\n\t\t// Not yet working - DI\n\t\tvar sel1 = this.selectionRange;\n\t\tvar sel2 = this.previousSelection;\n\n\t\tvar d = 1;\t// direction current selection will move\n\t\tif (sel1[0] > sel2[0]) {var t = sel1; sel1 = sel2; sel2 = t; d = -1} // swap so sel1 is first\n\t\tif (sel1[1] >= sel2[0]) return; // ranges must not overlap\n\n\t\tvar fullText = (this.textStyle) ? this.getRichText() : this.textString;\n\t\tvar txt1 = fullText.substring(sel1[0], sel1[1]+1);\n\t\tvar txt2 = fullText.substring(sel2[0], sel2[1]+1);\n\t\tvar between = fullText.substring(sel1[1]+1, sel2[0]);\n\n\t\tvar d1 = (txt2.size() + between.size()); // amount to move sel1\n\t\tvar d2 = (txt1.size() + between.size()); // amount to move sel2\n\t\tvar newSel = [sel1[0]+d1, sel1[1]+d1];\n\t\tvar newPrev = [sel2[0]-d2, sel2[1]-d2];\n\t\tif (d < 0) { var t = newSel; newSel = newPrev;\t newPrev = t; }\n\t\tvar replacement = txt2.concat(between.concat(txt1));\n\t\tthis.setSelectionRange(sel1[0], sel2[1]+1);\t // select range including both selections\n\t\tthis.replaceSelectionWith(replacement);\t // replace by swapped text\n\t\tthis.setSelectionRange(newSel[0], newSel[1]+1);\n\t\tthis.previousSelection = newPrev;\n\t\tthis.undoSelectionRange = d>0 ? sel1 : sel2;\n\t},\n\taddOrRemoveBrackets: function(bracketIndex) {\n\t\t// Not yet working - DI \n\t\tvar left = this.locale.charSet.leftBrackets[bracketIndex];\n\t\tvar right = this.locale.charSet.rightBrackets[bracketIndex];\n\t\t\n\t\tif (bracketIndex == 0) { left = \"/*\"; right = \"*/\"; }\n\t\n\t\tvar i1 = this.selectionRange[0];\n\t\tvar i2 = this.selectionRange[1];\n\t\t\n\t\tif (i1 - left.length >= 0 && this.textString.substring(i1-left.length,i1) == left &&\n\t\t\ti2 + right.length < this.textString.length && this.textString.substring(i2+1,i2+right.length+1) == right) {\n\t\t\t// selection was already in brackets -- remove them\n\t\t\tvar before = this.textString.substring(0,i1-left.length);\n\t\t\tvar replacement = this.textString.substring(i1,i2+1);\n\t\t\tvar after = this.textString.substring(i2+right.length+1,this.textString.length);\n\t\t\tthis.setTextString(before.concat(replacement,after));\n\t\t\tthis.setSelectionRange(before.length,before.length+replacement.length); \n\t\t} else { // enclose selection in brackets\n\t\t\tvar before = this.textString.substring(0,i1);\n\t\t\tvar replacement = this.textString.substring(i1,i2+1);\n\t\t\tvar after = this.textString.substring(i2+1,this.textString.length); \n\t\t\tthis.setTextString(before.concat(left,replacement,right,after));\n\t\t\tthis.setSelectionRange(before.length+left.length,before.length+left.length+replacement.length); \n\t\t}\n\t},\n\taddOrRemoveComment: function() {\n\t\tvar commentRegex = /^(\\s*)(\\/\\/\\s*)(.*)/,\n\t\t\tspacesRegex = /^(\\s*)(.*)/,\n\t\t\tnoSelection = this.selectionString() == '';\n\n\t\tif (noSelection) this.selectCurrentLine();\n\n\t\tthis.modifySelectedLines(function(line) {\n\t\t\tvar commented = commentRegex.test(line);\n\t\t\treturn (commented) ?\n\t\t\t\tline.replace(commentRegex, '$1$3') :\n\t\t\t\tline.replace(spacesRegex, '$1// $2');\n\t\t});\n\t},\n\tmodifySelectedLines: function(modifyFunc) {\n\t\t// this function calls modifyFunc on each line that is selected\n\t\t// modifyFunc can somehow change the line\n\t\t// the selection grows/shrinks with the modifications\n\t\tvar lines = this.selectionString().split('\\n')\n\t\tfor (var i = 0; i < lines.length; i++) {\n\t\t\tlines[i] = modifyFunc(lines[i], i);\n\t\t}\n\t\tvar replacement = lines.join('\\n');\n\t\tthis.insertAtCursor(replacement, true, true);\n\t},\n},\n'keyboard event reaction', {\n\tonEnterPressed: function(evt) {\n\t\tif (this.isInputLine) {\n\t\t\tthis.doSave();\n\t\t} else {\n\t\t\tvar range = this.getSelectionRange(),\n\t\t\t\tendIdx = Math.max(range[0], range[1]);\n\t\t\t// when at end insert a br alement if none is there\n\t\t\tif (this.textString.length == endIdx) {\n\t\t\t\tvar chunk = this.getTextChunks().last();\n\t\t\t\tchunk.ensureEndsWithBr();\n\t\t\t}\n\n\t\t\tthis.insertAtCursor('\\n', false, true)\n\t\t}\n\t\tevt.stop();\n\t\treturn true;\n\t},\n\tonBackspacePressed: function(evt) {\n\t\tif (this.charsTyped.length > 0)\n\t\t\tthis.charsTyped = this.charsTyped.substring(0, this.charsTyped.length-1);\n\t\tthis.fixChunksDelayed();\n\t\treturn true;\n\t},\n\tonDelPressed: function(evt) {\n\t\t// evt.stop();\n\t\t// if (this.hasNullSelection()) {\n\t\t\t// var sel = this.getSelectionRange();\n\t\t\t// this.setSelectionRange(sel[0], sel[0]+1);\n\t\t// }\n// alert('del ' + this.selectionString())\n\t\t// this.insertAtCursor('', false, true)\n\t\t// this.removeChunksNotUsed();\n\t\t// return true;\n\n\t\tif (this.charsTyped.length > 0)\n\t\t\tthis.charsTyped = this.charsTyped.substring(0, this.charsTyped.length-1);\n\t\tthis.fixChunksDelayed();\n\t\treturn true;\n\t},\n\tonTabPressed: function(evt) {\n\t\tthis.insertAtCursor('\\t', false, true)\n\n// FIXME implement better tabs\n// var span = XHTMLNS.create('span');\n// span.style.backgroundColor = 'green';\n// span.style.width = '2ex';\n// span.style.display = 'inline-block';\n// span.textContent = '\\t';\t\t\t\t\t\t\t\t\n// this.insertElementAtCursor(elem, false, true);\n// var nodeAndIdx = this.getTextElementAndLocalIndexForGlobalIndex(this.getSelectionRange()[0]);\n// var replacement = nodeAndIdx[0].splitText(nodeAndIdx[1]);\n// replacement.parentNode.insertBefore(span, replacement)\n// var sel = this.domSelection();\n// sel.removeAllRanges();\n// var range = document.createRange()\n// range.setStartAfter(span)\n// range.setEndAfter(span)\n// sel.addRange(range);\n// document.execCommand('insertHTML', null, Exporter.stringify(elem))\n\n\t\tevt.stop();\n\t\treturn true;\n\t},\n\tonHomePressed: function(evt) { return true },\n\tonEndPressed: function(evt) { return true },\n\tonPageUpPressed: function(evt) { return true },\n\tonPageDownPressed: function(evt) { return true },\n},\n'mouse events', {\n\tonMouseDown: function($super, evt) {\n\t\t// if clicked in the text we want the default thing to happen, at least in HTML\n\t\t// but do not want other morphs to handle the event as well, so return true for was handled\n\n\t\tif (!evt.isLeftMouseButtonDown()) return $super(evt);\n\t\tif (evt.isCommandKey()) { // for halos\n\t\t\t$super(evt);\n\t\t\tevt.stop();\n\t\t\treturn false;\n\t\t}\n\n\t\tif (this.isFocused())\n\t\t\tthis.priorSelectionRange = this.getSelectionRange(); // save for onMouseUp\n\n\t\t$super(evt); \n\n\t\tif (!this.allowInput && !this.allowsInput) {\n\t\t\tevt.stop();\n\t\t\treturn false;\n\t\t}\n\n\t\t// to prevent accidental scrolling to the top of the text\n\t\t// if (!this.isFocused()) evt.stop();\n\n\t\t// we clicked in morph but not in the text element itself\n\t\t// if (!this.getTextBounds().containsPoint(this.localize(evt.getPosition()))) {\n\t\t\t// this.focus();\n\t\t\t// evt.stop();\n\t\t// }\n\n\t\treturn true;\n\t},\n\tonSelectStart: function($super, evt) {\n\t\t// Allow HTML selection\n\t\treturn true;\n\t},\n\tonMouseUp: function($super, evt) {\n\n\t\tvar a = this.getSelectionRange();\n\t\t// this happens when text has lost selection\n\t\tif (!a) return $super(evt);\n\n\t\tthis.charsTyped = '';\n\n\t\t// test if we have a null selection and same as before\n\t\tif (this.priorSelectionRange != null\n\t\t && a[0] == a[1] // null selection\n\t\t && this.priorSelectionRange[0] == a[0]\n\t\t && this.priorSelectionRange[1] == a[1]) {\n\t\t\t// It is a null selection, repeated in the same place --\n\t\t\t// select word or range\n\t\t\tif (a[0] == 0 || a[0] == this.textString.length) {\n\t\t\t\tthis.setSelectionRange(0, this.textString.length); \n\t\t\t} else {\n\t\t\t\tvar range = this.selectWord(this.textString, a[0]);\n\t\t\t\tthis.setSelectionRange(range[0], range[1]+1); \n\t\t\t}\n\t\t}\n\t\treturn $super(evt);\n\t},\n\n\n},\n'selection', {\n\tdomSelection: function() {\n\t\tvar sel = Global.getSelection(), node = sel.focusNode, textNode = this.renderContext().textNode;\n\t\twhile(node) {\n\t\t\tif (textNode === node) return sel;\n\t\t\tnode = node.parentNode;\n\t\t}\n\n\t\t// we have no focus? ...try again\n\t\tthis.focus();\n\t\tsel = Global.getSelection(), node = sel.focusNode;\n\t\twhile(node) {\n\t\t\tif (textNode === node) return sel;\n\t\t\tnode = node.parentNode;\n\t\t}\n\n\t\treturn null\n\t},\n\n\tselectionString: function() {\n\t\tvar sel = this.domSelection();\n\t\treturn sel ? sel.toString() : '';\n\t},\n\n\tinsertAtCursor: function(string, selectIt, overwriteSelection) {\n\t\tthis.insertElementAtCursor(NodeFactory.createText(String(string)), selectIt, overwriteSelection);\n\t},\n\n\tinsertElementAtCursor: function(element, selectIt, overwriteSelection) {\n\t\t// FIXME refactor!!!\n\t\tvar node = element,\n\t\t\tselRange = this.getSelectionRange(),\n\t\t\tsel = this.domSelection(),\n\t\t\trange = sel.getRangeAt(0);\n\n\t\tif (overwriteSelection) {\n\t\t\t// save info for 'More' command\n\t\t\tthis.charsReplaced = range.toString();\n\t\t\tthis.lastFindLoc = this.getSelectionRange()[0] + element.textContent.length;\n\t\t\trange.deleteContents();\n\t\t\tvar selPosAfterOverwrite = Math.min(selRange[0],selRange[1]);\n\t\t\tthis.setSelectionRange(selPosAfterOverwrite, selPosAfterOverwrite)\n\t\t} else {\n\t\t\t// insert new node after current selection\n\t\t\t// after current selection depends on selection direction\n\t\t\t// either focusNode or anchorNode\n\t\t\tif (selRange[0] < selRange[1])\n\t\t\t\trange.setStart(sel.focusNode, sel.focusOffset);\n\t\t\telse\n\t\t\t\trange.setStart(sel.anchorNode, sel.anchorOffset);\n\t\t}\n\t\trange.insertNode(node);\n\t\tsel.removeAllRanges();\n\n\t\trange = document.createRange()\n\t\tif (selectIt) {\n\t\t\trange.selectNode(node)\n\t\t} else { // no real selection but set cursor, FIXME use setCursor or something\n\t\t\trange.setStartAfter(node)\n\t\t\trange.setEndAfter(node)\n\t\t}\n\t\tsel.addRange(range);\n\n\t\t// string has changed, removed cached version\n\t\tthis.cachedTextString = null;\n\t},\n\tremoveTextSelection: function() {},\n\tgetSelectionOrLineString: function() {\n\t\tvar sel = this.domSelection(),\n\t\t\trange = sel.getRangeAt(0);\n\t\tif (range.collapsed)\n\t\t\tthis.selectCurrentLine();\n\t\treturn this.selectionString();\n\t},\n\tselectCurrentLine: function() {\n\t\tvar sel = this.domSelection();\n\t\tif (sel.anchorNode) {\n\t\t\tsel.modify('move', 'left', 'lineboundary');\n\t\t\tsel.modify('extend', 'right', 'lineboundary')\n\t\t}\n\t},\n\n\tsetSelectionRange: function(start, end) {\n\t\tvar sel = this.domSelection();\n\t\tif (sel) sel.removeAllRanges();\n\n\t\t// actually it should not be necessary to switch the values\n\t\t// bot somehow range expects smaller value in setStart....\n\t\tif (start > end) {\n\t\t\tvar temp = end;\n\t\t\tend = start;\n\t\t\tstart = temp;\n\t\t}\n\t\tvar startBoundaryPoint = this.getTextElementAndLocalIndexForGlobalIndex(start),\n\t\t\tendBoundaryPoint = this.getTextElementAndLocalIndexForGlobalIndex(end);\n\n\t\t// found nothing to select...\n\t\tif (startBoundaryPoint === undefined && endBoundaryPoint === undefined) return;\n\t\tif (startBoundaryPoint === undefined) startBoundaryPoint = endBoundaryPoint;\n\t\tif (endBoundaryPoint === undefined) endBoundaryPoint = startBoundaryPoint;\n\t\tvar range = document.createRange();\n// alert('selecting ' + startBoundaryPoint[0].textContent + '[' + startBoundaryPoint[1] + ']-'\n\t// + endBoundaryPoint[0].textContent + '[' + endBoundaryPoint[1] + ']')\n\t\trange.setStart(startBoundaryPoint[0], startBoundaryPoint[1])\n\t\trange.setEnd(endBoundaryPoint[0], endBoundaryPoint[1])\n\t\tif (!sel) sel = Global.getSelection();\n\t\tsel.addRange(range);\n\t},\n\n\tgetSelectionRange: function() {\n\n\t\t// FIXME this only works for textNodes that have the form\n\t\t//
or \n\t\tvar parent = this.renderContext().textNode;\n\t\tvar textNodeType = parent.TEXT_NODE;\n\t\tvar textNodes = [];\n\t\tfor (var i = 0; i < parent.childNodes.length; i++) {\n\t\t\tvar child = parent.childNodes[i];\n\t\t\tif (child.nodeType === textNodeType) {\n\t\t\t\ttextNodes.push(child)\n\t\t\t} else {\n\t\t\t\tfor (var j = 0; j < child.childNodes.length; j++) {\n\t\t\t\t\tvar childchild = child.childNodes[j];\n\t\t\t\t\tif (childchild.nodeType === textNodeType)\n\t\t\t\t\t\ttextNodes.push(childchild)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// --------\n\n\t\t// this function calculates how many characters are between the start of\n\t\t// the parent element and the node.\n\t\t// The node is expected to be a childNode of parent\n\t\tfunction nodeOffsetFrom(node, offset) {\n\t\t\tvar offset = 0;\n\t\t\tfor (var i = 0; i < textNodes.length; i++) {\n\t\t\t\tvar nodeBefore = textNodes[i];\n\t\t\t\t// careful, actually this must be bitmasked\n\t\t\t\tif (node.compareDocumentPosition(nodeBefore) == node.DOCUMENT_POSITION_PRECEDING) {\n\t\t\t\t\toffset += nodeBefore.textContent.length;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn offset;\n\t\t}\n\t\tvar sel = this.domSelection();\n\t\tif (!sel) return null;\n\t\t// anchor is the start node, focusNode is the end node of the selection\n\t\t// see https://developer.mozilla.org/en/DOM/Selection\n\n\t\t// there is a problem with the above algorithm when calling getSelectionRange\n\t\t// when the caret is at the end of the text. In this case anchorNode and focusNode\n\t\t// are not textNodes and nodeOffsetFrom() would not return anything meaningful\n\t\t// Since anchorNode.childNodes[anchorOffset] and focusNode.childNodes[focusOffset] \n\t\t// identify the node from/to selection was exist, use this node for calculation\n\t\t// In this case return the text length as indexes of the range\n\t\tvar anchorIsText = sel.anchorNode.nodeType == textNodeType;\n\t\tvar anchorNode = anchorIsText ? sel.anchorNode : sel.anchorNode.childNodes[sel.anchorOffset];\n\t\tvar anchorOffset = anchorIsText ? sel.anchorOffset : 0;\n\n\t\tvar focusIsText = sel.focusNode.nodeType == textNodeType;\n\t\tvar focusNode = focusIsText ? sel.focusNode : sel.focusNode.childNodes[sel.focusOffset];\n\t\tvar focusOffset = focusIsText ? sel.focusOffset : 0;\n\n\t\treturn [nodeOffsetFrom(anchorNode) + anchorOffset,\n\t\t\tnodeOffsetFrom(focusNode) + focusOffset]\n\t},\n\tselectAll: function() {\n\t\tif (this.textString.length > 0)\n\t\t\tthis.setSelectionRange(0, this.textString.length);\n\t\telse\n\t\t\tthis.focus();\n\t},\n\thasNullSelection: function() {\n\t\tvar range = this.getSelectionRange();\n\t\treturn range[0] === range[1]\n\t},\n\n\tsetNullSelectionAt: function(idx) { this.setSelectionRange(idx, idx) },\n\tgetSelectionBounds: function() {\n\t\tvar sel = this.domSelection();\n\t\tif (!sel) return new Rectangle(0,0,0,0);\n\t\tvar range = sel.getRangeAt(0);\n\t\tif (!range) return new Rectangle(0,0,0,0);\n\t\t// FIXME HTML specific\n\t\tvar domR = range.getBoundingClientRect();\n\t\tif (!domR) return new Rectangle(0,0,0,0);\n\t\tvar s = this.getScroll(),\n\t\t\tr = new Rectangle(domR.left+s[0], domR.top+s[1], domR.width, domR.height),\n\t\t\tworld = this.world(),\n\t\t\ttransformed = world ? world.transformToMorph(this).transformRectToRect(r):r;\n\t\treturn transformed;\n\t},\n selectWord: function(str, i1) { // Selection caret before char i1\n\t// Most of the logic here is devoted to selecting matching backets\n var rightBrackets = \"*)}]>'\\\"\";\n\tvar leftBrackets = \"*({[<'\\\"\";\n\tfunction isWhiteSpace(c) { return c === '\\t' || c === ' '; }\n\tfunction isAlpha(s) {\n\t\tvar regEx = /^[a-zA-Z0-9\\-]+$/;\n\t\treturn s.match(regEx);\n\t};\n\tfunction periodWithDigit(c, prev) {\n\t\t// return true iff c is a period and prev is a digit\n \tif (c != \".\") return false;\n \treturn \"0123456789\".indexOf(prev) >= 0;\n \t};\n\tvar i2 = i1 - 1;\n if (i1 > 0) { // look left for open backets\n if(str[i1-1] == \"\\n\" || str[i1-1] == \"\\r\") return this.findLine(str, i1, 1, str[i1-1]);\n\t var i = leftBrackets.indexOf(str[i1-1]);\n if (str[i1 - 1] == \"*\" && (i1-2 < 0 || str[i1-2] != \"/\")) \n i = -1; // spl check for /*\n if (i >= 0) {\n var i2 = this.matchBrackets(str, leftBrackets[i], rightBrackets[i], i1 - 1, 1);\n return [i1, i2 - 1]; \n } \n }\n if (i1 < str.length) { // look right for close brackets\n if(str[i1] == \"\\n\" || str[i1] == \"\\r\") return this.findLine(str, i1, -1, str[i1]);\n var i = rightBrackets.indexOf(str[i1]);\n if (str[i1]== \"*\" && (i1+1 >= str.length || str[i1+1] != \"/\")) \n i = -1; // spl check for */\n if (i >= 0) {\n i1 = this.matchBrackets(str, rightBrackets[i], leftBrackets[i],i1,-1);\n return [i1+1, i2]; \n } \n }\n\n\t\t// is a '//' left of me?\n\t\tif (str[i1-1] === '/' && str[i1-2] === '/') {\n\t\t\twhile (i2+1= 0 && isWhiteSpace(str[myI1-1])) {\n\t\t\tmyI1 --;\n\t\t}\n\t\twhile (myI2 < str.length && isWhiteSpace(str[myI2+1])) {\n\t\t myI2 ++;\n\t\t}\n\t\tif (myI2-myI1 >= 1) return [myI1, myI2];\n\t\n var prev = (i1= 0 && (isAlpha(str[i1-1]) || periodWithDigit(str[i1-1], prev))) {\n\t prev = str[i1-1];\n\t\t i1 --;\n\t }\n\t\twhile (i2+1 < str.length && (isAlpha(str[i2+1]) || periodWithDigit(str[i2+1], prev))) {\n\t prev = str[i2+1];\n\t\t i2 ++;\n\t\t}\n return [i1, i2]; \n },\n matchBrackets: function(str, chin, chout, start, dir) { \n var i = start;\n var depth = 1;\n while ((dir < 0) ? i - 1 >= 0 : i + 1 < str.length ) {\n i += dir;\n if (str[i] == chin && chin != chout) depth++;\n if (str[i] == chout) depth--;\n if (depth == 0) return i; \n }\n return i; \n },\n\tfindLine: function(str, start, dir, endChar) { // start points to a CR or LF (== endChar)\n\t\tvar i = start;\n\t\twhile ((dir < 0) ? i - 1 >= 0 : i + 1 < str.length ) {\n\t\t\ti += dir;\n\t\t\tif (str[i] == endChar) return dir>0 ? [start, i] : [i+1, start];\n\t\t}\n\t\treturn dir>0 ? [start+1, str.length-1] : [0, start];\n\t},\n\n},\n'scrolling', {\n\tgetScrollableNode: function() {\n\t\t// for ScrollableTrait\n\t\treturn this.renderContext().textNode\n\t},\n\tscrollSelectionIntoView: function() {\n\t\tthis.scrollRectIntoView(this.getSelectionBounds(), true)\n\t},\n},\n'evaluation', {\n\tevalSelection: function(printIt) {\n\t\tvar str = this.getSelectionOrLineString(),\n\t\t\tresult = this.tryBoundEval(str);\n\t\tif (printIt) this.insertAtCursor(String(result), true);\n\t\treturn result;\n\t},\n\tboundEval: function (str) {\t \n\t\t// Evaluate the string argument in a context in which \"this\" may be supplied by the modelPlug\n\t\tvar ctx = this.getDoitContext() || this,\n\t\t\tinteractiveEval = function(text) { return eval(text) };\n\t\treturn interactiveEval.call(ctx, str);\n\t},\n\ttryBoundEval: function(str) {\n\t\ttry { return this.boundEval(str) } catch(e) { alert(e) }\n\t},\n\n\tgetDoitContext: function() { return this.doitContext },\n},\n'focus', {\n\tfocus: function() {\n\t\tif (!this.isFocused()) this.renderContext().textNode.focus();\n\t},\n},\n'testing', {\n\thasUnsavedChanges: function() {\n\t\treturn false;\n\t\t// return this.savedTextString !== this.textString;\n\t},\n\tisFocused: function() { return lively.morphic.Text.activeInstance() === this },\n\n},\n'searching', {\n\tsearchForFind: function(str, start, noWrap) {\n\t\t// if (this.world()) this.focus();\n\t\tvar i1 = this.textString.indexOf(str, start);\n\t\tif (i1 < 0 && !noWrap) i1 = this.textString.indexOf(str, 0); // wrap\n\t\tif (i1 >= 0) this.setSelectionRange(i1, i1+str.length);\n\t\t\telse this.setNullSelectionAt(0);\n\t\tthis.scrollSelectionIntoView();\n\t\tthis.lastSearchString = str;\n\t\tthis.lastFindLoc = i1;\n\t},\t\n},\n'debugging', {\n\tshowError: function(e, offset) {\n\t\toffset = offset || 0;\n\t\tvar msg = \"\" + e + \"\\n\" + \n\t\t\t\"Line: \" + e.line + \"\\n\" +\n\t\t\t(e.sourceURL ? (\"URL: \" + (new URL(e.sourceURL).filename()) + \"\\n\") : \"\");\n\t\tif (e.stack) {\n\t\t\t// make the stack fit into status window\n\t\t\tmsg += e.stack.replace(new RegExp(URL.codeBase.toString(), \"g\"),\"\");\n\t\t}\n\n\t\tvar world = lively.morphic.World.current();\n\t\tif (!world) {\n\t\t\tconsole.log(\"Error in \" +this.id() + \" bound eval: \\n\" + msg)\n\t\t\treturn\n\t\t};\n\n\t\tworld.setStatusMessage(msg, Color.red, 15,\n\t\t\tfunction() { require('lively.Helper').toRun(function() {\n\t\t\t\tworld.showErrorDialog(e)\n\t\t\t }) },\n\t\t\t{fontSize: 12, fillOpacity: 1});\n\n\t\tif (e.expressionEndOffset) {\n\t\t\tthis.setSelectionRange(e.expressionBeginOffset + offset, e.expressionEndOffset + offset);\n\t\t} else if (e.line) {\n\t\t\tvar lineOffset = this.lineNumberForIndex(offset);\n\t\t\t// console.log(\"line: \" + e.line + \" offset: \" + lineOffset)\n\t\t\tvar line = this.lines[e.line + lineOffset - 1]\n\t\t\tif (line && line.startIndex) {\n\t\t\t\t// console.log(\" set to \" + line.startIndex)\n\t\t\t\tthis.setSelectionRange(line.startIndex, line.getStopIndex());\n\t\t\t}\n\t\t}\n\t\tthis.setStatusMessage(\"\" + e, Color.red);\n\t},\n\ttextNodeString: function() {\n\t\tvar textNode = this.renderContext().textNode;\n\t\tif (!textNode) return 'textNode not yet accessible';\n\t\tvar isolatedTextNode = textNode.cloneNode(false/*no children*/)\n\t\tvar string = Exporter.stringify(isolatedTextNode);\n\t\tvar midIdx = string.indexOf('');\n\t\tvar childrenString = $A(textNode.childNodes).collect(function(ea) { return ' ' + Exporter.stringify(ea) }).join('\\n');\n\t\tstring = string.slice(0, midIdx) + '\\n' + childrenString + '\\n' + string.slice(midIdx)\n\t\treturn string;\nthis. textNodeString()\n\t},\n\n},\n'experimentation', {\n\tsetWhiteSpaceHandling: function(modeString) {\n\t\treturn this.morphicSetter('WhiteSpaceHandling', modeString);\n\t},\n\tgetWhiteSpaceHandling: function(modeString) {\n\t\treturn this.morphicGetter('WhiteSpaceHandling') || 'pre-wrap';\n\t},\n\tgetTextElements: function() {\n\t\t// returns js objects for subnodes of this.renderContext().textNode\n\t\t// they have the following properties:\n\t\t// node: the text node,\n\t\t// startIndex: the (global)startIndex of the node in the whole text,\n\t\t// endIndex: global end index\n\t\t// method toString for debugging\n\n\t\tvar textNodeType = this.renderContext().textNode.TEXT_NODE;\n\t\tfunction isTextNode(node) { return node && node.nodeType == textNodeType }\n\t\tfunction flattenTextNodes(node) {\n\t\t\tif (!node) return [];\n\t\t\tif (isTextNode(node)) return [node];\n\t\t\tvar result = [];\n\t\t\tfor (var i = 0; i < node.childNodes.length; i++)\n\t\t\t\tresult = result.concat(flattenTextNodes(node.childNodes[i]))\n\t\t\treturn result;\n\t\t}\n\n\n//var endlessProtection = 0;\n//endlessProtection++\n//if (endlessProtection > 10000) throw new Error('Endless loop in getTextElements!')\n\n\t\tvar nodes = flattenTextNodes(this.renderContext().textNode),\n\t\t\tresult = [],\n\t\t\tindex = 0;\n\n\t\tfor (var i = 0; i < nodes.length; i++) {\n\t\t\tvar part = nodes[i];\n\t\t\tif (!part.textContent) continue;\n\t\t\tvar start = index,\n\t\t\t\tlength = part.textContent.length,\n\t\t\t\tend = start + length;\n\t\t\tindex = end;\n\t\t\tresult.push({\n\t\t\t\tnode: part,\n\t\t\t\tstartIndex: start,\n\t\t\t\tendIndex: end,\n\t\t\t\ttoString: function() {\n\t\t\t\t\treturn '<' + this.node.textContent.replace(/\\n/, '\\\\n') + '>: ' + this.startIndex + '-' + this.endIndex;\n\t\t\t\t}})\n\t\t}\n\t\treturn result;\n\t},\n\n\tgetTextElementAndLocalIndexForGlobalIndex: function(idx) {\n\t\t// returns a subnode and the index in the subnode that responds to the global index\n\t\t// of the whole text\n\t\t// the index used for lookup is sanitized\n\t\t// example: subnodes: foobar, idx: 5\n\t\t// would return [bar, 2] (local idx between a and r)\n\t\tidx = Math.max(0, Math.min(idx, this.textString.length));\n\t\tvar textParts = this.getTextElements();\n\t\tfor (var i = 0; i < textParts.length; i++) {\n\t\t\tif (idx >= textParts[i]. startIndex && idx <= textParts[i].endIndex) {\n\t\t\t\tvar node = textParts[i].node,\n\t\t\t\t\tlocalIdx = idx - textParts[i].startIndex;\n\t\t\t\treturn [node, localIdx]\n\t\t\t}\n\t\t}\n\t\treturn [this.renderContext().textNode, 0];\n\t},\n\tsetRichText: function(richText) {\n\t\t// FIXME implement\n\t\tthis.setTextString(richText.string || 'ERROR: setRichText did not work!');\n\n\t\talert('setRichText not yet implemented'); return richText.string;\n\t\tthis.textString = richText.string;\n\t\tthis.textStyle = richText.style;\n\t\trichText.applyToMorph(this);\n\t\treturn richText;\n\t},\n\tgetTextStyle: function() {\n\t\talert('getTextStyle not yet implemented'); return;\n\t\t// if (!this.textStyle)\n\t\t\t// this.textStyle = new lively.RunArray([this.textString.length], [new lively.TextEmphasis({})]);\n\t\t// return this.textStyle;\n\t},\n\tgetRange: function(from, to) {\n\t\tvar range = document.createRange(),\n\t\t\tstartNodeAndIdx = this.getTextElementAndLocalIndexForGlobalIndex(from),\n\t\t\tendNodeAndIdx = this.getTextElementAndLocalIndexForGlobalIndex(to);\n\t\trange.setStart(startNodeAndIdx[0], startNodeAndIdx[1]);\n\t\trange.setEnd(endNodeAndIdx[0], endNodeAndIdx[1]);\n\t\treturn range\n\t},\n},\n'text chunks', {\n\tcreateChunk: function() {\n\t\tvar c = new lively.morphic.TextChunk();\n\t\tc.addTo(this);\n\t\treturn c;\n\t},\n\tgetTextChunks: function() {\n\t\tif (!this.textChunks || this.textChunks.length === 0)\n\t\t\tthis.textChunks = [this.createChunk()];\n\t\treturn this.textChunks;\n\t},\n\tfirstTextChunk: function() {\n\t\treturn this.getTextChunks()[0];\n\t},\n\tremoveTextChunks: function() {\n\t\tif (!this.textChunks) return;\n\t\twhile (this.textChunks.length > 0) {\n\t\t\tvar chunk = this.textChunks.shift();\n\t\t\tchunk.remove();\n\t\t}\n\t},\n\tgetChunkAndLocalIndex: function(idx, useChunkStart) {\n\t\t// when useChunkStart = false and a chunk ends at idx then we return that\n\t\t// when useChunkStart = true then we return the next chunk if there is one\n\t\t// if chunk ranges are [[0, 1], [1, 3], [3, 6]]\n\t\t// useChunkStart == false, idx == 1 returns [chunk[0],1]\n\t\t// useChunkStart == false, idx == 2 returns [chunk[1],1]\n\t\t// useChunkStart == true, idx == 1 returns [chunk[1],0]\n\t\tvar offset = 0, chunks = this.getTextChunks();\n\t\tfor (var i = 0; i < chunks.length; i++) {\n\t\t\tvar nextOffset = offset + chunks[i].textString.length;\n\t\t\tif (!useChunkStart && idx <= nextOffset) return [chunks[i], idx-offset];\n\t\t\tif (useChunkStart && idx < nextOffset) return [chunks[i], idx-offset];\n\t\t\toffset = nextOffset;\n\t\t}\n\t},\n\tsliceTextChunks: function(from, to) {\n\t\t// sanitize indexes\n\t\tvar maxLength = this.textString.length,\n\t\t\tfromSafe = Math.min(from, to),\n\t\t\ttoSafe = Math.max(from, to);\n\t\tfromSafe = Math.max(0, Math.min(maxLength, fromSafe));\n\t\ttoSafe = Math.max(0, Math.min(maxLength, toSafe));\n\n\t\t// split the chunks and retrieve chunks inbetween from-to\n\t\tvar start = this.getChunkAndLocalIndex(fromSafe);\nif (!start) return [];\n\t\tvar startChunk = start[0].splitAfter(start[1]);\n\n\t\tvar end = this.getChunkAndLocalIndex(toSafe);\nif (!end) return [];\n\t\tvar endChunk = end[0].splitBefore(end[1]);\n\n\t\tvar chunks = this.getTextChunks(),\n\t\t\tstartIdx = chunks.indexOf(startChunk),\n\t\t\tendIdx = chunks.indexOf(endChunk);\n\n\t\treturn chunks.slice(Math.min(startIdx, endIdx),endIdx+1);\n\t},\n\n\tcoalesceChunks: function () {\n\t\tvar chunk = this.firstTextChunk();\n\t\twhile (chunk)\n\t\t\tchunk = chunk.joinWithNextIfEqualStyle() ? chunk : chunk.next();\n\t},\n\tremoveChunksNotUsed: function() {\n\t\t// garbage collect unused chunks, e.g. when the user has selected and removed\n\t\t// a part of the text that did cross chunk bounds\n\t\tvar oldChunks = this.getTextChunks(), newChunks = [];\n\t\tfor (var i = 0; i < oldChunks.length; i++)\n\t\t\tif (oldChunks[i].chunkNode && oldChunks[i].chunkNode.parentNode)\n\t\t\t\tnewChunks.push(oldChunks[i])\n\t\treturn this.textChunks = newChunks;\n\t},\n\tremoveNonChunkNodes: function(chunks) {\n\t\tfor (var i = 0; i < chunks.length; i++)\n\t\t\tchunks[i].removeNonChunkNodes()\n\t},\n\n\tgetChunkRanges: function() {\n\t\t// only used for debugging\n\t\tvar offset = 0;\n\t\treturn this.textChunks.collect(function(chunk) {\n\t\t\treturn [offset, offset += chunk.textString.length];\n\t\t})\n\t},\n\tfixTextBeforeAndAfterChunks: function(chunks) {\n\t\t// this removes the focus and selection...\n\t\tchunks = this.getTextChunks();\n\t\tchunks[0].ingestAllPrecedingElements();\n\t\tfor (var i = 0; i < chunks.length; i++)\n\t\t\tchunks[i].ingestAllFollowingElements(chunks[i+1]);\n\t},\n\tfixChunks: function() {\n\t\tvar selRange = this.isFocused() && this.getSelectionRange();\n\n\t\tvar chunks = this.removeChunksNotUsed();\n\n\t\t// this.removeNonChunkNodes(chunks)\n\t\tthis.fixTextBeforeAndAfterChunks(chunks);\n\t\tthis.removeNonChunkNodes(chunks);\n\n\t\tselRange && this.setSelectionRange(selRange[0], selRange[1]);\n\t},\n\tfixChunksDelayed: function() {\n\t\tthis.fixChunks.bind(this).delay(0);\n\t},\n\n},\n'rich text', {\n\temphasize: function(styleSpec, from, to) {\n\t\tvar chunks = this.sliceTextChunks(from, to);\n\t\tfor (var i = 0; i < chunks.length; i++)\n\t\t\tchunks[i].styleText(styleSpec);\n\t\tthis.coalesceChunks();\n\t},\n\tchangeEmphasis: function(from, to, callback) {\n\t\t// callback is called with the first emphasis that is found in the range from-to\n\t\t// callback should return a new emphasis\n\t\tvar emph = this.getEmphasisAt(from);\n\t\tif (!emph) return;\n\t\tcallback(emph, function doEmph(newEmph) {\ndebugger\n\t\t\tthis.emphasize(newEmph, from, to);\n\t\t\tthis.setSelectionRange(from, to);\n\t\t}.bind(this));\n\t},\n\ttoggleItalics: function(from, to) {\n\t\tthis.changeEmphasis(from, to, function(emph, doEmph) {\n\t\t\tdoEmph({italics: emph.getItalics() === 'italic' ? 'normal' : 'italic'})\n\t\t})\n\t},\n\n\n\ttoggleBoldness: function(from, to) {\n\t\tthis.changeEmphasis(from, to, function(emph, doEmph) {\n\t\t\tdoEmph({fontWeight: emph.getFontWeight() === 'bold' ? 'normal' : 'bold'})\n\t\t})\n\t},\n\ttoggleUnderline: function(from, to) {\n\t\tthis.changeEmphasis(from, to, function(emph, doEmph) {\n\t\t\tdoEmph({textDecoration: emph.getTextDecoration() === 'underline' ? 'normal' : 'underline'})\n\t\t})\n\t},\n\n\ttoggleLink: function(from, to) {\n\t\tvar world = this.world()\n\t\tthis.changeEmphasis(from, to, function(emph, doEmph) {\n\t\t\tworld.prompt('Enter link URL', function(input) {\n\t\t\t\tif (input == '') input = null;\n\t\t\t\tdoEmph({uri: input})\n\t\t\t}, emph.uri);\n\t\t})\n\t},\n\ttoggleDoit: function(from, to) {\n\t\tvar world = this.world(), text = this;\n\t\tthis.changeEmphasis(from, to, function(emph, doEmph) {\n\t\t\tworld.prompt('Enter doit code', function(input) {\n\t\t\t\tif (input == '') input = null;\n\t\t\t\tdoEmph({doit: input ? {code: input, context: text} : null})\n\t\t\t}, emph.doit && emph.doit.code);\n\t\t})\n\t},\n\ttoggleFont: function(from, to) {\n\t\tvar world = this.world(), text = this;\n\t\tthis.changeEmphasis(from, to, function(emph, doEmph) {\n\t\t\tvar fontChooser = lively.PartsBin.getPart('FontChooserDialog', 'PartsBin/NewWorld');\n\t\t\tfontChooser.listAvailableFonts();\n\t\t\tworld.addMorph(fontChooser);\n\t\t\tfontChooser.align(fontChooser.bounds().center(), world.firstHand().getPosition());\n\t\t\tconnect(fontChooser, 'selectedFont', {doEmph: doEmph}, 'doEmph', {\n\t\t\t\tconverter: function(font) { return {fontFamily: font} }\n\t\t\t})\n\t\t})\n\t},\n\n\n\n\n\ttoggleEmphasisForSelection: function(emphAttributeType) {\n\t\t// emphAttributeType can be Boldness, ...\n\t\ttry {\n\t\t\tvar selRange = this.getSelectionRange(),\n\t\t\t\temphRange = this.convertSelectionRangeForEmphasis(selRange);\n\t\t\tthis['toggle' + emphAttributeType](emphRange[0], emphRange[1]);\n\t\t\t// this.setSelectionRange(selRange[0], selRange[1]);\n\t\t} catch(e) {\n\t\t\talert('Error when doing toggle' + emphAttributeType + ': ' + e);\n\t\t\tdebugger;\n\t\t}\t\t\n\t},\n\temphasizeSelection: function(emphSpec) {\n\t\t// emphAttributeType can be Boldness, ...\n\t\ttry {\n\t\t\tvar selRange = this.getSelectionRange(),\n\t\t\t\temphRange = this.convertSelectionRangeForEmphasis(selRange);\n\t\t\tthis.emphasize(emphSpec, emphRange[0], emphRange[1]);\n\t\t\tthis.setSelectionRange(selRange[0], selRange[1]);\n\t\t} catch(e) {\n\t\t\talert('Error when doing emphasizing' + JSON.stringify(emphSpec) + ': ' + e);\n\t\t\tdebugger;\n\t\t}\t\t\n\t},\n\n\n\tconvertSelectionRangeForEmphasis: function(selRange) {\n\t\tvar from = selRange[0], to = selRange[1];\n\t\treturn from > to ? [to, from] : [from, to];\n\t},\n\tincreaseFontSizeOfSelection: function() {\n\t\tthis.setFontSizeOfSelectionDo(function(oldSize) { return oldSize + 1});\n\t},\n\tdecreaseFontSizeOfSelection: function() {\n\t\tthis.setFontSizeOfSelectionDo(function(oldSize) { return oldSize - 1});\n\t},\n\n\tsetFontSizeOfSelectionDo: function(callback) {\n\t\tvar range = this.getSelectionRange(),\n\t\t\tfrom = range[0], to = range[1],\n\t\t\tfontSize = this.getFontSize();\n\t\tthis.changeEmphasis(from, to, function(emph, doEmph) {\n\t\t\tdoEmph({fontSize: callback((emph.getFontSize() || fontSize))})\n\t\t})\n\t},\n\n\n\tgetEmphasisAt: function(idx) {\n\t\tvar chunkAndIdx = this.getChunkAndLocalIndex(idx, true);\n\t\treturn chunkAndIdx && chunkAndIdx[0].style;\n\t},\n\n},\n'status messages', {\n\tsetStatusMessage: function(msg, color, delay) {\n\t\tconsole.log(\"status: \" + msg)\n\t\tif (!this._statusMorph) {\n\t\t\tthis._statusMorph = new lively.morphic.Text(pt(300,30).extentAsRectangle());\n\t\t\tthis._statusMorph.applyStyle({borderWidth: 0, strokeOpacity: 0, fill: Color.gray, fontSize: 16, fillOpacity: 1})\n\t\t\tthis._statusMorph.isEpiMorph = true;\n\t\t}\n\t\tvar statusMorph = this._statusMorph;\n\t\tstatusMorph.textString = msg;\n\t\tthis.world().addMorph(statusMorph);\n\t\tstatusMorph.setTextColor(color || Color.black);\n\t\tstatusMorph.ignoreEvents();\n\t\t// FIXME getSelectionBounds does not work yet when there is a null selection\n\t\tif (false && this.isFocused()) {\n\t\t\tvar bounds = this.getSelectionBounds(),\n\t\t\t\tpos = bounds ? bounds.bottomLeft() : pt(0, 20);\n\t\t\tstatusMorph.setPosition(this.worldPoint(pos));\n\t\t} else {\n\t\t\tstatusMorph.centerAt(this.worldPoint(this.innerBounds().center()));\n\t\t};\n\t\t(function() { statusMorph.remove() }).delay(delay || 4);\n\t},\n});\nObject.extend(lively.morphic.Text, {\n\tactiveInstance: function() {\n\t\t// returns the text that currently has a focus\n\t\t// set in onFocus and onBlur\n\t\treturn this.prototype.activeInstance;\n\t},\n});\nObject.subclass('lively.morphic.Text.ProtocolLister',\n'initializing', {\n\tinitialize: function(textMorph) {\n\t\tthis.textMorph = textMorph;\n\t},\n},\n'interface', {\n\tevalSelectionAndOpenListForProtocol: function() {\n\t\tvar obj = this.evalCurrentSelection(this.textMorph);\n\t\tif (!obj) return;\n\n\t\tvar items = this.getListForProtocolOf(obj);\n\t\tlively.morphic.Menu.openAtHand(String(obj), items);\n\t},\n\n},\n'accessing', {\n\n\tgetPrototypeChainOf: function(obj) {\n\t\tvar result = [obj], proto = Class.getPrototype(obj);\n\t\twhile(proto) { result.push(proto); proto = Class.getSuperPrototype(proto) }\n\t\treturn result;\n\t},\n\n\tfuncSignaturesOf: function(obj) {\n\t\tvar funcs = obj && obj.nodeType ? Functions.all(obj) : Functions.own(obj)\n\t\tfuncs = funcs.select(function(name) { return !Class.isClass(obj[name]) });\n\t\treturn funcs.collect(function(name) {\n\t\t\tvar source = obj[name].toString(),\n\t\t\t\tmatch = source.match(/function\\s*[a-zA-Z0-9_$]*\\s*\\(([^\\)]*)\\)/),\n\t\t\t\tparams = (match && match[1]) || '';\n\t\t\treturn name + '(' + params + ')';\n\t\t}).sort()\n\t},\n\n\tgetListForProtocolOf: function(obj) {\n\t\tvar items = this.getPrototypeChainOf(obj).collect(function(proto) {\n\t\t\treturn this.menuItemForProto(obj, proto);\n\t\t}, this).select(function(ea) { return ea != undefined });\n\t\treturn items;\n\t},\n\n\tmenuItemForProto: function(originalObject, proto) {\n\t\tvar subItems = this.funcSignaturesOf(proto).collect(function(signa) {\n\t\t\treturn this.createSubMenuItemFromSignature(signa);\n\t\t}, this);\n\t\tif (subItems.length == 0) return null;\n\t\tvar name = (originalObject === proto) ? originalObject.toString().truncate(60) :\n\t\t\tproto.constructor.type || proto.constructor.name || '';\n\t\treturn [name, subItems];\n\t},\n\tcreateSubMenuItemFromSignature: function(signature) {\n\t\tvar textMorph = this.textMorph,\n\t\t\trange = textMorph && textMorph.getSelectionRange();\n\t\treturn [signature, function() {\n\t\t\t// FIXME not sure if this has to be delayed\n\t\t\t(function() {\n\t\t\t\ttextMorph.focus();\n\t\t\t\trange && textMorph.setSelectionRange(range[0], range[1]);\n\t\t\t\ttextMorph.insertAtCursor(signature, true)\n\t\t\t}).delay(0)\n\t\t}]\n\t},\n\n\n\tevalCurrentSelection: function(textMorph) {\n\t\tvar selection = Strings.removeSurroundingWhitespaces(textMorph.getSelectionOrLineString());\n\t\tif (selection.endsWith('.'))\n\t\t\tselection = selection.slice(0, selection.length-1);\n\t\treturn textMorph.tryBoundEval(selection);\n\t},\n\n});\n\nObject.subclass('lively.morphic.TextChunk',\n'settings', {\n\tdoNotSerialize: ['chunkNode'],\n},\n'initializing', {\n\tinitialize: function(str, style) {\n\t\tif (str) this.textString = str;\n\t\tthis.style = style || new lively.morphic.TextEmphasis();\n\t},\n},\n'accessing', {\n\tget textString() {\n\t\treturn this.getChunkNode().textContent;\n\t},\n\tset textString(string) {\n\t\treturn this.getChunkNode().textContent = string;\n\t},\n\tgetChunkNode: function() {\n\t\tif (!this.chunkNode)\n\t\t\tthis.chunkNode = XHTMLNS.create('span');\n\t\treturn this.chunkNode;\n\t},\n\tnext: function() {\n\t\tvar chunks = this.morph.getTextChunks(), chunkIdx = chunks.indexOf(this);\n\t\treturn chunks[chunkIdx+1];\n\t},\n\tprev: function() {\n\t\tvar chunks = this.morph.getTextChunks(), chunkIdx = chunks.indexOf(this);\n\t\treturn chunks[chunkIdx-1];\n\t},\n},\n'adding', {\n\taddTo: function(textMorph, optChunkAfter) {\n\t\tthis.morph = textMorph;\n\t\tvar textNode = textMorph.renderContext().textNode,\n\t\t\tchunkNode = this.getChunkNode();\n\t\t\totherChunkNode = optChunkAfter && optChunkAfter.getChunkNode();\n\t\tif (!textNode) {\n\t\t\t// alert('Cannot add text chunk ' + this + ' to ' + textMorph + ' because no textNode is present');\n\t\t\treturn;\n\t\t}\n\t\tif (chunkNode.parentNode) this.remove();\n\t\tif (otherChunkNode && otherChunkNode.parentNode === textNode)\n\t\t\ttextNode.insertBefore(chunkNode, otherChunkNode);\n\t\telse textNode.appendChild(chunkNode);\n\t\tthis.styleText();\n\t},\n\n},\n'removing', {\n\tremove: function() {\n\t\tvar n = this.getChunkNode();\n\t\tn.parentNode && n.parentNode.removeChild(n);\n\t},\n},\n'splitting', {\n\tsplitAfter: function(localIdx) { return this.split(localIdx, true) },\n\tsplitBefore: function(localIdx) { return this.split(localIdx, false) },\n\tsplit: function(localIdx, returnRight) {\n\t\t// remove text from localIdx to textString.length\n\t\t// let morph add new chunk\n\t\t// if returnRight == true return the chunk after localIdx, otherwise before\n\t\tvar str = this.textString,\n\t\t\tmyString = str.substring(0, localIdx),\n\t\t\tnewString = str.substring(localIdx);\n\n\t\t// corner cases: if we are already at the end of the chunk and want to have\n\t\t// the right of the split then return the next chunk if it exists\n\t\t// otherwise split the existing into an empty chunk\n\t\t// When returning left localIdx chunk do the same\n\t\tif (returnRight && newString.length === 0) {\n\t\t\tvar next = this.next();\n\t\t\tif (next) return next;\n\t\t}\n\t\tif (!returnRight && myString.length === 0) {\n\t\t\tvar prev = this.prev();\n\t\t\tif (prev) return prev;\n\t\t};\n\n\t\t// We dont care we want to have the right so use this as right and dont split\n\t\tif (returnRight && myString.length === 0)\n\t\t\treturn this;\n\t\t// same thing\n\t\tif (!returnRight && newString.length === 0)\n\t\t\treturn this;\n\n\t\tthis.textString = myString;\n\t\tvar newChunk = this.createForSplit(newString),\n\t\t\tchunks = this.morph.getTextChunks(),\n\t\t\tchunkIdx = chunks.indexOf(this),\n\t\t\tnext = chunks[chunkIdx+1];\n\n\t\t// add new chunk in chunk collection of morph\n\t\tchunks.pushAt(newChunk, chunkIdx+1);\n\t\tnewChunk.addTo(this.morph, next);\n\n\t\treturn returnRight ? newChunk : this;\n\t},\n\tcreateForSplit: function(str) { return new this.constructor(str, this.style.clone()) },\n\n},\n'joining', {\n\tjoinWithNext: function() {\n\t\tvar chunks = this.morph.getTextChunks();\n\t\tvar chunkIdx = chunks.indexOf(this);\n\t\tvar next = chunks[chunkIdx+1];\n\t\tif (!next) return false;\n\t\tnext.remove();\n\t\tchunks.removeAt(chunkIdx+1);\n\t\tthis.textString += next.textString;\n\t\treturn true;\n\t},\n\tjoinWithNextIfEqualStyle: function() {\n\t\tvar next = this.next();\n\t\tif (next && this.style.equals(next.style))\n\t\t\treturn this.joinWithNext();\n\t},\n\n},\n'styling', {\n\tstyleText: function(styleSpec) {\n\t\tthis.normalize();\n\t\tif (styleSpec) this.style.add(styleSpec);\n\t\tthis.style.applyToHTML(this.getChunkNode());\n\t},\n},\n'subnodes', {\n\tnormalize: function() {\n\t\tthis.getChunkNode().normalize();\n\t},\n\tingestAllFollowingElements: function(nextChunk) {\n\t\tvar ownChunkNode = this.getChunkNode(),\n\t\t\tnextChunkNode = nextChunk && nextChunk.getChunkNode(),\n\t\t\tcontent = '';\n\t\twhile (true) {\n\t\t\tvar nextNode = ownChunkNode.nextSibling;\n\t\t\tif (!nextNode || nextNode === nextChunkNode) break;\n\t\t\tcontent += nextNode.textContent;\n\t\t\tif (nextNode.parentNode) nextNode.parentNode.removeChild(nextNode);\n\t\t}\n\t\tif (content) this.textString += content;\n\t},\n\tingestAllPrecedingElements: function(prevChunk/*FIXME not used*/) {\n\t\tvar ownChunkNode = this.getChunkNode(),\n\t\t\tprevChunkNode = prevChunk && prevChunk.getChunkNode(),\n\t\t\tcontent = '';\n\n\t\twhile (true) {\n\t\t\tvar prevNode = ownChunkNode.previousSibling;\n\t\t\tif (!prevNode || prevNode === prevChunkNode) break;\n\t\t\tcontent = prevNode.textContent + content;\n\t\t\tif (prevNode.parentNode) prevNode.parentNode.removeChild(prevNode);\n\t\t}\n\t\tif (content) this.textString = content + this.textString;\n\t},\n\tensureEndsWithBr: function() {\n\t\tvar chunkNode = this.getChunkNode();\n\t\tvar lastBrFound = false;\n\t\tfor (var i = 0; i < chunkNode.childNodes.length; i++) {\n\t\t\tvar node = chunkNode.childNodes[i];\n\t\t\tif (node.tagName === 'br') { lastBrFound = true; continue };\n\t\t\tif (node.textContent.length > 0) lastBrFound = false;\n\t\t}\n\t\tif (lastBrFound) return;\n\t\tchunkNode.appendChild(XHTMLNS.create('br'));\n\t},\n\tremoveNonChunkNodes: function() {\n\t\tvar node = this.getChunkNode(),\n\t\t\tchildNode = node.firstChild;\n\t\twhile(childNode) {\n\t\t\tvar next = childNode.nextSibling\n\t\t\tif (!NodeFactory.isTextNode(childNode)) {\n\t\t\t\tnode.insertBefore(NodeFactory.createText(childNode.textContent), next);\n\t\t\t\tnode.removeChild(childNode);\n\t\t\t}\n\t\t\tchildNode = next;\n\t\t}\n\t},\n\n},\n'debugging', {\n\ttoString: function() { return 'TextChunk(' + this.textString.truncate(10) + ',' + this.style + ')' },\n});\n\nObject.subclass('lively.morphic.TextEmphasis',\n'initializing', {\n\tinitialize: function(spec) {\n\t\tspec && this.add(spec);\n\t},\n},\n'accessing', {\n\tgetFontWeight: function() {\n\t\treturn (this.fontWeight && this.fontWeight !== '') ? this.fontWeight : 'normal';\n\t},\n\tsetFontWeight: function(fontWeight) { this.fontWeight = fontWeight },\n\tgetItalics: function() { return (this.italics && this.italics !== '') ? this.italics : 'normal' },\n\tsetItalics: function(italics) { this.italics = italics },\n\tgetURI: function() { return this.uri },\n\tsetURI: function(link) { return this.uri = uri },\n\tgetDoit: function() { return this.doit },\n\tsetDoit: function(doit) { return this.doit = doit },\n\tgetFontFamily: function() { return this.fontFamily },\n\tsetFontFamily: function(fontFamily) { return this.fontFamily = fontFamily },\n\tgetColor: function() { return this.color },\n\tsetColor: function(color) { return this.color = color },\n\tgetTextDecoration: function() { return this.textDecoration },\n\tsetTextDecoration: function(textDecoration) { return this.textDecoration = textDecoration },\n\tgetTextAlignment: function() { return this.textAlign },\n\tsetTextAlignment: function(textAlign) { return this.textAlign = textAlign },\n\tgetFontSize: function() { return this.fontSize },\n\tsetFontSize: function(fontSize) { return this.fontSize = fontSize },\n},\n'cloning', {\n\tclone: function() { return new this.constructor(this) },\n},\n'changing', {\n\tadd: function(spec) {\n\t\tfor (var name in spec) {\n\t\t\tif (!spec.hasOwnProperty(name)) return;\n\t\t\tthis[name] = spec[name];\n\t\t}\n\t},\n},\n'testing', {\n\tequals: function(other) {\n\t\tif (this.getFontWeight() == other.getFontWeight() &&\n\t\t\tthis.getItalics() == other.getItalics() &&\n\t\t\tthis.getURI() == other.getURI() &&\n\t\t\tthis.getFontFamily() == other.getFontFamily() &&\n\t\t\tthis.getColor() == other.getColor() &&\n\t\t\tthis.getTextDecoration() == other.getTextDecoration() &&\n\t\t\tthis.getTextAlignment() == other.getTextAlignment() &&\n\t\t\tthis.getFontSize() == other.getFontSize() &&\n\t\t\t!this.getDoit() && !other.getDoit()) return true;\n\n\t\tif (this.getDoit() && other.getDoit() &&\n\t\t\tthis.getDoit().code == other.getDoit().code) return true\n\n\t\treturn false;\n\t},\n},\n'rendering', {\n\tapplyToHTML: function(node) {\n\t\tvar clickCallbacks = [], cursor, textDecoration, color;\n\n\t\tif (this.doit) {\n\t\t\tvar doit = this.doit;\n\t\t\tclickCallbacks.push(function(evt) {\n\t\t\t\tvar src = '(function() {\\n' + doit.code + '\\n})';\n\t\t\t\ttry {\n\t\t\t\t\tvar func = eval(src);\n\t\t\t\t\tfunc.call(doit.context);\n\t\t\t\t} catch(e) {\n\t\t\t\t\talert('Error in text doit\\n' + e.stack);\n\t\t\t\t}\n\t\t\t\treturn true\n\t\t\t});\n\t\t\tcursor = 'pointer';\n\t\t\ttextDecoration = 'underline';\n\t\t\tcolor = 'darkgreen';\n\t\t}\t\n\n\t\tif (this.uri) {\n\t\t\tvar uri = this.uri;\n\t\t\tclickCallbacks.push(function(evt) {debugger; window.open(uri) });\n\t\t\tcursor = 'pointer';\n\t\t\ttextDecoration = 'underline';\n\t\t\tcolor = 'blue';\n\t\t}\n\n\t\tif (clickCallbacks.length > 0) {\n\t\t\tnode.onclick = function(evt) {\n\t\t\t\tfor (var i = 0; i < clickCallbacks.length; i++)\n\t\t\t\t\tclickCallbacks[i].call(this, evt);\n\t\t\t\tevt.stop();\n\t\t\t\treturn true;\n\t\t\t}\n\t\t} else {\n\t\t\tdelete node.onmouseup;\n\t\t}\n\n\t\tnode.style.color = color || '';\n\t\tnode.style.textDecoration = textDecoration || 'none';\n\t\tnode.style.cursor = cursor || 'auto';\n\n\n\t\tfor (var name in this) {\n\t\t\tif (!this.hasOwnProperty(name)) continue;\n\t\t\t// ignore none style properties\n\t\t\tif (name == 'uri') continue;\n\t\t\tif (name == 'doit') continue;\n\t\t\tvar styleName = name;\n\t\t\tif (name === 'italics') styleName = 'fontStyle';\n\t\t\tif (name === 'fontSize') { node.style[styleName] = this[name] + 'pt'; continue }\n\t\t\tnode.style[styleName] = this[name];\n\t\t}\n\t},\n},\n'debugging', {\n\ttoString: function() {\n\t\tvar propStrings = [];\n\t\tProperties.forEachOwn(this, function(key, value) {\n\t\t\tpropStrings.push(key + ':' + value)\n\t\t})\n\t\treturn 'TextEmphasis(' + propStrings.join(',') + ')'\n\t},\n});\n\n\ncop.create('TextDevLayer')\n.refineClass(lively.morphic.TextChunk, {\n// this is for development and trying out new features without affecting the whole system\n\tingestAllPrecedingElements: function(prevChunk/*FIXME not used*/) {\n\t\tvar ownChunkNode = this.getChunkNode(),\n\t\t\ttextNode = ownChunkNode.parentNode,\n\t\t\tcontent = '';\n\n\t\tif (!textNode) return; // we are probably in deserialization\n\n\t\tvar before = textNode.childNodes[0], content = '';\n\t\twhile (before && before !== ownChunkNode) {\n\t\t\tcontent += before.textContent;\n\t\t\tbefore.parentNode && before.parentNode.removeChild(before);\n\t\t\tbefore = before.nextSibling;\n\t\t}\n\t\tif (content != '')\n\t\t\tthis.textString = content + this.textString;\n\t},\n});\n\n}) // end of module","doNotSerialize":["$$targetURL"],"doNotCopyProperties":["$$targetURL"],"targetURL":{"__isSmartRef__":true,"id":1546},"_rootNode":{"__isSmartRef__":true,"id":636},"Pane1Selection":{"__isSmartRef__":true,"id":1221},"pane1Selection":{"__isSmartRef__":true,"id":1221},"Pane2Selection":null,"pane2Selection":null,"Pane3Selection":null,"pane3Selection":null,"Pane4Selection":null,"pane4Selection":null,"Pane4Content":["-----"],"Pane3Content":["-----"],"Pane2Content":[{"__isSmartRef__":true,"id":1498},{"__isSmartRef__":true,"id":1500},{"__isSmartRef__":true,"id":1502},{"__isSmartRef__":true,"id":1504},{"__isSmartRef__":true,"id":1506},{"__isSmartRef__":true,"id":1508}],"Pane1Content":[{"__isSmartRef__":true,"id":633},{"__isSmartRef__":true,"id":1461},{"__isSmartRef__":true,"id":1462},{"__isSmartRef__":true,"id":1463},{"__isSmartRef__":true,"id":1464},{"__isSmartRef__":true,"id":1465},{"__isSmartRef__":true,"id":1466},{"__isSmartRef__":true,"id":1467},{"__isSmartRef__":true,"id":1468},{"__isSmartRef__":true,"id":1469},{"__isSmartRef__":true,"id":1470},{"__isSmartRef__":true,"id":1471},{"__isSmartRef__":true,"id":1472},{"__isSmartRef__":true,"id":1473},{"__isSmartRef__":true,"id":1474},{"__isSmartRef__":true,"id":1475},{"__isSmartRef__":true,"id":1476},{"__isSmartRef__":true,"id":1477},{"__isSmartRef__":true,"id":1478},{"__isSmartRef__":true,"id":1479},{"__isSmartRef__":true,"id":1480},{"__isSmartRef__":true,"id":1481},{"__isSmartRef__":true,"id":1482},{"__isSmartRef__":true,"id":1483},{"__isSmartRef__":true,"id":1484},{"__isSmartRef__":true,"id":1485},{"__isSmartRef__":true,"id":1486},{"__isSmartRef__":true,"id":1487}],"view":{"__isSmartRef__":true,"id":426},"Pane1Menu":[["Add to world requirements"],["check for redundant klass definitions"],["remove"],["show all"],["reparse"],["open ChangeList viewer"],["show versions"],["load"],["-------"],["open in text editor"],["diff versions"]],"Pane2Menu":[["-------"],["add class"],["add object extension"],["add layer"],["open in text editor"],["diff versions"]],"Pane3Menu":[["-------"],["open in text editor"],["diff versions"]],"currentModuleName":"lively.morphic.TextCore","__LivelyClassName__":"lively.ide.SystemBrowser","__SourceModuleName__":"Global.lively.ide.SystemCodeBrowser"},"440":{"browser":{"__isSmartRef__":true,"id":439},"button":{"__isSmartRef__":true,"id":441},"__LivelyClassName__":"lively.ide.AddNewFileCommand","__SourceModuleName__":"Global.lively.ide.BrowserCommands"},"441":{"submorphs":[{"__isSmartRef__":true,"id":442}],"scripts":[],"id":625,"shape":{"__isSmartRef__":true,"id":450},"grabbingEnabled":false,"droppingEnabled":false,"halosEnabled":true,"_Position":{"__isSmartRef__":true,"id":464},"value":false,"toggle":false,"isActive":true,"normalFill":{"__isSmartRef__":true,"id":454},"lighterFill":{"__isSmartRef__":true,"id":465},"label":{"__isSmartRef__":true,"id":442},"command":{"__isSmartRef__":true,"id":440},"attributeConnections":[{"__isSmartRef__":true,"id":474},{"__isSmartRef__":true,"id":475}],"doNotSerialize":["$$fire"],"doNotCopyProperties":["$$fire"],"owner":{"__isSmartRef__":true,"id":427},"__LivelyClassName__":"lively.morphic.Button","__SourceModuleName__":"Global.lively.morphic.Widgets"},"442":{"submorphs":[],"scripts":[],"id":626,"shape":{"__isSmartRef__":true,"id":443},"grabbingEnabled":false,"droppingEnabled":false,"halosEnabled":true,"_Padding":{"__isSmartRef__":true,"id":446},"_ClipMode":"hidden","fixedWidth":false,"_WhiteSpaceHandling":"pre","fixedHeight":true,"allowInput":false,"_FontFamily":"Helvetica","_Position":{"__isSmartRef__":true,"id":447},"_MaxTextWidth":null,"_MaxTextHeight":22,"textChunks":[{"__isSmartRef__":true,"id":448}],"owner":{"__isSmartRef__":true,"id":441},"isLabel":true,"eventsAreIgnored":true,"__LivelyClassName__":"lively.morphic.Text","__SourceModuleName__":"Global.lively.morphic.TextCore"},"443":{"_Position":{"__isSmartRef__":true,"id":444},"_Extent":{"__isSmartRef__":true,"id":445},"_BorderWidth":0,"_BorderColor":{"__isSmartRef__":true,"id":432},"_Fill":null,"__LivelyClassName__":"lively.morphic.Shapes.Rectangle","__SourceModuleName__":"Global.lively.morphic.Shapes"},"444":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"445":{"x":117.14285714285714,"y":22,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"446":{"x":4,"y":2,"width":0,"height":0,"__LivelyClassName__":"Rectangle","__SourceModuleName__":"Global"},"447":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"448":{"style":{"__isSmartRef__":true,"id":449},"morph":{"__isSmartRef__":true,"id":442},"storedString":"Add module","__LivelyClassName__":"lively.morphic.TextChunk","__SourceModuleName__":"Global.lively.morphic.TextCore"},"449":{"__LivelyClassName__":"lively.morphic.TextEmphasis","__SourceModuleName__":"Global.lively.morphic.TextCore"},"450":{"_Position":{"__isSmartRef__":true,"id":451},"_Extent":{"__isSmartRef__":true,"id":452},"_BorderWidth":1,"_BorderColor":{"__isSmartRef__":true,"id":453},"_Fill":{"__isSmartRef__":true,"id":454},"_BorderRadius":5,"__LivelyClassName__":"lively.morphic.Shapes.Rectangle","__SourceModuleName__":"Global.lively.morphic.Shapes"},"451":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"452":{"x":117.14285714285714,"y":22,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"453":{"r":0.8392156862745098,"g":0.8392156862745098,"b":0.8392156862745098,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global"},"454":{"stops":[{"__isSmartRef__":true,"id":455},{"__isSmartRef__":true,"id":457},{"__isSmartRef__":true,"id":459},{"__isSmartRef__":true,"id":461}],"vector":{"__isSmartRef__":true,"id":463},"__LivelyClassName__":"lively.morphic.LinearGradient","__SourceModuleName__":"Global.lively.morphic.Shapes"},"455":{"offset":0,"color":{"__isSmartRef__":true,"id":456}},"456":{"r":0.9600000000000001,"g":0.9600000000000001,"b":0.9600000000000001,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global"},"457":{"offset":0.4,"color":{"__isSmartRef__":true,"id":458}},"458":{"r":0.8200000000000001,"g":0.8200000000000001,"b":0.8200000000000001,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global"},"459":{"offset":0.6,"color":{"__isSmartRef__":true,"id":460}},"460":{"r":0.8200000000000001,"g":0.8200000000000001,"b":0.8200000000000001,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global"},"461":{"offset":1,"color":{"__isSmartRef__":true,"id":462}},"462":{"r":0.94,"g":0.94,"b":0.94,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global"},"463":{"x":0,"y":0,"width":0,"height":1,"__LivelyClassName__":"Rectangle","__SourceModuleName__":"Global"},"464":{"x":0,"y":220,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"465":{"stops":[{"__isSmartRef__":true,"id":466},{"__isSmartRef__":true,"id":468},{"__isSmartRef__":true,"id":470},{"__isSmartRef__":true,"id":472}],"vector":{"__isSmartRef__":true,"id":463},"__LivelyClassName__":"lively.morphic.LinearGradient","__SourceModuleName__":"Global.lively.morphic.Shapes"},"466":{"offset":0,"color":{"__isSmartRef__":true,"id":467}},"467":{"r":0.98,"g":0.98,"b":0.98,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global"},"468":{"offset":0.4,"color":{"__isSmartRef__":true,"id":469}},"469":{"r":0.91,"g":0.91,"b":0.91,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global"},"470":{"offset":0.6,"color":{"__isSmartRef__":true,"id":471}},"471":{"r":0.91,"g":0.91,"b":0.91,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global"},"472":{"offset":1,"color":{"__isSmartRef__":true,"id":473}},"473":{"r":0.97,"g":0.97,"b":0.97,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global"},"474":{"sourceObj":{"__isSmartRef__":true,"id":441},"sourceAttrName":"fire","targetObj":{"__isSmartRef__":true,"id":440},"targetMethodName":"trigger","__LivelyClassName__":"AttributeConnection","__SourceModuleName__":"Global.lively.bindings"},"475":{"sourceObj":{"__isSmartRef__":true,"id":441},"sourceAttrName":"fire","targetObj":{"__isSmartRef__":true,"id":441},"targetMethodName":"setLabel","converter":null,"converterString":"function () { return this.getSourceObj().command.asString() }","updater":null,"updaterString":null,"__LivelyClassName__":"AttributeConnection","__SourceModuleName__":"Global.lively.bindings"},"476":{"browser":{"__isSmartRef__":true,"id":439},"button":{"__isSmartRef__":true,"id":477},"__LivelyClassName__":"lively.ide.AllModulesLoadCommand","__SourceModuleName__":"Global.lively.ide.BrowserCommands"},"477":{"submorphs":[{"__isSmartRef__":true,"id":478}],"scripts":[],"id":627,"shape":{"__isSmartRef__":true,"id":485},"grabbingEnabled":false,"droppingEnabled":false,"halosEnabled":true,"_Position":{"__isSmartRef__":true,"id":488},"value":false,"toggle":false,"isActive":true,"normalFill":{"__isSmartRef__":true,"id":454},"lighterFill":{"__isSmartRef__":true,"id":489},"label":{"__isSmartRef__":true,"id":478},"command":{"__isSmartRef__":true,"id":476},"attributeConnections":[{"__isSmartRef__":true,"id":498},{"__isSmartRef__":true,"id":499}],"doNotSerialize":["$$fire"],"doNotCopyProperties":["$$fire"],"owner":{"__isSmartRef__":true,"id":427},"__LivelyClassName__":"lively.morphic.Button","__SourceModuleName__":"Global.lively.morphic.Widgets"},"478":{"submorphs":[],"scripts":[],"id":628,"shape":{"__isSmartRef__":true,"id":479},"grabbingEnabled":false,"droppingEnabled":false,"halosEnabled":true,"_Padding":{"__isSmartRef__":true,"id":446},"_ClipMode":"hidden","fixedWidth":false,"_WhiteSpaceHandling":"pre","fixedHeight":true,"allowInput":false,"_FontFamily":"Helvetica","_Position":{"__isSmartRef__":true,"id":482},"_MaxTextWidth":null,"_MaxTextHeight":22,"textChunks":[{"__isSmartRef__":true,"id":483}],"owner":{"__isSmartRef__":true,"id":477},"isLabel":true,"eventsAreIgnored":true,"__LivelyClassName__":"lively.morphic.Text","__SourceModuleName__":"Global.lively.morphic.TextCore"},"479":{"_Position":{"__isSmartRef__":true,"id":480},"_Extent":{"__isSmartRef__":true,"id":481},"_BorderWidth":0,"_BorderColor":{"__isSmartRef__":true,"id":432},"_Fill":null,"__LivelyClassName__":"lively.morphic.Shapes.Rectangle","__SourceModuleName__":"Global.lively.morphic.Shapes"},"480":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"481":{"x":117.14285714285714,"y":22,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"482":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"483":{"style":{"__isSmartRef__":true,"id":484},"morph":{"__isSmartRef__":true,"id":478},"storedString":"Load all","__LivelyClassName__":"lively.morphic.TextChunk","__SourceModuleName__":"Global.lively.morphic.TextCore"},"484":{"__LivelyClassName__":"lively.morphic.TextEmphasis","__SourceModuleName__":"Global.lively.morphic.TextCore"},"485":{"_Position":{"__isSmartRef__":true,"id":486},"_Extent":{"__isSmartRef__":true,"id":487},"_BorderWidth":1,"_BorderColor":{"__isSmartRef__":true,"id":453},"_Fill":{"__isSmartRef__":true,"id":454},"_BorderRadius":5,"__LivelyClassName__":"lively.morphic.Shapes.Rectangle","__SourceModuleName__":"Global.lively.morphic.Shapes"},"486":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"487":{"x":117.14285714285714,"y":22,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"488":{"x":117.14285714285714,"y":220,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"489":{"stops":[{"__isSmartRef__":true,"id":490},{"__isSmartRef__":true,"id":492},{"__isSmartRef__":true,"id":494},{"__isSmartRef__":true,"id":496}],"vector":{"__isSmartRef__":true,"id":463},"__LivelyClassName__":"lively.morphic.LinearGradient","__SourceModuleName__":"Global.lively.morphic.Shapes"},"490":{"offset":0,"color":{"__isSmartRef__":true,"id":491}},"491":{"r":0.98,"g":0.98,"b":0.98,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global"},"492":{"offset":0.4,"color":{"__isSmartRef__":true,"id":493}},"493":{"r":0.91,"g":0.91,"b":0.91,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global"},"494":{"offset":0.6,"color":{"__isSmartRef__":true,"id":495}},"495":{"r":0.91,"g":0.91,"b":0.91,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global"},"496":{"offset":1,"color":{"__isSmartRef__":true,"id":497}},"497":{"r":0.97,"g":0.97,"b":0.97,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global"},"498":{"sourceObj":{"__isSmartRef__":true,"id":477},"sourceAttrName":"fire","targetObj":{"__isSmartRef__":true,"id":476},"targetMethodName":"trigger","__LivelyClassName__":"AttributeConnection","__SourceModuleName__":"Global.lively.bindings"},"499":{"sourceObj":{"__isSmartRef__":true,"id":477},"sourceAttrName":"fire","targetObj":{"__isSmartRef__":true,"id":477},"targetMethodName":"setLabel","converter":null,"converterString":"function () { return this.getSourceObj().command.asString() }","updater":null,"updaterString":null,"__LivelyClassName__":"AttributeConnection","__SourceModuleName__":"Global.lively.bindings"},"500":{"browser":{"__isSmartRef__":true,"id":439},"button":{"__isSmartRef__":true,"id":501},"__LivelyClassName__":"lively.ide.ShowLineNumbersCommand","__SourceModuleName__":"Global.lively.ide.BrowserCommands"},"501":{"submorphs":[{"__isSmartRef__":true,"id":502}],"scripts":[],"id":629,"shape":{"__isSmartRef__":true,"id":509},"grabbingEnabled":false,"droppingEnabled":false,"halosEnabled":true,"_Position":{"__isSmartRef__":true,"id":512},"value":false,"toggle":false,"isActive":true,"normalFill":{"__isSmartRef__":true,"id":454},"lighterFill":{"__isSmartRef__":true,"id":513},"label":{"__isSmartRef__":true,"id":502},"command":{"__isSmartRef__":true,"id":500},"attributeConnections":[{"__isSmartRef__":true,"id":522},{"__isSmartRef__":true,"id":523}],"doNotSerialize":["$$fire"],"doNotCopyProperties":["$$fire"],"owner":{"__isSmartRef__":true,"id":427},"__LivelyClassName__":"lively.morphic.Button","__SourceModuleName__":"Global.lively.morphic.Widgets"},"502":{"submorphs":[],"scripts":[],"id":630,"shape":{"__isSmartRef__":true,"id":503},"grabbingEnabled":false,"droppingEnabled":false,"halosEnabled":true,"_Padding":{"__isSmartRef__":true,"id":446},"_ClipMode":"hidden","fixedWidth":false,"_WhiteSpaceHandling":"pre","fixedHeight":true,"allowInput":false,"_FontFamily":"Helvetica","_Position":{"__isSmartRef__":true,"id":506},"_MaxTextWidth":null,"_MaxTextHeight":22,"textChunks":[{"__isSmartRef__":true,"id":507}],"owner":{"__isSmartRef__":true,"id":501},"isLabel":true,"eventsAreIgnored":true,"__LivelyClassName__":"lively.morphic.Text","__SourceModuleName__":"Global.lively.morphic.TextCore"},"503":{"_Position":{"__isSmartRef__":true,"id":504},"_Extent":{"__isSmartRef__":true,"id":505},"_BorderWidth":0,"_BorderColor":{"__isSmartRef__":true,"id":432},"_Fill":null,"__LivelyClassName__":"lively.morphic.Shapes.Rectangle","__SourceModuleName__":"Global.lively.morphic.Shapes"},"504":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"505":{"x":117.14285714285714,"y":22,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"506":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"507":{"style":{"__isSmartRef__":true,"id":508},"morph":{"__isSmartRef__":true,"id":502},"storedString":"LineNo","__LivelyClassName__":"lively.morphic.TextChunk","__SourceModuleName__":"Global.lively.morphic.TextCore"},"508":{"__LivelyClassName__":"lively.morphic.TextEmphasis","__SourceModuleName__":"Global.lively.morphic.TextCore"},"509":{"_Position":{"__isSmartRef__":true,"id":510},"_Extent":{"__isSmartRef__":true,"id":511},"_BorderWidth":1,"_BorderColor":{"__isSmartRef__":true,"id":453},"_Fill":{"__isSmartRef__":true,"id":454},"_BorderRadius":5,"__LivelyClassName__":"lively.morphic.Shapes.Rectangle","__SourceModuleName__":"Global.lively.morphic.Shapes"},"510":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"511":{"x":117.14285714285714,"y":22,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"512":{"x":234.28571428571428,"y":220,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"513":{"stops":[{"__isSmartRef__":true,"id":514},{"__isSmartRef__":true,"id":516},{"__isSmartRef__":true,"id":518},{"__isSmartRef__":true,"id":520}],"vector":{"__isSmartRef__":true,"id":463},"__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"},"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"},"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"},"520":{"offset":1,"color":{"__isSmartRef__":true,"id":521}},"521":{"r":0.97,"g":0.97,"b":0.97,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global"},"522":{"sourceObj":{"__isSmartRef__":true,"id":501},"sourceAttrName":"fire","targetObj":{"__isSmartRef__":true,"id":500},"targetMethodName":"trigger","__LivelyClassName__":"AttributeConnection","__SourceModuleName__":"Global.lively.bindings"},"523":{"sourceObj":{"__isSmartRef__":true,"id":501},"sourceAttrName":"fire","targetObj":{"__isSmartRef__":true,"id":501},"targetMethodName":"setLabel","converter":null,"converterString":"function () { return this.getSourceObj().command.asString() }","updater":null,"updaterString":null,"__LivelyClassName__":"AttributeConnection","__SourceModuleName__":"Global.lively.bindings"},"524":{"browser":{"__isSmartRef__":true,"id":439},"button":{"__isSmartRef__":true,"id":525},"__LivelyClassName__":"lively.ide.ParserDebugCommand","__SourceModuleName__":"Global.lively.ide.BrowserCommands"},"525":{"submorphs":[{"__isSmartRef__":true,"id":526}],"scripts":[],"id":631,"shape":{"__isSmartRef__":true,"id":533},"grabbingEnabled":false,"droppingEnabled":false,"halosEnabled":true,"_Position":{"__isSmartRef__":true,"id":536},"value":false,"toggle":false,"isActive":true,"normalFill":{"__isSmartRef__":true,"id":454},"lighterFill":{"__isSmartRef__":true,"id":537},"label":{"__isSmartRef__":true,"id":526},"command":{"__isSmartRef__":true,"id":524},"attributeConnections":[{"__isSmartRef__":true,"id":546},{"__isSmartRef__":true,"id":547}],"doNotSerialize":["$$fire"],"doNotCopyProperties":["$$fire"],"owner":{"__isSmartRef__":true,"id":427},"__LivelyClassName__":"lively.morphic.Button","__SourceModuleName__":"Global.lively.morphic.Widgets"},"526":{"submorphs":[],"scripts":[],"id":632,"shape":{"__isSmartRef__":true,"id":527},"grabbingEnabled":false,"droppingEnabled":false,"halosEnabled":true,"_Padding":{"__isSmartRef__":true,"id":446},"_ClipMode":"hidden","fixedWidth":false,"_WhiteSpaceHandling":"pre","fixedHeight":true,"allowInput":false,"_FontFamily":"Helvetica","_Position":{"__isSmartRef__":true,"id":530},"_MaxTextWidth":null,"_MaxTextHeight":22,"textChunks":[{"__isSmartRef__":true,"id":531}],"owner":{"__isSmartRef__":true,"id":525},"isLabel":true,"eventsAreIgnored":true,"__LivelyClassName__":"lively.morphic.Text","__SourceModuleName__":"Global.lively.morphic.TextCore"},"527":{"_Position":{"__isSmartRef__":true,"id":528},"_Extent":{"__isSmartRef__":true,"id":529},"_BorderWidth":0,"_BorderColor":{"__isSmartRef__":true,"id":432},"_Fill":null,"__LivelyClassName__":"lively.morphic.Shapes.Rectangle","__SourceModuleName__":"Global.lively.morphic.Shapes"},"528":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"529":{"x":117.14285714285714,"y":22,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"530":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"531":{"style":{"__isSmartRef__":true,"id":532},"morph":{"__isSmartRef__":true,"id":526},"storedString":"Dbg errors is off","__LivelyClassName__":"lively.morphic.TextChunk","__SourceModuleName__":"Global.lively.morphic.TextCore"},"532":{"__LivelyClassName__":"lively.morphic.TextEmphasis","__SourceModuleName__":"Global.lively.morphic.TextCore"},"533":{"_Position":{"__isSmartRef__":true,"id":534},"_Extent":{"__isSmartRef__":true,"id":535},"_BorderWidth":1,"_BorderColor":{"__isSmartRef__":true,"id":453},"_Fill":{"__isSmartRef__":true,"id":454},"_BorderRadius":5,"__LivelyClassName__":"lively.morphic.Shapes.Rectangle","__SourceModuleName__":"Global.lively.morphic.Shapes"},"534":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"535":{"x":117.14285714285714,"y":22,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"536":{"x":351.42857142857144,"y":220,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"537":{"stops":[{"__isSmartRef__":true,"id":538},{"__isSmartRef__":true,"id":540},{"__isSmartRef__":true,"id":542},{"__isSmartRef__":true,"id":544}],"vector":{"__isSmartRef__":true,"id":463},"__LivelyClassName__":"lively.morphic.LinearGradient","__SourceModuleName__":"Global.lively.morphic.Shapes"},"538":{"offset":0,"color":{"__isSmartRef__":true,"id":539}},"539":{"r":0.98,"g":0.98,"b":0.98,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global"},"540":{"offset":0.4,"color":{"__isSmartRef__":true,"id":541}},"541":{"r":0.91,"g":0.91,"b":0.91,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global"},"542":{"offset":0.6,"color":{"__isSmartRef__":true,"id":543}},"543":{"r":0.91,"g":0.91,"b":0.91,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global"},"544":{"offset":1,"color":{"__isSmartRef__":true,"id":545}},"545":{"r":0.97,"g":0.97,"b":0.97,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global"},"546":{"sourceObj":{"__isSmartRef__":true,"id":525},"sourceAttrName":"fire","targetObj":{"__isSmartRef__":true,"id":524},"targetMethodName":"trigger","__LivelyClassName__":"AttributeConnection","__SourceModuleName__":"Global.lively.bindings"},"547":{"sourceObj":{"__isSmartRef__":true,"id":525},"sourceAttrName":"fire","targetObj":{"__isSmartRef__":true,"id":525},"targetMethodName":"setLabel","converter":null,"converterString":"function () { return this.getSourceObj().command.asString() }","updater":null,"updaterString":null,"__LivelyClassName__":"AttributeConnection","__SourceModuleName__":"Global.lively.bindings"},"548":{"browser":{"__isSmartRef__":true,"id":439},"button":{"__isSmartRef__":true,"id":549},"__LivelyClassName__":"lively.ide.EvaluateCommand","__SourceModuleName__":"Global.lively.ide.BrowserCommands"},"549":{"submorphs":[{"__isSmartRef__":true,"id":550}],"scripts":[],"id":633,"shape":{"__isSmartRef__":true,"id":557},"grabbingEnabled":false,"droppingEnabled":false,"halosEnabled":true,"_Position":{"__isSmartRef__":true,"id":560},"value":false,"toggle":false,"isActive":true,"normalFill":{"__isSmartRef__":true,"id":454},"lighterFill":{"__isSmartRef__":true,"id":561},"label":{"__isSmartRef__":true,"id":550},"command":{"__isSmartRef__":true,"id":548},"attributeConnections":[{"__isSmartRef__":true,"id":570},{"__isSmartRef__":true,"id":571}],"doNotSerialize":["$$fire"],"doNotCopyProperties":["$$fire"],"owner":{"__isSmartRef__":true,"id":427},"__LivelyClassName__":"lively.morphic.Button","__SourceModuleName__":"Global.lively.morphic.Widgets"},"550":{"submorphs":[],"scripts":[],"id":634,"shape":{"__isSmartRef__":true,"id":551},"grabbingEnabled":false,"droppingEnabled":false,"halosEnabled":true,"_Padding":{"__isSmartRef__":true,"id":446},"_ClipMode":"hidden","fixedWidth":false,"_WhiteSpaceHandling":"pre","fixedHeight":true,"allowInput":false,"_FontFamily":"Helvetica","_Position":{"__isSmartRef__":true,"id":554},"_MaxTextWidth":null,"_MaxTextHeight":22,"textChunks":[{"__isSmartRef__":true,"id":555}],"owner":{"__isSmartRef__":true,"id":549},"isLabel":true,"eventsAreIgnored":true,"__LivelyClassName__":"lively.morphic.Text","__SourceModuleName__":"Global.lively.morphic.TextCore"},"551":{"_Position":{"__isSmartRef__":true,"id":552},"_Extent":{"__isSmartRef__":true,"id":553},"_BorderWidth":0,"_BorderColor":{"__isSmartRef__":true,"id":432},"_Fill":null,"__LivelyClassName__":"lively.morphic.Shapes.Rectangle","__SourceModuleName__":"Global.lively.morphic.Shapes"},"552":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"553":{"x":117.14285714285714,"y":22,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"554":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"555":{"style":{"__isSmartRef__":true,"id":556},"morph":{"__isSmartRef__":true,"id":550},"storedString":"Eval on","__LivelyClassName__":"lively.morphic.TextChunk","__SourceModuleName__":"Global.lively.morphic.TextCore"},"556":{"__LivelyClassName__":"lively.morphic.TextEmphasis","__SourceModuleName__":"Global.lively.morphic.TextCore"},"557":{"_Position":{"__isSmartRef__":true,"id":558},"_Extent":{"__isSmartRef__":true,"id":559},"_BorderWidth":1,"_BorderColor":{"__isSmartRef__":true,"id":453},"_Fill":{"__isSmartRef__":true,"id":454},"_BorderRadius":5,"__LivelyClassName__":"lively.morphic.Shapes.Rectangle","__SourceModuleName__":"Global.lively.morphic.Shapes"},"558":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"559":{"x":117.14285714285714,"y":22,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"560":{"x":468.57142857142856,"y":220,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"561":{"stops":[{"__isSmartRef__":true,"id":562},{"__isSmartRef__":true,"id":564},{"__isSmartRef__":true,"id":566},{"__isSmartRef__":true,"id":568}],"vector":{"__isSmartRef__":true,"id":463},"__LivelyClassName__":"lively.morphic.LinearGradient","__SourceModuleName__":"Global.lively.morphic.Shapes"},"562":{"offset":0,"color":{"__isSmartRef__":true,"id":563}},"563":{"r":0.98,"g":0.98,"b":0.98,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global"},"564":{"offset":0.4,"color":{"__isSmartRef__":true,"id":565}},"565":{"r":0.91,"g":0.91,"b":0.91,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global"},"566":{"offset":0.6,"color":{"__isSmartRef__":true,"id":567}},"567":{"r":0.91,"g":0.91,"b":0.91,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global"},"568":{"offset":1,"color":{"__isSmartRef__":true,"id":569}},"569":{"r":0.97,"g":0.97,"b":0.97,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global"},"570":{"sourceObj":{"__isSmartRef__":true,"id":549},"sourceAttrName":"fire","targetObj":{"__isSmartRef__":true,"id":548},"targetMethodName":"trigger","__LivelyClassName__":"AttributeConnection","__SourceModuleName__":"Global.lively.bindings"},"571":{"sourceObj":{"__isSmartRef__":true,"id":549},"sourceAttrName":"fire","targetObj":{"__isSmartRef__":true,"id":549},"targetMethodName":"setLabel","converter":null,"converterString":"function () { return this.getSourceObj().command.asString() }","updater":null,"updaterString":null,"__LivelyClassName__":"AttributeConnection","__SourceModuleName__":"Global.lively.bindings"},"572":{"browser":{"__isSmartRef__":true,"id":439},"button":{"__isSmartRef__":true,"id":573},"__LivelyClassName__":"lively.ide.SortCommand","__SourceModuleName__":"Global.lively.ide.BrowserCommands"},"573":{"submorphs":[{"__isSmartRef__":true,"id":574}],"scripts":[],"id":635,"shape":{"__isSmartRef__":true,"id":581},"grabbingEnabled":false,"droppingEnabled":false,"halosEnabled":true,"_Position":{"__isSmartRef__":true,"id":584},"value":false,"toggle":false,"isActive":true,"normalFill":{"__isSmartRef__":true,"id":454},"lighterFill":{"__isSmartRef__":true,"id":585},"label":{"__isSmartRef__":true,"id":574},"command":{"__isSmartRef__":true,"id":572},"attributeConnections":[{"__isSmartRef__":true,"id":594},{"__isSmartRef__":true,"id":595}],"doNotSerialize":["$$fire"],"doNotCopyProperties":["$$fire"],"owner":{"__isSmartRef__":true,"id":427},"__LivelyClassName__":"lively.morphic.Button","__SourceModuleName__":"Global.lively.morphic.Widgets"},"574":{"submorphs":[],"scripts":[],"id":636,"shape":{"__isSmartRef__":true,"id":575},"grabbingEnabled":false,"droppingEnabled":false,"halosEnabled":true,"_Padding":{"__isSmartRef__":true,"id":446},"_ClipMode":"hidden","fixedWidth":false,"_WhiteSpaceHandling":"pre","fixedHeight":true,"allowInput":false,"_FontFamily":"Helvetica","_Position":{"__isSmartRef__":true,"id":578},"_MaxTextWidth":null,"_MaxTextHeight":22,"textChunks":[{"__isSmartRef__":true,"id":579}],"owner":{"__isSmartRef__":true,"id":573},"isLabel":true,"eventsAreIgnored":true,"__LivelyClassName__":"lively.morphic.Text","__SourceModuleName__":"Global.lively.morphic.TextCore"},"575":{"_Position":{"__isSmartRef__":true,"id":576},"_Extent":{"__isSmartRef__":true,"id":577},"_BorderWidth":0,"_BorderColor":{"__isSmartRef__":true,"id":432},"_Fill":null,"__LivelyClassName__":"lively.morphic.Shapes.Rectangle","__SourceModuleName__":"Global.lively.morphic.Shapes"},"576":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"577":{"x":117.14285714285714,"y":22,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"578":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"579":{"style":{"__isSmartRef__":true,"id":580},"morph":{"__isSmartRef__":true,"id":574},"storedString":"Sort","__LivelyClassName__":"lively.morphic.TextChunk","__SourceModuleName__":"Global.lively.morphic.TextCore"},"580":{"__LivelyClassName__":"lively.morphic.TextEmphasis","__SourceModuleName__":"Global.lively.morphic.TextCore"},"581":{"_Position":{"__isSmartRef__":true,"id":582},"_Extent":{"__isSmartRef__":true,"id":583},"_BorderWidth":1,"_BorderColor":{"__isSmartRef__":true,"id":453},"_Fill":{"__isSmartRef__":true,"id":454},"_BorderRadius":5,"__LivelyClassName__":"lively.morphic.Shapes.Rectangle","__SourceModuleName__":"Global.lively.morphic.Shapes"},"582":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"583":{"x":117.14285714285714,"y":22,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"584":{"x":585.7142857142857,"y":220,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"585":{"stops":[{"__isSmartRef__":true,"id":586},{"__isSmartRef__":true,"id":588},{"__isSmartRef__":true,"id":590},{"__isSmartRef__":true,"id":592}],"vector":{"__isSmartRef__":true,"id":463},"__LivelyClassName__":"lively.morphic.LinearGradient","__SourceModuleName__":"Global.lively.morphic.Shapes"},"586":{"offset":0,"color":{"__isSmartRef__":true,"id":587}},"587":{"r":0.98,"g":0.98,"b":0.98,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global"},"588":{"offset":0.4,"color":{"__isSmartRef__":true,"id":589}},"589":{"r":0.91,"g":0.91,"b":0.91,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global"},"590":{"offset":0.6,"color":{"__isSmartRef__":true,"id":591}},"591":{"r":0.91,"g":0.91,"b":0.91,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global"},"592":{"offset":1,"color":{"__isSmartRef__":true,"id":593}},"593":{"r":0.97,"g":0.97,"b":0.97,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global"},"594":{"sourceObj":{"__isSmartRef__":true,"id":573},"sourceAttrName":"fire","targetObj":{"__isSmartRef__":true,"id":572},"targetMethodName":"trigger","__LivelyClassName__":"AttributeConnection","__SourceModuleName__":"Global.lively.bindings"},"595":{"sourceObj":{"__isSmartRef__":true,"id":573},"sourceAttrName":"fire","targetObj":{"__isSmartRef__":true,"id":573},"targetMethodName":"setLabel","converter":null,"converterString":"function () { return this.getSourceObj().command.asString() }","updater":null,"updaterString":null,"__LivelyClassName__":"AttributeConnection","__SourceModuleName__":"Global.lively.bindings"},"596":{"browser":{"__isSmartRef__":true,"id":439},"button":{"__isSmartRef__":true,"id":597},"__LivelyClassName__":"lively.ide.ViewSourceCommand","__SourceModuleName__":"Global.lively.ide.BrowserCommands"},"597":{"submorphs":[{"__isSmartRef__":true,"id":598}],"scripts":[],"id":637,"shape":{"__isSmartRef__":true,"id":605},"grabbingEnabled":false,"droppingEnabled":false,"halosEnabled":true,"_Position":{"__isSmartRef__":true,"id":608},"value":false,"toggle":false,"isActive":true,"normalFill":{"__isSmartRef__":true,"id":454},"lighterFill":{"__isSmartRef__":true,"id":609},"label":{"__isSmartRef__":true,"id":598},"command":{"__isSmartRef__":true,"id":596},"attributeConnections":[{"__isSmartRef__":true,"id":618},{"__isSmartRef__":true,"id":619}],"doNotSerialize":["$$fire"],"doNotCopyProperties":["$$fire"],"owner":{"__isSmartRef__":true,"id":427},"__LivelyClassName__":"lively.morphic.Button","__SourceModuleName__":"Global.lively.morphic.Widgets"},"598":{"submorphs":[],"scripts":[],"id":638,"shape":{"__isSmartRef__":true,"id":599},"grabbingEnabled":false,"droppingEnabled":false,"halosEnabled":true,"_Padding":{"__isSmartRef__":true,"id":446},"_ClipMode":"hidden","fixedWidth":false,"_WhiteSpaceHandling":"pre","fixedHeight":true,"allowInput":false,"_FontFamily":"Helvetica","_Position":{"__isSmartRef__":true,"id":602},"_MaxTextWidth":null,"_MaxTextHeight":22,"textChunks":[{"__isSmartRef__":true,"id":603}],"owner":{"__isSmartRef__":true,"id":597},"isLabel":true,"eventsAreIgnored":true,"__LivelyClassName__":"lively.morphic.Text","__SourceModuleName__":"Global.lively.morphic.TextCore"},"599":{"_Position":{"__isSmartRef__":true,"id":600},"_Extent":{"__isSmartRef__":true,"id":601},"_BorderWidth":0,"_BorderColor":{"__isSmartRef__":true,"id":432},"_Fill":null,"__LivelyClassName__":"lively.morphic.Shapes.Rectangle","__SourceModuleName__":"Global.lively.morphic.Shapes"},"600":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"601":{"x":117.14285714285714,"y":22,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"602":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"603":{"style":{"__isSmartRef__":true,"id":604},"morph":{"__isSmartRef__":true,"id":598},"storedString":"View as...","__LivelyClassName__":"lively.morphic.TextChunk","__SourceModuleName__":"Global.lively.morphic.TextCore"},"604":{"__LivelyClassName__":"lively.morphic.TextEmphasis","__SourceModuleName__":"Global.lively.morphic.TextCore"},"605":{"_Position":{"__isSmartRef__":true,"id":606},"_Extent":{"__isSmartRef__":true,"id":607},"_BorderWidth":1,"_BorderColor":{"__isSmartRef__":true,"id":453},"_Fill":{"__isSmartRef__":true,"id":454},"_BorderRadius":5,"__LivelyClassName__":"lively.morphic.Shapes.Rectangle","__SourceModuleName__":"Global.lively.morphic.Shapes"},"606":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"607":{"x":117.14285714285714,"y":22,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"608":{"x":702.8571428571429,"y":220,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"609":{"stops":[{"__isSmartRef__":true,"id":610},{"__isSmartRef__":true,"id":612},{"__isSmartRef__":true,"id":614},{"__isSmartRef__":true,"id":616}],"vector":{"__isSmartRef__":true,"id":463},"__LivelyClassName__":"lively.morphic.LinearGradient","__SourceModuleName__":"Global.lively.morphic.Shapes"},"610":{"offset":0,"color":{"__isSmartRef__":true,"id":611}},"611":{"r":0.98,"g":0.98,"b":0.98,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global"},"612":{"offset":0.4,"color":{"__isSmartRef__":true,"id":613}},"613":{"r":0.91,"g":0.91,"b":0.91,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global"},"614":{"offset":0.6,"color":{"__isSmartRef__":true,"id":615}},"615":{"r":0.91,"g":0.91,"b":0.91,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global"},"616":{"offset":1,"color":{"__isSmartRef__":true,"id":617}},"617":{"r":0.97,"g":0.97,"b":0.97,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global"},"618":{"sourceObj":{"__isSmartRef__":true,"id":597},"sourceAttrName":"fire","targetObj":{"__isSmartRef__":true,"id":596},"targetMethodName":"trigger","__LivelyClassName__":"AttributeConnection","__SourceModuleName__":"Global.lively.bindings"},"619":{"sourceObj":{"__isSmartRef__":true,"id":597},"sourceAttrName":"fire","targetObj":{"__isSmartRef__":true,"id":597},"targetMethodName":"setLabel","converter":null,"converterString":"function () { return this.getSourceObj().command.asString() }","updater":null,"updaterString":null,"__LivelyClassName__":"AttributeConnection","__SourceModuleName__":"Global.lively.bindings"},"620":{"__LivelyClassName__":"lively.ide.NodeFilter","__SourceModuleName__":"Global.lively.ide.BrowserFramework"},"621":{"__LivelyClassName__":"lively.ide.NodeFilter","__SourceModuleName__":"Global.lively.ide.BrowserFramework"},"622":{"attributes":["isClassNode","isGrammarNode","isChangeNode","isFunctionNode","isObjectNode"],"__LivelyClassName__":"lively.ide.NodeTypeFilter","__SourceModuleName__":"Global.lively.ide.BrowserFramework"},"623":{"__LivelyClassName__":"lively.ide.NodeFilter","__SourceModuleName__":"Global.lively.ide.BrowserFramework"},"624":{"__LivelyClassName__":"lively.ide.NodeFilter","__SourceModuleName__":"Global.lively.ide.BrowserFramework"},"625":{"__LivelyClassName__":"lively.ide.NodeFilter","__SourceModuleName__":"Global.lively.ide.BrowserFramework"},"626":{"sourceObj":{"__isSmartRef__":true,"id":439},"sourceAttrName":"setPane1Content","targetObj":{"__isSmartRef__":true,"id":627},"targetMethodName":"updateList","converter":null,"converterString":null,"updater":null,"updaterString":null,"__LivelyClassName__":"AttributeConnection","__SourceModuleName__":"Global.lively.bindings"},"627":{"submorphs":[],"scripts":[],"id":617,"shape":{"__isSmartRef__":true,"id":628},"droppingEnabled":true,"halosEnabled":true,"_ClipMode":"scroll","_Position":{"__isSmartRef__":true,"id":632},"itemList":[{"__isSmartRef__":true,"id":633},{"__isSmartRef__":true,"id":1461},{"__isSmartRef__":true,"id":1462},{"__isSmartRef__":true,"id":1463},{"__isSmartRef__":true,"id":1464},{"__isSmartRef__":true,"id":1465},{"__isSmartRef__":true,"id":1466},{"__isSmartRef__":true,"id":1467},{"__isSmartRef__":true,"id":1468},{"__isSmartRef__":true,"id":1469},{"__isSmartRef__":true,"id":1470},{"__isSmartRef__":true,"id":1471},{"__isSmartRef__":true,"id":1472},{"__isSmartRef__":true,"id":1473},{"__isSmartRef__":true,"id":1474},{"__isSmartRef__":true,"id":1475},{"__isSmartRef__":true,"id":1476},{"__isSmartRef__":true,"id":1477},{"__isSmartRef__":true,"id":1478},{"__isSmartRef__":true,"id":1479},{"__isSmartRef__":true,"id":1480},{"__isSmartRef__":true,"id":1481},{"__isSmartRef__":true,"id":1482},{"__isSmartRef__":true,"id":1483},{"__isSmartRef__":true,"id":1484},{"__isSmartRef__":true,"id":1485},{"__isSmartRef__":true,"id":1486},{"__isSmartRef__":true,"id":1487}],"selectedLineNo":25,"selectOnMove":false,"owner":{"__isSmartRef__":true,"id":427},"attributeConnections":[{"__isSmartRef__":true,"id":1488},{"__isSmartRef__":true,"id":1489},{"__isSmartRef__":true,"id":1490},{"__isSmartRef__":true,"id":1491}],"doNotSerialize":["$$selection"],"doNotCopyProperties":["$$selection"],"selection":{"__isSmartRef__":true,"id":1221},"__LivelyClassName__":"lively.morphic.List","__SourceModuleName__":"Global.lively.morphic.Core"},"628":{"_Position":{"__isSmartRef__":true,"id":629},"_Extent":{"__isSmartRef__":true,"id":630},"_BorderWidth":0,"_BorderColor":{"__isSmartRef__":true,"id":432},"_Fill":{"__isSmartRef__":true,"id":631},"__LivelyClassName__":"lively.morphic.Shapes.Rectangle","__SourceModuleName__":"Global.lively.morphic.Shapes"},"629":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"630":{"x":205,"y":192.5,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"631":{"r":0.95,"g":0.95,"b":0.95,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global"},"632":{"x":0,"y":27.5,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"633":{"isListItem":true,"string":"../","value":{"__isSmartRef__":true,"id":634}},"634":{"target":{"__isSmartRef__":true,"id":635},"browser":{"__isSmartRef__":true,"id":439},"parent":{"__isSmartRef__":true,"id":636},"localName":"../","__LivelyClassName__":"lively.ide.NamespaceNode","__SourceModuleName__":"Global.lively.ide.SystemBrowserNodes"},"635":{"protocol":"http:","hostname":"www.lively-kernel.org","pathname":"/repository/webwerkstatt/lively/morphic/../","__LivelyClassName__":"URL","__SourceModuleName__":"Global.lively.Network"},"636":{"target":{"__isSmartRef__":true,"id":637},"browser":{"__isSmartRef__":true,"id":439},"parent":null,"allFiles":["lively/morphic/Events.js","lively/morphic/HTML.js","lively/morphic/Widgets.js","lively/morphic/Graffle.js","lively/morphic/Halos.js","lively/morphic/Complete.js","lively/morphic/lively.morphic.Widgets.js","lively/morphic/Canvas.js","lively/morphic/CompatSCB.js","lively/morphic/Serialization.js","lively/morphic/Rendering.js","lively/morphic/Layout.js","lively/morphic/Examples.js","lively/morphic/MorphAddons.js","lively/morphic/CompatLayer.js","lively/morphic/ObjectMigration.js","lively/morphic/ColorChooserDraft.js","lively/morphic/Compat.js","lively/morphic/Shapes.js","lively/morphic/Styles.js","lively/morphic/Core.js","lively/morphic/TextCore.js","lively/morphic/SVG.js","lively/morphic/ScriptingSupport.js","lively/morphic/Tests.js","lively/morphic/Experiments.js"],"subNamespacePaths":[],"parentNamespacePath":{"__isSmartRef__":true,"id":635},"_childNodes":[{"__isSmartRef__":true,"id":634},{"__isSmartRef__":true,"id":638},{"__isSmartRef__":true,"id":639},{"__isSmartRef__":true,"id":640},{"__isSmartRef__":true,"id":641},{"__isSmartRef__":true,"id":669},{"__isSmartRef__":true,"id":670},{"__isSmartRef__":true,"id":671},{"__isSmartRef__":true,"id":864},{"__isSmartRef__":true,"id":1063},{"__isSmartRef__":true,"id":1064},{"__isSmartRef__":true,"id":1065},{"__isSmartRef__":true,"id":1066},{"__isSmartRef__":true,"id":1067},{"__isSmartRef__":true,"id":1068},{"__isSmartRef__":true,"id":1069},{"__isSmartRef__":true,"id":1070},{"__isSmartRef__":true,"id":1071},{"__isSmartRef__":true,"id":1072},{"__isSmartRef__":true,"id":1073},{"__isSmartRef__":true,"id":1074},{"__isSmartRef__":true,"id":1075},{"__isSmartRef__":true,"id":1076},{"__isSmartRef__":true,"id":1077},{"__isSmartRef__":true,"id":1078},{"__isSmartRef__":true,"id":1221},{"__isSmartRef__":true,"id":1458},{"__isSmartRef__":true,"id":1459}],"__LivelyClassName__":"lively.ide.SourceControlNode","__SourceModuleName__":"Global.lively.ide.SystemBrowserNodes"},"637":{"__LivelyClassName__":"AnotherSourceDatabase","__SourceModuleName__":"Global.lively.ide.SourceDatabase"},"638":{"browser":{"__isSmartRef__":true,"id":439},"parent":{"__isSmartRef__":true,"id":636},"moduleName":"lively/morphic/Canvas.js","showAll":false,"__LivelyClassName__":"lively.ide.CompleteFileFragmentNode","__SourceModuleName__":"Global.lively.ide.SystemBrowserNodes"},"639":{"browser":{"__isSmartRef__":true,"id":439},"parent":{"__isSmartRef__":true,"id":636},"moduleName":"lively/morphic/ColorChooserDraft.js","showAll":false,"__LivelyClassName__":"lively.ide.CompleteFileFragmentNode","__SourceModuleName__":"Global.lively.ide.SystemBrowserNodes"},"640":{"browser":{"__isSmartRef__":true,"id":439},"parent":{"__isSmartRef__":true,"id":636},"moduleName":"lively/morphic/Compat.js","showAll":false,"__LivelyClassName__":"lively.ide.CompleteFileFragmentNode","__SourceModuleName__":"Global.lively.ide.SystemBrowserNodes"},"641":{"target":{"__isSmartRef__":true,"id":642},"browser":{"__isSmartRef__":true,"id":439},"parent":{"__isSmartRef__":true,"id":636},"moduleName":"lively/morphic/CompatLayer.js","showAll":false,"__LivelyClassName__":"lively.ide.CompleteFileFragmentNode","__SourceModuleName__":"Global.lively.ide.SystemBrowserNodes"},"642":{"name":"lively.morphic.CompatLayer","type":"moduleDef","startIndex":0,"stopIndex":1513,"fileName":"lively/morphic/CompatLayer.js","_subElements":[{"__isSmartRef__":true,"id":643},{"__isSmartRef__":true,"id":644},{"__isSmartRef__":true,"id":647},{"__isSmartRef__":true,"id":668}],"sourceControl":{"__isSmartRef__":true,"id":637},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"643":{"name":null,"type":"comment","startIndex":102,"stopIndex":102,"fileName":"lively/morphic/CompatLayer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"644":{"name":"lively.morphic.Compat.Text","type":"klassDef","startIndex":103,"stopIndex":230,"fileName":"lively/morphic/CompatLayer.js","_subElements":[{"__isSmartRef__":true,"id":645}],"sourceControl":{"__isSmartRef__":true,"id":637},"superclassName":"Object","categories":[{"__isSmartRef__":true,"id":646}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"645":{"name":"initialize","type":"propertyDef","startIndex":167,"stopIndex":225,"fileName":"lively/morphic/CompatLayer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":646},"className":"lively.morphic.Compat.Text","_owner":{"__isSmartRef__":true,"id":644},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"646":{"name":"initializing","type":"categoryDef","startIndex":149,"stopIndex":227,"fileName":"lively/morphic/CompatLayer.js","_subElements":[{"__isSmartRef__":true,"id":645}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"647":{"name":"NewMorphicCompatLayer","type":"copDef","startIndex":231,"stopIndex":1493,"fileName":"lively/morphic/CompatLayer.js","_subElements":[{"__isSmartRef__":true,"id":648},{"__isSmartRef__":true,"id":664}],"sourceControl":{"__isSmartRef__":true,"id":637},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"648":{"name":"Global","type":"copSubElement","startIndex":267,"stopIndex":1309,"fileName":"lively/morphic/CompatLayer.js","_subElements":[{"__isSmartRef__":true,"id":649},{"__isSmartRef__":true,"id":651},{"__isSmartRef__":true,"id":652},{"__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}],"sourceControl":{"__isSmartRef__":true,"id":637},"refineSelector":"refineObject","_owner":{"__isSmartRef__":true,"id":647},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"649":{"name":"Morph","type":"propertyDef","startIndex":291,"stopIndex":335,"fileName":"lively/morphic/CompatLayer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":650},"_owner":{"__isSmartRef__":true,"id":648},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"650":{"name":"default category","type":"categoryDef","startIndex":58,"stopIndex":1077,"fileName":null,"_subElements":[{"__isSmartRef__":true,"id":649},{"__isSmartRef__":true,"id":651},{"__isSmartRef__":true,"id":652},{"__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}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"651":{"name":"BoxMorph","type":"propertyDef","startIndex":337,"stopIndex":382,"fileName":"lively/morphic/CompatLayer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":650},"_owner":{"__isSmartRef__":true,"id":648},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"652":{"name":"TextMorph","type":"propertyDef","startIndex":384,"stopIndex":431,"fileName":"lively/morphic/CompatLayer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":650},"_owner":{"__isSmartRef__":true,"id":648},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"653":{"name":"WorldMorph","type":"propertyDef","startIndex":433,"stopIndex":482,"fileName":"lively/morphic/CompatLayer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":650},"_owner":{"__isSmartRef__":true,"id":648},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"654":{"name":"ButtonMorph","type":"propertyDef","startIndex":484,"stopIndex":535,"fileName":"lively/morphic/CompatLayer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":650},"_owner":{"__isSmartRef__":true,"id":648},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"655":{"name":"PanelMorph","type":"propertyDef","startIndex":537,"stopIndex":586,"fileName":"lively/morphic/CompatLayer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":650},"_owner":{"__isSmartRef__":true,"id":648},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"656":{"name":"HorizontalDivider","type":"propertyDef","startIndex":588,"stopIndex":656,"fileName":"lively/morphic/CompatLayer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":650},"_owner":{"__isSmartRef__":true,"id":648},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"657":{"name":"SliderMorph","type":"propertyDef","startIndex":658,"stopIndex":709,"fileName":"lively/morphic/CompatLayer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":650},"_owner":{"__isSmartRef__":true,"id":648},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"658":{"name":"MenuMorph","type":"propertyDef","startIndex":711,"stopIndex":758,"fileName":"lively/morphic/CompatLayer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":650},"_owner":{"__isSmartRef__":true,"id":648},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"659":{"name":"ImageMorph","type":"propertyDef","startIndex":760,"stopIndex":809,"fileName":"lively/morphic/CompatLayer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":650},"_owner":{"__isSmartRef__":true,"id":648},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"660":{"name":"ContainerMorph","type":"propertyDef","startIndex":811,"stopIndex":864,"fileName":"lively/morphic/CompatLayer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":650},"_owner":{"__isSmartRef__":true,"id":648},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"661":{"name":"Widget","type":"propertyDef","startIndex":867,"stopIndex":918,"fileName":"lively/morphic/CompatLayer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":650},"_owner":{"__isSmartRef__":true,"id":648},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"662":{"name":"newTextPane","type":"propertyDef","startIndex":921,"stopIndex":1146,"fileName":"lively/morphic/CompatLayer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":650},"_owner":{"__isSmartRef__":true,"id":648},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"663":{"name":"newDragnDropListPane","type":"propertyDef","startIndex":1148,"stopIndex":1306,"fileName":"lively/morphic/CompatLayer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":650},"_owner":{"__isSmartRef__":true,"id":648},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"664":{"name":"lively","type":"copSubElement","startIndex":1310,"stopIndex":1491,"fileName":"lively/morphic/CompatLayer.js","_subElements":[{"__isSmartRef__":true,"id":665},{"__isSmartRef__":true,"id":667}],"sourceControl":{"__isSmartRef__":true,"id":637},"refineSelector":"refineObject","_owner":{"__isSmartRef__":true,"id":647},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"665":{"name":"scene","type":"propertyDef","startIndex":1335,"stopIndex":1403,"fileName":"lively/morphic/CompatLayer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":666},"_owner":{"__isSmartRef__":true,"id":664},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"666":{"name":"default category","type":"categoryDef","startIndex":1102,"stopIndex":1259,"fileName":null,"_subElements":[{"__isSmartRef__":true,"id":665},{"__isSmartRef__":true,"id":667}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"667":{"name":"Text","type":"propertyDef","startIndex":1405,"stopIndex":1488,"fileName":"lively/morphic/CompatLayer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":666},"_owner":{"__isSmartRef__":true,"id":664},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"668":{"name":null,"type":"comment","startIndex":1494,"stopIndex":1494,"fileName":"lively/morphic/CompatLayer.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"669":{"browser":{"__isSmartRef__":true,"id":439},"parent":{"__isSmartRef__":true,"id":636},"moduleName":"lively/morphic/CompatSCB.js","showAll":false,"__LivelyClassName__":"lively.ide.CompleteFileFragmentNode","__SourceModuleName__":"Global.lively.ide.SystemBrowserNodes"},"670":{"browser":{"__isSmartRef__":true,"id":439},"parent":{"__isSmartRef__":true,"id":636},"moduleName":"lively/morphic/Complete.js","showAll":false,"__LivelyClassName__":"lively.ide.CompleteFileFragmentNode","__SourceModuleName__":"Global.lively.ide.SystemBrowserNodes"},"671":{"target":{"__isSmartRef__":true,"id":672},"browser":{"__isSmartRef__":true,"id":439},"parent":{"__isSmartRef__":true,"id":636},"moduleName":"lively/morphic/Core.js","showAll":false,"__LivelyClassName__":"lively.ide.CompleteFileFragmentNode","__SourceModuleName__":"Global.lively.ide.SystemBrowserNodes"},"672":{"name":"lively.morphic.Core","type":"moduleDef","startIndex":0,"stopIndex":25834,"fileName":"lively/morphic/Core.js","_subElements":[{"__isSmartRef__":true,"id":673},{"__isSmartRef__":true,"id":674},{"__isSmartRef__":true,"id":708},{"__isSmartRef__":true,"id":709},{"__isSmartRef__":true,"id":804},{"__isSmartRef__":true,"id":805},{"__isSmartRef__":true,"id":821},{"__isSmartRef__":true,"id":822},{"__isSmartRef__":true,"id":827},{"__isSmartRef__":true,"id":828},{"__isSmartRef__":true,"id":831},{"__isSmartRef__":true,"id":832},{"__isSmartRef__":true,"id":833},{"__isSmartRef__":true,"id":838},{"__isSmartRef__":true,"id":839},{"__isSmartRef__":true,"id":848},{"__isSmartRef__":true,"id":853},{"__isSmartRef__":true,"id":858},{"__isSmartRef__":true,"id":859},{"__isSmartRef__":true,"id":863}],"sourceControl":{"__isSmartRef__":true,"id":637},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"673":{"name":null,"type":"comment","startIndex":100,"stopIndex":100,"fileName":"lively/morphic/Core.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"674":{"name":"lively.morphic.Similitude","type":"klassDef","startIndex":101,"stopIndex":7501,"fileName":"lively/morphic/Core.js","_subElements":[{"__isSmartRef__":true,"id":675},{"__isSmartRef__":true,"id":677},{"__isSmartRef__":true,"id":679},{"__isSmartRef__":true,"id":681},{"__isSmartRef__":true,"id":682},{"__isSmartRef__":true,"id":683},{"__isSmartRef__":true,"id":685},{"__isSmartRef__":true,"id":686},{"__isSmartRef__":true,"id":687},{"__isSmartRef__":true,"id":688},{"__isSmartRef__":true,"id":690},{"__isSmartRef__":true,"id":692},{"__isSmartRef__":true,"id":693},{"__isSmartRef__":true,"id":694},{"__isSmartRef__":true,"id":695},{"__isSmartRef__":true,"id":697},{"__isSmartRef__":true,"id":699},{"__isSmartRef__":true,"id":700},{"__isSmartRef__":true,"id":701},{"__isSmartRef__":true,"id":702},{"__isSmartRef__":true,"id":704},{"__isSmartRef__":true,"id":705},{"__isSmartRef__":true,"id":706}],"sourceControl":{"__isSmartRef__":true,"id":637},"superclassName":"Object","categories":[{"__isSmartRef__":true,"id":676},{"__isSmartRef__":true,"id":678},{"__isSmartRef__":true,"id":680},{"__isSmartRef__":true,"id":684},{"__isSmartRef__":true,"id":689},{"__isSmartRef__":true,"id":691},{"__isSmartRef__":true,"id":696},{"__isSmartRef__":true,"id":698},{"__isSmartRef__":true,"id":703},{"__isSmartRef__":true,"id":707}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"675":{"name":"documentation","type":"propertyDef","startIndex":165,"stopIndex":246,"fileName":"lively/morphic/Core.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":676},"className":"lively.morphic.Similitude","_owner":{"__isSmartRef__":true,"id":674},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"676":{"name":"documentation","type":"categoryDef","startIndex":146,"stopIndex":249,"fileName":"lively/morphic/Core.js","_subElements":[{"__isSmartRef__":true,"id":675}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"677":{"name":"eps","type":"propertyDef","startIndex":265,"stopIndex":277,"fileName":"lively/morphic/Core.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":678},"className":"lively.morphic.Similitude","_owner":{"__isSmartRef__":true,"id":674},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"678":{"name":"settings","type":"categoryDef","startIndex":251,"stopIndex":293,"fileName":"lively/morphic/Core.js","_subElements":[{"__isSmartRef__":true,"id":677}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"679":{"name":"initialize","type":"propertyDef","startIndex":313,"stopIndex":1227,"fileName":"lively/morphic/Core.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":680},"className":"lively.morphic.Similitude","_owner":{"__isSmartRef__":true,"id":674},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"680":{"name":"initializing","type":"categoryDef","startIndex":295,"stopIndex":1551,"fileName":"lively/morphic/Core.js","_subElements":[{"__isSmartRef__":true,"id":679},{"__isSmartRef__":true,"id":681},{"__isSmartRef__":true,"id":682}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"681":{"name":"copy","type":"propertyDef","startIndex":1230,"stopIndex":1298,"fileName":"lively/morphic/Core.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":680},"className":"lively.morphic.Similitude","_owner":{"__isSmartRef__":true,"id":674},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"682":{"name":"fromMatrix","type":"propertyDef","startIndex":1301,"stopIndex":1547,"fileName":"lively/morphic/Core.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":680},"className":"lively.morphic.Similitude","_owner":{"__isSmartRef__":true,"id":674},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"683":{"name":"getRotation","type":"propertyDef","startIndex":1568,"stopIndex":1837,"fileName":"lively/morphic/Core.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":684},"className":"lively.morphic.Similitude","_owner":{"__isSmartRef__":true,"id":674},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"684":{"name":"accessing","type":"categoryDef","startIndex":1553,"stopIndex":2570,"fileName":"lively/morphic/Core.js","_subElements":[{"__isSmartRef__":true,"id":683},{"__isSmartRef__":true,"id":685},{"__isSmartRef__":true,"id":686},{"__isSmartRef__":true,"id":687}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"685":{"name":"getScale","type":"propertyDef","startIndex":1840,"stopIndex":2117,"fileName":"lively/morphic/Core.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":684},"className":"lively.morphic.Similitude","_owner":{"__isSmartRef__":true,"id":674},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"686":{"name":"getScalePoint","type":"propertyDef","startIndex":2120,"stopIndex":2502,"fileName":"lively/morphic/Core.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":684},"className":"lively.morphic.Similitude","_owner":{"__isSmartRef__":true,"id":674},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"687":{"name":"getTranslation","type":"propertyDef","startIndex":2505,"stopIndex":2566,"fileName":"lively/morphic/Core.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":684},"className":"lively.morphic.Similitude","_owner":{"__isSmartRef__":true,"id":674},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"688":{"name":"isTranslation","type":"propertyDef","startIndex":2585,"stopIndex":2758,"fileName":"lively/morphic/Core.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":689},"className":"lively.morphic.Similitude","_owner":{"__isSmartRef__":true,"id":674},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"689":{"name":"testing","type":"categoryDef","startIndex":2572,"stopIndex":2761,"fileName":"lively/morphic/Core.js","_subElements":[{"__isSmartRef__":true,"id":688}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"690":{"name":"toSVGAttributeValue","type":"propertyDef","startIndex":2779,"stopIndex":3148,"fileName":"lively/morphic/Core.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":691},"className":"lively.morphic.Similitude","_owner":{"__isSmartRef__":true,"id":674},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"691":{"name":"converting","type":"categoryDef","startIndex":2763,"stopIndex":4425,"fileName":"lively/morphic/Core.js","_subElements":[{"__isSmartRef__":true,"id":690},{"__isSmartRef__":true,"id":692},{"__isSmartRef__":true,"id":693},{"__isSmartRef__":true,"id":694}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"692":{"name":"toCSSValue","type":"propertyDef","startIndex":3150,"stopIndex":4081,"fileName":"lively/morphic/Core.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":691},"className":"lively.morphic.Similitude","_owner":{"__isSmartRef__":true,"id":674},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"693":{"name":"toString","type":"propertyDef","startIndex":4084,"stopIndex":4138,"fileName":"lively/morphic/Core.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":691},"className":"lively.morphic.Similitude","_owner":{"__isSmartRef__":true,"id":674},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"694":{"name":"toMatrix","type":"propertyDef","startIndex":4140,"stopIndex":4421,"fileName":"lively/morphic/Core.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":691},"className":"lively.morphic.Similitude","_owner":{"__isSmartRef__":true,"id":674},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"695":{"name":"applyTo","type":"propertyDef","startIndex":4444,"stopIndex":5231,"fileName":"lively/morphic/Core.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":696},"className":"lively.morphic.Similitude","_owner":{"__isSmartRef__":true,"id":674},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"696":{"name":"application","type":"categoryDef","startIndex":4427,"stopIndex":5234,"fileName":"lively/morphic/Core.js","_subElements":[{"__isSmartRef__":true,"id":695}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"697":{"name":"transformPoint","type":"propertyDef","startIndex":5255,"stopIndex":5332,"fileName":"lively/morphic/Core.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":698},"className":"lively.morphic.Similitude","_owner":{"__isSmartRef__":true,"id":674},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"698":{"name":"transforming","type":"categoryDef","startIndex":5236,"stopIndex":6241,"fileName":"lively/morphic/Core.js","_subElements":[{"__isSmartRef__":true,"id":697},{"__isSmartRef__":true,"id":699},{"__isSmartRef__":true,"id":700},{"__isSmartRef__":true,"id":701}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"699":{"name":"transformDirection","type":"propertyDef","startIndex":5335,"stopIndex":5425,"fileName":"lively/morphic/Core.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":698},"className":"lively.morphic.Similitude","_owner":{"__isSmartRef__":true,"id":674},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"700":{"name":"matrixTransformForMinMax","type":"propertyDef","startIndex":5428,"stopIndex":5711,"fileName":"lively/morphic/Core.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":698},"className":"lively.morphic.Similitude","_owner":{"__isSmartRef__":true,"id":674},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"701":{"name":"transformRectToRect","type":"propertyDef","startIndex":5714,"stopIndex":6237,"fileName":"lively/morphic/Core.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":698},"className":"lively.morphic.Similitude","_owner":{"__isSmartRef__":true,"id":674},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"702":{"name":"preConcatenate","type":"propertyDef","startIndex":6266,"stopIndex":6613,"fileName":"lively/morphic/Core.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":703},"className":"lively.morphic.Similitude","_owner":{"__isSmartRef__":true,"id":674},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"703":{"name":"matrix operations","type":"categoryDef","startIndex":6243,"stopIndex":7071,"fileName":"lively/morphic/Core.js","_subElements":[{"__isSmartRef__":true,"id":702},{"__isSmartRef__":true,"id":704},{"__isSmartRef__":true,"id":705}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"704":{"name":"inverse","type":"propertyDef","startIndex":6615,"stopIndex":6935,"fileName":"lively/morphic/Core.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":703},"className":"lively.morphic.Similitude","_owner":{"__isSmartRef__":true,"id":674},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"705":{"name":"createInverse","type":"propertyDef","startIndex":6939,"stopIndex":7067,"fileName":"lively/morphic/Core.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":703},"className":"lively.morphic.Similitude","_owner":{"__isSmartRef__":true,"id":674},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"706":{"name":"ensureNumber","type":"propertyDef","startIndex":7085,"stopIndex":7496,"fileName":"lively/morphic/Core.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":707},"className":"lively.morphic.Similitude","_owner":{"__isSmartRef__":true,"id":674},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"707":{"name":"helper","type":"categoryDef","startIndex":7073,"stopIndex":7498,"fileName":"lively/morphic/Core.js","_subElements":[{"__isSmartRef__":true,"id":706}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"708":{"name":null,"type":"comment","startIndex":7502,"stopIndex":7502,"fileName":"lively/morphic/Core.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"709":{"name":"lively.morphic.Morph","type":"klassDef","startIndex":7503,"stopIndex":21087,"fileName":"lively/morphic/Core.js","_subElements":[{"__isSmartRef__":true,"id":710},{"__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":721},{"__isSmartRef__":true,"id":722},{"__isSmartRef__":true,"id":724},{"__isSmartRef__":true,"id":726},{"__isSmartRef__":true,"id":727},{"__isSmartRef__":true,"id":728},{"__isSmartRef__":true,"id":729},{"__isSmartRef__":true,"id":730},{"__isSmartRef__":true,"id":731},{"__isSmartRef__":true,"id":732},{"__isSmartRef__":true,"id":733},{"__isSmartRef__":true,"id":734},{"__isSmartRef__":true,"id":735},{"__isSmartRef__":true,"id":736},{"__isSmartRef__":true,"id":737},{"__isSmartRef__":true,"id":738},{"__isSmartRef__":true,"id":739},{"__isSmartRef__":true,"id":740},{"__isSmartRef__":true,"id":742},{"__isSmartRef__":true,"id":743},{"__isSmartRef__":true,"id":744},{"__isSmartRef__":true,"id":745},{"__isSmartRef__":true,"id":746},{"__isSmartRef__":true,"id":747},{"__isSmartRef__":true,"id":748},{"__isSmartRef__":true,"id":749},{"__isSmartRef__":true,"id":750},{"__isSmartRef__":true,"id":751},{"__isSmartRef__":true,"id":752},{"__isSmartRef__":true,"id":753},{"__isSmartRef__":true,"id":754},{"__isSmartRef__":true,"id":755},{"__isSmartRef__":true,"id":756},{"__isSmartRef__":true,"id":757},{"__isSmartRef__":true,"id":758},{"__isSmartRef__":true,"id":759},{"__isSmartRef__":true,"id":760},{"__isSmartRef__":true,"id":762},{"__isSmartRef__":true,"id":763},{"__isSmartRef__":true,"id":764},{"__isSmartRef__":true,"id":765},{"__isSmartRef__":true,"id":766},{"__isSmartRef__":true,"id":768},{"__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":778},{"__isSmartRef__":true,"id":779},{"__isSmartRef__":true,"id":780},{"__isSmartRef__":true,"id":781},{"__isSmartRef__":true,"id":782},{"__isSmartRef__":true,"id":783},{"__isSmartRef__":true,"id":784},{"__isSmartRef__":true,"id":785},{"__isSmartRef__":true,"id":786},{"__isSmartRef__":true,"id":788},{"__isSmartRef__":true,"id":790},{"__isSmartRef__":true,"id":791},{"__isSmartRef__":true,"id":792},{"__isSmartRef__":true,"id":793},{"__isSmartRef__":true,"id":794},{"__isSmartRef__":true,"id":795},{"__isSmartRef__":true,"id":796},{"__isSmartRef__":true,"id":797},{"__isSmartRef__":true,"id":798},{"__isSmartRef__":true,"id":799},{"__isSmartRef__":true,"id":801},{"__isSmartRef__":true,"id":802}],"sourceControl":{"__isSmartRef__":true,"id":637},"superclassName":"Object","categories":[{"__isSmartRef__":true,"id":711},{"__isSmartRef__":true,"id":713},{"__isSmartRef__":true,"id":720},{"__isSmartRef__":true,"id":723},{"__isSmartRef__":true,"id":725},{"__isSmartRef__":true,"id":741},{"__isSmartRef__":true,"id":761},{"__isSmartRef__":true,"id":767},{"__isSmartRef__":true,"id":770},{"__isSmartRef__":true,"id":774},{"__isSmartRef__":true,"id":777},{"__isSmartRef__":true,"id":787},{"__isSmartRef__":true,"id":789},{"__isSmartRef__":true,"id":800},{"__isSmartRef__":true,"id":803}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"710":{"name":"style","type":"propertyDef","startIndex":7559,"stopIndex":7608,"fileName":"lively/morphic/Core.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":711},"className":"lively.morphic.Morph","_owner":{"__isSmartRef__":true,"id":709},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"711":{"name":"properties","type":"categoryDef","startIndex":7543,"stopIndex":7611,"fileName":"lively/morphic/Core.js","_subElements":[{"__isSmartRef__":true,"id":710}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"712":{"name":"isMorph","type":"propertyDef","startIndex":7631,"stopIndex":7645,"fileName":"lively/morphic/Core.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":713},"className":"lively.morphic.Morph","_owner":{"__isSmartRef__":true,"id":709},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"713":{"name":"initializing","type":"categoryDef","startIndex":7613,"stopIndex":8220,"fileName":"lively/morphic/Core.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}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"714":{"name":"idCounter","type":"propertyDef","startIndex":7647,"stopIndex":7660,"fileName":"lively/morphic/Core.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":713},"className":"lively.morphic.Morph","_owner":{"__isSmartRef__":true,"id":709},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"715":{"name":"initialize","type":"propertyDef","startIndex":7662,"stopIndex":7907,"fileName":"lively/morphic/Core.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":713},"className":"lively.morphic.Morph","_owner":{"__isSmartRef__":true,"id":709},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"716":{"name":"setNewId","type":"propertyDef","startIndex":7909,"stopIndex":8005,"fileName":"lively/morphic/Core.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":713},"className":"lively.morphic.Morph","_owner":{"__isSmartRef__":true,"id":709},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"717":{"name":"defaultShape","type":"propertyDef","startIndex":8008,"stopIndex":8130,"fileName":"lively/morphic/Core.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":713},"className":"lively.morphic.Morph","_owner":{"__isSmartRef__":true,"id":709},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"718":{"name":"defaultRenderContext","type":"propertyDef","startIndex":8132,"stopIndex":8216,"fileName":"lively/morphic/Core.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":713},"className":"lively.morphic.Morph","_owner":{"__isSmartRef__":true,"id":709},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"719":{"name":"morphicSetter","type":"propertyDef","startIndex":8247,"stopIndex":8387,"fileName":"lively/morphic/Core.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":720},"className":"lively.morphic.Morph","_owner":{"__isSmartRef__":true,"id":709},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"720":{"name":"accessing -- helper","type":"categoryDef","startIndex":8222,"stopIndex":8458,"fileName":"lively/morphic/Core.js","_subElements":[{"__isSmartRef__":true,"id":719},{"__isSmartRef__":true,"id":721}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"721":{"name":"morphicGetter","type":"propertyDef","startIndex":8389,"stopIndex":8455,"fileName":"lively/morphic/Core.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":720},"className":"lively.morphic.Morph","_owner":{"__isSmartRef__":true,"id":709},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"722":{"name":"makeStyleSpec","type":"propertyDef","startIndex":8485,"stopIndex":8549,"fileName":"lively/morphic/Core.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":723},"className":"lively.morphic.Morph","_owner":{"__isSmartRef__":true,"id":709},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"723":{"name":"accessing -- shapes","type":"categoryDef","startIndex":8460,"stopIndex":8552,"fileName":"lively/morphic/Core.js","_subElements":[{"__isSmartRef__":true,"id":722}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"724":{"name":"setPosition","type":"propertyDef","startIndex":8589,"stopIndex":8667,"fileName":"lively/morphic/Core.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":725},"className":"lively.morphic.Morph","_owner":{"__isSmartRef__":true,"id":709},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"725":{"name":"accessing -- morph properties","type":"categoryDef","startIndex":8554,"stopIndex":10557,"fileName":"lively/morphic/Core.js","_subElements":[{"__isSmartRef__":true,"id":724},{"__isSmartRef__":true,"id":726},{"__isSmartRef__":true,"id":727},{"__isSmartRef__":true,"id":728},{"__isSmartRef__":true,"id":729},{"__isSmartRef__":true,"id":730},{"__isSmartRef__":true,"id":731},{"__isSmartRef__":true,"id":732},{"__isSmartRef__":true,"id":733},{"__isSmartRef__":true,"id":734},{"__isSmartRef__":true,"id":735},{"__isSmartRef__":true,"id":736},{"__isSmartRef__":true,"id":737},{"__isSmartRef__":true,"id":738},{"__isSmartRef__":true,"id":739}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"726":{"name":"getPosition","type":"propertyDef","startIndex":8669,"stopIndex":8746,"fileName":"lively/morphic/Core.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":725},"className":"lively.morphic.Morph","_owner":{"__isSmartRef__":true,"id":709},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"727":{"name":"setRotation","type":"propertyDef","startIndex":8748,"stopIndex":8826,"fileName":"lively/morphic/Core.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":725},"className":"lively.morphic.Morph","_owner":{"__isSmartRef__":true,"id":709},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"728":{"name":"getRotation","type":"propertyDef","startIndex":8828,"stopIndex":8899,"fileName":"lively/morphic/Core.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":725},"className":"lively.morphic.Morph","_owner":{"__isSmartRef__":true,"id":709},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"729":{"name":"setScale","type":"propertyDef","startIndex":8901,"stopIndex":8973,"fileName":"lively/morphic/Core.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":725},"className":"lively.morphic.Morph","_owner":{"__isSmartRef__":true,"id":709},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"730":{"name":"getScale","type":"propertyDef","startIndex":8975,"stopIndex":9040,"fileName":"lively/morphic/Core.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":725},"className":"lively.morphic.Morph","_owner":{"__isSmartRef__":true,"id":709},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"731":{"name":"setBounds","type":"propertyDef","startIndex":9042,"stopIndex":9165,"fileName":"lively/morphic/Core.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":725},"className":"lively.morphic.Morph","_owner":{"__isSmartRef__":true,"id":709},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"732":{"name":"getBounds","type":"propertyDef","startIndex":9167,"stopIndex":9429,"fileName":"lively/morphic/Core.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":725},"className":"lively.morphic.Morph","_owner":{"__isSmartRef__":true,"id":709},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"733":{"name":"innerBounds","type":"propertyDef","startIndex":9431,"stopIndex":9489,"fileName":"lively/morphic/Core.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":725},"className":"lively.morphic.Morph","_owner":{"__isSmartRef__":true,"id":709},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"734":{"name":"setVisible","type":"propertyDef","startIndex":9491,"stopIndex":9566,"fileName":"lively/morphic/Core.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":725},"className":"lively.morphic.Morph","_owner":{"__isSmartRef__":true,"id":709},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"735":{"name":"isVisible","type":"propertyDef","startIndex":9568,"stopIndex":9672,"fileName":"lively/morphic/Core.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":725},"className":"lively.morphic.Morph","_owner":{"__isSmartRef__":true,"id":709},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"736":{"name":"setOrigin","type":"propertyDef","startIndex":9674,"stopIndex":10308,"fileName":"lively/morphic/Core.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":725},"className":"lively.morphic.Morph","_owner":{"__isSmartRef__":true,"id":709},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"737":{"name":"getOrigin","type":"propertyDef","startIndex":10310,"stopIndex":10378,"fileName":"lively/morphic/Core.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":725},"className":"lively.morphic.Morph","_owner":{"__isSmartRef__":true,"id":709},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"738":{"name":"setClipMode","type":"propertyDef","startIndex":10381,"stopIndex":10473,"fileName":"lively/morphic/Core.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":725},"className":"lively.morphic.Morph","_owner":{"__isSmartRef__":true,"id":709},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"739":{"name":"getClipMode","type":"propertyDef","startIndex":10475,"stopIndex":10554,"fileName":"lively/morphic/Core.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":725},"className":"lively.morphic.Morph","_owner":{"__isSmartRef__":true,"id":709},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"740":{"name":"setExtent","type":"propertyDef","startIndex":10594,"stopIndex":10756,"fileName":"lively/morphic/Core.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":741},"className":"lively.morphic.Morph","_owner":{"__isSmartRef__":true,"id":709},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"741":{"name":"accessing -- shape properties","type":"categoryDef","startIndex":10559,"stopIndex":12268,"fileName":"lively/morphic/Core.js","_subElements":[{"__isSmartRef__":true,"id":740},{"__isSmartRef__":true,"id":742},{"__isSmartRef__":true,"id":743},{"__isSmartRef__":true,"id":744},{"__isSmartRef__":true,"id":745},{"__isSmartRef__":true,"id":746},{"__isSmartRef__":true,"id":747},{"__isSmartRef__":true,"id":748},{"__isSmartRef__":true,"id":749},{"__isSmartRef__":true,"id":750},{"__isSmartRef__":true,"id":751},{"__isSmartRef__":true,"id":752},{"__isSmartRef__":true,"id":753},{"__isSmartRef__":true,"id":754},{"__isSmartRef__":true,"id":755},{"__isSmartRef__":true,"id":756},{"__isSmartRef__":true,"id":757},{"__isSmartRef__":true,"id":758},{"__isSmartRef__":true,"id":759}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"742":{"name":"getExtent","type":"propertyDef","startIndex":10758,"stopIndex":10814,"fileName":"lively/morphic/Core.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":741},"className":"lively.morphic.Morph","_owner":{"__isSmartRef__":true,"id":709},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"743":{"name":"setFill","type":"propertyDef","startIndex":10816,"stopIndex":10878,"fileName":"lively/morphic/Core.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":741},"className":"lively.morphic.Morph","_owner":{"__isSmartRef__":true,"id":709},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"744":{"name":"getFill","type":"propertyDef","startIndex":10880,"stopIndex":10932,"fileName":"lively/morphic/Core.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":741},"className":"lively.morphic.Morph","_owner":{"__isSmartRef__":true,"id":709},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"745":{"name":"setBorderColor","type":"propertyDef","startIndex":10934,"stopIndex":11010,"fileName":"lively/morphic/Core.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":741},"className":"lively.morphic.Morph","_owner":{"__isSmartRef__":true,"id":709},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"746":{"name":"getBorderColor","type":"propertyDef","startIndex":11012,"stopIndex":11078,"fileName":"lively/morphic/Core.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":741},"className":"lively.morphic.Morph","_owner":{"__isSmartRef__":true,"id":709},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"747":{"name":"setBorderWidth","type":"propertyDef","startIndex":11080,"stopIndex":11156,"fileName":"lively/morphic/Core.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":741},"className":"lively.morphic.Morph","_owner":{"__isSmartRef__":true,"id":709},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"748":{"name":"getBorderWidth","type":"propertyDef","startIndex":11158,"stopIndex":11224,"fileName":"lively/morphic/Core.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":741},"className":"lively.morphic.Morph","_owner":{"__isSmartRef__":true,"id":709},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"749":{"name":"setStrokeWidth","type":"propertyDef","startIndex":11226,"stopIndex":11497,"fileName":"lively/morphic/Core.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":741},"className":"lively.morphic.Morph","_owner":{"__isSmartRef__":true,"id":709},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"750":{"name":"getStrokeWidth","type":"propertyDef","startIndex":11499,"stopIndex":11631,"fileName":"lively/morphic/Core.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":741},"className":"lively.morphic.Morph","_owner":{"__isSmartRef__":true,"id":709},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"751":{"name":"setStrokeOpacity","type":"propertyDef","startIndex":11633,"stopIndex":11713,"fileName":"lively/morphic/Core.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":741},"className":"lively.morphic.Morph","_owner":{"__isSmartRef__":true,"id":709},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"752":{"name":"getStrokeOpacity","type":"propertyDef","startIndex":11715,"stopIndex":11785,"fileName":"lively/morphic/Core.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":741},"className":"lively.morphic.Morph","_owner":{"__isSmartRef__":true,"id":709},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"753":{"name":"setBorderRadius","type":"propertyDef","startIndex":11787,"stopIndex":11865,"fileName":"lively/morphic/Core.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":741},"className":"lively.morphic.Morph","_owner":{"__isSmartRef__":true,"id":709},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"754":{"name":"getBorderRadius","type":"propertyDef","startIndex":11867,"stopIndex":11935,"fileName":"lively/morphic/Core.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":741},"className":"lively.morphic.Morph","_owner":{"__isSmartRef__":true,"id":709},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"755":{"name":"setFillOpacity","type":"propertyDef","startIndex":11937,"stopIndex":12013,"fileName":"lively/morphic/Core.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":741},"className":"lively.morphic.Morph","_owner":{"__isSmartRef__":true,"id":709},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"756":{"name":"getFillOpacity","type":"propertyDef","startIndex":12016,"stopIndex":12082,"fileName":"lively/morphic/Core.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":741},"className":"lively.morphic.Morph","_owner":{"__isSmartRef__":true,"id":709},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"757":{"name":"getOpacity","type":"propertyDef","startIndex":12085,"stopIndex":12143,"fileName":"lively/morphic/Core.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":741},"className":"lively.morphic.Morph","_owner":{"__isSmartRef__":true,"id":709},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"758":{"name":"setOpacity","type":"propertyDef","startIndex":12145,"stopIndex":12205,"fileName":"lively/morphic/Core.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":741},"className":"lively.morphic.Morph","_owner":{"__isSmartRef__":true,"id":709},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"759":{"name":"setVertices","type":"propertyDef","startIndex":12209,"stopIndex":12264,"fileName":"lively/morphic/Core.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":741},"className":"lively.morphic.Morph","_owner":{"__isSmartRef__":true,"id":709},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"760":{"name":"world","type":"propertyDef","startIndex":12309,"stopIndex":12381,"fileName":"lively/morphic/Core.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":761},"className":"lively.morphic.Morph","_owner":{"__isSmartRef__":true,"id":709},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"761":{"name":"accessing -- morphic relationship","type":"categoryDef","startIndex":12270,"stopIndex":13473,"fileName":"lively/morphic/Core.js","_subElements":[{"__isSmartRef__":true,"id":760},{"__isSmartRef__":true,"id":762},{"__isSmartRef__":true,"id":763},{"__isSmartRef__":true,"id":764},{"__isSmartRef__":true,"id":765}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"762":{"name":"hand","type":"propertyDef","startIndex":12383,"stopIndex":12470,"fileName":"lively/morphic/Core.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":761},"className":"lively.morphic.Morph","_owner":{"__isSmartRef__":true,"id":709},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"763":{"name":"addMorph","type":"propertyDef","startIndex":12473,"stopIndex":12928,"fileName":"lively/morphic/Core.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":761},"className":"lively.morphic.Morph","_owner":{"__isSmartRef__":true,"id":709},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"764":{"name":"withAllSubmorphsDo","type":"propertyDef","startIndex":12930,"stopIndex":13173,"fileName":"lively/morphic/Core.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":761},"className":"lively.morphic.Morph","_owner":{"__isSmartRef__":true,"id":709},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"765":{"name":"submorphBounds","type":"propertyDef","startIndex":13175,"stopIndex":13470,"fileName":"lively/morphic/Core.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":761},"className":"lively.morphic.Morph","_owner":{"__isSmartRef__":true,"id":709},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"766":{"name":"getShape","type":"propertyDef","startIndex":13500,"stopIndex":13543,"fileName":"lively/morphic/Core.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":767},"className":"lively.morphic.Morph","_owner":{"__isSmartRef__":true,"id":709},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"767":{"name":"accessing -- shapes","type":"categoryDef","startIndex":13475,"stopIndex":13683,"fileName":"lively/morphic/Core.js","_subElements":[{"__isSmartRef__":true,"id":766},{"__isSmartRef__":true,"id":768}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"768":{"name":"setShape","type":"propertyDef","startIndex":13545,"stopIndex":13680,"fileName":"lively/morphic/Core.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":767},"className":"lively.morphic.Morph","_owner":{"__isSmartRef__":true,"id":709},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"769":{"name":"renderContext","type":"propertyDef","startIndex":13713,"stopIndex":13853,"fileName":"lively/morphic/Core.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":770},"className":"lively.morphic.Morph","_owner":{"__isSmartRef__":true,"id":709},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"770":{"name":"accessing -- rendering","type":"categoryDef","startIndex":13685,"stopIndex":14063,"fileName":"lively/morphic/Core.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":"setRenderContext","type":"propertyDef","startIndex":13855,"stopIndex":13943,"fileName":"lively/morphic/Core.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":770},"className":"lively.morphic.Morph","_owner":{"__isSmartRef__":true,"id":709},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"772":{"name":"renderContextDispatch","type":"propertyDef","startIndex":13945,"stopIndex":14059,"fileName":"lively/morphic/Core.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":770},"className":"lively.morphic.Morph","_owner":{"__isSmartRef__":true,"id":709},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"773":{"name":"remove","type":"propertyDef","startIndex":14084,"stopIndex":14220,"fileName":"lively/morphic/Core.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":774},"className":"lively.morphic.Morph","_owner":{"__isSmartRef__":true,"id":709},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"774":{"name":"morph removal","type":"categoryDef","startIndex":14065,"stopIndex":14331,"fileName":"lively/morphic/Core.js","_subElements":[{"__isSmartRef__":true,"id":773},{"__isSmartRef__":true,"id":775}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"775":{"name":"removeMorph","type":"propertyDef","startIndex":14222,"stopIndex":14328,"fileName":"lively/morphic/Core.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":774},"className":"lively.morphic.Morph","_owner":{"__isSmartRef__":true,"id":709},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"776":{"name":"localize","type":"propertyDef","startIndex":14353,"stopIndex":14544,"fileName":"lively/morphic/Core.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":777},"className":"lively.morphic.Morph","_owner":{"__isSmartRef__":true,"id":709},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"777":{"name":"transformation","type":"categoryDef","startIndex":14333,"stopIndex":16044,"fileName":"lively/morphic/Core.js","_subElements":[{"__isSmartRef__":true,"id":776},{"__isSmartRef__":true,"id":778},{"__isSmartRef__":true,"id":779},{"__isSmartRef__":true,"id":780},{"__isSmartRef__":true,"id":781},{"__isSmartRef__":true,"id":782},{"__isSmartRef__":true,"id":783},{"__isSmartRef__":true,"id":784},{"__isSmartRef__":true,"id":785}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"778":{"name":"transformToMorph","type":"propertyDef","startIndex":14546,"stopIndex":14900,"fileName":"lively/morphic/Core.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":777},"className":"lively.morphic.Morph","_owner":{"__isSmartRef__":true,"id":709},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"779":{"name":"transformForNewOwner","type":"propertyDef","startIndex":14902,"stopIndex":15027,"fileName":"lively/morphic/Core.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":777},"className":"lively.morphic.Morph","_owner":{"__isSmartRef__":true,"id":709},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"780":{"name":"getGlobalTransform","type":"propertyDef","startIndex":15030,"stopIndex":15319,"fileName":"lively/morphic/Core.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":777},"className":"lively.morphic.Morph","_owner":{"__isSmartRef__":true,"id":709},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"781":{"name":"worldPoint","type":"propertyDef","startIndex":15321,"stopIndex":15419,"fileName":"lively/morphic/Core.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":777},"className":"lively.morphic.Morph","_owner":{"__isSmartRef__":true,"id":709},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"782":{"name":"getTransform","type":"propertyDef","startIndex":15422,"stopIndex":15581,"fileName":"lively/morphic/Core.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":777},"className":"lively.morphic.Morph","_owner":{"__isSmartRef__":true,"id":709},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"783":{"name":"setTransform","type":"propertyDef","startIndex":15583,"stopIndex":15749,"fileName":"lively/morphic/Core.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":777},"className":"lively.morphic.Morph","_owner":{"__isSmartRef__":true,"id":709},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"784":{"name":"fullContainsWorldPoint","type":"propertyDef","startIndex":15752,"stopIndex":15929,"fileName":"lively/morphic/Core.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":777},"className":"lively.morphic.Morph","_owner":{"__isSmartRef__":true,"id":709},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"785":{"name":"fullContainsPoint","type":"propertyDef","startIndex":15931,"stopIndex":16041,"fileName":"lively/morphic/Core.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":777},"className":"lively.morphic.Morph","_owner":{"__isSmartRef__":true,"id":709},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"786":{"name":"addScript","type":"propertyDef","startIndex":16074,"stopIndex":16213,"fileName":"lively/morphic/Core.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":787},"className":"lively.morphic.Morph","_owner":{"__isSmartRef__":true,"id":709},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"787":{"name":"prototypical scripting","type":"categoryDef","startIndex":16046,"stopIndex":16216,"fileName":"lively/morphic/Core.js","_subElements":[{"__isSmartRef__":true,"id":786}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"788":{"name":"startStepping","type":"propertyDef","startIndex":16233,"stopIndex":16469,"fileName":"lively/morphic/Core.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":789},"className":"lively.morphic.Morph","_owner":{"__isSmartRef__":true,"id":709},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"789":{"name":"scripting","type":"categoryDef","startIndex":16218,"stopIndex":18101,"fileName":"lively/morphic/Core.js","_subElements":[{"__isSmartRef__":true,"id":788},{"__isSmartRef__":true,"id":790},{"__isSmartRef__":true,"id":791},{"__isSmartRef__":true,"id":792},{"__isSmartRef__":true,"id":793},{"__isSmartRef__":true,"id":794},{"__isSmartRef__":true,"id":795},{"__isSmartRef__":true,"id":796},{"__isSmartRef__":true,"id":797},{"__isSmartRef__":true,"id":798}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"790":{"name":"stopStepping","type":"propertyDef","startIndex":16471,"stopIndex":16552,"fileName":"lively/morphic/Core.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":789},"className":"lively.morphic.Morph","_owner":{"__isSmartRef__":true,"id":709},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"791":{"name":"stopSteppingScriptNamed","type":"propertyDef","startIndex":16554,"stopIndex":16784,"fileName":"lively/morphic/Core.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":789},"className":"lively.morphic.Morph","_owner":{"__isSmartRef__":true,"id":709},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"792":{"name":"suspendStepping","type":"propertyDef","startIndex":16788,"stopIndex":16851,"fileName":"lively/morphic/Core.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":789},"className":"lively.morphic.Morph","_owner":{"__isSmartRef__":true,"id":709},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"793":{"name":"suspendSteppingAll","type":"propertyDef","startIndex":16854,"stopIndex":16956,"fileName":"lively/morphic/Core.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":789},"className":"lively.morphic.Morph","_owner":{"__isSmartRef__":true,"id":709},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"794":{"name":"resumeStepping","type":"propertyDef","startIndex":16958,"stopIndex":17023,"fileName":"lively/morphic/Core.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":789},"className":"lively.morphic.Morph","_owner":{"__isSmartRef__":true,"id":709},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"795":{"name":"resumeSteppingAll","type":"propertyDef","startIndex":17026,"stopIndex":17134,"fileName":"lively/morphic/Core.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":789},"className":"lively.morphic.Morph","_owner":{"__isSmartRef__":true,"id":709},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"796":{"name":"animatedInterpolateTo","type":"propertyDef","startIndex":17136,"stopIndex":17578,"fileName":"lively/morphic/Core.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":789},"className":"lively.morphic.Morph","_owner":{"__isSmartRef__":true,"id":709},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"797":{"name":"animatedFollowPath","type":"propertyDef","startIndex":17580,"stopIndex":17805,"fileName":"lively/morphic/Core.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":789},"className":"lively.morphic.Morph","_owner":{"__isSmartRef__":true,"id":709},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"798":{"name":"animatedPathStep","type":"propertyDef","startIndex":17807,"stopIndex":18098,"fileName":"lively/morphic/Core.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":789},"className":"lively.morphic.Morph","_owner":{"__isSmartRef__":true,"id":709},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"799":{"name":"getStyle","type":"propertyDef","startIndex":18116,"stopIndex":18282,"fileName":"lively/morphic/Core.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":800},"className":"lively.morphic.Morph","_owner":{"__isSmartRef__":true,"id":709},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"800":{"name":"styling","type":"categoryDef","startIndex":18103,"stopIndex":20922,"fileName":"lively/morphic/Core.js","_subElements":[{"__isSmartRef__":true,"id":799},{"__isSmartRef__":true,"id":801}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"801":{"name":"applyStyle","type":"propertyDef","startIndex":18284,"stopIndex":20918,"fileName":"lively/morphic/Core.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":800},"className":"lively.morphic.Morph","_owner":{"__isSmartRef__":true,"id":709},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"802":{"name":"toString","type":"propertyDef","startIndex":20939,"stopIndex":21082,"fileName":"lively/morphic/Core.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":803},"className":"lively.morphic.Morph","_owner":{"__isSmartRef__":true,"id":709},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"803":{"name":"debugging","type":"categoryDef","startIndex":20924,"stopIndex":21084,"fileName":"lively/morphic/Core.js","_subElements":[{"__isSmartRef__":true,"id":802}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"804":{"name":null,"type":"comment","startIndex":21088,"stopIndex":21088,"fileName":"lively/morphic/Core.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"805":{"name":"lively.morphic.World","type":"klassDef","startIndex":21089,"stopIndex":22821,"fileName":"lively/morphic/Core.js","_subElements":[{"__isSmartRef__":true,"id":806},{"__isSmartRef__":true,"id":808},{"__isSmartRef__":true,"id":810},{"__isSmartRef__":true,"id":811},{"__isSmartRef__":true,"id":812},{"__isSmartRef__":true,"id":813},{"__isSmartRef__":true,"id":815},{"__isSmartRef__":true,"id":816},{"__isSmartRef__":true,"id":818},{"__isSmartRef__":true,"id":820}],"sourceControl":{"__isSmartRef__":true,"id":637},"superclassName":"lively.morphic.Morph","categories":[{"__isSmartRef__":true,"id":807},{"__isSmartRef__":true,"id":809},{"__isSmartRef__":true,"id":814},{"__isSmartRef__":true,"id":817},{"__isSmartRef__":true,"id":819}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"806":{"name":"style","type":"propertyDef","startIndex":21157,"stopIndex":21271,"fileName":"lively/morphic/Core.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":807},"className":"lively.morphic.World","_owner":{"__isSmartRef__":true,"id":805},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"807":{"name":"settings","type":"categoryDef","startIndex":21143,"stopIndex":21274,"fileName":"lively/morphic/Core.js","_subElements":[{"__isSmartRef__":true,"id":806}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"808":{"name":"world","type":"propertyDef","startIndex":21291,"stopIndex":21325,"fileName":"lively/morphic/Core.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":809},"className":"lively.morphic.World","_owner":{"__isSmartRef__":true,"id":805},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"809":{"name":"accessing","type":"categoryDef","startIndex":21276,"stopIndex":21911,"fileName":"lively/morphic/Core.js","_subElements":[{"__isSmartRef__":true,"id":808},{"__isSmartRef__":true,"id":810},{"__isSmartRef__":true,"id":811},{"__isSmartRef__":true,"id":812}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"810":{"name":"firstHand","type":"propertyDef","startIndex":21327,"stopIndex":21388,"fileName":"lively/morphic/Core.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":809},"className":"lively.morphic.World","_owner":{"__isSmartRef__":true,"id":805},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"811":{"name":"windowBounds","type":"propertyDef","startIndex":21390,"stopIndex":21814,"fileName":"lively/morphic/Core.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":809},"className":"lively.morphic.World","_owner":{"__isSmartRef__":true,"id":805},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"812":{"name":"visibleBounds","type":"propertyDef","startIndex":21817,"stopIndex":21908,"fileName":"lively/morphic/Core.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":809},"className":"lively.morphic.World","_owner":{"__isSmartRef__":true,"id":805},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"813":{"name":"displayOnCanvas","type":"propertyDef","startIndex":21928,"stopIndex":22061,"fileName":"lively/morphic/Core.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":814},"className":"lively.morphic.World","_owner":{"__isSmartRef__":true,"id":805},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"814":{"name":"rendering","type":"categoryDef","startIndex":21913,"stopIndex":22478,"fileName":"lively/morphic/Core.js","_subElements":[{"__isSmartRef__":true,"id":813},{"__isSmartRef__":true,"id":815}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"815":{"name":"hideHostMouseCursor","type":"propertyDef","startIndex":22063,"stopIndex":22475,"fileName":"lively/morphic/Core.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":814},"className":"lively.morphic.World","_owner":{"__isSmartRef__":true,"id":805},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"816":{"name":"addHandMorph","type":"propertyDef","startIndex":22496,"stopIndex":22680,"fileName":"lively/morphic/Core.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":817},"className":"lively.morphic.World","_owner":{"__isSmartRef__":true,"id":805},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"817":{"name":"hand morph","type":"categoryDef","startIndex":22480,"stopIndex":22683,"fileName":"lively/morphic/Core.js","_subElements":[{"__isSmartRef__":true,"id":816}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"818":{"name":"setChangeSet","type":"propertyDef","startIndex":22698,"stopIndex":22763,"fileName":"lively/morphic/Core.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":819},"className":"lively.morphic.World","_owner":{"__isSmartRef__":true,"id":805},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"819":{"name":"changes","type":"categoryDef","startIndex":22685,"stopIndex":22818,"fileName":"lively/morphic/Core.js","_subElements":[{"__isSmartRef__":true,"id":818},{"__isSmartRef__":true,"id":820}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"820":{"name":"getChangeSet","type":"propertyDef","startIndex":22765,"stopIndex":22816,"fileName":"lively/morphic/Core.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":819},"className":"lively.morphic.World","_owner":{"__isSmartRef__":true,"id":805},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"821":{"name":null,"type":"comment","startIndex":22822,"stopIndex":22822,"fileName":"lively/morphic/Core.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"822":{"name":"lively.morphic.World","type":"klassExtensionDef","startIndex":22823,"stopIndex":23482,"fileName":"lively/morphic/Core.js","_subElements":[{"__isSmartRef__":true,"id":823},{"__isSmartRef__":true,"id":825},{"__isSmartRef__":true,"id":826}],"sourceControl":{"__isSmartRef__":true,"id":637},"categories":[{"__isSmartRef__":true,"id":824}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"823":{"name":"current","type":"propertyDef","startIndex":22861,"stopIndex":22910,"fileName":"lively/morphic/Core.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":true,"category":{"__isSmartRef__":true,"id":824},"className":"lively.morphic.World","_owner":{"__isSmartRef__":true,"id":822},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"824":{"name":"default category","type":"categoryDef","startIndex":22859,"stopIndex":23479,"fileName":"lively/morphic/Core.js","_subElements":[{"__isSmartRef__":true,"id":823},{"__isSmartRef__":true,"id":825},{"__isSmartRef__":true,"id":826}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"825":{"name":"createOn","type":"propertyDef","startIndex":22912,"stopIndex":23211,"fileName":"lively/morphic/Core.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":true,"category":{"__isSmartRef__":true,"id":824},"className":"lively.morphic.World","_owner":{"__isSmartRef__":true,"id":822},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"826":{"name":"createFromJSOOn","type":"propertyDef","startIndex":23213,"stopIndex":23476,"fileName":"lively/morphic/Core.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":true,"category":{"__isSmartRef__":true,"id":824},"className":"lively.morphic.World","_owner":{"__isSmartRef__":true,"id":822},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"827":{"name":null,"type":"comment","startIndex":23483,"stopIndex":23483,"fileName":"lively/morphic/Core.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"828":{"name":"lively.morphic.Box","type":"klassDef","startIndex":23484,"stopIndex":23750,"fileName":"lively/morphic/Core.js","_subElements":[{"__isSmartRef__":true,"id":829}],"sourceControl":{"__isSmartRef__":true,"id":637},"superclassName":"lively.morphic.Morph","categories":[{"__isSmartRef__":true,"id":830}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"829":{"name":"initialize","type":"propertyDef","startIndex":23554,"stopIndex":23745,"fileName":"lively/morphic/Core.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":830},"className":"lively.morphic.Box","_owner":{"__isSmartRef__":true,"id":828},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"830":{"name":"initializing","type":"categoryDef","startIndex":23536,"stopIndex":23747,"fileName":"lively/morphic/Core.js","_subElements":[{"__isSmartRef__":true,"id":829}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"831":{"name":null,"type":"comment","startIndex":23751,"stopIndex":23751,"fileName":"lively/morphic/Core.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"832":{"name":"lively.morphic.List","type":"klassDef","startIndex":23752,"stopIndex":23803,"fileName":"lively/morphic/Core.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"superclassName":"lively.morphic.Box","categories":[],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"833":{"name":"lively.morphic.Clip","type":"klassDef","startIndex":23804,"stopIndex":24236,"fileName":"lively/morphic/Core.js","_subElements":[{"__isSmartRef__":true,"id":834},{"__isSmartRef__":true,"id":836}],"sourceControl":{"__isSmartRef__":true,"id":637},"superclassName":"lively.morphic.Box","categories":[{"__isSmartRef__":true,"id":835},{"__isSmartRef__":true,"id":837}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"834":{"name":"initialize","type":"propertyDef","startIndex":23873,"stopIndex":23993,"fileName":"lively/morphic/Core.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":835},"className":"lively.morphic.Clip","_owner":{"__isSmartRef__":true,"id":833},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"835":{"name":"initializing","type":"categoryDef","startIndex":23855,"stopIndex":23996,"fileName":"lively/morphic/Core.js","_subElements":[{"__isSmartRef__":true,"id":834}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"836":{"name":"setExtent","type":"propertyDef","startIndex":24013,"stopIndex":24231,"fileName":"lively/morphic/Core.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":837},"className":"lively.morphic.Clip","_owner":{"__isSmartRef__":true,"id":833},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"837":{"name":"accessing","type":"categoryDef","startIndex":23998,"stopIndex":24233,"fileName":"lively/morphic/Core.js","_subElements":[{"__isSmartRef__":true,"id":836}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"838":{"name":null,"type":"comment","startIndex":24237,"stopIndex":24237,"fileName":"lively/morphic/Core.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"839":{"name":"lively.morphic.Script","type":"klassDef","startIndex":24238,"stopIndex":25035,"fileName":"lively/morphic/Core.js","_subElements":[{"__isSmartRef__":true,"id":840},{"__isSmartRef__":true,"id":842},{"__isSmartRef__":true,"id":843},{"__isSmartRef__":true,"id":845},{"__isSmartRef__":true,"id":846},{"__isSmartRef__":true,"id":847}],"sourceControl":{"__isSmartRef__":true,"id":637},"superclassName":"Object","categories":[{"__isSmartRef__":true,"id":841},{"__isSmartRef__":true,"id":844}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"840":{"name":"execute","type":"propertyDef","startIndex":24292,"stopIndex":24359,"fileName":"lively/morphic/Core.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":841},"className":"lively.morphic.Script","_owner":{"__isSmartRef__":true,"id":839},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"841":{"name":"ticking","type":"categoryDef","startIndex":24279,"stopIndex":24569,"fileName":"lively/morphic/Core.js","_subElements":[{"__isSmartRef__":true,"id":840},{"__isSmartRef__":true,"id":842}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"842":{"name":"tick","type":"propertyDef","startIndex":24361,"stopIndex":24566,"fileName":"lively/morphic/Core.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":841},"className":"lively.morphic.Script","_owner":{"__isSmartRef__":true,"id":839},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"843":{"name":"startTicking","type":"propertyDef","startIndex":24598,"stopIndex":24745,"fileName":"lively/morphic/Core.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":844},"className":"lively.morphic.Script","_owner":{"__isSmartRef__":true,"id":839},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"844":{"name":"starting and stopping","type":"categoryDef","startIndex":24571,"stopIndex":25032,"fileName":"lively/morphic/Core.js","_subElements":[{"__isSmartRef__":true,"id":843},{"__isSmartRef__":true,"id":845},{"__isSmartRef__":true,"id":846},{"__isSmartRef__":true,"id":847}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"845":{"name":"stop","type":"propertyDef","startIndex":24747,"stopIndex":24836,"fileName":"lively/morphic/Core.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":844},"className":"lively.morphic.Script","_owner":{"__isSmartRef__":true,"id":839},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"846":{"name":"resume","type":"propertyDef","startIndex":24838,"stopIndex":24962,"fileName":"lively/morphic/Core.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":844},"className":"lively.morphic.Script","_owner":{"__isSmartRef__":true,"id":839},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"847":{"name":"suspend","type":"propertyDef","startIndex":24964,"stopIndex":25029,"fileName":"lively/morphic/Core.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":844},"className":"lively.morphic.Script","_owner":{"__isSmartRef__":true,"id":839},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"848":{"name":"lively.morphic.FunctionScript","type":"klassDef","startIndex":25036,"stopIndex":25245,"fileName":"lively/morphic/Core.js","_subElements":[{"__isSmartRef__":true,"id":849},{"__isSmartRef__":true,"id":851}],"sourceControl":{"__isSmartRef__":true,"id":637},"superclassName":"lively.morphic.Script","categories":[{"__isSmartRef__":true,"id":850},{"__isSmartRef__":true,"id":852}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"849":{"name":"initialize","type":"propertyDef","startIndex":25118,"stopIndex":25182,"fileName":"lively/morphic/Core.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":850},"className":"lively.morphic.FunctionScript","_owner":{"__isSmartRef__":true,"id":848},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"850":{"name":"initializing","type":"categoryDef","startIndex":25100,"stopIndex":25185,"fileName":"lively/morphic/Core.js","_subElements":[{"__isSmartRef__":true,"id":849}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"851":{"name":"execute","type":"propertyDef","startIndex":25200,"stopIndex":25240,"fileName":"lively/morphic/Core.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":852},"className":"lively.morphic.FunctionScript","_owner":{"__isSmartRef__":true,"id":848},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"852":{"name":"ticking","type":"categoryDef","startIndex":25187,"stopIndex":25242,"fileName":"lively/morphic/Core.js","_subElements":[{"__isSmartRef__":true,"id":851}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"853":{"name":"lively.morphic.TargetScript","type":"klassDef","startIndex":25246,"stopIndex":25562,"fileName":"lively/morphic/Core.js","_subElements":[{"__isSmartRef__":true,"id":854},{"__isSmartRef__":true,"id":856}],"sourceControl":{"__isSmartRef__":true,"id":637},"superclassName":"lively.morphic.Script","categories":[{"__isSmartRef__":true,"id":855},{"__isSmartRef__":true,"id":857}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"854":{"name":"initialize","type":"propertyDef","startIndex":25326,"stopIndex":25454,"fileName":"lively/morphic/Core.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":855},"className":"lively.morphic.TargetScript","_owner":{"__isSmartRef__":true,"id":853},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"855":{"name":"initializing","type":"categoryDef","startIndex":25308,"stopIndex":25457,"fileName":"lively/morphic/Core.js","_subElements":[{"__isSmartRef__":true,"id":854}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"856":{"name":"execute","type":"propertyDef","startIndex":25472,"stopIndex":25557,"fileName":"lively/morphic/Core.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":857},"className":"lively.morphic.TargetScript","_owner":{"__isSmartRef__":true,"id":853},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"857":{"name":"ticking","type":"categoryDef","startIndex":25459,"stopIndex":25559,"fileName":"lively/morphic/Core.js","_subElements":[{"__isSmartRef__":true,"id":856}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"858":{"name":null,"type":"comment","startIndex":25563,"stopIndex":25563,"fileName":"lively/morphic/Core.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"859":{"name":"lively.morphic.Script","type":"klassExtensionDef","startIndex":25564,"stopIndex":25814,"fileName":"lively/morphic/Core.js","_subElements":[{"__isSmartRef__":true,"id":860},{"__isSmartRef__":true,"id":862}],"sourceControl":{"__isSmartRef__":true,"id":637},"categories":[{"__isSmartRef__":true,"id":861}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"860":{"name":"forFunction","type":"propertyDef","startIndex":25603,"stopIndex":25686,"fileName":"lively/morphic/Core.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":true,"category":{"__isSmartRef__":true,"id":861},"className":"lively.morphic.Script","_owner":{"__isSmartRef__":true,"id":859},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"861":{"name":"default category","type":"categoryDef","startIndex":25601,"stopIndex":25811,"fileName":"lively/morphic/Core.js","_subElements":[{"__isSmartRef__":true,"id":860},{"__isSmartRef__":true,"id":862}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"862":{"name":"forTarget","type":"propertyDef","startIndex":25688,"stopIndex":25809,"fileName":"lively/morphic/Core.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":true,"category":{"__isSmartRef__":true,"id":861},"className":"lively.morphic.Script","_owner":{"__isSmartRef__":true,"id":859},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"863":{"name":null,"type":"comment","startIndex":25815,"stopIndex":25815,"fileName":"lively/morphic/Core.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"864":{"target":{"__isSmartRef__":true,"id":865},"browser":{"__isSmartRef__":true,"id":439},"parent":{"__isSmartRef__":true,"id":636},"moduleName":"lively/morphic/Events.js","showAll":false,"__LivelyClassName__":"lively.ide.CompleteFileFragmentNode","__SourceModuleName__":"Global.lively.ide.SystemBrowserNodes"},"865":{"name":"lively.morphic.Events","type":"moduleDef","startIndex":0,"stopIndex":31905,"fileName":"lively/morphic/Events.js","_subElements":[{"__isSmartRef__":true,"id":866},{"__isSmartRef__":true,"id":867},{"__isSmartRef__":true,"id":890},{"__isSmartRef__":true,"id":893},{"__isSmartRef__":true,"id":914},{"__isSmartRef__":true,"id":915},{"__isSmartRef__":true,"id":929},{"__isSmartRef__":true,"id":930},{"__isSmartRef__":true,"id":931},{"__isSmartRef__":true,"id":932},{"__isSmartRef__":true,"id":970},{"__isSmartRef__":true,"id":971},{"__isSmartRef__":true,"id":982},{"__isSmartRef__":true,"id":989},{"__isSmartRef__":true,"id":992},{"__isSmartRef__":true,"id":993},{"__isSmartRef__":true,"id":1011},{"__isSmartRef__":true,"id":1034},{"__isSmartRef__":true,"id":1035},{"__isSmartRef__":true,"id":1038},{"__isSmartRef__":true,"id":1041},{"__isSmartRef__":true,"id":1044},{"__isSmartRef__":true,"id":1045},{"__isSmartRef__":true,"id":1062}],"sourceControl":{"__isSmartRef__":true,"id":637},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"866":{"name":null,"type":"comment","startIndex":197,"stopIndex":197,"fileName":"lively/morphic/Events.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"867":{"name":"lively.morphic.EventHandler","type":"klassDef","startIndex":198,"stopIndex":6325,"fileName":"lively/morphic/Events.js","_subElements":[{"__isSmartRef__":true,"id":868},{"__isSmartRef__":true,"id":870},{"__isSmartRef__":true,"id":872},{"__isSmartRef__":true,"id":873},{"__isSmartRef__":true,"id":875},{"__isSmartRef__":true,"id":876},{"__isSmartRef__":true,"id":877},{"__isSmartRef__":true,"id":878},{"__isSmartRef__":true,"id":880},{"__isSmartRef__":true,"id":881},{"__isSmartRef__":true,"id":882},{"__isSmartRef__":true,"id":884},{"__isSmartRef__":true,"id":886},{"__isSmartRef__":true,"id":887},{"__isSmartRef__":true,"id":888}],"sourceControl":{"__isSmartRef__":true,"id":637},"superclassName":"Object","categories":[{"__isSmartRef__":true,"id":869},{"__isSmartRef__":true,"id":871},{"__isSmartRef__":true,"id":874},{"__isSmartRef__":true,"id":879},{"__isSmartRef__":true,"id":883},{"__isSmartRef__":true,"id":885},{"__isSmartRef__":true,"id":889}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"868":{"name":"initialize","type":"propertyDef","startIndex":263,"stopIndex":345,"fileName":"lively/morphic/Events.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":869},"className":"lively.morphic.EventHandler","_owner":{"__isSmartRef__":true,"id":867},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"869":{"name":"initializing","type":"categoryDef","startIndex":245,"stopIndex":349,"fileName":"lively/morphic/Events.js","_subElements":[{"__isSmartRef__":true,"id":868}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"870":{"name":"eventSpecsDo","type":"propertyDef","startIndex":366,"stopIndex":535,"fileName":"lively/morphic/Events.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":871},"className":"lively.morphic.EventHandler","_owner":{"__isSmartRef__":true,"id":867},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"871":{"name":"accessing","type":"categoryDef","startIndex":351,"stopIndex":654,"fileName":"lively/morphic/Events.js","_subElements":[{"__isSmartRef__":true,"id":870},{"__isSmartRef__":true,"id":872}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"872":{"name":"hand","type":"propertyDef","startIndex":537,"stopIndex":650,"fileName":"lively/morphic/Events.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":871},"className":"lively.morphic.EventHandler","_owner":{"__isSmartRef__":true,"id":867},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"873":{"name":"register","type":"propertyDef","startIndex":673,"stopIndex":758,"fileName":"lively/morphic/Events.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":874},"className":"lively.morphic.EventHandler","_owner":{"__isSmartRef__":true,"id":867},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"874":{"name":"registering","type":"categoryDef","startIndex":656,"stopIndex":2365,"fileName":"lively/morphic/Events.js","_subElements":[{"__isSmartRef__":true,"id":873},{"__isSmartRef__":true,"id":875},{"__isSmartRef__":true,"id":876},{"__isSmartRef__":true,"id":877}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"875":{"name":"enable","type":"propertyDef","startIndex":760,"stopIndex":910,"fileName":"lively/morphic/Events.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":874},"className":"lively.morphic.EventHandler","_owner":{"__isSmartRef__":true,"id":867},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"876":{"name":"registerHTMLAndSVG","type":"propertyDef","startIndex":912,"stopIndex":1653,"fileName":"lively/morphic/Events.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":874},"className":"lively.morphic.EventHandler","_owner":{"__isSmartRef__":true,"id":867},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"877":{"name":"registerCANVAS","type":"propertyDef","startIndex":1655,"stopIndex":2362,"fileName":"lively/morphic/Events.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":874},"className":"lively.morphic.EventHandler","_owner":{"__isSmartRef__":true,"id":867},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"878":{"name":"disable","type":"propertyDef","startIndex":2386,"stopIndex":2445,"fileName":"lively/morphic/Events.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":879},"className":"lively.morphic.EventHandler","_owner":{"__isSmartRef__":true,"id":867},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"879":{"name":"unregistering","type":"categoryDef","startIndex":2367,"stopIndex":2905,"fileName":"lively/morphic/Events.js","_subElements":[{"__isSmartRef__":true,"id":878},{"__isSmartRef__":true,"id":880},{"__isSmartRef__":true,"id":881}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"880":{"name":"unregisterFromDispatchTable","type":"propertyDef","startIndex":2447,"stopIndex":2698,"fileName":"lively/morphic/Events.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":879},"className":"lively.morphic.EventHandler","_owner":{"__isSmartRef__":true,"id":867},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"881":{"name":"unregisterHTMLAndSVGAndCANVAS","type":"propertyDef","startIndex":2700,"stopIndex":2902,"fileName":"lively/morphic/Events.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":879},"className":"lively.morphic.EventHandler","_owner":{"__isSmartRef__":true,"id":867},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"882":{"name":"update","type":"propertyDef","startIndex":2921,"stopIndex":2980,"fileName":"lively/morphic/Events.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":883},"className":"lively.morphic.EventHandler","_owner":{"__isSmartRef__":true,"id":867},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"883":{"name":"updating","type":"categoryDef","startIndex":2907,"stopIndex":2983,"fileName":"lively/morphic/Events.js","_subElements":[{"__isSmartRef__":true,"id":882}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"884":{"name":"handleEvent","type":"propertyDef","startIndex":3004,"stopIndex":3847,"fileName":"lively/morphic/Events.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":885},"className":"lively.morphic.EventHandler","_owner":{"__isSmartRef__":true,"id":867},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"885":{"name":"handle events","type":"categoryDef","startIndex":2985,"stopIndex":6207,"fileName":"lively/morphic/Events.js","_subElements":[{"__isSmartRef__":true,"id":884},{"__isSmartRef__":true,"id":886},{"__isSmartRef__":true,"id":887}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"886":{"name":"patchEvent","type":"propertyDef","startIndex":3849,"stopIndex":5729,"fileName":"lively/morphic/Events.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":885},"className":"lively.morphic.EventHandler","_owner":{"__isSmartRef__":true,"id":867},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"887":{"name":"handleEventCANVAS","type":"propertyDef","startIndex":5732,"stopIndex":6203,"fileName":"lively/morphic/Events.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":885},"className":"lively.morphic.EventHandler","_owner":{"__isSmartRef__":true,"id":867},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"888":{"name":"toString","type":"propertyDef","startIndex":6224,"stopIndex":6320,"fileName":"lively/morphic/Events.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":889},"className":"lively.morphic.EventHandler","_owner":{"__isSmartRef__":true,"id":867},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"889":{"name":"debugging","type":"categoryDef","startIndex":6209,"stopIndex":6322,"fileName":"lively/morphic/Events.js","_subElements":[{"__isSmartRef__":true,"id":888}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"890":{"name":"lively.morphic.EventHandler","type":"klassExtensionDef","startIndex":6326,"stopIndex":6416,"fileName":"lively/morphic/Events.js","_subElements":[{"__isSmartRef__":true,"id":891}],"sourceControl":{"__isSmartRef__":true,"id":637},"categories":[{"__isSmartRef__":true,"id":892}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"891":{"name":"prepareEventSystem","type":"propertyDef","startIndex":6371,"stopIndex":6411,"fileName":"lively/morphic/Events.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":true,"category":{"__isSmartRef__":true,"id":892},"className":"lively.morphic.EventHandler","_owner":{"__isSmartRef__":true,"id":890},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"892":{"name":"default category","type":"categoryDef","startIndex":6369,"stopIndex":6413,"fileName":"lively/morphic/Events.js","_subElements":[{"__isSmartRef__":true,"id":891}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"893":{"name":"Event","type":"klassExtensionDef","startIndex":6417,"stopIndex":6860,"fileName":"lively/morphic/Events.js","_subElements":[{"__isSmartRef__":true,"id":894},{"__isSmartRef__":true,"id":896},{"__isSmartRef__":true,"id":897},{"__isSmartRef__":true,"id":898},{"__isSmartRef__":true,"id":899},{"__isSmartRef__":true,"id":900},{"__isSmartRef__":true,"id":901},{"__isSmartRef__":true,"id":902},{"__isSmartRef__":true,"id":903},{"__isSmartRef__":true,"id":904},{"__isSmartRef__":true,"id":905},{"__isSmartRef__":true,"id":906},{"__isSmartRef__":true,"id":907},{"__isSmartRef__":true,"id":908},{"__isSmartRef__":true,"id":909},{"__isSmartRef__":true,"id":910},{"__isSmartRef__":true,"id":911},{"__isSmartRef__":true,"id":912},{"__isSmartRef__":true,"id":913}],"sourceControl":{"__isSmartRef__":true,"id":637},"categories":[{"__isSmartRef__":true,"id":895}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"894":{"name":"KEY_BACKSPACE","type":"propertyDef","startIndex":6440,"stopIndex":6487,"fileName":"lively/morphic/Events.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":true,"category":{"__isSmartRef__":true,"id":895},"className":"Event","_owner":{"__isSmartRef__":true,"id":893},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"895":{"name":"default category","type":"categoryDef","startIndex":6438,"stopIndex":6857,"fileName":"lively/morphic/Events.js","_subElements":[{"__isSmartRef__":true,"id":894},{"__isSmartRef__":true,"id":896},{"__isSmartRef__":true,"id":897},{"__isSmartRef__":true,"id":898},{"__isSmartRef__":true,"id":899},{"__isSmartRef__":true,"id":900},{"__isSmartRef__":true,"id":901},{"__isSmartRef__":true,"id":902},{"__isSmartRef__":true,"id":903},{"__isSmartRef__":true,"id":904},{"__isSmartRef__":true,"id":905},{"__isSmartRef__":true,"id":906},{"__isSmartRef__":true,"id":907},{"__isSmartRef__":true,"id":908},{"__isSmartRef__":true,"id":909},{"__isSmartRef__":true,"id":910},{"__isSmartRef__":true,"id":911},{"__isSmartRef__":true,"id":912},{"__isSmartRef__":true,"id":913}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"896":{"name":"KEY_TAB","type":"propertyDef","startIndex":6489,"stopIndex":6506,"fileName":"lively/morphic/Events.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":true,"category":{"__isSmartRef__":true,"id":895},"className":"Event","_owner":{"__isSmartRef__":true,"id":893},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"897":{"name":"KEY_RETURN","type":"propertyDef","startIndex":6508,"stopIndex":6525,"fileName":"lively/morphic/Events.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":true,"category":{"__isSmartRef__":true,"id":895},"className":"Event","_owner":{"__isSmartRef__":true,"id":893},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"898":{"name":"KEY_ESC","type":"propertyDef","startIndex":6527,"stopIndex":6544,"fileName":"lively/morphic/Events.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":true,"category":{"__isSmartRef__":true,"id":895},"className":"Event","_owner":{"__isSmartRef__":true,"id":893},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"899":{"name":"KEY_LEFT","type":"propertyDef","startIndex":6546,"stopIndex":6563,"fileName":"lively/morphic/Events.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":true,"category":{"__isSmartRef__":true,"id":895},"className":"Event","_owner":{"__isSmartRef__":true,"id":893},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"900":{"name":"KEY_UP","type":"propertyDef","startIndex":6565,"stopIndex":6582,"fileName":"lively/morphic/Events.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":true,"category":{"__isSmartRef__":true,"id":895},"className":"Event","_owner":{"__isSmartRef__":true,"id":893},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"901":{"name":"KEY_RIGHT","type":"propertyDef","startIndex":6584,"stopIndex":6601,"fileName":"lively/morphic/Events.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":true,"category":{"__isSmartRef__":true,"id":895},"className":"Event","_owner":{"__isSmartRef__":true,"id":893},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"902":{"name":"KEY_DOWN","type":"propertyDef","startIndex":6603,"stopIndex":6620,"fileName":"lively/morphic/Events.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":true,"category":{"__isSmartRef__":true,"id":895},"className":"Event","_owner":{"__isSmartRef__":true,"id":893},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"903":{"name":"KEY_DELETE","type":"propertyDef","startIndex":6622,"stopIndex":6639,"fileName":"lively/morphic/Events.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":true,"category":{"__isSmartRef__":true,"id":895},"className":"Event","_owner":{"__isSmartRef__":true,"id":893},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"904":{"name":"KEY_HOME","type":"propertyDef","startIndex":6641,"stopIndex":6658,"fileName":"lively/morphic/Events.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":true,"category":{"__isSmartRef__":true,"id":895},"className":"Event","_owner":{"__isSmartRef__":true,"id":893},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"905":{"name":"KEY_END","type":"propertyDef","startIndex":6660,"stopIndex":6677,"fileName":"lively/morphic/Events.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":true,"category":{"__isSmartRef__":true,"id":895},"className":"Event","_owner":{"__isSmartRef__":true,"id":893},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"906":{"name":"KEY_PAGEUP","type":"propertyDef","startIndex":6679,"stopIndex":6696,"fileName":"lively/morphic/Events.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":true,"category":{"__isSmartRef__":true,"id":895},"className":"Event","_owner":{"__isSmartRef__":true,"id":893},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"907":{"name":"KEY_PAGEDOWN","type":"propertyDef","startIndex":6698,"stopIndex":6715,"fileName":"lively/morphic/Events.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":true,"category":{"__isSmartRef__":true,"id":895},"className":"Event","_owner":{"__isSmartRef__":true,"id":893},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"908":{"name":"KEY_INSERT","type":"propertyDef","startIndex":6717,"stopIndex":6734,"fileName":"lively/morphic/Events.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":true,"category":{"__isSmartRef__":true,"id":895},"className":"Event","_owner":{"__isSmartRef__":true,"id":893},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"909":{"name":"KEY_SPACEBAR","type":"propertyDef","startIndex":6737,"stopIndex":6779,"fileName":"lively/morphic/Events.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":true,"category":{"__isSmartRef__":true,"id":895},"className":"Event","_owner":{"__isSmartRef__":true,"id":893},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"910":{"name":"KEY_SHIFT","type":"propertyDef","startIndex":6781,"stopIndex":6798,"fileName":"lively/morphic/Events.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":true,"category":{"__isSmartRef__":true,"id":895},"className":"Event","_owner":{"__isSmartRef__":true,"id":893},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"911":{"name":"KEY_CTRL","type":"propertyDef","startIndex":6800,"stopIndex":6817,"fileName":"lively/morphic/Events.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":true,"category":{"__isSmartRef__":true,"id":895},"className":"Event","_owner":{"__isSmartRef__":true,"id":893},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"912":{"name":"KEY_ALT","type":"propertyDef","startIndex":6819,"stopIndex":6836,"fileName":"lively/morphic/Events.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":true,"category":{"__isSmartRef__":true,"id":895},"className":"Event","_owner":{"__isSmartRef__":true,"id":893},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"913":{"name":"KEY_CMD","type":"propertyDef","startIndex":6838,"stopIndex":6855,"fileName":"lively/morphic/Events.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":true,"category":{"__isSmartRef__":true,"id":895},"className":"Event","_owner":{"__isSmartRef__":true,"id":893},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"914":{"name":null,"type":"comment","startIndex":6861,"stopIndex":6861,"fileName":"lively/morphic/Events.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"915":{"name":"ScrollableTrait","type":"traitDef","startIndex":6862,"stopIndex":9772,"fileName":"lively/morphic/Events.js","_subElements":[{"__isSmartRef__":true,"id":916},{"__isSmartRef__":true,"id":918},{"__isSmartRef__":true,"id":919},{"__isSmartRef__":true,"id":921},{"__isSmartRef__":true,"id":922},{"__isSmartRef__":true,"id":923},{"__isSmartRef__":true,"id":924},{"__isSmartRef__":true,"id":925},{"__isSmartRef__":true,"id":927},{"__isSmartRef__":true,"id":928}],"sourceControl":{"__isSmartRef__":true,"id":637},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"916":{"name":"getScrollableNode","type":"propertyDef","startIndex":6928,"stopIndex":7033,"fileName":"lively/morphic/Events.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":917},"_owner":{"__isSmartRef__":true,"id":915},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"917":{"name":"accessing","type":"categoryDef","startIndex":51,"stopIndex":257,"fileName":null,"_subElements":[{"__isSmartRef__":true,"id":916},{"__isSmartRef__":true,"id":918}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"918":{"name":"world","type":"propertyDef","startIndex":7035,"stopIndex":7116,"fileName":"lively/morphic/Events.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":917},"_owner":{"__isSmartRef__":true,"id":915},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"919":{"name":"getScroll","type":"propertyDef","startIndex":7136,"stopIndex":7351,"fileName":"lively/morphic/Events.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":920},"_owner":{"__isSmartRef__":true,"id":915},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"920":{"name":"scrolling","type":"categoryDef","startIndex":259,"stopIndex":1923,"fileName":null,"_subElements":[{"__isSmartRef__":true,"id":919},{"__isSmartRef__":true,"id":921},{"__isSmartRef__":true,"id":922},{"__isSmartRef__":true,"id":923},{"__isSmartRef__":true,"id":924}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"921":{"name":"getScrollExtent","type":"propertyDef","startIndex":7353,"stopIndex":7475,"fileName":"lively/morphic/Events.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":920},"_owner":{"__isSmartRef__":true,"id":915},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"922":{"name":"getScrollBounds","type":"propertyDef","startIndex":7477,"stopIndex":7627,"fileName":"lively/morphic/Events.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":920},"_owner":{"__isSmartRef__":true,"id":915},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"923":{"name":"setScroll","type":"propertyDef","startIndex":7630,"stopIndex":8082,"fileName":"lively/morphic/Events.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":920},"_owner":{"__isSmartRef__":true,"id":915},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"924":{"name":"scrollRectIntoView","type":"propertyDef","startIndex":8084,"stopIndex":8782,"fileName":"lively/morphic/Events.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":920},"_owner":{"__isSmartRef__":true,"id":915},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"925":{"name":"onMouseWheel","type":"propertyDef","startIndex":8814,"stopIndex":8966,"fileName":"lively/morphic/Events.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":926},"_owner":{"__isSmartRef__":true,"id":915},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"926":{"name":"scroll event handling","type":"categoryDef","startIndex":1925,"stopIndex":2877,"fileName":null,"_subElements":[{"__isSmartRef__":true,"id":925},{"__isSmartRef__":true,"id":927}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"927":{"name":"stopScrollWhenBordersAreReached","type":"propertyDef","startIndex":8968,"stopIndex":9737,"fileName":"lively/morphic/Events.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":926},"_owner":{"__isSmartRef__":true,"id":915},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"928":{"name":" -> lively.morphic.Morph","type":"traitSubElement","startIndex":9742,"stopIndex":9771,"fileName":"lively/morphic/Events.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_owner":{"__isSmartRef__":true,"id":915},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"929":{"name":null,"type":"unknown","startIndex":9773,"stopIndex":9832,"fileName":"lively/morphic/Events.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"930":{"name":null,"type":"unknown","startIndex":9833,"stopIndex":9893,"fileName":"lively/morphic/Events.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"931":{"name":null,"type":"comment","startIndex":9894,"stopIndex":9894,"fileName":"lively/morphic/Events.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"932":{"name":"lively.morphic.Morph","type":"klassExtensionDef","startIndex":9895,"stopIndex":15946,"fileName":"lively/morphic/Events.js","_subElements":[{"__isSmartRef__":true,"id":933},{"__isSmartRef__":true,"id":935},{"__isSmartRef__":true,"id":936},{"__isSmartRef__":true,"id":937},{"__isSmartRef__":true,"id":938},{"__isSmartRef__":true,"id":939},{"__isSmartRef__":true,"id":940},{"__isSmartRef__":true,"id":941},{"__isSmartRef__":true,"id":942},{"__isSmartRef__":true,"id":943},{"__isSmartRef__":true,"id":944},{"__isSmartRef__":true,"id":945},{"__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},{"__isSmartRef__":true,"id":956},{"__isSmartRef__":true,"id":958},{"__isSmartRef__":true,"id":959},{"__isSmartRef__":true,"id":960},{"__isSmartRef__":true,"id":961},{"__isSmartRef__":true,"id":962},{"__isSmartRef__":true,"id":963},{"__isSmartRef__":true,"id":964},{"__isSmartRef__":true,"id":965},{"__isSmartRef__":true,"id":966},{"__isSmartRef__":true,"id":967},{"__isSmartRef__":true,"id":968}],"sourceControl":{"__isSmartRef__":true,"id":637},"categories":[{"__isSmartRef__":true,"id":934},{"__isSmartRef__":true,"id":946},{"__isSmartRef__":true,"id":957},{"__isSmartRef__":true,"id":969}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"933":{"name":"addEventHandler","type":"propertyDef","startIndex":9949,"stopIndex":10180,"fileName":"lively/morphic/Events.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":934},"className":"lively.morphic.Morph","_owner":{"__isSmartRef__":true,"id":932},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"934":{"name":"event managment","type":"categoryDef","startIndex":9928,"stopIndex":11793,"fileName":"lively/morphic/Events.js","_subElements":[{"__isSmartRef__":true,"id":933},{"__isSmartRef__":true,"id":935},{"__isSmartRef__":true,"id":936},{"__isSmartRef__":true,"id":937},{"__isSmartRef__":true,"id":938},{"__isSmartRef__":true,"id":939},{"__isSmartRef__":true,"id":940},{"__isSmartRef__":true,"id":941},{"__isSmartRef__":true,"id":942},{"__isSmartRef__":true,"id":943},{"__isSmartRef__":true,"id":944}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"935":{"name":"removeEventHandlers","type":"propertyDef","startIndex":10182,"stopIndex":10312,"fileName":"lively/morphic/Events.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":934},"className":"lively.morphic.Morph","_owner":{"__isSmartRef__":true,"id":932},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"936":{"name":"registerForEvent","type":"propertyDef","startIndex":10314,"stopIndex":10972,"fileName":"lively/morphic/Events.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":934},"className":"lively.morphic.Morph","_owner":{"__isSmartRef__":true,"id":932},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"937":{"name":"enableEventHandler","type":"propertyDef","startIndex":10974,"stopIndex":11089,"fileName":"lively/morphic/Events.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":934},"className":"lively.morphic.Morph","_owner":{"__isSmartRef__":true,"id":932},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"938":{"name":"enableEventHandlerRecursively","type":"propertyDef","startIndex":11091,"stopIndex":11212,"fileName":"lively/morphic/Events.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":934},"className":"lively.morphic.Morph","_owner":{"__isSmartRef__":true,"id":932},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"939":{"name":"disableEventHandler","type":"propertyDef","startIndex":11214,"stopIndex":11305,"fileName":"lively/morphic/Events.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":934},"className":"lively.morphic.Morph","_owner":{"__isSmartRef__":true,"id":932},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"940":{"name":"disableEventHandlerRecursively","type":"propertyDef","startIndex":11307,"stopIndex":11430,"fileName":"lively/morphic/Events.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":934},"className":"lively.morphic.Morph","_owner":{"__isSmartRef__":true,"id":932},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"941":{"name":"ignoreEvents","type":"propertyDef","startIndex":11432,"stopIndex":11524,"fileName":"lively/morphic/Events.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":934},"className":"lively.morphic.Morph","_owner":{"__isSmartRef__":true,"id":932},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"942":{"name":"enableEvents","type":"propertyDef","startIndex":11526,"stopIndex":11618,"fileName":"lively/morphic/Events.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":934},"className":"lively.morphic.Morph","_owner":{"__isSmartRef__":true,"id":932},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"943":{"name":"areEventsIgnored","type":"propertyDef","startIndex":11620,"stopIndex":11682,"fileName":"lively/morphic/Events.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":934},"className":"lively.morphic.Morph","_owner":{"__isSmartRef__":true,"id":932},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"944":{"name":"registerForEvents","type":"propertyDef","startIndex":11684,"stopIndex":11788,"fileName":"lively/morphic/Events.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":934},"className":"lively.morphic.Morph","_owner":{"__isSmartRef__":true,"id":932},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"945":{"name":"registerForKeyboardEvents","type":"propertyDef","startIndex":11815,"stopIndex":11871,"fileName":"lively/morphic/Events.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":946},"className":"lively.morphic.Morph","_owner":{"__isSmartRef__":true,"id":932},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"946":{"name":"event handling","type":"categoryDef","startIndex":11795,"stopIndex":14253,"fileName":"lively/morphic/Events.js","_subElements":[{"__isSmartRef__":true,"id":945},{"__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"},"947":{"name":"registerForMouseEvents","type":"propertyDef","startIndex":11873,"stopIndex":12934,"fileName":"lively/morphic/Events.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":946},"className":"lively.morphic.Morph","_owner":{"__isSmartRef__":true,"id":932},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"948":{"name":"onMouseDown","type":"propertyDef","startIndex":12936,"stopIndex":13087,"fileName":"lively/morphic/Events.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":946},"className":"lively.morphic.Morph","_owner":{"__isSmartRef__":true,"id":932},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"949":{"name":"onMouseUp","type":"propertyDef","startIndex":13089,"stopIndex":13891,"fileName":"lively/morphic/Events.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":946},"className":"lively.morphic.Morph","_owner":{"__isSmartRef__":true,"id":932},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"950":{"name":"onMouseWheel","type":"propertyDef","startIndex":13893,"stopIndex":13937,"fileName":"lively/morphic/Events.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":946},"className":"lively.morphic.Morph","_owner":{"__isSmartRef__":true,"id":932},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"951":{"name":"onContextMenu","type":"propertyDef","startIndex":13941,"stopIndex":14053,"fileName":"lively/morphic/Events.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":946},"className":"lively.morphic.Morph","_owner":{"__isSmartRef__":true,"id":932},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"952":{"name":"onDragStart","type":"propertyDef","startIndex":14056,"stopIndex":14086,"fileName":"lively/morphic/Events.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":946},"className":"lively.morphic.Morph","_owner":{"__isSmartRef__":true,"id":932},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"953":{"name":"onDragEnd","type":"propertyDef","startIndex":14088,"stopIndex":14116,"fileName":"lively/morphic/Events.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":946},"className":"lively.morphic.Morph","_owner":{"__isSmartRef__":true,"id":932},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"954":{"name":"onDrag","type":"propertyDef","startIndex":14118,"stopIndex":14143,"fileName":"lively/morphic/Events.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":946},"className":"lively.morphic.Morph","_owner":{"__isSmartRef__":true,"id":932},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"955":{"name":"onContextMenu","type":"propertyDef","startIndex":14145,"stopIndex":14249,"fileName":"lively/morphic/Events.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":946},"className":"lively.morphic.Morph","_owner":{"__isSmartRef__":true,"id":932},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"956":{"name":"enableGrabbing","type":"propertyDef","startIndex":14282,"stopIndex":14345,"fileName":"lively/morphic/Events.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":957},"className":"lively.morphic.Morph","_owner":{"__isSmartRef__":true,"id":932},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"957":{"name":"grabbing and dropping","type":"categoryDef","startIndex":14255,"stopIndex":15823,"fileName":"lively/morphic/Events.js","_subElements":[{"__isSmartRef__":true,"id":956},{"__isSmartRef__":true,"id":958},{"__isSmartRef__":true,"id":959},{"__isSmartRef__":true,"id":960},{"__isSmartRef__":true,"id":961},{"__isSmartRef__":true,"id":962},{"__isSmartRef__":true,"id":963},{"__isSmartRef__":true,"id":964},{"__isSmartRef__":true,"id":965},{"__isSmartRef__":true,"id":966},{"__isSmartRef__":true,"id":967}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"958":{"name":"disableGrabbing","type":"propertyDef","startIndex":14347,"stopIndex":14408,"fileName":"lively/morphic/Events.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":957},"className":"lively.morphic.Morph","_owner":{"__isSmartRef__":true,"id":932},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"959":{"name":"enableDropping","type":"propertyDef","startIndex":14411,"stopIndex":14474,"fileName":"lively/morphic/Events.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":957},"className":"lively.morphic.Morph","_owner":{"__isSmartRef__":true,"id":932},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"960":{"name":"disableDropping","type":"propertyDef","startIndex":14476,"stopIndex":14537,"fileName":"lively/morphic/Events.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":957},"className":"lively.morphic.Morph","_owner":{"__isSmartRef__":true,"id":932},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"961":{"name":"enableDragging","type":"propertyDef","startIndex":14539,"stopIndex":14598,"fileName":"lively/morphic/Events.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":957},"className":"lively.morphic.Morph","_owner":{"__isSmartRef__":true,"id":932},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"962":{"name":"disableDragging","type":"propertyDef","startIndex":14600,"stopIndex":14661,"fileName":"lively/morphic/Events.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":957},"className":"lively.morphic.Morph","_owner":{"__isSmartRef__":true,"id":932},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"963":{"name":"dropOnMe","type":"propertyDef","startIndex":14666,"stopIndex":15024,"fileName":"lively/morphic/Events.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":957},"className":"lively.morphic.Morph","_owner":{"__isSmartRef__":true,"id":932},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"964":{"name":"dropOn","type":"propertyDef","startIndex":15026,"stopIndex":15075,"fileName":"lively/morphic/Events.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":957},"className":"lively.morphic.Morph","_owner":{"__isSmartRef__":true,"id":932},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"965":{"name":"manualDropOnMe","type":"propertyDef","startIndex":15078,"stopIndex":15480,"fileName":"lively/morphic/Events.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":957},"className":"lively.morphic.Morph","_owner":{"__isSmartRef__":true,"id":932},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"966":{"name":"grabMe","type":"propertyDef","startIndex":15482,"stopIndex":15573,"fileName":"lively/morphic/Events.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":957},"className":"lively.morphic.Morph","_owner":{"__isSmartRef__":true,"id":932},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"967":{"name":"getGrabShadow","type":"propertyDef","startIndex":15575,"stopIndex":15819,"fileName":"lively/morphic/Events.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":957},"className":"lively.morphic.Morph","_owner":{"__isSmartRef__":true,"id":932},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"968":{"name":"getScrollableNode","type":"propertyDef","startIndex":15840,"stopIndex":15941,"fileName":"lively/morphic/Events.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":969},"className":"lively.morphic.Morph","_owner":{"__isSmartRef__":true,"id":932},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"969":{"name":"scrolling","type":"categoryDef","startIndex":15825,"stopIndex":15943,"fileName":"lively/morphic/Events.js","_subElements":[{"__isSmartRef__":true,"id":968}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"970":{"name":null,"type":"comment","startIndex":15947,"stopIndex":15947,"fileName":"lively/morphic/Events.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"971":{"name":"lively.morphic.Text","type":"klassExtensionDef","startIndex":15948,"stopIndex":17697,"fileName":"lively/morphic/Events.js","_subElements":[{"__isSmartRef__":true,"id":972},{"__isSmartRef__":true,"id":974},{"__isSmartRef__":true,"id":975},{"__isSmartRef__":true,"id":976},{"__isSmartRef__":true,"id":977},{"__isSmartRef__":true,"id":978},{"__isSmartRef__":true,"id":980},{"__isSmartRef__":true,"id":981}],"sourceControl":{"__isSmartRef__":true,"id":637},"categories":[{"__isSmartRef__":true,"id":973},{"__isSmartRef__":true,"id":979}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"972":{"name":"ignoreEvents","type":"propertyDef","startIndex":16001,"stopIndex":16099,"fileName":"lively/morphic/Events.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":973},"className":"lively.morphic.Text","_owner":{"__isSmartRef__":true,"id":971},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"973":{"name":"event managment","type":"categoryDef","startIndex":15980,"stopIndex":16986,"fileName":"lively/morphic/Events.js","_subElements":[{"__isSmartRef__":true,"id":972},{"__isSmartRef__":true,"id":974},{"__isSmartRef__":true,"id":975},{"__isSmartRef__":true,"id":976},{"__isSmartRef__":true,"id":977}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"974":{"name":"enableEvents","type":"propertyDef","startIndex":16101,"stopIndex":16199,"fileName":"lively/morphic/Events.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":973},"className":"lively.morphic.Text","_owner":{"__isSmartRef__":true,"id":971},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"975":{"name":"registerForEvents","type":"propertyDef","startIndex":16201,"stopIndex":16294,"fileName":"lively/morphic/Events.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":973},"className":"lively.morphic.Text","_owner":{"__isSmartRef__":true,"id":971},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"976":{"name":"registerForKeyboardEvents","type":"propertyDef","startIndex":16296,"stopIndex":16553,"fileName":"lively/morphic/Events.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":973},"className":"lively.morphic.Text","_owner":{"__isSmartRef__":true,"id":971},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"977":{"name":"registerForFocusAndBlurEvents","type":"propertyDef","startIndex":16555,"stopIndex":16983,"fileName":"lively/morphic/Events.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":973},"className":"lively.morphic.Text","_owner":{"__isSmartRef__":true,"id":971},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"978":{"name":"onSelectStart","type":"propertyDef","startIndex":17008,"stopIndex":17290,"fileName":"lively/morphic/Events.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":979},"className":"lively.morphic.Text","_owner":{"__isSmartRef__":true,"id":971},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"979":{"name":"event handling","type":"categoryDef","startIndex":16988,"stopIndex":17694,"fileName":"lively/morphic/Events.js","_subElements":[{"__isSmartRef__":true,"id":978},{"__isSmartRef__":true,"id":980},{"__isSmartRef__":true,"id":981}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"980":{"name":"onBlur","type":"propertyDef","startIndex":17292,"stopIndex":17371,"fileName":"lively/morphic/Events.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":979},"className":"lively.morphic.Text","_owner":{"__isSmartRef__":true,"id":971},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"981":{"name":"onFocus","type":"propertyDef","startIndex":17373,"stopIndex":17692,"fileName":"lively/morphic/Events.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":979},"className":"lively.morphic.Text","_owner":{"__isSmartRef__":true,"id":971},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"982":{"name":"lively.morphic.List","type":"klassExtensionDef","startIndex":17698,"stopIndex":18512,"fileName":"lively/morphic/Events.js","_subElements":[{"__isSmartRef__":true,"id":983},{"__isSmartRef__":true,"id":985},{"__isSmartRef__":true,"id":986},{"__isSmartRef__":true,"id":987}],"sourceControl":{"__isSmartRef__":true,"id":637},"categories":[{"__isSmartRef__":true,"id":984},{"__isSmartRef__":true,"id":988}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"983":{"name":"onMouseDown","type":"propertyDef","startIndex":17748,"stopIndex":18099,"fileName":"lively/morphic/Events.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":984},"className":"lively.morphic.List","_owner":{"__isSmartRef__":true,"id":982},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"984":{"name":"mouse events","type":"categoryDef","startIndex":17730,"stopIndex":18419,"fileName":"lively/morphic/Events.js","_subElements":[{"__isSmartRef__":true,"id":983},{"__isSmartRef__":true,"id":985},{"__isSmartRef__":true,"id":986}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"985":{"name":"onMouseOver","type":"propertyDef","startIndex":18101,"stopIndex":18269,"fileName":"lively/morphic/Events.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":984},"className":"lively.morphic.List","_owner":{"__isSmartRef__":true,"id":982},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"986":{"name":"selectItemFromEvt","type":"propertyDef","startIndex":18271,"stopIndex":18416,"fileName":"lively/morphic/Events.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":984},"className":"lively.morphic.List","_owner":{"__isSmartRef__":true,"id":982},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"987":{"name":"getScrollableNode","type":"propertyDef","startIndex":18436,"stopIndex":18507,"fileName":"lively/morphic/Events.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":988},"className":"lively.morphic.List","_owner":{"__isSmartRef__":true,"id":982},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"988":{"name":"scrolling","type":"categoryDef","startIndex":18421,"stopIndex":18509,"fileName":"lively/morphic/Events.js","_subElements":[{"__isSmartRef__":true,"id":987}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"989":{"name":"lively.morphic.Clip","type":"klassExtensionDef","startIndex":18513,"stopIndex":18666,"fileName":"lively/morphic/Events.js","_subElements":[{"__isSmartRef__":true,"id":990}],"sourceControl":{"__isSmartRef__":true,"id":637},"categories":[{"__isSmartRef__":true,"id":991}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"990":{"name":"getScrollableNode","type":"propertyDef","startIndex":18560,"stopIndex":18661,"fileName":"lively/morphic/Events.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":991},"className":"lively.morphic.Clip","_owner":{"__isSmartRef__":true,"id":989},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"991":{"name":"scrolling","type":"categoryDef","startIndex":18545,"stopIndex":18663,"fileName":"lively/morphic/Events.js","_subElements":[{"__isSmartRef__":true,"id":990}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"992":{"name":null,"type":"comment","startIndex":18667,"stopIndex":18667,"fileName":"lively/morphic/Events.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"993":{"name":"lively.morphic.World","type":"klassExtensionDef","startIndex":18668,"stopIndex":22890,"fileName":"lively/morphic/Events.js","_subElements":[{"__isSmartRef__":true,"id":994},{"__isSmartRef__":true,"id":996},{"__isSmartRef__":true,"id":997},{"__isSmartRef__":true,"id":999},{"__isSmartRef__":true,"id":1000},{"__isSmartRef__":true,"id":1001},{"__isSmartRef__":true,"id":1003},{"__isSmartRef__":true,"id":1004},{"__isSmartRef__":true,"id":1005},{"__isSmartRef__":true,"id":1006},{"__isSmartRef__":true,"id":1007},{"__isSmartRef__":true,"id":1008},{"__isSmartRef__":true,"id":1010}],"sourceControl":{"__isSmartRef__":true,"id":637},"categories":[{"__isSmartRef__":true,"id":995},{"__isSmartRef__":true,"id":998},{"__isSmartRef__":true,"id":1002},{"__isSmartRef__":true,"id":1009}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"994":{"name":"registerForEvents","type":"propertyDef","startIndex":18723,"stopIndex":18842,"fileName":"lively/morphic/Events.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":995},"className":"lively.morphic.World","_owner":{"__isSmartRef__":true,"id":993},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"995":{"name":"event management","type":"categoryDef","startIndex":18701,"stopIndex":19374,"fileName":"lively/morphic/Events.js","_subElements":[{"__isSmartRef__":true,"id":994},{"__isSmartRef__":true,"id":996}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"996":{"name":"registerForGlobalEvents","type":"propertyDef","startIndex":18845,"stopIndex":19369,"fileName":"lively/morphic/Events.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":995},"className":"lively.morphic.World","_owner":{"__isSmartRef__":true,"id":993},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"997":{"name":"onKeyDown","type":"propertyDef","startIndex":19405,"stopIndex":19762,"fileName":"lively/morphic/Events.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":998},"className":"lively.morphic.World","_owner":{"__isSmartRef__":true,"id":993},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"998":{"name":"keyboard event handling","type":"categoryDef","startIndex":19376,"stopIndex":20214,"fileName":"lively/morphic/Events.js","_subElements":[{"__isSmartRef__":true,"id":997},{"__isSmartRef__":true,"id":999},{"__isSmartRef__":true,"id":1000}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"999":{"name":"onKeyPress","type":"propertyDef","startIndex":19764,"stopIndex":19824,"fileName":"lively/morphic/Events.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":998},"className":"lively.morphic.World","_owner":{"__isSmartRef__":true,"id":993},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1000":{"name":"processCommandKeys","type":"propertyDef","startIndex":19826,"stopIndex":20210,"fileName":"lively/morphic/Events.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":998},"className":"lively.morphic.World","_owner":{"__isSmartRef__":true,"id":993},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1001":{"name":"onMouseMove","type":"propertyDef","startIndex":20242,"stopIndex":20609,"fileName":"lively/morphic/Events.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1002},"className":"lively.morphic.World","_owner":{"__isSmartRef__":true,"id":993},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1002":{"name":"mouse event handling","type":"categoryDef","startIndex":20216,"stopIndex":22434,"fileName":"lively/morphic/Events.js","_subElements":[{"__isSmartRef__":true,"id":1001},{"__isSmartRef__":true,"id":1003},{"__isSmartRef__":true,"id":1004},{"__isSmartRef__":true,"id":1005},{"__isSmartRef__":true,"id":1006},{"__isSmartRef__":true,"id":1007}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1003":{"name":"onMouseWheel","type":"propertyDef","startIndex":20611,"stopIndex":21980,"fileName":"lively/morphic/Events.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1002},"className":"lively.morphic.World","_owner":{"__isSmartRef__":true,"id":993},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1004":{"name":"onSelectStart","type":"propertyDef","startIndex":21983,"stopIndex":22046,"fileName":"lively/morphic/Events.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1002},"className":"lively.morphic.World","_owner":{"__isSmartRef__":true,"id":993},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1005":{"name":"onHTML5DragEnter","type":"propertyDef","startIndex":22048,"stopIndex":22114,"fileName":"lively/morphic/Events.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1002},"className":"lively.morphic.World","_owner":{"__isSmartRef__":true,"id":993},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1006":{"name":"onHTML5DragOver","type":"propertyDef","startIndex":22116,"stopIndex":22181,"fileName":"lively/morphic/Events.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1002},"className":"lively.morphic.World","_owner":{"__isSmartRef__":true,"id":993},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1007":{"name":"onHTML5Drop","type":"propertyDef","startIndex":22183,"stopIndex":22429,"fileName":"lively/morphic/Events.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1002},"className":"lively.morphic.World","_owner":{"__isSmartRef__":true,"id":993},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1008":{"name":"openSystemBrowser","type":"propertyDef","startIndex":22453,"stopIndex":22786,"fileName":"lively/morphic/Events.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1009},"className":"lively.morphic.World","_owner":{"__isSmartRef__":true,"id":993},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1009":{"name":"convenience","type":"categoryDef","startIndex":22436,"stopIndex":22887,"fileName":"lively/morphic/Events.js","_subElements":[{"__isSmartRef__":true,"id":1008},{"__isSmartRef__":true,"id":1010}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1010":{"name":"openWorkspace","type":"propertyDef","startIndex":22788,"stopIndex":22885,"fileName":"lively/morphic/Events.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1009},"className":"lively.morphic.World","_owner":{"__isSmartRef__":true,"id":993},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1011":{"name":"lively.FileUploader","type":"klassDef","startIndex":22891,"stopIndex":29434,"fileName":"lively/morphic/Events.js","_subElements":[{"__isSmartRef__":true,"id":1012},{"__isSmartRef__":true,"id":1014},{"__isSmartRef__":true,"id":1015},{"__isSmartRef__":true,"id":1017},{"__isSmartRef__":true,"id":1018},{"__isSmartRef__":true,"id":1019},{"__isSmartRef__":true,"id":1020},{"__isSmartRef__":true,"id":1021},{"__isSmartRef__":true,"id":1023},{"__isSmartRef__":true,"id":1025},{"__isSmartRef__":true,"id":1026},{"__isSmartRef__":true,"id":1027},{"__isSmartRef__":true,"id":1029},{"__isSmartRef__":true,"id":1030},{"__isSmartRef__":true,"id":1031},{"__isSmartRef__":true,"id":1033}],"sourceControl":{"__isSmartRef__":true,"id":637},"superclassName":"Object","categories":[{"__isSmartRef__":true,"id":1013},{"__isSmartRef__":true,"id":1016},{"__isSmartRef__":true,"id":1022},{"__isSmartRef__":true,"id":1024},{"__isSmartRef__":true,"id":1028},{"__isSmartRef__":true,"id":1032}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1012":{"name":"getFileReader","type":"propertyDef","startIndex":22947,"stopIndex":23477,"fileName":"lively/morphic/Events.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1013},"className":"lively.FileUploader","_owner":{"__isSmartRef__":true,"id":1011},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1013":{"name":"file reader","type":"categoryDef","startIndex":22930,"stopIndex":24021,"fileName":"lively/morphic/Events.js","_subElements":[{"__isSmartRef__":true,"id":1012},{"__isSmartRef__":true,"id":1014}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1014":{"name":"uploadBinary","type":"propertyDef","startIndex":23480,"stopIndex":24018,"fileName":"lively/morphic/Events.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1013},"className":"lively.FileUploader","_owner":{"__isSmartRef__":true,"id":1011},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1015":{"name":"onError","type":"propertyDef","startIndex":24047,"stopIndex":24142,"fileName":"lively/morphic/Events.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1016},"className":"lively.FileUploader","_owner":{"__isSmartRef__":true,"id":1011},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1016":{"name":"file reader events","type":"categoryDef","startIndex":24023,"stopIndex":24635,"fileName":"lively/morphic/Events.js","_subElements":[{"__isSmartRef__":true,"id":1015},{"__isSmartRef__":true,"id":1017},{"__isSmartRef__":true,"id":1018},{"__isSmartRef__":true,"id":1019},{"__isSmartRef__":true,"id":1020}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1017":{"name":"onLoadStart","type":"propertyDef","startIndex":24144,"stopIndex":24228,"fileName":"lively/morphic/Events.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1016},"className":"lively.FileUploader","_owner":{"__isSmartRef__":true,"id":1011},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1018":{"name":"onLoadEnd","type":"propertyDef","startIndex":24230,"stopIndex":24313,"fileName":"lively/morphic/Events.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1016},"className":"lively.FileUploader","_owner":{"__isSmartRef__":true,"id":1011},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1019":{"name":"onProgress","type":"propertyDef","startIndex":24315,"stopIndex":24520,"fileName":"lively/morphic/Events.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1016},"className":"lively.FileUploader","_owner":{"__isSmartRef__":true,"id":1011},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1020":{"name":"onLoad","type":"propertyDef","startIndex":24522,"stopIndex":24632,"fileName":"lively/morphic/Events.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1016},"className":"lively.FileUploader","_owner":{"__isSmartRef__":true,"id":1011},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1021":{"name":"onLoadImage","type":"propertyDef","startIndex":24656,"stopIndex":24830,"fileName":"lively/morphic/Events.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1022},"className":"lively.FileUploader","_owner":{"__isSmartRef__":true,"id":1011},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1022":{"name":"image loading","type":"categoryDef","startIndex":24637,"stopIndex":24833,"fileName":"lively/morphic/Events.js","_subElements":[{"__isSmartRef__":true,"id":1021}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1023":{"name":"onLoadVideo","type":"propertyDef","startIndex":24854,"stopIndex":25014,"fileName":"lively/morphic/Events.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1024},"className":"lively.FileUploader","_owner":{"__isSmartRef__":true,"id":1011},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1024":{"name":"video loading","type":"categoryDef","startIndex":24835,"stopIndex":26724,"fileName":"lively/morphic/Events.js","_subElements":[{"__isSmartRef__":true,"id":1023},{"__isSmartRef__":true,"id":1025},{"__isSmartRef__":true,"id":1026}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1025":{"name":"openVideo","type":"propertyDef","startIndex":25017,"stopIndex":26388,"fileName":"lively/morphic/Events.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1024},"className":"lively.FileUploader","_owner":{"__isSmartRef__":true,"id":1011},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1026":{"name":"uploadAndOpenVideoTo","type":"propertyDef","startIndex":26391,"stopIndex":26721,"fileName":"lively/morphic/Events.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1024},"className":"lively.FileUploader","_owner":{"__isSmartRef__":true,"id":1011},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1027":{"name":"onLoadPDF","type":"propertyDef","startIndex":26743,"stopIndex":26899,"fileName":"lively/morphic/Events.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1028},"className":"lively.FileUploader","_owner":{"__isSmartRef__":true,"id":1011},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1028":{"name":"pdf loading","type":"categoryDef","startIndex":26726,"stopIndex":27994,"fileName":"lively/morphic/Events.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":"uploadAndOpenPDFTo","type":"propertyDef","startIndex":26901,"stopIndex":27228,"fileName":"lively/morphic/Events.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1028},"className":"lively.FileUploader","_owner":{"__isSmartRef__":true,"id":1011},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1030":{"name":"openPDF","type":"propertyDef","startIndex":27230,"stopIndex":27990,"fileName":"lively/morphic/Events.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1028},"className":"lively.FileUploader","_owner":{"__isSmartRef__":true,"id":1011},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1031":{"name":"handleDroppedFiles","type":"propertyDef","startIndex":28015,"stopIndex":28808,"fileName":"lively/morphic/Events.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1032},"className":"lively.FileUploader","_owner":{"__isSmartRef__":true,"id":1011},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1032":{"name":"drop handling","type":"categoryDef","startIndex":27996,"stopIndex":29431,"fileName":"lively/morphic/Events.js","_subElements":[{"__isSmartRef__":true,"id":1031},{"__isSmartRef__":true,"id":1033}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1033":{"name":"loadAndOpenDroppedFiles","type":"propertyDef","startIndex":28813,"stopIndex":29426,"fileName":"lively/morphic/Events.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1032},"className":"lively.FileUploader","_owner":{"__isSmartRef__":true,"id":1011},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1034":{"name":null,"type":"comment","startIndex":29435,"stopIndex":29435,"fileName":"lively/morphic/Events.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1035":{"name":"lively.morphic.HTML.RenderContext","type":"klassExtensionDef","startIndex":29436,"stopIndex":29613,"fileName":"lively/morphic/Events.js","_subElements":[{"__isSmartRef__":true,"id":1036}],"sourceControl":{"__isSmartRef__":true,"id":637},"categories":[{"__isSmartRef__":true,"id":1037}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1036":{"name":"registerHandlerForEvent","type":"propertyDef","startIndex":29512,"stopIndex":29608,"fileName":"lively/morphic/Events.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1037},"className":"lively.morphic.HTML.RenderContext","_owner":{"__isSmartRef__":true,"id":1035},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1037":{"name":"event handler management","type":"categoryDef","startIndex":29482,"stopIndex":29610,"fileName":"lively/morphic/Events.js","_subElements":[{"__isSmartRef__":true,"id":1036}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1038":{"name":"lively.morphic.SVG.RenderContext","type":"klassExtensionDef","startIndex":29614,"stopIndex":29790,"fileName":"lively/morphic/Events.js","_subElements":[{"__isSmartRef__":true,"id":1039}],"sourceControl":{"__isSmartRef__":true,"id":637},"categories":[{"__isSmartRef__":true,"id":1040}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1039":{"name":"registerHandlerForEvent","type":"propertyDef","startIndex":29689,"stopIndex":29785,"fileName":"lively/morphic/Events.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1040},"className":"lively.morphic.SVG.RenderContext","_owner":{"__isSmartRef__":true,"id":1038},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1040":{"name":"event handler management","type":"categoryDef","startIndex":29659,"stopIndex":29787,"fileName":"lively/morphic/Events.js","_subElements":[{"__isSmartRef__":true,"id":1039}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1041":{"name":"lively.morphic.Canvas.RenderContext","type":"klassExtensionDef","startIndex":29791,"stopIndex":29966,"fileName":"lively/morphic/Events.js","_subElements":[{"__isSmartRef__":true,"id":1042}],"sourceControl":{"__isSmartRef__":true,"id":637},"categories":[{"__isSmartRef__":true,"id":1043}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1042":{"name":"registerHandlerForEvent","type":"propertyDef","startIndex":29869,"stopIndex":29961,"fileName":"lively/morphic/Events.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1043},"className":"lively.morphic.Canvas.RenderContext","_owner":{"__isSmartRef__":true,"id":1041},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1043":{"name":"event handler management","type":"categoryDef","startIndex":29839,"stopIndex":29963,"fileName":"lively/morphic/Events.js","_subElements":[{"__isSmartRef__":true,"id":1042}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1044":{"name":null,"type":"comment","startIndex":29967,"stopIndex":29967,"fileName":"lively/morphic/Events.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1045":{"name":"lively.morphic.HandMorph","type":"klassDef","startIndex":29968,"stopIndex":31885,"fileName":"lively/morphic/Events.js","_subElements":[{"__isSmartRef__":true,"id":1046},{"__isSmartRef__":true,"id":1048},{"__isSmartRef__":true,"id":1050},{"__isSmartRef__":true,"id":1052},{"__isSmartRef__":true,"id":1053},{"__isSmartRef__":true,"id":1055},{"__isSmartRef__":true,"id":1056},{"__isSmartRef__":true,"id":1057},{"__isSmartRef__":true,"id":1058},{"__isSmartRef__":true,"id":1060}],"sourceControl":{"__isSmartRef__":true,"id":637},"superclassName":"lively.morphic.Morph","categories":[{"__isSmartRef__":true,"id":1047},{"__isSmartRef__":true,"id":1049},{"__isSmartRef__":true,"id":1051},{"__isSmartRef__":true,"id":1054},{"__isSmartRef__":true,"id":1059},{"__isSmartRef__":true,"id":1061}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1046":{"name":"style","type":"propertyDef","startIndex":30040,"stopIndex":30091,"fileName":"lively/morphic/Events.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1047},"className":"lively.morphic.HandMorph","_owner":{"__isSmartRef__":true,"id":1045},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1047":{"name":"settings","type":"categoryDef","startIndex":30026,"stopIndex":30094,"fileName":"lively/morphic/Events.js","_subElements":[{"__isSmartRef__":true,"id":1046}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1048":{"name":"addToWorld","type":"propertyDef","startIndex":30114,"stopIndex":30367,"fileName":"lively/morphic/Events.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1049},"className":"lively.morphic.HandMorph","_owner":{"__isSmartRef__":true,"id":1045},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1049":{"name":"initializing","type":"categoryDef","startIndex":30096,"stopIndex":30370,"fileName":"lively/morphic/Events.js","_subElements":[{"__isSmartRef__":true,"id":1048}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1050":{"name":"world","type":"propertyDef","startIndex":30411,"stopIndex":30452,"fileName":"lively/morphic/Events.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1051},"className":"lively.morphic.HandMorph","_owner":{"__isSmartRef__":true,"id":1045},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1051":{"name":"accessing -- morphic relationship","type":"categoryDef","startIndex":30372,"stopIndex":30490,"fileName":"lively/morphic/Events.js","_subElements":[{"__isSmartRef__":true,"id":1050},{"__isSmartRef__":true,"id":1052}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1052":{"name":"hand","type":"propertyDef","startIndex":30454,"stopIndex":30487,"fileName":"lively/morphic/Events.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1051},"className":"lively.morphic.HandMorph","_owner":{"__isSmartRef__":true,"id":1045},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1053":{"name":"grabMorph","type":"propertyDef","startIndex":30512,"stopIndex":30588,"fileName":"lively/morphic/Events.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1054},"className":"lively.morphic.HandMorph","_owner":{"__isSmartRef__":true,"id":1045},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1054":{"name":"event handling","type":"categoryDef","startIndex":30492,"stopIndex":31468,"fileName":"lively/morphic/Events.js","_subElements":[{"__isSmartRef__":true,"id":1053},{"__isSmartRef__":true,"id":1055},{"__isSmartRef__":true,"id":1056},{"__isSmartRef__":true,"id":1057}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1055":{"name":"grabMorphs","type":"propertyDef","startIndex":30590,"stopIndex":30874,"fileName":"lively/morphic/Events.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1054},"className":"lively.morphic.HandMorph","_owner":{"__isSmartRef__":true,"id":1045},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1056":{"name":"addMorphWithShadow","type":"propertyDef","startIndex":30878,"stopIndex":31099,"fileName":"lively/morphic/Events.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1054},"className":"lively.morphic.HandMorph","_owner":{"__isSmartRef__":true,"id":1045},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1057":{"name":"dropContentsOn","type":"propertyDef","startIndex":31103,"stopIndex":31465,"fileName":"lively/morphic/Events.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1054},"className":"lively.morphic.HandMorph","_owner":{"__isSmartRef__":true,"id":1045},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1058":{"name":"removeOpenMenu","type":"propertyDef","startIndex":31480,"stopIndex":31655,"fileName":"lively/morphic/Events.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1059},"className":"lively.morphic.HandMorph","_owner":{"__isSmartRef__":true,"id":1045},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1059":{"name":"menu","type":"categoryDef","startIndex":31470,"stopIndex":31658,"fileName":"lively/morphic/Events.js","_subElements":[{"__isSmartRef__":true,"id":1058}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1060":{"name":"move","type":"propertyDef","startIndex":31672,"stopIndex":31880,"fileName":"lively/morphic/Events.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1061},"className":"lively.morphic.HandMorph","_owner":{"__isSmartRef__":true,"id":1045},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1061":{"name":"moving","type":"categoryDef","startIndex":31660,"stopIndex":31882,"fileName":"lively/morphic/Events.js","_subElements":[{"__isSmartRef__":true,"id":1060}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1062":{"name":null,"type":"comment","startIndex":31886,"stopIndex":31886,"fileName":"lively/morphic/Events.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1063":{"browser":{"__isSmartRef__":true,"id":439},"parent":{"__isSmartRef__":true,"id":636},"moduleName":"lively/morphic/Examples.js","showAll":false,"__LivelyClassName__":"lively.ide.CompleteFileFragmentNode","__SourceModuleName__":"Global.lively.ide.SystemBrowserNodes"},"1064":{"browser":{"__isSmartRef__":true,"id":439},"parent":{"__isSmartRef__":true,"id":636},"moduleName":"lively/morphic/Experiments.js","showAll":false,"__LivelyClassName__":"lively.ide.CompleteFileFragmentNode","__SourceModuleName__":"Global.lively.ide.SystemBrowserNodes"},"1065":{"browser":{"__isSmartRef__":true,"id":439},"parent":{"__isSmartRef__":true,"id":636},"moduleName":"lively/morphic/Graffle.js","showAll":false,"__LivelyClassName__":"lively.ide.CompleteFileFragmentNode","__SourceModuleName__":"Global.lively.ide.SystemBrowserNodes"},"1066":{"browser":{"__isSmartRef__":true,"id":439},"parent":{"__isSmartRef__":true,"id":636},"moduleName":"lively/morphic/Halos.js","showAll":false,"__LivelyClassName__":"lively.ide.CompleteFileFragmentNode","__SourceModuleName__":"Global.lively.ide.SystemBrowserNodes"},"1067":{"browser":{"__isSmartRef__":true,"id":439},"parent":{"__isSmartRef__":true,"id":636},"moduleName":"lively/morphic/HTML.js","showAll":false,"__LivelyClassName__":"lively.ide.CompleteFileFragmentNode","__SourceModuleName__":"Global.lively.ide.SystemBrowserNodes"},"1068":{"browser":{"__isSmartRef__":true,"id":439},"parent":{"__isSmartRef__":true,"id":636},"moduleName":"lively/morphic/Layout.js","showAll":false,"__LivelyClassName__":"lively.ide.CompleteFileFragmentNode","__SourceModuleName__":"Global.lively.ide.SystemBrowserNodes"},"1069":{"browser":{"__isSmartRef__":true,"id":439},"parent":{"__isSmartRef__":true,"id":636},"moduleName":"lively/morphic/lively.morphic.Widgets.js","showAll":false,"__LivelyClassName__":"lively.ide.CompleteFileFragmentNode","__SourceModuleName__":"Global.lively.ide.SystemBrowserNodes"},"1070":{"browser":{"__isSmartRef__":true,"id":439},"parent":{"__isSmartRef__":true,"id":636},"moduleName":"lively/morphic/MorphAddons.js","showAll":false,"__LivelyClassName__":"lively.ide.CompleteFileFragmentNode","__SourceModuleName__":"Global.lively.ide.SystemBrowserNodes"},"1071":{"browser":{"__isSmartRef__":true,"id":439},"parent":{"__isSmartRef__":true,"id":636},"moduleName":"lively/morphic/ObjectMigration.js","showAll":false,"__LivelyClassName__":"lively.ide.CompleteFileFragmentNode","__SourceModuleName__":"Global.lively.ide.SystemBrowserNodes"},"1072":{"browser":{"__isSmartRef__":true,"id":439},"parent":{"__isSmartRef__":true,"id":636},"moduleName":"lively/morphic/Rendering.js","showAll":false,"__LivelyClassName__":"lively.ide.CompleteFileFragmentNode","__SourceModuleName__":"Global.lively.ide.SystemBrowserNodes"},"1073":{"browser":{"__isSmartRef__":true,"id":439},"parent":{"__isSmartRef__":true,"id":636},"moduleName":"lively/morphic/ScriptingSupport.js","showAll":false,"__LivelyClassName__":"lively.ide.CompleteFileFragmentNode","__SourceModuleName__":"Global.lively.ide.SystemBrowserNodes"},"1074":{"browser":{"__isSmartRef__":true,"id":439},"parent":{"__isSmartRef__":true,"id":636},"moduleName":"lively/morphic/Serialization.js","showAll":false,"__LivelyClassName__":"lively.ide.CompleteFileFragmentNode","__SourceModuleName__":"Global.lively.ide.SystemBrowserNodes"},"1075":{"browser":{"__isSmartRef__":true,"id":439},"parent":{"__isSmartRef__":true,"id":636},"moduleName":"lively/morphic/Shapes.js","showAll":false,"__LivelyClassName__":"lively.ide.CompleteFileFragmentNode","__SourceModuleName__":"Global.lively.ide.SystemBrowserNodes"},"1076":{"browser":{"__isSmartRef__":true,"id":439},"parent":{"__isSmartRef__":true,"id":636},"moduleName":"lively/morphic/Styles.js","showAll":false,"__LivelyClassName__":"lively.ide.CompleteFileFragmentNode","__SourceModuleName__":"Global.lively.ide.SystemBrowserNodes"},"1077":{"browser":{"__isSmartRef__":true,"id":439},"parent":{"__isSmartRef__":true,"id":636},"moduleName":"lively/morphic/SVG.js","showAll":false,"__LivelyClassName__":"lively.ide.CompleteFileFragmentNode","__SourceModuleName__":"Global.lively.ide.SystemBrowserNodes"},"1078":{"target":{"__isSmartRef__":true,"id":1079},"browser":{"__isSmartRef__":true,"id":439},"parent":{"__isSmartRef__":true,"id":636},"moduleName":"lively/morphic/Tests.js","showAll":false,"__LivelyClassName__":"lively.ide.CompleteFileFragmentNode","__SourceModuleName__":"Global.lively.ide.SystemBrowserNodes"},"1079":{"name":"lively.morphic.Tests","type":"moduleDef","startIndex":0,"stopIndex":43779,"fileName":"lively/morphic/Tests.js","_subElements":[{"__isSmartRef__":true,"id":1080},{"__isSmartRef__":true,"id":1081},{"__isSmartRef__":true,"id":1091},{"__isSmartRef__":true,"id":1092},{"__isSmartRef__":true,"id":1095},{"__isSmartRef__":true,"id":1096},{"__isSmartRef__":true,"id":1117},{"__isSmartRef__":true,"id":1118},{"__isSmartRef__":true,"id":1124},{"__isSmartRef__":true,"id":1133},{"__isSmartRef__":true,"id":1134},{"__isSmartRef__":true,"id":1168},{"__isSmartRef__":true,"id":1171},{"__isSmartRef__":true,"id":1180},{"__isSmartRef__":true,"id":1184},{"__isSmartRef__":true,"id":1188},{"__isSmartRef__":true,"id":1191},{"__isSmartRef__":true,"id":1196},{"__isSmartRef__":true,"id":1199},{"__isSmartRef__":true,"id":1204},{"__isSmartRef__":true,"id":1205},{"__isSmartRef__":true,"id":1208},{"__isSmartRef__":true,"id":1211},{"__isSmartRef__":true,"id":1214},{"__isSmartRef__":true,"id":1220}],"sourceControl":{"__isSmartRef__":true,"id":637},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1080":{"name":null,"type":"comment","startIndex":110,"stopIndex":110,"fileName":"lively/morphic/Tests.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1081":{"name":"lively.morphic.Tests.TestCase","type":"klassDef","startIndex":111,"stopIndex":2924,"fileName":"lively/morphic/Tests.js","_subElements":[{"__isSmartRef__":true,"id":1082},{"__isSmartRef__":true,"id":1084},{"__isSmartRef__":true,"id":1086},{"__isSmartRef__":true,"id":1087},{"__isSmartRef__":true,"id":1088},{"__isSmartRef__":true,"id":1089}],"sourceControl":{"__isSmartRef__":true,"id":637},"superclassName":"TestCase","categories":[{"__isSmartRef__":true,"id":1083},{"__isSmartRef__":true,"id":1085},{"__isSmartRef__":true,"id":1090}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1082":{"name":"tearDown","type":"propertyDef","startIndex":175,"stopIndex":245,"fileName":"lively/morphic/Tests.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1083},"className":"lively.morphic.Tests.TestCase","_owner":{"__isSmartRef__":true,"id":1081},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1083":{"name":"running","type":"categoryDef","startIndex":162,"stopIndex":248,"fileName":"lively/morphic/Tests.js","_subElements":[{"__isSmartRef__":true,"id":1082}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1084":{"name":"removeTestWorld","type":"propertyDef","startIndex":262,"stopIndex":621,"fileName":"lively/morphic/Tests.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1085},"className":"lively.morphic.Tests.TestCase","_owner":{"__isSmartRef__":true,"id":1081},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1085":{"name":"helper","type":"categoryDef","startIndex":250,"stopIndex":1288,"fileName":"lively/morphic/Tests.js","_subElements":[{"__isSmartRef__":true,"id":1084},{"__isSmartRef__":true,"id":1086},{"__isSmartRef__":true,"id":1087},{"__isSmartRef__":true,"id":1088}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1086":{"name":"openMorphsInRealWorld","type":"propertyDef","startIndex":623,"stopIndex":688,"fileName":"lively/morphic/Tests.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1085},"className":"lively.morphic.Tests.TestCase","_owner":{"__isSmartRef__":true,"id":1081},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1087":{"name":"createWorld","type":"propertyDef","startIndex":690,"stopIndex":1025,"fileName":"lively/morphic/Tests.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1085},"className":"lively.morphic.Tests.TestCase","_owner":{"__isSmartRef__":true,"id":1081},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1088":{"name":"serializeAndDeserializeWorld","type":"propertyDef","startIndex":1027,"stopIndex":1284,"fileName":"lively/morphic/Tests.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1085},"className":"lively.morphic.Tests.TestCase","_owner":{"__isSmartRef__":true,"id":1081},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1089":{"name":"assertNodeMatches","type":"propertyDef","startIndex":1305,"stopIndex":2919,"fileName":"lively/morphic/Tests.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1090},"className":"lively.morphic.Tests.TestCase","_owner":{"__isSmartRef__":true,"id":1081},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1090":{"name":"assertion","type":"categoryDef","startIndex":1290,"stopIndex":2921,"fileName":"lively/morphic/Tests.js","_subElements":[{"__isSmartRef__":true,"id":1089}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1091":{"name":null,"type":"comment","startIndex":2925,"stopIndex":2925,"fileName":"lively/morphic/Tests.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1092":{"name":"lively.morphic.Tests.WorldTests","type":"klassDef","startIndex":2926,"stopIndex":3445,"fileName":"lively/morphic/Tests.js","_subElements":[{"__isSmartRef__":true,"id":1093}],"sourceControl":{"__isSmartRef__":true,"id":637},"superclassName":"lively.morphic.Tests.TestCase","categories":[{"__isSmartRef__":true,"id":1094}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1093":{"name":"testAddWorldToDoc","type":"propertyDef","startIndex":3013,"stopIndex":3440,"fileName":"lively/morphic/Tests.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1094},"className":"lively.morphic.Tests.WorldTests","_owner":{"__isSmartRef__":true,"id":1092},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1094":{"name":"testing","type":"categoryDef","startIndex":3000,"stopIndex":3442,"fileName":"lively/morphic/Tests.js","_subElements":[{"__isSmartRef__":true,"id":1093}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1095":{"name":null,"type":"comment","startIndex":3446,"stopIndex":3447,"fileName":"lively/morphic/Tests.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1096":{"name":"lively.morphic.Tests.MorphTests","type":"klassDef","startIndex":3448,"stopIndex":12653,"fileName":"lively/morphic/Tests.js","_subElements":[{"__isSmartRef__":true,"id":1097},{"__isSmartRef__":true,"id":1099},{"__isSmartRef__":true,"id":1101},{"__isSmartRef__":true,"id":1102},{"__isSmartRef__":true,"id":1103},{"__isSmartRef__":true,"id":1104},{"__isSmartRef__":true,"id":1105},{"__isSmartRef__":true,"id":1106},{"__isSmartRef__":true,"id":1107},{"__isSmartRef__":true,"id":1108},{"__isSmartRef__":true,"id":1109},{"__isSmartRef__":true,"id":1110},{"__isSmartRef__":true,"id":1111},{"__isSmartRef__":true,"id":1112},{"__isSmartRef__":true,"id":1113},{"__isSmartRef__":true,"id":1114},{"__isSmartRef__":true,"id":1115},{"__isSmartRef__":true,"id":1116}],"sourceControl":{"__isSmartRef__":true,"id":637},"superclassName":"lively.morphic.Tests.TestCase","categories":[{"__isSmartRef__":true,"id":1098},{"__isSmartRef__":true,"id":1100}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1097":{"name":"setUp","type":"propertyDef","startIndex":3535,"stopIndex":3598,"fileName":"lively/morphic/Tests.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1098},"className":"lively.morphic.Tests.MorphTests","_owner":{"__isSmartRef__":true,"id":1096},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1098":{"name":"running","type":"categoryDef","startIndex":3522,"stopIndex":3601,"fileName":"lively/morphic/Tests.js","_subElements":[{"__isSmartRef__":true,"id":1097}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1099":{"name":"test01AddMorph","type":"propertyDef","startIndex":3616,"stopIndex":4098,"fileName":"lively/morphic/Tests.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1100},"className":"lively.morphic.Tests.MorphTests","_owner":{"__isSmartRef__":true,"id":1096},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1100":{"name":"testing","type":"categoryDef","startIndex":3603,"stopIndex":12650,"fileName":"lively/morphic/Tests.js","_subElements":[{"__isSmartRef__":true,"id":1099},{"__isSmartRef__":true,"id":1101},{"__isSmartRef__":true,"id":1102},{"__isSmartRef__":true,"id":1103},{"__isSmartRef__":true,"id":1104},{"__isSmartRef__":true,"id":1105},{"__isSmartRef__":true,"id":1106},{"__isSmartRef__":true,"id":1107},{"__isSmartRef__":true,"id":1108},{"__isSmartRef__":true,"id":1109},{"__isSmartRef__":true,"id":1110},{"__isSmartRef__":true,"id":1111},{"__isSmartRef__":true,"id":1112},{"__isSmartRef__":true,"id":1113},{"__isSmartRef__":true,"id":1114},{"__isSmartRef__":true,"id":1115},{"__isSmartRef__":true,"id":1116}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1101":{"name":"test02aUseSVGRenderer","type":"propertyDef","startIndex":4100,"stopIndex":4576,"fileName":"lively/morphic/Tests.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1100},"className":"lively.morphic.Tests.MorphTests","_owner":{"__isSmartRef__":true,"id":1096},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1102":{"name":"test03MorphWithSVGEllipse","type":"propertyDef","startIndex":4579,"stopIndex":5107,"fileName":"lively/morphic/Tests.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1100},"className":"lively.morphic.Tests.MorphTests","_owner":{"__isSmartRef__":true,"id":1096},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1103":{"name":"test04MorphLocalize","type":"propertyDef","startIndex":5109,"stopIndex":5378,"fileName":"lively/morphic/Tests.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1100},"className":"lively.morphic.Tests.MorphTests","_owner":{"__isSmartRef__":true,"id":1096},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1104":{"name":"test04AddMorphBefore","type":"propertyDef","startIndex":5380,"stopIndex":6096,"fileName":"lively/morphic/Tests.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1100},"className":"lively.morphic.Tests.MorphTests","_owner":{"__isSmartRef__":true,"id":1096},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1105":{"name":"xtest05DropMorph","type":"propertyDef","startIndex":6099,"stopIndex":7079,"fileName":"lively/morphic/Tests.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1100},"className":"lively.morphic.Tests.MorphTests","_owner":{"__isSmartRef__":true,"id":1096},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1106":{"name":"testMorphBounds","type":"propertyDef","startIndex":7081,"stopIndex":7433,"fileName":"lively/morphic/Tests.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1100},"className":"lively.morphic.Tests.MorphTests","_owner":{"__isSmartRef__":true,"id":1096},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1107":{"name":"test07MorphBoundsOnCreation","type":"propertyDef","startIndex":7435,"stopIndex":7757,"fileName":"lively/morphic/Tests.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1100},"className":"lively.morphic.Tests.MorphTests","_owner":{"__isSmartRef__":true,"id":1096},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1108":{"name":"test08aCreateMorphWithLinearGradient","type":"propertyDef","startIndex":7759,"stopIndex":8316,"fileName":"lively/morphic/Tests.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1100},"className":"lively.morphic.Tests.MorphTests","_owner":{"__isSmartRef__":true,"id":1096},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1109":{"name":"test08bCreateMorphWithradialGradient","type":"propertyDef","startIndex":8318,"stopIndex":8904,"fileName":"lively/morphic/Tests.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1100},"className":"lively.morphic.Tests.MorphTests","_owner":{"__isSmartRef__":true,"id":1096},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1110":{"name":"test09BorderColorAndWidth","type":"propertyDef","startIndex":8906,"stopIndex":9583,"fileName":"lively/morphic/Tests.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1100},"className":"lively.morphic.Tests.MorphTests","_owner":{"__isSmartRef__":true,"id":1096},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1111":{"name":"test10BorderRadiusHTML","type":"propertyDef","startIndex":9585,"stopIndex":9976,"fileName":"lively/morphic/Tests.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1100},"className":"lively.morphic.Tests.MorphTests","_owner":{"__isSmartRef__":true,"id":1096},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1112":{"name":"test11DragMorph","type":"propertyDef","startIndex":9978,"stopIndex":11143,"fileName":"lively/morphic/Tests.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1100},"className":"lively.morphic.Tests.MorphTests","_owner":{"__isSmartRef__":true,"id":1096},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1113":{"name":"test12ModifyOrigin","type":"propertyDef","startIndex":11145,"stopIndex":11416,"fileName":"lively/morphic/Tests.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1100},"className":"lively.morphic.Tests.MorphTests","_owner":{"__isSmartRef__":true,"id":1096},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1114":{"name":"test13ModifyOriginWithTransformation","type":"propertyDef","startIndex":11418,"stopIndex":11902,"fileName":"lively/morphic/Tests.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1100},"className":"lively.morphic.Tests.MorphTests","_owner":{"__isSmartRef__":true,"id":1096},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1115":{"name":"test14ModifyOriginWithScale","type":"propertyDef","startIndex":11904,"stopIndex":12246,"fileName":"lively/morphic/Tests.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1100},"className":"lively.morphic.Tests.MorphTests","_owner":{"__isSmartRef__":true,"id":1096},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1116":{"name":"test15ModifyOriginWithSubmorphs","type":"propertyDef","startIndex":12248,"stopIndex":12643,"fileName":"lively/morphic/Tests.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1100},"className":"lively.morphic.Tests.MorphTests","_owner":{"__isSmartRef__":true,"id":1096},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1117":{"name":null,"type":"comment","startIndex":12654,"stopIndex":12654,"fileName":"lively/morphic/Tests.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1118":{"name":"lively.morphic.Tests.CopyMorphTests","type":"klassDef","startIndex":12655,"stopIndex":14339,"fileName":"lively/morphic/Tests.js","_subElements":[{"__isSmartRef__":true,"id":1119},{"__isSmartRef__":true,"id":1121},{"__isSmartRef__":true,"id":1122},{"__isSmartRef__":true,"id":1123}],"sourceControl":{"__isSmartRef__":true,"id":637},"superclassName":"lively.morphic.Tests.MorphTests","categories":[{"__isSmartRef__":true,"id":1120}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1119":{"name":"test01CopySimpleMorph","type":"propertyDef","startIndex":12748,"stopIndex":13034,"fileName":"lively/morphic/Tests.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1120},"className":"lively.morphic.Tests.CopyMorphTests","_owner":{"__isSmartRef__":true,"id":1118},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1120":{"name":"testing","type":"categoryDef","startIndex":12735,"stopIndex":14336,"fileName":"lively/morphic/Tests.js","_subElements":[{"__isSmartRef__":true,"id":1119},{"__isSmartRef__":true,"id":1121},{"__isSmartRef__":true,"id":1122},{"__isSmartRef__":true,"id":1123}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1121":{"name":"test02ReferencedMorphThatIsNotASubmorphIsNotCopied","type":"propertyDef","startIndex":13036,"stopIndex":13625,"fileName":"lively/morphic/Tests.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1120},"className":"lively.morphic.Tests.CopyMorphTests","_owner":{"__isSmartRef__":true,"id":1118},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1122":{"name":"test03OwnerIsNotCopied","type":"propertyDef","startIndex":13627,"stopIndex":13802,"fileName":"lively/morphic/Tests.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1120},"className":"lively.morphic.Tests.CopyMorphTests","_owner":{"__isSmartRef__":true,"id":1118},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1123":{"name":"test04CopyMorphTreeWithEventHandlers","type":"propertyDef","startIndex":13804,"stopIndex":14331,"fileName":"lively/morphic/Tests.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1120},"className":"lively.morphic.Tests.CopyMorphTests","_owner":{"__isSmartRef__":true,"id":1118},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1124":{"name":"lively.morphic.Tests.TextMorphTests","type":"klassDef","startIndex":14340,"stopIndex":17432,"fileName":"lively/morphic/Tests.js","_subElements":[{"__isSmartRef__":true,"id":1125},{"__isSmartRef__":true,"id":1127},{"__isSmartRef__":true,"id":1128},{"__isSmartRef__":true,"id":1129},{"__isSmartRef__":true,"id":1130},{"__isSmartRef__":true,"id":1131},{"__isSmartRef__":true,"id":1132}],"sourceControl":{"__isSmartRef__":true,"id":637},"superclassName":"lively.morphic.Tests.MorphTests","categories":[{"__isSmartRef__":true,"id":1126}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1125":{"name":"test01TextMorphHTML","type":"propertyDef","startIndex":14433,"stopIndex":14798,"fileName":"lively/morphic/Tests.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1126},"className":"lively.morphic.Tests.TextMorphTests","_owner":{"__isSmartRef__":true,"id":1124},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1126":{"name":"testing","type":"categoryDef","startIndex":14420,"stopIndex":17429,"fileName":"lively/morphic/Tests.js","_subElements":[{"__isSmartRef__":true,"id":1125},{"__isSmartRef__":true,"id":1127},{"__isSmartRef__":true,"id":1128},{"__isSmartRef__":true,"id":1129},{"__isSmartRef__":true,"id":1130},{"__isSmartRef__":true,"id":1131},{"__isSmartRef__":true,"id":1132}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1127":{"name":"test02TextMorphSVG","type":"propertyDef","startIndex":14800,"stopIndex":15197,"fileName":"lively/morphic/Tests.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1126},"className":"lively.morphic.Tests.TextMorphTests","_owner":{"__isSmartRef__":true,"id":1124},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1128":{"name":"test03TextStringIsConnectable","type":"propertyDef","startIndex":15199,"stopIndex":15463,"fileName":"lively/morphic/Tests.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1126},"className":"lively.morphic.Tests.TextMorphTests","_owner":{"__isSmartRef__":true,"id":1124},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1129":{"name":"test04GrowToFit","type":"propertyDef","startIndex":15465,"stopIndex":15768,"fileName":"lively/morphic/Tests.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1126},"className":"lively.morphic.Tests.TextMorphTests","_owner":{"__isSmartRef__":true,"id":1124},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1130":{"name":"test05SetSelectionRange","type":"propertyDef","startIndex":15771,"stopIndex":16209,"fileName":"lively/morphic/Tests.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1126},"className":"lively.morphic.Tests.TextMorphTests","_owner":{"__isSmartRef__":true,"id":1124},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1131":{"name":"test06ModifySelectedLinesInsertsAtCorrectPosition","type":"propertyDef","startIndex":16211,"stopIndex":16610,"fileName":"lively/morphic/Tests.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1126},"className":"lively.morphic.Tests.TextMorphTests","_owner":{"__isSmartRef__":true,"id":1124},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1132":{"name":"test07bScrollSelectionAtBottomIntoView","type":"propertyDef","startIndex":16614,"stopIndex":17425,"fileName":"lively/morphic/Tests.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1126},"className":"lively.morphic.Tests.TextMorphTests","_owner":{"__isSmartRef__":true,"id":1124},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1133":{"name":null,"type":"comment","startIndex":17433,"stopIndex":17433,"fileName":"lively/morphic/Tests.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1134":{"name":"lively.morphic.Tests.RichTextHTMLTests","type":"klassDef","startIndex":17434,"stopIndex":31094,"fileName":"lively/morphic/Tests.js","_subElements":[{"__isSmartRef__":true,"id":1135},{"__isSmartRef__":true,"id":1137},{"__isSmartRef__":true,"id":1138},{"__isSmartRef__":true,"id":1139},{"__isSmartRef__":true,"id":1140},{"__isSmartRef__":true,"id":1142},{"__isSmartRef__":true,"id":1143},{"__isSmartRef__":true,"id":1144},{"__isSmartRef__":true,"id":1145},{"__isSmartRef__":true,"id":1146},{"__isSmartRef__":true,"id":1147},{"__isSmartRef__":true,"id":1148},{"__isSmartRef__":true,"id":1149},{"__isSmartRef__":true,"id":1150},{"__isSmartRef__":true,"id":1151},{"__isSmartRef__":true,"id":1152},{"__isSmartRef__":true,"id":1153},{"__isSmartRef__":true,"id":1154},{"__isSmartRef__":true,"id":1155},{"__isSmartRef__":true,"id":1156},{"__isSmartRef__":true,"id":1157},{"__isSmartRef__":true,"id":1158},{"__isSmartRef__":true,"id":1159},{"__isSmartRef__":true,"id":1160},{"__isSmartRef__":true,"id":1161},{"__isSmartRef__":true,"id":1162},{"__isSmartRef__":true,"id":1163},{"__isSmartRef__":true,"id":1164},{"__isSmartRef__":true,"id":1165},{"__isSmartRef__":true,"id":1166},{"__isSmartRef__":true,"id":1167}],"sourceControl":{"__isSmartRef__":true,"id":637},"superclassName":"lively.morphic.Tests.MorphTests","categories":[{"__isSmartRef__":true,"id":1136},{"__isSmartRef__":true,"id":1141}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1135":{"name":"setUp","type":"propertyDef","startIndex":17530,"stopIndex":17845,"fileName":"lively/morphic/Tests.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1136},"className":"lively.morphic.Tests.RichTextHTMLTests","_owner":{"__isSmartRef__":true,"id":1134},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1136":{"name":"running","type":"categoryDef","startIndex":17517,"stopIndex":18368,"fileName":"lively/morphic/Tests.js","_subElements":[{"__isSmartRef__":true,"id":1135},{"__isSmartRef__":true,"id":1137},{"__isSmartRef__":true,"id":1138},{"__isSmartRef__":true,"id":1139}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1137":{"name":"checkRunArray","type":"propertyDef","startIndex":17847,"stopIndex":17975,"fileName":"lively/morphic/Tests.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1136},"className":"lively.morphic.Tests.RichTextHTMLTests","_owner":{"__isSmartRef__":true,"id":1134},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1138":{"name":"checkChunks","type":"propertyDef","startIndex":17977,"stopIndex":18085,"fileName":"lively/morphic/Tests.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1136},"className":"lively.morphic.Tests.RichTextHTMLTests","_owner":{"__isSmartRef__":true,"id":1134},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1139":{"name":"checkDOM","type":"propertyDef","startIndex":18088,"stopIndex":18363,"fileName":"lively/morphic/Tests.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1136},"className":"lively.morphic.Tests.RichTextHTMLTests","_owner":{"__isSmartRef__":true,"id":1134},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1140":{"name":"test01MorphHasTextChunk","type":"propertyDef","startIndex":18383,"stopIndex":18746,"fileName":"lively/morphic/Tests.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1141},"className":"lively.morphic.Tests.RichTextHTMLTests","_owner":{"__isSmartRef__":true,"id":1134},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1141":{"name":"testing","type":"categoryDef","startIndex":18370,"stopIndex":31091,"fileName":"lively/morphic/Tests.js","_subElements":[{"__isSmartRef__":true,"id":1140},{"__isSmartRef__":true,"id":1142},{"__isSmartRef__":true,"id":1143},{"__isSmartRef__":true,"id":1144},{"__isSmartRef__":true,"id":1145},{"__isSmartRef__":true,"id":1146},{"__isSmartRef__":true,"id":1147},{"__isSmartRef__":true,"id":1148},{"__isSmartRef__":true,"id":1149},{"__isSmartRef__":true,"id":1150},{"__isSmartRef__":true,"id":1151},{"__isSmartRef__":true,"id":1152},{"__isSmartRef__":true,"id":1153},{"__isSmartRef__":true,"id":1154},{"__isSmartRef__":true,"id":1155},{"__isSmartRef__":true,"id":1156},{"__isSmartRef__":true,"id":1157},{"__isSmartRef__":true,"id":1158},{"__isSmartRef__":true,"id":1159},{"__isSmartRef__":true,"id":1160},{"__isSmartRef__":true,"id":1161},{"__isSmartRef__":true,"id":1162},{"__isSmartRef__":true,"id":1163},{"__isSmartRef__":true,"id":1164},{"__isSmartRef__":true,"id":1165},{"__isSmartRef__":true,"id":1166},{"__isSmartRef__":true,"id":1167}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1142":{"name":"test02MorphHasTextChunkWhenTextStringIsSet","type":"propertyDef","startIndex":18748,"stopIndex":19027,"fileName":"lively/morphic/Tests.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1141},"className":"lively.morphic.Tests.RichTextHTMLTests","_owner":{"__isSmartRef__":true,"id":1134},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1143":{"name":"test03SplitAndJoinTextChunks","type":"propertyDef","startIndex":19029,"stopIndex":19832,"fileName":"lively/morphic/Tests.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1141},"className":"lively.morphic.Tests.RichTextHTMLTests","_owner":{"__isSmartRef__":true,"id":1134},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1144":{"name":"test03bCoalesceChunks","type":"propertyDef","startIndex":19834,"stopIndex":20122,"fileName":"lively/morphic/Tests.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1141},"className":"lively.morphic.Tests.RichTextHTMLTests","_owner":{"__isSmartRef__":true,"id":1134},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1145":{"name":"test03cSplitAtFrontAndBack","type":"propertyDef","startIndex":20124,"stopIndex":20488,"fileName":"lively/morphic/Tests.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1141},"className":"lively.morphic.Tests.RichTextHTMLTests","_owner":{"__isSmartRef__":true,"id":1134},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1146":{"name":"test03cSplittedChunkGetsStyle","type":"propertyDef","startIndex":20490,"stopIndex":20767,"fileName":"lively/morphic/Tests.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1141},"className":"lively.morphic.Tests.RichTextHTMLTests","_owner":{"__isSmartRef__":true,"id":1134},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1147":{"name":"test04SliceTextChunksSimple","type":"propertyDef","startIndex":20772,"stopIndex":21121,"fileName":"lively/morphic/Tests.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1141},"className":"lively.morphic.Tests.RichTextHTMLTests","_owner":{"__isSmartRef__":true,"id":1134},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1148":{"name":"test04SliceTextChunks","type":"propertyDef","startIndex":21124,"stopIndex":21553,"fileName":"lively/morphic/Tests.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1141},"className":"lively.morphic.Tests.RichTextHTMLTests","_owner":{"__isSmartRef__":true,"id":1134},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1149":{"name":"test04SliceTextChunksAgain","type":"propertyDef","startIndex":21555,"stopIndex":21829,"fileName":"lively/morphic/Tests.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1141},"className":"lively.morphic.Tests.RichTextHTMLTests","_owner":{"__isSmartRef__":true,"id":1134},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1150":{"name":"test05StyleChunk","type":"propertyDef","startIndex":21832,"stopIndex":22051,"fileName":"lively/morphic/Tests.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1141},"className":"lively.morphic.Tests.RichTextHTMLTests","_owner":{"__isSmartRef__":true,"id":1134},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1151":{"name":"test06MakeTextBold","type":"propertyDef","startIndex":22053,"stopIndex":22409,"fileName":"lively/morphic/Tests.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1141},"className":"lively.morphic.Tests.RichTextHTMLTests","_owner":{"__isSmartRef__":true,"id":1134},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1152":{"name":"test07MakeTextBoldThenUnbold","type":"propertyDef","startIndex":22414,"stopIndex":22663,"fileName":"lively/morphic/Tests.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1141},"className":"lively.morphic.Tests.RichTextHTMLTests","_owner":{"__isSmartRef__":true,"id":1134},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1153":{"name":"test08ToggleBoldnessComplete","type":"propertyDef","startIndex":22665,"stopIndex":23021,"fileName":"lively/morphic/Tests.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1141},"className":"lively.morphic.Tests.RichTextHTMLTests","_owner":{"__isSmartRef__":true,"id":1134},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1154":{"name":"test09ChunksAreSerializable","type":"propertyDef","startIndex":23023,"stopIndex":23428,"fileName":"lively/morphic/Tests.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1141},"className":"lively.morphic.Tests.RichTextHTMLTests","_owner":{"__isSmartRef__":true,"id":1134},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1155":{"name":"test10ConvertSelectionRangeForEmphasis","type":"propertyDef","startIndex":23430,"stopIndex":24007,"fileName":"lively/morphic/Tests.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1141},"className":"lively.morphic.Tests.RichTextHTMLTests","_owner":{"__isSmartRef__":true,"id":1134},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1156":{"name":"test11ToggleBoldnessWithChunkWithMultipleTextNodes","type":"propertyDef","startIndex":24009,"stopIndex":24774,"fileName":"lively/morphic/Tests.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1141},"className":"lively.morphic.Tests.RichTextHTMLTests","_owner":{"__isSmartRef__":true,"id":1134},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1157":{"name":"test11FixChunksShouldKeepSlection","type":"propertyDef","startIndex":24776,"stopIndex":25376,"fileName":"lively/morphic/Tests.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1141},"className":"lively.morphic.Tests.RichTextHTMLTests","_owner":{"__isSmartRef__":true,"id":1134},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1158":{"name":"test12GetAndSetSelectionRangeHaveEqualValues","type":"propertyDef","startIndex":25378,"stopIndex":25633,"fileName":"lively/morphic/Tests.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1141},"className":"lively.morphic.Tests.RichTextHTMLTests","_owner":{"__isSmartRef__":true,"id":1134},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1159":{"name":"test13InsertedTextBetweenChunksIsAssimilated","type":"propertyDef","startIndex":25635,"stopIndex":26390,"fileName":"lively/morphic/Tests.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1141},"className":"lively.morphic.Tests.RichTextHTMLTests","_owner":{"__isSmartRef__":true,"id":1134},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1160":{"name":"test14GetEmphasisAt","type":"propertyDef","startIndex":26392,"stopIndex":26947,"fileName":"lively/morphic/Tests.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1141},"className":"lively.morphic.Tests.RichTextHTMLTests","_owner":{"__isSmartRef__":true,"id":1134},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1161":{"name":"test15GetChunkAndLocalIndex","type":"propertyDef","startIndex":26950,"stopIndex":27850,"fileName":"lively/morphic/Tests.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1141},"className":"lively.morphic.Tests.RichTextHTMLTests","_owner":{"__isSmartRef__":true,"id":1134},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1162":{"name":"test16AddLink","type":"propertyDef","startIndex":27852,"stopIndex":28247,"fileName":"lively/morphic/Tests.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1141},"className":"lively.morphic.Tests.RichTextHTMLTests","_owner":{"__isSmartRef__":true,"id":1134},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1163":{"name":"test17AddLinkMakeBoldThenUnbold","type":"propertyDef","startIndex":28249,"stopIndex":28698,"fileName":"lively/morphic/Tests.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1141},"className":"lively.morphic.Tests.RichTextHTMLTests","_owner":{"__isSmartRef__":true,"id":1134},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1164":{"name":"test18LinkifiedChunkShouldKeepLinkWhenTextStringChanges","type":"propertyDef","startIndex":28700,"stopIndex":29074,"fileName":"lively/morphic/Tests.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1141},"className":"lively.morphic.Tests.RichTextHTMLTests","_owner":{"__isSmartRef__":true,"id":1134},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1165":{"name":"test19FixChunksShouldRemoveElements","type":"propertyDef","startIndex":29076,"stopIndex":29582,"fileName":"lively/morphic/Tests.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1141},"className":"lively.morphic.Tests.RichTextHTMLTests","_owner":{"__isSmartRef__":true,"id":1134},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1166":{"name":"test20HandleSplittedSpanNodes","type":"propertyDef","startIndex":29584,"stopIndex":30261,"fileName":"lively/morphic/Tests.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1141},"className":"lively.morphic.Tests.RichTextHTMLTests","_owner":{"__isSmartRef__":true,"id":1134},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1167":{"name":"test21HandleSplittedSpanNodesAndTextAttributes","type":"propertyDef","startIndex":30263,"stopIndex":31085,"fileName":"lively/morphic/Tests.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1141},"className":"lively.morphic.Tests.RichTextHTMLTests","_owner":{"__isSmartRef__":true,"id":1134},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1168":{"name":"lively.morphic.Tests.ButtonMorphTests","type":"klassDef","startIndex":31095,"stopIndex":31396,"fileName":"lively/morphic/Tests.js","_subElements":[{"__isSmartRef__":true,"id":1169}],"sourceControl":{"__isSmartRef__":true,"id":637},"superclassName":"lively.morphic.Tests.MorphTests","categories":[{"__isSmartRef__":true,"id":1170}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1169":{"name":"test01MorphBoundsOnCreation","type":"propertyDef","startIndex":31190,"stopIndex":31391,"fileName":"lively/morphic/Tests.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1170},"className":"lively.morphic.Tests.ButtonMorphTests","_owner":{"__isSmartRef__":true,"id":1168},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1170":{"name":"testing","type":"categoryDef","startIndex":31177,"stopIndex":31393,"fileName":"lively/morphic/Tests.js","_subElements":[{"__isSmartRef__":true,"id":1169}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1171":{"name":"lively.morphic.Tests.ListMorphTests","type":"klassDef","startIndex":31397,"stopIndex":33986,"fileName":"lively/morphic/Tests.js","_subElements":[{"__isSmartRef__":true,"id":1172},{"__isSmartRef__":true,"id":1174},{"__isSmartRef__":true,"id":1175},{"__isSmartRef__":true,"id":1176},{"__isSmartRef__":true,"id":1177},{"__isSmartRef__":true,"id":1178},{"__isSmartRef__":true,"id":1179}],"sourceControl":{"__isSmartRef__":true,"id":637},"superclassName":"lively.morphic.Tests.MorphTests","categories":[{"__isSmartRef__":true,"id":1173}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1172":{"name":"test01SetAndRetrieveStringItems","type":"propertyDef","startIndex":31490,"stopIndex":31759,"fileName":"lively/morphic/Tests.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1173},"className":"lively.morphic.Tests.ListMorphTests","_owner":{"__isSmartRef__":true,"id":1171},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1173":{"name":"testing","type":"categoryDef","startIndex":31477,"stopIndex":33983,"fileName":"lively/morphic/Tests.js","_subElements":[{"__isSmartRef__":true,"id":1172},{"__isSmartRef__":true,"id":1174},{"__isSmartRef__":true,"id":1175},{"__isSmartRef__":true,"id":1176},{"__isSmartRef__":true,"id":1177},{"__isSmartRef__":true,"id":1178},{"__isSmartRef__":true,"id":1179}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1174":{"name":"test02SelectAt","type":"propertyDef","startIndex":31761,"stopIndex":32123,"fileName":"lively/morphic/Tests.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1173},"className":"lively.morphic.Tests.ListMorphTests","_owner":{"__isSmartRef__":true,"id":1171},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1175":{"name":"test03SelectListItem","type":"propertyDef","startIndex":32125,"stopIndex":32447,"fileName":"lively/morphic/Tests.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1173},"className":"lively.morphic.Tests.ListMorphTests","_owner":{"__isSmartRef__":true,"id":1171},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1176":{"name":"test04ListMorphBoundsOnCreationInHTML","type":"propertyDef","startIndex":32450,"stopIndex":32826,"fileName":"lively/morphic/Tests.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1173},"className":"lively.morphic.Tests.ListMorphTests","_owner":{"__isSmartRef__":true,"id":1171},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1177":{"name":"test05ListMorphKeepsSelectionHighlightOnUpdateList","type":"propertyDef","startIndex":32828,"stopIndex":33251,"fileName":"lively/morphic/Tests.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1173},"className":"lively.morphic.Tests.ListMorphTests","_owner":{"__isSmartRef__":true,"id":1171},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1178":{"name":"test06SetSelectionWithListItems","type":"propertyDef","startIndex":33253,"stopIndex":33558,"fileName":"lively/morphic/Tests.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1173},"className":"lively.morphic.Tests.ListMorphTests","_owner":{"__isSmartRef__":true,"id":1171},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1179":{"name":"testAddMorphDuplicatesListsBug","type":"propertyDef","startIndex":33560,"stopIndex":33977,"fileName":"lively/morphic/Tests.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1173},"className":"lively.morphic.Tests.ListMorphTests","_owner":{"__isSmartRef__":true,"id":1171},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1180":{"name":"lively.morphic.Tests.AppTests","type":"klassDef","startIndex":33987,"stopIndex":34793,"fileName":"lively/morphic/Tests.js","_subElements":[{"__isSmartRef__":true,"id":1181},{"__isSmartRef__":true,"id":1183}],"sourceControl":{"__isSmartRef__":true,"id":637},"superclassName":"lively.morphic.Tests.MorphTests","categories":[{"__isSmartRef__":true,"id":1182}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1181":{"name":"test01ConfirmDialog","type":"propertyDef","startIndex":34074,"stopIndex":34393,"fileName":"lively/morphic/Tests.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1182},"className":"lively.morphic.Tests.AppTests","_owner":{"__isSmartRef__":true,"id":1180},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1182":{"name":"testing","type":"categoryDef","startIndex":34061,"stopIndex":34790,"fileName":"lively/morphic/Tests.js","_subElements":[{"__isSmartRef__":true,"id":1181},{"__isSmartRef__":true,"id":1183}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1183":{"name":"test02PromptDialog","type":"propertyDef","startIndex":34395,"stopIndex":34788,"fileName":"lively/morphic/Tests.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1182},"className":"lively.morphic.Tests.AppTests","_owner":{"__isSmartRef__":true,"id":1180},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1184":{"name":"lively.morphic.Tests.CanvasRenderingTests","type":"klassDef","startIndex":34794,"stopIndex":35757,"fileName":"lively/morphic/Tests.js","_subElements":[{"__isSmartRef__":true,"id":1185},{"__isSmartRef__":true,"id":1187}],"sourceControl":{"__isSmartRef__":true,"id":637},"superclassName":"lively.morphic.Tests.MorphTests","categories":[{"__isSmartRef__":true,"id":1186}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1185":{"name":"test01UseCanvasRendererForSimpleMorph","type":"propertyDef","startIndex":34893,"stopIndex":35293,"fileName":"lively/morphic/Tests.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1186},"className":"lively.morphic.Tests.CanvasRenderingTests","_owner":{"__isSmartRef__":true,"id":1184},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1186":{"name":"testing","type":"categoryDef","startIndex":34880,"stopIndex":35754,"fileName":"lively/morphic/Tests.js","_subElements":[{"__isSmartRef__":true,"id":1185},{"__isSmartRef__":true,"id":1187}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1187":{"name":"test02MorphAndSubmorphWithCanvas","type":"propertyDef","startIndex":35295,"stopIndex":35752,"fileName":"lively/morphic/Tests.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1186},"className":"lively.morphic.Tests.CanvasRenderingTests","_owner":{"__isSmartRef__":true,"id":1184},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1188":{"name":"lively.morphic.Tests.SimilitudeTests","type":"klassDef","startIndex":35758,"stopIndex":36279,"fileName":"lively/morphic/Tests.js","_subElements":[{"__isSmartRef__":true,"id":1189}],"sourceControl":{"__isSmartRef__":true,"id":637},"superclassName":"TestCase","categories":[{"__isSmartRef__":true,"id":1190}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1189":{"name":"test01PointTransform","type":"propertyDef","startIndex":35829,"stopIndex":36274,"fileName":"lively/morphic/Tests.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1190},"className":"lively.morphic.Tests.SimilitudeTests","_owner":{"__isSmartRef__":true,"id":1188},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1190":{"name":"testing","type":"categoryDef","startIndex":35816,"stopIndex":36276,"fileName":"lively/morphic/Tests.js","_subElements":[{"__isSmartRef__":true,"id":1189}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1191":{"name":"lively.morphic.Tests.ScriptTests","type":"klassDef","startIndex":36280,"stopIndex":37568,"fileName":"lively/morphic/Tests.js","_subElements":[{"__isSmartRef__":true,"id":1192},{"__isSmartRef__":true,"id":1194},{"__isSmartRef__":true,"id":1195}],"sourceControl":{"__isSmartRef__":true,"id":637},"superclassName":"AsyncTestCase","categories":[{"__isSmartRef__":true,"id":1193}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1192":{"name":"test01StartAndStopTicking","type":"propertyDef","startIndex":36352,"stopIndex":36618,"fileName":"lively/morphic/Tests.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1193},"className":"lively.morphic.Tests.ScriptTests","_owner":{"__isSmartRef__":true,"id":1191},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1193":{"name":"testing","type":"categoryDef","startIndex":36339,"stopIndex":37565,"fileName":"lively/morphic/Tests.js","_subElements":[{"__isSmartRef__":true,"id":1192},{"__isSmartRef__":true,"id":1194},{"__isSmartRef__":true,"id":1195}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1194":{"name":"test02SuspendAndContinue","type":"propertyDef","startIndex":36620,"stopIndex":37090,"fileName":"lively/morphic/Tests.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1193},"className":"lively.morphic.Tests.ScriptTests","_owner":{"__isSmartRef__":true,"id":1191},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1195":{"name":"test03MorphStartStepping","type":"propertyDef","startIndex":37092,"stopIndex":37562,"fileName":"lively/morphic/Tests.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1193},"className":"lively.morphic.Tests.ScriptTests","_owner":{"__isSmartRef__":true,"id":1191},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1196":{"name":"lively.morphic.Tests.SerializationTests","type":"klassDef","startIndex":37569,"stopIndex":38233,"fileName":"lively/morphic/Tests.js","_subElements":[{"__isSmartRef__":true,"id":1197}],"sourceControl":{"__isSmartRef__":true,"id":637},"superclassName":"lively.morphic.Tests.TestCase","categories":[{"__isSmartRef__":true,"id":1198}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1197":{"name":"test01SerializeSimpleWorld","type":"propertyDef","startIndex":37664,"stopIndex":38228,"fileName":"lively/morphic/Tests.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1198},"className":"lively.morphic.Tests.SerializationTests","_owner":{"__isSmartRef__":true,"id":1196},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1198":{"name":"testing","type":"categoryDef","startIndex":37651,"stopIndex":38230,"fileName":"lively/morphic/Tests.js","_subElements":[{"__isSmartRef__":true,"id":1197}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1199":{"name":"lively.morphic.Tests.HaloTests","type":"klassDef","startIndex":38234,"stopIndex":39698,"fileName":"lively/morphic/Tests.js","_subElements":[{"__isSmartRef__":true,"id":1200},{"__isSmartRef__":true,"id":1202},{"__isSmartRef__":true,"id":1203}],"sourceControl":{"__isSmartRef__":true,"id":637},"superclassName":"lively.morphic.Tests.TestCase","categories":[{"__isSmartRef__":true,"id":1201}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1200":{"name":"test01ShowHalosForMorph","type":"propertyDef","startIndex":38320,"stopIndex":38623,"fileName":"lively/morphic/Tests.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1201},"className":"lively.morphic.Tests.HaloTests","_owner":{"__isSmartRef__":true,"id":1199},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1201":{"name":"testing","type":"categoryDef","startIndex":38307,"stopIndex":39695,"fileName":"lively/morphic/Tests.js","_subElements":[{"__isSmartRef__":true,"id":1200},{"__isSmartRef__":true,"id":1202},{"__isSmartRef__":true,"id":1203}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1202":{"name":"test02HalosStayInVisibleBounds","type":"propertyDef","startIndex":38625,"stopIndex":39087,"fileName":"lively/morphic/Tests.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1201},"className":"lively.morphic.Tests.HaloTests","_owner":{"__isSmartRef__":true,"id":1199},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1203":{"name":"testTransformRectSoThatItFitsInOuter","type":"propertyDef","startIndex":39089,"stopIndex":39691,"fileName":"lively/morphic/Tests.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1201},"className":"lively.morphic.Tests.HaloTests","_owner":{"__isSmartRef__":true,"id":1199},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1204":{"name":null,"type":"comment","startIndex":39699,"stopIndex":39700,"fileName":"lively/morphic/Tests.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1205":{"name":"lively.morphic.Tests.ImageTests","type":"klassDef","startIndex":39701,"stopIndex":40197,"fileName":"lively/morphic/Tests.js","_subElements":[{"__isSmartRef__":true,"id":1206}],"sourceControl":{"__isSmartRef__":true,"id":637},"superclassName":"lively.morphic.Tests.MorphTests","categories":[{"__isSmartRef__":true,"id":1207}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1206":{"name":"testImageMorphHTML","type":"propertyDef","startIndex":39790,"stopIndex":40192,"fileName":"lively/morphic/Tests.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1207},"className":"lively.morphic.Tests.ImageTests","_owner":{"__isSmartRef__":true,"id":1205},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1207":{"name":"testing","type":"categoryDef","startIndex":39777,"stopIndex":40194,"fileName":"lively/morphic/Tests.js","_subElements":[{"__isSmartRef__":true,"id":1206}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1208":{"name":"lively.morphic.Tests.MenuTests","type":"klassDef","startIndex":40198,"stopIndex":40667,"fileName":"lively/morphic/Tests.js","_subElements":[{"__isSmartRef__":true,"id":1209}],"sourceControl":{"__isSmartRef__":true,"id":637},"superclassName":"lively.morphic.Tests.MorphTests","categories":[{"__isSmartRef__":true,"id":1210}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1209":{"name":"testWrongSubMenuItems","type":"propertyDef","startIndex":40286,"stopIndex":40662,"fileName":"lively/morphic/Tests.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1210},"className":"lively.morphic.Tests.MenuTests","_owner":{"__isSmartRef__":true,"id":1208},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1210":{"name":"testing","type":"categoryDef","startIndex":40273,"stopIndex":40664,"fileName":"lively/morphic/Tests.js","_subElements":[{"__isSmartRef__":true,"id":1209}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1211":{"name":"lively.morphic.Tests.ExternalShapesTests","type":"klassDef","startIndex":40668,"stopIndex":41099,"fileName":"lively/morphic/Tests.js","_subElements":[{"__isSmartRef__":true,"id":1212}],"sourceControl":{"__isSmartRef__":true,"id":637},"superclassName":"lively.morphic.Tests.MorphTests","categories":[{"__isSmartRef__":true,"id":1213}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1212":{"name":"test01AddADivShape","type":"propertyDef","startIndex":40766,"stopIndex":41094,"fileName":"lively/morphic/Tests.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1213},"className":"lively.morphic.Tests.ExternalShapesTests","_owner":{"__isSmartRef__":true,"id":1211},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1213":{"name":"testing","type":"categoryDef","startIndex":40753,"stopIndex":41096,"fileName":"lively/morphic/Tests.js","_subElements":[{"__isSmartRef__":true,"id":1212}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1214":{"name":"lively.morphic.Tests.SelectionTest","type":"klassDef","startIndex":41100,"stopIndex":43757,"fileName":"lively/morphic/Tests.js","_subElements":[{"__isSmartRef__":true,"id":1215},{"__isSmartRef__":true,"id":1217},{"__isSmartRef__":true,"id":1218},{"__isSmartRef__":true,"id":1219}],"sourceControl":{"__isSmartRef__":true,"id":637},"superclassName":"lively.morphic.Tests.MorphTests","categories":[{"__isSmartRef__":true,"id":1216}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1215":{"name":"testGrabByHand","type":"propertyDef","startIndex":41192,"stopIndex":42112,"fileName":"lively/morphic/Tests.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1216},"className":"lively.morphic.Tests.SelectionTest","_owner":{"__isSmartRef__":true,"id":1214},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1216":{"name":"testing","type":"categoryDef","startIndex":41179,"stopIndex":43754,"fileName":"lively/morphic/Tests.js","_subElements":[{"__isSmartRef__":true,"id":1215},{"__isSmartRef__":true,"id":1217},{"__isSmartRef__":true,"id":1218},{"__isSmartRef__":true,"id":1219}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1217":{"name":"testDropOn","type":"propertyDef","startIndex":42114,"stopIndex":42761,"fileName":"lively/morphic/Tests.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1216},"className":"lively.morphic.Tests.SelectionTest","_owner":{"__isSmartRef__":true,"id":1214},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1218":{"name":"testAddMorph","type":"propertyDef","startIndex":42765,"stopIndex":43241,"fileName":"lively/morphic/Tests.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1216},"className":"lively.morphic.Tests.SelectionTest","_owner":{"__isSmartRef__":true,"id":1214},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1219":{"name":"testAddMorphWithSelectionInHand","type":"propertyDef","startIndex":43244,"stopIndex":43752,"fileName":"lively/morphic/Tests.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1216},"className":"lively.morphic.Tests.SelectionTest","_owner":{"__isSmartRef__":true,"id":1214},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1220":{"name":null,"type":"comment","startIndex":43758,"stopIndex":43760,"fileName":"lively/morphic/Tests.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1221":{"target":{"__isSmartRef__":true,"id":1222},"browser":{"__isSmartRef__":true,"id":439},"parent":{"__isSmartRef__":true,"id":636},"moduleName":"lively/morphic/TextCore.js","showAll":false,"__LivelyClassName__":"lively.ide.CompleteFileFragmentNode","__SourceModuleName__":"Global.lively.ide.SystemBrowserNodes"},"1222":{"name":"lively.morphic.TextCore","type":"moduleDef","startIndex":0,"stopIndex":57539,"fileName":"lively/morphic/TextCore.js","_subElements":[{"__isSmartRef__":true,"id":1223},{"__isSmartRef__":true,"id":1224},{"__isSmartRef__":true,"id":1370},{"__isSmartRef__":true,"id":1373},{"__isSmartRef__":true,"id":1385},{"__isSmartRef__":true,"id":1386},{"__isSmartRef__":true,"id":1419},{"__isSmartRef__":true,"id":1420},{"__isSmartRef__":true,"id":1452},{"__isSmartRef__":true,"id":1453},{"__isSmartRef__":true,"id":1457}],"sourceControl":{"__isSmartRef__":true,"id":637},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1223":{"name":null,"type":"comment","startIndex":99,"stopIndex":99,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1224":{"name":"lively.morphic.Text","type":"klassDef","startIndex":100,"stopIndex":44842,"fileName":"lively/morphic/TextCore.js","_subElements":[{"__isSmartRef__":true,"id":1225},{"__isSmartRef__":true,"id":1227},{"__isSmartRef__":true,"id":1228},{"__isSmartRef__":true,"id":1229},{"__isSmartRef__":true,"id":1231},{"__isSmartRef__":true,"id":1233},{"__isSmartRef__":true,"id":1235},{"__isSmartRef__":true,"id":1236},{"__isSmartRef__":true,"id":1237},{"__isSmartRef__":true,"id":1238},{"__isSmartRef__":true,"id":1239},{"__isSmartRef__":true,"id":1240},{"__isSmartRef__":true,"id":1241},{"__isSmartRef__":true,"id":1242},{"__isSmartRef__":true,"id":1243},{"__isSmartRef__":true,"id":1244},{"__isSmartRef__":true,"id":1245},{"__isSmartRef__":true,"id":1246},{"__isSmartRef__":true,"id":1247},{"__isSmartRef__":true,"id":1248},{"__isSmartRef__":true,"id":1249},{"__isSmartRef__":true,"id":1250},{"__isSmartRef__":true,"id":1251},{"__isSmartRef__":true,"id":1252},{"__isSmartRef__":true,"id":1253},{"__isSmartRef__":true,"id":1254},{"__isSmartRef__":true,"id":1256},{"__isSmartRef__":true,"id":1257},{"__isSmartRef__":true,"id":1258},{"__isSmartRef__":true,"id":1260},{"__isSmartRef__":true,"id":1261},{"__isSmartRef__":true,"id":1263},{"__isSmartRef__":true,"id":1264},{"__isSmartRef__":true,"id":1265},{"__isSmartRef__":true,"id":1266},{"__isSmartRef__":true,"id":1267},{"__isSmartRef__":true,"id":1268},{"__isSmartRef__":true,"id":1269},{"__isSmartRef__":true,"id":1270},{"__isSmartRef__":true,"id":1271},{"__isSmartRef__":true,"id":1272},{"__isSmartRef__":true,"id":1273},{"__isSmartRef__":true,"id":1274},{"__isSmartRef__":true,"id":1275},{"__isSmartRef__":true,"id":1276},{"__isSmartRef__":true,"id":1277},{"__isSmartRef__":true,"id":1278},{"__isSmartRef__":true,"id":1279},{"__isSmartRef__":true,"id":1280},{"__isSmartRef__":true,"id":1281},{"__isSmartRef__":true,"id":1282},{"__isSmartRef__":true,"id":1284},{"__isSmartRef__":true,"id":1285},{"__isSmartRef__":true,"id":1286},{"__isSmartRef__":true,"id":1287},{"__isSmartRef__":true,"id":1288},{"__isSmartRef__":true,"id":1289},{"__isSmartRef__":true,"id":1290},{"__isSmartRef__":true,"id":1291},{"__isSmartRef__":true,"id":1293},{"__isSmartRef__":true,"id":1294},{"__isSmartRef__":true,"id":1295},{"__isSmartRef__":true,"id":1297},{"__isSmartRef__":true,"id":1298},{"__isSmartRef__":true,"id":1299},{"__isSmartRef__":true,"id":1300},{"__isSmartRef__":true,"id":1301},{"__isSmartRef__":true,"id":1302},{"__isSmartRef__":true,"id":1303},{"__isSmartRef__":true,"id":1304},{"__isSmartRef__":true,"id":1305},{"__isSmartRef__":true,"id":1306},{"__isSmartRef__":true,"id":1307},{"__isSmartRef__":true,"id":1308},{"__isSmartRef__":true,"id":1309},{"__isSmartRef__":true,"id":1310},{"__isSmartRef__":true,"id":1311},{"__isSmartRef__":true,"id":1312},{"__isSmartRef__":true,"id":1314},{"__isSmartRef__":true,"id":1315},{"__isSmartRef__":true,"id":1317},{"__isSmartRef__":true,"id":1318},{"__isSmartRef__":true,"id":1319},{"__isSmartRef__":true,"id":1320},{"__isSmartRef__":true,"id":1322},{"__isSmartRef__":true,"id":1324},{"__isSmartRef__":true,"id":1325},{"__isSmartRef__":true,"id":1327},{"__isSmartRef__":true,"id":1329},{"__isSmartRef__":true,"id":1330},{"__isSmartRef__":true,"id":1332},{"__isSmartRef__":true,"id":1333},{"__isSmartRef__":true,"id":1334},{"__isSmartRef__":true,"id":1335},{"__isSmartRef__":true,"id":1336},{"__isSmartRef__":true,"id":1337},{"__isSmartRef__":true,"id":1338},{"__isSmartRef__":true,"id":1340},{"__isSmartRef__":true,"id":1341},{"__isSmartRef__":true,"id":1342},{"__isSmartRef__":true,"id":1343},{"__isSmartRef__":true,"id":1344},{"__isSmartRef__":true,"id":1345},{"__isSmartRef__":true,"id":1346},{"__isSmartRef__":true,"id":1347},{"__isSmartRef__":true,"id":1348},{"__isSmartRef__":true,"id":1349},{"__isSmartRef__":true,"id":1350},{"__isSmartRef__":true,"id":1351},{"__isSmartRef__":true,"id":1352},{"__isSmartRef__":true,"id":1354},{"__isSmartRef__":true,"id":1355},{"__isSmartRef__":true,"id":1356},{"__isSmartRef__":true,"id":1357},{"__isSmartRef__":true,"id":1358},{"__isSmartRef__":true,"id":1359},{"__isSmartRef__":true,"id":1360},{"__isSmartRef__":true,"id":1361},{"__isSmartRef__":true,"id":1362},{"__isSmartRef__":true,"id":1363},{"__isSmartRef__":true,"id":1364},{"__isSmartRef__":true,"id":1365},{"__isSmartRef__":true,"id":1366},{"__isSmartRef__":true,"id":1367},{"__isSmartRef__":true,"id":1368}],"sourceControl":{"__isSmartRef__":true,"id":637},"traits":["ScrollableTrait"],"superclassName":"lively.morphic.Morph","categories":[{"__isSmartRef__":true,"id":1226},{"__isSmartRef__":true,"id":1230},{"__isSmartRef__":true,"id":1232},{"__isSmartRef__":true,"id":1234},{"__isSmartRef__":true,"id":1255},{"__isSmartRef__":true,"id":1259},{"__isSmartRef__":true,"id":1262},{"__isSmartRef__":true,"id":1283},{"__isSmartRef__":true,"id":1292},{"__isSmartRef__":true,"id":1296},{"__isSmartRef__":true,"id":1313},{"__isSmartRef__":true,"id":1316},{"__isSmartRef__":true,"id":1321},{"__isSmartRef__":true,"id":1323},{"__isSmartRef__":true,"id":1326},{"__isSmartRef__":true,"id":1328},{"__isSmartRef__":true,"id":1331},{"__isSmartRef__":true,"id":1339},{"__isSmartRef__":true,"id":1353},{"__isSmartRef__":true,"id":1369}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1225":{"name":"style","type":"propertyDef","startIndex":195,"stopIndex":511,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1226},"className":"lively.morphic.Text","_owner":{"__isSmartRef__":true,"id":1224},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1226":{"name":"properties","type":"categoryDef","startIndex":179,"stopIndex":1002,"fileName":"lively/morphic/TextCore.js","_subElements":[{"__isSmartRef__":true,"id":1225},{"__isSmartRef__":true,"id":1227},{"__isSmartRef__":true,"id":1228}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1227":{"name":"autoAdjustPadding","type":"propertyDef","startIndex":515,"stopIndex":539,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1226},"className":"lively.morphic.Text","_owner":{"__isSmartRef__":true,"id":1224},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1228":{"name":"suppressDropping","type":"propertyDef","startIndex":541,"stopIndex":564,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1226},"className":"lively.morphic.Text","_owner":{"__isSmartRef__":true,"id":1224},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1229":{"name":"initialize","type":"propertyDef","startIndex":1022,"stopIndex":1213,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1230},"className":"lively.morphic.Text","_owner":{"__isSmartRef__":true,"id":1224},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1230":{"name":"initializing","type":"categoryDef","startIndex":1004,"stopIndex":1216,"fileName":"lively/morphic/TextCore.js","_subElements":[{"__isSmartRef__":true,"id":1229}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1231":{"name":"applyStyle","type":"propertyDef","startIndex":1231,"stopIndex":1887,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1232},"className":"lively.morphic.Text","_owner":{"__isSmartRef__":true,"id":1224},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1232":{"name":"styling","type":"categoryDef","startIndex":1218,"stopIndex":1890,"fileName":"lively/morphic/TextCore.js","_subElements":[{"__isSmartRef__":true,"id":1231}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1233":{"name":"setExtent","type":"propertyDef","startIndex":1907,"stopIndex":2082,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1234},"className":"lively.morphic.Text","_owner":{"__isSmartRef__":true,"id":1224},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1234":{"name":"accessing","type":"categoryDef","startIndex":1892,"stopIndex":3957,"fileName":"lively/morphic/TextCore.js","_subElements":[{"__isSmartRef__":true,"id":1233},{"__isSmartRef__":true,"id":1235},{"__isSmartRef__":true,"id":1236},{"__isSmartRef__":true,"id":1237},{"__isSmartRef__":true,"id":1238},{"__isSmartRef__":true,"id":1239},{"__isSmartRef__":true,"id":1240},{"__isSmartRef__":true,"id":1241},{"__isSmartRef__":true,"id":1242},{"__isSmartRef__":true,"id":1243},{"__isSmartRef__":true,"id":1244},{"__isSmartRef__":true,"id":1245},{"__isSmartRef__":true,"id":1246},{"__isSmartRef__":true,"id":1247},{"__isSmartRef__":true,"id":1248},{"__isSmartRef__":true,"id":1249},{"__isSmartRef__":true,"id":1250},{"__isSmartRef__":true,"id":1251},{"__isSmartRef__":true,"id":1252},{"__isSmartRef__":true,"id":1253}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1235":{"name":"getTextExtent","type":"propertyDef","startIndex":2084,"stopIndex":2165,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1234},"className":"lively.morphic.Text","_owner":{"__isSmartRef__":true,"id":1224},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1236":{"name":"getTextBounds","type":"propertyDef","startIndex":2167,"stopIndex":2241,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1234},"className":"lively.morphic.Text","_owner":{"__isSmartRef__":true,"id":1224},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1237":{"name":"textString","type":"propertyDef","startIndex":2244,"stopIndex":2496,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1234},"className":"lively.morphic.Text","_owner":{"__isSmartRef__":true,"id":1224},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1238":{"name":"textString","type":"propertyDef","startIndex":2498,"stopIndex":2756,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1234},"className":"lively.morphic.Text","_owner":{"__isSmartRef__":true,"id":1224},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1239":{"name":"setTextString","type":"propertyDef","startIndex":2759,"stopIndex":2827,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1234},"className":"lively.morphic.Text","_owner":{"__isSmartRef__":true,"id":1224},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1240":{"name":"getTextString","type":"propertyDef","startIndex":2829,"stopIndex":2882,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1234},"className":"lively.morphic.Text","_owner":{"__isSmartRef__":true,"id":1224},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1241":{"name":"appendTextString","type":"propertyDef","startIndex":2884,"stopIndex":2956,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1234},"className":"lively.morphic.Text","_owner":{"__isSmartRef__":true,"id":1224},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1242":{"name":"setTextColor","type":"propertyDef","startIndex":2959,"stopIndex":3039,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1234},"className":"lively.morphic.Text","_owner":{"__isSmartRef__":true,"id":1224},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1243":{"name":"getTextColor","type":"propertyDef","startIndex":3041,"stopIndex":3109,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1234},"className":"lively.morphic.Text","_owner":{"__isSmartRef__":true,"id":1224},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1244":{"name":"setFontSize","type":"propertyDef","startIndex":3111,"stopIndex":3187,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1234},"className":"lively.morphic.Text","_owner":{"__isSmartRef__":true,"id":1224},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1245":{"name":"getFontSize","type":"propertyDef","startIndex":3189,"stopIndex":3255,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1234},"className":"lively.morphic.Text","_owner":{"__isSmartRef__":true,"id":1224},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1246":{"name":"setFontFamily","type":"propertyDef","startIndex":3257,"stopIndex":3345,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1234},"className":"lively.morphic.Text","_owner":{"__isSmartRef__":true,"id":1224},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1247":{"name":"getFontFamily","type":"propertyDef","startIndex":3347,"stopIndex":3417,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1234},"className":"lively.morphic.Text","_owner":{"__isSmartRef__":true,"id":1224},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1248":{"name":"setPadding","type":"propertyDef","startIndex":3420,"stopIndex":3494,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1234},"className":"lively.morphic.Text","_owner":{"__isSmartRef__":true,"id":1224},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1249":{"name":"getPadding","type":"propertyDef","startIndex":3496,"stopIndex":3560,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1234},"className":"lively.morphic.Text","_owner":{"__isSmartRef__":true,"id":1224},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1250":{"name":"setFixedWidth","type":"propertyDef","startIndex":3562,"stopIndex":3706,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1234},"className":"lively.morphic.Text","_owner":{"__isSmartRef__":true,"id":1224},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1251":{"name":"setFixedHeight","type":"propertyDef","startIndex":3708,"stopIndex":3784,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1234},"className":"lively.morphic.Text","_owner":{"__isSmartRef__":true,"id":1224},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1252":{"name":"setMaxTextWidth","type":"propertyDef","startIndex":3786,"stopIndex":3868,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1234},"className":"lively.morphic.Text","_owner":{"__isSmartRef__":true,"id":1224},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1253":{"name":"setMaxTextHeight","type":"propertyDef","startIndex":3870,"stopIndex":3954,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1234},"className":"lively.morphic.Text","_owner":{"__isSmartRef__":true,"id":1224},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1254":{"name":"updateText","type":"propertyDef","startIndex":3974,"stopIndex":4093,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1255},"className":"lively.morphic.Text","_owner":{"__isSmartRef__":true,"id":1224},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1255":{"name":"rendering","type":"categoryDef","startIndex":3959,"stopIndex":4437,"fileName":"lively/morphic/TextCore.js","_subElements":[{"__isSmartRef__":true,"id":1254},{"__isSmartRef__":true,"id":1256},{"__isSmartRef__":true,"id":1257}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1256":{"name":"growOrShrinkToFit","type":"propertyDef","startIndex":4095,"stopIndex":4166,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1255},"className":"lively.morphic.Text","_owner":{"__isSmartRef__":true,"id":1224},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1257":{"name":"fit","type":"propertyDef","startIndex":4168,"stopIndex":4434,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1255},"className":"lively.morphic.Text","_owner":{"__isSmartRef__":true,"id":1224},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1258":{"name":"beLabel","type":"propertyDef","startIndex":4455,"stopIndex":4805,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1259},"className":"lively.morphic.Text","_owner":{"__isSmartRef__":true,"id":1224},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1259":{"name":"text modes","type":"categoryDef","startIndex":4439,"stopIndex":5126,"fileName":"lively/morphic/TextCore.js","_subElements":[{"__isSmartRef__":true,"id":1258},{"__isSmartRef__":true,"id":1260}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1260":{"name":"beInputLine","type":"propertyDef","startIndex":4807,"stopIndex":5123,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1259},"className":"lively.morphic.Text","_owner":{"__isSmartRef__":true,"id":1224},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1261":{"name":"onKeyDown","type":"propertyDef","startIndex":5150,"stopIndex":6240,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1262},"className":"lively.morphic.Text","_owner":{"__isSmartRef__":true,"id":1224},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1262":{"name":"keyboard events","type":"categoryDef","startIndex":5128,"stopIndex":15997,"fileName":"lively/morphic/TextCore.js","_subElements":[{"__isSmartRef__":true,"id":1261},{"__isSmartRef__":true,"id":1263},{"__isSmartRef__":true,"id":1264},{"__isSmartRef__":true,"id":1265},{"__isSmartRef__":true,"id":1266},{"__isSmartRef__":true,"id":1267},{"__isSmartRef__":true,"id":1268},{"__isSmartRef__":true,"id":1269},{"__isSmartRef__":true,"id":1270},{"__isSmartRef__":true,"id":1271},{"__isSmartRef__":true,"id":1272},{"__isSmartRef__":true,"id":1273},{"__isSmartRef__":true,"id":1274},{"__isSmartRef__":true,"id":1275},{"__isSmartRef__":true,"id":1276},{"__isSmartRef__":true,"id":1277},{"__isSmartRef__":true,"id":1278},{"__isSmartRef__":true,"id":1279},{"__isSmartRef__":true,"id":1280},{"__isSmartRef__":true,"id":1281}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1263":{"name":"onKeyUp","type":"propertyDef","startIndex":6242,"stopIndex":6569,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1262},"className":"lively.morphic.Text","_owner":{"__isSmartRef__":true,"id":1224},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1264":{"name":"onKeyPress","type":"propertyDef","startIndex":6571,"stopIndex":7033,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1262},"className":"lively.morphic.Text","_owner":{"__isSmartRef__":true,"id":1224},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1265":{"name":"onPaste","type":"propertyDef","startIndex":7035,"stopIndex":7089,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1262},"className":"lively.morphic.Text","_owner":{"__isSmartRef__":true,"id":1224},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1266":{"name":"processCommandKeys","type":"propertyDef","startIndex":7092,"stopIndex":9802,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1262},"className":"lively.morphic.Text","_owner":{"__isSmartRef__":true,"id":1224},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1267":{"name":"doDoit","type":"propertyDef","startIndex":9806,"stopIndex":9855,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1262},"className":"lively.morphic.Text","_owner":{"__isSmartRef__":true,"id":1224},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1268":{"name":"doPrintit","type":"propertyDef","startIndex":9857,"stopIndex":9908,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1262},"className":"lively.morphic.Text","_owner":{"__isSmartRef__":true,"id":1224},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1269":{"name":"doSave","type":"propertyDef","startIndex":9910,"stopIndex":10214,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1262},"className":"lively.morphic.Text","_owner":{"__isSmartRef__":true,"id":1224},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1270":{"name":"doListProtocol","type":"propertyDef","startIndex":10216,"stopIndex":10334,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1262},"className":"lively.morphic.Text","_owner":{"__isSmartRef__":true,"id":1224},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1271":{"name":"doFind","type":"propertyDef","startIndex":10337,"stopIndex":10630,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1262},"className":"lively.morphic.Text","_owner":{"__isSmartRef__":true,"id":1224},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1272":{"name":"doFindNext","type":"propertyDef","startIndex":10633,"stopIndex":10824,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1262},"className":"lively.morphic.Text","_owner":{"__isSmartRef__":true,"id":1224},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1273":{"name":"doMore","type":"propertyDef","startIndex":10828,"stopIndex":11606,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1262},"className":"lively.morphic.Text","_owner":{"__isSmartRef__":true,"id":1224},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1274":{"name":"doInspect","type":"propertyDef","startIndex":11608,"stopIndex":11715,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1262},"className":"lively.morphic.Text","_owner":{"__isSmartRef__":true,"id":1224},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1275":{"name":"rememberSelectionForDoMore","type":"propertyDef","startIndex":11718,"stopIndex":12263,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1262},"className":"lively.morphic.Text","_owner":{"__isSmartRef__":true,"id":1224},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1276":{"name":"indentSelection","type":"propertyDef","startIndex":12267,"stopIndex":12410,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1262},"className":"lively.morphic.Text","_owner":{"__isSmartRef__":true,"id":1224},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1277":{"name":"outdentSelection","type":"propertyDef","startIndex":12412,"stopIndex":12625,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1262},"className":"lively.morphic.Text","_owner":{"__isSmartRef__":true,"id":1224},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1278":{"name":"doExchange","type":"propertyDef","startIndex":12627,"stopIndex":13832,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1262},"className":"lively.morphic.Text","_owner":{"__isSmartRef__":true,"id":1224},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1279":{"name":"addOrRemoveBrackets","type":"propertyDef","startIndex":13834,"stopIndex":15150,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1262},"className":"lively.morphic.Text","_owner":{"__isSmartRef__":true,"id":1224},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1280":{"name":"addOrRemoveComment","type":"propertyDef","startIndex":15152,"stopIndex":15558,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1262},"className":"lively.morphic.Text","_owner":{"__isSmartRef__":true,"id":1224},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1281":{"name":"modifySelectedLines","type":"propertyDef","startIndex":15560,"stopIndex":15994,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1262},"className":"lively.morphic.Text","_owner":{"__isSmartRef__":true,"id":1224},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1282":{"name":"onEnterPressed","type":"propertyDef","startIndex":16028,"stopIndex":16456,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1283},"className":"lively.morphic.Text","_owner":{"__isSmartRef__":true,"id":1224},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1283":{"name":"keyboard event reaction","type":"categoryDef","startIndex":15999,"stopIndex":18156,"fileName":"lively/morphic/TextCore.js","_subElements":[{"__isSmartRef__":true,"id":1282},{"__isSmartRef__":true,"id":1284},{"__isSmartRef__":true,"id":1285},{"__isSmartRef__":true,"id":1286},{"__isSmartRef__":true,"id":1287},{"__isSmartRef__":true,"id":1288},{"__isSmartRef__":true,"id":1289},{"__isSmartRef__":true,"id":1290}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1284":{"name":"onBackspacePressed","type":"propertyDef","startIndex":16458,"stopIndex":16650,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1283},"className":"lively.morphic.Text","_owner":{"__isSmartRef__":true,"id":1224},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1285":{"name":"onDelPressed","type":"propertyDef","startIndex":16652,"stopIndex":17124,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1283},"className":"lively.morphic.Text","_owner":{"__isSmartRef__":true,"id":1224},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1286":{"name":"onTabPressed","type":"propertyDef","startIndex":17126,"stopIndex":17960,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1283},"className":"lively.morphic.Text","_owner":{"__isSmartRef__":true,"id":1224},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1287":{"name":"onHomePressed","type":"propertyDef","startIndex":17962,"stopIndex":18007,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1283},"className":"lively.morphic.Text","_owner":{"__isSmartRef__":true,"id":1224},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1288":{"name":"onEndPressed","type":"propertyDef","startIndex":18009,"stopIndex":18053,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1283},"className":"lively.morphic.Text","_owner":{"__isSmartRef__":true,"id":1224},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1289":{"name":"onPageUpPressed","type":"propertyDef","startIndex":18055,"stopIndex":18102,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1283},"className":"lively.morphic.Text","_owner":{"__isSmartRef__":true,"id":1224},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1290":{"name":"onPageDownPressed","type":"propertyDef","startIndex":18104,"stopIndex":18153,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1283},"className":"lively.morphic.Text","_owner":{"__isSmartRef__":true,"id":1224},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1291":{"name":"onMouseDown","type":"propertyDef","startIndex":18176,"stopIndex":19053,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1292},"className":"lively.morphic.Text","_owner":{"__isSmartRef__":true,"id":1224},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1292":{"name":"mouse events","type":"categoryDef","startIndex":18158,"stopIndex":19900,"fileName":"lively/morphic/TextCore.js","_subElements":[{"__isSmartRef__":true,"id":1291},{"__isSmartRef__":true,"id":1293},{"__isSmartRef__":true,"id":1294}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1293":{"name":"onSelectStart","type":"propertyDef","startIndex":19055,"stopIndex":19138,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1292},"className":"lively.morphic.Text","_owner":{"__isSmartRef__":true,"id":1224},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1294":{"name":"onMouseUp","type":"propertyDef","startIndex":19140,"stopIndex":19895,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1292},"className":"lively.morphic.Text","_owner":{"__isSmartRef__":true,"id":1224},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1295":{"name":"domSelection","type":"propertyDef","startIndex":19917,"stopIndex":20337,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1296},"className":"lively.morphic.Text","_owner":{"__isSmartRef__":true,"id":1224},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1296":{"name":"selection","type":"categoryDef","startIndex":19902,"stopIndex":29674,"fileName":"lively/morphic/TextCore.js","_subElements":[{"__isSmartRef__":true,"id":1295},{"__isSmartRef__":true,"id":1297},{"__isSmartRef__":true,"id":1298},{"__isSmartRef__":true,"id":1299},{"__isSmartRef__":true,"id":1300},{"__isSmartRef__":true,"id":1301},{"__isSmartRef__":true,"id":1302},{"__isSmartRef__":true,"id":1303},{"__isSmartRef__":true,"id":1304},{"__isSmartRef__":true,"id":1305},{"__isSmartRef__":true,"id":1306},{"__isSmartRef__":true,"id":1307},{"__isSmartRef__":true,"id":1308},{"__isSmartRef__":true,"id":1309},{"__isSmartRef__":true,"id":1310},{"__isSmartRef__":true,"id":1311}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1297":{"name":"selectionString","type":"propertyDef","startIndex":20340,"stopIndex":20442,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1296},"className":"lively.morphic.Text","_owner":{"__isSmartRef__":true,"id":1224},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1298":{"name":"insertAtCursor","type":"propertyDef","startIndex":20445,"stopIndex":20613,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1296},"className":"lively.morphic.Text","_owner":{"__isSmartRef__":true,"id":1224},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1299":{"name":"insertElementAtCursor","type":"propertyDef","startIndex":20616,"stopIndex":21866,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1296},"className":"lively.morphic.Text","_owner":{"__isSmartRef__":true,"id":1224},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1300":{"name":"removeTextSelection","type":"propertyDef","startIndex":21868,"stopIndex":21903,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1296},"className":"lively.morphic.Text","_owner":{"__isSmartRef__":true,"id":1224},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1301":{"name":"getSelectionOrLineString","type":"propertyDef","startIndex":21905,"stopIndex":22095,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1296},"className":"lively.morphic.Text","_owner":{"__isSmartRef__":true,"id":1224},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1302":{"name":"selectCurrentLine","type":"propertyDef","startIndex":22097,"stopIndex":22289,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1296},"className":"lively.morphic.Text","_owner":{"__isSmartRef__":true,"id":1224},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1303":{"name":"setSelectionRange","type":"propertyDef","startIndex":22292,"stopIndex":23423,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1296},"className":"lively.morphic.Text","_owner":{"__isSmartRef__":true,"id":1224},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1304":{"name":"getSelectionRange","type":"propertyDef","startIndex":23426,"stopIndex":25787,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1296},"className":"lively.morphic.Text","_owner":{"__isSmartRef__":true,"id":1224},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1305":{"name":"selectAll","type":"propertyDef","startIndex":25789,"stopIndex":25928,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1296},"className":"lively.morphic.Text","_owner":{"__isSmartRef__":true,"id":1224},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1306":{"name":"hasNullSelection","type":"propertyDef","startIndex":25930,"stopIndex":26035,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1296},"className":"lively.morphic.Text","_owner":{"__isSmartRef__":true,"id":1224},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1307":{"name":"setNullSelectionAt","type":"propertyDef","startIndex":26038,"stopIndex":26109,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1296},"className":"lively.morphic.Text","_owner":{"__isSmartRef__":true,"id":1224},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1308":{"name":"getSelectionBounds","type":"propertyDef","startIndex":26111,"stopIndex":26647,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1296},"className":"lively.morphic.Text","_owner":{"__isSmartRef__":true,"id":1224},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1309":{"name":"selectWord","type":"propertyDef","startIndex":26649,"stopIndex":28994,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1296},"className":"lively.morphic.Text","_owner":{"__isSmartRef__":true,"id":1224},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1310":{"name":"matchBrackets","type":"propertyDef","startIndex":28996,"stopIndex":29361,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1296},"className":"lively.morphic.Text","_owner":{"__isSmartRef__":true,"id":1224},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1311":{"name":"findLine","type":"propertyDef","startIndex":29363,"stopIndex":29670,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1296},"className":"lively.morphic.Text","_owner":{"__isSmartRef__":true,"id":1224},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1312":{"name":"getScrollableNode","type":"propertyDef","startIndex":29691,"stopIndex":29790,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1313},"className":"lively.morphic.Text","_owner":{"__isSmartRef__":true,"id":1224},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1313":{"name":"scrolling","type":"categoryDef","startIndex":29676,"stopIndex":29895,"fileName":"lively/morphic/TextCore.js","_subElements":[{"__isSmartRef__":true,"id":1312},{"__isSmartRef__":true,"id":1314}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1314":{"name":"scrollSelectionIntoView","type":"propertyDef","startIndex":29792,"stopIndex":29892,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1313},"className":"lively.morphic.Text","_owner":{"__isSmartRef__":true,"id":1224},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1315":{"name":"evalSelection","type":"propertyDef","startIndex":29913,"stopIndex":30107,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1316},"className":"lively.morphic.Text","_owner":{"__isSmartRef__":true,"id":1224},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1316":{"name":"evaluation","type":"categoryDef","startIndex":29897,"stopIndex":30537,"fileName":"lively/morphic/TextCore.js","_subElements":[{"__isSmartRef__":true,"id":1315},{"__isSmartRef__":true,"id":1317},{"__isSmartRef__":true,"id":1318},{"__isSmartRef__":true,"id":1319}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1317":{"name":"boundEval","type":"propertyDef","startIndex":30109,"stopIndex":30382,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1316},"className":"lively.morphic.Text","_owner":{"__isSmartRef__":true,"id":1224},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1318":{"name":"tryBoundEval","type":"propertyDef","startIndex":30384,"stopIndex":30476,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1316},"className":"lively.morphic.Text","_owner":{"__isSmartRef__":true,"id":1224},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1319":{"name":"getDoitContext","type":"propertyDef","startIndex":30479,"stopIndex":30534,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1316},"className":"lively.morphic.Text","_owner":{"__isSmartRef__":true,"id":1224},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1320":{"name":"focus","type":"propertyDef","startIndex":30550,"stopIndex":30637,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1321},"className":"lively.morphic.Text","_owner":{"__isSmartRef__":true,"id":1224},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1321":{"name":"focus","type":"categoryDef","startIndex":30539,"stopIndex":30640,"fileName":"lively/morphic/TextCore.js","_subElements":[{"__isSmartRef__":true,"id":1320}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1322":{"name":"hasUnsavedChanges","type":"propertyDef","startIndex":30655,"stopIndex":30760,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1323},"className":"lively.morphic.Text","_owner":{"__isSmartRef__":true,"id":1224},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1323":{"name":"testing","type":"categoryDef","startIndex":30642,"stopIndex":30845,"fileName":"lively/morphic/TextCore.js","_subElements":[{"__isSmartRef__":true,"id":1322},{"__isSmartRef__":true,"id":1324}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1324":{"name":"isFocused","type":"propertyDef","startIndex":30762,"stopIndex":30841,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1323},"className":"lively.morphic.Text","_owner":{"__isSmartRef__":true,"id":1224},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1325":{"name":"searchForFind","type":"propertyDef","startIndex":30862,"stopIndex":31251,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1326},"className":"lively.morphic.Text","_owner":{"__isSmartRef__":true,"id":1224},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1326":{"name":"searching","type":"categoryDef","startIndex":30847,"stopIndex":31255,"fileName":"lively/morphic/TextCore.js","_subElements":[{"__isSmartRef__":true,"id":1325}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1327":{"name":"showError","type":"propertyDef","startIndex":31272,"stopIndex":32448,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1328},"className":"lively.morphic.Text","_owner":{"__isSmartRef__":true,"id":1224},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1328":{"name":"debugging","type":"categoryDef","startIndex":31257,"stopIndex":33002,"fileName":"lively/morphic/TextCore.js","_subElements":[{"__isSmartRef__":true,"id":1327},{"__isSmartRef__":true,"id":1329}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1329":{"name":"textNodeString","type":"propertyDef","startIndex":32450,"stopIndex":32998,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1328},"className":"lively.morphic.Text","_owner":{"__isSmartRef__":true,"id":1224},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1330":{"name":"setWhiteSpaceHandling","type":"propertyDef","startIndex":33025,"stopIndex":33137,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1331},"className":"lively.morphic.Text","_owner":{"__isSmartRef__":true,"id":1224},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1331":{"name":"experimentation","type":"categoryDef","startIndex":33004,"stopIndex":36295,"fileName":"lively/morphic/TextCore.js","_subElements":[{"__isSmartRef__":true,"id":1330},{"__isSmartRef__":true,"id":1332},{"__isSmartRef__":true,"id":1333},{"__isSmartRef__":true,"id":1334},{"__isSmartRef__":true,"id":1335},{"__isSmartRef__":true,"id":1336},{"__isSmartRef__":true,"id":1337}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1332":{"name":"getWhiteSpaceHandling","type":"propertyDef","startIndex":33139,"stopIndex":33253,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1331},"className":"lively.morphic.Text","_owner":{"__isSmartRef__":true,"id":1224},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1333":{"name":"getTextElements","type":"propertyDef","startIndex":33255,"stopIndex":34642,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1331},"className":"lively.morphic.Text","_owner":{"__isSmartRef__":true,"id":1224},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1334":{"name":"getTextElementAndLocalIndexForGlobalIndex","type":"propertyDef","startIndex":34645,"stopIndex":35379,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1331},"className":"lively.morphic.Text","_owner":{"__isSmartRef__":true,"id":1224},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1335":{"name":"setRichText","type":"propertyDef","startIndex":35381,"stopIndex":35707,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1331},"className":"lively.morphic.Text","_owner":{"__isSmartRef__":true,"id":1224},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1336":{"name":"getTextStyle","type":"propertyDef","startIndex":35709,"stopIndex":35947,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1331},"className":"lively.morphic.Text","_owner":{"__isSmartRef__":true,"id":1224},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1337":{"name":"getRange","type":"propertyDef","startIndex":35949,"stopIndex":36292,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1331},"className":"lively.morphic.Text","_owner":{"__isSmartRef__":true,"id":1224},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1338":{"name":"createChunk","type":"propertyDef","startIndex":36314,"stopIndex":36414,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1339},"className":"lively.morphic.Text","_owner":{"__isSmartRef__":true,"id":1224},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1339":{"name":"text chunks","type":"categoryDef","startIndex":36297,"stopIndex":39890,"fileName":"lively/morphic/TextCore.js","_subElements":[{"__isSmartRef__":true,"id":1338},{"__isSmartRef__":true,"id":1340},{"__isSmartRef__":true,"id":1341},{"__isSmartRef__":true,"id":1342},{"__isSmartRef__":true,"id":1343},{"__isSmartRef__":true,"id":1344},{"__isSmartRef__":true,"id":1345},{"__isSmartRef__":true,"id":1346},{"__isSmartRef__":true,"id":1347},{"__isSmartRef__":true,"id":1348},{"__isSmartRef__":true,"id":1349},{"__isSmartRef__":true,"id":1350},{"__isSmartRef__":true,"id":1351}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1340":{"name":"getTextChunks","type":"propertyDef","startIndex":36416,"stopIndex":36572,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1339},"className":"lively.morphic.Text","_owner":{"__isSmartRef__":true,"id":1224},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1341":{"name":"firstTextChunk","type":"propertyDef","startIndex":36574,"stopIndex":36640,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1339},"className":"lively.morphic.Text","_owner":{"__isSmartRef__":true,"id":1224},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1342":{"name":"removeTextChunks","type":"propertyDef","startIndex":36642,"stopIndex":36810,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1339},"className":"lively.morphic.Text","_owner":{"__isSmartRef__":true,"id":1224},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1343":{"name":"getChunkAndLocalIndex","type":"propertyDef","startIndex":36812,"stopIndex":37577,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1339},"className":"lively.morphic.Text","_owner":{"__isSmartRef__":true,"id":1224},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1344":{"name":"sliceTextChunks","type":"propertyDef","startIndex":37579,"stopIndex":38340,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1339},"className":"lively.morphic.Text","_owner":{"__isSmartRef__":true,"id":1224},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1345":{"name":"coalesceChunks","type":"propertyDef","startIndex":38343,"stopIndex":38497,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1339},"className":"lively.morphic.Text","_owner":{"__isSmartRef__":true,"id":1224},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1346":{"name":"removeChunksNotUsed","type":"propertyDef","startIndex":38499,"stopIndex":38908,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1339},"className":"lively.morphic.Text","_owner":{"__isSmartRef__":true,"id":1224},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1347":{"name":"removeNonChunkNodes","type":"propertyDef","startIndex":38910,"stopIndex":39030,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1339},"className":"lively.morphic.Text","_owner":{"__isSmartRef__":true,"id":1224},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1348":{"name":"getChunkRanges","type":"propertyDef","startIndex":39033,"stopIndex":39223,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1339},"className":"lively.morphic.Text","_owner":{"__isSmartRef__":true,"id":1224},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1349":{"name":"fixTextBeforeAndAfterChunks","type":"propertyDef","startIndex":39225,"stopIndex":39492,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1339},"className":"lively.morphic.Text","_owner":{"__isSmartRef__":true,"id":1224},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1350":{"name":"fixChunks","type":"propertyDef","startIndex":39494,"stopIndex":39812,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1339},"className":"lively.morphic.Text","_owner":{"__isSmartRef__":true,"id":1224},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1351":{"name":"fixChunksDelayed","type":"propertyDef","startIndex":39814,"stopIndex":39886,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1339},"className":"lively.morphic.Text","_owner":{"__isSmartRef__":true,"id":1224},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1352":{"name":"emphasize","type":"propertyDef","startIndex":39907,"stopIndex":40102,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1353},"className":"lively.morphic.Text","_owner":{"__isSmartRef__":true,"id":1224},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1353":{"name":"rich text","type":"categoryDef","startIndex":39892,"stopIndex":43869,"fileName":"lively/morphic/TextCore.js","_subElements":[{"__isSmartRef__":true,"id":1352},{"__isSmartRef__":true,"id":1354},{"__isSmartRef__":true,"id":1355},{"__isSmartRef__":true,"id":1356},{"__isSmartRef__":true,"id":1357},{"__isSmartRef__":true,"id":1358},{"__isSmartRef__":true,"id":1359},{"__isSmartRef__":true,"id":1360},{"__isSmartRef__":true,"id":1361},{"__isSmartRef__":true,"id":1362},{"__isSmartRef__":true,"id":1363},{"__isSmartRef__":true,"id":1364},{"__isSmartRef__":true,"id":1365},{"__isSmartRef__":true,"id":1366},{"__isSmartRef__":true,"id":1367}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1354":{"name":"changeEmphasis","type":"propertyDef","startIndex":40104,"stopIndex":40485,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1353},"className":"lively.morphic.Text","_owner":{"__isSmartRef__":true,"id":1224},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1355":{"name":"toggleItalics","type":"propertyDef","startIndex":40487,"stopIndex":40663,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1353},"className":"lively.morphic.Text","_owner":{"__isSmartRef__":true,"id":1224},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1356":{"name":"toggleBoldness","type":"propertyDef","startIndex":40667,"stopIndex":40846,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1353},"className":"lively.morphic.Text","_owner":{"__isSmartRef__":true,"id":1224},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1357":{"name":"toggleUnderline","type":"propertyDef","startIndex":40848,"stopIndex":41046,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1353},"className":"lively.morphic.Text","_owner":{"__isSmartRef__":true,"id":1224},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1358":{"name":"toggleLink","type":"propertyDef","startIndex":41049,"stopIndex":41303,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1353},"className":"lively.morphic.Text","_owner":{"__isSmartRef__":true,"id":1224},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1359":{"name":"toggleDoit","type":"propertyDef","startIndex":41305,"stopIndex":41632,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1353},"className":"lively.morphic.Text","_owner":{"__isSmartRef__":true,"id":1224},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1360":{"name":"toggleFont","type":"propertyDef","startIndex":41634,"stopIndex":42152,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1353},"className":"lively.morphic.Text","_owner":{"__isSmartRef__":true,"id":1224},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1361":{"name":"toggleEmphasisForSelection","type":"propertyDef","startIndex":42158,"stopIndex":42606,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1353},"className":"lively.morphic.Text","_owner":{"__isSmartRef__":true,"id":1224},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1362":{"name":"emphasizeSelection","type":"propertyDef","startIndex":42608,"stopIndex":43038,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1353},"className":"lively.morphic.Text","_owner":{"__isSmartRef__":true,"id":1224},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1363":{"name":"convertSelectionRangeForEmphasis","type":"propertyDef","startIndex":43042,"stopIndex":43190,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1353},"className":"lively.morphic.Text","_owner":{"__isSmartRef__":true,"id":1224},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1364":{"name":"increaseFontSizeOfSelection","type":"propertyDef","startIndex":43192,"stopIndex":43311,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1353},"className":"lively.morphic.Text","_owner":{"__isSmartRef__":true,"id":1224},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1365":{"name":"decreaseFontSizeOfSelection","type":"propertyDef","startIndex":43313,"stopIndex":43432,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1353},"className":"lively.morphic.Text","_owner":{"__isSmartRef__":true,"id":1224},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1366":{"name":"setFontSizeOfSelectionDo","type":"propertyDef","startIndex":43435,"stopIndex":43722,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1353},"className":"lively.morphic.Text","_owner":{"__isSmartRef__":true,"id":1224},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1367":{"name":"getEmphasisAt","type":"propertyDef","startIndex":43726,"stopIndex":43865,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1353},"className":"lively.morphic.Text","_owner":{"__isSmartRef__":true,"id":1224},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1368":{"name":"setStatusMessage","type":"propertyDef","startIndex":43892,"stopIndex":44837,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1369},"className":"lively.morphic.Text","_owner":{"__isSmartRef__":true,"id":1224},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1369":{"name":"status messages","type":"categoryDef","startIndex":43871,"stopIndex":44839,"fileName":"lively/morphic/TextCore.js","_subElements":[{"__isSmartRef__":true,"id":1368}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1370":{"name":"lively.morphic.Text","type":"klassExtensionDef","startIndex":44843,"stopIndex":45037,"fileName":"lively/morphic/TextCore.js","_subElements":[{"__isSmartRef__":true,"id":1371}],"sourceControl":{"__isSmartRef__":true,"id":637},"categories":[{"__isSmartRef__":true,"id":1372}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1371":{"name":"activeInstance","type":"propertyDef","startIndex":44880,"stopIndex":45032,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":true,"category":{"__isSmartRef__":true,"id":1372},"className":"lively.morphic.Text","_owner":{"__isSmartRef__":true,"id":1370},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1372":{"name":"default category","type":"categoryDef","startIndex":44878,"stopIndex":45034,"fileName":"lively/morphic/TextCore.js","_subElements":[{"__isSmartRef__":true,"id":1371}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1373":{"name":"lively.morphic.Text.ProtocolLister","type":"klassDef","startIndex":45038,"stopIndex":47387,"fileName":"lively/morphic/TextCore.js","_subElements":[{"__isSmartRef__":true,"id":1374},{"__isSmartRef__":true,"id":1376},{"__isSmartRef__":true,"id":1378},{"__isSmartRef__":true,"id":1380},{"__isSmartRef__":true,"id":1381},{"__isSmartRef__":true,"id":1382},{"__isSmartRef__":true,"id":1383},{"__isSmartRef__":true,"id":1384}],"sourceControl":{"__isSmartRef__":true,"id":637},"superclassName":"Object","categories":[{"__isSmartRef__":true,"id":1375},{"__isSmartRef__":true,"id":1377},{"__isSmartRef__":true,"id":1379}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1374":{"name":"initialize","type":"propertyDef","startIndex":45110,"stopIndex":45177,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1375},"className":"lively.morphic.Text.ProtocolLister","_owner":{"__isSmartRef__":true,"id":1373},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1375":{"name":"initializing","type":"categoryDef","startIndex":45092,"stopIndex":45180,"fileName":"lively/morphic/TextCore.js","_subElements":[{"__isSmartRef__":true,"id":1374}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1376":{"name":"evalSelectionAndOpenListForProtocol","type":"propertyDef","startIndex":45197,"stopIndex":45426,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1377},"className":"lively.morphic.Text.ProtocolLister","_owner":{"__isSmartRef__":true,"id":1373},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1377":{"name":"interface","type":"categoryDef","startIndex":45182,"stopIndex":45430,"fileName":"lively/morphic/TextCore.js","_subElements":[{"__isSmartRef__":true,"id":1376}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1378":{"name":"getPrototypeChainOf","type":"propertyDef","startIndex":45448,"stopIndex":45638,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1379},"className":"lively.morphic.Text.ProtocolLister","_owner":{"__isSmartRef__":true,"id":1373},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1379":{"name":"accessing","type":"categoryDef","startIndex":45432,"stopIndex":47384,"fileName":"lively/morphic/TextCore.js","_subElements":[{"__isSmartRef__":true,"id":1378},{"__isSmartRef__":true,"id":1380},{"__isSmartRef__":true,"id":1381},{"__isSmartRef__":true,"id":1382},{"__isSmartRef__":true,"id":1383},{"__isSmartRef__":true,"id":1384}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1380":{"name":"funcSignaturesOf","type":"propertyDef","startIndex":45641,"stopIndex":46068,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1379},"className":"lively.morphic.Text.ProtocolLister","_owner":{"__isSmartRef__":true,"id":1373},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1381":{"name":"getListForProtocolOf","type":"propertyDef","startIndex":46071,"stopIndex":46303,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1379},"className":"lively.morphic.Text.ProtocolLister","_owner":{"__isSmartRef__":true,"id":1373},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1382":{"name":"menuItemForProto","type":"propertyDef","startIndex":46306,"stopIndex":46709,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1379},"className":"lively.morphic.Text.ProtocolLister","_owner":{"__isSmartRef__":true,"id":1373},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1383":{"name":"createSubMenuItemFromSignature","type":"propertyDef","startIndex":46711,"stopIndex":47106,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1379},"className":"lively.morphic.Text.ProtocolLister","_owner":{"__isSmartRef__":true,"id":1373},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1384":{"name":"evalCurrentSelection","type":"propertyDef","startIndex":47110,"stopIndex":47381,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1379},"className":"lively.morphic.Text.ProtocolLister","_owner":{"__isSmartRef__":true,"id":1373},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1385":{"name":null,"type":"comment","startIndex":47388,"stopIndex":47388,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1386":{"name":"lively.morphic.TextChunk","type":"klassDef","startIndex":47389,"stopIndex":52991,"fileName":"lively/morphic/TextCore.js","_subElements":[{"__isSmartRef__":true,"id":1387},{"__isSmartRef__":true,"id":1389},{"__isSmartRef__":true,"id":1391},{"__isSmartRef__":true,"id":1393},{"__isSmartRef__":true,"id":1394},{"__isSmartRef__":true,"id":1395},{"__isSmartRef__":true,"id":1396},{"__isSmartRef__":true,"id":1397},{"__isSmartRef__":true,"id":1399},{"__isSmartRef__":true,"id":1401},{"__isSmartRef__":true,"id":1403},{"__isSmartRef__":true,"id":1404},{"__isSmartRef__":true,"id":1405},{"__isSmartRef__":true,"id":1406},{"__isSmartRef__":true,"id":1408},{"__isSmartRef__":true,"id":1409},{"__isSmartRef__":true,"id":1411},{"__isSmartRef__":true,"id":1413},{"__isSmartRef__":true,"id":1414},{"__isSmartRef__":true,"id":1415},{"__isSmartRef__":true,"id":1416},{"__isSmartRef__":true,"id":1417}],"sourceControl":{"__isSmartRef__":true,"id":637},"superclassName":"Object","categories":[{"__isSmartRef__":true,"id":1388},{"__isSmartRef__":true,"id":1390},{"__isSmartRef__":true,"id":1392},{"__isSmartRef__":true,"id":1398},{"__isSmartRef__":true,"id":1400},{"__isSmartRef__":true,"id":1402},{"__isSmartRef__":true,"id":1407},{"__isSmartRef__":true,"id":1410},{"__isSmartRef__":true,"id":1412},{"__isSmartRef__":true,"id":1418}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1387":{"name":"doNotSerialize","type":"propertyDef","startIndex":47447,"stopIndex":47477,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1388},"className":"lively.morphic.TextChunk","_owner":{"__isSmartRef__":true,"id":1386},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1388":{"name":"settings","type":"categoryDef","startIndex":47433,"stopIndex":47480,"fileName":"lively/morphic/TextCore.js","_subElements":[{"__isSmartRef__":true,"id":1387}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1389":{"name":"initialize","type":"propertyDef","startIndex":47500,"stopIndex":47631,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1390},"className":"lively.morphic.TextChunk","_owner":{"__isSmartRef__":true,"id":1386},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1390":{"name":"initializing","type":"categoryDef","startIndex":47482,"stopIndex":47634,"fileName":"lively/morphic/TextCore.js","_subElements":[{"__isSmartRef__":true,"id":1389}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1391":{"name":"textString","type":"propertyDef","startIndex":47651,"stopIndex":47715,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1392},"className":"lively.morphic.TextChunk","_owner":{"__isSmartRef__":true,"id":1386},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1392":{"name":"accessing","type":"categoryDef","startIndex":47636,"stopIndex":48181,"fileName":"lively/morphic/TextCore.js","_subElements":[{"__isSmartRef__":true,"id":1391},{"__isSmartRef__":true,"id":1393},{"__isSmartRef__":true,"id":1394},{"__isSmartRef__":true,"id":1395},{"__isSmartRef__":true,"id":1396}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1393":{"name":"textString","type":"propertyDef","startIndex":47717,"stopIndex":47796,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1392},"className":"lively.morphic.TextChunk","_owner":{"__isSmartRef__":true,"id":1386},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1394":{"name":"getChunkNode","type":"propertyDef","startIndex":47798,"stopIndex":47920,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1392},"className":"lively.morphic.TextChunk","_owner":{"__isSmartRef__":true,"id":1386},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1395":{"name":"next","type":"propertyDef","startIndex":47922,"stopIndex":48049,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1392},"className":"lively.morphic.TextChunk","_owner":{"__isSmartRef__":true,"id":1386},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1396":{"name":"prev","type":"propertyDef","startIndex":48051,"stopIndex":48178,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1392},"className":"lively.morphic.TextChunk","_owner":{"__isSmartRef__":true,"id":1386},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1397":{"name":"addTo","type":"propertyDef","startIndex":48195,"stopIndex":48781,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1398},"className":"lively.morphic.TextChunk","_owner":{"__isSmartRef__":true,"id":1386},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1398":{"name":"adding","type":"categoryDef","startIndex":48183,"stopIndex":48785,"fileName":"lively/morphic/TextCore.js","_subElements":[{"__isSmartRef__":true,"id":1397}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1399":{"name":"remove","type":"propertyDef","startIndex":48801,"stopIndex":48903,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1400},"className":"lively.morphic.TextChunk","_owner":{"__isSmartRef__":true,"id":1386},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1400":{"name":"removing","type":"categoryDef","startIndex":48787,"stopIndex":48906,"fileName":"lively/morphic/TextCore.js","_subElements":[{"__isSmartRef__":true,"id":1399}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1401":{"name":"splitAfter","type":"propertyDef","startIndex":48923,"stopIndex":48992,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1402},"className":"lively.morphic.TextChunk","_owner":{"__isSmartRef__":true,"id":1386},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1402":{"name":"splitting","type":"categoryDef","startIndex":48908,"stopIndex":50506,"fileName":"lively/morphic/TextCore.js","_subElements":[{"__isSmartRef__":true,"id":1401},{"__isSmartRef__":true,"id":1403},{"__isSmartRef__":true,"id":1404},{"__isSmartRef__":true,"id":1405}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1403":{"name":"splitBefore","type":"propertyDef","startIndex":48994,"stopIndex":49065,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1402},"className":"lively.morphic.TextChunk","_owner":{"__isSmartRef__":true,"id":1386},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1404":{"name":"split","type":"propertyDef","startIndex":49067,"stopIndex":50413,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1402},"className":"lively.morphic.TextChunk","_owner":{"__isSmartRef__":true,"id":1386},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1405":{"name":"createForSplit","type":"propertyDef","startIndex":50415,"stopIndex":50502,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1402},"className":"lively.morphic.TextChunk","_owner":{"__isSmartRef__":true,"id":1386},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1406":{"name":"joinWithNext","type":"propertyDef","startIndex":50521,"stopIndex":50794,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1407},"className":"lively.morphic.TextChunk","_owner":{"__isSmartRef__":true,"id":1386},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1407":{"name":"joining","type":"categoryDef","startIndex":50508,"stopIndex":50944,"fileName":"lively/morphic/TextCore.js","_subElements":[{"__isSmartRef__":true,"id":1406},{"__isSmartRef__":true,"id":1408}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1408":{"name":"joinWithNextIfEqualStyle","type":"propertyDef","startIndex":50796,"stopIndex":50940,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1407},"className":"lively.morphic.TextChunk","_owner":{"__isSmartRef__":true,"id":1386},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1409":{"name":"styleText","type":"propertyDef","startIndex":50959,"stopIndex":51106,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1410},"className":"lively.morphic.TextChunk","_owner":{"__isSmartRef__":true,"id":1386},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1410":{"name":"styling","type":"categoryDef","startIndex":50946,"stopIndex":51109,"fileName":"lively/morphic/TextCore.js","_subElements":[{"__isSmartRef__":true,"id":1409}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1411":{"name":"normalize","type":"propertyDef","startIndex":51125,"stopIndex":51187,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1412},"className":"lively.morphic.TextChunk","_owner":{"__isSmartRef__":true,"id":1386},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1412":{"name":"subnodes","type":"categoryDef","startIndex":51111,"stopIndex":52868,"fileName":"lively/morphic/TextCore.js","_subElements":[{"__isSmartRef__":true,"id":1411},{"__isSmartRef__":true,"id":1413},{"__isSmartRef__":true,"id":1414},{"__isSmartRef__":true,"id":1415},{"__isSmartRef__":true,"id":1416}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1413":{"name":"ingestAllFollowingElements","type":"propertyDef","startIndex":51189,"stopIndex":51629,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1412},"className":"lively.morphic.TextChunk","_owner":{"__isSmartRef__":true,"id":1386},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1414":{"name":"ingestAllPrecedingElements","type":"propertyDef","startIndex":51631,"stopIndex":52120,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1412},"className":"lively.morphic.TextChunk","_owner":{"__isSmartRef__":true,"id":1386},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1415":{"name":"ensureEndsWithBr","type":"propertyDef","startIndex":52122,"stopIndex":52518,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1412},"className":"lively.morphic.TextChunk","_owner":{"__isSmartRef__":true,"id":1386},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1416":{"name":"removeNonChunkNodes","type":"propertyDef","startIndex":52520,"stopIndex":52864,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1412},"className":"lively.morphic.TextChunk","_owner":{"__isSmartRef__":true,"id":1386},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1417":{"name":"toString","type":"propertyDef","startIndex":52885,"stopIndex":52986,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1418},"className":"lively.morphic.TextChunk","_owner":{"__isSmartRef__":true,"id":1386},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1418":{"name":"debugging","type":"categoryDef","startIndex":52870,"stopIndex":52988,"fileName":"lively/morphic/TextCore.js","_subElements":[{"__isSmartRef__":true,"id":1417}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1419":{"name":null,"type":"comment","startIndex":52992,"stopIndex":52992,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1420":{"name":"lively.morphic.TextEmphasis","type":"klassDef","startIndex":52993,"stopIndex":56818,"fileName":"lively/morphic/TextCore.js","_subElements":[{"__isSmartRef__":true,"id":1421},{"__isSmartRef__":true,"id":1423},{"__isSmartRef__":true,"id":1425},{"__isSmartRef__":true,"id":1426},{"__isSmartRef__":true,"id":1427},{"__isSmartRef__":true,"id":1428},{"__isSmartRef__":true,"id":1429},{"__isSmartRef__":true,"id":1430},{"__isSmartRef__":true,"id":1431},{"__isSmartRef__":true,"id":1432},{"__isSmartRef__":true,"id":1433},{"__isSmartRef__":true,"id":1434},{"__isSmartRef__":true,"id":1435},{"__isSmartRef__":true,"id":1436},{"__isSmartRef__":true,"id":1437},{"__isSmartRef__":true,"id":1438},{"__isSmartRef__":true,"id":1439},{"__isSmartRef__":true,"id":1440},{"__isSmartRef__":true,"id":1441},{"__isSmartRef__":true,"id":1442},{"__isSmartRef__":true,"id":1444},{"__isSmartRef__":true,"id":1446},{"__isSmartRef__":true,"id":1448},{"__isSmartRef__":true,"id":1450}],"sourceControl":{"__isSmartRef__":true,"id":637},"superclassName":"Object","categories":[{"__isSmartRef__":true,"id":1422},{"__isSmartRef__":true,"id":1424},{"__isSmartRef__":true,"id":1443},{"__isSmartRef__":true,"id":1445},{"__isSmartRef__":true,"id":1447},{"__isSmartRef__":true,"id":1449},{"__isSmartRef__":true,"id":1451}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1421":{"name":"initialize","type":"propertyDef","startIndex":53058,"stopIndex":53116,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1422},"className":"lively.morphic.TextEmphasis","_owner":{"__isSmartRef__":true,"id":1420},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1422":{"name":"initializing","type":"categoryDef","startIndex":53040,"stopIndex":53119,"fileName":"lively/morphic/TextCore.js","_subElements":[{"__isSmartRef__":true,"id":1421}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1423":{"name":"getFontWeight","type":"propertyDef","startIndex":53136,"stopIndex":53250,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1424},"className":"lively.morphic.TextEmphasis","_owner":{"__isSmartRef__":true,"id":1420},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1424":{"name":"accessing","type":"categoryDef","startIndex":53121,"stopIndex":54321,"fileName":"lively/morphic/TextCore.js","_subElements":[{"__isSmartRef__":true,"id":1423},{"__isSmartRef__":true,"id":1425},{"__isSmartRef__":true,"id":1426},{"__isSmartRef__":true,"id":1427},{"__isSmartRef__":true,"id":1428},{"__isSmartRef__":true,"id":1429},{"__isSmartRef__":true,"id":1430},{"__isSmartRef__":true,"id":1431},{"__isSmartRef__":true,"id":1432},{"__isSmartRef__":true,"id":1433},{"__isSmartRef__":true,"id":1434},{"__isSmartRef__":true,"id":1435},{"__isSmartRef__":true,"id":1436},{"__isSmartRef__":true,"id":1437},{"__isSmartRef__":true,"id":1438},{"__isSmartRef__":true,"id":1439},{"__isSmartRef__":true,"id":1440},{"__isSmartRef__":true,"id":1441}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1425":{"name":"setFontWeight","type":"propertyDef","startIndex":53252,"stopIndex":53321,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1424},"className":"lively.morphic.TextEmphasis","_owner":{"__isSmartRef__":true,"id":1420},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1426":{"name":"getItalics","type":"propertyDef","startIndex":53323,"stopIndex":53421,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1424},"className":"lively.morphic.TextEmphasis","_owner":{"__isSmartRef__":true,"id":1420},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1427":{"name":"setItalics","type":"propertyDef","startIndex":53423,"stopIndex":53480,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1424},"className":"lively.morphic.TextEmphasis","_owner":{"__isSmartRef__":true,"id":1420},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1428":{"name":"getURI","type":"propertyDef","startIndex":53482,"stopIndex":53521,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1424},"className":"lively.morphic.TextEmphasis","_owner":{"__isSmartRef__":true,"id":1420},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1429":{"name":"setURI","type":"propertyDef","startIndex":53523,"stopIndex":53572,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1424},"className":"lively.morphic.TextEmphasis","_owner":{"__isSmartRef__":true,"id":1420},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1430":{"name":"getDoit","type":"propertyDef","startIndex":53574,"stopIndex":53615,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1424},"className":"lively.morphic.TextEmphasis","_owner":{"__isSmartRef__":true,"id":1420},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1431":{"name":"setDoit","type":"propertyDef","startIndex":53617,"stopIndex":53669,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1424},"className":"lively.morphic.TextEmphasis","_owner":{"__isSmartRef__":true,"id":1420},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1432":{"name":"getFontFamily","type":"propertyDef","startIndex":53671,"stopIndex":53724,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1424},"className":"lively.morphic.TextEmphasis","_owner":{"__isSmartRef__":true,"id":1420},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1433":{"name":"setFontFamily","type":"propertyDef","startIndex":53726,"stopIndex":53802,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1424},"className":"lively.morphic.TextEmphasis","_owner":{"__isSmartRef__":true,"id":1420},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1434":{"name":"getColor","type":"propertyDef","startIndex":53804,"stopIndex":53847,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1424},"className":"lively.morphic.TextEmphasis","_owner":{"__isSmartRef__":true,"id":1420},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1435":{"name":"setColor","type":"propertyDef","startIndex":53849,"stopIndex":53905,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1424},"className":"lively.morphic.TextEmphasis","_owner":{"__isSmartRef__":true,"id":1420},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1436":{"name":"getTextDecoration","type":"propertyDef","startIndex":53907,"stopIndex":53968,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1424},"className":"lively.morphic.TextEmphasis","_owner":{"__isSmartRef__":true,"id":1420},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1437":{"name":"setTextDecoration","type":"propertyDef","startIndex":53970,"stopIndex":54062,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1424},"className":"lively.morphic.TextEmphasis","_owner":{"__isSmartRef__":true,"id":1420},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1438":{"name":"getTextAlignment","type":"propertyDef","startIndex":54064,"stopIndex":54119,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1424},"className":"lively.morphic.TextEmphasis","_owner":{"__isSmartRef__":true,"id":1420},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1439":{"name":"setTextAlignment","type":"propertyDef","startIndex":54121,"stopIndex":54197,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1424},"className":"lively.morphic.TextEmphasis","_owner":{"__isSmartRef__":true,"id":1420},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1440":{"name":"getFontSize","type":"propertyDef","startIndex":54199,"stopIndex":54248,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1424},"className":"lively.morphic.TextEmphasis","_owner":{"__isSmartRef__":true,"id":1420},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1441":{"name":"setFontSize","type":"propertyDef","startIndex":54250,"stopIndex":54318,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1424},"className":"lively.morphic.TextEmphasis","_owner":{"__isSmartRef__":true,"id":1420},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1442":{"name":"clone","type":"propertyDef","startIndex":54336,"stopIndex":54392,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1443},"className":"lively.morphic.TextEmphasis","_owner":{"__isSmartRef__":true,"id":1420},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1443":{"name":"cloning","type":"categoryDef","startIndex":54323,"stopIndex":54395,"fileName":"lively/morphic/TextCore.js","_subElements":[{"__isSmartRef__":true,"id":1442}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1444":{"name":"add","type":"propertyDef","startIndex":54411,"stopIndex":54538,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1445},"className":"lively.morphic.TextEmphasis","_owner":{"__isSmartRef__":true,"id":1420},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1445":{"name":"changing","type":"categoryDef","startIndex":54397,"stopIndex":54541,"fileName":"lively/morphic/TextCore.js","_subElements":[{"__isSmartRef__":true,"id":1444}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1446":{"name":"equals","type":"propertyDef","startIndex":54556,"stopIndex":55158,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1447},"className":"lively.morphic.TextEmphasis","_owner":{"__isSmartRef__":true,"id":1420},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1447":{"name":"testing","type":"categoryDef","startIndex":54543,"stopIndex":55161,"fileName":"lively/morphic/TextCore.js","_subElements":[{"__isSmartRef__":true,"id":1446}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1448":{"name":"applyToHTML","type":"propertyDef","startIndex":55178,"stopIndex":56591,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1449},"className":"lively.morphic.TextEmphasis","_owner":{"__isSmartRef__":true,"id":1420},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1449":{"name":"rendering","type":"categoryDef","startIndex":55163,"stopIndex":56594,"fileName":"lively/morphic/TextCore.js","_subElements":[{"__isSmartRef__":true,"id":1448}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1450":{"name":"toString","type":"propertyDef","startIndex":56611,"stopIndex":56813,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1451},"className":"lively.morphic.TextEmphasis","_owner":{"__isSmartRef__":true,"id":1420},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1451":{"name":"debugging","type":"categoryDef","startIndex":56596,"stopIndex":56815,"fileName":"lively/morphic/TextCore.js","_subElements":[{"__isSmartRef__":true,"id":1450}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1452":{"name":null,"type":"comment","startIndex":56819,"stopIndex":56820,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1453":{"name":"TextDevLayer","type":"copDef","startIndex":56821,"stopIndex":57519,"fileName":"lively/morphic/TextCore.js","_subElements":[{"__isSmartRef__":true,"id":1454}],"sourceControl":{"__isSmartRef__":true,"id":637},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1454":{"name":"lively.morphic.TextChunk","type":"copSubElement","startIndex":56848,"stopIndex":57517,"fileName":"lively/morphic/TextCore.js","_subElements":[{"__isSmartRef__":true,"id":1455}],"sourceControl":{"__isSmartRef__":true,"id":637},"refineSelector":"refineClass","_owner":{"__isSmartRef__":true,"id":1453},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1455":{"name":"ingestAllPrecedingElements","type":"propertyDef","startIndex":56889,"stopIndex":57514,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"_isStatic":false,"category":{"__isSmartRef__":true,"id":1456},"_owner":{"__isSmartRef__":true,"id":1454},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1456":{"name":"default category","type":"categoryDef","startIndex":66,"stopIndex":695,"fileName":null,"_subElements":[{"__isSmartRef__":true,"id":1455}],"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1457":{"name":null,"type":"comment","startIndex":57520,"stopIndex":57520,"fileName":"lively/morphic/TextCore.js","_subElements":[],"sourceControl":{"__isSmartRef__":true,"id":637},"__LivelyClassName__":"lively.ide.FileFragment","__SourceModuleName__":"Global.lively.ide.FileParsing"},"1458":{"browser":{"__isSmartRef__":true,"id":439},"parent":{"__isSmartRef__":true,"id":636},"moduleName":"lively/morphic/Widgets.js","showAll":false,"__LivelyClassName__":"lively.ide.CompleteFileFragmentNode","__SourceModuleName__":"Global.lively.ide.SystemBrowserNodes"},"1459":{"target":{"__isSmartRef__":true,"id":1460},"browser":{"__isSmartRef__":true,"id":439},"__LivelyClassName__":"lively.ide.ChangeSetNode","__SourceModuleName__":"Global.lively.ide.LocalBrowser"},"1460":{"name":"Local code","__LivelyClassName__":"ChangeSet","__SourceModuleName__":"Global.lively.ChangeSet"},"1461":{"isListItem":true,"string":"Canvas.js (not parsed)","value":{"__isSmartRef__":true,"id":638}},"1462":{"isListItem":true,"string":"ColorChooserDraft.js (not parsed)","value":{"__isSmartRef__":true,"id":639}},"1463":{"isListItem":true,"string":"Compat.js (not parsed)","value":{"__isSmartRef__":true,"id":640}},"1464":{"isListItem":true,"string":"CompatLayer.js","value":{"__isSmartRef__":true,"id":641}},"1465":{"isListItem":true,"string":"CompatSCB.js (not parsed)","value":{"__isSmartRef__":true,"id":669}},"1466":{"isListItem":true,"string":"Complete.js (not parsed)","value":{"__isSmartRef__":true,"id":670}},"1467":{"isListItem":true,"string":"Core.js","value":{"__isSmartRef__":true,"id":671}},"1468":{"isListItem":true,"string":"Events.js","value":{"__isSmartRef__":true,"id":864}},"1469":{"isListItem":true,"string":"Examples.js (not parsed)","value":{"__isSmartRef__":true,"id":1063}},"1470":{"isListItem":true,"string":"Experiments.js (not parsed)","value":{"__isSmartRef__":true,"id":1064}},"1471":{"isListItem":true,"string":"Graffle.js (not parsed)","value":{"__isSmartRef__":true,"id":1065}},"1472":{"isListItem":true,"string":"Halos.js (not parsed)","value":{"__isSmartRef__":true,"id":1066}},"1473":{"isListItem":true,"string":"HTML.js (not parsed)","value":{"__isSmartRef__":true,"id":1067}},"1474":{"isListItem":true,"string":"Layout.js (not parsed)","value":{"__isSmartRef__":true,"id":1068}},"1475":{"isListItem":true,"string":"lively.morphic.Widgets.js (not parsed)","value":{"__isSmartRef__":true,"id":1069}},"1476":{"isListItem":true,"string":"MorphAddons.js (not parsed)","value":{"__isSmartRef__":true,"id":1070}},"1477":{"isListItem":true,"string":"ObjectMigration.js (not parsed)","value":{"__isSmartRef__":true,"id":1071}},"1478":{"isListItem":true,"string":"Rendering.js (not parsed)","value":{"__isSmartRef__":true,"id":1072}},"1479":{"isListItem":true,"string":"ScriptingSupport.js (not parsed)","value":{"__isSmartRef__":true,"id":1073}},"1480":{"isListItem":true,"string":"Serialization.js (not parsed)","value":{"__isSmartRef__":true,"id":1074}},"1481":{"isListItem":true,"string":"Shapes.js (not parsed)","value":{"__isSmartRef__":true,"id":1075}},"1482":{"isListItem":true,"string":"Styles.js (not parsed)","value":{"__isSmartRef__":true,"id":1076}},"1483":{"isListItem":true,"string":"SVG.js (not parsed)","value":{"__isSmartRef__":true,"id":1077}},"1484":{"isListItem":true,"string":"Tests.js","value":{"__isSmartRef__":true,"id":1078}},"1485":{"isListItem":true,"string":"TextCore.js","value":{"__isSmartRef__":true,"id":1221}},"1486":{"isListItem":true,"string":"Widgets.js (not parsed)","value":{"__isSmartRef__":true,"id":1458}},"1487":{"isListItem":true,"string":"Local code","value":{"__isSmartRef__":true,"id":1459}},"1488":{"sourceObj":{"__isSmartRef__":true,"id":627},"sourceAttrName":"selection","targetObj":{"__isSmartRef__":true,"id":439},"targetMethodName":"setPane1Selection","converter":null,"converterString":null,"updaterString":"function ($upd, v) { $upd(v, this.sourceObj) }","__LivelyClassName__":"AttributeConnection","__SourceModuleName__":"Global.lively.bindings"},"1489":{"sourceObj":{"__isSmartRef__":true,"id":627},"sourceAttrName":"getSelection","targetObj":{"__isSmartRef__":true,"id":439},"targetMethodName":"getPane1Selection","converter":null,"converterString":null,"updater":null,"updaterString":null,"__LivelyClassName__":"AttributeConnection","__SourceModuleName__":"Global.lively.bindings"},"1490":{"sourceObj":{"__isSmartRef__":true,"id":627},"sourceAttrName":"getList","targetObj":{"__isSmartRef__":true,"id":439},"targetMethodName":"getPane1Content","converter":null,"converterString":null,"updater":null,"updaterString":null,"__LivelyClassName__":"AttributeConnection","__SourceModuleName__":"Global.lively.bindings"},"1491":{"sourceObj":{"__isSmartRef__":true,"id":627},"sourceAttrName":"getMenu","targetObj":{"__isSmartRef__":true,"id":439},"targetMethodName":"getPane1Menu","converter":null,"converterString":null,"updater":null,"updaterString":null,"__LivelyClassName__":"AttributeConnection","__SourceModuleName__":"Global.lively.bindings"},"1492":{"sourceObj":{"__isSmartRef__":true,"id":439},"sourceAttrName":"setPane2Content","targetObj":{"__isSmartRef__":true,"id":1493},"targetMethodName":"updateList","converter":null,"converterString":null,"updater":null,"updaterString":null,"__LivelyClassName__":"AttributeConnection","__SourceModuleName__":"Global.lively.bindings"},"1493":{"submorphs":[],"scripts":[],"id":618,"shape":{"__isSmartRef__":true,"id":1494},"droppingEnabled":true,"halosEnabled":true,"_ClipMode":"scroll","_Position":{"__isSmartRef__":true,"id":1497},"itemList":[{"__isSmartRef__":true,"id":1498},{"__isSmartRef__":true,"id":1500},{"__isSmartRef__":true,"id":1502},{"__isSmartRef__":true,"id":1504},{"__isSmartRef__":true,"id":1506},{"__isSmartRef__":true,"id":1508}],"selectedLineNo":-1,"selectOnMove":false,"owner":{"__isSmartRef__":true,"id":427},"attributeConnections":[{"__isSmartRef__":true,"id":1510},{"__isSmartRef__":true,"id":1511},{"__isSmartRef__":true,"id":1512},{"__isSmartRef__":true,"id":1513}],"doNotSerialize":["$$selection"],"doNotCopyProperties":["$$selection"],"selection":null,"__LivelyClassName__":"lively.morphic.List","__SourceModuleName__":"Global.lively.morphic.Core"},"1494":{"_Position":{"__isSmartRef__":true,"id":1495},"_Extent":{"__isSmartRef__":true,"id":1496},"_BorderWidth":0,"_BorderColor":{"__isSmartRef__":true,"id":432},"_Fill":{"__isSmartRef__":true,"id":631},"__LivelyClassName__":"lively.morphic.Shapes.Rectangle","__SourceModuleName__":"Global.lively.morphic.Shapes"},"1495":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"1496":{"x":205,"y":192.5,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"1497":{"x":205,"y":27.5,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"1498":{"isListItem":true,"string":"lively.morphic.Text","value":{"__isSmartRef__":true,"id":1499}},"1499":{"target":{"__isSmartRef__":true,"id":1224},"browser":{"__isSmartRef__":true,"id":439},"__LivelyClassName__":"lively.ide.CategorizedClassFragmentNode","__SourceModuleName__":"Global.lively.ide.SystemBrowserNodes"},"1500":{"isListItem":true,"string":"lively.morphic.Text (extension)","value":{"__isSmartRef__":true,"id":1501}},"1501":{"target":{"__isSmartRef__":true,"id":1370},"browser":{"__isSmartRef__":true,"id":439},"__LivelyClassName__":"lively.ide.CategorizedClassFragmentNode","__SourceModuleName__":"Global.lively.ide.SystemBrowserNodes"},"1502":{"isListItem":true,"string":"lively.morphic.Text.ProtocolLister","value":{"__isSmartRef__":true,"id":1503}},"1503":{"target":{"__isSmartRef__":true,"id":1373},"browser":{"__isSmartRef__":true,"id":439},"__LivelyClassName__":"lively.ide.CategorizedClassFragmentNode","__SourceModuleName__":"Global.lively.ide.SystemBrowserNodes"},"1504":{"isListItem":true,"string":"lively.morphic.TextChunk","value":{"__isSmartRef__":true,"id":1505}},"1505":{"target":{"__isSmartRef__":true,"id":1386},"browser":{"__isSmartRef__":true,"id":439},"__LivelyClassName__":"lively.ide.CategorizedClassFragmentNode","__SourceModuleName__":"Global.lively.ide.SystemBrowserNodes"},"1506":{"isListItem":true,"string":"lively.morphic.TextEmphasis","value":{"__isSmartRef__":true,"id":1507}},"1507":{"target":{"__isSmartRef__":true,"id":1420},"browser":{"__isSmartRef__":true,"id":439},"__LivelyClassName__":"lively.ide.CategorizedClassFragmentNode","__SourceModuleName__":"Global.lively.ide.SystemBrowserNodes"},"1508":{"isListItem":true,"string":"TextDevLayer","value":{"__isSmartRef__":true,"id":1509}},"1509":{"target":{"__isSmartRef__":true,"id":1453},"browser":{"__isSmartRef__":true,"id":439},"__LivelyClassName__":"lively.ide.CopFragmentNode","__SourceModuleName__":"Global.lively.ide.SystemBrowserNodes"},"1510":{"sourceObj":{"__isSmartRef__":true,"id":1493},"sourceAttrName":"selection","targetObj":{"__isSmartRef__":true,"id":439},"targetMethodName":"setPane2Selection","converter":null,"converterString":null,"updater":null,"updaterString":"function ($upd, v) { $upd(v, this.sourceObj) }","__LivelyClassName__":"AttributeConnection","__SourceModuleName__":"Global.lively.bindings"},"1511":{"sourceObj":{"__isSmartRef__":true,"id":1493},"sourceAttrName":"getSelection","targetObj":{"__isSmartRef__":true,"id":439},"targetMethodName":"getPane2Selection","converter":null,"converterString":null,"updater":null,"updaterString":null,"__LivelyClassName__":"AttributeConnection","__SourceModuleName__":"Global.lively.bindings"},"1512":{"sourceObj":{"__isSmartRef__":true,"id":1493},"sourceAttrName":"getList","targetObj":{"__isSmartRef__":true,"id":439},"targetMethodName":"getPane2Content","converter":null,"converterString":null,"updater":null,"updaterString":null,"__LivelyClassName__":"AttributeConnection","__SourceModuleName__":"Global.lively.bindings"},"1513":{"sourceObj":{"__isSmartRef__":true,"id":1493},"sourceAttrName":"getMenu","targetObj":{"__isSmartRef__":true,"id":439},"targetMethodName":"getPane2Menu","converter":null,"converterString":null,"updater":null,"updaterString":null,"__LivelyClassName__":"AttributeConnection","__SourceModuleName__":"Global.lively.bindings"},"1514":{"sourceObj":{"__isSmartRef__":true,"id":439},"sourceAttrName":"setPane3Content","targetObj":{"__isSmartRef__":true,"id":1515},"targetMethodName":"updateList","converter":null,"converterString":null,"updater":null,"updaterString":null,"__LivelyClassName__":"AttributeConnection","__SourceModuleName__":"Global.lively.bindings"},"1515":{"submorphs":[],"scripts":[],"id":619,"shape":{"__isSmartRef__":true,"id":1516},"droppingEnabled":true,"halosEnabled":true,"_ClipMode":"scroll","_Position":{"__isSmartRef__":true,"id":1519},"itemList":["-----"],"selectedLineNo":-1,"selectOnMove":false,"owner":{"__isSmartRef__":true,"id":427},"attributeConnections":[{"__isSmartRef__":true,"id":1520},{"__isSmartRef__":true,"id":1521},{"__isSmartRef__":true,"id":1522},{"__isSmartRef__":true,"id":1523}],"doNotSerialize":["$$selection"],"doNotCopyProperties":["$$selection"],"selection":null,"__LivelyClassName__":"lively.morphic.List","__SourceModuleName__":"Global.lively.morphic.Core"},"1516":{"_Position":{"__isSmartRef__":true,"id":1517},"_Extent":{"__isSmartRef__":true,"id":1518},"_BorderWidth":0,"_BorderColor":{"__isSmartRef__":true,"id":432},"_Fill":{"__isSmartRef__":true,"id":631},"__LivelyClassName__":"lively.morphic.Shapes.Rectangle","__SourceModuleName__":"Global.lively.morphic.Shapes"},"1517":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"1518":{"x":205,"y":192.5,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"1519":{"x":410,"y":27.5,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"1520":{"sourceObj":{"__isSmartRef__":true,"id":1515},"sourceAttrName":"selection","targetObj":{"__isSmartRef__":true,"id":439},"targetMethodName":"setPane3Selection","converter":null,"converterString":null,"updater":null,"updaterString":"function ($upd, v) { $upd(v, this.sourceObj) }","__LivelyClassName__":"AttributeConnection","__SourceModuleName__":"Global.lively.bindings"},"1521":{"sourceObj":{"__isSmartRef__":true,"id":1515},"sourceAttrName":"getSelection","targetObj":{"__isSmartRef__":true,"id":439},"targetMethodName":"getPane3Selection","converter":null,"converterString":null,"updater":null,"updaterString":null,"__LivelyClassName__":"AttributeConnection","__SourceModuleName__":"Global.lively.bindings"},"1522":{"sourceObj":{"__isSmartRef__":true,"id":1515},"sourceAttrName":"getList","targetObj":{"__isSmartRef__":true,"id":439},"targetMethodName":"getPane3Content","converter":null,"converterString":null,"updater":null,"updaterString":null,"__LivelyClassName__":"AttributeConnection","__SourceModuleName__":"Global.lively.bindings"},"1523":{"sourceObj":{"__isSmartRef__":true,"id":1515},"sourceAttrName":"getMenu","targetObj":{"__isSmartRef__":true,"id":439},"targetMethodName":"getPane3Menu","converter":null,"converterString":null,"updater":null,"updaterString":null,"__LivelyClassName__":"AttributeConnection","__SourceModuleName__":"Global.lively.bindings"},"1524":{"sourceObj":{"__isSmartRef__":true,"id":439},"sourceAttrName":"setPane4Content","targetObj":{"__isSmartRef__":true,"id":1525},"targetMethodName":"updateList","converter":null,"converterString":null,"updater":null,"updaterString":null,"__LivelyClassName__":"AttributeConnection","__SourceModuleName__":"Global.lively.bindings"},"1525":{"submorphs":[],"scripts":[],"id":620,"shape":{"__isSmartRef__":true,"id":1526},"droppingEnabled":true,"halosEnabled":true,"_ClipMode":"scroll","_Position":{"__isSmartRef__":true,"id":1529},"itemList":["-----"],"selectedLineNo":-1,"selectOnMove":false,"owner":{"__isSmartRef__":true,"id":427},"attributeConnections":[{"__isSmartRef__":true,"id":1530},{"__isSmartRef__":true,"id":1531},{"__isSmartRef__":true,"id":1532},{"__isSmartRef__":true,"id":1533}],"doNotSerialize":["$$selection"],"doNotCopyProperties":["$$selection"],"selection":null,"__LivelyClassName__":"lively.morphic.List","__SourceModuleName__":"Global.lively.morphic.Core"},"1526":{"_Position":{"__isSmartRef__":true,"id":1527},"_Extent":{"__isSmartRef__":true,"id":1528},"_BorderWidth":0,"_BorderColor":{"__isSmartRef__":true,"id":432},"_Fill":{"__isSmartRef__":true,"id":631},"__LivelyClassName__":"lively.morphic.Shapes.Rectangle","__SourceModuleName__":"Global.lively.morphic.Shapes"},"1527":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"1528":{"x":205,"y":192.5,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"1529":{"x":615,"y":27.5,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"1530":{"sourceObj":{"__isSmartRef__":true,"id":1525},"sourceAttrName":"selection","targetObj":{"__isSmartRef__":true,"id":439},"targetMethodName":"setPane4Selection","converter":null,"converterString":null,"updater":null,"updaterString":"function ($upd, v) { $upd(v, this.sourceObj) }","__LivelyClassName__":"AttributeConnection","__SourceModuleName__":"Global.lively.bindings"},"1531":{"sourceObj":{"__isSmartRef__":true,"id":1525},"sourceAttrName":"getSelection","targetObj":{"__isSmartRef__":true,"id":439},"targetMethodName":"getPane4Selection","converter":null,"converterString":null,"updater":null,"updaterString":null,"__LivelyClassName__":"AttributeConnection","__SourceModuleName__":"Global.lively.bindings"},"1532":{"sourceObj":{"__isSmartRef__":true,"id":1525},"sourceAttrName":"getList","targetObj":{"__isSmartRef__":true,"id":439},"targetMethodName":"getPane4Content","converter":null,"converterString":null,"updater":null,"updaterString":null,"__LivelyClassName__":"AttributeConnection","__SourceModuleName__":"Global.lively.bindings"},"1533":{"sourceObj":{"__isSmartRef__":true,"id":1525},"sourceAttrName":"getMenu","targetObj":{"__isSmartRef__":true,"id":439},"targetMethodName":"getPane4Menu","converter":null,"converterString":null,"updater":null,"updaterString":null,"__LivelyClassName__":"AttributeConnection","__SourceModuleName__":"Global.lively.bindings"},"1534":{"sourceObj":{"__isSmartRef__":true,"id":439},"sourceAttrName":"setSourceString","targetObj":{"__isSmartRef__":true,"id":1535},"targetMethodName":"setTextString","converter":null,"converterString":null,"updater":null,"updaterString":null,"__LivelyClassName__":"AttributeConnection","__SourceModuleName__":"Global.lively.bindings"},"1535":{"submorphs":[],"scripts":[],"id":622,"shape":{"__isSmartRef__":true,"id":1536},"grabbingEnabled":false,"droppingEnabled":false,"halosEnabled":true,"_Padding":{"__isSmartRef__":true,"id":1539},"_ClipMode":"scroll","fixedWidth":true,"_WhiteSpaceHandling":"pre-wrap","fixedHeight":true,"allowInput":true,"_FontFamily":"Courier","_Position":{"__isSmartRef__":true,"id":1540},"_MaxTextWidth":820,"_MaxTextHeight":269.5,"textChunks":[{"__isSmartRef__":true,"id":1541}],"owner":{"__isSmartRef__":true,"id":427},"layout":{"__isSmartRef__":true,"id":1543},"_FontSize":10,"noEval":true,"attributeConnections":[{"__isSmartRef__":true,"id":1544}],"doNotSerialize":["$$savedTextString"],"doNotCopyProperties":["$$savedTextString"],"styleClass":["Browser_codePaneText"],"focusHaloBorderWidth":0.5,"__LivelyClassName__":"lively.morphic.Text","__SourceModuleName__":"Global.lively.morphic.TextCore"},"1536":{"_Position":{"__isSmartRef__":true,"id":1537},"_Extent":{"__isSmartRef__":true,"id":1538},"_BorderWidth":1,"_BorderColor":{"__isSmartRef__":true,"id":432},"_Fill":{"__isSmartRef__":true,"id":433},"__LivelyClassName__":"lively.morphic.Shapes.Rectangle","__SourceModuleName__":"Global.lively.morphic.Shapes"},"1537":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"1538":{"x":820,"y":269.5,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"1539":{"x":5,"y":5,"width":0,"height":0,"__LivelyClassName__":"Rectangle","__SourceModuleName__":"Global"},"1540":{"x":0,"y":247.5,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"1541":{"style":{"__isSmartRef__":true,"id":1542},"morph":{"__isSmartRef__":true,"id":1535},"storedString":"module('lively.morphic.TextCore').requires('cop.Layers', 'lively.morphic.Core').toRun(function() {\n\nlively.morphic.Morph.subclass('lively.morphic.Text', Trait('ScrollableTrait'),\n'properties', {\n\tstyle: {\n\t\tborderWidth: 1,\n\t\tborderColor: Color.black,\n\t\tfill: Color.veryLightGray,\n\t\tfixedWidth: true,\n\t\tfixedHeight: true,\n\t\tenableGrabbing: false,\n\t\tenableDropping: false,\n\t\tallowInput: true,\n\t\tclipMode: 'visible',\n\t\tfontFamily: 'Helvetica',\n\t\twhiteSpaceHandling: 'pre-wrap',\n\t\tpadding: Rectangle.inset(2, 1),\n\t},\n\t\n\tautoAdjustPadding: true,\n\tsuppressDropping: true,\n\n\t// wrap: lively.Text.WrapStyle.Normal,\n\t// tabWidth: 4,\n\t// maxSafeSize: 10e4,\n\t// locale: Locale,\n\t// acceptInput: true, // whether it accepts changes to text KP: change: interactive changes\n\t// autoAccept: false,\n\t// isSelecting: false, // true if last onmousedown was in character area (hit>0)\n\t// selectionPivot: null, // index of hit at onmousedown\n\t// lineNumberHint: 0,\n\t// hasKeyboardFocus: false,\n\t// useChangeClue: false,\n},\n'initializing', {\n\tinitialize: function($super, bounds, string) {\n\t\t$super(this.defaultShape());\n\t\tif (bounds) this.setBounds(bounds);\n\t\tthis.textString = string || '';\n\t\tthis.charsTyped = '';\n\t\tthis.fit();\n\t},\n},\n'styling', {\n\tapplyStyle: function($super, spec) {\n\t\t$super(spec);\n\t\tif (spec.fixedWidth !== undefined) this.setFixedWidth(spec.fixedWidth);\n\t\tif (spec.fixedHeight !== undefined) this.setFixedHeight(spec.fixedHeight);\n\t\tif (spec.allowInput !== undefined) this.allowInput = spec.allowInput;\n\t\tif (spec.fontFamily !== undefined) this.setFontFamily(spec.fontFamily);\n\t\tif (spec.fontSize !== undefined) this.setFontSize(spec.fontSize);\n\t\tif (spec.textColor !== undefined) this.setTextColor(spec.textColor);\n\t\tif (spec.padding !== undefined) this.setPadding(spec.padding);\t\n\t\tif (spec.whiteSpaceHandling !== undefined) this.setWhiteSpaceHandling(spec.whiteSpaceHandling);\n\t},\n},\n'accessing', {\n\tsetExtent: function($super, value) {\n\t\t$super(value);\n\t\tthis.setMaxTextWidth(this.fixedWidth ? value.x : null);\n\t\tthis.setMaxTextHeight(this.fixedHeight ? value.y : null);\n\t},\n\tgetTextExtent: function() { return this.renderContextDispatch('getTextExtent') },\n\tgetTextBounds: function() { return pt(0,0).extent(this.getTextExtent()) },\n\n\tget textString() {\n\t\t// when the prototype property is accessed\n\t\tif (this === this.constructor.prototype) return;\n\t\tif (!this.cachedTextString)\n\t\t\tthis.cachedTextString = this.renderContextDispatch('getTextString');\n\t\treturn this.cachedTextString;\n\t},\n\tset textString(string) {\n\t\tstring = String(string);\n\n\t\tthis.fixChunks();\n\t\tthis.removeTextChunks();\n\n\t\tthis.firstTextChunk().textString = string;\n\t\t\n\t\tthis.cachedTextString = string;\n\n\t\tlively.bindings.signal(this, 'textString', string);\n\t\treturn string;\n\t},\n\n\tsetTextString: function(string) { return this.textString = string },\n\tgetTextString: function() { return this.textString },\n\tappendTextString: function(string) { return this.textString += string },\n\n\tsetTextColor: function(color) { return this.morphicSetter('TextColor', color) },\n\tgetTextColor: function() { return this.morphicGetter('TextColor') },\n\tsetFontSize: function(size) { return this.morphicSetter('FontSize', size) },\n\tgetFontSize: function() { return this.morphicGetter('FontSize') },\n\tsetFontFamily: function(fontName) { return this.morphicSetter('FontFamily', fontName) },\n\tgetFontFamily: function() { return this.morphicGetter('FontFamily') },\n\n\tsetPadding: function(rect) { return this.morphicSetter('Padding', rect) },\n\tgetPadding: function() { return this.morphicGetter('Padding') },\n\tsetFixedWidth: function(bool) {\n\t\tthis.fixedWidth = bool;\n\t\tthis.setWhiteSpaceHandling(bool ? 'pre-wrap' : 'pre');\n\t\tthis.fit();\nthis.fit();\n\t},\n\tsetFixedHeight: function(bool) {\n\t\tthis.fixedHeight = bool\n\t\tthis.fit();\n\t},\n\tsetMaxTextWidth: function(value) {\n\t\tthis.morphicSetter('MaxTextWidth', value)\n\t},\n\tsetMaxTextHeight: function(value) {\n\t\tthis.morphicSetter('MaxTextHeight', value)\n\t},\n},\n'rendering', {\n\tupdateText: function(string) {\n\t\tthis.renderContextDispatch('updateText', string || this.textString);\n\t\tthis.fit();\n\t},\n\tgrowOrShrinkToFit: function() { this.setExtent(this.getTextExtent()) },\n\tfit: function() {\n\t\tif (!this.owner) return;\n\t\tvar extent = this.getExtent(),\n\t\t\ttextExtent = this.getTextExtent(),\n\t\t\twidth = this.fixedWidth ? extent.x : textExtent.x,\n\t\t\theight = this.fixedHeight ? extent.y : textExtent.y;\n\t\tthis.setExtent(pt(width, height));\n\t},\n},\n'text modes', {\n\tbeLabel: function(customStyle) {\n\t\tthis.isLabel = true;\n\t\tvar labelStyle = {\n\t\t\tfill: null,\n\t\t\tborderWidth: 0,\n\t\t\tfixedWidth: false,\n\t\t\tfixedHeight: true,\n\t\t\tallowInput: false,\n\t\t\tclipMode: 'hidden',\n\t\t};\n\t\tif (customStyle) labelStyle = Object.merge([labelStyle, customStyle]);\n\t\tthis.applyStyle(labelStyle);\n\t\tthis.ignoreEvents();\n\t\treturn this;\n\t},\n\tbeInputLine: function(customStyle) {\n\t\tthis.isInputLine = true;\n\t\tvar inputLineStyle = {\n\t\t\tfixedWidth: false,\n\t\t\tfixedHeight: true,\n\t\t\tclipMode: 'hidden',\n\t\t\tallowInput: true,\n\t\t};\n\t\tif (customStyle) inputLineStyle = Object.merge([inputLineStyle, customStyle]);\n\t\tthis.applyStyle(inputLineStyle);\n\t\treturn this;\n\t},\n},\n'keyboard events', {\n\n\tonKeyDown: function(evt) {\n\t\tthis.cachedTextString = null;\n\n\t\tif (evt.isAltDown()) {\n\t\t\t// alt with arrow keys can trigger browser forward/backward actions\n\t\t\t// that can just navigate away from the current world and thus\n\t\t\t// causing data loss. this disables it\n\t\t\tUserAgent.isWindows && evt.stop();\n\t\t}\n\n\t\tif (evt.isCommandKey() || evt.isCtrlDown()) {\n\t\t\tvar result = this.processCommandKeys(evt);\n\t\t\tif (result) evt.stop();\n\t\t\t// return result;\n\t\t}\n\n\t\t// Opera fix: evt.stop in onKeyPress does not seem to work\n\t\tevt.stopPropagation();\n\n\t\tvar c = evt.getKeyCode();\n\t\tif (c === Event.KEY_DELETE) return this.onDelPressed(evt);\n\t\tif (c === Event.KEY_BACKSPACE) return this.onBackspacePressed(evt);\n\t\tif (c === Event.KEY_TAB) return this.onTabPressed(evt);\n\t\tif (c === Event.KEY_RETURN) return this.onEnterPressed(evt);\n\t\tif (c === Event.KEY_HOME) return this.onHomePressed(evt);\n\t\tif (c === Event.KEY_END) return this.onEndPressed(evt);\n\t\tif (c === Event.KEY_PAGEUP) return this.onPageUpPressed(evt);\n\t\tif (c === Event.KEY_PAGEDOWN) return this.onPageDownPressed(evt);\n\n\t\treturn true;\n\t},\n\tonKeyUp: function(evt) {\n\t\t// textString getter is expensive so only trigger when observers exist\n\t\t// Note that textString may not be changed, e.g. when pressing a control key only\n\t\tif (this.attributeConnections)\n\t\t\tlively.bindings.signal(this, 'textString', this.textString);\n\n\t\tthis.fit();\n\n\t\tevt.stop();\n\t\treturn true;\n\t},\n\tonKeyPress: function(evt) {\n\t\tthis.cachedTextString = null;\n\n\t\t// save info for 'More' command\n\t\tthis.rememberSelectionForDoMore('onKeyPress');\n\n\t\tvar key = evt.getKeyChar();\n\t\tif (key && key.toLowerCase() == \"v\" && evt.isCommandKey()) {\n\t\t\tthis.charsTyped += TextMorph.clipboardString;\n\t\t} else {\n\t\t\tthis.charsTyped += key;\n\t\t}\n\n\t\t// if (this.textString.length == 0) this.textString += key;\n\n\t\tthis.fixChunksDelayed();\n\t\tevt.stopPropagation()\n\t\treturn true;\n\t},\n\tonPaste: function(evt) {\n\t\tthis.fixChunksDelayed()\n\t},\n\n\tprocessCommandKeys: function(evt) {\n\t\tvar key = evt.getKeyChar();\n\t\t// alert(\"key \" + key)\n\t\tif (key) key = key.toLowerCase();\n\n\t\tif (evt.isShiftDown()) { // shifted commands here...\n\t\t\tswitch (key) {\n\t\t\t\tcase \"i\": { this.doInspect(); return true; }\n\t\t\t\tcase \"p\": { this.doListProtocol(); return true; }\n\t\t\t}\n\t\t}\n\n\t\tswitch (key) {\n\t\t\tcase \"d\": { this.doDoit(); return true; } // Doit\n\t\t\tcase \"p\": { this.doPrintit(); return true; } // Printit\n\t\t\tcase \"s\": { this.doSave(); return true; }\n\t\t\tcase \"b\": { this.toggleEmphasisForSelection('Boldness'); return true; }\n\t\t\tcase \"i\": { this.toggleEmphasisForSelection('Italics'); return true; }\n\t\t\tcase \"k\": { this.toggleEmphasisForSelection('Link'); return true; }\n\t\t\tcase \"o\": { this.toggleEmphasisForSelection('Doit'); return true; }\n\t\t\tcase \"t\": { alert(\"browser intercepts this t\"); return true;}\n\t\t\tcase \"l\": { this.toggleEmphasisForSelection('Font'); return true; }\n\t\t\tcase \"u\": { this.toggleEmphasisForSelection('Underline'); return true; }\n\t\t\t\n\n\t\t\tcase \"l\": { this.emphasizeSelection({align: 'left'}); return true; }\n\t\t\tcase \"r\": { this.emphasizeSelection({align: 'right'}); return true; }\n\t\t\tcase \"h\": { this.emphasizeSelection({align: 'center'}); return true; }\n\t\t\t// case \"j\": { this.emphasize({italic: true}); return true; }\n\n\t\t\tcase \"f\": { this.doFind(); return true; }\n\t\t\tcase \"g\": { this.doFindNext(); return true; }\n\t\t\tcase \"m\": { this.doMore(evt.isShiftDown()); return true; }\n\n\t\t \n\t\t\tcase \"a\": { if (this.charsTyped && this.charsTyped.length > 0) {\n\t\t\t\t\t// select recent typing, if any\n\t\t\t\t\tvar i = this.getSelectionRange()[1];\n\t\t\t\t\tthis.setSelectionRange(i - this.charsTyped.length, i);\n\t\t\t\t\tthis.charsTyped = '';\n\t\t\t\t\treturn true; }\n\t\t\t\t// Otherwise, do a normal select-all\n\t\t\t\treturn false; }\n\t\t\tcase \"x\": { lively.morphic.Text.clipboardString = this.selectionString();\n\t\t\t\treturn false; }\n\t\t\tcase \"c\": { lively.morphic.Text.clipboardString = this.selectionString();\n\t\t\t\treturn false; }\n\t\t\tcase \"v\": { // Just do the native paste\n\t\t\t\treturn false; }\n\t\t}\n\n\t\tswitch(evt.getKeyCode()) {\n\t\t\t// Font Size\n\t\t\tcase 187/*cmd+'+'*/: { \n\t\t\t\tif (this.hasNullSelection())\n\t\t\t\t\tthis.setFontSize(this.getFontSize() + 1);\n\t\t\t\telse\n\t\t\t\t\tthis.increaseFontSizeOfSelection();\n\t\t\t\treturn true;\n\t\t\t} \t\n\t\t\tcase 189/*cmd+'-'*/: { \n\t\t\t\tif (this.hasNullSelection())\n\t\t\t\t\tthis.setFontSize(this.getFontSize() - 1);\n\t\t\t\telse\n\t\t\t\t\tthis.decreaseFontSizeOfSelection();\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\t// indent/outdent selection\n\t\t\tcase 221/*cmd+]*/: { this.indentSelection(); return true }\n\t\t\tcase 219/*cmd+[*/: { this.outdentSelection(); return true }\n\t\t\t\n\t\t\t// comment/uncoment selection\n\t\t\tcase 191 /*cmd+/*/: { this.addOrRemoveComment(); return true }\n\t\t}\n\n\t\treturn false;\n\t},\t\t\n\tdoDoit: function() { this.evalSelection(false) },\n\tdoPrintit: function() { this.evalSelection(true) },\n\tdoSave: function() {\n\t\t// resetting cachedTextString is necessary when doSave is not triggered by\n\t\t// cmd+s but from outside (e.g. from a button). The cachedTextString would not have\n\t\t// the current textString but an old one\n\t\tthis.cachedTextString = null;\n\t\tthis.savedTextString = this.textString;\n\t},\n\tdoListProtocol: function() {\n\t\tnew lively.morphic.Text.ProtocolLister(this).evalSelectionAndOpenListForProtocol();\n\t},\n\n\tdoFind: function() {\n\t\tvar text = this;\n\t\tthis.world() && this.world().prompt(\n\t\t\t\"Enter the text you wish to find...\", \n\t\t\tfunction(response) {\n\t\t\t\tif (!response) return;\n\t\t\t\ttext.focus();\n\t\t\t\treturn text.searchForFind(response, text.getSelectionRange()[1]);\n\t\t\t}, this.lastSearchString);\n\t},\n\n\tdoFindNext: function() {\n\t\tif (this.lastSearchString)\n\t\tthis.searchForFind(this.lastSearchString,\n\t\t\t// this.getSelectionRange()[0]\n\t\t\tthis.lastFindLoc + this.lastSearchString.length\n\t\t);\n\t},\n\t\n\tdoMore: function(doMuchMore) {\n\t\tif (doMuchMore) { // call with true (shift-M) for replace-all\n\t\t\t// Simplest way: just do N replacements\n\t\t\twhile (this.doMore(false)) { } // Keep repeating the change while possible\n\t\t\treturn;\n\t\t}\n\t\t// Return of true or false used by doMuchMore\n\t\tif (!this.charsReplaced || this.charsReplaced.length == 0) return false;\n\t\tthis.searchForFind(this.charsReplaced, this.lastFindLoc, 'noWrap');\n\t\tif (this.selectionString() != this.charsReplaced) return false;\n\t\tvar holdChars = this.charsReplaced;\t // Save charsReplaced\n\t\tvar holdLastFindLoc = this.lastFindLoc;\n\t\tthis.insertAtCursor(this.charsTyped, true, true); \n\t\tthis.charsReplaced = holdChars ; // Restore charsReplaced after above\n\t\tthis.lastFindLoc = holdLastFindLoc;\n\t\treturn true;\n\t},\n\tdoInspect: function() {\n\t\tvar obj = this.evalSelection();\n\t\tif (obj) this.world().openInspectorFor(obj)\n\t},\n\n\trememberSelectionForDoMore: function(fromWhere) {\n\t\t// This gets called from any typing. It can tell what is being\n\t\t// replaced by testing for a non-zero selection.\n\t\t// At that point, it also records the location consistent with DoMore\n\t\t// and initializes charsTyped which will collect the replacement characters\n\t\tvar sel = this.selectionString();\n\t\tif (!sel || sel == '') return; // null selection means no replacement\n\n\t\tthis.charsReplaced = sel;\n\t\tthis.lastFindLoc = this.getSelectionRange()[0] - sel.length;\n\t\tthis.charsTyped = '';\n\t},\n\n\n\tindentSelection: function() {\n\t\tvar tab = '\\t';\n\t\tthis.modifySelectedLines(function(line) { return line.length == 0 ? line : tab + line });\n\t},\n\toutdentSelection: function() {\n\t\tvar tab = '\\t', space = ' ';\n\t\tthis.modifySelectedLines(function(line) {\n\t\t\treturn (line.startsWith(space) || line.startsWith(tab)) ? line.substring(1,line.length) : line\n\t\t});\n\t},\n\tdoExchange: function() {\n\t\t// Not yet working - DI\n\t\tvar sel1 = this.selectionRange;\n\t\tvar sel2 = this.previousSelection;\n\n\t\tvar d = 1;\t// direction current selection will move\n\t\tif (sel1[0] > sel2[0]) {var t = sel1; sel1 = sel2; sel2 = t; d = -1} // swap so sel1 is first\n\t\tif (sel1[1] >= sel2[0]) return; // ranges must not overlap\n\n\t\tvar fullText = (this.textStyle) ? this.getRichText() : this.textString;\n\t\tvar txt1 = fullText.substring(sel1[0], sel1[1]+1);\n\t\tvar txt2 = fullText.substring(sel2[0], sel2[1]+1);\n\t\tvar between = fullText.substring(sel1[1]+1, sel2[0]);\n\n\t\tvar d1 = (txt2.size() + between.size()); // amount to move sel1\n\t\tvar d2 = (txt1.size() + between.size()); // amount to move sel2\n\t\tvar newSel = [sel1[0]+d1, sel1[1]+d1];\n\t\tvar newPrev = [sel2[0]-d2, sel2[1]-d2];\n\t\tif (d < 0) { var t = newSel; newSel = newPrev;\t newPrev = t; }\n\t\tvar replacement = txt2.concat(between.concat(txt1));\n\t\tthis.setSelectionRange(sel1[0], sel2[1]+1);\t // select range including both selections\n\t\tthis.replaceSelectionWith(replacement);\t // replace by swapped text\n\t\tthis.setSelectionRange(newSel[0], newSel[1]+1);\n\t\tthis.previousSelection = newPrev;\n\t\tthis.undoSelectionRange = d>0 ? sel1 : sel2;\n\t},\n\taddOrRemoveBrackets: function(bracketIndex) {\n\t\t// Not yet working - DI \n\t\tvar left = this.locale.charSet.leftBrackets[bracketIndex];\n\t\tvar right = this.locale.charSet.rightBrackets[bracketIndex];\n\t\t\n\t\tif (bracketIndex == 0) { left = \"/*\"; right = \"*/\"; }\n\t\n\t\tvar i1 = this.selectionRange[0];\n\t\tvar i2 = this.selectionRange[1];\n\t\t\n\t\tif (i1 - left.length >= 0 && this.textString.substring(i1-left.length,i1) == left &&\n\t\t\ti2 + right.length < this.textString.length && this.textString.substring(i2+1,i2+right.length+1) == right) {\n\t\t\t// selection was already in brackets -- remove them\n\t\t\tvar before = this.textString.substring(0,i1-left.length);\n\t\t\tvar replacement = this.textString.substring(i1,i2+1);\n\t\t\tvar after = this.textString.substring(i2+right.length+1,this.textString.length);\n\t\t\tthis.setTextString(before.concat(replacement,after));\n\t\t\tthis.setSelectionRange(before.length,before.length+replacement.length); \n\t\t} else { // enclose selection in brackets\n\t\t\tvar before = this.textString.substring(0,i1);\n\t\t\tvar replacement = this.textString.substring(i1,i2+1);\n\t\t\tvar after = this.textString.substring(i2+1,this.textString.length); \n\t\t\tthis.setTextString(before.concat(left,replacement,right,after));\n\t\t\tthis.setSelectionRange(before.length+left.length,before.length+left.length+replacement.length); \n\t\t}\n\t},\n\taddOrRemoveComment: function() {\n\t\tvar commentRegex = /^(\\s*)(\\/\\/\\s*)(.*)/,\n\t\t\tspacesRegex = /^(\\s*)(.*)/,\n\t\t\tnoSelection = this.selectionString() == '';\n\n\t\tif (noSelection) this.selectCurrentLine();\n\n\t\tthis.modifySelectedLines(function(line) {\n\t\t\tvar commented = commentRegex.test(line);\n\t\t\treturn (commented) ?\n\t\t\t\tline.replace(commentRegex, '$1$3') :\n\t\t\t\tline.replace(spacesRegex, '$1// $2');\n\t\t});\n\t},\n\tmodifySelectedLines: function(modifyFunc) {\n\t\t// this function calls modifyFunc on each line that is selected\n\t\t// modifyFunc can somehow change the line\n\t\t// the selection grows/shrinks with the modifications\n\t\tvar lines = this.selectionString().split('\\n')\n\t\tfor (var i = 0; i < lines.length; i++) {\n\t\t\tlines[i] = modifyFunc(lines[i], i);\n\t\t}\n\t\tvar replacement = lines.join('\\n');\n\t\tthis.insertAtCursor(replacement, true, true);\n\t},\n},\n'keyboard event reaction', {\n\tonEnterPressed: function(evt) {\n\t\tif (this.isInputLine) {\n\t\t\tthis.doSave();\n\t\t} else {\n\t\t\tvar range = this.getSelectionRange(),\n\t\t\t\tendIdx = Math.max(range[0], range[1]);\n\t\t\t// when at end insert a br alement if none is there\n\t\t\tif (this.textString.length == endIdx) {\n\t\t\t\tvar chunk = this.getTextChunks().last();\n\t\t\t\tchunk.ensureEndsWithBr();\n\t\t\t}\n\n\t\t\tthis.insertAtCursor('\\n', false, true)\n\t\t}\n\t\tevt.stop();\n\t\treturn true;\n\t},\n\tonBackspacePressed: function(evt) {\n\t\tif (this.charsTyped.length > 0)\n\t\t\tthis.charsTyped = this.charsTyped.substring(0, this.charsTyped.length-1);\n\t\tthis.fixChunksDelayed();\n\t\treturn true;\n\t},\n\tonDelPressed: function(evt) {\n\t\t// evt.stop();\n\t\t// if (this.hasNullSelection()) {\n\t\t\t// var sel = this.getSelectionRange();\n\t\t\t// this.setSelectionRange(sel[0], sel[0]+1);\n\t\t// }\n// alert('del ' + this.selectionString())\n\t\t// this.insertAtCursor('', false, true)\n\t\t// this.removeChunksNotUsed();\n\t\t// return true;\n\n\t\tif (this.charsTyped.length > 0)\n\t\t\tthis.charsTyped = this.charsTyped.substring(0, this.charsTyped.length-1);\n\t\tthis.fixChunksDelayed();\n\t\treturn true;\n\t},\n\tonTabPressed: function(evt) {\n\t\tthis.insertAtCursor('\\t', false, true)\n\n// FIXME implement better tabs\n// var span = XHTMLNS.create('span');\n// span.style.backgroundColor = 'green';\n// span.style.width = '2ex';\n// span.style.display = 'inline-block';\n// span.textContent = '\\t';\t\t\t\t\t\t\t\t\n// this.insertElementAtCursor(elem, false, true);\n// var nodeAndIdx = this.getTextElementAndLocalIndexForGlobalIndex(this.getSelectionRange()[0]);\n// var replacement = nodeAndIdx[0].splitText(nodeAndIdx[1]);\n// replacement.parentNode.insertBefore(span, replacement)\n// var sel = this.domSelection();\n// sel.removeAllRanges();\n// var range = document.createRange()\n// range.setStartAfter(span)\n// range.setEndAfter(span)\n// sel.addRange(range);\n// document.execCommand('insertHTML', null, Exporter.stringify(elem))\n\n\t\tevt.stop();\n\t\treturn true;\n\t},\n\tonHomePressed: function(evt) { return true },\n\tonEndPressed: function(evt) { return true },\n\tonPageUpPressed: function(evt) { return true },\n\tonPageDownPressed: function(evt) { return true },\n},\n'mouse events', {\n\tonMouseDown: function($super, evt) {\n\t\t// if clicked in the text we want the default thing to happen, at least in HTML\n\t\t// but do not want other morphs to handle the event as well, so return true for was handled\n\n\t\tif (!evt.isLeftMouseButtonDown()) return $super(evt);\n\t\tif (evt.isCommandKey()) { // for halos\n\t\t\t$super(evt);\n\t\t\tevt.stop();\n\t\t\treturn false;\n\t\t}\n\n\t\tif (this.isFocused())\n\t\t\tthis.priorSelectionRange = this.getSelectionRange(); // save for onMouseUp\n\n\t\t$super(evt); \n\n\t\tif (!this.allowInput && !this.allowsInput) {\n\t\t\tevt.stop();\n\t\t\treturn false;\n\t\t}\n\n\t\t// to prevent accidental scrolling to the top of the text\n\t\t// if (!this.isFocused()) evt.stop();\n\n\t\t// we clicked in morph but not in the text element itself\n\t\t// if (!this.getTextBounds().containsPoint(this.localize(evt.getPosition()))) {\n\t\t\t// this.focus();\n\t\t\t// evt.stop();\n\t\t// }\n\n\t\treturn true;\n\t},\n\tonSelectStart: function($super, evt) {\n\t\t// Allow HTML selection\n\t\treturn true;\n\t},\n\tonMouseUp: function($super, evt) {\n\n\t\tvar a = this.getSelectionRange();\n\t\t// this happens when text has lost selection\n\t\tif (!a) return $super(evt);\n\n\t\tthis.charsTyped = '';\n\n\t\t// test if we have a null selection and same as before\n\t\tif (this.priorSelectionRange != null\n\t\t && a[0] == a[1] // null selection\n\t\t && this.priorSelectionRange[0] == a[0]\n\t\t && this.priorSelectionRange[1] == a[1]) {\n\t\t\t// It is a null selection, repeated in the same place --\n\t\t\t// select word or range\n\t\t\tif (a[0] == 0 || a[0] == this.textString.length) {\n\t\t\t\tthis.setSelectionRange(0, this.textString.length); \n\t\t\t} else {\n\t\t\t\tvar range = this.selectWord(this.textString, a[0]);\n\t\t\t\tthis.setSelectionRange(range[0], range[1]+1); \n\t\t\t}\n\t\t}\n\t\treturn $super(evt);\n\t},\n\n\n},\n'selection', {\n\tdomSelection: function() {\n\t\tvar sel = Global.getSelection(), node = sel.focusNode, textNode = this.renderContext().textNode;\n\t\twhile(node) {\n\t\t\tif (textNode === node) return sel;\n\t\t\tnode = node.parentNode;\n\t\t}\n\n\t\t// we have no focus? ...try again\n\t\tthis.focus();\n\t\tsel = Global.getSelection(), node = sel.focusNode;\n\t\twhile(node) {\n\t\t\tif (textNode === node) return sel;\n\t\t\tnode = node.parentNode;\n\t\t}\n\n\t\treturn null\n\t},\n\n\tselectionString: function() {\n\t\tvar sel = this.domSelection();\n\t\treturn sel ? sel.toString() : '';\n\t},\n\n\tinsertAtCursor: function(string, selectIt, overwriteSelection) {\n\t\tthis.insertElementAtCursor(NodeFactory.createText(String(string)), selectIt, overwriteSelection);\n\t},\n\n\tinsertElementAtCursor: function(element, selectIt, overwriteSelection) {\n\t\t// FIXME refactor!!!\n\t\tvar node = element,\n\t\t\tselRange = this.getSelectionRange(),\n\t\t\tsel = this.domSelection(),\n\t\t\trange = sel.getRangeAt(0);\n\n\t\tif (overwriteSelection) {\n\t\t\t// save info for 'More' command\n\t\t\tthis.charsReplaced = range.toString();\n\t\t\tthis.lastFindLoc = this.getSelectionRange()[0] + element.textContent.length;\n\t\t\trange.deleteContents();\n\t\t\tvar selPosAfterOverwrite = Math.min(selRange[0],selRange[1]);\n\t\t\tthis.setSelectionRange(selPosAfterOverwrite, selPosAfterOverwrite)\n\t\t} else {\n\t\t\t// insert new node after current selection\n\t\t\t// after current selection depends on selection direction\n\t\t\t// either focusNode or anchorNode\n\t\t\tif (selRange[0] < selRange[1])\n\t\t\t\trange.setStart(sel.focusNode, sel.focusOffset);\n\t\t\telse\n\t\t\t\trange.setStart(sel.anchorNode, sel.anchorOffset);\n\t\t}\n\t\trange.insertNode(node);\n\t\tsel.removeAllRanges();\n\n\t\trange = document.createRange()\n\t\tif (selectIt) {\n\t\t\trange.selectNode(node)\n\t\t} else { // no real selection but set cursor, FIXME use setCursor or something\n\t\t\trange.setStartAfter(node)\n\t\t\trange.setEndAfter(node)\n\t\t}\n\t\tsel.addRange(range);\n\n\t\t// string has changed, removed cached version\n\t\tthis.cachedTextString = null;\n\t},\n\tremoveTextSelection: function() {},\n\tgetSelectionOrLineString: function() {\n\t\tvar sel = this.domSelection(),\n\t\t\trange = sel.getRangeAt(0);\n\t\tif (range.collapsed)\n\t\t\tthis.selectCurrentLine();\n\t\treturn this.selectionString();\n\t},\n\tselectCurrentLine: function() {\n\t\tvar sel = this.domSelection();\n\t\tif (sel.anchorNode) {\n\t\t\tsel.modify('move', 'left', 'lineboundary');\n\t\t\tsel.modify('extend', 'right', 'lineboundary')\n\t\t}\n\t},\n\n\tsetSelectionRange: function(start, end) {\n\t\tvar sel = this.domSelection();\n\t\tif (sel) sel.removeAllRanges();\n\n\t\t// actually it should not be necessary to switch the values\n\t\t// bot somehow range expects smaller value in setStart....\n\t\tif (start > end) {\n\t\t\tvar temp = end;\n\t\t\tend = start;\n\t\t\tstart = temp;\n\t\t}\n\t\tvar startBoundaryPoint = this.getTextElementAndLocalIndexForGlobalIndex(start),\n\t\t\tendBoundaryPoint = this.getTextElementAndLocalIndexForGlobalIndex(end);\n\n\t\t// found nothing to select...\n\t\tif (startBoundaryPoint === undefined && endBoundaryPoint === undefined) return;\n\t\tif (startBoundaryPoint === undefined) startBoundaryPoint = endBoundaryPoint;\n\t\tif (endBoundaryPoint === undefined) endBoundaryPoint = startBoundaryPoint;\n\t\tvar range = document.createRange();\n// alert('selecting ' + startBoundaryPoint[0].textContent + '[' + startBoundaryPoint[1] + ']-'\n\t// + endBoundaryPoint[0].textContent + '[' + endBoundaryPoint[1] + ']')\n\t\trange.setStart(startBoundaryPoint[0], startBoundaryPoint[1])\n\t\trange.setEnd(endBoundaryPoint[0], endBoundaryPoint[1])\n\t\tif (!sel) sel = Global.getSelection();\n\t\tsel.addRange(range);\n\t},\n\n\tgetSelectionRange: function() {\n\n\t\t// FIXME this only works for textNodes that have the form\n\t\t//
or \n\t\tvar parent = this.renderContext().textNode;\n\t\tvar textNodeType = parent.TEXT_NODE;\n\t\tvar textNodes = [];\n\t\tfor (var i = 0; i < parent.childNodes.length; i++) {\n\t\t\tvar child = parent.childNodes[i];\n\t\t\tif (child.nodeType === textNodeType) {\n\t\t\t\ttextNodes.push(child)\n\t\t\t} else {\n\t\t\t\tfor (var j = 0; j < child.childNodes.length; j++) {\n\t\t\t\t\tvar childchild = child.childNodes[j];\n\t\t\t\t\tif (childchild.nodeType === textNodeType)\n\t\t\t\t\t\ttextNodes.push(childchild)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// --------\n\n\t\t// this function calculates how many characters are between the start of\n\t\t// the parent element and the node.\n\t\t// The node is expected to be a childNode of parent\n\t\tfunction nodeOffsetFrom(node, offset) {\n\t\t\tvar offset = 0;\n\t\t\tfor (var i = 0; i < textNodes.length; i++) {\n\t\t\t\tvar nodeBefore = textNodes[i];\n\t\t\t\t// careful, actually this must be bitmasked\n\t\t\t\tif (node.compareDocumentPosition(nodeBefore) == node.DOCUMENT_POSITION_PRECEDING) {\n\t\t\t\t\toffset += nodeBefore.textContent.length;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn offset;\n\t\t}\n\t\tvar sel = this.domSelection();\n\t\tif (!sel) return null;\n\t\t// anchor is the start node, focusNode is the end node of the selection\n\t\t// see https://developer.mozilla.org/en/DOM/Selection\n\n\t\t// there is a problem with the above algorithm when calling getSelectionRange\n\t\t// when the caret is at the end of the text. In this case anchorNode and focusNode\n\t\t// are not textNodes and nodeOffsetFrom() would not return anything meaningful\n\t\t// Since anchorNode.childNodes[anchorOffset] and focusNode.childNodes[focusOffset] \n\t\t// identify the node from/to selection was exist, use this node for calculation\n\t\t// In this case return the text length as indexes of the range\n\t\tvar anchorIsText = sel.anchorNode.nodeType == textNodeType;\n\t\tvar anchorNode = anchorIsText ? sel.anchorNode : sel.anchorNode.childNodes[sel.anchorOffset];\n\t\tvar anchorOffset = anchorIsText ? sel.anchorOffset : 0;\n\n\t\tvar focusIsText = sel.focusNode.nodeType == textNodeType;\n\t\tvar focusNode = focusIsText ? sel.focusNode : sel.focusNode.childNodes[sel.focusOffset];\n\t\tvar focusOffset = focusIsText ? sel.focusOffset : 0;\n\n\t\treturn [nodeOffsetFrom(anchorNode) + anchorOffset,\n\t\t\tnodeOffsetFrom(focusNode) + focusOffset]\n\t},\n\tselectAll: function() {\n\t\tif (this.textString.length > 0)\n\t\t\tthis.setSelectionRange(0, this.textString.length);\n\t\telse\n\t\t\tthis.focus();\n\t},\n\thasNullSelection: function() {\n\t\tvar range = this.getSelectionRange();\n\t\treturn range[0] === range[1]\n\t},\n\n\tsetNullSelectionAt: function(idx) { this.setSelectionRange(idx, idx) },\n\tgetSelectionBounds: function() {\n\t\tvar sel = this.domSelection();\n\t\tif (!sel) return new Rectangle(0,0,0,0);\n\t\tvar range = sel.getRangeAt(0);\n\t\tif (!range) return new Rectangle(0,0,0,0);\n\t\t// FIXME HTML specific\n\t\tvar domR = range.getBoundingClientRect();\n\t\tif (!domR) return new Rectangle(0,0,0,0);\n\t\tvar s = this.getScroll(),\n\t\t\tr = new Rectangle(domR.left+s[0], domR.top+s[1], domR.width, domR.height),\n\t\t\tworld = this.world(),\n\t\t\ttransformed = world ? world.transformToMorph(this).transformRectToRect(r):r;\n\t\treturn transformed;\n\t},\n selectWord: function(str, i1) { // Selection caret before char i1\n\t// Most of the logic here is devoted to selecting matching backets\n var rightBrackets = \"*)}]>'\\\"\";\n\tvar leftBrackets = \"*({[<'\\\"\";\n\tfunction isWhiteSpace(c) { return c === '\\t' || c === ' '; }\n\tfunction isAlpha(s) {\n\t\tvar regEx = /^[a-zA-Z0-9\\-]+$/;\n\t\treturn s.match(regEx);\n\t};\n\tfunction periodWithDigit(c, prev) {\n\t\t// return true iff c is a period and prev is a digit\n \tif (c != \".\") return false;\n \treturn \"0123456789\".indexOf(prev) >= 0;\n \t};\n\tvar i2 = i1 - 1;\n if (i1 > 0) { // look left for open backets\n if(str[i1-1] == \"\\n\" || str[i1-1] == \"\\r\") return this.findLine(str, i1, 1, str[i1-1]);\n\t var i = leftBrackets.indexOf(str[i1-1]);\n if (str[i1 - 1] == \"*\" && (i1-2 < 0 || str[i1-2] != \"/\")) \n i = -1; // spl check for /*\n if (i >= 0) {\n var i2 = this.matchBrackets(str, leftBrackets[i], rightBrackets[i], i1 - 1, 1);\n return [i1, i2 - 1]; \n } \n }\n if (i1 < str.length) { // look right for close brackets\n if(str[i1] == \"\\n\" || str[i1] == \"\\r\") return this.findLine(str, i1, -1, str[i1]);\n var i = rightBrackets.indexOf(str[i1]);\n if (str[i1]== \"*\" && (i1+1 >= str.length || str[i1+1] != \"/\")) \n i = -1; // spl check for */\n if (i >= 0) {\n i1 = this.matchBrackets(str, rightBrackets[i], leftBrackets[i],i1,-1);\n return [i1+1, i2]; \n } \n }\n\n\t\t// is a '//' left of me?\n\t\tif (str[i1-1] === '/' && str[i1-2] === '/') {\n\t\t\twhile (i2+1= 0 && isWhiteSpace(str[myI1-1])) {\n\t\t\tmyI1 --;\n\t\t}\n\t\twhile (myI2 < str.length && isWhiteSpace(str[myI2+1])) {\n\t\t myI2 ++;\n\t\t}\n\t\tif (myI2-myI1 >= 1) return [myI1, myI2];\n\t\n var prev = (i1= 0 && (isAlpha(str[i1-1]) || periodWithDigit(str[i1-1], prev))) {\n\t prev = str[i1-1];\n\t\t i1 --;\n\t }\n\t\twhile (i2+1 < str.length && (isAlpha(str[i2+1]) || periodWithDigit(str[i2+1], prev))) {\n\t prev = str[i2+1];\n\t\t i2 ++;\n\t\t}\n return [i1, i2]; \n },\n matchBrackets: function(str, chin, chout, start, dir) { \n var i = start;\n var depth = 1;\n while ((dir < 0) ? i - 1 >= 0 : i + 1 < str.length ) {\n i += dir;\n if (str[i] == chin && chin != chout) depth++;\n if (str[i] == chout) depth--;\n if (depth == 0) return i; \n }\n return i; \n },\n\tfindLine: function(str, start, dir, endChar) { // start points to a CR or LF (== endChar)\n\t\tvar i = start;\n\t\twhile ((dir < 0) ? i - 1 >= 0 : i + 1 < str.length ) {\n\t\t\ti += dir;\n\t\t\tif (str[i] == endChar) return dir>0 ? [start, i] : [i+1, start];\n\t\t}\n\t\treturn dir>0 ? [start+1, str.length-1] : [0, start];\n\t},\n\n},\n'scrolling', {\n\tgetScrollableNode: function() {\n\t\t// for ScrollableTrait\n\t\treturn this.renderContext().textNode\n\t},\n\tscrollSelectionIntoView: function() {\n\t\tthis.scrollRectIntoView(this.getSelectionBounds(), true)\n\t},\n},\n'evaluation', {\n\tevalSelection: function(printIt) {\n\t\tvar str = this.getSelectionOrLineString(),\n\t\t\tresult = this.tryBoundEval(str);\n\t\tif (printIt) this.insertAtCursor(String(result), true);\n\t\treturn result;\n\t},\n\tboundEval: function (str) {\t \n\t\t// Evaluate the string argument in a context in which \"this\" may be supplied by the modelPlug\n\t\tvar ctx = this.getDoitContext() || this,\n\t\t\tinteractiveEval = function(text) { return eval(text) };\n\t\treturn interactiveEval.call(ctx, str);\n\t},\n\ttryBoundEval: function(str) {\n\t\ttry { return this.boundEval(str) } catch(e) { alert(e) }\n\t},\n\n\tgetDoitContext: function() { return this.doitContext },\n},\n'focus', {\n\tfocus: function() {\n\t\tif (!this.isFocused()) this.renderContext().textNode.focus();\n\t},\n},\n'testing', {\n\thasUnsavedChanges: function() {\n\t\treturn false;\n\t\t// return this.savedTextString !== this.textString;\n\t},\n\tisFocused: function() { return lively.morphic.Text.activeInstance() === this },\n\n},\n'searching', {\n\tsearchForFind: function(str, start, noWrap) {\n\t\t// if (this.world()) this.focus();\n\t\tvar i1 = this.textString.indexOf(str, start);\n\t\tif (i1 < 0 && !noWrap) i1 = this.textString.indexOf(str, 0); // wrap\n\t\tif (i1 >= 0) this.setSelectionRange(i1, i1+str.length);\n\t\t\telse this.setNullSelectionAt(0);\n\t\tthis.scrollSelectionIntoView();\n\t\tthis.lastSearchString = str;\n\t\tthis.lastFindLoc = i1;\n\t},\t\n},\n'debugging', {\n\tshowError: function(e, offset) {\n\t\toffset = offset || 0;\n\t\tvar msg = \"\" + e + \"\\n\" + \n\t\t\t\"Line: \" + e.line + \"\\n\" +\n\t\t\t(e.sourceURL ? (\"URL: \" + (new URL(e.sourceURL).filename()) + \"\\n\") : \"\");\n\t\tif (e.stack) {\n\t\t\t// make the stack fit into status window\n\t\t\tmsg += e.stack.replace(new RegExp(URL.codeBase.toString(), \"g\"),\"\");\n\t\t}\n\n\t\tvar world = lively.morphic.World.current();\n\t\tif (!world) {\n\t\t\tconsole.log(\"Error in \" +this.id() + \" bound eval: \\n\" + msg)\n\t\t\treturn\n\t\t};\n\n\t\tworld.setStatusMessage(msg, Color.red, 15,\n\t\t\tfunction() { require('lively.Helper').toRun(function() {\n\t\t\t\tworld.showErrorDialog(e)\n\t\t\t }) },\n\t\t\t{fontSize: 12, fillOpacity: 1});\n\n\t\tif (e.expressionEndOffset) {\n\t\t\tthis.setSelectionRange(e.expressionBeginOffset + offset, e.expressionEndOffset + offset);\n\t\t} else if (e.line) {\n\t\t\tvar lineOffset = this.lineNumberForIndex(offset);\n\t\t\t// console.log(\"line: \" + e.line + \" offset: \" + lineOffset)\n\t\t\tvar line = this.lines[e.line + lineOffset - 1]\n\t\t\tif (line && line.startIndex) {\n\t\t\t\t// console.log(\" set to \" + line.startIndex)\n\t\t\t\tthis.setSelectionRange(line.startIndex, line.getStopIndex());\n\t\t\t}\n\t\t}\n\t\tthis.setStatusMessage(\"\" + e, Color.red);\n\t},\n\ttextNodeString: function() {\n\t\tvar textNode = this.renderContext().textNode;\n\t\tif (!textNode) return 'textNode not yet accessible';\n\t\tvar isolatedTextNode = textNode.cloneNode(false/*no children*/)\n\t\tvar string = Exporter.stringify(isolatedTextNode);\n\t\tvar midIdx = string.indexOf('');\n\t\tvar childrenString = $A(textNode.childNodes).collect(function(ea) { return ' ' + Exporter.stringify(ea) }).join('\\n');\n\t\tstring = string.slice(0, midIdx) + '\\n' + childrenString + '\\n' + string.slice(midIdx)\n\t\treturn string;\nthis. textNodeString()\n\t},\n\n},\n'experimentation', {\n\tsetWhiteSpaceHandling: function(modeString) {\n\t\treturn this.morphicSetter('WhiteSpaceHandling', modeString);\n\t},\n\tgetWhiteSpaceHandling: function(modeString) {\n\t\treturn this.morphicGetter('WhiteSpaceHandling') || 'pre-wrap';\n\t},\n\tgetTextElements: function() {\n\t\t// returns js objects for subnodes of this.renderContext().textNode\n\t\t// they have the following properties:\n\t\t// node: the text node,\n\t\t// startIndex: the (global)startIndex of the node in the whole text,\n\t\t// endIndex: global end index\n\t\t// method toString for debugging\n\n\t\tvar textNodeType = this.renderContext().textNode.TEXT_NODE;\n\t\tfunction isTextNode(node) { return node && node.nodeType == textNodeType }\n\t\tfunction flattenTextNodes(node) {\n\t\t\tif (!node) return [];\n\t\t\tif (isTextNode(node)) return [node];\n\t\t\tvar result = [];\n\t\t\tfor (var i = 0; i < node.childNodes.length; i++)\n\t\t\t\tresult = result.concat(flattenTextNodes(node.childNodes[i]))\n\t\t\treturn result;\n\t\t}\n\n\n//var endlessProtection = 0;\n//endlessProtection++\n//if (endlessProtection > 10000) throw new Error('Endless loop in getTextElements!')\n\n\t\tvar nodes = flattenTextNodes(this.renderContext().textNode),\n\t\t\tresult = [],\n\t\t\tindex = 0;\n\n\t\tfor (var i = 0; i < nodes.length; i++) {\n\t\t\tvar part = nodes[i];\n\t\t\tif (!part.textContent) continue;\n\t\t\tvar start = index,\n\t\t\t\tlength = part.textContent.length,\n\t\t\t\tend = start + length;\n\t\t\tindex = end;\n\t\t\tresult.push({\n\t\t\t\tnode: part,\n\t\t\t\tstartIndex: start,\n\t\t\t\tendIndex: end,\n\t\t\t\ttoString: function() {\n\t\t\t\t\treturn '<' + this.node.textContent.replace(/\\n/, '\\\\n') + '>: ' + this.startIndex + '-' + this.endIndex;\n\t\t\t\t}})\n\t\t}\n\t\treturn result;\n\t},\n\n\tgetTextElementAndLocalIndexForGlobalIndex: function(idx) {\n\t\t// returns a subnode and the index in the subnode that responds to the global index\n\t\t// of the whole text\n\t\t// the index used for lookup is sanitized\n\t\t// example: subnodes: foobar, idx: 5\n\t\t// would return [bar, 2] (local idx between a and r)\n\t\tidx = Math.max(0, Math.min(idx, this.textString.length));\n\t\tvar textParts = this.getTextElements();\n\t\tfor (var i = 0; i < textParts.length; i++) {\n\t\t\tif (idx >= textParts[i]. startIndex && idx <= textParts[i].endIndex) {\n\t\t\t\tvar node = textParts[i].node,\n\t\t\t\t\tlocalIdx = idx - textParts[i].startIndex;\n\t\t\t\treturn [node, localIdx]\n\t\t\t}\n\t\t}\n\t\treturn [this.renderContext().textNode, 0];\n\t},\n\tsetRichText: function(richText) {\n\t\t// FIXME implement\n\t\tthis.setTextString(richText.string || 'ERROR: setRichText did not work!');\n\n\t\talert('setRichText not yet implemented'); return richText.string;\n\t\tthis.textString = richText.string;\n\t\tthis.textStyle = richText.style;\n\t\trichText.applyToMorph(this);\n\t\treturn richText;\n\t},\n\tgetTextStyle: function() {\n\t\talert('getTextStyle not yet implemented'); return;\n\t\t// if (!this.textStyle)\n\t\t\t// this.textStyle = new lively.RunArray([this.textString.length], [new lively.TextEmphasis({})]);\n\t\t// return this.textStyle;\n\t},\n\tgetRange: function(from, to) {\n\t\tvar range = document.createRange(),\n\t\t\tstartNodeAndIdx = this.getTextElementAndLocalIndexForGlobalIndex(from),\n\t\t\tendNodeAndIdx = this.getTextElementAndLocalIndexForGlobalIndex(to);\n\t\trange.setStart(startNodeAndIdx[0], startNodeAndIdx[1]);\n\t\trange.setEnd(endNodeAndIdx[0], endNodeAndIdx[1]);\n\t\treturn range\n\t},\n},\n'text chunks', {\n\tcreateChunk: function() {\n\t\tvar c = new lively.morphic.TextChunk();\n\t\tc.addTo(this);\n\t\treturn c;\n\t},\n\tgetTextChunks: function() {\n\t\tif (!this.textChunks || this.textChunks.length === 0)\n\t\t\tthis.textChunks = [this.createChunk()];\n\t\treturn this.textChunks;\n\t},\n\tfirstTextChunk: function() {\n\t\treturn this.getTextChunks()[0];\n\t},\n\tremoveTextChunks: function() {\n\t\tif (!this.textChunks) return;\n\t\twhile (this.textChunks.length > 0) {\n\t\t\tvar chunk = this.textChunks.shift();\n\t\t\tchunk.remove();\n\t\t}\n\t},\n\tgetChunkAndLocalIndex: function(idx, useChunkStart) {\n\t\t// when useChunkStart = false and a chunk ends at idx then we return that\n\t\t// when useChunkStart = true then we return the next chunk if there is one\n\t\t// if chunk ranges are [[0, 1], [1, 3], [3, 6]]\n\t\t// useChunkStart == false, idx == 1 returns [chunk[0],1]\n\t\t// useChunkStart == false, idx == 2 returns [chunk[1],1]\n\t\t// useChunkStart == true, idx == 1 returns [chunk[1],0]\n\t\tvar offset = 0, chunks = this.getTextChunks();\n\t\tfor (var i = 0; i < chunks.length; i++) {\n\t\t\tvar nextOffset = offset + chunks[i].textString.length;\n\t\t\tif (!useChunkStart && idx <= nextOffset) return [chunks[i], idx-offset];\n\t\t\tif (useChunkStart && idx < nextOffset) return [chunks[i], idx-offset];\n\t\t\toffset = nextOffset;\n\t\t}\n\t},\n\tsliceTextChunks: function(from, to) {\n\t\t// sanitize indexes\n\t\tvar maxLength = this.textString.length,\n\t\t\tfromSafe = Math.min(from, to),\n\t\t\ttoSafe = Math.max(from, to);\n\t\tfromSafe = Math.max(0, Math.min(maxLength, fromSafe));\n\t\ttoSafe = Math.max(0, Math.min(maxLength, toSafe));\n\n\t\t// split the chunks and retrieve chunks inbetween from-to\n\t\tvar start = this.getChunkAndLocalIndex(fromSafe);\nif (!start) return [];\n\t\tvar startChunk = start[0].splitAfter(start[1]);\n\n\t\tvar end = this.getChunkAndLocalIndex(toSafe);\nif (!end) return [];\n\t\tvar endChunk = end[0].splitBefore(end[1]);\n\n\t\tvar chunks = this.getTextChunks(),\n\t\t\tstartIdx = chunks.indexOf(startChunk),\n\t\t\tendIdx = chunks.indexOf(endChunk);\n\n\t\treturn chunks.slice(Math.min(startIdx, endIdx),endIdx+1);\n\t},\n\n\tcoalesceChunks: function () {\n\t\tvar chunk = this.firstTextChunk();\n\t\twhile (chunk)\n\t\t\tchunk = chunk.joinWithNextIfEqualStyle() ? chunk : chunk.next();\n\t},\n\tremoveChunksNotUsed: function() {\n\t\t// garbage collect unused chunks, e.g. when the user has selected and removed\n\t\t// a part of the text that did cross chunk bounds\n\t\tvar oldChunks = this.getTextChunks(), newChunks = [];\n\t\tfor (var i = 0; i < oldChunks.length; i++)\n\t\t\tif (oldChunks[i].chunkNode && oldChunks[i].chunkNode.parentNode)\n\t\t\t\tnewChunks.push(oldChunks[i])\n\t\treturn this.textChunks = newChunks;\n\t},\n\tremoveNonChunkNodes: function(chunks) {\n\t\tfor (var i = 0; i < chunks.length; i++)\n\t\t\tchunks[i].removeNonChunkNodes()\n\t},\n\n\tgetChunkRanges: function() {\n\t\t// only used for debugging\n\t\tvar offset = 0;\n\t\treturn this.textChunks.collect(function(chunk) {\n\t\t\treturn [offset, offset += chunk.textString.length];\n\t\t})\n\t},\n\tfixTextBeforeAndAfterChunks: function(chunks) {\n\t\t// this removes the focus and selection...\n\t\tchunks = this.getTextChunks();\n\t\tchunks[0].ingestAllPrecedingElements();\n\t\tfor (var i = 0; i < chunks.length; i++)\n\t\t\tchunks[i].ingestAllFollowingElements(chunks[i+1]);\n\t},\n\tfixChunks: function() {\n\t\tvar selRange = this.isFocused() && this.getSelectionRange();\n\n\t\tvar chunks = this.removeChunksNotUsed();\n\n\t\t// this.removeNonChunkNodes(chunks)\n\t\tthis.fixTextBeforeAndAfterChunks(chunks);\n\t\tthis.removeNonChunkNodes(chunks);\n\n\t\tselRange && this.setSelectionRange(selRange[0], selRange[1]);\n\t},\n\tfixChunksDelayed: function() {\n\t\tthis.fixChunks.bind(this).delay(0);\n\t},\n\n},\n'rich text', {\n\temphasize: function(styleSpec, from, to) {\n\t\tvar chunks = this.sliceTextChunks(from, to);\n\t\tfor (var i = 0; i < chunks.length; i++)\n\t\t\tchunks[i].styleText(styleSpec);\n\t\tthis.coalesceChunks();\n\t},\n\tchangeEmphasis: function(from, to, callback) {\n\t\t// callback is called with the first emphasis that is found in the range from-to\n\t\t// callback should return a new emphasis\n\t\tvar emph = this.getEmphasisAt(from);\n\t\tif (!emph) return;\n\t\tcallback(emph, function doEmph(newEmph) {\ndebugger\n\t\t\tthis.emphasize(newEmph, from, to);\n\t\t\tthis.setSelectionRange(from, to);\n\t\t}.bind(this));\n\t},\n\ttoggleItalics: function(from, to) {\n\t\tthis.changeEmphasis(from, to, function(emph, doEmph) {\n\t\t\tdoEmph({italics: emph.getItalics() === 'italic' ? 'normal' : 'italic'})\n\t\t})\n\t},\n\n\n\ttoggleBoldness: function(from, to) {\n\t\tthis.changeEmphasis(from, to, function(emph, doEmph) {\n\t\t\tdoEmph({fontWeight: emph.getFontWeight() === 'bold' ? 'normal' : 'bold'})\n\t\t})\n\t},\n\ttoggleUnderline: function(from, to) {\n\t\tthis.changeEmphasis(from, to, function(emph, doEmph) {\n\t\t\tdoEmph({textDecoration: emph.getTextDecoration() === 'underline' ? 'normal' : 'underline'})\n\t\t})\n\t},\n\n\ttoggleLink: function(from, to) {\n\t\tvar world = this.world()\n\t\tthis.changeEmphasis(from, to, function(emph, doEmph) {\n\t\t\tworld.prompt('Enter link URL', function(input) {\n\t\t\t\tif (input == '') input = null;\n\t\t\t\tdoEmph({uri: input})\n\t\t\t}, emph.uri);\n\t\t})\n\t},\n\ttoggleDoit: function(from, to) {\n\t\tvar world = this.world(), text = this;\n\t\tthis.changeEmphasis(from, to, function(emph, doEmph) {\n\t\t\tworld.prompt('Enter doit code', function(input) {\n\t\t\t\tif (input == '') input = null;\n\t\t\t\tdoEmph({doit: input ? {code: input, context: text} : null})\n\t\t\t}, emph.doit && emph.doit.code);\n\t\t})\n\t},\n\ttoggleFont: function(from, to) {\n\t\tvar world = this.world(), text = this;\n\t\tthis.changeEmphasis(from, to, function(emph, doEmph) {\n\t\t\tvar fontChooser = lively.PartsBin.getPart('FontChooserDialog', 'PartsBin/NewWorld');\n\t\t\tfontChooser.listAvailableFonts();\n\t\t\tworld.addMorph(fontChooser);\n\t\t\tfontChooser.align(fontChooser.bounds().center(), world.firstHand().getPosition());\n\t\t\tconnect(fontChooser, 'selectedFont', {doEmph: doEmph}, 'doEmph', {\n\t\t\t\tconverter: function(font) { return {fontFamily: font} }\n\t\t\t})\n\t\t})\n\t},\n\n\n\n\n\ttoggleEmphasisForSelection: function(emphAttributeType) {\n\t\t// emphAttributeType can be Boldness, ...\n\t\ttry {\n\t\t\tvar selRange = this.getSelectionRange(),\n\t\t\t\temphRange = this.convertSelectionRangeForEmphasis(selRange);\n\t\t\tthis['toggle' + emphAttributeType](emphRange[0], emphRange[1]);\n\t\t\t// this.setSelectionRange(selRange[0], selRange[1]);\n\t\t} catch(e) {\n\t\t\talert('Error when doing toggle' + emphAttributeType + ': ' + e);\n\t\t\tdebugger;\n\t\t}\t\t\n\t},\n\temphasizeSelection: function(emphSpec) {\n\t\t// emphAttributeType can be Boldness, ...\n\t\ttry {\n\t\t\tvar selRange = this.getSelectionRange(),\n\t\t\t\temphRange = this.convertSelectionRangeForEmphasis(selRange);\n\t\t\tthis.emphasize(emphSpec, emphRange[0], emphRange[1]);\n\t\t\tthis.setSelectionRange(selRange[0], selRange[1]);\n\t\t} catch(e) {\n\t\t\talert('Error when doing emphasizing' + JSON.stringify(emphSpec) + ': ' + e);\n\t\t\tdebugger;\n\t\t}\t\t\n\t},\n\n\n\tconvertSelectionRangeForEmphasis: function(selRange) {\n\t\tvar from = selRange[0], to = selRange[1];\n\t\treturn from > to ? [to, from] : [from, to];\n\t},\n\tincreaseFontSizeOfSelection: function() {\n\t\tthis.setFontSizeOfSelectionDo(function(oldSize) { return oldSize + 1});\n\t},\n\tdecreaseFontSizeOfSelection: function() {\n\t\tthis.setFontSizeOfSelectionDo(function(oldSize) { return oldSize - 1});\n\t},\n\n\tsetFontSizeOfSelectionDo: function(callback) {\n\t\tvar range = this.getSelectionRange(),\n\t\t\tfrom = range[0], to = range[1],\n\t\t\tfontSize = this.getFontSize();\n\t\tthis.changeEmphasis(from, to, function(emph, doEmph) {\n\t\t\tdoEmph({fontSize: callback((emph.getFontSize() || fontSize))})\n\t\t})\n\t},\n\n\n\tgetEmphasisAt: function(idx) {\n\t\tvar chunkAndIdx = this.getChunkAndLocalIndex(idx, true);\n\t\treturn chunkAndIdx && chunkAndIdx[0].style;\n\t},\n\n},\n'status messages', {\n\tsetStatusMessage: function(msg, color, delay) {\n\t\tconsole.log(\"status: \" + msg)\n\t\tif (!this._statusMorph) {\n\t\t\tthis._statusMorph = new lively.morphic.Text(pt(300,30).extentAsRectangle());\n\t\t\tthis._statusMorph.applyStyle({borderWidth: 0, strokeOpacity: 0, fill: Color.gray, fontSize: 16, fillOpacity: 1})\n\t\t\tthis._statusMorph.isEpiMorph = true;\n\t\t}\n\t\tvar statusMorph = this._statusMorph;\n\t\tstatusMorph.textString = msg;\n\t\tthis.world().addMorph(statusMorph);\n\t\tstatusMorph.setTextColor(color || Color.black);\n\t\tstatusMorph.ignoreEvents();\n\t\t// FIXME getSelectionBounds does not work yet when there is a null selection\n\t\tif (false && this.isFocused()) {\n\t\t\tvar bounds = this.getSelectionBounds(),\n\t\t\t\tpos = bounds ? bounds.bottomLeft() : pt(0, 20);\n\t\t\tstatusMorph.setPosition(this.worldPoint(pos));\n\t\t} else {\n\t\t\tstatusMorph.centerAt(this.worldPoint(this.innerBounds().center()));\n\t\t};\n\t\t(function() { statusMorph.remove() }).delay(delay || 4);\n\t},\n});\nObject.extend(lively.morphic.Text, {\n\tactiveInstance: function() {\n\t\t// returns the text that currently has a focus\n\t\t// set in onFocus and onBlur\n\t\treturn this.prototype.activeInstance;\n\t},\n});\nObject.subclass('lively.morphic.Text.ProtocolLister',\n'initializing', {\n\tinitialize: function(textMorph) {\n\t\tthis.textMorph = textMorph;\n\t},\n},\n'interface', {\n\tevalSelectionAndOpenListForProtocol: function() {\n\t\tvar obj = this.evalCurrentSelection(this.textMorph);\n\t\tif (!obj) return;\n\n\t\tvar items = this.getListForProtocolOf(obj);\n\t\tlively.morphic.Menu.openAtHand(String(obj), items);\n\t},\n\n},\n'accessing', {\n\n\tgetPrototypeChainOf: function(obj) {\n\t\tvar result = [obj], proto = Class.getPrototype(obj);\n\t\twhile(proto) { result.push(proto); proto = Class.getSuperPrototype(proto) }\n\t\treturn result;\n\t},\n\n\tfuncSignaturesOf: function(obj) {\n\t\tvar funcs = obj && obj.nodeType ? Functions.all(obj) : Functions.own(obj)\n\t\tfuncs = funcs.select(function(name) { return !Class.isClass(obj[name]) });\n\t\treturn funcs.collect(function(name) {\n\t\t\tvar source = obj[name].toString(),\n\t\t\t\tmatch = source.match(/function\\s*[a-zA-Z0-9_$]*\\s*\\(([^\\)]*)\\)/),\n\t\t\t\tparams = (match && match[1]) || '';\n\t\t\treturn name + '(' + params + ')';\n\t\t}).sort()\n\t},\n\n\tgetListForProtocolOf: function(obj) {\n\t\tvar items = this.getPrototypeChainOf(obj).collect(function(proto) {\n\t\t\treturn this.menuItemForProto(obj, proto);\n\t\t}, this).select(function(ea) { return ea != undefined });\n\t\treturn items;\n\t},\n\n\tmenuItemForProto: function(originalObject, proto) {\n\t\tvar subItems = this.funcSignaturesOf(proto).collect(function(signa) {\n\t\t\treturn this.createSubMenuItemFromSignature(signa);\n\t\t}, this);\n\t\tif (subItems.length == 0) return null;\n\t\tvar name = (originalObject === proto) ? originalObject.toString().truncate(60) :\n\t\t\tproto.constructor.type || proto.constructor.name || '';\n\t\treturn [name, subItems];\n\t},\n\tcreateSubMenuItemFromSignature: function(signature) {\n\t\tvar textMorph = this.textMorph,\n\t\t\trange = textMorph && textMorph.getSelectionRange();\n\t\treturn [signature, function() {\n\t\t\t// FIXME not sure if this has to be delayed\n\t\t\t(function() {\n\t\t\t\ttextMorph.focus();\n\t\t\t\trange && textMorph.setSelectionRange(range[0], range[1]);\n\t\t\t\ttextMorph.insertAtCursor(signature, true)\n\t\t\t}).delay(0)\n\t\t}]\n\t},\n\n\n\tevalCurrentSelection: function(textMorph) {\n\t\tvar selection = Strings.removeSurroundingWhitespaces(textMorph.getSelectionOrLineString());\n\t\tif (selection.endsWith('.'))\n\t\t\tselection = selection.slice(0, selection.length-1);\n\t\treturn textMorph.tryBoundEval(selection);\n\t},\n\n});\n\nObject.subclass('lively.morphic.TextChunk',\n'settings', {\n\tdoNotSerialize: ['chunkNode'],\n},\n'initializing', {\n\tinitialize: function(str, style) {\n\t\tif (str) this.textString = str;\n\t\tthis.style = style || new lively.morphic.TextEmphasis();\n\t},\n},\n'accessing', {\n\tget textString() {\n\t\treturn this.getChunkNode().textContent;\n\t},\n\tset textString(string) {\n\t\treturn this.getChunkNode().textContent = string;\n\t},\n\tgetChunkNode: function() {\n\t\tif (!this.chunkNode)\n\t\t\tthis.chunkNode = XHTMLNS.create('span');\n\t\treturn this.chunkNode;\n\t},\n\tnext: function() {\n\t\tvar chunks = this.morph.getTextChunks(), chunkIdx = chunks.indexOf(this);\n\t\treturn chunks[chunkIdx+1];\n\t},\n\tprev: function() {\n\t\tvar chunks = this.morph.getTextChunks(), chunkIdx = chunks.indexOf(this);\n\t\treturn chunks[chunkIdx-1];\n\t},\n},\n'adding', {\n\taddTo: function(textMorph, optChunkAfter) {\n\t\tthis.morph = textMorph;\n\t\tvar textNode = textMorph.renderContext().textNode,\n\t\t\tchunkNode = this.getChunkNode();\n\t\t\totherChunkNode = optChunkAfter && optChunkAfter.getChunkNode();\n\t\tif (!textNode) {\n\t\t\t// alert('Cannot add text chunk ' + this + ' to ' + textMorph + ' because no textNode is present');\n\t\t\treturn;\n\t\t}\n\t\tif (chunkNode.parentNode) this.remove();\n\t\tif (otherChunkNode && otherChunkNode.parentNode === textNode)\n\t\t\ttextNode.insertBefore(chunkNode, otherChunkNode);\n\t\telse textNode.appendChild(chunkNode);\n\t\tthis.styleText();\n\t},\n\n},\n'removing', {\n\tremove: function() {\n\t\tvar n = this.getChunkNode();\n\t\tn.parentNode && n.parentNode.removeChild(n);\n\t},\n},\n'splitting', {\n\tsplitAfter: function(localIdx) { return this.split(localIdx, true) },\n\tsplitBefore: function(localIdx) { return this.split(localIdx, false) },\n\tsplit: function(localIdx, returnRight) {\n\t\t// remove text from localIdx to textString.length\n\t\t// let morph add new chunk\n\t\t// if returnRight == true return the chunk after localIdx, otherwise before\n\t\tvar str = this.textString,\n\t\t\tmyString = str.substring(0, localIdx),\n\t\t\tnewString = str.substring(localIdx);\n\n\t\t// corner cases: if we are already at the end of the chunk and want to have\n\t\t// the right of the split then return the next chunk if it exists\n\t\t// otherwise split the existing into an empty chunk\n\t\t// When returning left localIdx chunk do the same\n\t\tif (returnRight && newString.length === 0) {\n\t\t\tvar next = this.next();\n\t\t\tif (next) return next;\n\t\t}\n\t\tif (!returnRight && myString.length === 0) {\n\t\t\tvar prev = this.prev();\n\t\t\tif (prev) return prev;\n\t\t};\n\n\t\t// We dont care we want to have the right so use this as right and dont split\n\t\tif (returnRight && myString.length === 0)\n\t\t\treturn this;\n\t\t// same thing\n\t\tif (!returnRight && newString.length === 0)\n\t\t\treturn this;\n\n\t\tthis.textString = myString;\n\t\tvar newChunk = this.createForSplit(newString),\n\t\t\tchunks = this.morph.getTextChunks(),\n\t\t\tchunkIdx = chunks.indexOf(this),\n\t\t\tnext = chunks[chunkIdx+1];\n\n\t\t// add new chunk in chunk collection of morph\n\t\tchunks.pushAt(newChunk, chunkIdx+1);\n\t\tnewChunk.addTo(this.morph, next);\n\n\t\treturn returnRight ? newChunk : this;\n\t},\n\tcreateForSplit: function(str) { return new this.constructor(str, this.style.clone()) },\n\n},\n'joining', {\n\tjoinWithNext: function() {\n\t\tvar chunks = this.morph.getTextChunks();\n\t\tvar chunkIdx = chunks.indexOf(this);\n\t\tvar next = chunks[chunkIdx+1];\n\t\tif (!next) return false;\n\t\tnext.remove();\n\t\tchunks.removeAt(chunkIdx+1);\n\t\tthis.textString += next.textString;\n\t\treturn true;\n\t},\n\tjoinWithNextIfEqualStyle: function() {\n\t\tvar next = this.next();\n\t\tif (next && this.style.equals(next.style))\n\t\t\treturn this.joinWithNext();\n\t},\n\n},\n'styling', {\n\tstyleText: function(styleSpec) {\n\t\tthis.normalize();\n\t\tif (styleSpec) this.style.add(styleSpec);\n\t\tthis.style.applyToHTML(this.getChunkNode());\n\t},\n},\n'subnodes', {\n\tnormalize: function() {\n\t\tthis.getChunkNode().normalize();\n\t},\n\tingestAllFollowingElements: function(nextChunk) {\n\t\tvar ownChunkNode = this.getChunkNode(),\n\t\t\tnextChunkNode = nextChunk && nextChunk.getChunkNode(),\n\t\t\tcontent = '';\n\t\twhile (true) {\n\t\t\tvar nextNode = ownChunkNode.nextSibling;\n\t\t\tif (!nextNode || nextNode === nextChunkNode) break;\n\t\t\tcontent += nextNode.textContent;\n\t\t\tif (nextNode.parentNode) nextNode.parentNode.removeChild(nextNode);\n\t\t}\n\t\tif (content) this.textString += content;\n\t},\n\tingestAllPrecedingElements: function(prevChunk/*FIXME not used*/) {\n\t\tvar ownChunkNode = this.getChunkNode(),\n\t\t\tprevChunkNode = prevChunk && prevChunk.getChunkNode(),\n\t\t\tcontent = '';\n\n\t\twhile (true) {\n\t\t\tvar prevNode = ownChunkNode.previousSibling;\n\t\t\tif (!prevNode || prevNode === prevChunkNode) break;\n\t\t\tcontent = prevNode.textContent + content;\n\t\t\tif (prevNode.parentNode) prevNode.parentNode.removeChild(prevNode);\n\t\t}\n\t\tif (content) this.textString = content + this.textString;\n\t},\n\tensureEndsWithBr: function() {\n\t\tvar chunkNode = this.getChunkNode();\n\t\tvar lastBrFound = false;\n\t\tfor (var i = 0; i < chunkNode.childNodes.length; i++) {\n\t\t\tvar node = chunkNode.childNodes[i];\n\t\t\tif (node.tagName === 'br') { lastBrFound = true; continue };\n\t\t\tif (node.textContent.length > 0) lastBrFound = false;\n\t\t}\n\t\tif (lastBrFound) return;\n\t\tchunkNode.appendChild(XHTMLNS.create('br'));\n\t},\n\tremoveNonChunkNodes: function() {\n\t\tvar node = this.getChunkNode(),\n\t\t\tchildNode = node.firstChild;\n\t\twhile(childNode) {\n\t\t\tvar next = childNode.nextSibling\n\t\t\tif (!NodeFactory.isTextNode(childNode)) {\n\t\t\t\tnode.insertBefore(NodeFactory.createText(childNode.textContent), next);\n\t\t\t\tnode.removeChild(childNode);\n\t\t\t}\n\t\t\tchildNode = next;\n\t\t}\n\t},\n\n},\n'debugging', {\n\ttoString: function() { return 'TextChunk(' + this.textString.truncate(10) + ',' + this.style + ')' },\n});\n\nObject.subclass('lively.morphic.TextEmphasis',\n'initializing', {\n\tinitialize: function(spec) {\n\t\tspec && this.add(spec);\n\t},\n},\n'accessing', {\n\tgetFontWeight: function() {\n\t\treturn (this.fontWeight && this.fontWeight !== '') ? this.fontWeight : 'normal';\n\t},\n\tsetFontWeight: function(fontWeight) { this.fontWeight = fontWeight },\n\tgetItalics: function() { return (this.italics && this.italics !== '') ? this.italics : 'normal' },\n\tsetItalics: function(italics) { this.italics = italics },\n\tgetURI: function() { return this.uri },\n\tsetURI: function(link) { return this.uri = uri },\n\tgetDoit: function() { return this.doit },\n\tsetDoit: function(doit) { return this.doit = doit },\n\tgetFontFamily: function() { return this.fontFamily },\n\tsetFontFamily: function(fontFamily) { return this.fontFamily = fontFamily },\n\tgetColor: function() { return this.color },\n\tsetColor: function(color) { return this.color = color },\n\tgetTextDecoration: function() { return this.textDecoration },\n\tsetTextDecoration: function(textDecoration) { return this.textDecoration = textDecoration },\n\tgetTextAlignment: function() { return this.textAlign },\n\tsetTextAlignment: function(textAlign) { return this.textAlign = textAlign },\n\tgetFontSize: function() { return this.fontSize },\n\tsetFontSize: function(fontSize) { return this.fontSize = fontSize },\n},\n'cloning', {\n\tclone: function() { return new this.constructor(this) },\n},\n'changing', {\n\tadd: function(spec) {\n\t\tfor (var name in spec) {\n\t\t\tif (!spec.hasOwnProperty(name)) return;\n\t\t\tthis[name] = spec[name];\n\t\t}\n\t},\n},\n'testing', {\n\tequals: function(other) {\n\t\tif (this.getFontWeight() == other.getFontWeight() &&\n\t\t\tthis.getItalics() == other.getItalics() &&\n\t\t\tthis.getURI() == other.getURI() &&\n\t\t\tthis.getFontFamily() == other.getFontFamily() &&\n\t\t\tthis.getColor() == other.getColor() &&\n\t\t\tthis.getTextDecoration() == other.getTextDecoration() &&\n\t\t\tthis.getTextAlignment() == other.getTextAlignment() &&\n\t\t\tthis.getFontSize() == other.getFontSize() &&\n\t\t\t!this.getDoit() && !other.getDoit()) return true;\n\n\t\tif (this.getDoit() && other.getDoit() &&\n\t\t\tthis.getDoit().code == other.getDoit().code) return true\n\n\t\treturn false;\n\t},\n},\n'rendering', {\n\tapplyToHTML: function(node) {\n\t\tvar clickCallbacks = [], cursor, textDecoration, color;\n\n\t\tif (this.doit) {\n\t\t\tvar doit = this.doit;\n\t\t\tclickCallbacks.push(function(evt) {\n\t\t\t\tvar src = '(function() {\\n' + doit.code + '\\n})';\n\t\t\t\ttry {\n\t\t\t\t\tvar func = eval(src);\n\t\t\t\t\tfunc.call(doit.context);\n\t\t\t\t} catch(e) {\n\t\t\t\t\talert('Error in text doit\\n' + e.stack);\n\t\t\t\t}\n\t\t\t\treturn true\n\t\t\t});\n\t\t\tcursor = 'pointer';\n\t\t\ttextDecoration = 'underline';\n\t\t\tcolor = 'darkgreen';\n\t\t}\t\n\n\t\tif (this.uri) {\n\t\t\tvar uri = this.uri;\n\t\t\tclickCallbacks.push(function(evt) {debugger; window.open(uri) });\n\t\t\tcursor = 'pointer';\n\t\t\ttextDecoration = 'underline';\n\t\t\tcolor = 'blue';\n\t\t}\n\n\t\tif (clickCallbacks.length > 0) {\n\t\t\tnode.onclick = function(evt) {\n\t\t\t\tfor (var i = 0; i < clickCallbacks.length; i++)\n\t\t\t\t\tclickCallbacks[i].call(this, evt);\n\t\t\t\tevt.stop();\n\t\t\t\treturn true;\n\t\t\t}\n\t\t} else {\n\t\t\tdelete node.onmouseup;\n\t\t}\n\n\t\tnode.style.color = color || '';\n\t\tnode.style.textDecoration = textDecoration || 'none';\n\t\tnode.style.cursor = cursor || 'auto';\n\n\n\t\tfor (var name in this) {\n\t\t\tif (!this.hasOwnProperty(name)) continue;\n\t\t\t// ignore none style properties\n\t\t\tif (name == 'uri') continue;\n\t\t\tif (name == 'doit') continue;\n\t\t\tvar styleName = name;\n\t\t\tif (name === 'italics') styleName = 'fontStyle';\n\t\t\tif (name === 'fontSize') { node.style[styleName] = this[name] + 'pt'; continue }\n\t\t\tnode.style[styleName] = this[name];\n\t\t}\n\t},\n},\n'debugging', {\n\ttoString: function() {\n\t\tvar propStrings = [];\n\t\tProperties.forEachOwn(this, function(key, value) {\n\t\t\tpropStrings.push(key + ':' + value)\n\t\t})\n\t\treturn 'TextEmphasis(' + propStrings.join(',') + ')'\n\t},\n});\n\n\ncop.create('TextDevLayer')\n.refineClass(lively.morphic.TextChunk, {\n// this is for development and trying out new features without affecting the whole system\n\tingestAllPrecedingElements: function(prevChunk/*FIXME not used*/) {\n\t\tvar ownChunkNode = this.getChunkNode(),\n\t\t\ttextNode = ownChunkNode.parentNode,\n\t\t\tcontent = '';\n\n\t\tif (!textNode) return; // we are probably in deserialization\n\n\t\tvar before = textNode.childNodes[0], content = '';\n\t\twhile (before && before !== ownChunkNode) {\n\t\t\tcontent += before.textContent;\n\t\t\tbefore.parentNode && before.parentNode.removeChild(before);\n\t\t\tbefore = before.nextSibling;\n\t\t}\n\t\tif (content != '')\n\t\t\tthis.textString = content + this.textString;\n\t},\n});\n\n}) // end of module","__LivelyClassName__":"lively.morphic.TextChunk","__SourceModuleName__":"Global.lively.morphic.TextCore"},"1542":{"__LivelyClassName__":"lively.morphic.TextEmphasis","__SourceModuleName__":"Global.lively.morphic.TextCore"},"1543":{"resizeWidth":true,"resizeHeight":true},"1544":{"sourceObj":{"__isSmartRef__":true,"id":1535},"sourceAttrName":"savedTextString","targetObj":{"__isSmartRef__":true,"id":439},"targetMethodName":"setSourceString","converter":null,"converterString":null,"updater":null,"updaterString":null,"__LivelyClassName__":"AttributeConnection","__SourceModuleName__":"Global.lively.bindings"},"1545":{"sourceObj":{"__isSmartRef__":true,"id":439},"sourceAttrName":"targetURL","targetObj":{"__isSmartRef__":true,"id":428},"targetMethodName":"setTextString","converter":null,"converterString":null,"updaterString":"function ($upd, value) { value && $upd(String(value)) }","__LivelyClassName__":"AttributeConnection","__SourceModuleName__":"Global.lively.bindings"},"1546":{"protocol":"http:","hostname":"www.lively-kernel.org","pathname":"/repository/webwerkstatt/lively/morphic/","__LivelyClassName__":"URL","__SourceModuleName__":"Global.lively.Network"},"1547":{"submorphs":[{"__isSmartRef__":true,"id":1548}],"scripts":[],"id":613,"shape":{"__isSmartRef__":true,"id":1555},"grabbingEnabled":false,"droppingEnabled":false,"halosEnabled":true,"_Position":{"__isSmartRef__":true,"id":1558},"value":false,"toggle":false,"isActive":true,"normalFill":{"__isSmartRef__":true,"id":454},"lighterFill":{"__isSmartRef__":true,"id":1559},"label":{"__isSmartRef__":true,"id":1548},"owner":{"__isSmartRef__":true,"id":427},"attributeConnections":[{"__isSmartRef__":true,"id":1568}],"doNotSerialize":["$$fire"],"doNotCopyProperties":["$$fire"],"__LivelyClassName__":"lively.morphic.Button","__SourceModuleName__":"Global.lively.morphic.Widgets"},"1548":{"submorphs":[],"scripts":[],"id":614,"shape":{"__isSmartRef__":true,"id":1549},"grabbingEnabled":false,"droppingEnabled":false,"halosEnabled":true,"_Padding":{"__isSmartRef__":true,"id":446},"_ClipMode":"hidden","fixedWidth":false,"_WhiteSpaceHandling":"pre","fixedHeight":true,"allowInput":false,"_FontFamily":"Helvetica","_Position":{"__isSmartRef__":true,"id":1552},"_MaxTextWidth":null,"_MaxTextHeight":22,"textChunks":[{"__isSmartRef__":true,"id":1553}],"owner":{"__isSmartRef__":true,"id":1547},"isLabel":true,"eventsAreIgnored":true,"__LivelyClassName__":"lively.morphic.Text","__SourceModuleName__":"Global.lively.morphic.TextCore"},"1549":{"_Position":{"__isSmartRef__":true,"id":1550},"_Extent":{"__isSmartRef__":true,"id":1551},"_BorderWidth":0,"_BorderColor":{"__isSmartRef__":true,"id":432},"_Fill":null,"__LivelyClassName__":"lively.morphic.Shapes.Rectangle","__SourceModuleName__":"Global.lively.morphic.Shapes"},"1550":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"1551":{"x":98.39999999999999,"y":22,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"1552":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"1553":{"style":{"__isSmartRef__":true,"id":1554},"morph":{"__isSmartRef__":true,"id":1548},"storedString":"codebase","__LivelyClassName__":"lively.morphic.TextChunk","__SourceModuleName__":"Global.lively.morphic.TextCore"},"1554":{"__LivelyClassName__":"lively.morphic.TextEmphasis","__SourceModuleName__":"Global.lively.morphic.TextCore"},"1555":{"_Position":{"__isSmartRef__":true,"id":1556},"_Extent":{"__isSmartRef__":true,"id":1557},"_BorderWidth":1,"_BorderColor":{"__isSmartRef__":true,"id":453},"_Fill":{"__isSmartRef__":true,"id":454},"_BorderRadius":5,"__LivelyClassName__":"lively.morphic.Shapes.Rectangle","__SourceModuleName__":"Global.lively.morphic.Shapes"},"1556":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"1557":{"x":98.39999999999999,"y":22,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"1558":{"x":656,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"1559":{"stops":[{"__isSmartRef__":true,"id":1560},{"__isSmartRef__":true,"id":1562},{"__isSmartRef__":true,"id":1564},{"__isSmartRef__":true,"id":1566}],"vector":{"__isSmartRef__":true,"id":463},"__LivelyClassName__":"lively.morphic.LinearGradient","__SourceModuleName__":"Global.lively.morphic.Shapes"},"1560":{"offset":0,"color":{"__isSmartRef__":true,"id":1561}},"1561":{"r":0.98,"g":0.98,"b":0.98,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global"},"1562":{"offset":0.4,"color":{"__isSmartRef__":true,"id":1563}},"1563":{"r":0.91,"g":0.91,"b":0.91,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global"},"1564":{"offset":0.6,"color":{"__isSmartRef__":true,"id":1565}},"1565":{"r":0.91,"g":0.91,"b":0.91,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global"},"1566":{"offset":1,"color":{"__isSmartRef__":true,"id":1567}},"1567":{"r":0.97,"g":0.97,"b":0.97,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global"},"1568":{"sourceObj":{"__isSmartRef__":true,"id":1547},"sourceAttrName":"fire","targetObj":{"__isSmartRef__":true,"id":439},"targetMethodName":"setTargetURL","converterString":"function () { return URL.codeBase.withFilename('lively/')}","updater":null,"updaterString":null,"__LivelyClassName__":"AttributeConnection","__SourceModuleName__":"Global.lively.bindings"},"1569":{"submorphs":[{"__isSmartRef__":true,"id":1570}],"scripts":[],"id":615,"shape":{"__isSmartRef__":true,"id":1577},"grabbingEnabled":false,"droppingEnabled":false,"halosEnabled":true,"_Position":{"__isSmartRef__":true,"id":1580},"value":false,"toggle":false,"isActive":true,"normalFill":{"__isSmartRef__":true,"id":454},"lighterFill":{"__isSmartRef__":true,"id":1581},"label":{"__isSmartRef__":true,"id":1570},"owner":{"__isSmartRef__":true,"id":427},"attributeConnections":[{"__isSmartRef__":true,"id":1590}],"doNotSerialize":["$$fire"],"doNotCopyProperties":["$$fire"],"__LivelyClassName__":"lively.morphic.Button","__SourceModuleName__":"Global.lively.morphic.Widgets"},"1570":{"submorphs":[],"scripts":[],"id":616,"shape":{"__isSmartRef__":true,"id":1571},"grabbingEnabled":false,"droppingEnabled":false,"halosEnabled":true,"_Padding":{"__isSmartRef__":true,"id":446},"_ClipMode":"hidden","fixedWidth":false,"_WhiteSpaceHandling":"pre","fixedHeight":true,"allowInput":false,"_FontFamily":"Helvetica","_Position":{"__isSmartRef__":true,"id":1574},"_MaxTextWidth":null,"_MaxTextHeight":22,"textChunks":[{"__isSmartRef__":true,"id":1575}],"owner":{"__isSmartRef__":true,"id":1569},"isLabel":true,"eventsAreIgnored":true,"__LivelyClassName__":"lively.morphic.Text","__SourceModuleName__":"Global.lively.morphic.TextCore"},"1571":{"_Position":{"__isSmartRef__":true,"id":1572},"_Extent":{"__isSmartRef__":true,"id":1573},"_BorderWidth":0,"_BorderColor":{"__isSmartRef__":true,"id":432},"_Fill":null,"__LivelyClassName__":"lively.morphic.Shapes.Rectangle","__SourceModuleName__":"Global.lively.morphic.Shapes"},"1572":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"1573":{"x":65.6,"y":22,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"1574":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"1575":{"style":{"__isSmartRef__":true,"id":1576},"morph":{"__isSmartRef__":true,"id":1570},"storedString":"local","__LivelyClassName__":"lively.morphic.TextChunk","__SourceModuleName__":"Global.lively.morphic.TextCore"},"1576":{"__LivelyClassName__":"lively.morphic.TextEmphasis","__SourceModuleName__":"Global.lively.morphic.TextCore"},"1577":{"_Position":{"__isSmartRef__":true,"id":1578},"_Extent":{"__isSmartRef__":true,"id":1579},"_BorderWidth":1,"_BorderColor":{"__isSmartRef__":true,"id":453},"_Fill":{"__isSmartRef__":true,"id":454},"_BorderRadius":5,"__LivelyClassName__":"lively.morphic.Shapes.Rectangle","__SourceModuleName__":"Global.lively.morphic.Shapes"},"1578":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"1579":{"x":65.6,"y":22,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"1580":{"x":754.4,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"1581":{"stops":[{"__isSmartRef__":true,"id":1582},{"__isSmartRef__":true,"id":1584},{"__isSmartRef__":true,"id":1586},{"__isSmartRef__":true,"id":1588}],"vector":{"__isSmartRef__":true,"id":463},"__LivelyClassName__":"lively.morphic.LinearGradient","__SourceModuleName__":"Global.lively.morphic.Shapes"},"1582":{"offset":0,"color":{"__isSmartRef__":true,"id":1583}},"1583":{"r":0.98,"g":0.98,"b":0.98,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global"},"1584":{"offset":0.4,"color":{"__isSmartRef__":true,"id":1585}},"1585":{"r":0.91,"g":0.91,"b":0.91,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global"},"1586":{"offset":0.6,"color":{"__isSmartRef__":true,"id":1587}},"1587":{"r":0.91,"g":0.91,"b":0.91,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global"},"1588":{"offset":1,"color":{"__isSmartRef__":true,"id":1589}},"1589":{"r":0.97,"g":0.97,"b":0.97,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global"},"1590":{"sourceObj":{"__isSmartRef__":true,"id":1569},"sourceAttrName":"fire","targetObj":{"__isSmartRef__":true,"id":439},"targetMethodName":"setTargetURL","converter":null,"converterString":"function () { return URL.source.getDirectory() }","updater":null,"updaterString":null,"__LivelyClassName__":"AttributeConnection","__SourceModuleName__":"Global.lively.bindings"},"1591":{"submorphs":[],"scripts":[],"id":621,"shape":{"__isSmartRef__":true,"id":1592},"droppingEnabled":true,"halosEnabled":true,"draggingEnabled":true,"_Position":{"__isSmartRef__":true,"id":1596},"fixed":[{"__isSmartRef__":true,"id":441},{"__isSmartRef__":true,"id":477},{"__isSmartRef__":true,"id":501},{"__isSmartRef__":true,"id":525},{"__isSmartRef__":true,"id":549},{"__isSmartRef__":true,"id":573},{"__isSmartRef__":true,"id":597}],"scalingBelow":[{"__isSmartRef__":true,"id":1535}],"scalingAbove":[{"__isSmartRef__":true,"id":627},{"__isSmartRef__":true,"id":1493},{"__isSmartRef__":true,"id":1515},{"__isSmartRef__":true,"id":1525}],"minHeight":20,"pointerConnection":null,"owner":{"__isSmartRef__":true,"id":427},"styleClass":["Browser_resizer"],"__LivelyClassName__":"lively.morphic.HorizontalDivider","__SourceModuleName__":"Global.lively.morphic.Widgets"},"1592":{"_Position":{"__isSmartRef__":true,"id":1593},"_Extent":{"__isSmartRef__":true,"id":1594},"_Fill":{"__isSmartRef__":true,"id":1595},"__LivelyClassName__":"lively.morphic.Shapes.Rectangle","__SourceModuleName__":"Global.lively.morphic.Shapes"},"1593":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"1594":{"x":820,"y":5.5,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"1595":{"r":0.95,"g":0.95,"b":0.95,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global"},"1596":{"x":0,"y":242,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"1597":{"submorphs":[],"scripts":[],"id":623,"shape":{"__isSmartRef__":true,"id":1598},"droppingEnabled":true,"halosEnabled":true,"draggingEnabled":true,"_Position":{"__isSmartRef__":true,"id":1601},"fixed":[],"scalingBelow":[{"__isSmartRef__":true,"id":1602}],"scalingAbove":[{"__isSmartRef__":true,"id":1535}],"minHeight":20,"pointerConnection":null,"owner":{"__isSmartRef__":true,"id":427},"styleClass":["Browser_resizer"],"__LivelyClassName__":"lively.morphic.HorizontalDivider","__SourceModuleName__":"Global.lively.morphic.Widgets"},"1598":{"_Position":{"__isSmartRef__":true,"id":1599},"_Extent":{"__isSmartRef__":true,"id":1600},"_Fill":{"__isSmartRef__":true,"id":1595},"__LivelyClassName__":"lively.morphic.Shapes.Rectangle","__SourceModuleName__":"Global.lively.morphic.Shapes"},"1599":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"1600":{"x":820,"y":5.5,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"1601":{"x":0,"y":517,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"1602":{"submorphs":[],"scripts":[],"id":624,"shape":{"__isSmartRef__":true,"id":1603},"grabbingEnabled":false,"droppingEnabled":false,"halosEnabled":true,"_Padding":{"__isSmartRef__":true,"id":434},"_ClipMode":"scroll","fixedWidth":true,"_WhiteSpaceHandling":"pre-wrap","fixedHeight":true,"allowInput":true,"_FontFamily":"Helvetica","_Position":{"__isSmartRef__":true,"id":1606},"_MaxTextWidth":820,"_MaxTextHeight":27.5,"textChunks":[{"__isSmartRef__":true,"id":1607}],"owner":{"__isSmartRef__":true,"id":427},"styleClass":["Browser_commentPaneText"],"__LivelyClassName__":"lively.morphic.Text","__SourceModuleName__":"Global.lively.morphic.TextCore"},"1603":{"_Position":{"__isSmartRef__":true,"id":1604},"_Extent":{"__isSmartRef__":true,"id":1605},"_BorderWidth":1,"_BorderColor":{"__isSmartRef__":true,"id":432},"_Fill":{"__isSmartRef__":true,"id":433},"__LivelyClassName__":"lively.morphic.Shapes.Rectangle","__SourceModuleName__":"Global.lively.morphic.Shapes"},"1604":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"1605":{"x":820,"y":27.5,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"1606":{"x":0,"y":522.5,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"1607":{"style":{"__isSmartRef__":true,"id":1608},"morph":{"__isSmartRef__":true,"id":1602},"storedString":"","__LivelyClassName__":"lively.morphic.TextChunk","__SourceModuleName__":"Global.lively.morphic.TextCore"},"1608":{"__LivelyClassName__":"lively.morphic.TextEmphasis","__SourceModuleName__":"Global.lively.morphic.TextCore"},"1609":{"_Position":{"__isSmartRef__":true,"id":1610},"_Extent":{"__isSmartRef__":true,"id":1611},"_Fill":{"__isSmartRef__":true,"id":1612},"__LivelyClassName__":"lively.morphic.Shapes.Rectangle","__SourceModuleName__":"Global.lively.morphic.Shapes"},"1610":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"1611":{"x":820,"y":550,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"1612":{"r":0.9,"g":0.9,"b":0.9,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global"},"1613":{"adjustForNewBounds":true},"1614":{"x":0,"y":22,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"1615":{"submorphs":[{"__isSmartRef__":true,"id":1616},{"__isSmartRef__":true,"id":1624},{"__isSmartRef__":true,"id":1649},{"__isSmartRef__":true,"id":1673}],"scripts":[],"id":640,"shape":{"__isSmartRef__":true,"id":1698},"droppingEnabled":true,"halosEnabled":true,"layout":{"__isSmartRef__":true,"id":1702},"_Position":{"__isSmartRef__":true,"id":1703},"eventsAreIgnored":true,"windowMorph":{"__isSmartRef__":true,"id":426},"label":{"__isSmartRef__":true,"id":1616},"closeButton":{"__isSmartRef__":true,"id":1624},"menuButton":{"__isSmartRef__":true,"id":1649},"collapseButton":{"__isSmartRef__":true,"id":1673},"priorExtent":{"__isSmartRef__":true,"id":1704},"owner":{"__isSmartRef__":true,"id":426},"__LivelyClassName__":"lively.morphic.TitleBar","__SourceModuleName__":"Global.lively.morphic.Widgets"},"1616":{"submorphs":[],"scripts":[],"id":641,"shape":{"__isSmartRef__":true,"id":1617},"grabbingEnabled":false,"droppingEnabled":false,"halosEnabled":true,"_Padding":{"__isSmartRef__":true,"id":1620},"_ClipMode":"hidden","fixedWidth":false,"_WhiteSpaceHandling":"pre","fixedHeight":true,"allowInput":false,"_FontFamily":"Helvetica","_Position":{"__isSmartRef__":true,"id":1621},"_MaxTextWidth":null,"_MaxTextHeight":22,"textChunks":[{"__isSmartRef__":true,"id":1622}],"isLabel":true,"eventsAreIgnored":true,"_FontSize":10,"owner":{"__isSmartRef__":true,"id":1615},"__LivelyClassName__":"lively.morphic.Text","__SourceModuleName__":"Global.lively.morphic.TextCore"},"1617":{"_Position":{"__isSmartRef__":true,"id":1618},"_Extent":{"__isSmartRef__":true,"id":1619},"_BorderWidth":0,"_BorderColor":{"__isSmartRef__":true,"id":432},"_Fill":null,"_BorderRadius":0,"__LivelyClassName__":"lively.morphic.Shapes.Rectangle","__SourceModuleName__":"Global.lively.morphic.Shapes"},"1618":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"1619":{"x":48,"y":22,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"1620":{"x":0,"y":0,"width":0,"height":0,"__LivelyClassName__":"Rectangle","__SourceModuleName__":"Global"},"1621":{"x":386,"y":3.5,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"1622":{"style":{"__isSmartRef__":true,"id":1623},"morph":{"__isSmartRef__":true,"id":1616},"storedString":"TextCore.js","__LivelyClassName__":"lively.morphic.TextChunk","__SourceModuleName__":"Global.lively.morphic.TextCore"},"1623":{"__LivelyClassName__":"lively.morphic.TextEmphasis","__SourceModuleName__":"Global.lively.morphic.TextCore"},"1624":{"submorphs":[{"__isSmartRef__":true,"id":1625}],"scripts":[],"id":642,"shape":{"__isSmartRef__":true,"id":1633},"grabbingEnabled":false,"droppingEnabled":false,"halosEnabled":true,"_Position":{"__isSmartRef__":true,"id":1636},"value":false,"toggle":false,"isActive":true,"normalFill":{"__isSmartRef__":true,"id":454},"lighterFill":{"__isSmartRef__":true,"id":1637},"label":{"__isSmartRef__":true,"id":1625},"owner":{"__isSmartRef__":true,"id":1615},"layout":{"__isSmartRef__":true,"id":1646},"attributeConnections":[{"__isSmartRef__":true,"id":1647},{"__isSmartRef__":true,"id":1648}],"doNotSerialize":["$$getHelpText","$$fire"],"doNotCopyProperties":["$$getHelpText","$$fire"],"__LivelyClassName__":"lively.morphic.WindowControl","__SourceModuleName__":"Global.lively.morphic.Widgets"},"1625":{"submorphs":[],"scripts":[],"id":643,"shape":{"__isSmartRef__":true,"id":1626},"grabbingEnabled":false,"droppingEnabled":false,"halosEnabled":true,"_Padding":{"__isSmartRef__":true,"id":1629},"_ClipMode":"hidden","fixedWidth":false,"_WhiteSpaceHandling":"pre","fixedHeight":true,"allowInput":false,"_FontFamily":"Helvetica","_Position":{"__isSmartRef__":true,"id":1630},"_MaxTextWidth":null,"_MaxTextHeight":17,"textChunks":[{"__isSmartRef__":true,"id":1631}],"owner":{"__isSmartRef__":true,"id":1624},"isLabel":true,"eventsAreIgnored":true,"_FontSize":8,"__LivelyClassName__":"lively.morphic.Text","__SourceModuleName__":"Global.lively.morphic.TextCore"},"1626":{"_Position":{"__isSmartRef__":true,"id":1627},"_Extent":{"__isSmartRef__":true,"id":1628},"_BorderWidth":0,"_BorderColor":{"__isSmartRef__":true,"id":432},"_Fill":null,"__LivelyClassName__":"lively.morphic.Shapes.Rectangle","__SourceModuleName__":"Global.lively.morphic.Shapes"},"1627":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"1628":{"x":17,"y":17,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"1629":{"x":5,"y":0,"width":0,"height":0,"__LivelyClassName__":"Rectangle","__SourceModuleName__":"Global"},"1630":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"1631":{"style":{"__isSmartRef__":true,"id":1632},"morph":{"__isSmartRef__":true,"id":1625},"storedString":"X","__LivelyClassName__":"lively.morphic.TextChunk","__SourceModuleName__":"Global.lively.morphic.TextCore"},"1632":{"__LivelyClassName__":"lively.morphic.TextEmphasis","__SourceModuleName__":"Global.lively.morphic.TextCore"},"1633":{"_Position":{"__isSmartRef__":true,"id":1634},"_Extent":{"__isSmartRef__":true,"id":1635},"_BorderWidth":0,"_BorderColor":{"__isSmartRef__":true,"id":453},"_Fill":{"__isSmartRef__":true,"id":454},"_StrokeOpacity":0,"_BorderRadius":5,"__LivelyClassName__":"lively.morphic.Shapes.Rectangle","__SourceModuleName__":"Global.lively.morphic.Shapes"},"1634":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"1635":{"x":17,"y":17,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"1636":{"x":800,"y":3,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"1637":{"stops":[{"__isSmartRef__":true,"id":1638},{"__isSmartRef__":true,"id":1640},{"__isSmartRef__":true,"id":1642},{"__isSmartRef__":true,"id":1644}],"vector":{"__isSmartRef__":true,"id":463},"__LivelyClassName__":"lively.morphic.LinearGradient","__SourceModuleName__":"Global.lively.morphic.Shapes"},"1638":{"offset":0,"color":{"__isSmartRef__":true,"id":1639}},"1639":{"r":0.98,"g":0.98,"b":0.98,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global"},"1640":{"offset":0.4,"color":{"__isSmartRef__":true,"id":1641}},"1641":{"r":0.91,"g":0.91,"b":0.91,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global"},"1642":{"offset":0.6,"color":{"__isSmartRef__":true,"id":1643}},"1643":{"r":0.91,"g":0.91,"b":0.91,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global"},"1644":{"offset":1,"color":{"__isSmartRef__":true,"id":1645}},"1645":{"r":0.97,"g":0.97,"b":0.97,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global"},"1646":{"moveHorizontal":true},"1647":{"sourceObj":{"__isSmartRef__":true,"id":1624},"sourceAttrName":"getHelpText","targetObj":{"__isSmartRef__":true,"id":426},"targetMethodName":"getCloseHelp","converter":null,"converterString":null,"updater":null,"updaterString":null,"__LivelyClassName__":"AttributeConnection","__SourceModuleName__":"Global.lively.bindings"},"1648":{"sourceObj":{"__isSmartRef__":true,"id":1624},"sourceAttrName":"fire","targetObj":{"__isSmartRef__":true,"id":426},"targetMethodName":"initiateShutdown","converter":null,"converterString":null,"updater":null,"updaterString":null,"__LivelyClassName__":"AttributeConnection","__SourceModuleName__":"Global.lively.bindings"},"1649":{"submorphs":[{"__isSmartRef__":true,"id":1650}],"scripts":[],"id":644,"shape":{"__isSmartRef__":true,"id":1658},"grabbingEnabled":false,"droppingEnabled":false,"halosEnabled":true,"_Position":{"__isSmartRef__":true,"id":1661},"value":false,"toggle":false,"isActive":true,"normalFill":{"__isSmartRef__":true,"id":454},"lighterFill":{"__isSmartRef__":true,"id":1662},"label":{"__isSmartRef__":true,"id":1650},"owner":{"__isSmartRef__":true,"id":1615},"attributeConnections":[{"__isSmartRef__":true,"id":1671},{"__isSmartRef__":true,"id":1672}],"doNotSerialize":["$$getHelpText","$$fire"],"doNotCopyProperties":["$$getHelpText","$$fire"],"__LivelyClassName__":"lively.morphic.WindowControl","__SourceModuleName__":"Global.lively.morphic.Widgets"},"1650":{"submorphs":[],"scripts":[],"id":645,"shape":{"__isSmartRef__":true,"id":1651},"grabbingEnabled":false,"droppingEnabled":false,"halosEnabled":true,"_Padding":{"__isSmartRef__":true,"id":1654},"_ClipMode":"hidden","fixedWidth":false,"_WhiteSpaceHandling":"pre","fixedHeight":true,"allowInput":false,"_FontFamily":"Helvetica","_Position":{"__isSmartRef__":true,"id":1655},"_MaxTextWidth":null,"_MaxTextHeight":17,"textChunks":[{"__isSmartRef__":true,"id":1656}],"owner":{"__isSmartRef__":true,"id":1649},"isLabel":true,"eventsAreIgnored":true,"_FontSize":8,"__LivelyClassName__":"lively.morphic.Text","__SourceModuleName__":"Global.lively.morphic.TextCore"},"1651":{"_Position":{"__isSmartRef__":true,"id":1652},"_Extent":{"__isSmartRef__":true,"id":1653},"_BorderWidth":0,"_BorderColor":{"__isSmartRef__":true,"id":432},"_Fill":null,"__LivelyClassName__":"lively.morphic.Shapes.Rectangle","__SourceModuleName__":"Global.lively.morphic.Shapes"},"1652":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"1653":{"x":17,"y":17,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"1654":{"x":5,"y":0,"width":0,"height":0,"__LivelyClassName__":"Rectangle","__SourceModuleName__":"Global"},"1655":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"1656":{"style":{"__isSmartRef__":true,"id":1657},"morph":{"__isSmartRef__":true,"id":1650},"storedString":"M","__LivelyClassName__":"lively.morphic.TextChunk","__SourceModuleName__":"Global.lively.morphic.TextCore"},"1657":{"__LivelyClassName__":"lively.morphic.TextEmphasis","__SourceModuleName__":"Global.lively.morphic.TextCore"},"1658":{"_Position":{"__isSmartRef__":true,"id":1659},"_Extent":{"__isSmartRef__":true,"id":1660},"_BorderWidth":0,"_BorderColor":{"__isSmartRef__":true,"id":453},"_Fill":{"__isSmartRef__":true,"id":454},"_StrokeOpacity":0,"_BorderRadius":5,"__LivelyClassName__":"lively.morphic.Shapes.Rectangle","__SourceModuleName__":"Global.lively.morphic.Shapes"},"1659":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"1660":{"x":17,"y":17,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"1661":{"x":3,"y":3,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"1662":{"stops":[{"__isSmartRef__":true,"id":1663},{"__isSmartRef__":true,"id":1665},{"__isSmartRef__":true,"id":1667},{"__isSmartRef__":true,"id":1669}],"vector":{"__isSmartRef__":true,"id":463},"__LivelyClassName__":"lively.morphic.LinearGradient","__SourceModuleName__":"Global.lively.morphic.Shapes"},"1663":{"offset":0,"color":{"__isSmartRef__":true,"id":1664}},"1664":{"r":0.98,"g":0.98,"b":0.98,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global"},"1665":{"offset":0.4,"color":{"__isSmartRef__":true,"id":1666}},"1666":{"r":0.91,"g":0.91,"b":0.91,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global"},"1667":{"offset":0.6,"color":{"__isSmartRef__":true,"id":1668}},"1668":{"r":0.91,"g":0.91,"b":0.91,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global"},"1669":{"offset":1,"color":{"__isSmartRef__":true,"id":1670}},"1670":{"r":0.97,"g":0.97,"b":0.97,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global"},"1671":{"sourceObj":{"__isSmartRef__":true,"id":1649},"sourceAttrName":"getHelpText","targetObj":{"__isSmartRef__":true,"id":426},"targetMethodName":"getMenuHelp","converter":null,"converterString":null,"updater":null,"updaterString":null,"__LivelyClassName__":"AttributeConnection","__SourceModuleName__":"Global.lively.bindings"},"1672":{"sourceObj":{"__isSmartRef__":true,"id":1649},"sourceAttrName":"fire","targetObj":{"__isSmartRef__":true,"id":426},"targetMethodName":"showTargetMorphMenu","converter":null,"converterString":null,"updater":null,"updaterString":null,"__LivelyClassName__":"AttributeConnection","__SourceModuleName__":"Global.lively.bindings"},"1673":{"submorphs":[{"__isSmartRef__":true,"id":1674}],"scripts":[],"id":646,"shape":{"__isSmartRef__":true,"id":1682},"grabbingEnabled":false,"droppingEnabled":false,"halosEnabled":true,"_Position":{"__isSmartRef__":true,"id":1685},"value":false,"toggle":false,"isActive":true,"normalFill":{"__isSmartRef__":true,"id":454},"lighterFill":{"__isSmartRef__":true,"id":1686},"label":{"__isSmartRef__":true,"id":1674},"owner":{"__isSmartRef__":true,"id":1615},"layout":{"__isSmartRef__":true,"id":1695},"attributeConnections":[{"__isSmartRef__":true,"id":1696},{"__isSmartRef__":true,"id":1697}],"doNotSerialize":["$$getHelpText","$$fire"],"doNotCopyProperties":["$$getHelpText","$$fire"],"__LivelyClassName__":"lively.morphic.WindowControl","__SourceModuleName__":"Global.lively.morphic.Widgets"},"1674":{"submorphs":[],"scripts":[],"id":647,"shape":{"__isSmartRef__":true,"id":1675},"grabbingEnabled":false,"droppingEnabled":false,"halosEnabled":true,"_Padding":{"__isSmartRef__":true,"id":1678},"_ClipMode":"hidden","fixedWidth":false,"_WhiteSpaceHandling":"pre","fixedHeight":true,"allowInput":false,"_FontFamily":"Helvetica","_Position":{"__isSmartRef__":true,"id":1679},"_MaxTextWidth":null,"_MaxTextHeight":17,"textChunks":[{"__isSmartRef__":true,"id":1680}],"owner":{"__isSmartRef__":true,"id":1673},"isLabel":true,"eventsAreIgnored":true,"_FontSize":8,"__LivelyClassName__":"lively.morphic.Text","__SourceModuleName__":"Global.lively.morphic.TextCore"},"1675":{"_Position":{"__isSmartRef__":true,"id":1676},"_Extent":{"__isSmartRef__":true,"id":1677},"_BorderWidth":0,"_BorderColor":{"__isSmartRef__":true,"id":432},"_Fill":null,"__LivelyClassName__":"lively.morphic.Shapes.Rectangle","__SourceModuleName__":"Global.lively.morphic.Shapes"},"1676":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"1677":{"x":17,"y":17,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"1678":{"x":5,"y":0,"width":0,"height":0,"__LivelyClassName__":"Rectangle","__SourceModuleName__":"Global"},"1679":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"1680":{"style":{"__isSmartRef__":true,"id":1681},"morph":{"__isSmartRef__":true,"id":1674},"storedString":"–","__LivelyClassName__":"lively.morphic.TextChunk","__SourceModuleName__":"Global.lively.morphic.TextCore"},"1681":{"__LivelyClassName__":"lively.morphic.TextEmphasis","__SourceModuleName__":"Global.lively.morphic.TextCore"},"1682":{"_Position":{"__isSmartRef__":true,"id":1683},"_Extent":{"__isSmartRef__":true,"id":1684},"_BorderWidth":0,"_BorderColor":{"__isSmartRef__":true,"id":453},"_Fill":{"__isSmartRef__":true,"id":454},"_StrokeOpacity":0,"_BorderRadius":5,"__LivelyClassName__":"lively.morphic.Shapes.Rectangle","__SourceModuleName__":"Global.lively.morphic.Shapes"},"1683":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"1684":{"x":17,"y":17,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"1685":{"x":781,"y":3,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"1686":{"stops":[{"__isSmartRef__":true,"id":1687},{"__isSmartRef__":true,"id":1689},{"__isSmartRef__":true,"id":1691},{"__isSmartRef__":true,"id":1693}],"vector":{"__isSmartRef__":true,"id":463},"__LivelyClassName__":"lively.morphic.LinearGradient","__SourceModuleName__":"Global.lively.morphic.Shapes"},"1687":{"offset":0,"color":{"__isSmartRef__":true,"id":1688}},"1688":{"r":0.98,"g":0.98,"b":0.98,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global"},"1689":{"offset":0.4,"color":{"__isSmartRef__":true,"id":1690}},"1690":{"r":0.91,"g":0.91,"b":0.91,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global"},"1691":{"offset":0.6,"color":{"__isSmartRef__":true,"id":1692}},"1692":{"r":0.91,"g":0.91,"b":0.91,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global"},"1693":{"offset":1,"color":{"__isSmartRef__":true,"id":1694}},"1694":{"r":0.97,"g":0.97,"b":0.97,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global"},"1695":{"moveHorizontal":true},"1696":{"sourceObj":{"__isSmartRef__":true,"id":1673},"sourceAttrName":"getHelpText","targetObj":{"__isSmartRef__":true,"id":426},"targetMethodName":"getCollapseHelp","converter":null,"converterString":null,"updater":null,"updaterString":null,"__LivelyClassName__":"AttributeConnection","__SourceModuleName__":"Global.lively.bindings"},"1697":{"sourceObj":{"__isSmartRef__":true,"id":1673},"sourceAttrName":"fire","targetObj":{"__isSmartRef__":true,"id":426},"targetMethodName":"toggleCollapse","converter":null,"converterString":null,"updater":null,"updaterString":null,"__LivelyClassName__":"AttributeConnection","__SourceModuleName__":"Global.lively.bindings"},"1698":{"_Position":{"__isSmartRef__":true,"id":1699},"_Extent":{"__isSmartRef__":true,"id":1700},"_BorderWidth":2,"_BorderColor":{"__isSmartRef__":true,"id":1701},"_Fill":{"__isSmartRef__":true,"id":282},"_StrokeOpacity":1,"_BorderRadius":"8px 8px 0px 0px","__LivelyClassName__":"lively.morphic.Shapes.Rectangle","__SourceModuleName__":"Global.lively.morphic.Shapes"},"1699":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"1700":{"x":820,"y":22,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"1701":{"r":0.4,"g":0.4,"b":0.4,"a":1,"__LivelyClassName__":"Color","__SourceModuleName__":"Global"},"1702":{"resizeWidth":true,"adjustForNewBounds":true},"1703":{"x":0,"y":0,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"1704":{"x":820,"y":22,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"1705":{"_BorderWidth":0,"_Fill":null,"_StrokeOpacity":0,"_BorderRadius":0,"_Extent":{"__isSmartRef__":true,"id":1706},"__LivelyClassName__":"lively.morphic.Shapes.Rectangle","__SourceModuleName__":"Global.lively.morphic.Shapes"},"1706":{"x":820,"y":572,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"1707":{"adjustForNewBounds":true},"1708":{"x":103,"y":95,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"1709":{"x":820,"y":572,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"1710":{"x":188,"y":91,"__LivelyClassName__":"Point","__SourceModuleName__":"Global"},"1711":{"__SourceModuleName__":"Global.lively.morphic.Shapes","_Position":{"__isSmartRef__":true,"id":1712},"_Extent":{"__isSmartRef__":true,"id":1713},"_Fill":{"__isSmartRef__":true,"id":1714},"__LivelyClassName__":"lively.morphic.Shapes.Rectangle"},"1712":{"x":0,"y":0,"__SourceModuleName__":"Global","__LivelyClassName__":"Point"},"1713":{"x":2800,"y":2900,"__SourceModuleName__":"Global","__LivelyClassName__":"Point"},"1714":{"r":1,"g":1,"b":1,"a":1,"__SourceModuleName__":"Global","__LivelyClassName__":"Color"},"1715":{"x":0,"y":0,"__SourceModuleName__":"Global","__LivelyClassName__":"Point"},"1716":{"sourceObj":{"__isSmartRef__":true,"id":0},"sourceAttrName":"subtitlePos","targetObj":{"__isSmartRef__":true,"id":14},"targetMethodName":"textString","converterString":"function (p ) { return 'this.world().subtitlePos = ' + p }","updater":null,"updaterString":null,"__SourceModuleName__":"Global.lively.bindings","__LivelyClassName__":"AttributeConnection"},"isSimplifiedRegistry":true}}]]>