JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
vanilla ckeditor-3.4b
[ckeditor.git] / _source / plugins / dialogadvtab / plugin.js
diff --git a/_source/plugins/dialogadvtab/plugin.js b/_source/plugins/dialogadvtab/plugin.js
new file mode 100644 (file)
index 0000000..434911c
--- /dev/null
@@ -0,0 +1,216 @@
+/*\r
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+(function()\r
+{\r
+\r
+function setupAdvParams( element )\r
+{\r
+       var attrName = this.att;\r
+\r
+       var value = element && element.hasAttribute( attrName ) && element.getAttribute( attrName ) || '';\r
+\r
+       if ( value !== undefined )\r
+               this.setValue( value );\r
+}\r
+\r
+function commitAdvParams()\r
+{\r
+       // Dialogs may use different parameters in the commit list, so, by\r
+       // definition, we take the first CKEDITOR.dom.element available.\r
+       var element;\r
+\r
+       for ( var i = 0 ; i < arguments.length ; i++ )\r
+       {\r
+               if ( arguments[ i ] instanceof CKEDITOR.dom.element )\r
+               {\r
+                       element = arguments[ i ];\r
+                       break;\r
+               }\r
+       }\r
+\r
+       if ( element )\r
+       {\r
+               var attrName = this.att,\r
+                       value = this.getValue();\r
+\r
+               if ( value )\r
+                       element.setAttribute( attrName, value );\r
+               else\r
+                       element.removeAttribute( attrName, value );\r
+       }\r
+}\r
+\r
+var isUpdating;\r
+\r
+CKEDITOR.plugins.add( 'dialogadvtab',\r
+{\r
+       /**\r
+        *\r
+        * @param tabConfig\r
+        * id, dir, classes, styles\r
+        */\r
+       createAdvancedTab : function( editor, tabConfig )\r
+       {\r
+               if ( !tabConfig )\r
+                       tabConfig = { id:1, dir:1, classes:1, styles:1 };\r
+\r
+               var lang = editor.lang.common;\r
+\r
+               var result =\r
+               {\r
+                       id : 'advanced',\r
+                       label : lang.advanced,\r
+                       title : lang.advanced,\r
+                       elements :\r
+                               [\r
+                                       {\r
+                                               type : 'vbox',\r
+                                               padding : 1,\r
+                                               children : []\r
+                                       }\r
+                               ]\r
+               };\r
+\r
+               var contents = [];\r
+\r
+               if ( tabConfig.id || tabConfig.dir )\r
+               {\r
+                       if ( tabConfig.id )\r
+                       {\r
+                               contents.push(\r
+                                       {\r
+                                               id : 'advId',\r
+                                               att : 'id',\r
+                                               type : 'text',\r
+                                               label : lang.id,\r
+                                               setup : setupAdvParams,\r
+                                               commit : commitAdvParams\r
+                                       });\r
+                       }\r
+\r
+                       if ( tabConfig.dir )\r
+                       {\r
+                               contents.push(\r
+                                       {\r
+                                               id : 'advLangDir',\r
+                                               att : 'dir',\r
+                                               type : 'select',\r
+                                               label : lang.langDir,\r
+                                               'default' : '',\r
+                                               style : 'width:110px',\r
+                                               items :\r
+                                               [\r
+                                                       [ lang.notSet, '' ],\r
+                                                       [ lang.langDirLTR, 'ltr' ],\r
+                                                       [ lang.langDirRTL, 'rtl' ]\r
+                                               ],\r
+                                               setup : setupAdvParams,\r
+                                               commit : commitAdvParams\r
+                                       });\r
+                       }\r
+\r
+                       result.elements[ 0 ].children.push(\r
+                               {\r
+                                       type : 'hbox',\r
+                                       widths : [ '50%', '50%' ],\r
+                                       children : [].concat( contents )\r
+                               });\r
+               }\r
+\r
+               if ( tabConfig.styles || tabConfig.classes )\r
+               {\r
+                       contents = [];\r
+\r
+                       if ( tabConfig.id )\r
+                       {\r
+                               contents.push(\r
+                                       {\r
+                                               id : 'advStyles',\r
+                                               att : 'style',\r
+                                               type : 'text',\r
+                                               label : lang.styles,\r
+                                               'default' : '',\r
+\r
+                                               onChange : function(){},\r
+\r
+                                               getStyle : function( name, defaultValue )\r
+                                               {\r
+                                                       var match = this.getValue().match( new RegExp( name + '\\s*:\s*([^;]*)', 'i') );\r
+                                                       return match ? match[ 1 ] : defaultValue;\r
+                                               },\r
+\r
+                                               updateStyle : function( name, value )\r
+                                               {\r
+                                                       if ( isUpdating )\r
+                                                               return;\r
+\r
+                                                       // Flag to avoid recursion.\r
+                                                       isUpdating = 1;\r
+\r
+                                                       var styles = this.getValue();\r
+\r
+                                                       // Remove the current value.\r
+                                                       if ( styles )\r
+                                                       {\r
+                                                               styles = styles\r
+                                                                       .replace( new RegExp( '\\s*' + name + '\s*:[^;]*(?:$|;\s*)', 'i' ), '' )\r
+                                                                       .replace( /^[;\s]+/, '' )\r
+                                                                       .replace( /\s+$/, '' );\r
+                                                       }\r
+\r
+                                                       if ( value )\r
+                                                       {\r
+                                                               styles && !(/;\s*$/).test( styles ) && ( styles += '; ' );\r
+                                                               styles += name + ': ' + value;\r
+                                                       }\r
+\r
+                                                       this.setValue( styles );\r
+\r
+                                                       isUpdating = 0;\r
+                                               },\r
+\r
+                                               setup : setupAdvParams,\r
+\r
+                                               commit : commitAdvParams\r
+\r
+                                       });\r
+                       }\r
+\r
+                       if ( tabConfig.classes )\r
+                       {\r
+                               contents.push(\r
+                                       {\r
+                                               type : 'hbox',\r
+                                               widths : [ '45%', '55%' ],\r
+                                               children :\r
+                                               [\r
+                                                       {\r
+                                                               id : 'advCSSClasses',\r
+                                                               att : 'class',\r
+                                                               type : 'text',\r
+                                                               label : lang.cssClasses,\r
+                                                               'default' : '',\r
+                                                               setup : setupAdvParams,\r
+                                                               commit : commitAdvParams\r
+\r
+                                                       }\r
+                                               ]\r
+                                       });\r
+                       }\r
+\r
+                       result.elements[ 0 ].children.push(\r
+                               {\r
+                                       type : 'hbox',\r
+                                       widths : [ '50%', '50%' ],\r
+                                       children : [].concat( contents )\r
+                               });\r
+               }\r
+\r
+               return result;\r
+       }\r
+});\r
+\r
+})();\r