]>
Commit | Line | Data |
---|---|---|
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 |