A pixel art painter geared specifically at NES pixel art. Includes export for .chr binary file as well as palette and namespace data.
Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

66 lines
1.8KB

  1. import Utils from "/app/js/common/Utils.js";
  2. import {EventCaller} from "/app/js/common/EventCaller.js";
  3. export default class EditableText extends EventCaller{
  4. constructor(srcel, clsname){
  5. super();
  6. this.__spanEl = null;
  7. this.__inputEl = null;
  8. var els = srcel.querySelectorAll("." + clsname);
  9. for (let i=0; i < els.length; i++){
  10. if (els[i].nodeName === "SPAN")
  11. this.__spanEl = els[i];
  12. else if (els[i].nodeName === "INPUT")
  13. this.__inputEl = els[i];
  14. }
  15. if (this.__spanEl === null || this.__inputEl === null)
  16. throw new Error("Missing required SPAN and INPUT elements.");
  17. var self = this;
  18. this.__inputEl.addEventListener("blur", function(){
  19. if (!this.classList.contains("hidden")){
  20. self.__spanEl.innerHTML = this.value;
  21. this.classList.add("hidden");
  22. self.__spanEl.classList.remove("hidden");
  23. self.emit("value_change", this.value);
  24. }
  25. });
  26. this.__spanEl.addEventListener("click", function(){
  27. if (!this.classList.contains("hidden")){
  28. self.__inputEl.value = this.innerHTML;
  29. this.classList.add("hidden");
  30. self.__inputEl.classList.remove("hidden");
  31. }
  32. });
  33. if (this.__spanEl.classList.contains("hidden") && this.__inputEl.classList.contains("hidden")){
  34. this.__spanEl.classList.remove("hidden");
  35. } else if (!this.__spanEl.classList.contains("hidden") && !this.__inputEl.classList.contains("hidden")){
  36. this.__inputEl.classList.add("hidden");
  37. }
  38. }
  39. get value(){
  40. if (this.__spanEl.classList.contains("hidden")){
  41. return this.__inputEl.value;
  42. } else {
  43. return this.__spanEl.innerHTML;
  44. }
  45. }
  46. set value(v){
  47. this.__inputEl.value = v;
  48. this.__spanEl.innerHTML = v;
  49. this.emit("value_change", v);
  50. }
  51. }