Removed unused wishlist code
Added renaming of shelf name Added sorting abilty to shelfs jquery is loaded locally now
This commit is contained in:
parent
580389d279
commit
e0459eb62b
|
@ -5,7 +5,6 @@ import db, ub
|
|||
import config
|
||||
from flask import current_app as app
|
||||
import logging
|
||||
|
||||
import smtplib
|
||||
import tempfile
|
||||
import socket
|
||||
|
|
2
cps/static/js/Sortable.min.js
vendored
Normal file
2
cps/static/js/Sortable.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1
cps/static/js/libs/jquery.min.map
Normal file
1
cps/static/js/libs/jquery.min.map
Normal file
File diff suppressed because one or more lines are too long
30
cps/static/js/shelforder.js
Normal file
30
cps/static/js/shelforder.js
Normal file
|
@ -0,0 +1,30 @@
|
|||
Sortable.create(sortTrue, {
|
||||
group: "sorting",
|
||||
sort: true
|
||||
});
|
||||
|
||||
function sendData(path){
|
||||
var elements;
|
||||
var counter;
|
||||
var maxElements;
|
||||
var tmp=[];
|
||||
|
||||
elements=Sortable.utils.find(sortTrue,"div");
|
||||
maxElements=elements.length;
|
||||
|
||||
var form = document.createElement("form");
|
||||
form.setAttribute("method", "post");
|
||||
form.setAttribute("action", path);
|
||||
|
||||
|
||||
for(counter=0;counter<maxElements;counter++){
|
||||
tmp[counter]=elements[counter].getAttribute("id");
|
||||
var hiddenField = document.createElement("input");
|
||||
hiddenField.setAttribute("type", "hidden");
|
||||
hiddenField.setAttribute("name", elements[counter].getAttribute("id"));
|
||||
hiddenField.setAttribute("value", counter+1);
|
||||
form.appendChild(hiddenField);
|
||||
}
|
||||
document.body.appendChild(form);
|
||||
form.submit();
|
||||
}
|
|
@ -20,7 +20,8 @@
|
|||
<![endif]-->
|
||||
|
||||
<!-- jQuery (necessary for Bootstrap's JavaScript plugins) -->
|
||||
<script src="https://code.jquery.com/jquery.js"></script>
|
||||
<!--script src="https://code.jquery.com/jquery.js"></script-->
|
||||
<script src="{{ url_for('static', filename='js/libs/jquery.min.js') }}"></script>
|
||||
<!-- Include all compiled plugins (below), or include individual files as needed -->
|
||||
<script src="{{ url_for('static', filename='js/bootstrap.min.js') }}"></script>
|
||||
<script src="{{ url_for('static', filename='js/underscore.min.js') }}"></script>
|
||||
|
@ -28,7 +29,9 @@
|
|||
<script src="{{ url_for('static', filename='js/context.js') }}"></script>
|
||||
<script src="{{ url_for('static', filename='js/plugins.js') }}"></script>
|
||||
<script src="{{ url_for('static', filename='js/main.js') }}"></script>
|
||||
{% block header %}{% endblock %}
|
||||
<script src="{{ url_for('static', filename='js/Sortable.min.js') }}"></script>
|
||||
|
||||
{% block header %}{% endblock %}
|
||||
</head>
|
||||
<body>
|
||||
<script>
|
||||
|
|
20
cps/templates/order_shelf.html
Normal file
20
cps/templates/order_shelf.html
Normal file
|
@ -0,0 +1,20 @@
|
|||
{% extends "layout.html" %}
|
||||
{% block body %}
|
||||
<div class="col-sm-6 col-lg-6 col-xs-6">
|
||||
<h2>{{title}}</h2>
|
||||
<div id="sortTrue" class="list-group">
|
||||
{% for entry in entries %}
|
||||
<div id="{{entry.id}}" class="list-group-item">{{entry.title}}</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
<button onclick="sendData('{{ url_for('order_shelf', shelf_id=shelf.id) }}')" class="btn btn-default" id="ChangeOrder">{{_('Change order')}}</button>
|
||||
<a href="{{ url_for('show_shelf', shelf_id=shelf.id) }}" class="btn btn-default">{{_('Back')}}</a>
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
||||
{% block js %}
|
||||
<script src="{{ url_for('static', filename='js/shelforder.js') }}"></script>
|
||||
{% endblock %}
|
||||
|
||||
|
||||
|
|
@ -4,6 +4,8 @@
|
|||
<h2>{{title}}</h2>
|
||||
{% if g.user.is_authenticated %}
|
||||
<a href=" {{ url_for('delete_shelf', shelf_id=shelf.id) }} " class="btn btn-danger">{{ _('Delete this Shelf') }} </a>
|
||||
<a href=" {{ url_for('edit_shelf', shelf_id=shelf.id) }} " class="btn btn-primary">{{ _('Edit Shelf name') }} </a>
|
||||
<a href=" {{ url_for('order_shelf', shelf_id=shelf.id) }} " class="btn btn-primary">{{ _('change order') }} </a>
|
||||
{% endif %}
|
||||
<div class="row">
|
||||
|
||||
|
|
|
@ -5,14 +5,17 @@
|
|||
<form role="form" method="POST">
|
||||
<div class="form-group">
|
||||
<label for="title">{{_('Title')}}</label>
|
||||
<input type="text" class="form-control" name="title" id="title" value="">
|
||||
<input type="text" class="form-control" name="title" id="title" value="{{ shelf.name if shelf.name != None }}">
|
||||
</div>
|
||||
<div class="checkbox">
|
||||
<label>
|
||||
<input type="checkbox" name="is_public"> {{_('should the shelf be public?')}}
|
||||
<input type="checkbox" name="is_public" {% if shelf.is_public == 1 %}checked{% endif %}> {{_('should the shelf be public?')}}
|
||||
</label>
|
||||
</div>
|
||||
<button type="submit" class="btn btn-default">{{_('Submit')}}</button>
|
||||
{% if shelf.id != None %}
|
||||
<a href="{{ url_for('show_shelf', shelf_id=shelf.id) }}" class="btn btn-default">{{_('Back')}}</a>
|
||||
{% endif %}
|
||||
</form>
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
|
Binary file not shown.
File diff suppressed because it is too large
Load Diff
31
cps/ub.py
31
cps/ub.py
|
@ -32,7 +32,6 @@ class User(Base):
|
|||
password = Column(String)
|
||||
kindle_mail = Column(String(120), default="")
|
||||
shelf = relationship('Shelf', backref='user', lazy='dynamic')
|
||||
whislist = relationship('Whislist', backref='user', lazy='dynamic')
|
||||
downloads = relationship('Downloads', backref='user', lazy='dynamic')
|
||||
locale = Column(String(2), default="en")
|
||||
random_books = Column(Integer, default=1)
|
||||
|
@ -117,27 +116,12 @@ class Shelf(Base):
|
|||
def __repr__(self):
|
||||
return '<Shelf %r>' % self.name
|
||||
|
||||
|
||||
class Whislist(Base):
|
||||
__tablename__ = "wishlist"
|
||||
|
||||
id = Column(Integer, primary_key=True)
|
||||
name = Column(String)
|
||||
is_public = Column(String)
|
||||
user_id = Column(Integer, ForeignKey('user.id'))
|
||||
|
||||
def __init__(self):
|
||||
pass
|
||||
|
||||
def __repr__(self):
|
||||
return '<Whislist %r>' % self.name
|
||||
|
||||
|
||||
class BookShelf(Base):
|
||||
__tablename__ = 'book_shelf_link'
|
||||
|
||||
id = Column(Integer, primary_key=True)
|
||||
book_id = Column(Integer)
|
||||
order = Column(Integer)
|
||||
shelf = Column(Integer, ForeignKey('shelf.id'))
|
||||
|
||||
def __repr__(self):
|
||||
|
@ -154,19 +138,6 @@ class Downloads(Base):
|
|||
def __repr__(self):
|
||||
return '<Download %r' % self.book_id
|
||||
|
||||
|
||||
class Whish(Base):
|
||||
__tablename__ = 'whish'
|
||||
|
||||
id = Column(Integer, primary_key=True)
|
||||
title = Column(String)
|
||||
url = Column(String)
|
||||
wishlist = Column(Integer, ForeignKey('wishlist.id'))
|
||||
|
||||
def __repr__(self):
|
||||
return '<Whish %r>' % self.title
|
||||
|
||||
|
||||
class Settings(Base):
|
||||
__tablename__ = 'settings'
|
||||
|
||||
|
|
67
cps/web.py
67
cps/web.py
|
@ -1184,8 +1184,12 @@ def add_to_shelf(shelf_id, book_id):
|
|||
if not shelf.is_public and not shelf.user_id == int(current_user.id):
|
||||
flash("Sorry you are not allowed to add a book to the the shelf: %s" % shelf.name)
|
||||
return redirect(url_for('index', _external=True))
|
||||
|
||||
ins = ub.BookShelf(shelf=shelf.id, book_id=book_id)
|
||||
maxO = ub.session.query(func.max(ub.BookShelf.order)).filter(ub.BookShelf.shelf == shelf_id).first()
|
||||
if maxO[0] is None:
|
||||
maxOrder = 0
|
||||
else:
|
||||
maxOrder = maxO[0]
|
||||
ins = ub.BookShelf(shelf=shelf.id, book_id=book_id, order=maxOrder+1)
|
||||
ub.session.add(ins)
|
||||
ub.session.commit()
|
||||
|
||||
|
@ -1235,9 +1239,34 @@ def create_shelf():
|
|||
flash(_(u"Shelf %(title)s created", title=to_save["title"]), category="success")
|
||||
except:
|
||||
flash(_(u"There was an error"), category="error")
|
||||
return render_template('shelf_edit.html', title=_(u"create a shelf"))
|
||||
return render_template('shelf_edit.html', shelf=shelf, title=_(u"create a shelf"))
|
||||
else:
|
||||
return render_template('shelf_edit.html', title=_(u"create a shelf"))
|
||||
return render_template('shelf_edit.html', shelf=shelf, title=_(u"create a shelf"))
|
||||
|
||||
@app.route("/shelf/edit/<int:shelf_id>", methods=["GET", "POST"])
|
||||
@login_required
|
||||
def edit_shelf(shelf_id):
|
||||
shelf = ub.session.query(ub.Shelf).filter(ub.Shelf.id == shelf_id).first()
|
||||
if request.method == "POST":
|
||||
to_save = request.form.to_dict()
|
||||
existing_shelf = ub.session.query(ub.Shelf).filter(ub.Shelf.name == to_save["title"]).first()
|
||||
if existing_shelf and existing_shelf.id != shelf_id:
|
||||
flash(_(u"A shelf with the name '%(title)s' already exists.",title=to_save["title"]), category="error")
|
||||
else:
|
||||
shelf.name = to_save["title"]
|
||||
if "is_public" in to_save:
|
||||
shelf.is_public = 1
|
||||
else:
|
||||
shelf.is_public = 0
|
||||
try:
|
||||
ub.session.commit()
|
||||
flash(_(u"Shelf %(title)s changed",title=to_save["title"]), category="success")
|
||||
except:
|
||||
flash(_(u"There was an error"), category="error")
|
||||
return render_template('shelf_edit.html', shelf=shelf, title=_(u"Edit a shelf"))
|
||||
else:
|
||||
return render_template('shelf_edit.html', shelf=shelf, title=_(u"Edit a shelf"))
|
||||
|
||||
|
||||
|
||||
@app.route("/shelf/delete/<int:shelf_id>")
|
||||
|
@ -1273,7 +1302,7 @@ def show_shelf(shelf_id):
|
|||
ub.Shelf.id == shelf_id))).first()
|
||||
result = list()
|
||||
if shelf:
|
||||
books_in_shelf = ub.session.query(ub.BookShelf).filter(ub.BookShelf.shelf == shelf_id).all()
|
||||
books_in_shelf = ub.session.query(ub.BookShelf).filter(ub.BookShelf.shelf == shelf_id).order_by(ub.BookShelf.order.asc()).all()
|
||||
for book in books_in_shelf:
|
||||
cur_book = db.session.query(db.Books).filter(db.Books.id == book.book_id).first()
|
||||
result.append(cur_book)
|
||||
|
@ -1281,6 +1310,34 @@ def show_shelf(shelf_id):
|
|||
return render_template('shelf.html', entries=result, title=_(u"Shelf: '%(name)s'", name=shelf.name), shelf=shelf)
|
||||
|
||||
|
||||
@app.route("/shelf/order/<int:shelf_id>", methods=["GET", "POST"])
|
||||
@login_required_if_no_ano
|
||||
def order_shelf(shelf_id):
|
||||
if request.method == "POST":
|
||||
to_save = request.form.to_dict()
|
||||
books_in_shelf = ub.session.query(ub.BookShelf).filter(ub.BookShelf.shelf == shelf_id).order_by(
|
||||
ub.BookShelf.order.asc()).all()
|
||||
counter=0
|
||||
for book in books_in_shelf:
|
||||
setattr(book, 'order', to_save[str(book.book_id)])
|
||||
counter+=1
|
||||
ub.session.commit()
|
||||
if current_user.is_anonymous():
|
||||
shelf = ub.session.query(ub.Shelf).filter(ub.Shelf.is_public == 1, ub.Shelf.id == shelf_id).first()
|
||||
else:
|
||||
shelf = ub.session.query(ub.Shelf).filter(ub.or_(ub.and_(ub.Shelf.user_id == int(current_user.id),
|
||||
ub.Shelf.id == shelf_id),
|
||||
ub.and_(ub.Shelf.is_public == 1,
|
||||
ub.Shelf.id == shelf_id))).first()
|
||||
result = list()
|
||||
if shelf:
|
||||
books_in_shelf2 = ub.session.query(ub.BookShelf).filter(ub.BookShelf.shelf == shelf_id).order_by(ub.BookShelf.order.asc()).all()
|
||||
for book in books_in_shelf2:
|
||||
cur_book = db.session.query(db.Books).filter(db.Books.id == book.book_id).first()
|
||||
result.append(cur_book)
|
||||
return render_template('order_shelf.html', entries=result, title=_(u"Change order of Shelf: '%(name)s'", name=shelf.name), shelf=shelf)
|
||||
|
||||
|
||||
@app.route("/me", methods=["GET", "POST"])
|
||||
@login_required
|
||||
def profile():
|
||||
|
|
Loading…
Reference in New Issue
Block a user