[2862] | 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 | };
|
---|