release: archivebox 0.9.33rc41

This commit is contained in:
Nick Sweeting 2026-05-29 04:17:08 -07:00
parent dd741de767
commit 9704d933e6
No known key found for this signature in database
8 changed files with 84 additions and 20 deletions

View File

@ -338,6 +338,8 @@ class PluginConfigFormMixin:
"checkbox_id": f"id_{field_name}_{index}",
"enabled_config_key": enabled_config_key,
"description": str(schema.get("description") or "").strip(),
"source_url": f"https://github.com/ArchiveBox/abx-plugins/tree/main/abx_plugins/plugins/{plugin_name}",
"docs_url": f"https://archivebox.github.io/abx-plugins/#{plugin_name}",
"required_plugins": [str(item) for item in schema.get("required_plugins") or []],
"required_binaries_count": len(schema.get("required_binaries") or []),
"config_fields": config_fields,

View File

@ -302,7 +302,7 @@ document.addEventListener('DOMContentLoaded', function () {
{% block after_field_sets %}
{{ block.super }}
<section class="module aligned persona-plugin-config">
<section id="plugin-config" class="module aligned persona-plugin-config">
<h2>Plugin Config</h2>
<p>These typed controls update the same Persona config JSON shown above. Shared config keys stay synced across plugin sections.</p>
{% include "core/plugin_config_grid.html" with plugin_groups=adminform.form.plugin_groups %}

View File

@ -247,11 +247,11 @@
<div class="plugin-presets">
<span class="preset-label">Quick Select:</span>
<a href="/admin/personas/persona/add/" class="preset-btn persona-create-btn" target="_blank" rel="noopener" title="Create new profile / import from Chrome">+ 👤</a>
<a href="/admin/personas/persona/add/" class="preset-btn persona-create-btn" target="_blank" rel="noopener" title="Create new profile / import from Chrome" aria-label="Create new profile / import from Chrome"></a>
{% for persona in recent_personas %}
<span class="persona-preset-wrap">
<button type="button" class="preset-btn persona-preset-btn" data-persona="{{ persona.name }}" title="Use {{ persona.name }} persona">👤 {{ persona.name }}</button>
<a href="/admin/personas/persona/{{ persona.pk }}/change/" class="preset-btn persona-edit-btn" target="_blank" rel="noopener" title="Edit {{ persona.name }} persona"></a>
<a href="/admin/personas/persona/{{ persona.pk }}/change/#plugin-config" class="preset-btn persona-edit-btn" target="_blank" rel="noopener" title="Edit {{ persona.name }} persona plugin config"></a>
</span>
{% endfor %}
<button type="button" class="preset-btn" data-preset="text-only">📄 Text Only</button>

View File

@ -82,7 +82,7 @@
.plugin-card-main {
display: grid;
grid-template-columns: 18px minmax(0, 1fr) auto;
grid-template-columns: 18px minmax(0, 1fr) auto auto auto;
gap: 8px;
align-items: start;
min-width: 0;
@ -90,7 +90,7 @@
}
.plugin-card-main--static {
grid-template-columns: minmax(0, 1fr) auto;
grid-template-columns: minmax(0, 1fr) auto auto auto;
}
.plugin-card-main > input[type="checkbox"] {
@ -175,15 +175,16 @@
}
.plugin-config-details {
grid-column: 3;
grid-column: 5;
grid-row: 1;
min-width: 0;
}
.plugin-card-main--static .plugin-config-details {
grid-column: 2;
grid-column: 4;
}
.plugin-card-badge,
.plugin-config-details summary {
display: inline-flex;
align-items: center;
@ -202,6 +203,40 @@
white-space: nowrap;
}
.plugin-card-badge {
text-decoration: none !important;
}
.plugin-card-badge:link,
.plugin-card-badge:visited,
.plugin-card-badge:active {
color: #475569;
}
.plugin-card-badge:hover,
.plugin-card-badge:focus {
background: #eef4fa;
color: #1f2937;
}
.plugin-source-badge {
grid-column: 3;
grid-row: 1;
}
.plugin-docs-badge {
grid-column: 4;
grid-row: 1;
}
.plugin-card-main--static .plugin-source-badge {
grid-column: 2;
}
.plugin-card-main--static .plugin-docs-badge {
grid-column: 3;
}
.plugin-config-details summary::-webkit-details-marker {
display: none;
}
@ -362,11 +397,11 @@
}
.plugin-card-main {
grid-template-columns: 18px minmax(0, 1fr);
grid-template-columns: 18px minmax(0, 1fr) auto auto auto;
}
.plugin-card-main--static {
grid-template-columns: minmax(0, 1fr);
grid-template-columns: minmax(0, 1fr) auto auto auto;
}
.plugin-config-details,
@ -411,12 +446,14 @@
<label for="{{ plugin.checkbox_id }}" class="plugin-card-label">
{{ plugin.label }}
</label>
{% else %}
<div class="plugin-card-label plugin-card-label-static">
{{ plugin.label }}
</div>
{% endif %}
<details class="plugin-config-details">
{% else %}
<div class="plugin-card-label plugin-card-label-static">
{{ plugin.label }}
</div>
{% endif %}
<a class="plugin-card-badge plugin-source-badge" href="{{ plugin.source_url }}" target="_blank" rel="noopener noreferrer">Source</a>
<a class="plugin-card-badge plugin-docs-badge" href="{{ plugin.docs_url }}" target="_blank" rel="noopener noreferrer">Docs</a>
<details class="plugin-config-details">
<summary>
<span>Config</span>
<span class="plugin-config-count">{{ plugin.config_count }}</span>

View File

@ -761,10 +761,28 @@ select {
.preset-btn:hover {
background-color: #e9ecef;
border-color: #adb5bd;
text-decoration: none;
transform: translateY(-1px);
box-shadow: 0 2px 4px rgba(0,0,0,0.1);
}
a.preset-btn,
a.preset-btn:visited,
a.preset-btn:hover,
a.preset-btn:focus,
a.preset-btn:active {
text-decoration: none !important;
}
#add-form .plugin-presets a.preset-btn,
#add-form .plugin-presets a.preset-btn:link,
#add-form .plugin-presets a.preset-btn:visited,
#add-form .plugin-presets a.preset-btn:hover,
#add-form .plugin-presets a.preset-btn:focus,
#add-form .plugin-presets a.preset-btn:active {
text-decoration: none !important;
}
.preset-btn:active {
transform: translateY(0);
box-shadow: none;
@ -798,6 +816,9 @@ select {
}
.persona-create-btn {
justify-content: center;
min-width: 28px;
padding: 6px 8px;
color: #116329;
border-color: #b6e3c6;
background-color: #f0fff4;

View File

@ -70,6 +70,10 @@ def test_add_view_admin_renders_plugin_config_grid(client, admin_user, monkeypat
assert any(card["config_fields"] for group in form.plugin_groups for card in group["plugins"])
assert b"Index only dry run" not in response.content
assert b"Start paused" in response.content
assert b">Source</a>" in response.content
assert b">Docs</a>" in response.content
assert b"https://github.com/ArchiveBox/abx-plugins/tree/main/abx_plugins/plugins/" in response.content
assert b"https://archivebox.github.io/abx-plugins/#" in response.content
def test_add_view_embeds_selected_persona_config_for_ui_hydration(client, admin_user, monkeypatch):

View File

@ -1,6 +1,6 @@
{
"name": "archivebox",
"version": "0.9.33rc40",
"version": "0.9.33rc41",
"repository": "github:ArchiveBox/ArchiveBox",
"license": "MIT",
"dependencies": {

View File

@ -1,6 +1,6 @@
[project]
name = "archivebox"
version = "0.9.33rc40"
version = "0.9.33rc41"
requires-python = ">=3.13"
description = "Self-hosted internet archiving solution."
authors = [{name = "Nick Sweeting", email = "pyproject.toml@archivebox.io"}]
@ -79,9 +79,9 @@ dependencies = [
### Extractor dependencies (optional binaries detected at runtime via shutil.which)
### Binary/Package Management
"abxbus==2.5.8", # EventBus API
"abxpkg>=1.11.66", # for: detecting, versioning, and installing binaries via apt/brew/pip/npm
"abx-plugins>=1.11.72", # shared ArchiveBox plugin package with Chrome/Puppeteer dependency wiring
"abx-dl>=1.11.72", # shared ArchiveBox downloader package with blocking install preflight
"abxpkg>=1.11.67", # for: detecting, versioning, and installing binaries via apt/brew/pip/npm
"abx-plugins>=1.11.73", # shared ArchiveBox plugin package with Chrome/Puppeteer dependency wiring
"abx-dl>=1.11.73", # shared ArchiveBox downloader package with blocking install preflight
### UUID7 backport for Python <3.14
"uuid7>=0.1.0; python_version < '3.14'", # provides the uuid_extensions module on Python 3.13
]