{"version":3,"sources":["https://lively-kernel.org/lively4/swt21-debugging/src/client/literature.js"],"names":["Dexie","BibtexParser","MarkdownIt","Bibliography","FileIndex","pt","toTitleCase","moment","specialInspect","target","contentNode","inspector","normal","renderObjectdProperties","name","Object","keys","getOwnPropertyDescriptors","__proto__","desc","getOwnPropertyDescriptor","get","appendChild","display","e","MicrosoftAcademicEntities","baseURL","generateSchema","entityName","schemaFromURL","url","content","fetch","then","r","text","md","html","render","div","innerHTML","tbody","querySelector","Array","from","querySelectorAll","map","ea","td","textContent","description","type","operations","entityTypeEnum","getEntityType","i","allSchemas","all","entity","list","obj","item","schemas","window","lively4academicSchemas","Author","constructor","value","DAuN","id","AuId","livelyInspect","Paper","ensure","raw","existing","Literature","getPaperEntry","microsoftid","p","Id","Error","setById","byId","_byId","paper","Map","set","addPaper","getId","optionalEntity","entry","resp","method","headers","status","json","allBibtexEntries","current","db","bibliography","toArray","importBibtexId","undefined","source","toBibtex","importBibtexSource","lively","notify","importURL","find","match","libcontent","files","loadFile","saveFile","openBrowser","authors","AA","authorNames","year","Y","title","DN","replace","doi","DOI","bibtexType","BT","booktitle","BV","key","toBibtexEntry","citationKey","keywords","F","DFN","hasPublicationInfo","J","C","findBibtexFileEntries","entries","filter","entryTags","author","join","entryType","references","microsoftreferences","referencedBy","microsoftreferencedby","generateCitationKey","abstract","index","IA","InvertedIndex","result","word","pos","allReferencesRequery","length","academicQueryToPapers","query","response","loadJSON","console","warn","entities","push","resolveMicrosoftIdsToPapers","papers","rest","getPaperEntries","concat","resolveReferences","RId","findReferencedBy","log","patchPaper","papersToBibtex","shortPaperCSS","toShortHTML","toHTML","generateFilename","bibentry","filename","toImportURL","importBaseURL","importBaseURLDirName","file","ensureCache","isLoadingCache","cachedPapers","cachedPapersById","Promise","resolve","start","Date","now","papersById","invalidateCache","ensurePaperEntry","deleteEmptyAuthorPapers","forEach","delete","put","updateCache","assign","includes","version","stores","upgrade"],"mappings":"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","file":"literature.js","sourcesContent":["import Dexie from \"src/external/dexie3.js\"\nimport BibtexParser from 'src/external/bibtexParse.js';\nimport MarkdownIt from \"src/external/markdown-it.js\";\nimport Bibliography from \"src/client/bibliography.js\"\nimport FileIndex from \"src/client/fileindex.js\";\nimport {pt} from \"src/client/graphics.js\"\nimport toTitleCase from \"src/external/title-case.js\"\nimport moment from \"src/external/moment.js\"\n \n\nfunction specialInspect(target, contentNode, inspector, normal) {\n    inspector.renderObjectdProperties(contentNode, target)\n    \n\n    for(var name of Object.keys(Object.getOwnPropertyDescriptors(target.__proto__))) {\n      var desc = Object.getOwnPropertyDescriptor(target.__proto__, name)\n      if (desc.get) {\n        try {\n          contentNode.appendChild(inspector.display(target[name], false, name, target))\n        } catch(e) {\n          // ignore e\n        }\n      }\n    }    \n  }\n\nexport class MicrosoftAcademicEntities {\n\n  \n  static get baseURL() {\n    return \"https://raw.githubusercontent.com/MicrosoftDocs/microsoft-academic-services/live/academic-services/project-academic-knowledge/\";\n  }\n\n  static async generateSchema(entityName) {\n    return this.schemaFromURL(this.baseURL + \"reference-\" + entityName + \"-entity-attributes.md\")\n  }\n    \n  \n  static async schemaFromURL(url) {\n    var content = await fetch(url).then(r => r.text());\n    var md = new MarkdownIt();\n    var html = md.render(content);\n    var div = <div></div>;\n    div.innerHTML = html;\n    var tbody = div.querySelector(\"tbody\");\n    return tbody ? Array.from(tbody.querySelectorAll(\"tr\").map(ea => Array.from(ea.querySelectorAll(\"td\").map(td => td.textContent))).map(ea => ({ name: ea[0], description: ea[1], type: ea[2], operations: ea[3] }))) : [];\n  }  \n\n  static entityTypeEnum() {\n    return [\"paper\", \"author\", \"journal\", \"conference-series\", \"conference-instance\", \"affiliation\", \"field-of-study\"]\n  }\n    \n  static getEntityType(i) {\n    return this.entityTypeEnum()[i]\n  }\n    \n  static async allSchemas() {\n    var all = {};\n    all.entity =  await this.schemaFromURL(this.baseURL + \"reference-entity-attributes.md\")\n    \n    //all.entityTypeEnum = [\"Paper\", \"Author\", \"Journal\", \"Conference Series\", \"Conference Instance\", \"Affiliation\", \"Field Of Study\"]\n    all.entityTypeEnum = this.entityTypeEnum()\n\n    for (var ea of [\"affiliation\", \"author\", \"conference-instance\", \"conference-series\", \"field-of-study\", \"journal\", \"paper\"]) {\n      var list = await this.generateSchema(ea);\n      var obj = {};\n      for (var item of list) {\n        obj[item.name] = item;\n      }\n\n      all[ea] = obj;\n    }\n    return all;\n  }\n\n    \n  static async schemas() {\n    // window.lively4academicSchemas = null\n    if (!window.lively4academicSchemas) {\n      window.lively4academicSchemas = await this.allSchemas();\n    }\n    return window.lively4academicSchemas;\n  }\n\n}\n\nexport class Author {\n \n  constructor(value) {\n    this.value = value\n  }\n\n  get name() {\n   return this.value.DAuN // \"Original author name\"\n  }\n  \n  get id() {\n    return this.value.AuId \n  }\n  \n  livelyInspect(contentNode, inspector, normal) {\n    specialInspect(this, contentNode, inspector, normal)\n  }\n}\n\n\nexport class Paper {\n  \n  static async ensure(raw) {\n    var existing = await Literature.getPaperEntry(raw.microsoftid)\n    if (!existing) {\n      var p = new Paper(raw)\n      if(!raw.Id) {\n        throw new Error(\"Id is missing (microsoftid)\")\n      }\n\n      Paper.setById(raw.Id, p)      \n    } else {\n      p = new Paper(existing.value)\n    }    \n    return p\n  }\n  \n  static byId(id) {\n    if (!this._byId) return\n    var paper = this._byId.get(id)\n    return paper     \n  }\n\n  static setById(id, paper) {\n    if (!this._byId) this._byId = new Map()\n    this._byId.set(id, paper)\n    Literature.addPaper(paper)\n  }\n\n  static async getId(id, optionalEntity) {\n    var paper = this.byId(id)\n    if (paper) return paper\n    if (optionalEntity) {\n      paper = await Paper.ensure(optionalEntity)    \n    } else {\n      var entry = await Literature.getPaperEntry(id)\n      if (entry) {\n        paper = new Paper(entry.value)\n      } else {\n        // download it individually\n        var resp = await fetch(\"academic://expr:Id=\" + id, {\n            method: \"GET\", \n            headers: {\n              \"content-type\": \"application/json\"}})\n        if (resp.status != 200) {\n          return // should we note it down that we did not found it?\n        }\n        var json = await resp.json()\n        paper = await Paper.ensure(json[0])    \n      }\n    }\n    return paper\n  }\n\n  static async allBibtexEntries() {\n    return FileIndex.current().db.bibliography.toArray()\n  }\n  \n  static async importBibtexId(id) {\n    if (id === undefined) {\n      throw new Error(\"importBibtexId missing id\")\n    }\n    var paper = await Paper.getId(id)\n    if (paper) {\n      var source = paper.toBibtex()\n      \n      await this.importBibtexSource(source)\n    } else {\n      lively.notify(`ERROR no paper with id '${this.microsoftid}' found`)\n    }\n  }\n    \n  static async importBibtexSource(source) {\n    var importURL = (await this.allBibtexEntries())\n          .map(ea => ea.url)\n          .find(ea => ea && ea.match(/_incoming\\.bib$/))\n    if (!importURL) {\n      lively.notify(\"no _incoming.bib found\")\n    } else {\n      var libcontent = await lively.files.loadFile(importURL)\n\n      await lively.files.saveFile(importURL, libcontent + \"\\n\" + source )\n      lively.notify(\"PATER imported\", \"\", undefined, () => lively.openBrowser(importURL))\n    }\n  }\n  \n  \n  constructor(value) {\n    if (!value) throw new Error(\"value is missing\")\n    this.value = value\n  }\n  \n  get authors() {\n    return (this.value.AA || []).map(ea => new Author(ea)) \n  }\n\n  get authorNames() {\n    return (this.value.AA || []).map(ea => ea.DAuN) \n  }\n\n  \n  get year() {\n    return this.value.Y \n  }\n\n  get title() {\n    return (this.value.DN || \"\")// \"Original paper title\"\n      .replace(/[\"{}]/g,\"\")  // some cleanup\n  }\n\n  get doi() {\n    return this.value.DOI \n  }\n  \n  get microsoftid() {\n    return this.value.Id \n  }\n  \n  get bibtexType() {\n    return ({\n      'a': \"article\", \n      'b': \"book\", \n      'c': \"incollection\", \n      'p': \"inproceedings\"})[this.value.BT]  \n  }\n  \n  get booktitle() {\n    return this.value.BV\n  }\n  \n  get key() {\n    return this.toBibtexEntry().citationKey \n  }\n  \n  get keywords() {\n    return (this.value.F || []).map(ea => ea.DFN)    \n  }\n  \n  hasPublicationInfo() {\n    return this.value.J || this.value.C\n  }\n  \n  \n  async findBibtexFileEntries() {\n    var key = this.key\n    var entries = await Paper.allBibtexEntries()\n        \n    return entries.filter(ea => ea.key == key)    \n  }\n   \n  toBibtexEntry() {\n    var entry = {\n      entryTags: {\n        author: this.authors.map(author => author.name).join(\" and \"), \n        title: this.title,\n        year: this.year,\n        microsoftid: this.microsoftid,\n      },\n      entryType: this.bibtexType\n    }\n    if (this.booktitle) { entry.entryTags.booktitle = this.booktitle }\n    if (this.doi) { entry.entryTags.doi = this.doi }\n\n    if (this.references) {\n        entry.entryTags.microsoftreferences = this.references.map(ea => ea.microsoftid).join(\",\")\n    }\n    if (this.referencedBy) {\n        entry.entryTags.microsoftreferencedby = this.referencedBy.map(ea => ea.microsoftid).join(\",\")\n    }\n\n    entry.citationKey = Bibliography.generateCitationKey(entry)\n    return entry\n  }\n  \n  get abstract() {\n    var index = this.value.IA && this.value.IA.InvertedIndex\n    if (!index) return\n    var result = []\n    for(var word of Object.keys(index)) {\n      for (var pos of index[word]) {\n        result[pos] = word\n      }\n    }\n    return result.join(\" \")\n  }\n\n  \n  allReferencesRequery(references) {\n    if (!references || references.length == 0) return \n    return `Or(${ references.map(ea => 'Id=' + ea).join(\",\")})`\n  } \n  \n  \n  async academicQueryToPapers(query) {\n    if (!query) return []\n    try {\n      var response = await lively.files.loadJSON(\"academic://raw:\" + query + \"&count=\" + 1000)\n    } catch(e) {\n      console.warn(\"[academic] Error academicQueryToPapers \" + query + \"... BUT WE CONTINUE ANYWAY\")\n      return null\n    }\n    var result = []\n    for(var entity of response.entities) {\n      result.push(await Paper.getId(entity.Id, entity))\n    }\n    return result\n  }\n\n  async resolveMicrosoftIdsToPapers(references) {\n    var papers = []\n    var rest = []\n    \n    // bulk queries are faster\n    var entries = await Literature.getPaperEntries(references)\n    for(var microsoftid of references) {\n      // look each up if in db\n      var entry = entries.find(ea => ea && (ea.microsoftid == microsoftid))\n      if (entry && entry.value) {\n        papers.push(new Paper(entry.value))\n      } else {\n        rest.push(microsoftid)\n      }\n    } \n    // bulk load the rest\n    if (rest.length > 0) {\n      let list = await this.academicQueryToPapers(this.allReferencesRequery(rest))\n      if (list) papers = papers.concat(list)\n    }\n    return papers\n  }\n  \n  async resolveReferences() {\n    \n    this.references = []\n    if (!this.value.RId) return // nothing to do here    \n    \n    this.references = await this.resolveMicrosoftIdsToPapers(this.value.RId)\n    return this.references\n  }\n  \n  async findReferencedBy() {\n    if (this.referencedBy || !this.microsoftid) return;\n    \n    var entry = await Literature.getPaperEntry(this.microsoftid)\n    if (entry && entry.referencedBy) {\n      this.referencedBy = await this.resolveMicrosoftIdsToPapers(entry.referencedBy)\n    } else {\n      console.log(\"FETCH referencedBy \" + this.microsoftid)\n      \n      this.referencedBy = await this.academicQueryToPapers(\"RId=\" + this.microsoftid)  \n      if (this.referencedBy) {\n        await Literature.patchPaper(this.microsoftid, {\n          referencedBy: this.referencedBy.map(ea => ea.microsoftid)})           \n      }\n    }\n    return this.referencedBy\n  }\n  \n  papersToBibtex(papers) {\n    return `<lively-bibtex>\n      ${\n        papers\n            .map(ea => `<lively-bibtex-entry>${ea.toBibtex()}</lively-bibtex-entry>`)\n            .join(\"\\n\")\n      }\n      </lively-bibtex>` \n  }\n  \n  static shortPaperCSS() {\n    return `\n      .paper {\n        padding: 5px;\n        padding-left: 30px;\n      }\n\n      .paper .key {\n        margin-left: -30px;      \n        font-size: 10pt;\n        font-weight: bold;\n      }\n\n      .paper .title {\n        font-style: italic;\n      }\n\n      .paper .title {\n        font-style: italic;\n      }\n\n\n      .paper a {\n        color: black;\n        text-decoration-line: none\n      }\n\n      .paper a:hover {\n        color: darkblue;\n        text-decoration: underline currentcolor; \n      }\n\n\n    `\n  }\n    \n  async toShortHTML() {\n     return `<academic-paper mode=\"short\" microsoftid=\"${this.microsoftid}\"></academic-paper>`\n  }\n\n  async toHTML() {\n    return `<academic-paper microsoftid=\"${this.microsoftid}\"></academic-paper>`\n  }\n  \n  async generateFilename() {\n    var entry = this.toBibtexEntry()\n    var bibentry = await (<lively-bibtex-entry></lively-bibtex-entry>)\n    bibentry.value = entry\n    var filename = bibentry.generateFilename(entry)\n    return filename + \".pdf\"\n  }\n  \n  async toImportURL() {\n    var filename = await this.generateFilename()\n    var baseURL = await Paper.importBaseURL()\n    if (!baseURL) {\n      throw new Error(\"[Paper] toImportURL error: could not find baseURL \" + Paper.importBaseURLDirName())\n    }\n    return baseURL + filename \n  }\n  \n  toBibtex() {\n    var entry = this.toBibtexEntry()\n    return BibtexParser.toBibtex([entry], false);\n  }\n   \n  livelyInspect(contentNode, inspector, normal) {\n    specialInspect(this, contentNode, inspector, normal)\n    contentNode.appendChild(inspector.display(this.toBibtex(), false, \"#bibtex\", this))\n  }\n  \n  static importBaseURLDirName() {\n    return \"_incoming\" // #TODO add to preferences....\n  }\n  \n  static async importBaseURL() {\n    // #TODO make this also more customizeable\n    var files =  await FileIndex.current().db.files.toArray()\n    var file = files.find(ea => ea.url.match(`/${this.importBaseURLDirName()}/`))\n    return file && file.url.replace(/[^/]*$/,\"\")\n  }\n  \n}\n\n\nexport default class Literature {\n  \n  \n  static async ensureCache() {\n    if (this.isLoadingCache) {\n      await this.isLoadingCache\n    }\n      \n    if (!this.cachedPapers || !this.cachedPapersById) {\n      this.isLoadingCache = new Promise(async resolve => {\n        try {\n          var start = Date.now()\n          this.cachedPapers = await this.db.papers.toArray()\n          console.log(\"[literature] ensureCache indexdb \" + (Date.now() - start))\n\n          this.cachedPapersById = new Map()\n          for(var ea of this.cachedPapers) {\n            this.cachedPapersById.set(ea.microsoftid, ea)\n          }\n          console.log(\"[literature] ensureCache total \" + (Date.now() - start))          \n        } finally {\n          resolve()\n        }\n      })\n      await this.isLoadingCache\n      this.isLoadingCache = false\n    }\n  }\n  \n  static async papers() {\n    await this.ensureCache()    \n    return this.cachedPapers \n  }\n\n  static async papersById() {\n    await this.ensureCache()    \n    return this.cachedPapersById \n  }\n\n  \n  static invalidateCache() {\n    console.log(\"[literature] invalidate Cache\")\n    debugger\n    this.cachedPapers = null\n    this.cachedPapersById  = null\n    this.isLoadingCache = false\n  }\n  \n  static async ensurePaperEntry(paper) {\n    var raw = await this.db.papers.get(paper.microsoftid) \n    if (!raw) {\n      raw = this.addPaper(paper)\n    }\n    return  raw\n  }\n  \n  static async deleteEmptyAuthorPapers() {    \n    var entries = await this.papers()\n    this.invalidateCache()\n    return entries\n      .filter(ea => !ea.authors)\n      .forEach(ea => Literature.db.papers.delete(ea.microsoftid))\n  \n  }\n  \n  static async addPaper(paper) {\n    var raw = {\n        microsoftid: paper.microsoftid,\n        authors: paper.authorNames,\n        year: paper.year,\n        title: paper.title,\n        key: paper.key,\n        keywords: paper.keywords,\n        booktitle: paper.booktitle,\n        value: paper.value,\n        abstract: paper.abstract    \n    }\n    await this.db.papers.put(raw)\n\n    await this.updateCache(raw)\n    \n    return raw\n  }\n\n  static async updateCache(raw) {\n    await this.ensureCache()\n    \n    // manual cache update, because invalidating is very expensive\n    this.cachedPapers = this.cachedPapers.filter(ea => ea.microsoftid == raw.microsoftid)\n    this.cachedPapers.push(raw)\n    this.cachedPapersById.set(raw.microsoftid, raw)\n  }\n  \n  static async patchPaper(id, obj) {\n    var raw = await this.ensurePaperEntry({microsoftid: id})\n    raw = Object.assign(raw, obj)\n    await this.db.papers.put(raw) \n    await this.updateCache(raw)\n  }\n  \n  static async getPaperEntry(id) {\n    var map = await this.papersById()\n    var entry = map.get(id)\n    if (entry) return entry\n    // maybe something ch\n    // return this.db.papers.get({microsoftid: id})  \n  }\n  \n  static async getPaperEntries(references) {\n    var all = await this.papers()\n    return all.filter(ea => references.includes(ea.microsoftid))\n    \n    // (reasonably fast)\n    // return this.db.papers.bulkGet(references)\n    \n    // (SLOW)\n    // return (await this.db.papers.toArray())\n    //     .filter(ea => references.includes(ea.microsoftid))  \n  }\n  \n  static get db() {\n    var db = new Dexie(\"literature\");\n\n    db.version(1).stores({\n        papers: 'microsoftid,authors,year,title,key,keywords,booktitle',      \n    }).upgrade(function () {\n    })\n    \n    \n    return db\n  }\n}\n\n\n\n\n\n\n\n\n\n\n// import Tracing from \"src/client/tracing.js\"\n// Tracing.traceObject(Literature)\n"]}