{"version":3,"names":["GraphControl","Morph","KnotView","Graph","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"],"sources":["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}"],"mappings":"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"}