tinymce_plugins_noneditable.js 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. import {
  2. __commonJS
  3. } from "./chunk-2LSFTFF7.js";
  4. // node_modules/.pnpm/tinymce@5.10.7/node_modules/tinymce/plugins/noneditable/plugin.js
  5. var require_plugin = __commonJS({
  6. "node_modules/.pnpm/tinymce@5.10.7/node_modules/tinymce/plugins/noneditable/plugin.js"() {
  7. (function() {
  8. "use strict";
  9. var global$1 = tinymce.util.Tools.resolve("tinymce.PluginManager");
  10. var global = tinymce.util.Tools.resolve("tinymce.util.Tools");
  11. var getNonEditableClass = function(editor) {
  12. return editor.getParam("noneditable_noneditable_class", "mceNonEditable");
  13. };
  14. var getEditableClass = function(editor) {
  15. return editor.getParam("noneditable_editable_class", "mceEditable");
  16. };
  17. var getNonEditableRegExps = function(editor) {
  18. var nonEditableRegExps = editor.getParam("noneditable_regexp", []);
  19. if (nonEditableRegExps && nonEditableRegExps.constructor === RegExp) {
  20. return [nonEditableRegExps];
  21. } else {
  22. return nonEditableRegExps;
  23. }
  24. };
  25. var hasClass = function(checkClassName) {
  26. return function(node) {
  27. return (" " + node.attr("class") + " ").indexOf(checkClassName) !== -1;
  28. };
  29. };
  30. var replaceMatchWithSpan = function(editor, content, cls) {
  31. return function(match) {
  32. var args = arguments, index = args[args.length - 2];
  33. var prevChar = index > 0 ? content.charAt(index - 1) : "";
  34. if (prevChar === '"') {
  35. return match;
  36. }
  37. if (prevChar === ">") {
  38. var findStartTagIndex = content.lastIndexOf("<", index);
  39. if (findStartTagIndex !== -1) {
  40. var tagHtml = content.substring(findStartTagIndex, index);
  41. if (tagHtml.indexOf('contenteditable="false"') !== -1) {
  42. return match;
  43. }
  44. }
  45. }
  46. return '<span class="' + cls + '" data-mce-content="' + editor.dom.encode(args[0]) + '">' + editor.dom.encode(typeof args[1] === "string" ? args[1] : args[0]) + "</span>";
  47. };
  48. };
  49. var convertRegExpsToNonEditable = function(editor, nonEditableRegExps, e) {
  50. var i = nonEditableRegExps.length, content = e.content;
  51. if (e.format === "raw") {
  52. return;
  53. }
  54. while (i--) {
  55. content = content.replace(nonEditableRegExps[i], replaceMatchWithSpan(editor, content, getNonEditableClass(editor)));
  56. }
  57. e.content = content;
  58. };
  59. var setup = function(editor) {
  60. var contentEditableAttrName = "contenteditable";
  61. var editClass = " " + global.trim(getEditableClass(editor)) + " ";
  62. var nonEditClass = " " + global.trim(getNonEditableClass(editor)) + " ";
  63. var hasEditClass = hasClass(editClass);
  64. var hasNonEditClass = hasClass(nonEditClass);
  65. var nonEditableRegExps = getNonEditableRegExps(editor);
  66. editor.on("PreInit", function() {
  67. if (nonEditableRegExps.length > 0) {
  68. editor.on("BeforeSetContent", function(e) {
  69. convertRegExpsToNonEditable(editor, nonEditableRegExps, e);
  70. });
  71. }
  72. editor.parser.addAttributeFilter("class", function(nodes) {
  73. var i = nodes.length, node;
  74. while (i--) {
  75. node = nodes[i];
  76. if (hasEditClass(node)) {
  77. node.attr(contentEditableAttrName, "true");
  78. } else if (hasNonEditClass(node)) {
  79. node.attr(contentEditableAttrName, "false");
  80. }
  81. }
  82. });
  83. editor.serializer.addAttributeFilter(contentEditableAttrName, function(nodes) {
  84. var i = nodes.length, node;
  85. while (i--) {
  86. node = nodes[i];
  87. if (!hasEditClass(node) && !hasNonEditClass(node)) {
  88. continue;
  89. }
  90. if (nonEditableRegExps.length > 0 && node.attr("data-mce-content")) {
  91. node.name = "#text";
  92. node.type = 3;
  93. node.raw = true;
  94. node.value = node.attr("data-mce-content");
  95. } else {
  96. node.attr(contentEditableAttrName, null);
  97. }
  98. }
  99. });
  100. });
  101. };
  102. function Plugin() {
  103. global$1.add("noneditable", function(editor) {
  104. setup(editor);
  105. });
  106. }
  107. Plugin();
  108. })();
  109. }
  110. });
  111. // node_modules/.pnpm/tinymce@5.10.7/node_modules/tinymce/plugins/noneditable/index.js
  112. require_plugin();
  113. //# sourceMappingURL=tinymce_plugins_noneditable.js.map