mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Implement thumbnails for the custom list
This commit is contained in:
parent
0f18fdefa5
commit
3234e2fb0c
@ -6,7 +6,7 @@ from __python__ import bound_methods, hash_literals
|
|||||||
from elementmaker import E
|
from elementmaker import E
|
||||||
from gettext import gettext as _
|
from gettext import gettext as _
|
||||||
|
|
||||||
from book_list.details_list import THUMBNAIL_MAX_HEIGHT, sandbox_css
|
from book_list.details_list import THUMBNAIL_MAX_HEIGHT, sandbox_css, BORDER_RADIUS
|
||||||
from book_list.library_data import library_data
|
from book_list.library_data import library_data
|
||||||
from date import format_date
|
from date import format_date
|
||||||
from dom import build_rule, clear, set_css, svgicon
|
from dom import build_rule, clear, set_css, svgicon
|
||||||
@ -22,8 +22,12 @@ def custom_list_css():
|
|||||||
sel = '.' + CUSTOM_LIST_CLASS
|
sel = '.' + CUSTOM_LIST_CLASS
|
||||||
ans += build_rule(sel, cursor='pointer', user_select='none')
|
ans += build_rule(sel, cursor='pointer', user_select='none')
|
||||||
sel += ' .' + ITEM_CLASS
|
sel += ' .' + ITEM_CLASS
|
||||||
ans += build_rule(sel, margin='1ex 1em', padding_bottom='1ex', overflow='hidden', border_bottom='solid 1px currentColor')
|
ans += build_rule(sel, margin='1ex 1em', padding_bottom='1ex', border_bottom='solid 1px currentColor')
|
||||||
|
ans += build_rule(f'{sel}:hover .custom-list-left', transform='scale(1.2)')
|
||||||
|
ans += build_rule(f'{sel}:active .custom-list-left', transform='scale(2)')
|
||||||
|
s = sel + ' .custom-list-left'
|
||||||
|
ans += build_rule(s, margin_right='1em')
|
||||||
|
ans += build_rule(s + ' > img', border_radius=BORDER_RADIUS+'px')
|
||||||
sel += ' iframe'
|
sel += ' iframe'
|
||||||
# To enable clicking anywhere on the item to load book details to work, we
|
# To enable clicking anywhere on the item to load book details to work, we
|
||||||
# have to set pointer-events: none
|
# have to set pointer-events: none
|
||||||
@ -244,10 +248,25 @@ def init(container):
|
|||||||
container.appendChild(E.div(class_=CUSTOM_LIST_CLASS))
|
container.appendChild(E.div(class_=CUSTOM_LIST_CLASS))
|
||||||
|
|
||||||
|
|
||||||
|
def on_img_load(img, load_type):
|
||||||
|
div = img.parentNode
|
||||||
|
if not div:
|
||||||
|
return
|
||||||
|
if load_type is not 'load':
|
||||||
|
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, metadata, create_image, show_book_details):
|
def create_item(book_id, metadata, create_image, show_book_details):
|
||||||
template = default_template()
|
template = default_template()
|
||||||
text_data = render_template_text(template, book_id, metadata)
|
text_data = render_template_text(template, book_id, metadata)
|
||||||
text_data.style.flexGrow = '10'
|
text_data.style.flexGrow = '10'
|
||||||
|
text_data.style.overflow = 'hidden'
|
||||||
if template.thumbnail:
|
if template.thumbnail:
|
||||||
height = f'{template.thumbnail_height}px'
|
height = f'{template.thumbnail_height}px'
|
||||||
else:
|
else:
|
||||||
@ -262,7 +281,16 @@ def create_item(book_id, metadata, create_image, show_book_details):
|
|||||||
class_=ITEM_CLASS,
|
class_=ITEM_CLASS,
|
||||||
)
|
)
|
||||||
if template.thumbnail:
|
if template.thumbnail:
|
||||||
pass
|
h = template.thumbnail_height
|
||||||
|
w = int(0.75 * h)
|
||||||
|
img = create_image(book_id, w, h, on_img_load)
|
||||||
|
authors = metadata.authors.join(' & ') if metadata.authors else _('Unknown')
|
||||||
|
img.setAttribute('alt', _('{} by {}').format(metadata.title, authors))
|
||||||
|
img.dataset.title, img.dataset.authors = metadata.title, authors
|
||||||
|
img.style.maxWidth = w + 'px'
|
||||||
|
img.style.maxHeight = h + 'px'
|
||||||
|
img_div = E.div(img, class_='custom-list-left', style=f'min-width: {w}px')
|
||||||
|
ans.appendChild(img_div)
|
||||||
ans.appendChild(text_data)
|
ans.appendChild(text_data)
|
||||||
ans.addEventListener('click', show_book_details, True)
|
ans.addEventListener('click', show_book_details, True)
|
||||||
return ans
|
return ans
|
||||||
|
Loading…
x
Reference in New Issue
Block a user