bulma-calendar
Version:
Display a calendar for date/time selection, in different colors and sizes
65 lines (52 loc) • 1.51 kB
JavaScript
import * as type from "./type";
import * as dateFns from 'date-fns';
export const uuid = (prefix = '') => prefix + ([1e7] + -1e3 + -4e3 + -8e3 + -1e11).replace(/[018]/g, c => (c ^ (window.crypto || window.msCrypto).getRandomValues(new Uint8Array(1))[0] & 15 >> c / 4).toString(16));
export const deepMerge = (...sources) => {
let acc = {}
for (const source of sources) {
if (source instanceof Array) {
if (!(acc instanceof Array)) {
acc = []
}
acc = [...acc, ...source]
} else if (source instanceof Object) {
for (let [key, value] of Object.entries(source)) {
if (value instanceof Object && key in acc) {
value = deepMerge(acc[key], value)
}
acc = { ...acc,
[key]: value
}
}
}
}
return acc;
};
export const detectSupportsPassive = () => {
let supportsPassive = false;
try {
let opts = Object.defineProperty({}, 'passive', {
get() {
supportsPassive = true;
}
});
window.addEventListener('testPassive', null, opts);
window.removeEventListener('testPassive', null, opts);
} catch (e) {}
return supportsPassive;
}
export const newDate = (date, format, fallback = 'yyyy-MM-dd HH:mm') => {
if (!date) {
return undefined;
}
// Clone Date
if (type.isDate(date)) {
return new Date(date.getTime());
}
// Parse Date
let result = dateFns.parse(date, format, new Date());
if (!type.isDate(result)) {
result = dateFns.parse(date, fallback, new Date());
}
return result;
}