| /** |
| * 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 |
| } |