| import Utils from "/app/js/common/Utils.js"; | |||||
| import {EventCaller} from "/app/js/common/EventCaller.js"; | |||||
| export default class EditableText extends EventCaller{ | |||||
| constructor(srcel, clsname){ | |||||
| super(); | |||||
| this.__spanEl = null; | |||||
| this.__inputEl = null; | |||||
| var els = srcel.querySelectorAll("." + clsname); | |||||
| for (let i=0; i < els.length; i++){ | |||||
| if (els[i].nodeName === "SPAN") | |||||
| this.__spanEl = els[i]; | |||||
| else if (els[i].nodeName === "INPUT") | |||||
| this.__inputEl = els[i]; | |||||
| } | |||||
| if (this.__spanEl === null || this.__inputEl === null) | |||||
| throw new Error("Missing required SPAN and INPUT elements."); | |||||
| var self = this; | |||||
| this.__inputEl.addEventListener("blur", function(){ | |||||
| if (!this.classList.contains("hidden")){ | |||||
| self.__spanEl.innerHTML = this.value; | |||||
| this.classList.add("hidden"); | |||||
| self.__spanEl.classList.remove("hidden"); | |||||
| self.emit("value_change", this.value); | |||||
| } | |||||
| }); | |||||
| this.__spanEl.addEventListener("click", function(){ | |||||
| if (!this.classList.contains("hidden")){ | |||||
| self.__inputEl.value = this.innerHTML; | |||||
| this.classList.add("hidden"); | |||||
| self.__inputEl.classList.remove("hidden"); | |||||
| } | |||||
| }); | |||||
| if (this.__spanEl.classList.contains("hidden") && this.__inputEl.classList.contains("hidden")){ | |||||
| this.__spanEl.classList.remove("hidden"); | |||||
| } else if (!this.__spanEl.classList.contains("hidden") && !this.__inputEl.classList.contains("hidden")){ | |||||
| this.__inputEl.classList.add("hidden"); | |||||
| } | |||||
| } | |||||
| get value(){ | |||||
| if (this.__spanEl.classList.contains("hidden")){ | |||||
| return this.__inputEl.value; | |||||
| } else { | |||||
| return this.__spanEl.innerHTML; | |||||
| } | |||||
| } | |||||
| set value(v){ | |||||
| this.__inputEl.value = v; | |||||
| this.__spanEl.innerHTML = v; | |||||
| this.emit("value_change", v); | |||||
| } | |||||
| } | |||||