{"version":3,"sources":["https://lively-kernel.org/lively4/lively4-xray/templates/graph-control.js"],"names":["Morph","KnotView","Graph","GraphControl","initialize","windowTitle","addKnotButton","get","addEventListener","event","onAddKnot","addTripleButton","onAddTriple","launchTripleList","evt","onKickoffClicked","onOpenDiaryClicked","onRetrospectiveClicked","launchKnotCopyViewer","showKnotCopyViewer","launchGraph","input","setLabel","setPlaceholder","openKnotView","fullTextSearch","keyCode","value","initKnowledgeBases","viewer","lively","openComponentInWindow","getPosition","focus","graph","getInstance","diary","selectFirstEntry","openWeeklyDocument","title","today","Date","monday","mondayInWeek","toFormattedString","friday","fridayInWeek","knotTitle","knot","getOrCreateKnotForTitle","knotView","loadKnotForURL","url","refreshKnowledgeBasesWidget","addRootKnowledgeBaseButton","onclick","addRootKnowledgeBase","urlString","rootKnowledgeBases","getRootKnowledgeBases","rootKnowledgeBasesContainer","innerHTML","forEach","knowledgeBaseWidget","buildknowledgeBaseWidget","appendChild","buildNavigatableLink","buildRemoveKnowledgeIcon","ref","e","preventDefault","stopPropagation","container","openBrowser","removeIcon","removeRootKnowledgeBase","notify","tripleList","getURLString","addKnot","afterSubmit","parentElement","remove","addTriple","onResetGraph","clearInstance","searchString","searchTerms","split","map","str","toLowerCase","matchingKnots","getKnots","filter","isTriple","endsWith","content","every","term","includes","searchResult","setSearchTerm"],"mappings":"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","file":"graph-control.js","sourcesContent":["import 'lang';\n\nimport Morph from 'src/components/widgets/lively-morph.js';\nimport KnotView from \"templates/knot-view.js\";\n\nimport { Graph } from 'src/client/triples/triples.js';\n\nexport default class GraphControl extends Morph {\n  async initialize() {\n    this.windowTitle = \"Graph Control\";\n\n    let addKnotButton = this.get('#add-knot');\n    addKnotButton.addEventListener('click', event => this.onAddKnot(event));\n\n    let addTripleButton = this.get('#add-triple');\n    addTripleButton.addEventListener('click', event => this.onAddTriple(event));\n\n    let launchTripleList = this.get('#launchTripleList');\n    launchTripleList.addEventListener('click', event => this.launchTripleList());\n    \n    this.get('#kickoff').addEventListener('click', evt => this.onKickoffClicked(evt));\n    this.get('#open-diary').addEventListener('click', evt => this.onOpenDiaryClicked(evt));\n    this.get('#retrospective').addEventListener('click', evt => this.onRetrospectiveClicked(evt));\n\n    let launchKnotCopyViewer = this.get('#launch-knot-copy-viewer');\n    launchKnotCopyViewer.addEventListener('click', event => this.showKnotCopyViewer(event));\n    \n    let launchGraph = this.get('#launchGraph');\n    launchGraph.addEventListener('click', event => this.launchGraph());\n    \n    let input = this.get('#open-knot-view');\n    input.setLabel('Open Knot');\n    input.setPlaceholder('knot');\n    input.addEventListener('enter-knot', () => this.openKnotView());\n    \n    var fullTextSearch = this.get(\"#full-text-search\");\n    fullTextSearch.addEventListener('keyup',  event => {\n      if (event.keyCode == 13) { // ENTER\n        GraphControl.fullTextSearch(this.get('#full-text-search').value);\n      }\n    });\n    \n    this.initKnowledgeBases();\n  }\n  \n  async showKnotCopyViewer(evt) {\n    const viewer = await lively.openComponentInWindow(\"knot-copy-viewer\", lively.getPosition(evt));\n    viewer.focus();\n  }\n\n  async graph() {\n    return Graph.getInstance();\n  }\n  async onOpenDiaryClicked(evt) {\n    const diary = await lively.openComponentInWindow(\"research-diary\", lively.getPosition(evt));\n    diary.selectFirstEntry();\n  }\n  async openWeeklyDocument(title) {\n    const graph = await this.graph();\n    \n    const today = new Date();\n    const monday = today.mondayInWeek().toFormattedString('yyyy.MM.dd');\n    const friday = today.fridayInWeek().toFormattedString('yyyy.MM.dd');\n    \n    const knotTitle = `${title} ${monday}-${friday}`;\n    \n    const knot = await graph.getOrCreateKnotForTitle(knotTitle);\n    const knotView = await lively.openComponentInWindow(\"knot-view\");\n    knotView.loadKnotForURL(knot.url);\n  }\n  onKickoffClicked(evt) {\n    this.openWeeklyDocument('Kickoff')\n  }\n  onRetrospectiveClicked(evt) {\n    this.openWeeklyDocument('Retrospective')\n  }\n  \n  initKnowledgeBases() {\n    this.refreshKnowledgeBasesWidget();\n    \n    let addRootKnowledgeBaseButton = this.get('#add-root-knowledge-base');\n    addRootKnowledgeBaseButton.onclick = event => this.addRootKnowledgeBase(event);\n    \n    this.get('#inputAddDirectory').addEventListener('keyup',  event => {\n      if (event.keyCode == 13) { // ENTER\n        this.addRootKnowledgeBase(event);\n      }\n    });\n  }\n  \n  async addRootKnowledgeBase(event) {\n    const urlString = this.get('#inputAddDirectory').value;\n    const graph = await Graph.getInstance();\n    await graph.addRootKnowledgeBase(urlString);\n    this.refreshKnowledgeBasesWidget();\n  }\n  async refreshKnowledgeBasesWidget() {\n    const graph = await Graph.getInstance();\n    const rootKnowledgeBases = await graph.getRootKnowledgeBases();\n\n    let rootKnowledgeBasesContainer = this.get('#root-knowledge-bases-container');\n    rootKnowledgeBasesContainer.innerHTML = \"\";\n    rootKnowledgeBases.forEach(urlString => {\n      let knowledgeBaseWidget = this.buildknowledgeBaseWidget(urlString);\n      rootKnowledgeBasesContainer.appendChild(knowledgeBaseWidget);\n    });\n  }\n  \n  buildknowledgeBaseWidget(urlString) {\n    return <span class=\"knowledge-base\">\n      {this.buildNavigatableLink(urlString)}\n      {this.buildRemoveKnowledgeIcon(urlString)}\n    </span>;\n  }\n  buildNavigatableLink(urlString) {\n    let ref = <a class=\"open-knowledge-base\">{urlString}</a>;\n    ref.addEventListener(\"click\", async e => {\n      e.preventDefault();\n      e.stopPropagation();\n      const container = await lively.openBrowser(urlString, false);\n      container.focus();\n    });\n    \n    return ref;\n  }\n  buildRemoveKnowledgeIcon(urlString) {\n    let removeIcon = <i class=\"fa fa-trash remove-knowledge-base\"></i>;\n    removeIcon.addEventListener(\"click\", async e => {\n      const graph = await Graph.getInstance();\n      if(await graph.removeRootKnowledgeBase(urlString)) {\n        this.refreshKnowledgeBasesWidget();\n      } else {\n        lively.notify('did not removed knowledge base ' + urlString);\n      }\n    });\n    \n    return removeIcon;\n  }\n  \n  async launchTripleList() {\n    const tripleList = await lively.openComponentInWindow(\"triple-list\");\n    tripleList.focus();\n  }\n  \n  async launchGraph() {\n    return await lively.openComponentInWindow(\"triple-notes\");\n  }\n  \n  async openKnotView() {\n    const knotView = await lively.openComponentInWindow(\"knot-view\");\n    knotView.loadKnotForURL(this.get('#open-knot-view').getURLString());\n    return knotView;\n  }\n  \n  async onAddKnot(event) {\n    const addKnot = await lively.openComponentInWindow(\"add-knot\");\n    addKnot.focus();\n    addKnot.afterSubmit = () => addKnot.parentElement.remove();\n  }\n  \n  async onAddTriple(event) {\n    const addTriple = await lively.openComponentInWindow(\"add-triple\");\n    addTriple.focus();\n    addTriple.afterSubmit = () => addTriple.parentElement.remove();\n  }\n  \n  async onResetGraph() {\n    await Graph.clearInstance();\n    lively.notify('resetted graph');\n  }\n  \n  // Full-text search on object graph\n  static async fullTextSearch(searchString) {\n    const searchTerms = searchString.split(' ')\n      .map(str => str.toLowerCase());\n\n    const graph = await Graph.getInstance();\n    const matchingKnots = graph.getKnots()\n      .filter(knot => !knot.isTriple())\n      .filter(knot => knot.url.endsWith('.md'))\n      .filter(knot => {\n        const content = knot.content.toLowerCase();\n        return searchTerms.every(term => content.includes(term));\n      });\n    \n    const searchResult = await lively.openComponentInWindow(\"knot-search-result\");\n    searchResult.setSearchTerm(searchString);\n    matchingKnots.forEach(::searchResult.addKnot);\n    searchResult.focus();\n  }\n}"]}