mirror of
https://github.com/dgtlmoon/changedetection.io.git
synced 2026-08-24 15:16:56 +00:00
WIP
This commit is contained in:
@@ -138,7 +138,7 @@ def strip_private_keys(data):
|
||||
Remove `__`-prefixed keys from a watch/tag dict at the API boundary.
|
||||
|
||||
These are transient in-memory fields (e.g. `__check_status` set by the worker to
|
||||
surface "Fetching page..." in the UI) and are not part of the public OpenAPI
|
||||
surface "Fetching...." in the UI) and are not part of the public OpenAPI
|
||||
contract. They must never appear in GET responses (otherwise a client that
|
||||
round-trips GET → PUT trips the unknown-field validator), and must be silently
|
||||
discarded from incoming PUT/POST payloads.
|
||||
|
||||
@@ -63,7 +63,8 @@ html[data-darkmode="true"] .watch-tag-list.tag-{{ class_name }} {
|
||||
</tr>
|
||||
{% endif %}
|
||||
{% for uuid, tag in available_tags %}
|
||||
<tr id="{{ uuid }}" class="{{ loop.cycle('pure-table-odd', 'pure-table-even') }}">
|
||||
{#-{{ loop.cycle('pure-table-odd', 'pure-table-even') }}-#}
|
||||
<tr id="{{ uuid }}" class="">
|
||||
<td class="watch-controls">
|
||||
<a class="link-mute state-{{'on' if tag.notification_muted else 'off'}}" href="{{url_for('tags.mute', uuid=tag.uuid)}}"><img src="{{url_for('static_content', group='images', filename='bell-off.svg')}}" alt="{{ _('Mute notifications') }}" title="{{ _('Mute notifications') }}" class="icon icon-mute" ></a>
|
||||
</td>
|
||||
|
||||
@@ -212,7 +212,8 @@ window.watchOverviewI18n = {
|
||||
{%- set table_classes = [
|
||||
'favicon-enabled' if 'favicons_enabled' not in ui_settings or ui_settings['favicons_enabled'] else 'favicon-not-enabled',
|
||||
] -%}
|
||||
<table class="pure-table pure-table-striped watch-table {{ table_classes | reject('equalto', '') | join(' ') }}">
|
||||
<div class="watch-table-clip">
|
||||
<table class="pure-table {#pure-table-striped#} watch-table {{ table_classes | reject('equalto', '') | join(' ') }}">
|
||||
<thead>
|
||||
<tr>
|
||||
{%- set link_order = "desc" if sort_order == 'asc' else "asc" -%}
|
||||
@@ -224,7 +225,7 @@ window.watchOverviewI18n = {
|
||||
<a class="{{ 'active '+link_order if sort_attribute == 'notification_muted' else 'inactive' }}" href="{{url_for('watchlist.index', sort='notification_muted', order=link_order, tag=active_tag_uuid)}}"><i data-feather="volume-2" style="width: 16px; height: 16px;"></i><span class='arrow {{link_order}}'></span></a>
|
||||
</div>
|
||||
</th>
|
||||
<th><a class="{{ 'active '+link_order if sort_attribute == 'label' else 'inactive' }}" href="{{url_for('watchlist.index', sort='label', order=link_order, tag=active_tag_uuid)}}">{{ _('Web page') }} <span class='arrow {{link_order}}'></span></a></th>
|
||||
<th id="th-webpage"><a class="{{ 'active '+link_order if sort_attribute == 'label' else 'inactive' }}" href="{{url_for('watchlist.index', sort='label', order=link_order, tag=active_tag_uuid)}}">{{ _('Web page') }} <span class='arrow {{link_order}}'></span></a></th>
|
||||
{%- if any_has_restock_price_processor -%}
|
||||
<th>{{ _('Restock & Price') }}</th>
|
||||
{%- endif -%}
|
||||
@@ -247,8 +248,8 @@ window.watchOverviewI18n = {
|
||||
{%- set error_texts = watch.compile_error_texts(has_proxies=has_proxies) -%}
|
||||
{%- set system_use_url_watchlist = datastore.data['settings']['application']['ui'].get('use_page_title_in_list') -%}
|
||||
{# Class settings mirrored in changedetectionio/static/js/realtime.js for the frontend #}
|
||||
{# loop.cycle('pure-table-odd', 'pure-table-even'),#}
|
||||
{%- set row_classes = [
|
||||
loop.cycle('pure-table-odd', 'pure-table-even'),
|
||||
'processor-' ~ watch['processor'],
|
||||
'has-error' if error_texts|length > 2 else '',
|
||||
'paused' if watch.paused is defined and watch.paused != False else '',
|
||||
@@ -404,6 +405,7 @@ window.watchOverviewI18n = {
|
||||
{%- endfor -%}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
{{ pagination.links }}
|
||||
</div>
|
||||
</form>
|
||||
|
||||
@@ -151,7 +151,7 @@ ul.action-sidebar-list {
|
||||
/*height: 42px;*/
|
||||
padding: $common-gap;
|
||||
font-size: var(--body-main-text-size);
|
||||
border-radius: 8px;
|
||||
border-radius: var(--common-round-border);
|
||||
color: var(--color-white);
|
||||
text-decoration: none;
|
||||
white-space: nowrap;
|
||||
@@ -326,7 +326,7 @@ body.actionside-bar-on {
|
||||
justify-content: flex-start;
|
||||
gap: $common-gap;
|
||||
padding: $common-gap $common-gap;
|
||||
border-radius: 8px;
|
||||
border-radius: var(--common-round-border);
|
||||
color: var(--color-text);
|
||||
|
||||
&:hover {
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
.arrow {
|
||||
border: solid #1b98f8;
|
||||
border: solid var(--color-border-input);
|
||||
border-width: 0 2px 2px 0;
|
||||
display: inline-block;
|
||||
padding: 3px;
|
||||
|
||||
@@ -37,7 +37,10 @@
|
||||
--color-error-list: var(--color-light-red);
|
||||
--color-table-background: var(--color-background);
|
||||
--color-table-stripe: var(--color-grey-900);
|
||||
|
||||
--watchlist-row-selected: #e3f0ff; // light blue highlight for checkbox-selected rows
|
||||
--watchlist-row-hover: #f2f2f2; // light grey highlight on row hover
|
||||
|
||||
--color-text-tab: var(--color-white);
|
||||
--color-background-tab: rgba(255, 255, 255, 0.2);
|
||||
--color-background-tab-hover: rgba(255, 255, 255, 0.5);
|
||||
@@ -103,6 +106,7 @@
|
||||
|
||||
--color-watch-table-error: var(--color-dark-red);
|
||||
--color-watch-table-row-text: var(--color-grey-100);
|
||||
--color-table-line: #e7e9ee;
|
||||
|
||||
--highlight-trigger-text-bg-color: #1b98f8;
|
||||
--highlight-ignored-text-bg-color: var(--color-grey-700);
|
||||
@@ -114,12 +118,14 @@
|
||||
--color-sidebar-shadow: 6px 0 28px rgba(0, 0, 0, 0.18);
|
||||
--color-sidebar-item-hover-bg: rgba(0, 0, 0, 0.06);
|
||||
--color-sidebar-item-active-bg: rgba(0, 0, 0, 0.10);
|
||||
|
||||
--common-round-border: 8px;
|
||||
}
|
||||
|
||||
html[data-darkmode="true"] {
|
||||
--color-link: #59bdfb;
|
||||
--color-text: var(--color-white);
|
||||
|
||||
--color-table-line: #262c37;
|
||||
--color-background-gradient-first: #3f90a5;
|
||||
--color-background-gradient-second: #1e316c;
|
||||
--color-background-gradient-third: #4d2c64;
|
||||
@@ -130,7 +136,10 @@ html[data-darkmode="true"] {
|
||||
--color-background-table-thead: var(--color-grey-200);
|
||||
--color-table-background: var(--color-grey-300);
|
||||
--color-table-stripe: var(--color-grey-325);
|
||||
|
||||
--watchlist-row-selected: #1e3a5f; // darker blue highlight for selected rows in dark mode
|
||||
--watchlist-row-hover: #2a2a2a; // subtle grey highlight on row hover (dark mode)
|
||||
|
||||
--color-background: var(--color-grey-300);
|
||||
--color-text-menu-heading: var(--color-grey-850);
|
||||
--color-text-menu-link: var(--color-grey-800);
|
||||
|
||||
@@ -11,6 +11,26 @@ $title-col-stack-breakpoint: 1200px;
|
||||
background-color: var(--watchlist-row-selected);
|
||||
}
|
||||
|
||||
// Row hover: light grey background (replaces the now-disabled zebra striping)
|
||||
// and reveals the per-row action buttons (hidden at rest — see td.buttons below).
|
||||
.watch-table tbody tr:hover > td {
|
||||
background-color: var(--watchlist-row-hover);
|
||||
}
|
||||
.watch-table tbody tr:hover td.buttons > *,
|
||||
.watch-table tbody tr:focus-within td.buttons > *,
|
||||
.watch-table tbody tr:has(input[name="uuids"]:checked) td.buttons > * {
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
// Rounds the table's corners. border-radius on the <table> itself doesn't work
|
||||
// with border-collapse:collapse (and the row divider lines depend on collapse),
|
||||
// so a clip wrapper rounds + overflow-clips the square corners of the thead /
|
||||
// last-row cell backgrounds instead.
|
||||
.watch-table-clip {
|
||||
border-radius: var(--common-round-border);
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
/* table related */
|
||||
#stats_row {
|
||||
display: flex;
|
||||
@@ -51,13 +71,35 @@ body.has-queue {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
thead {
|
||||
text-transform: uppercase;
|
||||
a {
|
||||
color: var(--color-text);
|
||||
}
|
||||
}
|
||||
|
||||
td,
|
||||
th {
|
||||
vertical-align: middle;
|
||||
border: none;
|
||||
}
|
||||
@media only screen and (max-width: $title-col-stack-breakpoint) {
|
||||
.last-checked, .last-changed {
|
||||
text-align: center;
|
||||
}
|
||||
}
|
||||
|
||||
tr {
|
||||
#th-webpage {
|
||||
text-align: center;
|
||||
}
|
||||
tbody tr {
|
||||
color: var(--color-watch-table-row-text);
|
||||
border-bottom: 1px solid var(--color-table-line);
|
||||
background-color: var(--color-table-background);
|
||||
|
||||
td {
|
||||
background-color: var(--color-table-background);
|
||||
}
|
||||
|
||||
&.unviewed {
|
||||
font-weight: bold;
|
||||
@@ -191,18 +233,31 @@ body.has-queue {
|
||||
&.buttons {
|
||||
font-size: 12px;
|
||||
white-space: nowrap;
|
||||
// Per-row actions are hidden at rest and revealed on row hover/focus (see
|
||||
// the .watch-table tbody tr:hover rule above). Opacity (not display) keeps
|
||||
// the column width stable so the table doesn't shift on hover.
|
||||
> * {
|
||||
opacity: 0;
|
||||
transition: opacity 0.12s ease;
|
||||
}
|
||||
}
|
||||
&.title-col {
|
||||
word-break: break-all;
|
||||
white-space: normal;
|
||||
}
|
||||
|
||||
&.last-changed,&.last-checked {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
a.external::after {
|
||||
content: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAAQElEQVR42qXKwQkAIAxDUUdxtO6/RBQkQZvSi8I/pL4BoGw/XPkh4XigPmsUgh0626AjRsgxHTkUThsG2T/sIlzdTsp52kSS1wAAAABJRU5ErkJggg==);
|
||||
// Inline "external link" glyph (open-cornered square + outbound arrow) as a
|
||||
// background image so its box can be sized off the doc text-size variable
|
||||
// (a data-URI in `content:url()` can't be reliably resized). Neutral grey so
|
||||
// it reads on light backgrounds; dark mode lightens it via the existing
|
||||
// invert filter on .title-col a[target="_blank"]::after.
|
||||
content: "";
|
||||
display: inline-block;
|
||||
width: var(--body-main-text-size);
|
||||
height: var(--body-main-text-size);
|
||||
vertical-align: -0.1em;
|
||||
background: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23777' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6'/%3E%3Cpolyline points='15 3 21 3 21 9'/%3E%3Cline x1='10' y1='14' x2='21' y2='3'/%3E%3C/svg%3E") no-repeat center / contain;
|
||||
margin: 0 3px 0 5px;
|
||||
}
|
||||
&.watch-controls {
|
||||
@@ -216,6 +271,9 @@ body.has-queue {
|
||||
|
||||
|
||||
th {
|
||||
@media (min-width: 1020px) {
|
||||
white-space: nowrap;
|
||||
}
|
||||
&#h-lastchanged, &#h-lastchecked {
|
||||
text-align: center;
|
||||
}
|
||||
@@ -386,4 +444,8 @@ body.has-queue {
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
.pure-button {
|
||||
border-radius: var(--common-round-border);
|
||||
}
|
||||
@@ -141,9 +141,9 @@ body {
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
.pure-table-even {
|
||||
/*.pure-table-even {
|
||||
background: var(--color-background);
|
||||
}
|
||||
}*/
|
||||
|
||||
/* Some styles from https://css-tricks.com/ */
|
||||
a {
|
||||
@@ -735,13 +735,15 @@ footer {
|
||||
}
|
||||
}
|
||||
|
||||
.pure-table-striped {
|
||||
tr:nth-child(2n-1) {
|
||||
td {
|
||||
background-color: var(--color-table-stripe);
|
||||
}
|
||||
}
|
||||
}
|
||||
// Temporarily disabled: zebra striping on odd rows. Row distinction now comes
|
||||
// from the :hover highlight (see .watch-table tr:hover in parts/_watch_table.scss).
|
||||
//.pure-table-striped {
|
||||
// tr:nth-child(2n-1) {
|
||||
// td {
|
||||
// background-color: var(--color-table-stripe);
|
||||
// }
|
||||
// }
|
||||
//}
|
||||
|
||||
.pure-form input[type=color],
|
||||
.pure-form input[type=date],
|
||||
@@ -1156,8 +1158,8 @@ ul#highlightSnippetActions {
|
||||
border-color: rgba(255, 255, 255, 0.25);
|
||||
border-image: initial;
|
||||
background: rgba(255, 255, 255, 0.04);
|
||||
border-radius: 10px;
|
||||
padding: 1.25rem;
|
||||
border-radius: var(--common-round-border);
|
||||
padding: $common-gap*2;
|
||||
}
|
||||
|
||||
header {
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -439,7 +439,7 @@ def test_api_strips_internal_fields(client, live_server, measure_memory_usage, d
|
||||
# Force both a transient __-prefixed and a system-managed field onto the watch,
|
||||
# simulating worker/processor-set state.
|
||||
watch_obj = datastore.data['watching'][watch_uuid]
|
||||
watch_obj['__check_status'] = 'Fetching page..'
|
||||
watch_obj['__check_status'] = 'Fetching...'
|
||||
watch_obj['last_check_status'] = 200
|
||||
watch_obj['_llm_result'] = {'summary': 'cached llm output'}
|
||||
watch_obj['last_filter_config_hash'] = 'abc123'
|
||||
@@ -472,7 +472,7 @@ def test_api_strips_internal_fields(client, live_server, measure_memory_usage, d
|
||||
f"PUT round-tripping GET response plus internal fields should succeed (got {res.status_code}: {res.data!r})"
|
||||
|
||||
# Internal fields must not have been overwritten by the PUT
|
||||
assert watch_obj.get('__check_status') == 'Fetching page..', \
|
||||
assert watch_obj.get('__check_status') == 'Fetching...', \
|
||||
"PUT must not overwrite __-prefixed fields"
|
||||
assert watch_obj.get('_llm_result') == {'summary': 'cached llm output'}, \
|
||||
"PUT must not overwrite system-managed non-spec fields"
|
||||
|
||||
@@ -795,6 +795,12 @@ msgstr ""
|
||||
msgid "How \"Last Checked\" and \"Last Changed\" times are shown in the watch overview list."
|
||||
msgstr ""
|
||||
|
||||
#: changedetectionio/blueprint/settings/templates/settings.html
|
||||
msgid ""
|
||||
"\"Collapsed icon rail\" keeps the left navigation slim and reveals labels on mouse-over; \"Always expanded\" keeps "
|
||||
"labels visible."
|
||||
msgstr ""
|
||||
|
||||
#: changedetectionio/blueprint/settings/templates/settings.html
|
||||
msgid "Tip"
|
||||
msgstr "Tip"
|
||||
@@ -3217,6 +3223,18 @@ msgstr ""
|
||||
msgid "Short (1m ago)"
|
||||
msgstr ""
|
||||
|
||||
#: changedetectionio/forms.py
|
||||
msgid "Navigation sidebar"
|
||||
msgstr ""
|
||||
|
||||
#: changedetectionio/forms.py
|
||||
msgid "Collapsed icon rail (expands on hover)"
|
||||
msgstr ""
|
||||
|
||||
#: changedetectionio/forms.py
|
||||
msgid "Always expanded"
|
||||
msgstr ""
|
||||
|
||||
#: changedetectionio/forms.py
|
||||
msgid "API access token security check enabled"
|
||||
msgstr "Kontrola zabezpečení přístupového tokenu API povolena"
|
||||
@@ -4451,6 +4469,10 @@ msgstr ""
|
||||
msgid "Page Watches"
|
||||
msgstr ""
|
||||
|
||||
#: changedetectionio/templates/sidebar-nav.html
|
||||
msgid "Unread changes"
|
||||
msgstr ""
|
||||
|
||||
#: changedetectionio/templates/sidebar-nav.html
|
||||
msgid "Watch Groups"
|
||||
msgstr ""
|
||||
|
||||
@@ -811,6 +811,12 @@ msgstr ""
|
||||
msgid "How \"Last Checked\" and \"Last Changed\" times are shown in the watch overview list."
|
||||
msgstr ""
|
||||
|
||||
#: changedetectionio/blueprint/settings/templates/settings.html
|
||||
msgid ""
|
||||
"\"Collapsed icon rail\" keeps the left navigation slim and reveals labels on mouse-over; \"Always expanded\" keeps "
|
||||
"labels visible."
|
||||
msgstr ""
|
||||
|
||||
#: changedetectionio/blueprint/settings/templates/settings.html
|
||||
msgid "Tip"
|
||||
msgstr "Tipp"
|
||||
@@ -3269,6 +3275,18 @@ msgstr ""
|
||||
msgid "Short (1m ago)"
|
||||
msgstr ""
|
||||
|
||||
#: changedetectionio/forms.py
|
||||
msgid "Navigation sidebar"
|
||||
msgstr ""
|
||||
|
||||
#: changedetectionio/forms.py
|
||||
msgid "Collapsed icon rail (expands on hover)"
|
||||
msgstr ""
|
||||
|
||||
#: changedetectionio/forms.py
|
||||
msgid "Always expanded"
|
||||
msgstr ""
|
||||
|
||||
#: changedetectionio/forms.py
|
||||
msgid "API access token security check enabled"
|
||||
msgstr "Sicherheitsüberprüfung des API-Zugriffstokens aktiviert"
|
||||
@@ -4507,6 +4525,10 @@ msgstr ""
|
||||
msgid "Page Watches"
|
||||
msgstr ""
|
||||
|
||||
#: changedetectionio/templates/sidebar-nav.html
|
||||
msgid "Unread changes"
|
||||
msgstr ""
|
||||
|
||||
#: changedetectionio/templates/sidebar-nav.html
|
||||
msgid "Watch Groups"
|
||||
msgstr ""
|
||||
|
||||
@@ -793,6 +793,12 @@ msgstr ""
|
||||
msgid "How \"Last Checked\" and \"Last Changed\" times are shown in the watch overview list."
|
||||
msgstr ""
|
||||
|
||||
#: changedetectionio/blueprint/settings/templates/settings.html
|
||||
msgid ""
|
||||
"\"Collapsed icon rail\" keeps the left navigation slim and reveals labels on mouse-over; \"Always expanded\" keeps "
|
||||
"labels visible."
|
||||
msgstr ""
|
||||
|
||||
#: changedetectionio/blueprint/settings/templates/settings.html
|
||||
msgid "Tip"
|
||||
msgstr ""
|
||||
@@ -3211,6 +3217,18 @@ msgstr ""
|
||||
msgid "Short (1m ago)"
|
||||
msgstr ""
|
||||
|
||||
#: changedetectionio/forms.py
|
||||
msgid "Navigation sidebar"
|
||||
msgstr ""
|
||||
|
||||
#: changedetectionio/forms.py
|
||||
msgid "Collapsed icon rail (expands on hover)"
|
||||
msgstr ""
|
||||
|
||||
#: changedetectionio/forms.py
|
||||
msgid "Always expanded"
|
||||
msgstr ""
|
||||
|
||||
#: changedetectionio/forms.py
|
||||
msgid "API access token security check enabled"
|
||||
msgstr ""
|
||||
@@ -4445,6 +4463,10 @@ msgstr ""
|
||||
msgid "Page Watches"
|
||||
msgstr ""
|
||||
|
||||
#: changedetectionio/templates/sidebar-nav.html
|
||||
msgid "Unread changes"
|
||||
msgstr ""
|
||||
|
||||
#: changedetectionio/templates/sidebar-nav.html
|
||||
msgid "Watch Groups"
|
||||
msgstr ""
|
||||
|
||||
@@ -793,6 +793,12 @@ msgstr ""
|
||||
msgid "How \"Last Checked\" and \"Last Changed\" times are shown in the watch overview list."
|
||||
msgstr ""
|
||||
|
||||
#: changedetectionio/blueprint/settings/templates/settings.html
|
||||
msgid ""
|
||||
"\"Collapsed icon rail\" keeps the left navigation slim and reveals labels on mouse-over; \"Always expanded\" keeps "
|
||||
"labels visible."
|
||||
msgstr ""
|
||||
|
||||
#: changedetectionio/blueprint/settings/templates/settings.html
|
||||
msgid "Tip"
|
||||
msgstr ""
|
||||
@@ -3211,6 +3217,18 @@ msgstr ""
|
||||
msgid "Short (1m ago)"
|
||||
msgstr ""
|
||||
|
||||
#: changedetectionio/forms.py
|
||||
msgid "Navigation sidebar"
|
||||
msgstr ""
|
||||
|
||||
#: changedetectionio/forms.py
|
||||
msgid "Collapsed icon rail (expands on hover)"
|
||||
msgstr ""
|
||||
|
||||
#: changedetectionio/forms.py
|
||||
msgid "Always expanded"
|
||||
msgstr ""
|
||||
|
||||
#: changedetectionio/forms.py
|
||||
msgid "API access token security check enabled"
|
||||
msgstr ""
|
||||
@@ -4445,6 +4463,10 @@ msgstr ""
|
||||
msgid "Page Watches"
|
||||
msgstr ""
|
||||
|
||||
#: changedetectionio/templates/sidebar-nav.html
|
||||
msgid "Unread changes"
|
||||
msgstr ""
|
||||
|
||||
#: changedetectionio/templates/sidebar-nav.html
|
||||
msgid "Watch Groups"
|
||||
msgstr ""
|
||||
|
||||
@@ -829,6 +829,12 @@ msgstr "Número de elementos por página en la lista general de monitores, 0 par
|
||||
msgid "How \"Last Checked\" and \"Last Changed\" times are shown in the watch overview list."
|
||||
msgstr ""
|
||||
|
||||
#: changedetectionio/blueprint/settings/templates/settings.html
|
||||
msgid ""
|
||||
"\"Collapsed icon rail\" keeps the left navigation slim and reveals labels on mouse-over; \"Always expanded\" keeps "
|
||||
"labels visible."
|
||||
msgstr ""
|
||||
|
||||
#: changedetectionio/blueprint/settings/templates/settings.html
|
||||
msgid "Tip"
|
||||
msgstr "Consejo"
|
||||
@@ -3284,6 +3290,18 @@ msgstr ""
|
||||
msgid "Short (1m ago)"
|
||||
msgstr ""
|
||||
|
||||
#: changedetectionio/forms.py
|
||||
msgid "Navigation sidebar"
|
||||
msgstr ""
|
||||
|
||||
#: changedetectionio/forms.py
|
||||
msgid "Collapsed icon rail (expands on hover)"
|
||||
msgstr ""
|
||||
|
||||
#: changedetectionio/forms.py
|
||||
msgid "Always expanded"
|
||||
msgstr ""
|
||||
|
||||
#: changedetectionio/forms.py
|
||||
msgid "API access token security check enabled"
|
||||
msgstr "Comprobación de seguridad del token de acceso API habilitada"
|
||||
@@ -4531,6 +4549,10 @@ msgstr ""
|
||||
msgid "Page Watches"
|
||||
msgstr ""
|
||||
|
||||
#: changedetectionio/templates/sidebar-nav.html
|
||||
msgid "Unread changes"
|
||||
msgstr ""
|
||||
|
||||
#: changedetectionio/templates/sidebar-nav.html
|
||||
msgid "Watch Groups"
|
||||
msgstr ""
|
||||
|
||||
@@ -799,6 +799,12 @@ msgstr ""
|
||||
msgid "How \"Last Checked\" and \"Last Changed\" times are shown in the watch overview list."
|
||||
msgstr ""
|
||||
|
||||
#: changedetectionio/blueprint/settings/templates/settings.html
|
||||
msgid ""
|
||||
"\"Collapsed icon rail\" keeps the left navigation slim and reveals labels on mouse-over; \"Always expanded\" keeps "
|
||||
"labels visible."
|
||||
msgstr ""
|
||||
|
||||
#: changedetectionio/blueprint/settings/templates/settings.html
|
||||
msgid "Tip"
|
||||
msgstr "Astuce"
|
||||
@@ -3224,6 +3230,18 @@ msgstr ""
|
||||
msgid "Short (1m ago)"
|
||||
msgstr ""
|
||||
|
||||
#: changedetectionio/forms.py
|
||||
msgid "Navigation sidebar"
|
||||
msgstr ""
|
||||
|
||||
#: changedetectionio/forms.py
|
||||
msgid "Collapsed icon rail (expands on hover)"
|
||||
msgstr ""
|
||||
|
||||
#: changedetectionio/forms.py
|
||||
msgid "Always expanded"
|
||||
msgstr ""
|
||||
|
||||
#: changedetectionio/forms.py
|
||||
msgid "API access token security check enabled"
|
||||
msgstr "Contrôle de sécurité du jeton d'accès à l'API activé"
|
||||
@@ -4460,6 +4478,10 @@ msgstr ""
|
||||
msgid "Page Watches"
|
||||
msgstr ""
|
||||
|
||||
#: changedetectionio/templates/sidebar-nav.html
|
||||
msgid "Unread changes"
|
||||
msgstr ""
|
||||
|
||||
#: changedetectionio/templates/sidebar-nav.html
|
||||
msgid "Watch Groups"
|
||||
msgstr ""
|
||||
|
||||
@@ -795,6 +795,12 @@ msgstr ""
|
||||
msgid "How \"Last Checked\" and \"Last Changed\" times are shown in the watch overview list."
|
||||
msgstr ""
|
||||
|
||||
#: changedetectionio/blueprint/settings/templates/settings.html
|
||||
msgid ""
|
||||
"\"Collapsed icon rail\" keeps the left navigation slim and reveals labels on mouse-over; \"Always expanded\" keeps "
|
||||
"labels visible."
|
||||
msgstr ""
|
||||
|
||||
#: changedetectionio/blueprint/settings/templates/settings.html
|
||||
msgid "Tip"
|
||||
msgstr ""
|
||||
@@ -3213,6 +3219,18 @@ msgstr ""
|
||||
msgid "Short (1m ago)"
|
||||
msgstr ""
|
||||
|
||||
#: changedetectionio/forms.py
|
||||
msgid "Navigation sidebar"
|
||||
msgstr ""
|
||||
|
||||
#: changedetectionio/forms.py
|
||||
msgid "Collapsed icon rail (expands on hover)"
|
||||
msgstr ""
|
||||
|
||||
#: changedetectionio/forms.py
|
||||
msgid "Always expanded"
|
||||
msgstr ""
|
||||
|
||||
#: changedetectionio/forms.py
|
||||
msgid "API access token security check enabled"
|
||||
msgstr "Controllo sicurezza token API attivo"
|
||||
@@ -4447,6 +4465,10 @@ msgstr ""
|
||||
msgid "Page Watches"
|
||||
msgstr ""
|
||||
|
||||
#: changedetectionio/templates/sidebar-nav.html
|
||||
msgid "Unread changes"
|
||||
msgstr ""
|
||||
|
||||
#: changedetectionio/templates/sidebar-nav.html
|
||||
msgid "Watch Groups"
|
||||
msgstr ""
|
||||
|
||||
@@ -800,6 +800,12 @@ msgstr "ウォッチ一覧ページの1ページあたりの表示件数(0で
|
||||
msgid "How \"Last Checked\" and \"Last Changed\" times are shown in the watch overview list."
|
||||
msgstr ""
|
||||
|
||||
#: changedetectionio/blueprint/settings/templates/settings.html
|
||||
msgid ""
|
||||
"\"Collapsed icon rail\" keeps the left navigation slim and reveals labels on mouse-over; \"Always expanded\" keeps "
|
||||
"labels visible."
|
||||
msgstr ""
|
||||
|
||||
#: changedetectionio/blueprint/settings/templates/settings.html
|
||||
msgid "Tip"
|
||||
msgstr "ヒント"
|
||||
@@ -3230,6 +3236,18 @@ msgstr ""
|
||||
msgid "Short (1m ago)"
|
||||
msgstr ""
|
||||
|
||||
#: changedetectionio/forms.py
|
||||
msgid "Navigation sidebar"
|
||||
msgstr ""
|
||||
|
||||
#: changedetectionio/forms.py
|
||||
msgid "Collapsed icon rail (expands on hover)"
|
||||
msgstr ""
|
||||
|
||||
#: changedetectionio/forms.py
|
||||
msgid "Always expanded"
|
||||
msgstr ""
|
||||
|
||||
#: changedetectionio/forms.py
|
||||
msgid "API access token security check enabled"
|
||||
msgstr "APIアクセストークンのセキュリティチェックを有効化"
|
||||
@@ -4488,6 +4506,10 @@ msgstr ""
|
||||
msgid "Page Watches"
|
||||
msgstr ""
|
||||
|
||||
#: changedetectionio/templates/sidebar-nav.html
|
||||
msgid "Unread changes"
|
||||
msgstr ""
|
||||
|
||||
#: changedetectionio/templates/sidebar-nav.html
|
||||
msgid "Watch Groups"
|
||||
msgstr ""
|
||||
|
||||
@@ -795,6 +795,12 @@ msgstr "모니터링 목록 페이지당 항목 수입니다. 0이면 비활성
|
||||
msgid "How \"Last Checked\" and \"Last Changed\" times are shown in the watch overview list."
|
||||
msgstr ""
|
||||
|
||||
#: changedetectionio/blueprint/settings/templates/settings.html
|
||||
msgid ""
|
||||
"\"Collapsed icon rail\" keeps the left navigation slim and reveals labels on mouse-over; \"Always expanded\" keeps "
|
||||
"labels visible."
|
||||
msgstr ""
|
||||
|
||||
#: changedetectionio/blueprint/settings/templates/settings.html
|
||||
msgid "Tip"
|
||||
msgstr "팁"
|
||||
@@ -3221,6 +3227,18 @@ msgstr ""
|
||||
msgid "Short (1m ago)"
|
||||
msgstr ""
|
||||
|
||||
#: changedetectionio/forms.py
|
||||
msgid "Navigation sidebar"
|
||||
msgstr ""
|
||||
|
||||
#: changedetectionio/forms.py
|
||||
msgid "Collapsed icon rail (expands on hover)"
|
||||
msgstr ""
|
||||
|
||||
#: changedetectionio/forms.py
|
||||
msgid "Always expanded"
|
||||
msgstr ""
|
||||
|
||||
#: changedetectionio/forms.py
|
||||
msgid "API access token security check enabled"
|
||||
msgstr "API 액세스 토큰 보안 확인 활성화"
|
||||
@@ -4465,6 +4483,10 @@ msgstr ""
|
||||
msgid "Page Watches"
|
||||
msgstr ""
|
||||
|
||||
#: changedetectionio/templates/sidebar-nav.html
|
||||
msgid "Unread changes"
|
||||
msgstr ""
|
||||
|
||||
#: changedetectionio/templates/sidebar-nav.html
|
||||
msgid "Watch Groups"
|
||||
msgstr ""
|
||||
|
||||
@@ -8,7 +8,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: changedetection.io 0.55.7\n"
|
||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||
"POT-Creation-Date: 2026-06-14 13:29+0200\n"
|
||||
"POT-Creation-Date: 2026-06-16 13:31+0200\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
@@ -792,6 +792,12 @@ msgstr ""
|
||||
msgid "How \"Last Checked\" and \"Last Changed\" times are shown in the watch overview list."
|
||||
msgstr ""
|
||||
|
||||
#: changedetectionio/blueprint/settings/templates/settings.html
|
||||
msgid ""
|
||||
"\"Collapsed icon rail\" keeps the left navigation slim and reveals labels on mouse-over; \"Always expanded\" keeps "
|
||||
"labels visible."
|
||||
msgstr ""
|
||||
|
||||
#: changedetectionio/blueprint/settings/templates/settings.html
|
||||
msgid "Tip"
|
||||
msgstr ""
|
||||
@@ -3210,6 +3216,18 @@ msgstr ""
|
||||
msgid "Short (1m ago)"
|
||||
msgstr ""
|
||||
|
||||
#: changedetectionio/forms.py
|
||||
msgid "Navigation sidebar"
|
||||
msgstr ""
|
||||
|
||||
#: changedetectionio/forms.py
|
||||
msgid "Collapsed icon rail (expands on hover)"
|
||||
msgstr ""
|
||||
|
||||
#: changedetectionio/forms.py
|
||||
msgid "Always expanded"
|
||||
msgstr ""
|
||||
|
||||
#: changedetectionio/forms.py
|
||||
msgid "API access token security check enabled"
|
||||
msgstr ""
|
||||
@@ -4444,6 +4462,10 @@ msgstr ""
|
||||
msgid "Page Watches"
|
||||
msgstr ""
|
||||
|
||||
#: changedetectionio/templates/sidebar-nav.html
|
||||
msgid "Unread changes"
|
||||
msgstr ""
|
||||
|
||||
#: changedetectionio/templates/sidebar-nav.html
|
||||
msgid "Watch Groups"
|
||||
msgstr ""
|
||||
|
||||
@@ -816,6 +816,12 @@ msgstr "Número de itens por página na lista de visão geral, 0 para desativar.
|
||||
msgid "How \"Last Checked\" and \"Last Changed\" times are shown in the watch overview list."
|
||||
msgstr ""
|
||||
|
||||
#: changedetectionio/blueprint/settings/templates/settings.html
|
||||
msgid ""
|
||||
"\"Collapsed icon rail\" keeps the left navigation slim and reveals labels on mouse-over; \"Always expanded\" keeps "
|
||||
"labels visible."
|
||||
msgstr ""
|
||||
|
||||
#: changedetectionio/blueprint/settings/templates/settings.html
|
||||
msgid "Tip"
|
||||
msgstr "Dica"
|
||||
@@ -3261,6 +3267,18 @@ msgstr ""
|
||||
msgid "Short (1m ago)"
|
||||
msgstr ""
|
||||
|
||||
#: changedetectionio/forms.py
|
||||
msgid "Navigation sidebar"
|
||||
msgstr ""
|
||||
|
||||
#: changedetectionio/forms.py
|
||||
msgid "Collapsed icon rail (expands on hover)"
|
||||
msgstr ""
|
||||
|
||||
#: changedetectionio/forms.py
|
||||
msgid "Always expanded"
|
||||
msgstr ""
|
||||
|
||||
#: changedetectionio/forms.py
|
||||
msgid "API access token security check enabled"
|
||||
msgstr "Verificação de segurança do token de acesso à API ativada"
|
||||
@@ -4503,6 +4521,10 @@ msgstr ""
|
||||
msgid "Page Watches"
|
||||
msgstr ""
|
||||
|
||||
#: changedetectionio/templates/sidebar-nav.html
|
||||
msgid "Unread changes"
|
||||
msgstr ""
|
||||
|
||||
#: changedetectionio/templates/sidebar-nav.html
|
||||
msgid "Watch Groups"
|
||||
msgstr ""
|
||||
|
||||
@@ -826,6 +826,12 @@ msgstr "İzleyici genel bakış listesinde sayfa başına öğe sayısı, devre
|
||||
msgid "How \"Last Checked\" and \"Last Changed\" times are shown in the watch overview list."
|
||||
msgstr ""
|
||||
|
||||
#: changedetectionio/blueprint/settings/templates/settings.html
|
||||
msgid ""
|
||||
"\"Collapsed icon rail\" keeps the left navigation slim and reveals labels on mouse-over; \"Always expanded\" keeps "
|
||||
"labels visible."
|
||||
msgstr ""
|
||||
|
||||
#: changedetectionio/blueprint/settings/templates/settings.html
|
||||
msgid "Tip"
|
||||
msgstr "İpucu"
|
||||
@@ -3264,6 +3270,18 @@ msgstr ""
|
||||
msgid "Short (1m ago)"
|
||||
msgstr ""
|
||||
|
||||
#: changedetectionio/forms.py
|
||||
msgid "Navigation sidebar"
|
||||
msgstr ""
|
||||
|
||||
#: changedetectionio/forms.py
|
||||
msgid "Collapsed icon rail (expands on hover)"
|
||||
msgstr ""
|
||||
|
||||
#: changedetectionio/forms.py
|
||||
msgid "Always expanded"
|
||||
msgstr ""
|
||||
|
||||
#: changedetectionio/forms.py
|
||||
msgid "API access token security check enabled"
|
||||
msgstr "API erişim belirteci güvenlik kontrolü etkin"
|
||||
@@ -4506,6 +4524,10 @@ msgstr ""
|
||||
msgid "Page Watches"
|
||||
msgstr ""
|
||||
|
||||
#: changedetectionio/templates/sidebar-nav.html
|
||||
msgid "Unread changes"
|
||||
msgstr ""
|
||||
|
||||
#: changedetectionio/templates/sidebar-nav.html
|
||||
msgid "Watch Groups"
|
||||
msgstr ""
|
||||
|
||||
@@ -806,6 +806,12 @@ msgstr "Кількість елементів на сторінці у спис
|
||||
msgid "How \"Last Checked\" and \"Last Changed\" times are shown in the watch overview list."
|
||||
msgstr ""
|
||||
|
||||
#: changedetectionio/blueprint/settings/templates/settings.html
|
||||
msgid ""
|
||||
"\"Collapsed icon rail\" keeps the left navigation slim and reveals labels on mouse-over; \"Always expanded\" keeps "
|
||||
"labels visible."
|
||||
msgstr ""
|
||||
|
||||
#: changedetectionio/blueprint/settings/templates/settings.html
|
||||
msgid "Tip"
|
||||
msgstr "Порада"
|
||||
@@ -3243,6 +3249,18 @@ msgstr ""
|
||||
msgid "Short (1m ago)"
|
||||
msgstr ""
|
||||
|
||||
#: changedetectionio/forms.py
|
||||
msgid "Navigation sidebar"
|
||||
msgstr ""
|
||||
|
||||
#: changedetectionio/forms.py
|
||||
msgid "Collapsed icon rail (expands on hover)"
|
||||
msgstr ""
|
||||
|
||||
#: changedetectionio/forms.py
|
||||
msgid "Always expanded"
|
||||
msgstr ""
|
||||
|
||||
#: changedetectionio/forms.py
|
||||
msgid "API access token security check enabled"
|
||||
msgstr "Перевірку безпеки токена доступу API увімкнено"
|
||||
@@ -4483,6 +4501,10 @@ msgstr ""
|
||||
msgid "Page Watches"
|
||||
msgstr ""
|
||||
|
||||
#: changedetectionio/templates/sidebar-nav.html
|
||||
msgid "Unread changes"
|
||||
msgstr ""
|
||||
|
||||
#: changedetectionio/templates/sidebar-nav.html
|
||||
msgid "Watch Groups"
|
||||
msgstr ""
|
||||
|
||||
@@ -798,6 +798,12 @@ msgstr "监控概览列表每页数量,0 为禁用。"
|
||||
msgid "How \"Last Checked\" and \"Last Changed\" times are shown in the watch overview list."
|
||||
msgstr ""
|
||||
|
||||
#: changedetectionio/blueprint/settings/templates/settings.html
|
||||
msgid ""
|
||||
"\"Collapsed icon rail\" keeps the left navigation slim and reveals labels on mouse-over; \"Always expanded\" keeps "
|
||||
"labels visible."
|
||||
msgstr ""
|
||||
|
||||
#: changedetectionio/blueprint/settings/templates/settings.html
|
||||
msgid "Tip"
|
||||
msgstr "提示"
|
||||
@@ -3217,6 +3223,18 @@ msgstr ""
|
||||
msgid "Short (1m ago)"
|
||||
msgstr ""
|
||||
|
||||
#: changedetectionio/forms.py
|
||||
msgid "Navigation sidebar"
|
||||
msgstr ""
|
||||
|
||||
#: changedetectionio/forms.py
|
||||
msgid "Collapsed icon rail (expands on hover)"
|
||||
msgstr ""
|
||||
|
||||
#: changedetectionio/forms.py
|
||||
msgid "Always expanded"
|
||||
msgstr ""
|
||||
|
||||
#: changedetectionio/forms.py
|
||||
msgid "API access token security check enabled"
|
||||
msgstr "已启用 API 访问令牌安全检查"
|
||||
@@ -4453,6 +4471,10 @@ msgstr ""
|
||||
msgid "Page Watches"
|
||||
msgstr ""
|
||||
|
||||
#: changedetectionio/templates/sidebar-nav.html
|
||||
msgid "Unread changes"
|
||||
msgstr ""
|
||||
|
||||
#: changedetectionio/templates/sidebar-nav.html
|
||||
msgid "Watch Groups"
|
||||
msgstr ""
|
||||
|
||||
@@ -797,6 +797,12 @@ msgstr ""
|
||||
msgid "How \"Last Checked\" and \"Last Changed\" times are shown in the watch overview list."
|
||||
msgstr ""
|
||||
|
||||
#: changedetectionio/blueprint/settings/templates/settings.html
|
||||
msgid ""
|
||||
"\"Collapsed icon rail\" keeps the left navigation slim and reveals labels on mouse-over; \"Always expanded\" keeps "
|
||||
"labels visible."
|
||||
msgstr ""
|
||||
|
||||
#: changedetectionio/blueprint/settings/templates/settings.html
|
||||
msgid "Tip"
|
||||
msgstr "提示"
|
||||
@@ -3217,6 +3223,18 @@ msgstr ""
|
||||
msgid "Short (1m ago)"
|
||||
msgstr ""
|
||||
|
||||
#: changedetectionio/forms.py
|
||||
msgid "Navigation sidebar"
|
||||
msgstr ""
|
||||
|
||||
#: changedetectionio/forms.py
|
||||
msgid "Collapsed icon rail (expands on hover)"
|
||||
msgstr ""
|
||||
|
||||
#: changedetectionio/forms.py
|
||||
msgid "Always expanded"
|
||||
msgstr ""
|
||||
|
||||
#: changedetectionio/forms.py
|
||||
msgid "API access token security check enabled"
|
||||
msgstr "已啟用 API 存取權杖安全檢查"
|
||||
@@ -4451,6 +4469,10 @@ msgstr ""
|
||||
msgid "Page Watches"
|
||||
msgstr ""
|
||||
|
||||
#: changedetectionio/templates/sidebar-nav.html
|
||||
msgid "Unread changes"
|
||||
msgstr ""
|
||||
|
||||
#: changedetectionio/templates/sidebar-nav.html
|
||||
msgid "Watch Groups"
|
||||
msgstr ""
|
||||
|
||||
@@ -14,7 +14,7 @@ import sys
|
||||
import time
|
||||
|
||||
# Allow alphanumerics, space, and a small set of punctuation that appears in legitimate
|
||||
# status strings ("Querying AI/LLM (intent)..", "Fetching page.."). Anything that could
|
||||
# status strings ("Querying AI/LLM (intent)..", "Fetching..."). Anything that could
|
||||
# be HTML-active (<, >, &, ", ', =, ;, {, }, `, \) is stripped.
|
||||
_MINITEXT_STATUS_SAFE_RE = re.compile(r'[^A-Za-z0-9 ().,/:\-]')
|
||||
_MINITEXT_STATUS_MAX_LEN = 80
|
||||
@@ -30,7 +30,7 @@ DEFER_SLEEP_TIME_ALREADY_QUEUED = 0.3 if IN_PYTEST else 10.0
|
||||
|
||||
def set_watch_minitext_status(watch, status):
|
||||
"""
|
||||
Set a transient status line for a watch (e.g. "Fetching page..", "Querying AI/LLM..").
|
||||
Set a transient status line for a watch (e.g. "Fetching...", "Querying AI/LLM..").
|
||||
|
||||
Writes to watch['__check_status'] so a client reloading the page can render the
|
||||
last known status, and fires the realtime signal so already-connected clients
|
||||
@@ -182,7 +182,7 @@ async def async_update_worker(worker_id, q, notification_q, app, datastore, exec
|
||||
# Allow plugins to modify/wrap the update_handler
|
||||
update_handler = apply_update_handler_alter(update_handler, watch, datastore)
|
||||
|
||||
set_watch_minitext_status(watch, "Fetching page..")
|
||||
set_watch_minitext_status(watch, "Fetching...")
|
||||
|
||||
# All fetchers are now async, so call directly
|
||||
await update_handler.call_browser()
|
||||
|
||||
Reference in New Issue
Block a user