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 | |||
@@ -108,143 +108,143 @@ YAHOO.extendX(Clipperz.PM.Components.RecordDetail.FieldValueComponent, Clipperz. | |||
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(); |