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