diff --git a/src/calibre/library/server/browse.py b/src/calibre/library/server/browse.py index d1476b34e1..d3cfc0e84a 100644 --- a/src/calibre/library/server/browse.py +++ b/src/calibre/library/server/browse.py @@ -200,46 +200,45 @@ class BrowseServer(object): # Templates {{{ def browse_template(self, sort, category=True, initial_search=''): - def generate(): - scn = 'calibre_browse_server_sort_' + if not hasattr(self, '__browse_template__') or \ + self.opts.develop: + self.__browse_template__ = \ + P('content_server/browse/browse.html', data=True).decode('utf-8') - if category: - sort_opts = [('rating', _('Average rating')), ('name', - _('Name')), ('popularity', _('Popularity'))] - scn += 'category' - else: - scn += 'list' - fm = self.db.field_metadata - sort_opts, added = [], set([]) - for x in fm.sortable_field_keys(): - n = fm[x]['name'] - if n not in added: - added.add(n) - sort_opts.append((x, n)) + ans = self.__browse_template__ + scn = 'calibre_browse_server_sort_' - 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 = ['' % ( - 'selected="selected" ' if k==sort else '', - xml(k), xml(n), ) for k, n in - sorted(sort_opts, key=operator.itemgetter(1)) if k and n] - ans = ans.replace('{sort_select_options}', ('\n'+' '*20).join(opts)) - lp = self.db.library_path - if isbytestring(lp): - lp = force_unicode(lp, filesystem_encoding) - if isinstance(ans, unicode): - ans = ans.encode('utf-8') - ans = ans.replace('{library_name}', xml(os.path.basename(lp))) - ans = ans.replace('{library_path}', xml(lp, True)) - ans = ans.replace('{initial_search}', initial_search) - return ans + if category: + sort_opts = [('rating', _('Average rating')), ('name', + _('Name')), ('popularity', _('Popularity'))] + scn += 'category' + else: + scn += 'list' + fm = self.db.field_metadata + sort_opts, added = [], set([]) + for x in fm.sortable_field_keys(): + n = fm[x]['name'] + if n not in added: + added.add(n) + sort_opts.append((x, n)) + + ans = ans.replace('{sort_select_label}', xml(_('Sort by')+':')) + ans = ans.replace('{sort_cookie_name}', scn) + opts = ['' % ( + 'selected="selected" ' if k==sort else '', + xml(k), xml(n), ) for k, n in + sorted(sort_opts, key=operator.itemgetter(1)) if k and n] + ans = ans.replace('{sort_select_options}', ('\n'+' '*20).join(opts)) + lp = self.db.library_path + if isbytestring(lp): + lp = force_unicode(lp, filesystem_encoding) + if isinstance(ans, unicode): + ans = ans.encode('utf-8') + ans = ans.replace('{library_name}', xml(os.path.basename(lp))) + ans = ans.replace('{library_path}', xml(lp, True)) + 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