From b2da26b2f157f6a8c6f9eaabeb6add3e005edb3d Mon Sep 17 00:00:00 2001 From: tanc Date: Sun, 4 Dec 2022 13:54:48 +0100 Subject: [PATCH] 956 Templates to support dark mode --- .../templates/_common_fields.jinja | 13 +- changedetectionio/templates/base.html | 202 ++-- .../templates/clear_all_history.html | 71 +- changedetectionio/templates/edit.html | 1001 +++++++++++------ changedetectionio/templates/settings.html | 443 +++++--- .../templates/svgs/dark-mode-toggle-icon.svg | 1 + changedetectionio/templates/svgs/github.svg | 3 + .../templates/svgs/light-mode-toggle-icon.svg | 1 + .../templates/watch-overview.html | 16 +- 9 files changed, 1090 insertions(+), 661 deletions(-) create mode 100644 changedetectionio/templates/svgs/dark-mode-toggle-icon.svg create mode 100644 changedetectionio/templates/svgs/github.svg create mode 100644 changedetectionio/templates/svgs/light-mode-toggle-icon.svg diff --git a/changedetectionio/templates/_common_fields.jinja b/changedetectionio/templates/_common_fields.jinja index a12f6dff..fc152c5d 100644 --- a/changedetectionio/templates/_common_fields.jinja +++ b/changedetectionio/templates/_common_fields.jinja @@ -18,12 +18,13 @@
  • tgram:// only supports very limited HTML and can fail when extra tags are sent, read more here (or use plaintext/markdown format)
  • -
    - Send test notification -{% if emailprefix %} - Add email -{% endif %} - Notification debug logs +
    + Send test notification + {% if emailprefix %} + Add email + {% endif %} + Notification debug logs +
    diff --git a/changedetectionio/templates/base.html b/changedetectionio/templates/base.html index c9543259..2a8fbc53 100644 --- a/changedetectionio/templates/base.html +++ b/changedetectionio/templates/base.html @@ -1,121 +1,151 @@ - - - - - - + + + + + + + Change Detection{{extra_title}} - - - + + + {% if extra_stylesheets %} - {% for m in extra_stylesheets %} - - {% endfor %} + {% for m in extra_stylesheets %} + + {% endfor %} {% endif %} - - - - - - - - - + + + + + + + + + + - - - - -
    - - -{% if hosted_sticky %}{% endif %} -{% if left_sticky %} {% endif %} -{% if right_sticky %}
    {{ right_sticky }}
    {% endif %} -
    -
    + {% if hosted_sticky %} + + {% endif %} + {% if left_sticky %} + + {% endif %} + {% if right_sticky %} +
    {{ right_sticky }}
    + {% endif %} +
    +
    {% block header %}{% endblock %} -
    +
    - {% with messages = get_flashed_messages(with_categories=true) %} - {% if messages %} -
      - {% for category, message in messages %} -
    • {{ message }}
    • - {% endfor %} + {% with messages = get_flashed_messages(with_categories = true) %} + {% if + messages %} +
        + {% for category, message in messages %} +
      • {{ message }}
      • + {% endfor %}
      {% endif %} - {% endwith %} - - {% if session['share-link'] %} + {% endwith %} + {% if session['share-link'] %} - {% endif %} - - {% block content %} - - {% endblock %} -
    + {% endif %} + {% block content %}{% endblock %} + + + - diff --git a/changedetectionio/templates/clear_all_history.html b/changedetectionio/templates/clear_all_history.html index 379b0b7c..a1a18d29 100644 --- a/changedetectionio/templates/clear_all_history.html +++ b/changedetectionio/templates/clear_all_history.html @@ -1,32 +1,49 @@ -{% extends 'base.html' %} - -{% block content %} +{% extends 'base.html' %} {% block content %}
    -
    -
    - -
    -
    - This will remove version history (snapshots) for ALL watches, but keep your list of URLs!
    - You may like to use the BACKUP link first.
    -
    -
    -
    - - - Type in the word clear to confirm that you understand. -
    -
    -
    - -
    -
    -
    - Cancel -
    -
    +
    + + +
    +
    + This will remove version history (snapshots) for ALL watches, but keep + your list of URLs!
    + You may like to use the BACKUP link first.
    +
    +
    +
    + + + Type in the word clear to confirm that you + understand. +
    +
    +
    + +
    +
    +
    + Cancel +
    +
    -
    +
    {% endblock %} diff --git a/changedetectionio/templates/edit.html b/changedetectionio/templates/edit.html index 83eaf2a9..fe033259 100644 --- a/changedetectionio/templates/edit.html +++ b/changedetectionio/templates/edit.html @@ -1,396 +1,671 @@ -{% extends 'base.html' %} -{% block content %} -{% from '_helpers.jinja' import render_field, render_checkbox_field, render_button %} -{% from '_common_fields.jinja' import render_common_settings_form %} - +{% extends 'base.html' %} {% block content %} {% from '_helpers.jinja' import +render_field, render_checkbox_field, render_button %} {% from +'_common_fields.jinja' import render_common_settings_form %} + - - - - + + + + {% if playwright_enabled %} - + {% endif %}
    +
    + +
    -
    - -
    +
    +
    + -
    - - +
    +
    +
    + {{ render_field(form.url, placeholder="https://...", required=true, + class="m-d") }} + Some sites use JavaScript to create the content, for this you + should + use the Chrome/WebDriver Fetcher
    + You can use variables in the URL, perfect for inserting the + current date and other logic, + help and examples here
    +
    +
    + {{ render_field(form.title, class="m-d") }} +
    +
    + {{ render_field(form.tag) }} + Organisational tag/group name used in the main listing page +
    +
    + {{ render_field(form.time_between_check, class="time-check-widget") + }} {% if has_empty_checktime %} + Currently using the + default global settings, change to another value if you want to be specific. + {% else %} + Set to blank to use the + default global settings. + {% endif %} +
    +
    + {{ render_checkbox_field(form.extract_title_as_title) }} +
    +
    + {{ render_checkbox_field(form.filter_failure_notification_send) }} + + Sends a notification when the filter can no longer be seen on the + page, good for knowing when the page changed and your filter will + not work anymore. + +
    +
    +
    -
    -
    -
    - {{ render_field(form.url, placeholder="https://...", required=true, class="m-d") }} - Some sites use JavaScript to create the content, for this you should use the Chrome/WebDriver Fetcher
    - You can use variables in the URL, perfect for inserting the current date and other logic, help and examples here
    -
    -
    - {{ render_field(form.title, class="m-d") }} -
    -
    - {{ render_field(form.tag) }} - Organisational tag/group name used in the main listing page -
    -
    - {{ render_field(form.time_between_check, class="time-check-widget") }} - {% if has_empty_checktime %} - Currently using the default global settings, change to another value if you want to be specific. - {% else %} - Set to blank to use the default global settings. - {% endif %} -
    -
    - {{ render_checkbox_field(form.extract_title_as_title) }} -
    -
    - {{ render_checkbox_field(form.filter_failure_notification_send) }} - - Sends a notification when the filter can no longer be seen on the page, good for knowing when the page changed and your filter will not work anymore. - -
    -
    +
    +
    + {{ render_field(form.fetch_backend, class="fetch-backend") }} + +

    + Use the Basic method (default) where your watched + site doesn't need Javascript to render. +

    +

    + The Chrome/Javascript method requires a network + connection to a running WebDriver+Chrome server, set by the ENV + var 'WEBDRIVER_URL'. +

    + Tip: + Connect using BrightData Proxies, find out more here. +
    +
    + {% if form.proxy %} +
    + {{ render_field(form.proxy, class="fetch-backend-proxy") }} + + Choose a proxy for this watch + +
    + {% endif %} +
    + {{ render_checkbox_field(form.ignore_status_codes) }} +
    +
    +
    + {{ render_field(form.webdriver_delay) }} +
    + If you're having trouble waiting for the page to be fully + rendered (text missing etc), try increasing the 'wait' time + here. +
    + This will wait n seconds before extracting the text. {% if + using_global_webdriver_wait %}
    Using the current global default settings + {% endif %}
    - -
    -
    - {{ render_field(form.fetch_backend, class="fetch-backend") }} - -

    Use the Basic method (default) where your watched site doesn't need Javascript to render.

    -

    The Chrome/Javascript method requires a network connection to a running WebDriver+Chrome server, set by the ENV var 'WEBDRIVER_URL'.

    - Tip: Connect using BrightData Proxies, find out more here. -
    -
    - {% if form.proxy %} -
    - {{ render_field(form.proxy, class="fetch-backend-proxy") }} - - Choose a proxy for this watch - -
    - {% endif %} -
    - {{ render_checkbox_field(form.ignore_status_codes) }} -
    -
    -
    - {{ render_field(form.webdriver_delay) }} -
    - If you're having trouble waiting for the page to be fully rendered (text missing etc), try increasing the 'wait' time here. -
    - This will wait n seconds before extracting the text. - {% if using_global_webdriver_wait %} -
    Using the current global default settings - {% endif %} -
    -
    -
    - {{ render_field(form.webdriver_js_execute_code) }} -
    - Run this code before performing change detection, handy for filling in fields and other actions More help and examples here -
    -
    -
    -
    - {% if not playwright_enabled %} -
    - Request override is currently only used by the Basic fast Plaintext/HTTP Client method. -
    - {% endif %} -
    - {{ render_field(form.method) }} -
    -
    -{{ render_field(form.headers, rows=5, placeholder="Example -Cookie: foobar -User-Agent: wonderbra 1.0") }} -
    -
    - {{ render_field(form.body, rows=5, placeholder="Example -{ - \"name\":\"John\", - \"age\":30, - \"car\":null -}") }} -
    -
    +
    +
    + {{ render_field(form.webdriver_js_execute_code) }} +
    + Run this code before performing change detection, handy for + filling in fields and other actions + More help and examples here
    - {% if playwright_enabled %} -
    - -
    -
    - - - - - -
    - -
    - -
    - - -

    Click here to Start

    - Please allow 10-15 seconds for the browser to connect. -
    - -
    - - -
    -
    -
    - Loading (?) - {{ render_field(form.browser_steps) }} -
    -
    -
    -
    + + - {% endif %} - -
    -
    -
    - {{ render_checkbox_field(form.notification_muted) }} -
    - {% if is_html_webdriver %} -
    - {{ render_checkbox_field(form.notification_screenshot) }} - - Use with caution! This will easily fill up your email storage quota or flood other storages. - -
    - {% endif %} -
    - {% if has_default_notification_urls %} -
    - Look out! - There are system-wide notification URLs enabled, this form will override notification settings for this watch only ‐ an empty Notification URL list here will still send notifications. -
    - {% endif %} - Use system defaults - {{ render_common_settings_form(form, emailprefix, settings_application) }} -
    -
    + - -
    -
    - Pro-tips:
    -
      -
    • - Use the preview page to see your filters and triggers highlighted. -
    • -
    • - Some sites use JavaScript to create the content, for this you should use the Chrome/WebDriver Fetcher -
    • -
    -
    -
    -
    - {{ render_checkbox_field(form.check_unique_lines) }} - Good for websites that just move the content around, and you want to know when NEW content is added, compares new lines against all history for this watch. -
    -
    -
    - {% set field = render_field(form.include_filters, - rows=5, - placeholder="#example -xpath://body/div/span[contains(@class, 'example-class')]", - class="m-d") - %} - {{ field }} - {% if '/text()' in field %} - Note!: //text() function does not work where the <element> contains <![CDATA[]]>
    - {% endif %} - One rule per line, any rules that matches will be used.
    -
      -
    • CSS - Limit text to this CSS rule, only text matching this CSS rule is included.
    • -
    • JSON - Limit text to this JSON rule, using either JSONPath or jq (if installed). -
        -
      • JSONPath: Prefix with json:, use json:$ to force re-formatting if required, test your JSONPath here.
      • - {% if jq_support %} -
      • jq: Prefix with jq: and test your jq here. Using jq allows for complex filtering and processing of JSON data with built-in functions, regex, filtering, and more. See examples and documentation here.
      • - {% else %} -
      • jq support not installed
      • - {% endif %} -
      -
    • -
    • XPath - Limit text to this XPath rule, simply start with a forward-slash, -
        -
      • Example: //*[contains(@class, 'sametext')] or xpath://*[contains(@class, 'sametext')], test your XPath here
      • -
      • Example: Get all titles from an RSS feed //title/text()
      • -
      -
    • -
    - Please be sure that you thoroughly understand how to write CSS, JSONPath, XPath{% if jq_support %}, or jq selector{%endif%} rules before filing an issue on GitHub! here for more CSS selector help.
    -
    -
    -
    - {{ render_field(form.subtractive_selectors, rows=5, placeholder="header -footer -nav -.stockticker") }} - -
      -
    • Remove HTML element(s) by CSS selector before text conversion.
    • -
    • Add multiple elements or CSS selectors per line to ignore multiple parts of the HTML.
    • -
    -
    -
    -
    - {{ render_field(form.ignore_text, rows=5, placeholder="Some text to ignore in a line -/some.regex\d{2}/ for case-INsensitive regex - ") }} - -
      -
    • Each line processed separately, any line matching will be ignored (removed before creating the checksum)
    • -
    • Regular Expression support, wrap the entire line in forward slash /regex/
    • -
    • Changing this will affect the comparison checksum which may trigger an alert
    • -
    • Use the preview/show current tab to see ignores
    • -
    +
    +
    +
    + + +

    Click here to Start

    + Please allow 10-15 seconds for the browser to connect. +
    + +
    + + +
    +
    +
    + Loading + + (?) + {{ render_field(form.browser_steps) }} +
    +
    +
    +
    +
    + {% endif %} - -
    -
    - {{ render_field(form.trigger_text, rows=5, placeholder="Some text to wait for in a line -/some.regex\d{2}/ for case-INsensitive regex - ") }} - -
      -
    • Text to wait for before triggering a change/notification, all text and regex are tested case-insensitive.
    • -
    • Trigger text is processed from the result-text that comes out of any CSS/JSON Filters for this watch
    • -
    • Each line is processed separately (think of each line as "OR")
    • -
    • Note: Wrap in forward slash / to use regex example: /foo\d/
    • -
    -
    -
    -
    -
    -
    - {{ render_field(form.text_should_not_be_present, rows=5, placeholder="For example: Out of stock -Sold out -Not in stock -Unavailable") }} - -
      -
    • Block change-detection while this text is on the page, all text and regex are tested case-insensitive, good for waiting for when a product is available again
    • -
    • Block text is processed from the result-text that comes out of any CSS/JSON Filters for this watch
    • -
    • All lines here must not exist (think of each line as "OR")
    • -
    • Note: Wrap in forward slash / to use regex example: /foo\d/
    • -
    -
    -
    -
    -
    -
    - {{ render_field(form.extract_text, rows=5, placeholder="\d+ online") }} - -
      -
    • Extracts text in the final output (line by line) after other filters using regular expressions; -
        -
      • Regular expression ‐ example /reports.+?2022/i
      • -
      • Use //(?aiLmsux)) type flags (more information here)
      • -
      • Keyword example ‐ example Out of stock
      • -
      • Use groups to extract just that text ‐ example /reports.+?(\d+)/i returns a list of years only
      • -
      -
    • -
    • One line per regular-expression/ string match
    • -
    -
    -
    -
    +
    +
    +
    + {{ render_checkbox_field(form.notification_muted) }} +
    + {% if is_html_webdriver %} +
    + {{ render_checkbox_field(form.notification_screenshot) }} + + Use with caution! This will easily fill up your + email storage quota or flood other storages. + +
    + {% endif %} +
    + {% if has_default_notification_urls %} +
    + Look out! + There are + system-wide notification URLs enabled, this form will override notification settings for this watch + only ‐ an empty Notification URL list here will still send + notifications.
    + {% endif %} + Use system defaults -
    - + {{ render_common_settings_form(form, emailprefix, + settings_application) }} +
    +
    +
    -
    -
    - {% if visualselector_enabled %} - - The Visual Selector tool lets you select the text elements that will be used for the change detection ‐ after the Browser Steps has completed.

    -
    +
    +
    + Pro-tips:
    +
      +
    • + Use the preview page to see your filters and triggers highlighted. +
    • +
    • + Some sites use JavaScript to create the content, for this you + should + use the Chrome/WebDriver Fetcher +
    • +
    +
    +
    +
    + {{ render_checkbox_field(form.check_unique_lines) }} + Good for websites that just move the content around, and you want + to know when NEW content is added, compares new lines against all + history for this watch. +
    +
    +
    + {% set field = render_field(form.include_filters, rows=5, + placeholder="#example xpath://body/div/span[contains(@class, + 'example-class')]", class="m-d") %} {{ field }} {% if '/text()' in + field %} + Note!: //text() function does not work where the <element> + contains <![CDATA[]]>
    + {% endif %} + One rule per line, any rules that matches will be used.
    +
      +
    • + CSS - Limit text to this CSS rule, only text matching this CSS + rule is included. +
    • +
    • + JSON - Limit text to this JSON rule, using either + JSONPath + or + jq (if + installed). +
        +
      • + JSONPath: Prefix with json:, use + json:$ to force re-formatting if required, + test your JSONPath here. +
      • + {% if jq_support %} +
      • + jq: Prefix with jq: and + test your jq here. Using + jq + allows for complex filtering and processing of JSON data + with built-in functions, regex, filtering, and more. See + examples and documentation + here. +
      • + {% else %} +
      • jq support not installed
      • + {% endif %} +
      +
    • +
    • + XPath - Limit text to this XPath rule, simply start with a + forward-slash, +
        +
      • + Example: //*[contains(@class, 'sametext')] or + xpath://*[contains(@class, 'sametext')], + test your XPath here +
      • +
      • + Example: Get all titles from an RSS feed + //title/text() +
      • +
      +
    • +
    + Please be sure that you thoroughly understand how to write CSS, + JSONPath, XPath{% if jq_support %}, or jq selector{%endif%} rules + before filing an issue on GitHub! + here for more CSS selector help.
    +
    +
    +
    + {{ render_field(form.subtractive_selectors, rows=5, + placeholder="header footer nav .stockticker") }} + +
      +
    • + Remove HTML element(s) by CSS selector before text conversion. +
    • +
    • + Add multiple elements or CSS selectors per line to ignore + multiple parts of the HTML. +
    • +
    +
    +
    +
    + {{ render_field(form.ignore_text, rows=5, placeholder="Some text to + ignore in a line /some.regex\d{2}/ for case-INsensitive regex ") }} + +
      +
    • + Each line processed separately, any line matching will be + ignored (removed before creating the checksum) +
    • +
    • + Regular Expression support, wrap the entire line in forward + slash /regex/ +
    • +
    • + Changing this will affect the comparison checksum which may + trigger an alert +
    • +
    • Use the preview/show current tab to see ignores
    • +
    +
    +
    +
    +
    + {{ render_field(form.trigger_text, rows=5, placeholder="Some text to + wait for in a line /some.regex\d{2}/ for case-INsensitive regex ") + }} + +
      +
    • + Text to wait for before triggering a change/notification, all + text and regex are tested case-insensitive. +
    • +
    • + Trigger text is processed from the result-text that comes out + of any CSS/JSON Filters for this watch +
    • +
    • + Each line is processed separately (think of each line as "OR") +
    • +
    • + Note: Wrap in forward slash / to use regex example: + /foo\d/ +
    • +
    +
    +
    +
    +
    +
    + {{ render_field(form.text_should_not_be_present, rows=5, + placeholder="For example: Out of stock Sold out Not in stock + Unavailable") }} + +
      +
    • + Block change-detection while this text is on the page, all + text and regex are tested case-insensitive, good for + waiting for when a product is available again +
    • +
    • + Block text is processed from the result-text that comes out of + any CSS/JSON Filters for this watch +
    • +
    • + All lines here must not exist (think of each line as "OR") +
    • +
    • + Note: Wrap in forward slash / to use regex example: + /foo\d/ +
    • +
    +
    +
    +
    +
    +
    + {{ render_field(form.extract_text, rows=5, placeholder="\d+ online") + }} + +
      +
    • + Extracts text in the final output (line by line) after other + filters using regular expressions; +
        +
      • + Regular expression ‐ example + /reports.+?2022/i +
      • +
      • + Use //(?aiLmsux)) type flags (more + information here)
        +
      • +
      • + Keyword example ‐ example Out of stock +
      • +
      • + Use groups to extract just that text ‐ example + /reports.+?(\d+)/i returns a list of years + only +
      • +
      +
    • +
    • One line per regular-expression/ string match
    • +
    +
    +
    +
    +
    -
    - Clear selection - One moment, fetching screenshot and element information.. -
    - -
    Currently: Loading...
    - {% else %} - -

    Sorry, this functionality only works with Playwright/Chrome enabled watches.

    -

    Enable the Playwright Chrome fetcher, or alternatively try our very affordable subscription based service.

    -

    This is because Selenium/WebDriver can not extract full page screenshots reliably.

    -
    - {% endif %} -
    -
    -
    +
    + -
    -
    - {{ render_button(form.save_button) }} - Delete - Clear History - Create Copy -
    +
    +
    + {% if visualselector_enabled %} + + The Visual Selector tool lets you select the text elements + that will be used for the change detection ‐ after the + Browser Steps has completed.

    +
    + +
    + Clear selection + One moment, fetching screenshot and element information.. +
    + +
    + Currently: Loading...
    - -
    + {% else %} + +

    + Sorry, this functionality only works with Playwright/Chrome + enabled watches. +

    +

    + Enable the Playwright Chrome fetcher, or alternatively try our + very affordable subscription based service. +

    +

    + This is because Selenium/WebDriver can not extract full page + screenshots reliably. +

    +
    + {% endif %} +
    + +
    + +
    +
    + {{ render_button(form.save_button) }} + Delete + Clear History + Create Copy +
    +
    + +
    {% endblock %} diff --git a/changedetectionio/templates/settings.html b/changedetectionio/templates/settings.html index c912105e..6e23687a 100644 --- a/changedetectionio/templates/settings.html +++ b/changedetectionio/templates/settings.html @@ -1,186 +1,287 @@ -{% extends 'base.html' %} - -{% block content %} -{% from '_helpers.jinja' import render_field, render_checkbox_field, render_button %} -{% from '_common_fields.jinja' import render_common_settings_form %} +{% extends 'base.html' %} {% block content %} {% from '_helpers.jinja' import +render_field, render_checkbox_field, render_button %} {% from +'_common_fields.jinja' import render_common_settings_form %} - - + + - +
    - -
    -
    - -
    -
    -
    - {{ render_field(form.requests.form.time_between_check, class="time-check-widget") }} - Default time for all watches, when the watch does not have a specific time setting. -
    -
    - {{ render_field(form.requests.form.jitter_seconds, class="jitter_seconds") }} - Example - 3 seconds random jitter could trigger up to 3 seconds earlier or up to 3 seconds later -
    -
    - {{ render_field(form.application.form.filter_failure_notification_threshold_attempts, class="filter_failure_notification_threshold_attempts") }} - After this many consecutive times that the CSS/xPath filter is missing, send a notification -
    - Set to 0 to disable -
    -
    -
    - {% if not hide_remove_pass %} - {% if current_user.is_authenticated %} - {{ render_button(form.application.form.removepassword_button) }} - {% else %} - {{ render_field(form.application.form.password) }} - Password protection for your changedetection.io application. - {% endif %} - {% else %} - Password is locked. - {% endif %} -
    - -
    - {{ render_field(form.application.form.base_url, placeholder="http://yoursite.com:5000/", - class="m-d") }} - - Base URL used for the {base_url} token in notifications and RSS links.
    Default value is the ENV var 'BASE_URL' (Currently "{{settings_application['current_base_url']}}"), - read more here. -
    -
    - -
    - {{ render_checkbox_field(form.application.form.extract_title_as_title) }} - Note: This will automatically apply to all existing watches. -
    -
    - {{ render_checkbox_field(form.application.form.empty_pages_are_a_change) }} - When a page contains HTML, but no renderable text appears (empty page), is this considered a change? -
    - {% if form.requests.proxy %} -
    - {{ render_field(form.requests.form.proxy, class="fetch-backend-proxy") }} - - Choose a default proxy for all watches - -
    - {% endif %} -
    -
    - -
    -
    -
    - {{ render_common_settings_form(form.application.form, emailprefix, settings_application) }} -
    -
    -
    + +
    + + +
    +
    +
    + {{ render_field(form.requests.form.time_between_check, + class="time-check-widget") }} + Default time for all watches, when the watch does not have a + specific time setting. +
    +
    + {{ render_field(form.requests.form.jitter_seconds, + class="jitter_seconds") }} + Example - 3 seconds random jitter could trigger up to 3 seconds + earlier or up to 3 seconds later +
    +
    + {{ + render_field(form.application.form.filter_failure_notification_threshold_attempts, + class="filter_failure_notification_threshold_attempts") }} + After this many consecutive times that the CSS/xPath filter is + missing, send a notification +
    + Set to 0 to disable +
    +
    +
    + {% if not hide_remove_pass %} {% if current_user.is_authenticated %} + {{ render_button(form.application.form.removepassword_button) }} {% + else %} {{ render_field(form.application.form.password) }} + Password protection for your changedetection.io + application. + {% endif %} {% else %} + Password is locked. + {% endif %} +
    -
    -
    - {{ render_field(form.application.form.fetch_backend, class="fetch-backend") }} - -

    Use the Basic method (default) where your watched sites don't need Javascript to render.

    -

    The Chrome/Javascript method requires a network connection to a running WebDriver+Chrome server, set by the ENV var 'WEBDRIVER_URL'.

    -
    -
    - Tip: Connect using BrightData Proxies, find out more here. -
    -
    -
    - If you're having trouble waiting for the page to be fully rendered (text missing etc), try increasing the 'wait' time here. -
    - This will wait n seconds before extracting the text. -
    -
    - {{ render_field(form.application.form.webdriver_delay) }} -
    -
    -
    +
    + {{ render_field(form.application.form.base_url, + placeholder="http://yoursite.com:5000/", class="m-d") }} + + Base URL used for the {base_url} token in + notifications and RSS links.
    Default value is the ENV var + 'BASE_URL' (Currently + "{{settings_application['current_base_url']}}"), + read more here. +
    +
    -
    +
    + {{ + render_checkbox_field(form.application.form.extract_title_as_title) + }} + Note: This will automatically apply to all existing + watches. +
    +
    + {{ + render_checkbox_field(form.application.form.empty_pages_are_a_change) + }} + When a page contains HTML, but no renderable text appears (empty + page), is this considered a change? +
    + {% if form.requests.proxy %} +
    + {{ render_field(form.requests.form.proxy, + class="fetch-backend-proxy") }} + + Choose a default proxy for all watches + +
    + {% endif %} +
    +
    -
    - {{ render_checkbox_field(form.application.form.ignore_whitespace) }} - Ignore whitespace, tabs and new-lines/line-feeds when considering if a change was detected.
    - Note: Changing this will change the status of your existing watches, possibly trigger alerts etc. -
    -
    -
    - {{ render_checkbox_field(form.application.form.render_anchor_tag_content) }} - Render anchor tag content, default disabled, when enabled renders links as (link text)[https://somesite.com] -
    - Note: Changing this could affect the content of your existing watches, possibly trigger alerts etc. -
    -
    -
    - {{ render_field(form.application.form.global_subtractive_selectors, rows=5, placeholder="header -footer -nav -.stockticker") }} - -
      -
    • Remove HTML element(s) by CSS selector before text conversion.
    • -
    • Add multiple elements or CSS selectors per line to ignore multiple parts of the HTML.
    • -
    -
    -
    -
    - {{ render_field(form.application.form.global_ignore_text, rows=5, placeholder="Some text to ignore in a line -/some.regex\d{2}/ for case-INsensitive regex - ") }} - Note: This is applied globally in addition to the per-watch rules.
    - -
      -
    • Note: This is applied globally in addition to the per-watch rules.
    • -
    • Each line processed separately, any line matching will be ignored (removed before creating the checksum)
    • -
    • Regular Expression support, wrap the entire line in forward slash /regex/
    • -
    • Changing this will affect the comparison checksum which may trigger an alert
    • -
    • Use the preview/show current tab to see ignores
    • -
    -
    -
    -
    +
    +
    +
    + {{ render_common_settings_form(form.application.form, emailprefix, + settings_application) }} +
    +
    +
    -
    +
    +
    + {{ render_field(form.application.form.fetch_backend, + class="fetch-backend") }} + +

    + Use the Basic method (default) where your watched + sites don't need Javascript to render. +

    +

    + The Chrome/Javascript method requires a network + connection to a running WebDriver+Chrome server, set by the ENV + var 'WEBDRIVER_URL'. +

    +
    +
    + Tip: + Connect using BrightData Proxies, find out more here. +
    +
    +
    + If you're having trouble waiting for the page to be fully + rendered (text missing etc), try increasing the 'wait' time + here. +
    + This will wait n seconds before extracting the text. +
    +
    + {{ render_field(form.application.form.webdriver_delay) }} +
    +
    +
    -

    Drive your changedetection.io via API, More about API access here

    +
    +
    + {{ render_checkbox_field(form.application.form.ignore_whitespace) }} + Ignore whitespace, tabs and new-lines/line-feeds when considering + if a change was detected.
    + Note: Changing this will change the status of your existing + watches, possibly trigger alerts etc. +
    +
    +
    + {{ + render_checkbox_field(form.application.form.render_anchor_tag_content) + }} + Render anchor tag content, default disabled, when enabled renders + links as (link text)[https://somesite.com] +
    + Note: Changing this could affect the content of your existing + watches, possibly trigger alerts etc. +
    +
    +
    + {{ render_field(form.application.form.global_subtractive_selectors, + rows=5, placeholder="header footer nav .stockticker") }} + +
      +
    • + Remove HTML element(s) by CSS selector before text conversion. +
    • +
    • + Add multiple elements or CSS selectors per line to ignore + multiple parts of the HTML. +
    • +
    +
    +
    +
    + {{ render_field(form.application.form.global_ignore_text, rows=5, + placeholder="Some text to ignore in a line /some.regex\d{2}/ for + case-INsensitive regex ") }} + Note: This is applied globally in addition to the per-watch + rules.
    + +
      +
    • + Note: This is applied globally in addition to the per-watch + rules. +
    • +
    • + Each line processed separately, any line matching will be + ignored (removed before creating the checksum) +
    • +
    • + Regular Expression support, wrap the entire line in forward + slash /regex/ +
    • +
    • + Changing this will affect the comparison checksum which may + trigger an alert +
    • +
    • Use the preview/show current tab to see ignores
    • +
    +
    +
    +
    -
    - {{ render_checkbox_field(form.application.form.api_access_token_enabled) }} -
    Restrict API access limit by using x-api-key header

    -

    API Key {{api_key}} - -
    -
    -
    +
    +

    + Drive your changedetection.io via API, More about + API access here +

    -
    -
    - {{ render_button(form.save_button) }} - Back - Clear Snapshot History -
    +
    + {{ + render_checkbox_field(form.application.form.api_access_token_enabled) + }} +
    + Restrict API access limit by using x-api-key header +
    +
    +
    +
    API Key {{api_key}} + +
    +
    +
    -
    -
    -
    +
    +
    + {{ render_button(form.save_button) }} + Back + Clear Snapshot History +
    +
    + +
    {% endblock %} diff --git a/changedetectionio/templates/svgs/dark-mode-toggle-icon.svg b/changedetectionio/templates/svgs/dark-mode-toggle-icon.svg new file mode 100644 index 00000000..e83c83a2 --- /dev/null +++ b/changedetectionio/templates/svgs/dark-mode-toggle-icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/changedetectionio/templates/svgs/github.svg b/changedetectionio/templates/svgs/github.svg new file mode 100644 index 00000000..31eef6df --- /dev/null +++ b/changedetectionio/templates/svgs/github.svg @@ -0,0 +1,3 @@ + diff --git a/changedetectionio/templates/svgs/light-mode-toggle-icon.svg b/changedetectionio/templates/svgs/light-mode-toggle-icon.svg new file mode 100644 index 00000000..4fa0e4ca --- /dev/null +++ b/changedetectionio/templates/svgs/light-mode-toggle-icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/changedetectionio/templates/watch-overview.html b/changedetectionio/templates/watch-overview.html index b1cb87ab..5338b949 100644 --- a/changedetectionio/templates/watch-overview.html +++ b/changedetectionio/templates/watch-overview.html @@ -80,15 +80,15 @@ {{ loop.index }} {% if not watch.paused %} - Pause checks + Pause checks {% else %} - UnPause checks + UnPause checks {% endif %} - Mute notifications + Mute notifications {{watch.title if watch.title is not none and watch.title|length > 0 else watch.url}} - + {%if watch.fetch_backend == "html_webdriver" %}{% endif %} @@ -111,13 +111,13 @@ {% if watch.uuid in queued_uuids %}Queued{% else %}Recheck{% endif %} - Edit + class="recheck pure-button pure-button-primary">{% if watch.uuid in queued_uuids %}Queued{% else %}Recheck{% endif %} + Edit {% if watch.history_n >= 2 %} - Diff + Diff {% else %} {% if watch.history_n == 1 or (watch.history_n ==0 and watch.error_text_ctime )%} - Preview + Preview {% endif %} {% endif %}