{"version":3,"names":["ScriptManager","functionFromString","funcOrString","eval","toString","isLively4Script","object","tagName","toLocaleLowerCase","type","persistToDOM","funcString","name","DOMScript","appendChild","removeFromDOM","children","querySelectorAll","length","Error","forEach","ea","remove","prepareFunction","func","_","isString","executable","bindFunctionToObject","options","bind","isScript","initializeScriptsMap","__scripts__","scriptExists","addFunctionToScriptsMap","persistScript","hasOwnProperty","persist","findLively4Script","parent","shadow","shadowRoot","child","scriptName","dataset","initializeScript","textContent","e","lively","notify","openWorkspace","console","error","load","loadScriptsFromDOM","document","attachScriptsFromShadowDOM","root","updateScript","removeScript","addScript","checkExists","callScript","optionalArgs","splice","call","arguments","apply"],"sources":["script-manager.js"],"sourcesContent":["import _ from 'src/external/lodash/lodash.js'\n\nexport function functionFromString(funcOrString) {\n  if (typeof funcOrString === 'function') {\n    return funcOrString;\n  }\n  // this makes sure we always create a function\n  return eval('(' + funcOrString.toString() + ')');\n}\n\nfunction isLively4Script(object) {\n  return object.tagName.toLocaleLowerCase() == \"script\" &&\n    object.type == 'lively4script';\n}\n\nfunction persistToDOM(object, funcString, name) {\n  var DOMScript = <script type='lively4script' data-name={name}>{funcString}</script>\n  object.appendChild(DOMScript);\n}\n\nfunction removeFromDOM(object, name) {\n  var children = object.querySelectorAll('script[type=\"lively4script\"][data-name=\"' + name + '\"]');\n\n  if (children.length > 1) {\n    throw new Error('multiple children detected ' + children);\n  }\n  children.forEach(ea => ea.remove());\n}\n\nfunction prepareFunction(funcOrString, name) {\n  var func = functionFromString(funcOrString);\n  if (typeof func !== 'function') {\n    throw 'no valid function provided!';\n  }\n  name = name || func.name;\n  if (!_.isString(name)) {\n    throw new Error(\"name should be a string, but it is \", name) \n  }\n  if (!name) {\n    throw 'cannot update script without name!';\n  }\n\n  return {\n    executable: func,\n    name: name\n  };\n}\n\nfunction bindFunctionToObject(object, func, options) {\n  object[func.name] = func.executable.bind(object);\n  object[func.name].isScript = true;\n}\n\nfunction initializeScriptsMap(object) {\n  if (typeof object.__scripts__ === 'undefined') {\n    object.__scripts__ = {};\n  }\n}\n\nfunction scriptExists(object, name) {\n  return typeof object.__scripts__ !== 'undefined' &&\n    typeof object.__scripts__[name] !== 'undefined';\n}\n\nfunction addFunctionToScriptsMap(object, name, funcOrString) {\n  object.__scripts__[name] = funcOrString.toString();\n}\n\nfunction persistScript(object, name, funcOrString, options) {\n  if (!options.hasOwnProperty(\"persist\") || options.persist == true) {\n    \n    persistToDOM(object, funcOrString.toString(), name);\n  }\n}\n\nexport default class ScriptManager {\n\n  static findLively4Script(parent, shadow) {\n    // if shadow is set, look for the scripts in the shadow root\n    var children = shadow ? parent.shadowRoot.children : parent.children;\n\n    if (!children) return;\n    for (let child of children) {\n      if (isLively4Script(child)) {\n        var scriptName = child.dataset.name;\n        \n        try {\n          this.initializeScript(parent, child.textContent, false, {\n            name: scriptName,\n            persist: false\n          });\n\n        } catch (e) {\n          lively.notify('Error adding function: ' + scriptName + ' to object: ' + parent,\n            \"\" + e, 20, () => lively.openWorkspace(\"\" + e + \"Source: \" + child.textContent));\n          console.error('Error while adding function ' + scriptName + ' to object:');\n          console.error(parent);\n          console.error(e);\n        }\n      } else {\n        this.findLively4Script(child, false);\n      }\n    }\n  }\n\n\n  static load() {\n    this.loadScriptsFromDOM();\n  }\n\n  static loadScriptsFromDOM() {\n    this.findLively4Script(document);\n  }\n\n  static attachScriptsFromShadowDOM(root) {\n    this.findLively4Script(root, true);\n  }\n\n  static updateScript(object, funcOrString, options = {}) {\n    var func = prepareFunction(funcOrString, options.name);\n    \n    this.removeScript(object, func.name);\n    this.addScript(object, func.executable, options);\n  }\n\n  static initializeScript(object, funcOrString, checkExists, options = {}) {\n    var func = prepareFunction(funcOrString, options.name);\n    if (checkExists && scriptExists(object, func.name)) {\n      throw 'script name \"' + func.name + '\" is already reserved!';\n    }\n    initializeScriptsMap(object);\n    bindFunctionToObject(object, func, options);\n    addFunctionToScriptsMap(object, func.name, funcOrString);    \n    return func\n  }\n  \n  static addScript(object, funcOrString, options = {}) {\n    var func = this.initializeScript(object, funcOrString, true, options) \n\n    persistScript(object, func.name, funcOrString, options);\n  }\n\n  static removeScript(object, name) {\n    if (!scriptExists(object, name)) {\n      throw 'script name \"' + name + '\" does not exist!';\n    }\n    delete object.__scripts__[name];\n    delete object[name];\n    removeFromDOM(object, name);\n  }\n\n  static callScript(object, name) {\n    var optionalArgs = [].splice.call(arguments, 2);\n    if (!scriptExists(object, name)) {\n      throw 'unknown script \"' + name + '\"!';\n    }\n\n    return object[name].apply(object, optionalArgs);\n  }\n}\n\nScriptManager.load()\n"],"mappings":"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"}