133 lines
8.2 KiB
HTML
133 lines
8.2 KiB
HTML
{% extends 'base.html' %}
|
|
{% block content %}
|
|
{% from '_helpers.html' import render_simple_field, render_field, render_nolabel_field, sort_by_title %}
|
|
{% from '_macro.html' import render_watchlist_watch_as_tablerow %}
|
|
<script src="{{url_for('static_content', group='js', filename='jquery-3.6.0.min.js')}}"></script>
|
|
<script src="{{url_for('static_content', group='js', filename='watch-overview.js')}}" defer></script>
|
|
<script>let nowtimeserver={{ now_time_server }};</script>
|
|
|
|
<style>
|
|
.checking-now .last-checked {
|
|
background-image: linear-gradient(to bottom, transparent 0%, rgba(0,0,0,0.05) 40%, rgba(0,0,0,0.1) 100%);
|
|
background-size: 0 100%;
|
|
background-repeat: no-repeat;
|
|
transition: background-size 0.9s ease
|
|
}
|
|
</style>
|
|
<div class="box">
|
|
|
|
<form class="pure-form" action="{{ url_for('ui.ui_views.form_quick_watch_add', tag=active_tag_uuid) }}" method="POST" id="new-watch-form">
|
|
<input type="hidden" name="csrf_token" value="{{ csrf_token() }}" >
|
|
<fieldset>
|
|
<legend>Add a new change detection watch</legend>
|
|
<div id="watch-add-wrapper-zone">
|
|
|
|
{{ render_nolabel_field(form.url, placeholder="https://...", required=true) }}
|
|
{{ render_nolabel_field(form.tags, value=active_tag.title if active_tag_uuid else '', placeholder="watch label / tag") }}
|
|
{{ render_nolabel_field(form.watch_submit_button, title="Watch this URL!" ) }}
|
|
{{ render_nolabel_field(form.edit_and_watch_submit_button, title="Edit first then Watch") }}
|
|
</div>
|
|
<div id="quick-watch-processor-type">
|
|
{{ render_simple_field(form.processor) }}
|
|
</div>
|
|
|
|
</fieldset>
|
|
<span style="color:#eee; font-size: 80%;"><img alt="Create a shareable link" style="height: 1em;display:inline-block;" src="{{url_for('static_content', group='images', filename='spread-white.svg')}}" > Tip: You can also add 'shared' watches. <a href="https://github.com/dgtlmoon/changedetection.io/wiki/Sharing-a-Watch">More info</a></span>
|
|
</form>
|
|
|
|
<form class="pure-form" action="{{ url_for('ui.form_watch_list_checkbox_operations') }}" method="POST" id="watch-list-form">
|
|
<input type="hidden" name="csrf_token" value="{{ csrf_token() }}" >
|
|
<input type="hidden" id="op_extradata" name="op_extradata" value="" >
|
|
<div id="checkbox-operations">
|
|
<button class="pure-button button-secondary button-xsmall" name="op" value="pause">Pause</button>
|
|
<button class="pure-button button-secondary button-xsmall" name="op" value="unpause">UnPause</button>
|
|
<button class="pure-button button-secondary button-xsmall" name="op" value="mute">Mute</button>
|
|
<button class="pure-button button-secondary button-xsmall" name="op" value="unmute">UnMute</button>
|
|
<button class="pure-button button-secondary button-xsmall" name="op" value="recheck">Recheck</button>
|
|
<button class="pure-button button-secondary button-xsmall" name="op" value="assign-tag" id="checkbox-assign-tag">Tag</button>
|
|
<button class="pure-button button-secondary button-xsmall" name="op" value="mark-viewed">Mark viewed</button>
|
|
<button class="pure-button button-secondary button-xsmall" name="op" value="notification-default">Use default notification</button>
|
|
<button class="pure-button button-secondary button-xsmall" name="op" value="clear-errors">Clear errors</button>
|
|
<button class="pure-button button-secondary button-xsmall" style="background: #dd4242;" name="op" value="clear-history">Clear/reset history</button>
|
|
<button class="pure-button button-secondary button-xsmall" style="background: #dd4242;" name="op" value="delete">Delete</button>
|
|
</div>
|
|
{% if watches|length >= pagination.per_page %}
|
|
{{ pagination.info }}
|
|
{% endif %}
|
|
{% if search_q %}<div id="search-result-info">Searching "<strong><i>{{search_q}}</i></strong>"</div>{% endif %}
|
|
<div>
|
|
<a href="{{url_for('watchlist.index')}}" class="pure-button button-tag {{'active' if not active_tag_uuid }}">All</a>
|
|
|
|
<!-- tag list -->
|
|
{% for uuid, tag in tags %}
|
|
{% if tag != "" %}
|
|
<a href="{{url_for('watchlist.index', tag=uuid) }}" class="pure-button button-tag {{'active' if active_tag_uuid == uuid }}">{{ tag.title }}</a>
|
|
{% endif %}
|
|
{% endfor %}
|
|
</div>
|
|
|
|
{% set sort_order = sort_order or 'asc' %}
|
|
{% set sort_attribute = sort_attribute or 'last_changed' %}
|
|
{% set pagination_page = request.args.get('page', 0) %}
|
|
{% set cols_required = 6 %}
|
|
{% set any_has_restock_price_processor = datastore.any_watches_have_processor_by_name("restock_diff") %}
|
|
{% if any_has_restock_price_processor %}
|
|
{% set cols_required = cols_required + 1 %}
|
|
{% endif %}
|
|
|
|
<div id="watch-table-wrapper">
|
|
|
|
<table class="pure-table pure-table-striped watch-table">
|
|
<thead>
|
|
<tr>
|
|
{% set link_order = "desc" if sort_order == 'asc' else "asc" %}
|
|
{% set arrow_span = "" %}
|
|
<th><input style="vertical-align: middle" type="checkbox" id="check-all" > <a class="{{ 'active '+link_order if sort_attribute == 'date_created' else 'inactive' }}" href="{{url_for('watchlist.index', sort='date_created', order=link_order, tag=active_tag_uuid)}}"># <span class='arrow {{link_order}}'></span></a></th>
|
|
<th class="empty-cell"></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)}}">Website <span class='arrow {{link_order}}'></span></a></th>
|
|
{% if any_has_restock_price_processor %}
|
|
<th>Restock & Price</th>
|
|
{% endif %}
|
|
<th><a class="{{ 'active '+link_order if sort_attribute == 'last_checked' else 'inactive' }}" href="{{url_for('watchlist.index', sort='last_checked', order=link_order, tag=active_tag_uuid)}}"><span class="hide-on-mobile">Last</span> Checked <span class='arrow {{link_order}}'></span></a></th>
|
|
<th><a class="{{ 'active '+link_order if sort_attribute == 'last_changed' else 'inactive' }}" href="{{url_for('watchlist.index', sort='last_changed', order=link_order, tag=active_tag_uuid)}}"><span class="hide-on-mobile">Last</span> Changed <span class='arrow {{link_order}}'></span></a></th>
|
|
<th class="empty-cell"></th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
{% if not watches|length %}
|
|
<tr>
|
|
<td colspan="{{ cols_required }}" style="text-wrap: wrap;">No website watches configured, please add a URL in the box above, or <a href="{{ url_for('imports.import_page')}}" >import a list</a>.</td>
|
|
</tr>
|
|
{% endif %}
|
|
{% for watch in (watches|sort(attribute=sort_attribute, reverse=sort_order == 'asc'))|pagination_slice(skip=pagination.skip) %}
|
|
|
|
{{ render_watchlist_watch_as_tablerow(pagination, loop, datastore, watch) }}
|
|
</tr>
|
|
{% endfor %}
|
|
</tbody>
|
|
</table>
|
|
<ul id="post-list-buttons">
|
|
{% if errored_count %}
|
|
<li>
|
|
<a href="{{url_for('watchlist.index', with_errors=1, tag=request.args.get('tag')) }}" class="pure-button button-tag button-error ">With errors ({{ errored_count }})</a>
|
|
</li>
|
|
{% endif %}
|
|
{% if has_unviewed %}
|
|
<li>
|
|
<a href="{{url_for('ui.mark_all_viewed',with_errors=request.args.get('with_errors',0)) }}" class="pure-button button-tag ">Mark all viewed</a>
|
|
</li>
|
|
{% endif %}
|
|
<li>
|
|
<a href="{{ url_for('ui.form_watch_checknow', tag=active_tag_uuid, with_errors=request.args.get('with_errors',0)) }}" class="pure-button button-tag ">Recheck
|
|
all {% if active_tag_uuid %} in "{{active_tag.title}}"{%endif%}</a>
|
|
</li>
|
|
<li>
|
|
<a href="{{ url_for('rss.feed', tag=active_tag_uuid, token=app_rss_token)}}"><img alt="RSS Feed" id="feed-icon" src="{{url_for('static_content', group='images', filename='generic_feed-icon.svg')}}" height="15"></a>
|
|
</li>
|
|
</ul>
|
|
{{ pagination.links }}
|
|
</div>
|
|
</form>
|
|
</div>
|
|
{% endblock %}
|