const SEC_MS = 1000 const MIN_MS = SEC_MS * 60 const HOUR_MS = MIN_MS * 60 const DAY_MS = HOUR_MS * 24 const DAYS_SHORT = [ "Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun" ] const MONTHS = [ "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" ] ////////////////////////////////////////////////////////// // // // Taken from: https://weeknumber.com/how-to/javascript // // // ////////////////////////////////////////////////////////// Date.prototype.getWeek = function() { let date = new Date(this.getTime()) date.setHours(0, 0, 0, 0) // Thursday in current week decides the year. date.setDate(date.getDate() + 3 - (date.getDay() + 6) % 7) // January 4 is always in week 1. let week1 = new Date(date.getFullYear(), 0, 4) // Adjust to Thursday in week 1 and count number of weeks from date to week1. return 1 + Math.round(((date.getTime() - week1.getTime()) / 86400000 - 3 + (week1.getDay() + 6) % 7) / 7) } function formatDate(date) { let year = date.getFullYear().toString().padStart(4, "0") let month = (date.getMonth() + 1).toString().padStart(2, "0") let day = date.getDate().toString().padStart(2, "0") return `${year}-${month}-${day}` } function formatDuration(duration) { let hours = Math.floor(duration / 60) duration -= hours * 60 let res = "" if (hours > 0) { res += hours.toString() + "h" res += duration.toString().padStart(2, "0") } else { res += duration.toString() + "min" } return res } function formatPercentage(ratio) { let percentage = Math.round(ratio * 100) return percentage + "%" } function req(url, options = {}) { let headers = options.headers || {} let csrftoken = document.querySelector("input[name='csrfmiddlewaretoken']").value headers["X-CSRFToken"] = csrftoken options.headers = headers return fetch(url, options) } function getTemplate(cls) { let elmt = document.querySelector(".template." + cls).cloneNode(true) elmt.classList.remove("template") return elmt }