2 Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved.
\r
3 For licensing, see LICENSE.html or http://ckeditor.com/license
\r
7 * @file Horizontal Page Break
\r
10 // Register a plugin named "pagebreak".
\r
11 CKEDITOR.plugins.add( 'pagebreak',
\r
13 init : function( editor )
\r
15 // Register the command.
\r
16 editor.addCommand( 'pagebreak', CKEDITOR.plugins.pagebreakCmd );
\r
18 // Register the toolbar button.
\r
19 editor.ui.addButton( 'PageBreak',
\r
21 label : editor.lang.pagebreak,
\r
22 command : 'pagebreak'
\r
25 // Add the style that renders our placeholder.
\r
27 'img.cke_pagebreak' +
\r
29 'background-image: url(' + CKEDITOR.getUrl( this.path + 'images/pagebreak.gif' ) + ');' +
\r
30 'background-position: center center;' +
\r
31 'background-repeat: no-repeat;' +
\r
35 'width:100% !important; _width:99.9% !important;' +
\r
36 'border-top: #999999 1px dotted;' +
\r
37 'border-bottom: #999999 1px dotted;' +
\r
38 'height: 5px !important;' +
\r
39 'page-break-after: always;' +
\r
44 afterInit : function( editor )
\r
46 // Register a filter to displaying placeholders after mode change.
\r
48 var dataProcessor = editor.dataProcessor,
\r
49 dataFilter = dataProcessor && dataProcessor.dataFilter;
\r
53 dataFilter.addRules(
\r
57 div : function( element )
\r
59 var attributes = element.attributes,
\r
60 style = attributes && attributes.style,
\r
61 child = style && element.children.length == 1 && element.children[ 0 ],
\r
62 childStyle = child && ( child.name == 'span' ) && child.attributes.style;
\r
64 if ( childStyle && ( /page-break-after\s*:\s*always/i ).test( style ) && ( /display\s*:\s*none/i ).test( childStyle ) )
\r
66 var fakeImg = editor.createFakeParserElement( element, 'cke_pagebreak', 'div' );
\r
67 var label = editor.lang.pagebreakAlt;
\r
68 fakeImg.attributes[ 'alt' ] = label;
\r
69 fakeImg.attributes[ 'aria-label' ] = label;
\r
78 requires : [ 'fakeobjects' ]
\r
81 CKEDITOR.plugins.pagebreakCmd =
\r
83 exec : function( editor )
\r
85 // Create the element that represents a print break.
\r
86 var label = editor.lang.pagebreakAlt;
\r
87 var breakObject = CKEDITOR.dom.element.createFromHtml( '<div style="page-break-after: always;"><span style="display: none;"> </span></div>' );
\r
89 // Creates the fake image used for this element.
\r
90 breakObject = editor.createFakeElement( breakObject, 'cke_pagebreak', 'div' );
\r
91 breakObject.setAttributes( { alt : label, 'aria-label' : label, title : label } );
\r
93 var ranges = editor.getSelection().getRanges( true );
\r
95 editor.fire( 'saveSnapshot' );
\r
97 for ( var range, i = ranges.length - 1 ; i >= 0; i-- )
\r
99 range = ranges[ i ];
\r
101 if ( i < ranges.length -1 )
\r
102 breakObject = breakObject.clone( true );
\r
104 range.splitBlock( 'p' );
\r
105 range.insertNode( breakObject );
\r
106 if ( i == ranges.length - 1 )
\r
108 range.moveToPosition( breakObject, CKEDITOR.POSITION_AFTER_END );
\r
112 var previous = breakObject.getPrevious();
\r
114 if ( previous && CKEDITOR.dtd[ previous.getName() ].div )
\r
115 breakObject.move( previous );
\r
118 editor.fire( 'saveSnapshot' );
\r