init component
This commit is contained in:
162
node_modules/buetify/lib/utils/helpers.js
generated
vendored
Executable file
162
node_modules/buetify/lib/utils/helpers.js
generated
vendored
Executable file
@@ -0,0 +1,162 @@
|
||||
import { Fragment } from 'vue';
|
||||
import { snoc, unsafeDeleteAt } from 'fp-ts/lib/Array';
|
||||
import { constant, not } from 'fp-ts/lib/function';
|
||||
import { none } from 'fp-ts/lib/Option';
|
||||
/**
|
||||
* Mobile detection
|
||||
* https://www.abeautifulsite.net/detecting-mobile-devices-with-javascript
|
||||
*/
|
||||
|
||||
export const isMobile = {
|
||||
Android: function () {
|
||||
return typeof window !== 'undefined' && window.navigator.userAgent.match(/Android/i);
|
||||
},
|
||||
BlackBerry: function () {
|
||||
return typeof window !== 'undefined' && window.navigator.userAgent.match(/BlackBerry/i);
|
||||
},
|
||||
iOS: function () {
|
||||
return typeof window !== 'undefined' && window.navigator.userAgent.match(/iPhone|iPad|iPod/i);
|
||||
},
|
||||
Opera: function () {
|
||||
return typeof window !== 'undefined' && window.navigator.userAgent.match(/Opera Mini/i);
|
||||
},
|
||||
Windows: function () {
|
||||
return typeof window !== 'undefined' && window.navigator.userAgent.match(/IEMobile/i);
|
||||
},
|
||||
any: function () {
|
||||
return isMobile.Android() || isMobile.BlackBerry() || isMobile.iOS() || isMobile.Opera() || isMobile.Windows();
|
||||
}
|
||||
};
|
||||
export function capitalizeFirstLetter(str) {
|
||||
return str.charAt(0).toUpperCase() + str.slice(1);
|
||||
}
|
||||
export function keys(o) {
|
||||
return Object.keys(o);
|
||||
} // eslint-disable-next-line
|
||||
|
||||
export function deepEqual(a, b) {
|
||||
if (a === b) return true;
|
||||
|
||||
if (a instanceof Date && b instanceof Date) {
|
||||
// If the values are Date, they were convert to timestamp with getTime and compare it
|
||||
if (a.getTime() !== b.getTime()) return false;
|
||||
}
|
||||
|
||||
if (a !== Object(a) || b !== Object(b)) {
|
||||
// If the values aren't objects, they were already checked for equality
|
||||
return false;
|
||||
}
|
||||
|
||||
const props = Object.keys(a);
|
||||
|
||||
if (props.length !== Object.keys(b).length) {
|
||||
// Different number of props, don't bother to check
|
||||
return false;
|
||||
}
|
||||
|
||||
return props.every(p => deepEqual(a[p], b[p]));
|
||||
} // eslint-disable-next-line
|
||||
|
||||
export function getNestedValue(obj, path, fallback) {
|
||||
const last = path.length - 1;
|
||||
if (last < 0) return obj === undefined ? fallback : obj;
|
||||
|
||||
for (let i = 0; i < last; i++) {
|
||||
if (obj == null) {
|
||||
return fallback;
|
||||
}
|
||||
|
||||
obj = obj[path[i]];
|
||||
}
|
||||
|
||||
if (obj == null) return fallback;
|
||||
return obj[path[last]] === undefined ? fallback : obj[path[last]];
|
||||
} // eslint-disable-next-line
|
||||
|
||||
export function getObjectValueByPath(obj, path, fallback) {
|
||||
// credit: http://stackoverflow.com/questions/6491463/accessing-nested-javascript-objects-with-string-key#comment55278413_6491621
|
||||
if (obj == null || !path || typeof path !== 'string') return fallback;
|
||||
if (obj[path] !== undefined) return obj[path];
|
||||
path = path.replace(/\[(\w+)\]/g, '.$1'); // convert indexes to properties
|
||||
|
||||
path = path.replace(/^\./, ''); // strip a leading dot
|
||||
|
||||
return getNestedValue(obj, path.split('.'), fallback);
|
||||
} // eslint-disable-next-line
|
||||
|
||||
export function isBoolean(val) {
|
||||
return typeof val === 'boolean';
|
||||
} // eslint-disable-next-line
|
||||
|
||||
export function isObject(obj) {
|
||||
return obj !== null && typeof obj === 'object';
|
||||
} // eslint-disable-next-line
|
||||
|
||||
export function isFunction(obj) {
|
||||
return typeof obj === 'function';
|
||||
} // eslint-disable-next-line
|
||||
|
||||
export function isPrimitive(val) {
|
||||
return typeof val === 'number' || typeof val === 'string' || typeof val === 'boolean';
|
||||
} // eslint-disable-next-line
|
||||
|
||||
export function isNil(arg) {
|
||||
return arg === null || arg === undefined;
|
||||
}
|
||||
export const exists = not(isNil); // eslint-disable-next-line
|
||||
|
||||
export function isString(arg) {
|
||||
return typeof arg === 'string';
|
||||
} // eslint-disable-next-line
|
||||
|
||||
export function isNumber(arg) {
|
||||
return typeof arg === 'number';
|
||||
} // eslint-disable-next-line
|
||||
|
||||
export function isHTMLElement(obj) {
|
||||
return typeof HTMLElement === 'object' ? obj instanceof HTMLElement //DOM2
|
||||
: obj && typeof isObject(obj) && obj.nodeType === 1 && typeof obj.nodeName === 'string';
|
||||
}
|
||||
export const constEmptyArray = constant([]);
|
||||
export const constNone = constant(none);
|
||||
export const constZero = constant(0);
|
||||
export const constEmptyString = constant('');
|
||||
export function removeListItem(E) {
|
||||
return (a, as) => {
|
||||
const index = as.findIndex(i => E.equals(a, i));
|
||||
return index > -1 ? unsafeDeleteAt(index, as) : as;
|
||||
};
|
||||
}
|
||||
export function toggleListItem(E) {
|
||||
return (a, as) => {
|
||||
const index = as.findIndex(i => E.equals(a, i));
|
||||
return index > -1 ? unsafeDeleteAt(index, as) : snoc(as, a);
|
||||
};
|
||||
}
|
||||
export function isFragment(node) {
|
||||
return node.type === Fragment;
|
||||
}
|
||||
export function isEmptyString(str) {
|
||||
return str === '';
|
||||
}
|
||||
|
||||
function prop(key, obj) {
|
||||
return obj[key];
|
||||
} // eslint-disable-next-line
|
||||
|
||||
|
||||
export function extractProp(extractor, item) {
|
||||
if (isFunction(extractor)) {
|
||||
return extractor(item);
|
||||
} else if (isObject(item) && isString(extractor) && Object.hasOwnProperty.call(item, extractor)) {
|
||||
// eslint-disable-next-line
|
||||
return prop(extractor, item);
|
||||
} else {
|
||||
return item;
|
||||
}
|
||||
}
|
||||
const camelizeRE = /-(\w)/g;
|
||||
export function camelize(str) {
|
||||
return str.replace(camelizeRE, (_, c) => c ? c.toUpperCase() : '');
|
||||
}
|
||||
//# sourceMappingURL=helpers.js.map
|
||||
Reference in New Issue
Block a user