+++ /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
-CKEDITOR.dialog.add( 'select', function( editor )\r
-{\r
- // Add a new option to a SELECT object (combo or list).\r
- function addOption( combo, optionText, optionValue, documentObject, index )\r
- {\r
- combo = getSelect( combo );\r
- var oOption;\r
- if ( documentObject )\r
- oOption = documentObject.createElement( "OPTION" );\r
- else\r
- oOption = document.createElement( "OPTION" );\r
-\r
- if ( combo && oOption && oOption.getName() == 'option' )\r
- {\r
- if ( CKEDITOR.env.ie ) {\r
- if ( !isNaN( parseInt( index, 10) ) )\r
- combo.$.options.add( oOption.$, index );\r
- else\r
- combo.$.options.add( oOption.$ );\r
-\r
- oOption.$.innerHTML = optionText.length > 0 ? optionText : '';\r
- oOption.$.value = optionValue;\r
- }\r
- else\r
- {\r
- if ( index !== null && index < combo.getChildCount() )\r
- combo.getChild( index < 0 ? 0 : index ).insertBeforeMe( oOption );\r
- else\r
- combo.append( oOption );\r
-\r
- oOption.setText( optionText.length > 0 ? optionText : '' );\r
- oOption.setValue( optionValue );\r
- }\r
- }\r
- else\r
- return false;\r
-\r
- return oOption;\r
- }\r
- // Remove all selected options from a SELECT object.\r
- function removeSelectedOptions( combo )\r
- {\r
- combo = getSelect( combo );\r
-\r
- // Save the selected index\r
- var iSelectedIndex = getSelectedIndex( combo );\r
-\r
- // Remove all selected options.\r
- for ( var i = combo.getChildren().count() - 1 ; i >= 0 ; i-- )\r
- {\r
- if ( combo.getChild( i ).$.selected )\r
- combo.getChild( i ).remove();\r
- }\r
-\r
- // Reset the selection based on the original selected index.\r
- setSelectedIndex( combo, iSelectedIndex );\r
- }\r
- //Modify option from a SELECT object.\r
- function modifyOption( combo, index, title, value )\r
- {\r
- combo = getSelect( combo );\r
- if ( index < 0 )\r
- return false;\r
- var child = combo.getChild( index );\r
- child.setText( title );\r
- child.setValue( value );\r
- return child;\r
- }\r
- function removeAllOptions( combo )\r
- {\r
- combo = getSelect( combo );\r
- while ( combo.getChild( 0 ) && combo.getChild( 0 ).remove() )\r
- { /*jsl:pass*/ }\r
- }\r
- // Moves the selected option by a number of steps (also negative).\r
- function changeOptionPosition( combo, steps, documentObject )\r
- {\r
- combo = getSelect( combo );\r
- var iActualIndex = getSelectedIndex( combo );\r
- if ( iActualIndex < 0 )\r
- return false;\r
-\r
- var iFinalIndex = iActualIndex + steps;\r
- iFinalIndex = ( iFinalIndex < 0 ) ? 0 : iFinalIndex;\r
- iFinalIndex = ( iFinalIndex >= combo.getChildCount() ) ? combo.getChildCount() - 1 : iFinalIndex;\r
-\r
- if ( iActualIndex == iFinalIndex )\r
- return false;\r
-\r
- var oOption = combo.getChild( iActualIndex ),\r
- sText = oOption.getText(),\r
- sValue = oOption.getValue();\r
-\r
- oOption.remove();\r
-\r
- oOption = addOption( combo, sText, sValue, ( !documentObject ) ? null : documentObject, iFinalIndex );\r
- setSelectedIndex( combo, iFinalIndex );\r
- return oOption;\r
- }\r
- function getSelectedIndex( combo )\r
- {\r
- combo = getSelect( combo );\r
- return combo ? combo.$.selectedIndex : -1;\r
- }\r
- function setSelectedIndex( combo, index )\r
- {\r
- combo = getSelect( combo );\r
- if ( index < 0 )\r
- return null;\r
- var count = combo.getChildren().count();\r
- combo.$.selectedIndex = ( index >= count ) ? ( count - 1 ) : index;\r
- return combo;\r
- }\r
- function getOptions( combo )\r
- {\r
- combo = getSelect( combo );\r
- return combo ? combo.getChildren() : false;\r
- }\r
- function getSelect( obj )\r
- {\r
- if ( obj && obj.domId && obj.getInputElement().$ ) // Dialog element.\r
- return obj.getInputElement();\r
- else if ( obj && obj.$ )\r
- return obj;\r
- return false;\r
- }\r
-\r
- return {\r
- title : editor.lang.select.title,\r
- minWidth : CKEDITOR.env.ie ? 460 : 395,\r
- minHeight : CKEDITOR.env.ie ? 320 : 300,\r
- onShow : function()\r
- {\r
- delete this.selectBox;\r
- this.setupContent( 'clear' );\r
- var element = this.getParentEditor().getSelection().getSelectedElement();\r
- if ( element && element.getName() == "select" )\r
- {\r
- this.selectBox = element;\r
- this.setupContent( element.getName(), element );\r
-\r
- // Load Options into dialog.\r
- var objOptions = getOptions( element );\r
- for ( var i = 0 ; i < objOptions.count() ; i++ )\r
- this.setupContent( 'option', objOptions.getItem( i ) );\r
- }\r
- },\r
- onOk : function()\r
- {\r
- var editor = this.getParentEditor(),\r
- element = this.selectBox,\r
- isInsertMode = !element;\r
-\r
- if ( isInsertMode )\r
- element = editor.document.createElement( 'select' );\r
- this.commitContent( element );\r
-\r
- if ( isInsertMode )\r
- {\r
- editor.insertElement( element );\r
- if ( CKEDITOR.env.ie )\r
- {\r
- var sel = editor.getSelection(),\r
- bms = sel.createBookmarks();\r
- setTimeout(function()\r
- {\r
- sel.selectBookmarks( bms );\r
- }, 0 );\r
- }\r
- }\r
- },\r
- contents : [\r
- {\r
- id : 'info',\r
- label : editor.lang.select.selectInfo,\r
- title : editor.lang.select.selectInfo,\r
- accessKey : '',\r
- elements : [\r
- {\r
- id : 'txtName',\r
- type : 'text',\r
- widths : [ '25%','75%' ],\r
- labelLayout : 'horizontal',\r
- label : editor.lang.common.name,\r
- 'default' : '',\r
- accessKey : 'N',\r
- style : 'width:350px',\r
- setup : function( name, element )\r
- {\r
- if ( name == 'clear' )\r
- this.setValue( this[ 'default' ] || '' );\r
- else if ( name == 'select' )\r
- {\r
- this.setValue(\r
- element.data( 'cke-saved-name' ) ||\r
- element.getAttribute( 'name' ) ||\r
- '' );\r
- }\r
- },\r
- commit : function( element )\r
- {\r
- if ( this.getValue() )\r
- element.data( 'cke-saved-name', this.getValue() );\r
- else\r
- {\r
- element.data( 'cke-saved-name', false );\r
- element.removeAttribute( 'name' );\r
- }\r
- }\r
- },\r
- {\r
- id : 'txtValue',\r
- type : 'text',\r
- widths : [ '25%','75%' ],\r
- labelLayout : 'horizontal',\r
- label : editor.lang.select.value,\r
- style : 'width:350px',\r
- 'default' : '',\r
- className : 'cke_disabled',\r
- onLoad : function()\r
- {\r
- this.getInputElement().setAttribute( 'readOnly', true );\r
- },\r
- setup : function( name, element )\r
- {\r
- if ( name == 'clear' )\r
- this.setValue( '' );\r
- else if ( name == 'option' && element.getAttribute( 'selected' ) )\r
- this.setValue( element.$.value );\r
- }\r
- },\r
- {\r
- type : 'hbox',\r
- widths : [ '175px', '170px' ],\r
- children :\r
- [\r
- {\r
- id : 'txtSize',\r
- type : 'text',\r
- labelLayout : 'horizontal',\r
- label : editor.lang.select.size,\r
- 'default' : '',\r
- accessKey : 'S',\r
- style : 'width:175px',\r
- validate: function()\r
- {\r
- var func = CKEDITOR.dialog.validate.integer( editor.lang.common.validateNumberFailed );\r
- return ( ( this.getValue() === '' ) || func.apply( this ) );\r
- },\r
- setup : function( name, element )\r
- {\r
- if ( name == 'select' )\r
- this.setValue( element.getAttribute( 'size' ) || '' );\r
- if ( CKEDITOR.env.webkit )\r
- this.getInputElement().setStyle( 'width', '86px' );\r
- },\r
- commit : function( element )\r
- {\r
- if ( this.getValue() )\r
- element.setAttribute( 'size', this.getValue() );\r
- else\r
- element.removeAttribute( 'size' );\r
- }\r
- },\r
- {\r
- type : 'html',\r
- html : '<span>' + CKEDITOR.tools.htmlEncode( editor.lang.select.lines ) + '</span>'\r
- }\r
- ]\r
- },\r
- {\r
- type : 'html',\r
- html : '<span>' + CKEDITOR.tools.htmlEncode( editor.lang.select.opAvail ) + '</span>'\r
- },\r
- {\r
- type : 'hbox',\r
- widths : [ '115px', '115px' ,'100px' ],\r
- children :\r
- [\r
- {\r
- type : 'vbox',\r
- children :\r
- [\r
- {\r
- id : 'txtOptName',\r
- type : 'text',\r
- label : editor.lang.select.opText,\r
- style : 'width:115px',\r
- setup : function( name, element )\r
- {\r
- if ( name == 'clear' )\r
- this.setValue( "" );\r
- }\r
- },\r
- {\r
- type : 'select',\r
- id : 'cmbName',\r
- label : '',\r
- title : '',\r
- size : 5,\r
- style : 'width:115px;height:75px',\r
- items : [],\r
- onChange : function()\r
- {\r
- var dialog = this.getDialog(),\r
- values = dialog.getContentElement( 'info', 'cmbValue' ),\r
- optName = dialog.getContentElement( 'info', 'txtOptName' ),\r
- optValue = dialog.getContentElement( 'info', 'txtOptValue' ),\r
- iIndex = getSelectedIndex( this );\r
-\r
- setSelectedIndex( values, iIndex );\r
- optName.setValue( this.getValue() );\r
- optValue.setValue( values.getValue() );\r
- },\r
- setup : function( name, element )\r
- {\r
- if ( name == 'clear' )\r
- removeAllOptions( this );\r
- else if ( name == 'option' )\r
- addOption( this, element.getText(), element.getText(),\r
- this.getDialog().getParentEditor().document );\r
- },\r
- commit : function( element )\r
- {\r
- var dialog = this.getDialog(),\r
- optionsNames = getOptions( this ),\r
- optionsValues = getOptions( dialog.getContentElement( 'info', 'cmbValue' ) ),\r
- selectValue = dialog.getContentElement( 'info', 'txtValue' ).getValue();\r
-\r
- removeAllOptions( element );\r
-\r
- for ( var i = 0 ; i < optionsNames.count() ; i++ )\r
- {\r
- var oOption = addOption( element, optionsNames.getItem( i ).getValue(),\r
- optionsValues.getItem( i ).getValue(), dialog.getParentEditor().document );\r
- if ( optionsValues.getItem( i ).getValue() == selectValue )\r
- {\r
- oOption.setAttribute( 'selected', 'selected' );\r
- oOption.selected = true;\r
- }\r
- }\r
- }\r
- }\r
- ]\r
- },\r
- {\r
- type : 'vbox',\r
- children :\r
- [\r
- {\r
- id : 'txtOptValue',\r
- type : 'text',\r
- label : editor.lang.select.opValue,\r
- style : 'width:115px',\r
- setup : function( name, element )\r
- {\r
- if ( name == 'clear' )\r
- this.setValue( "" );\r
- }\r
- },\r
- {\r
- type : 'select',\r
- id : 'cmbValue',\r
- label : '',\r
- size : 5,\r
- style : 'width:115px;height:75px',\r
- items : [],\r
- onChange : function()\r
- {\r
- var dialog = this.getDialog(),\r
- names = dialog.getContentElement( 'info', 'cmbName' ),\r
- optName = dialog.getContentElement( 'info', 'txtOptName' ),\r
- optValue = dialog.getContentElement( 'info', 'txtOptValue' ),\r
- iIndex = getSelectedIndex( this );\r
-\r
- setSelectedIndex( names, iIndex );\r
- optName.setValue( names.getValue() );\r
- optValue.setValue( this.getValue() );\r
- },\r
- setup : function( name, element )\r
- {\r
- if ( name == 'clear' )\r
- removeAllOptions( this );\r
- else if ( name == 'option' )\r
- {\r
- var oValue = element.getValue();\r
- addOption( this, oValue, oValue,\r
- this.getDialog().getParentEditor().document );\r
- if ( element.getAttribute( 'selected' ) == 'selected' )\r
- this.getDialog().getContentElement( 'info', 'txtValue' ).setValue( oValue );\r
- }\r
- }\r
- }\r
- ]\r
- },\r
- {\r
- type : 'vbox',\r
- padding : 5,\r
- children :\r
- [\r
- {\r
- type : 'button',\r
- id : 'btnAdd',\r
- style : '',\r
- label : editor.lang.select.btnAdd,\r
- title : editor.lang.select.btnAdd,\r
- style : 'width:100%;',\r
- onClick : function()\r
- {\r
- //Add new option.\r
- var dialog = this.getDialog(),\r
- parentEditor = dialog.getParentEditor(),\r
- optName = dialog.getContentElement( 'info', 'txtOptName' ),\r
- optValue = dialog.getContentElement( 'info', 'txtOptValue' ),\r
- names = dialog.getContentElement( 'info', 'cmbName' ),\r
- values = dialog.getContentElement( 'info', 'cmbValue' );\r
-\r
- addOption(names, optName.getValue(), optName.getValue(), dialog.getParentEditor().document );\r
- addOption(values, optValue.getValue(), optValue.getValue(), dialog.getParentEditor().document );\r
-\r
- optName.setValue( "" );\r
- optValue.setValue( "" );\r
- }\r
- },\r
- {\r
- type : 'button',\r
- id : 'btnModify',\r
- label : editor.lang.select.btnModify,\r
- title : editor.lang.select.btnModify,\r
- style : 'width:100%;',\r
- onClick : function()\r
- {\r
- //Modify selected option.\r
- var dialog = this.getDialog(),\r
- optName = dialog.getContentElement( 'info', 'txtOptName' ),\r
- optValue = dialog.getContentElement( 'info', 'txtOptValue' ),\r
- names = dialog.getContentElement( 'info', 'cmbName' ),\r
- values = dialog.getContentElement( 'info', 'cmbValue' ),\r
- iIndex = getSelectedIndex( names );\r
-\r
- if ( iIndex >= 0 )\r
- {\r
- modifyOption( names, iIndex, optName.getValue(), optName.getValue() );\r
- modifyOption( values, iIndex, optValue.getValue(), optValue.getValue() );\r
- }\r
- }\r
- },\r
- {\r
- type : 'button',\r
- id : 'btnUp',\r
- style : 'width:100%;',\r
- label : editor.lang.select.btnUp,\r
- title : editor.lang.select.btnUp,\r
- onClick : function()\r
- {\r
- //Move up.\r
- var dialog = this.getDialog(),\r
- names = dialog.getContentElement( 'info', 'cmbName' ),\r
- values = dialog.getContentElement( 'info', 'cmbValue' );\r
-\r
- changeOptionPosition( names, -1, dialog.getParentEditor().document );\r
- changeOptionPosition( values, -1, dialog.getParentEditor().document );\r
- }\r
- },\r
- {\r
- type : 'button',\r
- id : 'btnDown',\r
- style : 'width:100%;',\r
- label : editor.lang.select.btnDown,\r
- title : editor.lang.select.btnDown,\r
- onClick : function()\r
- {\r
- //Move down.\r
- var dialog = this.getDialog(),\r
- names = dialog.getContentElement( 'info', 'cmbName' ),\r
- values = dialog.getContentElement( 'info', 'cmbValue' );\r
-\r
- changeOptionPosition( names, 1, dialog.getParentEditor().document );\r
- changeOptionPosition( values, 1, dialog.getParentEditor().document );\r
- }\r
- }\r
- ]\r
- }\r
- ]\r
- },\r
- {\r
- type : 'hbox',\r
- widths : [ '40%', '20%', '40%' ],\r
- children :\r
- [\r
- {\r
- type : 'button',\r
- id : 'btnSetValue',\r
- label : editor.lang.select.btnSetValue,\r
- title : editor.lang.select.btnSetValue,\r
- onClick : function()\r
- {\r
- //Set as default value.\r
- var dialog = this.getDialog(),\r
- values = dialog.getContentElement( 'info', 'cmbValue' ),\r
- txtValue = dialog.getContentElement( 'info', 'txtValue' );\r
- txtValue.setValue( values.getValue() );\r
- }\r
- },\r
- {\r
- type : 'button',\r
- id : 'btnDelete',\r
- label : editor.lang.select.btnDelete,\r
- title : editor.lang.select.btnDelete,\r
- onClick : function()\r
- {\r
- // Delete option.\r
- var dialog = this.getDialog(),\r
- names = dialog.getContentElement( 'info', 'cmbName' ),\r
- values = dialog.getContentElement( 'info', 'cmbValue' ),\r
- optName = dialog.getContentElement( 'info', 'txtOptName' ),\r
- optValue = dialog.getContentElement( 'info', 'txtOptValue' );\r
-\r
- removeSelectedOptions( names );\r
- removeSelectedOptions( values );\r
-\r
- optName.setValue( "" );\r
- optValue.setValue( "" );\r
- }\r
- },\r
- {\r
- id : 'chkMulti',\r
- type : 'checkbox',\r
- label : editor.lang.select.chkMulti,\r
- 'default' : '',\r
- accessKey : 'M',\r
- value : "checked",\r
- setup : function( name, element )\r
- {\r
- if ( name == 'select' )\r
- this.setValue( element.getAttribute( 'multiple' ) );\r
- if ( CKEDITOR.env.webkit )\r
- this.getElement().getParent().setStyle( 'vertical-align', 'middle' );\r
- },\r
- commit : function( element )\r
- {\r
- if ( this.getValue() )\r
- element.setAttribute( 'multiple', this.getValue() );\r
- else\r
- element.removeAttribute( 'multiple' );\r
- }\r
- }\r
- ]\r
- }\r
- ]\r
- }\r
- ]\r
- };\r
-});\r