magnetico/cmd/magneticow/data/static/scripts/common.js
2022-08-05 01:17:28 +02:00

87 lines
2.8 KiB
JavaScript

"use strict";
// Source: https://stackoverflow.com/a/111545/4466589
function encodeQueryData(data) {
let ret = [];
for (let d in data) {
if (data[d] === null || data[d] === undefined)
continue;
ret.push(encodeURIComponent(d) + "=" + encodeURIComponent(data[d]));
}
return ret.join("&");
}
// Source: https://stackoverflow.com/q/10420352/4466589
function fileSize(fileSizeInBytes) {
let i = -1;
let byteUnits = [' KiB', ' MiB', ' GiB', ' TiB', ' PiB', ' EiB', ' ZiB', ' YiB'];
do {
fileSizeInBytes = fileSizeInBytes / 1024;
i++;
} while (fileSizeInBytes > 1024);
return Math.max(fileSizeInBytes, 0.1).toFixed(1) + byteUnits[i];
}
function humaniseDate(unixTime) {
return (new Date(unixTime * 1000)).toLocaleDateString("en-GB", {
day: "2-digit",
month: "2-digit",
year: "numeric",
hour: "2-digit",
minute: "2-digit",
second: "2-digit"
});
}
// a fetch() that errs on anything but HTTP 2XX
// Source: https://github.com/github/fetch/issues/155#issuecomment-108288863
function myFetch(url, options) {
if (options == null) options = {}
if (options.credentials == null) options.credentials = 'same-origin'
return fetch(url, options).then(function (response) {
if (response.status >= 200 && response.status < 300) {
return Promise.resolve(response)
} else {
var error = new Error(response.statusText || response.status)
error.response = response
return Promise.reject(error)
}
})
}
/**
* Returns the ISO 8601 week number for this date.
*
* Source: https://stackoverflow.com/a/9047794/4466589
*
* @param int dowOffset
* @return int
*/
Date.prototype.getWeek = function (dowOffset) {
/* getWeek() was developed by Nick Baicoianu at MeanFreePath: http://www.meanfreepath.com */
dowOffset = 1;
let newYear = new Date(this.getFullYear(), 0, 1);
let day = newYear.getDay() - dowOffset; //the day of week the year begins on
day = (day >= 0 ? day : day + 7);
let daynum = Math.floor((this.getTime() - newYear.getTime() -
(this.getTimezoneOffset() - newYear.getTimezoneOffset()) * 60000) / 86400000) + 1;
let weeknum;
// if the year starts before the middle of a week
if (day < 4) {
weeknum = Math.floor((daynum + day - 1) / 7) + 1;
if (weeknum > 52) {
var nYear = new Date(this.getFullYear() + 1, 0, 1);
var nday = nYear.getDay() - dowOffset;
nday = nday >= 0 ? nday : nday + 7;
/*if the next year starts before the middle of
the week, it is week #1 of that year*/
weeknum = nday < 4 ? 1 : 53;
}
} else {
weeknum = Math.floor((daynum + day - 1) / 7);
}
return weeknum;
};