1 | /*
|
---|
2 | Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
|
---|
3 | For licensing, see LICENSE.html or http://ckeditor.com/license
|
---|
4 | */
|
---|
5 |
|
---|
6 | /**
|
---|
7 | * @file Horizontal Page Break
|
---|
8 | */
|
---|
9 |
|
---|
10 | // Register a plugin named "pagebreak".
|
---|
11 | CKEDITOR.plugins.add( 'pagebreak',
|
---|
12 | {
|
---|
13 | init : function( editor )
|
---|
14 | {
|
---|
15 | // Register the command.
|
---|
16 | editor.addCommand( 'pagebreak', CKEDITOR.plugins.pagebreakCmd );
|
---|
17 |
|
---|
18 | // Register the toolbar button.
|
---|
19 | editor.ui.addButton( 'PageBreak',
|
---|
20 | {
|
---|
21 | label : editor.lang.pagebreak,
|
---|
22 | command : 'pagebreak'
|
---|
23 | });
|
---|
24 |
|
---|
25 | // Add the style that renders our placeholder.
|
---|
26 | editor.addCss(
|
---|
27 | 'img.cke_pagebreak' +
|
---|
28 | '{' +
|
---|
29 | 'background-image: url(' + CKEDITOR.getUrl( this.path + 'images/pagebreak.gif' ) + ');' +
|
---|
30 | 'background-position: center center;' +
|
---|
31 | 'background-repeat: no-repeat;' +
|
---|
32 | 'clear: both;' +
|
---|
33 | 'display: block;' +
|
---|
34 | 'float: none;' +
|
---|
35 | 'width: 100%;' +
|
---|
36 | 'border-top: #999999 1px dotted;' +
|
---|
37 | 'border-bottom: #999999 1px dotted;' +
|
---|
38 | 'height: 5px;' +
|
---|
39 | 'page-break-after: always;' +
|
---|
40 |
|
---|
41 | '}' );
|
---|
42 | },
|
---|
43 |
|
---|
44 | afterInit : function( editor )
|
---|
45 | {
|
---|
46 | // Register a filter to displaying placeholders after mode change.
|
---|
47 |
|
---|
48 | var dataProcessor = editor.dataProcessor,
|
---|
49 | dataFilter = dataProcessor && dataProcessor.dataFilter;
|
---|
50 |
|
---|
51 | if ( dataFilter )
|
---|
52 | {
|
---|
53 | dataFilter.addRules(
|
---|
54 | {
|
---|
55 | elements :
|
---|
56 | {
|
---|
57 | div : function( element )
|
---|
58 | {
|
---|
59 | var attributes = element.attributes,
|
---|
60 | style = attributes && attributes.style,
|
---|
61 | child = style && element.children.length == 1 && element.children[ 0 ],
|
---|
62 | childStyle = child && ( child.name == 'span' ) && child.attributes.style;
|
---|
63 |
|
---|
64 | if ( childStyle && ( /page-break-after\s*:\s*always/i ).test( style ) && ( /display\s*:\s*none/i ).test( childStyle ) )
|
---|
65 | return editor.createFakeParserElement( element, 'cke_pagebreak', 'div' );
|
---|
66 | }
|
---|
67 | }
|
---|
68 | });
|
---|
69 | }
|
---|
70 | },
|
---|
71 |
|
---|
72 | requires : [ 'fakeobjects' ]
|
---|
73 | });
|
---|
74 |
|
---|
75 | CKEDITOR.plugins.pagebreakCmd =
|
---|
76 | {
|
---|
77 | exec : function( editor )
|
---|
78 | {
|
---|
79 | // Create the element that represents a print break.
|
---|
80 | var breakObject = CKEDITOR.dom.element.createFromHtml( '<div style="page-break-after: always;"><span style="display: none;"> </span></div>' );
|
---|
81 |
|
---|
82 | // Creates the fake image used for this element.
|
---|
83 | breakObject = editor.createFakeElement( breakObject, 'cke_pagebreak', 'div' );
|
---|
84 |
|
---|
85 | var ranges = editor.getSelection().getRanges();
|
---|
86 |
|
---|
87 | for ( var range, i = 0 ; i < ranges.length ; i++ )
|
---|
88 | {
|
---|
89 | range = ranges[ i ];
|
---|
90 |
|
---|
91 | if ( i > 0 )
|
---|
92 | breakObject = breakObject.clone( true );
|
---|
93 |
|
---|
94 | range.splitBlock( 'p' );
|
---|
95 | range.insertNode( breakObject );
|
---|
96 | if ( i == ranges.length - 1 )
|
---|
97 | {
|
---|
98 | range.moveToPosition( breakObject, CKEDITOR.POSITION_AFTER_END );
|
---|
99 | range.select();
|
---|
100 | }
|
---|
101 | }
|
---|
102 | }
|
---|
103 | };
|
---|