Merge from trunk

This commit is contained in:
Charles Haley 2010-10-16 16:01:12 +01:00
commit 9462245394
2 changed files with 69 additions and 47 deletions

View File

@ -192,14 +192,19 @@ h2.library_name {
.toplevel li {
margin: 0.75em;
padding: 0.75em;
text-align: center;
cursor: pointer;
font-size: larger;
border-radius: 15px;
-moz-border-radius: 15px;
-webkit-border-radius: 15px;
}
.toplevel li img {
vertical-align: middle;
margin-right: 2em;
}
.toplevel li:hover {
background-color: #d6d3c9;
font-weight: bold;

View File

@ -16,6 +16,7 @@ from calibre import isbytestring, force_unicode, prepare_string_for_xml as xml
from calibre.utils.ordered_dict import OrderedDict
from calibre.utils.filenames import ascii_filename
from calibre.utils.config import prefs
from calibre.utils.magick import Image
from calibre.library.comments import comments_to_html
from calibre.library.server import custom_fields_to_display
from calibre.library.field_metadata import category_icon_map
@ -193,11 +194,18 @@ class BrowseServer(object):
self.browse_search)
connect('browse_details', base_href+'/details/{id}',
self.browse_details)
connect('browse_category_icon', base_href+'/icon/{name}',
self.browse_icon)
# Templates {{{
def browse_template(self, sort, category=True, initial_search=''):
def generate():
if not hasattr(self, '__browse_template__') or \
self.opts.develop:
self.__browse_template__ = \
P('content_server/browse/browse.html', data=True).decode('utf-8')
ans = self.__browse_template__
scn = 'calibre_browse_server_sort_'
if category:
@ -214,8 +222,6 @@ class BrowseServer(object):
added.add(n)
sort_opts.append((x, n))
ans = P('content_server/browse/browse.html',
data=True).decode('utf-8')
ans = ans.replace('{sort_select_label}', xml(_('Sort by')+':'))
ans = ans.replace('{sort_cookie_name}', scn)
opts = ['<option %svalue="%s">%s</option>' % (
@ -233,10 +239,6 @@ class BrowseServer(object):
ans = ans.replace('{initial_search}', initial_search)
return ans
if self.opts.develop:
return generate()
if not hasattr(self, '__browse_template__'):
self.__browse_template__ = generate()
return self.__browse_template__
@property
@ -258,11 +260,24 @@ class BrowseServer(object):
# }}}
# Catalogs {{{
def browse_icon(self, name='blank.png'):
try:
data = I(name, data=True)
except:
raise cherrypy.HTTPError(404, 'no icon named: %r'%name)
img = Image()
img.load(data)
img.size = (48, 48)
cherrypy.response.headers['Content-Type'] = 'image/png'
cherrypy.response.headers['Last-Modified'] = self.last_modified(self.build_time)
return img.export('png')
def browse_toplevel(self):
categories = self.categories_cache()
category_meta = self.db.field_metadata
cats = [
(_('Newest'), 'newest'),
(_('Newest'), 'newest', 'blank.png'),
]
def getter(x):
@ -282,18 +297,20 @@ class BrowseServer(object):
continue
# get the icon files
if category in category_icon_map:
icon = I(category_icon_map[category])
icon = category_icon_map[category]
elif meta['is_custom']:
icon = I(category_icon_map[':custom'])
icon = category_icon_map[':custom']
elif meta['kind'] == 'user':
icon = I(category_icon_map[':user'])
icon = category_icon_map[':user']
else:
icon = None # shouldn't get here
icon = 'blank.png'
cats.append((meta['name'], category, icon))
cats.append((meta['name'], category))
cats = ['<li title="{2} {0}">{0}<span>/browse/category/{1}</span></li>'\
.format(xml(x, True), xml(quote(y)), xml(_('Browse books by')))
for x, y in cats]
cats = [('<li title="{2} {0}"><img src="{src}" alt="{0}" /> {0}'
'<span>/browse/category/{1}</span></li>')
.format(xml(x, True), xml(quote(y)), xml(_('Browse books by')),
src='/browse/icon/'+z)
for x, y, z in cats]
main = '<div class="toplevel"><h3>{0}</h3><ul>{1}</ul></div>'\
.format(_('Choose a category to browse by:'), '\n\n'.join(cats))