ack-angular
Version:
Extra special directives, components, providers and pipes to aide in tackling everyday interface development needs in Angular2
164 lines • 20.6 kB
JavaScript
import { ack as ackX } from "ack-x/es/index-browser";
export function between(input, a, b) {
if (a == null || b == null)
return false;
return (input >= a && input <= b) || (input <= a && input >= b) ? true : false;
}
export function replaceMaxLength(input, max, replacement = '...') {
if (input?.length > max) {
return input.slice(0, max) + replacement;
}
return input;
}
export function numberToPhone(val) {
if (val == null || !val) {
return val;
}
val = String(val).replace(/[^0-9]/g, '');
if (val.length == 0)
return val;
return '(' + val.substring(0, 3) + ') ' + val.substring(3, 6) + '-' + val.substring(6, 10);
}
export function toNumber(val) {
return Number(numbers(val, "."));
}
export function numberSuffix(val, rtnVal = false) {
var rtn = rtnVal ? val : '';
val = Number(val);
if (!val || isNaN(val))
return '';
var j = val % 10, k = val % 100;
if (j == 1 && k != 11) {
return rtn + "st";
}
if (j == 2 && k != 12) {
return rtn + "nd";
}
if (j == 3 && k != 13) {
return rtn + "rd";
}
return rtn + "th";
}
/** if input is array returned otherwise array created with */
export function array(input, repeat, repeatValue) {
const isArray = input != null && input.constructor == Array;
let rtn = isArray ? input : [];
if (!repeat && !isArray && input != null) {
rtn.push(input);
}
if (repeat && !isNaN(Number(repeat))) {
const val = typeof (repeatValue) === 'undefined' ? input : repeatValue;
while (rtn.length < repeat) {
rtn.push(val);
}
}
return rtn;
}
export function arrayOfObjects(input, repeat, repeatValue) {
return array(input, repeat, repeatValue).map((v, i) => ({ value: v, index: i }));
}
export function markdownAnchor(input) {
input = input.toString().replace(/&/gi, 'amp'); //possibly unneeded
input = input.toString().replace(/ /gi, '-');
input = input.replace(/[^a-z0-9_-]/gi, '');
return input.toLowerCase();
}
//use with bypassSecurityTrustResourceUrl for href
export function textDownload(input) {
if (input == null)
return input;
return 'data:text/plain;charset=utf-8,' + encodeURIComponent(input);
}
export function yesno(input) {
if (input == null)
return input;
return input ? 'yes' : 'no';
}
export function yesNo(input) {
if (input == null)
return input;
return input ? 'Yes' : 'No';
}
export function boolean(input) {
if (input == null)
return false;
const num = Number(input);
if (!isNaN(num)) {
return Boolean(num) ? true : false;
}
if (input.toLowerCase) {
if (input.toLowerCase() == 'true')
return true;
if (input.toLowerCase() == 'false')
return false;
}
return Boolean(input) ? true : false;
}
export function bit(input) {
return boolean(input) ? 1 : 0;
}
export function numbers(input, safeChars //upto 4 acceptable characters
) {
let xString = '[^0-9';
if (safeChars) {
if (safeChars.length > 4) {
safeChars = safeChars.substring(0, 4); //do not allow safeChars to create a maliscous regx
}
xString += safeChars;
}
xString += ']';
const regX = new RegExp(xString, 'g');
return input ? String(input).replace(regX, '') : input;
}
export function capitalizeWords(input) {
var reg = /[^\W_]+[^\s-]* */g;
return (!!input) ? input.replace(reg, function (txt) { return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase(); }) : '';
}
/** each sentence word is capitalized */
export function capitalize(input) {
input = pipes.capitalizeOne(input);
var reg = /[.?!][\s\r\t]+\w/g;
return (!!input) ? input.replace(reg, pipes.capitalizeAfterSentence) : '';
}
export function capitalizeAfterSentence(input) {
var reg = /[\s\r\t]\w/g;
return (!!input) ? input.replace(reg, function (txt) { return txt.charAt(0) + txt.charAt(1).toUpperCase() + txt.substr(2).toLowerCase(); }) : '';
}
export function capitalizeOne(input) {
var reg = /[^\W_]+[^\s-]*/;
return (!!input) ? input.replace(reg, function (txt) { return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase(); }) : '';
}
function a(name) {
const av = new ackX();
return invokeRotator(av[name]);
}
import { invokeRotator } from "./invokeRotator";
export const aDate = a('date');
export const aTime = a('time');
export const aMath = invokeRotator(Math);
export const aString = invokeRotator(String);
export const ack = invokeRotator(ackX);
// maybe deprecated . Remove in future releases. Just an array ref of all pipes
export const pipes = {
ack,
aDate,
aMath,
array,
aString,
aTime,
between,
capitalize,
capitalizeAfterSentence,
capitalizeOne,
capitalizeWords,
numbers,
numberSuffix,
numberToPhone,
markdownAnchor,
replaceMaxLength,
textDownload,
toNumber,
yesno,
yesNo,
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGlwZXMuY2xhc3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcGlwZXMuY2xhc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEdBQUcsSUFBSSxJQUFJLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQTtBQUVwRCxNQUFNLFVBQVUsT0FBTyxDQUNyQixLQUFhLEVBQUUsQ0FBUyxFQUFFLENBQVM7SUFFbkMsSUFBRyxDQUFDLElBQUUsSUFBSSxJQUFJLENBQUMsSUFBRSxJQUFJO1FBQUMsT0FBTyxLQUFLLENBQUE7SUFDbEMsT0FBTyxDQUFDLEtBQUssSUFBSSxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFBO0FBQ2hGLENBQUM7QUFFRCxNQUFNLFVBQVUsZ0JBQWdCLENBQzlCLEtBQVksRUFBRSxHQUFXLEVBQUUsY0FBc0IsS0FBSztJQUV0RCxJQUFHLEtBQUssRUFBRSxNQUFNLEdBQUcsR0FBRyxFQUFFO1FBQ3RCLE9BQU8sS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsV0FBVyxDQUFBO0tBQ3pDO0lBRUQsT0FBTyxLQUFLLENBQUE7QUFDZCxDQUFDO0FBRUQsTUFBTSxVQUFVLGFBQWEsQ0FDM0IsR0FBb0I7SUFFbEIsSUFBSSxHQUFHLElBQUksSUFBSSxJQUFJLENBQUMsR0FBRyxFQUFDO1FBQ3RCLE9BQU8sR0FBRyxDQUFBO0tBQ1g7SUFFRCxHQUFHLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLENBQUE7SUFFeEMsSUFBSyxHQUFHLENBQUMsTUFBTSxJQUFFLENBQUM7UUFBRSxPQUFPLEdBQUcsQ0FBQTtJQUU5QixPQUFPLEdBQUcs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O0lBQ1osYUFBYTtJQUNiLGNBQWM7SUFDZCxnQkFBZ0I7SUFDaEIsWUFBWTtJQUNaLFFBQVE7SUFDUixLQUFLO0lBQ0wsS0FBSztDQUNOLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBhY2sgYXMgYWNrWCB9IGZyb20gXCJhY2steC9lcy9pbmRleC1icm93c2VyXCJcblxuZXhwb3J0IGZ1bmN0aW9uIGJldHdlZW4oXG4gIGlucHV0OiBudW1iZXIsIGE6IG51bWJlciwgYjogbnVtYmVyXG4pIHtcbiAgaWYoYT09bnVsbCB8fCBiPT1udWxsKXJldHVybiBmYWxzZVxuICByZXR1cm4gKGlucHV0ID49IGEgJiYgaW5wdXQgPD0gYikgfHwgKGlucHV0IDw9IGEgJiYgaW5wdXQgPj0gYikgPyB0cnVlIDogZmFsc2Vcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlcGxhY2VNYXhMZW5ndGgoXG4gIGlucHV0OnN0cmluZywgbWF4OiBudW1iZXIsIHJlcGxhY2VtZW50OiBzdHJpbmcgPSAnLi4uJ1xuKTogc3RyaW5nIHtcbiAgaWYoaW5wdXQ/Lmxlbmd0aCA+IG1heCkge1xuICAgIHJldHVybiBpbnB1dC5zbGljZSgwLCBtYXgpICsgcmVwbGFjZW1lbnRcbiAgfVxuXG4gIHJldHVybiBpbnB1dFxufVxuXG5leHBvcnQgZnVuY3Rpb24gbnVtYmVyVG9QaG9uZShcbiAgdmFsOiBudW1iZXIgfCBzdHJpbmdcbik6IHN0cmluZyB8IHVua25vd24ge1xuICAgIGlmICh2YWwgPT0gbnVsbCB8fCAhdmFsKXtcbiAgICAgIHJldHVybiB2YWxcbiAgICB9XG5cbiAgICB2YWwgPSBTdHJpbmcodmFsKS5yZXBsYWNlKC9bXjAtOV0vZywgJycpXG5cbiAgICBpZiAoIHZhbC5sZW5ndGg9PTAgKXJldHVybiB2YWxcblxuICAgIHJldHVybiAnKCcgKyB2YWwuc3Vic3RyaW5nKDAsIDMpICsgJykgJyArIHZhbC5zdWJzdHJpbmcoMywgNikgKyAnLScgKyB2YWwuc3Vic3RyaW5nKDYsIDEwKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdG9OdW1iZXIodmFsOiBzdHJpbmcgfCBudW1iZXIpe1xuICAgIHJldHVybiBOdW1iZXIoIG51bWJlcnModmFsLCBcIi5cIikgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gbnVtYmVyU3VmZml4KFxuICB2YWw6IG51bWJlciB8IHN0cmluZywgcnRuVmFsPWZhbHNlXG4pe1xuICB2YXIgcnRuID0gcnRuVmFsID8gdmFsIDogJydcbiAgdmFsID0gTnVtYmVyKHZhbClcblxuICBpZighdmFsIHx8IGlzTmFOKHZhbCkpcmV0dXJuICcnXG5cbiAgdmFyIGogPSB2YWwgJSAxMCxcbiAgICAgIGsgPSB2YWwgJSAxMDA7XG4gIGlmIChqID09IDEgJiYgayAhPSAxMSkge1xuICAgICAgcmV0dXJuIHJ0bitcInN0XCI7XG4gIH1cbiAgaWYgKGogPT0gMiAmJiBrICE9IDEyKSB7XG4gICAgICByZXR1cm4gcnRuK1wibmRcIjtcbiAgfVxuICBpZiAoaiA9PSAzICYmIGsgIT0gMTMpIHtcbiAgICAgIHJldHVybiBydG4rXCJyZFwiO1xuICB9XG4gIHJldHVybiBydG4rXCJ0aFwiO1xufVxuXG4vKiogaWYgaW5wdXQgaXMgYXJyYXkgcmV0dXJuZWQgb3RoZXJ3aXNlIGFycmF5IGNyZWF0ZWQgd2l0aCAgKi9cbmV4cG9ydCBmdW5jdGlvbiBhcnJheShcbiAgaW5wdXQ6IHN0cmluZyB8IGFueVtdLFxuICByZXBlYXQ/Om51bWJlcixcbiAgcmVwZWF0VmFsdWU/OiB1bmtub3duIHwgbnVtYmVyIHwgc3RyaW5nXG4pOiBhbnlbXSB7XG4gIGNvbnN0IGlzQXJyYXkgPSBpbnB1dCE9bnVsbCAmJiBpbnB1dC5jb25zdHJ1Y3RvciA9PSBBcnJheVxuICBsZXQgcnRuOiBhbnlbXSA9IGlzQXJyYXkgPyBpbnB1dCBhcyBhbnlbXSA6IFtdXG5cbiAgaWYoIXJlcGVhdCAmJiAhaXNBcnJheSAmJiBpbnB1dCE9bnVsbCl7XG4gICAgcnRuLnB1c2goaW5wdXQpXG4gIH1cblxuICBpZiggcmVwZWF0ICYmICFpc05hTihOdW1iZXIocmVwZWF0KSkgKXtcbiAgICBjb25zdCB2YWwgPSB0eXBlb2YocmVwZWF0VmFsdWUpPT09J3VuZGVmaW5lZCcgPyBpbnB1dCA6IHJlcGVhdFZhbHVlXG4gICAgd2hpbGUoIHJ0bi5sZW5ndGggPCByZXBlYXQgKXtcbiAgICAgIHJ0bi5wdXNoKCB2YWwgKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBydG5cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFycmF5T2ZPYmplY3RzKFxuICBpbnB1dDogc3RyaW5nIHwgYW55W10sXG4gIHJlcGVhdD86bnVtYmVyLFxuICByZXBlYXRWYWx1ZT86IHVua25vd24gfCBzdHJpbmcgfCBudW1iZXJcbik6IGFueVtdIHtcbiAgcmV0dXJuIGFycmF5KGlucHV0LCByZXBlYXQsIHJlcGVhdFZhbHVlKS5tYXAoKHYsaSk9Pih7dmFsdWU6diwgaW5kZXg6aX0pKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gbWFya2Rvd25BbmNob3IoaW5wdXQ6c3RyaW5nKXtcbiAgaW5wdXQgPSBpbnB1dC50b1N0cmluZygpLnJlcGxhY2UoLyYvZ2ksICdhbXAnKS8vcG9zc2libHkgdW5uZWVkZWRcbiAgaW5wdXQgPSBpbnB1dC50b1N0cmluZygpLnJlcGxhY2UoLyAvZ2ksJy0nKVxuICBpbnB1dCA9IGlucHV0LnJlcGxhY2UoL1teYS16MC05Xy1dL2dpLCcnKVxuICByZXR1cm4gaW5wdXQudG9Mb3dlckNhc2UoKVxufVxuXG4gIC8vdXNlIHdpdGggYnlwYXNzU2VjdXJpdHlUcnVzdFJlc291cmNlVXJsIGZvciBocmVmXG5leHBvcnQgZnVuY3Rpb24gdGV4dERvd25sb2FkKGlucHV0OmFueSl7XG4gIGlmKGlucHV0PT1udWxsKXJldHVybiBpbnB1dFxuICByZXR1cm4gJ2RhdGE6dGV4dC9wbGFpbjtjaGFyc2V0PXV0Zi04LCcgKyBlbmNvZGVVUklDb21wb25lbnQoaW5wdXQpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB5ZXNubyhpbnB1dDphbnkpe1xuICBpZihpbnB1dD09bnVsbClyZXR1cm4gaW5wdXRcbiAgcmV0dXJuIGlucHV0ID8gJ3llcycgOiAnbm8nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24geWVzTm8oaW5wdXQ6YW55KXtcbiAgaWYoaW5wdXQ9PW51bGwpcmV0dXJuIGlucHV0XG4gIHJldHVybiBpbnB1dCA/ICdZZXMnIDogJ05vJztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJvb2xlYW4oaW5wdXQ6YW55KXtcbiAgaWYoaW5wdXQ9PW51bGwpcmV0dXJuIGZhbHNlXG5cbiAgY29uc3QgbnVtID0gTnVtYmVyKGlucHV0KVxuICBpZighaXNOYU4obnVtKSl7XG4gICAgcmV0dXJuIEJvb2xlYW4obnVtKSA/IHRydWUgOiBmYWxzZTtcbiAgfVxuXG4gIGlmKGlucHV0LnRvTG93ZXJDYXNlKXtcbiAgICBpZiggaW5wdXQudG9Mb3dlckNhc2UoKT09J3RydWUnIClyZXR1cm4gdHJ1ZVxuICAgIGlmKCBpbnB1dC50b0xvd2VyQ2FzZSgpPT0nZmFsc2UnIClyZXR1cm4gZmFsc2VcbiAgfVxuXG4gIHJldHVybiBCb29sZWFuKGlucHV0KSA/IHRydWUgOiBmYWxzZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJpdChpbnB1dDphbnkpe1xuICByZXR1cm4gYm9vbGVhbihpbnB1dCkgPyAxIDogMDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG51bWJlcnMoXG4gIGlucHV0OmFueSxcbiAgc2FmZUNoYXJzPzpzdHJpbmcvL3VwdG8gNCBhY2NlcHRhYmxlIGNoYXJhY3RlcnNcbil7XG4gIGxldCB4U3RyaW5nID0gJ1teMC05J1xuXG4gIGlmKCBzYWZlQ2hhcnMgKXtcbiAgICBpZiggc2FmZUNoYXJzLmxlbmd0aD40ICl7XG4gICAgICBzYWZlQ2hhcnMgPSBzYWZlQ2hhcnMuc3Vic3RyaW5nKDAsIDQpLy9kbyBub3QgYWxsb3cgc2FmZUNoYXJzIHRvIGNyZWF0ZSBhIG1hbGlzY291cyByZWd4XG4gICAgfVxuXG4gICAgeFN0cmluZyArPSBzYWZlQ2hhcnNcbiAgfVxuXG4gIHhTdHJpbmcgKz0gJ10nXG4gIGNvbnN0IHJlZ1ggPSBuZXcgUmVnRXhwKHhTdHJpbmcsICdnJylcblxuICByZXR1cm4gaW5wdXQgPyBTdHJpbmcoaW5wdXQpLnJlcGxhY2UocmVnWCwnJykgOiBpbnB1dFxufVxuXG5leHBvcnQgZnVuY3Rpb24gY2FwaXRhbGl6ZVdvcmRzKGlucHV0OmFueSl7XG4gIHZhciByZWcgPSAvW15cXFdfXStbXlxccy1dKiAqL2dcbiAgcmV0dXJuICghIWlucHV0KSA/IGlucHV0LnJlcGxhY2UocmVnLCBmdW5jdGlvbih0eHQ6YW55KXtyZXR1cm4gdHh0LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgdHh0LnN1YnN0cigxKS50b0xvd2VyQ2FzZSgpfSkgOiAnJ1xufVxuXG4vKiogZWFjaCBzZW50ZW5jZSB3b3JkIGlzIGNhcGl0YWxpemVkICovXG5leHBvcnQgZnVuY3Rpb24gY2FwaXRhbGl6ZShpbnB1dDphbnkpe1xuICBpbnB1dCA9IHBpcGVzLmNhcGl0YWxpemVPbmUoaW5wdXQpXG4gIHZhciByZWcgPSAvWy4/IV1bXFxzXFxyXFx0XStcXHcvZ1xuICByZXR1cm4gKCEhaW5wdXQpID8gaW5wdXQucmVwbGFjZShyZWcsIHBpcGVzLmNhcGl0YWxpemVBZnRlclNlbnRlbmNlKSA6ICcnXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjYXBpdGFsaXplQWZ0ZXJTZW50ZW5jZShpbnB1dDphbnkpe1xuICB2YXIgcmVnID0gL1tcXHNcXHJcXHRdXFx3L2dcbiAgcmV0dXJuICghIWlucHV0KSA/IGlucHV0LnJlcGxhY2UocmVnLCBmdW5jdGlvbih0eHQ6YW55KXtyZXR1cm4gdHh0LmNoYXJBdCgwKSArIHR4dC5jaGFyQXQoMSkudG9VcHBlckNhc2UoKSArIHR4dC5zdWJzdHIoMikudG9Mb3dlckNhc2UoKX0pIDogJydcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNhcGl0YWxpemVPbmUoaW5wdXQ6YW55KSB7XG4gIHZhciByZWcgPSAvW15cXFdfXStbXlxccy1dKi9cbiAgcmV0dXJuICghIWlucHV0KSA/IGlucHV0LnJlcGxhY2UocmVnLCBmdW5jdGlvbih0eHQ6YW55KXtyZXR1cm4gdHh0LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgdHh0LnN1YnN0cigxKS50b0xvd2VyQ2FzZSgpfSkgOiAnJ1xufVxuXG5mdW5jdGlvbiBhKG5hbWU6c3RyaW5nKXtcbiAgY29uc3QgYXYgPSBuZXcgYWNrWCgpXG4gIHJldHVybiBpbnZva2VSb3RhdG9yKCBhdltuYW1lXSApXG59XG5cbmltcG9ydCB7IGludm9rZVJvdGF0b3IgfSBmcm9tIFwiLi9pbnZva2VSb3RhdG9yXCJcblxuZXhwb3J0IGNvbnN0IGFEYXRlID0gYSgnZGF0ZScpXG5leHBvcnQgY29uc3QgYVRpbWUgPSBhKCd0aW1lJylcbmV4cG9ydCBjb25zdCBhTWF0aCA9IGludm9rZVJvdGF0b3IoIE1hdGggKVxuZXhwb3J0IGNvbnN0IGFTdHJpbmcgPSBpbnZva2VSb3RhdG9yKCBTdHJpbmcgKVxuZXhwb3J0IGNvbnN0IGFjayA9IGludm9rZVJvdGF0b3IoIGFja1ggKVxuXG4vLyBtYXliZSBkZXByZWNhdGVkIC4gUmVtb3ZlIGluIGZ1dHVyZSByZWxlYXNlcy4gSnVzdCBhbiBhcnJheSByZWYgb2YgYWxsIHBpcGVzXG5leHBvcnQgY29uc3QgcGlwZXMgPSB7XG4gIGFjayxcbiAgYURhdGUsXG4gIGFNYXRoLFxuICBhcnJheSxcbiAgYVN0cmluZyxcbiAgYVRpbWUsXG4gIGJldHdlZW4sXG4gIGNhcGl0YWxpemUsXG4gIGNhcGl0YWxpemVBZnRlclNlbnRlbmNlLFxuICBjYXBpdGFsaXplT25lLFxuICBjYXBpdGFsaXplV29yZHMsXG4gIG51bWJlcnMsXG4gIG51bWJlclN1ZmZpeCxcbiAgbnVtYmVyVG9QaG9uZSxcbiAgbWFya2Rvd25BbmNob3IsXG4gIHJlcGxhY2VNYXhMZW5ndGgsXG4gIHRleHREb3dubG9hZCxcbiAgdG9OdW1iZXIsXG4gIHllc25vLFxuICB5ZXNObyxcbn0iXX0=