import { window } from 'ssr-window';
|
|
const Utils = {
|
deleteProps(obj) {
|
const object = obj;
|
Object.keys(object).forEach((key) => {
|
try {
|
object[key] = null;
|
} catch (e) {
|
// no getter for object
|
}
|
try {
|
delete object[key];
|
} catch (e) {
|
// something got wrong
|
}
|
});
|
},
|
nextTick(callback, delay = 0) {
|
return setTimeout(callback, delay);
|
},
|
now() {
|
return Date.now();
|
},
|
getTranslate(el, axis = 'x') {
|
let matrix;
|
let curTransform;
|
let transformMatrix;
|
|
const curStyle = window.getComputedStyle(el, null);
|
|
if (window.WebKitCSSMatrix) {
|
curTransform = curStyle.transform || curStyle.webkitTransform;
|
if (curTransform.split(',').length > 6) {
|
curTransform = curTransform.split(', ').map((a) => a.replace(',', '.')).join(', ');
|
}
|
// Some old versions of Webkit choke when 'none' is passed; pass
|
// empty string instead in this case
|
transformMatrix = new window.WebKitCSSMatrix(curTransform === 'none' ? '' : curTransform);
|
} else {
|
transformMatrix = curStyle.MozTransform || curStyle.OTransform || curStyle.MsTransform || curStyle.msTransform || curStyle.transform || curStyle.getPropertyValue('transform').replace('translate(', 'matrix(1, 0, 0, 1,');
|
matrix = transformMatrix.toString().split(',');
|
}
|
|
if (axis === 'x') {
|
// Latest Chrome and webkits Fix
|
if (window.WebKitCSSMatrix) curTransform = transformMatrix.m41;
|
// Crazy IE10 Matrix
|
else if (matrix.length === 16) curTransform = parseFloat(matrix[12]);
|
// Normal Browsers
|
else curTransform = parseFloat(matrix[4]);
|
}
|
if (axis === 'y') {
|
// Latest Chrome and webkits Fix
|
if (window.WebKitCSSMatrix) curTransform = transformMatrix.m42;
|
// Crazy IE10 Matrix
|
else if (matrix.length === 16) curTransform = parseFloat(matrix[13]);
|
// Normal Browsers
|
else curTransform = parseFloat(matrix[5]);
|
}
|
return curTransform || 0;
|
},
|
parseUrlQuery(url) {
|
const query = {};
|
let urlToParse = url || window.location.href;
|
let i;
|
let params;
|
let param;
|
let length;
|
if (typeof urlToParse === 'string' && urlToParse.length) {
|
urlToParse = urlToParse.indexOf('?') > -1 ? urlToParse.replace(/\S*\?/, '') : '';
|
params = urlToParse.split('&').filter((paramsPart) => paramsPart !== '');
|
length = params.length;
|
|
for (i = 0; i < length; i += 1) {
|
param = params[i].replace(/#\S+/g, '').split('=');
|
query[decodeURIComponent(param[0])] = typeof param[1] === 'undefined' ? undefined : decodeURIComponent(param[1]) || '';
|
}
|
}
|
return query;
|
},
|
isObject(o) {
|
return typeof o === 'object' && o !== null && o.constructor && o.constructor === Object;
|
},
|
extend(...args) {
|
const to = Object(args[0]);
|
for (let i = 1; i < args.length; i += 1) {
|
const nextSource = args[i];
|
if (nextSource !== undefined && nextSource !== null) {
|
const keysArray = Object.keys(Object(nextSource));
|
for (let nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex += 1) {
|
const nextKey = keysArray[nextIndex];
|
const desc = Object.getOwnPropertyDescriptor(nextSource, nextKey);
|
if (desc !== undefined && desc.enumerable) {
|
if (Utils.isObject(to[nextKey]) && Utils.isObject(nextSource[nextKey])) {
|
Utils.extend(to[nextKey], nextSource[nextKey]);
|
} else if (!Utils.isObject(to[nextKey]) && Utils.isObject(nextSource[nextKey])) {
|
to[nextKey] = {};
|
Utils.extend(to[nextKey], nextSource[nextKey]);
|
} else {
|
to[nextKey] = nextSource[nextKey];
|
}
|
}
|
}
|
}
|
}
|
return to;
|
},
|
};
|
export default Utils;
|