{"version":3,"sources":["https://lively-kernel.org/lively4/swd21-croquet/src/components/tools/lively-index-search.js"],"names":["Morph","FileIndex","_","Strings","Bindings","IndexSearch","initialize","registerAttributes","registerButtons","get","connect","registerSignalEnter","updateReplacePreview","onSearchButton","search","focus","onScopeModeButton","removeAttribute","lively4url","onReplaceModeButton","undefined","onReplaceInputEnter","onReplaceButton","replaceInFiles","text","clearLog","log","RegExp","e","stringify","start","now","searchFilesList","updateSearchResults","findRootsInBrowsers","browsers","document","urls","map","ea","getPath","serverURL","rootURLs","filter","match","m","uniq","pattern","result","scope","searchTime","time","root","roots","lively","current","file","find","eaRoot","push","list","forEach","lines","eaLine","index","lineNumber","url","line","column","indexed","selection","showSearchResult","lineAndColumn","editor","setURL","loadFile","codeMirror","awaitEditor","setSelection","ch","scrollIntoView","getCursor","browseSearchResult","openBrowser","sortBy","lastPrefix","filename","dirAndFilename","prefix","replace","path","link","evt","slice","item","hightlightPattern","textSpan","searchAndReplace","hasPreview","td","remove","newText","replacedText","escapeRegExp","replacePreviewColumn","selectColumn","toReplace","regex","selectedFilesLines","warnings","selectedFiles","getRequest","lastVersion","contents","newcontents","split","Error","lastversion","oldcontent","newcontent","confirmReplaceDialog","warn","replaceFile","headers","putRequest","method","body","preventDefault","notify","msg","join","confirm","s","entry","livelyMigrate","other"],"mappings":"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","file":"lively-index-search.js","sourcesContent":["\"enable aexpr\";\n\nimport Morph from 'src/components/widgets/lively-morph.js';\nimport FileIndex from \"src/client/fileindex.js\"\nimport _ from 'src/external/lodash/lodash.js'\nimport Strings from \"src/client/strings.js\"\nimport Bindings from \"src/client/bindings.js\"\n\n/*MD # Search (and Replace) Tool MD*/\n\nexport default class IndexSearch extends Morph {\n  async initialize() {\n    this.registerAttributes([\"pattern\", \"mode\", \"scope\", \"replace\"])\n    this.windowTitle = \"Search\";\n    this.registerButtons();\n    this.get(\"lively-separator\").toggleCollapse()\n    // this.get(\"lively-editor\").hideToolbar();\n    \n    lively.html.registerInputs(this);\n    \n    Bindings.connect(this, \"scope\", this.get(\"#scopeInput\"), \"value\");\n    Bindings.connect(this, \"pattern\", this.get(\"#searchInput\"), \"value\");\n    Bindings.connect(this, \"replace\", this.get(\"#replaceInput\"), \"value\");\n    \n    this.registerSignalEnter(this.shadowRoot)\n    this.get(\"#replaceInput\").addEventListener(\"enter-pressed\", () => this.updateReplacePreview());\n    this.get(\"#searchInput\").addEventListener(\"enter-pressed\", () => this.onSearchButton());\n    this.get(\"#scopeInput\").addEventListener(\"enter-pressed\", () => this.onSearchButton());\n    \n    // kick off search...\n    if(this.pattern) {\n      await this.search();\n    }\n  }\n  \n  /*MD ## HTML Element MD*/\n  \n  focus() {\n    this.get(\"#searchInput\").focus();\n  }\n  /*MD ## Events MD*/ \n  \n  onScopeModeButton() {\n    if (this.scope) {\n      this.removeAttribute(\"scope\")\n    } else {\n      this.scope = lively4url\n    }\n  }\n  \n  onSearchButton() {\n    this.search();\n  }\n \n  onReplaceModeButton() {\n    if (this.mode == \"replace\") {\n      this.mode = undefined\n    } else {\n      this.mode = \"replace\"      \n    }\n    this.search();\n  }\n\n  onReplaceInputEnter() {\n    this.updateReplacePreview()\n  }\n  \n  async onReplaceButton() {\n   \n    this.replaceInFiles()\n  }\n  /*MD ## Search MD*/\n  \n  async search(text) {\n    this.clearLog()\n    if (text) {\n      this.pattern = text;\n    }\n\n    if (!this.pattern || this.pattern.length < 2) {\n      this.log(\"please enter a longer search string\");\n      this.searchInProgres = false;\n      return; \n    }\n    this.clearLog();\n    \n    // check regular expression syntax\n    try {\n      new RegExp(this.pattern)\n    } catch(e) {\n      this.log(\"\" + e);\n      return\n    }\n    \n    this.get(\"#searchResults\").innerHTML = \"searching ...\" + JSON.stringify(this.pattern);\n    let start = Date.now();\n    await this.searchFilesList()\n    this.searchInProgres = false;\n    this.clearLog();\n    //this.log('found');\n    this.log(`finished in ${Date.now() - start}ms`);\n    await this.updateSearchResults();\n  }\n\n\n  \n  \n  /*\n   * find all root directories/repositories that should be search by looking, what browsers/editors the user has opened\n   */ \n  findRootsInBrowsers() {\n    var browsers = document.body.querySelectorAll(\"lively-container\")\n    var urls = browsers.map(ea => ea.getPath())\n    var serverURL =  this.serverURL()\n    var rootURLs = urls.filter(ea => ea.match(serverURL)).map(ea => {\n      var m = ea.match(new RegExp(\"(\" + serverURL + \"[^/]*/).*\"))\n      return m && m[1]\n    })\n    return _.uniq(rootURLs)\n  }\n  \n  async searchFilesList(pattern=this.pattern) {\n    this.searchInProgres = true;\n    \n    var search = new RegExp(pattern)\n    var result = []\n    var scope = this.scope\n    var searchTime = await lively.time(async () => {\n      var root = lively4url; // there are other files in our cache... too \n      var roots = [root].concat(lively.preferences.get(\"ExtraSearchRoots\")).concat(this.findRootsInBrowsers())\n      return FileIndex.current().db.files.each(file => {\n        if (roots.find(eaRoot => file.url.startsWith(eaRoot)) && file.content && (!scope || file.url.match(scope))) {\n          var m = file.content.match(search)\n          if (m) {\n            result.push({file: file, match: m})\n          }\n        }\n      })  \n    })\n    \n    var list = []\n    result.forEach( ea => {\n      console.log(\"found \" + ea.file.url)\n      var lines = ea.file.content.split(\"\\n\")\n      lines.forEach((eaLine, index) => {\n        var m = eaLine.match(pattern)\n        if (m) {\n          var lineNumber = index\n          // var lineNumber = index + 1 // first line is \"1\"\n          list.push({\n            file: ea.file.url.toString().replace(/[.*\\/]/,\"\"), \n            url: ea.file.url.toString(),\n            line: lineNumber,\n            column: m.index,\n            text: eaLine,\n            indexed: ea.file, \n            selection: m[0]\n          })          \n        }\n      })\n    })\n    this.files = list\n    this.searchInProgres = false;\n    return list\n  }\n  \n  async showSearchResult(url, lineAndColumn) {\n    var editor =  this.get(\"#editor\")\n    \n    // unhide editor, when it is needed\n    if (editor.style.flexGrow < 0.01) { // #Hack\n      this.get(\"lively-separator\").toggleCollapse()    \n    }\n    \n    editor.setURL(url)\n    await editor.loadFile()\n    \n    var codeMirror = await editor.awaitEditor()\n    codeMirror.setSelection(\n      {line: lineAndColumn.line, ch: lineAndColumn.column},\n      {line: lineAndColumn.line, ch: lineAndColumn.column + \n        (lineAndColumn.selection ? + lineAndColumn.selection.length : 0)})\n    codeMirror.focus()\n    codeMirror.scrollIntoView(codeMirror.getCursor(), 200)    \n  }\n\n  browseSearchResult(url, pattern) {\n    return lively.openBrowser(url, true, pattern, undefined, /* lively.findWorldContext(this)*/);\n  }\n\n  // #important\n  async updateSearchResults(search=this.pattern) {\n    var list = _.sortBy(this.files, ea => ea.url)\n    let lastPrefix\n    for (var ea of list) {\n      let text = ea.text;\n      let url = ea.url;\n      let filename = ea.file.replace(/.*\\//,\"\")\n      let dirAndFilename = ea.url.replace(/.*\\/([^/]+\\/[^/]+$)/,\"$1\")\n      let prefix = url.replace(dirAndFilename, \"\")\n      if (lastPrefix != prefix) {\n         this.get(\"#searchResults\").appendChild(<tr class=\"prefix\"><td colspan=\"3\" click={() => {\n                 this.scope = prefix\n                 this.search()\n               }}>{prefix}</td></tr>);\n      }\n      lastPrefix = prefix\n      let path = ea.url.replace(this.serverURL(),\"\")\n      let lineAndColumn = {\n        line: ea.line, \n        column: ea.column,\n        selection: ea.selection }\n      \n      let link = <a href={ea.url} title={ea.file} click={(evt) => {\n          if (evt.shiftKey || evt.ctrlKey) {\n            this.browseSearchResult(url, lineAndColumn);\n          } else {\n            this.showSearchResult(url, lineAndColumn);\n          }\n          return false;\n        }}>{dirAndFilename.slice(0,60)}</a>;\n      \n      let item = <tr>\n          <td class=\"filename\">{link}</td>\n          <td class=\"line\">{ea.line + 1}:</td>\n          <td>\n            {this.hightlightPattern(text, this.pattern)}\n          </td>\n        </tr>;\n      ea.item = item\n      \n      this.get(\"#searchResults\").appendChild(item);\n    }\n    \n    if(this.replace) {\n      await this.updateReplacePreview();\n    }\n  }\n  \n  hightlightPattern(text, pattern) {\n    let textSpan = <span></span>\n    textSpan.innerHTML = text\n        .replace(/</g,\"&lt;\")\n        .replace(new RegExp(\"(\" +pattern.replace(/</g,\"&lt;\") + \")\", \"g\"), \"<b>$1</b>\")\n    return textSpan\n  }\n  \n  \n  /*MD ## Search and Replace MD*/\n\n  async searchAndReplace(pattern, replace) {\n    this.mode = \"replace\"\n    this.pattern = pattern;\n    this.replace = replace\n    \n    await this.search()\n    await this.updateReplacePreview()\n    await this.replaceInFiles()\n  }\n  \n  hasPreview() {\n    return this.files && (this.files.length > 0) && this.files[0].item.querySelector(\"td#replace\")\n  }\n  \n  \n  updateReplacePreview() {\n    if (this.mode != \"replace\") return\n    for (var file of this.files) {\n      if (file.item) {\n        file.item.querySelectorAll(\"#replace\").forEach(td => td.remove());\n        \n        var newText = file.text.replace(new RegExp(this.pattern, \"g\"), this.replace)\n        file.replaced = newText\n        var replacedText = this.hightlightPattern(newText, _.escapeRegExp(this.replace))\n        var replacePreviewColumn = <td id=\"replace\">{replacedText}</td>\n        file.item.appendChild(replacePreviewColumn)\n        \n        \n        file.item.querySelectorAll(\"#select\").forEach(td => td.remove());\n        var selectColumn = <td id=\"select\"><input type=\"checkbox\" checked></input></td>\n        file.item.insertBefore(selectColumn, file.item.childNodes[0])\n      }\n    }    \n  }\n  \n  // #important #refactor\n  async replaceInFiles(pattern=this.pattern, replace=this.replace) {\n    if(this.searchInProgres || !this.files) {\n      this.log(\"please search files first\")\n      return\n    }\n    \n    if (!this.hasPreview()) {\n      await this.updateReplacePreview()\n    }\n    \n    let toReplace = []\n    let regex = new RegExp(pattern, \"g\")\n    var selectedFilesLines = this.files.filter(ea => ea.item.querySelector(\"td#select input\").checked)\n   \n    var warnings = []\n    var selectedFiles = selectedFilesLines.map(ea => ea.url).uniq()    \n    for (let url of selectedFiles) {\n      let getRequest = await fetch(url)\n      let lastVersion = getRequest.headers.get(\"fileversion\")\n      let contents = await getRequest.text()\n      \n      var lines = selectedFilesLines.filter(ea => ea.url == url)\n      \n      if (contents === lines[0].indexed.content ) {\n        // #TODO instead of replacing everthing, we should honor the selection?\n        \n        let newcontents = contents.split(\"\\n\").map((ea, index) => {\n          var line = lines.find(ea => ea.line == index)\n          if (line) {\n            if (line.text != ea) {\n              throw new Error(\"original line changed!\")\n            }\n            \n            return line.replaced // our replacement \n          } else {\n            return ea\n          }\n        }).join(\"\\n\")\n        \n        //  let oldnewcontents = contents.replace(regex, replace)\n        // if (oldnewcontents !== newcontents) {\n        //   throw new Error(\"Upsi!\")\n        // }\n        \n        if (contents == newcontents) {\n          this.log(\"pattern did not match \" + pattern) \n        }\n        toReplace.push({url: url, lastversion: lastVersion, oldcontent: contents, newcontent: newcontents})        \n      } else {\n        lines.forEach(line => line.item.style.outline = \"1px solid red\")\n        warnings.push(\"WARNING: skip \" + url + \", because content changed!\")         \n      }\n    }\n  \n     if (!(await this.confirmReplaceDialog(toReplace, regex, warnings))) {\n      lively.warn(\"replacing files canceled\");\n      return;\n    }\n    this.clearLog()\n    for (let ea of toReplace) {\n      await this.replaceFile(ea, replace, pattern)\n    }\n  }\n  \n  async replaceFile(file, replace, pattern) {\n    let url = file.url;\n    let headers = {};\n\n    if (file.lastVersion) {\n      headers.lastversion = file.lastVersion;\n    }\n\n    let putRequest = await fetch(url, {\n      method: \"PUT\",\n      body: file.newcontent,\n      headers: headers\n    });\n    var item = <tr>\n      <td>replaced</td>\n      <td class=\"filename\">\n        <a \n          click={evt => {\n            evt.preventDefault()\n            this.browseSearchResult(url, replace)}} \n          href={url}>{url.replace(/.*\\//, \"\")}\n        </a>\n      </td>\n      <td><b>{pattern}</b></td>\n      <td>with</td>\n      <td><b>{replace}</b></td>\n    </tr>;\n    this.get(\"#searchResults\").appendChild(item);\n\n    if (putRequest.status == 200) {\n      // #Idea: show diff?\n      lively.notify(\"Replaced in \" + url);\n    } else {\n      lively.warn(\"could not change \" + url + \", because \" + putRequest);\n    }\n  }\n  \n  confirmReplaceDialog(toReplace, regex, warnings) {\n    const list = toReplace.map(ea => {\n      var filename = ea.url.replace(/.*\\//, \"\");\n      return <li>{filename}</li>;\n    });\n    warnings = warnings\n    var msg = <div>Replace \n                <b>{this.pattern}</b> with <b>{this.replace}</b> \n                in {toReplace.length} files?\n                <div style=\"color: red; white-space: pre;\">{warnings.join(\"\\n\")}</div>\n                <ul style=\"font-size: 10pt\">\n                  {...list}\n                </ul>\n              </div>;\n    return lively.confirm(msg);\n  }\n  \n  \n  /*MD ## Helper MD*/\n  // #private\n  log(s) {\n    var entry = <tr><td class=\"logentry\" colspan=\"2\">{s}</td></tr>\n    this.get(\"#searchResults\").appendChild(entry)\n  }\n  \n  clearLog(s) {\n    this.get(\"#searchResults\").innerHTML=\"\";\n  }\n  \n  // #private\n  serverURL() {\n     return lively4url.replace(/[^/]*$/,\"\")\n  }\n\n  /*MD ## Lively API MD*/\n  livelyMigrate(other) {\n   \n  }\n  \n}\n"]}