JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
vanilla ckeditor-3.1
[ckeditor.git] / _source / plugins / forms / dialogs / textfield.js
1 /*\r
2 Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.\r
3 For licensing, see LICENSE.html or http://ckeditor.com/license\r
4 */\r
5 CKEDITOR.dialog.add( 'textfield', function( editor )\r
6 {\r
7         var autoAttributes =\r
8         {\r
9                 value : 1,\r
10                 size : 1,\r
11                 maxLength : 1\r
12         };\r
13 \r
14         var acceptedTypes =\r
15         {\r
16                 text : 1,\r
17                 password : 1\r
18         };\r
19 \r
20         return {\r
21                 title : editor.lang.textfield.title,\r
22                 minWidth : 350,\r
23                 minHeight : 150,\r
24                 onShow : function()\r
25                 {\r
26                         delete this.textField;\r
27 \r
28                         var element = this.getParentEditor().getSelection().getSelectedElement();\r
29                         if ( element && element.getName() == "input" &&\r
30                                         ( acceptedTypes[ element.getAttribute( 'type' ) ] || !element.getAttribute( 'type' ) ) )\r
31                         {\r
32                                 this.textField = element;\r
33                                 this.setupContent( element );\r
34                         }\r
35                 },\r
36                 onOk : function()\r
37                 {\r
38                         var editor,\r
39                                 element = this.textField,\r
40                                 isInsertMode = !element;\r
41 \r
42                         if ( isInsertMode )\r
43                         {\r
44                                 editor = this.getParentEditor();\r
45                                 element = editor.document.createElement( 'input' );\r
46                                 element.setAttribute( 'type', 'text' );\r
47                         }\r
48 \r
49                         if ( isInsertMode )\r
50                                 editor.insertElement( element );\r
51                         this.commitContent( { element : element } );\r
52                 },\r
53                 onLoad : function()\r
54                 {\r
55                         var autoSetup = function( element )\r
56                         {\r
57                                 var value = element.hasAttribute( this.id ) && element.getAttribute( this.id );\r
58                                 this.setValue( value || '' );\r
59                         };\r
60 \r
61                         var autoCommit = function( data )\r
62                         {\r
63                                 var element = data.element;\r
64                                 var value = this.getValue();\r
65 \r
66                                 if ( value )\r
67                                         element.setAttribute( this.id, value );\r
68                                 else\r
69                                         element.removeAttribute( this.id );\r
70                         };\r
71 \r
72                         this.foreach( function( contentObj )\r
73                                 {\r
74                                         if ( autoAttributes[ contentObj.id ] )\r
75                                         {\r
76                                                 contentObj.setup = autoSetup;\r
77                                                 contentObj.commit = autoCommit;\r
78                                         }\r
79                                 } );\r
80                 },\r
81                 contents : [\r
82                         {\r
83                                 id : 'info',\r
84                                 label : editor.lang.textfield.title,\r
85                                 title : editor.lang.textfield.title,\r
86                                 elements : [\r
87                                         {\r
88                                                 type : 'hbox',\r
89                                                 widths : [ '50%', '50%' ],\r
90                                                 children :\r
91                                                 [\r
92                                                         {\r
93                                                                 id : '_cke_saved_name',\r
94                                                                 type : 'text',\r
95                                                                 label : editor.lang.textfield.name,\r
96                                                                 'default' : '',\r
97                                                                 accessKey : 'N',\r
98                                                                 setup : function( element )\r
99                                                                 {\r
100                                                                         this.setValue(\r
101                                                                                         element.getAttribute( '_cke_saved_name' ) ||\r
102                                                                                         element.getAttribute( 'name' ) ||\r
103                                                                                         '' );\r
104                                                                 },\r
105                                                                 commit : function( data )\r
106                                                                 {\r
107                                                                         var element = data.element;\r
108 \r
109                                                                         if ( this.getValue() )\r
110                                                                                 element.setAttribute( '_cke_saved_name', this.getValue() );\r
111                                                                         else\r
112                                                                         {\r
113                                                                                 element.removeAttribute( '_cke_saved_name' );\r
114                                                                                 element.removeAttribute( 'name' );\r
115                                                                         }\r
116                                                                 }\r
117                                                         },\r
118                                                         {\r
119                                                                 id : 'value',\r
120                                                                 type : 'text',\r
121                                                                 label : editor.lang.textfield.value,\r
122                                                                 'default' : '',\r
123                                                                 accessKey : 'V'\r
124                                                         }\r
125                                                 ]\r
126                                         },\r
127                                         {\r
128                                                 type : 'hbox',\r
129                                                 widths : [ '50%', '50%' ],\r
130                                                 children :\r
131                                                 [\r
132                                                         {\r
133                                                                 id : 'size',\r
134                                                                 type : 'text',\r
135                                                                 label : editor.lang.textfield.charWidth,\r
136                                                                 'default' : '',\r
137                                                                 accessKey : 'C',\r
138                                                                 style : 'width:50px',\r
139                                                                 validate : CKEDITOR.dialog.validate.integer( editor.lang.common.validateNumberFailed )\r
140                                                         },\r
141                                                         {\r
142                                                                 id : 'maxLength',\r
143                                                                 type : 'text',\r
144                                                                 label : editor.lang.textfield.maxChars,\r
145                                                                 'default' : '',\r
146                                                                 accessKey : 'M',\r
147                                                                 style : 'width:50px',\r
148                                                                 validate : CKEDITOR.dialog.validate.integer( editor.lang.common.validateNumberFailed )\r
149                                                         }\r
150                                                 ]\r
151                                         },\r
152                                         {\r
153                                                 id : 'type',\r
154                                                 type : 'select',\r
155                                                 label : editor.lang.textfield.type,\r
156                                                 'default' : 'text',\r
157                                                 accessKey : 'M',\r
158                                                 items :\r
159                                                 [\r
160                                                         [ editor.lang.textfield.typeText, 'text' ],\r
161                                                         [ editor.lang.textfield.typePass, 'password' ]\r
162                                                 ],\r
163                                                 setup : function( element )\r
164                                                 {\r
165                                                         this.setValue( element.getAttribute( 'type' ) );\r
166                                                 },\r
167                                                 commit : function( data )\r
168                                                 {\r
169                                                         var element = data.element;\r
170 \r
171                                                         if ( CKEDITOR.env.ie )\r
172                                                         {\r
173                                                                 var elementType = element.getAttribute( 'type' );\r
174                                                                 var myType = this.getValue();\r
175 \r
176                                                                 if ( elementType != myType )\r
177                                                                 {\r
178                                                                         var replace = CKEDITOR.dom.element.createFromHtml( '<input type="' + myType + '"></input>', editor.document );\r
179                                                                         element.copyAttributes( replace, { type : 1 } );\r
180                                                                         replace.replace( element );\r
181                                                                         editor.getSelection().selectElement( replace );\r
182                                                                         data.element = replace;\r
183                                                                 }\r
184                                                         }\r
185                                                         else\r
186                                                                 element.setAttribute( 'type', this.getValue() );\r
187                                                 }\r
188                                         }\r
189                                 ]\r
190                         }\r
191                 ]\r
192         };\r
193 });\r