mirror of
				https://github.com/janeczku/calibre-web
				synced 2025-10-31 07:13:02 +00:00 
			
		
		
		
	Added visiblilty of shelfs to opds catalog (#267)
This commit is contained in:
		
							
								
								
									
										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): | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 OzzieIsaacs
					OzzieIsaacs