Fix for Chrome double submit issue, #3738
Ylian Saint-Hilaire committed
Mar 5, 2022 at 12:26 UTC
4a4eacf025ffc8d703aa60569d189f7011a6db13
1 file changed
+21
-16
views/login2.handlebars
+21
-16
@@ -61,7 +61,7 @@
61
<img id="loginPicture" />
62
<div style="font-size:46px;font-family:Arial,Helvetica,sans-serif;font-weight:bold;padding-bottom:10px;color:#c8c8c8;text-shadow: 2px 2px 2px #000;">{{{title1}}}<sup style="font-size:20px"> {{{title2}}}</sup></div>
63
<div id=loginpanel style="display:none;box-shadow:1px 1px 4px #000">
64
- <form method=post>
64
+ <form id=loginpanelform method=post>
65
<input type=hidden name=action value=login />
66
<div id=message1></div>
67
<div id="loginuserpassdiv" style="display:none">
@@ -83,7 +83,7 @@
83
</tr>
84
<tr>
85
<td>
86
- <input id=loginButton style="box-sizing:border-box;width:280px;border:0;border-radius:4px;padding:6px" type=submit value="Log In" disabled="disabled" />
86
+ <input id=loginButton style="box-sizing:border-box;width:280px;border:0;border-radius:4px;padding:6px" onclick="submitButtonClicked('loginpanelform')" type=button value="Log In" disabled="disabled" />
87
</td>
88
</tr>
89
</table>
@@ -111,7 +111,7 @@
111
</form>
112
</div>
113
<div id=createpanel style="display:none;position:relative">
114
- <form method=post>
114
+ <form id=createpanelform method=post>
115
<input type=hidden name=action value=createaccount />
116
<div id=message2></div>
117
<div>
@@ -145,7 +145,7 @@
145
</tr>
146
<tr>
147
<td colspan=2>
148
- <div style=float:right><input id=createButton type=submit value="Create Account" disabled="disabled" /></div>
148
+ <div style=float:right><input id=createButton type="button" onclick="submitButtonClicked('createpanelform')" value="Create Account" disabled="disabled" /></div>
149
<div id=passWarning style="padding-top:6px"></div>
150
</td>
151
</tr>
@@ -155,7 +155,7 @@
155
</form>
156
</div>
157
<div id=resetpanel style="display:none">
158
- <form method=post>
158
+ <form id=resetpanelform method=post>
159
<input type=hidden name=action value=resetaccount />
160
<div id=message3></div>
161
<div>
@@ -169,7 +169,7 @@
169
</tr>
170
<tr>
171
<td>
172
- <input id=eresetButton style="box-sizing:border-box;width:280px;border:0;border-radius:4px;padding:6px" type=submit value="Reset Account" disabled="disabled" />
172
+ <input id=eresetButton style="box-sizing:border-box;width:280px;border:0;border-radius:4px;padding:6px" type="button" onclick="submitButtonClicked('resetpanelform')" value="Reset Account" disabled="disabled" />
173
</td>
174
</tr>
175
</table>
@@ -178,7 +178,7 @@
178
</form>
179
</div>
180
<div id=tokenpanel style="display:none">
181
- <form method=post {{{autocomplete}}}=off>
181
+ <form id=tokenpanelform method=post {{{autocomplete}}}=off>
182
<input type=hidden name=action value=tokenlogin />
183
<input type=hidden name=hwstate value="{{{hwstate}}}" />
184
<div id=message4></div>
@@ -192,7 +192,7 @@
192
<tr>
193
<td>
194
<div>
195
- <input id=tokenOkButton style="box-sizing:border-box;width:280px;border:0;border-radius:4px;padding:6px" type=submit value="Log In" disabled="disabled" />
195
+ <input id=tokenOkButton style="box-sizing:border-box;width:280px;border:0;border-radius:4px;padding:6px" type="button" onclick="submitButtonClicked('tokenpanelform')" value="Log In" disabled="disabled" />
196
</div>
197
</td>
198
</tr>
@@ -218,7 +218,7 @@
218
</form>
219
</div>
220
<div id=resettokenpanel style="display:none">
221
- <form method=post>
221
+ <form id=resettokenpanelform method=post>
222
<input type=hidden name=action value=resetaccount />
223
<div id=message5></div>
224
<table style="width:100%">
@@ -231,7 +231,7 @@
231
<tr>
232
<td>
233
<div>
234
- <input id=resetTokenOkButton style="box-sizing:border-box;width:280px;border:0;border-radius:4px;padding:6px" type=submit value="Log In" disabled="disabled" />
234
+ <input id=resetTokenOkButton style="box-sizing:border-box;width:280px;border:0;border-radius:4px;padding:6px" type="button" onclick="submitButtonClicked('resetpanelform')" value="Log In" disabled="disabled" />
235
</div>
236
</td>
237
</tr>
@@ -252,7 +252,7 @@
252
</form>
253
</div>
254
<div id=resetpasswordpanel style="display:none;position:relative">
255
- <form method=post>
255
+ <form id=resetpasswordpanelform method=post>
256
<input type=hidden name=action value=resetpassword />
257
<div id=message6></div>
258
<div id="rpasswordPolicyCallout" style="display:none"></div>
@@ -271,7 +271,7 @@
271
</tr>
272
<tr>
273
<td colspan=2>
274
- <div style=float:right><input id=resetPassButton type=submit value="Reset Password" disabled="disabled" /></div>
274
+ <div style=float:right><input id=resetPassButton type="button" onclick="submitButtonClicked('resetpasswordpanel')" value="Reset Password" disabled="disabled" /></div>
275
<div id=rpassWarning style="padding-top:6px"></div>
276
</td>
277
</tr>
@@ -281,7 +281,7 @@
281
</form>
282
</div>
283
<div id=checkemailpanel style="display:none;position:relative">
284
- <form method=post>
284
+ <form id=checkemailpanelform method=post>
285
<input type=hidden name=action value=checkemail />
286
<div id=message7></div>
287
<table id="checkCheckOperations" style="width:100%;display:none">
@@ -295,7 +295,7 @@
295
<div>
296
<input id=changeEmailButton type=button value="Change Email Address" onclick="changeEmailAddress()" />
297
<input id=checkEmailButton2 type=button value="Resend Confirmation Email" onclick="resentEmailConfirmation()" />
298
- <input id=checkEmailButton type=submit style="display:none" />
298
+ <input id=checkEmailButton type="button" onclick="submitButtonClicked('checkemailpanelform')" style="display:none" />
299
<input id=checkEmailVal name=email type="hidden" value="" />
300
</div>
301
</td>
@@ -306,7 +306,7 @@
306
</form>
307
</div>
308
<div id=waitpushpanel style="display:none">
309
- <form method=post>
309
+ <form id=waitpushpanelform method=post>
310
<input type=hidden name=action value=pushlogin />
311
<div id=message8></div>
312
<table style="width:100%">
@@ -324,7 +324,7 @@
324
<hr /><a onclick="return xgo(1,event);" href="#" style=cursor:pointer>Back to login</a>
325
<input id=pushtokenformargs name="urlargs" type="hidden" value="" />
326
<input id=pushtokenInput name="hwstate" type="hidden" value="" />
327
- <input id=pushOkButton type=submit style="display:none" />
327
+ <input id=pushOkButton onclick="submitButtonClicked('waitpushpanelform')" style="display:none" />
328
</form>
329
</div>
330
</td>
@@ -383,6 +383,7 @@
383
var authStrategies = '{{{authStrategies}}}'.split(',');
384
var tokenTimeout = parseInt('{{{tokenTimeout}}}');
385
var websocket = null;
386
+ var formSubmitted = false;
387
388
function startup() {
389
if (decodeURIComponent('{{{loginpicture}}}') == 'true') { Q('loginPicture').src = "loginlogo.png"; }
@@ -685,6 +686,10 @@
686
}
687
}
688
689
+ function submitButtonClicked(v) {
690
+ if (!formSubmitted) { formSubmitted = true; document.getElementById(v).submit(); }
691
+ }
692
+
693
function validateLogin(box, e) {
694
var ok = ((Q('username').value.length > 0) && (Q('username').value.indexOf(' ') == -1) && (Q('password').value.length > 0));
695
QE('loginButton', ok);