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); } }