{"version":3,"sources":["https://lively-kernel.org/lively4/lively4-drawio/src/components/tools/lively-container.js"],"names":["Morph","highlight","pt","ContextMenu","SyntaxChecker","components","cop","Favorites","files","Clipboard","debounce","fileEnding","replaceFileEndingWith","updateEditors","ViewNav","ScopedScripts","Container","target","childNodes","initialize","getAttribute","setAttribute","windowTitle","isSearchBrowser","contentChangedDelay","checkForContentChanges","lively","addEventListener","evt","onMouseDown","html","addDeepMousePressed","get","history","url","unwindAndFollowHistoryUntil","forwardHistory","unwindAndFollowForwardHistoryUntil","dispatchEvent","CustomEvent","path","edit","useBrowserHistory","viewOrEditPath","input","event","keyCode","onPathEntered","value","onclick","e","onFullscreen","registerButtons","onContextMenu","onKeyDown","hideCancelAndSave","hideControls","withAttributeDo","style","flex","livelyContentLoaded","editFile","followPath","becomeMainContainer","__ignoreUpdates","overflow","parentElement","toggleMaximize","hideTitlebar","zIndex","id","window","onpopstate","state","followInline","console","log","preferences","getURLParameter","undefined","lively4url","shiftKey","preventDefault","worldContext","document","body","contentIsEditable","isEditing","openContextMenu","toggleControls","isMaximized","isFullscreen","display","_","each","shadowRoot","querySelectorAll","ea","visibility","showCancelAndSave","_history","_forwardHistory","char","String","fromCharCode","charCode","ctrlKey","metaKey","onAccept","onSave","stopPropagation","switchBetweenJSAndHTML","ending","getPath","targetURLString","existingContainer","Array","from","find","container","gotoWindow","focus","openBrowser","then","browser","reloadModule","urlString","toString","unloadModule","System","import","m","notify","title","color","resetLoadingFailed","error","loadingFailed","replace","loadTestModule","testRunner","querySelector","group","clearTests","runTests","loadModule","module","err","getURL","modules","match","lastLoadingFailed","b","border","moduleName","text","slice","details","openTemplateInstance","name","comp","openComponentInWindow","livelyExample","onApply","filename","foundTemplate","searchTemplateFilename","onHome","clearNavbar","onSync","createComponent","compWindow","openInWindow","w","setPosition","serverURL","setServerURL","repo","setRepository","sync","onEdit","onCancel","unsavedChanges","confirm","setPath","onUp","urlInHistory","pop","push","onBack","length","lastBackButtonClicked","Date","now","last","halo","onBodyMouseDown","onForward","onBrowse","onDependencies","tree","dataName","d","setTreeData","findDependedModulesGraph","setExtent","onSaveAs","newPath","prompt","result","fetch","method","lastVersion","headers","saveEditsInView","contentIsTemplate","sourceCode","urlInTemplate","getSourceCode","editor","currentEditor","getValue","doNotQuit","saveFile","setURL","LastURL","templateSourceCode","updateTemplate","updateCSS","updateOtherContainers","pathname","testRegexp","checked","findDependedModules","forEach","showNavbar","sleep","allElements","filter","localName","href","parent","remove","appendChild","warn","updateFavInfo","starIcon","has","classList","add","onToggleOptions","contains","onFavorite","toggle","onBeautify","lastText","beautifulText","options","global","js_beautify","css_beautify","html_beautify","setText","onDelete","deleteFile","urls","includes","names","map","decodeURI","r","status","update","renameFile","base","newName","newURL","moveFile","onNewfile","newfile","type","content","fileName","onNewdirectory","onVersions","toggleVersions","clear","getContentRoot","innerHTML","appendMarkdown","renderTimeStamp","md","create","getDir","bind","setContent","presentation","startPresentation","lastPage","gotoSlideAt","wasContentEditable","contentEditable","preserveContentScroll","scrollTop","scrollToAnchor","anchor","codeMirror","asyncGet","root","pageNumberMatch","parseInt","element","textContent","node","allTextNodes","previousElementSibling","slide","allParents","setSlide","offset","getGlobalPosition","subPt","y","appendLivelyMD","appendScript","scriptElement","default","layers","openPromises","Promise","resolve","reject","script","createElement","beGlobal","src","onload","all","beNotGlobal","onerror","withLayers","appendHtml","d3","loadJavaScriptThroughDOM","ScopedD3","updateCurrentBodyAndURLFrom","nodes","parseHTML","appendTemplate","fixLinks","tagName","block","highlightBlock","loadUnresolved","clipboard","initializeElements","enable","setTimeout","resetContentChanges","observeHTMLChanges","appendCSV","table","setFromCSV","loadByName","normalizeURL","json","location","host","open","donotfollowpath","lastPath","opts","pushState","isURL","URL","encodeURI","getEditor","editorType","currentEditorType","livelyEditor","awaitEditor","hideToolbar","livelyCodeMirror","Error","enableAutocompletion","getDoitContext","that","doSave","getLivelyCodeMirror","realAceEditor","checkForEditor","thumbnailFor","listingForDirectory","render","statFile","JSON","parse","contents","index","sourceContent","fileBrowser","openIn","setMainAction","setMainDirectoryAction","catch","paths","normalize","setPathAttributeAndInput","donotrender","viewNav","disable","isdir","other","markdown","currentSlideNumber","anchorMatch","resolvedURL","swxURL","format","getEnding","protocol","isPicture","isVideo","resp","contentType","sourceCountent","navigateToName","baseURL","nextURL","hideNavbar","getExtent","x","onClick","navbar","contextURL","show","showsControls","showControls","editPicture","containerContent","containerEditor","onTextChanged","session","setOptions","mode","tabSize","useSoftTabs","changeModeForFile","selection","moveCursorTo","lineWidth","setWrapLimit","renderer","setPrintMarginColumn","setTargetModule","getHTMLSource","livelyPrepareSave","saveSource","source","saveHTML","saveMarkdown","htmlAsMarkdownSource","contentElement","livelySource","contentChanged","textChanged","localizePosition","pos","offsetBounds","getBoundingClientRect","left","top","selector","maxtime","startTime","check","found","onMutation","mutations","observer","isPersisting","record","indicator","backgroundColor","mutationObserver","disconnect","MutationObserver","observe","childList","subtree","characterData","attributes","lastChecked","oldActiveElement","activeElement","currentSource","lastSource","updateChangeIndicator","createLink","link","livelyAllowsSelection","composedPath","livelyAcceptsDrop","livelyPreMigrate","oldContentScroll","oldScrollInfo","getScrollInfo","oldCursor","getCursor","oldFocused","livelyTarget","markdownElement","livelyMigrate","isMigrating","otherCodeMirror","range","getRange","getScrollTop","thisCodeMirror","setScrollTop","setRange","setScrollInfo","setCursor"],"mappings":"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","file":"lively-container.js","sourcesContent":["import Morph from 'src/components/widgets/lively-morph.js';\nimport highlight from 'src/external/highlight.js';\nimport {pt} from 'src/client/graphics.js';\nimport ContextMenu from 'src/client/contextmenu.js';\nimport SyntaxChecker from 'src/client/syntax.js';\nimport components from \"src/client/morphic/component-loader.js\";\nimport * as cop  from \"src/client/ContextJS/src/contextjs.js\";\nimport Favorites from 'src/client/favorites.js';\n\nimport files from \"src/client/files.js\"\n\n\n//import ScopedScripts from \"src/client/scoped-scripts.js\";\nlet ScopedScripts; // lazy load this... #TODO fix #ContextJS #Bug actual stack overflow\n\nimport Clipboard from \"src/client/clipboard.js\";\nimport { debounce, fileEnding, replaceFileEndingWith, updateEditors} from \"utils\";\nimport ViewNav from \"src/client/viewnav.js\"\n\nexport default class Container extends Morph {\n  \n  get target() { return this.childNodes[0] }\n\n  initialize() {\n    \n    // this.shadowRoot.querySelector(\"livelyStyle\").innerHTML = '{color: red}'\n\n    // there seems to be no <link ..> tag allowed to reference css inside of templates\n    // files.loadFile(lively4url + \"/templates/livelystyle.css\").then(css => {\n    //   this.shadowRoot.querySelector(\"#livelySt\\yle\").innerHTML = css\n    // })\n    if (!this.getAttribute(\"mode\")) {\n      this.setAttribute(\"mode\", \"show\")\n    }\n    \n    this.windowTitle = \"Browser\";\n    if (this.isSearchBrowser) {\n      this.windowTitle = \"Search Browser\";\n    }\n\n    this.contentChangedDelay = (() => {\n        this.checkForContentChanges()\n      })::debounce(1000);\n\n    lively.addEventListener(\"Container\", this, \"mousedown\", evt => this.onMouseDown(evt));\n    \n    lively.html.addDeepMousePressed(this.get(\"#back\"), () => this.history(), (evt, url) => {\n      this.unwindAndFollowHistoryUntil(url)\n    })\n    lively.html.addDeepMousePressed(this.get(\"#forward\"), () => this.forwardHistory(), (evt, url) => {\n      this.unwindAndFollowForwardHistoryUntil(url)\n    })\n    \n    this.addEventListener(\"extent-changed\", function(evt) {\n      if (this.target) {\n        this.target.dispatchEvent(new CustomEvent(\"extent-changed\"));\n      }\n    });\n\n    // #TODO continue here, halo selection and container do now work yet\n    // var halos = halo.halo && halo.halo[0];\n    // if (halos)\n    //   halos.registerBodyDragAndDrop(this); // for content selection\n    \n    \n    let path, edit;\n    if (!this.useBrowserHistory()) {\n    \tpath = this.getAttribute(\"src\");\n    \tedit = this.getAttribute(\"mode\") == \"edit\"\n    }\n    this.viewOrEditPath(path, edit)\n   \n    \n    // #TODO very ugly... I want to hide that level of JavaScript and just connect \"onEnter\" of the input field with my code\n    var input = this.get(\"#container-path\");\n    input.addEventListener(\"keyup\", event => {\n      if (event.keyCode == 13) { // ENTER\n        this.onPathEntered(input.value);\n      }\n    });\n    this.get(\"#fullscreenInline\").onclick = (e) => this.onFullscreen(e);\n\n    this.registerButtons();\n\n    this.addEventListener('contextmenu',  evt => this.onContextMenu(evt), false);\n    // this.addEventListener('keyup',   evt => this.onKeyUp(evt));\n    this.addEventListener('keydown',   evt => this.onKeyDown(evt));\n    this.setAttribute(\"tabindex\", 0);\n    this.hideCancelAndSave();\n\n    if(this.getAttribute(\"controls\") ==\"hidden\") {\n      this.hideControls()\n    }\n    this.withAttributeDo(\"leftpane-flex\", value =>\n      this.get(\"#container-leftpane\").style.flex = value)\n    this.withAttributeDo(\"rightpane-flex\", value =>\n      this.get(\"#container-rightpane\").style.flex = value)\n  }\n  \n  viewOrEditPath(path, edit) {\n     if (path) {\n      if (edit) {\n        this.livelyContentLoaded = this.editFile(path);\n      } else {    \n        this.livelyContentLoaded = this.followPath(path)\n      }      \n    }\n  }\n\n  becomeMainContainer() {\n    this.__ignoreUpdates = true; // a hack... since I am missing DevLayers...\n    this.get('#container-content').style.overflow = \"visible\";\n    \n    this.parentElement.toggleMaximize()\n    this.parentElement.hideTitlebar()\n    this.parentElement.style.zIndex = 0\n    this.parentElement.setAttribute(\"data-lively4-donotpersist\",\"all\");\n    \n    this.id = 'main-content';\n    this.setAttribute(\"load\", \"auto\");\n      \n    let path, edit;\n    window.onpopstate = (event) => {\n        var state = event.state;\n        if (state && state.followInline) {\n          console.log(\"follow \" + state.path);\n          this.followPath(state.path);\n        }\n    };\n    path = lively.preferences.getURLParameter(\"load\");\n    edit = lively.preferences.getURLParameter(\"edit\");\n\n\n    // force read mode\n    if(this.getAttribute(\"mode\") == \"read\" && edit) {\n      path = edit;\n      edit = undefined;\n    }\n\n    if (!path || path == \"null\") {\n      path = lively4url + \"/\"\n    }\n\n    this.viewOrEditPath(path, edit) \n  }\n  \n  onContextMenu(evt) {\n    // fall back to system context menu if shift pressed\n    if (!evt.shiftKey) {\n      evt.preventDefault();\n      var worldContext = document.body; // default to opening context menu content globally\n      // opening in the content makes only save if that content could be persisted and is displayed\n      if (this.contentIsEditable() && !this.isEditing()) {\n        worldContext = this\n      }\n\t    lively.openContextMenu(document.body, evt, undefined, worldContext);\n\t    return false;\n    }\n  }\n\n  onFullscreen(evt) {\n    this.toggleControls();\n    if (!this.parentElement.isMaximized) return;\n    if ((this.isFullscreen() && !this.parentElement.isMaximized()) ||\n       (!this.isFullscreen() && this.parentElement.isMaximized()))  {\n      this.parentElement.toggleMaximize();\n      if ( this.parentElement.isMaximized()) {\n        this.parentElement.get(\".window-titlebar\").style.display = \"none\"\n        this.parentElement.style.zIndex = 0\n      } else {\n        this.parentElement.get(\".window-titlebar\").style.display = \"\"\n      }\n    }\n  }\n\n  useBrowserHistory() {\n    return this.getAttribute(\"load\") == \"auto\";\n  }\n\n  hideCancelAndSave() {\n    return;\n    _.each(this.shadowRoot.querySelectorAll(\".edit\"), (ea) => {\n      ea.style.visibility = \"hidden\";\n      ea.style.display = \"none\";\n    });\n    _.each(this.shadowRoot.querySelectorAll(\".browse\"), (ea) => {\n      ea.style.visibility = \"visible\";\n      ea.style.display = \"inline-block\";\n    });\n  }\n\n  showCancelAndSave() {\n    return;\n    _.each(this.shadowRoot.querySelectorAll(\".browse\"), (ea) => {\n      ea.style.visibility = \"hidden\";\n      ea.style.display = \"none\";\n    });\n    _.each(this.shadowRoot.querySelectorAll(\".edit\"), (ea) => {\n      ea.style.visibility = \"visible\";\n      ea.style.display = \"inline-block\";\n    });\n\n  }\n\n  history() {\n    if (!this._history) this._history = [];\n    return this._history;\n  }\n\n  forwardHistory() {\n    if (!this._forwardHistory) this._forwardHistory = [];\n    return this._forwardHistory;\n  }\n\n  onKeyDown(evt) {\n    var char = String.fromCharCode(evt.keyCode || evt.charCode);\n    if ((evt.ctrlKey || evt.metaKey /* metaKey = cmd key on Mac */) && char == \"S\") {\n      if (evt.shiftKey) {\n        this.onAccept();\n      } else {\n        this.onSave();\n      }\n      evt.preventDefault();\n      evt.stopPropagation();\n    } else if(evt.keyCode === 118) {\n      this.switchBetweenJSAndHTML();\n      evt.stopPropagation();\n      evt.preventDefault();\n    }\n  }\n\n  async switchBetweenJSAndHTML() {\n    const ending = this.getPath()::fileEnding();\n    if(ending === 'js' || ending === 'html') {\n      const targetURLString = this.getPath()::replaceFileEndingWith(ending === 'js' ? 'html' : 'js');\n      const existingContainer = Array.from(document.body.querySelectorAll('lively-container'))\n        .find(container => container.getPath() === targetURLString);\n      if(existingContainer) {\n        lively.gotoWindow(existingContainer.parentElement, true);\n        existingContainer.focus();\n      } else {\n        lively.openBrowser(targetURLString, true)\n          .then(browser => browser.focus());\n      }\n    }\n  }\n\n  reloadModule(url) {\n    console.log(\"reloadModule \" + url)\n    var urlString = url.toString()\n    lively.unloadModule(urlString)\n    return System.import(urlString).then( m => {\n        lively.notify({\n          title: \"Loaded \" + url, color: \"green\"});\n        this.resetLoadingFailed();\n      }, error => {\n        this.loadingFailed(url.toString().replace(/.*\\//,\"\"), error);\n      });\n  }\n\n  async loadTestModule(url) {\n    var testRunner = document.body.querySelector(\"lively-testrunner\");\n    if (testRunner) {\n      console.group(\"run test: \" + this.getPath());\n      testRunner.clearTests();\n      await this.reloadModule(url.toString())\n      testRunner.runTests();\n    } else {\n      lively.notify(\"no rest-runner to run \" + url.toString().replace(/.*\\//,\"\"));\n    }\n  }\n\n  loadModule(url) {\n    lively.reloadModule(\"\" + url, true).then(module => {\n      lively.notify(\"\",\"Module \" + url + \" reloaded!\", 3, null, \"green\");\n\n      this.resetLoadingFailed();\n    }, err => {\n      this.loadingFailed(url, err);\n    });\n  }\n\n  resetLoadingFailed() {\n    // that.resetLoadingFailed()\n    // System.import(urlString)\n    var urlString = this.getURL().toString();\n\n    // #TODO #babel6refactoring\n    if (lively.modules) {\n      if (urlString.match(/\\.js$/)) {\n        var m = lively.modules.module(urlString);\n      }\n    }\n    this.lastLoadingFailed = false;\n    var b = this.get(\"#apply\"); if (b) b.style.border = \"\";\n\n  }\n\n  loadingFailed(moduleName, err) {\n    this.lastLoadingFailed = err;\n    this.get(\"#apply\").style.border = \"2px solid red\";\n\n    lively.notify({\n      title: \"Error loading module \" + moduleName,\n      text:  err.toString().slice(0,200),\n      color: \"red\",\n      details: err});\n    console.error(err);\n  }\n\n  async openTemplateInstance(url) {\n      var name = url.toString().replace(/.*\\//,\"\").replace(/\\.((html)|(js))$/,\"\");\n      var comp = await lively.openComponentInWindow(name);\n      if (comp.livelyExample) comp.livelyExample(); // fill in with example content\n  }\n\n  async onApply() {\n    var url = this.getURL().toString();\n    var filename = url.replace(/.*\\//,\"\")\n    var foundTemplate = await lively.components.searchTemplateFilename(filename)\n    if (url == foundTemplate) {\n      this.openTemplateInstance(url);\n    } else if (url.match(/\\.js$/))  {\n      this.reloadModule(url);\n    } else {\n      lively.openBrowser(url);\n    }\n  }\n\n  onHome() {\n    this.clearNavbar()\n    this.followPath(lively4url)\n  }\n\n  async onSync(evt) {\n    var comp = lively.components.createComponent(\"lively-sync\");\n    var compWindow;\n    lively.components.openInWindow(comp).then((w) => {\n      compWindow = w;\n      lively.setPosition(w, lively.pt(100, 100));\n    });\n\n    var serverURL = lively4url.match(/(.*)\\/([^\\/]+$)/)[1];\n    comp.setServerURL(serverURL);\n    console.log(\"server url: \" + serverURL);\n    if (!this.getPath().match(serverURL)) {\n      return lively.notify(\"can only sync on our repositories\");\n    }\n    var repo =  this.getPath().replace(serverURL +\"/\", \"\").replace(/\\/.*/,\"\");\n    comp.setRepository(repo);\n    comp.sync();\n    // .then(() => compWindow.remove())\n  }\n\n\n  onPathEntered(path) {\n    this.followPath(path);\n  }\n\n\n  onEdit() {\n    this.setAttribute(\"mode\", \"edit\");\n    this.showCancelAndSave();\n    this.editFile();\n  }\n\n  onCancel() {\n    if (this.unsavedChanges()) {\n      if (!confirm(\"There are unsaved changes. Discard them?\")) {\n        return;\n      }\n    }\n    this.setAttribute(\"mode\", \"show\");\n    this.setPath(this.getPath());\n    this.hideCancelAndSave();\n\n  }\n\n  onUp() {\n    var path = this.getPath();\n    if (path.match(/(README|index)\\.((html)|(md))/))\n      // one level more\n      this.followPath(path.replace(/(\\/[^/]+\\/[^/]+$)|([^/]+\\/$)/,\"/\"));\n    else\n      this.followPath(path.replace(/(\\/[^/]+$)|([^/]+\\/$)/,\"/\"));\n  }\n  \n  unwindAndFollowHistoryUntil(urlInHistory) {\n    var url = \"nourl\"\n    while(url && url !== urlInHistory ) {\n      url= this.history().pop();\n      this.forwardHistory().push(url);\n    }\n    this.followPath(url)\n  }\n  \n  unwindAndFollowForwardHistoryUntil(urlInHistory) {\n    var url = \"nourl\"\n    while(url && url !== urlInHistory ) {\n      url= this.forwardHistory().pop();\n      this.history().push(url);\n    }\n    this.followPath(url)\n  }\n\n  onBack() {\n    if (this.history().length < 2) {\n      lively.notify(\"No history to go back!\");\n      return;\n    }\n    lively.lastBackButtonClicked = Date.now(); // can be used by scripts to prevent autoforwarding\n    var url = this.history().pop();\n    var last = _.last(this.history());\n    // lively.notify(\"follow \" + url)\n    this.forwardHistory().push(url);\n    this.followPath(last);\n  }\n\n  onMouseDown(evt) {\n    if (lively.halo) {\n      // close halo\n      lively.halo.onBodyMouseDown(evt, this);\n    }\n    evt.stopPropagation();\n    // evt.preventDefault();\n    Clipboard.onBodyMouseDown(evt)\n  }\n\n  onForward() {\n    var url = this.forwardHistory().pop();\n    if (url) {\n      this.followPath(url);\n    } else {\n      lively.notify(\"Could not navigate forward\");\n    }\n  }\n\n  async onBrowse() {\n    var url = this.getURL();\n    var comp = await lively.openComponentInWindow(\"lively-container\");\n    comp.editFile(\"\" + url);\n  }\n\n  async onDependencies() {\n    lively.openComponentInWindow(\"d3-tree\").then(tree => {\n      tree.dataName = function(d) {\n        return d.name.replace(/.*\\//,\"\").replace(/\\.js/,\"\")\n      }\n      tree.setTreeData(lively.findDependedModulesGraph(this.getURL().toString()))\n      lively.setExtent(tree.parentElement, pt(1200,800))\n      tree.parentElement.setAttribute(\"title\", \"Dependency Graph: \" + this.getURL().toString().replace(/.*\\//,\"\"))\n    })\n  }\n\n  async onSaveAs() {\n    var newPath = await lively.prompt(\"Save as..\", this.getPath())\n    if (newPath === undefined) return;\n\n    if (!this.isEditing()) {\n      lively.notify(\"save as \" + newPath)\n      var result = await fetch(newPath, {\n        method: \"get\"\n      })\n      this.lastVersion = result.headers.get(\"fileversion\")\n      this.saveEditsInView(newPath);\n      this.get(\"#container-path\").value = newPath\n      return;\n    }\n    lively.notify(\"Save as... in EditMode not implemented yet\");\n  }\n\n  contentIsTemplate(sourceCode) {\n    return this.getPath().match(/.*html/)\n      && sourceCode.match(/<template/)\n  }\n\n  async urlInTemplate(url) {\n    var filename = url.toString().replace(/.*\\//,\"\")\n    var foundTemplate = await lively.components.searchTemplateFilename(filename)\n    return url == foundTemplate\n  }\n\n  getSourceCode() {\n    var editor = this.get(\"#editor\")\n    if (!editor) return \"\"\n    return editor.currentEditor().getValue()\n  }\n\n  async onSave(doNotQuit) {\n    if (!this.isEditing()) {\n      this.saveEditsInView();\n      return;\n    }\n\n    if (this.getPath().match(/\\/$/)) {\n      files.saveFile(this.getURL(),\"\");\n\n      return;\n    }\n    this.get(\"#editor\").setURL(this.getURL());\n    await this.get(\"#editor\").saveFile()\n    this.__ignoreUpdates = true // #LiveProgramming #S3 don't affect yourself...\n    var sourceCode = this.getSourceCode();\n    var url = this.getURL()\n    url = url.toString().replace(/#.*/, \"\"); // strip anchors while saving and loading files\n    // lively.notify(\"!!!saved \" + url)\n    window.LastURL = url\n    if (await this.urlInTemplate(url)) {\n      lively.notify(\"update template\")\n      if (url.toString().match(/\\.html/)) {\n        // var templateSourceCode = await fetch(url.toString().replace(/\\.[^.]*$/, \".html\")).then( r => r.text())\n        var templateSourceCode = sourceCode\n\n        await lively.updateTemplate(templateSourceCode);\n\n      }\n    }\n    if (this.getPath().match(/.*css/)) {\n      this.updateCSS();\n    }\n    this.updateOtherContainers();\n\n    var moduleName = this.getURL().pathname.match(/([^/]+)\\.js$/);\n    if (moduleName) {\n      moduleName = moduleName[1];\n\n      const testRegexp = /((test\\/.*)|([.-]test)|([.-]spec))\\.js/;\n      if (this.lastLoadingFailed) {\n        console.log(\"last loading failed... reload\")\n        await this.reloadModule(url); // use our own mechanism...\n      } else if (this.getPath().match(testRegexp)) {\n        await this.loadTestModule(url);\n      } else if (this.get(\"#live\").checked) {\n        // lively.notify(\"load module \" + moduleName)\n        await this.loadModule(\"\" + url)\n        lively.findDependedModules(\"\" + url).forEach(ea => {\n          if (ea.match(testRegexp)) {\n            this.loadTestModule(ea);\n          }\n        })\n      } else {\n        lively.notify(\"ignore module \" + moduleName)\n      }\n    }\n    this.showNavbar();\n    \n    // something async... \n    lively.sleep(5000).then(() => {\n      this.__ignoreUpdates = false\n    })\n  }\n\n  updateCSS() {\n    var url = \"\" + this.getURL()\n    Array.from(lively.allElements(true))\n      .filter(ea => ea.localName == \"link\")\n      .filter(ea => ea.href == url)\n      .forEach(ea => {\n        var parent = ea.parentElement\n        ea.remove()\n        parent.appendChild(ea)\n        lively.notify(\"update css\",  ea.href)\n      })\n  }\n\n  updateOtherContainers() {\n    console.warn('updateOtherContainers')\n    var url = \"\" + this.getURL();\n    document.body.querySelectorAll('lively-container').forEach(ea => {\n      if (ea !== this && !ea.isEditing()\n        && (\"\" +ea.getURL()).match(url.replace(/\\.[^.]+$/,\"\"))) {\n        console.log(\"update container content: \" + ea);\n        ea.setPath(ea.getURL() + \"\");\n      }\n    });\n    \n    updateEditors(url, [this.get(\"lively-editor\")])\n  }\n  \n\n  async updateFavInfo() {\n    const starIcon = this.get('#favorite').querySelector('i');\n\n    if (await Favorites.has(this.getPath())) {\n      starIcon.classList.add('fa-star');\n      starIcon.classList.remove('fa-star-o');\n    } else {\n      starIcon.classList.add('fa-star-o');\n      starIcon.classList.remove('fa-star');\n    }\n  }\n  \n  async onToggleOptions() {\n    if (this.classList.contains('show-options')) {\n      this.classList.remove('show-options');\n    } else {\n      this.classList.add('show-options');\n    }\n  }\n  async onFavorite() {\n    await Favorites.toggle(this.getPath());\n    this.updateFavInfo()\n  }\n  async onBeautify() {\n    const ending = this.getPath()::fileEnding();\n    if (ending !== 'js' && ending !== 'css' && ending !== 'html') {\n      return;\n    }\n    \n    const editor = this.get(\"lively-editor\");\n    const text = editor.lastText;\n    let beautifulText;\n    const options = {\n      'end_with_newline': true,\n      'max_preserve_newlines': 3,\n      'js': {\n        'brace_style': ['collapse', 'preserve-inline'],\n        'indent_size': 2,\n        'wrap_line_length': 120,\n      },\n      'indent_size': 2,\n    }\n    \n    \n    // load the beatify code async... because they are big\n    if (ending === 'js') {\n      await System.import( \"src/client/js-beautify/beautify.js\")        \n      beautifulText = global.js_beautify(text, options);\n    } else if (ending === 'css') {\n      await System.import( \"src/client/js-beautify/beautify-css.js\")\n      beautifulText = global.css_beautify(text, options);\n    } else if (ending === 'html') {\n      await System.import(\"src/client/js-beautify/beautify-html.js\")\n      beautifulText = global.html_beautify(text, options);\n    }\n    editor.setText(beautifulText, true);      \n  }\n\n  onDelete() {\n    var url = this.getURL() +\"\";\n    this.deleteFile(url)\n  }\n\n  async deleteFile(url, urls) {\n    lively.notify(\"delelteFile \" + url)\n    if (!urls || !urls.includes(url)) {\n      urls = [url] // clicked somewhere else\n    }\n    if (!urls) urls = [url]\n    var names = urls.map(ea => decodeURI(ea.replace(/\\/$/,\"\").replace(/.*\\//,\"\")))\n    if (await lively.confirm(\"delete \" + urls.length + \" files: \" + names + \"?\")) {\n      for(let url of urls) {\n        var result = await fetch(url, {method: 'DELETE'})\n          .then(r => {\n            if (r.status !== 200) {\n              lively.error(\"Could not delete: \" + url)\n            }\n            r.text()\n          });  \n      }\n      this.get(\"#container-leftpane\").update()\n      \n      this.setAttribute(\"mode\", \"show\");\n      this.setPath(url.replace(/\\/$/, \"\").replace(/[^/]*$/, \"\"));\n      this.hideCancelAndSave();\n      \n      lively.notify(\"deleted \" + names);\n    }\n  }\n\n  async renameFile(url) {\n    url = \"\" + url\n    var base = url.replace(/[^/]*$/,\"\")\n    var name = url.replace(/.*\\//,\"\")\n\n    var newName = await lively.prompt(\"rename\", name)\n    if (!newName) {\n      lively.notify(\"cancel rename \" + name)\n      return\n    }\n    var newURL = base + newName\n    if (newURL != url) {\n      await files.moveFile(url, newURL)\n      \n      this.setPath(newURL);\n      this.hideCancelAndSave();\n\n      lively.notify(\"moved to \" + newURL);\n    }\n  }\n\n  onNewfile() {\n    this.newfile(this.getPath())\n  }\n\n  async newfile(path, type) {\n    \n    var content = \"here we go....\"\n    var ending = \"md2\" + type\n    if (type == \"drawio\") {\n      ending = \"xml\"\n      content = await fetch(lively4url + \"/media/drawio.xml\").then(r => r.text())\n    }\n    \n    path = path + \"newfile2.\" + ending \n    \n    var fileName = window.prompt('Please enter the name of the file', path);\n    if (!fileName) {\n      lively.notify(\"no file created\");\n      return;\n    }\n    await files.saveFile(fileName, content);\n    lively.notify(\"created \" + fileName);\n    \n    if (type == \"drawio\") {\n      this.setAttribute(\"mode\", \"show\");      \n    } else {\n      this.setAttribute(\"mode\", \"edit\");\n    }\n    \n    this.showCancelAndSave();\n\n    await this.followPath(fileName);\n    \n    \n    \n    this.focus()\n  }\n\n  async onNewdirectory() {\n    var fileName = window.prompt('Please enter the name of the directory', this.getPath());\n    if (!fileName) {\n      lively.notify(\"no file created\");\n      return;\n    }\n    await fetch(fileName, {method: 'MKCOL'});\n    lively.notify(\"created \" + fileName);\n    this.followPath(fileName);\n  }\n\n\n  onVersions() {\n    this.get(\"#editor\").toggleVersions();\n  }\n\n  onAccept() {\n    this.onSave().then((sourceCode) => {\n      this.setAttribute(\"mode\", \"show\");\n      this.setPath(this.getPath());\n      this.hideCancelAndSave();\n    });\n  }\n\n  clear() {\n    this.getContentRoot().innerHTML = '';\n    Array.from(this.get('#container-content').childNodes)\n      .filter( ea => ea.id !== \"container-root\")\n      .forEach(ea => ea.remove());\n    this.get('#container-editor').innerHTML = '';\n  }\n\n  async appendMarkdown(content, renderTimeStamp) {\n    var md = await lively.create(\"lively-markdown\", this.getContentRoot())\n    // md.setAttribute(\"data-lively4-donotpersist\", true) // will be thrown away after loading anyway, #DoesNotWork\n    if (renderTimeStamp && this.renderTimeStamp !== renderTimeStamp) {\n      return md.remove()\n    }\n    md.classList.add(\"presentation\") // for the presentation button\n    md.getDir = this.getDir.bind(this);\n    md.followPath = this.followPath.bind(this);\n    await md.setContent(content)\n    if (md.getAttribute(\"mode\") == \"presentation\") {\n      var presentation = await md.startPresentation()\n      if (this.lastPage) {\n        presentation.gotoSlideAt(this.lastPage)\n      }\n    }\n    if (this.wasContentEditable) {\n      md.contentEditable = true\n    }\n\n    // get around some async fun\n    if (this.preserveContentScroll !== undefined) {\n      this.get(\"#container-content\").scrollTop = this.preserveContentScroll\n      delete this.preserveContentScroll\n    }\n    \n    await lively.sleep(500) // wait for renderer to get some positions to scroll to....\n    \n    this.scrollToAnchor(this.anchor)\n  }\n\n  async scrollToAnchor(anchor) {\n    if (anchor) {\n      var name = decodeURI(anchor.replace(/#/,\"\")).replace(/\\n/g,\"\")\n      if (this.isEditing()) {\n        var codeMirror = await (await this.asyncGet(\"#editor\")).get('#editor');\n        codeMirror.find(name)\n        return\n      }\n      \n      // markdown specific ?\n      var md = this.getContentRoot().querySelector(\"lively-markdown\")\n      if (md) {\n        var root = md.shadowRoot\n      } else {\n        root = this.getContentRoot()\n      }\n          \n      var presentation = md && md.get(\"lively-presentation\")\n      var pageNumberMatch = name.match(/^\\@([0-9]+)$/)\n      if (presentation && pageNumberMatch) {\n        presentation.gotoSlideAt(parseInt(pageNumberMatch[1]))\n        return\n      }      \n      \n      // Special Case:\n      \n      // 1. search for exactly matching anchors\n      var element = root.querySelector(`a[name=\"${name}\"]`)\n      // 2. brute force search for headings with the text\n      if (!element) {\n        element = _.find(root.querySelectorAll(\"h1,h2,h3,h4\"), ea => ea.textContent == name)\n      }\n            \n      // 3. ok, try fulltext search\n      if (!element) { \n        \n        // search for the text nodes because they are the smallest entities and go to a nearby entity..\n        var node = lively.allTextNodes(root).find(ea => ea.textContent.match(name))\n        // going one level up will go to far... in most cases\n        // so we cannot do: element = node.parentElement \n        if (node) element = node.previousElementSibling // instead we go sideways\n      }\n      if (element) {\n        // var element = that\n        var slide = lively.allParents(element).find(ea => ea.classList.contains(\"lively-slide\"))\n        \n        if (presentation && slide) {\n          console.log('goto slide ', slide)\n          presentation.setSlide(slide)\n        }\n        \n        // await lively.sleep(500)\n        // a very hacky way to somehow find the position where to scroll\n        this.get(\"#container-content\").scrollTop = 0 \n        var offset = lively.getGlobalPosition(element).subPt(\n          lively.getGlobalPosition(this.get(\"#container-content\")))\n        this.get(\"#container-content\").scrollTop = offset.y\n      }\n    }    \n  }\n  \n  \n  appendLivelyMD(content, renderTimeStamp) {\n    content = content.replace(/@World.*/g,\"\");\n    content = content.replace(/@+Text: name=\"Title\".*\\n/g,\"# \");\n    content = content.replace(/@+Text: name=\"Text.*\\n/g,\"\\n\");\n    content = content.replace(/@+Text: name=\"Content.*\\n/g,\"\\n\");\n    content = content.replace(/@+Box: name=\"SteppingWordCounter\".*\\n/g,\"\\n\");\n    content = content.replace(/@+Text: name=\"MetaNoteText\".*\\n(.*)\\n\\n/g,  \"<i style='color:orange'>$1</i>\\n\\n\");\n    content = content.replace(/@+Text: name=\"WordsText\".*\\n.*/g,\"\\n\");\n\n    this.appendMarkdown(content, renderTimeStamp);\n  }\n\n  async appendScript(scriptElement) {\n    // #IDEA by instanciating we can avoid global (de-)activation collisions\n    // Scenario (A) There should be no activation conflict in this case, because appendScript wait on each other...\n    // Scenario (B)  #TODO opening a page on two licely-containers at the same time will produce such a conflict.\n    // #DRAFT instead of using ScopedScripts as a singleton, we should instanciate it.\n    if (!ScopedScripts) {\n      ScopedScripts = await System.import(\"src/client/scoped-scripts.js\").then(m => m.default)\n    }\n    var layers = ScopedScripts.layers(this.getURL(), this.getContentRoot());\n    ScopedScripts.openPromises = [];\n    return new Promise((resolve, reject)=> {\n      var root = this.getContentRoot();\n      var script   = document.createElement(\"script\");\n      script.type  = \"text/javascript\";\n\n      layers.forEach( ea => ea && ea.beGlobal());\n\n      if (scriptElement.src) {\n        script.src  = scriptElement.src;\n        script.onload = () => {\n          // #WIP multiple activations are not covered.... through this...\n          Promise.all(ScopedScripts.openPromises).then(() => {\n            layers.forEach( ea => ea && ea.beNotGlobal());\n            // console.log(\"ScopedScripts openPromises: \" + ScopedScripts.openPromises)\n            resolve();\n          }, reject);\n        };\n        script.onerror = reject;\n      }\n      script.text  = scriptElement.textContent;\n\n      cop.withLayers(layers, () => {\n        try {\n          root.appendChild(script);\n        } catch(e) {\n          console.error(e)  \n        }\n      });\n      if (!script.src) {\n        Promise.all(ScopedScripts.openPromises).then(() => {\n          layers.forEach( ea => ea && ea.beNotGlobal());\n          // console.log(\"ScopedScripts openPromises: \" + ScopedScripts.openPromises)\n          resolve();\n        }, reject);\n      }\n    })\n\n  }\n\n  async appendHtml(content, renderTimeStamp) {\n    if (renderTimeStamp && this.renderTimeStamp !== renderTimeStamp) {\n      return \n    }\n    // strip lively boot code...\n\n    // content = content.replace(/\\<\\!-- BEGIN SYSTEM\\.JS(.|\\n)*\\<\\!-- END SYSTEM.JS--\\>/,\"\");\n    // content = content.replace(/\\<\\!-- BEGIN LIVELY BOOT(.|\\n)*\\<\\!-- END LIVELY BOOT --\\>/,\"\");\n\n    if (content.match(\"<template\") && this.getPath().match(\"html$\")) {\n\n      content = \"<pre><code> \" + content.replace(/</g,\"&lt;\") +\"</code></pre>\"\n    }\n\n\n    if (content.match(/<script src=\".*d3\\.v3(.min)?\\.js\".*>/)) {\n      if (!window.d3) {\n        console.log(\"LOAD D3\");\n        // #TODO check if dealing with this D3 is covered now through our general approach...\n        await lively.loadJavaScriptThroughDOM(\"d3\", \"src/external/d3.v3.js\");\n      }\n\n      if (!window.ScopedD3) {\n        console.log(\"LOAD D3 Adaption Layer\");\n        await System.import(\"src/client/container-scoped-d3.js\")\n        ScopedD3.updateCurrentBodyAndURLFrom(this);\n        // return this.appendHtml(content) // try again\n      }\n    }\n\n    if (content.match(/<script src=\".*cola(\\.min)?\\.js\".*>/)) {\n        console.log(\"LOAD Cola\");\n        await lively.loadJavaScriptThroughDOM(\"cola\", \"src/external/cola.js\")\n    }\n\n    //  var content = this.sourceContent\n    try {\n      var root = this.getContentRoot();\n      var nodes = lively.html.parseHTML(content, document, true);\n      if (nodes[0] && nodes[0].localName == 'template') {\n      \t// lively.notify(\"append template \" + nodes[0].id);\n\t\t    return this.appendTemplate(nodes[0].id);\n      }\n      lively.html.fixLinks(nodes, this.getDir(),\n        (path) => this.followPath(path));\n      for(var ea of nodes) {\n        if (ea && ea.tagName == \"SCRIPT\") {\n          try {\n            await this.appendScript(ea);\n          } catch(e) {\n            console.error(e)\n          }\n        } else {\n          root.appendChild(ea);\n          if (ea.querySelectorAll) {\n            for(var block of ea.querySelectorAll(\"pre code\")) {\n              highlight.highlightBlock(block);\n            }\n          }\n        }\n      }\n     \n      \n      await components.loadUnresolved(root, false, \"container.js\", true);\n      \n      lively.clipboard.initializeElements(root.querySelectorAll(\"*\"))\n      \n      if (nodes.length == 1 \n          && (nodes[0].localName == \"lively-window\" || nodes[0].classList.contains(\"lively-content\"))) {\n        lively.setPosition(nodes[0], pt(0,0))\n      }\n      \n    } catch(e) {\n      console.log(\"Could not append html:\" + content.slice(0,200) +\"...\" +\" ERROR:\", e);\n    }\n\n    // get around some async fun\n    if (this.preserveContentScroll !== undefined) {\n      this.get(\"#container-content\").scrollTop = this.preserveContentScroll\n      delete this.preserveContentScroll\n    }\n\n    ViewNav.enable(this)\n\n    \n    // await lively.sleep(500) // wait for renderer to get some positions to scroll to....\n    this.scrollToAnchor(this.anchor)\n    \n    setTimeout(() => {\n      this.resetContentChanges()\n      this.observeHTMLChanges()\n    }, 0)\n    \n  }\n\n  async appendCSV(content, renderTimeStamp) {\n    var container=  this.get('#container-content');\n    var table = await lively.create(\"lively-table\")\n    table.setFromCSV(content)\n    \n    if (renderTimeStamp && this.renderTimeStamp !== renderTimeStamp) {\n      return \n    }\n    container.appendChild(table)\n  }\n\n\n  async appendTemplate(name, renderTimeStamp) {\n    try {\n    \tvar node = lively.components.createComponent(name);\n    \tif (renderTimeStamp && this.renderTimeStamp !== renderTimeStamp) {\n        return \n      }\n      this.getContentRoot().appendChild(node);\n      await lively.components.loadByName(name);\n      \n    } catch(e) {\n      console.log(\"Could not append html:\" + content);\n    }\n  }\n\n  async followPath(path) {\n    if (path.toString().match(/^https?:\\/\\//)) {\n      path = this.normalizeURL(path);\n    }\n    \n    if (this.unsavedChanges()) {\n      if (!window.confirm(\"You will lose unsaved changes, continue anyway?\")) {\n        return;\n      }\n    }\n    \n    if (path.match(/^#/)) {\n      // just anchor navigation\n      return this.scrollToAnchor(path)\n    }\n    \n\n    var m = path.match(/start\\.html\\?load=(.*)/);\n    if (m) {\n      return this.followPath(m[1]);\n    }\n    \n    try {\n      var options = await fetch(path, {method: \"OPTIONS\"}).then(r => r.json())\n    } catch(e) {\n      // no options... found\n    }\n    // this check could happen later\n    if (!path.match(\"https://lively4\") && !path.match(/http:?\\/\\/localhost/)\n        && !path.match(window.location.host)\n        && !path.match(\"https://www.draw.io/\")\n        && path.match(/https?:\\/\\//)) {\n      if (!options) {\n        return window.open(path);\n      }\n    }\n    if (options && options.donotfollowpath) {\n      fetch(path) // e.g. open://my-component\n      return ;\n    }\n\n    var lastPath = _.last(this.history())\n    if (lastPath !== path) {\n      if (lastPath && path && path.match(lastPath) && lastPath.match(/\\.md\\/?$/)) {\n        // we have a #Bundle here... and the navigation is already in the history\n      } else {\n        this.history().push(path);\n      }\n    }\n\n    var opts = \"\"\n    if (this.useBrowserHistory() && this.isFullscreen()) {\n      opts=\"&fullscreen=true\"\n    }\n\n    if (this.isEditing() && (!path.match(/\\/$/) || path.match(/\\.((md)|(l4d))\\//))) {\n      if (this.useBrowserHistory())\n        window.history.pushState({ followInline: true, path: path },\n          'view ' + path, window.location.pathname + \"?edit=\"+path  + opts);\n      return this.setPath(path, true).then(() => this.editFile());\n    } else {\n      if (this.useBrowserHistory())\n        window.history.pushState({ followInline: true, path: path },\n          'view ' + path, window.location.pathname + \"?load=\"+path  + opts);\n      // #TODO replace this with a dynamic fetch\n      return this.setPath(path);\n    }\n  }\n\n  isEditing() {\n    return this.getAttribute(\"mode\") == \"edit\";\n  }\n\n  getContentRoot() {\n    // #Design #Lively4 The container should hide all its contents. The styles defined here should not affect others.\n    \n    // return this // #TODO only reason.. interacting with Halo and drag and drop into container...\n    \n    return this.get('#container-root'); // #TODO fix halo interactrion with this hidden content!\n\n    // #BUT #TODO Blockly and connectors just work globally...\n    // but we do not use blockly and connectors any more...\n    // return this;\n  }\n\n  getDir() {\n    return this.getPath().replace(/[^/]*$/,\"\");\n  }\n\n  getURL() {\n    var path = this.getPath();\n    if (!path) return;\n    if (files.isURL(path)) {\n      return new URL(path);\n    } if (path.match(/^[a-zA-Z]+:\\/\\//)) {\n      return new URL(path);\n    } else {\n      return new URL(\"https://lively4/\" + path);\n    }\n  }\n\n  getPath() {\n    return encodeURI(this.shadowRoot.querySelector(\"#container-path\").value);\n  }\n\n  async getEditor(editorType) {\n    editorType = editorType || this.currentEditorType || \"lively-editor\"\n    this.currentEditorType = editorType\n    \n    var container = this.get('#container-editor');\n    \n    \n    var livelyEditor = container.querySelector(\"lively-image-editor, lively-editor, babylonian-programming-editor\");\n    \n    if (livelyEditor && (livelyEditor.localName != editorType)) {\n      livelyEditor.remove()\n      livelyEditor = null\n    }\n    \n    if (livelyEditor) return Promise.resolve(livelyEditor);\n      \n    livelyEditor = await lively.create(editorType, container);\n    livelyEditor.id = \"editor\";\n    \n    if (livelyEditor.awaitEditor) {\n      // console.log(\"[container] opened editor\")\n      livelyEditor.hideToolbar();\n      await livelyEditor.awaitEditor();\n      var livelyCodeMirror = livelyEditor.livelyCodeMirror();\n      if (!livelyCodeMirror) throw new Error(\"Could not initialalize lively-editor\");\n      if (livelyCodeMirror.tagName == \"LIVELY-CODE-MIRROR\") {\n        await new Promise(resolve => {\n          if (livelyCodeMirror[\"editor-loaded\"]) {\n            resolve() // the livelyEditor was very quick and the event was fired in the past\n          } else {\n            livelyCodeMirror.addEventListener(\"editor-loaded\", resolve)\n          }\n        })\n      }\n\n      livelyCodeMirror.enableAutocompletion();\n      livelyCodeMirror.getDoitContext = () => window.that;\n\n      livelyCodeMirror.doSave = text => {\n        if (livelyCodeMirror.tagName !== \"LIVELY-CODE-MIRROR\") {\n          this.onSave(); // CTRL+S does not come through...\n        }\n      }      \n    }\n    return livelyEditor;\n  }\n\n  getLivelyCodeMirror() {\n    var livelyEditor = this.get('lively-editor');\n    return livelyEditor && livelyEditor.get && livelyEditor.get('#editor');\n  }\n\n  // #TODO replace this with asyncGet\n  async realAceEditor() {\n    return new Promise(resolve => {\n      var checkForEditor = () => {\n        var editor = this.getLivelyCodeMirror();\n        if (editor && editor.editor) {\n          resolve(editor.editor);\n        } else {\n          setTimeout(() => {\n            checkForEditor();\n          },100);\n        }\n      };\n      checkForEditor();\n    });\n  }\n\n  thumbnailFor(url, name) {\n    if (name.match(/\\.((png)|(jpe?g))$/))\n      return \"<img class='thumbnail' src='\" + name +\"'>\";\n    else\n      return \"\";\n  }\n\n  listingForDirectory(url, render, renderTimeStamp) {\n    return files.statFile(url).then((content) => {\n      if (this.renderTimeStamp !== renderTimeStamp) {\n        return \n      }\n      var files = JSON.parse(content).contents;\n      var index = _.find(files, (ea) => ea.name.match(/^\\index\\.md$/i));\n      if (!index) index = _.find(files, (ea) => ea.name.match(/^index\\.html$/i));\n      if (!index) index = _.find(files, (ea) => ea.name.match(/^README\\.md$/i));\n      if (index) {\n        // lively.notify(\"found index\" + index)\n        // this.contextURL\n        \n        return this.followPath(url.toString().replace(/\\/?$/, \"/\" + index.name)) ;\n      }\n      return Promise.resolve(\"\"); // DISABLE Listings\n\n      this.sourceContent = content;\n\n      var fileBrowser = document.createElement(\"lively-file-browser\");\n      /* DEV\n        fileBrowser = that.querySelector(\"lively-file-browser\")\n        url = \"https://lively-kernel.org/lively4/\"\n       */\n      if (render) {\n        return lively.components.openIn(this.getContentRoot(), fileBrowser).then( () => {\n          if (this.renderTimeStamp !== renderTimeStamp) {\n            fileBrowser.remove()\n            return\n          }\n          \n          // lively.notify(\"set url \" + url)\n          fileBrowser.hideToolbar();\n          // override browsing file and direcotry\n          fileBrowser.setMainAction((newURL) => {\n            // lively.notify(\"go \" + newURL)\n            this.followPath(newURL.toString());\n          });\n          fileBrowser.setMainDirectoryAction((newURL) => {\n            // lively.notify(\"go dir \" + newURL)\n            this.followPath(newURL.toString() + \"/\");\n          });\n          fileBrowser.setURL(url);\n        });\n      } else {\n        return ;\n      }\n    }).catch(function(err){\n      console.log(\"Error: \", err);\n      lively.notify(\"ERROR: Could not set path: \" + url,  \"because of: \",  err);\n    });\n  }\n  \n  normalizeURL(urlString) {\n    var url = new URL(urlString);\n    url.pathname = lively.paths.normalize(url.pathname);\n    return  \"\" + url;\n  }\n  \n  setPathAttributeAndInput(path) {\n    this.setAttribute(\"src\", path);\n    this.get('#container-path').value = decodeURI(path);\n  }\n  \n\n  async setPath(path, donotrender) {\n    this.get('#container-content').style.display = \"block\";\n    this.get('#container-editor').style.display = \"none\";\n\n    if (this.viewNav) {\n      lively.setPosition(this.get(\"#container-root\"), pt(0,0))\n      this.viewNav.disable()\n    }\n\n    this.windowTitle = path.replace(/.*\\//,\"\")\n    if (!path) {\n        path = \"\";\n    }\n\t  var isdir = path.match(/.\\/$/);\n\n    var url;\n    if (path.match(/^https?:\\/\\//)) {\n      url = new URL(this.normalizeURL(path));\n      // url.pathname = lively.paths.normalize(url.pathname);\n      path = \"\" + url;\n    } else if (path.match(/^[a-zA-Z]+:\\/\\//)) {\n      url = new URL(path)\n      var other = true\n    } else {\n      path = lively.paths.normalize(path);\n      url = \"https://lively4\" + path\n    }\n    \n    // check if our file is a directory\n    var options = await fetch(url, {method: \"OPTIONS\"}).then(r =>  r.json()).catch(e => {})  \n    if (!isdir && !other) {\n      if (options && options.type == \"directory\") {\n        isdir = true\n      }\n      // console.log(\"[container] isdir \" + isdir)\n    }\n    if (!path.match(/\\/$/) && isdir ) {\n      path =  path + \"/\"\n    }\n\n    var container=  this.get('#container-content');\n    // don't scroll away whe reloading the same url\n    if (this.getPath() == path) {\n      this.preserveContentScroll = this.get(\"#container-content\").scrollTop;\n    }\n\n    var markdown = this.get(\"lively-markdown\")\n    if (markdown && markdown.get) {  // #TODO how to dynamically test for being initialized?\n      var presentation = markdown.get(\"lively-presentation\")\n      if (presentation && presentation.currentSlideNumber) {\n        this.lastPage  = presentation.currentSlideNumber()\n      }\n      this.wasContentEditable =   markdown.contentEditable == \"true\"\n    }\n    \n    this.setPathAttributeAndInput(path)\n    \n    var anchorMatch = path.match(/^(https?\\:\\/\\/[^#]*)(#.+)/)\n    if (anchorMatch) {\n      path = anchorMatch[1]\n      var anchor = anchorMatch[2]    \n      console.log(\"path \" + path)\n      console.log(\"anchor \" + anchor)\n      this.anchor = anchor\n    } else {\n      this.anchor = null\n    }\n    \n    \n    this.clear();\n    container.style.overflow = \"auto\";\n\n    url = this.getURL();\n    \n    if (!url.toString().match(/^https?:\\/\\//)) {\n      var resolvedURL = lively.swxURL(url)\n    } else {\n      resolvedURL = url\n    }\n      \n    \n    this.content = \"\"\n    \n    \n    this.showNavbar();\n    \n    \n    // console.log(\"set url: \" + url);\n    this.sourceContent = \"NOT EDITABLE\";\n    var render = !donotrender;\n    // Handling directories\n\n\n    // Handling files\n    this.lastVersion = null; // just to be sure\n    var renderTimeStamp = Date.now() // #Idean, this is clearly a use-case for #COP, I have to refactor this propagate this dynamical context asyncronously #AsyncContextJS\n    this.renderTimeStamp = renderTimeStamp\n    \n    var format = files.getEnding(path)\n    if (url.protocol == \"search:\") {\n      format = \"html\"\n    }\n    if (path.match(/\\?html/)) {\n      format = \"html\"\n    }\n    \n    if (isdir) {\n      // return new Promise((resolve) => { resolve(\"\") });\n      if (!options || !options[\"index-available\"]) {\n        return this.listingForDirectory(url, render, renderTimeStamp)\n      } else {\n        format = \"html\" // e.g. #Bundle \n      }\n    }\n    // ACM #Hack... #TODO -> find out when content is HTML\n    if (format == \"cfm\") {\n      format = \"html\"\n    }\n    \n    if (files.isPicture(format)) {\n      if (render) {\n        fetch(resolvedURL) // cache bust IMG resources.... otherwise the SWX is not asked by the browser\n        return this.appendHtml(\"<img style='max-width:100%; max-height:100%' src='\" + resolvedURL +\"'>\", renderTimeStamp);\n      }\n      else return;\n    } else if (files.isVideo(format)) {\n      //if (render) return this.appendHtml('<lively-movie src=\"' + url +'\"></lively-movie>', renderTimeStamp);\n      \n\n      if (render) return this.appendHtml(`<video autoplay controls><source src=\"${resolvedURL}\" type=\"video/${format}\"></video>`, renderTimeStamp);\n      else return;\n    } else if (format == \"pdf\") {\n      if (render) return this.appendHtml('<lively-pdf overflow=\"visible\" src=\"'\n        + resolvedURL +'\"></lively-pdf>', renderTimeStamp);\n      else return;\n    } \n    \n    \n    \n    var headers = {}\n    if (format == \"html\") {\n      headers[\"content-type\"] = \"text/html\" // maybe we can convice the url to return html\n    }\n    \n    if (url.toString().match(lively4url)) {\n      headers[\"forediting\"] = true\n    }\n  \n    return fetch(url, {\n      method: \"GET\",\n      headers: headers\n    }).then( resp => {\n      this.lastVersion = resp.headers.get(\"fileversion\");\n      this.contentType = resp.headers.get(\"content-type\");\n      \n\n      // console.log(\"[container] lastVersion \" +  this.lastVersion)\n\n      // Handle cache error when offline\n      if(resp.status == 503) {\n        format = 'error'\n      }\n\n      return resp.text();\n    }).then((content) => {\n      console.log(\"setPath content \" + url)\n      \n      this.content = content\n      this.showNavbar();\n      \n      \n      if (format == \"html\" || this.contentType == \"text/html\")  {\n        this.sourceContent = content;\n        if (render) return this.appendHtml(content), renderTimeStamp;\n      } else if (format == \"md\") {\n        this.sourceContent = content;\n        if (render) return this.appendMarkdown(content, renderTimeStamp);\n      } else if (format == \"livelymd\") {\n        this.sourceContent = content;\n        if (render) return this.appendLivelyMD(content, renderTimeStamp);\n      } else if (format == \"csv\") {\n        this.sourceContent = content;\n        if (render) return this.appendCSV(content, renderTimeStamp);\n      } else if (format == \"error\") {\n        this.sourceCountent = content;\n        if (render) {\n          return this.appendHtml(`\n            <h2>\n              <span style=\"color: darkred\">Error: </span>${content}\n            </h2>\n          `, renderTimeStamp);\n        }\n      } else if (format == \"bib\") {\n        this.sourceContent = content;\n        if (render) {\n          return this.appendHtml('<lively-bibtex src=\"'+ url +'\"></lively-bibtex>', renderTimeStamp);\n        }\n      } else if (format == \"dot\") {\n        this.sourceContent = content;\n        if (render) {\n          \n          return this.appendHtml(`<graphviz-dot><script type=\"graphviz\">${content}</script></graphviz-dot>`, renderTimeStamp); \n        } else return;\n      } else if (format == \"xhtml\") {\n        this.sourceContent = content;\n        if (render) {\n          return this.appendHtml('<lively-iframe style=\"position: absolute; top: 0px;left: 0px;\" navigation=\"false\" src=\"'+ url +'\"></lively-iframe>', renderTimeStamp);\n        }\n      } else if (format == \"xml\") {\n        this.sourceContent = content;\n        if (render && content.match(/^\\<mxfile/)) {\n          return this.appendHtml(`<lively-drawio src=\"${resolvedURL}\"></<lively-drawio>`, renderTimeStamp);\n        }\n      } else {\n        if (content.length > (1 * 1024 * 1024)) {\n          if (render) return this.appendHtml(\"file size to large\", renderTimeStamp); \n        } else {\n          this.sourceContent = content;\n          if (render) return this.appendHtml(\"<pre><code>\" + content.replace(/</g, \"&lt;\") +\"</code></pre>\", renderTimeStamp);\n        }\n      }\n    }).then(() => {\n      this.dispatchEvent(new CustomEvent(\"path-changed\", {url: this.getURL()}));\n      this.updateFavInfo();\n    })\n    .catch(function(err){\n      console.log(\"Error: \", err);\n      lively.notify(\"ERROR: Could not set path: \" + path,  \"because of: \", err);\n    });\n  }\n\n  navigateToName(name) {\n    // lively.notify(\"navigate to \" + name);\n    var editor = this.getLivelyCodeMirror()\n    if (editor) {\n      editor.find(name);\n    } else {      \n      var baseURL = this.getURL().toString().replace(/\\#.*/,\"\")\n      var anchor = \"#\" + name.replace(/# ?/g,\"\")\n      var nextURL = baseURL + anchor\n      this.setPathAttributeAndInput(nextURL)\n      this.history().push(nextURL);\n      this.scrollToAnchor(anchor)\n    }\n  }\n\n  clearNavbar() {\n    var container = this.get('#container-leftpane');\n    container.clear()\n    return container;\n  }\n\n  hideNavbar() {\n    if (lively.getExtent(this).x > 1 ) {\n      this.get('lively-separator').onClick()\n    }\n  }\n  \n  navbar() {\n    return this.get('#container-leftpane')\n    \n  }\n  \n  async showNavbar() {\n    // this.get('#container-leftpane').style.display = \"block\";\n    // this.get('lively-separator').style.display = \"block\";\n\n    var navbar = this.navbar()\n    // implement hooks\n    navbar.deleteFile = (url, urls) => { this.deleteFile(url, urls) }\n    navbar.renameFile = (url) => { this.renameFile(url) }\n    navbar.newfile = (url, type) => { this.newfile(url, type) }\n    navbar.followPath = (path, lastPath) => { \n      this.contextURL = lastPath\n      this.followPath(path) \n    }\n    navbar.navigateToName = (name) => { this.navigateToName(name) }\n\n    await navbar.show && navbar.show(this.getURL(), this.content, navbar.contextURL)\n  }\n\n  isFullscreen() {\n    return this.get(\"#container-navigation\").style.display  == \"none\"\n  }\n\n  toggleControls() {\n    var showsControls = this.get(\"#container-navigation\").style.display  == \"none\"\n    if (showsControls) {\n      this.showControls();\n    } else {\n      this.hideControls();\n    }\n    // remember the toggle fullscreen in the url parameters\n    var path = this.getPath()\n    if (this.useBrowserHistory()) {\n      window.history.pushState({ followInline: true, path: path }, 'view ' + path, window.location.pathname + \"?edit=\" + path  + \"&fullscreen=\" + !showsControls);\n    }\n  }\n\n  hideControls() {\n    this.setAttribute(\"controls\",\"hidden\")\n    this.get(\"#fullscreenInline\").style.display = \"block\"\n    this.get(\"#container-navigation\").style.display  = \"none\";\n    this.get(\"#container-leftpane\").style.display  = \"none\";\n    this.get(\"#container-rightpane\").style.flex = 1\n    this.get(\"lively-separator\").style.display  = \"none\";\n  }\n\n  showControls() {    this.getAttribute(\"controls\")\n    this.setAttribute(\"controls\",\"shown\")\n    this.get(\"#fullscreenInline\").style.display = \"none\"\n    this.get(\"#container-navigation\").style.display  = \"\";\n    this.get(\"#container-leftpane\").style.display  = \"\";\n    this.get(\"#container-rightpane\").style.flex = 0.8\n    this.get(\"lively-separator\").style.display  = \"\";\n  }\n\n  editPicture() {\n    var url = this.getURL()\n    \n  }\n\n  async editFile(path) {\n    // console.log(\"[container] editFile \" + path)\n    this.setAttribute(\"mode\",\"edit\"); // make it persistent\n    if(path) await this.setPath(path, true /* do not render */) \n    \n    this.clear();\n    var urlString = this.getURL().toString();\n    \n    var containerContent=  this.get('#container-content');\n    containerContent.style.display = \"none\";\n    var containerEditor =  this.get('#container-editor');\n    containerEditor.style.display = \"block\";\n\n\n    this.resetLoadingFailed();\n\n    this.showNavbar();\n\n    \n    \n    // console.log(\"[container] editFile befor getEditor\")\n    // ... demos\\/\n    var editorType = urlString.match(/babylonian-programming-editor\\/demos\\/.*\\js$/) ? \"babylonian-programming-editor\" : \"lively-editor\";\n\n    if (this.sourceContent && this.sourceContent.match('^.*\"enable examples\"')) {\n      editorType = \"babylonian-programming-editor\"\n    }\n    \n    if (urlString.match(/((png)|(jpe?g)|(gif))$/i)) {\n      editorType = \"lively-image-editor\"\n    }\n\n    \n    var livelyEditor = await this.getEditor(editorType)\n      // console.log(\"[container] editFile got editor \")\n    \n    if (livelyEditor.awaitEditor) {\n      await livelyEditor.awaitEditor()\n      var codeMirror = livelyEditor.livelyCodeMirror();\n\n      codeMirror.addEventListener(\"change\", evt => this.onTextChanged(evt))      \n    }\n\n    var url = this.getURL();\n    livelyEditor.setURL(url);\n    // console.log(\"[container] editFile setURL \" + url)\n    if (codeMirror) {\n      if (codeMirror.editor && codeMirror.editor.session) {\n        codeMirror.editor.session.setOptions({\n          mode: \"ace/mode/javascript\",\n          tabSize: 2,\n          useSoftTabs: true\n        });\n      }\n      codeMirror.changeModeForFile(url.pathname);\n\n      // NOTE: we don't user loadFile directly... because we don't want to edit PNG binaries etc...\n      if (urlString.match(/\\.svg$/)) {\n        this.sourceContent  = await fetch(urlString).then(r => r.text())\n      }\n      \n      \n      livelyEditor.setText(this.sourceContent); // directly setting the source we got\n\n      if (codeMirror.editor) {\n        if (!codeMirror.tagName == \"LIVELY-CODE-MIRROR\") {\n          codeMirror.editor.selection.moveCursorTo(0,0);\n          var lineWidth = 100\n          codeMirror.editor.session.setWrapLimit(lineWidth);\n          codeMirror.editor.renderer.setPrintMarginColumn(lineWidth)\n        }\n      }\n    }\n\n    livelyEditor.lastVersion = this.lastVersion;\n    this.showCancelAndSave();\n\n    if (codeMirror && (\"\"+url).match(/\\.((js)|(py))$/)) {\n      codeMirror.setTargetModule(\"\" + url); // for editing\n    }\n\n    if (codeMirror && this.anchor) {\n      this.scrollToAnchor(this.anchor)\n    }\n  }\n\n  getHTMLSource() {\n    this.querySelectorAll(\"*\").forEach( ea => {\n      if (ea.livelyPrepareSave)\n        ea.livelyPrepareSave();\n    });\n    return this.getContentRoot().innerHTML\n  }\n\n  saveSource(url, source) {\n    return this.getEditor().then( editor => {\n      editor.setURL(url);\n      editor.setText(source);\n      editor.lastVersion = this.lastVersion;\n      editor.saveFile().then( () => {\n        this.lastVersion = editor.lastVersion\n        // #TODO we should update here after conflict resolution?\n        this.updateOtherContainers()\n      }).then(() => {\n        this.resetContentChanges()\n        lively.notify(\"saved content!\")\n      })\n    });\n\n  }\n\n  async saveHTML(url) {\n    return this.saveSource(url, this.getHTMLSource());\n  }\n\n  async saveMarkdown(url) {\n    var markdown =  await this.get(\"lively-markdown\")\n    if (markdown.getAttribute(\"mode\") == \"presentation\") {\n      lively.notify(\"saving in presentation mode not supported yet\")\n    } else {\n      var source = await markdown.htmlAsMarkdownSource()\n      return this.saveSource(url, source);\n    }   \n  }\n\n  async saveEditsInView(url) {\n    url = (url || this.getURL()).toString();\n    var contentElement = this.getContentRoot()\n    if (url.match(/template.*\\.html$/)) {\n        return lively.notify(\"Editing templates in View not supported yet!\");\n    } else if (url.match(/\\.html$/)) {\n      this.saveHTML(new URL(url)).then( () => {\n        // lively.notify({\n        //   title: \"saved HTML\",\n        //   color: \"green\"});\n       });\n    } else if (url.match(/\\.md$/)) {\n      this.saveMarkdown(new URL(url)).then( () => {\n        // lively.notify({\n        //   title: \"saved HTML\",\n        //   color: \"green\"});\n       });\n    } else if (contentElement && contentElement.livelySource) {\n      var source = contentElement.livelySource()\n      if (source.then) source = await source; // maybe some elements take a while to generate their source\n      return this.saveSource(url, source);\n    } else {\n      lively.notify(\"Editing in view not supported for the content type!\");\n    }\n\n  }\n\n  unsavedChanges() {\n    var editor = this.get(\"#editor\");\n    if (!editor) return this.contentChanged;\n    return  editor.textChanged;\n  }\n\n\n\n  // make a gloval position relative, so it can be used in local content\n  localizePosition(pos) {\n    var offsetBounds = this.get('#container-content').getBoundingClientRect();\n    return pos.subPt(pt(offsetBounds.left, offsetBounds.top));\n  }\n\n  // let's do it the hard way\n  asyncGet(selector, maxtime) {\n    maxtime = maxtime || 10000;\n    var startTime = Date.now();\n    return new Promise((resolve, reject) => {\n      var check = () => {\n        var found = this.get(selector);\n        if (found) resolve(found);\n        else if (Date.now() - startTime > maxtime) reject();\n        else setTimeout(check, 100);\n      };\n      check();\n    });\n  }\n\n  async onTextChanged() {\n    if (!this.getURL().pathname.match(/\\.js$/)) {\n      return\n    }\n  }\n\n\n\n  onMutation(mutations, observer) {\n    if (this.isPersisting) return // we mutate while persisting\n\n    mutations.forEach(record => {\n\n      var indicator = this.get(\"#changeIndicator\")\n      if (indicator ) {\n        indicator.style.backgroundColor = \"rgb(250,250,0)\";\n      }\n\n      // if (record.target.id == 'console'\n      //     || record.target.id == 'editor') return;\n\n      this.contentChangedDelay()\n\n      // let shouldSave = true;\n      if (record.type == 'childList') {\n      //     let addedNodes = [...record.addedNodes],\n      //         removedNodes = [...record.removedNodes],\n      //         nodes = addedNodes.concat(removedNodes);\n\n      //     //removed nodes never have a parent, so remeber orphans when they are created\n      //     for (let node of addedNodes) {\n      //         if (hasParentTag(node) == false) {\n      //             orphans.add(node);\n      //         }\n      //     }\n\n      //     // shouldSave = hasNoDonotpersistFlagInherited(addedNodes) || checkRemovedNodes(removedNodes, orphans);\n\n      //     //remove removed orphan nodes from orphan set\n      //     for (let node of removedNodes) {\n      //         if (orphans.has(node)) {\n      //             orphans.delete(node);\n      //         }\n      //     }\n      }\n      else if (record.type == 'attributes'\n          || record.type == 'characterData') {\n\n\n          // shouldSave = hasNoDonotpersistFlagInherited([record.target]);\n      }\n\n      // if (shouldSave) {\n          // sessionStorage[\"lively.scriptMutationsDetected\"] = 'true';\n          // restartPersistenceTimerInterval();\n      // }\n    })\n  }\n\n\n  observeHTMLChanges() {\n\n    if (this.mutationObserver) this.mutationObserver.disconnect()\n    this.mutationObserver = new MutationObserver((mutations, observer) => {\n        this.onMutation(mutations, observer)\n    });\n     this.mutationObserver.observe(this, {\n      childList: true,\n      subtree: true,\n      characterData: true,\n      attributes: true});\n  }\n\n  contentIsEditable() {\n    return this.getPath().match(/\\.html$/) || this.getPath().match(/\\.md$/)\n  }\n\n  checkForContentChanges() {\n    \n    if (!this.contentIsEditable()) {\n      this.contentChanged = false\n      return\n    }\n    \n    // don't know how to check for edits here... \n    if (!this.isEditing() && this.getPath().match(/\\.md$/)) {\n      this.contentChanged = false\n      return\n    }\n    \n\n    if (this.isPersisting) return;\n    this.isPersisting = true;\n    // console.log(\"checkForContentChanges \" + (Date.now() - this.lastChecked) + \"ms \" + document.activeElement)\n    this.lastChecked = Date.now()\n\n    try {\n      window.oldActiveElement = document.activeElement\n      var currentSource = this.getHTMLSource()\n\n      if (!this.lastSource || this.lastSource != currentSource) {\n        this.contentChanged = true\n      } else {\n        this.contentChanged = false\n      }\n      this.updateChangeIndicator()\n    } finally {\n      // setTimeout(() => {\n        // console.log(\"refocus \" + oldActiveElement)\n\n        if (oldActiveElement && oldActiveElement.editor) oldActiveElement.editor.focus()\n\n        // we don't want to catch our own mutations... that were cause\n        // by detecting some mutations in the first place\n        this.isPersisting = false\n      // }, 0)\n    }\n  }\n\n  resetContentChanges() {\n    this.lastSource  =  this.getHTMLSource();\n    this.contentChanged = false\n    this.updateChangeIndicator()\n  }\n\n  updateChangeIndicator() {\n    var indicator = this.get(\"#changeIndicator\")\n    if (indicator && this.contentChanged) {\n      indicator.style.backgroundColor = \"rgb(220,30,30)\";\n    } else {\n      indicator.style.backgroundColor = \"rgb(200,200,200)\";\n    }\n  }\n\n  focus() {\n    const livelyCodeMirror = this.getLivelyCodeMirror();\n    if (livelyCodeMirror) { livelyCodeMirror.focus(); }\n  }\n\n  createLink(base, name, href) {\n    var link = document.createElement(\"a\")\n    link.textContent = name\n    var path = base + href\n    link.href = path\n    link.addEventListener(\"click\", (evt) => {\n        this.followPath(path);\n        evt.preventDefault();\n        evt.stopPropagation()\n    });\n    return link\n  }\n\n  livelyAllowsSelection(evt) {\n    if (!this.contentIsEditable() || this.isEditing()) return false\n\n    if (evt.composedPath()[0].id == \"container-content\") return true;\n\n    return false\n  }\n\n\n  livelyAcceptsDrop() {\n    return this.contentIsEditable() && !this.isEditing()\n  }\n\n\n  livelyPrepareSave() {\n    this.setAttribute(\"leftpane-flex\", this.get(\"#container-leftpane\").style.flex)\n    this.setAttribute(\"rightpane-flex\", this.get(\"#container-rightpane\").style.flex)\n  }\n\n  livelyPreMigrate() {\n    // do something before I got replaced\n    this.oldContentScroll = this.get(\"#container-content\").scrollTop;\n \t  var livelyEditor = this.get(\"#editor\");\n    if (livelyEditor) {\n      this.oldScrollInfo = livelyEditor.getScrollInfo()\n      this.oldCursor = livelyEditor.getCursor()\n      this.oldFocused = document.activeElement == this\n    }\n  }\n\n  async livelyExample() {\n    return this.followPath(lively4url + \"/README.md\")\n  }\n\n  // customize clipboard interaction... etc\n  // navigating in this multidimensional space can be hard\n  livelyTarget() {\n    var markdownElement = this.get(\"lively-markdown\")\n    if (markdownElement && markdownElement.get) { // maybe not initialized yet.. damn! \n      return markdownElement.get(\"#content\")\n    }\n    return this\n  }\n  \n  livelyMigrate(other) {\n    // other = that\n\n    this._history = other._history;\n    this._forwardHistory = other._forwardHistory;\n    \n    this.isMigrating = true;\n    this.preserveContentScroll = other.oldContentScroll;\n    var editor = other.get(\"#editor\");\n    if (editor) {\n      var otherCodeMirror = editor.currentEditor();\n      if (otherCodeMirror && otherCodeMirror.selection) {\n        var range = otherCodeMirror.selection.getRange();\n        var scrollTop = otherCodeMirror.session.getScrollTop();\n        this.asyncGet(\"#editor\").then( editor => {\n          var thisCodeMirror = editor.currentEditor();\n          if (otherCodeMirror && thisCodeMirror) {\n            thisCodeMirror.session.setScrollTop(scrollTop);\n            thisCodeMirror.selection.setRange(range);\n          }\n          this.isMigrating = false;\n        }).catch(() => {\n          // jsut to be sure..\n          this.isMigrating = false;\n        });\n      }\n      this.asyncGet(\"#editor\").then( editor => {\n        editor.setScrollInfo(other.oldScrollInfo)\n      \teditor.setCursor(other.oldCursor)\n      \tif (other.oldFocused) {\n      \t  // lively.notify(\"set focus again!\")\n      \t  // setTimeout(() => editor.focus(), 1000)\n        }\n      })\n    } else {\n      this.isMigrating = false;\n    }\n  }\n}\n"]}