| @@ -0,0 +1,65 @@ | |||
| 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); | |||
| } | |||
| } | |||