mirror of
https://github.com/godotengine/godot-commit-artifacts.git
synced 2026-01-01 09:48:35 +03:00
161 lines
3.7 KiB
JavaScript
161 lines
3.7 KiB
JavaScript
(function () {
|
|
'use strict';
|
|
|
|
const LOCAL_PREFERENCE_PREFIX = "_godot_cmtar";
|
|
const LOCAL_PREFERENCE_DEFAULTS = {
|
|
|
|
};
|
|
|
|
// API Interaction
|
|
const ReportsAPI = {
|
|
async get(path = '/') {
|
|
const res = await fetch(`${path}`);
|
|
if (res.status !== 200) {
|
|
return null;
|
|
}
|
|
|
|
return await res.json();
|
|
},
|
|
|
|
async getBranchData(repositoryId, branchName) {
|
|
const idBits = repositoryId.split("/");
|
|
|
|
return await this.get(`data/${idBits[0]}.${idBits[1]}.${branchName}.json`);
|
|
},
|
|
};
|
|
|
|
// Content helpers
|
|
const ReportsFormatter = {
|
|
formatDate(dateString) {
|
|
const options = {
|
|
year: 'numeric', month: 'long', day: 'numeric',
|
|
};
|
|
const dateFormatter = new Intl.DateTimeFormat('en-US', options);
|
|
|
|
const date = new Date(dateString);
|
|
return dateFormatter.format(date);
|
|
},
|
|
|
|
formatTimestamp(timeString) {
|
|
const options = {
|
|
year: 'numeric', month: 'long', day: 'numeric',
|
|
hour: 'numeric', hour12: false, minute: 'numeric',
|
|
timeZone: 'UTC', timeZoneName: 'short',
|
|
};
|
|
const dateFormatter = new Intl.DateTimeFormat('en-US', options);
|
|
|
|
const date = new Date(timeString);
|
|
return dateFormatter.format(date);
|
|
},
|
|
|
|
formatTimespan(timeValue, timeUnit) {
|
|
const options = {
|
|
style: 'long',
|
|
};
|
|
const timeFormatter = new Intl.RelativeTimeFormat('en-US', options);
|
|
|
|
return timeFormatter.format(timeValue, timeUnit);
|
|
},
|
|
|
|
getDaysSince(dateString) {
|
|
const date = new Date(dateString);
|
|
const msBetween = (new Date()) - date;
|
|
const days = Math.floor(msBetween / (1000 * 60 * 60 * 24));
|
|
|
|
return days;
|
|
},
|
|
|
|
formatDays(days) {
|
|
return days + " " + (days !== 1 ? "days" : "day");
|
|
},
|
|
|
|
humanizeBytes(bytes) {
|
|
if (bytes < 1024) {
|
|
return `${bytes} B`;
|
|
}
|
|
|
|
bytes = bytes / 1024;
|
|
if (bytes < 1024) {
|
|
return `${Math.round(bytes, 2)} KB`;
|
|
}
|
|
|
|
bytes = bytes / 1024;
|
|
if (bytes < 1024) {
|
|
return `${Math.round(bytes, 2)} MB`;
|
|
}
|
|
|
|
bytes = bytes / 1024;
|
|
if (bytes < 1024) {
|
|
return `${Math.round(bytes, 2)} GB`;
|
|
}
|
|
|
|
bytes = bytes / 1024;
|
|
return `${Math.round(bytes, 2)} TB`;
|
|
}
|
|
};
|
|
|
|
const ReportsUtils = {
|
|
createEvent(name, detail = {}) {
|
|
return new CustomEvent(name, {
|
|
detail: detail
|
|
});
|
|
},
|
|
|
|
getHistoryHash() {
|
|
let rawHash = window.location.hash;
|
|
if (rawHash !== "") {
|
|
return rawHash.substr(1);
|
|
}
|
|
|
|
return "";
|
|
},
|
|
|
|
setHistoryHash(hash) {
|
|
const url = new URL(window.location);
|
|
url.hash = hash;
|
|
window.history.pushState({}, "", url);
|
|
},
|
|
|
|
navigateHistoryHash(hash) {
|
|
this.setHistoryHash(hash);
|
|
window.location.reload();
|
|
},
|
|
|
|
getLocalPreferences() {
|
|
// Always fallback on defaults.
|
|
const localPreferences = { ...LOCAL_PREFERENCE_DEFAULTS };
|
|
|
|
for (let key in localPreferences) {
|
|
const storedValue = localStorage.getItem(`${LOCAL_PREFERENCE_PREFIX}_${key}`);
|
|
if (storedValue != null) {
|
|
localPreferences[key] = JSON.parse(storedValue);
|
|
}
|
|
}
|
|
|
|
return localPreferences;
|
|
},
|
|
|
|
setLocalPreferences(currentPreferences) {
|
|
for (let key in currentPreferences) {
|
|
// Only store known properties.
|
|
if (key in LOCAL_PREFERENCE_DEFAULTS) {
|
|
localStorage.setItem(`${LOCAL_PREFERENCE_PREFIX}_${key}`, JSON.stringify(currentPreferences[key]));
|
|
}
|
|
}
|
|
},
|
|
|
|
resetLocalPreferences() {
|
|
this.setLocalPreferences(LOCAL_PREFERENCE_DEFAULTS);
|
|
},
|
|
};
|
|
|
|
const ReportsSingleton = {
|
|
api: ReportsAPI,
|
|
format: ReportsFormatter,
|
|
util: ReportsUtils,
|
|
};
|
|
|
|
window.greports = ReportsSingleton;
|
|
|
|
}());
|