{"version":3,"sources":["https://lively-kernel.org/lively4/composed-offset/src/client/lively.js"],"names":["_","scripts","messaging","preferences","persistence","html","reflection","files","paths","contextmenu","keys","components","authGithub","authDropbox","authGoogledrive","expose","toArray","generateUUID","uuid","wait","pt","rect","Dialog","ViewNav","SystemjsWorker","Stack","focalStorage","Selection","windows","events","HaloService","default","Callable","$","window","debugLogHightlights","WeakMap","exportmodules","LivelyNotification","constructor","data","displayOnConsole","console","log","PrinterBuilder","config","__call__","element","printElement","printout","includes","append","undefined","ShadowRoot","self","document","localName","id","classList","length","join","pos","lively","getPosition","e","x","y","offsetLeft","offsetTop","tagName","push","classes","offset","asDiv","Lively","location","url","nextFrame","Promise","requestAnimationFrame","findDirectDependentModules","path","checkDeepevalFlag","mod","System","normalizeSync","loads","Object","values","myload","find","ea","key","source","metadata","pluginLoad","isDeepEvaling","match","error","filter","dependencies","dep","map","findModuleDependencies","load","findDependedModules","recursive","reverse","all","dependentModules","forEach","module","findDependedModulesGraph","tree","name","children","unloadModule","normalizedPath","get","import","then","__unload__","registry","delete","reloadModule","force","forceRetranspile","deep","changedModule","warn","forceRetranspilation","dependedModules","some","ending","endsWith","notify","eaPath","concat","found","getTemplatePaths","templatePath","moduleName","replace","defaultClass","updatePrototype","templateURL","setTimeout","loadFile","sourceCode","updateTemplate","loadJavaScriptThroughDOM","src","type","resolve","scriptNode","querySelector","remove","script","createElement","charset","Date","now","onload","head","appendChild","loadCSSThroughDOM","href","linkNode","link","rel","fillTemplateStyle","normalizeURL","fetch","r","text","css","setAttribute","innerHTML","fillTemplateStyles","root","debugInfo","baseURL","lively4url","promises","lively4dir","normalize","cssURL","URL","substring","toString","querySelectorAll","getAttribute","normalizedURL","showError","handleError","LastError","message","stack","__karma__","showErrorWindow","openComponentInWindow","comp","parentElement","style","height","bounds","getBoundingClientRect","width","loaded","onerror","lineno","colno","unhandledRejectionEventLister","evt","reason","addEventListener","exportModules","lively4chrome","body","eval","m","clipboard","asUL","anyList","ul","minWidth","minHeight","backgroundColor","item","textContent","value","openWorkspace","string","worldContext","mode","container","setGlobalPosition","focus","openInspector","object","str","inspector","windowTitle","inspect","ensureSpawnArea","spawnId","spawn","display","isMetaNode","create","parent","openIn","args","setPosition","obj","point","animateDuration","SVGElement","SVGSVGElement","transform","baseVal","t","consolidate","setTranslate","Error","old","position","left","top","dispatchEvent","CustomEvent","animate","duration","matrix","p","DOMPoint","matrixTransform","w","clientX","clientY","parseFloat","KeyboardEvent","getGlobalPosition","target","isNaN","getComputedStyle","getExtent","node","innerWidth","innerHeight","setExtent","extent","setWidth","setHeight","noevent","delta","subPt","moveBy","getGlobalCenter","addPt","scaleBy","setGlobalCenter","_getScalingFromDescription","where","vertical","horizontal","vScale","b","hScale","l","c","getGlobalPositionAt","scaleByPt","setGlobalPositionAt","getBounds","setBounds","topLeft","getGlobalBounds","getTotalGlobalBounds","Array","from","max","min","bottomRight","minPt","maxPt","getScroll","scrollingElement","scrollLeft","scrollTop","openFile","hostname","followPath","pathname","editFile","editor","openInWindow","setURL","hideContextMenu","composedPath","hide","openContextMenu","areHalosActive","halosHidden","that","nativeNotify","title","timeout","cb","notifications","time","Notification","permission","requestPermission","notification","icon","onclick","close","titleOrOptions","color","more","details","unsavedChanges","notificationList","addNotification","duplicateNotification","counter","render","success","ensureHand","hand","visibility","selection","current","initializeEventHooks","installHooks","initializeEvents","doc","onMouseDown","onContextMenu","handle","onKeyUp","initializeDocument","loadedAsExtension","loadContainer","modulesExported","loadByName","initializeHalos","stopPropagation","preventDefault","lively4stamp","loadLivelyContentForURL","loadPreferences","existingContainers","tip","textAlign","titleTag","enable","getURLParameter","showMainContainer","deferredUpdateScroll","performance","lively4performance","start","toFixed","becomeMainContainer","openInBody","unload","reloadComponent","allElementsThat","condition","filteredElements","allElements","objectsToMigrate","halo","shadowRoot","oldInstance","__ignoreUpdates","livelyUpdateStrategy","owner","parentNode","newInstance","livelyPreMigrate","replaceChild","childNodes","attributes","livelyMigrate","targetObject","uppercaseTagName","toUpperCase","livelyUpdate","showInfoBox","info","add","update","stop","removeEventListener","showPoint","removeAfterTime","showRect","showEvent","highlights","removeHighlights","padding","zIndex","bodyBounds","showPath","printArrow","timeoutOrFalse","createPath","pointerEvents","touchAction","label","createElementNS","dpath","i","defs","last","showSource","HTMLElement","openBrowser","searchTemplateFilename","showClassSource","templateFile","template","parseHTML","moduleURL","showElement","elem","border","elementPrinter","showLog","lastDebugLayer","debugText","debugLayer","set","showProgress","progressContainer","progress","allProperties","result","getOwnPropertyNames","__proto__","templateClassNameToTemplateName","className","toLowerCase","registerTemplate","currentScript","ownerDocument","clone","importNode","content","proto","baseName","prototype","register","eventListeners","livelyEventListeners","list","domain","listener","options","openSearchWidget","searchContext","pattern","search","query","getURL","base","repo","searchRoot","searchFile","hideSearchWidget","openIssue","number","open","openHelpWindow","getHelp","globalPos","immediate","findPositionForWindow","ensureWindowTitle","openInWindowSync","preventFocusOnCreation","ensureInitialized","p1","p2","eaPos","lessPt","eqPt","edit","patternOrPosition","replaceExisting","useExisting","locationObject","line","lineAndColumn","livelyContainer","containerPromise","existingFound","isSearchBrowser","containers","lastWindow","first","isMinimized","toggleMinimize","hideNavbar","asyncGet","livelyEditor","codeMirror","awaitEditor","setSelection","ch","column","end","scrollIntoView","getCursor","openDebugger","lively4ChromeDebugger","getCurrentDebuggingTarget","res","createWindow","targetId","parseInt","screen","catch","openMarkdown","parameters","setContent","evaluated","confirm","msg","customizeCB","prompt","findWorldContext","findParentShadowRoot","findWorldContextHost","host","isActiveElement","activeElemnt","activeElement","allParents","getSelection","findWindow","isWindow","print","s","Function","allKeys","hasOwnProperty","__lookupGetter__","methods","desc","getOwnPropertyDescriptor","isFunction","onUnload","saveLivelyContent","onInteractiveLayerPreference","enabled","InteractiveLayer","beGlobal","beNotGlobal","onShowFixedBrowserPreference","onShowDocumentGridPreference","showDocumentGrid","hideDocumentGrid","onOfflineFirstPreference","setItem","navigator","serviceWorker","controller","postMessage","option","onBodyPositionPreference","onEnableAEDebuggingPreference","debuggingEnabled","brokenModules","activeAEModules","o","onBodyScrollPreference","onFileIndexPreference","bool","updateFileIndexDirectory","fileIndexWorker","onmessage","onSWXKeepAlivePreference","command","sleep","onLogBootPreference","localStorage","isGlobalKeyboardFocusElement","hasGlobalFocus","globalFocus","focusWithoutScroll","preventScroll","ensureID","deeepElementByID","elementByID","fallbackToDocument","waitOnQuerySelector","selector","maxtime","startTime","reject","check","elementToCSSName","openPart","partName","pasteHTMLDataInto","queryAll","Set","gotoWindow","justFocuWhenInBounds","elementBounds","windowBounds","containsRect","allPreferences","regexp","bench","func","haloService","instance","lastScrollTop","lastScrollLeft","button","ctrlKey","shiftKey","__preventGlobalContextMenu__","items","menu","halt","rest","max_idle_time","waited","sleepUntil","step","debug","omitFn","Infinity","_allElements","globalRoots","documentElement","__gs_sources__","sources","allTextNodes","n","walk","createTreeWalker","NodeFilter","SHOW_TEXT","nextNode","findAllElements","filterFunc","parents","findParent","withSelf","ancestry","ancestryFromEvent","EventTarget","elements","getAncestryEvent","localAncestry","offsetAncestry","offsetParent","isInBody","isInElement","otherElement","showHalo","showHalos","swxURL","allElementsFromPoint","visited","elementsFromPoint","notYetVisited","has","shadowRootElements","registerSWXHandshake","ports","err","headersToJSO","headers","k","v","entries","registerSWXFetchHandler","response","method","assign","blob","ok","redirected","status","statusText","runDevCodeAndLog","devcode","devlog","boundEval","oldLively","previous"],"mappings":"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","file":"lively.js","sourcesContent":["\"disable deepeval\"\n/*MD \n![](../../media/lively4_logo_smooth_200.png)\n\n# Lively4 core module\n\n[architecture](browse://doc/architecture/lively.md)\n\n #Lively4 #Singleton #KitchenSink #CyclicDependecies #RefactoringNeeded\n\n\nMD*/\n\nimport './patches.js'; // monkey patch the meta sytem....\n// import * as jquery from '../external/jquery.js'; // should not be needed any more!\nimport _ from 'src/external/lodash/lodash.js';\nimport * as scripts from './script-manager.js';\nimport * as messaging from './messaging.js';\nimport preferences from './preferences.js';\nimport persistence from './persistence.js';\nimport html from './html.js';\nimport * as reflection from './reflection.js';\nimport files from './files.js';\nimport paths from './paths.js';\nimport contextmenu from './contextmenu.js';\nimport keys from './keys.js';\nimport components from './morphic/component-loader.js';\nimport authGithub from './auth-github.js';\nimport authDropbox from './auth-dropbox.js';\nimport authGoogledrive from './auth-googledrive.js';\nimport expose from './expose.js';\nimport { toArray, uuid as generateUUID, wait } from 'utils';\nimport { pt, rect } from './graphics.js';\nimport Dialog from 'src/components/widgets/lively-dialog.js';\nimport ViewNav from 'src/client/viewnav.js';\nimport SystemjsWorker from \"src/worker/systemjs-worker.js\";\nimport Stack from 'src/client/utils/stack.js';\n\n/* expose external modules */\n// import color from '../external/tinycolor.js';\nimport focalStorage from '../external/focalStorage.js';\nimport Selection from 'src/components/halo/lively-selection.js';\nimport windows from \"src/components/widgets/lively-window.js\";\n\nimport events from \"src/client/morphic/events.js\";\n\nlet $ = window.$; // known global variables.\n\n/*globals that*/\n\nimport {default as HaloService} from \"src/components/halo/lively-halo.js\"\n\nvar debugLogHightlights = new WeakMap();\n\n// a) Special shorthands for interactive development\n// b) this is the only reasonable way to use modules in template scripts, due to no shared lexical scope #TODO\n// c) This indirection is also needed to let old events listeners signal to code in current modules\nvar exportmodules = [\"preferences\", \"files\", \"keys\", \"paths\", \"html\", \"reflection\", \"components\", \"persistence\",\n// \"color\",\n\"focalStorage\", \"authGithub\", \"authDropbox\", \"authGoogledrive\", \"contextmenu\", \"windows\"];\n\nclass LivelyNotification {\n  constructor(data) {\n    this.data = data;\n  }\n\n  displayOnConsole() {\n    console.log('%cLively Notification', \"color: gray; font-size: x-small\", this.data);\n  }\n}\n\nimport Callable from 'src/client/utils/callable.js'\n\nclass PrinterBuilder extends Callable {\n  \n  constructor() {\n    super();\n    this.config = []\n  }\n\n  __call__(element) {\n    return this.printElement(element)\n  }\n\n  printElement(element) {\n    const printout = this.config.includes('asDiv') ? <div></div> : <span></span>;\n    \n    if (element === null) {\n      printout.append('null')\n      return printout;\n    }\n    if (element === undefined) {\n      printout.append('undefined')\n      return printout;\n    }\n    if (element instanceof ShadowRoot) {\n      printout.append('ShadowRoot')\n      return printout;\n    }\n    if (element === self) {\n      printout.append('window')\n      return printout;\n    }\n    if (element === document) {\n      printout.append('document')\n      return printout;\n    }\n    \n    if (this.config.includes('tagName')) {\n      printout.append(<span style='color: green'>{element.localName}</span>)\n    }\n\n    if (this.config.includes('id') && element.id) {\n      printout.append(<span style='color: darkgray'>#{element.id}</span>)\n    }\n\n    if (this.config.includes('classes') && element.classList.length > 0) {\n      printout.append(<span style='color: blue'>.{[...element.classList].join('.')}</span>)\n    }\n\n    if (this.config.includes('pos')) {\n      let pos;\n      try {\n        pos = lively.getPosition(element);\n      } catch (e) {}\n      if (pos) {\n        printout.append(<span style='color: brown'> [{pos.x !== undefined ? pos.x : ''},{pos.y !== undefined ? pos.y : ''}]</span>)\n      } else {\n        printout.append(<span style='color: brown'> []</span>)\n      }\n    }\n\n    if (this.config.includes('offset')) {\n      printout.append(<span style='color: brown'> ({element.offsetLeft},{element.offsetTop})</span>)\n    }\n\n    return printout\n  }\n\n  // get tag() {\n  //   this.config.push('tag')\n  //   return this\n  // }\n\n  get tagName() {\n    this.config.push('tagName')\n    return this\n  }\n\n  get id() {\n    this.config.push('id')\n    return this\n  }\n\n  get classes() {\n    this.config.push('classes')\n    return this\n  }\n\n  get pos() {\n    this.config.push('pos')\n    return this\n  }\n\n  get offset() {\n    this.config.push('offset')\n    return this\n  }\n\n  get asDiv() {\n    this.config.push('asDiv')\n    return this\n  }\n\n}\n\n/*\n * The \"lively\" module is currently the kitchen-sink of this environment.\n *\n * #TODO refactor so that methods go into more specific modules.\n */\nexport default class Lively {\n\n  static get location() {\n    return window.location;\n  }\n\n  static set location(url) {\n    return window.location = url;\n  }\n  \n  static nextFrame() {\n    return new Promise(requestAnimationFrame)\n  }\n\n  static findDirectDependentModules(path, checkDeepevalFlag) {\n    var mod = System.normalizeSync(path);\n    \n    var loads = Object.values(System.loads)\n    var myload = loads.find(ea => ea.key == mod)\n    \n    if (myload && checkDeepevalFlag) {\n      try {\n        // try to get to the source code without async fetch\n        var source = myload.metadata.pluginLoad.source\n        var isDeepEvaling = source.match(/\\\"disable deepeval\\\"/) // Unnessary esacape on purpose to not match myself\n        if (isDeepEvaling) return []\n      } catch(e) {\n        console.error(\"findDirectDependentModules could not get source from SystemJS \", e)\n      }\n    }\n    \n    return loads.filter(ea => {\n      if (ea.key.match(\"unnamed_module\")) {\n\n        return false;\n      }\n\n      return ea.dependencies.find(dep => System.normalizeSync(dep, ea.key) == mod);\n    }).map(ea => ea.key);\n  }\n\n  static findModuleDependencies(path) {\n    var mod = System.normalizeSync(path);\n    var load = Object.values(System.loads).find(ea => ea.key == mod)\n    if (!load) return []\n    return load.dependencies.map(ea => System.normalizeSync(ea))\n  }\n\n  \n  // #TODO #Refactor think about using options \n  static findDependedModules(path, recursive, reverse=false, checkDeepevalFlag=false, all = []) {\n    let dependentModules \n\n    if (reverse) {\n      dependentModules = this.findModuleDependencies(path);\n    } else {\n      dependentModules = this.findDirectDependentModules(path, checkDeepevalFlag);\n    }\n    if (recursive) {\n      dependentModules.forEach(module => {\n        if (!all.includes(module)) {\n          all.push(module);\n          this.findDependedModules(module, true, reverse, checkDeepevalFlag, all);\n        }\n      });\n      return all;\n    } else {\n      return dependentModules;\n    }\n  }\n\n  static findDependedModulesGraph(path, all = [], reverse=false) {\n\n    let tree = {};\n    tree.name = path;\n    let dependentModules \n    if (reverse) {\n      dependentModules = this.findModuleDependencies(path);\n    } else {\n      dependentModules = this.findDirectDependentModules(path);\n    }\n    tree.children = [];\n\n    dependentModules.forEach(module => {\n      if (!all.includes(module)) {\n        all.push(module);\n        tree.children.push(this.findDependedModulesGraph(module, all));\n      } else {\n        tree.children.push({\n          name: module\n        });\n      }\n    });\n    return tree;\n  }\n\n  // #TODO remove code duplication lively-con\n  static async unloadModule(path) {\n    var normalizedPath = System.normalizeSync(path);\n    try {\n      // check, to prevent trying to reloading a module a second time if there was an error #375\n      if (System.get(normalizedPath)) {\n        await System.import(normalizedPath).then(module => {\n          if (module && typeof module.__unload__ === \"function\") {\n            module.__unload__();\n          }\n        });\n      }\n    } catch (e) {\n      console.log(\"WARNING: error while trying to unload \" + path);\n    }\n    System.registry.delete(normalizedPath);\n    // #Hack #issue in SystemJS babel syntax errors do not clear errors\n    System['@@registerRegistry'][normalizedPath] = undefined;\n    delete System.loads[normalizedPath];\n  }\n\n  static async reloadModule(path, force = false, forceRetranspile, deep=true) {\n    // var start = performance.now()\n    // console.profile('reloadModule')\n\n    path = \"\" + path;\n    var changedModule = System.normalizeSync(path);\n    var load = System.loads[changedModule];\n    if (!load && !force) {\n      await this.unloadModule(path); // just to be sure...\n      console.warn(\"Don't reload non-loaded module\");\n      return;\n    }\n    if(forceRetranspile) {\n      System.forceRetranspilation = true;    \n    }\n    await this.unloadModule(path);\n    let mod = await System.import(path);\n    if(forceRetranspile) {\n      System.forceRetranspilation = false;    \n    }\n\n    /**\n     * Reload dependent modules\n     */\n    // #TODO how can we make the dependecy loading optional... I don't need the whole environment to relaod while developing a core module everybody depends on\n    // if (path.match(\"graphics.js\")) {\n    //   console.log(\"[reloadModule] don't load dependencies of \" + path)\n    //   return mod\n    // }\n\n    let dependedModules = [];\n    if (deep) {\n      if (['__stats__.js', 'lively-code-mirror-modes.js'].some(ending => path.endsWith(ending))) {\n        // these files have a different mode of live programming:\n        // they update some global state/behavior to its latest version without requiring dependent modules to be reloaded\n        dependedModules = [];\n      } else if (path.match('client/reactive')) {\n        // For reactive, find modules recursive, but cut modules not in 'client/reactive' folder\n        dependedModules = lively.findDependedModules(path, true, false, true);\n        dependedModules = dependedModules.filter(mod => mod.match('client/reactive'));\n        // #TODO: duplicated code #refactor\n      } else if (path.match('client/vivide')) {\n        // For vivide, find modules recursive, but cut modules not in 'client/vivide' folder\n        dependedModules = lively.findDependedModules(path, true, false, true);\n        dependedModules = dependedModules.filter(mod => mod.match('client/vivide'));\n      } else {\n        // Find all modules that depend on me \n        // dependedModules = lively.findDependedModules(path); \n\n        // vs. find recursively all! \n        dependedModules = lively.findDependedModules(path, true, false, true);\n      }      \n    }\n    \n\n    // console.log(\"[reloadModule] reload yourself \",(performance.now() - start) + `ms` ) \n    // start = performance.now()\n\n    // and update them\n    for (let ea of dependedModules) {\n      try {\n        await this.unloadModule(ea);\n      } catch (e) {\n        lively.notify(\"[lively] Ignore Error unloadModule dependend module\", ea, e);\n      }\n    }\n\n    // start = performance.now()\n    // await Promise.all(dependedModules.map(dependentModule => System.import(dependentModule)));\n    for (let ea of dependedModules) {\n      try {\n        await System.import(ea);\n      } catch (e) {\n        lively.error(\"Error reloading dependend module\", ea);\n      }\n    }\n\n\n\n    // console.log(\"[reloadModule] updated depended modules \",(performance.now() - start) + `ms` ) \n    // start = performance.now()\n\n    /**\n     * Update Templates: Reload a template's .html file\n     */\n    for (let eaPath of [path].concat(dependedModules)) {\n      // console.log(\"update dependend: \", eaPath)\n      let found = lively.components.getTemplatePaths().find(templatePath => eaPath.match(templatePath));\n      if (found) {\n        /**\n         * Update a templates prototype\n         */\n        let moduleName = eaPath.replace(/[^/]*/, \"\");\n        let mod = await System.import(eaPath);\n        let defaultClass = mod.default;\n        if (defaultClass) {\n          console.log(\"update template prototype: \" + moduleName);\n          components.updatePrototype(defaultClass, moduleName);\n        }\n\n        let templateURL = eaPath.replace(/\\.js$/, \".html\");\n        try {\n          console.log(\"[templates] update template \" + templateURL);\n          setTimeout(() => {\n            lively.files.loadFile(templateURL).then(sourceCode => lively.updateTemplate(sourceCode, templateURL));\n          }, 100);\n        } catch (e) {\n          lively.notify(\"[templates] could not update template \" + templateURL, \"\" + e);\n        }\n      }\n    }\n\n    // console.log(\"[reloadModule] updated components \",(performance.now() - start) + `ms` ) \n    // console.profileEnd('reloadModule')\n\n    return mod;\n  }\n\n  static loadJavaScriptThroughDOM(name, src, force = false, type = \"text/javascript\") {\n    return new Promise(resolve => {\n      var scriptNode = document.querySelector(\"#\" + name);\n      if (!force && scriptNode) {\n        resolve // nothing to be done here\n        ();return;\n      }\n\n      if (scriptNode) {\n        scriptNode.remove();\n      }\n      var script = document.createElement(\"script\");\n      script.id = name;\n      script.charset = \"utf-8\";\n      script.type = type;\n      if (force) {\n        src = src + (\"?\" + Date.now());\n      }\n      script.src = src;\n      script.onload = function () {\n        resolve();\n      };\n      document.head.appendChild(script);\n    });\n  }\n\n  static loadCSSThroughDOM(name, href, force) {\n    return new Promise(resolve => {\n      var linkNode = document.querySelector(\"#\" + name);\n      if (linkNode) {\n        linkNode.remove();\n      }\n      var link = document.createElement(\"link\");\n      link.rel = \"stylesheet\";\n      link.id = name;\n      link.charset = \"utf-8\";\n      link.type = \"text/css\";\n      if (force) {\n        href += \"?\" + Date.now();\n      }\n      link.href = href;\n      link.onload = function () {\n        resolve();\n      };\n      document.head.appendChild(link);\n    });\n  }\n  static async fillTemplateStyle(element, url) {\n    var url = lively.paths.normalizeURL(url);\n    return fetch(\"cached:\" + url).then(r => r.text()).then(css => {\n      // console.log(\"[lively] fill css \" + cssURL + \",\" + Math.round(css.length / 1000) + \"kb\" )\n      element.setAttribute(\"data-url\", url // so we find it again for updating... data-src is relative\n      );element.innerHTML = css;\n    });\n  }\n\n  static async fillTemplateStyles(root, debugInfo, baseURL = lively4url + '/') {\n    // there seems to be no <link ..> tag allowed to reference css inside of templates #Jens\n\n    // var start = performance.now()\n    var promises = [];\n    const lively4dir = lively4url + '/';\n    function normalize(cssURL) {\n      let url;\n      if (cssURL[0] === '/') {\n        url = new URL(cssURL.substring(1), lively4dir);\n      } else if (cssURL[0] === '.') {\n        url = new URL(cssURL, baseURL);\n      } else {\n        url = new URL(cssURL);\n      }\n\n      if (!url) {\n        return '';\n      }\n      return url.toString();\n    }\n\n    root.querySelectorAll(\"style\").forEach(ea => {\n      const cssURL = ea.getAttribute(\"data-src\");\n      if (cssURL) {\n        const normalizedURL = normalize(cssURL);\n        promises.push(this.fillTemplateStyle(ea, normalizedURL));\n      }\n    });\n    await Promise.all(promises\n    // console.log(\"load fillTemplateStyles \"  + (performance.now() - start) +\"ms :\"+ debugInfo);\n    );\n  }\n\n  static showError(error) {\n    this.handleError(error);\n  }\n\n  static async handleError(error) {\n    lively.LastError = error;\n    try {\n      if (!error) return; // hmm... this is currious...\n      if (error.message.match(\"Maximum call stack size exceeded\")) {\n        console.log(error);\n        return;\n      }\n      if (document.querySelector(\"lively-console\")) {\n        console.log(error);\n      } else {\n        console.error('[error] ', error, error.stack);\n        if (!window.__karma__) {\n          await lively.notify(\"Error: \", error, 10, () => {\n            this.showErrorWindow(error);\n          }, \"red\");\n        }\n      }\n    } catch (e) {\n      console.log(\"An error happend while handling and error: \" + e);\n    }\n  }\n  \n  static showErrorWindow(error) {\n    lively.openComponentInWindow(\"lively-error\").then(comp => {\n      comp.stack = error.stack;\n      comp.parentElement.setAttribute(\"title\", \"\" + error.message);\n      comp.style.height = \"max-content\";\n      var bounds = comp.getBoundingClientRect();\n      comp.parentElement.style.height = bounds.height + 20 + \"px\";\n      comp.parentElement.style.width = bounds.width + \"px\";\n    });\n  }\n\n  static async loaded() {\n    // #Refactor with #ContextJS\n    // guard againsst wrapping twice and ending in endless recursion\n    // if (!console.log.originalFunction) {\n    //     var nativeLog = console.log;\n    //     console.log = function() {\n    //         nativeLog.apply(console, arguments);\n    //         console.log.apply(undefined, arguments);\n    //     };\n    //     console.log.originalFunction = nativeLog; // #TODO use generic Wrapper mechanism here\n    // }\n    // if (!console.error.originalFunction) {\n    //     var nativeError = console.error;\n    //     console.error = function() {\n    //         nativeError.apply(console, arguments);\n    //         console.log.apply(undefined, arguments);\n    //     };\n    //     console.error.originalFunction = nativeError; // #TODO use generic Wrapper mechanism here\n    // }\n\n    // General Error Handling\n    if (window.onerror === null) {\n      window.onerror = function (message, source, lineno, colno, error) {\n        lively.handleError(error);\n      };\n    }\n    // do it just once\n    if (!window.unhandledRejectionEventLister) {\n      window.unhandledRejectionEventLister = function (evt) {\n        lively.handleError(evt.reason);\n      };\n      window.addEventListener('unhandledrejection', unhandledRejectionEventLister);\n    }\n\n    await this.exportModules();\n\n    if (!window.lively4chrome) {\n      // for container content... But this will lead to conflicts with lively4chrome  ?? #Jens\n      lively.loadCSSThroughDOM(\"livelystyle\", lively4url + \"/templates/lively4.css\");\n    }\n    // preload some components\n    // #FixMe does not work this way, because this might conflict with the normal loading ....\n    // await components.loadByName(\"lively-window\");\n    // await components.loadByName(\"lively-editor\");\n    // await components.loadByName(\"lively-script\");\n\n    setTimeout(() => {\n      // wait for the timeout and try again\n      document.body.querySelectorAll(\"img\").forEach(ea => ea.src = \"\" + ea.src // #Hack #swx RPC messages...\n      );\n    }, 12 * 1000);\n  }\n\n  static async exportModules() {\n    exportmodules.forEach(name => lively[name] = eval(name)); // oh... this seems uglier than expectednit\n\n    await System.import(\"src/client/clipboard.js\").then(m => {\n      lively.clipboard = m.default;\n    } // depends on me\n    );await System.import(\"src/client/graffle.js\" // depends on me\n    );await System.import(\"src/client/draganddrop.js\" // depends on me\n\n\n    );await System.import(\"src/client/poid.js\" // depends on me\n    // #TODO should we load fetch protocols lazy?\n    );await System.import(\"demos/plex/plex-scheme.js\" // depends on me\n    );await System.import(\"src/client/protocols/todoist.js\");\n    await System.import(\"src/client/protocols/wikipedia.js\");\n    await System.import(\"src/client/protocols/tmp.js\");\n    await System.import(\"src/client/protocols/bib.js\");\n    await System.import(\"src/client/protocols/author.js\");\n    await System.import(\"src/client/protocols/keyword.js\");\n    // await System.import(\"src/client/protocols/academic.js\");\n    await System.import(\"src/client/protocols/scholar.js\");\n    \n    await System.import(\"src/client/protocols/microsoft.js\");\n\n    await System.import(\"src/client/files-caches.js\" // depends on me\n    );\n  }\n\n  // #Deprecated who does/dir use this code and what for\n  static asUL(anyList) {\n    var ul = document.createElement(\"ul\");\n    ul.style.minWidth = \"50px\";\n    ul.style.minHeight = \"50px\";\n    ul.style.backgroundColor = \"gray\";\n    anyList.forEach(ea => {\n      var item = document.createElement(\"li\");\n      item.textContent = ea;\n      item.value = ea;\n      ul.appendChild(item);\n    });\n    return ul;\n  }\n\n  static openWorkspace(string, pos, worldContext) {\n    string = string || \"\";\n    var name = \"lively-code-mirror\";\n    return lively.openComponentInWindow(name, null, pt(700, 400), worldContext).then(comp => {\n      comp.mode = \"text/jsx\";\n      comp.value = string;\n      comp.setAttribute(\"overscroll\", \"contain\");\n      comp.style.height = \"100%\";\n      var container = comp.parentElement;\n      if (pos) lively.setGlobalPosition(container, pos);\n      container.setAttribute(\"title\", \"Workspace\");\n      comp.focus();\n      return comp;\n    });\n  }\n\n  static openInspector(object, pos, str, worldContext) {\n    return lively.openComponentInWindow(\"lively-inspector\", pos, pt(400, 500), worldContext).then(inspector => {\n      inspector.windowTitle = \"Inspect: \" + str;\n      inspector.inspect(object);\n      return inspector;\n    });\n  }\n\n  static ensureSpawnArea() {\n    var spawnId = \"livelySpawnArea\";\n    var spawn = document.body.querySelector(\"#\" + spawnId);\n    if (!spawn) {\n      spawn = document.createElement(\"div\");\n      spawn.id = spawnId;\n      spawn.style.display = \"none\";\n      spawn.isMetaNode = true;\n      document.body.appendChild(spawn);\n    }\n    return spawn;\n  }\n\n  static async create(name = \"lively-table\", parent = this.ensureSpawnArea()) {\n\n    // =this.ensureSpawnArea()\n\n    var element = document.createElement(name\n    // #TODO normal elements will not resolve this promoise #BUG\n    );if (name.match(\"-\")) {\n      await lively.components.openIn(parent, element);\n    } else {\n      parent.appendChild(element);\n    }\n    // if (document.activeElement) {\n    //   var pos = lively.getGlobalBounds(document.activeElement).bottomLeft()\n    //   lively.setGlobalPosition(element, pos)\n    // }\n    return element;\n  }\n\n  static pt(x, y) {\n    return pt(x, y);\n  }\n  \n  static rect(...args) {\n    return rect(...args);\n  }\n\n  // #important\n  static setPosition(obj, point, mode, animateDuration) {\n    if (obj instanceof SVGElement && !(obj instanceof SVGSVGElement)) {\n      if (obj.transform && obj.transform.baseVal) {\n        // get the position of an svg element\n        var t = obj.transform.baseVal.consolidate();\n        if (t) {\n          t.setTranslate(point.x, point.y);\n        } else {\n          obj.setAttribute(\"transform\", `translate(${point.x}, ${point.y})`);\n        }\n      } else {\n        throw new Error(\"path has no transformation\");\n      }\n    } else {\n      var old = lively.getPosition(obj\n      // normal DOM Element\n      );obj.style.position = mode || \"absolute\";\n      obj.style.left = \"\" + point.x + \"px\";\n      obj.style.top = \"\" + point.y + \"px\";\n      obj.dispatchEvent(new CustomEvent(\"position-changed\"));\n\n      if (animateDuration) {\n        obj.animate([{ left: old.x + \"px\", top: old.y + \"px\" }, { left: point.x + \"px\", top: point.y + \"px\" }], {\n          duration: animateDuration\n        });\n      }\n    }\n  }\n\n  // Example: lively.getPosition(that)\n\n  // #important\n  static getPosition(obj) {\n\n    var pos;\n    if (obj instanceof SVGElement && !(obj instanceof SVGSVGElement)) {\n      if (obj.transform && obj.transform.baseVal) {\n        // get the position of an svg element\n        var t = obj.transform.baseVal.consolidate();\n        if (!t) return pt(0, 0);\n        var m = t.matrix;\n        var p = new DOMPoint(0, 0);\n        var r = p.matrixTransform(m);\n        if (!r || !r.x) return pt(0, 0);\n        return pt(r.x / r.w, r.y / r.w);\n      } else {\n        throw new Error(\"path has no transformation\");\n      }\n    }\n\n    if (obj.clientX !== undefined) {\n      return pt(obj.clientX, obj.clientY);\n    }\n\n    // try to use directly the style object... \n    if (obj.style) {\n      pos = pt(parseFloat(obj.style.left), parseFloat(obj.style.top));\n    }\n    // keyboard events don't have a position.\n    // take the position of the target element.\n    if (obj instanceof KeyboardEvent) {\n      return lively.getGlobalPosition(obj.target);\n    }\n    if (!pos) return undefined\n    \n    // #Fallback .... and compute the style\n    if (isNaN(pos.x) || isNaN(pos.y)) {\n      var style = getComputedStyle(obj);\n      pos = pt(parseFloat(style.left), parseFloat(style.top));\n    }\n    return pos;\n  }\n\n  static getExtent(node) {\n    if (node === window) {\n      return pt(window.innerWidth, window.innerHeight);\n    }\n    // using the getBoundingClientRect produces the wrong extent\n    var style = getComputedStyle(node);\n    if (!style) {\n      return pt(0, 0);\n    }\n    return pt(parseFloat(style.width), parseFloat(style.height));\n  }\n\n  static setExtent(node, extent) {\n    // node.style.width = '' + extent.x + 'px';\n    // node.style.height = '' + extent.y + 'px';\n    // node.dispatchEvent(new CustomEvent(\"extent-changed\"))\n    this.setWidth(node, extent.x, true);\n    this.setHeight(node, extent.y);\n  }\n\n  static setWidth(node, x, noevent) {\n    node.style.width = '' + x + 'px';\n    if (!noevent) node.dispatchEvent(new CustomEvent(\"extent-changed\"));\n  }\n\n  static setHeight(node, y, noevent) {\n    node.style.height = '' + y + 'px';\n    if (!noevent) node.dispatchEvent(new CustomEvent(\"extent-changed\"));\n  }\n\n  static getGlobalPosition(node) {\n    // WARNING: this method works pretty well but does not consider any CSS transformation\n    if (!node.getBoundingClientRect) {\n      return pt(0, 0);\n    }\n    var bounds = node.getBoundingClientRect();\n    return pt(bounds.left, bounds.top);\n  }\n\n  static setGlobalPosition(node, pos) {\n    // if (!node.parentElement) return\n    // var parentPos = this.getGlobalPosition(node.parentElement)\n    // this.setPosition(node, pos.subPt(parentPos))\n\n    // With all the parent elements, shadow roots and so on it is difficult to set a global position\n    // ususally, we would get the global position of a parent element, but this is not always correct\n    // so we use our own global position...\n    lively.setPosition(node, pt(0, 0) // #somehow one time is not enough...\n    );var delta = pos.subPt(lively.getGlobalPosition(node));\n    lively.moveBy(node, delta);\n  }\n\n  static getGlobalCenter(node) {\n    return this.getGlobalPosition(node).addPt(this.getExtent(node).scaleBy(0.5));\n  }\n\n  static setGlobalCenter(node, pos) {\n    this.setGlobalPosition(node, pos.subPt(this.getExtent(node).scaleBy(0.5)));\n  }\n\n  /**\n   * vertical\n   * t - top\n   * m - middle\n   * b - bottom\n   * horizontal\n   * l - left\n   * c - center\n   * r - right\n   */\n  static _getScalingFromDescription(where) {\n    if (where.length !== 2) {\n      throw new Error(`anchor description should be 2 characters long, but was ${where}`)\n    }\n    const [vertical, horizontal] = where\n    // if (!['t', 'm', 'b'])\n    const vScale = {\n      t: 0, m: 0.5, b: 1\n    }[vertical]\n    const hScale = {\n      l: 0, c: 0.5, r: 1\n    }[horizontal]\n    if (vScale === undefined) {\n      throw new Error(`vertical anchor should be one of 't', 'm', 'b', but was '${where}'`)\n    }\n    if (hScale === undefined) {\n      throw new Error(`vertical anchor should be one of 'l', 'c', 'r', but was '${where}'`)\n    }\n    return pt(hScale, vScale);\n  }\n\n  static getGlobalPositionAt(node, where = 'tl') {\n    return this.getGlobalPosition(node).addPt(this.getExtent(node).scaleByPt(this._getScalingFromDescription(where)));\n  }\n\n  static setGlobalPositionAt(node, pos, where = 'tl') {\n    this.setGlobalPosition(node, pos.subPt(this.getExtent(node).scaleByPt(this._getScalingFromDescription(where))));\n  }\n\n  static moveBy(node, delta, animateDuration) {\n    this.setPosition(node, this.getPosition(node).addPt(delta), undefined, animateDuration);\n  }\n\n  static getBounds(node) {\n    var pos = lively.getPosition(node);\n    var extent = lively.getExtent(node);\n    return rect(pos, pos.addPt(extent));\n  }\n\n  static setBounds(node, bounds) {\n    lively.setPosition(node, bounds.topLeft());\n    lively.setExtent(node, bounds.extent());\n  }\n\n  static getGlobalBounds(node) {\n    var bounds = node.getBoundingClientRect();\n    if (!bounds) {\n      return rect(0, 0, 0, 0);\n    }\n    return rect(bounds.left, bounds.top, bounds.width, bounds.height);\n  }\n\n  // compute the global bounds of an element and all absolute positioned elements\n  static getTotalGlobalBounds(element) {\n\n    var all = Array.from(element.querySelectorAll(\"*\")).filter(ea => ea.style.position == \"absolute\" || ea.style.position == \"relative\").concat([element]).map(ea => lively.getGlobalBounds(ea));\n    var max;\n    var min;\n    all.forEach(ea => {\n      var topLeft = ea.topLeft();\n      var bottomRight = ea.bottomRight\n      // console.log(\"ea \" + topLeft + \" \" + bottomRight)\n      ();min = topLeft.minPt(min || topLeft);\n      max = bottomRight.maxPt(max || bottomRight);\n    }\n    // console.log(\"min \" + min + \" max \" + max)\n    );return rect(min, max);\n  }\n\n  static getScroll() {\n    return pt(document.scrollingElement.scrollLeft || 0, document.scrollingElement.scrollTop || 0);\n  }\n\n  // #Depricated\n  static openFile(url) {\n    if (url.hostname == \"lively4\") {\n      var container = document.querySelector('lively-container');\n      if (container) {\n        container.followPath(url.pathname);\n      } else {\n        console.log(\"fall back on editor: \" + url);\n        this.editFile(url);\n      }\n    } else {\n      this.editFile(url);\n    }\n  }\n\n  static editFile(url) {\n    var editor = document.createElement(\"lively-editor\");\n    components.openInWindow(editor).then(container => {\n      lively.setPosition(container, lively.pt(100, 100));\n      editor.setURL(url);\n      editor.loadFile();\n    });\n  }\n\n  static hideContextMenu(evt) {\n    if (evt.composedPath()[0] !== document.body) return;\n    console.log(\"hide context menu:\" + evt);\n    contextmenu.hide();\n  }\n\n  static openContextMenu(container, evt, target, worldContext) {\n    if (HaloService && (HaloService.areHalosActive() || HaloService.halosHidden && Date.now() - HaloService.halosHidden < 500)) {\n      target = that;\n    }\n    lively.contextmenu.openIn(container, evt, target, worldContext);\n  }\n\n  static nativeNotify(title, text, timeout, cb) {\n    if (!this.notifications) this.notifications = [];\n    this.notifications.push({ title: title, text: text, cb: cb, time: Date.now() });\n\n    if (Notification.permission !== \"granted\") Notification.requestPermission();\n\n    var time = Date.now();\n\n    // check if the third last notification was already one second ago\n    if (this.notifications.length > 5 && Date.now() - this.notifications[this.notifications.length - 3].time < 1000) {\n      return console.log(\"SILENT NOTE: \" + title + \" (\" + text + \")\");\n    }\n\n    console.log(\"NOTE: \" + title + \" (\" + text + \")\");\n\n    var notification = new Notification(title || \"\", {\n      icon: 'https://www.lively-kernel.org/media/livelylogo-small.png',\n      body: text || \"\"\n    });\n    if (cb) notification.onclick = cb;\n    if (timeout === undefined) timeout = 3;\n    setTimeout(() => notification.close(), timeout * 1000);\n    // notification.onclick = cb\n  }\n\n  /** notify **\n   *\n   * - displays an notification in the lower left of screen\n   * - takes arguments also as object parameter\n   *\n   * EXAMPLE:\n   *\n      lively.notify({\n      \ttitle: \"hello\",\n      \ttext: \"world\",\n      \tcolor: \"blue\",\n      \ttimeout: 10,\n      \tdetails: \"what's up?\"})\n   */\n  static async notify(titleOrOptions, text, timeout, cb, color) {\n    try {\n      // #TODO make native notifications opitional?\n      // this.nativeNotify(title, text, timeout, cb)\n      var title = titleOrOptions;\n      new LivelyNotification({ title, text }).displayOnConsole();\n      if (titleOrOptions && titleOrOptions.title) {\n        title = titleOrOptions.title;\n        text = titleOrOptions.title;\n        timeout = titleOrOptions.timeout;\n        cb = titleOrOptions.more;\n        color = titleOrOptions.color;\n\n        // open details in a workspace\n        if (titleOrOptions.details) {\n          cb = () => {\n            lively.openWorkspace(titleOrOptions.details).then(comp => {\n              comp.parentElement.setAttribute(\"title\", title);\n              comp.unsavedChanges = () => false; // close workspace without asking\n            });\n          };\n        }\n      }\n\n      var notificationList = document.querySelector(\"lively-notification-list\");\n      if (!notificationList) {\n        notificationList = await lively.create(\"lively-notification-list\", document.body);\n        if (notificationList && notificationList.addNotification) {\n          notificationList.addNotification(title, text, timeout, cb, color);\n        }\n      } else {\n        var duplicateNotification = Array.from(document.querySelectorAll(\"lively-notification\")).find(ea => \"\" + ea.title === \"\" + title && \"\" + ea.message === \"\" + text);\n        if (duplicateNotification) {\n          duplicateNotification.counter++;\n          duplicateNotification.render();\n        } else {\n          if (notificationList && notificationList.addNotification) {\n            notificationList.addNotification(title, text, timeout, cb, color);\n          }\n        }\n      }\n    } catch (e) {\n      console.log('%cERROR in lively.notify', 'font-size: 9px; color: red', e);\n    }\n  }\n\n  static success(title, text, timeout, cb) {\n    lively.notify(title, text, timeout, cb, 'green');\n  }\n\n  static warn(title, text, timeout, cb) {\n    lively.notify(title, text, timeout, cb, 'yellow');\n  }\n\n  static error(title, text, timeout, cb) {\n    debugger;\n    lively.notify(title, text, timeout, cb, 'red');\n  }\n\n  static async ensureHand() {\n    var hand = lively.hand;\n    if (!hand) {\n      hand = await lively.create(\"lively-hand\", document.body);\n      hand.style.visibility = \"hidden\";\n    }\n    return hand;\n  }\n\n  // we do it lazy, because a hand can be broken or gone missing...\n  static get hand() {\n    return document.body.querySelector(\":scope > lively-hand\");\n  }\n\n  static get selection() {\n    return Selection.current;\n    // var selection = document.body.querySelector(\":scope > lively-selection\")\n    // if (!selection) {\n    //   selection = document.createElement(\"lively-selection\")\n    //   lively.components.openInBody(selection);\n    // }\n    // return selection\n  }\n\n  /*MD \n  # Inititialization \n  \n  MD*/\n\n  static initializeEventHooks() {\n    events.installHooks();\n  }\n\n  // lively.ini\n  static initializeEvents(doc) {\n    doc = doc || document;\n    this.addEventListener('lively', doc, 'mousedown', evt => lively.onMouseDown(evt), true); // capture...\n    this.addEventListener('lively', doc, 'contextmenu', evt => lively.onContextMenu(evt), false);\n    this.addEventListener('lively', doc, 'click', function (evt) {\n      lively.hideContextMenu(evt);\n    }, false);\n    this.addEventListener('lively', doc, 'keydown', function (evt) {\n      lively.keys.handle(evt);\n    }, false);\n\n    this.addEventListener('lively', doc, 'keyup', function (evt) {\n      lively.keys.onKeyUp(evt);\n    }, false);\n  }\n\n  static async initializeDocument(doc, loadedAsExtension, loadContainer) {\n\n    this.loadedAsExtension = loadedAsExtension;\n\n    await modulesExported;\n\n    this.loadedAsExtension = loadedAsExtension;\n\n    console.log(\"Lively4 initializeDocument\");\n    // persistence.disable();\n\n    await lively.loadCSSThroughDOM(\"font-awesome\", lively4url + \"/src/external/font-awesome/css/font-awesome.min.css\");\n\n    lively.components.loadByName(\"lively-notification\");\n    lively.components.loadByName(\"lively-notification-list\");\n\n    this.initializeEvents(doc);\n    this.initializeHalos();\n\n    lively.addEventListener(\"preventDragCopy\", document, \"dragstart\", evt => {\n      if (evt.composedPath()[0] === document.body) {\n        evt.stopPropagation();\n        evt.preventDefault();\n      }\n    });\n\n    console.log(window.lively4stamp, \"load local lively content \"\n    // #RACE #TODO ... \n\n    // yes, we want also to change style of external websites...\n    );await lively.loadCSSThroughDOM(\"lively4\", lively4url + \"/src/client/lively.css\");\n\n    await persistence.current.loadLivelyContentForURL();\n    preferences.loadPreferences();\n    if (preferences.get('TipOfTheDay')) {\n      const existingContainers = Array.from(document.body.querySelectorAll('lively-code-tip'));\n      if (existingContainers.length !== 0) {\n        existingContainers.map(tip => tip.parentElement.remove());\n      }\n      lively.openComponentInWindow(\"lively-code-tip\", undefined, lively.pt(800, 200));\n    }\n    // here, we should scrap any existing (lazyly created) preference, there should only be one\n\n    await lively.ensureHand();\n\n    // lively.selection;\n\n    // #Hack... just to be on the save side #ACM\n    // where to put side specific adapations... cannot be overriden by CSS? #TODO\n    document.body.style.textAlign = \"left\";\n\n    if (loadedAsExtension) {\n      lively.notify(\"Lively4 extension loaded!\", \"  CTRL+LeftClick  ... open halo\\n\" + \"  CTRL+RightClick ... open menu\");\n    } else {\n\n      // only scroll thrugh CTRL+drag #TODO what does UX say?\n      // document.body.style.overflow = \"hidden\"\n\n      var titleTag = document.querySelector(\"title\");\n      if (!titleTag) {\n        titleTag = document.createElement(\"title\");\n        titleTag.textContent = \"Lively 4\";\n        document.head.appendChild(titleTag);\n      }\n\n      document.body.style.backgroundColor = \"rgb(240,240,240)\";\n      ViewNav.enable(document.body);\n\n      this.loadContainer = loadContainer; // remember....\n      \n      if (lively.preferences.getURLParameter(\"load\") || lively.preferences.getURLParameter(\"edit\")) {\n         this.showMainContainer()\n      }\n    }\n\n    if (this.deferredUpdateScroll) {\n      document.scrollingElement.scrollLeft = this.deferredUpdateScroll.x;\n      document.scrollingElement.scrollTop = this.deferredUpdateScroll.y;\n      delete this.deferredUpdateScroll;\n    }\n\n    console.log(\"FINISHED Loading in \" + ((performance.now() - lively4performance.start) / 1000).toFixed(2) + \"s\");\n    console.log(window.lively4stamp, \"lively persistence start \");\n  }\n\n  static async showMainContainer() {\n    var container = document.querySelector('#main-content');\n    if (!container) {\n      var w = await lively.create(\"lively-window\");\n      document.body.appendChild(w);\n      container = await lively.create(\"lively-container\");\n      w.appendChild(container);\n      container.becomeMainContainer();\n      \n      w.focus()\n    }\n    return container;\n  }\n\n  static initializeHalos() {\n    if (!window.lively) {\n      return setTimeout(() => {\n        this.initializeHalos();\n      }, 100);\n    }\n    if (!document.body.querySelector('lively-halo')) {\n      lively.components.openInBody(document.createElement('lively-halo')).then(comp => {\n        comp.setAttribute('data-lively4-donotpersist', 'all');\n      });\n    }\n  }\n\n  static unload() {\n\n    lively.notify(\"unloading Lively is not supported yet! Please reload page....\");\n  }\n\n  /*\n   * After changing code... we have to update intances...\n   * a) don't touch the instance, just update the class\n   *\n   */\n  static async updateTemplate(html, url) {\n    var tagName = await components.reloadComponent(html, url);\n    if (!tagName) return;\n\n    // conservative approach:\n    // let objectToMigrate = Array.from(document.body.querySelectorAll(tagName));\n    \n    function allElementsThat(condition) {\n      const filteredElements = []\n      const allElements = lively.allElements(true)\n      \n      for(let ea of allElements) {\n        if (condition(ea)) {\n          filteredElements.push(ea)\n        }\n      }\n      \n      return filteredElements\n    }\n    \n    // realy take every element yout can find, even if it might break things #Experimental\n    const objectsToMigrate = allElementsThat(ea => ea.localName == tagName)\n    \n    if (lively.halo) {\n      objectsToMigrate.push(...lively.halo.shadowRoot.querySelectorAll(tagName));\n    }\n    objectsToMigrate.forEach(oldInstance => {\n      if (oldInstance.__ignoreUpdates) return;\n      if (oldInstance.livelyUpdateStrategy !== 'migrate') return;\n\n      // if (oldInstance.isMinimized && oldInstance.isMinimized()) return // ignore minimized windows\n      // if (oldInstance.isMaximized && oldInstance.isMaximized()) return // ignore isMaximized windows\n\n      var owner = oldInstance.parentElement || oldInstance.parentNode;\n      var newInstance = document.createElement(tagName);\n\n      if (oldInstance.livelyPreMigrate) {\n        oldInstance.livelyPreMigrate(oldInstance);\n      }\n      if (owner) {\n        owner.replaceChild(newInstance, oldInstance);\n      }\n      Array.from(oldInstance.childNodes).forEach(ea => {\n        if (ea) {\n          // there are \"undefined\" elemented in childNodes... sometimes #TODO\n          newInstance.appendChild(ea);\n          // console.log(\"append old child: \" + ea);\n        }\n      });\n\n      Array.from(oldInstance.attributes).forEach(ea => {\n        // console.log(\"set old attribute \" + ea.name + \" to: \" + ea.value);\n        newInstance.setAttribute(ea.name, ea.value);\n      });\n\n      // Migrate Position\n      if (oldInstance.style.position == \"absolute\") {\n        newInstance.style.top = oldInstance.style.top;\n        newInstance.style.left = oldInstance.style.left;\n      }\n\n      // Migrate \"that\" pointer\n      if (window.that == oldInstance) {\n        window.that = newInstance;\n      }\n\n      if (newInstance.livelyMigrate) {\n        newInstance.livelyMigrate(oldInstance); // give instances a chance to take over old state...\n      }\n\n      // #LiveProgrammingHack\n      document.querySelectorAll(\"lively-inspector\").forEach(inspector => {\n        if (inspector.targetObject === oldInstance) {\n          inspector.inspect(newInstance);\n        }\n      });\n    });\n\n    // new (old) strategy... don't throw away the instance... just update them inplace?\n    const uppercaseTagName = tagName.toUpperCase();\n    allElementsThat(ea => ea.tagName === uppercaseTagName).forEach(ea => {\n      if (ea.livelyUpdate) {\n        try {\n          ea.livelyUpdate();\n        } catch (e) {\n          console.error(e);\n        }\n      }\n    });\n  }\n\n  static showInfoBox(target) {\n    var info = document.createElement(\"div\");\n    info.classList.add(\"draginfo\");\n    info.target = target;\n    info.isMetaNode = true;\n    info.style.width = \"300px\";\n    info.style['pointer-events'] = \"none\";\n    info.setAttribute(\"data-is-meta\", \"true\");\n    info.style.color = \"darkblue\";\n    info.update = function () {\n      lively.setGlobalPosition(this, lively.getGlobalPosition(this.target).subPt(pt(0, 20)));\n    };\n    info.style['z-index'] = 10000;\n    info.update();\n    lively.addEventListener(\"ShowInfoBox\", target, \"position-changed\", () => {\n      info.update();\n    });\n    info.stop = function () {\n      this.remove();\n      lively.removeEventListener(\"ShowInfoBox\", target, \"position-changed\");\n    };\n\n    document.body.appendChild(info);\n    return info;\n  }\n\n  static showPoint(point, removeAfterTime) {\n    return this.showRect(point, pt(5, 5), removeAfterTime);\n  }\n\n  static showEvent(evt, removeAfterTime) {\n    var r = lively.showPoint(pt(evt.clientX, evt.clientY), removeAfterTime);\n    r.style.backgroundColor = \"rgba(100,100,255,05)\";\n    return r;\n  }\n  \n  static get highlights() {\n    return document.body.querySelectorAll(\".lively-highlight\")\n  }\n\n  static removeHighlights() {\n    return this.highlights.forEach( ea => ea.remove())\n  }\n  \n  static showRect(point, extent, removeAfterTime = 3000) {\n    // check for alternative args\n    if (point && !extent) {\n      extent = point.extent();\n      point = point.topLeft();\n    }\n\n    if (!point || !point.subPt) return;\n    var comp = <div class=\"showrect lively-highlight\"></div>;\n    comp.style['pointer-events'] = \"none\";\n    comp.style.width = extent.x + \"px\";\n    comp.style.height = extent.y + \"px\";\n    comp.style.padding = \"1px\";\n    comp.style.backgroundColor = 'rgba(255,0,0,0.5)';\n    comp.style.zIndex = 1000;\n    comp.isMetaNode = true;\n\n    var bodyBounds = document.body.getBoundingClientRect();\n\n    document.body.appendChild(comp);\n    lively.setPosition(comp, point.subPt(pt(bodyBounds.left, bodyBounds.top)));\n    comp.setAttribute(\"data-is-meta\", \"true\");\n\n    if (removeAfterTime) {\n      setTimeout(() => comp.remove(), removeAfterTime);\n    }\n    // ea.getBoundingClientRect\n    return comp;\n  }\n\n  static showPath(path, color, printArrow, timeoutOrFalse = 3000) {\n    color = color || \"red\";\n    var comp = this.createPath(path, color, printArrow);\n    document.body.appendChild(comp);\n    comp.style.zIndex = 1000;\n    lively.setGlobalPosition(comp, pt(0, 0));\n    comp.setAttribute(\"data-is-meta\", \"true\");\n    comp.isMetaNode = true;\n    comp.style.pointerEvents = \"none\";\n    comp.style.touchAction = \"none\";\n    if (timeoutOrFalse) setTimeout(() => comp.remove(), timeoutOrFalse);\n    return comp;\n  }\n\n  static createPath(path, color, printArrow, label) {\n    if (!path || path.length < 1) return;\n    if (printArrow === undefined) printArrow = true;\n\n    var comp = document.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\");\n    comp.style = `position: absolute;\n        top: 0px;\n        left: 0px;\n        width: 100px;\n        height: 100px;\n        border: none;\n        opacity: 1;\n        overflow: visible;`;\n\n    var dpath = path.map((ea, i) => (i == 0 ? \"M \" : \"L \") + ea.x + \" \" + ea.y).join(\" \");\n    var defs = `      <defs>\n          <marker id=\"markerArrow\" markerWidth=\"13\" markerHeight=\"13\" refX=\"2\" refY=\"6\"\n                 orient=\"auto\">\n              <path d=\"M2,2 L2,11 L10,6 L2,2\" style=\"fill: ${color};\" />\n          </marker>\n       </defs>`;\n\n    var last = _.last(path);\n\n    comp.innerHTML = defs + `<path id=\"path\" fill=\"none\" stroke='${color}' d='${dpath}' \n      style='${printArrow ? 'marker-end: url(#markerArrow);' : \"\"}'></path>` + `<g font-size=\"12\" font-family=\"sans-serif\" fill=\"${color}\" stroke=\"none\"\n  text-anchor=\"middle\">\n    <text x=\"${last.x}\" y=\"${last.y}\" dx=\"10\">${label ? label : \"\"}</text>\n  </g>`;\n\n    return comp;\n  }\n\n  static async showSource(object, evt) {\n    if (object instanceof HTMLElement) {\n      if (!object.localName.match(/-/)) {\n        return lively.notify(\"Could not show source for native element\");\n      }\n      lively.openBrowser((await this.components.searchTemplateFilename(object.localName + \".html\")), true);\n    } else {\n      lively.notify(\"Could not show source for: \" + object);\n    }\n  }\n\n  static async showClassSource(object, evt) {\n    if (object instanceof HTMLElement) {\n      if (!object.localName.match(/-/)) {\n        return lively.notify(\"Could not show source for native element\");\n      }\n      let templateFile = await this.components.searchTemplateFilename(object.localName + \".html\"),\n          source = await fetch(templateFile).then(r => r.text()),\n          template = lively.html.parseHTML(source).find(ea => ea.tagName == \"TEMPLATE\"),\n          moduleURL = await this.components.searchTemplateFilename(object.localName + \".js\");\n      lively.openBrowser(moduleURL, true);\n    } else {\n      lively.notify(\"Could not show source for: \" + object);\n    }\n  }\n\n  static showElement(elem, timeout = 3000) {\n    if (!elem || !elem.getBoundingClientRect) return;\n    var comp = <div class=\"lively-highlight\"></div>\n    var bounds = elem.getBoundingClientRect();\n    var bodyBounds = document.body.getBoundingClientRect();\n    var offset = pt(bodyBounds.left, bodyBounds.top);\n    var pos = pt(bounds.left, bounds.top).subPt(offset);\n\n    comp.style.width = bounds.width + \"px\";\n    comp.style.height = bounds.height + \"px\";\n    comp.style['pointer-events'] = \"none\";\n    // comp.style.height = \"0px\"\n    comp.style[\"z-index\"] = 1000;\n    comp.style.border = \"1px solid red\";\n    comp.isMetaNode = true;\n    document.body.appendChild(comp);\n    lively.setPosition(comp, pos);\n    comp.setAttribute(\"data-is-meta\", \"true\");\n\n    comp.innerHTML = \"<pre data-is-meta='true' style='position: relative; top: -8px; width: 200px; background: rgba(255,255,255,0.8); color: red; font-size: 8pt'>\" + elem.tagName + \": \" + elem.id + \"\\n\" + elem.getAttribute(\"class\") + \"\\n\" + \"</pre>\";\n\n    if (timeout) setTimeout(() => comp.remove(), timeout);\n    return comp;\n  }\n\n  static get elementPrinter() {\n    return new PrinterBuilder();\n  }\n\n  // highlight and show log info on element\n  static showLog(elem, log = \"\", timeout) {\n\n    var lastDebugLayer = debugLogHightlights.get(elem);\n    if (!lastDebugLayer || !lastDebugLayer.parentElement) {\n      var debugText = \"\";\n    } else {\n      debugText = lastDebugLayer.querySelector(\"pre\").textContent;\n    }\n    var debugLayer = lively.showElement(elem, timeout);\n    debugLogHightlights.set(elem, debugLayer);\n    debugLayer.querySelector(\"pre\").textContent = debugText + \"\\n\" + log;\n  }\n\n  static async showProgress(label) {\n    var progressContainer = document.querySelector(\"#progressContainer\");\n    if (!progressContainer) {\n      progressContainer = document.createElement(\"div\");\n      progressContainer.id = \"progressContainer\";\n      progressContainer.isMetaNode = true;\n      // progressContainer.style['pointer-events'] = \"none\";\n      progressContainer.style.zIndex = 1000;\n      document.body.appendChild(progressContainer);\n      lively.setGlobalPosition(progressContainer, pt(50, 50));\n    }\n\n    var progress = await (<lively-progress></lively-progress>);\n    progressContainer.append(progress);\n    lively.setExtent(progress, pt(300, 20));\n    progress.textContent = label;\n    return progress;\n  }\n\n  static allProperties(obj, result) {\n    result = result || {};\n    Object.getOwnPropertyNames(obj).forEach(name => {\n      result[name] = obj.constructor.name;\n    });\n    if (obj.__proto__) {\n      lively.allProperties(obj.__proto__, result);\n    }\n    return result;\n  }\n\n  static templateClassNameToTemplateName(className) {\n    return className.replace(/[A-Z]/g, ea => \"-\" + ea.toLowerCase()).replace(/^-/, \"\");\n  }\n\n  // Example code for looking up templates in links:\n  // Array.from(document.head.querySelectorAll(\"link\"))\n  //   .filter(ea => ea.getAttribute(\"rel\") == \"import\")\n  //   .map(ea => ea.href)\n  //   .find(ea => ea.endsWith(\"lively-digital-clock.html\"))\n\n  static async registerTemplate() {\n    var template = document.currentScript.ownerDocument.querySelector('template');\n    var clone = document.importNode(template.content, true);\n    var proto;\n    var className = template.getAttribute(\"data-class\");\n    if (className) {\n      // className = \"LivelyFooBar\"\n      let baseName = this.templateClassNameToTemplateName(className);\n      var url = await this.components.searchTemplateFilename(baseName + \".js\");\n      if (url) {\n        // console.log(\"Components: load module \" + url)\n        var module = await System.import(url);\n        proto = Object.create(module.prototype || module.default.prototype);\n      } else {\n        throw new Error(\"Components: could not find module for \" + baseName);\n      }\n    }\n    components.register(template.id, clone, proto);\n  }\n\n  static get eventListeners() {\n    if (!window.livelyEventListeners) {\n      window.livelyEventListeners = [];\n    }\n    return window.livelyEventListeners;\n  }\n\n  static set eventListeners(list) {\n    window.livelyEventListeners = list;\n  }\n\n  // Registration and deregistration of eventlisteners for run-time programming...\n  static addEventListener(domain, target, type, listener, options) {\n    this.eventListeners.push({ target: target, type: type, listener: listener, domain: domain, options: options });\n    target.addEventListener(type, listener, options);\n  }\n\n  static removeEventListener(domain, target, type, listener) {\n    this.eventListeners = this.eventListeners.filter(ea => {\n      if ((!target || ea.target === target) && (!type || ea.type == type) && (!listener || ea.listener === listener) && (!domain || ea.domain == domain)) {\n        // actually removing the event listener\n        // console.log(\"removeEventListener\", ea.target, ea.type, ea.listener)\n        ea.target.removeEventListener(ea.type, ea.listener, ea.options);\n        return false;\n      } else {\n        return true;\n      }\n    });\n  }\n\n  static openSearchWidget(text, worldContext, searchContext = document.body) {\n    if (lively.preferences.get(\"FileIndex\")) {\n      this.openComponentInWindow(\"lively-index-search\").then(comp => {\n        var pattern = text.replace(/[.?*+^$[\\]\\\\(){}|-]/g, \"\\\\$&\");\n        comp.search(pattern);\n        lively.setExtent(comp.parentElement, pt(1000, 700));\n        comp.focus();\n      });\n    } else {\n      var container = lively.query(searchContext, \"lively-container\");\n      this.openComponentInWindow(\"lively-search\", undefined, undefined, worldContext).then(comp => {\n        if (container) {\n          // search in the current repository\n          var url = container.getURL().toString();\n          var base = lively4url.replace(/[^/]*$/, \"\");\n          if (url.match(base)) {\n            var repo = url.replace(base, \"\").replace(/\\/.*$/, \"\");\n            comp.searchRoot = repo;\n          }\n        }\n        comp.searchFile(text);\n        comp.focus();\n      });\n    }\n\n    // #Depricated\n    // var comp = document.getElementsByTagName(\"lively-search-widget\")[0];\n    // if (comp.isVisible && text == comp.query) {\n    //   comp.isVisible = false;\n    // } else {\n    //   comp.isVisible = true;\n    //   comp.search(text, true);\n    // }\n  }\n\n  static hideSearchWidget() {\n    console.log('hide search widget');\n    document.body.querySelectorAll(\"lively-search\").forEach(ea => ea.parentElement.remove());\n  }\n\n  static openIssue(number) {\n    // #TODO customize or derive github issue url, making it context cependend\n    window.open(\"https://github.com/LivelyKernel/lively4-core/issues/\" + number);\n  }\n\n  static openHelpWindow(text) {\n    this.openComponentInWindow(\"lively-help\").then(comp => {\n      comp.parentElement.style.width = \"850px\";\n      comp.parentElement.style.height = \"600px\";\n      comp.getHelp(text);\n    });\n  }\n\n  static async openComponentInWindow(name, globalPos, extent, worldContext, immediate = () => {}) {\n    worldContext = worldContext || document.body;\n\n    var w = await lively.create(\"lively-window\");\n    if (extent) {\n      lively.setExtent(w, extent);\n    }\n    if (!globalPos) {\n      let pos = lively.findPositionForWindow(worldContext);\n      globalPos = lively.getGlobalPosition(worldContext).addPt(pos);\n    }\n\n    return components.openIn(worldContext, w, true).then(w => {\n      lively.setGlobalPosition(w, globalPos);\n\n      const element = document.createElement(name);\n      immediate(element)\n\n      return components.openIn(w, element).then(comp => {\n        components.ensureWindowTitle(comp, w);\n        return comp;\n      });\n    });\n  }\n\n  static openInWindowSync(element, globalPos, extent) {\n    const w = document.createElement(\"lively-window\");\n    w.preventFocusOnCreation = true;\n    document.body.append(w)\n    w.ensureInitialized()\n    \n    if (extent) {\n      lively.setExtent(w, extent);\n    }\n\n    if (!globalPos) {\n      const pos = lively.findPositionForWindow(document.body);\n      globalPos = lively.getGlobalPosition(document.body).addPt(pos);\n    }\n    lively.setGlobalPosition(w, globalPos);\n\n    w.append(element)\n    components.ensureWindowTitle(element, w);\n    \n    return w\n  }\n\n  static findPositionForWindow(worldContext) {\n    // this gets complicated: find a free spot starting top left going down right\n    var windows = Array.from(worldContext.querySelectorAll(\":scope > lively-window\"));\n    var offset = 20;\n    var pos;\n    var topLeft = pt(50, 50);\n\n    for (var i = 0; !pos; i++) {\n      let p1 = pt(i * offset, i * offset);\n      let p2 = pt((i + 1) * offset, (i + 1) * offset);\n      var found = windows.find(ea => {\n        // var ea = that; var i =0\n        var eaPos = lively.getGlobalPosition(ea).subPt(topLeft\n        // check if there is a window in direction bottom right\n        );return (p1.lessPt(eaPos) || p1.eqPt(eaPos)) && eaPos.lessPt(p2);\n      });\n      // no window is found... so place the next there\n      if (!found) pos = topLeft.addPt(pt(i * offset, i * offset));\n    }\n    return pos.subPt(lively.getGlobalPosition(worldContext));\n  }\n\n  // lively.openBrowser(\"https://lively4/etc/mounts\", true, \"Github\")\n\n\n  static async openBrowser(url, edit, patternOrPosition, replaceExisting, worldContext, useExisting) {\n    worldContext = worldContext || document.body;\n    \n    if (patternOrPosition && patternOrPosition.start) {\n      var locationObject = patternOrPosition;\n    } else if (patternOrPosition && patternOrPosition.line) {\n      var lineAndColumn = patternOrPosition;\n    } else {\n      var pattern = patternOrPosition;\n    }\n\n    if (!url || !url.match(/^[a-z]+:/)) url = lively4url;\n    var livelyContainer;\n    var containerPromise;\n    let existingFound = false;\n    if (replaceExisting) {\n      livelyContainer = Array.from(worldContext.querySelectorAll(\"lively-container\")).find(ea => ea.isSearchBrowser);\n    } else if (useExisting) {\n      const containers = Array.from(worldContext.querySelectorAll('lively-container')).filter(c => c.getAttribute('src') === url);\n      livelyContainer = containers.find(c => c.getAttribute('mode') === 'edit' === edit);\n      existingFound = !!livelyContainer;\n    }\n\n    var lastWindow = _.first(Array.from(worldContext.querySelectorAll(\"lively-window\")).filter(ea => ea.childNodes[0] && ea.childNodes[0].isSearchBrowser));\n\n    containerPromise = livelyContainer ? Promise.resolve(livelyContainer) : lively.openComponentInWindow(\"lively-container\", undefined, undefined, worldContext);\n\n    return containerPromise.then(comp => {\n      if (existingFound) {\n        if(comp.parentElement.isMinimized()) {\n          comp.parentElement.toggleMinimize();\n        }\n        comp.parentElement.focus();\n        comp.focus();\n        return;\n      }\n      livelyContainer = comp;\n      livelyContainer.hideNavbar();\n      comp.parentElement.style.width = \"950px\";\n      comp.parentElement.style.height = \"800px\";\n\n      if (lastWindow) {\n        lively.setPosition(comp.parentElement, lively.getPosition(lastWindow).addPt(pt(25, 25)));\n      }\n\n      if (edit) comp.setAttribute(\"mode\", \"edit\");\n      if (pattern) {\n        comp.isSearchBrowser = true;\n        comp.hideNavbar();\n      }\n      comp.focus();\n      return comp.followPath(url);\n    }).then(async () => {\n      if (edit) {\n        await livelyContainer.asyncGet(\"#editor\").then(async livelyEditor => {\n          var codeMirror = await livelyEditor.awaitEditor();\n\n          if (pattern) {\n            livelyEditor.find(pattern);\n          } else if (lineAndColumn) {\n\n            codeMirror.setSelection(\n              { line: lineAndColumn.line, ch: lineAndColumn.column }, \n              { line: lineAndColumn.line, ch: lineAndColumn.column + (lineAndColumn.selection ? +lineAndColumn.selection.length : 0) }\n            // #TODO ...\n            // ace.gotoLine(lineAndColumn.line, lineAndColumn.column)\n            );\n          } else if (locationObject) {\n            codeMirror.setSelection(locationObject.start, locationObject.end);\n          }\n          codeMirror.focus();\n          codeMirror.scrollIntoView(codeMirror.getCursor(), 200);\n        });\n      }\n      return livelyContainer;\n    });\n  }\n\n  static openDebugger() {\n    if (!window.lively4ChromeDebugger) {\n      return lively.notify(\"Please install Lively4Chrome Extension for debugger support.\");\n    }\n    window.lively4ChromeDebugger.getCurrentDebuggingTarget().then(res => {\n      // Use chrome.window.create to create an independent window, window.open does not work\n      window.lively4ChromeDebugger.createWindow({\n        url: lively4url + '/debugger.html?targetId=' + res.targetId,\n        width: 1000, left: parseInt((screen.width - 1000) / 2),\n        height: 750, top: parseInt((screen.height - 750) / 2),\n        type: 'popup'\n      }).catch(error => {\n        lively.notify(\"Unable to create new window for debugger.\");\n      });\n    });\n  }\n\n  static async openMarkdown(url, title = \"Markdown\", parameters = {}) {\n    var comp = await lively.openComponentInWindow(\"lively-markdown\", undefined, pt(1000, 800));\n    comp.setAttribute(\"url\", url);\n    var src = await fetch(url).then(r => r.text());\n    comp.parameters = parameters;\n    comp.setContent(src);\n    comp.parentElement.setAttribute(\"title\", title);\n    await comp.evaluated;\n\n    return comp;\n  }\n\n  static get(query) {\n    return document.querySelector(query);\n  }\n\n  static confirm(msg, customizeCB) {\n    return Dialog.confirm(msg, customizeCB);\n  }\n\n  static prompt(msg, value, customizeCB) {\n    return Dialog.prompt(msg, value, customizeCB);\n  }\n\n  static findWorldContext(element) {\n\n    if (!element) return document.body;\n    if (element.id == \"container-root\") return element;\n\n    if (!element.parentElement) {\n      // if (element.parentNode.host && element.parentNode.host.localName == \"lively-container\") {\n      //   return element.parentNode.host.getContentRoot()\n      // }\n      // ||  element.tagName == \"LIVELY-FIGURE\"\n      return element.parentNode; // shadow root\n    }\n\n    if (element.tagName == \"BODY\") {\n      return element;\n    } else {\n      return this.findWorldContext(element.parentElement);\n    }\n  }\n  \n  static findParentShadowRoot(element) {\n    if (!element) return ;\n    if (!element.parentElement) {\n      return element.parentNode; // shadow root\n    }\n    if (element.tagName == \"BODY\") {\n      return \n    } else {\n      return this.findWorldContext(element.parentElement);\n    }\n  }\n  \n  static findWorldContextHost(element) {\n    var shadowRoot = this.findParentShadowRoot(element)\n    if (shadowRoot) return shadowRoot.host\n  }\n\n  static isActiveElement(element) {\n    var activeElemnt = this.activeElement();\n    return this.allParents(activeElemnt, [], true).includes(element);\n  }\n\n  static activeElement(worldContext, type) {\n    worldContext = worldContext || document;\n    var element = worldContext.activeElement;\n    if (type && element.localName == type) return element;\n    if (element.shadowRoot && element.shadowRoot.activeElement) return this.activeElement(element.shadowRoot, type); // probe if we want to go deeper\n    return element;\n  }\n\n  static getSelection(worldContext, type) {\n    worldContext = worldContext || document;\n    var element = worldContext.activeElement;\n    var selection = worldContext.getSelection();\n    if (type && element.localName == type) return element;\n    if (element.shadowRoot && element.shadowRoot.activeElement) {\n      return this.getSelection(element.shadowRoot, type); // probe if we want to go deeper\n    }\n    return selection;\n  }\n\n  \n  static findWindow(element) {\n    if (element.isWindow) return element;\n    if (element.parentNode) return this.findWindow(element.parentNode);\n    if (element.host) return this.findWindow(element.host);\n    return document.body; // nothing found... just use the body\n  }\n\n  // lively.print(document)\n  static print(obj) {\n    var s = \"\" + obj + \"{\";\n    for (var i in obj) {\n      if (!(obj[i] instanceof Function) && obj[i] !== undefined) s += i + \": \" + obj[i] + \"\\n\";\n    }\n    s + \"}\";\n    return s;\n  }\n\n  static allKeys(obj) {\n    var keys = [];\n    for (var i in obj) {\n      if (obj.hasOwnProperty(i) || obj.__lookupGetter__(i)) {\n        keys.push(i);\n      }\n    }\n    return keys;\n  }\n\n  static methods(obj) {\n    return Object.getOwnPropertyNames(obj).filter(ea => {\n      var desc = Object.getOwnPropertyDescriptor(obj, ea);\n      return desc.value && _.isFunction(desc.value);\n    });\n  }\n\n  /*MD ## Events MD*/\n\n  static onUnload() {\n    // #TODO How to deal with multiple open lively pages?\n    // last closing site wins!\n    // #IDEA: we could versionize the local content and saving to it will merge in conflicting changes first? But for this to work, we would need a change history in our local storage, too?\n    persistence.current.saveLivelyContent();\n  }\n\n  /* Change Preference Callbacks */\n\n  static async onInteractiveLayerPreference(enabled) {\n    if (enabled) {\n      await System.import(\"src/client/interactive.js\");\n      InteractiveLayer.beGlobal();\n    } else {\n      if (window.InteractiveLayer) InteractiveLayer.beNotGlobal();\n    }\n  }\n\n  static async onShowFixedBrowserPreference(enabled) {\n    if (!this.loadedAsExtension && enabled) {\n      this.showMainContainer();\n    } else {\n      var content = document.querySelector(\"#main-content\");\n      if (content && content.parentElement.isWindow) {\n        content.parentElement.remove();\n      }\n    }\n  }\n\n  static async onShowDocumentGridPreference(enabled) {\n    if (enabled) {\n      ViewNav.showDocumentGrid(document.body);\n    } else {\n      ViewNav.hideDocumentGrid(document.body);\n    }\n  }\n\n  static async onOfflineFirstPreference(enabled) {\n    // store it where the service worker can see it... before we are loaded\n    lively.focalStorage.setItem(\"swxOfflineFirst\", enabled);\n    if (navigator.serviceWorker && navigator.serviceWorker.controller) {\n      navigator.serviceWorker.controller.postMessage({\n        type: 'config',\n        option: \"offlineFirst\",\n        value: enabled\n      });\n    } else {\n      console.log(\"onOfflineFirstPreference: navigator.serviceWorker.controller not there?\");\n    }\n  }\n\n  static async onBodyPositionPreference(pos) {\n    lively.setPosition(document.body, pos);\n  }\n  \n  static async onEnableAEDebuggingPreference(debuggingEnabled) {\n    const brokenModules = [\"Connection.js\", \"triples.js\", \"knot-view.js\"]\n    const activeAEModules = Object.values(System.loads).filter((o) => {\n      try{\n        return o.metadata.pluginLoad.metadata.enable === \"aexpr\" && ! brokenModules.some(m => o.key.includes(m));\n      } catch (e) {\n        return false;\n      }\n    });\n    for(const module of activeAEModules) {\n      await lively.unloadModule(module.key);\n    }\n    for(const module of activeAEModules) {\n      await lively.reloadModule(module.key, true, true);\n    }\n    // lively.notify(\"Changed AE debugging: \" + debuggingEnabled);\n  }\n\n  static async onBodyScrollPreference(pos) {\n    this.deferredUpdateScroll = pos;\n  }\n\n  static async onFileIndexPreference(bool) {\n    if (bool) {\n      this.updateFileIndexDirectory(lively4url + \"/\");\n    }\n  }\n\n  static async updateFileIndexDirectory(url) {\n    return new Promise(resolve => {\n      if (!this.fileIndexWorker) {\n        this.fileIndexWorker = new SystemjsWorker(\"src/worker/fileindex-worker.js\");\n      }\n\n      // fuck it this might break when called concurrently...\n      this.fileIndexWorker.onmessage = evt => {\n        if (evt.data.message == \"updateDirectoryFinished\") {\n          resolve();\n        }\n      };\n      this.fileIndexWorker.postMessage({ message: \"updateDirectory\", url: url });\n    });\n  }\n\n  /*\n   * Continousely send a message to swx to keep it alive, since it boots slowly...\n   */\n  static async onSWXKeepAlivePreference(bool) {\n    while (lively.preferences.get(\"SWXKeepAlive\")) {\n      if (navigator.serviceWorker && navigator.serviceWorker.controller) {\n        navigator.serviceWorker.controller.postMessage({\n          type: 'meta',\n          command: 'keepalive'\n        });\n      }\n      // console.log(\"swx keep alive\")\n      await lively.sleep(1000);\n    }\n  }\n\n  /*\n   * keep detailed bootlog in indexdb for later visualization and analysis\n   */\n  static async onLogBootPreference(bool) {\n    localStorage[\"logLivelyBoot\"] = bool;\n  }\n\n  /*MD ### Focus MD*/\n\n  static isGlobalKeyboardFocusElement(element) {\n    return element === document.body || element && element.id == \"copy-hack-element\" || element && element.tagName == \"LIVELY-CONTAINER\" && element.shadowRoot && !element.shadowRoot.activeElement;\n  }\n\n  static hasGlobalFocus() {\n    return this.isGlobalKeyboardFocusElement(document.activeElement);\n  }\n\n  static globalFocus() {\n    // document.querySelector('#copy-hack-element').remove()\n    // var copyHack = document.querySelector('#copy-hack-element')\n    //   if (!copyHack) {\n    //     copyHack = document.createElement(\"input\")\n    //     lively.setPosition(copyHack, pt(0,0))\n    //     lively.setExtent(copyHack, pt(30,30))\n    //     copyHack.style.backgroundColor = \"red\"\n    //     copyHack.id = \"copy-hack-element\"\n    //     copyHack.isMetaNode = true\n    //     document.body.appendChild(copyHack)\n    //   }\n    // lively.focusWithoutScroll(copyHack)\n\n    this.focusWithoutScroll(document.body);\n  }\n\n  // #TODO: feature is under development and will ship in Chrome 64\n  // same as element.focus({ preventScroll : true}); ?\n  static focusWithoutScroll(element) {\n    if (!element) return;\n\n    //console.log(\"focusWithoutScroll \" + element, lively.stack().toString())\n    var scrollTop = document.scrollingElement.scrollTop;\n    var scrollLeft = document.scrollingElement.scrollLeft;\n    element.focus({ preventScroll: true });\n    // the focus scrolls as a side affect, but we don't want that\n    document.scrollingElement.scrollTop = scrollTop;\n    document.scrollingElement.scrollLeft = scrollLeft;\n    //console.log(\"scroll back \" + scrollTop + \" \" + scrollLeft )\n  }\n\n  static ensureID(element) {\n    var id = element.getAttribute(\"data-lively-id\");\n    if (!id) {\n      id = generateUUID();\n      element.setAttribute(\"data-lively-id\", id);\n    }\n    return id;\n  }\n  \n \n  \n  static deeepElementByID(id) {\n    if (!id) return;\n    for(var ea of lively.allElements(true)) {\n      if (ea && ea.getAttribute && ea.getAttribute(\"data-lively-id\") == id) {\n        return ea\n      }\n    }\n  }\n\n  static elementByID(id, worldContext, fallbackToDocument = true) {\n    if (!id) {\n      return;\n    }\n    if (!worldContext) {\n      if (fallbackToDocument) {\n        worldContext = document;\n      } else {\n        return;\n      }\n    }\n\n    return worldContext.querySelector(`[data-lively-id=\"${id}\"]`);\n  }\n\n  static query(element, query) {\n    // lively.showElement(element)\n    var result = element.querySelector(query);\n    if (!result && element.isWindow) return; // scope that search to windows\n    if (!result && element.parentElement) result = this.query(element.parentElement, query);\n    if (!result && element.parentNode) result = this.query(element.parentNode, query);\n    if (!result && element.host && element.host.querySelector) result = this.query(element.host, query);\n    return result;\n  }\n\n  static waitOnQuerySelector(element, selector, maxtime) {\n    maxtime = maxtime || 10000;\n    var startTime = Date.now();\n    return new Promise((resolve, reject) => {\n      var check = () => {\n        var found = element.querySelector(selector);\n        if (found) resolve(found);else if (Date.now() - startTime > maxtime) reject();else setTimeout(check, 100);\n      };\n      check();\n    });\n  }\n\n  static elementToCSSName(element) {\n    try {\n      return element.localName + (element.id ? \"#\" + element.id : \"\") + (element.classList && element.classList.length > 0 ? \".\" + Array.from(element.classList).join(\".\") : \"\");\n    } catch (e) {\n      return \"\"; // silent fail.... \n    }\n  }\n\n  static async openPart(partName, worldContext = document.body) {\n    var data = await fetch(`${lively4url}/src/parts/${partName}.html`).then(t => t.text());\n    var element = lively.clipboard.pasteHTMLDataInto(data, worldContext);\n    element.setAttribute(\"data-lively-part-name\", partName);\n    return element;\n  }\n\n  static queryAll(element, query) {\n    var all = new Set();\n    element.querySelectorAll(query).forEach(ea => all.add(ea));\n    var containers = element.querySelectorAll(\"lively-container\");\n    containers.forEach(ea => {\n      ea.shadowRoot.querySelectorAll(query).forEach(ea => all.add(ea));\n    });\n    return Array.from(all);\n  }\n\n  static gotoWindow(element, justFocuWhenInBounds) {\n    element.focus();\n\n    if (!justFocuWhenInBounds) {\n      var elementBounds = lively.getGlobalBounds(element);\n      var windowBounds = rect(0, 0, window.innerWidth, window.innerHeight);\n      if (!windowBounds.containsRect(elementBounds)) {\n        // only do somthing if we are not visible\n        document.scrollingElement.scrollTop = 0;\n        document.scrollingElement.scrollLeft = 0;\n        var offset = pt(window.innerWidth, window.innerHeight).subPt(lively.getExtent(element));\n\n        var pos = lively.getPosition(element).subPt(offset.scaleBy(0.5));\n        lively.setPosition(document.body, pos.scaleBy(-1), undefined, 1000);\n      }\n    }\n  }\n\n  //  lively.allPreferences()\n  static allPreferences() {\n    var regexp = /on(.*)Preference/;\n    return Object.getOwnPropertyNames(lively).filter(ea => ea.match(regexp)).map(ea => ea.match(regexp)[1]);\n  }\n\n  static async bench(func) {\n    var s = Date.now();\n    await func();\n    return Date.now() - s;\n  }\n\n  static get haloService() {\n    return HaloService;\n  }\n  \n  static get halo() {\n    return HaloService.instance;\n  }\n\n  static onMouseDown(evt) {\n    // lively.showEvent(evt)\n    lively.lastScrollTop = document.scrollingElement.scrollTop;\n    lively.lastScrollLeft = document.scrollingElement.scrollLeft;\n  }\n\n  static async onContextMenu(evt) {\n    \n    if (evt.button == 0 && evt.ctrlKey) {\n      evt.preventDefault();\n      evt.stopPropagation();\n      return // disable ctrl + left click under MacOS\n    }\n    \n    if (!evt.shiftKey) {\n      // evt.ctrlKey\n      evt.preventDefault();\n      evt.stopPropagation();\n\n      // #Hack #Workaround weired browser scrolling behavior\n      if (lively.lastScrollLeft || lively.lastScrollTop) {\n        document.scrollingElement.scrollTop = lively.lastScrollTop;\n        document.scrollingElement.scrollLeft = lively.lastScrollLeft;\n      }\n\n      if (self.__preventGlobalContextMenu__) {\n        return;\n      }\n\n      var link = Array.from(evt.composedPath()).find(ea => ea.localName == \"a\");\n      if (link) {\n        // #TODO can we shorten this or hide this context specific behavior, \n        // e.g. asking a link for href in the \"context\" of a lively container should\n        // produce the following behavior! #ContextJS #UseCase \n        var url = link.getAttribute(\"href\");\n        if (!url) return;\n        var container = await lively.query(link, \"lively-container\");\n        if (!url.match(/^[a-zA-Z0-9]+:/)) {\n          if (container) {\n            url = container.getURL().toString().replace(/[^/]*$/, \"\") + url;\n          }\n        }\n        var items = [];\n        if (container) {\n          items.push([\"follow\", () => {\n            container.followPath(url);\n          }]);\n        }\n        items.push([\"open in window\", () => {\n          lively.openBrowser(url);\n        }]);\n        items.push([\"edit in window\", () => {\n          lively.openBrowser(url, true);\n        }]);\n        var menu = new lively.contextmenu(this, items);\n        menu.openIn(document.body, evt, this);\n      } else {\n        lively.openContextMenu(document.body, evt);\n      }\n      return false;\n    }\n  }\n\n  static halt(time = 1000) {\n    window.setTimeout(() => {\n      debugger;\n    }, time);\n  }\n\n  static async sleep(time = 1000) {\n    return wait(time);\n  }\n\n  // sleep until the system is not as busy \n  static async rest(max_idle_time = 50, waited=0, log=false) {\n    var time = performance.now()\n    await lively.sleep(0)\n    var delta = performance.now() - time \n    if (log) {\n        console.log(\"rested for \" + delta + \"ms\")\n    }\n    if (delta > max_idle_time) {\n      return this.rest(max_idle_time, waited + delta, log)\n    }\n    return waited + delta\n  }\n  \n  // check something, and sleep and check again... stop after found or timeout\n  // \"when in doubt let it tick\"\n  static async sleepUntil(cb, time = 5000, step = 50) {\n    var timeout;\n    lively.sleep(time).then(() => {\n      timeout = true;\n    });\n    var result;\n    while (!result && !timeout) {\n      result = cb();\n      await lively.sleep(step);\n    }\n    return result;\n  }\n\n  static async time(func) {\n    var start = performance.now();\n    if (func) {\n      await func();\n    }\n    return performance.now() - start;\n  }\n\n  // #transformation #TODO #BUG: if we name omitFn 'omit', the omit method from underscore is accessed as this reference!\n  // this might be due to rewriting (either var recorder or aexprs)\n  static stack({ debug = false, log = false, omitFn = lively.stack, max = Infinity } = {}) {\n    let stack = new Stack({ omitFn, max });\n\n    if (log) {\n      console.warn(stack);\n    }\n    if (debug) {\n      debugger;\n    }\n\n    return stack;\n  }\n\n  static _allElements(deep = false, root = document.body, all = new Set()) {\n    if (deep && root.shadowRoot) {\n      this._allElements(deep, root.shadowRoot, all);\n    }\n    root.querySelectorAll(\"*\").forEach(ea => {\n      if (deep && ea.shadowRoot) {\n        this._allElements(deep, ea.shadowRoot, all);\n      }\n      all.add(ea);\n    });\n    all.add(root);\n    return all;\n  }\n\n  static allElements(deep = false, root = document.body, all = new Set()) {\n    const globalRoots = [document.body, document.documentElement, document.head]\n    if (self.__gs_sources__ && globalRoots.includes(root)) {\n      self.__gs_sources__.sources.forEach(source => lively._allElements(deep, source.editor, all))\n    }\n    return lively._allElements(deep, root, all)\n  }\n\n  static allTextNodes(root) {\n    var n,\n        result = [],\n        walk = document.createTreeWalker(root, NodeFilter.SHOW_TEXT, null, false);\n    while (n = walk.nextNode()) {\n      result.push(n);\n    }\n    return result;\n  }\n\n  static findAllElements(filterFunc, deep) {\n    return Array.from(this.allElements(deep)).filter(filterFunc);\n  }\n\n  static allParents(element, parents = [], deep = false) {\n    if (!element) return parents;\n    if (!element.parentElement) {\n      if (deep && element.parentNode) {\n        if (element.parentNode === document) {\n          return parents;\n        }\n        parents.push(element.parentNode);\n        parents.push(element.parentNode.host);\n\n        return this.allParents(element.parentNode.host, parents, deep);\n      } else {\n        return parents;\n      }\n    }\n    parents.push(element.parentElement);\n    this.allParents(element.parentElement, parents, deep);\n    return parents;\n  }\n  \n  static findParent(element, condition, { deep = false, withSelf = false } = {}) {\n    return this.allParents(element, withSelf ? [element] : [], deep).find(condition)\n  }\n  \n  static ancestry(element) {\n    // return [start, ...lively.allParents(start, undefined, true)];\n    if (!element) {\n      return [];\n    }\n\n    function ancestryFromEvent(target) {\n      if (!(target instanceof EventTarget)) {\n        return [target, lively.allParents(target, undefined, true)];\n      }\n\n      let elements = [];\n\n      const getAncestryEvent = new CustomEvent('getAncestry');\n      const cb = evt => elements = evt.composedPath();\n      try {\n        target.addEventListener('getAncestry', cb);\n        target.dispatchEvent(getAncestryEvent);\n      } finally {\n        target.removeEventListener('getAncestry', cb);\n      }\n\n      return elements;\n    }\n\n    const parents = [];\n    let localAncestry;\n    do {\n      localAncestry = ancestryFromEvent(element);\n      parents.push(...localAncestry);\n      /* if we started in a shadowroot as non-slotted element, we have to look outside further*/\n    } while (localAncestry.last instanceof ShadowRoot && (element = localAncestry.last.host));\n\n    return parents;\n  }\n  \n  static offsetAncestry(element) {\n    if (!element) {\n      return [];\n    }\n\n    const parents = [];\n    let parent = element;\n\n    do {\n      parents.push(parent);\n    } while (parent = parent.offsetParent);\n\n    return parents;\n  }\n\n  /* test if element is in DOM */\n  static isInBody(element) {\n    return this.isInElement(element, document.body)\n  }\n\n  static isInElement(element, otherElement) {\n    return this.allParents(element, undefined, true).includes(otherElement);\n  }\n\n  \n  static showHalo(element) {\n    window.that = element;\n    HaloService.showHalos(element);\n  }\n\n  static swxURL(url) {\n    var m = url.toString().match(/^([a-zA-Z0-9]+)\\:\\/?\\/?(.*)$/);\n    if (!m) {\n      throw new Error(\"coudl not convert url to an swx form: \" + url);\n    }\n    return \"https://lively4/scheme/\" + m[1] + \"/\" + m[2];\n  }\n\n  static allElementsFromPoint(pos, root = document, visited = new Set()) {\n    var result = [];\n    var elements = root.elementsFromPoint(pos.x, pos.y\n    // this is a workaround of the issue that elementsFromPoint contains parent elements...\n\n    );elements.filter(e => {\n      const notYetVisited = !visited.has(e);\n      visited.add(e);\n      return notYetVisited;\n    }).forEach(ea => {\n      if (ea.shadowRoot && ea.shadowRoot.elementsFromPoint) {\n        var shadowRootElements = this.allElementsFromPoint(pos, ea.shadowRoot, visited);\n        result.push(...shadowRootElements);\n      }\n      result.push(ea);\n    });\n\n    return result;\n  }\n\n  static registerSWXHandshake() {\n\n    if (!navigator.serviceWorker) {\n      console.warn(\"[lively] registerSWXHandshake fail: no serviceWorker found\");\n      return;\n    }\n    lively.removeEventListener(\"handshake\", navigator.serviceWorker);\n    lively.addEventListener(\"handshake\", navigator.serviceWorker, \"message\", async evt => {\n      try {\n        if (!evt.data.name || !evt.data.name.match(/swx:started/)) return; // not for me\n\n        if (!evt.ports[0]) {\n          console.warn(\"registerSWXHandshake got message... but could not answer\");\n          return;\n        }\n        console.log(\"[lively] SWX started\");\n        evt.ports[0].postMessage({\n          name: \"client:handshake\"\n        });\n      } catch (err) {\n        evt.ports[0].postMessage({ error: err });\n      }\n    });\n  }\n\n  static headersToJSO(headers) {\n    var o = {};\n    for (var [k, v] of headers.entries()) {\n      o[k] = v;\n    }\n    return o;\n  }\n\n  static registerSWXFetchHandler() {\n\n    if (!navigator.serviceWorker) {\n      console.warn(\"[lively] registerSWXFetchHandler faile: no serviceWorker found\");\n      return;\n    }\n    lively.removeEventListener(\"proxy\", navigator.serviceWorker);\n    lively.addEventListener(\"proxy\", navigator.serviceWorker, \"message\", async evt => {\n      try {\n        if (!evt.data.name || !evt.data.name.match('swx:proxy:')) return; // not for me\n\n        let url = evt.data.url;\n        if (!evt.ports[0]) {\n          console.warn(\"registerSWXFetchHandler got message... but could not answer\");\n          return;\n        }\n        if (evt.data.name == 'swx:proxy:GET') {\n          //  console.log(\"[lively] registerSWXFetchHandler FETCH SWX: \" + url)\n          var response = await fetch(url, {\n            method: \"GET\",\n            headers: Object.assign(evt.data.headers, {\n              \"lively-proxied\": \"true\"\n            })\n          });\n          evt.ports[0].postMessage({\n            content: await response.blob(),\n            ok: response.ok,\n            redirected: response.redirected,\n            status: response.status,\n            statusText: response.statusText,\n            type: response.type,\n            url: response.url,\n            headers: this.headersToJSO(response.headers)\n          });\n        }\n      } catch (err) {\n        evt.ports[0].postMessage({ error: err });\n      }\n    });\n  }\n  \n  static runDevCodeAndLog() {\n    // #Experimental #Live #FeedbackLoop\n    var devcode = document.body.querySelector(\"#DEVCODE\")\n    var devlog = document.body.querySelector(\"#DEVLOG\")\n    if (devcode && devlog) {\n      devlog.value = \"working on it... wait\"\n      lively.sleep(100).then( async () => {\n       var result = await devcode.boundEval(devcode.value) \n       var value =result.value\n       if (value.then) value = await value;\n       devlog.value = \"\" + value\n     })\n  }\n\n  }\n}\n\nif (!window.lively || window.lively.name != \"Lively\") {\n  window.lively = Lively;\n  console.log(window.lively4stamp, \"loaded lively intializer\");\n  // only load once... not during development\n  Lively.loaded();\n} else {\n  var oldLively = window.lively;\n  Lively.previous = oldLively;\n  Lively.fileIndexWorker = oldLively.fileIndexWorker;\n  window.lively = Lively;\n}\n\n// #TODO pull this this out into boot.js #Continue\nlively.registerSWXFetchHandler // #BUG this is to late for booting lively itself if not everthing is in the zip\n\n();lively.registerSWXHandshake();\n\nvar modulesExported = Lively.exportModules();\n"]}