{"version":3,"sources":["https://lively-kernel.org/lively4/lively4-function-completion/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","ScopedScripts","Container","target","childNodes","initialize","getAttribute","setAttribute","windowTitle","isSearchBrowser","contentChangedDelay","checkForContentChanges","debounce","lively","addEventListener","evt","onMouseDown","html","addDeepMousePressed","get","history","url","unwindAndFollowHistoryUntil","forwardHistory","unwindAndFollowForwardHistoryUntil","dispatchEvent","CustomEvent","path","edit","useBrowserHistory","viewOrEditPath","input","code","onPathEntered","value","altKey","focusFiles","onclick","e","onFullscreen","registerButtons","onContextMenu","onKeyDown","onClick","hideCancelAndSave","hideControls","withAttributeDo","style","flex","onEditorBackNavigation","livelyContentLoaded","editFile","followPath","toString","match","normalizeURL","unsavedChanges","confirm","scrollToAnchor","m","options","fetch","method","then","r","json","window","location","host","open","donotfollowpath","lastPath","_","last","startsWith","replace","push","opts","isFullscreen","isEditing","pushState","followInline","pathname","setPath","getPath","encodeURI","shadowRoot","querySelector","donotrender","display","viewNav","setPosition","disable","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","appendChild","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","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","loadModule","module","modules","lastLoadingFailed","b","border","moduleName","slice","details","openTemplateInstance","name","comp","openComponentInWindow","livelyExample","urlInHistory","pop","deleteFile","urls","includes","allURLs","Set","has","add","endsWith","newfile","walkDir","Array","from","sortBy","reverse","prefix","longestCommonPrefix","map","names","customDialog","dialog","messageDiv","maxHeight","backgroundColor","msg","join","result","update","renameFile","base","newName","prompt","newURL","moveFile","newFile","ending","fileName","s","select","setSelectionRange","index","saveFile","showCancelAndSave","focus","newDirectory","char","String","fromCharCode","keyCode","charCode","ctrlKey","metaKey","shiftKey","onAccept","stopPropagation","key","switchBetweenJSAndHTML","composedPath","find","elements","onMarkdownContextMenu","worldContext","openContextMenu","undefined","onMarkdownClick","toggleControls","parentElement","isMaximized","toggleMaximize","zIndex","onToggleOptions","classList","contains","onFavorite","toggle","onBeautify","lastText","beautifulText","global","js_beautify","css_beautify","html_beautify","setText","onDelete","onApply","openBrowser","onHome","clearNavbar","onSync","createComponent","compWindow","openInWindow","w","serverURL","setServerURL","repo","setRepository","sync","onEdit","onCancel","onUp","onBack","lastBackButtonClicked","halo","onBodyMouseDown","onForward","onBrowse","onDependencies","tree","dataName","d","setTreeData","findDependedModulesGraph","setExtent","focusDetails","onSaveAs","newPath","saveEditsInView","doNotQuit","setURL","__ignoreUpdates","LastURL","templateSourceCode","updateTemplate","updateCSS","updateOtherContainers","testRegexp","checked","findDependedModules","forEach","onNewfile","onNewdirectory","onVersions","toggleVersions","onTextChanged","onHTMLMutation","mutations","observer","isPersisting","record","indicator","onMarkdownEditorCursorActivity","md","bind","setContent","startPresentation","gotoSlideAt","contentRoot","markdownCheckCheckboxAndSave","showElement","innerHTML","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","enable","resetContentChanges","observeHTMLChanges","table","setFromCSV","node","loadByName","hideNavbar","getExtent","x","navbar","contextURL","navigateToName","data","show","showsControls","showControls","containerContent","containerEditor","codeMirror","session","setOptions","mode","tabSize","useSoftTabs","changeModeForFile","checkAndLoadAnnotations","selection","moveCursorTo","lineWidth","setWrapLimit","renderer","setPrintMarginColumn","setTargetModule","getHTMLSource","livelyPrepareSave","saveSource","source","saveHTML","saveMarkdown","htmlAsMarkdownSource","contentElement","livelySource","contentChanged","textChanged","lastChecked","oldActiveElement","activeElement","currentSource","lastSource","updateChangeIndicator","baseURL","encodeURIComponent","nextURL","start","posFromIndex","end","setSelection","rect","getWrapperElement","getBoundingClientRect","topVisibleLine","lineAtHeight","top","bottomVisibleLine","bottom","line","scrollToLine","visibleLines","each","visibility","targetURLString","existingContainer","gotoWindow","browser","starIcon","mutationObserver","disconnect","MutationObserver","observe","childList","subtree","characterData","attributes","allElements","href","parent","fillTemplateStyle","warn","waitOnQuerySelector","item","detailItems","onDetailsItemClick","pageNumberMatch","parseInt","element","allTextNodes","escapeRegExp","previousElementSibling","slide","allParents","setSlide","offset","getGlobalPosition","subPt","y","becomeMainContainer","hideTitlebar","onpopstate","event","state","preferences","getURLParameter","editPath","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","getCursor","lastEditCursorHighlight","borderColor","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","ch","replaceSelection","newRangeHeight","livleyEditor","livleyCodeMirror","localizePosition","pos","offsetBounds","left","livelyAllowsSelection","livelyAcceptsDrop","livelyPreMigrate","oldContentScroll","oldScrollInfo","getScrollInfo","oldCursor","oldFocused","livelyTarget","markdownElement","livelyMigrate","isMigrating","otherCodeMirror","getRange","getScrollTop","thisCodeMirror","setScrollTop","setRange","setScrollInfo","setCursor"],"mappings":"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","file":"lively-container.js","sourcesContent":["/*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\"\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    \tpath = this.getAttribute(\"src\");\n    \tedit = this.getAttribute(\"mode\") == \"edit\"\n    }\n    this.viewOrEditPath(path, edit)\n   \n    \n    // #TODO very ugly... I want to hide that level of JavaScript and just connect \"onEnter\" of the input field with my code\n    var input = this.get(\"#container-path\");\n    input.addEventListener(\"keyup\", evt => {\n      if (evt.code == \"Enter\") { \n        this.onPathEntered(input.value);\n      }\n      if (evt.altKey && evt.code == \"ArrowDown\") {\n        this.get(\"lively-container-navbar\").focusFiles()\n      }\n    });\n    this.get(\"#fullscreenInline\").onclick = (e) => this.onFullscreen(e);\n\n    this.registerButtons();\n\n    this.addEventListener('contextmenu',  evt => this.onContextMenu(evt), false);\n    this.addEventListener('keydown',   evt => this.onKeyDown(evt));\n    this.setAttribute(\"tabindex\", 0);\n    this.addEventListener('click',   evt => this.onClick(evt));\n    this.hideCancelAndSave();\n\n    if(this.getAttribute(\"controls\") ==\"hidden\") {\n      this.hideControls()\n    }\n    this.withAttributeDo(\"leftpane-flex\", value =>\n      this.get(\"#container-leftpane\").style.flex = value)\n    this.withAttributeDo(\"rightpane-flex\", value =>\n      this.get(\"#container-rightpane\").style.flex = value)\n    \n    this.addEventListener(\"editorbacknavigation\", (evt) => {\n      this.onEditorBackNavigation(evt)\n    }) \n  }\n  /*MD ## Navigation MD*/\n  // #private\n  viewOrEditPath(path, edit) {\n     if (path) {\n      if (edit) {\n        this.livelyContentLoaded = this.editFile(path);\n      } else {    \n        this.livelyContentLoaded = this.followPath(path)\n      }      \n    }\n  }\n  \n  // #important #api\n  async followPath(path) {\n    if (path.toString().match(/^https?:\\/\\//)) {\n      path = this.normalizeURL(path);\n    }\n    \n    if (this.unsavedChanges()) {\n      if (!await lively.confirm(\"You will lose unsaved changes, continue anyway?\")) {\n        return;\n      }\n    }\n    \n    if (path.match(/^#/)) {\n      // just anchor navigation\n      return this.scrollToAnchor(path)\n    }\n    \n\n    var m = path.match(/start\\.html\\?load=(.*)/);\n    if (m) {\n      return this.followPath(m[1]);\n    }\n    \n    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        return window.open(path);\n      }\n    }\n    if (options && options.donotfollowpath) {\n      fetch(path) // e.g. open://my-component\n      return ;\n    }\n\n    var lastPath = _.last(this.history())\n    if (lastPath !== path) {\n      if (lastPath && path && path.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  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    \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    \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      \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      } 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('lively-editor');\n    return livelyEditor && livelyEditor.get && livelyEditor.get('#editor');\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$/) || this.getURL().pathname.match(/\\.md$/)\n  }\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 rest-runner to run \" + url.toString().replace(/.*\\//,\"\"));\n    }\n  }\n\n  async loadModule(url) {\n    return lively.reloadModule(\"\" + url, true).then(module => {\n      lively.notify(\"\",\"Module \" + url + \" reloaded!\", 3, null, \"green\");\n\n      this.resetLoadingFailed();\n    }, err => {\n      this.loadingFailed(url, err);\n    });\n  }\n\n  resetLoadingFailed() {\n    // that.resetLoadingFailed()\n    // System.import(urlString)\n    var urlString = this.getURL().toString();\n\n    // #TODO #babel6refactoring\n    if (lively.modules) {\n      if (urlString.match(/\\.js$/)) {\n        var m = lively.modules.module(urlString);\n      }\n    }\n    this.lastLoadingFailed = false;\n    var b = this.get(\"#apply\"); if (b) b.style.border = \"\";\n\n  }\n\n  loadingFailed(moduleName, err) {\n    this.lastLoadingFailed = err;\n    this.get(\"#apply\").style.border = \"2px solid red\";\n\n    lively.notify({\n      title: \"Error loading module \" + moduleName,\n      text:  err.toString().slice(0,200),\n      color: \"red\",\n      details: err});\n    console.error(err);\n  }\n\n  async openTemplateInstance(url) {\n      var name = url.toString().replace(/.*\\//,\"\").replace(/\\.((html)|(js))$/,\"\");\n      var comp = await lively.openComponentInWindow(name);\n      if (comp.livelyExample) comp.livelyExample(); // fill in with example content\n  }\n  /*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\n  \n  \n  \n  async deleteFile(url, urls) {\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      this.setPath(url.replace(/\\/$/, \"\").replace(/[^/]*$/, \"\"));\n      this.hideCancelAndSave();\n      \n      lively.notify(\"deleted \" + names);\n    }\n  }\n\n  async renameFile(url) {\n    url = \"\" + url\n    var base = url.replace(/[^/]*$/,\"\")\n    var name = url.replace(/.*\\//,\"\")\n\n    var newName = await lively.prompt(\"rename\", name)\n    if (!newName) {\n      lively.notify(\"cancel rename \" + name)\n      return\n    }\n    var newURL = base + newName\n    if (newURL != url) {\n      await files.moveFile(url, newURL)\n      \n      this.setPath(newURL);\n      this.hideCancelAndSave();\n\n      lively.notify(\"moved to \" + newURL);\n    }\n  }\n  \n  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      if (evt.shiftKey) {\n        this.onAccept();\n      } else {\n        this.onSave();\n      }\n      evt.preventDefault();\n      evt.stopPropagation();\n    } else if(evt.key == \"F7\") {\n      this.switchBetweenJSAndHTML();\n      evt.stopPropagation();\n      evt.preventDefault();\n    }\n  }\n  \n  onContextMenu(evt) {\n    // fall back to system context menu if shift pressed\n    if (!evt.shiftKey) {\n      evt.preventDefault();\n      evt.stopPropagation();\n      \n      var path = evt.composedPath()\n      var markdown = path.find(ea => ea.localName == \"lively-markdown\") \n      if (markdown) {\n        var elements = path.filter(ea => ea.getAttribute &&  ea.getAttribute(\"data-source-line\"))\n        if (elements.length > 0) {\n          this.onMarkdownContextMenu(evt, markdown, elements)\n          return false\n        }\n      }\n      \n      var worldContext = document.body; // default to opening context menu content globally\n      // opening in the content makes only save if that content could be persisted and is displayed\n      if (this.contentIsEditable() && !this.isEditing()) {\n        worldContext = this\n      }\n\t    lively.openContextMenu(document.body, evt, undefined, worldContext);\n\t    return false;\n    }\n  }\n  \n \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  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': 2,\n        'wrap_line_length': 120,\n      },\n      'indent_size': 2,\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      this.openTemplateInstance(url);\n    } else if (url.match(/\\.js$/))  {\n      this.reloadModule(url);\n    } else {\n      lively.openBrowser(url);\n    }\n  }\n\n  onHome() {\n    this.clearNavbar()\n    this.followPath(lively4url)\n  }\n\n  async onSync(evt) {\n    var comp = lively.components.createComponent(\"lively-sync\");\n    var compWindow;\n    lively.components.openInWindow(comp).then((w) => {\n      compWindow = w;\n      lively.setPosition(w, lively.pt(100, 100));\n    });\n\n    var serverURL = lively4url.match(/(.*)\\/([^\\/]+$)/)[1];\n    comp.setServerURL(serverURL);\n    console.log(\"server url: \" + serverURL);\n    if (!this.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.openComponentInWindow(\"d3-tree\").then(tree => {\n      tree.dataName = function(d) {\n        return d.name.replace(/.*\\//,\"\").replace(/\\.js/,\"\")\n      }\n      tree.setTreeData(lively.findDependedModulesGraph(this.getURL().toString()))\n      lively.setExtent(tree.parentElement, pt(1200,800))\n      tree.parentElement.setAttribute(\"title\", \"Dependency Graph: \" + this.getURL().toString().replace(/.*\\//,\"\"))\n    })\n  }\n  \n  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\n  \n  // #important\n  async onSave(doNotQuit) {\n    var url = this.getURL()\n    url = url.toString().replace(/#.*/, \"\"); // strip anchors while saving and loading files\n    if (!this.isEditing()) {\n      this.saveEditsInView();\n      return;\n    }\n\n    if (this.getURL().pathname.match(/\\/$/)) {\n      files.saveFile(url,\"\");\n\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    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);\n\n      }\n    }\n    if (this.getURL().pathname.match(/.*css/)) {\n      this.updateCSS();\n    }\n    this.updateOtherContainers();\n\n    var moduleName = this.getURL().pathname.match(/([^/]+)\\.js$/);\n    if (moduleName) {\n      moduleName = moduleName[1];\n\n      const testRegexp = /((test\\/.*)|([.-]test)|([.-]spec))\\.js/;\n      if (this.lastLoadingFailed) {\n        console.log(\"last loading failed... reload\")\n        await this.reloadModule(url); // use our own mechanism...\n      } else if (this.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    \n    // something async... \n    lively.sleep(5000).then(() => {\n      this.__ignoreUpdates = false\n      this.parentElement.__ignoreUpdates = false\n    })\n  }\n  \n  onNewfile() {\n    this.newFile(this.getPath())\n  }\n\n  async onNewdirectory() {\n    this.newDirectory(this.getPath())\n  }\n  \n\n\n\n  onVersions() {\n    this.get(\"#editor\").toggleVersions();\n  }\n\n  onAccept() {\n    this.onSave().then((sourceCode) => {\n      this.setAttribute(\"mode\", \"show\");\n      this.setPath(this.getPath());\n      this.hideCancelAndSave();\n    });\n  }\n\n  \n  async onTextChanged() {\n    if (!this.getURL().pathname.match(/\\.js$/)) {\n      return\n    }\n  }\n\n  onHTMLMutation(mutations, observer) {\n    if (this.isPersisting) return // we mutate while persisting\n\n    mutations.forEach(record => {\n\n      var indicator = this.get(\"#changeIndicator\")\n      if (indicator ) {\n        indicator.style.backgroundColor = \"rgb(250,250,0)\";\n      }\n\n      // if (record.target.id == 'console'\n      //     || record.target.id == 'editor') return;\n\n      this.contentChangedDelay()\n\n      // let shouldSave = true;\n      if (record.type == 'childList') {\n      //     let addedNodes = [...record.addedNodes],\n      //         removedNodes = [...record.removedNodes],\n      //         nodes = addedNodes.concat(removedNodes);\n\n      //     //removed nodes never have a parent, so remeber orphans when they are created\n      //     for (let node of addedNodes) {\n      //         if (hasParentTag(node) == false) {\n      //             orphans.add(node);\n      //         }\n      //     }\n\n      //     // shouldSave = hasNoDonotpersistFlagInherited(addedNodes) || checkRemovedNodes(removedNodes, orphans);\n\n      //     //remove removed orphan nodes from orphan set\n      //     for (let node of removedNodes) {\n      //         if (orphans.has(node)) {\n      //             orphans.delete(node);\n      //         }\n      //     }\n      }\n      else if (record.type == 'attributes'\n          || record.type == 'characterData') {\n\n\n          // shouldSave = hasNoDonotpersistFlagInherited([record.target]);\n      }\n\n      // if (shouldSave) {\n          // sessionStorage[\"lively.scriptMutationsDetected\"] = 'true';\n          // restartPersistenceTimerInterval();\n      // }\n    })\n  }\n\n  onEditorCursorActivity(cm) {\n     if(this.getURL().pathname.match(/.*\\.md/)) {\n      var url = this.getURL()\n      var otherContainer = this.getOtherContainers()[0]\n      var markdown = otherContainer && otherContainer.get(\"lively-markdown\")\n      if (markdown) {\n        this.onMarkdownEditorCursorActivity(cm, markdown)\n      }\n    }\n     \n  }\n  \n  \n  /*MD ## Render Content MD*/\n\n  async appendMarkdown(content, renderTimeStamp) {\n    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    // #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          } 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    ViewNav.enable(this)\n\n    \n    // await lively.sleep(500) // wait for renderer to get some positions to scroll to....\n    this.scrollToAnchor(this.anchor)\n    \n    setTimeout(() => {\n      this.resetContentChanges()\n      this.observeHTMLChanges()\n    }, 0)\n    \n  }\n\n  async appendCSV(content, renderTimeStamp) {\n    var container=  this.get('#container-content');\n    var table = await lively.create(\"lively-table\")\n    table.setFromCSV(content)\n    \n    if (renderTimeStamp && this.renderTimeStamp !== renderTimeStamp) {\n      return \n    }\n    container.appendChild(table)\n  }\n\n\n  async appendTemplate(name, renderTimeStamp) {\n    try {\n    \tvar node = lively.components.createComponent(name);\n    \tif (renderTimeStamp && this.renderTimeStamp !== renderTimeStamp) {\n        return \n      }\n      this.getContentRoot().appendChild(node);\n      await lively.components.loadByName(name);\n      \n    } catch(e) {\n      console.log(\"Could not append html:\" + content);\n    }\n  }\n\n  \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).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  /*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    if(path) await this.setPath(path, true /* do not render */) \n    \n    this.clear();\n    var urlString = this.getURL().toString();\n    \n    var containerContent=  this.get('#container-content');\n    containerContent.style.display = \"none\";\n    var containerEditor =  this.get('#container-editor');\n    containerEditor.style.display = \"block\";\n\n\n    this.resetLoadingFailed();\n\n    this.showNavbar();\n\n    \n    \n    // console.log(\"[container] editFile befor getEditor\")\n    // ... demos\\/\n    var editorType = urlString.match(/babylonian-programming-editor\\/demos\\/.*\\js$/) ? \"babylonian-programming-editor\" : \"lively-editor\";\n\n    if (this.sourceContent && this.sourceContent.match('^.*\"enable examples\"')) {\n      editorType = \"babylonian-programming-editor\"\n    }\n    \n    if (urlString.match(/((png)|(jpe?g)|(gif))$/i)) {\n      editorType = \"lively-image-editor\"\n    }\n\n    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: 2,\n          useSoftTabs: true\n        });\n      }\n      codeMirror.changeModeForFile(url.pathname);\n\n      // NOTE: we don't user loadFile directly... because we don't want to edit PNG binaries etc...\n      if (urlString.match(/\\.svg$/)) {\n        this.sourceContent  = await fetch(urlString).then(r => r.text())\n      }\n      \n      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 && (\"\"+url).match(/\\.((js)|(py))$/)) {\n      codeMirror.setTargetModule(\"\" + url); // for editing\n    }\n\n    if (codeMirror && this.anchor) {\n      this.scrollToAnchor(this.anchor)\n    }\n  }\n\n  getHTMLSource() {\n    this.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.livelySource) {\n      var source = contentElement.livelySource()\n      if (source.then) source = await source; // maybe some elements take a while to generate their source\n      return this.saveSource(url, source);\n    } else {\n      lively.notify(\"Editing in view not supported for the content type!\");\n    }\n\n  }\n\n  unsavedChanges() {\n    var 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  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 editor = this.getLivelyCodeMirror()\n    \n    this.setPathAttributeAndInput(nextURL)\n    this.history().push(nextURL);\n      \n    \n    if (editor) {\n      if (data && data.start) { // we have more information\n        var cm = editor.editor\n        var start = cm.posFromIndex(data.start)\n        var end = cm.posFromIndex(data.end)\n        \n        cm.setSelection(start, end)\n        \n        // scroll only if necessary\n        var rect = cm.getWrapperElement().getBoundingClientRect();\n        var topVisibleLine = cm.lineAtHeight(rect.top, \"window\"); \n        var bottomVisibleLine = cm.lineAtHeight(rect.bottom, \"window\");\n        \n        if (start.line < topVisibleLine) {\n          editor.scrollToLine(start.line )\n        } \n        if (end.line > bottomVisibleLine) {\n          var visibleLines = (bottomVisibleLine - topVisibleLine)\n          editor.scrollToLine(end.line - visibleLines)\n        }\n        \n      } else {\n        editor.find(name);\n      }\n    } else {      \n      \n      this.scrollToAnchor(anchor)\n    }\n  }\n  \n\n  /*MD ## UI MD*/\n\n\n  clear() {\n    \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    var all = Array.from(lively.allElements(true))\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.url == url)\n      .forEach(ea => {\n        lively.fillTemplateStyle(ea, url)\n        lively.notify(\"upodate css\", url)\n      })\n  }\n\n  updateOtherContainers() {\n    console.warn('updateOtherContainers')\n    var url = \"\" + this.getURL();\n    document.body.querySelectorAll('lively-container').forEach(ea => {\n      if (ea !== this && !ea.isEditing()\n        && (\"\" +ea.getURL()).match(url.replace(/\\.[^.]+$/,\"\"))) {\n        console.log(\"update container content: \" + ea);\n        ea.setPath(ea.getURL() + \"\");\n        \n      }\n    });\n    \n    updateEditors(url, [this.get(\"lively-editor\")])\n  }\n  \n  /*MD ## Content Navigation MD*/\n  \n  async scrollToAnchor(anchor) {\n    if (anchor) {\n      var name = decodeURI(anchor.replace(/#/,\"\")).replace(/\\n/g,\"\")\n      if (this.isEditing()) {\n        // use Navbar and it's structural knowledge to find the right name\n        var codeMirror = (await this.asyncGet(\"#editor\")).get('#editor');\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) {\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()\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    var editPath = lively.preferences.getURLParameter(\"edit\");\n    if (editPath) {\n      path = editPath\n      var edit = true\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      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    debugger\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 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    }\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 + \".l4a\"\n    if (await lively.files.exists(annotationURL)) {\n      var annotatedText = await AnnotatedText.fromURL(url, annotationURL)\n      var root = markdown.get(\"#content\")\n      var renderedText = root.textContent\n\n      annotatedText.setText(renderedText)\n\n\n      for(var ea of annotatedText.annotations) {\n        ea.annotateInDOM(root)\n      }      \n    }\n  }\n  \n  async saveRegionWithEditor(url, range, text) {\n    var editor = await lively.create(\"lively-editor\");\n    editor.setURL(url)\n    await editor.loadFile()\n    var cm = editor.currentEditor()\n    \n    // #Hack... realy hack: preserve trailing lines... because outerHTML and the markdown range only fit roughly \n    var lines = cm.getValue().split(\"\\n\")\n    var lastRangeLine = range[1] - 2\n    if (lines[lastRangeLine] == \"\") {\n      range[1]--\n    }\n    \n    cm.setSelection({line: range[0] - 1, ch:0 }, {line: range[1] - 1, ch:0 })    \n    cm.replaceSelection(text + \"\\n\")\n\n    // update element...\n    var newRangeHeight = text.split(\"\\n\").length\n    range[1] = range[0] + newRangeHeight\n    editor.saveFile()\n    return range\n  }\n  \n  containerShowMarkdownElement(otherContainer, element) {\n    var livleyEditor = otherContainer.get('#editor')\n    var livleyCodeMirror = livleyEditor && livleyEditor.get('#editor')\n    var cm = livleyCodeMirror && livleyCodeMirror.editor\n\n    if (cm) {\n      var line = element.getAttribute(\"data-source-line\").split(\"-\")[0]\n      // cm.setCursor({line: line - 1, ch: 0}) \n      cm.setSelection({line: line - 1, ch: 0}, {line: line , ch: 0})         \n      otherContainer.parentElement.focus()\n      otherContainer.focus()\n    }\n  }\n  \n\n  \n  \n  /*MD ## Lively Hooks MD*/\n  \n  // #hook make a gloval position relative, so it can be used in local content\n  localizePosition(pos) {\n    var offsetBounds = this.get('#container-content').getBoundingClientRect();\n    return pos.subPt(pt(offsetBounds.left, offsetBounds.top));\n  }\n  \n  // #hook\n  livelyAllowsSelection(evt) {\n    if (!this.contentIsEditable() || this.isEditing()) return false\n\n    if (evt.composedPath()[0].id == \"container-content\") return true;\n\n    return false\n  }\n  \n  // #hook\n  livelyAcceptsDrop() {\n    return this.contentIsEditable() && !this.isEditing()\n  }\n\n  // #hook\n  livelyPrepareSave() {\n    this.setAttribute(\"leftpane-flex\", this.get(\"#container-leftpane\").style.flex)\n    this.setAttribute(\"rightpane-flex\", this.get(\"#container-rightpane\").style.flex)\n  }\n\n  // #hook\n  livelyPreMigrate() {\n    // do something before I got replaced\n    this.oldContentScroll = this.get(\"#container-content\").scrollTop;\n \t  var livelyEditor = this.get(\"#editor\");\n    if (livelyEditor) {\n      this.oldScrollInfo = livelyEditor.getScrollInfo()\n      this.oldCursor = livelyEditor.getCursor()\n      this.oldFocused = document.activeElement == this\n    }\n  }\n\n  // #hook\n  async livelyExample() {\n    return this.followPath(lively4url + \"/README.md\")\n  }\n\n  // customize clipboard interaction... etc\n  // navigating in this multidimensional space can be hard\n  // #hook\n  livelyTarget() {\n    var markdownElement = this.get(\"lively-markdown\")\n    if (markdownElement && markdownElement.get) { // maybe not initialized yet.. damn! \n      return markdownElement.get(\"#content\")\n    }\n    return this\n  }\n  \n  // #hook\n  livelyMigrate(other) {\n    // other = that\n\n    this._history = other._history;\n    this._forwardHistory = other._forwardHistory;\n    \n    this.isMigrating = true;\n    this.preserveContentScroll = other.oldContentScroll;\n    var editor = other.get(\"#editor\");\n    if (editor) {\n      var otherCodeMirror = editor.currentEditor();\n      if (otherCodeMirror && otherCodeMirror.selection) {\n        var range = otherCodeMirror.selection.getRange();\n        var scrollTop = otherCodeMirror.session.getScrollTop();\n        this.asyncGet(\"#editor\").then( editor => {\n          var thisCodeMirror = editor.currentEditor();\n          if (otherCodeMirror && thisCodeMirror) {\n            thisCodeMirror.session.setScrollTop(scrollTop);\n            thisCodeMirror.selection.setRange(range);\n          }\n          this.isMigrating = false;\n        }).catch(() => {\n          // jsut to be sure..\n          this.isMigrating = false;\n        });\n      }\n      this.asyncGet(\"#editor\").then( editor => {\n        editor.setScrollInfo(other.oldScrollInfo)\n      \teditor.setCursor(other.oldCursor)\n      \tif (other.oldFocused) {\n      \t  // lively.notify(\"set focus again!\")\n      \t  // setTimeout(() => editor.focus(), 1000)\n        }\n      })\n    } else {\n      this.isMigrating = false;\n    }\n  }\n  \n}\n"]}