/* Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.html or http://ckeditor.com/license */ (function() { function setupAdvParams( element ) { var attrName = this.att; var value = element && element.hasAttribute( attrName ) && element.getAttribute( attrName ) || ''; if ( value !== undefined ) this.setValue( value ); } function commitAdvParams() { // Dialogs may use different parameters in the commit list, so, by // definition, we take the first CKEDITOR.dom.element available. var element; for ( var i = 0 ; i < arguments.length ; i++ ) { if ( arguments[ i ] instanceof CKEDITOR.dom.element ) { element = arguments[ i ]; break; } } if ( element ) { var attrName = this.att, value = this.getValue(); if ( value ) element.setAttribute( attrName, value ); else element.removeAttribute( attrName, value ); } } CKEDITOR.plugins.add( 'dialogadvtab', { /** * * @param tabConfig * id, dir, classes, styles */ createAdvancedTab : function( editor, tabConfig ) { if ( !tabConfig ) tabConfig = { id:1, dir:1, classes:1, styles:1 }; var lang = editor.lang.common; var result = { id : 'advanced', label : lang.advancedTab, title : lang.advancedTab, elements : [ { type : 'vbox', padding : 1, children : [] } ] }; var contents = []; if ( tabConfig.id || tabConfig.dir ) { if ( tabConfig.id ) { contents.push( { id : 'advId', att : 'id', type : 'text', label : lang.id, setup : setupAdvParams, commit : commitAdvParams }); } if ( tabConfig.dir ) { contents.push( { id : 'advLangDir', att : 'dir', type : 'select', label : lang.langDir, 'default' : '', style : 'width:100%', items : [ [ lang.notSet, '' ], [ lang.langDirLTR, 'ltr' ], [ lang.langDirRTL, 'rtl' ] ], setup : setupAdvParams, commit : commitAdvParams }); } result.elements[ 0 ].children.push( { type : 'hbox', widths : [ '50%', '50%' ], children : [].concat( contents ) }); } if ( tabConfig.styles || tabConfig.classes ) { contents = []; if ( tabConfig.styles ) { contents.push( { id : 'advStyles', att : 'style', type : 'text', label : lang.styles, 'default' : '', getStyle : function( name, defaultValue ) { var match = this.getValue().match( new RegExp( name + '\\s*:\s*([^;]*)', 'i') ); return match ? match[ 1 ] : defaultValue; }, updateStyle : function( name, value ) { var styles = this.getValue(); // Remove the current value. if ( styles ) { styles = styles .replace( new RegExp( '\\s*' + name + '\s*:[^;]*(?:$|;\s*)', 'i' ), '' ) .replace( /^[;\s]+/, '' ) .replace( /\s+$/, '' ); } if ( value ) { styles && !(/;\s*$/).test( styles ) && ( styles += '; ' ); styles += name + ': ' + value; } this.setValue( styles, 1 ); }, setup : setupAdvParams, commit : commitAdvParams }); } if ( tabConfig.classes ) { contents.push( { type : 'hbox', widths : [ '45%', '55%' ], children : [ { id : 'advCSSClasses', att : 'class', type : 'text', label : lang.cssClasses, 'default' : '', setup : setupAdvParams, commit : commitAdvParams } ] }); } result.elements[ 0 ].children.push( { type : 'hbox', widths : [ '50%', '50%' ], children : [].concat( contents ) }); } return result; } }); })();