|
|
|
// Calendar
|
|
|
|
|
|
|
|
export const WEEK_DAYS = [
|
|
|
|
'Domenica',
|
|
|
|
'Lunedì',
|
|
|
|
'Martedì',
|
|
|
|
'Mercoledì',
|
|
|
|
'Giovedì',
|
|
|
|
'Venerdì',
|
|
|
|
'Sabato',
|
|
|
|
]
|
|
|
|
|
|
|
|
// Hashing
|
|
|
|
|
|
|
|
export function hashString(str, seed = 0) {
|
|
|
|
let h1 = 0xdeadbeef ^ seed,
|
|
|
|
h2 = 0x41c6ce57 ^ seed
|
|
|
|
for (let i = 0, ch; i < str.length; i++) {
|
|
|
|
ch = str.charCodeAt(i)
|
|
|
|
h1 = Math.imul(h1 ^ ch, 2654435761)
|
|
|
|
h2 = Math.imul(h2 ^ ch, 1597334677)
|
|
|
|
}
|
|
|
|
h1 = Math.imul(h1 ^ (h1 >>> 16), 2246822507) ^ Math.imul(h2 ^ (h2 >>> 13), 3266489909)
|
|
|
|
h2 = Math.imul(h2 ^ (h2 >>> 16), 2246822507) ^ Math.imul(h1 ^ (h1 >>> 13), 3266489909)
|
|
|
|
return 4294967296 * (2097151 & h2) + (h1 >>> 0)
|
|
|
|
}
|
|
|
|
|
|
|
|
// Courses
|
|
|
|
|
|
|
|
export function normalizeCourseName(name) {
|
|
|
|
return name
|
|
|
|
.split(' ')
|
|
|
|
.map(word => word.toLowerCase())
|
|
|
|
.map(word => {
|
|
|
|
if (word.trim().length === 0) return word
|
|
|
|
|
|
|
|
return /(^del|^nel|^di$|^dei$|^con$|^alla$|^per$|^e$|^la$)/.test(word)
|
|
|
|
? word
|
|
|
|
: word[0].toUpperCase() + word.slice(1)
|
|
|
|
})
|
|
|
|
.join(' ')
|
|
|
|
.replaceAll('Ii', 'II')
|
|
|
|
.replaceAll('Iii', 'III')
|
|
|
|
.replaceAll(/'(.)/g, ({}, letter) => "'" + letter.toUpperCase())
|
|
|
|
}
|
|
|
|
|
|
|
|
// JSX
|
|
|
|
|
|
|
|
export const withClasses = classes =>
|
|
|
|
Array.isArray(classes)
|
|
|
|
? classes.filter(e => !!e).join(' ')
|
|
|
|
: Object.entries(classes)
|
|
|
|
.filter(([, value]) => value)
|
|
|
|
.map(([key]) => key)
|
|
|
|
.join(' ')
|