From 29bf9b022daedcb57569570459b5b440cc2af8bf Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Tue, 10 Nov 2015 17:36:14 +0530 Subject: [PATCH] Start work on button to fetch more books --- src/pyj/book_list/views.pyj | 54 ++++++++++++++++++++++++++++--------- 1 file changed, 41 insertions(+), 13 deletions(-) diff --git a/src/pyj/book_list/views.pyj b/src/pyj/book_list/views.pyj index 3bf851f28c..056d5caed5 100644 --- a/src/pyj/book_list/views.pyj +++ b/src/pyj/book_list/views.pyj @@ -19,8 +19,8 @@ class BooksView: nonlocal bv_counter bv_counter += 1 self.interface_data = interface_data - self.search_result = interface_data['search_result'] - self.metadata_map = interface_data['metadata'] + self.is_fetching = False + self.shown_book_ids = {} self.container_id = 'books-view-' + bv_counter style = build_rule('#' + self.container_id + ' .cover_grid img:hover', transform='scale(1.2)') style += build_rule('#' + self.container_id + ' .cover_grid img:active', transform='scale(2.0)') @@ -28,15 +28,24 @@ class BooksView: id=self.container_id, style='display:block', E.style(style), E.div(), - E.div(id='get-more-books') + E.div() ) document.body.appendChild(div) self.set_view_mode(get_session_data().get('view_mode')) + self.create_more_button(div) + + def create_more_button(self, div): more = div.lastChild more.appendChild(create_button( - _('Show more books'), 'cloud-download' + _('Show more books'), 'cloud-download', def():self.get_more_books() )) + set_css(more.firstChild, display='block', margin_left='auto', margin_right='auto') set_css(more, font_size='1.5rem', padding_top='1.5rem', margin_bottom='1.5rem', width='100%', text_align='center') + more.appendChild(E.div( + E.i(class_='fa fa-lg fa-cloud-download'), '\xa0' + _('Fetching metadata for more books, please wait') + '…', + style='margin-left:auto; margin-right:auto; display:none') + ) + self.update_fetching_status() def set_view_mode(self, mode='cover_grid'): if self.mode == mode: @@ -76,6 +85,34 @@ class BooksView: c.insertBefore(E.div(), c.lastChild) self.init_grid() + def render_ids(self): + book_ids = self.interface_data['search_result']['book_ids'] + self.shown_book_ids = {} + div = self.grid + for book_id in book_ids: + div.appendChild(self.render_book(book_id)) + self.shown_book_ids[book_id] = True + + def on_resize(self): + if self.resize_grid: + self.resize_grid() + + def update_fetching_status(self): + c = self.container + more = c.lastChild + if self.is_fetching: + more.firstChild.style.display = 'none' + more.lastChild.style.display = 'block' + elif self.interface_data['search_result']['total_num'] > self.interface_data['search_result']['book_ids'].length: + more.firstChild.style.display = 'block' + more.lastChild.style.display = 'none' + else: + more.firstChild.style.display = 'none' + more.lastChild.style.display = 'none' + + def get_more_books(self): + self.update_fetching_status() + # Cover grid {{{ def init_cover_grid(self): @@ -117,13 +154,4 @@ class BooksView: # }}} - def render_ids(self, book_ids=None): - if book_ids is None: - book_ids = self.search_result['book_ids'] - div = self.grid - for book_id in book_ids: - div.appendChild(self.render_book(book_id)) - def on_resize(self): - if self.resize_grid: - self.resize_grid()