Delay filling the form

pull/83/head
Sheng 2019-08-22 19:27:47 +08:00
parent 3a27cedf9d
commit a11d5a01e5
1 changed files with 19 additions and 16 deletions

View File

@ -56,6 +56,7 @@ jQuery(function($){
opts_keys = ['bgcolor', 'title', 'encoding', 'command'], opts_keys = ['bgcolor', 'title', 'encoding', 'command'],
url_form_data = {}, url_form_data = {},
url_opts_data = {}, url_opts_data = {},
validated_form_data,
event_origin, event_origin,
hostname_tester = /((^\s*((([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]))\s*$)|(^\s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(%.+)?\s*$))|(^\s*((?=.{1,255}$)(?=.*[A-Za-z].*)[0-9A-Za-z](?:(?:[0-9A-Za-z]|\b-){0,61}[0-9A-Za-z])?(?:\.[0-9A-Za-z](?:(?:[0-9A-Za-z]|\b-){0,61}[0-9A-Za-z])?)*)\s*$)/; hostname_tester = /((^\s*((([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]))\s*$)|(^\s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(%.+)?\s*$))|(^\s*((?=.{1,255}$)(?=.*[A-Za-z].*)[0-9A-Za-z](?:(?:[0-9A-Za-z]|\b-){0,61}[0-9A-Za-z])?(?:\.[0-9A-Za-z](?:(?:[0-9A-Za-z]|\b-){0,61}[0-9A-Za-z])?)*)\s*$)/;
@ -307,9 +308,13 @@ jQuery(function($){
} }
function log_status(text) { function log_status(text, fill_form) {
console.log(text); console.log(text);
status.html(text.split('\n').join('<br/>')); status.html(text.split('\n').join('<br/>'));
if (fill_form && validated_form_data) {
restore_items(fields.concat(['password']), validated_form_data);
}
} }
@ -317,14 +322,14 @@ jQuery(function($){
btn.prop('disabled', false); btn.prop('disabled', false);
if (resp.status !== 200) { if (resp.status !== 200) {
log_status(resp.status + ': ' + resp.statusText); log_status(resp.status + ': ' + resp.statusText, true);
state = DISCONNECTED; state = DISCONNECTED;
return; return;
} }
var msg = resp.responseJSON; var msg = resp.responseJSON;
if (!msg.id) { if (!msg.id) {
log_status(msg.status); log_status(msg.status, true);
state = DISCONNECTED; state = DISCONNECTED;
return; return;
} }
@ -502,12 +507,11 @@ jQuery(function($){
}; };
sock.onclose = function(e) { sock.onclose = function(e) {
console.log(e);
term.destroy(); term.destroy();
term = undefined; term = undefined;
sock = undefined; sock = undefined;
reset_wssh(); reset_wssh();
status.text(e.reason); log_status(e.reason, true);
state = DISCONNECTED; state = DISCONNECTED;
default_title = 'WebSSH'; default_title = 'WebSSH';
title_element.text = default_title; title_element.text = default_title;
@ -559,6 +563,7 @@ jQuery(function($){
pk = data.get('privatekey'), pk = data.get('privatekey'),
result = { result = {
valid: false, valid: false,
data: data,
title: '' title: ''
}, },
errors = [], size; errors = [], size;
@ -634,8 +639,6 @@ jQuery(function($){
enable_file_inputs(inputs); enable_file_inputs(inputs);
function ajax_post() { function ajax_post() {
store_items(fields, data);
status.text(''); status.text('');
btn.prop('disabled', true); btn.prop('disabled', true);
@ -668,7 +671,7 @@ jQuery(function($){
ajax_post(); ajax_post();
} }
return result.title; return result;
} }
@ -676,10 +679,9 @@ jQuery(function($){
// use data from the arguments // use data from the arguments
var form = document.querySelector(form_id), var form = document.querySelector(form_id),
url = data.url || form.action, url = data.url || form.action,
_xsrf = form.querySelector('input[name="_xsrf"]'), _xsrf = form.querySelector('input[name="_xsrf"]');
data_wrapped = wrap_object(data);
var result = validate_form_data(data_wrapped); var result = validate_form_data(wrap_object(data));
if (!result.valid) { if (!result.valid) {
log_status(result.errors.join('\n')); log_status(result.errors.join('\n'));
return; return;
@ -690,9 +692,6 @@ jQuery(function($){
data._origin = event_origin; data._origin = event_origin;
} }
restore_items(fields.concat(['password']), data_wrapped);
store_items(fields, data_wrapped);
$.ajax({ $.ajax({
url: url, url: url,
type: 'post', type: 'post',
@ -700,7 +699,7 @@ jQuery(function($){
complete: ajax_complete_callback complete: ajax_complete_callback
}); });
return result.title; return result;
} }
@ -735,7 +734,11 @@ jQuery(function($){
if (result) { if (result) {
state = CONNECTING; state = CONNECTING;
default_title = result; default_title = result.title;
if (hostname) {
validated_form_data = result.data;
}
store_items(fields, result.data);
} }
} }