{"version":3,"sources":["https://lively-kernel.org/lively4/composed-offset/src/client/files.js"],"names":["generateUuid","uuid","_","sourcemap","Files","fillCachedFileMap","root","lively4url","filelist","fetch","method","headers","then","r","json","contents","map","ea","name","replace","url","cachedFileMap","set","exists","self","lively4cacheFiles","Map","sourceMapConsumerForURL","sourceMapConsumerCache","smc","moduleData","System","metadata","load","sourceMap","SourceMapConsumer","console","warn","parseSourceReference","ref","match","args","split","m","lineAndColumn","originalPositionFor","line","Number","column","toString","fetchChunks","fetchPromise","eachChunkCB","doneCB","response","reader","body","getReader","decoder","TextDecoder","all","read","result","text","decode","value","Uint8Array","stream","done","loadFileResponse","version","resolve","fileversion","loadFile","log","loadJSON","copyURLtoURL","fromURL","toURL","getResp","e","lively4serverurl","blob","saveFile","data","urlString","options","moveFile","newURL","fromServerURL","serverURL","toServerURL","resp","destination","lively","notify","content","putResponse","status","confirm","delResponse","getResponse","putAgainResponse","statFile","walkDir","dir","existFile","stats","type","cachedInfo","get","window","__karma__","error","isURL","isFile","isDirectory","directory","string","location","href","extension","undefined","toLowerCase","tempfile","files","stringToBlob","encoded","encodeURIComponent","readBlobAsText","fileOrBlob","Promise","FileReader","onload","event","target","readAsText","readBlobAsDataURL","readAsDataURL","versionHistoriesLoaded","_versionHistoriesLoaded","loadVersions","cached","useCached","maxCacheTime","lastLoaded","Date","now","versionscache","caches","open","showversions","put","clone","_sortIntoFileTree","path","element","next","shift","children","push","find","fileTree","tree","list","filter","absolute","modified","size","visualizeFileTreeMap","openComponentInWindow","tm","setTreeData","isVideo","isAudio","isPicture","generateMarkdownFileListing","anchors","Array","from","querySelectorAll","imgs","links","getAttribute","concat","document","createElement","source","fileNames","query","getURL","forEach","includes","item","textContent","appendChild","code","length","checkoutGithubFile","withSynctoolDo","syncTool","respository","branch","getServerURL","gitControl","gitfilepath","func","container","create","setServerURL","repository","setRepository","updateLoginStatus","getBranch","remove","unzip","JSZip","loadAsync","githubFileInfo","remoteURL","userAndRepository","user","repo","rawURL","JSON","stringify","getEnding","getKnownServers","knownServers","startsWith","repositoryName","setURLAsBackground","back","hasGitMergeConflict","extractGitMergeConflictVersions","sourceWithConflict","versions","uniq","chooseFile","ui","chooseFiles","b64EncodeUnicode","str","btoa","p1","String","fromCharCode","parseInt","b64DecodeUnicode","decodeURIComponent","atob","c","charCodeAt","slice","join"],"mappings":"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","file":"files.js","sourcesContent":["\"enable examples\"\n\"disable deepeval\"\n/*MD \n# Files API\n\nMD*/\n\n\nimport { uuid as generateUuid } from 'utils';\nimport _ from 'src/external/lodash/lodash.js'\nimport sourcemap from 'src/external/source-map.min.js';\n\nexport default class Files {\n\n  static async fillCachedFileMap() {\n    var root = lively4url +  \"/\"\n    var filelist =   await fetch(root, {\n      method: \"OPTIONS\",\n      headers: {\n        filelist: true\n      }\n    }).then(r => r.json()).then(r => r.contents.map(ea => ea.name.replace(/^\\.\\//,url)))\n    var map = this.cachedFileMap()\n    for(var url of filelist) {\n      map.set(url, {exists: true})\n    }\n  }\n  \n  static cachedFileMap() {\n    \n    if (!self.lively4cacheFiles) {\n      self.lively4cacheFiles = new Map()  // indexDB or dexie are to slow (60ms for simple checking if it is there #TODO)\n    } \n    return self.lively4cacheFiles \n  }\n  \n  static sourceMapConsumerForURL(url) {\n    this.sourceMapConsumerCache = this.sourceMapConsumerCache || {}\n    \n    var smc = this.sourceMapConsumerCache[url]\n    if (!smc) {\n      var moduleData = System[\"@@registerRegistry\"][url]\n      if (moduleData) {\n        var map = moduleData.metadata.load.sourceMap\n        if (!map) {\n          smc =  new sourcemap.SourceMapConsumer(map)\n          this.sourceMapConsumerCache[url] = smc          \n        } else {\n          console.warn(\"[files.js] no source map for \" + url)\n        }\n        \n      }\n    }\n    return smc\n  }\n  \n  \n  static parseSourceReference(ref) {\n    if(ref.match(\"!\")) {\n      var url = ref.replace(/!.*/,\"\")\n      var args = ref.replace(/.*!/,\"\").split(/:/)\n    } else {\n      var m = ref.match(/(.*):([0-9]+):([0-9]+)$/)\n      args = [m[2], m[3]]\n      url = m[1]\n    }\n    \n    var lineAndColumn\n    if (args[0] == \"transpiled\") {\n      // hide transpilation in display and links\n      var smc = this.sourceMapConsumerForURL(url)\n      if (smc) {\n        lineAndColumn = smc.originalPositionFor({\n          line: Number(args[1]),\n          column: Number(args[2])\n        })\n      } else {\n        lineAndColumn = {line: args[1], column: args[2]}\n      }\n    } else {\n      lineAndColumn = {line: args[0], column: args[1]}\n    }\n    lineAndColumn.url = url\n    lineAndColumn.toString = function() {\n        return \"\" + this.url.replace(lively4url, \"\") + \":\" + this.line + \":\" + this.column\n    }\n    return lineAndColumn\n  }\n  \n  \n  static fetchChunks(fetchPromise, eachChunkCB, doneCB) {\n    fetchPromise.then(function(response) {\n        var reader = response.body.getReader();\n        var decoder = new TextDecoder();\n        var all = \"\";\n        (function read() {\n          reader.read().then(function(result) {\n            var text = decoder.decode(result.value || new Uint8Array, {\n              stream: !result.done\n            });\n            all += text\n            if (eachChunkCB) eachChunkCB(text, result)\n            if (result.done) {\n              if (doneCB) doneCB(all, result)\n            } else {\n              read() // fetch next chunk\n            }\n          })\n        })()\n      })\n  }\n\n  static async loadFileResponse(url, version) {\n    url = this.resolve(url.toString())\n    return fetch(url, {\n      headers: {\n        fileversion: version\n      }\n    })\n  }\n\n  static async loadFile(url, version) {\n    return this.loadFileResponse(url, version).then(response => {\n      console.log(\"file \" + url + \" read.\");\n      return response.text();\n    })\n  }\n\n  static async loadJSON(url) {\n    return fetch(url, {\n      method: \"GET\",\n      headers: {\n        \"content-type\": \"application/json\"\n      }\n    }).then(response => {\n      return response.json();\n    })\n  }\n\n  \n  \n  static async copyURLtoURL(fromURL, toURL) {\n    try {\n      var getResp = await fetch(fromURL, {method: 'GET'})\n    } catch(e) {\n      console.log(\"[files] copyURLtoURL... falling back to server side download for: \" + fromURL)\n      var lively4serverurl = lively4url.replace(/[^/]*$/,\"\")\n      getResp = await fetch(lively4serverurl = \"/_curl/?target=\" + fromURL)\n      // Error maybe due to CORS?\n    }\n    var blob = await getResp.blob()\n    return fetch(toURL, {method: 'PUT', body: blob})\n  }\n  \n  static async saveFile(url, data){\n    var urlString = url.toString();\n    urlString = this.resolve(urlString)\n    if (urlString.match(/\\/$/)) {\n      return fetch(urlString, {method: 'MKCOL'});\n    } else {\n      var options = {method: 'PUT', headers: {}, body: data}\n      if (url.match && url.match(/\\.svg$/)) {\n        options.headers['Content-Type'] = 'image/svg+xml'\n      }\n      return fetch(urlString, options);\n    }\n  }\n  \n  static async moveFile(url, newURL) {\n    let fromServerURL = this.serverURL(url)\n    let toServerURL = this.serverURL(url)\n    if (fromServerURL && (fromServerURL == toServerURL)) {\n      \n      // use special server MOVE/RENAME method\n      var resp = await fetch(url, {\n        method: \"MOVE\",\n        headers: {\n          destination: newURL\n        }\n      })\n      var result = await resp.text()\n      lively.notify(\"MOVE\", result)\n      return resp\n    }\n    \n    var content = await fetch(url).then(r => r.blob())\n\n    // first, save the content...\n    var putResponse = await fetch(newURL, {\n      method: 'PUT',\n      body: content\n    })\n\n    if (putResponse.status !== 200) {\n      lively.confirm(\"could not move file to \" + newURL)\n      return putResponse\n    }\n\n    // ok, lets be crazy... we first delete\n    var delResponse = await fetch(url, {method: 'DELETE'})\n    if (delResponse.status !== 200) {\n      lively.notify(\"could not properly delete \" + url, await delResponse.text())\n    }\n\n    var getResponse = await fetch(newURL)\n    if (getResponse.status !== 200) {\n      lively.notify(\"save again, because we might need to...\")\n      var putAgainResponse = await fetch(newURL, {\n        method: 'PUT',\n        body: content\n      })\n      return putAgainResponse\n    }\n    return getResponse\n  }\n  \n  static async statFile(urlString){\n    urlString = this.resolve(urlString)\n    return fetch(urlString, {method: 'OPTIONS'}).then(resp => resp.text())\n  }\n\n  /**\n   * Recursively walks a directory path given as string.\n   * @returns an array of files\n   */\n  static async walkDir(dir) {\n    \n    var url = dir.replace(/\\/?$/,\"/\")\n    \n    // iterate on the server vs client (is 400ms vs 4000ms)\n    var result = await fetch(url, {\n      method: \"OPTIONS\",\n      headers: {\n        filelist: true\n      }\n    }).then(r => r.json()).then(r => r.contents.map(ea => ea.name.replace(/^\\.\\//,url)))\n    return result\n\n//     if(dir.endsWith('/')) { dir = dir.slice(0, -1); }\n//     const json = await lively.files.statFile(dir).then(JSON.parse);\n//     if(json.type !== 'directory') {\n//       throw new Error('Cannot walkDir. Given path is not a directory.')\n//     }\n\n//     let files = json.contents\n//       .filter(entry => entry.type === 'file')\n//       .map(entry => dir + '/' + entry.name);\n\n//     let folders = json.contents\n//       .filter(entry => entry.type === 'directory')\n//       .map(entry => dir + '/' + entry.name);\n\n//     let subfolderResults = await Promise.all(folders.map(folder => this.walkDir(folder)));\n//     subfolderResults.forEach(filesInSubfolder => files.push(...filesInSubfolder));\n\n//     return files;\n  }\n\n  // #Depricated\n  static async existFile(urlString){\n    return this.exists(urlString)\n  }\n\n  static async stats(url) {\n    return fetch(url, {method: \"OPTIONS\"}).then(r => r.json())\n  }\n\n  static async type(url) {\n    return (await this.stats(url)).type\n  }\n\n  static async exists(urlString) {\n    var cachedInfo = this.cachedFileMap().get(urlString)\n    if (cachedInfo) {\n      return cachedInfo.exists\n    }\n    \n    // karma / travis cannot handle option requests\n    if (window.__karma__) { \n      return fetch(urlString, { \n          method: 'HEAD' \n        }).then(resp => resp.status == 200); \n    }  \n  \n    try {      \n      var resp = (await fetch(urlString, {method: \"OPTIONS\"}))\n      if (resp.status != 200) return false\n      var stats = await resp.json()\n      return stats.error ? false : true\n    } catch (e) {\n      return false;\n    }\n  }\n  \n\n  static isURL(urlString) {\n    return (\"\" + urlString).match(/^([a-z]+:)?\\/\\//) ? true : false;\n  }\n  \n  static async isFile(url) {\n    return (await this.type(url)) == \"file\"\n  }\n\n  static async isDirectory(url) {\n    return (await this.type(url)) == \"directory\"\n  }\n\n  static directory(string) {\n    string = string.toString()\n    return string.replace(/([^/]+|\\/)$/,\"\")\n  }\n\n  \n  // #Depricated    \n  static resolve(string) {\n    if (!this.isURL(string)) {\n      var result = lively.location.href.replace(/[^/]*$/, string)\n    } else {\n      result = string.toString()\n    }\n    // get rid of ..\n    result = result.replace(/[^/]+\\/\\.\\.\\//g,\"\")\n    // and .\n    result = result.replace(/\\/\\.\\//g,\"/\")\n    \n    return result\n  }\n\n  /* \n   * #Meta An inline test is a line that evaluates to true?\n   * #Meta We coould parse those lines, and generate better feedback, e.g. not just that it does not evaluate to true, but what are the values that are not equal?\n   * #Meta Could we run those inline tests in #Travis, too? \n   TESTS:\n      lively.files.name(\"https://foo/bar/bla.txt\") == \"bla.txt\" \n  */\n  static name(url) {\n    return url.toString().replace(/.*\\//,\"\")\n  }\n  \n /* \n  TESTS:\n      lively.files.extension(\"https://foo/bar/bla.txt\") == \"txt\" \n      lively.files.extension(\"https://foo/bar/bla.PNG\") == \"png\"\n      lively.files.extension(\"https://foo/bar/bla\") === undefined\n   */  \n  static extension(url) {\n    var name = this.name(url)\n    if (!name.match(/\\./)) return undefined\n    return name.toLowerCase().replace(/.*\\./,\"\")    \n  }\n  \n  \n  /*# Generate tmpfile url for lively4 server\n   *\n   * lively.files.tempfile() // e.g. https://lively-kernel.org/lively4/_tmp/3b8a7fcc-11dd-463e-8d32-dcc46575a4fd\n   *\n   */\n  static tempfile() {\n    // #Dependency to #Lively4Server \n    return  lively.files.directory(lively4url) + \"_tmp/\" + generateUuid()  \n  }\n\n  /*\n    lively.files.stringToBlob(\"hello world\")\n   */\n  static stringToBlob(string) {\n    var encoded = encodeURIComponent(string)\n    return fetch(`data:text/plain;charset=utf-8,${encoded}`).then(r => r.blob())\n  }\n  \n  /* \n    lively.files.stringToBlob(\"hello world\").then(b => lively.files.readBlobAsText(b))\n   */ \n  static readBlobAsText(fileOrBlob) {\n    return new Promise(resolve => {        \n      const reader = new FileReader();\n      reader.onload = event => {\n        resolve(event.target.result)\n      }\n      reader.readAsText(fileOrBlob); \n    })\n  }\n\n  static readBlobAsDataURL(fileOrBlob) {\n    return new Promise(resolve => {        \n      const reader = new FileReader();\n      reader.onload = event => {\n        resolve(event.target.result)\n      }\n      reader.readAsDataURL(fileOrBlob); \n    })\n  }  \n  \n  static get versionHistoriesLoaded() {\n    if (!this._versionHistoriesLoaded) this._versionHistoriesLoaded = new Map();\n    return this._versionHistoriesLoaded\n  }\n  \n  static async loadVersions(url, cached) {\n    \n    var useCached  = cached || false;\n    // Fuck... some custom clever chaching logic? Should we generalize it?\n    if (cached === undefined) {\n      var maxCacheTime = 1000 * 60 * 5; // 5min in ms\n      var lastLoaded = this.versionHistoriesLoaded.get(url)\n      if (lastLoaded && ((Date.now() - lastLoaded)  < maxCacheTime)) {\n        useCached = true\n        // lively.notify(\"use cached version history\")\n      } else {\n        this.versionHistoriesLoaded.set(url, Date.now())\n        // lively.notify(\"update version history\")\n      }\n    } else if (!cached) {\n        this.versionHistoriesLoaded.set(url, Date.now())\n    }\n    \n    var versionscache = await caches.open(\"file_versions\")\n    if (cached) {\n      var resp = await versionscache.match(url)\n      if (resp) return resp      \n    }\n    resp = await fetch(url, {\n      method: \"OPTIONS\",\n      headers: {\n         showversions: true   \n      }      \n    })\n    versionscache.put(url, resp.clone())\n    return resp\n  }\n  \n  \n  static async _sortIntoFileTree(root, path, element) {\n    // console.log(\"sort into \" + path + \" \" + element.name )\n    var next = path.shift()\n    if (!next) {      \n      root.children.push(element)\n      return\n    }\n    var dir = root.children.find(ea => ea.name == next)\n    if (!dir) {\n      dir = {\n        name: next,\n        children: []\n      }\n      root.children.push(dir)\n    }\n    this._sortIntoFileTree(dir, path, element)\n  }\n  \n  static async fileTree(url) {\n    var tree = {\n      name: url,\n      children: []\n    }\n    var list = (await fetch(url, {\n      method: \"OPTIONS\",\n      headers: {\n        filelist: true\n      }\n    }).then(r => r.json())).contents\n    if (!list) return;\n    \n    for(var ea of list) {\n      if (ea.name !== \".\") {\n        var path = ea.name.replace(/^\\.\\//,\"\").replace(/[^/]*$/,\"\").split(\"/\").filter(ea => ea)\n        var absolute = ea.name.replace(/^\\.\\//, url)\n        var element = {\n            name: ea.name.replace(/.*\\//,\"\"),\n            modified: ea.modified,\n            url: absolute,\n            size: ea.size,\n            type: ea.type\n          }\n        if (element.type == \"directory\") element.children = [];\n        this._sortIntoFileTree(tree, path, element)        \n      }\n    }\n    return tree\n  }\n  \n  // Files.visualizeFileTreeMap(lively4url )\n  static async visualizeFileTreeMap(url) {\n    var tree = await lively.files.fileTree(url)\n    if (tree) {\n      lively.openComponentInWindow(\"d3-treemap\").then( async tm => {\n        tm.setTreeData(tree)\n      })\n    } else {\n      lively.notify(\"Could not create tree for \" + url)\n    }\n  }\n  \n  static isVideo(url) {\n    return url.toString().match(/((ogm)|(m4v)|(mp4)|(mov)|(avi)|(flv)|(mpe?g)|(mkv)|(ogv))$/i)\n  }\n  \n  static isAudio(url) {\n    return url.toString().match(/((mp3)|(m4a)|(ogg))$/i)\n  }\n\n  static isPicture(url) {\n    return url.toString().match(/((svg)|(png)|(jpe?g)|(gif))$/i)\n  }\n  \n  static async generateMarkdownFileListing(root) { \n    var anchors = Array.from(root.querySelectorAll(\"a\"))\n    var imgs = Array.from(root.querySelectorAll(\"[src]\"))\n    \n    var links = anchors.map(ea => ea.getAttribute(\"href\")).filter(ea => !ea.match(/search:/)).concat(\n          imgs.map(ea => ea.getAttribute(\"src\")))\n    \n    var result = document.createElement(\"div\")\n\n    var source = \"\" // the generated markdown source that should be added\n    var fileNames = [];\n\n    var list = document.createElement(\"ul\")\n    var url = (\"\" + lively.query(root, \"lively-container\").getURL()).replace(/[^/]+$/,\"\");\n    \n    var files = (await fetch(url, {\n      method: \"OPTIONS\"\n    }).then(r => r.json())).contents\n    files.forEach(ea => {\n      // var item = document.createElement(\"li\")\n      var name =  ea.type == \"directory\" ? \n        ea.name + \"/\" :\n        ea.name\n      \n      var ref = name.replace(/ /g, \"%20\")\n      if (name == \"index.md\") return // don't include yourself\n      \n      fileNames.push(ref)\n      // item.textContent = name\n      if (!links.includes(ref)) {\n        // list.appendChild(item)  \n        source += `  - [${name}](${ref})\\n`\n      }\n    })\n\n    links.filter(ea => !fileNames.includes(ea) && !ea.match(\"/\")).forEach(ea => {\n      var item = document.createElement(\"li\")\n       if (ea == \"index.md\") return // don't include yourself\n      item.textContent = \"Missing \" + ea\n      list.appendChild(item)\n    })\n    result.appendChild(list)\n\n    var code = document.createElement(\"pre\")\n    code.textContent = source.length > 0 ? \"## Please Insert Me\\n\" + source : \"\"\n    result.appendChild(code)\n\n    return result\n  }\n  \n  static async checkoutGithubFile(url) {\n    return await this.withSynctoolDo(async (syncTool, respository, branch, path ) => {\n      var serverURL = syncTool.getServerURL()    \n      if (!url.match(serverURL)) { // we are in a checked out repo....\n        return undefined // not information for files we do not manage...\n      }\n      return await syncTool.gitControl(\"checkout\", undefined, {\n        gitfilepath: path.replace(/^\\//,\"\") // no leading / expected....\n      })\n    }, url) \n  }\n\n  static async withSynctoolDo(func, url) {     \n    // #Idea, could't we ask the server for this set directly, since we ask it indirectly anyway? as special OPTIONS request #TODO\n    try {\n      var container = <div style=\"display:none\"></div> // hide the uglyness, at least in the UI\n      document.body.appendChild(container)\n      var syncTool = await lively.create(\"lively-sync\", container); // #Hack #Ugly\n      \n      var serverURL = this.serverURL(url) \n      if (!serverURL) return\n      syncTool.setServerURL(serverURL) \n\n      var m = url.replace(serverURL,\"\").replace(/^\\//,\"\").match(/([^/]*)(\\/*.*)/)\n      var repository = m[1]\n      var path = m[2]\n      console.log(\"set repository: \"  + repository)\n      syncTool.setRepository(repository)\n      await syncTool.updateLoginStatus()\n      var branch = syncTool.getBranch()\n      return await func(syncTool, repository, branch, path)\n    } finally {\n      container.remove() // we really opened a graphical object for this\n    }\n  }\n  \n  static async unzip(url) {\n    var blob = fetch(url).then(r => r.blob())\n    return  JSZip.loadAsync(blob)\n  }\n  \n  \n  static async githubFileInfo(url) {\n    return await this.withSynctoolDo(async (syncTool, respository, branch, path ) => {\n      var serverURL = syncTool.getServerURL()      \n      var remoteURL = await syncTool.gitControl(\"remoteurl\")\n      remoteURL = remoteURL.replace(/\\n/,\"\")\n      \n      var userAndRepository = remoteURL.replace(/https:\\/\\/github.com\\//,\"\").replace(/git@github.com:/,\"\").replace(/\\.git/,\"\")\n      var [user, repo] = userAndRepository.split(\"/\")\n      \n      var result =  {\n        url,\n        user,\n        repo,\n        serverURL,\n        respository,\n        path: path && path.replace(/^\\//,\"\"),\n        remoteURL,\n        branch,\n        rawURL: remoteURL + \"/raw/\" + branch + path\n      }\n      \n      if (!remoteURL || !branch || !path) {\n        console.warn(\"Github fileInfo not complete: \" + JSON.stringify(result))\n        return null\n      }\n      \n      return result  \n    }, url) \n  }\n  \n  static getEnding(path) {\n    return path.toString().replace(/[#?].*/,\"\").replace(/.*\\./,\"\");\n  }\n  \n  \n  static getKnownServers() {\n    return [\n      lively4url.replace(/\\/[^/]+$/,\"\"),\n      \"https://lively-kernel.org/voices\",\n      \"https://lively-kernel.org/research\",\n      \"https://lively-kernel.org/lively4S2\",\n      \"https://lively-kernel.org/lively4\",\n      \"http://localhost:9005\",\n      \"http://localhost:9006\",\n    ]\n  }\n  \n  static serverURL(url) {\n    // #TODO to replace this static list, we could add this info OPTION requests... \n    \n    var knownServers = this.getKnownServers()\n    \n    for(var ea of knownServers) {\n      if (url.startsWith(ea)) {\n        return ea        \n      }\n      \n    }\n    return null // don't know?\n  }\n\n  static repositoryName(url) {  \n    var serverURL = this.serverURL(url)\n    if (!serverURL) return null\n    var repo =  url.replace(serverURL +\"/\", \"\").replace(/\\/.*/,\"\");\n    return repo\n  }\n  \n  static async setURLAsBackground(url) {\n    document.querySelectorAll(\"lively-background\").forEach(ea => ea.remove())\n\n    var back = await (<lively-background class=\"lively-content\" ></lively-background>) \n    document.body.appendChild(back)\n    back.url = url\n  }\n  \n  \n  /*MD ## Git Infos MD*/\n  static hasGitMergeConflict(source) {\n    return source.match(/<<<<<<<(.|\\n)*=======(.|\\n)*>>>>>>>/m)\n  }\n  \n  static extractGitMergeConflictVersions(sourceWithConflict) {\n     var versions = _.uniq(sourceWithConflict.split(\"\\n\")\n      .filter(ea => ea.match(/^(<<<<<<<)|(>>>>>>>) /))\n      .map(ea => ea.replace(/^(<<<<<<<)|(>>>>>>>) /, \"\")))\n     return versions\n  }\n  \n  /*MD ## File Chooser MD*/\n    \n  static async chooseFile(url = lively4url + \"/\") {\n    var ui = await lively.openComponentInWindow(\"file-chooser\")\n    return ui.chooseFile(url)\n  }\n\n  static async chooseFiles(url = lively4url + \"/\") {\n    var ui = await lively.openComponentInWindow(\"file-chooser\")\n    return ui.chooseFiles(url)\n  }\n\n  static /*example:*/b64EncodeUnicode/*{\"id\":\"4b8e_01d7_bc69\",\"name\":{\"mode\":\"input\",\"value\":\"\"},\"color\":\"hsl(210, 30%, 70%)\",\"values\":{\"str\":{\"mode\":\"input\",\"value\":\"'✓ à la mode'\"}},\"instanceId\":{\"mode\":\"input\",\"value\":\"\"},\"prescript\":\"\",\"postscript\":\"\"}*/(str) {\n    /*probe:*/return/*{}*/ btoa(encodeURIComponent(str).replace(/%([0-9A-F]{2})/g, function(match, p1) {\n        return String.fromCharCode(parseInt(p1, 16))\n    }))\n  }\n\n  // b64DecodeUnicode()\n  static /*example:*/b64DecodeUnicode/*{\"id\":\"4103_76e3_90c5\",\"name\":{\"mode\":\"input\",\"value\":\"\"},\"color\":\"hsl(70, 30%, 70%)\",\"values\":{\"str\":{\"mode\":\"input\",\"value\":\"'4pyTIMOgIGxhIG1vZGU='\"}},\"instanceId\":{\"mode\":\"input\",\"value\":\"\"},\"prescript\":\"\",\"postscript\":\"\"}*/(str) {\n    // Going backwards: from bytestream, to percent-encoding, to original string.\n    /*probe:*/return/*{}*/ decodeURIComponent(atob(str).split('').map(function(c) {\n        return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2);\n    }).join(''));\n  }\n  \n}\n\n\n\n\n/* Context: {\"context\":{\"prescript\":\"\",\"postscript\":\"\"},\"customInstances\":[]} */"]}