author | Michael Krelin <hacker@klever.net> | 2013-11-28 20:04:10 (UTC) |
---|---|---|
committer | Michael Krelin <hacker@klever.net> | 2013-11-28 20:04:10 (UTC) |
commit | 11a51653179a40dff1ecf13b9b4eb5e073920c04 (patch) (unidiff) | |
tree | f3dc8437724ecf8d5967ce61e6734ab89fb58704 | |
parent | 6cd9e34b5b49473923190a6a70c436908c98505e (diff) | |
download | clipperz-11a51653179a40dff1ecf13b9b4eb5e073920c04.zip clipperz-11a51653179a40dff1ecf13b9b4eb5e073920c04.tar.gz clipperz-11a51653179a40dff1ecf13b9b4eb5e073920c04.tar.bz2 |
frontend: turn off autocompletion for input elements in record
otherwise the very presence of saved form values for the same host may
(at least in some browsers) ruin the record if it was edited and
carelessly saved.
-rw-r--r-- | frontend/beta/js/Clipperz/PM/Components/RecordDetail/FieldValueComponent.js | 12 |
1 files changed, 6 insertions, 6 deletions
diff --git a/frontend/beta/js/Clipperz/PM/Components/RecordDetail/FieldValueComponent.js b/frontend/beta/js/Clipperz/PM/Components/RecordDetail/FieldValueComponent.js index f2c70aa..a8117d7 100644 --- a/frontend/beta/js/Clipperz/PM/Components/RecordDetail/FieldValueComponent.js +++ b/frontend/beta/js/Clipperz/PM/Components/RecordDetail/FieldValueComponent.js | |||
@@ -1,270 +1,270 @@ | |||
1 | /* | 1 | /* |
2 | 2 | ||
3 | Copyright 2008-2013 Clipperz Srl | 3 | Copyright 2008-2013 Clipperz Srl |
4 | 4 | ||
5 | This file is part of Clipperz, the online password manager. | 5 | This file is part of Clipperz, the online password manager. |
6 | For further information about its features and functionalities please | 6 | For further information about its features and functionalities please |
7 | refer to http://www.clipperz.com. | 7 | refer to http://www.clipperz.com. |
8 | 8 | ||
9 | * Clipperz is free software: you can redistribute it and/or modify it | 9 | * Clipperz is free software: you can redistribute it and/or modify it |
10 | under the terms of the GNU Affero General Public License as published | 10 | under the terms of the GNU Affero General Public License as published |
11 | by the Free Software Foundation, either version 3 of the License, or | 11 | by the Free Software Foundation, either version 3 of the License, or |
12 | (at your option) any later version. | 12 | (at your option) any later version. |
13 | 13 | ||
14 | * Clipperz is distributed in the hope that it will be useful, but | 14 | * Clipperz is distributed in the hope that it will be useful, but |
15 | WITHOUT ANY WARRANTY; without even the implied warranty of | 15 | WITHOUT ANY WARRANTY; without even the implied warranty of |
16 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. | 16 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. |
17 | See the GNU Affero General Public License for more details. | 17 | See the GNU Affero General Public License for more details. |
18 | 18 | ||
19 | * You should have received a copy of the GNU Affero General Public | 19 | * You should have received a copy of the GNU Affero General Public |
20 | License along with Clipperz. If not, see http://www.gnu.org/licenses/. | 20 | License along with Clipperz. If not, see http://www.gnu.org/licenses/. |
21 | 21 | ||
22 | */ | 22 | */ |
23 | 23 | ||
24 | if (typeof(Clipperz) == 'undefined') { Clipperz = {}; } | 24 | if (typeof(Clipperz) == 'undefined') { Clipperz = {}; } |
25 | if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; } | 25 | if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; } |
26 | if (typeof(Clipperz.PM.Components) == 'undefined') { Clipperz.PM.Components = {}; } | 26 | if (typeof(Clipperz.PM.Components) == 'undefined') { Clipperz.PM.Components = {}; } |
27 | if (typeof(Clipperz.PM.Components.RecordDetail) == 'undefined') { Clipperz.PM.Components.RecordDetail = {}; } | 27 | if (typeof(Clipperz.PM.Components.RecordDetail) == 'undefined') { Clipperz.PM.Components.RecordDetail = {}; } |
28 | 28 | ||
29 | //############################################################################# | 29 | //############################################################################# |
30 | 30 | ||
31 | Clipperz.PM.Components.RecordDetail.FieldValueComponent = function(anElement, args) { | 31 | Clipperz.PM.Components.RecordDetail.FieldValueComponent = function(anElement, args) { |
32 | args = args || {}; | 32 | args = args || {}; |
33 | 33 | ||
34 | Clipperz.PM.Components.RecordDetail.FieldValueComponent.superclass.constructor.call(this, anElement, args); | 34 | Clipperz.PM.Components.RecordDetail.FieldValueComponent.superclass.constructor.call(this, anElement, args); |
35 | 35 | ||
36 | this._inputElement = null; | 36 | this._inputElement = null; |
37 | this._scrambledStatus = 'SCRAMBLED'; //'UNSCRAMBLED' | 37 | this._scrambledStatus = 'SCRAMBLED'; //'UNSCRAMBLED' |
38 | 38 | ||
39 | this.render(); | 39 | this.render(); |
40 | 40 | ||
41 | return this; | 41 | return this; |
42 | } | 42 | } |
43 | 43 | ||
44 | //============================================================================= | 44 | //============================================================================= |
45 | 45 | ||
46 | YAHOO.extendX(Clipperz.PM.Components.RecordDetail.FieldValueComponent, Clipperz.PM.Components.RecordDetail.AbstractFieldSubComponent, { | 46 | YAHOO.extendX(Clipperz.PM.Components.RecordDetail.FieldValueComponent, Clipperz.PM.Components.RecordDetail.AbstractFieldSubComponent, { |
47 | 47 | ||
48 | 'toString': function() { | 48 | 'toString': function() { |
49 | return "Clipperz.PM.Components.RecordDetail.FieldValueComponent component"; | 49 | return "Clipperz.PM.Components.RecordDetail.FieldValueComponent component"; |
50 | }, | 50 | }, |
51 | 51 | ||
52 | //------------------------------------------------------------------------- | 52 | //------------------------------------------------------------------------- |
53 | 53 | ||
54 | 'value': function() { | 54 | 'value': function() { |
55 | return this.recordField().value(); | 55 | return this.recordField().value(); |
56 | }, | 56 | }, |
57 | 57 | ||
58 | 'setValue': function(aValue) { | 58 | 'setValue': function(aValue) { |
59 | this.recordField().setValue(aValue); | 59 | this.recordField().setValue(aValue); |
60 | }, | 60 | }, |
61 | 61 | ||
62 | //------------------------------------------------------------------------- | 62 | //------------------------------------------------------------------------- |
63 | 63 | ||
64 | 'inputElement': function() { | 64 | 'inputElement': function() { |
65 | return this._inputElement; | 65 | return this._inputElement; |
66 | }, | 66 | }, |
67 | 67 | ||
68 | 'setInputElement': function(aValue) { | 68 | 'setInputElement': function(aValue) { |
69 | this._inputElement = aValue; | 69 | this._inputElement = aValue; |
70 | }, | 70 | }, |
71 | 71 | ||
72 | //------------------------------------------------------------------------- | 72 | //------------------------------------------------------------------------- |
73 | 73 | ||
74 | 'scrambledStatus': function() { | 74 | 'scrambledStatus': function() { |
75 | return this._scrambledStatus; | 75 | return this._scrambledStatus; |
76 | }, | 76 | }, |
77 | 77 | ||
78 | 'setScrambledStatus': function(aValue) { | 78 | 'setScrambledStatus': function(aValue) { |
79 | this._scrambledStatus = aValue; | 79 | this._scrambledStatus = aValue; |
80 | }, | 80 | }, |
81 | 81 | ||
82 | //------------------------------------------------------------------------- | 82 | //------------------------------------------------------------------------- |
83 | 83 | ||
84 | 'handleTypeChange': function() { | 84 | 'handleTypeChange': function() { |
85 | //MochiKit.Logging.logDebug(">>> handling type change - " + this.recordField().type()); | 85 | //MochiKit.Logging.logDebug(">>> handling type change - " + this.recordField().type()); |
86 | this.synchronizeComponentValues(); | 86 | this.synchronizeComponentValues(); |
87 | this.update(); | 87 | this.update(); |
88 | }, | 88 | }, |
89 | 89 | ||
90 | //------------------------------------------------------------------------- | 90 | //------------------------------------------------------------------------- |
91 | 91 | ||
92 | 'addrUrl': function() { | 92 | 'addrUrl': function() { |
93 | var result; | 93 | var result; |
94 | 94 | ||
95 | result = "http://maps.google.com/maps?q=" + this.value().split(' ').join('+'); | 95 | result = "http://maps.google.com/maps?q=" + this.value().split(' ').join('+'); |
96 | 96 | ||
97 | return result; | 97 | return result; |
98 | }, | 98 | }, |
99 | 99 | ||
100 | //------------------------------------------------------------------------- | 100 | //------------------------------------------------------------------------- |
101 | 101 | ||
102 | 'updateViewMode': function() { | 102 | 'updateViewMode': function() { |
103 | var scarmbledStatus; | 103 | var scarmbledStatus; |
104 | 104 | ||
105 | scrambledStatus = this.scrambledStatus() || 'SCRAMBLED'; | 105 | scrambledStatus = this.scrambledStatus() || 'SCRAMBLED'; |
106 | 106 | ||
107 | this.element().update(""); | 107 | this.element().update(""); |
108 | if (this.recordField().hidden() == false) { | 108 | if (this.recordField().hidden() == false) { |
109 | switch(this.recordField().type()) { | 109 | switch(this.recordField().type()) { |
110 | case 'TXT': | 110 | case 'TXT': |
111 | case 'PWD': | 111 | case 'PWD': |
112 | Clipperz.YUI.DomHelper.append(this.element().dom, {tag:'span', html:this.value()}); | 112 | Clipperz.YUI.DomHelper.append(this.element().dom, {tag:'span', html:this.value()}); |
113 | break; | 113 | break; |
114 | case 'URL': | 114 | case 'URL': |
115 | varurlLocation; | 115 | varurlLocation; |
116 | 116 | ||
117 | urlLocation = Clipperz.Base.sanitizeString(this.value()); | 117 | urlLocation = Clipperz.Base.sanitizeString(this.value()); |
118 | if (! (/^(https?|ftp|svn):\/\//.test(urlLocation))) { | 118 | if (! (/^(https?|ftp|svn):\/\//.test(urlLocation))) { |
119 | urlLocation = 'http://' + urlLocation; | 119 | urlLocation = 'http://' + urlLocation; |
120 | } | 120 | } |
121 | Clipperz.YUI.DomHelper.append(this.element().dom, {tag:'a', href:urlLocation, html:this.value(), target:'_blank'}); | 121 | Clipperz.YUI.DomHelper.append(this.element().dom, {tag:'a', href:urlLocation, html:this.value(), target:'_blank'}); |
122 | break; | 122 | break; |
123 | case 'DATE': | 123 | case 'DATE': |
124 | Clipperz.YUI.DomHelper.append(this.element().dom, {tag:'span', html:this.value()}); | 124 | Clipperz.YUI.DomHelper.append(this.element().dom, {tag:'span', html:this.value()}); |
125 | break; | 125 | break; |
126 | case 'ADDR': | 126 | case 'ADDR': |
127 | Clipperz.YUI.DomHelper.append(this.element().dom, {tag:'a', href:this.addrUrl(), html:this.value(), target:'_blank'}); | 127 | Clipperz.YUI.DomHelper.append(this.element().dom, {tag:'a', href:this.addrUrl(), html:this.value(), target:'_blank'}); |
128 | break; | 128 | break; |
129 | } | 129 | } |
130 | } else { | 130 | } else { |
131 | var tableElement; | 131 | var tableElement; |
132 | var tdElement; | 132 | var tdElement; |
133 | var inputElement; | 133 | var inputElement; |
134 | var passwordElementConfiguration; | 134 | var passwordElementConfiguration; |
135 | 135 | ||
136 | if (scrambledStatus == 'SCRAMBLED') { | 136 | if (scrambledStatus == 'SCRAMBLED') { |
137 | varscrambledInputElement; | 137 | varscrambledInputElement; |
138 | 138 | ||
139 | if ((Clipperz_IEisBroken === true) && (Clipperz.PM.Proxy.defaultProxy.isReadOnly())) { | 139 | if ((Clipperz_IEisBroken === true) && (Clipperz.PM.Proxy.defaultProxy.isReadOnly())) { |
140 | scrambledInputElement = {tag:'input', type:'password', value:"this.value()"}; | 140 | scrambledInputElement = {tag:'input', type:'password', value:"this.value()", autocomplete:"off"}; |
141 | } else { | 141 | } else { |
142 | scrambledInputElement = {tag:'input', type:'text', cls:'scrambledField', title:Clipperz.PM.Strings['recordDetailPasswordFieldTooltipLabel'], value:"this.value()"}; | 142 | scrambledInputElement = {tag:'input', type:'text', cls:'scrambledField', title:Clipperz.PM.Strings['recordDetailPasswordFieldTooltipLabel'], value:"this.value()", autocomplete:"off"}; |
143 | } | 143 | } |
144 | 144 | ||
145 | passwordElementConfiguration = | 145 | passwordElementConfiguration = |
146 | {tag:'table', border:'0', cellspacing:'2', cellpadding:'0', children:[ | 146 | {tag:'table', border:'0', cellspacing:'2', cellpadding:'0', children:[ |
147 | {tag:'tbody', children:[ | 147 | {tag:'tbody', children:[ |
148 | {tag:'tr', children:[ | 148 | {tag:'tr', children:[ |
149 | {tag:'td', valign:'top', children:[ | 149 | {tag:'td', valign:'top', children:[ |
150 | scrambledInputElement, | 150 | scrambledInputElement, |
151 | {tag:'a', cls:'scrambleLink', id:this.getId('scrambleLink'), href:'#', htmlString:Clipperz.PM.Strings['recordDetailPasswordFieldUnscrambleLabel']} | 151 | {tag:'a', cls:'scrambleLink', id:this.getId('scrambleLink'), href:'#', htmlString:Clipperz.PM.Strings['recordDetailPasswordFieldUnscrambleLabel']} |
152 | ]}, | 152 | ]}, |
153 | {tag:'td', valign:'top', children:[ | 153 | {tag:'td', valign:'top', children:[ |
154 | {tag:'span', cls:'scrambledFieldLabel', htmlString:Clipperz.PM.Strings['recordDetailPasswordFieldHelpLabel']} | 154 | {tag:'span', cls:'scrambledFieldLabel', htmlString:Clipperz.PM.Strings['recordDetailPasswordFieldHelpLabel']} |
155 | ]} | 155 | ]} |
156 | ]} | 156 | ]} |
157 | ]} | 157 | ]} |
158 | ]}; | 158 | ]}; |
159 | } else { | 159 | } else { |
160 | passwordElementConfiguration = | 160 | passwordElementConfiguration = |
161 | {tag:'div', children:[ | 161 | {tag:'div', children:[ |
162 | {tag:'input', type:'text', cls:'unscrambledField', value:"this.value()"}, | 162 | {tag:'input', type:'text', cls:'unscrambledField', value:"this.value()", autocomplete:"off"}, |
163 | {tag:'a', cls:'scrambleLink', id:this.getId('scrambleLink'), href:'#', htmlString:Clipperz.PM.Strings['recordDetailPasswordFieldScrambleLabel']} | 163 | {tag:'a', cls:'scrambleLink', id:this.getId('scrambleLink'), href:'#', htmlString:Clipperz.PM.Strings['recordDetailPasswordFieldScrambleLabel']} |
164 | ]}; | 164 | ]}; |
165 | } | 165 | } |
166 | 166 | ||
167 | tableElement = Clipperz.YUI.DomHelper.append(this.element().dom, passwordElementConfiguration, true); | 167 | tableElement = Clipperz.YUI.DomHelper.append(this.element().dom, passwordElementConfiguration, true); |
168 | 168 | ||
169 | inputElement = tableElement.getChildrenByTagName('input')[0]; | 169 | inputElement = tableElement.getChildrenByTagName('input')[0]; |
170 | inputElement.dom.value = this.value(); | 170 | inputElement.dom.value = this.value(); |
171 | inputElement.wrap({tag:'div', cls:'passwordBackground'}).setStyle('background-position', "0px -" + Math.min(128, Clipperz.PM.Crypto.passwordEntropy(this.value())) + "px"); | 171 | inputElement.wrap({tag:'div', cls:'passwordBackground'}).setStyle('background-position', "0px -" + Math.min(128, Clipperz.PM.Crypto.passwordEntropy(this.value())) + "px"); |
172 | 172 | ||
173 | MochiKit.Signal.connect(inputElement.dom, 'onfocus', this, 'selectHiddenFieldOnFocus'); | 173 | MochiKit.Signal.connect(inputElement.dom, 'onfocus', this, 'selectHiddenFieldOnFocus'); |
174 | MochiKit.Signal.connect(this.getDom('scrambleLink'), 'onclick', this, 'toggleScramble'); | 174 | MochiKit.Signal.connect(this.getDom('scrambleLink'), 'onclick', this, 'toggleScramble'); |
175 | } | 175 | } |
176 | }, | 176 | }, |
177 | 177 | ||
178 | //------------------------------------------------------------------------- | 178 | //------------------------------------------------------------------------- |
179 | 179 | ||
180 | 'updateEditMode': function() { | 180 | 'updateEditMode': function() { |
181 | var inputElement; | 181 | var inputElement; |
182 | var scarmbledStatus; | 182 | var scarmbledStatus; |
183 | 183 | ||
184 | scrambledStatus = this.scrambledStatus() || 'SCRAMBLED'; | 184 | scrambledStatus = this.scrambledStatus() || 'SCRAMBLED'; |
185 | 185 | ||
186 | this.element().update(""); | 186 | this.element().update(""); |
187 | switch(this.recordField().type()) { | 187 | switch(this.recordField().type()) { |
188 | case 'TXT': | 188 | case 'TXT': |
189 | case 'URL': | 189 | case 'URL': |
190 | case 'ADDR': | 190 | case 'ADDR': |
191 | inputElement = Clipperz.YUI.DomHelper.append(this.element().dom, {tag:'input', type:'text', value:"this.value()"}, true); | 191 | inputElement = Clipperz.YUI.DomHelper.append(this.element().dom, {tag:'input', type:'text', value:"this.value()", autocomplete:"off"}, true); |
192 | inputElement.dom.value = this.value(); | 192 | inputElement.dom.value = this.value(); |
193 | break; | 193 | break; |
194 | case 'PWD': | 194 | case 'PWD': |
195 | Clipperz.YUI.DomHelper.append(this.element().dom, {tag:'table', width:'100%', cellpadding:'0', cellspacing:'0', children:[ | 195 | Clipperz.YUI.DomHelper.append(this.element().dom, {tag:'table', width:'100%', cellpadding:'0', cellspacing:'0', children:[ |
196 | {tag:'tbody', children:[ | 196 | {tag:'tbody', children:[ |
197 | {tag:'tr', children:[ | 197 | {tag:'tr', children:[ |
198 | {tag:'td', valign:'top', children:[ | 198 | {tag:'td', valign:'top', children:[ |
199 | {tag:'input', type:((scrambledStatus == 'SCRAMBLED') ? 'password' : 'text'), id:this.getId('passwordInputElement'), value:"this.value()"}, | 199 | {tag:'input', type:((scrambledStatus == 'SCRAMBLED') ? 'password' : 'text'), id:this.getId('passwordInputElement'), value:"this.value()", autocomplete:"off"}, |
200 | {tag:'a', cls:'scrambleLink', id:this.getId('scrambleLink'), href:'#', html:(scrambledStatus == 'SCRAMBLED' ? Clipperz.PM.Strings['recordDetailPasswordFieldUnscrambleLabel'] : Clipperz.PM.Strings['recordDetailPasswordFieldScrambleLabel'])} | 200 | {tag:'a', cls:'scrambleLink', id:this.getId('scrambleLink'), href:'#', html:(scrambledStatus == 'SCRAMBLED' ? Clipperz.PM.Strings['recordDetailPasswordFieldUnscrambleLabel'] : Clipperz.PM.Strings['recordDetailPasswordFieldScrambleLabel'])} |
201 | ]}, | 201 | ]}, |
202 | {tag:'td', valign:'top', children:[ | 202 | {tag:'td', valign:'top', children:[ |
203 | {tag:'div', id:this.getId('passwordGenerator'), cls:'Clipperz_PasswordGenerator_button', html:' '} | 203 | {tag:'div', id:this.getId('passwordGenerator'), cls:'Clipperz_PasswordGenerator_button', html:' '} |
204 | ]} | 204 | ]} |
205 | ]} | 205 | ]} |
206 | ]} | 206 | ]} |
207 | ]}) | 207 | ]}) |
208 | inputElement = this.getElement('passwordInputElement'); | 208 | inputElement = this.getElement('passwordInputElement'); |
209 | inputElement.dom.value = this.value(); | 209 | inputElement.dom.value = this.value(); |
210 | new Clipperz.PM.Components.PasswordEntropyDisplay(this.getElement('passwordInputElement')); | 210 | new Clipperz.PM.Components.PasswordEntropyDisplay(this.getElement('passwordInputElement')); |
211 | new Clipperz.PM.Components.PasswordGenerator(this.getElement('passwordGenerator'), this); | 211 | new Clipperz.PM.Components.PasswordGenerator(this.getElement('passwordGenerator'), this); |
212 | MochiKit.Signal.connect(this.getDom('scrambleLink'), 'onclick', this, 'toggleScramble'); | 212 | MochiKit.Signal.connect(this.getDom('scrambleLink'), 'onclick', this, 'toggleScramble'); |
213 | break; | 213 | break; |
214 | // case 'NOTE': | 214 | // case 'NOTE': |
215 | // inputElement = Clipperz.YUI.DomHelper.append(this.element().dom, {tag:'textarea', rows:'5', html:this.value()}, true); | 215 | // inputElement = Clipperz.YUI.DomHelper.append(this.element().dom, {tag:'textarea', rows:'5', html:this.value()}, true); |
216 | // break | 216 | // break |
217 | case 'DATE': | 217 | case 'DATE': |
218 | inputElement = Clipperz.YUI.DomHelper.append(this.element().dom, {tag:'input', type:'text', value:"this.value()"}, true); | 218 | inputElement = Clipperz.YUI.DomHelper.append(this.element().dom, {tag:'input', type:'text', value:"this.value()", autocomplete:"off"}, true); |
219 | inputElement.dom.value = this.value(); | 219 | inputElement.dom.value = this.value(); |
220 | break; | 220 | break; |
221 | } | 221 | } |
222 | 222 | ||
223 | this.setInputElement(inputElement); | 223 | this.setInputElement(inputElement); |
224 | }, | 224 | }, |
225 | 225 | ||
226 | //------------------------------------------------------------------------- | 226 | //------------------------------------------------------------------------- |
227 | 227 | ||
228 | 'synchronizeComponentValues': function() { | 228 | 'synchronizeComponentValues': function() { |
229 | //MochiKit.Logging.logDebug(">>> FieldValueComponent.synchronizeComponentValues"); | 229 | //MochiKit.Logging.logDebug(">>> FieldValueComponent.synchronizeComponentValues"); |
230 | if (this.inputElement() != null) { | 230 | if (this.inputElement() != null) { |
231 | var value; | 231 | var value; |
232 | 232 | ||
233 | switch(this.recordField().type()) { | 233 | switch(this.recordField().type()) { |
234 | case 'TXT': | 234 | case 'TXT': |
235 | case 'URL': | 235 | case 'URL': |
236 | case 'ADDR': | 236 | case 'ADDR': |
237 | case 'PWD': | 237 | case 'PWD': |
238 | case 'DATE': | 238 | case 'DATE': |
239 | value = this.inputElement().dom.value; | 239 | value = this.inputElement().dom.value; |
240 | break; | 240 | break; |
241 | } | 241 | } |
242 | this.setValue(value); | 242 | this.setValue(value); |
243 | } | 243 | } |
244 | //MochiKit.Logging.logDebug("<<< FieldValueComponent.synchronizeComponentValues"); | 244 | //MochiKit.Logging.logDebug("<<< FieldValueComponent.synchronizeComponentValues"); |
245 | }, | 245 | }, |
246 | 246 | ||
247 | //------------------------------------------------------------------------- | 247 | //------------------------------------------------------------------------- |
248 | 248 | ||
249 | 'selectHiddenFieldOnFocus': function(anEvent) { | 249 | 'selectHiddenFieldOnFocus': function(anEvent) { |
250 | anEvent.src().select(); | 250 | anEvent.src().select(); |
251 | }, | 251 | }, |
252 | 252 | ||
253 | //------------------------------------------------------------------------- | 253 | //------------------------------------------------------------------------- |
254 | 254 | ||
255 | 'toggleScramble': function(anEvent) { | 255 | 'toggleScramble': function(anEvent) { |
256 | this.synchronizeComponentValues(); | 256 | this.synchronizeComponentValues(); |
257 | 257 | ||
258 | if (this.scrambledStatus() == 'SCRAMBLED') { | 258 | if (this.scrambledStatus() == 'SCRAMBLED') { |
259 | this.setScrambledStatus('UNSCRAMBLED'); | 259 | this.setScrambledStatus('UNSCRAMBLED'); |
260 | } else { | 260 | } else { |
261 | this.setScrambledStatus('SCRAMBLED'); | 261 | this.setScrambledStatus('SCRAMBLED'); |
262 | }; | 262 | }; |
263 | 263 | ||
264 | this.update(); | 264 | this.update(); |
265 | }, | 265 | }, |
266 | 266 | ||
267 | //------------------------------------------------------------------------- | 267 | //------------------------------------------------------------------------- |
268 | __syntaxFix__: "syntax fix" | 268 | __syntaxFix__: "syntax fix" |
269 | }); | 269 | }); |
270 | 270 | ||