blob: 001707332e203b6aeebe0c2b393fd9d4a3b1bc09 [file] [log] [blame]
/**
* MIT License
*
* Copyright (c) 2018 Chong Guo
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
// Parse the time to string
export const parseTime = (
time?: object | string | number,
cFormat?: string
): string | null => {
if (time === undefined) {
return null
}
const format = cFormat || '{y}-{m}-{d} {h}:{i}:{s}'
let date: Date
if (typeof time === 'object') {
date = time as Date
} 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: { [key: string]: number } = {
y: date.getFullYear(),
m: date.getMonth() + 1,
d: date.getDate(),
h: date.getHours(),
i: date.getMinutes(),
s: date.getSeconds(),
a: date.getDay()
}
const timeStr = format.replace(/{(y|m|d|h|i|s|a)+}/g, (result, key) => {
let value = formatObj[key]
// Note: getDay() returns 0 on Sunday
if (key === 'a') {
return ['日', '一', '二', '三', '四', '五', '六'][value]
}
if (result.length > 0 && value < 10) {
return '0' + value
}
return String(value) || '0'
})
return timeStr
}
// Format and filter json data using filterKeys array
export const formatJson = (filterKeys: any, jsonData: any) =>
jsonData.map((data: any) => filterKeys.map((key: string) => {
if (key === 'timestamp') {
return parseTime(data[key])
} else {
return data[key]
}
}))
// Check if an element has a class
export const hasClass = (ele: HTMLElement, className: string) => {
return !!ele.className.match(new RegExp('(\\s|^)' + className + '(\\s|$)'))
}
// Add class to element
export const addClass = (ele: HTMLElement, className: string) => {
if (!hasClass(ele, className)) ele.className += ' ' + className
}
// Remove class from element
export const removeClass = (ele: HTMLElement, className: string) => {
if (hasClass(ele, className)) {
const reg = new RegExp('(\\s|^)' + className + '(\\s|$)')
ele.className = ele.className.replace(reg, ' ')
}
}
// Toggle class for the selected element
export const toggleClass = (ele: HTMLElement, className: string) => {
if (!ele || !className) {
return
}
let classString = ele.className
const nameIndex = classString.indexOf(className)
if (nameIndex === -1) {
classString += '' + className
} else {
classString =
classString.substr(0, nameIndex) +
classString.substr(nameIndex + className.length)
}
ele.className = classString
}