88 lines
No EOL
5.5 KiB
TypeScript
88 lines
No EOL
5.5 KiB
TypeScript
/// <reference path="../../utils/modal.ts" />
|
|
namespace Modals {
|
|
export function spawnConnectModal(defaultHost: string = "ts.TeaSpeak.de") {
|
|
const connectModal = createModal({
|
|
header: function() {
|
|
let header = $.spawn("div");
|
|
header.text("Create a new connection");
|
|
return header;
|
|
},
|
|
body: function () {
|
|
let tag = $("#tmpl_connect").contents().clone();
|
|
|
|
|
|
let updateFields = function () {
|
|
let button = tag.parents(".modal-content").find(".connect_connect_button");
|
|
|
|
let field_address = tag.find(".connect_address");
|
|
let address = field_address.val().toString();
|
|
let flag_address = !!address.match(Regex.IP_V4) || !!address.match(Regex.DOMAIN);
|
|
|
|
let field_nickname = tag.find(".connect_nickname");
|
|
let nickname = field_nickname.val().toString();
|
|
let flag_nickname = nickname.length >= 3 && nickname.length <= 32;
|
|
|
|
if(flag_address) {
|
|
if(field_address.hasClass("invalid_input"))
|
|
field_address.removeClass("invalid_input");
|
|
} else {
|
|
if(!field_address.hasClass("invalid_input"))
|
|
field_address.addClass("invalid_input");
|
|
}
|
|
|
|
if(flag_nickname) {
|
|
if(field_nickname.hasClass("invalid_input"))
|
|
field_nickname.removeClass("invalid_input");
|
|
} else {
|
|
if(!field_nickname.hasClass("invalid_input"))
|
|
field_nickname.addClass("invalid_input");
|
|
}
|
|
|
|
if(!flag_nickname || !flag_address) {
|
|
button.attr("disabled", "true");
|
|
} else {
|
|
button.removeAttr("disabled");
|
|
}
|
|
}
|
|
tag.find(".connect_address").val(defaultHost);
|
|
tag.find(".connect_address").on("keyup", () => updateFields());
|
|
tag.find(".connect_nickname").on("keyup", () => updateFields());
|
|
//connect_address
|
|
return tag;
|
|
},
|
|
footer: function () {
|
|
let tag = $.spawn("div");
|
|
tag.css("text-align", "right");
|
|
tag.css("margin-top", "3px");
|
|
tag.css("margin-bottom", "6px");
|
|
tag.addClass("modal-button-group");
|
|
|
|
let button = $.spawn("button");
|
|
button.addClass("connect_connect_button");
|
|
button.text("Connect");
|
|
button.on("click", function () {
|
|
connectModal.close();
|
|
|
|
let field_address = tag.parents(".modal-content").find(".connect_address");
|
|
let address = field_address.val().toString();
|
|
globalClient.startConnection(address);
|
|
});
|
|
tag.append(button);
|
|
return tag;
|
|
},
|
|
|
|
width: 600,
|
|
//closeable: false
|
|
});
|
|
connectModal.open();
|
|
}
|
|
}
|
|
|
|
let Regex = {
|
|
//DOMAIN<:port>
|
|
DOMAIN: /^(localhost|((([a-zA-Z0-9_-]{0,63}\.){0,253})?[a-zA-Z0-9_-]{0,63}\.[a-zA-Z]{2,5}))(|:(6553[0-5]|655[0-2][0-9]|65[0-4][0-9]{2}|6[0-4][0-9]{3}|[0-5]?[0-9]{1,4}))$/,
|
|
//IP<:port>
|
|
IP_V4: /(^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?))(|:(6553[0-5]|655[0-2][0-9]|65[0-4][0-9]{2}|6[0-4][0-9]{3}|[0-5]?[0-9]{1,4}))$/,
|
|
IP_V6: /(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))/,
|
|
IP: /^(([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])$|^(([a-zA-Z]|[a-zA-Z][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)*([A-Za-z]|[A-Za-z][A-Za-z0-9\-]*[A-Za-z0-9])$|^\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*$/,
|
|
}; |