1 /* 2 Copyright (c) 2003-2009, 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 40 '}' ); 41 }, 42 43 afterInit : function( editor ) 44 { 45 // Register a filter to displaying placeholders after mode change. 46 47 var dataProcessor = editor.dataProcessor, 48 dataFilter = dataProcessor && dataProcessor.dataFilter; 49 50 if ( dataFilter ) 51 { 52 dataFilter.addRules( 53 { 54 elements : 55 { 56 div : function( element ) 57 { 58 var style = element.attributes.style, 59 child = style && element.children.length == 1 && element.children[ 0 ], 60 childStyle = child && ( child.name == 'span' ) && child.attributes.style; 61 62 if ( childStyle && /page-break-after\s*:\s*always/i.test( style ) && /display\s*:\s*none/i.test( childStyle ) ) 63 return editor.createFakeParserElement( element, 'cke_pagebreak', 'div' ); 64 } 65 } 66 }); 67 } 68 }, 69 70 requires : [ 'fakeobjects' ] 71 }); 72 73 CKEDITOR.plugins.pagebreakCmd = 74 { 75 exec : function( editor ) 76 { 77 // Create the element that represents a print break. 78 var breakObject = CKEDITOR.dom.element.createFromHtml( '<div style="page-break-after: always;"><span style="display: none;"> </span></div>' ); 79 80 // Creates the fake image used for this element. 81 breakObject = editor.createFakeElement( breakObject, 'cke_pagebreak', 'div' ); 82 83 var ranges = editor.getSelection().getRanges(); 84 85 for ( var range, i = 0 ; i < ranges.length ; i++ ) 86 { 87 range = ranges[ i ]; 88 89 if ( i > 0 ) 90 breakObject = breakObject.clone( true ); 91 92 range.splitBlock( 'p' ); 93 range.insertNode( breakObject ); 94 } 95 } 96 }; 97