Skip to content

Instantly share code, notes, and snippets.

@Zorgatone
Last active May 6, 2016 10:24
Show Gist options
  • Save Zorgatone/49a2b1a81c8848626162a2f5aa47df0a to your computer and use it in GitHub Desktop.
Save Zorgatone/49a2b1a81c8848626162a2f5aa47df0a to your computer and use it in GitHub Desktop.
Type Utils (for AngularJS 1.x) v1.0.0 - a collection of useful type filters
/*!
* Type Utils (for AngularJS 1.x) v1.0.0 - a collection of useful type filters
* transpile ES2015 (ES6) with BabelJS
* Copyright 2015 Zorgatone; Licensed MIT
*/
export function isTypeFilter() {
return (val, type) => type === typeof val;
}
export function isFunctionFilter(isTypeFilter) {
return val => isTypeFilter(val, "function");
}
export function isSymbolFilter(isTypeFilter) {
return val => isTypeFilter(val, "symbol");
}
export function isBooleanFilter(isTypeFilter) {
return (val, isTrue = false) =>
(isTrue === true)
? true === val
: isTypeFilter(val, "boolean");
}
export function isStringFilter(isTypeFilter) {
return (val, notEmpty = false) =>
(notEmpty === true)
? (isTypeFilter(val, "string") || val instanceof String) && 0 < val.length
: isTypeFilter(val, "string") || val instanceof String;
}
export function isObjectFilter(isObjectFilter) {
return (val, notNull = false) =>
(notNull === true)
? null !== val && isTypeFilter(val, "object")
: isTypeFilter(val, "object");
}
export function isArrayFilter() {
return (val, notEmpty = false) =>
(notEmpty === true)
? Array.isArray(val) && 0 < val.length
: Array.isArray(val);
}
export function isDateFilter() {
return (val, isValid = false) =>
(isValid === true)
? "[object Date]" === Object.prototype.toString.call(val)
: val instanceof Date;
}
export function isRegExpFilter() {
return val => val instanceof RegExp;
}
export function isUndefinedFilter(isTypeFilter) {
return val => isTypeFilter(val, "undefined");
}
export function isNullFilter() {
return val => null === val;
}
export function isNullOrUndefinedFilter(isUndefinedFilter, isNullFilter) {
return val => isUndefinedFilter(val) || isNullFilter(val);
}
export function isNumberFilter(isTypeFilter) {
return (val, notNaN = false) =>
(notNaN === true)
? !Number.isNaN(val) && (isTypeFilter(val, "number") || val instanceof Number)
: isTypeFilter(val, "number") || val instanceof Number;
}
export function isFiniteNumberFilter() { // valueOf is for the Number class
return val => Number.isFinite(val.valueOf());
}
export function isInfiniteFilter() {
return val => {
val = val.valueOf(); // valueOf is for the Number class
return Infinity === val || -Infinity === val;
}
}
export function isPositiveZeroFilter() {
return num => Object.is(+0, num);
}
export function isNegativeZeroFilter() {
return num => Object.is(-0, num);
}
export function isPositiveNumberFilter(isNumberFilter) {
return (val, orZero = false) =>
isNumberFilter(val, true) &&
((orZero === true)
? val >= 0
: val > 0)
}
export function isNegativeNumberFilter(isNumberFilter) {
return (val, orZero = false) =>
isNumberFilter(val, true) &&
((orZero === true)
? val <= 0
: val < 0)
}
export function isDivisibleNumberFilter(isNumberFilter) {
return (num1, num2) =>
isNumberFilter(num1, true) && isNumberFilter(num2, true) &&
0 === num1 % num2;
}
export function isEvenNumberFilter(isDivisibleNumberFilter) {
return val => isDivisibleNumberFilter(val, 2);
}
export function isOddNumberFilter(isEvenNumberFilter) {
return val => !isEvenNumberFilter(val);
}
@Zorgatone
Copy link
Author

Zorgatone commented May 6, 2016

Example usage

You need to register the filters with angular:

import angular from "angular";

import * as typeUtils from "./typeUtils";

const app = angular.module("yourapp", []);

for (let key of Object.keys(typeUtils)) {
  app.filter(key.replace("Filter", ""), typeUtils[key]);
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment