diff --git a/src/pyj/book_list/cover_grid.pyj b/src/pyj/book_list/cover_grid.pyj index 71a45c952c..9aa3c0abe1 100644 --- a/src/pyj/book_list/cover_grid.pyj +++ b/src/pyj/book_list/cover_grid.pyj @@ -6,7 +6,6 @@ from dom import clear, set_css, build_rule from elementmaker import E from gettext import gettext as _ -from book_list.library_data import thumbnail_cache, book_metadata COVER_GRID_CLASS = 'book-list-cover-grid' THUMBNAIL_MAX_WIDTH = 300 @@ -46,21 +45,19 @@ def on_img_load(img, load_type): if not div: return if load_type is not 'load': - metadata = book_metadata(int(img.dataset.bookId)) - if metadata: - clear(div) - div.appendChild(E.div( - E.h2(metadata.title, style='text-align:center; font-size:larger; font-weight: bold'), - E.div(_('by'), style='text-align: center'), - E.h2(metadata.authors.join(' & '), style='text-align:center; font-size:larger; font-weight: bold') - )) - set_css(div, border='dashed 1px currentColor', border_radius=BORDER_RADIUS+'px') + clear(div) + div.appendChild(E.div( + E.h2(img.dataset.title, style='text-align:center; font-size:larger; font-weight: bold'), + E.div(_('by'), style='text-align: center'), + E.h2(img.dataset.authors, style='text-align:center; font-size:larger; font-weight: bold') + )) + set_css(div, border='dashed 1px currentColor', border_radius=BORDER_RADIUS+'px') -def create_item(book_id, show_book_details): - metadata = book_metadata(book_id) +def create_item(book_id, metadata, create_image, show_book_details): authors = metadata.authors.join(' & ') - img = thumbnail_cache.get(book_id, THUMBNAIL_MAX_WIDTH, THUMBNAIL_MAX_HEIGHT, on_img_load) + img = create_image(book_id, THUMBNAIL_MAX_WIDTH, THUMBNAIL_MAX_HEIGHT, on_img_load) img.setAttribute('alt', _('{} by {}').format(metadata.title, authors)) + img.dataset.title, img.dataset.authors = metadata.title, authors ans = E.div(img, data_book_id=str(book_id), onclick=show_book_details) return ans diff --git a/src/pyj/book_list/views.pyj b/src/pyj/book_list/views.pyj index f97aab741a..1c5c172817 100644 --- a/src/pyj/book_list/views.pyj +++ b/src/pyj/book_list/views.pyj @@ -3,24 +3,32 @@ from __python__ import hash_literals import traceback - -from ajax import ajax_send -from dom import add_extra_css, clear, ensure_id, set_css, build_rule from elementmaker import E from gettext import gettext as _ -from modals import error_dialog -from utils import conditional_timeout -from session import get_interface_data -from widgets import create_button, create_spinner +from ajax import ajax_send +from book_list.cover_grid import ( + append_item as cover_grid_append_item, cover_grid_css, + create_item as create_cover_grid_item, init as init_cover_grid +) from book_list.globals import get_session_data -from book_list.cover_grid import cover_grid_css, create_item as create_cover_grid_item, init as init_cover_grid, append_item as cover_grid_append_item -from book_list.top_bar import create_top_bar, add_button +from book_list.item_list import create_item, create_item_list +from book_list.library_data import ( + book_metadata, current_library_id, current_sorted_field, + ensure_current_library_data, library_data, load_status, loaded_books_query, + thumbnail_cache, url_books_query +) from book_list.router import back, update_window_title +from book_list.search import ( + init as init_search_panel, set_apply_search, tb_config_panel_handler +) +from book_list.top_bar import add_button, create_top_bar from book_list.ui import set_panel_handler, show_panel -from book_list.library_data import load_status, ensure_current_library_data, library_data, current_sorted_field, loaded_books_query, url_books_query, current_library_id -from book_list.item_list import create_item_list, create_item -from book_list.search import init as init_search_panel, set_apply_search, tb_config_panel_handler +from dom import add_extra_css, build_rule, clear, ensure_id, set_css +from modals import error_dialog +from session import get_interface_data +from utils import conditional_timeout +from widgets import create_button, create_spinner CLASS_NAME = 'book-list-container' ALLOWED_MODES = {'cover_grid'} @@ -46,21 +54,26 @@ def clear_grid(): container = document.getElementById(book_list_data.container_id) # We replace the div entirely so that any styles associated with it are also removed e = component('book_list') - container.insertBefore(E.div(data_component='book_list'), e) + bl = E.div(data_component='book_list') + container.insertBefore(bl, e) container.removeChild(e) - book_list_data.shown_book_ids = set() - book_list_data.init_grid(container.lastChild.previousSibling) + book_list_data.init_grid(bl) def show_book_details(book_id): show_panel('book_details', {'book_id':book_id}) +def create_image(book_id, max_width, max_height, on_load): + return thumbnail_cache.get(book_id, max_width, max_height, on_load) + + def render_id(book_id): l = book_list_data.shown_book_ids.length book_list_data.shown_book_ids.add(book_id) if l < book_list_data.shown_book_ids.length: - return book_list_data.render_book(book_id, show_book_details.bind(None, book_id)) + metadata = book_metadata(book_id) + return book_list_data.render_book(book_id, metadata, create_image, show_book_details.bind(None, book_id)) def render_ids(book_ids): @@ -76,7 +89,7 @@ def apply_view_mode(mode=DEFAULT_MODE): if book_list_data.mode is mode: return if mode not in ALLOWED_MODES: - mode = 'cover_grid' + mode = DEFAULT_MODE book_list_data.mode = mode if mode is 'cover_grid': book_list_data.render_book = create_cover_grid_item