97 lines
3.0 KiB
TypeScript
97 lines
3.0 KiB
TypeScript
|
|
/**
|
||
|
|
* Check if an element has a class
|
||
|
|
* @param {HTMLElement} elm
|
||
|
|
* @param {string} cls
|
||
|
|
* @returns {boolean}
|
||
|
|
*/
|
||
|
|
export function hasClass(ele: HTMLElement, cls: string) {
|
||
|
|
return !!ele.className.match(new RegExp('(\\s|^)' + cls + '(\\s|$)'));
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Add class to element
|
||
|
|
* @param {HTMLElement} elm
|
||
|
|
* @param {string} cls
|
||
|
|
*/
|
||
|
|
export function addClass(ele: HTMLElement, cls: string) {
|
||
|
|
if (!hasClass(ele, cls)) ele.className += ' ' + cls;
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Remove class from element
|
||
|
|
* @param {HTMLElement} elm
|
||
|
|
* @param {string} cls
|
||
|
|
*/
|
||
|
|
export function removeClass(ele: HTMLElement, cls: string) {
|
||
|
|
if (hasClass(ele, cls)) {
|
||
|
|
const reg = new RegExp('(\\s|^)' + cls + '(\\s|$)');
|
||
|
|
ele.className = ele.className.replace(reg, ' ');
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
export function mix(color1: string, color2: string, weight: number) {
|
||
|
|
weight = Math.max(Math.min(Number(weight), 1), 0);
|
||
|
|
const r1 = parseInt(color1.substring(1, 3), 16);
|
||
|
|
const g1 = parseInt(color1.substring(3, 5), 16);
|
||
|
|
const b1 = parseInt(color1.substring(5, 7), 16);
|
||
|
|
const r2 = parseInt(color2.substring(1, 3), 16);
|
||
|
|
const g2 = parseInt(color2.substring(3, 5), 16);
|
||
|
|
const b2 = parseInt(color2.substring(5, 7), 16);
|
||
|
|
const r = Math.round(r1 * (1 - weight) + r2 * weight);
|
||
|
|
const g = Math.round(g1 * (1 - weight) + g2 * weight);
|
||
|
|
const b = Math.round(b1 * (1 - weight) + b2 * weight);
|
||
|
|
const rStr = ('0' + (r || 0).toString(16)).slice(-2);
|
||
|
|
const gStr = ('0' + (g || 0).toString(16)).slice(-2);
|
||
|
|
const bStr = ('0' + (b || 0).toString(16)).slice(-2);
|
||
|
|
return '#' + rStr + gStr + bStr;
|
||
|
|
}
|
||
|
|
|
||
|
|
export function parseTime(time :any, cFormat :any) {
|
||
|
|
if (arguments.length === 0) {
|
||
|
|
return null
|
||
|
|
}
|
||
|
|
const format = cFormat || '{y}-{m}-{d} {h}:{i}:{s}'
|
||
|
|
let date
|
||
|
|
if (typeof time === 'undefined' || time === null || time === 'null') {
|
||
|
|
return ''
|
||
|
|
} else if (typeof time === 'object') {
|
||
|
|
date = time
|
||
|
|
} else {
|
||
|
|
if ((typeof time === 'string') && (/^[0-9]+$/.test(time))) {
|
||
|
|
time = parseInt(time)
|
||
|
|
}
|
||
|
|
if ((typeof time === 'number') && (time.toString().length === 10)) {
|
||
|
|
time = time * 1000
|
||
|
|
}
|
||
|
|
date = new Date(time)
|
||
|
|
}
|
||
|
|
const formatObj = {
|
||
|
|
y: date.getFullYear(),
|
||
|
|
m: date.getMonth() + 1,
|
||
|
|
d: date.getDate(),
|
||
|
|
h: date.getHours(),
|
||
|
|
i: date.getMinutes(),
|
||
|
|
s: date.getSeconds(),
|
||
|
|
a: date.getDay()
|
||
|
|
}
|
||
|
|
const time_str = format.replace(/{(y|m|d|h|i|s|a)+}/g, (result :any, key :any) => {
|
||
|
|
let value : any = formatObj[key]
|
||
|
|
if (key === 'a') { return ['日', '一', '二', '三', '四', '五', '六'][value ] }
|
||
|
|
if (result.length > 0 && value < 10) {
|
||
|
|
value = '0' + value
|
||
|
|
}
|
||
|
|
return value || 0
|
||
|
|
})
|
||
|
|
return time_str
|
||
|
|
}
|
||
|
|
export function downloadFile(obj :any, name :any, suffix :any) {
|
||
|
|
const url = window.URL.createObjectURL(new Blob([obj]))
|
||
|
|
const link = document.createElement('a')
|
||
|
|
link.style.display = 'none'
|
||
|
|
link.href = url
|
||
|
|
const fileName = parseTime(new Date(),'') + '-' + name + '.' + suffix
|
||
|
|
link.setAttribute('download', fileName)
|
||
|
|
document.body.appendChild(link)
|
||
|
|
link.click()
|
||
|
|
document.body.removeChild(link)
|
||
|
|
}
|