tixif-ngx-busy
Version:
Angular 2 Busy: show busy/loading indicators on any promise, or on any Observable's subscription
99 lines (91 loc) • 2.51 kB
text/typescript
/**
* @file Util
* @author yumao<yuzhang.lille@gmail.com>
*/
// from AngularJS
export function isDate(value) {
return Object.prototype.toString.call(value) === '[object Date]';
}
export function isRegExp(value) {
return Object.prototype.toString.call(value) === '[object RegExp]';
}
export function isWindow(obj) {
return obj && obj.window === obj;
}
export function isFunction(value) {
return typeof value === 'function';
}
export function isDefined(value) {
return typeof value !== 'undefined';
}
export function equals(o1, o2) {
if (o1 === o2) {
return true
};
if (o1 === null || o2 === null) {
return false;
}
if (o1 !== o1 && o2 !== o2) {
return true; // NaN === NaN
}
const t1 = typeof o1;
const t2 = typeof o2;
let length;
let key;
let keySet;
if (t1 === t2 && t1 === 'object') {
if (Array.isArray(o1)) {
if (!Array.isArray(o2)) {
return false;
}
if ((length = o1.length) === o2.length) {
for (key = 0; key < length; key++) {
if (!equals(o1[key], o2[key])) {
return false;
}
}
return true;
}
}
else if (isDate(o1)) {
if (!isDate(o2)) {
return false;
}
return equals(o1.getTime(), o2.getTime());
}
else if (isRegExp(o1)) {
if (!isRegExp(o2)) {
return false;
}
return o1.toString() === o2.toString();
}
else {
if (isWindow(o1) || isWindow(o2)
|| Array.isArray(o2) || isDate(o2) || isRegExp(o2)
) {
return false
};
keySet = Object.create(null);
for (key in o1) {
if (key.charAt(0) === '$' || isFunction(o1[key])) {
continue
};
if (!equals(o1[key], o2[key])) {
return false;
}
keySet[key] = true;
}
for (key in o2) {
if (!(key in keySet)
&& key.charAt(0) !== '$'
&& isDefined(o2[key])
&& !isFunction(o2[key])
) {
return false;
}
}
return true;
}
}
return false;
}