JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
vanilla ckeditor-3.0
[ckeditor.git] / _source / plugins / pagebreak / plugin.js
diff --git a/_source/plugins/pagebreak/plugin.js b/_source/plugins/pagebreak/plugin.js
new file mode 100644 (file)
index 0000000..eaee4a6
--- /dev/null
@@ -0,0 +1,96 @@
+/*\r
+Copyright (c) 2003-2009, 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%;' +\r
+                               'border-top: #999999 1px dotted;' +\r
+                               'border-bottom: #999999 1px dotted;' +\r
+                               'height: 5px;' +\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 style = element.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
+                                                               return editor.createFakeParserElement( element, 'cke_pagebreak', 'div' );\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 breakObject = CKEDITOR.dom.element.createFromHtml( '<div style="page-break-after: always;"><span style="display: none;">&nbsp;</span></div>' );\r
+\r
+               // Creates the fake image used for this element.\r
+               breakObject = editor.createFakeElement( breakObject, 'cke_pagebreak', 'div' );\r
+\r
+               var ranges = editor.getSelection().getRanges();\r
+\r
+               for ( var range, i = 0 ; i < ranges.length ; i++ )\r
+               {\r
+                       range = ranges[ i ];\r
+\r
+                       if ( i > 0 )\r
+                               breakObject = breakObject.clone( true );\r
+\r
+                       range.splitBlock( 'p' );\r
+                       range.insertNode( breakObject );\r
+               }\r
+       }\r
+};\r