{"version":3,"sources":["https://lively-kernel.org/lively4/lively4-livelyenergy/src/components/widgets/lively-bibtex-entry.js"],"names":["Morph","Parser","latexconv","Strings","LivelyBibtexEntry","initialize","windowTitle","value","toJSON","textContent","addEventListener","evt","onDblClick","get","onDragStart","draggable","ctrlKey","dataTransfer","setData","innerHTML","key","getAttribute","newvalue","e","lively","notify","setAttribute","removeAttribute","_value","parseAuthors","bibtexAuthors","split","map","ea","reverse","join","obj","toBibtex","updateView","livelyMigrate","other","entryTags","convertLaTeXToUnicode","author","year","title","generateFilename","_","last","toUpperCaseFirst","toCamelCase","replace","citationKey","string","Author","Year","Title","setFromBibtex","livelyInspect","contentNode","inspector","appendChild","display","livelyExample"],"mappings":"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","file":"lively-bibtex-entry.js","sourcesContent":["\n/*MD \n# Bibtex Entry\n![](lively-bibtex-entry.png){height=50}\n\nMD*/\n\nimport Morph from 'src/components/widgets/lively-morph.js';\nimport Parser from 'src/external/bibtexParse.js';\nimport latexconv from \"src/external/latex-to-unicode-converter.js\";\nimport Strings from 'src/client/strings.js';\n\nexport default class LivelyBibtexEntry extends Morph {\n  async initialize() {\n    this.windowTitle = \"LivelyBibtexEntry\";\n    this.value = Parser.toJSON(this.textContent)[0];\n    this.addEventListener(\"dblclick\", evt => this.onDblClick(evt));\n\n    this.get(\"#entry\").addEventListener(\"dragstart\", evt => this.onDragStart(evt));\n\n    this.get(\"#entry\").draggable = true;\n  }\n\n  async onDragStart(evt) {\n\n    if (evt.ctrlKey) {\n      evt.dataTransfer.setData(\"text/plain\", this.innerHTML);\n    } else {\n      evt.dataTransfer.setData(\"text/plain\", `[@${this.key}]`);\n    }\n  }\n\n  onDblClick(evt) {\n    if (this.getAttribute(\"mode\") == \"edit\") {\n      var newvalue;\n      try {\n        newvalue = Parser.toJSON(this.textContent);\n      } catch (e) {\n        lively.notify(\"could not parse bibtex entry: \" + e);\n      }\n      if (newvalue && newvalue[0]) {\n        this.value = newvalue[0];\n        this.setAttribute(\"mode\", \"view\");\n        this.removeAttribute(\"contenteditable\");\n      }\n    } else {\n      this.setAttribute(\"mode\", \"edit\");\n      this.setAttribute(\"contenteditable\", \"true\");\n    }\n  }\n\n  get value() {\n    return this._value;\n  }\n\n  parseAuthors(bibtexAuthors) {\n    return bibtexAuthors.split(/ and /).map(ea => ea.split(/, /).reverse().join(\" \"));\n  }\n\n  set value(obj) {\n    if (obj) {\n      this.textContent = Parser.toBibtex([obj], false);\n    } else {\n      this.textContent = \"\";\n    }\n    this._value = obj;\n    this.updateView();\n  }\n\n  livelyMigrate(other) {\n    this.value = other.value;\n  }\n    \n  updateView() {\n    if (!this.value || !this.value.entryTags) return;\n    this.get(\"#key\").textContent = this.key;\n    try {\n      this.get(\"#author\").textContent = this.parseAuthors(latexconv.convertLaTeXToUnicode(this.author)).join(\", \");\n    } catch (e) {\n      this.get(\"#author\").textContent = this.author;\n    }\n    this.get(\"#year\").textContent = this.year;\n    try {\n      this.get(\"#title\").textContent = latexconv.convertLaTeXToUnicode(this.title);\n    } catch (e) {\n      this.get(\"#title\").textContent = this.title;\n    }\n\n    this.get(\"#filename\").textContent = \"// \" + this.generateFilename() + \"\";\n  }\n\n  generateFilename() {\n    try {\n      return this.parseAuthors(latexconv.convertLaTeXToUnicode(this.author)).map(ea => _.last(ea.split(\" \"))).join(\"\") + `_${this.year}_${Strings.toUpperCaseFirst(Strings.toCamelCase(latexconv.convertLaTeXToUnicode(this.title).replace(/(^| )[aA] /, \"\")).replace(/[:,\\-_'\"\\`\\$\\%{}()\\[\\]\\\\\\/.]/g, \"\"))}`;\n    } catch (e) {\n      return \"\";\n    }\n  }\n\n  // #TODO refactor those accessors\n  get key() {\n    return this.value.citationKey;\n  }\n\n  set key(string) {\n    this.value.citationKey = string;\n  }\n\n  get author() {\n    return this.value.entryTags && (this.value.entryTags.Author || this.value.entryTags.author);\n  }\n\n  set author(string) {\n    if (this.value.entryTags.Author) {\n      this.value.entryTags.Author = string;\n    } else {\n      this.value.entryTags.author = string;\n    }\n  }\n\n  get year() {\n    return this.value.entryTags.Year || this.value.entryTags.year;\n  }\n\n  set year(string) {\n    if (this.value.entryTags.Year) {\n      this.value.entryTags.Year = string;\n    } else {\n      this.value.entryTags.year = string;\n    }\n  }\n\n  get title() {\n    return this.value.entryTags.Title || this.value.entryTags.title;\n  }\n\n  set title(string) {\n    if (this.value.entryTags.Title) {\n      this.value.entryTags.Title = string;\n    } else {\n      this.value.entryTags.title = string;\n    }\n  }\n\n  setFromBibtex(string) {\n    this.value = Parser.toJSON(string)[0];\n  }\n\n  livelyInspect(contentNode, inspector) {\n    if (this.value) {\n      contentNode.appendChild(inspector.display(this.value, false, \"#value\", this));\n    }\n  }\n\n  async livelyExample() {\n    this.setFromBibtex(`@Article{Ingalls1997BFS,\n  author        = {Ingalls, Dan and Kaehler, Ted and Maloney, John and Wallace, Scott and Kay, Alan},\n  title         = {{Back to the Future: The Story of Squeak, a Practical Smalltalk Written in Itself}},\n  journal       = {ACM SIGPLAN Notices},\n  year          = {1997},\n  volume        = {32},\n  number        = {10},\n  pages         = {318--326},\n  date-added    = {2014-09-22 19:20:23 +0000},\n  date-modified = {2014-09-22 19:20:23 +0000},\n  doi           = {http://doi.acm.org/10.1145/263700.263754},\n  file          = {IngallsKaehlerMaloneyWallace_1997_BackToTheFutureTheStoryOfSqueakAPracticalSmalltalkWrittenInItself.pdf:IngallsKaehlerMaloneyWallace_1997_BackToTheFutureTheStoryOfSqueakAPracticalSmalltalkWrittenInItself.pdf:PDF},\n  keywords      = {VirtualMachines, ProgrammingEnvironment, ProgrammingLanguage, Smalltalk},\n  owner         = {Jens},\n  publisher     = {ACM Press New York, NY, USA},\n  rating        = {5},\n  read          = {Yes},\n  timestamp     = {2017.08.09},\n}`);\n  }\n}"]}