2021-01-29 09:49:05 +00:00
{% extends 'base.html' %}
{% block content %}
2022-04-09 10:15:34 +00:00
{% from '_helpers.jinja' import render_field, render_checkbox_field, render_button %}
2021-12-04 14:23:23 +00:00
{% from '_common_fields.jinja' import render_common_settings_form %}
2021-08-12 10:05:59 +00:00
< script type = "text/javascript" src = "{{url_for('static_content', group='js', filename='tabs.js')}}" defer > < / script >
2022-04-05 16:04:26 +00:00
< script >
2022-04-07 16:18:23 +00:00
const notification_base_url="{{url_for('ajax_callback_send_notification_test')}}";
2022-05-23 21:44:51 +00:00
const watch_visual_selector_data_url="{{url_for('static_content', group='visual_selector_data', filename=uuid)}}";
const screenshot_url="{{url_for('static_content', group='screenshot', filename=uuid)}}";
2022-06-25 21:42:48 +00:00
const playwright_enabled={% if playwright_enabled %} true {% else %} false {% endif %};
2022-05-23 21:44:51 +00:00
2022-04-07 16:18:23 +00:00
{% if emailprefix %}
const email_notification_prefix=JSON.parse('{{ emailprefix|tojson }}');
{% endif %}
2022-05-23 21:44:51 +00:00
2022-11-24 19:53:01 +00:00
const browser_steps_config=JSON.parse('{{ browser_steps_config|tojson }}');
const browser_steps_sync_url="{{url_for('browser_steps.browsersteps_ui_update', uuid=uuid)}}";
2022-04-05 16:04:26 +00:00
< / script >
2022-11-24 19:53:01 +00:00
2022-05-06 21:40:32 +00:00
< script type = "text/javascript" src = "{{url_for('static_content', group='js', filename='watch-settings.js')}}" defer > < / script >
2022-11-24 19:53:01 +00:00
< script type = "text/javascript" src = "{{url_for('static_content', group='js', filename='limit.js')}}" defer > < / script >
2022-04-07 16:18:23 +00:00
< script type = "text/javascript" src = "{{url_for('static_content', group='js', filename='notifications.js')}}" defer > < / script >
2022-05-23 21:44:51 +00:00
< script type = "text/javascript" src = "{{url_for('static_content', group='js', filename='visual-selector.js')}}" defer > < / script >
2022-11-24 19:53:01 +00:00
{% if playwright_enabled %}
< script type = "text/javascript" src = "{{url_for('static_content', group='js', filename='browser-steps.js')}}" defer > < / script >
{% endif %}
2021-08-12 10:05:59 +00:00
2021-06-21 06:21:05 +00:00
< div class = "edit-form monospaced-textarea" >
2021-08-12 10:05:59 +00:00
2022-04-02 12:49:32 +00:00
< div class = "tabs collapsable" >
2021-08-12 10:05:59 +00:00
< ul >
2022-08-15 16:56:53 +00:00
< li class = "tab" id = "" > < a href = "#general" > General< / a > < / li >
2021-12-29 22:18:29 +00:00
< li class = "tab" > < a href = "#request" > Request< / a > < / li >
2022-11-24 19:53:01 +00:00
{% if playwright_enabled %}
< li class = "tab" > < a id = "browsersteps-tab" href = "#browser-steps" > Browser Steps< / a > < / li >
{% endif %}
2022-07-10 10:51:12 +00:00
< li class = "tab" > < a id = "visualselector-tab" href = "#visualselector" > Visual Filter Selector< / a > < / li >
2021-12-29 22:37:04 +00:00
< li class = "tab" > < a href = "#filters-and-triggers" > Filters & Triggers< / a > < / li >
2021-08-12 10:05:59 +00:00
< li class = "tab" > < a href = "#notifications" > Notifications< / a > < / li >
< / ul >
< / div >
< div class = "box-wrap inner" >
< form class = "pure-form pure-form-stacked"
2022-07-28 10:13:26 +00:00
action="{{ url_for('edit_page', uuid=uuid, next = request.args.get('next'), unpause_on_save = request.args.get('unpause_on_save')) }}" method="POST">
2022-03-21 21:54:27 +00:00
< input type = "hidden" name = "csrf_token" value = "{{ csrf_token() }}" / >
2021-08-12 10:05:59 +00:00
< div class = "tab-pane-inner" id = "general" >
< fieldset >
< div class = "pure-control-group" >
{{ render_field(form.url, placeholder="https://...", required=true, class="m-d") }}
2023-03-12 16:05:34 +00:00
< span class = "pure-form-message-inline" > Some sites use JavaScript to create the content, for this you should < a href = "https://github.com/dgtlmoon/changedetection.io/wiki/Fetching-pages-with-WebDriver" > use the Chrome/WebDriver Fetcher< / a > < / span > < br >
< span class = "pure-form-message-inline" > You can use variables in the URL, perfect for inserting the current date and other logic, < a href = "https://github.com/dgtlmoon/changedetection.io/wiki/Handling-variables-in-the-watched-URL" > help and examples here< / a > < / span > < br >
2021-08-12 10:05:59 +00:00
< / div >
< div class = "pure-control-group" >
{{ render_field(form.title, class="m-d") }}
< / div >
< div class = "pure-control-group" >
{{ render_field(form.tag) }}
2021-08-15 20:16:18 +00:00
< span class = "pure-form-message-inline" > Organisational tag/group name used in the main listing page< / span >
2021-08-12 10:05:59 +00:00
< / div >
< div class = "pure-control-group" >
2022-04-24 14:56:32 +00:00
{{ render_field(form.time_between_check, class="time-check-widget") }}
2022-04-19 19:43:07 +00:00
{% if has_empty_checktime %}
2021-08-12 10:05:59 +00:00
< span class = "pure-form-message-inline" > Currently using the < a
href="{{ url_for('settings_page', uuid=uuid) }}">default global settings< / a > , change to another value if you want to be specific.< / span >
{% else %}
< span class = "pure-form-message-inline" > Set to blank to use the < a
href="{{ url_for('settings_page', uuid=uuid) }}">default global settings< / a > .< / span >
{% endif %}
< / div >
2021-12-29 22:31:53 +00:00
< div class = "pure-control-group" >
2022-04-09 10:15:34 +00:00
{{ render_checkbox_field(form.extract_title_as_title) }}
2021-12-29 22:31:53 +00:00
< / div >
2022-07-23 15:15:27 +00:00
< div class = "pure-control-group" >
{{ render_checkbox_field(form.filter_failure_notification_send) }}
< span class = "pure-form-message-inline" >
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.
< / span >
< / div >
2021-12-29 22:31:53 +00:00
< / fieldset >
< / div >
< div class = "tab-pane-inner" id = "request" >
2022-05-08 18:35:36 +00:00
< div class = "pure-control-group inline-radio" >
2022-04-24 12:40:53 +00:00
{{ render_field(form.fetch_backend, class="fetch-backend") }}
2021-08-12 10:51:43 +00:00
< span class = "pure-form-message-inline" >
2021-12-29 22:37:04 +00:00
< p > Use the < strong > Basic< / strong > method (default) where your watched site doesn't need Javascript to render.< / p >
2021-10-06 07:27:41 +00:00
< p > The < strong > Chrome/Javascript< / strong > method requires a network connection to a running WebDriver+Chrome server, set by the ENV var 'WEBDRIVER_URL'. < / p >
2022-10-09 13:51:57 +00:00
Tip: < a href = "https://github.com/dgtlmoon/changedetection.io/wiki/Proxy-configuration#brightdata-proxy-support" > Connect using BrightData Proxies, find out more here.< / a >
2021-08-12 10:51:43 +00:00
< / span >
< / div >
2022-05-08 18:35:36 +00:00
{% if form.proxy %}
< div class = "pure-control-group inline-radio" >
{{ render_field(form.proxy, class="fetch-backend-proxy") }}
< span class = "pure-form-message-inline" >
Choose a proxy for this watch
< / span >
< / div >
{% endif %}
2022-08-15 16:56:53 +00:00
< div class = "pure-control-group inline-radio" >
{{ render_checkbox_field(form.ignore_status_codes) }}
< / div >
2022-05-18 12:09:39 +00:00
< fieldset id = "webdriver-override-options" >
2022-05-17 16:35:33 +00:00
< div class = "pure-control-group" >
{{ render_field(form.webdriver_delay) }}
2022-06-25 21:42:48 +00:00
< div class = "pure-form-message-inline" >
< strong > If you're having trouble waiting for the page to be fully rendered (text missing etc), try increasing the 'wait' time here.< / strong >
2023-03-12 16:05:34 +00:00
< br >
2022-06-25 21:42:48 +00:00
This will wait < i > n< / i > seconds before extracting the text.
2022-07-10 11:56:01 +00:00
{% if using_global_webdriver_wait %}
2023-03-12 16:05:34 +00:00
< br > < strong > Using the current global default settings< / strong >
2022-07-10 11:56:01 +00:00
{% endif %}
2022-06-25 21:42:48 +00:00
< / div >
2022-05-17 16:35:33 +00:00
< / div >
2022-07-10 11:56:01 +00:00
< div class = "pure-control-group" >
{{ render_field(form.webdriver_js_execute_code) }}
< div class = "pure-form-message-inline" >
Run this code before performing change detection, handy for filling in fields and other actions < a href = "https://github.com/dgtlmoon/changedetection.io/wiki/Run-JavaScript-before-change-detection" > More help and examples here< / a >
< / div >
2022-05-17 16:35:33 +00:00
< / div >
< / fieldset >
2022-05-06 21:40:32 +00:00
< fieldset class = "pure-group" id = "requests-override-options" >
2022-06-25 21:42:48 +00:00
{% if not playwright_enabled %}
< div class = "pure-form-message-inline" >
< strong > Request override is currently only used by the < i > Basic fast Plaintext/HTTP Client< / i > method.< / strong >
< / div >
{% endif %}
< div class = "pure-control-group" id = "request-method" >
2022-03-06 16:23:21 +00:00
{{ render_field(form.method) }}
< / div >
2022-06-25 21:42:48 +00:00
< div class = "pure-control-group" id = "request-headers" >
2022-03-06 16:23:21 +00:00
{{ render_field(form.headers, rows=5, placeholder="Example
2021-12-29 22:18:29 +00:00
Cookie: foobar
User-Agent: wonderbra 1.0") }}
2022-03-06 16:23:21 +00:00
< / div >
2022-06-25 21:42:48 +00:00
< div class = "pure-control-group" id = "request-body" >
2022-03-06 16:23:21 +00:00
{{ render_field(form.body, rows=5, placeholder="Example
2021-12-29 22:18:29 +00:00
{
\"name\":\"John\",
\"age\":30,
\"car\":null
}") }}
2022-03-06 16:23:21 +00:00
< / div >
< / fieldset >
2021-12-29 22:18:29 +00:00
< / div >
2022-11-24 19:53:01 +00:00
{% if playwright_enabled %}
< div class = "tab-pane-inner" id = "browser-steps" >
2022-11-25 08:14:19 +00:00
< img class = "beta-logo" src = "{{url_for('static_content', group='images', filename='beta-logo.png')}}" >
2022-11-24 19:53:01 +00:00
< fieldset >
< div class = "pure-control-group" >
<!--
Too hard right now, better to just send the events to the fetcher for now and leave it in the final screenshot
and/or report an error
< a id = "play-steps" class = "pure-button button-secondary button-xsmall" style = "font-size: 70%" > Play steps ▶< / a >
-->
<!-- - Do this later -->
< div class = "checkbox" style = "display: none;" >
< input type = checkbox id = "include_text_elements" > < label for = "include_text_elements" > Turn on text finder< / label >
< / div >
2022-11-27 10:41:41 +00:00
< div id = "loading-status-text" style = "display: none;" > Please wait, first browser step can take a little time to load..< div class = "spinner" > < / div > < / div >
2022-11-24 19:53:01 +00:00
< div class = "flex-wrapper" >
< div id = "browser-steps-ui" class = "noselect" style = "width: 100%; background-color: #eee; border-radius: 5px;" >
< div class = "noselect" id = "browsersteps-selector-wrapper" style = "width: 100%" >
2022-11-30 18:40:15 +00:00
< span class = "loader" >
< span id = "browsersteps-click-start" >
< h2 > Click here to Start< / h2 >
Please allow 10-15 seconds for the browser to connect.
< / span >
< div class = "spinner" style = "display: none;" > < / div >
2022-11-24 19:53:01 +00:00
< / span >
< img class = "noselect" id = "browsersteps-img" src = "" style = "max-width: 100%; width: 100%;" / >
< canvas class = "noselect" id = "browsersteps-selector-canvas" style = "max-width: 100%; width: 100%;" > < / canvas >
< / div >
< / div >
< div id = "browser-steps-fieldlist" style = "padding-left: 1em; width: 350px; font-size: 80%;" >
< span id = "browserless-seconds-remaining" > Loading< / span > < span style = "font-size: 80%;" > (< a target = _new href = "https://github.com/dgtlmoon/changedetection.io/pull/478/files#diff-1a79d924d1840c485238e66772391268a89c95b781d69091384cf1ea1ac146c9R4" > ?< / a > ) < / span >
{{ render_field(form.browser_steps) }}
< / div >
< / div >
< / div >
< / fieldset >
< / div >
{% endif %}
2021-12-29 22:18:29 +00:00
2021-09-17 16:37:26 +00:00
< div class = "tab-pane-inner" id = "notifications" >
2021-10-05 16:15:36 +00:00
< fieldset >
2022-08-31 13:49:13 +00:00
< div class = "pure-control-group inline-radio" >
2022-09-08 07:10:04 +00:00
{{ render_checkbox_field(form.notification_muted) }}
2022-08-31 13:49:13 +00:00
< / div >
2022-11-20 13:40:41 +00:00
{% if is_html_webdriver %}
2022-11-20 15:04:26 +00:00
< div class = "pure-control-group inline-radio" >
2022-11-20 08:37:48 +00:00
{{ render_checkbox_field(form.notification_screenshot) }}
2022-11-20 13:40:41 +00:00
< span class = "pure-form-message-inline" >
< strong > Use with caution!< / strong > This will easily fill up your email storage quota or flood other storages.
< / span >
2022-11-20 08:37:48 +00:00
< / div >
2022-11-20 13:40:41 +00:00
{% endif %}
2022-08-31 13:49:13 +00:00
< div class = "field-group" id = "notification-field-group" >
2022-09-08 07:10:04 +00:00
{% if has_default_notification_urls %}
< div class = "inline-warning" >
< img class = "inline-warning-icon" src = "{{url_for('static_content', group='images', filename='notice.svg')}}" alt = "Look out!" title = "Lookout!" / >
There are < a href = "{{ url_for('settings_page')}}#notifications" > system-wide notification URLs enabled< / a > , this form will override notification settings for this watch only ‐ an empty Notification URL list here will still send notifications.
< / div >
{% endif %}
2022-09-10 13:19:18 +00:00
< a href = "#notifications" id = "notification-setting-reset-to-default" class = "pure-button button-xsmall" style = "right: 20px; top: 20px; position: absolute; background-color: #5f42dd; border-radius: 4px; font-size: 70%; color: #fff" > Use system defaults< / a >
2022-09-08 07:10:04 +00:00
{{ render_common_settings_form(form, emailprefix, settings_application) }}
2021-10-05 16:15:36 +00:00
< / div >
< / fieldset >
2021-05-27 13:55:05 +00:00
< / div >
2021-09-17 16:37:26 +00:00
2021-12-29 22:37:04 +00:00
< div class = "tab-pane-inner" id = "filters-and-triggers" >
2022-05-18 12:09:39 +00:00
< div class = "pure-control-group" >
2023-03-12 16:05:34 +00:00
< strong > Pro-tips:< / strong > < br >
2022-02-23 09:49:25 +00:00
< ul >
< li >
Use the preview page to see your filters and triggers highlighted.
< / li >
< li >
Some sites use JavaScript to create the content, for this you should < a href = "https://github.com/dgtlmoon/changedetection.io/wiki/Fetching-pages-with-WebDriver" > use the Chrome/WebDriver Fetcher< / a >
< / li >
< / ul >
< / div >
2022-06-28 16:34:32 +00:00
< fieldset >
< div class = "pure-control-group" >
{{ render_checkbox_field(form.check_unique_lines) }}
< span class = "pure-form-message-inline" > 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.< / span >
< / div >
< / fieldset >
2021-08-12 10:05:59 +00:00
< div class = "pure-control-group" >
2022-11-03 11:13:54 +00:00
{% set field = render_field(form.include_filters,
rows=5,
placeholder="#example
xpath://body/div/span[contains(@class, 'example-class')]",
2022-07-28 09:50:31 +00:00
class="m-d")
%}
{{ field }}
{% if '/text()' in field %}
2023-03-12 16:05:34 +00:00
< span class = "pure-form-message-inline" > < strong > Note!: //text() function does not work where the < element> contains < ![CDATA[]]> < / strong > < / span > < br >
2022-07-28 09:50:31 +00:00
{% endif %}
2023-03-12 16:05:34 +00:00
< span class = "pure-form-message-inline" > One rule per line, < i > any< / i > rules that matches will be used.< br >
2022-12-05 13:48:03 +00:00
2021-07-11 12:07:39 +00:00
< ul >
< li > CSS - Limit text to this CSS rule, only text matching this CSS rule is included.< / li >
2022-10-12 07:53:16 +00:00
< li > JSON - Limit text to this JSON rule, using either < a href = "https://pypi.org/project/jsonpath-ng/" target = "new" > JSONPath< / a > or < a href = "https://stedolan.github.io/jq/" target = "new" > jq< / a > (if installed).
2022-10-09 14:12:45 +00:00
< ul >
< li > JSONPath: Prefix with < code > json:< / code > , use < code > json:$< / code > to force re-formatting if required, < a href = "https://jsonpath.com/" target = "new" > test your JSONPath here< / a > .< / li >
2022-10-12 07:53:16 +00:00
{% if jq_support %}
2022-10-09 14:12:45 +00:00
< li > jq: Prefix with < code > jq:< / code > and < a href = "https://jqplay.org/" target = "new" > test your jq here< / a > . Using < a href = "https://stedolan.github.io/jq/" target = "new" > jq< / a > allows for complex filtering and processing of JSON data with built-in functions, regex, filtering, and more. See examples and documentation < a href = "https://stedolan.github.io/jq/manual/" target = "new" > here< / a > .< / li >
2022-10-12 07:53:16 +00:00
{% else %}
< li > jq support not installed< / li >
{% endif %}
2022-10-09 14:12:45 +00:00
< / ul >
< / li >
2022-07-28 09:50:31 +00:00
< li > XPath - Limit text to this XPath rule, simply start with a forward-slash,
< ul >
< li > Example: < code > //*[contains(@class, 'sametext')]< / code > or < code > xpath://*[contains(@class, 'sametext')]< / code > , < a
2022-01-05 16:58:07 +00:00
href="http://xpather.com/" target="new">test your XPath here< / a > < / li >
2022-07-28 09:50:31 +00:00
< li > Example: Get all titles from an RSS feed < code > //title/text()< / code > < / li >
< / ul >
< / li >
2021-07-11 12:07:39 +00:00
< / ul >
2022-10-12 07:53:16 +00:00
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! < a
2023-03-12 16:05:34 +00:00
href="https://github.com/dgtlmoon/changedetection.io/wiki/CSS-Selector-help">here for more CSS selector help< / a > .< br >
2021-06-15 04:13:01 +00:00
< / span >
2021-08-12 10:05:59 +00:00
< / div >
2022-05-18 11:59:17 +00:00
< div class = "pure-control-group" >
2022-03-12 12:29:30 +00:00
{{ render_field(form.subtractive_selectors, rows=5, placeholder="header
footer
nav
.stockticker") }}
< span class = "pure-form-message-inline" >
< ul >
< li > Remove HTML element(s) by CSS selector before text conversion. < / li >
< li > Add multiple elements or CSS selectors per line to ignore multiple parts of the HTML. < / li >
< / ul >
< / span >
2022-05-18 11:59:17 +00:00
< / div >
2021-08-12 10:05:59 +00:00
< fieldset class = "pure-group" >
{{ render_field(form.ignore_text, rows=5, placeholder="Some text to ignore in a line
/some.regex\d{2}/ for case-INsensitive regex
") }}
< span class = "pure-form-message-inline" >
2022-01-05 19:42:45 +00:00
< ul >
< li > Each line processed separately, any line matching will be ignored (removed before creating the checksum)< / li >
2022-07-21 08:05:59 +00:00
< li > Regular Expression support, wrap the entire line in forward slash < code > /regex/< / code > < / li >
2022-01-05 19:42:45 +00:00
< li > Changing this will affect the comparison checksum which may trigger an alert< / li >
2022-02-23 09:49:25 +00:00
< li > Use the preview/show current tab to see ignores< / li >
2022-01-05 19:42:45 +00:00
< / ul >
2021-06-21 07:17:22 +00:00
< / span >
2021-02-26 19:07:26 +00:00
< / fieldset >
2021-08-16 11:13:17 +00:00
< fieldset >
< div class = "pure-control-group" >
{{ render_field(form.trigger_text, rows=5, placeholder="Some text to wait for in a line
/some.regex\d{2}/ for case-INsensitive regex
2022-01-09 13:36:07 +00:00
") }}
< span class = "pure-form-message-inline" >
< ul >
< li > Text to wait for before triggering a change/notification, all text and regex are tested < i > case-insensitive< / i > .< / li >
< li > Trigger text is processed from the result-text that comes out of any CSS/JSON Filters for this watch< / li >
2022-03-23 19:55:46 +00:00
< li > Each line is processed separately (think of each line as "OR")< / li >
2022-03-13 11:00:45 +00:00
< li > Note: Wrap in forward slash / to use regex example: < code > /foo\d/< / code > < / li >
2022-01-09 13:36:07 +00:00
< / ul >
< / span >
2021-08-16 11:13:17 +00:00
< / div >
< / fieldset >
2022-06-06 14:57:50 +00:00
< fieldset >
< div class = "pure-control-group" >
2022-06-15 20:56:43 +00:00
{{ render_field(form.text_should_not_be_present, rows=5, placeholder="For example: Out of stock
Sold out
Not in stock
Unavailable") }}
< span class = "pure-form-message-inline" >
< ul >
< li > Block change-detection while this text is on the page, all text and regex are tested < i > case-insensitive< / i > , good for waiting for when a product is available again< / li >
< li > Block text is processed from the result-text that comes out of any CSS/JSON Filters for this watch< / li >
< li > All lines here must not exist (think of each line as "OR")< / li >
< li > Note: Wrap in forward slash / to use regex example: < code > /foo\d/< / code > < / li >
< / ul >
< / span >
< / div >
< / fieldset >
< fieldset >
< div class = "pure-control-group" >
2022-06-06 16:26:47 +00:00
{{ render_field(form.extract_text, rows=5, placeholder="\d+ online") }}
2022-06-06 14:57:50 +00:00
< span class = "pure-form-message-inline" >
< ul >
2022-07-26 15:33:40 +00:00
< li > Extracts text in the final output (line by line) after other filters using regular expressions;
< ul >
< li > Regular expression ‐ example < code > /reports.+?2022/i< / code > < / li >
2023-03-12 16:05:34 +00:00
< li > Use < code > //(?aiLmsux))< / code > type flags (more < a href = "https://docs.python.org/3/library/re.html#index-15" > information here< / a > )< br > < / li >
2022-07-26 15:33:40 +00:00
< li > Keyword example ‐ example < code > Out of stock< / code > < / li >
< li > Use groups to extract just that text ‐ example < code > /reports.+?(\d+)/i< / code > returns a list of years only< / li >
< / ul >
< / li >
< li > One line per regular-expression/ string match< / li >
2022-06-06 14:57:50 +00:00
< / ul >
< / span >
< / div >
< / fieldset >
2021-06-21 06:21:05 +00:00
< / div >
2021-12-29 22:37:04 +00:00
2022-05-23 21:44:51 +00:00
< div class = "tab-pane-inner visual-selector-ui" id = "visualselector" >
2022-11-24 19:53:01 +00:00
< img class = "beta-logo" src = "{{url_for('static_content', group='images', filename='beta-logo.png')}}" >
2022-05-23 21:44:51 +00:00
< fieldset >
< div class = "pure-control-group" >
{% if visualselector_enabled %}
< span class = "pure-form-message-inline" >
2023-03-12 16:05:34 +00:00
The Visual Selector tool lets you select the < i > text< / i > elements that will be used for the change detection ‐ after the < i > Browser Steps< / i > has completed.< br > < br >
2022-05-23 21:44:51 +00:00
< / span >
2022-11-24 19:53:01 +00:00
< div id = "selector-header" >
< a id = "clear-selector" class = "pure-button button-secondary button-xsmall" style = "font-size: 70%" > Clear selection< / a >
< i class = "fetching-update-notice" style = "font-size: 80%;" > One moment, fetching screenshot and element information..< / i >
< / div >
< div id = "selector-wrapper" style = "display: none" >
<!-- request the screenshot and get the element offset info ready -->
<!-- use img src ready load to know everything is ready to map out -->
<!-- @todo: maybe something interesting like a field to select 'elements that contain text... and their parents n' -->
< img id = "selector-background" / >
< canvas id = "selector-canvas" > < / canvas >
< / div >
< div id = "selector-current-xpath" style = "overflow-x: hidden" > < strong > Currently:< / strong > < span class = "text" > Loading...< / span > < / div >
2022-05-23 21:44:51 +00:00
{% else %}
< span class = "pure-form-message-inline" >
< p > Sorry, this functionality only works with Playwright/Chrome enabled watches.< / p >
< p > Enable the Playwright Chrome fetcher, or alternatively try our < a href = "https://lemonade.changedetection.io/start" > very affordable subscription based service< / a > .< / p >
< p > This is because Selenium/WebDriver can not extract full page screenshots reliably.< / p >
< / span >
{% endif %}
< / div >
< / fieldset >
< / div >
2021-08-12 10:05:59 +00:00
< div id = "actions" >
< div class = "pure-control-group" >
2022-08-01 12:47:00 +00:00
{{ render_button(form.save_button) }}
2022-05-20 14:27:51 +00:00
< a href = "{{url_for('form_delete', uuid=uuid)}}"
2021-08-12 10:05:59 +00:00
class="pure-button button-small button-error ">Delete< / a >
2022-06-25 11:43:57 +00:00
< a href = "{{url_for('clear_watch_history', uuid=uuid)}}"
class="pure-button button-small button-error ">Clear History< / a >
2022-05-20 14:27:51 +00:00
< a href = "{{url_for('form_clone', uuid=uuid)}}"
2021-08-26 20:10:17 +00:00
class="pure-button button-small ">Create Copy< / a >
2021-08-12 10:05:59 +00:00
< / div >
2021-05-08 01:29:41 +00:00
< / div >
2021-08-12 10:05:59 +00:00
< / form >
< / div >
2021-01-29 09:49:05 +00:00
< / div >
{% endblock %}