JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
b73fbcf82296247b5164ad00b40dd31526c65db1
[ckeditor.git] / _source / plugins / pagebreak / plugin.js
1 /*\r
2 Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.\r
3 For licensing, see LICENSE.html or http://ckeditor.com/license\r
4 */\r
5 \r
6 /**\r
7  * @file Horizontal Page Break\r
8  */\r
9 \r
10 // Register a plugin named "pagebreak".\r
11 CKEDITOR.plugins.add( 'pagebreak',\r
12 {\r
13         init : function( editor )\r
14         {\r
15                 // Register the command.\r
16                 editor.addCommand( 'pagebreak', CKEDITOR.plugins.pagebreakCmd );\r
17 \r
18                 // Register the toolbar button.\r
19                 editor.ui.addButton( 'PageBreak',\r
20                         {\r
21                                 label : editor.lang.pagebreak,\r
22                                 command : 'pagebreak'\r
23                         });\r
24 \r
25                 // Add the style that renders our placeholder.\r
26                 editor.addCss(\r
27                         'img.cke_pagebreak' +\r
28                         '{' +\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
32                                 'clear: both;' +\r
33                                 'display: block;' +\r
34                                 'float: none;' +\r
35                                 'width: 100%;' +\r
36                                 'border-top: #999999 1px dotted;' +\r
37                                 'border-bottom: #999999 1px dotted;' +\r
38                                 'height: 5px;' +\r
39                                 'page-break-after: always;' +\r
40 \r
41                         '}' );\r
42         },\r
43 \r
44         afterInit : function( editor )\r
45         {\r
46                 // Register a filter to displaying placeholders after mode change.\r
47 \r
48                 var dataProcessor = editor.dataProcessor,\r
49                         dataFilter = dataProcessor && dataProcessor.dataFilter;\r
50 \r
51                 if ( dataFilter )\r
52                 {\r
53                         dataFilter.addRules(\r
54                                 {\r
55                                         elements :\r
56                                         {\r
57                                                 div : function( element )\r
58                                                 {\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
63 \r
64                                                         if ( childStyle && ( /page-break-after\s*:\s*always/i ).test( style ) && ( /display\s*:\s*none/i ).test( childStyle ) )\r
65                                                                 return editor.createFakeParserElement( element, 'cke_pagebreak', 'div' );\r
66                                                 }\r
67                                         }\r
68                                 });\r
69                 }\r
70         },\r
71 \r
72         requires : [ 'fakeobjects' ]\r
73 });\r
74 \r
75 CKEDITOR.plugins.pagebreakCmd =\r
76 {\r
77         exec : function( editor )\r
78         {\r
79                 // Create the element that represents a print break.\r
80                 var breakObject = CKEDITOR.dom.element.createFromHtml( '<div style="page-break-after: always;"><span style="display: none;">&nbsp;</span></div>' );\r
81 \r
82                 // Creates the fake image used for this element.\r
83                 breakObject = editor.createFakeElement( breakObject, 'cke_pagebreak', 'div' );\r
84 \r
85                 var ranges = editor.getSelection().getRanges();\r
86 \r
87                 for ( var range, i = 0 ; i < ranges.length ; i++ )\r
88                 {\r
89                         range = ranges[ i ];\r
90 \r
91                         if ( i > 0 )\r
92                                 breakObject = breakObject.clone( true );\r
93 \r
94                         range.splitBlock( 'p' );\r
95                         range.insertNode( breakObject );\r
96                         if ( i == ranges.length - 1 )\r
97                         {\r
98                                 range.moveToPosition( breakObject, CKEDITOR.POSITION_AFTER_END );\r
99                                 range.select();\r
100                         }\r
101                 }\r
102         }\r
103 };\r