diff --git a/src/pyj/book_list/book_details.pyj b/src/pyj/book_list/book_details.pyj index 4274001ac4..19a0ebbe15 100644 --- a/src/pyj/book_list/book_details.pyj +++ b/src/pyj/book_list/book_details.pyj @@ -14,7 +14,7 @@ from book_list.library_data import ( current_virtual_library, download_url, library_data, load_status, set_book_metadata ) -from book_list.router import back, home, open_book, report_a_load_failure, show_note_url +from book_list.router import back, home, open_book, report_a_load_failure, show_note from book_list.theme import ( color_scheme, get_color, get_color_as_rgba, get_font_size ) @@ -192,12 +192,15 @@ def render_metadata(mi, table, book_id, iframe_css): # {{{ comments = v'[]' link_maps = mi.link_maps or v'{}' + def show_note_action(field, name, item_id, item_val): + show_note(book_id, field, item_id, item_val) + def add_note_link(field, name, val, parent): if mi.items_with_notes[field] and mi.items_with_notes[field][val]: parent.appendChild(document.createTextNode(' ')) parent.appendChild(E.a( - svgicon('pencil'), title=_('Show notes for: {}').format(val), href=show_note_url( - book_id, field, val, close_action='close_window'), target='_new', class_='blue-link')) + svgicon('pencil'), title=_('Show notes for: {}').format(val), href='javascript:void(0)', onclick=show_note_action.bind( + None, book_id, field, mi.items_with_notes[field][val], val), class_='blue-link')) def add_row(field, name, val, is_searchable=False, is_html=False, join=None, search_text=None, use_quotes=True): if val is undefined or val is None: diff --git a/src/pyj/book_list/main.pyj b/src/pyj/book_list/main.pyj index cb0fd9cd69..e40c8fe9af 100644 --- a/src/pyj/book_list/main.pyj +++ b/src/pyj/book_list/main.pyj @@ -29,6 +29,7 @@ import book_list.book_details # noqa: unused-import import book_list.edit_metadata # noqa: unused-import import book_list.convert_book # noqa: unused-import import book_list.fts # noqa: unused-import +import book_list.show_note # noqa: unused-import def remove_initial_progress_bar(): diff --git a/src/pyj/book_list/router.pyj b/src/pyj/book_list/router.pyj index d23015edea..2c6ce43761 100644 --- a/src/pyj/book_list/router.pyj +++ b/src/pyj/book_list/router.pyj @@ -87,15 +87,23 @@ def open_book_url(book_id, fmt, extra_query): return ans + encode_query(q, '#') -def show_note_url(book_id, field, item_value, close_action='back'): - lid = current_library_id() +def show_note_url(book_id, field, item_id, item_value, library_id=None, close_action='back'): + lid = library_id or current_library_id() ans = absolute_path('') - q = {'book_id':book_id, 'field': field, 'item':item_value, 'panel': 'show_note', 'close_action': close_action} + q = {'book_id':book_id, 'field': field, 'item':item_value, 'item_id': item_id, 'panel': 'show_note', 'close_action': close_action} if lid: q.library_id = lid return ans + encode_query(q, '#') +def show_note(book_id, field, item_id, item_value, replace=False, library_id=None, close_action='back'): + lid = library_id or current_library_id() + q = {'book_id':book_id, 'field': field, 'item':item_value, 'item_id': item_id, 'panel': 'show_note', 'close_action': close_action} + if lid: + q.library_id = lid + push_state(q, replace=replace) + + def push_state(query, replace=False, mode='book_list', call_handler=True): query = {k:query[k] for k in query if query[k]} if mode is not 'book_list': diff --git a/src/pyj/book_list/show_note.pyj b/src/pyj/book_list/show_note.pyj new file mode 100644 index 0000000000..ea48fe5a0c --- /dev/null +++ b/src/pyj/book_list/show_note.pyj @@ -0,0 +1,21 @@ +# vim:fileencoding=utf-8 +# License: GPL v3 Copyright: 2023, Kovid Goyal +from __python__ import bound_methods, hash_literals + +from book_list.router import back, home +from book_list.top_bar import create_top_bar +from book_list.ui import set_panel_handler +from utils import parse_url_params + + +def init(container_id): + container = document.getElementById(container_id) + close_action, close_icon = back, 'close' + q = parse_url_params() + ca = q.close_action + if ca is 'home': + close_action, close_icon = def(): home();, 'home' + create_top_bar(container, title=q.item, action=close_action, icon=close_icon) + + +set_panel_handler('show_note', init)