plugin.js 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. /**
  2. * Copyright (c) Tiny Technologies, Inc. All rights reserved.
  3. * Licensed under the LGPL or a commercial license.
  4. * For LGPL see License.txt in the project root for license information.
  5. * For commercial licenses see https://www.tiny.cloud/
  6. *
  7. * Version: 5.0.1 (2019-02-21)
  8. */
  9. (function () {
  10. var pagebreak = (function () {
  11. 'use strict';
  12. var global = tinymce.util.Tools.resolve('tinymce.PluginManager');
  13. var global$1 = tinymce.util.Tools.resolve('tinymce.Env');
  14. var getSeparatorHtml = function (editor) {
  15. return editor.getParam('pagebreak_separator', '<!-- pagebreak -->');
  16. };
  17. var shouldSplitBlock = function (editor) {
  18. return editor.getParam('pagebreak_split_block', false);
  19. };
  20. var Settings = {
  21. getSeparatorHtml: getSeparatorHtml,
  22. shouldSplitBlock: shouldSplitBlock
  23. };
  24. var getPageBreakClass = function () {
  25. return 'mce-pagebreak';
  26. };
  27. var getPlaceholderHtml = function () {
  28. return '<img src="' + global$1.transparentSrc + '" class="' + getPageBreakClass() + '" data-mce-resize="false" data-mce-placeholder />';
  29. };
  30. var setup = function (editor) {
  31. var separatorHtml = Settings.getSeparatorHtml(editor);
  32. var pageBreakSeparatorRegExp = new RegExp(separatorHtml.replace(/[\?\.\*\[\]\(\)\{\}\+\^\$\:]/g, function (a) {
  33. return '\\' + a;
  34. }), 'gi');
  35. editor.on('BeforeSetContent', function (e) {
  36. e.content = e.content.replace(pageBreakSeparatorRegExp, getPlaceholderHtml());
  37. });
  38. editor.on('PreInit', function () {
  39. editor.serializer.addNodeFilter('img', function (nodes) {
  40. var i = nodes.length, node, className;
  41. while (i--) {
  42. node = nodes[i];
  43. className = node.attr('class');
  44. if (className && className.indexOf('mce-pagebreak') !== -1) {
  45. var parentNode = node.parent;
  46. if (editor.schema.getBlockElements()[parentNode.name] && Settings.shouldSplitBlock(editor)) {
  47. parentNode.type = 3;
  48. parentNode.value = separatorHtml;
  49. parentNode.raw = true;
  50. node.remove();
  51. continue;
  52. }
  53. node.type = 3;
  54. node.value = separatorHtml;
  55. node.raw = true;
  56. }
  57. }
  58. });
  59. });
  60. };
  61. var FilterContent = {
  62. setup: setup,
  63. getPlaceholderHtml: getPlaceholderHtml,
  64. getPageBreakClass: getPageBreakClass
  65. };
  66. var register = function (editor) {
  67. editor.addCommand('mcePageBreak', function () {
  68. if (editor.settings.pagebreak_split_block) {
  69. editor.insertContent('<p>' + FilterContent.getPlaceholderHtml() + '</p>');
  70. } else {
  71. editor.insertContent(FilterContent.getPlaceholderHtml());
  72. }
  73. });
  74. };
  75. var Commands = { register: register };
  76. var setup$1 = function (editor) {
  77. editor.on('ResolveName', function (e) {
  78. if (e.target.nodeName === 'IMG' && editor.dom.hasClass(e.target, FilterContent.getPageBreakClass())) {
  79. e.name = 'pagebreak';
  80. }
  81. });
  82. };
  83. var ResolveName = { setup: setup$1 };
  84. var register$1 = function (editor) {
  85. editor.ui.registry.addButton('pagebreak', {
  86. icon: 'page-break',
  87. tooltip: 'Page break',
  88. onAction: function () {
  89. return editor.execCommand('mcePageBreak');
  90. }
  91. });
  92. editor.ui.registry.addMenuItem('pagebreak', {
  93. text: 'Page break',
  94. icon: 'page-break',
  95. onAction: function () {
  96. return editor.execCommand('mcePageBreak');
  97. }
  98. });
  99. };
  100. var Buttons = { register: register$1 };
  101. global.add('pagebreak', function (editor) {
  102. Commands.register(editor);
  103. Buttons.register(editor);
  104. FilterContent.setup(editor);
  105. ResolveName.setup(editor);
  106. });
  107. function Plugin () {
  108. }
  109. return Plugin;
  110. }());
  111. })();