{"version":3,"sources":["https://lively-kernel.org/lively4/lively4-markus/src/client/reactive/polymorphic-identifiers/polymorphic-identifiers.js"],"names":["uuid","loadJSON","saveJSON","makeRef","PIScheme","isPIScheme","createRef","options","strings","expressions","reference","configure","initialize","Object","assign","access","read","value","write","Scheme","args","local","first","evalFunction","id","self","key","json","stringValue","JSON","stringify","undefined","setItem","getItem","parse","ls","query","element","type","prop","getAttribute","style","innerHTML","v","replaceWith","setAttribute","forEach","e","selector","split","document","querySelector","queryAll"],"mappings":"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","file":"polymorphic-identifiers.js","sourcesContent":["\nimport { uuid } from 'utils';\n\nexport class PIScheme {\n  static get isPIScheme() { return true; }\n\n  static createRef(options, strings, expressions) {\n    const reference = new this();\n    reference.configure(options, strings, expressions);\n    reference.initialize();\n    return reference;\n  }\n  \n  configure(options = {}, strings, expressions) {\n    Object.assign(this, options);\n    this.strings = strings;\n    this.expressions = expressions;\n  }\n\n  // hook into a created reference\n  initialize() {}\n\n  get access() {\n    return this.read();\n  }\n  set access(value) {\n    return this.write(value);\n  }\n}\n\nexport function makeRef(Scheme, options) {\n  if (Scheme && Scheme.isPIScheme) {\n    return (strings, ...expressions) => Scheme.createRef(options, strings, expressions);\n  }\n\n  return (...args) => ({\n    access: Scheme(...args)\n  });\n}\n\n\n/*MD # Basic Schemes MD*/\n\nexport class local extends PIScheme {\n  initialize() {\n    this.local = this.strings.first;\n  }\n  read() {\n    return this.evalFunction(this.local);\n  }\n  write(value) {\n    const id = uuid();\n    self[id] = value;\n    try {\n      return this.evalFunction(this.local + ` = self['${id}']`);\n    } finally {\n      delete self[id];\n    }\n  }\n}\n\nfunction saveJSON(key, json) {\n  const stringValue = JSON.stringify(json, undefined, 2);\n  return this.setItem(key, stringValue);\n}\nfunction loadJSON(key) {\n  const stringValue = this.getItem(key);\n  if (!stringValue) {\n    return undefined;\n  }\n  return JSON.parse(stringValue);\n}\n\nclass ls extends PIScheme {\n  initialize() {\n    this.local = this.strings.first;\n  }\n  read() {\n    return this.evalFunction(this.local);\n  }\n  write(value) {\n    const id = uuid();\n    self[id] = value;\n    try {\n      return this.evalFunction(this.local + ` = self['${id}']`);\n    } finally {\n      delete self[id];\n    }\n  }\n}\nexport {ls as localStorage};\n\nexport class query extends PIScheme {\n  read() {\n    const { element, type, prop } = this.parse();\n\n    if (type === 'prop') {\n      return element[prop];\n    }\n\n    if (type === 'attr') {\n      return element.getAttribute(prop);\n    }\n\n    if (type === 'style') {\n      return element.style[prop];\n    }\n\n    if (type === 'html') {\n      return element.innerHTML;\n    }\n\n    return element;\n  }\n  write(v) {\n    const { element, type, prop } = this.parse();\n\n    if (!type) {\n      element.replaceWith(v);\n      return v;\n    }\n    if (type === 'prop') {\n      return element[prop] = v;\n    }\n    if (type === 'attr') {\n      element.setAttribute(prop, v);\n      return v;\n    }\n    if (type === 'style') {\n      return element.style[prop] = v;\n    }\n    if (type === 'html') {\n      return element.innerHTML = v;\n    }\n\n    element.forEach(e => e.innerHTML = v)\n  }\n\n  // helper\n  parse() {\n    const [selector, type, prop] = this.strings.first.split('/');\n    const element = this.query(selector);\n    return { selector, type, prop, element };\n  }\n  query(selector) {\n    return document.querySelector(selector);\n  }\n}\n\nexport class queryAll extends PIScheme {}\n"]}