changeMode.js 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. const { toJSON } = require("./toJSON");
  2. let bToSource = false;
  3. let bToJSON = false;
  4. /**
  5. *
  6. * @param {string} type
  7. * @param {HTMLDivElement} edt
  8. */
  9. export function setDocMode(type, edt) {
  10. if (type === "HTML") {
  11. // if (bToSource === true) return;
  12. bToJSON = false;
  13. bToSource = !bToSource;
  14. }
  15. if (type === "JSON") {
  16. if (bToSource === true) return;
  17. bToSource = false;
  18. bToJSON = !bToJSON;
  19. }
  20. let oContent;
  21. if (bToSource) {
  22. oContent = document.createTextNode(edt.innerHTML);
  23. edt.innerHTML = "";
  24. edt.contentEditable = false;
  25. let oPre = document.createElement("pre");
  26. oPre.className = "sourceView";
  27. oPre.contentEditable = true;
  28. oPre.style = "overflow: scroll; white-space: normal;";
  29. oPre.appendChild(oContent);
  30. edt.appendChild(oPre);
  31. // 似乎chrome不支持将默认分段改为p
  32. document.execCommand("defaultParagraphSeparator", false, "div");
  33. } else if (bToJSON) {
  34. const je = document.createElement("div");
  35. je.style =
  36. "position: absolute; top: 0; left: 0; background: beige; width: 100%; padding: 5px; z-index: 1000000";
  37. oContent = document.createTextNode(toJSON(edt));
  38. let oPre = document.createElement("pre");
  39. // oPre.className = "sourceView";
  40. edt.contentEditable = false;
  41. oPre.style = "overflow: scroll;";
  42. oPre.appendChild(oContent);
  43. oPre.innerHTML = "双击关闭\n\n\n" + oPre.innerHTML;
  44. je.appendChild(oPre);
  45. document.body.appendChild(je);
  46. je.addEventListener("dblclick", () => {
  47. document.body.removeChild(je);
  48. bToJSON = false;
  49. edt.contentEditable = true;
  50. });
  51. } else {
  52. oContent = document.createRange();
  53. oContent.selectNodeContents(edt.firstChild);
  54. edt.innerHTML = oContent.toString();
  55. edt.contentEditable = true;
  56. }
  57. edt.focus();
  58. }