This repository has been archived on 2022-11-26. You can view files and clone it, but cannot push or open issues or pull requests.
teemant-old/src/js/utility.js

186 lines
5.2 KiB
JavaScript

import util from 'util'
// Create element
export function el (element, content, classes, id) {
let _el = document.createElement(element)
_el.innerHTML = content
_el.classList = classes || []
if (id) _el.id = id
return _el.outerHTML
}
export function span (content, classes, id) {
return el('span', content, classes, id)
}
// String format
export function sf () {
return util.format.apply(null, arguments)
}
export function formatDate (date, format, utc) {
var MMMM = ['\x00', 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']
var MMM = ['\x01', 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
var dddd = ['\x02', 'Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']
var ddd = ['\x03', 'Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat']
function ii (i, len) { var s = i + ''; len = len || 2; while (s.length < len) s = '0' + s; return s }
var y = utc ? date.getUTCFullYear() : date.getFullYear()
format = format.replace(/(^|[^\\])yyyy+/g, '$1' + y)
format = format.replace(/(^|[^\\])yy/g, '$1' + y.toString().substr(2, 2))
format = format.replace(/(^|[^\\])y/g, '$1' + y)
var M = (utc ? date.getUTCMonth() : date.getMonth()) + 1
format = format.replace(/(^|[^\\])MMMM+/g, '$1' + MMMM[0])
format = format.replace(/(^|[^\\])MMM/g, '$1' + MMM[0])
format = format.replace(/(^|[^\\])MM/g, '$1' + ii(M))
format = format.replace(/(^|[^\\])M/g, '$1' + M)
var d = utc ? date.getUTCDate() : date.getDate()
format = format.replace(/(^|[^\\])dddd+/g, '$1' + dddd[0])
format = format.replace(/(^|[^\\])ddd/g, '$1' + ddd[0])
format = format.replace(/(^|[^\\])dd/g, '$1' + ii(d))
format = format.replace(/(^|[^\\])d/g, '$1' + d)
var H = utc ? date.getUTCHours() : date.getHours()
format = format.replace(/(^|[^\\])HH+/g, '$1' + ii(H))
format = format.replace(/(^|[^\\])H/g, '$1' + H)
var h = H > 12 ? H - 12 : H === 0 ? 12 : H
format = format.replace(/(^|[^\\])hh+/g, '$1' + ii(h))
format = format.replace(/(^|[^\\])h/g, '$1' + h)
var m = utc ? date.getUTCMinutes() : date.getMinutes()
format = format.replace(/(^|[^\\])mm+/g, '$1' + ii(m))
format = format.replace(/(^|[^\\])m/g, '$1' + m)
var s = utc ? date.getUTCSeconds() : date.getSeconds()
format = format.replace(/(^|[^\\])ss+/g, '$1' + ii(s))
format = format.replace(/(^|[^\\])s/g, '$1' + s)
var f = utc ? date.getUTCMilliseconds() : date.getMilliseconds()
format = format.replace(/(^|[^\\])fff+/g, '$1' + ii(f, 3))
f = Math.round(f / 10)
format = format.replace(/(^|[^\\])ff/g, '$1' + ii(f))
f = Math.round(f / 10)
format = format.replace(/(^|[^\\])f/g, '$1' + f)
var T = H < 12 ? 'AM' : 'PM'
format = format.replace(/(^|[^\\])TT+/g, '$1' + T)
format = format.replace(/(^|[^\\])T/g, '$1' + T.charAt(0))
var t = T.toLowerCase()
format = format.replace(/(^|[^\\])tt+/g, '$1' + t)
format = format.replace(/(^|[^\\])t/g, '$1' + t.charAt(0))
var tz = -date.getTimezoneOffset()
var K = utc || !tz ? 'Z' : tz > 0 ? '+' : '-'
if (!utc) {
tz = Math.abs(tz)
var tzHrs = Math.floor(tz / 60)
var tzMin = tz % 60
K += ii(tzHrs) + ':' + ii(tzMin)
}
format = format.replace(/(^|[^\\])K/g, '$1' + K)
var day = (utc ? date.getUTCDay() : date.getDay()) + 1
format = format.replace(new RegExp(dddd[0], 'g'), dddd[day])
format = format.replace(new RegExp(ddd[0], 'g'), ddd[day])
format = format.replace(new RegExp(MMMM[0], 'g'), MMMM[M])
format = format.replace(new RegExp(MMM[0], 'g'), MMM[M])
format = format.replace(/\\(.)/g, '$1')
return format
}
export function rand (randgen, min, max) {
return parseInt(randgen() * (max - min + 1), 10) + min
}
export function removeStr (arr, str) {
let index = arr.indexOf(str)
if (index > -1) {
arr.splice(index, 1)
return arr
}
return arr
}
export function grep (items, callback) {
let filtered = []
for (let i in items) {
let item = items[i]
let cond = callback(item)
if (cond) {
filtered.push(item)
}
}
return filtered
}
export function match (word, array) {
return grep(
array,
function (w) {
return w.toLowerCase().indexOf(word.toLowerCase()) === 0
}
)
}
export function serialize (obj) {
let str = []
for (let p in obj) {
if (obj.hasOwnProperty(p)) {
str.push(encodeURIComponent(p) + '=' + encodeURIComponent(obj[p]))
}
}
return str.join('&')
}
export function removeClass (element, cl) {
let classList = element.className.split(' ')
if (classList.indexOf(cl) !== -1) {
classList.splice(classList.indexOf(cl), 1)
}
element.className = classList.join(' ')
}
export function addClass (element, cl) {
let classList = element.className.split(' ')
if (classList.indexOf(cl) !== -1) {
return
}
classList.push(cl)
element.className = classList.join(' ')
}
export function toggleClass (element, cl) {
let classList = element.className.split(' ')
if (classList.indexOf(cl) !== -1) {
removeClass(element, cl)
} else {
addClass(element, cl)
}
}
export function objectGetKey (obj, value) {
let key = null
for (let f in obj) {
if (obj[f] === value) {
key = f
}
}
return key
}