ems-web-app-utils
Version:
Utility methods that are intended for use in Angular.io [web applications developed by Educational Media Solutions](https://github.com/spencech/ems-web-app-template)
1 lines • 22.8 kB
Source Map (JSON)
{"version":3,"file":"ems-web-app-utils.mjs","sources":["../../src/lib/utils.service.ts","../../src/lib/utils.component.ts","../../src/lib/utils.module.ts","../../src/public-api.ts","../../src/ems-web-app-utils.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class UtilsService {\n\n constructor() { }\n}\n","import { Component, OnInit } from '@angular/core';\n\n@Component({\n selector: 'lib-utils',\n template: `\n <p>\n utils works!\n </p>\n `,\n styles: [\n ]\n})\nexport class UtilsComponent implements OnInit {\n\n constructor() { }\n\n ngOnInit(): void {\n }\n\n}\n","import { NgModule } from '@angular/core';\nimport { UtilsComponent } from './utils.component';\nimport * as _ from 'underscore';\n\nexport function alphabetize(...parameters: any[]): any {\n if (typeof parameters[0] === 'string') {\n // if this method is supplied as a callback to Array.sort\n const a = parameters[0];\n const b = parameters[1];\n if (a > b) return 1;\n if (a < b) return -1;\n return 0;\n } else {\n // if we're sorting a list with a supplied key to alphabetize\n const list = parameters[0];\n const property = parameters[1];\n list.sort((a: any, b: any) => {\n if (a[property] > b[property]) return 1;\n if (a[property] < b[property]) return -1;\n return 0;\n });\n return list;\n }\n}\n\nexport function clone(obj: any): any {\n if (obj === null || obj === undefined) return obj;\n return JSON.parse(JSON.stringify(obj));\n}\n\nexport function convertToEST(date: string): string {\n const gmtDate = new Date(date + \" GMT\");\n const options: Intl.DateTimeFormatOptions = {\n timeZone: 'America/New_York',\n year: \"numeric\",\n month: 'numeric',\n day: 'numeric',\n hour: 'numeric',\n minute: 'numeric',\n second: 'numeric',\n hour12: true\n };\n \n const formatter = new Intl.DateTimeFormat('en-US', options);\n return formatter.format(gmtDate);\n}\n\nexport function dateStrings(date?: Date) {\n date = date || new Date();\n return {\n year: date.getFullYear(),\n month: (date.getMonth() + 1).toString().padStart(2, '0'),\n date: date.getDate().toString().padStart(2, '0'),\n time: `${date.getHours().toString().padStart(2, '0')}:${date.getMinutes().toString().padStart(2, '0')}`,\n seconds: date.getSeconds().toString().padStart(2, '0'),\n };\n}\n\nexport function delay(method: () => void, ms: number = 0): number {\n return window.setTimeout(method, ms);\n}\n\nexport function download(content: string, name: string, extension: string = 'csv') {\n const blob = new Blob([content]);\n name = kebab(name);\n\n if ((window.navigator as any).msSaveOrOpenBlob) (window.navigator as any).msSaveBlob(blob, `${name}.${extension}`);\n else {\n const a = window.document.createElement('a');\n a.href = window.URL.createObjectURL(blob);\n a.download = `${name}.${extension}`;\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n }\n}\n\nexport function empty(e: any): boolean {\n return falsy(e);\n}\n\nexport function enumKeys<O extends object, K extends keyof O = keyof O>(obj: O): K[] {\n return Object.keys(obj).filter(k => Number.isNaN(+k)) as K[];\n}\n\nexport function enumValues<O extends object, K extends keyof O = keyof O>(obj: O): any[] {\n const output = []\n for (const value of enumKeys(obj)) {\n output.push(obj[value]); \n }\n return output as any[];\n}\n\nexport function falsy(e: any): boolean {\n if (typeof e === 'string' && trim(e).match(/^false$/i)) return true;\n if (typeof e === 'string') return _.isEmpty(e.replace(/\\s+/gim, ''));\n if (typeof e === 'boolean') return e === false;\n if (!isNaN(parseInt(e, 10))) return e === 0;\n return _.isEmpty(e);\n}\n\nexport function focus(selector: string): number {\n const element = document.querySelector(selector) as HTMLElement;\n if(!element || !element.focus) return 0;\n return delay(() => element.focus());\n}\n\nexport function getLargestRemainder(values: number[], desiredSum: number) {\n let sum = 0;\n let valueParts = values.map((value: number, index: number) => {\n const integerValue = value || 0;\n sum += integerValue;\n return {\n integer: integerValue,\n decimal: value % 1,\n originalIndex: index,\n };\n });\n\n if (sum !== desiredSum && sum) {\n valueParts = valueParts.sort((a, b) => b.decimal - a.decimal);\n\n const diff = desiredSum - sum;\n let i = 0;\n\n while (i < diff) {\n valueParts[i].integer++;\n i++;\n }\n }\n\n return valueParts.sort((a, b) => a.originalIndex - b.originalIndex).map((p) => p.integer);\n}\n\nexport function getparams(requestedProperty?: string): any {\n const vars = {} as any;\n const parts = window.location.href.replace(/[?&#]+([^=&]+)=([^&]*)/gi, ((m: any, key: string, value: any) => {\n vars[key] = value;\n }) as any);\n\n for (const prop in vars) {\n if (vars[prop].toLowerCase() === 'true') vars[prop] = true;\n else if (vars[prop].toLowerCase() === 'false') vars[prop] = false;\n else if (!isNaN(parseFloat(vars[prop])) && !vars[prop].match(/[^0-9]+/gim)) vars[prop] = parseFloat(vars[prop]);\n }\n\n if (requestedProperty) return vars[requestedProperty];\n return vars;\n}\n\nexport function isset(e: any): boolean {\n return truthy(e);\n}\n\nexport function kebab(e: string): string {\n if (_.isEmpty(e)) return e;\n return e.toLowerCase().replace(/\\s+/gim, '-').replace(/_/g, '-').replace(/-+/g, '-');\n}\n\nexport function paginate(method: (offset: number, limit: number) => any, offset: number, limit: number, key: string, output: any[] = [], callback?: (allRows:any[], newRows: any[]) => void, prevResolve?: (result: any) => void) {\n return new Promise(async (resolve: (result: any) => void, reject: (result: any) => void) => {\n let response;\n try {\n response = await method(offset, limit);\n } catch(e: any) {\n reject(e);\n }\n \n output = output.concat(response[key]);\n \n if(callback) callback(output, response[key]);\n \n if(response.nextPage) {\n await paginate(method, response.nextPage, limit, key, output, callback, prevResolve ?? resolve)\n } else {\n (prevResolve ?? resolve)(output);\n }\n \n });\n}\n\nexport function prepareSearchString(value: string): string {\n if(!value) return \"\";\n return value.toLowerCase().replace(/\\s+/gim,\"\");\n}\n\nexport function replaceItem(array: any[], item: any, key: string = 'id', position: string = 'current'): any {\n const lookup = {} as any;\n lookup[key] = item[key];\n\n const oldItem = _.findWhere(array, lookup);\n\n if (!oldItem) {\n array.unshift(item);\n return item;\n }\n\n const index = array.indexOf(oldItem);\n\n if (position === 'first') {\n array.splice(index, 1);\n array.unshift(item);\n } else {\n array.splice(index, 1, item);\n }\n\n return item;\n}\n\nexport function sleep(duration: number = 0) {\n return new Promise((resolve: (value: any) => void) => {\n delay(() => resolve(duration), duration);\n });\n}\n\nexport function snakecase(e: string): string {\n if (_.isEmpty(e)) return e;\n return e.toLowerCase().replace(/\\s+/gim, '_').replace(/-/g, '_').replace(/_+/g, '_');\n}\n\nexport function tick(returnValue?: any): Promise<any> {\n return new Promise((resolve: (response: any) => void, reject: (response: any) => void) => {\n delay(() => resolve(returnValue));\n });\n}\n\nexport function timestamp(date?: Date, includeTime: boolean = true): string {\n const info = dateStrings(date);\n const time = ` ${info.time}:${info.seconds}`;\n return `${info.year}-${info.month}-${info.date}${includeTime ? time : ''}`;\n}\n\nexport function trace(...parameters: any[]) {\n if (!getparams().debug) return;\n\n for (let i = 0, count = parameters.length; i < count; i++) {\n // tslint:disable-next-line\n console.log(parameters[i]);\n }\n}\n\nexport function trim(e: string): string {\n if (_.isEmpty(e)) return e;\n return e.replace(/^\\s+/, '').replace(/\\s+$/, '');\n}\n\nexport function truthy(e: any): boolean {\n return !falsy(e);\n}\n\nexport function validateEmail(email: string | null): RegExpMatchArray | null {\n if (!email) return null;\n\n return String(email)\n .toLowerCase()\n .match(\n /^(([^<>()[\\]\\\\.,;:\\s@\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/,\n );\n}\n\nexport function viewport(el: HTMLElement, percentVisible: number = 100): boolean {\n const rect = el.getBoundingClientRect();\n const windowHeight = window.innerHeight || document.documentElement.clientHeight;\n\n return !(\n Math.floor(100 - ((rect.top >= 0 ? 0 : rect.top) / +-(rect.height / 1)) * 100) < percentVisible ||\n Math.floor(100 - ((rect.bottom - windowHeight) / rect.height) * 100) < percentVisible\n );\n}\n\nexport function password(length: number): string {\n const upperCaseChars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';\n const lowerCaseChars = 'abcdefghijklmnopqrstuvwxyz';\n const numbers = '0123456789';\n const specialChars = '!@#$%^&*()-_=+[]|;:,.?';\n length = length ?? 8;\n\n // Ensure each type of character appears at least once\n const password = [\n upperCaseChars[Math.floor(Math.random() * upperCaseChars.length)], // One uppercase\n lowerCaseChars[Math.floor(Math.random() * lowerCaseChars.length)], // One lowercase\n numbers[Math.floor(Math.random() * numbers.length)], // One number\n specialChars[Math.floor(Math.random() * specialChars.length)], // One special char\n ];\n\n // Pool of all allowed characters for remaining password characters\n const allChars = upperCaseChars + lowerCaseChars + numbers + specialChars;\n\n // Fill the rest of the password length (64 characters) with random characters\n for (let i = password.length; i < length; i++) {\n password.push(allChars[Math.floor(Math.random() * allChars.length)]);\n }\n\n // Shuffle the password array to ensure randomness, then join it into a string\n const randomPassword = password.sort(() => Math.random() - 0.5).join('');\n return randomPassword;\n}\n\n\n\n@NgModule({\n declarations: [\n ],\n imports: [\n ],\n exports: [\n ]\n})\nexport class UtilsModule { }\n","/*\n * Public API Surface of utils\n */\n\nexport * from './lib/utils.service';\nexport * from './lib/utils.component';\nexport * from './lib/utils.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}