mirror of
https://codeberg.org/rimu/pyfedi
synced 2025-01-23 11:26:56 -08:00
Low bandwidth mode
This commit is contained in:
parent
2e3cf467ba
commit
90d5d525ae
13 changed files with 64 additions and 26 deletions
|
@ -1,5 +1,5 @@
|
|||
from flask_wtf import FlaskForm, RecaptchaField
|
||||
from wtforms import StringField, PasswordField, SubmitField, HiddenField
|
||||
from wtforms import StringField, PasswordField, SubmitField, HiddenField, BooleanField
|
||||
from wtforms.validators import ValidationError, DataRequired, Email, EqualTo, Length
|
||||
from flask_babel import _, lazy_gettext as _l
|
||||
from app.models import User, Community
|
||||
|
@ -8,6 +8,7 @@ from app.models import User, Community
|
|||
class LoginForm(FlaskForm):
|
||||
user_name = StringField(_l('User name'), validators=[DataRequired()])
|
||||
password = PasswordField(_l('Password'), validators=[DataRequired()])
|
||||
low_bandwidth_mode = BooleanField(_l('Low bandwidth mode'))
|
||||
submit = SubmitField(_l('Log In'))
|
||||
|
||||
|
||||
|
|
|
@ -62,14 +62,21 @@ def login():
|
|||
next_page = request.args.get('next')
|
||||
if not next_page or url_parse(next_page).netloc != '':
|
||||
next_page = url_for('main.index')
|
||||
return redirect(next_page)
|
||||
response = make_response(redirect(next_page))
|
||||
if form.low_bandwidth_mode.data:
|
||||
response.set_cookie('low_bandwidth', '1', expires=datetime(year=2099, month=12, day=30))
|
||||
else:
|
||||
response.set_cookie('low_bandwidth', '0', expires=datetime(year=2099, month=12, day=30))
|
||||
return response
|
||||
return render_template('auth/login.html', title=_('Login'), form=form)
|
||||
|
||||
|
||||
@bp.route('/logout')
|
||||
def logout():
|
||||
logout_user()
|
||||
return redirect(url_for('main.index'))
|
||||
response = make_response(redirect(url_for('main.index')))
|
||||
response.set_cookie('low_bandwidth', '0', expires=datetime(year=2099, month=12, day=30))
|
||||
return response
|
||||
|
||||
|
||||
@bp.route('/register', methods=['GET', 'POST'])
|
||||
|
|
|
@ -139,7 +139,7 @@ def show_community(community: Community):
|
|||
is_moderator=is_moderator, is_owner=is_owner, is_admin=is_admin, mods=mod_list, posts=posts, description=description,
|
||||
og_image=og_image, POST_TYPE_IMAGE=POST_TYPE_IMAGE, POST_TYPE_LINK=POST_TYPE_LINK, SUBSCRIPTION_PENDING=SUBSCRIPTION_PENDING,
|
||||
SUBSCRIPTION_MEMBER=SUBSCRIPTION_MEMBER, etag=f"{community.id}_{hash(community.last_active)}",
|
||||
next_url=next_url, prev_url=prev_url,
|
||||
next_url=next_url, prev_url=prev_url, low_bandwidth=request.cookies.get('low_bandwidth', '0') == '1',
|
||||
rss_feed=f"https://{current_app.config['SERVER_NAME']}/community/{community.link()}/feed", rss_feed_name=f"{community.title} posts on PieFed")
|
||||
|
||||
|
||||
|
@ -423,7 +423,7 @@ def add_post(actor):
|
|||
form.notify_author.data = True
|
||||
|
||||
return render_template('community/add_post.html', title=_('Add post to community'), form=form, community=community,
|
||||
images_disabled=images_disabled, markdown_editor=True)
|
||||
images_disabled=images_disabled, markdown_editor=True, low_bandwidth=request.cookies.get('low_bandwidth', '0') == '1')
|
||||
|
||||
|
||||
@bp.route('/community/<int:community_id>/report', methods=['GET', 'POST'])
|
||||
|
|
|
@ -53,7 +53,7 @@ def index():
|
|||
active_communities = Community.query.filter_by(banned=False).order_by(desc(Community.last_active)).limit(5).all()
|
||||
|
||||
return render_template('index.html', posts=posts, active_communities=active_communities, show_post_community=True,
|
||||
POST_TYPE_IMAGE=POST_TYPE_IMAGE, POST_TYPE_LINK=POST_TYPE_LINK,
|
||||
POST_TYPE_IMAGE=POST_TYPE_IMAGE, POST_TYPE_LINK=POST_TYPE_LINK, low_bandwidth=request.cookies.get('low_bandwidth', '0') == '1',
|
||||
SUBSCRIPTION_PENDING=SUBSCRIPTION_PENDING, SUBSCRIPTION_MEMBER=SUBSCRIPTION_MEMBER,
|
||||
etag=f"home_{hash(str(g.site.last_active))}", next_url=next_url, prev_url=prev_url,
|
||||
rss_feed=f"https://{current_app.config['SERVER_NAME']}/feed", rss_feed_name=f"Posts on " + g.site.name,
|
||||
|
@ -93,7 +93,7 @@ def new_posts():
|
|||
SUBSCRIPTION_PENDING=SUBSCRIPTION_PENDING, SUBSCRIPTION_MEMBER=SUBSCRIPTION_MEMBER,
|
||||
etag=f"home_{hash(str(g.site.last_active))}", next_url=next_url, prev_url=prev_url,
|
||||
rss_feed=f"https://{current_app.config['SERVER_NAME']}/feed",
|
||||
rss_feed_name=f"Posts on " + g.site.name)
|
||||
rss_feed_name=f"Posts on " + g.site.name, low_bandwidth=request.cookies.get('low_bandwidth', '0') == '1')
|
||||
|
||||
|
||||
@bp.route('/top', methods=['HEAD', 'GET', 'POST'])
|
||||
|
@ -129,7 +129,7 @@ def top_posts():
|
|||
SUBSCRIPTION_PENDING=SUBSCRIPTION_PENDING, SUBSCRIPTION_MEMBER=SUBSCRIPTION_MEMBER,
|
||||
etag=f"home_{hash(str(g.site.last_active))}", next_url=next_url, prev_url=prev_url,
|
||||
rss_feed=f"https://{current_app.config['SERVER_NAME']}/feed",
|
||||
rss_feed_name=f"Posts on " + g.site.name)
|
||||
rss_feed_name=f"Posts on " + g.site.name, low_bandwidth=request.cookies.get('low_bandwidth', '0') == '1')
|
||||
|
||||
|
||||
@bp.route('/communities', methods=['GET'])
|
||||
|
@ -153,7 +153,8 @@ def list_communities():
|
|||
|
||||
return render_template('list_communities.html', communities=communities.order_by(sort_by).all(), search=search_param, title=_('Communities'),
|
||||
SUBSCRIPTION_PENDING=SUBSCRIPTION_PENDING, SUBSCRIPTION_MEMBER=SUBSCRIPTION_MEMBER,
|
||||
SUBSCRIPTION_OWNER=SUBSCRIPTION_OWNER, topics=topics, topic_id=topic_id, sort_by=sort_by)
|
||||
SUBSCRIPTION_OWNER=SUBSCRIPTION_OWNER, topics=topics, topic_id=topic_id, sort_by=sort_by,
|
||||
low_bandwidth=request.cookies.get('low_bandwidth', '0') == '1')
|
||||
|
||||
|
||||
@bp.route('/communities/local', methods=['GET'])
|
||||
|
@ -162,7 +163,8 @@ def list_local_communities():
|
|||
sort_by = text('community.' + request.args.get('sort_by') if request.args.get('sort_by') else 'community.post_reply_count desc')
|
||||
communities = Community.query.filter_by(ap_id=None, banned=False)
|
||||
return render_template('list_communities.html', communities=communities.order_by(sort_by).all(), title=_('Local communities'), sort_by=sort_by,
|
||||
SUBSCRIPTION_PENDING=SUBSCRIPTION_PENDING, SUBSCRIPTION_MEMBER=SUBSCRIPTION_MEMBER)
|
||||
SUBSCRIPTION_PENDING=SUBSCRIPTION_PENDING, SUBSCRIPTION_MEMBER=SUBSCRIPTION_MEMBER,
|
||||
low_bandwidth=request.cookies.get('low_bandwidth', '0') == '1')
|
||||
|
||||
|
||||
@bp.route('/communities/subscribed', methods=['GET'])
|
||||
|
@ -174,7 +176,8 @@ def list_subscribed_communities():
|
|||
else:
|
||||
communities = []
|
||||
return render_template('list_communities.html', communities=communities.order_by(sort_by).all(), title=_('Joined communities'),
|
||||
SUBSCRIPTION_PENDING=SUBSCRIPTION_PENDING, SUBSCRIPTION_MEMBER=SUBSCRIPTION_MEMBER, sort_by=sort_by)
|
||||
SUBSCRIPTION_PENDING=SUBSCRIPTION_PENDING, SUBSCRIPTION_MEMBER=SUBSCRIPTION_MEMBER, sort_by=sort_by,
|
||||
low_bandwidth=request.cookies.get('low_bandwidth', '0') == '1')
|
||||
|
||||
|
||||
@bp.route('/donate')
|
||||
|
|
|
@ -177,7 +177,8 @@ def show_post(post_id: int):
|
|||
canonical=post.ap_id, form=form, replies=replies, THREAD_CUTOFF_DEPTH=constants.THREAD_CUTOFF_DEPTH,
|
||||
description=description, og_image=og_image, POST_TYPE_IMAGE=constants.POST_TYPE_IMAGE,
|
||||
POST_TYPE_LINK=constants.POST_TYPE_LINK, POST_TYPE_ARTICLE=constants.POST_TYPE_ARTICLE,
|
||||
etag=f"{post.id}_{hash(post.last_active)}", markdown_editor=True)
|
||||
etag=f"{post.id}_{hash(post.last_active)}", markdown_editor=True,
|
||||
low_bandwidth=request.cookies.get('low_bandwidth', '0') == '1')
|
||||
|
||||
|
||||
@bp.route('/post/<int:post_id>/<vote_direction>', methods=['GET', 'POST'])
|
||||
|
|
|
@ -496,6 +496,11 @@ fieldset legend {
|
|||
height: auto;
|
||||
}
|
||||
|
||||
.form-check .form-check-input {
|
||||
position: relative;
|
||||
top: 4px;
|
||||
}
|
||||
|
||||
.post_reply_form label {
|
||||
display: none;
|
||||
}
|
||||
|
|
|
@ -127,6 +127,11 @@ nav, etc which are used site-wide */
|
|||
}
|
||||
}
|
||||
|
||||
.form-check .form-check-input {
|
||||
position: relative;
|
||||
top: 4px;
|
||||
}
|
||||
|
||||
.post_reply_form {
|
||||
label {
|
||||
display: none;
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
{% if user.deleted %}
|
||||
[deleted]
|
||||
{% else %}
|
||||
{% if user.avatar_id %}
|
||||
{% if user.avatar_id and not low_bandwidth %}
|
||||
<a href="/u/{{ user.link() }}" title="{{ user.ap_id if user.ap_id != none else user.user_name }}">
|
||||
<img src="{{ user.avatar_thumbnail() }}" alt="Avatar" /></a>
|
||||
{% endif %}
|
||||
|
@ -73,8 +73,7 @@
|
|||
{% block navbar %}
|
||||
<nav class="navbar navbar-expand-lg navbar-light bg-light fixed-top">
|
||||
<div class="container-lg">
|
||||
<a class="navbar-brand" href="/"><img src="/static/images/logo2.png" alt="Logo" width="50" height="50" />{{ g.site.name }}</a>
|
||||
|
||||
<a class="navbar-brand" href="/">{% if not low_bandwidth %}<img src="/static/images/logo2.png" alt="Logo" width="50" height="50" />{% endif %}{{ g.site.name }}</a>
|
||||
{% if current_user.is_authenticated %}
|
||||
<a class="nav-link d-lg-none" href="/notifications">
|
||||
{% if current_user.unread_notifications %}
|
||||
|
@ -138,7 +137,11 @@
|
|||
</div>
|
||||
<footer class="footer mt-auto">
|
||||
<p id="timeSpent" class="text-center mt-4" title="This is how long you have spent using PieFed during this month. We hope this use of your time aligns with your priorities and values."></p>
|
||||
<p class="text-center mt-4"><a href="https://liberapay.com/PieFed/donate"><img alt="Donate using Liberapay" src="https://liberapay.com/assets/widgets/donate.svg"></a></p>
|
||||
{% if not low_bandwidth %}
|
||||
<p class="text-center mt-4"><a href="https://liberapay.com/PieFed/donate"><img alt="Donate using Liberapay" src="https://liberapay.com/assets/widgets/donate.svg"></a></p>
|
||||
{% else %}
|
||||
<p class="text-center mt-4"><a href="https://liberapay.com/PieFed/donate">Donate with Liberapay</a></p>
|
||||
{% endif %}
|
||||
<p class="text-center"><a href="https://patreon.com/PieFed">Donate with Patreon</a></p>
|
||||
<p class="text-center"><a href="https://codeberg.org/rimu/pyfedi">PieFed is free and open source</a></p>
|
||||
<p class="text-center"><a href="/privacy">Privacy policy</a></p>
|
||||
|
@ -146,13 +149,17 @@
|
|||
{% endblock %}
|
||||
|
||||
{% block scripts %}
|
||||
{% if not low_bandwidth %}
|
||||
{{ str(moment.include_moment()).replace('<script>', '<script nonce="' + session['nonce'] + '">')|safe }}
|
||||
{{ str(moment.lang(g.locale)).replace('<script>', '<script nonce="' + session['nonce'] + '">')|safe }}
|
||||
{% endif %}
|
||||
{% endblock %}
|
||||
{{ bootstrap.load_js() }}
|
||||
{% if not low_bandwidth %}
|
||||
{{ bootstrap.load_js() }}
|
||||
{% endif %}
|
||||
<script type="text/javascript" src="{{ url_for('static', filename='js/htmx.min.js') }}"></script>
|
||||
<script type="text/javascript" src="{{ url_for('static', filename='js/scripts.js', changed=getmtime('js/scripts.js')) }}"></script>
|
||||
{% if markdown_editor %}
|
||||
{% if markdown_editor and not low_bandwidth %}
|
||||
<script type="text/javascript" src="{{ url_for('static', filename='js/markdown/downarea.js') }}"></script>
|
||||
{% endif %}
|
||||
{% block end_scripts %}
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
{% block app_content %}
|
||||
<div class="row">
|
||||
<div class="col-12 col-md-8 position-relative main_pane">
|
||||
{% if community.header_image() != '' %}
|
||||
{% if community.header_image() != '' and not low_bandwidth %}
|
||||
<div class="community_header" style="background-image: url({{ community.header_image() }});">
|
||||
<nav aria-label="breadcrumb" id="breadcrumb_nav" title="Navigation">
|
||||
<ol class="breadcrumb">
|
||||
|
@ -20,7 +20,7 @@
|
|||
{% include 'community/_notification_toggle.html' %}
|
||||
{% endif %}
|
||||
</h1>
|
||||
{% elif community.icon_id %}
|
||||
{% elif community.icon_id and not low_bandwidth %}
|
||||
<div class="row">
|
||||
<nav aria-label="breadcrumb" id="breadcrumb_nav" title="Navigation">
|
||||
<ol class="breadcrumb">
|
||||
|
|
|
@ -45,7 +45,7 @@
|
|||
<thead>
|
||||
<tr>
|
||||
<th scope="col"> </th>
|
||||
<th scope="col" colspan="2">
|
||||
<th scope="col" {% if not low_bandwidth %}colspan="2"{% endif %}>
|
||||
<a href="?sort_by=title{{ ' desc' if sort_by.text == 'community.title' }}" title="{{ _('Sort by name') }}" class="no-underline" rel="nofollow">{{ _('Community') }}
|
||||
<span class="{{ 'fe fe-chevron-up' if sort_by.text == 'community.title' }}{{ 'fe fe-chevron-down' if sort_by.text == 'community.title desc' }}"></span>
|
||||
</a>
|
||||
|
@ -81,7 +81,11 @@
|
|||
{% else %}
|
||||
<a class="btn btn-primary btn-sm" href="/community/{{ community.link() }}/subscribe">{{ _('Join') }}</a>
|
||||
{% endif %}</td>
|
||||
<td width="46"><a href="/c/{{ community.link() }}"><img src="{{ community.icon_image('tiny') }}" class="community_icon rounded-circle" loading="lazy" /></a></td>
|
||||
{% if not low_bandwidth %}
|
||||
<td width="46">
|
||||
<a href="/c/{{ community.link() }}"><img src="{{ community.icon_image('tiny') }}" class="community_icon rounded-circle" loading="lazy" /></a>
|
||||
</td>
|
||||
{% endif %}
|
||||
<td scope="row" class="pl-0"><a href="/c/{{ community.link() }}">{{ community.display_name() }}</a></td>
|
||||
<td>{{ community.post_count }}</td>
|
||||
<td>{{ community.post_reply_count }}</td>
|
||||
|
|
|
@ -25,8 +25,13 @@
|
|||
</small></p>
|
||||
<div class="post_image">
|
||||
{% if post.image_id %}
|
||||
<a href="{{ post.image.view_url() }}" rel="nofollow ugc"><img src="{{ post.image.view_url() }}" alt="{{ post.image.alt_text }}"
|
||||
width="{{ post.image.width }}" height="{{ post.image.height }}" /></a>
|
||||
{% if low_bandwidth %}
|
||||
<a href="{{ post.image.view_url() }}" rel="nofollow ugc"><img src="{{ post.image.thumbnail_url() }}" alt="{{ post.image.alt_text }}"
|
||||
width="{{ post.image.width }}" height="{{ post.image.height }}" /></a>
|
||||
{% else %}
|
||||
<a href="{{ post.image.view_url() }}" rel="nofollow ugc"><img src="{{ post.image.view_url() }}" alt="{{ post.image.alt_text }}"
|
||||
width="{{ post.image.width }}" height="{{ post.image.height }}" /></a>
|
||||
{% endif %}
|
||||
{% else %}
|
||||
<a href="{{ post.url }}" rel="nofollow ugc" target="_blank"><img src="{{ post.url }}" style="max-width: 100%; height: auto;" /></a>
|
||||
{% endif %}
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
<div class="voting_buttons">
|
||||
{% include "post/_post_voting_buttons.html" %}
|
||||
</div>
|
||||
{% if post.image_id %}
|
||||
{% if post.image_id and not low_bandwidth %}
|
||||
<div class="thumbnail">
|
||||
{% if post.type == POST_TYPE_LINK %}
|
||||
<a href="{{ post.url }}" rel="nofollow ugc" target="_blank"><img src="{{ post.image.thumbnail_url() }}"
|
||||
|
|
|
@ -77,7 +77,7 @@
|
|||
{% if comment['comment'].author.deleted %}
|
||||
<strong>[deleted]</strong>
|
||||
{% else %}
|
||||
{% if comment['comment'].author.avatar_id and comment['comment'].score > -10 %}
|
||||
{% if comment['comment'].author.avatar_id and comment['comment'].score > -10 and not low_bandwidth %}
|
||||
<a href="/u/{{ comment['comment'].author.link() }}" title="{{ comment['comment'].author.ap_id }}">
|
||||
<img src="{{ comment['comment'].author.avatar_image() }}" alt="Avatar" /></a>
|
||||
{% endif %}
|
||||
|
|
Loading…
Reference in a new issue