{"version":3,"sources":["https://lively-kernel.org/lively4/composed-offset/src/components/tools/lively-sync.js"],"names":["Morph","Filter","Strings","Sync","initialize","container","get","registerButtons","lively","html","registerInputs","registerKeys","registerAttributeObservers","updateLoginStatus","window","__karma__","console","log","repo","getAttribute","lively4url","replace","value","addEventListener","evt","onGitrepositoryInputChange","onServerUrlInputChange","updateWindowTitle","updateServerURL","onKeyDown","char","String","fromCharCode","keyCode","charCode","ctrl","ctrlKey","metaKey","repeated","notify","onSyncButton","preventDefault","stopPropagation","onSquashButton","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","append","key","set","commandURL","getServerURL","files","fetchChunks","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","status","confirm","onLoginButton","getProtectedRepositories","onPullButton","alert","onBranchButton","includes","warn","onStatusButton","onResetHardButton","onDiffButton","onCloneButton","disabled","updateContextSensitiveButtons","onNpmInstallButton","onNpmTestButton","onResolveButton","onChangelogButton","onChangesgraphButton","openMarkdown","onCommitButton","onDeleteButton","onMergeButton","onResetButton","answer","input","stats","method","e","style","border","onGitrepositoryChanged","list","setOptions","updateBranchesList","branches","split","currentRegex","currentBranch","remoteRegEx","repository","exists","updateUpstreamURL","shadowRoot","querySelectorAll","forEach","getKnownServers","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\";\nimport Strings from \"src/client/strings.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    lively.html.registerKeys(this);\n    lively.html.registerAttributeObservers(this)  \n    \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    this.updateWindowTitle()\n    this.updateServerURL()\n  }\n\n  onKeyDown(evt) {\n    const char = String.fromCharCode(evt.keyCode || evt.charCode);\n    const ctrl = evt.ctrlKey || evt.metaKey;\n\n    if (evt.repeated) {\n      lively.notify(\"Key rep! \" + char)\n      return;\n    }\n    if (!ctrl) { return; }\n    \n    if (char === \"S\") {\n      this.onSyncButton();\n      evt.preventDefault();\n      evt.stopPropagation();\n      return;\n    }\n\n    if(char === \"Q\") {\n      this.onSquashButton();\n    \n      evt.stopPropagation();\n      evt.preventDefault();\n      return;\n    }\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      headers.append(\"command\", cmd)\n      for(var key in optHeaders) {\n        headers.set(key, optHeaders[key])\n      }\n      let commandURL = this.getServerURL() +\"/_git/\" + cmd;\n      lively.files.fetchChunks(fetch(commandURL, {\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    \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.setAttribute(\"gitrepository\", 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) => { 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  onPullButton() {\n    alert(\"hi\")\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  onResetHardButton() {\n    \n    if (window.confirm(\"Do you want revert all local commits and reset to your current branch?\")) {\n      this.gitControl(\"reset-hard\");\n    }\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  onChangesgraphButton() {\n    lively.openMarkdown(lively4url + \"/doc/files/changesgraph.md\", \n      \"Change Graph\", {url: this.getServerURL() + \"/\" + this.getRepository() + \"/\"})\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    try {\n      var stats = await fetch(url, {\n        method: \"OPTIONS\"\n      }).then(r => r.json())\n    } catch(e) {\n      \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    this.get(\"#gitrepository\").value = \"\"\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(\"#gitrepository\").setOptions(list)\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(\"#gitrepositorybranch\").setOptions(branches)\n    // console.log(\"branches: \" + branches)\n  }\n\n\n  \n  async updateContextSensitiveButtons() {\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    this.get(\"#serverUrl\").setOptions(lively.files.getKnownServers()) \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"]}