ivue-material-plus
Version:
A high quality UI components Library with Vue.js
159 lines (156 loc) • 4.21 kB
JavaScript
import { throwError } from './error.mjs';
const SPECIAL_CHARS_REGEXP = /([\:\-\_]+(.))/g;
const MOZ_HACK_REGEXP = /^moz([A-Z])/;
function camelCase(name) {
return name.replace(SPECIAL_CHARS_REGEXP, (_, separator, letter, offset) => {
return offset ? letter.toUpperCase() : letter;
}).replace(MOZ_HACK_REGEXP, "Moz$1");
}
const trim = function(s) {
return (s || "").replace(/^[\s\uFEFF]+|[\s\uFEFF]+$/g, "");
};
function typeOf(obj) {
const toString = Object.prototype.toString;
const map = {
"[object Boolean]": "boolean",
"[object Number]": "number",
"[object String]": "string",
"[object Function]": "function",
"[object Array]": "array",
"[object Date]": "date",
"[object RegExp]": "regExp",
"[object Undefined]": "undefined",
"[object Null]": "null",
"[object Object]": "object"
};
return map[toString.call(obj)];
}
const oneOf = (value, validList) => {
for (let i = 0; i < validList.length; i++) {
if (value === validList[i]) {
return true;
}
}
return false;
};
const getStyle = (element, styleName) => {
if (!element || !styleName) {
return null;
}
styleName = camelCase(styleName);
if (styleName === "float") {
styleName = "cssFloat";
}
try {
const computed = document.defaultView.getComputedStyle(element, "");
return element.style[styleName] || computed ? computed[styleName] : null;
} catch (e) {
return element.style[styleName];
}
};
function hasClass(el, cls) {
if (!el || !cls) {
return false;
}
if (cls.indexOf(" ") !== -1) {
throwError("hasClass", "className should not contain space");
}
if (el.classList) {
return el.classList.contains(cls);
} else {
return (" " + el.className + " ").indexOf(" " + cls + " ") > -1;
}
}
function removeClass(el, cls) {
if (!el || !cls) {
return;
}
const classes = cls.split(" ");
let curClass = " " + el.className + " ";
for (let i = 0, j = classes.length; i < j; i++) {
const clsName = classes[i];
if (!clsName) {
continue;
}
if (el.classList) {
el.classList.remove(clsName);
} else {
if (hasClass(el, clsName)) {
curClass = curClass.replace(" " + clsName + " ", " ");
}
}
}
if (!el.classList) {
el.className = trim(curClass);
}
}
function addClass(el, cls) {
if (!el) {
return;
}
let curClass = el.className;
const classes = (cls || "").split(" ");
for (let i = 0, j = classes.length; i < j; i++) {
const clsName = classes[i];
if (!clsName) {
continue;
}
if (el.classList) {
el.classList.add(clsName);
} else if (!hasClass(el, clsName)) {
curClass += " " + clsName;
}
}
if (!el.classList) {
el.className = curClass;
}
}
function scrollTop(el, from = 0, to, duration = 500, endCallback) {
if (!window.requestAnimationFrame) {
window.requestAnimationFrame = window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.msRequestAnimationFrame || function(callback) {
return window.setTimeout(callback, 1e3 / 60);
};
}
const difference = Math.abs(from - to);
const step = Math.ceil(difference / duration * 50);
function scroll(start, end, step2) {
if (start === end) {
endCallback && endCallback();
return;
}
let d = start + step2 > end ? end : start + step2;
if (start > end) {
d = start - step2 < end ? end : start - step2;
}
if (el === window) {
window.scrollTo(d, d);
} else {
el.scrollTop = d;
}
window.requestAnimationFrame(() => scroll(d, end, step2));
}
scroll(from, to, step);
}
const deepCopy = (data) => {
const _typeOf = typeOf(data);
let object;
if (_typeOf === "array") {
object = [];
} else if (_typeOf === "object") {
object = {};
} else {
return data;
}
if (_typeOf === "array") {
for (let i = 0; i < data.length; i++) {
object.push(deepCopy(data[i]));
}
} else if (_typeOf === "object") {
for (let i in data) {
object[i] = deepCopy(data[i]);
}
}
return object;
};
export { addClass, deepCopy, getStyle, hasClass, oneOf, removeClass, scrollTop };
//# sourceMappingURL=assist.mjs.map