--- /dev/null
+/*\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
+(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
+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.advancedTab,\r
+ title : lang.advancedTab,\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:100%',\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.styles )\r
+ {\r
+ contents.push(\r
+ {\r
+ id : 'advStyles',\r
+ att : 'style',\r
+ type : 'text',\r
+ label : lang.styles,\r
+ 'default' : '',\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
+ 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, 1 );\r
+\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