Mimimum syndical pour en faire un produit zope / cmf.
[ckeditor.git] / skins / ckeditor / _source / plugins / showborders / plugin.js
diff --git a/skins/ckeditor/_source/plugins/showborders/plugin.js b/skins/ckeditor/_source/plugins/showborders/plugin.js
new file mode 100644 (file)
index 0000000..dc924e1
--- /dev/null
@@ -0,0 +1,207 @@
+/*\r
+Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+/**\r
+ * @fileOverview The "show border" plugin. The command display visible outline\r
+ * border line around all table elements if table doesn't have a none-zero 'border' attribute specified.\r
+ */\r
+\r
+(function()\r
+{\r
+       var showBorderClassName = 'cke_show_border',\r
+               cssStyleText,\r
+               cssTemplate =\r
+               // TODO: For IE6, we don't have child selector support,\r
+               // where nested table cells could be incorrect.\r
+               ( CKEDITOR.env.ie6Compat ?\r
+                 [\r
+                       '.%1 table.%2,',\r
+                        '.%1 table.%2 td, .%1 table.%2 th',\r
+                        '{',\r
+                               'border : #d3d3d3 1px dotted',\r
+                        '}'\r
+                 ] :\r
+                 [\r
+                        '.%1 table.%2,',\r
+                        '.%1 table.%2 > tr > td, .%1 table.%2 > tr > th,',\r
+                        '.%1 table.%2 > tbody > tr > td, .%1 table.%2 > tbody > tr > th,',\r
+                        '.%1 table.%2 > thead > tr > td, .%1 table.%2 > thead > tr > th,',\r
+                        '.%1 table.%2 > tfoot > tr > td, .%1 table.%2 > tfoot > tr > th',\r
+                        '{',\r
+                               'border : #d3d3d3 1px dotted',\r
+                        '}'\r
+                 ] ).join( '' );\r
+\r
+       cssStyleText = cssTemplate.replace( /%2/g, showBorderClassName ).replace( /%1/g, 'cke_show_borders ' );\r
+\r
+       var commandDefinition =\r
+       {\r
+               preserveState : true,\r
+               editorFocus : false,\r
+               readOnly: 1,\r
+\r
+               exec : function ( editor )\r
+               {\r
+                       this.toggleState();\r
+                       this.refresh( editor );\r
+               },\r
+\r
+               refresh : function( editor )\r
+               {\r
+                       if ( editor.document )\r
+                       {\r
+                               var funcName = ( this.state == CKEDITOR.TRISTATE_ON ) ? 'addClass' : 'removeClass';\r
+                               editor.document.getBody()[ funcName ]( 'cke_show_borders' );\r
+                       }\r
+               }\r
+       };\r
+\r
+       CKEDITOR.plugins.add( 'showborders',\r
+       {\r
+               requires : [ 'wysiwygarea' ],\r
+               modes : { 'wysiwyg' : 1 },\r
+\r
+               init : function( editor )\r
+               {\r
+\r
+                       var command = editor.addCommand( 'showborders', commandDefinition );\r
+                       command.canUndo = false;\r
+\r
+                       if ( editor.config.startupShowBorders !== false )\r
+                               command.setState( CKEDITOR.TRISTATE_ON );\r
+\r
+                       editor.addCss( cssStyleText );\r
+\r
+                       // Refresh the command on setData.\r
+                       editor.on( 'mode', function()\r
+                               {\r
+                                       if ( command.state != CKEDITOR.TRISTATE_DISABLED )\r
+                                               command.refresh( editor );\r
+                               }, null, null, 100 );\r
+\r
+                       // Refresh the command on wysiwyg frame reloads.\r
+                       editor.on( 'contentDom', function()\r
+                               {\r
+                                       if ( command.state != CKEDITOR.TRISTATE_DISABLED )\r
+                                               command.refresh( editor );\r
+                               });\r
+\r
+                       editor.on( 'removeFormatCleanup', function( evt )\r
+                               {\r
+                                       var element = evt.data;\r
+                                       if ( editor.getCommand( 'showborders' ).state == CKEDITOR.TRISTATE_ON &&\r
+                                               element.is( 'table' ) && ( !element.hasAttribute( 'border' ) || parseInt( element.getAttribute( 'border' ), 10 ) <= 0 ) )\r
+                                                       element.addClass( showBorderClassName );\r
+                               });\r
+               },\r
+\r
+               afterInit : function( editor )\r
+               {\r
+                       var dataProcessor = editor.dataProcessor,\r
+                               dataFilter = dataProcessor && dataProcessor.dataFilter,\r
+                               htmlFilter = dataProcessor && dataProcessor.htmlFilter;\r
+\r
+                       if ( dataFilter )\r
+                       {\r
+                               dataFilter.addRules(\r
+                                       {\r
+                                               elements :\r
+                                               {\r
+                                                       'table' : function( element )\r
+                                                       {\r
+                                                               var attributes = element.attributes,\r
+                                                                       cssClass = attributes[ 'class' ],\r
+                                                                       border = parseInt( attributes.border, 10 );\r
+\r
+                                                               if ( !border || border <= 0 )\r
+                                                                       attributes[ 'class' ] = ( cssClass || '' ) + ' ' + showBorderClassName;\r
+                                                       }\r
+                                               }\r
+                                       } );\r
+                       }\r
+\r
+                       if ( htmlFilter )\r
+                       {\r
+                               htmlFilter.addRules(\r
+                               {\r
+                                       elements :\r
+                                       {\r
+                                               'table' : function( table )\r
+                                               {\r
+                                                       var attributes = table.attributes,\r
+                                                               cssClass = attributes[ 'class' ];\r
+\r
+                                                       cssClass && ( attributes[ 'class' ] =\r
+                                                                     cssClass.replace( showBorderClassName, '' )\r
+                                                                                     .replace( /\s{2}/, ' ' )\r
+                                                                                                 .replace( /^\s+|\s+$/, '' ) );\r
+                                               }\r
+                                       }\r
+                               } );\r
+                       }\r
+               }\r
+       });\r
+\r
+       // Table dialog must be aware of it.\r
+       CKEDITOR.on( 'dialogDefinition', function( ev )\r
+       {\r
+               var dialogName = ev.data.name;\r
+\r
+               if ( dialogName == 'table' || dialogName == 'tableProperties' )\r
+               {\r
+                       var dialogDefinition = ev.data.definition,\r
+                               infoTab = dialogDefinition.getContents( 'info' ),\r
+                               borderField = infoTab.get( 'txtBorder' ),\r
+                               originalCommit = borderField.commit;\r
+\r
+                       borderField.commit = CKEDITOR.tools.override( originalCommit, function( org )\r
+                       {\r
+                               return function( data, selectedTable )\r
+                                       {\r
+                                               org.apply( this, arguments );\r
+                                               var value = parseInt( this.getValue(), 10 );\r
+                                               selectedTable[ ( !value || value <= 0 ) ? 'addClass' : 'removeClass' ]( showBorderClassName );\r
+                                       };\r
+                       } );\r
+\r
+                       var advTab = dialogDefinition.getContents( 'advanced' ),\r
+                               classField = advTab && advTab.get( 'advCSSClasses' );\r
+\r
+                       if ( classField )\r
+                       {\r
+                               classField.setup = CKEDITOR.tools.override( classField.setup, function( originalSetup )\r
+                                       {\r
+                                               return function()\r
+                                                       {\r
+                                                               originalSetup.apply( this, arguments );\r
+                                                               this.setValue( this.getValue().replace( /cke_show_border/, '' ) );\r
+                                                       };\r
+                                       });\r
+\r
+                               classField.commit = CKEDITOR.tools.override( classField.commit, function( originalCommit )\r
+                                       {\r
+                                               return function( data, element )\r
+                                                       {\r
+                                                               originalCommit.apply( this, arguments );\r
+\r
+                                                               if ( !parseInt( element.getAttribute( 'border' ), 10 ) )\r
+                                                                       element.addClass( 'cke_show_border' );\r
+                                                       };\r
+                                       });\r
+                       }\r
+               }\r
+       });\r
+\r
+} )();\r
+\r
+/**\r
+ * Whether to automatically enable the "show borders" command when the editor loads.\r
+ * (ShowBorders in FCKeditor)\r
+ * @name CKEDITOR.config.startupShowBorders\r
+ * @type Boolean\r
+ * @default true\r
+ * @example\r
+ * config.startupShowBorders = false;\r
+ */\r