tinymce_plugins_toc.js 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230
  1. import {
  2. __commonJS
  3. } from "./chunk-2LSFTFF7.js";
  4. // node_modules/.pnpm/tinymce@5.10.7/node_modules/tinymce/plugins/toc/plugin.js
  5. var require_plugin = __commonJS({
  6. "node_modules/.pnpm/tinymce@5.10.7/node_modules/tinymce/plugins/toc/plugin.js"() {
  7. (function() {
  8. "use strict";
  9. var global$3 = tinymce.util.Tools.resolve("tinymce.PluginManager");
  10. var global$2 = tinymce.util.Tools.resolve("tinymce.dom.DOMUtils");
  11. var global$1 = tinymce.util.Tools.resolve("tinymce.util.I18n");
  12. var global = tinymce.util.Tools.resolve("tinymce.util.Tools");
  13. var getTocClass = function(editor) {
  14. return editor.getParam("toc_class", "mce-toc");
  15. };
  16. var getTocHeader = function(editor) {
  17. var tagName = editor.getParam("toc_header", "h2");
  18. return /^h[1-6]$/.test(tagName) ? tagName : "h2";
  19. };
  20. var getTocDepth = function(editor) {
  21. var depth = parseInt(editor.getParam("toc_depth", "3"), 10);
  22. return depth >= 1 && depth <= 9 ? depth : 3;
  23. };
  24. var create = function(prefix) {
  25. var counter = 0;
  26. return function() {
  27. var guid = (/* @__PURE__ */ new Date()).getTime().toString(32);
  28. return prefix + guid + (counter++).toString(32);
  29. };
  30. };
  31. var tocId = create("mcetoc_");
  32. var generateSelector = function(depth) {
  33. var i;
  34. var selector = [];
  35. for (i = 1; i <= depth; i++) {
  36. selector.push("h" + i);
  37. }
  38. return selector.join(",");
  39. };
  40. var hasHeaders = function(editor) {
  41. return readHeaders(editor).length > 0;
  42. };
  43. var readHeaders = function(editor) {
  44. var tocClass = getTocClass(editor);
  45. var headerTag = getTocHeader(editor);
  46. var selector = generateSelector(getTocDepth(editor));
  47. var headers = editor.$(selector);
  48. if (headers.length && /^h[1-9]$/i.test(headerTag)) {
  49. headers = headers.filter(function(i, el) {
  50. return !editor.dom.hasClass(el.parentNode, tocClass);
  51. });
  52. }
  53. return global.map(headers, function(h) {
  54. var id = h.id;
  55. return {
  56. id: id ? id : tocId(),
  57. level: parseInt(h.nodeName.replace(/^H/i, ""), 10),
  58. title: editor.$.text(h),
  59. element: h
  60. };
  61. });
  62. };
  63. var getMinLevel = function(headers) {
  64. var minLevel = 9;
  65. for (var i = 0; i < headers.length; i++) {
  66. if (headers[i].level < minLevel) {
  67. minLevel = headers[i].level;
  68. }
  69. if (minLevel === 1) {
  70. return minLevel;
  71. }
  72. }
  73. return minLevel;
  74. };
  75. var generateTitle = function(tag, title) {
  76. var openTag = "<" + tag + ' contenteditable="true">';
  77. var closeTag = "</" + tag + ">";
  78. return openTag + global$2.DOM.encode(title) + closeTag;
  79. };
  80. var generateTocHtml = function(editor) {
  81. var html = generateTocContentHtml(editor);
  82. return '<div class="' + editor.dom.encode(getTocClass(editor)) + '" contenteditable="false">' + html + "</div>";
  83. };
  84. var generateTocContentHtml = function(editor) {
  85. var html = "";
  86. var headers = readHeaders(editor);
  87. var prevLevel = getMinLevel(headers) - 1;
  88. if (!headers.length) {
  89. return "";
  90. }
  91. html += generateTitle(getTocHeader(editor), global$1.translate("Table of Contents"));
  92. for (var i = 0; i < headers.length; i++) {
  93. var h = headers[i];
  94. h.element.id = h.id;
  95. var nextLevel = headers[i + 1] && headers[i + 1].level;
  96. if (prevLevel === h.level) {
  97. html += "<li>";
  98. } else {
  99. for (var ii = prevLevel; ii < h.level; ii++) {
  100. html += "<ul><li>";
  101. }
  102. }
  103. html += '<a href="#' + h.id + '">' + h.title + "</a>";
  104. if (nextLevel === h.level || !nextLevel) {
  105. html += "</li>";
  106. if (!nextLevel) {
  107. html += "</ul>";
  108. }
  109. } else {
  110. for (var ii = h.level; ii > nextLevel; ii--) {
  111. if (ii === nextLevel + 1) {
  112. html += "</li></ul><li>";
  113. } else {
  114. html += "</li></ul>";
  115. }
  116. }
  117. }
  118. prevLevel = h.level;
  119. }
  120. return html;
  121. };
  122. var isEmptyOrOffscreen = function(editor, nodes) {
  123. return !nodes.length || editor.dom.getParents(nodes[0], ".mce-offscreen-selection").length > 0;
  124. };
  125. var insertToc = function(editor) {
  126. var tocClass = getTocClass(editor);
  127. var $tocElm = editor.$("." + tocClass);
  128. if (isEmptyOrOffscreen(editor, $tocElm)) {
  129. editor.insertContent(generateTocHtml(editor));
  130. } else {
  131. updateToc(editor);
  132. }
  133. };
  134. var updateToc = function(editor) {
  135. var tocClass = getTocClass(editor);
  136. var $tocElm = editor.$("." + tocClass);
  137. if ($tocElm.length) {
  138. editor.undoManager.transact(function() {
  139. $tocElm.html(generateTocContentHtml(editor));
  140. });
  141. }
  142. };
  143. var register$1 = function(editor) {
  144. editor.addCommand("mceInsertToc", function() {
  145. insertToc(editor);
  146. });
  147. editor.addCommand("mceUpdateToc", function() {
  148. updateToc(editor);
  149. });
  150. };
  151. var setup = function(editor) {
  152. var $ = editor.$, tocClass = getTocClass(editor);
  153. editor.on("PreProcess", function(e) {
  154. var $tocElm = $("." + tocClass, e.node);
  155. if ($tocElm.length) {
  156. $tocElm.removeAttr("contentEditable");
  157. $tocElm.find("[contenteditable]").removeAttr("contentEditable");
  158. }
  159. });
  160. editor.on("SetContent", function() {
  161. var $tocElm = $("." + tocClass);
  162. if ($tocElm.length) {
  163. $tocElm.attr("contentEditable", false);
  164. $tocElm.children(":first-child").attr("contentEditable", true);
  165. }
  166. });
  167. };
  168. var toggleState = function(editor) {
  169. return function(api) {
  170. var toggleDisabledState = function() {
  171. return api.setDisabled(editor.mode.isReadOnly() || !hasHeaders(editor));
  172. };
  173. toggleDisabledState();
  174. editor.on("LoadContent SetContent change", toggleDisabledState);
  175. return function() {
  176. return editor.on("LoadContent SetContent change", toggleDisabledState);
  177. };
  178. };
  179. };
  180. var isToc = function(editor) {
  181. return function(elm) {
  182. return elm && editor.dom.is(elm, "." + getTocClass(editor)) && editor.getBody().contains(elm);
  183. };
  184. };
  185. var register = function(editor) {
  186. var insertTocAction = function() {
  187. return editor.execCommand("mceInsertToc");
  188. };
  189. editor.ui.registry.addButton("toc", {
  190. icon: "toc",
  191. tooltip: "Table of contents",
  192. onAction: insertTocAction,
  193. onSetup: toggleState(editor)
  194. });
  195. editor.ui.registry.addButton("tocupdate", {
  196. icon: "reload",
  197. tooltip: "Update",
  198. onAction: function() {
  199. return editor.execCommand("mceUpdateToc");
  200. }
  201. });
  202. editor.ui.registry.addMenuItem("toc", {
  203. icon: "toc",
  204. text: "Table of contents",
  205. onAction: insertTocAction,
  206. onSetup: toggleState(editor)
  207. });
  208. editor.ui.registry.addContextToolbar("toc", {
  209. items: "tocupdate",
  210. predicate: isToc(editor),
  211. scope: "node",
  212. position: "node"
  213. });
  214. };
  215. function Plugin() {
  216. global$3.add("toc", function(editor) {
  217. register$1(editor);
  218. register(editor);
  219. setup(editor);
  220. });
  221. }
  222. Plugin();
  223. })();
  224. }
  225. });
  226. // node_modules/.pnpm/tinymce@5.10.7/node_modules/tinymce/plugins/toc/index.js
  227. require_plugin();
  228. //# sourceMappingURL=tinymce_plugins_toc.js.map