{"version":3,"sources":["https://lively-kernel.org/lively4/composed-offset/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","hasAttribute","leftFlex","leftWidth","rightFlex","rightWidth","getJSONAttribute","leftPane","style","flex","width","rightPane","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","altRight","toggleNavbar","big","small","flexBasis","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","setJSONAttribute","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    if (this.hasAttribute(\"pane-positioning\")) {\n      const { leftFlex, leftWidth, rightFlex, rightWidth } = this.getJSONAttribute(\"pane-positioning\")\n      \n      const leftPane = this.get(\"#container-leftpane\");\n      leftPane.style.flex = leftFlex\n      leftPane.style.width = leftWidth\n      \n      const rightPane = this.get(\"#container-rightpane\");\n      rightPane.style.flex = rightFlex\n      rightPane.style.width = rightWidth\n    }\n\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    if (this.sourceContent.match(/\\\"disable livecode\\\"/)) {\n      lively.notify(\"disabled livecode\")\n      return\n    }\n    \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    } else if (evt.key === '[' && (evt.altKey && !evt.ctrlKey && !evt.shiftKey || evt.altRight)) {\n      this.toggleNavbar()\n    } else {\n      // lively.notify(evt.key, evt.code)\n    }\n  }\n  \n  // switch between files-only and details-only view\n  toggleNavbar() {\n    const navbar = this.navbar();\n    navbar.style.width = '0'\n    navbar.style.flex = '200px'\n\n    const files = navbar.get('#navbar')\n    const details = navbar.get('#details')\n\n    files.style.width = 'unset'\n    details.style.width = 'unset'\n\n    const big = '100%';\n    const small = '0%';\n    if (details.style.flexBasis === big) {\n      files.style.flex = big\n      details.style.flex = small\n    } else {\n      files.style.flex = small\n      details.style.flex = big\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    this.dispatchEvent(new CustomEvent(\"save-started\"));\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      this.dispatchEvent(new CustomEvent(\"save-finished\"));\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    const leftPane = this.get(\"#container-leftpane\");\n    const rightPane = this.get(\"#container-rightpane\");\n    this.setJSONAttribute(\"pane-positioning\", {\n      leftFlex: leftPane.style.flex,\n      leftWidth: leftPane.style.width,\n      rightFlex: rightPane.style.flex,\n      rightWidth: rightPane.style.width,\n    })\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"]}