{"version":3,"sources":["https://lively-kernel.org/lively4/lively4-function-completion/src/components/tools/lively-sync.js"],"names":["Morph","Filter","Sync","initialize","container","get","registerButtons","lively","html","registerInputs","updateLoginStatus","window","__karma__","console","log","repo","getAttribute","lively4url","replace","value","addEventListener","evt","onGitrepositoryInputChange","onServerUrlInputChange","travis","onclick","open","updateWindowTitle","updateServerURL","s","innerHTML","loadCredentials","token","loadValue","login","loggedin","githubApi","path","fetch","headers","Headers","Authorization","then","r","json","result","Promise","resolve","reject","authGithub","challengeForAuth","Date","now","user","username","emails","email","find","ea","primary","storeValue","gitControl","cmd","eachCB","optHeaders","clearLog","getHeaders","key","set","files","fetchChunks","getServerURL","eaChunk","linkifyFiles","toHtml","sync","syncResult","lively4invalidateFileCaches","logout","lively4github","storagePrefix","repositoryBlacklist","getRepository","checked","defaultServerURL","match","setServerURL","url","setAttribute","updateRepositoryList","setRepository","name","getBranch","getGitRepositoryNames","statFile","JSON","parse","contents","filter","type","map","focalStorage","setItem","getItem","htmlString","base","m","a","b","onSyncButton","status","confirm","onLoginButton","getProtectedRepositories","onBranchButton","includes","warn","onStatusButton","onDiffButton","onCloneButton","disabled","updateContextSensitiveButtons","onNpmInstallButton","onNpmTestButton","onResolveButton","onChangelogButton","onCommitButton","onDeleteButton","onMergeButton","onSquashButton","onResetButton","answer","notify","input","stats","method","e","style","border","onGitrepositoryChanged","list","join","updateBranchesList","branches","split","currentRegex","currentBranch","remoteRegEx","repository","exists","updateUpstreamURL","shadowRoot","querySelectorAll","forEach","serverURL","windowTitle"],"mappings":"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","file":"lively-sync.js","sourcesContent":["import Morph from 'src/components/widgets/lively-morph.js';\nimport Filter from \"src/external/ansi-to-html.js\"\n\n\n/*MD # Github Sync Tool\n![](lively-sync.png){width=500px}\n\nMD*/\n\n\n\n\nexport default class Sync extends Morph {\n  \n  \n  initialize() {\n    var container = this.get(\".container\");\n    this.registerButtons();\n    lively.html.registerInputs(this);\n    this.updateLoginStatus();\n    \n    if (window.__karma__) {\n      console.log(\"exit early... due to karma\");\n      return;\n    }\n    var repo = this.getAttribute(\"gitrepository\") || lively4url.replace(/.*\\//,\"\")\n    this.get('#gitrepository').value = repo;\n    this.get('#gitrepository').addEventListener(\"change\", evt => this.onGitrepositoryInputChange(evt))\n    this.get('#serverUrl').addEventListener(\"change\", evt => this.onServerUrlInputChange(evt))\n    \n    \n    var travis = this.get(\"#travisLink\");\n    travis.onclick = () => {\n      window.open(travis.getAttribute(\"href\"));\n      return false;\n    };\n    this.updateWindowTitle()\n    this.updateServerURL()\n  }\n  \n  log(s) {\n    this.get(\"#log\").innerHTML += s\n    // var editor = this.get(\"#log\").editor;\n    // if (editor) {\n    //   editor.setValue(editor.getValue() + \"\\n\" + s);\n    //   // editor.session.setScrollTop(1000000); // #TODO find scroll to bottom method in ace\n    // }\n  }\n  \n  async loadCredentials() {\n    // this.updateLoginStatus()\n    var token = await this.loadValue(\"githubToken\")\n    this.get(\"#loginButton\").innerHTML = \n        token ? \"logout\" : \"login\";\n    var login = token ? true : false;\n    this.loggedin = login;\n\n    this.get(\"#gitusername\").value = \n      await this.loadValue(\"githubUsername\");\n    this.get(\"#gitemail\").value = \n      await this.loadValue(\"githubEmail\");\n    \n    var value = await this.loadValue(\"githubRepository\") \n    if (value) this.get(\"#gitrepository\").value = value;\n  }\n  \n\n\n  githubApi(path, token) {\n    return fetch(\"https://api.github.com\" + path, {headers: new Headers({\n      Authorization: \"token \" + token\n    })}).then(r => r.json());\n  }\n  \n  async login() {\n    this.loadValue(\"githubToken\").then((result) => {\n      if (result) return result;\n      return new Promise((resolve, reject) => {\n        lively.authGithub.challengeForAuth(Date.now(), async (token) => {\n          console.log(\"authenticated\");\n          var user = await this.githubApi(\"/user\", token);\n          var username = user.login;\n          var emails =  await this.githubApi(\"/user/emails\", token);\n          var email = emails.find(ea => ea.primary).email;\n\n          console.log(\"username: \" + username);\n          console.log(\"email: \" + email);\n\n          \n          this.storeValue(\"githubUsername\", username);\n          this.storeValue(\"githubEmail\", email);\n          this.storeValue(\"githubToken\", token);\n          this.updateLoginStatus();\n          resolve(token);\n    });\n      });\n    }).then((token) => {\n      this.log(\"Logged in\");\n    });\n  }\n  \n  \n  /*MD ## Sync  MD*/\n  \n\n  async gitControl(cmd, eachCB, optHeaders={}) {\n    this.clearLog()\n    return new Promise(async (resolve) => {\n      var headers =  await this.getHeaders()\n      for(var key in optHeaders) {\n        headers.set(key, optHeaders[key])\n      }\n      lively.files.fetchChunks(fetch(this.getServerURL() +\"/_git/\" + cmd, {\n              headers: headers\n            }), (eaChunk) => {\n          if (eachCB) \n            eachCB(eaChunk)\n          else\n            this.log(this.linkifyFiles(new Filter().toHtml(eaChunk.replace(/</g,\"&lt;\"))))\n        }, resolve)\n    })\n  }\n  \n  async sync() {\n    var syncResult = await this.gitControl(\"sync\");\n    debugger \n    \n    this.log(\"invalidate local caches\")\n    window.lively4invalidateFileCaches && window.lively4invalidateFileCaches() // global variable set in boot\n  }\n\n  logout() {\n    this.clearLog()\n    this.storeValue(\"githubToken\", null)\n    this.storeValue(\"githubUsername\", null)\n    this.storeValue(\"githubEmail\", null)\n    this.updateLoginStatus()\n    window.lively4github = null // used by #Fetch proxy\n    this.log(\"\")\n  }\n\n  /*MD ## Getter / Setter MD*/\n  \n  get storagePrefix() {\n    return \"LivelySync_\"\n  }\n  \n  get repositoryBlacklist() {\n    return [\"lively4-core\", \"lively4-stable\"]\n  }\n  \n  async getHeaders() {\n    return new Headers({\n      \"gitusername\":          this.get(\"#gitusername\").value,\n      \"gitpassword\":          await this.loadValue(\"githubToken\"), \n      \"gitemail\":             this.get(\"#gitemail\").value,\n      \"gitrepositoryurl\":     this.get(\"#gitrepositoryurl\").value,\n      \"gitrepository\":        this.getRepository(),\n      \"gitrepositorybranch\":  this.get(\"#gitrepositorybranch\").value,\n      \"gitcommitmessage\":     this.get(\"#gitcommitmessage\").value,\n      \"dryrun\":               this.get(\"#dryrun\").checked\n    })\n  }\n  \n  defaultServerURL() {\n    return lively4url.match(/(.*)\\/([^\\/]+$)/)[1]\n  }\n\n  getServerURL() {\n    return this.getAttribute(\"serverurl\") || this.defaultServerURL()\n  }\n\n  setServerURL(url) {\n    this.setAttribute(\"serverurl\", url)\n    this.updateWindowTitle()\n    this.updateRepositoryList()\n    this.updateServerURL()\n  }\n  \n  setRepository(name) {\n     this.get(\"#gitrepository\").value = name\n  }\n  \n  getRepository() {\n     return this.get(\"#gitrepository\").value\n  }\n  \n  getBranch() {\n     return this.get(\"#gitrepositorybranch\").value.replace(/^ */,\"\")\n  }\n\n\n  async getGitRepositoryNames() {\n    var json = await lively.files.statFile(this.getServerURL()).then( JSON.parse)\n    if (!json || !json.contents) return []\n    return json.contents.filter(ea => ea.type == \"directory\").map(ea => ea.name)\n  }\n  \n  \n  /*MD ## Helper MD*/\n  \n  async storeValue(key, value) {\n    return  lively.focalStorage.setItem(this.storagePrefix + key, value)\n  }\n  \n  async loadValue(key) {\n    return lively.focalStorage.getItem(this.storagePrefix + key)\n  }\n  \n  linkifyFiles(htmlString) {\n    var base = this.getServerURL() + \"/\" + this.getRepository() + \"/\"\n    return htmlString\n      // .replace(/(<span style=\"color:#A00\">(?:deleted\\: *)?)([^<]*)(<\\/span>)/g, (m,a,b,c) => \n      //     `${a}<a onclick=\"event.preventDefault(); fetch(this.href)\" href=\"edit://${b}\">${b}</a>${c}`)\n      .replace(/(modified: *)([a-zA-Z0-9\\-_/ .]*)/g, (m,a,b) => \n          `${a}<a onclick=\"event.preventDefault(); lively.openBrowser(this.href,true)\" href=\"${base + b}\">${b}</a>`)\n      .replace(/((?:\\+\\+\\+\\s*b\\/)|(?:\\-\\-\\- a\\/))([a-zA-Z-_0-9/ .]*)/g, (m,a,b) => \n          `${a}<a onclick=\"event.preventDefault(); lively.openBrowser(this.href,true)\" href=\"${base + b}\">${b}</a>`)\n// \n  }\n  \n  /*MD ## Events MD*/\n  \n  onSyncButton() {\n    this.gitControl(\"status\").then((status) => {\n      if (!status.match(\"AUTO-COMMIT-\")) {\n        this.sync()\n        // lively.notify(\"sync directly\")\n      } else {\n        if (window.confirm(\"Contains auto commits. Forgot to squash? Push them anyway? \")) {\n          this.sync()\n          // lively.notify(\"sync anyway\")\n        } else {\n          // lively.notify(\"sync canceled\")\n        }\n      }\n    })\n  }\n\n\n\n  async onLoginButton() {\n    window.lively4github = null // fetch will getg new auth info\n    this.clearLog()\n    if (await this.loadValue(\"githubToken\")) { \n      this.logout() \n    } else { \n      this.login()\n    }\n  }\n\n  getProtectedRepositories() {\n    return [\"lively4-jens\", \"lively4-core\"]\n  }\n  \n  onBranchButton() {\n    if (this.getProtectedRepositories().includes(this.getRepository())) {\n      return lively.warn(\"You are not allowed to branch on \" + this.getRepository())\n    }    \n    this.gitControl(\"branch\")  \n  }\n\n  onStatusButton() {\n    this.gitControl(\"status\")  \n  }\n  \n  onDiffButton() {\n    this.get(\"#log\").setAttribute('mode', \"text/x-diff\")\n    // text/x-diff\n    \n    this.gitControl(\"diff\")  \n  }\n\n  async onCloneButton(){\n    if (window.confirm(\"Do you want to clone into \" + \n        this.get(\"#gitrepository\").value)) {\n      this.get(\"#cloneButton\").disabled= true\n      await this.gitControl(\"clone\")\n      this.updateContextSensitiveButtons()\n      this.updateRepositoryList()\n    }\n  }\n\n  onNpmInstallButton() {\n    this.gitControl(\"npminstall\")\n  }\n\n  onNpmTestButton() {\n    this.gitControl(\"npmtest\")\n  }\n\n\n  async onResolveButton() {\n    if (await lively.confirm(\"DANGER! Do you want to FORCE a resolve with a hammer? Please consider, going to all files and solve the conflict through editing there! This is not the button you want to use.\")) {\n        this.gitControl(\"resolve\")\n    }\n  }\n\n  onChangelogButton() {\n   this.gitControl(\"graph\");\n  }\n  \n  onCommitButton() {\n    // return lively.notify(\"Commit is not implemented yet\")  \n    this.gitControl(\"commit\");\n  }\n  \n  onDeleteButton() {\n    if (window.confirm(\"Do you want to delete \" + this.get(\"#gitrepository\").value + \" repository?\")) {\n      this.gitControl(\"delete\");\n    }\n  }\n  \n  async onMergeButton() {\n    if (this.getProtectedRepositories().includes(this.getRepository())) {\n      return lively.warn(\"You are not allowed to merge on \" + this.getRepository())\n    }  \n    if (await lively.confirm(\"Do you want to merge \"\n      + this.get(\"#gitrepositorybranch\").value \n      +\" into \" + this.get(\"#gitrepository\").value \n      + \" repository?<br><b style='color:red'>DANGER: Do not 'Squash' commit before a new 'Sync'</b>\")) {\n      this.gitControl(\"merge\");\n    }\n  }\n  \n  onSquashButton() {\n    this.gitControl(\"squash\");\n  }\n\n  async onResetButton(){\n    const answer = await lively.confirm(\"This will hard reset to the current remote working index.\");\n    if(answer){\n      this.gitControl(\"reset\")\n    }\n  }\n  \n  onGitrepositoryInputChange(evt) {    \n    var value = this.getRepository()\n    lively.notify(\"input changed:\" + value)\n    this.setAttribute(\"gitrepository\", value)\n  }\n  \n  async onServerUrlInputChange(evt) {    \n    var input = this.get(\"#serverUrl\")\n    var url = input.value\n    \n    try {\n      var stats = await fetch(url, {\n        method: \"OPTIONS\"\n      }).then(r => r.json())\n    } catch(e) {\n      \n    }\n    \n    // #TODO we could inform in the server that this is a proper base directory....\n    if (stats && stats.type == \"directory\") {\n      input.style.border = \"\"\n      this.setServerURL(url)\n    } else {\n      input.style.border = \"2px dashed red\"\n    }\n    \n    lively.notify(\"server url: \" + url)\n    \n    \n    \n    // var value = this.getRepository()\n    // lively.notify(\"input changed:\" + value)\n    // this.setAttribute(\"gitrepository\", value)\n  }\n  \n  async onGitrepositoryChanged(value) {\n    this.updateContextSensitiveButtons()\n  }\n  \n  /*MD ## Update UI MD*/\n  \n  async updateRepositoryList() {\n    var list = await this.getGitRepositoryNames()\n    this.get(\"#gitrepositories\").innerHTML = \n      list.map(ea => \"<option>\" + ea).join(\"\\n\")\n  }\n\n  async updateBranchesList() {\n    var branches = await this.gitControl(\"branches\", ()=>{})\n    branches = branches.split(\"\\n\")\n    var currentRegex = /^ *\\*/\n    var currentBranch = branches.find(ea => ea.match(currentRegex));\n    if(!currentBranch) {\n      return\n    }\n    currentBranch = currentBranch.replace(currentRegex,\"\")\n    this.get(\"#gitrepositorybranch\").value = currentBranch\n    \n    var remoteRegEx = /^remotes\\/origin\\//\n    branches = branches\n      .map(ea => ea.replace(/^\\*? */,\"\")) // trim\n      .filter(ea => ea.match(remoteRegEx))\n      .filter(ea => ! ea.match(\"HEAD \"))\n      .map(ea => ea.replace(remoteRegEx,\"\"))\n    this.get(\"#gitbranches\").innerHTML = branches.map(ea => \"<option>\" + ea).join(\"\\n\")\n    // console.log(\"branches: \" + branches)\n  }\n\n\n  \n  async updateContextSensitiveButtons() {\n    \n    var repository = this.get(\"#gitrepository\").value\n    var list = await this.getGitRepositoryNames()\n    var exists = list.includes(repository);\n    \n    // console.log(\"delete \" + this.get(\"#deleteButton\").disabled)\n\n    if (exists) {\n      \n      await this.updateUpstreamURL()\n      await this.updateBranchesList() \n    }\n\n    this.shadowRoot.querySelectorAll(\".repo\").forEach(ea => \n      ea.disabled= !this.loggedin || !exists)\n\n    this.shadowRoot.querySelectorAll(\".branch\").forEach(ea => \n      ea.disabled= !this.loggedin)\n      \n    this.shadowRoot.querySelectorAll(\".clone\").forEach(ea => \n      ea.disabled= !this.loggedin || exists)\n      \n    this.shadowRoot.querySelectorAll(\".login\").forEach(ea => \n      ea.disabled= this.loggedin)\n\n    if (this.repositoryBlacklist.includes(repository))\n      this.get(\"#deleteButton\").disabled = true\n  }\n   \n  updateServerURL() {\n    this.get(\"#serverUrl\").value = this.getServerURL()\n  }\n  \n  async updateUpstreamURL() {\n    var url = await this.gitControl(\"remoteurl\")\n    url = url.replace(/\\n/,\"\")\n    this.get(\"#gitrepositoryurl\").value = url\n  }\n  \n  updateWindowTitle() {\n    var serverURL = this.getServerURL()\n    this.windowTitle = \"GitHub Sync \" + ((serverURL == this.defaultServerURL()) ? \"\" : serverURL );    \n  }\n  \n  async updateLoginStatus() {\n    if (window.__karma__) return; // no lively4-server active\n    \n    await this.loadCredentials()\n    \n    await this.updateContextSensitiveButtons();\n    await this.updateRepositoryList();\n  }\n  \n    // #TODO into Morph or Tool\n  clearLog(s) {\n    this.get(\"#log\").innerHTML = \"\"\n    // var editor= this.get(\"#log\").editor;\n    // if (editor) editor.setValue(\"\");\n  }\n  \n\n}\n"]}