Compare commits

..

2 Commits

Author SHA1 Message Date
7d32bc1217 add cookies support 2025-07-04 13:48:13 +03:00
bd770aac2f type: fix broken types in dependencies
aiosignal 1.4.0 has been released including feature https://github.com/aio-libs/aiosignal/pull/699
However, aiohttp still uses old types which were not merged as well as
were not even implemented (the closest is
https://github.com/aio-libs/aiohttp/pull/11160 and related issue
https://github.com/aio-libs/aiohttp/issues/11036, whoever it still
doesn't change signatures for _AppSignal)

Let's just mark those calls as ignore
2025-07-04 13:03:56 +03:00
5 changed files with 66 additions and 66 deletions

View File

@ -80,8 +80,7 @@
data-classes="table table-hover"
data-sortable="true"
data-sort-name="timestamp"
data-sort-order="desc"
data-toggle="table">
data-sort-order="desc">
<thead class="table-primary">
<tr>
<th data-align="right" data-field="timestamp">date</th>
@ -509,6 +508,8 @@
}
ready(_ => {
packageInfoEventsTable.bootstrapTable({});
packageInfoEventsUpdateChart = new Chart(packageInfoEventsUpdateChartCanvas, {
type: "line",
data: {},
@ -540,16 +541,6 @@
packageInfoAutoReloadTask = null; // not really required (?) but lets clear everything
});
// set refresh interval
for (let refreshEnabled = Cookies.get(`ahriman-${packageInfoAutoReloadButton.id}-refresh-enabled`);
!!refreshEnabled;
refreshEnabled = undefined) {
packageInfoAutoReloadButton.checked = refreshEnabled === "true";
}
for (let refreshInterval = Cookies.get(`ahriman-${packageInfoAutoReloadButton.id}-refresh-interval`);
!!refreshInterval;
refreshInterval = undefined) {
toggleActiveElement(packageInfoAutoReloadInput, "interval", refreshInterval);
}
restoreAutoReloadSettings(packageInfoAutoReloadButton, packageInfoAutoReloadInput);
});
</script>

View File

@ -315,17 +315,7 @@
onUncheckAll: onCheckFunction,
});
// set refresh interval
for (let refreshEnabled = Cookies.get(`ahriman-${tableAutoReloadButton.id}-refresh-enabled`);
!!refreshEnabled;
refreshEnabled = undefined) {
tableAutoReloadButton.checked = refreshEnabled === "true";
}
for (let refreshInterval = Cookies.get(`ahriman-${tableAutoReloadButton.id}-refresh-interval`);
!!refreshInterval;
refreshInterval = undefined) {
toggleActiveElement(tableAutoReloadInput, "interval", refreshInterval);
}
restoreAutoReloadSettings(tableAutoReloadButton, tableAutoReloadInput);
selectRepository();
{% if autorefresh_intervals %}

View File

@ -53,8 +53,7 @@ SigLevel = Database{% if has_repo_signed %}Required{% else %}Never{% endif %} Pa
data-show-search-clear-button="true"
data-sortable="true"
data-sort-name="base"
data-sort-order="asc"
data-toggle="table">
data-sort-order="asc">
<thead class="table-primary">
<tr>
<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(_ => {
table.on("created-controls.bs.table", _ => {
new easepick.create({
element: document.querySelector(".bootstrap-table-filter-control-timestamp"),
css: [
"https://cdn.jsdelivr.net/npm/@easepick/bundle@1.2.1/dist/index.css",
],
grid: 2,
calendars: 2,
autoApply: false,
locale: {
cancel: "Clear",
},
RangePlugin: {
tooltip: false,
},
plugins: [
"RangePlugin",
],
setup: picker => {
picker.on("select", _ => { table.bootstrapTable("triggerSearch"); });
// replace "Cancel" behaviour to "Clear"
picker.onClickCancelButton = element => {
if (picker.isCancelButton(element)) {
picker.clear();
picker.hide();
table.bootstrapTable("triggerSearch");
}
};
},
});
table.bootstrapTable({
onCreatedControls: _ => {
new easepick.create({
element: document.querySelector(".bootstrap-table-filter-control-timestamp"),
css: [
"https://cdn.jsdelivr.net/npm/@easepick/bundle@1.2.1/dist/index.css",
],
grid: 2,
calendars: 2,
autoApply: false,
locale: {
cancel: "Clear",
},
RangePlugin: {
tooltip: false,
},
plugins: [
"RangePlugin",
],
setup: picker => {
picker.on("select", _ => { table.bootstrapTable("triggerSearch"); });
// replace "Cancel" behaviour to "Clear"
picker.onClickCancelButton = element => {
if (picker.isCancelButton(element)) {
picker.clear();
picker.hide();
table.bootstrapTable("triggerSearch");
}
};
},
});
},
});
});
</script>

View File

@ -120,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) {
return String(string)
.replace(/&/g, "&amp;")
@ -139,6 +152,18 @@
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) {
if (interval) {
toggle.checked = true; // toggle reload
@ -163,13 +188,6 @@
return intervalId;
}
function toggleActiveElement(selector, dataType, value) {
Array.from(selector.children).forEach(il => {
Array.from(il.children).forEach(el => el.classList.remove("active"));
});
selector.querySelector(`a[data-${dataType}="${value}"]`)?.classList?.add("active");
}
Date.prototype.toISOStringShort = function() {
const pad = number => String(number).padStart(2, "0");
return `${this.getFullYear()}-${pad(this.getMonth() + 1)}-${pad(this.getDate())} ${pad(this.getHours())}:${pad(this.getMinutes())}:${pad(this.getSeconds())}`;

View File

@ -72,7 +72,7 @@ def _create_socket(configuration: Configuration, application: Application) -> so
async def remove_socket(_: Application) -> None:
unix_socket.unlink(missing_ok=True)
application.on_shutdown.append(remove_socket)
application.on_shutdown.append(remove_socket) # type: ignore[arg-type]
return sock
@ -142,8 +142,8 @@ def setup_server(configuration: Configuration, spawner: Spawn, repositories: lis
InitializeError: if no repositories set
"""
application = Application(logger=logging.getLogger(__name__))
application.on_shutdown.append(_on_shutdown)
application.on_startup.append(_on_startup)
application.on_shutdown.append(_on_shutdown) # type: ignore[arg-type]
application.on_startup.append(_on_startup) # type: ignore[arg-type]
application.middlewares.append(normalize_path_middleware(append_slash=False, remove_slash=True))
application.middlewares.append(exception_handler(application.logger))