{"version":3,"sources":["https://lively-kernel.org/lively4/swd21-croquet/src/client/triples/triples.js"],"names":["focalStorage","ContextMenu","through","uuid","fileName","hintForLabel","getTempKeyFor","asDragImageFor","trackInstance","isExternalURL","isInternalURL","parseMarkdown","getJSYaml","loadJavaScriptThroughDOM","jsyaml","markdown","filename","frontmatterSeparator","startsWith","parts","split","shift","frontmatterString","textContent","join","metadata","e","notify","undefined","Knot","constructor","content","new","target","call","url","getMetadata","label","firstLine","replace","isTriple","save","newContent","lively","openViewInWindow","knotView","openComponentInWindow","loadKnotForURL","collectContextMenuItems","evt","hide","graph","getInstance","deleteKnot","toListItem","listItem","addEventListener","event","stopPropagation","preventDefault","openIn","document","asDataForDrag","dt","setData","mimeType","dragInfo","Triple","parse","log","DEFAULT_FOLDER_URL","TAG_URL","IS_A_URL","SAME_AS_URL","CONTAINS_URL","ROOT_KNOWLEDGE_BASES_KEY","PREFERRED_KNOWLEDGE_BASE_KEY","origin","Graph","Map","prepare","rootKnowledgeBases","getRootKnowledgeBases","all","map","loadFromDir","getItem","addRootKnowledgeBase","urlString","URL","stats","Error","includes","push","setItem","removeRootKnowledgeBase","filter","rootBase","getKnots","hasKnotWithURL","knot","triples","referingTriples","query","_","confirm","index","urlURL","result","method","r","text","createReferree","triple","propName","subjectUrlString","subjectUrl","searchString","toString","subject","requestKnot","linkUpTriple","clearInstance","s","p","o","getUrlsByKnot","filePath","loadSingleKnot","urlOrString","err","endsWith","directory","Promise","resolve","progress","showProgress","directoryURL","json","fileNames","desc","total","i","pool","Set","limit","arr","ii","groups","groupBy","args","group","values","knotURL","prom","remove","escapeSpecialCharacters","str","fileForNameExists","name","getOrCreateKnotForTitle","defaultText","escapedName","proposedURL","existingKnot","success","fileExists","warn","createKnot","getNonCollidableURL","fileEnding","maxTries","offset","bust","createTriple","predicateURLString","objectURLString","knowledgeBaseURLString","stringify","predicate","object"],"mappings":"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","file":"triples.js","sourcesContent":["\"enable aexpr\";\nimport 'lang';\n\nimport focalStorage from 'src/external/focalStorage.js';\nimport ContextMenu from './../contextmenu.js';\nimport { through, uuid, fileName, hintForLabel, getTempKeyFor, asDragImageFor } from 'utils';\nimport { trackInstance } from 'active-group';\n\nasync function getJSYaml() {\n  await lively.loadJavaScriptThroughDOM(\"esprima\", \"https://lively-kernel.org/lively4/foo/src/external/esprima.js\");\n  await lively.loadJavaScriptThroughDOM(\"js-yaml\", \"https://lively-kernel.org/lively4/foo/src/external/js-yaml.js\");\n  return jsyaml;\n}\n\n// #TODO: unused\nasync function parseMarkdown(markdown, filename) {\n  try {\n    const frontmatterSeparator = \"---\\r\\n\";\n    if(markdown.startsWith(frontmatterSeparator)) {\n      const parts = markdown.split(frontmatterSeparator);\n      if(parts.length >= 3) {\n        parts.shift(); // empty\n        const frontmatterString = parts.shift();\n        return {\n          textContent: parts.join(frontmatterSeparator),\n          metadata: (await getJSYaml()).load(frontmatterString)\n        };\n      }\n    }\n  } catch(e) {\n    lively.notify(\"failed frontmatter parsing\", \"\", undefined, undefined, \"red\");\n  }\n  return {\n    textContent: markdown,\n    metadata: {}\n  };\n}\n\nexport class Knot {\n  constructor(fileName, content) {\n    this.fileName = fileName;\n    this.content = content;\n    \n    if(new.target === Knot) {\n      trackInstance.call(Knot, this);\n    }\n  }\n  get url() { return this.fileName; }\n  getMetadata() { return this.metadata; }\n  label() {\n    if(this.fileName.endsWith('.md')) {\n      const firstLine = this.content.split('\\n')[0];\n      return firstLine.replace(/^#\\s/, '');\n    }\n    return this.fileName;\n  }\n  isTriple() { return false; }\n  async save(newContent) {\n    this.content = newContent;\n    await lively.files.saveFile(this.url, newContent);\n  }\n  async openViewInWindow() {\n    const knotView = await lively.openComponentInWindow(\"knot-view\");\n    knotView.loadKnotForURL(this.url);\n  }\n  collectContextMenuItems() {\n    return [\n        [\"Knot View\", evt => {\n          ContextMenu.hide();\n          this.openViewInWindow();\n        }, \"\", '<i class=\"fa fa-window-maximize\" aria-hidden=\"true\"></i>'],\n        [\"Danger Zone\", [\n          [\"Delete\", async evt => {\n            ContextMenu.hide();\n            const graph = await Graph.getInstance();\n\n            const label = this.label();\n            if(await graph.deleteKnot(this)) {\n              // #TODO: use reactivity to update views and search results\n              lively.notify(`${label} deleted!`, null, 4, null, \"red\");\n            } else {\n              lively.notify('did not delete knot ' + label, this.url);\n            }\n          }, \"Delete for good\", '<i class=\"fa fa-trash\" aria-hidden=\"true\"></i>']\n        ]]\n      ];\n  }\n\n  toListItem() {\n    const listItem = <li tabindex=\"1\" draggable=\"true\">{this.label()}</li>;\n    listItem.knot = this;\n    \n    listItem.addEventListener('keydown', event => {\n      if (event.keyCode == 13) { // ENTER\n        this.openViewInWindow();\n        event.stopPropagation();\n        event.preventDefault();\n      }\n    });\n    listItem.addEventListener(\"dblclick\", event => {\n      this.openViewInWindow();\n      event.stopPropagation();\n      event.preventDefault();\n    });\n    listItem.addEventListener(\"contextmenu\", event => {\n      ContextMenu.openIn(document.body, event, this, undefined, this.collectContextMenuItems());\n      event.stopPropagation();\n      event.preventDefault();\n    });\n\n    return listItem;\n  }\n  \n  asDataForDrag(evt) {\n    const dt = evt.dataTransfer;\n    //listItem.style.color = \"blue\";\n    dt.setData(\"knot/url\", this.url);\n    dt.setData(\"text/uri-list\", this.url);\n    dt.setData(\"text/plain\", this.url);\n    dt.setData(\"javascript/object\", getTempKeyFor(this));\n    const mimeType = 'text/plain';\n    const filename = this.url::fileName();\n    const url = this.url;\n    dt.setData(\"DownloadURL\", `${mimeType}:${filename}:${url}`);\n\n    // #TODO: remove duplication\n    const dragInfo = <div style=\"width: 150px;\">\n      {hintForLabel(this.label())}\n    </div>;\n    dragInfo::asDragImageFor(evt, 50, 60);\n  }\n}\n\nexport class Triple extends Knot {\n  constructor(fileName, content) {\n    try {\n      JSON.parse(content)\n    } catch(e) {\n      debugger\n      console.log(fileName);\n    }\n\n    super(fileName, JSON.parse(content));\n\n    // track this Triple for ROQs after full initialization\n  }\n  \n  label() {\n    if(this.predicate) {\n      return 't: ' + this.predicate.label();\n    }\n    return this.filename.replace('.triple.json', '');\n  }\n  isTriple() { return true; }\n}\n\nexport const DEFAULT_FOLDER_URL = 'https://lively4/notes/';\nexport const TAG_URL = DEFAULT_FOLDER_URL + 'tag.md';\nexport const IS_A_URL = DEFAULT_FOLDER_URL + 'is_a.md';\nexport const SAME_AS_URL = DEFAULT_FOLDER_URL + 'same_as.md';\nexport const CONTAINS_URL = DEFAULT_FOLDER_URL + 'contains.md';\n\nconst ROOT_KNOWLEDGE_BASES_KEY = 'triple-notes-root-knowledge-bases';\nconst PREFERRED_KNOWLEDGE_BASE_KEY = 'triple-notes-preferred-knowledge-base';\n\nfunction isInternalURL(url) {\n  const origin = url.origin;\n  return origin === 'https://lively4' || origin === 'https://localhost:8800';\n}\nfunction isExternalURL(url) { return !isInternalURL(url); }\n\nexport class Graph {\n  constructor() {\n    this.knots = [];\n    this.loadedDirectoryPromises = new Map();\n    // url string -> Promise for Knot\n    this.requestedKnots = new Map();\n  }\n  async prepare() {\n    const rootKnowledgeBases = await this.getRootKnowledgeBases();\n    return Promise.all(rootKnowledgeBases.map(::this.loadFromDir));\n  }\n  \n  async getRootKnowledgeBases() {\n    return (await focalStorage.getItem(ROOT_KNOWLEDGE_BASES_KEY)) || [\n      DEFAULT_FOLDER_URL\n      //, \"https://lively4/gamedev/\"\n    ]\n  }\n  \n  async addRootKnowledgeBase(urlString) {\n    try {\n      new URL(urlString);\n      const stats = JSON.parse(await lively.files.statFile(urlString));\n      if(!stats || stats.type !== \"directory\") {\n        throw new Error(stats);\n      }\n    } catch (e) {\n      lively.notify(`Knowledge base ${urlString} not valid.`, e.message, undefined, undefined, \"red\");\n      return;\n    }\n    \n    const rootKnowledgeBases = (await this.getRootKnowledgeBases()) || [];\n    if(!rootKnowledgeBases.includes(urlString)) {\n      rootKnowledgeBases.push(urlString);\n      await focalStorage.setItem(ROOT_KNOWLEDGE_BASES_KEY, rootKnowledgeBases);\n      return await this.loadFromDir(urlString);\n    }\n  }\n  \n  async removeRootKnowledgeBase(urlString) {\n    let rootKnowledgeBases = (await this.getRootKnowledgeBases()) || [];\n    if(rootKnowledgeBases.includes(urlString)) {\n      // remove via filter\n      rootKnowledgeBases = rootKnowledgeBases.filter(rootBase => rootBase !== urlString);\n      await focalStorage.setItem(ROOT_KNOWLEDGE_BASES_KEY, rootKnowledgeBases);\n      return true;\n    } else {\n      return false;\n    }\n  }\n  \n  getKnots() {\n    return this.knots;\n  }\n  hasKnotWithURL(url) {\n    return !!this.getKnots().find(knot => knot.url === url);\n  }\n  get triples() {\n    return this.knots.filter(knot => knot.isTriple());\n  }\n  async deleteKnot(knot) {\n    // check for triples on top of the knot\n    const referingTriples = this.query(knot, _, _)\n      .concat(this.query(_, knot, _))\n      .concat(this.query(_, _, knot));\n    if(referingTriples.length > 0) {\n      lively.notify('Deletion aborted!', `${referingTriples.length} triples refer to this knot.`);\n      return false;\n    }\n\n    let url = knot.url;\n    if (!window.confirm(\"delete knot \" + url)) { return false; }\n    \n    let index = this.knots.indexOf(knot);\n    if (index > -1) {\n      this.knots.splice(index, 1);\n      lively.notify(`Removed knot ${url} in local graph instance.`);\n    } else {\n      lively.notify(`Did not find knot ${url} in local graph instance.`);\n    }\n    \n    let urlURL = new URL(url);\n    if(!isInternalURL(urlURL)) {\n      var result = await fetch(url, {method: 'DELETE'})\n        .then(r => r.text());\n      lively.notify(`Deleted knot ${url} in remote storage`, result);\n    }\n    \n    lively.notify('Knot removed from graph.');\n    \n    return true;\n  }\n\n  async createReferree(triple, propName) {\n    let subjectUrlString = triple.content[propName];\n    let subjectUrl = new URL(subjectUrlString, triple.fileName);\n    let searchString = subjectUrl.toString();\n    \n    let subject = await this.requestKnot(subjectUrl);\n    //let subject = this.knots.find(knot => knot.fileName === searchString);\n    if(subject) {\n      triple[propName] = subject;\n    } else {\n      throw new Error(`${searchString} ${triple.fileName} external referrees not yet implemented!`);\n    }\n  }\n  async linkUpTriple(triple) {\n    return Promise.all([\n      this.createReferree(triple, 'subject'),\n      this.createReferree(triple, 'predicate'),\n      this.createReferree(triple, 'object')\n    ]);\n  }\n\n  static async getInstance() {\n    if(!this.instance) {\n      this.instance = new Graph();\n    }\n    \n    await this.instance.prepare();\n    \n    return this.instance;\n  }\n  static clearInstance() {\n    this.instance = undefined;\n  }\n  \n  query(s, p, o) {\n    return this.triples\n      .filter(triple => s === _ || triple.subject === s)\n      .filter(triple => p === _ || triple.predicate === p)\n      .filter(triple => o === _ || triple.object === o);\n  }\n  \n  getUrlsByKnot(knot) {\n    // TODO: we simply return the single reference url for now\n    return [knot.fileName];\n  }\n\n  // returns a promise for the Knot\n  async requestKnot(url) {\n    const filePath = url.toString();\n    if(!this.requestedKnots.has(filePath)) {\n      this.requestedKnots.set(filePath, this.loadSingleKnot(url));\n    }\n    return this.requestedKnots.get(filePath);\n  }\n  \n  async loadSingleKnot(urlOrString) {\n    const url = new URL(urlOrString);\n    \n    let fileName = url.toString();\n    let text = isExternalURL(url) ?\n      url.hostname + url.pathname :\n      await fetch(url).then(r => r.text()).catch(err => `ERROR loading this knot: ${err}`);\n\n    // deserializeKnot\n    const isTriple = fileName.endsWith(\".triple.json\");\n\n    let knot;\n    if(isTriple) {\n      knot = new Triple(fileName, text);\n      await this.linkUpTriple(knot);\n      trackInstance.call(Triple, knot);\n    } else {\n      knot = new Knot(fileName, text);\n    }\n\n    this.knots.push(knot);\n\n    return knot;\n  }\n  \n  async loadFromDir(directory) {\n    if(!this.loadedDirectoryPromises.has(directory)) {\n      this.loadedDirectoryPromises.set(directory, new Promise(async resolve => {\n        const progress = await lively.showProgress(`loading dir ${directory}`);\n        progress.value = 0;\n        \n        const directoryURL = new URL(directory);\n        const json = await fetch(directory, { method: 'OPTIONS' }).then(r => r.json());\n        const fileNames = json.contents\n          .filter(desc => desc.type === \"file\")\n          .map(desc => desc.name);\n        \n        const total = fileNames.length;\n        let i = 0;\n        const pool = new Set();\n        const limit = 100;\n        const arr = [1,2,3,4,5,6]\n        let ii = 0;\n        const groups = fileNames.groupBy((...args) => (ii++ / limit).floor())\n        for (let group of Object.values(groups)) {\n          await Promise.all(group.map(fileName => {\n            const knotURL = new URL(fileName, directoryURL);\n            const prom = this.requestKnot(knotURL);\n            progress.value = i++ / total\n            return prom\n          }));\n        }\n        \n        await resolve();\n        await progress.remove()\n      }));\n    }\n    return this.loadedDirectoryPromises.get(directory);\n  }\n  \n  escapeSpecialCharacters(str) {\n    return str.replace(/[^A-Za-z0-9-]/g, '_');\n  }\n  \n  async fileForNameExists(name) {\n    const url = new URL(`${this.escapeSpecialCharacters(str)}.md`, DEFAULT_FOLDER_URL);\n    return (await fetch(url)).status === 200;\n  }\n  \n  async getOrCreateKnotForTitle(name, defaultText = '# Default Text') {\n    const escapedName = this.escapeSpecialCharacters(name);\n    const proposedURL = `${DEFAULT_FOLDER_URL}${escapedName}.md`;\n\n    const existingKnot = this.getKnots().find(knot => {\n      return knot.url === proposedURL\n    });\n    if (existingKnot) {\n      lively.success('EXISTS IN MEMORY')\n      return existingKnot;\n    }\n    \n    const fileExists = (await fetch(proposedURL)).status === 200;\n    if(fileExists) {\n      lively.success('EXISTS REMOTELY')\n      return this.requestKnot(proposedURL);\n    }\n    \n    lively.warn('NON EXISTENT')\n    return this.createKnot(DEFAULT_FOLDER_URL, name, 'md');\n  }\n\n  async getNonCollidableURL(directory, name, fileEnding) {\n    const maxTries = 10;\n    const fileName = this.escapeSpecialCharacters(name);\n    let offset = 0;\n    let i = 0;\n    \n    for(; i < maxTries; i++) {\n      let bust = offset === 0 ? '' : offset;\n      let url = new URL(`${fileName}${bust}.${fileEnding}`, directory);\n      let fileExists = (await fetch(url)).status === 200;\n      if(fileExists) {\n        offset++;\n      } else {\n        return url;\n      }\n    }\n    throw new Error('too many tries for '); // TODO: improve error message\n  }\n  async createKnot(directory, name, fileEnding) {\n    if(fileEnding !== 'md') { throw new Error('only .md files supported by now, instead found ', + fileEnding); }\n\n    let url = await this.getNonCollidableURL(directory, name, fileEnding);\n    let content = `# ${name}\n\n`;\n    await lively.files.saveFile(url, content);\n    \n    return this.requestKnot(url);\n  }\n  async createTriple(subjectUrlString, predicateURLString, objectURLString, knowledgeBaseURLString) {\n    await this.requestKnot(subjectUrlString);\n    await this.requestKnot(predicateURLString);\n    await this.requestKnot(objectURLString);\n\n    const url = await this.getNonCollidableURL(knowledgeBaseURLString, 'triple-' + uuid(), 'triple.json');\n    const content = JSON.stringify({\n      subject: subjectUrlString,\n      predicate: predicateURLString,\n      object: objectURLString\n    });\n    await lively.files.saveFile(url, content);\n    \n    //await invalidateFetchCache(knowledgeBaseURLString);\n    \n    return this.requestKnot(url);\n  }\n\n}\n\n// wild card for querying\nexport const _ = {};\n"]}