~cedric/newspipe

9dd9391b5ab23f2a06200b2870337fcf9f631ad4 — Cédric Bonhomme 1 year, 4 months ago 5bd6dd9 v9.1.0
Preparing new 9.1.0 release.
M CHANGELOG.md => CHANGELOG.md +9 -0
@@ 1,6 1,15 @@
Newspipe Changelog
==================

## 9.1.0 (2020-03-12)

    Improvements:
     * the Web graphical interface is now using Bootstrap 4;
     * a lot of responsiveness work has been done;
     * the back-end code has been refactored and cleaned;
     * the configuration and deployment of Newspipe is now a lot easier.


## 9.0 (2020-02-27)

    New:

M README.md => README.md +3 -0
@@ 60,6 60,9 @@ $ vim instance/postgresql.py # customize it
$ export Newspipe_CONFIG=postgresql.py
```

For production you can use [Gunicorn](https://gunicorn.org) or ``mod_wsgi``.


## License

[Newspipe](https://git.sr.ht/~cedric/newspipe) is under the

M newspipe/templates/edit_bookmark.html => newspipe/templates/edit_bookmark.html +48 -45
@@ 1,67 1,70 @@
{% extends "layout.html" %}
{% block content %}
<div class="container">
    <div class="well">
        <h3>{{ action }}</h3>
        <form action="" method="post" name="save" class="form-horizontal">
            {{ form.hidden_tag() }}
            <div class="form-group">
                <label for="{{ form.href.id }}" class="col-sm-3 control-label">{{ form.href.label }}</label>
                <div class="col-sm-9">
                    {{ form.href(class_="form-control", size="100%") }}
    <div class="row">
        <div class="col">
            <h3>{{ action }}</h3>
            <form action="" method="post" name="save" class="form-horizontal">
                {{ form.hidden_tag() }}
                <div class="form-group">
                    <label for="{{ form.href.id }}" class="col-sm-3 control-label">{{ form.href.label }}</label>
                    <div class="col-sm-9">
                        {{ form.href(class_="form-control", size="100%") }}
                    </div>
                    {% for error in form.href.errors %} <span style="color: red;">{{ error }}<br /></span>{% endfor %}
                </div>
                {% for error in form.href.errors %} <span style="color: red;">{{ error }}<br /></span>{% endfor %}
            </div>

            <div class="form-group">
                <label for="{{ form.title.id }}" class="col-sm-3 control-label">{{ form.title.label }}</label>
                <div class="col-sm-9">
                    {{ form.title(class_="form-control", size="100%") }}
                <div class="form-group">
                    <label for="{{ form.title.id }}" class="col-sm-3 control-label">{{ form.title.label }}</label>
                    <div class="col-sm-9">
                        {{ form.title(class_="form-control", size="100%") }}
                    </div>
                    {% for error in form.title.errors %} <span style="color: red;">{{ error }}<br /></span>{% endfor %}
                </div>
                {% for error in form.title.errors %} <span style="color: red;">{{ error }}<br /></span>{% endfor %}
            </div>

            <div class="form-group">
                <label for="{{ form.description.id }}" class="col-sm-3 control-label">{{ form.description.label }}</label>
                <div class="col-sm-9">
                    {{ form.description(class_="form-control", size="100%") }}
                <div class="form-group">
                    <label for="{{ form.description.id }}" class="col-sm-3 control-label">{{ form.description.label }}</label>
                    <div class="col-sm-9">
                        {{ form.description(class_="form-control", size="100%") }}
                    </div>
                    {% for error in form.description.errors %} <span style="color: red;">{{ error }}<br /></span>{% endfor %}
                </div>
                {% for error in form.description.errors %} <span style="color: red;">{{ error }}<br /></span>{% endfor %}
            </div>

            <div class="form-group">
                <label for="{{ form.tags.id }}" class="col-sm-3 control-label">{{ form.tags.label }}</label>
                <div class="col-sm-9">
                    {{ form.tags(class_="form-control", size="100%") }}
                <div class="form-group">
                    <label for="{{ form.tags.id }}" class="col-sm-3 control-label">{{ form.tags.label }}</label>
                    <div class="col-sm-9">
                        {{ form.tags(class_="form-control", size="100%") }}
                    </div>
                    {% for error in form.tags.errors %} <span style="color: red;">{{ error }}<br /></span>{% endfor %}
                </div>
                {% for error in form.tags.errors %} <span style="color: red;">{{ error }}<br /></span>{% endfor %}
            </div>

            <div class="form-group">
                <label for="{{ form.shared.id }}" class="col-sm-3 control-label">{{ form.shared.label }}</label>
                <div class="col-sm-9">
                    <div class="checkbox">
                        {{ form.shared(class_="checkbox",  style="margin-left: 0px;") }}
                <div class="form-group">
                    <label for="{{ form.shared.id }}" class="col-sm-3 control-label">{{ form.shared.label }}</label>
                    <div class="col-sm-9">
                        <div class="checkbox">
                            {{ form.shared(class_="checkbox",  style="margin-left: 0px;") }}
                        </div>
                    </div>
                </div>
            </div>

            <div class="form-group">
                <label for="{{ form.to_read.id }}" class="col-sm-3 control-label">{{ form.to_read.label }}</label>
                <div class="col-sm-9">
                    <div class="checkbox">
                        {{ form.to_read(class_="checkbox",  style="margin-left: 0px;") }}
                <div class="form-group">
                    <label for="{{ form.to_read.id }}" class="col-sm-3 control-label">{{ form.to_read.label }}</label>
                    <div class="col-sm-9">
                        <div class="checkbox">
                            {{ form.to_read(class_="checkbox",  style="margin-left: 0px;") }}
                        </div>
                    </div>
                </div>
            </div>

            <div class="form-group">
                <div class="col-sm-offset-3 col-sm-9">
                    {{ form.submit(class_="btn btn-primary") }}
                <div class="form-group">
                    <div class="col-sm-offset-3 col-sm-9">
                        {{ form.submit(class_="btn btn-primary") }}
                    </div>
                </div>
            </div>
        </form>
            </form>
        </div>
    </div>

    {% if action == _('Add a new bookmark') %}
        <div class="row">
            <div class="col-md-6 pull-right">

M newspipe/templates/layout.html => newspipe/templates/layout.html +2 -2
@@ 40,7 40,7 @@
                    <li class="nav-item dropdown">
                        <a class="nav-link dropdown-toggle" href="#" id="navbarDropdownRSS" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"><i class="fa fa-rss" aria-hidden="true"></i>&nbsp;{{ _('Feeds') }}</a>
                        <div class="dropdown-menu dropdown-menu-right" aria-labelledby="navbarDropdownRSS">
                              <a class="dropdown-item" href="{{ url_for('feeds.feeds') }}">{{ _('Subscribed') }}</a>
                              <a class="dropdown-item" href="{{ url_for('feeds.feeds') }}">{{ _('Feeds') }}</a>
                              <a class="dropdown-item" href="{{ url_for('feeds.inactives') }}">{{ _('Inactive') }}</a>
                              <a class="dropdown-item" href="{{ url_for('popular') }}">{{ _('Popular') }}</a>
                              <a class="dropdown-item" href="{{ url_for('articles.history') }}">{{ _('History') }}</a>


@@ 141,7 141,7 @@
        {% with messages = get_flashed_messages(with_categories=true) %}
            {% if messages %}
                <div class="row justify-content-center">
                    <div class="col-6">
                    <div class="col-md-6">
                        {% for category, message in messages %}
                            <div class="alert alert-{{category}}">
                                <button type="button" class="close" data-dismiss="alert">&times;</button>

M newspipe/templates/login.html => newspipe/templates/login.html +1 -1
@@ 2,7 2,7 @@
{% block content %}
<div class="container">
    <div class="row justify-content-center">
        <div class="col-4">
        <div class="col-md-6">
            <h2>{{ _('Log In') }}</h2>
            <form action="{{ url_for('login') }}" method=post>
                {{ form.hidden_tag() }}

M newspipe/templates/management.html => newspipe/templates/management.html +2 -2
@@ 48,7 48,7 @@
                    <a href="{{ url_for('articles.export') }}" class="btn btn-primary">{{ _('Export') }}</a>
                </div>
            </div>
            <br />
            <hr />
            <div class="row">
                <div class="col">
                    <h3 id="import">{{ _('Feeds') }}</h3>


@@ 85,7 85,7 @@
                    </form>
                </div>
            </div>

            <hr />
            <div class="row">
                <div class="col-md-12">
                    <br />

M newspipe/templates/user_stream.html => newspipe/templates/user_stream.html +11 -11
@@ 2,17 2,17 @@
{% block content %}
<div class="container">
    <div class="row">
        <div class="col-md-8">
        <div class="col">
            <form class="form-inline">
                <div class="form-group">
                    <label>Filter per category</label>
                    <label>Filter per category</label>&nbsp;
                    <select class="form-control" id="category-select" name="category_id">
                    <option  value="0">All</option>
                    {% for cur_category in user.categories %}
                        <option value="{{cur_category.id}}" {% if cur_category.id==category.id %}selected{% endif %}>{{ cur_category.name }}</option>
                    {% endfor %}
                        <option  value="0">All</option>
                        {% for cur_category in user.categories %}
                            <option value="{{cur_category.id}}" {% if cur_category.id==category.id %}selected{% endif %}>{{ cur_category.name }}</option>
                        {% endfor %}
                    </select>
                    <button type="submit" class="btn btn-primary mb-2">OK</button>
                    &nbsp;<button type="submit" class="btn btn-primary">OK</button>
                </div>
            </form>
        </div>


@@ 22,20 22,20 @@

    {% if category %}
    <div class="row">
        <div class="col-md-8 offset-md-1">
        <div class="col">
            <p class="lead">Articles from the category <a href="{{ url_for('user.profile_public', nickname=user.nickname, category_id=category.id) }}">{{ category.name }}</a></p>
        </div>
    </div>
    {% endif %}

    <div class="row">
        <div class="col-md-8 offset-md-1">
        <div class="col">
            {{ pagination.info }}
        </div>
    </div>

    <div class="row">
       <div class="col-md-8 offset-md-1">
       <div class="col">
           {{ pagination.links }}
       </div>
   </div>


@@ 62,7 62,7 @@
    </div>

    <div class="row">
       <div class="col-md-8 offset-md-1">
       <div class="col">
           {{ pagination.links }}
       </div>
   </div>

M package.json => package.json +1 -1
@@ 1,6 1,6 @@
{
  "name": "newspipe",
  "version": "9.0.0",
  "version": "9.1.0",
  "license": "AGPL-3.0",
  "private": true,
  "dependencies": {

M poetry.lock => poetry.lock +2 -7
@@ 497,7 497,7 @@ description = "Database Abstraction Library"
name = "sqlalchemy"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
version = "1.3.13"
version = "1.3.15"

[package.extras]
mssql = ["pyodbc"]


@@ 752,11 752,6 @@ markupsafe = [
    {file = "MarkupSafe-1.1.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:ba59edeaa2fc6114428f1637ffff42da1e311e29382d81b339c1817d37ec93c6"},
    {file = "MarkupSafe-1.1.1-cp37-cp37m-win32.whl", hash = "sha256:b00c1de48212e4cc9603895652c5c410df699856a2853135b3967591e4beebc2"},
    {file = "MarkupSafe-1.1.1-cp37-cp37m-win_amd64.whl", hash = "sha256:9bf40443012702a1d2070043cb6291650a0841ece432556f784f004937f0f32c"},
    {file = "MarkupSafe-1.1.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6788b695d50a51edb699cb55e35487e430fa21f1ed838122d722e0ff0ac5ba15"},
    {file = "MarkupSafe-1.1.1-cp38-cp38-manylinux1_i686.whl", hash = "sha256:cdb132fc825c38e1aeec2c8aa9338310d29d337bebbd7baa06889d09a60a1fa2"},
    {file = "MarkupSafe-1.1.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:13d3144e1e340870b25e7b10b98d779608c02016d5184cfb9927a9f10c689f42"},
    {file = "MarkupSafe-1.1.1-cp38-cp38-win32.whl", hash = "sha256:596510de112c685489095da617b5bcbbac7dd6384aeebeda4df6025d0256a81b"},
    {file = "MarkupSafe-1.1.1-cp38-cp38-win_amd64.whl", hash = "sha256:e8313f01ba26fbbe36c7be1966a7b7424942f670f38e666995b88d012765b9be"},
    {file = "MarkupSafe-1.1.1.tar.gz", hash = "sha256:29872e92839765e546828bb7754a68c418d927cd064fd4708fab9fe9c8bb116b"},
]
mccabe = [


@@ 867,7 862,7 @@ soupsieve = [
    {file = "soupsieve-2.0.tar.gz", hash = "sha256:e914534802d7ffd233242b785229d5ba0766a7f487385e3f714446a07bf540ae"},
]
sqlalchemy = [
    {file = "SQLAlchemy-1.3.13.tar.gz", hash = "sha256:64a7b71846db6423807e96820993fa12a03b89127d278290ca25c0b11ed7b4fb"},
    {file = "SQLAlchemy-1.3.15.tar.gz", hash = "sha256:c4cca4aed606297afbe90d4306b49ad3a4cd36feb3f87e4bfd655c57fd9ef445"},
]
sqlalchemy-schemadisplay = [
    {file = "sqlalchemy_schemadisplay-1.3.tar.gz", hash = "sha256:0a9f26d77be9d92c9564d87cc17668fe141a816036c5f5d7c8cb053b253957e0"},

M pyproject.toml => pyproject.toml +1 -1
@@ 1,6 1,6 @@
[tool.poetry]
name = "newspipe"
version = "9.0.0"
version = "9.1.0"
description = "Newspipe is a web news aggregator."
authors = ["Cédric Bonhomme <cedric@cedricbonhomme.org>"]
license = "AGPL-3.0-or-later"