mirror of
https://github.com/arcan1s/ahriman.git
synced 2025-07-06 10:35:47 +00:00
Compare commits
1 Commits
master
...
feature/co
Author | SHA1 | Date | |
---|---|---|---|
7d32bc1217 |
@ -117,7 +117,6 @@
|
|||||||
data-sortable="true"
|
data-sortable="true"
|
||||||
data-sort-name="base"
|
data-sort-name="base"
|
||||||
data-sort-order="asc"
|
data-sort-order="asc"
|
||||||
data-toggle="table"
|
|
||||||
data-toolbar="#toolbar">
|
data-toolbar="#toolbar">
|
||||||
<thead class="table-primary">
|
<thead class="table-primary">
|
||||||
<tr>
|
<tr>
|
||||||
|
@ -80,8 +80,7 @@
|
|||||||
data-classes="table table-hover"
|
data-classes="table table-hover"
|
||||||
data-sortable="true"
|
data-sortable="true"
|
||||||
data-sort-name="timestamp"
|
data-sort-name="timestamp"
|
||||||
data-sort-order="desc"
|
data-sort-order="desc">
|
||||||
data-toggle="table">
|
|
||||||
<thead class="table-primary">
|
<thead class="table-primary">
|
||||||
<tr>
|
<tr>
|
||||||
<th data-align="right" data-field="timestamp">date</th>
|
<th data-align="right" data-field="timestamp">date</th>
|
||||||
@ -509,6 +508,8 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
ready(_ => {
|
ready(_ => {
|
||||||
|
packageInfoEventsTable.bootstrapTable({});
|
||||||
|
|
||||||
packageInfoEventsUpdateChart = new Chart(packageInfoEventsUpdateChartCanvas, {
|
packageInfoEventsUpdateChart = new Chart(packageInfoEventsUpdateChartCanvas, {
|
||||||
type: "line",
|
type: "line",
|
||||||
data: {},
|
data: {},
|
||||||
@ -539,5 +540,7 @@
|
|||||||
clearInterval(packageInfoAutoReloadTask);
|
clearInterval(packageInfoAutoReloadTask);
|
||||||
packageInfoAutoReloadTask = null; // not really required (?) but lets clear everything
|
packageInfoAutoReloadTask = null; // not really required (?) but lets clear everything
|
||||||
});
|
});
|
||||||
|
|
||||||
|
restoreAutoReloadSettings(packageInfoAutoReloadButton, packageInfoAutoReloadInput);
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
@ -250,6 +250,12 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
ready(_ => {
|
ready(_ => {
|
||||||
|
const onCheckFunction = function () {
|
||||||
|
if (packageRemoveButton) {
|
||||||
|
packageRemoveButton.disabled = !getSelection().length;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
document.querySelectorAll("#repositories a").forEach(element => {
|
document.querySelectorAll("#repositories a").forEach(element => {
|
||||||
element.onclick = _ => {
|
element.onclick = _ => {
|
||||||
repository = {
|
repository = {
|
||||||
@ -264,49 +270,53 @@
|
|||||||
};
|
};
|
||||||
});
|
});
|
||||||
|
|
||||||
table.on("check.bs.table uncheck.bs.table check-all.bs.table uncheck-all.bs.table", _ => {
|
table.bootstrapTable({
|
||||||
if (packageRemoveButton) {
|
onCheck: onCheckFunction,
|
||||||
packageRemoveButton.disabled = !table.bootstrapTable("getSelections").length;
|
onCheckAll: onCheckFunction,
|
||||||
}
|
onClickRow: (data, row, cell) => {
|
||||||
});
|
if (0 === cell || "base" === cell) {
|
||||||
table.on("click-row.bs.table", (self, data, row, cell) => {
|
const method = data[0] === true ? "uncheckBy" : "checkBy"; // fck javascript
|
||||||
if (0 === cell || "base" === cell) {
|
table.bootstrapTable(method, {field: "id", values: [data.id]});
|
||||||
const method = data[0] === true ? "uncheckBy" : "checkBy"; // fck javascript
|
} else showPackageInfo(data.id);
|
||||||
table.bootstrapTable(method, {field: "id", values: [data.id]});
|
},
|
||||||
} else showPackageInfo(data.id);
|
onCreatedControls: _ => {
|
||||||
});
|
new easepick.create({
|
||||||
table.on("created-controls.bs.table", _ => {
|
element: document.querySelector(".bootstrap-table-filter-control-timestamp"),
|
||||||
new easepick.create({
|
css: [
|
||||||
element: document.querySelector(".bootstrap-table-filter-control-timestamp"),
|
"https://cdn.jsdelivr.net/npm/@easepick/bundle@1.2.1/dist/index.css",
|
||||||
css: [
|
],
|
||||||
"https://cdn.jsdelivr.net/npm/@easepick/bundle@1.2.1/dist/index.css",
|
grid: 2,
|
||||||
],
|
calendars: 2,
|
||||||
grid: 2,
|
autoApply: false,
|
||||||
calendars: 2,
|
locale: {
|
||||||
autoApply: false,
|
cancel: "Clear",
|
||||||
locale: {
|
},
|
||||||
cancel: "Clear",
|
RangePlugin: {
|
||||||
},
|
tooltip: false,
|
||||||
RangePlugin: {
|
},
|
||||||
tooltip: false,
|
plugins: [
|
||||||
},
|
"RangePlugin",
|
||||||
plugins: [
|
],
|
||||||
"RangePlugin",
|
setup: picker => {
|
||||||
],
|
picker.on("select", _ => { table.bootstrapTable("triggerSearch"); });
|
||||||
setup: picker => {
|
// replace "Cancel" behaviour to "Clear"
|
||||||
picker.on("select", _ => { table.bootstrapTable("triggerSearch"); });
|
picker.onClickCancelButton = element => {
|
||||||
// replace "Cancel" behaviour to "Clear"
|
if (picker.isCancelButton(element)) {
|
||||||
picker.onClickCancelButton = element => {
|
picker.clear();
|
||||||
if (picker.isCancelButton(element)) {
|
picker.hide();
|
||||||
picker.clear();
|
table.bootstrapTable("triggerSearch");
|
||||||
picker.hide();
|
}
|
||||||
table.bootstrapTable("triggerSearch");
|
};
|
||||||
}
|
},
|
||||||
};
|
});
|
||||||
},
|
},
|
||||||
});
|
onPageChange: (_, size) => { Cookies.set(`ahriman-${table.attr("id")}-page-size`, size); },
|
||||||
|
onUncheck: onCheckFunction,
|
||||||
|
onUncheckAll: onCheckFunction,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
restoreAutoReloadSettings(tableAutoReloadButton, tableAutoReloadInput);
|
||||||
|
|
||||||
selectRepository();
|
selectRepository();
|
||||||
{% if autorefresh_intervals %}
|
{% if autorefresh_intervals %}
|
||||||
toggleTableAutoReload();
|
toggleTableAutoReload();
|
||||||
|
@ -53,8 +53,7 @@ SigLevel = Database{% if has_repo_signed %}Required{% else %}Never{% endif %} Pa
|
|||||||
data-show-search-clear-button="true"
|
data-show-search-clear-button="true"
|
||||||
data-sortable="true"
|
data-sortable="true"
|
||||||
data-sort-name="base"
|
data-sort-name="base"
|
||||||
data-sort-order="asc"
|
data-sort-order="asc">
|
||||||
data-toggle="table">
|
|
||||||
<thead class="table-primary">
|
<thead class="table-primary">
|
||||||
<tr>
|
<tr>
|
||||||
<th data-sortable="true" data-switchable="false" data-field="name" data-filter-control="input" data-filter-control-placeholder="(any package)">package</th>
|
<th data-sortable="true" data-switchable="false" data-field="name" data-filter-control="input" data-filter-control-placeholder="(any package)">package</th>
|
||||||
@ -128,36 +127,38 @@ SigLevel = Database{% if has_repo_signed %}Required{% else %}Never{% endif %} Pa
|
|||||||
}
|
}
|
||||||
|
|
||||||
ready(_ => {
|
ready(_ => {
|
||||||
table.on("created-controls.bs.table", _ => {
|
table.bootstrapTable({
|
||||||
new easepick.create({
|
onCreatedControls: _ => {
|
||||||
element: document.querySelector(".bootstrap-table-filter-control-timestamp"),
|
new easepick.create({
|
||||||
css: [
|
element: document.querySelector(".bootstrap-table-filter-control-timestamp"),
|
||||||
"https://cdn.jsdelivr.net/npm/@easepick/bundle@1.2.1/dist/index.css",
|
css: [
|
||||||
],
|
"https://cdn.jsdelivr.net/npm/@easepick/bundle@1.2.1/dist/index.css",
|
||||||
grid: 2,
|
],
|
||||||
calendars: 2,
|
grid: 2,
|
||||||
autoApply: false,
|
calendars: 2,
|
||||||
locale: {
|
autoApply: false,
|
||||||
cancel: "Clear",
|
locale: {
|
||||||
},
|
cancel: "Clear",
|
||||||
RangePlugin: {
|
},
|
||||||
tooltip: false,
|
RangePlugin: {
|
||||||
},
|
tooltip: false,
|
||||||
plugins: [
|
},
|
||||||
"RangePlugin",
|
plugins: [
|
||||||
],
|
"RangePlugin",
|
||||||
setup: picker => {
|
],
|
||||||
picker.on("select", _ => { table.bootstrapTable("triggerSearch"); });
|
setup: picker => {
|
||||||
// replace "Cancel" behaviour to "Clear"
|
picker.on("select", _ => { table.bootstrapTable("triggerSearch"); });
|
||||||
picker.onClickCancelButton = element => {
|
// replace "Cancel" behaviour to "Clear"
|
||||||
if (picker.isCancelButton(element)) {
|
picker.onClickCancelButton = element => {
|
||||||
picker.clear();
|
if (picker.isCancelButton(element)) {
|
||||||
picker.hide();
|
picker.clear();
|
||||||
table.bootstrapTable("triggerSearch");
|
picker.hide();
|
||||||
}
|
table.bootstrapTable("triggerSearch");
|
||||||
};
|
}
|
||||||
},
|
};
|
||||||
});
|
},
|
||||||
|
});
|
||||||
|
},
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
@ -19,6 +19,8 @@
|
|||||||
|
|
||||||
<script src="https://cdn.jsdelivr.net/npm/chart.js@4.4.4/dist/chart.umd.min.js" crossorigin="anonymous" type="application/javascript"></script>
|
<script src="https://cdn.jsdelivr.net/npm/chart.js@4.4.4/dist/chart.umd.min.js" crossorigin="anonymous" type="application/javascript"></script>
|
||||||
|
|
||||||
|
<script src="https://cdn.jsdelivr.net/npm/js-cookie@3.0.5/dist/js.cookie.min.js" crossorigin="anonymous" type="application/javascript"></script>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
async function copyToClipboard(text, button) {
|
async function copyToClipboard(text, button) {
|
||||||
await navigator.clipboard.writeText(text);
|
await navigator.clipboard.writeText(text);
|
||||||
@ -118,6 +120,19 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function restoreAutoReloadSettings(toggle, intervalSelector) {
|
||||||
|
for (let refreshEnabled = Cookies.get(`ahriman-${toggle.id}-refresh-enabled`);
|
||||||
|
!!refreshEnabled;
|
||||||
|
refreshEnabled = undefined) {
|
||||||
|
toggle.checked = refreshEnabled === "true";
|
||||||
|
}
|
||||||
|
for (let refreshInterval = Cookies.get(`ahriman-${toggle.id}-refresh-interval`);
|
||||||
|
!!refreshInterval;
|
||||||
|
refreshInterval = undefined) {
|
||||||
|
toggleActiveElement(intervalSelector, "interval", refreshInterval);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function safe(string) {
|
function safe(string) {
|
||||||
return String(string)
|
return String(string)
|
||||||
.replace(/&/g, "&")
|
.replace(/&/g, "&")
|
||||||
@ -137,6 +152,18 @@
|
|||||||
return element;
|
return element;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function toggleActiveElement(selector, dataType, value) {
|
||||||
|
const targetElement = selector.querySelector(`a[data-${dataType}="${value}"]`);
|
||||||
|
if (targetElement?.classList?.contains("active")) {
|
||||||
|
return; // element is already active, skip processing
|
||||||
|
}
|
||||||
|
|
||||||
|
Array.from(selector.children).forEach(il => {
|
||||||
|
Array.from(il.children).forEach(el => el.classList.remove("active"));
|
||||||
|
});
|
||||||
|
targetElement?.classList?.add("active");
|
||||||
|
}
|
||||||
|
|
||||||
function toggleAutoReload(toggle, interval, intervalSelector, callback) {
|
function toggleAutoReload(toggle, interval, intervalSelector, callback) {
|
||||||
if (interval) {
|
if (interval) {
|
||||||
toggle.checked = true; // toggle reload
|
toggle.checked = true; // toggle reload
|
||||||
@ -144,21 +171,21 @@
|
|||||||
interval = intervalSelector.querySelector(".active")?.dataset?.interval; // find active element
|
interval = intervalSelector.querySelector(".active")?.dataset?.interval; // find active element
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let intervalId = null;
|
||||||
if (interval) {
|
if (interval) {
|
||||||
if (toggle.checked) {
|
if (toggle.checked) {
|
||||||
// refresh UI
|
// refresh UI
|
||||||
Array.from(intervalSelector.children).forEach(il => {
|
toggleActiveElement(intervalSelector, "interval", interval);
|
||||||
Array.from(il.children).forEach(el => el.classList.remove("active"));
|
|
||||||
});
|
|
||||||
intervalSelector.querySelector(`a[data-interval="${interval}"]`)?.classList?.add("active");
|
|
||||||
// finally create timer task
|
// finally create timer task
|
||||||
return setInterval(callback, interval);
|
intervalId = setInterval(callback, interval);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
toggle.checked = false; // no active interval found, disable toggle
|
toggle.checked = false; // no active interval found, disable toggle
|
||||||
}
|
}
|
||||||
|
|
||||||
return null; // return null to assign to keep method sane
|
Cookies.set(`ahriman-${toggle.id}-refresh-enabled`, toggle.checked);
|
||||||
|
Cookies.set(`ahriman-${toggle.id}-refresh-interval`, interval);
|
||||||
|
return intervalId;
|
||||||
}
|
}
|
||||||
|
|
||||||
Date.prototype.toISOStringShort = function() {
|
Date.prototype.toISOStringShort = function() {
|
||||||
|
Reference in New Issue
Block a user