{"version":3,"sources":["https://lively-kernel.org/lively4/lively4-livelyenergy/templates/graph-control.js"],"names":["Morph","KnotView","Graph","GraphControl","initialize","windowTitle","addKnotButton","get","addEventListener","event","onAddKnot","addTripleButton","onAddTriple","launchTripleList","evt","onKickoffClicked","onOpenDiaryClicked","onRetrospectiveClicked","launchGraph","input","setLabel","setPlaceholder","openKnotView","fullTextSearch","keyCode","value","initKnowledgeBases","graph","getInstance","diary","lively","openComponentInWindow","getPosition","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","focus","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 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 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}"]}