{ "version": 3, "sources": ["../../src/public/Template.js", "../../src/public/MetaSelect.js", "../../src/public/ProfileMetadataModel.js", "../../src/public/ProfileMetadata.js"], "sourcesContent": ["// dtemplate generated - do not edit\nexport const Template= (function() {\t\n\tlet templates =\n\t\t{\"MetaSelect\":\"\\u003ctemplate\\u003e\\n\\t\\u003cstyle\\u003e:host{display:flex;flex-direction:column;justify-content:flex-start;align-items:stretch}label{font-size:0.8em;color:#666;margin-bottom:0.4em}\\n\\u003c/style\\u003e\\n\\t\\u003clabel for=\\\"field\\\" id=\\\"label\\\"\\u003e\\n\\t\\u003c/label\\u003e\\n\\t\\u003cselect id=\\\"field\\\"\\u003e\\n\\t\\u003c/select\\u003e\\n\\u003c/template\\u003e\\n\",\"ProfileMetadata\":\"\\u003ctemplate\\u003e\\n\\t\\u003cstyle\\u003e:host{display:flex;flex-direction:column;justify-content:flex-start;align-items:flex-start;gap:1em;margin:1em 0}\\n\\u003c/style\\u003e\\n\\t\\u003cidserver-metaselect data=\\\"profile-metadata-json\\\" target=\\\"profile-metadata-values\\\" label=\\\"Province\\\" key=\\\"province\\\" value=\\\"\\\"\\u003e \\u003c/idserver-metaselect\\u003e\\n\\t\\u003cidserver-metaselect label=\\\"Gender\\\" key=\\\"gender\\\" value=\\\"\\\" data=\\\"profile-metadata-json\\\" target=\\\"profile-metadata-values\\\"\\u003e \\u003c/idserver-metaselect\\u003e\\n\\t\\u003cidserver-metaselect value=\\\"\\\" data=\\\"profile-metadata-json\\\" target=\\\"profile-metadata-values\\\" label=\\\"If you're a student, please select\\\" key=\\\"student\\\"\\u003e \\u003c/idserver-metaselect\\u003e\\n\\t\\u003cidserver-metaselect label=\\\"If you're no longer studying, are you\\\" key=\\\"employed\\\" value=\\\"\\\" data=\\\"profile-metadata-json\\\" target=\\\"profile-metadata-values\\\"\\u003e \\u003c/idserver-metaselect\\u003e\\n\\u003c/template\\u003e\\n\"};\n\n\tlet mk = function(k, html) {\n\t\tlet el = document.createElement('div');\n\t\tel.innerHTML = html;\n\t\t//console.log(\"mk(\",k,\") html = \", html);\n\n\t\tlet c = el.firstElementChild;\n\t\twhile ((null!=c) && (Node.ELEMENT_NODE!=c.nodeType)) {\n\t\t\tc = c.nextSibling;\n\t\t}\n\t\tif (null==c) {\n\t\t\tconsole.error(\"FAILED TO FIND ANY ELEMENT CHILD OF \", k, \":\", el)\n\t\t\treturn mk('error', 'No child elements in template ' + k + '');\n\t\t}\n\t\tel = c;\n\t\tif ('function'==typeof el.querySelector) {\n\t\t\tlet et = el.querySelector('[data-set=\"this\"]');\n\t\t\tif (null!=et) {\n\t\t\t\tel = et;\n\t\t\t\tel.removeAttribute('data-set');\n\t\t\t}\n\t\t}\n\t\treturn el;\n\t}\n\n\treturn function(t, dest={}) {\n\t\t// Return a deep copy of the node, created on first use\n\t\tlet n = templates[t];\n\t\tif ('string'==typeof(n)) {\t\t\t\n\t\t\tn = mk(t, n);\n\t\t\ttemplates[t] = n;\n\t\t}\n\t\tif ('undefined'==typeof n) {\n\t\t\tconsole.error('Failed to find template ' + t);\n\t\t\treturn [false,false];\n\t\t}\n\t\tif (n.content) {\n\t\t\tn = n.content.cloneNode(true);\n\t\t} else {\n\t\t\tn = n.cloneNode(true);\n\t\t}\n\t\ttry {\n\t\t\tfor (let attr of ['id', 'data-set']) {\n\t\t\t\tlet nodes = Array.from(n.querySelectorAll('[' + attr + ']'));\n\t\t\t\tif ('function'==typeof n.hasAttribute && n.hasAttribute(attr)) {\n\t\t\t\t\tnodes.unshift(n);\n\t\t\t\t}\n\t\t\t\tfor (let el of nodes) {\n\t\t\t\t\tlet a = el.getAttribute(attr);\n\t\t\t\t\tif (a.substr(0,1)=='$') {\n\t\t\t\t\t\ta = a.substr(1);\n\t\t\t\t\t\tel = jQuery(el);\n\t\t\t\t\t\tel.setAttribute(attr, a);\n\t\t\t\t\t}\n\t\t\t\t\tdest[a] = el;\n\t\t\t\t}\n\t\t\t}\n\t\t} catch (err) {\n\t\t\tconsole.error(\"ERROR in DTemplate(\" + t + \"): \", err);\n\t\t\tdebugger;\n\t\t}\n\t\treturn [n,dest];\n\t}\n})();\n", "import { Template } from \"./Template.js\";\nimport { ProfileMetadata } from \"./ProfileMetadata\";\n/**\n * MetaSelect element contains a single dropdown selection\n * for metadata.\n * It requires keys:\n * @key : the key for the data\n * @label: the label for the data\n * @data: A document-level element that will contain the data\n * with a js encoded object where the key provides the relevant options for\n * the data.\n * @value: selected value to use\n * @target: the id of the text field where the computed JS should be stored\n */\nexport class MetaSelect extends HTMLElement {\n constructor() {\n super();\n [this.el, this.$] = Template(\"MetaSelect\");\n this.attachShadow({ mode: \"open\" });\n this.shadowRoot.appendChild(this.el);\n }\n selectionChange(evt) {\n console.log(\n `selection changed to ${this.$.field.options[this.$.field.selectedIndex].value}`,\n );\n this.updateTarget();\n }\n connectedCallback() {\n ProfileMetadata.getModel(this).then((model) => {\n this.model = model;\n this.$.label.innerText = this.getAttribute(`label`);\n const value = this.model.getValue(this.getAttribute(`key`));\n console.log(\n `MetaSelete.connectedCallback() - value of ${this.getAttribute(`key`)} is ${value}`,\n );\n console.log(``);\n this.$.field.innerHTML = ``;\n let optionCount = 0;\n let setFromTarget = false;\n for (const v of this.options()) {\n const o = document.createElement(`option`);\n o.innerText = v;\n o.setAttribute(`value`, v);\n this.$.field.appendChild(o);\n if (value == v) {\n this.$.field.selectedIndex = optionCount;\n setFromTarget = true;\n }\n optionCount++;\n }\n if (!setFromTarget) this.updateTarget();\n this.$.field.addEventListener(`change`, (evt) => {\n this.selectionChange(evt);\n });\n });\n }\n options() {\n if (this.js) {\n return this.js;\n }\n const jsSrc = document.getElementById(this.getAttribute(\"data\"));\n if (!jsSrc) {\n console.error(\n `No element #${this.getAttribute(\"data\")} found in document for idserver-metaselect ${this.getAttribute(\"key\")}`,\n );\n return [];\n }\n const js = JSON.parse(jsSrc.innerHTML);\n if (!js) {\n console.error(\n `Failed to parse JSON data for idserver-metaselect ${this.getAttribute(`key`)}`,\n );\n return [];\n }\n this.js = js[this.getAttribute(`key`)];\n return this.js;\n }\n updateTarget() {\n this.model.setValue(\n this.getAttribute(`key`),\n this.$.field.options[this.$.field.selectedIndex].value,\n );\n }\n}\n\ncustomElements.define(\"idserver-metaselect\", MetaSelect);\n", "/*\n ProfileMetadataModel is a 'model' for the data stored in the\n user profile. A component can register as a listener for an item of metadata.\n*/\nexport class ProfileMetadataModel {\n // srcElement is the element containing the js that defines the pre-set values\n // for the metadata\n constructor(srcInput) {\n this.listeners = {};\n this.srcInput = srcInput;\n const json = srcInput.value;\n if (`` == json) {\n this.js = {};\n } else {\n this.js = JSON.parse(json);\n }\n }\n addListener(key, listener) {\n var listeners = this.listeners[key];\n if (listeners) {\n listeners.push(listener);\n } else {\n this.listeners[key] = [listener];\n }\n }\n getValue(key) {\n return this.js[key];\n }\n setValue(key, value) {\n this.js[key] = value;\n this.srcInput.value = JSON.stringify(this.js);\n console.log(`ProfileMetadataModel.srcInput.value = `, this.srcInput.value);\n }\n}\n", "import { Template } from \"./Template.js\";\nimport { MetaSelect } from \"./MetaSelect.js\";\nimport { ProfileMetadataModel } from \"./ProfileMetadataModel.js\";\n\nexport class ProfileMetadata extends HTMLElement {\n constructor() {\n super();\n [this.el, this.$] = Template(`ProfileMetadata`);\n this.attachShadow({ mode: \"open\" });\n this.shadowRoot.appendChild(this.el);\n this.shadowRoot.addEventListener(`profile-metadata-get-model`, (evt) => {\n evt.stopPropagation(); // We stop propagation, since we return the appropriate value, without needing to go further\n evt.detail.resolve(this.model);\n });\n }\n static getModel(target) {\n var resolve, reject;\n const p = new Promise(\n (r) => (resolve = r),\n (r) => (reject = r),\n );\n target.dispatchEvent(\n new CustomEvent(`profile-metadata-get-model`, {\n bubbles: true,\n cancelable: true,\n composed: true,\n detail: {\n resolve: resolve,\n },\n }),\n );\n return p;\n }\n connectedCallback() {\n this.model = new ProfileMetadataModel(\n document.getElementById(this.getAttribute(`target`)),\n );\n }\n}\n\ncustomElements.define(\"idserver-metadata\", ProfileMetadata);\n"], "mappings": "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", "names": [] }