{"version":3,"sources":["https://lively-kernel.org/lively4S2/lively4-markus/src/babylonian-programming-editor/pre-post-script-editor.js"],"names":["Morph","debounce","maybeUnpackString","HEADER_TEMPLATE","order","type","keys","toLowerCase","length","join","PRE_HEADER_TEMPLATE","POST_HEADER_TEMPLATE","PrePostScriptEditor","initialize","windowTitle","_preEditor","get","_postEditor","addEventListener","e","_addEditorListeners","target","_preHeader","_postHeader","_type","name","callback","editor","setOption","on","value","_callback","prescript","postscript","setup","_keys","textContent","_name"],"mappings":"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","file":"pre-post-script-editor.js","sourcesContent":["import Morph from 'src/components/widgets/lively-morph.js';\nimport { debounce } from \"utils\";\nimport { maybeUnpackString } from \"./utils/utils.js\"\n\nconst HEADER_TEMPLATE = (order, type, keys) => `${order} ${type.toLowerCase()}${keys.length ? \" (\"+keys.join(\", \")+\")\" : \"\"}:`;\nconst PRE_HEADER_TEMPLATE = (type, keys) => HEADER_TEMPLATE(\"Before\", type, keys);\nconst POST_HEADER_TEMPLATE = (type, keys) => HEADER_TEMPLATE(\"After\", type, keys);\n\nexport default class PrePostScriptEditor extends Morph {\n  \n  initialize() {\n    this.windowTitle = \"Edit Pre/Postscript\";\n    \n    this._preEditor = this.get(\"#prescript\");\n    this._postEditor = this.get(\"#postscript\");\n    \n    this._preEditor.addEventListener(\"editor-loaded\", (e) => this._addEditorListeners(e.target));\n    this._postEditor.addEventListener(\"editor-loaded\", (e) => this._addEditorListeners(e.target));\n    \n    this._preHeader = this.get(\"#prescript-header\");\n    this._postHeader = this.get(\"#postscript-header\");\n    \n    this._type = \"Example\";\n    this.keys = [];\n    this.name = null;\n    this.callback = null;\n  }\n  \n  _addEditorListeners(editor) {\n    editor.editor.setOption(\"lint\", false);\n    editor.editor.on(\"change\", ((value) => {\n      if(this._callback) {\n        this._callback({\n          prescript: this._preEditor.value,\n          postscript: this._postEditor.value,\n        });\n      }\n    })::debounce(1000));\n  }\n  \n  setup(name, keys, prescript, postscript, callback, type = \"Example\") {\n    this._type = type;\n    this.name = name;\n    this.keys = keys;\n    this.callback = callback;\n    this._preEditor.value = prescript;\n    this._postEditor.value = postscript;\n  }\n  \n  set callback(callback) {\n    this._callback = callback;\n  }\n  \n  set keys(keys) {\n    this._keys = keys;\n    this._preHeader.textContent = PRE_HEADER_TEMPLATE(this._type, this._keys);\n    this._postHeader.textContent = POST_HEADER_TEMPLATE(this._type, this._keys);\n  }\n  \n  set name(name) {\n    name = maybeUnpackString(name);\n    \n    if(name) {\n      this._name = name;\n      this.windowTitle = `Edit Pre/Postscript for \"${this._name}\"`;\n    } else {\n      this._name = null;\n      this.windowTitle = \"Edit Pre/Postscript\";\n    }\n  }\n}"]}