{"version":3,"sources":["https://lively-kernel.org/lively4/lively4-leo/src/components/widgets/academic-subquery.js"],"names":["Morph","ohm","Author","Paper","MicrosoftAcademicEntities","files","g","grammar","s","createSemantics","addOperation","Exp","e","interpret","AcademicQuery_simple","attribute","comparator","value","AcademicQuery_complex","conjunction","_1","left","_2","right","_3","sourceString","AcademicQuery_composite","query","CompositeQuery_simple","mainAttribute","_","secondaryAttribute","main","secondary","CompositeQuery_complex","Comparator","join","PartialComparator","Attribute","a","b","c","d","Value","Value_string","string","Value_numberRange","leftBracket","nLeft","nRight","rightBracket","Value_dateRange","dLeft","dRight","Number","n","Date","year","month","day","_4","letter","AcademicSubquery","constructor","initialize","updateView","style","draggable","getPreparedSchema","schemaFiltered","schema","generateSchema","createShortDescriptions","attr","name","shortDesc","description","filter","operations","map","mapOperationToSymbol","op","onDragStart","event","opacity","color","dataTransfer","effectAllowed","setData","queryElement","getQuery","onDragEnd","onDragOver","classList","add","onDrop","preventDefault","stopPropagation","getData","remove","m","match","lively","notify","setQuery","onDragEnter","onDragLeave","ui","pane","get","innerHTML","userSelect","isComplex","addEventListener","appendChild","update","parentQuery","q","textContent","ast","queryToView","viewToQuery","leftSubquery","rightSubquery","editing","innerSpan","comp","val","attrElement","querySelector","options","selectedIndex","compElement","querySelectorAll","currentAttribute","forEach","type","toggleEditing","currentQuery","message","onChangeAttribute","valElement","selectedAttribute","option","selectedComparator","optionsLength","length","i","split","operation","flat","item","pos","self","indexOf","selected","Option","buildEditable","inner","onchange","edit","cursor","buildConjunctionQuery","comma","leftQuery","substring","rightQuery","onMouseOver","onMouseOut","buildSimpleQuery","id","raw","loadJSON","entity","entities","getEntityType","Ty","nameAttribute","replace","maybeUndefinedValue","evt","setAttribute","livelyExample"],"mappings":"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","file":"academic-subquery.js","sourcesContent":["import Morph from 'src/components/widgets/lively-morph.js';\nimport ohm from \"https://unpkg.com/ohm-js@15.2.1/dist/ohm.js\";\nimport {Author, Paper, MicrosoftAcademicEntities} from \"src/client/literature.js\";\nimport files from \"src/client/files.js\"\n\nvar g = ohm.grammar(\n  `Academic { \n    Exp =\n      AcademicQuery\n\n    AcademicQuery = Attribute Comparator Value -- simple\n      | (\"And\" | \"Or\") \"(\" AcademicQuery \",\" AcademicQuery \")\" -- complex\n      | \"Composite(\" CompositeQuery \")\" -- composite\n    CompositeQuery = Attribute \".\" Attribute Comparator Value -- simple\n      | (\"And\" | \"Or\") \"(\" CompositeQuery \",\" CompositeQuery \")\" -- complex\n\n    Comparator =\n      PartialComparator \"=\"?\n    PartialComparator =\n      \"=\" | \"<\" | \">\"\n\n    Attribute (an attribute) =\n      letter letter? letter? letter?\n\n    Value (a value) =\n      \"\\'\" alnum* \"\\'\" -- string\n      | Number\n      | Date\n      | ( \"[\" | \"(\" ) Number \",\" Number ( \"]\" | \")\" ) -- numberRange\n      | ( \"[\" | \"(\" ) Date \",\" Date ( \"]\" | \")\" ) -- dateRange\n\n    Number =\n      digit+\n      Date =\n      \"\\'\" Number \"-\" Number \"-\" Number \"\\'\"\n  }`\n);\n\nvar s = g.createSemantics();\n\ns.addOperation(\n  'interpret', {\n    Exp: function(e) {\n      return e.interpret();\n    },\n\n    AcademicQuery_simple: function(attribute, comparator, value) {\n      return {\n        \"attribute\" : attribute.interpret(),\n        \"comparator\" : comparator.interpret(),\n        \"value\" : value.interpret(),\n        \"type\" : \"simple\"\n      }\n    },\n    AcademicQuery_complex: function(conjunction, _1, left, _2, right, _3) {\n      return {\n        \"conjunction\" : conjunction.sourceString,\n        \"left\" : left.interpret(), \n        \"right\" : right.interpret(),\n        \"type\" : \"conjunction\"\n       }\n    },\n    AcademicQuery_composite: function(_1, query, _2) {\n      return query.interpret();\n    },\n\n    CompositeQuery_simple: function(mainAttribute, _, secondaryAttribute, comparator, value) {\n      // would it make sense to split main and secondary attribute?\n      var main = mainAttribute.interpret();\n      var secondary = secondaryAttribute.interpret();\n      return {\n        \"attribute\" : main + \".\" + secondary,\n        \"comparator\" : comparator.interpret(),\n        \"value\" : value.interpret(),\n        \"type\" : \"composite\"\n      }\n    },\n    CompositeQuery_complex: function(conjunction, _1, left, _2, right, _3) {\n      return {\n        \"conjunction\" : conjunction.sourceString,\n        \"left\" : left.interpret(), \n        \"right\" : right.interpret(),\n        \"type\" : \"conjunction\"\n      }\n    },\n\n    Comparator: function(main, secondary) {\n      return [main.interpret(), secondary.sourceString].join('');\n    },\n    PartialComparator: function(comparator) {\n      return comparator.sourceString;\n    },\n\n    Attribute: function(a, b, c, d) {\n      return [a.interpret(), b.interpret(), c.interpret(), d.interpret()].join('');\n    },\n\n    Value: function(value) {\n      return value.interpret();\n    },\n    Value_string: function(_1, string, _2) {\n      return string.sourceString;\n    },\n    Value_numberRange: function(leftBracket, nLeft, _, nRight, rightBracket) {\n      return \"TODO\";//arguments.map(a => {a.sourceString}).join('');\n    },\n    Value_dateRange: function(leftBracket, dLeft, _, dRight, rightBracket) {\n      return \"TODO\";//arguments.map(a => {a.sourceString}).join('');\n    },\n\n    Number: function(n) {\n      //return parseFloat(n.sourceString);\n      return n.sourceString;\n    },\n    Date: function(_1, year, _2, month, _3, day, _4) {\n      return new Date(year.interpret(),\n                      month.interpret(),\n                      day.interpret())\n    },\n\n    letter: function(a) {\n      return a.sourceString;\n    }\n  }\n)\n\nexport default class AcademicSubquery extends Morph {\n  constructor() {\n    super();\n  }\n  \n  async initialize() {\n    this.updateView();\n    \n    this.style.draggable = 'true';\n  }\n  \n  async getPreparedSchema() {\n    if (this.schemaFiltered) { return this.schemaFiltered; }\n    \n    // load the schema of a paper\n    // Documentation: https://docs.microsoft.com/en-us/academic-services/project-academic-knowledge/reference-paper-entity-attributes\n    this.schema = await MicrosoftAcademicEntities.generateSchema(\"paper\");\n    // to use the descriptions in the UI, we need to shorten some\n    var createShortDescriptions = attr => {\n      switch(attr.name) {\n        case \"AA.AdId\": \n          attr.shortDesc = \"Affiliation ID\";\n          break;\n        case \"AA.AfN\": \n          attr.shortDesc = \"Affiliation Name (normalized)\";\n          break;\n        case \"AA.AuN\": \n          attr.shortDesc = \"Author Name (normalized)\";\n          break;\n        case \"AA.DAuN\": \n          attr.shortDesc = \"Author Name (original)\";\n          break;\n        case \"AA.DAfN\": \n          attr.shortDesc = \"Affiliation Name (original)\";\n          break;\n        case \"AW\": \n          attr.shortDesc = \"Unique words in abstract\";\n          break;\n        case \"BT\":\n          attr.shortDesc = \"BibTex document type\";\n          break;\n        case \"CitCon\":\n          attr.shortDesc = \"Citation contexts\";\n          break;\n        case \"D\":\n          attr.shortDesc = \"Date\";\n          break;\n        case \"DN\": \n          attr.shortDesc = \"Paper Title\";\n          break;\n        case \"DOI\":\n          attr.shortDesc = \"Digital Object Identifier\";\n          break;\n        case \"E\":\n          attr.shortDesc = \"Extended metadata\";\n          break;\n        case \"FamId\":\n          attr.shortDesc = \"Family Group ID\";\n          break;\n        case \"F.DFN\": \n          attr.shortDesc = \"Field of Study Name (original)\";\n          break;\n        case \"F.FN\": \n          attr.shortDesc = \"Field of Study Name (normalized)\";\n          break;\n        case \"LP\":\n          attr.shortDesc = \"Last Page\";\n          break;\n        case \"Pt\":\n          attr.shortDesc = \"Publication type\";\n          break;\n        case \"RId\":\n          attr.shortDesc = \"Referenced Paper IDs\";\n          break;\n        case \"Ti\": \n          attr.shortDesc = \"Title\";\n          break;\n        case \"VFN\":\n          attr.shortDesc = \"Journal or Conf. name (full)\";\n          break;\n        case \"VSN\":\n          attr.shortDesc = \"Journal or Conf. name (short)\";\n          break;\n        case \"W\":\n          attr.shortDesc = \"Unique words in title\";\n          break;\n        default:\n          attr.shortDesc = attr.description;\n      }\n      return attr;\n    }\n    this.schemaFiltered = this.schema\n                            .filter(attr => attr.operations != \"None\")\n                            .map(attr => createShortDescriptions(attr));\n    // map words for operations to symbols for the query \n    this.mapOperationToSymbol = op => {switch(op) {\n        case \"Equals\":\n          return [\"==\", \"=\"];\n        case \"StartsWith\":\n          return [\"=\"];\n        case \"IsBetween\":\n          return [\">\", \">=\", \"<\", \"<=\", \"=\"];\n        default:\n          return op;\n      }};\n    \n    return this.schemaFiltered;\n  }\n  \n  onDragStart(event) {\n    this.style.opacity = '0.4';\n    this.style.color = \"black\";\n    \n    event.dataTransfer.effectAllowed = 'move';\n    event.dataTransfer.setData('text', this.queryElement.getQuery()); // set Query as info\n  }\n  \n  onDragEnd(event) {\n    this.style.opacity = '1.0';\n  }\n  \n  onDragOver(event) {\n    this.classList.add('over');\n  }\n  \n  onDrop(event) {\n    event.preventDefault();\n    event.stopPropagation();\n    var query = event.dataTransfer.getData(\"text\");\n    this.classList.remove('over');\n    try {\n      var m = g.match(query)\n      s(m).interpret();\n    } catch(e) {\n      lively.notify(\"Please use a correct query!\")\n      return\n    }\n    this.queryElement.setQuery(query); // read query in\n  }\n  \n  onDragEnter(event) {\n    event.preventDefault();\n    this.classList.add('over');\n  }\n  \n  onDragLeave(event) {\n    event.preventDefault();\n    this.classList.remove('over');\n  }\n  \n  \n  \n  async updateView() {\n    if(!this.ui) { return }\n    var pane = this.get(\"#pane\")\n    pane.innerHTML = \"\"\n    \n    this.ui.style.draggable = 'true'\n    this.ui.style.userSelect = 'none'\n    if (!this.isComplex) {\n      this.ui.addEventListener('dragstart', this.onDragStart)\n      this.ui.addEventListener('dragend', this.onDragEnd)\n      this.ui.addEventListener('dragover', this.onDragOver)\n      this.ui.addEventListener('dragenter', this.onDragEnter)\n      this.ui.addEventListener('dragleave', this.onDragLeave)\n      this.ui.addEventListener('drop', this.onDrop)\n    }\n    this.ui.queryElement = this; // for drag and drop\n\n    pane.appendChild(this.ui)\n  }\n  \n  async update(){\n    if (this.parentQuery) await this.parentQuery.update();\n  }\n  \n  async setQuery(q) {\n    this.textContent = q;\n    \n    var match = g.match(q);\n    this.ast = s(match).interpret();\n    this.ui = await this.queryToView(this.ast);\n    \n    this.updateView();\n    if (this.parentQuery) await this.parentQuery.update();\n  }\n  \n  getQuery() {\n    return this.textContent;\n  }\n\n  async viewToQuery() {\n    var query = this.textContent;\n    \n    if (this.isComplex) { // conjunction\n      if (await this.leftSubquery && await this.rightSubquery) {\n        var left = await this.leftSubquery.viewToQuery();\n        var right = await this.rightSubquery.viewToQuery();\n        var conjunction = this.get('#conjunction').textContent;\n        query = conjunction + \"(\" + left + \", \" + right + \")\";\n      }\n    } else { // simple\n      // Do not render the view to the query in read-mode,\n      // because nothing should have changed there anyways.\n      // However, we might have substituted IDs through names,\n      // which could backfire if we call viewToQuery().\n      if (!this.editing) { return query; }\n      \n      var innerSpan = this.get('#inner');\n      if (!innerSpan) { return query }\n      var attribute, comp, val;\n      if (this.editing) { // edit mode\n        var attrElement = innerSpan.querySelector('#attribute');\n        attribute = attrElement.options[attrElement.selectedIndex].value; // or .text;\n        var compElement = innerSpan.querySelector('#comparator');\n        comp = compElement.options[compElement.selectedIndex].value; // or .text;\n        val = innerSpan.querySelector('#value').value;\n      } else { // read mode\n        [attribute, comp, val] = innerSpan\n          .querySelectorAll(\"span[name='queryPart']\")\n          .map(e => e.textContent);\n      }\n      \n      var currentAttribute;\n      var schema = await this.getPreparedSchema();\n      schema.forEach(attr => {\n        if (attr.shortDesc == attribute || attr.name == attribute) {\n          currentAttribute = attr;\n      }})\n      \n      if (currentAttribute.type == \"String\" || currentAttribute.type == \"Date\") {\n        val = \"'\" + val + \"'\"\n      }\n      \n      if (currentAttribute.name.match(/\\./))\n        query = \"Composite(\" + currentAttribute.name + comp + val + \")\";\n      else\n        query = currentAttribute.name + comp + val; \n    }\n    return query\n  }\n  \n  async toggleEditing() {\n    var currentQuery = await this.viewToQuery()\n    this.editing = !this.editing;\n    try {\n      await this.setQuery(currentQuery); // update query from changes\n    } catch(e) {\n      this.editing = !this.editing;\n      lively.notify(\"Please enter a value!\", e.message)\n    }\n    this.updateView();\n  }\n  \n  // if we change the attribute, we might need to adapt the options for the\n  // comparators and the type of the value input\n  async onChangeAttribute() {\n    var innerSpan = this.get('#inner');\n    var compElement = innerSpan.querySelector('#comparator');\n    var attrElement = innerSpan.querySelector('#attribute');\n    var valElement = innerSpan.querySelector('#value');\n    \n    var selectedAttribute = attrElement.options[attrElement.selectedIndex].value;\n    var currentAttribute;\n    var schema = await this.getPreparedSchema();\n    schema.forEach(option => {\n      if (option.name == selectedAttribute) { currentAttribute = option; }\n    })\n    \n    // comparator\n    var selectedComparator = compElement.options[compElement.selectedIndex].value;\n    // clear options\n    var optionsLength = compElement.options.length;\n    for (var i = optionsLength; i >= 0; i--) {\n      compElement.remove(i);\n    }\n    currentAttribute.operations.split(\", \")\n      .map(operation => this.mapOperationToSymbol(operation)) // map words to arrays of symbols\n      .flat()\n      .filter((item, pos, self) => self.indexOf(item) == pos) // deduplicate\n      .forEach(option => {\n        var selected = (option == selectedComparator);\n        compElement.options.add(new Option(option, option, selected, selected))\n      });\n    \n    // value\n    if (currentAttribute.type.match(/Int/)) {\n        valElement.type = \"number\"\n    } else if (currentAttribute.type.match(/Date/)) {\n        valElement.type = \"date\"\n    } else {\n        valElement.type = \"text\"\n    }\n  }\n  \n  // builds the UI in edit mode\n  async buildEditable(ast) {\n    var inner = <span id=\"inner\"></span>;\n    var query = <span name=\"sub\" draggable='false'></span>;\n    \n    // attribute\n    var attrElement = <select name='attribute' id='attribute'></select>;\n    var currentAttribute;\n    var schema = await this.getPreparedSchema();\n    schema.forEach(option => {\n      var selected = (option.name == ast.attribute);\n      if (selected) { currentAttribute = option; }\n      attrElement.options.add(new Option(option.shortDesc, option.name, selected, selected))\n    })\n    attrElement.onchange = async () => await this.onChangeAttribute();\n    query.appendChild(attrElement);\n    \n    // comparator\n    var compElement = <select name='comparator' id='comparator'></select>;\n    currentAttribute.operations.split(\", \")\n      .map(operation => this.mapOperationToSymbol(operation)) // map words to arrays of symbols\n      .flat()\n      .filter((item, pos, self) => self.indexOf(item) == pos) // deduplicate\n      .forEach(option => {\n        var selected = (option == ast.comparator);\n        compElement.options.add(new Option(option, option, selected, selected))\n      });\n    query.appendChild(compElement);\n    \n    // value\n    var valElement = <input id=\"value\" name=\"value\" value={ast.value}></input>;\n    // fit input type to attribute type\n    if (currentAttribute.type.match(/Int/)) {\n        valElement.type = \"number\"\n    } else if (currentAttribute.type.match(/Date/)) {\n        valElement.type = \"date\"\n    } else {\n        valElement.type = \"text\"\n    } \n    \n    query.appendChild(valElement);\n    \n    inner.appendChild(query);\n    \n    var edit = <span id=\"edit\" title=\"toggle edit mode\" click={() => this.toggleEditing()}><i class=\"fa fa-hand-paper-o\" aria-hidden=\"true\"></i></span>;\n    edit.style.cursor = \"pointer\";\n    inner.appendChild(edit);\n    \n    return inner;\n  }\n  \n  async buildConjunctionQuery(ast) {\n    var query = this.textContent;\n    var leftBracket = query.indexOf(\"(\")\n    var comma = query.indexOf(\", \")\n    var leftQuery = query.substring(leftBracket+1, comma)\n    var rightQuery = query.substring(comma+1, query.length-1)\n    \n    var inner = <span id=\"inner\"></span>;\n    var conjunction = <span id=\"conjunction\" contenteditable=\"false\" style=\"font-size: 150%\">{ast.conjunction}</span>;\n    \n    var left = await (<academic-subquery style=\"font-size: smaller;\"></academic-subquery>);\n    await left.setQuery(leftQuery);\n    left.parentQuery = this;\n    this.leftSubquery = left; // for viewToQuery\n    \n    var right = await (<academic-subquery style=\"font-size: smaller;\"></academic-subquery>);\n    await right.setQuery(rightQuery);\n    right.parentQuery = this;\n    this.rightSubquery = right; // for viewToQuery\n    inner.appendChild(\n      <table>\n        <tr>\n          <th>{conjunction}</th>\n          <th>\n            <table>\n              <tr>{left}</tr>\n              <tr>{right}</tr>\n            </table>\n          </th>\n        </tr>\n      </table>\n    )\n    return inner;\n  }\n  \n  onMouseOver(event) {\n    this.style.color = \"orange\"\n  }\n  \n  onMouseOut(event) {\n    this.style.color = \"black\"\n  }\n  \n  async buildSimpleQuery(ast) {\n    // setup\n    var inner =\n      <span class=\"hover\" contenteditable=\"false\" id=\"inner\">\n        <span class=\"hovercontent\">\n          <button\n            class=\"button\"\n            click={() => {\n              this.setQuery(\n                \"And(\" + this.textContent + \", \" + this.textContent + \")\")\n            }}>AND</button>\n          <button\n            class=\"button\"\n            click={() => {\n              this.setQuery(\n                \"Or(\" + this.textContent + \", \" + this.textContent + \")\")\n            }}>OR</button>\n        </span>\n      </span>;\n    var queryElement = <span name=\"sub\" draggable='true'></span>;\n    \n    var currentAttribute;\n    var schema = await this.getPreparedSchema();\n    schema.forEach(option => {\n      if (option.name == ast.attribute) { currentAttribute = option; }\n    })\n    \n    // substitute IDs\n    var attribute = currentAttribute.shortDesc;\n    var value = ast.value;\n    var comparator = ast.comparator;\n    \n    if (currentAttribute.name.match(/[Ii]d/)) {\n      var id = ast.value;\n      var raw  = await files.loadJSON(`academic://raw:Id=${id}?attr=AuN,Ty,AA.AuN,Y,Ti,FN`); // vielleicht attr nicht beschränken\n      var entity = raw.entities[0];\n      // TODO: handle wrong IDs\n      if (entity) { // not a valid ID\n        var type = MicrosoftAcademicEntities.getEntityType(entity.Ty);\n        var nameAttribute = currentAttribute.name.replace(\"Id\", \"N\"); // AA.AuId --> AA.AuN\n        // only the part after the . if there is one\n        var maybeUndefinedValue = entity[nameAttribute.substring(\"AA.AuN\".indexOf(\".\") + 1)];\n        if (maybeUndefinedValue) { // might not give a result\n          value = maybeUndefinedValue;\n          schema.forEach(option => {\n            if (option.name == nameAttribute) { attribute = option.shortDesc; }\n          })\n        }\n      }\n    }\n    \n    // attribute\n    var attrElement = <span class=\"queryPart\" name=\"queryPart\">{attribute}</span>;\n    queryElement.appendChild(attrElement);\n    \n    // comparator\n    var compElement = <span class=\"queryPart\" name=\"queryPart\">{comparator}</span>;\n    queryElement.appendChild(compElement);\n    \n    // value\n    var valElement = <span class=\"queryPart\" name=\"queryPart\">{value}</span>;\n    queryElement.appendChild(valElement);\n    \n    queryElement.addEventListener('mouseover', (evt) => this.onMouseOver(evt));\n    queryElement.addEventListener('mouseout', (evt) => this.onMouseOut(evt));\n    queryElement.style.cursor = \"grab\"\n    \n    inner.appendChild(queryElement);\n    var edit = <span id=\"edit\" title=\"toggle edit mode\" click={() => this.toggleEditing()}><i class=\"fa fa-pencil\" aria-hidden=\"true\"></i></span>;\n    edit.style.cursor = \"pointer\";\n    inner.appendChild(edit);\n    return inner;\n  }\n\n  async queryToView() {\n    const ast = this.ast;\n    var inner = <span id=\"inner\"></span>;\n    if (ast.type == \"conjunction\") {\n      this.isComplex = true;\n      inner = await this.buildConjunctionQuery(ast);\n    } else { // \"composite\" or \"simple\"\n      this.isComplex = false;\n      if (this.editing) { // edit mode\n        inner = await this.buildEditable(ast);\n      } else { // read mode\n        inner = await this.buildSimpleQuery(ast);\n      }\n    }\n    inner.setAttribute(\"type\", ast.type);\n\n    var queryElement = <div class=\"dropTarget\"><b>{inner}</b></div>;\n    \n    return queryElement;\n  }\n  \n  async livelyExample() {\n    this.setQuery(\"Composite(AA.AuN=='susan t dumais')\");\n  }\n  \n  \n}"]}