{"version":3,"sources":["https://lively-kernel.org/lively4/lively4-portal/src/components/tools/lively-container.js"],"names":["Morph","highlight","pt","ContextMenu","SyntaxChecker","components","cop","Favorites","files","Strings","Clipboard","fileEnding","replaceFileEndingWith","updateEditors","ViewNav","Upndown","AnnotatedText","Annotation","AnnotationSet","default","indentationWidth","isTestFile","ScopedScripts","Container","target","childNodes","initialize","getAttribute","setAttribute","windowTitle","isSearchBrowser","contentChangedDelay","checkForContentChanges","debounce","lively","addEventListener","evt","onMouseDown","html","addDeepMousePressed","get","history","url","unwindAndFollowHistoryUntil","forwardHistory","unwindAndFollowForwardHistoryUntil","dispatchEvent","CustomEvent","path","edit","useBrowserHistory","viewOrEditPath","input","code","onPathEntered","value","altKey","focusFiles","onclick","e","onFullscreen","registerButtons","onContextMenu","onKeyDown","onClick","hideCancelAndSave","hideControls","withAttributeDo","style","flex","onEditorBackNavigation","livelyContentLoaded","editFile","followPath","toString","match","normalizeURL","unsavedChanges","confirm","scrollToAnchor","m","innerHTML","appendChild","options","fetch","method","then","r","json","window","location","host","clearLoadingInfo","open","donotfollowpath","lastPath","_","last","startsWith","replace","push","opts","isFullscreen","isEditing","pushState","followInline","pathname","setPath","getPath","encodeURI","shadowRoot","querySelector","donotrender","display","isdir","URL","other","paths","normalize","type","container","preserveContentScroll","scrollTop","markdown","presentation","currentSlideNumber","lastPage","wasContentEditable","contentEditable","setPathAttributeAndInput","anchorMatch","anchor","console","log","overflow","getURL","resolvedURL","swxURL","content","showNavbar","sourceContent","render","lastVersion","renderTimeStamp","Date","now","format","getEnding","protocol","listingForDirectory","isPicture","appendHtml","isVideo","isAudio","headers","lively4url","resp","clear","contentType","status","getContentRoot","statusText","preventDefault","GitHub","System","import","gh","loadCredentials","lively4github","text","appendMarkdown","appendLivelyMD","appendCSV","sourceCountent","length","updateFavInfo","catch","err","notify","_history","_forwardHistory","getSourceCode","editor","currentEditor","getValue","getBaseURL","getDir","isURL","getEditor","editorType","currentEditorType","livelyEditor","localName","remove","Promise","resolve","create","id","awaitEditor","hideToolbar","livelyCodeMirror","Error","tagName","enableAutocompletion","getDoitContext","doSave","onSave","on","cm","onEditorCursorActivity","getOtherContainers","editing","document","body","querySelectorAll","filter","ea","otherURL","otherContainer","script","that","getLivelyCodeMirror","editorComp","decodeURI","asyncGet","selector","maxtime","startTime","reject","check","found","setTimeout","isTemplate","filename","foundTemplate","searchTemplateFilename","contentIsTemplate","sourceCode","contentIsEditable","reloadModule","urlString","unloadModule","title","color","resetLoadingFailed","error","loadingFailed","loadTestModule","testRunner","group","scrollContainer","clearTests","resetMocha","runTests","sleep","groupEnd","isDeepEvaling","checked","loadModule","deep","module","warn","modules","lastLoadingFailed","b","border","moduleName","slice","details","openTemplateInstance","name","comp","openComponentInWindow","livelyExample","urlInHistory","pop","deleteFile","urls","navbar","oldSelection","getSelectedItems","firstOldSelection","selectionList","parentElement","firstOldSelectionIndex","Array","from","indexOf","includes","allURLs","Set","has","add","endsWith","newfile","walkDir","sortBy","reverse","prefix","longestCommonPrefix","map","names","customDialog","dialog","messageDiv","maxHeight","backgroundColor","msg","join","result","update","newSelection","newURL","renameFile","followFile","proposedNewName","base","newName","prompt","moveFile","newFile","ending","fileName","s","select","setSelectionRange","index","saveFile","showCancelAndSave","focus","newDirectory","char","String","fromCharCode","keyCode","charCode","ctrlKey","metaKey","shiftKey","onAccept","stopPropagation","key","switchBetweenJSAndHTML","composedPath","find","elements","onMarkdownContextMenu","onMarkdownClick","toggleControls","isMaximized","toggleMaximize","zIndex","onClose","onToggleOptions","classList","contains","onFavorite","toggle","onBeautify","lastText","beautifulText","global","js_beautify","css_beautify","html_beautify","setText","onDelete","onApply","openBrowser","onSpawnTestRunner","pos","getPosition","setTestPath","loadTests","onHome","clearNavbar","onSync","compWindow","openInWindow","w","setPosition","serverURL","setServerURL","repo","setRepository","sync","onEdit","onCancel","onUp","onBack","lastBackButtonClicked","halo","onBodyMouseDown","onForward","onBrowse","onDependencies","openMarkdown","focusDetails","onSaveAs","newPath","undefined","saveEditsInView","buildLatex","dir","pdf","buildPath","makeURL","logUniqId","show","showElement","mode","pdfContainers","queryAll","forEach","page","getCurrentPage","setURL","pdfLoaded","setCurrentPage","doNotQuit","isCurrentlySaving","__ignoreUpdates","LastURL","updateCSS","templateSourceCode","updateTemplate","m2","updateOtherContainers","testRegexp","findDependedModules","updateNavbarDetails","onNewfile","onNewdirectory","onVersions","toggleVersions","onTextChanged","onHTMLMutation","mutations","observer","isPersisting","record","indicator","onMarkdownEditorCursorActivity","md","bind","setContent","startPresentation","gotoSlideAt","contentRoot","markdownCheckCheckboxAndSave","appendScript","scriptElement","layers","openPromises","root","createElement","beGlobal","src","onload","all","beNotGlobal","onerror","textContent","withLayers","d3","loadJavaScriptThroughDOM","ScopedD3","updateCurrentBodyAndURLFrom","nodes","parseHTML","appendTemplate","fixLinks","block","highlightBlock","comment","markdownMatch","updateView","whiteSpace","loadUnresolved","clipboard","initializeElements","resetContentChanges","observeHTMLChanges","table","setFromCSV","node","createComponent","loadByName","hideNavbar","getExtent","x","contextURL","navigateToName","data","showDetailsContent","showsControls","showControls","containerContent","containerEditor","preferences","codeMirror","session","setOptions","tabSize","useSoftTabs","changeModeForFile","checkAndLoadAnnotations","selection","moveCursorTo","lineWidth","setWrapLimit","renderer","setPrintMarginColumn","cmURL","setTargetModule","ternWrapper","tw","request","getTargetModule","getHTMLSource","livelyPrepareSave","saveSource","source","saveHTML","saveMarkdown","htmlAsMarkdownSource","contentElement","livelySource","contentChanged","textChanged","lastChecked","oldActiveElement","activeElement","currentSource","lastSource","updateChangeIndicator","baseURL","encodeURIComponent","nextURL","codeMirrorComp","start","savedSourceCode","scrollToCodeElement","each","visibility","targetURLString","existingContainer","gotoWindow","browser","starIcon","mutationObserver","disconnect","MutationObserver","observe","childList","subtree","characterData","attributes","allElements","head","Object","values","templates","template","href","parent","fillTemplateStyle","preventRecursion","waitOnQuerySelector","item","detailItems","onDetailsItemClick","pageNumberMatch","parseInt","element","allTextNodes","escapeRegExp","previousElementSibling","slide","allParents","setSlide","offset","getGlobalPosition","subPt","y","becomeMainContainer","hideTitlebar","onpopstate","event","state","getURLParameter","editPath","search","fullscreen","createLink","link","thumbnailFor","statFile","JSON","parse","contents","fileBrowser","openIn","setMainAction","setMainDirectoryAction","menuItems","showMarkdownElement","editMarkdownElement","showMarkdownAnnotations","checkbox","menu","removeAttribute","elementToMarkdown","range","getMarkdownRange","saveRegionWithEditor","sourceLine","split","n","parseFloat","setMarkdownRange","line","getCursor","highlights","lastEditCursorHighlight","borderColor","setGlobalPosition","markdownElements","first","containerShowMarkdownElement","markdownConverter","tabindent","bullet","convert","outerHTML","keepHtml","rangeOffset","lastMarkdownWorkspace","targetElement","workspace","insertBefore","editorLoaded","registerExtraKeys","Enter","renderMarkdown","tmpRange","annotationURL","exists","annotatedText","fromURL","renderedText","annotations","annotateInDOM","loadFile","lines","lastRangeLine","setSelection","ch","replaceSelection","newRangeHeight","livleyEditor","livleyCodeMirror","localizePosition","offsetBounds","getBoundingClientRect","left","top","livelyAllowsSelection","livelyAcceptsDrop","livelyPreMigrate","oldContentScroll","oldScrollInfo","getScrollInfo","oldCursor","oldFocused","livelyTarget","markdownElement","livelyMigrate","isMigrating","otherCodeMirror","getRange","getScrollTop","thisCodeMirror","setScrollTop","setRange","setScrollInfo","setCursor"],"mappings":"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","file":"lively-container.js","sourcesContent":["\"disable deepeval\"\n/*MD # Lively Container \n\n[doc](browse://doc/tools/container.md)\n\n![](lively-container.png){height=400px}\n\nMD*/\n\nimport 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';\nimport files from \"src/client/files.js\"\nimport Strings from \"src/client/strings.js\"\nlet ScopedScripts; // lazy load this... #TODO fix #ContextJS #Bug actual stack overflow\nimport Clipboard from \"src/client/clipboard.js\"\nimport {fileEnding, replaceFileEndingWith, updateEditors} from \"utils\"\nimport ViewNav from \"src/client/viewnav.js\"\nimport Upndown from 'src/external/upndown.js'\nimport {AnnotatedText, Annotation, default as AnnotationSet} from \"src/client/annotations.js\"\nimport indentationWidth from 'src/components/widgets/indent.js';\nimport { isTestFile } from 'src/components/tools/lively-testrunner.js';\n\n/*MD\n\n![](lively-container.drawio)\n\nMD*/\n\n\nexport default class Container extends Morph {\n  \n  get target() { return this.childNodes[0] }\n  /*MD ## Setup MD*/\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    let path, edit;\n    if (!this.useBrowserHistory()) {\n      path = this.getAttribute(\"src\");\n      edit = 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\", evt => {\n      if (evt.code == \"Enter\") { \n        this.onPathEntered(input.value);\n      }\n      if (evt.altKey && evt.code == \"ArrowDown\") {\n        this.get(\"lively-container-navbar\").focusFiles()\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('keydown',   evt => this.onKeyDown(evt));\n    this.setAttribute(\"tabindex\", 0);\n    this.addEventListener('click',   evt => this.onClick(evt));\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    this.addEventListener(\"editorbacknavigation\", (evt) => {\n      this.onEditorBackNavigation(evt)\n    }) \n  }\n  /*MD ## Navigation MD*/\n  // #private\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  // #important #api\n  async followPath(path) {\n    if (path.toString().match(/^https?:\\/\\//)) {\n      path = this.normalizeURL(path);\n    }\n    \n    if (this.unsavedChanges()) {\n      if (!await lively.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    this.get(\"#container-info\").innerHTML = \"\"\n    this.get(\"#container-info\").appendChild(<div id=\"loading-info\">Loading {path}</div>)\n    \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?:\\/\\//) \n        && !path.match(\"https://lively4\") && !path.match(/http:?\\/\\/localhost/)\n        && !path.match(window.location.host)\n        && !path.match(\"https://www.draw.io/\")\n      ) {\n      if (!options) {\n        this.clearLoadingInfo()\n        return window.open(path);\n      }\n    }\n    if (options && options.donotfollowpath) {\n      fetch(path) // e.g. open://my-component\n      this.clearLoadingInfo()\n      return ;\n    }\n\n    var lastPath = _.last(this.history())\n    if (lastPath !== path) {\n      if (lastPath && path && path.startsWith(lastPath) && lastPath.match(/\\.md\\/?$/)) {\n        // we have a #Bundle here... and the navigation is already in the history\n      } else if(lastPath && path && (path.replace(/\\/index\\.((html)|(md))$/,\"\") == lastPath.replace(/\\/?$/,\"\"))) {\n        // we have a index file redirection here...\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  clearLoadingInfo() {\n    this.get(\"#container-info\").innerHTML = \"\"\n  }\n  \n  getPath() {\n    return encodeURI(this.shadowRoot.querySelector(\"#container-path\").value);\n  }\n  \n  // #important\n  async setPath(path, donotrender) {\n    \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    \n    var options\n    try { \n      options = await fetch(url, {method: \"OPTIONS\"}).then(r =>  r.json())\n    } catch(e) {\n      options = {}\n    }\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    // this.clear(); // don't clear here yet... makes browsing more stable\n    \n    \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    this.content = \"\"\n  \n    this.showNavbar();\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    if (!donotrender && path.match(/sap\\:/)) {\n      format = \"html\" // when viewing... we want 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(`<video autoplay controls><source src=\"${resolvedURL}\" type=\"video/${format}\"></video>`, renderTimeStamp);\n      else return;\n    } else if (files.isAudio(format)) {\n      if (render) return this.appendHtml(`<audio controls src=\"${resolvedURL}\"></audio>`, 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    var headers = {}\n    if (format == \"html\") {\n      headers[\"content-type\"] = \"text/html\" // maybe we can convice the url to return html\n    }\n    if (path.match(/gs\\:/)) {\n      format = \"md\"\n    }\n    \n    headers['cache-control'] = 'no-cache'\n    // #deprecated since we now use no-ache\n    if (url.toString().match(lively4url)) {\n      headers[\"forediting\"] = true\n    }\n\n\n    \n    \n    \n    \n    return fetch(url, {\n      method: \"GET\",\n      headers: headers\n    }).then( resp => {\n    \n      \n      \n      this.clear(); // could already be filled again...\n      \n          \n      this.lastVersion = resp.headers.get(\"fileversion\");\n      this.contentType = resp.headers.get(\"content-type\");\n      if (this.contentType && this.contentType.match(\"image\"))  {\n        this.appendHtml(\"<img style='max-width:100%; max-height:100%' src='\" + resolvedURL +\"'>\", renderTimeStamp);\n        return  \n      }   \n      \n      // if (this.contentType.match(\"text/html\"))  {\n      //   format = \"html\"  \n      // }\n      \n      \n\n      // console.log(\"[container] lastVersion \" +  this.lastVersion)\n      \n      // Handle cache error when offline\n      if(resp.status == 503 || resp.status == 403) {\n        format = 'error'\n        \n        \n        // print error early...\n        this.getContentRoot().appendChild(\n          <div>\n            <h2>\n              <span style=\"color: darkred\">{resp.status} {resp.statusText} </span>\n            </h2>\n            <a href=\"\" click={async evt => {\n                evt.preventDefault()\n                var GitHub = await System.import(\"src/client/github.js\").then(m => m.default)\n                var gh = new GitHub()\n                await gh.loadCredentials()\n                window.lively4github =  gh\n              }}>maybe loginto github?</a>\n          </div>);\n        \n      }\n      \n      \n      return resp.text();\n    }).then((content) => {\n\n      console.log(\"setPath content \" + url)\n      \n      this.content = content\n      this.showNavbar();\n      \n      if (format == \"html\" || this.contentType.match(\"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        if (render) {\n          return this.appendHtml('<lively-webwerkstatt url=\"'+ url +'\"></lively-webwerkstatt>', renderTimeStamp);\n        }\n        \n      } else if (format == \"xml\" || format == \"drawio\") {\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) {\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      }\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  useBrowserHistory() {\n    return this.getAttribute(\"load\") == \"auto\";\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  /*MD ## Getter / Setter MD*/\n\n  getSourceCode() {\n    var editor = this.get(\"#editor\")\n    if (!editor) return \"\"\n    return editor.currentEditor().getValue()\n  }\n  \n  getBaseURL() {\n    return this.getURL().toString().replace(/[#?].*/,\"\")\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\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    var livelyEditor = container.querySelector(\"lively-image-editor, lively-editor, babylonian-programming-editor, lively-shadama-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 = () => this.getDoitContext();\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      livelyCodeMirror.editor.on(\"cursorActivity\", cm => {\n        this.onEditorCursorActivity(cm)\n      });\n      \n    }\n    return livelyEditor;\n  }\n  \n  getOtherContainers(editing=false) {\n    var url = this.getURL()\n    if (!url) return\n    return document.body.querySelectorAll(\"lively-container\").filter(ea => {\n      var otherURL = ea.getURL()\n      return otherURL && ea.isEditing() == editing && (otherURL.pathname == url.pathname) && (otherURL.host == url.host)\n    })\n  }\n  \n  \n  getDoitContext() {\n    if(this.getURL().pathname.match(/.*\\.md/)) {\n      var url = this.getURL()\n      var otherContainer = this.getOtherContainers()[0]\n      var markdown = otherContainer && otherContainer.get(\"lively-markdown\")\n      var script = markdown && markdown.get(\"lively-script\")\n      \n      return script\n    }\n    \n    return window.that\n  }\n\n  getLivelyCodeMirror() {\n    var livelyEditor = this.get('#editor');\n    return livelyEditor && livelyEditor.editorComp && livelyEditor.editorComp();\n  }\n\n  setPathAttributeAndInput(path) {\n    this.setAttribute(\"src\", path);\n    this.get('#container-path').value = decodeURI(path);\n  }\n  \n  // #private 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  /*MD ## Testing MD*/\n  \n  async isTemplate(url) {\n    var filename = url.replace(/[#?].*/,\"\").toString().replace(/.*\\//,\"\") // #Idea #Refactor Extract getFilename, add \"filename\" to URL class \n    var foundTemplate = await lively.components.searchTemplateFilename(filename)\n    return url == foundTemplate\n  }\n  \n  isFullscreen() {\n    return this.get(\"#container-navigation\").style.display  == \"none\"\n  }\n  \n  isEditing() {\n    return this.getAttribute(\"mode\") == \"edit\";\n  }\n  \n  contentIsTemplate(sourceCode) {\n    return this.getURL().pathname.match(/.*html/)\n      && sourceCode.match(/<template/)\n  }\n  \n  contentIsEditable() {\n    var url = this.getURL()\n    return url && url.pathname && (url.pathname.match(/\\.html$/) || url.pathname.match(/\\.md$/))\n  }\n  /*MD ## Modules MD*/\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      try {\n        console.group(\"run test: \" + this.getPath());\n        var scrollContainer = testRunner.get(\".container\")\n        var scrollTop = scrollContainer && scrollContainer.scrollTop  // preserve scroll during update\n        await testRunner.clearTests();\n        await testRunner.resetMocha();\n        await lively.reloadModule(url.toString(), true)\n        await System.import(url.toString());\n        console.log(\"RUN TESTS:\")\n        await testRunner.runTests();\n        await lively.sleep(100)\n        if (scrollContainer) scrollContainer.scrollTop = scrollTop        \n      } finally {\n        console.groupEnd(\"run test: \" + this.getPath());\n      }\n    } else {\n      lively.notify(\"no test-runner to run \" + url.toString().replace(/.*\\//,\"\"));\n    }\n  }\n  \n  isDeepEvaling() {\n     return this.get(\"#deep\").checked && this.sourceContent && !this.sourceContent.match(/\\\"disable deepeval\\\"/)\n  }\n  \n  async loadModule(url) {\n    var deep = this.isDeepEvaling() \n    return lively.reloadModule(\"\" + url, true, true, deep).then(module => {\n      if (deep) {\n        lively.notify(\"\",\"Module \" + url + \" and depended modules reloaded!\", 3, null, \"green\");\n      } else {\n        lively.warn(\"\",\"Only module \" + url + \" reloaded!\", 3, null, \"green\");\n      }\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  /*MD ## Navigation Hisotry MD*/\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  /*MD ## File Operations MD*/\n  async deleteFile(url, urls) {\n    \n    // remember the old position of selection (roughly)\n    var navbar = this.get(\"lively-container-navbar\")\n    var oldSelection = navbar.getSelectedItems()\n    var firstOldSelection = oldSelection[0]\n    if (firstOldSelection) {\n      var selectionList = firstOldSelection.parentElement\n      var firstOldSelectionIndex = Array.from(selectionList.childNodes).indexOf(firstOldSelection)\n    }\n    \n    lively.notify(\"deleteFile \" + url)\n    if (!urls || !urls.includes(url)) {\n      urls = [url] // clicked somewhere else\n    }\n    if (!urls) urls = [url]\n    \n    var allURLs = new Set()\n    for(var ea of urls) {\n      if (!allURLs.has(ea)) {\n        allURLs.add(ea)\n        if (ea.endsWith(\"/\")) {\n          for(var newfile of await lively.files.walkDir(ea)) {\n            allURLs.add(newfile)\n          }          \n        }\n      }    \n    }\n    urls = Array.from(allURLs)\n    urls = urls.sortBy(ea => ea).reverse() // delete children first\n    \n    var prefix = Strings.longestCommonPrefix(urls.map(ea => ea.replace(/[^/]*$/,\"\"))) // shared dir prefix\n    \n    var names = urls.reverse().map(ea => decodeURI(ea.replace(/\\/$/,\"\").replace(prefix,\"\")))\n    var customDialog = dialog => {\n      var messageDiv = dialog.get(\"#message\")\n      messageDiv.style.maxHeight = \"300px\"\n      messageDiv.style.overflow = \"auto\"\n      messageDiv.style.backgroundColor = \"white\"\n    }\n    var msg = \"<b>Delete \" + urls.length + \" files:</b><br>\" +\n        \"<ol>\" + names.map( ea => \"<li>\" + ea + \"</li>\",  ).join(\"\") + \"</ol>\"\n    if (await lively.confirm(msg, customDialog)) {\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      if (selectionList) {\n        // selection next element... in area\n        var newSelection = selectionList.childNodes[firstOldSelectionIndex]\n        if (newSelection) {\n          var newURL = newSelection.querySelector(\"a\").getAttribute('href')\n          this.setPath(newURL);\n        }\n      } else {\n        this.setPath(url.replace(/\\/$/, \"\").replace(/[^/]*$/, \"\"));\n      }\n      this.hideCancelAndSave();\n      \n      lively.notify(\"deleted \" + names);\n      \n      \n    }\n  }\n\n  async renameFile(url, followFile=true, proposedNewName) {\n    url = \"\" + url\n    url = url.replace(/\\/$/,\"\") // case of single dir\n    var base = url.replace(/[^/]*$/,\"\")\n    \n    var name = proposedNewName || decodeURI(url.replace(/.*\\//,\"\"))\n    var newName = await lively.prompt(\"rename\", name)\n    if (!newName) {\n      lively.notify(\"cancel rename \" + name)\n      return\n    }\n    var newURL = base + encodeURI(newName)\n    if (newURL != url) {\n      await files.moveFile(url, newURL)\n      \n      if (followFile) {\n        this.setPath(newURL);\n        this.hideCancelAndSave();        \n      }\n\n      lively.notify(\"moved to \" + newURL);\n    }\n    return newURL\n  }\n  \n  async newFile(path=\"\", type=\"md\") {  \n    var content = \"here we go....\"\n    var ending = type\n    if (type == \"drawio\") {\n      ending = \"drawio\"\n      content = await fetch(lively4url + \"/media/drawio.xml\").then(r => r.text())\n    }\n    \n    path = path.replace(/[^/]*$/,\"\") + \"newfile.\" + ending \n    \n    var fileName = await lively.prompt('Please enter the name of the file', path, async dialog => {\n      // select the filename in the path...\n      await lively.sleep(100) // wait for the new file\n      var input = dialog.get(\"input\")\n      var s = input.value\n      var m = s.match(/([^/.]*)([^/]*)$/)\n      input.select()\n      input.setSelectionRange(m.index,m.index + m[1].length)      \n    })\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    this.focus()\n  }\n  \n  async newDirectory(path=\"\") {\n    var fileName = await lively.prompt('Please enter the name of the directory', path);\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  /*MD ## Events MD*/\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      \n      if (!this.isEditing()) {\n        lively.notify(\"save in view with CTRL+S disabeled (for the moment)\", \"please edit file first\")\n        \n      } else {\n        if (evt.shiftKey) {\n          this.onAccept();\n        } else {\n          this.onSave();\n        }\n      }\n      evt.preventDefault();\n      evt.stopPropagation();        \n    } else if(evt.key == \"F7\") {\n      this.switchBetweenJSAndHTML();\n      evt.stopPropagation();\n      evt.preventDefault();\n    }\n  }\n  \n  onContextMenu(evt) {\n    // fall back to system context menu if shift pressed\n    if (!evt.shiftKey) {\n      evt.preventDefault();\n      evt.stopPropagation();\n      \n      var path = evt.composedPath()\n      var markdown = path.find(ea => ea.localName == \"lively-markdown\") \n      if (markdown) {\n        var elements = path.filter(ea => ea.getAttribute &&  ea.getAttribute(\"data-source-line\"))\n        if (elements.length > 0) {\n          this.onMarkdownContextMenu(evt, markdown, elements)\n          return false\n        }\n      }\n      \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      // disable this for now:\n      // if (this.contentIsEditable() && !this.isEditing()) {\n      //  worldContext = this\n      // }\n      lively.onContextMenu(evt)\n      // lively.openContextMenu(document.body, evt, undefined, worldContext);\n      return false;\n    }\n  }\n  \n \n\n  onClick(evt) {\n    if(evt.shiftKey && !this.isEditing() && this.getURL().pathname.match(/.*\\.md/)) {\n      this.onMarkdownClick(evt)  \n    } \n  }\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.style.zIndex = 1000\n        this.parentElement.get(\".window-titlebar\").style.display = \"\"\n      }\n    }\n  }\n  \n  onClose(evt) {\n    this.parentElement.remove()\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  \n  async onFavorite() {\n    await Favorites.toggle(this.getPath());\n    this.updateFavInfo()\n  }\n  \n  async onBeautify() {\n    const ending = this.getPath()::fileEnding();\n    \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': indentationWidth(),\n        'wrap_line_length': 120,\n      },\n      'indent_size': indentationWidth(),\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 onApply() {\n    var url = this.getBaseURL();\n    var filename = url.replace(/.*\\//,\"\")\n    var foundTemplate = await lively.components.searchTemplateFilename(filename)\n    if (url == foundTemplate) {\n      if(!filename.includes(\"-\")) {\n        lively.error(\"custom elements require a hyphen in their name!\") // see https://html.spec.whatwg.org/multipage/custom-elements.html#prod-potentialcustomelementname\n      }\n      this.openTemplateInstance(url);\n    } else if (url.match(/\\.js$/))  {\n      this.reloadModule(url);\n    } else {\n      lively.openBrowser(url);\n    }\n  }\n\n  async onSpawnTestRunner(evt) {\n    const path = this.getPath()\n\n    if (!isTestFile(path)) {\n      lively.warn('current file is no test file');\n      return;\n    }\n    \n    const pos = lively.getPosition(evt);\n    const testRunner = await lively.openComponentInWindow('lively-testrunner', pos);\n    testRunner.setTestPath(path);\n    await testRunner.clearTests();\n    await testRunner.resetMocha();\n    await testRunner.loadTests();\n    await testRunner.runTests();\n  }\n\n  onHome() {\n    this.clearNavbar()\n    this.followPath(lively4url)\n  }\n\n  async onSync(evt) {\n    var comp = await (<lively-sync></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 = lively.files.serverURL(\"\" + this.getURL())\n    comp.setServerURL(serverURL);\n    console.log(\"server url: \" + serverURL);\n    // if (!this.getURL().pathname.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  async onCancel() {\n    if (this.unsavedChanges()) {\n      if (!await lively.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  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.openMarkdown(lively4url + \"/src/client/dependencies/dependencies.md\", \n      \"Dependency Graph\", {url: this.getURL().toString()})\n\n\n  }\n  \n  onEditorBackNavigation() {\n    this.get(\"lively-container-navbar\").focusDetails()\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  async buildLatex(dir, pdf) {\n        \n    var serverURL = lively.files.serverURL(dir)\n    if (!serverURL) {\n      lively.warn(\"no lively server found for: \" + dir)\n      return\n    }\n\n    lively.notify(\"LaTeX\", \"build\", 10)\n\n    var buildPath = dir.replace(serverURL, \"\")\n    var makeURL = serverURL + \"/_make/\" + buildPath + \"?target=\" + pdf.replace(/.*\\//,\"\")\n    \n    var resp = await fetch(makeURL, {})\n    \n    var result = await resp.text()\n\n    var logUniqId = \"LaTexLog\"\n    var log = document.body.querySelector(\"#\" + logUniqId)\n    if (log) {\n      log.value = result\n      var show = lively.showElement(log)\n      show.style.border = \"1px solid green\"\n\n    } else {\n      lively.notify(\"LaTeX\", \"finished\", 10, async () => {\n        var log = await lively.openComponentInWindow(\"lively-code-mirror\")\n        log.mode =  \"text\"\n        log.id = logUniqId\n        log.parentElement.setAttribute(\"title\", \"LaTexLog\")\n        log.value = \"\" + result\n      })      \n    }\n     \n    var pdfContainers = lively.queryAll(document.body, \"lively-container\").filter(ea => ea.getURL().toString() == pdf)\n    pdfContainers.forEach(async ea => {\n      var preserveContentScroll = ea.get(\"#container-content\").scrollTop;\n      var pdf = ea.getContentRoot().querySelector(\"lively-pdf\")\n      var page = pdf.getCurrentPage()\n      await pdf.setURL(ea.getURL().toString())\n      await pdf.pdfLoaded\n      await lively.sleep(500) // #TODO fuck it... page loading seems not be finished, even if PDF.js said so\n      \n      if (page) pdf.setCurrentPage(page)\n      lively.notify(\"page \" + page)\n      ea.get(\"#container-content\").scrollTop = preserveContentScroll\n    })\n    \n    if (pdfContainers.length == 0) {\n      lively.notify(\"LaTeX\", \"view pdf\", undefined, () => {\n        lively.openBrowser(pdf)\n      })\n    }  \n  }\n  \n  // #important\n  async onSave(doNotQuit) {\n    if (this.isCurrentlySaving) {\n      lively.warn(\"WARNING: editor is still saving...\", \"but here we go\")\n    }\n    try {\n      this.isCurrentlySaving = true\n      var url = this.getURL()\n      url = url.toString().replace(/#.*/, \"\"); // strip anchors while saving and loading files\n      if (!this.isEditing()) {\n        await this.saveEditsInView();\n        return;\n      }\n\n      if (this.getURL().pathname.match(/\\/$/)) {\n        await files.saveFile(url,\"\");\n        return;\n      }\n      this.get(\"#editor\").setURL(url);\n      await this.get(\"#editor\").saveFile()\n      this.__ignoreUpdates = true // #LiveProgramming #S3 don't affect yourself...\n      this.parentElement.__ignoreUpdates = true\n      var sourceCode = this.getSourceCode();\n      // lively.notify(\"!!!saved \" + url)\n      window.LastURL = url\n      // lively.notify(\"update file: \" + this.getURL().pathname + \" \" + this.getURL().pathname.match(/css$/))\n      if (this.getURL().pathname.match(/\\.css$/)) {\n        this.updateCSS();\n      } else if (await this.isTemplate(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, url.toString());\n\n        }\n      } else if (this.getURL().pathname.match(/\\.md$/)){\n          var m = sourceCode.match(/markdown-config .*latex\\=([^ ]*)/)\n          if (m) {\n            var dir = this.normalizeURL(this.getDir() + m[1])\n\n            var m2 = sourceCode.match(/markdown-config .*pdf\\=([^ ]*)/)\n            if (m2) {\n              var pdf = this.normalizeURL(this.getDir() + m2[1])          \n            }\n            this.buildLatex(dir, pdf)\n          }\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.getURL().pathname.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          console.log(\"START DEP TEST RUN\")\n          lively.findDependedModules(\"\" + url).forEach(ea => {\n            if (ea.match(testRegexp)) {\n              this.loadTestModule(ea);\n            }\n          })\n          console.log(\"END DEP TEST RUN\")\n        } else {\n          lively.notify(\"ignore module \" + moduleName)\n        }\n      }\n      // this.showNavbar();\n      this.updateNavbarDetails()\n      \n      // something async... \n      lively.sleep(5000).then(() => {\n        this.__ignoreUpdates = false\n        this.parentElement.__ignoreUpdates = false\n      })\n    } finally {\n      // finished saving\n      this.isCurrentlySaving = false\n    }\n  }\n  \n  onNewfile() {\n    this.newFile(this.getPath())\n  }\n\n  async onNewdirectory() {\n    this.newDirectory(this.getPath())\n  }\n  \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  \n  async onTextChanged() {\n    if (!this.getURL().pathname.match(/\\.js$/)) {\n      return\n    }\n  }\n\n  onHTMLMutation(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  onEditorCursorActivity(cm) {\n     if(this.getURL().pathname.match(/.*\\.md/)) {\n      var url = this.getURL()\n      var otherContainer = this.getOtherContainers()[0]\n      var markdown = otherContainer && otherContainer.get(\"lively-markdown\")\n      if (markdown) {\n        this.onMarkdownEditorCursorActivity(cm, markdown)\n      }\n    }\n     \n  }\n  \n  \n  /*MD ## Render Content MD*/\n\n  async appendMarkdown(content, renderTimeStamp) {\n    this.clear()\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    var contentRoot = md.get(\"#content\")\n    \n    contentRoot.querySelectorAll(`input[type=\"checkbox\"]`).forEach(ea => {\n      if (!ea.parentElement.classList.contains(\"task-list-item\")) {\n        return;\n      }      \n      lively.addEventListener(\"input\", ea, \"click\", async evt => {\n        ea.checked = !ea.checked\n        this.markdownCheckCheckboxAndSave(ea)\n        var highlight = lively.showElement(ea.parentElement)\n        highlight.innerHTML = `<br><span style=\"background:white\">SAVE...</span>`\n        highlight.style.border = \"1px solid green\"\n        highlight.style.color = \"green\"\n        \n      })  \n    })\n    await lively.sleep(500) // wait for renderer to get some positions to scroll to....\n    this.scrollToAnchor(this.anchor)\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    \n    throw new Error(\"appendScript is disabled because of Zones\")\n    \n    \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    this.clear(); \n    \n    if (content.match(\"<template\") && this.getURL().pathname.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            console.warn(\"script loading not supported\")\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            // now we can use the structural information we got from the highlighter\n            for(var comment of ea.querySelectorAll(\".hljs-comment\")) {\n              var markdownMatch = comment.textContent.match(/^\\/\\*MD((.|\\n)*)MD\\*\\/$/)\n              if (markdownMatch) {\n                  //source.startsWidth(\"/*MD\") && source.endsWidth(\"MD*/\")\n                var markdown = await (<lively-markdown>{markdownMatch[1]}</lively-markdown>)\n                comment.innerHTML = \"\"\n                comment.appendChild(markdown)\n                await markdown.updateView()\n                markdown.style.whiteSpace = \"normal\" // revert effect of outside `pre` tag \n                markdown.style.display = \"inline-block\"\n                // markdown.style.border = \"2px solid blue\"\n                // markdown.style.backgroundColor = \"lightgray\"\n                \n                lively.html.fixLinks(markdown.shadowRoot.querySelectorAll(\"[href],[src]\"), \n                                    this.getURL().toString().replace(/[^/]*$/,\"\"),\n                                    url => this.followPath(url))\n              }\n            }\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    \n    // this is bad and breaks layout 100% layout....\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.getContentRoot(); \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  \n  /*MD ## Navbar MD*/\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.navbar()).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.newDirectory = (url, type) => { this.newDirectory(url, type) }\n    navbar.followPath = (path, lastPath) => { \n      this.contextURL = lastPath\n      this.followPath(path) \n    }\n    navbar.navigateToName = (name, data) => { this.navigateToName(name, data) }\n\n    await navbar.show && navbar.show(this.getURL(), this.content, navbar.contextURL, false, this.contentType)\n  }\n\n  \n    \n  async updateNavbarDetails() {\n    var navbar = this.navbar()\n    navbar.sourceContent = this.getSourceCode()\n    navbar.showDetailsContent()\n  }\n  /*MD ## Controls MD*/\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,\n        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    \n    this.get(\"#container-leftpane\").style.flex = 20\n    this.get(\"#container-rightpane\").style.flex = 80\n    this.get(\"lively-separator\").style.display  = \"\";\n  }\n  \n  /*MD ## Edit MD*/\n  \n  async editFile(path) {\n    // console.log(\"[container] editFile \" + path)\n    this.setAttribute(\"mode\",\"edit\"); // make it persistent\n    \n    \n    if (!path) path = this.getPath()\n    \n    if(path) await this.setPath(path, true /* do not render */) \n    \n    this.clear();\n    var urlString = this.getURL().toString().replace(/[#?].*/,\"\");\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 (urlString.match(/\\.js$/i) && lively.preferences.get(\"BabylonianProgramming\")) {\n      editorType = \"babylonian-programming-editor\"\n    }\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    if (urlString.match(/((shadama))$/i)) {\n      editorType = \"lively-shadama-editor\"\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: indentationWidth(),\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      livelyEditor.setText(this.sourceContent); // directly setting the source we got\n      if (livelyEditor.checkAndLoadAnnotations) {\n        await livelyEditor.checkAndLoadAnnotations()\n      }\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) {\n      const cmURL = \"\" + url;\n      if (cmURL.match(/\\.((js)|(py))$/)) {\n        codeMirror.setTargetModule(\"\" + url); // for editing\n      }\n      \n      // preload file for autocompletion\n      if (cmURL.endsWith('.js')) {\n        codeMirror.ternWrapper.then(tw => tw.request({\n          files: [{\n            type: 'full',\n            name: codeMirror.getTargetModule(),\n            text: codeMirror.value\n          }]\n        }));\n      }\n      \n      if (this.anchor) {\n        this.scrollToAnchor(this.anchor)\n      }\n    }\n\n  }\n\n  getHTMLSource() {\n    this.getContentRoot().querySelectorAll(\"*\").forEach( ea => {\n      if (ea.livelyPrepareSave)\n        ea.livelyPrepareSave();\n    });\n    return this.getContentRoot().innerHTML\n  }\n\n  /*MD ## Save Content MD*/\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.childNodes[0] && contentElement.childNodes[0].livelySource) {\n      var source = contentElement.childNodes[0].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 url = this.getURL()\n    if (!url) return false;\n    if (url.toString().match(/\\/$/)) return false // isDirectory...\n    \n    var editor = this.get(\"#editor\");\n    if (!editor) return this.contentChanged;\n    return  editor.textChanged;\n  }  \n  /*MD ## ContentChange MD*/\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.getURL().pathname.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 \n\n  \n  /*MD ## Focus / Scroll / Navigation MD*/\n  \n  focus() {\n    const livelyCodeMirror = this.getLivelyCodeMirror();\n    if (livelyCodeMirror) { \n      livelyCodeMirror.focus(); \n    } else {\n      this.get(\"lively-container-navbar\").focus()  \n    }\n  }\n  \n  async navigateToName(name, data) {\n    // lively.notify(\"navigate to \" + name);\n    var baseURL = this.getURL().toString().replace(/\\#.*/,\"\")\n    var anchor = \"#\" + encodeURIComponent(name.replace(/# ?/g,\"\").replace(/\\*/g,\"\"))\n    var nextURL = baseURL + anchor\n    var codeMirrorComp = this.getLivelyCodeMirror()\n    \n    this.setPathAttributeAndInput(nextURL)\n    this.history().push(nextURL);\n      \n    \n    if (codeMirrorComp) {\n      if (data && data.start) { // we have more information\n        // can't use this.getSourceCode() because it may be different saved one\n        var savedSourceCode = await fetch(\"cached://\" + data.url).then(r => r.text())\n        \n        codeMirrorComp.scrollToCodeElement(data, savedSourceCode)\n      } else {\n        codeMirrorComp.find(name);\n      }\n    } else {      \n      \n      this.scrollToAnchor(anchor, true)\n    }\n  }\n  \n\n  /*MD ## UI MD*/\n\n\n  clear() {\n    this.clearLoadingInfo()\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\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  async switchBetweenJSAndHTML() {\n    const ending = this.getPath().replace(/[#?].*/,\"\")::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().match(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  // #private\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  observeHTMLChanges() {\n    if (this.mutationObserver) this.mutationObserver.disconnect()\n    this.mutationObserver = new MutationObserver((mutations, observer) => {\n        this.onHTMLMutation(mutations, observer)\n    });\n     this.mutationObserver.observe(this, {\n      childList: true,\n      subtree: true,\n      characterData: true,\n      attributes: true});\n  }\n  /*MD ## Update External Content MD*/\n  \n  updateCSS() {\n    var url = \"\" + this.getURL()\n    \n    console.log('[container] updateCSS ', url)\n    \n    var all = Array.from(lively.allElements(true))\n    all.push(...document.head.querySelectorAll(\"link\"))\n    \n    Object.values(lively.components.templates).forEach(template => {\n      all.push(...template.querySelectorAll(\"*\"))      \n    })\n    \n    all.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    all.filter(ea => ea.localName == \"style\") \n      .filter(ea => ea.getAttribute(\"data-url\") == url) // vs. this.getAttribute(\"data-src\")\n      .forEach(ea => {\n        lively.fillTemplateStyle(ea, url)\n        lively.notify(\"update style css\", url)\n      })\n  }\n\n  updateOtherContainers(url=\"\" + this.getURL()) {\n    console.warn('updateOtherContainers')\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  /*MD ## Content Navigation MD*/\n  \n  async scrollToAnchor(anchor, preventRecursion=false) {\n    if (anchor) {\n      var name = decodeURI(anchor.replace(/#/,\"\")).replace(/\\n/g,\"\")\n      if (this.isEditing()) {\n        \n        // use Navbar and it's structural knowledge to find the right name\n        var codeMirror = (await this.asyncGet(\"#editor\")).currentEditor();\n        var navbar = await this.asyncGet(\"lively-container-navbar\")\n        await lively.waitOnQuerySelector(navbar.shadowRoot, \"#details ul li\") // wait for some content\n        var item = navbar.detailItems.find(ea => ea.name == name)\n        if (item && !preventRecursion) {\n          // #Issue... endless recursion here....\n          navbar.onDetailsItemClick(item, new CustomEvent(\"nothing\"))\n        }\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 by id\n      try {\n        var element = root.querySelector(`#${name.replace(/\"/g,\"%22\").replace(/%2F/g,\"\\\\/\")}`)\n      } catch(e) {\n        // ignore\n      }\n      // 2. search for exactly matching anchors\n      if (!element) {\n        element = root.querySelector(`a[name=\"${name.replace(/\"/g,\"%22\")}\"]`)\n      }\n      // 3. 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      // 4. 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(Strings.escapeRegExp(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  /*MD ## Helper MD*/\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 && 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    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    var path = lively.preferences.getURLParameter(\"load\");\n    \n    var editPath = lively.preferences.getURLParameter(\"edit\");\n    if (editPath) {\n      path = editPath\n      var edit = true\n    }\n    \n    if (path) {\n      // allow nested queries... http://localhost:9005/lively4-core/start.html?load=academic://Tim%20Felgentreff?count=3\n      path = window.location.search.replace(/.*[?&]((load)|(edit))=/,\"\")\n    }\n  \n    \n    let fullscreen = lively.preferences.getURLParameter(\"fullscreen\") == \"true\";\n    if (fullscreen) {\n      this.onFullscreen() // #TODO replace toggle logic with enableFullscreen, disableFullscreen\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  // #Refactor, currently used by _navigation.html\n  // _navigation.html should instead use normal link creation... and we might do magic there?\n  // #deprecated #Problem related to html.fixLinks\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  // #deprecated\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      this.clear()\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  // #private\n  normalizeURL(urlString) {\n    var url = new URL(urlString);\n    url.pathname = lively.paths.normalize(url.pathname);\n    return  \"\" + url;\n  }\n  \n  /*MD ## Markdown Source Mapping \n  \n  ![](../../../doc/figures/markdown-mapping.drawio)\n  \n  MD*/\n  \n  async onMarkdownContextMenu(evt, markdown, elements) {\n    let menuItems = [\n      ['edit source', () => this.showMarkdownElement(elements[0]), '', ``],\n      ['edit', () => this.editMarkdownElement(elements.last, markdown), '', ``],\n      ['show annotations', () => this.showMarkdownAnnotations(markdown), '', ``],\n    ];\n    var checkbox = elements[0].querySelector(`input[type=\"checkbox\"]`)\n    if (checkbox) {\n      menuItems.push([\"check\", async () => { \n        this.markdownCheckCheckboxAndSave(checkbox)\n      }])\n    }\n    let menu = await ContextMenu.openIn(document.body, evt, undefined, document.body,  menuItems);\n    return false\n  }\n  \n  async markdownCheckCheckboxAndSave(checkbox) {\n    var elements = lively.allParents(checkbox).filter(ea => ea.getAttribute(\"data-source-line\"))\n    checkbox.checked = !checkbox.checked\n    if (checkbox.checked) {\n      checkbox.setAttribute(\"checked\", undefined)\n    } else {\n      checkbox.removeAttribute(\"checked\")\n    }\n    var source = await this.elementToMarkdown(elements.last)\n    var range = this.getMarkdownRange(elements.last)\n    this.saveRegionWithEditor(this.getURL(), range, source)   \n  }\n  \n  \n  getMarkdownRange(element) {\n    var sourceLine = element.getAttribute(\"data-source-line\")\n    return sourceLine && sourceLine.split(\"-\").map(n => parseFloat(n))\n  }\n  \n  setMarkdownRange(element, range) {\n    element.setAttribute(\"data-source-line\", range[0] + \"-\" +  range[1])\n  }\n  \n  \n  onMarkdownEditorCursorActivity(cm, markdown) {\n    var line = cm.getCursor().line + 1\n    var root = markdown.get(\"#content\")\n    var highlights = markdown.get(\"#highlights\")\n    \n    var elements = root.querySelectorAll(`[data-source-line]`).filter(ea => {\n      var range = this.getMarkdownRange(ea)\n      return (range[0] == line) // && (line < range[1])\n    })\n    if (elements.length > 0) {\n      var element = Array.from(elements).last\n      var slide = lively.allParents(element).find(ea => ea.classList.contains(\"lively-slide\"))\n\n      if (slide) {\n        var presentation = lively.allParents(element).find(ea => ea.localName == \"lively-presentation\")\n        if (presentation) presentation.setSlide(slide)  \n      }\n\n      if (this.lastEditCursorHighlight ) this.lastEditCursorHighlight.remove()\n      this.lastEditCursorHighlight = lively.showElement(element)\n      this.lastEditCursorHighlight.style.borderColor = \"rgba(0,0,200,0.5)\"\n      this.lastEditCursorHighlight.innerHTML = \"\"\n      highlights.appendChild(this.lastEditCursorHighlight)\n      this.lastEditCursorHighlight\n      lively.setGlobalPosition(this.lastEditCursorHighlight, lively.getGlobalPosition(element))\n    }\n  }\n  \n  onMarkdownClick(evt) {\n    var markdownElements = evt.composedPath().filter(ea => ea && ea.getAttribute && ea.getAttribute(\"data-source-line\"))\n    if (markdownElements.length == 0) return;\n    var last = markdownElements.first\n\n    var otherContainer = this.getOtherContainers(true)[0]\n    if (otherContainer) {\n      this.containerShowMarkdownElement(otherContainer, last)\n    }\n  }\n  \n  async showMarkdownElement(element) {\n    var otherContainer = this.getOtherContainers(true)[0]\n    if (!otherContainer) {\n      otherContainer = await lively.openBrowser(this.getURL().toString(), true)\n    }\n    this.containerShowMarkdownElement(otherContainer, element)\n    \n  }\n\n  async elementToMarkdown(element) {\n    var markdownConverter = new Upndown()\n    markdownConverter.tabindent = \"  \"\n    markdownConverter.bullet = \"- \"\n    return markdownConverter.convert(element.outerHTML, {keepHtml: true})\n  }\n  \n  async editMarkdownElement(element, markdown) {\n    var source = await this.elementToMarkdown(element)\n    var range = this.getMarkdownRange(element)\n    var rangeOffset = range[0] - 1\n    \n    if (this.lastMarkdownWorkspace) {\n      if (this.lastMarkdownWorkspace.targetElement) {\n        this.lastMarkdownWorkspace.targetElement.style.display = \"\"\n      }\n      this.lastMarkdownWorkspace.remove()\n    }\n    \n    \n    var workspace = await (<lively-code-mirror mode=\"gfm\"></lively-code-mirror>)\n    workspace.targetElement = element\n    \n    this.lastMarkdownWorkspace = workspace\n\n    \n    element.parentElement.insertBefore(workspace, element)\n    element.style.display = \"none\"\n    await  workspace.editorLoaded()    \n    workspace.value = source\n    workspace.focus()\n    workspace.registerExtraKeys({\n      Enter: async () => {\n        await workspace.doSave()\n        element.style.display = \"\"\n\n\n        var root = <div></div>\n            \n        // Just a preview... since we have to reload later .... #TODO make the real thing?\n        await markdown.renderMarkdown(root, workspace.value)\n        Array.from(root.childNodes).forEach(ea  => {\n          workspace.parentElement.insertBefore(ea, workspace)\n\n          var tmpRange =  this.getMarkdownRange(ea)\n          tmpRange[0] += rangeOffset\n          tmpRange[0] += rangeOffset\n          this.setMarkdownRange(element, range)\n          \n          \n          // lively.showElement(ea)\n        })\n        \n        // #TODO fix data-source-line ... in elements after this element! or give up and reload!\n        this.followPath(this.getURL()) // #GiveUp\n        \n        element.remove()\n        workspace.remove()\n      }\n    })\n\n    // prevent slide navigation etc....\n    workspace.addEventListener(\"keydown\", async (evt) => {\n      evt.stopPropagation();\n    })\n    \n    workspace.doSave = async () => {\n      lively.notify(\"save range \" + range[0] + \"-\" + range[1])\n      range = await this.saveRegionWithEditor(this.getURL(), range, workspace.value)    \n    }\n    \n  }\n  \n  async showMarkdownAnnotations(markdown) {\n    var url = this.getURL()\n    var annotationURL = url.replace(/([?#].*$)/,\"\") + \".l4a\"\n    if (await lively.files.exists(annotationURL)) {\n      var annotatedText = await AnnotatedText.fromURL(url, annotationURL)\n      var root = markdown.get(\"#content\")\n      var renderedText = root.textContent\n\n      annotatedText.setText(renderedText)\n\n\n      for(var ea of annotatedText.annotations) {\n        ea.annotateInDOM(root)\n      }      \n    }\n  }\n  \n  async saveRegionWithEditor(url, range, text) {\n    var editor = await lively.create(\"lively-editor\");\n    editor.setURL(url)\n    await editor.loadFile()\n    var cm = editor.currentEditor()\n    \n    // #Hack... realy hack: preserve trailing lines... because outerHTML and the markdown range only fit roughly \n    var lines = cm.getValue().split(\"\\n\")\n    var lastRangeLine = range[1] - 2\n    if (lines[lastRangeLine] == \"\") {\n      range[1]--\n    }\n    \n    cm.setSelection({line: range[0] - 1, ch:0 }, {line: range[1] - 1, ch:0 })    \n    cm.replaceSelection(text + \"\\n\")\n\n    // update element...\n    var newRangeHeight = text.split(\"\\n\").length\n    range[1] = range[0] + newRangeHeight\n    editor.saveFile()\n    return range\n  }\n  \n  containerShowMarkdownElement(otherContainer, element) {\n    var livleyEditor = otherContainer.get('#editor')\n    var livleyCodeMirror = livleyEditor && livleyEditor.get('#editor')\n    var cm = livleyCodeMirror && livleyCodeMirror.editor\n\n    if (cm) {\n      var line = element.getAttribute(\"data-source-line\").split(\"-\")[0]\n      // cm.setCursor({line: line - 1, ch: 0}) \n      cm.setSelection({line: line - 1, ch: 0}, {line: line , ch: 0})         \n      otherContainer.parentElement.focus()\n      otherContainer.focus()\n    }\n  }\n  \n\n  \n  \n  /*MD ## Lively Hooks MD*/\n  \n  // #hook 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  // #hook\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  // #hook\n  livelyAcceptsDrop() {\n    return this.contentIsEditable() && !this.isEditing()\n  }\n\n  // #hook\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  // #hook\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  // #hook\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  // #hook\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  // #hook\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}\n"]}