Merge branch 'master' of git.xpub.nl:/var/www/git.xpub.nl/repos/xpub-lib

This commit is contained in:
Alex 2018-06-01 20:26:48 +02:00
commit 6fa69012b7
8 changed files with 74 additions and 52 deletions

View File

@ -3,7 +3,7 @@ from wtforms import StringField, FileField, validators
from wtforms.validators import InputRequired, DataRequired from wtforms.validators import InputRequired, DataRequired
from wtforms import FieldList from wtforms import FieldList
from wtforms import Form as NoCsrfForm from wtforms import Form as NoCsrfForm
from wtforms.fields import StringField, FormField, SubmitField from wtforms.fields import StringField, FormField, SubmitField, SelectField
from app.models import Book, BookSchema, Author from app.models import Book, BookSchema, Author
# - - - Forms - - - # - - - Forms - - -
@ -26,4 +26,7 @@ class EditForm(FlaskForm):
category = StringField('category', validators=[InputRequired()]) category = StringField('category', validators=[InputRequired()])
class SearchForm(FlaskForm): class SearchForm(FlaskForm):
choices = [('Title', 'Title'),
('Category', 'Category')]
select = SelectField('', choices=choices)
search = StringField('', validators=[InputRequired()]) search = StringField('', validators=[InputRequired()])

View File

@ -74,13 +74,14 @@ font-size: 16px;
.search input{ .search input{
margin: 0; margin: 0;
float: left; float: left;
width: 400px; width: 320px;
height: 36px; height: 36px;
font-size: 20px; font-size: 20px;
font-weight: regular; font-weight: regular;
padding: 2px; padding: 2px;
background:rgba(50, 50, 50, 0.2); background:rgba(50, 50, 50, 0.2);
border:0px; border:0px;
box-shadow: inset 0 0 5px rgba(000,000,000, 0.2);
} }
.button { .button {

View File

@ -11,9 +11,9 @@
{{ form.csrf_token }} {{ form.csrf_token }}
<div class="form-group"><h1 class="header">{{ form.title.label }} {{ form.title(size=20, class="form-control") }}</h1></div> <div class="form-group"><h1 class="header">{{ form.title.label }} {{ form.title(size=20, class="form-control") }}</h1></div>
<object class="no_cover" data="../../static/img/default_cover.png" type="image/png" width="150">
<img src="../../uploads/cover/{{ book.cover }}" width="200"> <img class="no_cover" id="{{ book.title }}" src="/uploads/cover/{{ book.cover }}" width="150" onerror="if (this.src != '/uploads/cover/{{ book.cover }}') this.src = '/static/img/default_cover.png';">
</object>
<br> <br> <br> <br>
<div data-toggle="fieldset" id="phone-fieldset"> <div data-toggle="fieldset" id="phone-fieldset">
{{ form.author.label }} <button type="button" data-toggle="fieldset-add-row" {{ form.author.label }} <button type="button" data-toggle="fieldset-add-row"

View File

@ -2,8 +2,8 @@
<ul> <ul>
<li><a href="{{ url_for('home') }}">Home</a></li> <li><a href="{{ url_for('home') }}">Home</a></li>
<li><a href="{{ url_for('show_books') }}">Show Books</a></li> <li><a href="{{ url_for('show_books') }}">Show Books</a></li>
<li><a href="{{ url_for('add_book') }}">Add Book</a></li>
<li><a href="{{ url_for('show_stacks') }}">Show Stacks</a></li> <li><a href="{{ url_for('show_stacks') }}">Show Stacks</a></li>
<li><a href="{{ url_for('add_book') }}">Add Book</a></li>
<li><a href="{{ url_for('about') }}">About</a></li> <li><a href="{{ url_for('about') }}">About</a></li>
</ul> </ul>
<div class="clearfix"></div> <div class="clearfix"></div>

View File

@ -5,13 +5,12 @@
<div class="container"> <div class="container">
{% from "_formhelpers.html" import render_field %} {% from "_formhelpers.html" import render_field %}
<form method="POST"> <form method="POST">
<div>{{ form.select(style="width: 100px; margin: 10px; float: left; font-size: 20px") }}</div>
<div class="search"> <div class="search">
{{ render_field(form.search) }} </div> {{ render_field(form.search) }} </div>
<button type="submit" class="button">Search</button> <button type="submit" class="button">Search</button>
</form> </form>
</div>
<div class="container"> <div class="container">
<h1 class="page-header">Search Results for: {{ query }}</h1> <h1 class="page-header">Search Results for: {{ query }}</h1>
{% with messages = get_flashed_messages() %} {% with messages = get_flashed_messages() %}
@ -26,17 +25,18 @@
{% endif %} {% endif %}
{% endwith %} {% endwith %}
<table style="width:100%"> <table class="library_table" id="table" style="width:100%">
<tr> <tr id="header">
<th>Cover</th> <th>Cover</th>
<th>Title</th> <th>Title</th>
<th>Author</th> <th>Author</th>
<th>Filetype</th> <th>Filetype</th>
<th>Tag</th> <th>Category</th>
<th>Stack</th>
</tr> </tr>
{% for book in books %} {% for book in books %}
<tr> <tr>
<td><img class="no_cover" id="{{ book.title }}" src="../../uploads/cover/{{ book.cover }}" width="80" onerror="if (this.src != '../../static/img/default_cover.png') this.src = '../../static/img/default_cover.png';"></td> <td><img class="no_cover" id="{{ book.title }}" src="/uploads/cover/{{ book.cover }}" width="80" onerror="if (this.src != '/static/img/default_cover.png') this.src = '/static/img/default_cover.png';"></td>
<td><a href="{{url_for('show_book_by_id', id=book.id)}}">{{ book.title }}</a></td> <td><a href="{{url_for('show_book_by_id', id=book.id)}}">{{ book.title }}</a></td>
<td> {% for author in book.authors %} <td> {% for author in book.authors %}
@ -45,8 +45,12 @@
{% endfor %}</td> {% endfor %}</td>
<td>{{ book.fileformat }}</td> <td>{{ book.fileformat }}</td>
<td>{{ book.tag}}</td> <td>{{ book.category}}</td>
</tr> <td> {% for stack in book.stacks %}
<li><a href="{{url_for('show_stack_by_id', id=stack.id)}}">{{ stack.stack_name }}</a> </li>
{% endfor %}
</td>
{% endfor %} {% endfor %}
</table> </table>
@ -56,28 +60,32 @@
<hr> <hr>
<h2> Other books </h2> <h2> Other books </h2>
<table style="width:100%; "> <table class="library_table" id="table" style="width:100%">
<tr> <tr id="header">
<th>Cover</th> <th>Cover</th>
<th>Title</th> <th>Title</th>
<th>Author</th> <th>Author</th>
<th>Filetype</th> <th>Filetype</th>
<th>Tag</th> <th>Category</th>
<th>Stack</th>
</tr> </tr>
{% for book in books_all %} {% for book in books_all %}
<tr> <tr>
<td><img class="no_cover" id="{{ book.title }}" src="../../uploads/cover/{{ book.cover }}" width="40" onerror="if (this.src != '../../static/img/default_cover.png') this.src = '../../static/img/default_cover.png';"></td> <td><img class="no_cover" id="{{ book.title }}" src="/uploads/cover/{{ book.cover }}" width="80" onerror="if (this.src != '/static/img/default_cover.png') this.src = '/static/img/default_cover.png';"></td>
<td><a href="{{url_for('show_book_by_id', id=book.id)}}">{{ book.title }}</a></td> <td><a href="{{url_for('show_book_by_id', id=book.id)}}">{{ book.title }}</a></td>
<td> {% for author in book.authors %} <td> {% for author in book.authors %}
<li><a href="{{url_for('show_author_by_id', id=author.id)}}">{{ author.author_name }}</a> </li> <li><a href="{{url_for('show_author_by_id', id=author.id)}}">{{ author.author_name }}</a> </li>
{% endfor %}</td> {% endfor %}</td>
<td>{{ book.fileformat }}</td> <td>{{ book.fileformat }}</td>
<td>{{ book.tag}}</td> <td>{{ book.category}}</td>
</tr> <td> {% for stack in book.stacks %}
<li><a href="{{url_for('show_stack_by_id', id=stack.id)}}">{{ stack.stack_name }}</a> </li>
{% endfor %}
</td>
{% endfor %} {% endfor %}
</table> </table>
<p> <p>

View File

@ -4,15 +4,15 @@
<div class="container"> <div class="container">
<h1 class="header">{{ book.title }}</h1> <h1 class="header">{{ book.title }}</h1>
<img class="no_cover" id="{{ book.title }}" src="../uploads/cover/{{ book.cover }}" width="150" onerror="if (this.src != '../static/img/default_cover.png') this.src = '../static/img/default_cover.png';"> <img class="no_cover" id="{{ book.title }}" src="../uploads/cover/{{ book.cover }}" width="150" onerror="if (this.src != '../static/img/{{ book.cover }}') this.src = '../static/img/default_cover.png';">
<p>Author(s): <ul>{% for author in book.authors %} <p>Author(s): <ul>{% for author in book.authors %}
<li><a href="{{url_for('show_author_by_id', id=author.id)}}">{{ author.author_name }}</a> </li> <li><a href="{{url_for('show_author_by_id', id=author.id)}}">{{ author.author_name }}</a> </li>
{% endfor %}</ul></p> {% endfor %}</ul></p>
<p>{{ book.category }}</p> <p>Category: {{ book.category }}</p>
<p>{{ book.year_published }}</p> <p>Year published: {{ book.year_published }}</p>
<p>Stack(s): <ul>{% for stack in book.stacks %} <p>Stack(s): <ul>{% for stack in book.stacks %}
<li><a href="{{url_for('show_stack_by_id', id=stack.id)}}">{{ stack.stack_name }}</a> <li><a href="{{url_for('show_stack_by_id', id=stack.id)}}">{{ stack.stack_name }}</a>

View File

@ -2,9 +2,9 @@
{% block main %} {% block main %}
<div class="container"> <div class="container">
{% from "_formhelpers.html" import render_field %} {% from "_formhelpers.html" import render_field %}
<form method="POST"> <form method="POST">
<div>{{ form.select(style="width: 100px; margin: 10px; float: left; font-size: 20px") }}</div>
<div class="search"> <div class="search">
{{ render_field(form.search) }} </div> {{ render_field(form.search) }} </div>
<button type="submit" class="button">Search</button> <button type="submit" class="button">Search</button>
@ -36,8 +36,7 @@
<tr> <tr>
<td> <td>
<img class="no_cover" id="{{ book.title }}" src="../uploads/cover/{{ book.cover }}" width="40" onerror="if (this.src != '../static/img/default_cover.png') this.src = '../static/img/default_cover.png';"> <img class="no_cover" id="{{ book.title }}" src="/uploads/cover/{{ book.cover }}" width="40" onerror="if (this.src != '/static/img/default_cover.png') this.src = '/static/img/default_cover.png';">
<!-- <object class="no_cover" data="../static/img/default_cover.png" type="image/png" width="65"> <!-- <object class="no_cover" data="../static/img/default_cover.png" type="image/png" width="65">
<p hidden="True"></p> <p hidden="True"></p>

View File

@ -62,7 +62,11 @@ def show_books():
books = db.session.query(Book).all() books = db.session.query(Book).all()
search = SearchForm(request.form) search = SearchForm(request.form)
if request.method == 'POST': if request.method == 'POST':
return redirect((url_for('search_results', query=search.search.data))) if search.select.data == 'Title':
return redirect((url_for('search_results', query=search.search.data)))
if search.select.data == 'Category':
return redirect((url_for('search_cat', query=search.search.data)))
return render_template('show_books.html', books=books, form=search) return render_template('show_books.html', books=books, form=search)
@app.route('/scape', methods=['POST', 'GET']) @app.route('/scape', methods=['POST', 'GET'])
@ -144,6 +148,10 @@ def add_book():
upload_form = UploadForm() upload_form = UploadForm()
if request.method == 'POST': if request.method == 'POST':
title = upload_form.title.data
authors = upload_form.author.data
category = upload_form.category.data
year_published = upload_form.year_published.data
if upload_form.validate_on_submit(): if upload_form.validate_on_submit():
if upload_form.upload.data: if upload_form.upload.data:
@ -166,13 +174,6 @@ def add_book():
name, file_extension = os.path.splitext(new_filename) name, file_extension = os.path.splitext(new_filename)
file.save(fullpath) file.save(fullpath)
cover = get_cover(fullpath, name) cover = get_cover(fullpath, name)
title = upload_form.title.data # You could also have used request.form['name']
authors = upload_form.author.data # You could also have used
category = upload_form.category.data
year_published = upload_form.year_published.data
#print(author)
#print(len(author))
book = Book(title, filename, cover, file_extension, category, year_published) book = Book(title, filename, cover, file_extension, category, year_published)
db.session.add(book) db.session.add(book)
for author in authors: for author in authors:
@ -186,7 +187,6 @@ def add_book():
db.session.commit() db.session.commit()
# save user to database # save user to database
flash("%s added to the library" % (title)) flash("%s added to the library" % (title))
return redirect(url_for('show_books')) return redirect(url_for('show_books'))
else: else:
@ -196,15 +196,7 @@ def add_book():
file = open('app/uploads/potential.pdf') file = open('app/uploads/potential.pdf')
filename = 'potential.pdf' filename = 'potential.pdf'
file_extension = '.pdf' file_extension = '.pdf'
cover = get_cover('app/uploads/potential.pdf', 'default') cover = ''
title = upload_form.title.data # You could also have used request.form['name']
authors = upload_form.author.data # You could also have used
category = upload_form.category.data
year_published = upload_form.year_published.data
#print(author)
#print(len(author))
book = Book(title, filename, cover, file_extension, category,year_published) book = Book(title, filename, cover, file_extension, category,year_published)
db.session.add(book) db.session.add(book)
for author in authors: for author in authors:
@ -220,7 +212,6 @@ def add_book():
flash("%s added to the library" % (title)) flash("%s added to the library" % (title))
return redirect(url_for('show_books')) return redirect(url_for('show_books'))
flash_errors(upload_form) flash_errors(upload_form)
return render_template('add_book.html', form=upload_form) return render_template('add_book.html', form=upload_form)
@ -266,10 +257,9 @@ def show_stack_by_id(id):
## search ## search
@app.route('/search/<query>/', methods=['POST', 'GET']) @app.route('/search/titles/<query>/', methods=['POST', 'GET'])
def search_results(query): def search_results(query):
search = SearchForm(request.form) search = SearchForm(request.form)
books_all=Book.query.all()
random_order=Book.query.order_by(func.random()).limit(10) random_order=Book.query.order_by(func.random()).limit(10)
results=Book.query.filter(Book.title.contains(query)).all() results=Book.query.filter(Book.title.contains(query)).all()
@ -280,11 +270,32 @@ def search_results(query):
if request.method == 'POST': if request.method == 'POST':
query = search.search.data query = search.search.data
results = [] results = []
results=Book.query.filter(Book.title.contains(query)).all() if search.select.data == 'Title':
return redirect((url_for('search_results', query=search.search.data))) return redirect((url_for('search_results', query=search.search.data)))
if search.select.data == 'Category':
return redirect((url_for('search_cat', query=search.search.data)))
return render_template('results.html', form=search, books=results, books_all=random_order, query=query) return render_template('results.html', form=search, books=results, books_all=random_order, query=query)
@app.route('/search/cat/<query>/', methods=['POST', 'GET'])
def search_cat(query):
search = SearchForm(request.form)
random_order=Book.query.order_by(func.random()).limit(10)
results=Book.query.filter(Book.category.contains(query)).all()
if not results:
upload_form = UploadForm(category=query)
return render_template('red_link.html', form=upload_form, category=query)
if request.method == 'POST':
query = search.search.data
results = []
if search.select.data == 'Title':
return redirect((url_for('search_results', query=search.search.data)))
if search.select.data == 'Category':
return redirect((url_for('search_cat', query=search.search.data)))
return render_template('results.html', form=search, books=results, books_all=random_order, query=query)
### ###
# The API # The API