mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
A spot of refactoring to make the cover grid re-useable for the local books view
This commit is contained in:
parent
adcf12042a
commit
01f0376ce8
@ -6,7 +6,6 @@ from dom import clear, set_css, build_rule
|
|||||||
from elementmaker import E
|
from elementmaker import E
|
||||||
from gettext import gettext as _
|
from gettext import gettext as _
|
||||||
|
|
||||||
from book_list.library_data import thumbnail_cache, book_metadata
|
|
||||||
|
|
||||||
COVER_GRID_CLASS = 'book-list-cover-grid'
|
COVER_GRID_CLASS = 'book-list-cover-grid'
|
||||||
THUMBNAIL_MAX_WIDTH = 300
|
THUMBNAIL_MAX_WIDTH = 300
|
||||||
@ -46,21 +45,19 @@ def on_img_load(img, load_type):
|
|||||||
if not div:
|
if not div:
|
||||||
return
|
return
|
||||||
if load_type is not 'load':
|
if load_type is not 'load':
|
||||||
metadata = book_metadata(int(img.dataset.bookId))
|
clear(div)
|
||||||
if metadata:
|
div.appendChild(E.div(
|
||||||
clear(div)
|
E.h2(img.dataset.title, style='text-align:center; font-size:larger; font-weight: bold'),
|
||||||
div.appendChild(E.div(
|
E.div(_('by'), style='text-align: center'),
|
||||||
E.h2(metadata.title, style='text-align:center; font-size:larger; font-weight: bold'),
|
E.h2(img.dataset.authors, 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')
|
||||||
))
|
|
||||||
set_css(div, border='dashed 1px currentColor', border_radius=BORDER_RADIUS+'px')
|
|
||||||
|
|
||||||
def create_item(book_id, show_book_details):
|
def create_item(book_id, metadata, create_image, show_book_details):
|
||||||
metadata = book_metadata(book_id)
|
|
||||||
authors = metadata.authors.join(' & ')
|
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.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)
|
ans = E.div(img, data_book_id=str(book_id), onclick=show_book_details)
|
||||||
return ans
|
return ans
|
||||||
|
|
||||||
|
@ -3,24 +3,32 @@
|
|||||||
from __python__ import hash_literals
|
from __python__ import hash_literals
|
||||||
|
|
||||||
import traceback
|
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 elementmaker import E
|
||||||
from gettext import gettext as _
|
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.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.item_list import create_item, create_item_list
|
||||||
from book_list.top_bar import create_top_bar, add_button
|
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.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.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 dom import add_extra_css, build_rule, clear, ensure_id, set_css
|
||||||
from book_list.item_list import create_item_list, create_item
|
from modals import error_dialog
|
||||||
from book_list.search import init as init_search_panel, set_apply_search, tb_config_panel_handler
|
from session import get_interface_data
|
||||||
|
from utils import conditional_timeout
|
||||||
|
from widgets import create_button, create_spinner
|
||||||
|
|
||||||
CLASS_NAME = 'book-list-container'
|
CLASS_NAME = 'book-list-container'
|
||||||
ALLOWED_MODES = {'cover_grid'}
|
ALLOWED_MODES = {'cover_grid'}
|
||||||
@ -46,21 +54,26 @@ def clear_grid():
|
|||||||
container = document.getElementById(book_list_data.container_id)
|
container = document.getElementById(book_list_data.container_id)
|
||||||
# We replace the div entirely so that any styles associated with it are also removed
|
# We replace the div entirely so that any styles associated with it are also removed
|
||||||
e = component('book_list')
|
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)
|
container.removeChild(e)
|
||||||
book_list_data.shown_book_ids = set()
|
book_list_data.init_grid(bl)
|
||||||
book_list_data.init_grid(container.lastChild.previousSibling)
|
|
||||||
|
|
||||||
|
|
||||||
def show_book_details(book_id):
|
def show_book_details(book_id):
|
||||||
show_panel('book_details', {'book_id':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):
|
def render_id(book_id):
|
||||||
l = book_list_data.shown_book_ids.length
|
l = book_list_data.shown_book_ids.length
|
||||||
book_list_data.shown_book_ids.add(book_id)
|
book_list_data.shown_book_ids.add(book_id)
|
||||||
if l < book_list_data.shown_book_ids.length:
|
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):
|
def render_ids(book_ids):
|
||||||
@ -76,7 +89,7 @@ def apply_view_mode(mode=DEFAULT_MODE):
|
|||||||
if book_list_data.mode is mode:
|
if book_list_data.mode is mode:
|
||||||
return
|
return
|
||||||
if mode not in ALLOWED_MODES:
|
if mode not in ALLOWED_MODES:
|
||||||
mode = 'cover_grid'
|
mode = DEFAULT_MODE
|
||||||
book_list_data.mode = mode
|
book_list_data.mode = mode
|
||||||
if mode is 'cover_grid':
|
if mode is 'cover_grid':
|
||||||
book_list_data.render_book = create_cover_grid_item
|
book_list_data.render_book = create_cover_grid_item
|
||||||
|
Loading…
x
Reference in New Issue
Block a user