123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196 |
- /**
- * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
- * For licensing, see LICENSE.md 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 );
- }
- }
- var defaultTabConfig = { id: 1, dir: 1, classes: 1, styles: 1 };
- CKEDITOR.plugins.add( 'dialogadvtab', {
- requires: 'dialog',
- // Returns allowed content rule for the content created by this plugin.
- allowedContent: function( tabConfig ) {
- if ( !tabConfig )
- tabConfig = defaultTabConfig;
- var allowedAttrs = [];
- if ( tabConfig.id )
- allowedAttrs.push( 'id' );
- if ( tabConfig.dir )
- allowedAttrs.push( 'dir' );
- var allowed = '';
- if ( allowedAttrs.length )
- allowed += '[' + allowedAttrs.join( ',' ) + ']';
- if ( tabConfig.classes )
- allowed += '(*)';
- if ( tabConfig.styles )
- allowed += '{*}';
- return allowed;
- },
- // @param tabConfig
- // id, dir, classes, styles
- createAdvancedTab: function( editor, tabConfig, element ) {
- if ( !tabConfig )
- tabConfig = defaultTabConfig;
- 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',
- requiredContent: element ? element + '[id]' : null,
- label: lang.id,
- setup: setupAdvParams,
- commit: commitAdvParams
- } );
- }
- if ( tabConfig.dir ) {
- contents.push( {
- id: 'advLangDir',
- att: 'dir',
- type: 'select',
- requiredContent: element ? element + '[dir]' : null,
- 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',
- requiredContent: element ? element + '{cke-xyz}' : null,
- label: lang.styles,
- 'default': '',
- validate: CKEDITOR.dialog.validate.inlineStyle( lang.invalidInlineStyle ),
- onChange: function() {},
- getStyle: function( name, defaultValue ) {
- var match = this.getValue().match( new RegExp( '(?:^|;)\\s*' + name + '\\s*:\\s*([^;]*)', 'i' ) );
- return match ? match[ 1 ] : defaultValue;
- },
- updateStyle: function( name, value ) {
- var styles = this.getValue();
- var tmp = editor.document.createElement( 'span' );
- tmp.setAttribute( 'style', styles );
- tmp.setStyle( name, value );
- styles = CKEDITOR.tools.normalizeCssText( tmp.getAttribute( 'style' ) );
- 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',
- requiredContent: element ? element + '(cke-xyz)' : null,
- label: lang.cssClasses,
- 'default': '',
- setup: setupAdvParams,
- commit: commitAdvParams
- } ]
- } );
- }
- result.elements[ 0 ].children.push( {
- type: 'hbox',
- widths: [ '50%', '50%' ],
- children: [].concat( contents )
- } );
- }
- return result;
- }
- } );
- } )();
|