mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-06-23 15:30:45 -04:00
/browse: Add permalink for every book
This commit is contained in:
parent
a490b3fbed
commit
c5ebc3e5a3
@ -417,12 +417,12 @@ h2.library_name {
|
|||||||
margin-bottom: 2ex;
|
margin-bottom: 2ex;
|
||||||
}
|
}
|
||||||
|
|
||||||
#book_details_dialog .details a {
|
.details .right .formats a {
|
||||||
color: blue;
|
color: blue;
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
#book_details_dialog .details a:hover {
|
.details .right .formats a:hover {
|
||||||
color: red;
|
color: red;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -235,8 +235,10 @@ function load_page(elem) {
|
|||||||
elem.show();
|
elem.show();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function hidesort() {$("#content > .sort_select").hide();}
|
||||||
|
|
||||||
function booklist(hide_sort) {
|
function booklist(hide_sort) {
|
||||||
if (hide_sort) $("#content > .sort_select").hide();
|
if (hide_sort) hidesort();
|
||||||
var test = $("#booklist #page0").html();
|
var test = $("#booklist #page0").html();
|
||||||
if (!test) {
|
if (!test) {
|
||||||
$("#booklist").html(render_error("No books found"));
|
$("#booklist").html(render_error("No books found"));
|
||||||
@ -275,3 +277,13 @@ function show_details(a_dom) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// }}}
|
// }}}
|
||||||
|
|
||||||
|
function book() {
|
||||||
|
hidesort();
|
||||||
|
$('.details .left img').load(function() {
|
||||||
|
var img = $('.details .left img');
|
||||||
|
var height = $('#main').height();
|
||||||
|
height = Math.max(height, img.height() + 100);
|
||||||
|
$('#main').height(height);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
@ -8,6 +8,7 @@
|
|||||||
<span class="rating_container">{stars}</span>
|
<span class="rating_container">{stars}</span>
|
||||||
<span class="series">{series}</span>
|
<span class="series">{series}</span>
|
||||||
<a href="#" onclick="show_details(this); return false;" title="{details_tt}">{details}</a>
|
<a href="#" onclick="show_details(this); return false;" title="{details_tt}">{details}</a>
|
||||||
|
<a href="/browse/book/{id}" title="{permalink_tt}">{permalink}</a>
|
||||||
</div>
|
</div>
|
||||||
<div class="title"><strong>{title}</strong></div>
|
<div class="title"><strong>{title}</strong></div>
|
||||||
<div class="authors">{authors}</div>
|
<div class="authors">{authors}</div>
|
||||||
|
@ -197,6 +197,8 @@ class BrowseServer(object):
|
|||||||
self.browse_search)
|
self.browse_search)
|
||||||
connect('browse_details', base_href+'/details/{id}',
|
connect('browse_details', base_href+'/details/{id}',
|
||||||
self.browse_details)
|
self.browse_details)
|
||||||
|
connect('browse_book', base_href+'/book/{id}',
|
||||||
|
self.browse_book)
|
||||||
connect('browse_category_icon', base_href+'/icon/{name}',
|
connect('browse_category_icon', base_href+'/icon/{name}',
|
||||||
self.browse_icon)
|
self.browse_icon)
|
||||||
|
|
||||||
@ -589,23 +591,19 @@ class BrowseServer(object):
|
|||||||
args['series'] = args['series']
|
args['series'] = args['series']
|
||||||
args['details'] = xml(_('Details'), True)
|
args['details'] = xml(_('Details'), True)
|
||||||
args['details_tt'] = xml(_('Show book details'), True)
|
args['details_tt'] = xml(_('Show book details'), True)
|
||||||
|
args['permalink'] = xml(_('Permalink'), True)
|
||||||
|
args['permalink_tt'] = xml(_('A permanent link to this book'), True)
|
||||||
|
|
||||||
summs.append(self.browse_summary_template.format(**args))
|
summs.append(self.browse_summary_template.format(**args))
|
||||||
|
|
||||||
|
|
||||||
return json.dumps('\n'.join(summs), ensure_ascii=False)
|
return json.dumps('\n'.join(summs), ensure_ascii=False)
|
||||||
|
|
||||||
@Endpoint(mimetype='application/json; charset=utf-8')
|
def browse_render_details(self, id_):
|
||||||
def browse_details(self, id=None):
|
|
||||||
try:
|
|
||||||
id_ = int(id)
|
|
||||||
except:
|
|
||||||
raise cherrypy.HTTPError(404, 'invalid id: %r'%id)
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
mi = self.db.get_metadata(id_, index_is_id=True)
|
mi = self.db.get_metadata(id_, index_is_id=True)
|
||||||
except:
|
except:
|
||||||
ans = _('This book has been deleted')
|
return _('This book has been deleted')
|
||||||
else:
|
else:
|
||||||
args, fmt, fmts, fname = self.browse_get_book_args(mi, id_)
|
args, fmt, fmts, fname = self.browse_get_book_args(mi, id_)
|
||||||
args['formats'] = ''
|
args['formats'] = ''
|
||||||
@ -646,13 +644,34 @@ class BrowseServer(object):
|
|||||||
u'<div class="comment">%s</div></div>') % (xml(c[0]),
|
u'<div class="comment">%s</div></div>') % (xml(c[0]),
|
||||||
c[1]) for c in comments]
|
c[1]) for c in comments]
|
||||||
comments = u'<div class="comments">%s</div>'%('\n\n'.join(comments))
|
comments = u'<div class="comments">%s</div>'%('\n\n'.join(comments))
|
||||||
ans = self.browse_details_template.format(id=id_,
|
|
||||||
|
return self.browse_details_template.format(id=id_,
|
||||||
title=xml(mi.title, True), fields=fields,
|
title=xml(mi.title, True), fields=fields,
|
||||||
formats=args['formats'], comments=comments)
|
formats=args['formats'], comments=comments)
|
||||||
|
|
||||||
|
@Endpoint(mimetype='application/json; charset=utf-8')
|
||||||
|
def browse_details(self, id=None):
|
||||||
|
try:
|
||||||
|
id_ = int(id)
|
||||||
|
except:
|
||||||
|
raise cherrypy.HTTPError(404, 'invalid id: %r'%id)
|
||||||
|
|
||||||
|
ans = self.browse_render_details(id_)
|
||||||
|
|
||||||
return json.dumps(ans, ensure_ascii=False)
|
return json.dumps(ans, ensure_ascii=False)
|
||||||
|
|
||||||
|
|
||||||
|
@Endpoint()
|
||||||
|
def browse_book(self, id=None, category_sort=None):
|
||||||
|
try:
|
||||||
|
id_ = int(id)
|
||||||
|
except:
|
||||||
|
raise cherrypy.HTTPError(404, 'invalid id: %r'%id)
|
||||||
|
|
||||||
|
ans = self.browse_render_details(id_)
|
||||||
|
return self.browse_template('').format(
|
||||||
|
title='', script='book();', main=ans)
|
||||||
|
|
||||||
|
|
||||||
# }}}
|
# }}}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user