chore: simplify validUrl fn

This commit is contained in:
zacanger 2019-10-17 19:54:01 -06:00
parent 41d1af6fd5
commit 5ae00abb2a
No known key found for this signature in database
GPG key ID: F758A5EBFC761412

30
ui/src/utils.ts vendored
View file

@ -75,11 +75,11 @@ export function mdToHtml(text: string) {
return {__html: md.render(text)}; return {__html: md.render(text)};
} }
export function getUnixTime(text: string): number { export function getUnixTime(text: string): number {
return text ? new Date(text).getTime()/1000 : undefined; return text ? new Date(text).getTime()/1000 : undefined;
} }
export function addTypeInfo<T>(arr: Array<T>, name: string): Array<{type_: string, data: T}> { export function addTypeInfo<T>(arr: Array<T>, name: string): Array<{type_: string, data: T}> {
return arr.map(e => {return {type_: name, data: e}}); return arr.map(e => {return {type_: name, data: e}});
} }
@ -89,9 +89,9 @@ export function canMod(user: User, modIds: Array<number>, creator_id: number, on
let yourIndex = modIds.findIndex(id => id == user.id); let yourIndex = modIds.findIndex(id => id == user.id);
if (yourIndex == -1) { if (yourIndex == -1) {
return false; return false;
} else { } else {
// onSelf +1 on mod actions not for yourself, IE ban, remove, etc // onSelf +1 on mod actions not for yourself, IE ban, remove, etc
modIds = modIds.slice(0, yourIndex+(onSelf ? 0 : 1)); modIds = modIds.slice(0, yourIndex+(onSelf ? 0 : 1));
return !modIds.includes(creator_id); return !modIds.includes(creator_id);
} }
} else { } else {
@ -116,13 +116,11 @@ export function isVideo(url: string) {
} }
export function validURL(str: string) { export function validURL(str: string) {
var pattern = new RegExp('^(https?:\\/\\/)?'+ // protocol try {
'((([a-z\\d]([a-z\\d-]*[a-z\\d])*)\\.)+[a-z]{2,}|'+ // domain name return !!new URL(str);
'((\\d{1,3}\\.){3}\\d{1,3}))'+ // OR ip (v4) address } catch {
'(\\:\\d+)?(\\/[-a-z\\d%_.~+]*)*'+ // port and path return false;
'(\\?[;&a-z\\d%_.~+=-]*)?'+ // query string }
'(\\#[-a-z\\d_]*)?$','i'); // fragment locator
return !!pattern.test(str);
} }
export function capitalizeFirstLetter(str: string): string { export function capitalizeFirstLetter(str: string): string {
@ -176,9 +174,9 @@ export function debounce(func: any, wait: number = 500, immediate: boolean = fal
// and not already in a timeout then the answer is: Yes // and not already in a timeout then the answer is: Yes
var callNow = immediate && !timeout; var callNow = immediate && !timeout;
// This is the basic debounce behaviour where you can call this // This is the basic debounce behaviour where you can call this
// function several times, but it will only execute once // function several times, but it will only execute once
// [before or after imposing a delay]. // [before or after imposing a delay].
// Each time the returned function is called, the timer starts over. // Each time the returned function is called, the timer starts over.
clearTimeout(timeout); clearTimeout(timeout);
@ -192,7 +190,7 @@ export function debounce(func: any, wait: number = 500, immediate: boolean = fal
// Check if the function already ran with the immediate flag // Check if the function already ran with the immediate flag
if (!immediate) { if (!immediate) {
// Call the original function with apply // Call the original function with apply
// apply lets you define the 'this' object as well as the arguments // apply lets you define the 'this' object as well as the arguments
// (both captured before setTimeout) // (both captured before setTimeout)
func.apply(context, args); func.apply(context, args);
} }
@ -249,6 +247,6 @@ export function setTheme(theme: string = 'darkly') {
styleSheet.removeAttribute("disabled"); styleSheet.removeAttribute("disabled");
} else { } else {
styleSheet.setAttribute("disabled", "disabled"); styleSheet.setAttribute("disabled", "disabled");
} }
} }
} }