mirror of
https://github.com/janeczku/calibre-web
synced 2024-12-26 10:00:37 +00:00
Added visiblilty of shelfs to opds catalog (#267)
This commit is contained in:
parent
aee5ca0e06
commit
cbb236ba7b
6
cps/static/js/libs/screenfull.min.js
vendored
6
cps/static/js/libs/screenfull.min.js
vendored
@ -1,7 +1,7 @@
|
|||||||
/*!
|
/*!
|
||||||
* screenfull
|
* screenfull
|
||||||
* v1.1.0 - 2013-09-06
|
* v3.3.0 - 2017-07-06
|
||||||
* https://github.com/sindresorhus/screenfull.js
|
|
||||||
* (c) Sindre Sorhus; MIT License
|
* (c) Sindre Sorhus; MIT License
|
||||||
*/
|
*/
|
||||||
!function(a,b){"use strict";var c="undefined"!=typeof Element&&"ALLOW_KEYBOARD_INPUT"in Element,d=function(){for(var a,c,d=[["requestFullscreen","exitFullscreen","fullscreenElement","fullscreenEnabled","fullscreenchange","fullscreenerror"],["webkitRequestFullscreen","webkitExitFullscreen","webkitFullscreenElement","webkitFullscreenEnabled","webkitfullscreenchange","webkitfullscreenerror"],["webkitRequestFullScreen","webkitCancelFullScreen","webkitCurrentFullScreenElement","webkitCancelFullScreen","webkitfullscreenchange","webkitfullscreenerror"],["mozRequestFullScreen","mozCancelFullScreen","mozFullScreenElement","mozFullScreenEnabled","mozfullscreenchange","mozfullscreenerror"],["msRequestFullscreen","msExitFullscreen","msFullscreenElement","msFullscreenEnabled","MSFullscreenchange","MSFullscreenerror"]],e=0,f=d.length,g={};f>e;e++)if(a=d[e],a&&a[1]in b){for(e=0,c=a.length;c>e;e++)g[d[0][e]]=a[e];return g}return!1}(),e={request:function(a){var e=d.requestFullscreen;a=a||b.documentElement,/5\.1[\.\d]* Safari/.test(navigator.userAgent)?a[e]():a[e](c&&Element.ALLOW_KEYBOARD_INPUT)},exit:function(){b[d.exitFullscreen]()},toggle:function(a){this.isFullscreen?this.exit():this.request(a)},onchange:function(){},onerror:function(){},raw:d};return d?(Object.defineProperties(e,{isFullscreen:{get:function(){return!!b[d.fullscreenElement]}},element:{enumerable:!0,get:function(){return b[d.fullscreenElement]}},enabled:{enumerable:!0,get:function(){return!!b[d.fullscreenEnabled]}}}),b.addEventListener(d.fullscreenchange,function(a){e.onchange.call(e,a)}),b.addEventListener(d.fullscreenerror,function(a){e.onerror.call(e,a)}),a.screenfull=e,void 0):(a.screenfull=!1,void 0)}(window,document);
|
|
||||||
|
!function(){"use strict";var a="undefined"!=typeof window&&void 0!==window.document?window.document:{},b="undefined"!=typeof module&&module.exports,c="undefined"!=typeof Element&&"ALLOW_KEYBOARD_INPUT"in Element,d=function(){for(var b,c=[["requestFullscreen","exitFullscreen","fullscreenElement","fullscreenEnabled","fullscreenchange","fullscreenerror"],["webkitRequestFullscreen","webkitExitFullscreen","webkitFullscreenElement","webkitFullscreenEnabled","webkitfullscreenchange","webkitfullscreenerror"],["webkitRequestFullScreen","webkitCancelFullScreen","webkitCurrentFullScreenElement","webkitCancelFullScreen","webkitfullscreenchange","webkitfullscreenerror"],["mozRequestFullScreen","mozCancelFullScreen","mozFullScreenElement","mozFullScreenEnabled","mozfullscreenchange","mozfullscreenerror"],["msRequestFullscreen","msExitFullscreen","msFullscreenElement","msFullscreenEnabled","MSFullscreenChange","MSFullscreenError"]],d=0,e=c.length,f={};d<e;d++)if((b=c[d])&&b[1]in a){for(d=0;d<b.length;d++)f[c[0][d]]=b[d];return f}return!1}(),e={change:d.fullscreenchange,error:d.fullscreenerror},f={request:function(b){var e=d.requestFullscreen;b=b||a.documentElement,/5\.1[.\d]* Safari/.test(navigator.userAgent)?b[e]():b[e](c&&Element.ALLOW_KEYBOARD_INPUT)},exit:function(){a[d.exitFullscreen]()},toggle:function(a){this.isFullscreen?this.exit():this.request(a)},onchange:function(a){this.on("change",a)},onerror:function(a){this.on("error",a)},on:function(b,c){var d=e[b];d&&a.addEventListener(d,c,!1)},off:function(b,c){var d=e[b];d&&a.off(d,c,!1)},raw:d};if(!d)return void(b?module.exports=!1:window.screenfull=!1);Object.defineProperties(f,{isFullscreen:{get:function(){return Boolean(a[d.fullscreenElement])}},element:{enumerable:!0,get:function(){return a[d.fullscreenElement]}},enabled:{enumerable:!0,get:function(){return Boolean(a[d.fullscreenEnabled])}}}),b?module.exports=f:window.screenfull=f}();
|
@ -66,4 +66,18 @@
|
|||||||
<id>{{url_for('feed_seriesindex')}}</id>
|
<id>{{url_for('feed_seriesindex')}}</id>
|
||||||
<content type="text">{{_('Books ordered by series')}}</content>
|
<content type="text">{{_('Books ordered by series')}}</content>
|
||||||
</entry>
|
</entry>
|
||||||
|
<entry>
|
||||||
|
<title>{{_('Public Shelves')}}</title>
|
||||||
|
<link rel="subsection" href="{{url_for('feed_shelfindex', public="public")}}" type="application/atom+xml;profile=opds-catalog"/>
|
||||||
|
<id>{{url_for('feed_shelfindex', public="public")}}</id>
|
||||||
|
<content type="text">{{_('Books organized in public shelfs, visible to everyone')}}</content>
|
||||||
|
</entry>
|
||||||
|
{% if not current_user.is_anonymous %}
|
||||||
|
<entry>
|
||||||
|
<title>{{_('Your Shelves')}}</title>
|
||||||
|
<link rel="subsection" href="{{url_for('feed_shelfindex')}}" type="application/atom+xml;profile=opds-catalog"/>
|
||||||
|
<id>{{url_for('feed_shelfindex')}}</id>
|
||||||
|
<content type="text">{{_("User's own shelfs, only visible to the current user himself")}}</content>
|
||||||
|
</entry>
|
||||||
|
{% endif %}
|
||||||
</feed>
|
</feed>
|
||||||
|
@ -1090,7 +1090,7 @@ msgstr "Sprachen"
|
|||||||
|
|
||||||
#: cps/templates/layout.html:152
|
#: cps/templates/layout.html:152
|
||||||
msgid "Public Shelves"
|
msgid "Public Shelves"
|
||||||
msgstr "Öffentiche Bücherregale"
|
msgstr "Öffentliche Bücherregale"
|
||||||
|
|
||||||
#: cps/templates/layout.html:156
|
#: cps/templates/layout.html:156
|
||||||
msgid "Your Shelves"
|
msgid "Your Shelves"
|
||||||
|
49
cps/web.py
49
cps/web.py
@ -840,6 +840,55 @@ def feed_series(book_id):
|
|||||||
return response
|
return response
|
||||||
|
|
||||||
|
|
||||||
|
@app.route("/opds/shelfindex/", defaults={'public': 0})
|
||||||
|
@app.route("/opds/shelfindex/<string:public>")
|
||||||
|
@requires_basic_auth_if_no_ano
|
||||||
|
def feed_shelfindex(public):
|
||||||
|
off = request.args.get("offset")
|
||||||
|
if not off:
|
||||||
|
off = 0
|
||||||
|
if public is not 0:
|
||||||
|
shelf = g.public_shelfes
|
||||||
|
number = len(shelf)
|
||||||
|
else:
|
||||||
|
shelf = g.user.shelf
|
||||||
|
number = shelf.count()
|
||||||
|
pagination = Pagination((int(off) / (int(config.config_books_per_page)) + 1), config.config_books_per_page,
|
||||||
|
number)
|
||||||
|
xml = render_title_template('feed.xml', listelements=shelf, folder='feed_shelf', pagination=pagination)
|
||||||
|
response = make_response(xml)
|
||||||
|
response.headers["Content-Type"] = "application/atom+xml; charset=utf-8"
|
||||||
|
return response
|
||||||
|
|
||||||
|
|
||||||
|
@app.route("/opds/shelf/<int:book_id>")
|
||||||
|
@requires_basic_auth_if_no_ano
|
||||||
|
def feed_shelf(book_id):
|
||||||
|
off = request.args.get("offset")
|
||||||
|
if not off:
|
||||||
|
off = 0
|
||||||
|
if current_user.is_anonymous:
|
||||||
|
shelf = ub.session.query(ub.Shelf).filter(ub.Shelf.is_public == 1, ub.Shelf.id == book_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 == book_id),
|
||||||
|
ub.and_(ub.Shelf.is_public == 1,
|
||||||
|
ub.Shelf.id == book_id))).first()
|
||||||
|
result = list()
|
||||||
|
# user is allowed to access shelf
|
||||||
|
if shelf:
|
||||||
|
books_in_shelf = ub.session.query(ub.BookShelf).filter(ub.BookShelf.shelf == book_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)
|
||||||
|
pagination = Pagination((int(off) / (int(config.config_books_per_page)) + 1), config.config_books_per_page,
|
||||||
|
len(result))
|
||||||
|
xml = render_title_template('feed.xml', entries=result, pagination=pagination)
|
||||||
|
response = make_response(xml)
|
||||||
|
response.headers["Content-Type"] = "application/atom+xml; charset=utf-8"
|
||||||
|
return response
|
||||||
|
|
||||||
def partial(total_byte_len, part_size_limit):
|
def partial(total_byte_len, part_size_limit):
|
||||||
s = []
|
s = []
|
||||||
for p in range(0, total_byte_len, part_size_limit):
|
for p in range(0, total_byte_len, part_size_limit):
|
||||||
|
Loading…
Reference in New Issue
Block a user