plugin.js 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. /**
  2. * plugin.js
  3. *
  4. * Copyright, Moxiecode Systems AB
  5. * Released under LGPL License.
  6. *
  7. * License: http://www.tinymce.com/license
  8. * Contributing: http://www.tinymce.com/contributing
  9. */
  10. /*global tinymce:true */
  11. tinymce.PluginManager.add('pagebreak', function(editor) {
  12. var pageBreakClass = 'mce-pagebreak', separatorHtml = editor.getParam('pagebreak_separator', '<!-- pagebreak -->');
  13. var pageBreakSeparatorRegExp = new RegExp(separatorHtml.replace(/[\?\.\*\[\]\(\)\{\}\+\^\$\:]/g, function(a) {
  14. return '\\' + a;
  15. }), 'gi');
  16. var pageBreakPlaceHolderHtml = '<img src="' + tinymce.Env.transparentSrc + '" class="' +
  17. pageBreakClass + '" data-mce-resize="false" />';
  18. // Register commands
  19. editor.addCommand('mcePageBreak', function() {
  20. if (editor.settings.pagebreak_split_block) {
  21. editor.insertContent('<p>' + pageBreakPlaceHolderHtml + '</p>');
  22. } else {
  23. editor.insertContent(pageBreakPlaceHolderHtml);
  24. }
  25. });
  26. // Register buttons
  27. editor.addButton('pagebreak', {
  28. title: 'Page break',
  29. cmd: 'mcePageBreak'
  30. });
  31. editor.addMenuItem('pagebreak', {
  32. text: 'Page break',
  33. icon: 'pagebreak',
  34. cmd: 'mcePageBreak',
  35. context: 'insert'
  36. });
  37. editor.on('ResolveName', function(e) {
  38. if (e.target.nodeName == 'IMG' && editor.dom.hasClass(e.target, pageBreakClass)) {
  39. e.name = 'pagebreak';
  40. }
  41. });
  42. editor.on('click', function(e) {
  43. e = e.target;
  44. if (e.nodeName === 'IMG' && editor.dom.hasClass(e, pageBreakClass)) {
  45. editor.selection.select(e);
  46. }
  47. });
  48. editor.on('BeforeSetContent', function(e) {
  49. e.content = e.content.replace(pageBreakSeparatorRegExp, pageBreakPlaceHolderHtml);
  50. });
  51. editor.on('PreInit', function() {
  52. editor.serializer.addNodeFilter('img', function(nodes) {
  53. var i = nodes.length, node, className;
  54. while (i--) {
  55. node = nodes[i];
  56. className = node.attr('class');
  57. if (className && className.indexOf('mce-pagebreak') !== -1) {
  58. // Replace parent block node if pagebreak_split_block is enabled
  59. var parentNode = node.parent;
  60. if (editor.schema.getBlockElements()[parentNode.name] && editor.settings.pagebreak_split_block) {
  61. parentNode.type = 3;
  62. parentNode.value = separatorHtml;
  63. parentNode.raw = true;
  64. node.remove();
  65. continue;
  66. }
  67. node.type = 3;
  68. node.value = separatorHtml;
  69. node.raw = true;
  70. }
  71. }
  72. });
  73. });
  74. });