]> git.immae.eu Git - perso/Immae/Projets/packagist/connexionswing-ckeditor-component.git/blame - sources/plugins/pagebreak/plugin.js
Upgrade to 4.5.7 and add some plugin
[perso/Immae/Projets/packagist/connexionswing-ckeditor-component.git] / sources / plugins / pagebreak / plugin.js
CommitLineData
7adcb81e 1/**\r
3b35bd27 2 * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\r
7adcb81e
IB
3 * For licensing, see LICENSE.md or http://ckeditor.com/license\r
4 */\r
5\r
6/**\r
7 * @fileOverview Horizontal Page Break\r
8 */\r
9\r
10'use strict';\r
11\r
12( function() {\r
13 // Register a plugin named "pagebreak".\r
14 CKEDITOR.plugins.add( 'pagebreak', {\r
15 requires: 'fakeobjects',\r
16 // jscs:disable maximumLineLength\r
3b35bd27 17 lang: 'af,ar,bg,bn,bs,ca,cs,cy,da,de,de-ch,el,en,en-au,en-ca,en-gb,eo,es,et,eu,fa,fi,fo,fr,fr-ca,gl,gu,he,hi,hr,hu,id,is,it,ja,ka,km,ko,ku,lt,lv,mk,mn,ms,nb,nl,no,pl,pt,pt-br,ro,ru,si,sk,sl,sq,sr,sr-latn,sv,th,tr,tt,ug,uk,vi,zh,zh-cn', // %REMOVE_LINE_CORE%\r
7adcb81e
IB
18 // jscs:enable maximumLineLength\r
19 icons: 'pagebreak,pagebreak-rtl', // %REMOVE_LINE_CORE%\r
20 hidpi: true, // %REMOVE_LINE_CORE%\r
21 onLoad: function() {\r
22 var cssStyles = (\r
23 'background:url(' + CKEDITOR.getUrl( this.path + 'images/pagebreak.gif' ) + ') no-repeat center center;' +\r
24 'clear:both;' +\r
25 'width:100%;' +\r
26 'border-top:#999 1px dotted;' +\r
27 'border-bottom:#999 1px dotted;' +\r
28 'padding:0;' +\r
29 'height:7px;' +\r
30 'cursor:default;'\r
31 ).replace( /;/g, ' !important;' ); // Increase specificity to override other styles, e.g. block outline.\r
32\r
33 // Add the style that renders our placeholder.\r
34 CKEDITOR.addCss( 'div.cke_pagebreak{' + cssStyles + '}' );\r
35 },\r
36\r
37 init: function( editor ) {\r
38 if ( editor.blockless )\r
39 return;\r
40\r
41 // Register the command.\r
42 editor.addCommand( 'pagebreak', CKEDITOR.plugins.pagebreakCmd );\r
43\r
44 // Register the toolbar button.\r
45 editor.ui.addButton && editor.ui.addButton( 'PageBreak', {\r
46 label: editor.lang.pagebreak.toolbar,\r
47 command: 'pagebreak',\r
48 toolbar: 'insert,70'\r
49 } );\r
50\r
51 // Webkit based browsers needs help to select the page-break.\r
52 CKEDITOR.env.webkit && editor.on( 'contentDom', function() {\r
53 editor.document.on( 'click', function( evt ) {\r
54 var target = evt.data.getTarget();\r
55 if ( target.is( 'div' ) && target.hasClass( 'cke_pagebreak' ) )\r
56 editor.getSelection().selectElement( target );\r
57 } );\r
58 } );\r
59 },\r
60\r
61 afterInit: function( editor ) {\r
62 // Register a filter to displaying placeholders after mode change.\r
63 var dataProcessor = editor.dataProcessor,\r
64 dataFilter = dataProcessor && dataProcessor.dataFilter,\r
65 htmlFilter = dataProcessor && dataProcessor.htmlFilter,\r
66 styleRegex = /page-break-after\s*:\s*always/i,\r
67 childStyleRegex = /display\s*:\s*none/i;\r
68\r
69 function upcastPageBreak( element ) {\r
70 CKEDITOR.tools.extend( element.attributes, attributesSet( editor.lang.pagebreak.alt ), true );\r
71\r
72 element.children.length = 0;\r
73 }\r
74\r
75 if ( htmlFilter ) {\r
76 htmlFilter.addRules( {\r
77 attributes: {\r
78 'class': function( value, element ) {\r
79 var className = value.replace( 'cke_pagebreak', '' );\r
80 if ( className != value ) {\r
81 var span = CKEDITOR.htmlParser.fragment.fromHtml( '<span style="display: none;">&nbsp;</span>' ).children[ 0 ];\r
82 element.children.length = 0;\r
83 element.add( span );\r
84 var attrs = element.attributes;\r
85 delete attrs[ 'aria-label' ];\r
86 delete attrs.contenteditable;\r
87 delete attrs.title;\r
88 }\r
89 return className;\r
90 }\r
91 }\r
92 }, { applyToAll: true, priority: 5 } );\r
93 }\r
94\r
95 if ( dataFilter ) {\r
96 dataFilter.addRules( {\r
97 elements: {\r
98 div: function( element ) {\r
99 // The "internal form" of a pagebreak is pasted from clipboard.\r
100 // ACF may have distorted the HTML because "internal form" is\r
101 // different than "data form". Make sure that element remains valid\r
102 // by re-upcasting it (#11133).\r
103 if ( element.attributes[ 'data-cke-pagebreak' ] )\r
104 upcastPageBreak( element );\r
105\r
106 // Check for "data form" of the pagebreak. If both element and\r
107 // descendants match, convert them to internal form.\r
108 else if ( styleRegex.test( element.attributes.style ) ) {\r
109 var child = element.children[ 0 ];\r
110\r
111 if ( child && child.name == 'span' && childStyleRegex.test( child.attributes.style ) )\r
112 upcastPageBreak( element );\r
113 }\r
114 }\r
115 }\r
116 } );\r
117 }\r
118 }\r
119 } );\r
120\r
121 // TODO Much probably there's no need to expose this object as public object.\r
122 CKEDITOR.plugins.pagebreakCmd = {\r
123 exec: function( editor ) {\r
124 // Create read-only element that represents a print break.\r
125 var pagebreak = editor.document.createElement( 'div', {\r
126 attributes: attributesSet( editor.lang.pagebreak.alt )\r
127 } );\r
128\r
129 editor.insertElement( pagebreak );\r
130 },\r
131 context: 'div',\r
132 allowedContent: {\r
133 div: {\r
134 styles: '!page-break-after'\r
135 },\r
136 span: {\r
137 match: function( element ) {\r
138 var parent = element.parent;\r
139 return parent && parent.name == 'div' && parent.styles && parent.styles[ 'page-break-after' ];\r
140 },\r
141 styles: 'display'\r
142 }\r
143 },\r
144 requiredContent: 'div{page-break-after}'\r
145 };\r
146\r
147 // Returns an object representing all the attributes\r
148 // of the "internal form" of the pagebreak element.\r
149 function attributesSet( label ) {\r
150 return {\r
151 'aria-label': label,\r
152 'class': 'cke_pagebreak',\r
153 contenteditable: 'false',\r
154 'data-cke-display-name': 'pagebreak',\r
155 'data-cke-pagebreak': 1,\r
156 style: 'page-break-after: always',\r
157 title: label\r
158 };\r
159 }\r
160} )();\r