]> git.immae.eu Git - perso/Immae/Projets/packagist/piedsjaloux-ckeditor-component.git/blame - sources/plugins/showborders/plugin.js
Initial commit
[perso/Immae/Projets/packagist/piedsjaloux-ckeditor-component.git] / sources / plugins / showborders / plugin.js
CommitLineData
3332bebe
IB
1/**\r
2 * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.\r
3 * For licensing, see LICENSE.md or http://ckeditor.com/license\r
4 */\r
5\r
6/**\r
7 * @fileOverview The "show border" plugin. The command display visible outline\r
8 * border line around all table elements if table doesn't have a none-zero 'border' attribute specified.\r
9 */\r
10\r
11( function() {\r
12 var commandDefinition = {\r
13 preserveState: true,\r
14 editorFocus: false,\r
15 readOnly: 1,\r
16\r
17 exec: function( editor ) {\r
18 this.toggleState();\r
19 this.refresh( editor );\r
20 },\r
21\r
22 refresh: function( editor ) {\r
23 if ( editor.document ) {\r
24 var funcName = ( this.state == CKEDITOR.TRISTATE_ON ) ? 'attachClass' : 'removeClass';\r
25 editor.editable()[ funcName ]( 'cke_show_borders' );\r
26 }\r
27 }\r
28 };\r
29\r
30 var showBorderClassName = 'cke_show_border';\r
31\r
32 CKEDITOR.plugins.add( 'showborders', {\r
33 modes: { 'wysiwyg': 1 },\r
34\r
35 onLoad: function() {\r
36 var cssStyleText,\r
37 cssTemplate =\r
38 // TODO: For IE6, we don't have child selector support,\r
39 // where nested table cells could be incorrect.\r
40 ( CKEDITOR.env.ie6Compat ? [\r
41 '.%1 table.%2,',\r
42 '.%1 table.%2 td, .%1 table.%2 th',\r
43 '{',\r
44 'border : #d3d3d3 1px dotted',\r
45 '}'\r
46 ] : [\r
47 '.%1 table.%2,',\r
48 '.%1 table.%2 > tr > td, .%1 table.%2 > tr > th,',\r
49 '.%1 table.%2 > tbody > tr > td, .%1 table.%2 > tbody > tr > th,',\r
50 '.%1 table.%2 > thead > tr > td, .%1 table.%2 > thead > tr > th,',\r
51 '.%1 table.%2 > tfoot > tr > td, .%1 table.%2 > tfoot > tr > th',\r
52 '{',\r
53 'border : #d3d3d3 1px dotted',\r
54 '}'\r
55 ] ).join( '' );\r
56\r
57 cssStyleText = cssTemplate.replace( /%2/g, showBorderClassName ).replace( /%1/g, 'cke_show_borders ' );\r
58\r
59 CKEDITOR.addCss( cssStyleText );\r
60 },\r
61\r
62 init: function( editor ) {\r
63\r
64 var command = editor.addCommand( 'showborders', commandDefinition );\r
65 command.canUndo = false;\r
66\r
67 if ( editor.config.startupShowBorders !== false )\r
68 command.setState( CKEDITOR.TRISTATE_ON );\r
69\r
70 // Refresh the command on setData.\r
71 editor.on( 'mode', function() {\r
72 if ( command.state != CKEDITOR.TRISTATE_DISABLED )\r
73 command.refresh( editor );\r
74 }, null, null, 100 );\r
75\r
76 // Refresh the command on wysiwyg frame reloads.\r
77 editor.on( 'contentDom', function() {\r
78 if ( command.state != CKEDITOR.TRISTATE_DISABLED )\r
79 command.refresh( editor );\r
80 } );\r
81\r
82 editor.on( 'removeFormatCleanup', function( evt ) {\r
83 var element = evt.data;\r
84 if ( editor.getCommand( 'showborders' ).state == CKEDITOR.TRISTATE_ON && element.is( 'table' ) && ( !element.hasAttribute( 'border' ) || parseInt( element.getAttribute( 'border' ), 10 ) <= 0 ) )\r
85 element.addClass( showBorderClassName );\r
86 } );\r
87 },\r
88\r
89 afterInit: function( editor ) {\r
90 var dataProcessor = editor.dataProcessor,\r
91 dataFilter = dataProcessor && dataProcessor.dataFilter,\r
92 htmlFilter = dataProcessor && dataProcessor.htmlFilter;\r
93\r
94 if ( dataFilter ) {\r
95 dataFilter.addRules( {\r
96 elements: {\r
97 'table': function( element ) {\r
98 var attributes = element.attributes,\r
99 cssClass = attributes[ 'class' ],\r
100 border = parseInt( attributes.border, 10 );\r
101\r
102 if ( ( !border || border <= 0 ) && ( !cssClass || cssClass.indexOf( showBorderClassName ) == -1 ) )\r
103 attributes[ 'class' ] = ( cssClass || '' ) + ' ' + showBorderClassName;\r
104 }\r
105 }\r
106 } );\r
107 }\r
108\r
109 if ( htmlFilter ) {\r
110 htmlFilter.addRules( {\r
111 elements: {\r
112 'table': function( table ) {\r
113 var attributes = table.attributes,\r
114 cssClass = attributes[ 'class' ];\r
115\r
116 cssClass && ( attributes[ 'class' ] = cssClass.replace( showBorderClassName, '' ).replace( /\s{2}/, ' ' ).replace( /^\s+|\s+$/, '' ) );\r
117 }\r
118 }\r
119 } );\r
120 }\r
121 }\r
122 } );\r
123\r
124 // Table dialog must be aware of it.\r
125 CKEDITOR.on( 'dialogDefinition', function( ev ) {\r
126 var dialogName = ev.data.name;\r
127\r
128 if ( dialogName == 'table' || dialogName == 'tableProperties' ) {\r
129 var dialogDefinition = ev.data.definition,\r
130 infoTab = dialogDefinition.getContents( 'info' ),\r
131 borderField = infoTab.get( 'txtBorder' ),\r
132 originalCommit = borderField.commit;\r
133\r
134 borderField.commit = CKEDITOR.tools.override( originalCommit, function( org ) {\r
135 return function( data, selectedTable ) {\r
136 org.apply( this, arguments );\r
137 var value = parseInt( this.getValue(), 10 );\r
138 selectedTable[ ( !value || value <= 0 ) ? 'addClass' : 'removeClass' ]( showBorderClassName );\r
139 };\r
140 } );\r
141\r
142 var advTab = dialogDefinition.getContents( 'advanced' ),\r
143 classField = advTab && advTab.get( 'advCSSClasses' );\r
144\r
145 if ( classField ) {\r
146 classField.setup = CKEDITOR.tools.override( classField.setup, function( originalSetup ) {\r
147 return function() {\r
148 originalSetup.apply( this, arguments );\r
149 this.setValue( this.getValue().replace( /cke_show_border/, '' ) );\r
150 };\r
151 } );\r
152\r
153 classField.commit = CKEDITOR.tools.override( classField.commit, function( originalCommit ) {\r
154 return function( data, element ) {\r
155 originalCommit.apply( this, arguments );\r
156\r
157 if ( !parseInt( element.getAttribute( 'border' ), 10 ) )\r
158 element.addClass( 'cke_show_border' );\r
159 };\r
160 } );\r
161 }\r
162 }\r
163 } );\r
164\r
165} )();\r
166\r
167/**\r
168 * Whether to automatically enable the "show borders" command when the editor loads.\r
169 *\r
170 * config.startupShowBorders = false;\r
171 *\r
172 * @cfg {Boolean} [startupShowBorders=true]\r
173 * @member CKEDITOR.config\r
174 */\r