1 /*
  2 Copyright (c) 2003-2012, CKSource - Frederico Knabben. All rights reserved.
  3 For licensing, see LICENSE.html or http://ckeditor.com/license
  4 */
  5 CKEDITOR.dialog.add( 'radio', function( editor )
  6 {
  7 	return {
  8 		title : editor.lang.checkboxAndRadio.radioTitle,
  9 		minWidth : 350,
 10 		minHeight : 140,
 11 		onShow : function()
 12 		{
 13 			delete this.radioButton;
 14 
 15 			var element = this.getParentEditor().getSelection().getSelectedElement();
 16 			if ( element && element.getName() == 'input' && element.getAttribute( 'type' ) == 'radio' )
 17 			{
 18 				this.radioButton = element;
 19 				this.setupContent( element );
 20 			}
 21 		},
 22 		onOk : function()
 23 		{
 24 			var editor,
 25 				element = this.radioButton,
 26 				isInsertMode = !element;
 27 
 28 			if ( isInsertMode )
 29 			{
 30 				editor = this.getParentEditor();
 31 				element = editor.document.createElement( 'input' );
 32 				element.setAttribute( 'type', 'radio' );
 33 			}
 34 
 35 			if ( isInsertMode )
 36 				editor.insertElement( element );
 37 			this.commitContent( { element : element } );
 38 		},
 39 		contents : [
 40 			{
 41 				id : 'info',
 42 				label : editor.lang.checkboxAndRadio.radioTitle,
 43 				title : editor.lang.checkboxAndRadio.radioTitle,
 44 				elements : [
 45 					{
 46 						id : 'name',
 47 						type : 'text',
 48 						label : editor.lang.common.name,
 49 						'default' : '',
 50 						accessKey : 'N',
 51 						setup : function( element )
 52 						{
 53 							this.setValue(
 54 									element.data( 'cke-saved-name' ) ||
 55 									element.getAttribute( 'name' ) ||
 56 									'' );
 57 						},
 58 						commit : function( data )
 59 						{
 60 							var element = data.element;
 61 
 62 							if ( this.getValue() )
 63 								element.data( 'cke-saved-name', this.getValue() );
 64 							else
 65 							{
 66 								element.data( 'cke-saved-name', false );
 67 								element.removeAttribute( 'name' );
 68 							}
 69 						}
 70 					},
 71 					{
 72 						id : 'value',
 73 						type : 'text',
 74 						label : editor.lang.checkboxAndRadio.value,
 75 						'default' : '',
 76 						accessKey : 'V',
 77 						setup : function( element )
 78 						{
 79 							this.setValue( element.getAttribute( 'value' ) || '' );
 80 						},
 81 						commit : function( data )
 82 						{
 83 							var element = data.element;
 84 
 85 							if ( this.getValue() )
 86 								element.setAttribute( 'value', this.getValue() );
 87 							else
 88 								element.removeAttribute( 'value' );
 89 						}
 90 					},
 91 					{
 92 						id : 'checked',
 93 						type : 'checkbox',
 94 						label : editor.lang.checkboxAndRadio.selected,
 95 						'default' : '',
 96 						accessKey : 'S',
 97 						value : "checked",
 98 						setup : function( element )
 99 						{
100 							this.setValue( element.getAttribute( 'checked' ) );
101 						},
102 						commit : function( data )
103 						{
104 							var element = data.element;
105 
106 							if ( !( CKEDITOR.env.ie || CKEDITOR.env.opera ) )
107 							{
108 								if ( this.getValue() )
109 									element.setAttribute( 'checked', 'checked' );
110 								else
111 									element.removeAttribute( 'checked' );
112 							}
113 							else
114 							{
115 								var isElementChecked = element.getAttribute( 'checked' );
116 								var isChecked = !!this.getValue();
117 
118 								if ( isElementChecked != isChecked )
119 								{
120 									var replace = CKEDITOR.dom.element.createFromHtml( '<input type="radio"'
121 											+ ( isChecked ? ' checked="checked"' : '' )
122 											+ '></input>', editor.document );
123 									element.copyAttributes( replace, { type : 1, checked : 1 } );
124 									replace.replace( element );
125 									editor.getSelection().selectElement( replace );
126 									data.element = replace;
127 								}
128 							}
129 						}
130 					}
131 				]
132 			}
133 		]
134 	};
135 });
136