From 96a2f0d92d239d6c62c6d27d6a0b5842ea485963 Mon Sep 17 00:00:00 2001 From: zacanger Date: Thu, 17 Oct 2019 19:54:01 -0600 Subject: [PATCH 1/2] chore: simplify validUrl fn --- ui/src/utils.ts | 30 ++++++++++++++---------------- 1 file changed, 14 insertions(+), 16 deletions(-) diff --git a/ui/src/utils.ts b/ui/src/utils.ts index cf2908824..26d4ec7c9 100644 --- a/ui/src/utils.ts +++ b/ui/src/utils.ts @@ -75,11 +75,11 @@ export function mdToHtml(text: string) { 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; } -export function addTypeInfo(arr: Array, name: string): Array<{type_: string, data: T}> { +export function addTypeInfo(arr: Array, name: string): Array<{type_: string, data: T}> { return arr.map(e => {return {type_: name, data: e}}); } @@ -89,9 +89,9 @@ export function canMod(user: User, modIds: Array, creator_id: number, on let yourIndex = modIds.findIndex(id => id == user.id); if (yourIndex == -1) { return false; - } else { + } else { // 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); } } else { @@ -116,13 +116,11 @@ export function isVideo(url: string) { } export function validURL(str: string) { - var pattern = new RegExp('^(https?:\\/\\/)?'+ // protocol - '((([a-z\\d]([a-z\\d-]*[a-z\\d])*)\\.)+[a-z]{2,}|'+ // domain name - '((\\d{1,3}\\.){3}\\d{1,3}))'+ // OR ip (v4) address - '(\\:\\d+)?(\\/[-a-z\\d%_.~+]*)*'+ // port and path - '(\\?[;&a-z\\d%_.~+=-]*)?'+ // query string - '(\\#[-a-z\\d_]*)?$','i'); // fragment locator - return !!pattern.test(str); + try { + return !!new URL(str); + } catch { + return false; + } } 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 var callNow = immediate && !timeout; - // This is the basic debounce behaviour where you can call this - // function several times, but it will only execute once - // [before or after imposing a delay]. + // This is the basic debounce behaviour where you can call this + // function several times, but it will only execute once + // [before or after imposing a delay]. // Each time the returned function is called, the timer starts over. 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 if (!immediate) { // 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) func.apply(context, args); } @@ -249,6 +247,6 @@ export function setTheme(theme: string = 'darkly') { styleSheet.removeAttribute("disabled"); } else { styleSheet.setAttribute("disabled", "disabled"); - } + } } } From fc5cb8601136e3e36b319fff2973ee46586fe37a Mon Sep 17 00:00:00 2001 From: zacanger Date: Thu, 17 Oct 2019 21:54:29 -0600 Subject: [PATCH 2/2] revert whitespace changes --- ui/src/utils.ts | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/ui/src/utils.ts b/ui/src/utils.ts index 26d4ec7c9..350a8205a 100644 --- a/ui/src/utils.ts +++ b/ui/src/utils.ts @@ -75,11 +75,11 @@ export function mdToHtml(text: string) { 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; } -export function addTypeInfo(arr: Array, name: string): Array<{type_: string, data: T}> { +export function addTypeInfo(arr: Array, name: string): Array<{type_: string, data: T}> { return arr.map(e => {return {type_: name, data: e}}); } @@ -89,9 +89,9 @@ export function canMod(user: User, modIds: Array, creator_id: number, on let yourIndex = modIds.findIndex(id => id == user.id); if (yourIndex == -1) { return false; - } else { + } else { // 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); } } else { @@ -174,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 var callNow = immediate && !timeout; - // This is the basic debounce behaviour where you can call this - // function several times, but it will only execute once - // [before or after imposing a delay]. + // This is the basic debounce behaviour where you can call this + // function several times, but it will only execute once + // [before or after imposing a delay]. // Each time the returned function is called, the timer starts over. clearTimeout(timeout); @@ -190,7 +190,7 @@ export function debounce(func: any, wait: number = 500, immediate: boolean = fal // Check if the function already ran with the immediate flag if (!immediate) { // 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) func.apply(context, args); } @@ -247,6 +247,6 @@ export function setTheme(theme: string = 'darkly') { styleSheet.removeAttribute("disabled"); } else { styleSheet.setAttribute("disabled", "disabled"); - } + } } }