--- /dev/null
+/*\r
+Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+/**\r
+ * @file Horizontal Page Break\r
+ */\r
+\r
+// Register a plugin named "pagebreak".\r
+CKEDITOR.plugins.add( 'pagebreak',\r
+{\r
+ init : function( editor )\r
+ {\r
+ // Register the command.\r
+ editor.addCommand( 'pagebreak', CKEDITOR.plugins.pagebreakCmd );\r
+\r
+ // Register the toolbar button.\r
+ editor.ui.addButton( 'PageBreak',\r
+ {\r
+ label : editor.lang.pagebreak,\r
+ command : 'pagebreak'\r
+ });\r
+\r
+ // Add the style that renders our placeholder.\r
+ editor.addCss(\r
+ 'img.cke_pagebreak' +\r
+ '{' +\r
+ 'background-image: url(' + CKEDITOR.getUrl( this.path + 'images/pagebreak.gif' ) + ');' +\r
+ 'background-position: center center;' +\r
+ 'background-repeat: no-repeat;' +\r
+ 'clear: both;' +\r
+ 'display: block;' +\r
+ 'float: none;' +\r
+ 'width:100% !important; _width:99.9% !important;' +\r
+ 'border-top: #999999 1px dotted;' +\r
+ 'border-bottom: #999999 1px dotted;' +\r
+ 'height: 5px !important;' +\r
+ 'page-break-after: always;' +\r
+\r
+ '}' );\r
+ },\r
+\r
+ afterInit : function( editor )\r
+ {\r
+ // Register a filter to displaying placeholders after mode change.\r
+\r
+ var dataProcessor = editor.dataProcessor,\r
+ dataFilter = dataProcessor && dataProcessor.dataFilter;\r
+\r
+ if ( dataFilter )\r
+ {\r
+ dataFilter.addRules(\r
+ {\r
+ elements :\r
+ {\r
+ div : function( element )\r
+ {\r
+ var attributes = element.attributes,\r
+ style = attributes && attributes.style,\r
+ child = style && element.children.length == 1 && element.children[ 0 ],\r
+ childStyle = child && ( child.name == 'span' ) && child.attributes.style;\r
+\r
+ if ( childStyle && ( /page-break-after\s*:\s*always/i ).test( style ) && ( /display\s*:\s*none/i ).test( childStyle ) )\r
+ {\r
+ var fakeImg = editor.createFakeParserElement( element, 'cke_pagebreak', 'div' );\r
+ var label = editor.lang.pagebreakAlt;\r
+ fakeImg.attributes[ 'alt' ] = label;\r
+ fakeImg.attributes[ 'aria-label' ] = label;\r
+ return fakeImg;\r
+ }\r
+ }\r
+ }\r
+ });\r
+ }\r
+ },\r
+\r
+ requires : [ 'fakeobjects' ]\r
+});\r
+\r
+CKEDITOR.plugins.pagebreakCmd =\r
+{\r
+ exec : function( editor )\r
+ {\r
+ // Create the element that represents a print break.\r
+ var label = editor.lang.pagebreakAlt;\r
+ var breakObject = CKEDITOR.dom.element.createFromHtml( '<div style="page-break-after: always;"><span style="display: none;"> </span></div>' );\r
+\r
+ // Creates the fake image used for this element.\r
+ breakObject = editor.createFakeElement( breakObject, 'cke_pagebreak', 'div' );\r
+ breakObject.setAttributes( { alt : label, 'aria-label' : label, title : label } );\r
+\r
+ var ranges = editor.getSelection().getRanges( true );\r
+\r
+ editor.fire( 'saveSnapshot' );\r
+\r
+ for ( var range, i = ranges.length - 1 ; i >= 0; i-- )\r
+ {\r
+ range = ranges[ i ];\r
+\r
+ if ( i < ranges.length -1 )\r
+ breakObject = breakObject.clone( true );\r
+\r
+ range.splitBlock( 'p' );\r
+ range.insertNode( breakObject );\r
+ if ( i == ranges.length - 1 )\r
+ {\r
+ range.moveToPosition( breakObject, CKEDITOR.POSITION_AFTER_END );\r
+ range.select();\r
+ }\r
+\r
+ var previous = breakObject.getPrevious();\r
+\r
+ if ( previous && CKEDITOR.dtd[ previous.getName() ].div )\r
+ breakObject.move( previous );\r
+ }\r
+\r
+ editor.fire( 'saveSnapshot' );\r
+ }\r
+};\r