tinymce_plugins_visualchars.js 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500
  1. import {
  2. __commonJS
  3. } from "./chunk-2LSFTFF7.js";
  4. // node_modules/.pnpm/tinymce@5.10.7/node_modules/tinymce/plugins/visualchars/plugin.js
  5. var require_plugin = __commonJS({
  6. "node_modules/.pnpm/tinymce@5.10.7/node_modules/tinymce/plugins/visualchars/plugin.js"() {
  7. (function() {
  8. "use strict";
  9. var Cell = function(initial) {
  10. var value2 = initial;
  11. var get2 = function() {
  12. return value2;
  13. };
  14. var set2 = function(v) {
  15. value2 = v;
  16. };
  17. return {
  18. get: get2,
  19. set: set2
  20. };
  21. };
  22. var global$1 = tinymce.util.Tools.resolve("tinymce.PluginManager");
  23. var get$2 = function(toggleState) {
  24. var isEnabled = function() {
  25. return toggleState.get();
  26. };
  27. return { isEnabled };
  28. };
  29. var fireVisualChars = function(editor, state) {
  30. return editor.fire("VisualChars", { state });
  31. };
  32. var typeOf = function(x) {
  33. var t = typeof x;
  34. if (x === null) {
  35. return "null";
  36. } else if (t === "object" && (Array.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === "Array")) {
  37. return "array";
  38. } else if (t === "object" && (String.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === "String")) {
  39. return "string";
  40. } else {
  41. return t;
  42. }
  43. };
  44. var isType$1 = function(type2) {
  45. return function(value2) {
  46. return typeOf(value2) === type2;
  47. };
  48. };
  49. var isSimpleType = function(type2) {
  50. return function(value2) {
  51. return typeof value2 === type2;
  52. };
  53. };
  54. var isString = isType$1("string");
  55. var isBoolean = isSimpleType("boolean");
  56. var isNumber = isSimpleType("number");
  57. var noop = function() {
  58. };
  59. var constant = function(value2) {
  60. return function() {
  61. return value2;
  62. };
  63. };
  64. var identity = function(x) {
  65. return x;
  66. };
  67. var never = constant(false);
  68. var always = constant(true);
  69. var none = function() {
  70. return NONE;
  71. };
  72. var NONE = function() {
  73. var call = function(thunk) {
  74. return thunk();
  75. };
  76. var id = identity;
  77. var me = {
  78. fold: function(n, _s) {
  79. return n();
  80. },
  81. isSome: never,
  82. isNone: always,
  83. getOr: id,
  84. getOrThunk: call,
  85. getOrDie: function(msg) {
  86. throw new Error(msg || "error: getOrDie called on none.");
  87. },
  88. getOrNull: constant(null),
  89. getOrUndefined: constant(void 0),
  90. or: id,
  91. orThunk: call,
  92. map: none,
  93. each: noop,
  94. bind: none,
  95. exists: never,
  96. forall: always,
  97. filter: function() {
  98. return none();
  99. },
  100. toArray: function() {
  101. return [];
  102. },
  103. toString: constant("none()")
  104. };
  105. return me;
  106. }();
  107. var some = function(a) {
  108. var constant_a = constant(a);
  109. var self = function() {
  110. return me;
  111. };
  112. var bind = function(f) {
  113. return f(a);
  114. };
  115. var me = {
  116. fold: function(n, s) {
  117. return s(a);
  118. },
  119. isSome: always,
  120. isNone: never,
  121. getOr: constant_a,
  122. getOrThunk: constant_a,
  123. getOrDie: constant_a,
  124. getOrNull: constant_a,
  125. getOrUndefined: constant_a,
  126. or: self,
  127. orThunk: self,
  128. map: function(f) {
  129. return some(f(a));
  130. },
  131. each: function(f) {
  132. f(a);
  133. },
  134. bind,
  135. exists: bind,
  136. forall: bind,
  137. filter: function(f) {
  138. return f(a) ? me : NONE;
  139. },
  140. toArray: function() {
  141. return [a];
  142. },
  143. toString: function() {
  144. return "some(" + a + ")";
  145. }
  146. };
  147. return me;
  148. };
  149. var from = function(value2) {
  150. return value2 === null || value2 === void 0 ? NONE : some(value2);
  151. };
  152. var Optional = {
  153. some,
  154. none,
  155. from
  156. };
  157. var map = function(xs, f) {
  158. var len = xs.length;
  159. var r = new Array(len);
  160. for (var i = 0; i < len; i++) {
  161. var x = xs[i];
  162. r[i] = f(x, i);
  163. }
  164. return r;
  165. };
  166. var each$1 = function(xs, f) {
  167. for (var i = 0, len = xs.length; i < len; i++) {
  168. var x = xs[i];
  169. f(x, i);
  170. }
  171. };
  172. var filter = function(xs, pred) {
  173. var r = [];
  174. for (var i = 0, len = xs.length; i < len; i++) {
  175. var x = xs[i];
  176. if (pred(x, i)) {
  177. r.push(x);
  178. }
  179. }
  180. return r;
  181. };
  182. var keys = Object.keys;
  183. var each = function(obj, f) {
  184. var props = keys(obj);
  185. for (var k = 0, len = props.length; k < len; k++) {
  186. var i = props[k];
  187. var x = obj[i];
  188. f(x, i);
  189. }
  190. };
  191. typeof window !== "undefined" ? window : Function("return this;")();
  192. var TEXT = 3;
  193. var type = function(element) {
  194. return element.dom.nodeType;
  195. };
  196. var value = function(element) {
  197. return element.dom.nodeValue;
  198. };
  199. var isType = function(t) {
  200. return function(element) {
  201. return type(element) === t;
  202. };
  203. };
  204. var isText = isType(TEXT);
  205. var rawSet = function(dom, key, value2) {
  206. if (isString(value2) || isBoolean(value2) || isNumber(value2)) {
  207. dom.setAttribute(key, value2 + "");
  208. } else {
  209. console.error("Invalid call to Attribute.set. Key ", key, ":: Value ", value2, ":: Element ", dom);
  210. throw new Error("Attribute value was not simple");
  211. }
  212. };
  213. var set = function(element, key, value2) {
  214. rawSet(element.dom, key, value2);
  215. };
  216. var get$1 = function(element, key) {
  217. var v = element.dom.getAttribute(key);
  218. return v === null ? void 0 : v;
  219. };
  220. var remove$3 = function(element, key) {
  221. element.dom.removeAttribute(key);
  222. };
  223. var read = function(element, attr) {
  224. var value2 = get$1(element, attr);
  225. return value2 === void 0 || value2 === "" ? [] : value2.split(" ");
  226. };
  227. var add$2 = function(element, attr, id) {
  228. var old = read(element, attr);
  229. var nu = old.concat([id]);
  230. set(element, attr, nu.join(" "));
  231. return true;
  232. };
  233. var remove$2 = function(element, attr, id) {
  234. var nu = filter(read(element, attr), function(v) {
  235. return v !== id;
  236. });
  237. if (nu.length > 0) {
  238. set(element, attr, nu.join(" "));
  239. } else {
  240. remove$3(element, attr);
  241. }
  242. return false;
  243. };
  244. var supports = function(element) {
  245. return element.dom.classList !== void 0;
  246. };
  247. var get = function(element) {
  248. return read(element, "class");
  249. };
  250. var add$1 = function(element, clazz) {
  251. return add$2(element, "class", clazz);
  252. };
  253. var remove$1 = function(element, clazz) {
  254. return remove$2(element, "class", clazz);
  255. };
  256. var add = function(element, clazz) {
  257. if (supports(element)) {
  258. element.dom.classList.add(clazz);
  259. } else {
  260. add$1(element, clazz);
  261. }
  262. };
  263. var cleanClass = function(element) {
  264. var classList = supports(element) ? element.dom.classList : get(element);
  265. if (classList.length === 0) {
  266. remove$3(element, "class");
  267. }
  268. };
  269. var remove = function(element, clazz) {
  270. if (supports(element)) {
  271. var classList = element.dom.classList;
  272. classList.remove(clazz);
  273. } else {
  274. remove$1(element, clazz);
  275. }
  276. cleanClass(element);
  277. };
  278. var fromHtml = function(html, scope) {
  279. var doc = scope || document;
  280. var div = doc.createElement("div");
  281. div.innerHTML = html;
  282. if (!div.hasChildNodes() || div.childNodes.length > 1) {
  283. console.error("HTML does not have a single root node", html);
  284. throw new Error("HTML must have a single root node");
  285. }
  286. return fromDom(div.childNodes[0]);
  287. };
  288. var fromTag = function(tag, scope) {
  289. var doc = scope || document;
  290. var node = doc.createElement(tag);
  291. return fromDom(node);
  292. };
  293. var fromText = function(text, scope) {
  294. var doc = scope || document;
  295. var node = doc.createTextNode(text);
  296. return fromDom(node);
  297. };
  298. var fromDom = function(node) {
  299. if (node === null || node === void 0) {
  300. throw new Error("Node cannot be null or undefined");
  301. }
  302. return { dom: node };
  303. };
  304. var fromPoint = function(docElm, x, y) {
  305. return Optional.from(docElm.dom.elementFromPoint(x, y)).map(fromDom);
  306. };
  307. var SugarElement = {
  308. fromHtml,
  309. fromTag,
  310. fromText,
  311. fromDom,
  312. fromPoint
  313. };
  314. var charMap = {
  315. " ": "nbsp",
  316. "­": "shy"
  317. };
  318. var charMapToRegExp = function(charMap2, global2) {
  319. var regExp2 = "";
  320. each(charMap2, function(_value, key) {
  321. regExp2 += key;
  322. });
  323. return new RegExp("[" + regExp2 + "]", global2 ? "g" : "");
  324. };
  325. var charMapToSelector = function(charMap2) {
  326. var selector2 = "";
  327. each(charMap2, function(value2) {
  328. if (selector2) {
  329. selector2 += ",";
  330. }
  331. selector2 += "span.mce-" + value2;
  332. });
  333. return selector2;
  334. };
  335. var regExp = charMapToRegExp(charMap);
  336. var regExpGlobal = charMapToRegExp(charMap, true);
  337. var selector = charMapToSelector(charMap);
  338. var nbspClass = "mce-nbsp";
  339. var wrapCharWithSpan = function(value2) {
  340. return '<span data-mce-bogus="1" class="mce-' + charMap[value2] + '">' + value2 + "</span>";
  341. };
  342. var isMatch = function(n) {
  343. var value$1 = value(n);
  344. return isText(n) && value$1 !== void 0 && regExp.test(value$1);
  345. };
  346. var filterDescendants = function(scope, predicate) {
  347. var result = [];
  348. var dom = scope.dom;
  349. var children = map(dom.childNodes, SugarElement.fromDom);
  350. each$1(children, function(x) {
  351. if (predicate(x)) {
  352. result = result.concat([x]);
  353. }
  354. result = result.concat(filterDescendants(x, predicate));
  355. });
  356. return result;
  357. };
  358. var findParentElm = function(elm, rootElm) {
  359. while (elm.parentNode) {
  360. if (elm.parentNode === rootElm) {
  361. return elm;
  362. }
  363. elm = elm.parentNode;
  364. }
  365. };
  366. var replaceWithSpans = function(text) {
  367. return text.replace(regExpGlobal, wrapCharWithSpan);
  368. };
  369. var isWrappedNbsp = function(node) {
  370. return node.nodeName.toLowerCase() === "span" && node.classList.contains("mce-nbsp-wrap");
  371. };
  372. var show = function(editor, rootElm) {
  373. var nodeList = filterDescendants(SugarElement.fromDom(rootElm), isMatch);
  374. each$1(nodeList, function(n) {
  375. var parent = n.dom.parentNode;
  376. if (isWrappedNbsp(parent)) {
  377. add(SugarElement.fromDom(parent), nbspClass);
  378. } else {
  379. var withSpans = replaceWithSpans(editor.dom.encode(value(n)));
  380. var div = editor.dom.create("div", null, withSpans);
  381. var node = void 0;
  382. while (node = div.lastChild) {
  383. editor.dom.insertAfter(node, n.dom);
  384. }
  385. editor.dom.remove(n.dom);
  386. }
  387. });
  388. };
  389. var hide = function(editor, rootElm) {
  390. var nodeList = editor.dom.select(selector, rootElm);
  391. each$1(nodeList, function(node) {
  392. if (isWrappedNbsp(node)) {
  393. remove(SugarElement.fromDom(node), nbspClass);
  394. } else {
  395. editor.dom.remove(node, true);
  396. }
  397. });
  398. };
  399. var toggle = function(editor) {
  400. var body = editor.getBody();
  401. var bookmark = editor.selection.getBookmark();
  402. var parentNode = findParentElm(editor.selection.getNode(), body);
  403. parentNode = parentNode !== void 0 ? parentNode : body;
  404. hide(editor, parentNode);
  405. show(editor, parentNode);
  406. editor.selection.moveToBookmark(bookmark);
  407. };
  408. var applyVisualChars = function(editor, toggleState) {
  409. fireVisualChars(editor, toggleState.get());
  410. var body = editor.getBody();
  411. if (toggleState.get() === true) {
  412. show(editor, body);
  413. } else {
  414. hide(editor, body);
  415. }
  416. };
  417. var toggleVisualChars = function(editor, toggleState) {
  418. toggleState.set(!toggleState.get());
  419. var bookmark = editor.selection.getBookmark();
  420. applyVisualChars(editor, toggleState);
  421. editor.selection.moveToBookmark(bookmark);
  422. };
  423. var register$1 = function(editor, toggleState) {
  424. editor.addCommand("mceVisualChars", function() {
  425. toggleVisualChars(editor, toggleState);
  426. });
  427. };
  428. var isEnabledByDefault = function(editor) {
  429. return editor.getParam("visualchars_default_state", false);
  430. };
  431. var hasForcedRootBlock = function(editor) {
  432. return editor.getParam("forced_root_block") !== false;
  433. };
  434. var setup$1 = function(editor, toggleState) {
  435. editor.on("init", function() {
  436. applyVisualChars(editor, toggleState);
  437. });
  438. };
  439. var global = tinymce.util.Tools.resolve("tinymce.util.Delay");
  440. var setup = function(editor, toggleState) {
  441. var debouncedToggle = global.debounce(function() {
  442. toggle(editor);
  443. }, 300);
  444. if (hasForcedRootBlock(editor)) {
  445. editor.on("keydown", function(e) {
  446. if (toggleState.get() === true) {
  447. e.keyCode === 13 ? toggle(editor) : debouncedToggle();
  448. }
  449. });
  450. }
  451. editor.on("remove", debouncedToggle.stop);
  452. };
  453. var toggleActiveState = function(editor, enabledStated) {
  454. return function(api) {
  455. api.setActive(enabledStated.get());
  456. var editorEventCallback = function(e) {
  457. return api.setActive(e.state);
  458. };
  459. editor.on("VisualChars", editorEventCallback);
  460. return function() {
  461. return editor.off("VisualChars", editorEventCallback);
  462. };
  463. };
  464. };
  465. var register = function(editor, toggleState) {
  466. var onAction = function() {
  467. return editor.execCommand("mceVisualChars");
  468. };
  469. editor.ui.registry.addToggleButton("visualchars", {
  470. tooltip: "Show invisible characters",
  471. icon: "visualchars",
  472. onAction,
  473. onSetup: toggleActiveState(editor, toggleState)
  474. });
  475. editor.ui.registry.addToggleMenuItem("visualchars", {
  476. text: "Show invisible characters",
  477. icon: "visualchars",
  478. onAction,
  479. onSetup: toggleActiveState(editor, toggleState)
  480. });
  481. };
  482. function Plugin() {
  483. global$1.add("visualchars", function(editor) {
  484. var toggleState = Cell(isEnabledByDefault(editor));
  485. register$1(editor, toggleState);
  486. register(editor, toggleState);
  487. setup(editor, toggleState);
  488. setup$1(editor, toggleState);
  489. return get$2(toggleState);
  490. });
  491. }
  492. Plugin();
  493. })();
  494. }
  495. });
  496. // node_modules/.pnpm/tinymce@5.10.7/node_modules/tinymce/plugins/visualchars/index.js
  497. require_plugin();
  498. //# sourceMappingURL=tinymce_plugins_visualchars.js.map