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