mirror of
https://github.com/simon987/sist2.git
synced 2025-04-19 18:26:43 +00:00
248 lines
6.8 KiB
JavaScript
248 lines
6.8 KiB
JavaScript
/**
|
|
* https://stackoverflow.com/questions/10420352
|
|
*/
|
|
function humanFileSize(bytes) {
|
|
if (bytes === 0) {
|
|
return "0 B"
|
|
}
|
|
|
|
let thresh = 1000;
|
|
if (Math.abs(bytes) < thresh) {
|
|
return bytes + ' B';
|
|
}
|
|
let units = ['k', 'M', 'G', 'T', 'P', 'E', 'Z', 'Y'];
|
|
let u = -1;
|
|
do {
|
|
bytes /= thresh;
|
|
++u;
|
|
} while (Math.abs(bytes) >= thresh && u < units.length - 1);
|
|
|
|
return bytes.toFixed(1) + units[u];
|
|
}
|
|
|
|
/**
|
|
* https://stackoverflow.com/questions/6312993
|
|
*/
|
|
function humanTime(sec_num) {
|
|
sec_num = Math.floor(sec_num);
|
|
let hours = Math.floor(sec_num / 3600);
|
|
let minutes = Math.floor((sec_num - (hours * 3600)) / 60);
|
|
let seconds = sec_num - (hours * 3600) - (minutes * 60);
|
|
|
|
if (hours < 10) {
|
|
hours = "0" + hours;
|
|
}
|
|
if (minutes < 10) {
|
|
minutes = "0" + minutes;
|
|
}
|
|
if (seconds < 10) {
|
|
seconds = "0" + seconds;
|
|
}
|
|
return hours + ":" + minutes + ":" + seconds;
|
|
}
|
|
|
|
function debounce(func, wait) {
|
|
let timeout;
|
|
return function () {
|
|
let context = this, args = arguments;
|
|
let later = function () {
|
|
timeout = null;
|
|
func.apply(context, args);
|
|
};
|
|
clearTimeout(timeout);
|
|
timeout = setTimeout(later, wait);
|
|
func.apply(context, args);
|
|
};
|
|
}
|
|
|
|
function lum(c) {
|
|
c = c.substring(1);
|
|
let rgb = parseInt(c, 16);
|
|
let r = (rgb >> 16) & 0xff;
|
|
let g = (rgb >> 8) & 0xff;
|
|
let b = (rgb >> 0) & 0xff;
|
|
|
|
return 0.2126 * r + 0.7152 * g + 0.0722 * b;
|
|
}
|
|
|
|
function strUnescape(str) {
|
|
let result = "";
|
|
|
|
for (let i = 0; i < str.length; i++) {
|
|
const c = str[i];
|
|
const next = str[i + 1];
|
|
|
|
if (c === ']') {
|
|
if (next === ']') {
|
|
result += c;
|
|
i += 1;
|
|
} else {
|
|
result += String.fromCharCode(parseInt(str.slice(i, i + 2), 16));
|
|
i += 2;
|
|
}
|
|
} else {
|
|
result += c;
|
|
}
|
|
}
|
|
return result;
|
|
}
|
|
|
|
const CONF = new Settings();
|
|
|
|
const _defaults = {
|
|
display: "grid",
|
|
fuzzy: true,
|
|
highlight: true,
|
|
sort: "score",
|
|
searchInPath: false,
|
|
treemapType: "cascaded",
|
|
treemapTiling: "squarify",
|
|
treemapGroupingDepth: 3,
|
|
treemapColor: "PuBuGn",
|
|
treemapSize: "large",
|
|
suggestPath: true,
|
|
fragmentSize: 100,
|
|
columns: 5,
|
|
queryMode: "simple"
|
|
};
|
|
|
|
function loadSettings() {
|
|
CONF.load();
|
|
|
|
$("#settingDisplay").val(CONF.options.display);
|
|
$("#settingFuzzy").prop("checked", CONF.options.fuzzy);
|
|
$("#settingHighlight").prop("checked", CONF.options.highlight);
|
|
$("#settingSearchInPath").prop("checked", CONF.options.searchInPath);
|
|
$("#settingTreemapTiling").val(CONF.options.treemapTiling);
|
|
$("#settingTreemapGroupingDepth").val(CONF.options.treemapGroupingDepth);
|
|
$("#settingTreemapColor").val(CONF.options.treemapColor);
|
|
$("#settingTreemapSize").val(CONF.options.treemapSize);
|
|
$("#settingTreemapType").val(CONF.options.treemapType);
|
|
$("#settingSuggestPath").prop("checked", CONF.options.suggestPath);
|
|
$("#settingFragmentSize").val(CONF.options.fragmentSize);
|
|
$("#settingColumns").val(CONF.options.columns);
|
|
$("#settingQueryMode").val(CONF.options.queryMode);
|
|
}
|
|
|
|
function Settings() {
|
|
this.options = {};
|
|
|
|
this._onUpdate = function () {
|
|
$("#fuzzyToggle").prop("checked", this.options.fuzzy);
|
|
$("#searchBar").attr("placeholder", this.options.queryMode === "simple" ? "Search" : "Advanced search");
|
|
updateColumnStyle();
|
|
};
|
|
|
|
this.load = function () {
|
|
const raw = window.localStorage.getItem("options");
|
|
if (raw === null) {
|
|
this.options = _defaults;
|
|
} else {
|
|
const j = JSON.parse(raw);
|
|
if (!j || Object.keys(_defaults).some(k => !j.hasOwnProperty(k))) {
|
|
this.options = _defaults;
|
|
} else {
|
|
this.options = j;
|
|
}
|
|
}
|
|
|
|
this._onUpdate();
|
|
};
|
|
|
|
this.save = function () {
|
|
window.localStorage.setItem("options", JSON.stringify(this.options));
|
|
this._onUpdate();
|
|
}
|
|
}
|
|
|
|
function updateSettings() {
|
|
CONF.options.display = $("#settingDisplay").val();
|
|
CONF.options.fuzzy = $("#settingFuzzy").prop("checked");
|
|
CONF.options.highlight = $("#settingHighlight").prop("checked");
|
|
CONF.options.searchInPath = $("#settingSearchInPath").prop("checked");
|
|
CONF.options.treemapTiling = $("#settingTreemapTiling").val();
|
|
CONF.options.treemapGroupingDepth = $("#settingTreemapGroupingDepth").val();
|
|
CONF.options.treemapColor = $("#settingTreemapColor").val();
|
|
CONF.options.treemapSize = $("#settingTreemapSize").val();
|
|
CONF.options.treemapType = $("#settingTreemapType").val();
|
|
CONF.options.suggestPath = $("#settingSuggestPath").prop("checked");
|
|
CONF.options.fragmentSize = $("#settingFragmentSize").val();
|
|
CONF.options.columns = $("#settingColumns").val();
|
|
CONF.options.queryMode = $("#settingQueryMode").val();
|
|
CONF.save();
|
|
|
|
if (typeof searchDebounced !== "undefined") {
|
|
searchDebounced();
|
|
}
|
|
|
|
if (typeof updateStats !== "undefined") {
|
|
updateStats();
|
|
}
|
|
|
|
$.toast({
|
|
heading: "Settings updated",
|
|
text: "Settings saved to browser storage",
|
|
stack: 3,
|
|
bgColor: "#00a4bc",
|
|
textColor: "#fff",
|
|
position: 'bottom-right',
|
|
hideAfter: 3000,
|
|
loaderBg: "#08c7e8",
|
|
});
|
|
}
|
|
|
|
jQuery["jsonPost"] = function (url, data, showError = true) {
|
|
return jQuery.ajax({
|
|
url: url,
|
|
type: "post",
|
|
data: JSON.stringify(data),
|
|
contentType: "application/json"
|
|
}).fail(err => {
|
|
if (showError) {
|
|
showEsError();
|
|
}
|
|
console.log(err);
|
|
});
|
|
};
|
|
|
|
function toggleTheme() {
|
|
if (!document.cookie.includes("sist")) {
|
|
document.cookie = "sist=dark;SameSite=Strict";
|
|
} else {
|
|
document.cookie = "sist=; Max-Age=-99999999;";
|
|
}
|
|
window.location.reload();
|
|
}
|
|
|
|
function updateColumnStyle() {
|
|
const style = document.getElementById("style");
|
|
if (style) {
|
|
style.innerHTML =
|
|
`
|
|
@media screen and (min-width: 1500px) {
|
|
.container {
|
|
max-width: 1440px;
|
|
}
|
|
|
|
.bricklayer-column-sizer {
|
|
width: ${100 / CONF.options.columns}% !important;
|
|
}
|
|
|
|
.bricklayer-column {
|
|
max-width: ${100 / CONF.options.columns}%;
|
|
}
|
|
}
|
|
}
|
|
`
|
|
}
|
|
}
|
|
|
|
function dmsToDecimal(dms, ref) {
|
|
const tokens = dms.split(",")
|
|
|
|
const d = Number(tokens[0].trim().split(":")[0]) / Number(tokens[0].trim().split(":")[1])
|
|
const m = Number(tokens[1].trim().split(":")[0]) / Number(tokens[1].trim().split(":")[1])
|
|
const s = Number(tokens[2].trim().split(":")[0]) / Number(tokens[2].trim().split(":")[1])
|
|
|
|
return (d + (m / 60) + (s / 3600)) * (ref === "S" || ref === "W" ? -1 : 1)
|
|
} |