kopia lustrzana https://github.com/dgtlmoon/changedetection.io
				
				
				
			
		
			
				
	
	
		
			156 wiersze
		
	
	
		
			11 KiB
		
	
	
	
		
			HTML
		
	
	
			
		
		
	
	
			156 wiersze
		
	
	
		
			11 KiB
		
	
	
	
		
			HTML
		
	
	
| {% extends 'base.html' %}
 | |
| {% block content %}
 | |
| {% from '_helpers.jinja' import render_simple_field, render_field %}
 | |
| {% from '_pagination.jinja' import pagination %}
 | |
| <script type="text/javascript" src="{{url_for('static_content', group='js', filename='jquery-3.6.0.min.js')}}"></script>
 | |
| <script type="text/javascript" src="{{url_for('static_content', group='js', filename='watch-overview.js')}}" defer></script>
 | |
| 
 | |
| <div class="box">
 | |
| 
 | |
|     <form class="pure-form" action="{{ url_for('form_quick_watch_add') }}" 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">
 | |
|                 <div>
 | |
|                     {{ render_simple_field(form.url, placeholder="https://...", required=true) }}
 | |
|                     {{ render_simple_field(form.tag, value=active_tag if active_tag else '', placeholder="watch label / tag") }}
 | |
|                 </div>
 | |
|                 <div>
 | |
|                     {{ render_simple_field(form.watch_submit_button, title="Watch this URL!" ) }}
 | |
|                     {{ render_simple_field(form.edit_and_watch_submit_button, title="Edit first then Watch") }}
 | |
|                 </div>
 | |
|             </div>
 | |
|         </fieldset>
 | |
|         <span style="color:#eee; font-size: 80%;"><img 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></a></span>
 | |
|     </form>
 | |
| 
 | |
|     <form class="pure-form" action="{{ url_for('form_watch_list_checkbox_operations') }}" method="POST" id="watch-list-form">
 | |
|     <input type="hidden" name="csrf_token" value="{{ csrf_token() }}"/>
 | |
|     <div id="checkbox-operations">
 | |
|         <button class="pure-button button-secondary button-xsmall" style="font-size: 70%"  name="op" value="pause">Pause</button>
 | |
|         <button class="pure-button button-secondary button-xsmall" style="font-size: 70%"  name="op" value="unpause">UnPause</button>
 | |
|         <button class="pure-button button-secondary button-xsmall" style="font-size: 70%"  name="op" value="mute">Mute</button>
 | |
|         <button class="pure-button button-secondary button-xsmall" style="font-size: 70%"  name="op" value="unmute">UnMute</button>
 | |
|         <button class="pure-button button-secondary button-xsmall" style="font-size: 70%" name="op" value="notification-default">Use default notification</button>
 | |
|         <button class="pure-button button-secondary button-xsmall" style="background: #dd4242; font-size: 70%" name="op" value="delete">Delete</button>
 | |
|     </div>
 | |
|     <div>
 | |
|         <a href="{{url_for('index')}}" class="pure-button button-tag {{'active' if not active_tag }}">All</a>
 | |
|         {% for tag in tags %}
 | |
|             {% if tag != "" %}
 | |
|                 <a href="{{url_for('index', tag=tag) }}" class="pure-button button-tag {{'active' if active_tag == tag }}">{{ tag }}</a>
 | |
|             {% endif %}
 | |
|         {% endfor %}
 | |
|     </div>
 | |
| 
 | |
|     {% set sort_order = request.args.get('order', 'asc') == 'asc' %}
 | |
|     {% set sort_attribute = request.args.get('sort', 'last_changed')   %}
 | |
|     {% set pagination_page = request.args.get('page', 0) %}
 | |
| 
 | |
|     <div id="watch-table-wrapper">
 | |
|         <table class="pure-table pure-table-striped watch-table">
 | |
|             <thead>
 | |
|             <tr>
 | |
|                 <th><input style="vertical-align: middle" type="checkbox" id="check-all"/> #</th>
 | |
|                 <th></th>
 | |
|                 {% set link_order = "desc" if sort_order else "asc" %}
 | |
|                 {% set arrow_span = "" %}
 | |
|                 <th><a class="{{ 'active '+link_order if sort_attribute == 'label' else 'inactive' }}" href="{{url_for('index', sort='label', order=link_order)}}">Website <span class='arrow {{link_order}}'></span></a></th>
 | |
|                 <th><a class="{{ 'active '+link_order if sort_attribute == 'last_checked' else 'inactive' }}" href="{{url_for('index', sort='last_checked', order=link_order)}}">Last 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('index', sort='last_changed', order=link_order)}}">Last Changed <span class='arrow {{link_order}}'></span></a></th>
 | |
|                 <th></th>
 | |
|             </tr>
 | |
|             </thead>
 | |
|             <tbody>
 | |
| 
 | |
|             {% set sorted_watches = watches|sort(attribute=sort_attribute, reverse=sort_order) %}
 | |
|             {% for watch in sorted_watches %}
 | |
| 
 | |
|             {# WIP for pagination, disabled for now
 | |
|               {% if not ( loop.index >= 3 and loop.index <=4) %}{% continue %}{% endif %} -->
 | |
|              #}
 | |
|             <tr id="{{ watch.uuid }}"
 | |
|                 class="{{ loop.cycle('pure-table-odd', 'pure-table-even') }}
 | |
|                 {% if watch.last_error is defined and watch.last_error != False %}error{% endif %}
 | |
|                 {% if watch.last_notification_error is defined and watch.last_notification_error != False %}error{% endif %}
 | |
|                 {% if watch.paused is defined and watch.paused != False %}paused{% endif %}
 | |
|                 {% if watch.newest_history_key| int > watch.last_viewed and watch.history_n>=2 %}unviewed{% endif %}
 | |
|                 {% if watch.uuid in queued_uuids %}queued{% endif %}">
 | |
|                 <td class="inline checkbox-uuid" ><input name="uuids"  type="checkbox" value="{{ watch.uuid}} "/> <span>{{ loop.index }}</span></td>
 | |
|                 <td class="inline watch-controls">
 | |
|                     {% if not watch.paused %}
 | |
|                     <a class="state-off" href="{{url_for('index', op='pause', uuid=watch.uuid, tag=active_tag)}}"><img src="{{url_for('static_content', group='images', filename='pause.svg')}}" alt="Pause checks" title="Pause checks" class="icon icon-pause"/></a>
 | |
|                     {% else %}
 | |
|                     <a class="state-on" href="{{url_for('index', op='pause', uuid=watch.uuid, tag=active_tag)}}"><img src="{{url_for('static_content', group='images', filename='play.svg')}}" alt="UnPause checks" title="UnPause checks" class="icon icon-unpause"/></a>
 | |
|                     {% endif %}
 | |
|                     <a class="link-mute state-{{'on' if watch.notification_muted else 'off'}}" href="{{url_for('index', op='mute', uuid=watch.uuid, tag=active_tag)}}"><img src="{{url_for('static_content', group='images', filename='bell-off.svg')}}" alt="Mute notifications" title="Mute notifications" class="icon icon-mute"/></a>
 | |
|                 </td>
 | |
|                 <td class="title-col inline">{{watch.title if watch.title is not none and watch.title|length > 0 else watch.url}}
 | |
|                     <a class="external" target="_blank" rel="noopener" href="{{ watch.link.replace('source:','') }}"></a>
 | |
|                     <a class="link-spread" href="{{url_for('form_share_put_watch', uuid=watch.uuid)}}"><img style="height: 1em;display:inline-block;" src="{{url_for('static_content', group='images', filename='spread.svg')}}" class="icon icon-spread" title="Create a link to share watch config with others" /></a>
 | |
| 
 | |
|                     {%if watch.fetch_backend == "html_webdriver" %}<img style="height: 1em; display:inline-block;" src="{{url_for('static_content', group='images', filename='Google-Chrome-icon.png')}}" title="Using a chrome browser" />{% endif %}
 | |
| 
 | |
|                     {% if watch.last_error is defined and watch.last_error != False %}
 | |
|                     <div class="fetch-error">{{ watch.last_error }}</div>
 | |
|                     {% endif %}
 | |
|                     {% if watch.last_notification_error is defined and watch.last_notification_error != False %}
 | |
|                     <div class="fetch-error notification-error"><a href="{{url_for('notification_logs')}}">{{ watch.last_notification_error }}</a></div>
 | |
|                     {% endif %}
 | |
|                     {% if watch['has_ldjson_price_data'] and not watch['track_ldjson_price_data']  %}
 | |
|                     <div class="ldjson-price-track-offer">Embedded price data detected, follow only price data? <a href="{{url_for('price_data_follower.accept', uuid=watch.uuid)}}" class="pure-button button-xsmall">Yes</a> <a href="{{url_for('price_data_follower.reject', uuid=watch.uuid)}}" class="">No</a></div>
 | |
|                     {% endif %}
 | |
|                     {% if watch['track_ldjson_price_data'] == 'accepted' %}
 | |
|                     <span class="tracking-ldjson-price-data" title="Automatically following embedded price information"><img src="{{url_for('static_content', group='images', filename='price-tag-icon.svg')}}"  class="price-follow-tag-icon"/> Price</span>
 | |
|                     {% endif %}
 | |
|                     {% if not active_tag %}
 | |
|                     <span class="watch-tag-list">{{ watch.tag}}</span>
 | |
|                     {% endif %}
 | |
|                 </td>
 | |
|                 <td class="last-checked">{{watch|format_last_checked_time|safe}}</td>
 | |
|                 <td class="last-changed">{% if watch.history_n >=2 and watch.last_changed >0 %}
 | |
|                     {{watch.last_changed|format_timestamp_timeago}}
 | |
|                     {% else %}
 | |
|                     Not yet
 | |
|                     {% endif %}
 | |
|                 </td>
 | |
|                 <td>
 | |
|                     <a {% if watch.uuid in queued_uuids %}disabled="true"{% endif %} href="{{ url_for('form_watch_checknow', uuid=watch.uuid, tag=request.args.get('tag')) }}"
 | |
|                        class="recheck pure-button pure-button-primary">{% if watch.uuid in queued_uuids %}Queued{% else %}Recheck{% endif %}</a>
 | |
|                     <a href="{{ url_for('edit_page', uuid=watch.uuid)}}" class="pure-button pure-button-primary">Edit</a>
 | |
|                     {% if watch.history_n >= 2 %}
 | |
|                     <a href="{{ url_for('diff_history_page', uuid=watch.uuid) }}" target="{{watch.uuid}}" class="pure-button pure-button-primary diff-link">Diff</a>
 | |
|                     {% else %}
 | |
|                         {% if watch.history_n == 1 or (watch.history_n ==0 and watch.error_text_ctime )%}
 | |
|                             <a href="{{ url_for('preview_page', uuid=watch.uuid)}}" target="{{watch.uuid}}" class="pure-button pure-button-primary">Preview</a>
 | |
|                         {% endif %}
 | |
|                     {% endif %}
 | |
|                 </td>
 | |
|             </tr>
 | |
|             {% endfor %}
 | |
|             </tbody>
 | |
|         </table>
 | |
|         <ul id="post-list-buttons">
 | |
|             {% if has_unviewed %}
 | |
|             <li>
 | |
|                 <a href="{{url_for('mark_all_viewed', tag=request.args.get('tag')) }}" class="pure-button button-tag ">Mark all viewed</a>
 | |
|             </li>
 | |
|             {% endif %}
 | |
|             <li>
 | |
|                <a href="{{ url_for('form_watch_checknow', tag=active_tag) }}" class="pure-button button-tag ">Recheck
 | |
|                 all {% if active_tag%}in "{{active_tag}}"{%endif%}</a>
 | |
|             </li>
 | |
|             <li>
 | |
|                 <a href="{{ url_for('rss', tag=active_tag , 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>
 | |
|         {# WIP for pagination, disabled for now
 | |
|          {{ pagination(sorted_watches,3, pagination_page) }}
 | |
|          #}
 | |
| 
 | |
|     </div>
 | |
|     </form>
 | |
| </div>
 | |
| {% endblock %}
 |