mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Content server: Allow editing notes from tag browser
This commit is contained in:
parent
c379616be0
commit
a5abcf15ce
@ -368,7 +368,9 @@ def resource_hash_to_url(ctx, scheme, digest, library_id):
|
|||||||
def _get_note(ctx, rd, db, field, item_id, library_id):
|
def _get_note(ctx, rd, db, field, item_id, library_id):
|
||||||
note_data = db.notes_data_for(field, item_id)
|
note_data = db.notes_data_for(field, item_id)
|
||||||
if not note_data:
|
if not note_data:
|
||||||
raise HTTPNotFound(f'Note for {field!r}:{item_id!r} not found')
|
if db.get_item_name(field, item_id):
|
||||||
|
return ''
|
||||||
|
raise HTTPNotFound(f'Item {field!r}:{item_id!r} not found')
|
||||||
note_data.pop('searchable_text', None)
|
note_data.pop('searchable_text', None)
|
||||||
resources = note_data.pop('resource_hashes', None)
|
resources = note_data.pop('resource_hashes', None)
|
||||||
if resources:
|
if resources:
|
||||||
|
@ -193,7 +193,7 @@ def render_metadata(mi, table, book_id, iframe_css): # {{{
|
|||||||
link_maps = mi.link_maps or v'{}'
|
link_maps = mi.link_maps or v'{}'
|
||||||
|
|
||||||
def show_note_action(field, item_id, item_val):
|
def show_note_action(field, item_id, item_val):
|
||||||
show_note(book_id, field, item_id, item_val)
|
show_note(field, item_id, item_val)
|
||||||
|
|
||||||
def add_note_link(field, name, val, parent):
|
def add_note_link(field, name, val, parent):
|
||||||
if mi.items_with_notes[field] and mi.items_with_notes[field][val]:
|
if mi.items_with_notes[field] and mi.items_with_notes[field][val]:
|
||||||
|
@ -87,9 +87,9 @@ def open_book_url(book_id, fmt, extra_query):
|
|||||||
return ans + encode_query(q, '#')
|
return ans + encode_query(q, '#')
|
||||||
|
|
||||||
|
|
||||||
def show_note(book_id, field, item_id, item_value, replace=False, library_id=None, close_action='back', panel='show_note'):
|
def show_note(field, item_id, item_value, replace=False, library_id=None, close_action='back', panel='show_note'):
|
||||||
lid = library_id or current_library_id()
|
lid = library_id or current_library_id()
|
||||||
q = {'book_id':book_id + '', 'field': field, 'item':item_value + '', 'item_id': (item_id or '')+ '', 'panel': panel}
|
q = {'field': field, 'item':item_value + '', 'item_id': (item_id or '')+ '', 'panel': panel}
|
||||||
if panel is 'show_note':
|
if panel is 'show_note':
|
||||||
q.close_action = close_action
|
q.close_action = close_action
|
||||||
if lid:
|
if lid:
|
||||||
|
@ -14,7 +14,7 @@ from session import get_interface_data
|
|||||||
|
|
||||||
from book_list.library_data import library_data, current_library_id, current_virtual_library
|
from book_list.library_data import library_data, current_library_id, current_virtual_library
|
||||||
from book_list.ui import show_panel
|
from book_list.ui import show_panel
|
||||||
from book_list.router import back
|
from book_list.router import back, show_note
|
||||||
from book_list.top_bar import create_top_bar, add_button
|
from book_list.top_bar import create_top_bar, add_button
|
||||||
from book_list.globals import get_session_data
|
from book_list.globals import get_session_data
|
||||||
from book_list.theme import get_color, get_font_size
|
from book_list.theme import get_color, get_font_size
|
||||||
@ -222,20 +222,21 @@ def menu_clicked(i):
|
|||||||
node = node_for_path().children[i]
|
node = node_for_path().children[i]
|
||||||
data = node.data
|
data = node.data
|
||||||
name = data.original_name or data.name or data.sort
|
name = data.original_name or data.name or data.sort
|
||||||
items = []
|
|
||||||
if data.count is not undefined:
|
|
||||||
items.append(_('Count: ') + data.count)
|
|
||||||
if data.avg_rating is not undefined:
|
|
||||||
items.append(_('Rating: {:.1f}').format(data.avg_rating))
|
|
||||||
suffix = ''
|
|
||||||
if items.length:
|
|
||||||
suffix = ' [' + items.join(' ') + ']'
|
|
||||||
|
|
||||||
title = E.h2(
|
title = E.h2(
|
||||||
style='display:flex; align-items: center; border-bottom: solid 1px currentColor; font-weight:bold; font-size:' + get_font_size('title'),
|
style='display:flex; align-items: center; border-bottom: solid 1px currentColor; font-weight:bold; font-size:' + get_font_size('title'),
|
||||||
E.img(src=icon_for_node(node), style='height:2ex; margin-right: 0.5rem'),
|
E.img(src=icon_for_node(node), style='height:2ex; margin-right: 0.5rem'),
|
||||||
E.span(name + suffix)
|
E.span(name)
|
||||||
)
|
)
|
||||||
|
def edit_note(field, item_name):
|
||||||
|
hide_modal()
|
||||||
|
show_note(field, 0, item_name, panel='edit_note')
|
||||||
|
|
||||||
|
if data.category and data.name and library_data.fields_that_support_notes.indexOf(data.category):
|
||||||
|
title.appendChild(E.a(svgicon('pencil'),
|
||||||
|
class_='blue-link', style='margin-left: 0.5em', href='javascript:void(0)',
|
||||||
|
onclick=edit_note.bind(None, data.category, data.name),
|
||||||
|
title=_('Edit or add notes for {}').format(data.name),
|
||||||
|
))
|
||||||
container.appendChild(title)
|
container.appendChild(title)
|
||||||
container.appendChild(E.div(
|
container.appendChild(E.div(
|
||||||
style='margin-top:1ex; margin-bottom: 1ex',
|
style='margin-top:1ex; margin-bottom: 1ex',
|
||||||
@ -280,6 +281,19 @@ def menu_clicked(i):
|
|||||||
f.firstChild.nextSibling.addEventListener('change', def(ev):
|
f.firstChild.nextSibling.addEventListener('change', def(ev):
|
||||||
get_session_data().set('and_search_terms', not ev.target.checked)
|
get_session_data().set('and_search_terms', not ev.target.checked)
|
||||||
)
|
)
|
||||||
|
about_items = v'[]'
|
||||||
|
if data.count is not undefined:
|
||||||
|
about_items.push(_('Number of books: {}').format(data.count))
|
||||||
|
if data.avg_rating is not undefined:
|
||||||
|
about_items.push(_('Average rating of books: {:.1f}').format(data.avg_rating))
|
||||||
|
footer = E.div(
|
||||||
|
style='text-align:left; border-top: solid 1px currentColor; padding-top:1ex; margin-top:0.5ex;',
|
||||||
|
)
|
||||||
|
if about_items.length:
|
||||||
|
footer.appendChild(E.div(style='font-size: smaller', ' '.join(about_items)))
|
||||||
|
if footer.firstChild:
|
||||||
|
container.appendChild(footer)
|
||||||
|
|
||||||
show_modal(create_details)
|
show_modal(create_details)
|
||||||
|
|
||||||
|
|
||||||
|
@ -69,7 +69,7 @@ def on_item_val_based_notes_fetched(load_type, xhr, ev):
|
|||||||
q.html = data.html
|
q.html = data.html
|
||||||
q.item_id = str(data.item_id)
|
q.item_id = str(data.item_id)
|
||||||
current_note_markup = q
|
current_note_markup = q
|
||||||
show_note(q.book_id, q.field, q.item_id, q.item, replace=True, library_id=q.library_id or None, close_action=q.close_action, panel=q.panel)
|
show_note(q.field, q.item_id, q.item, replace=True, library_id=q.library_id or None, close_action=q.close_action, panel=q.panel)
|
||||||
return
|
return
|
||||||
old = container.querySelector('div.loading')
|
old = container.querySelector('div.loading')
|
||||||
p = old.parentNode
|
p = old.parentNode
|
||||||
@ -106,7 +106,7 @@ def on_notes_fetched(load_type, xhr, ev):
|
|||||||
|
|
||||||
def edit_note():
|
def edit_note():
|
||||||
q = parse_url_params()
|
q = parse_url_params()
|
||||||
show_note(q.book_id, q.field, q.item_id, q.item, library_id=q.library_id, panel='edit_note')
|
show_note(q.field, q.item_id, q.item, library_id=q.library_id, panel='edit_note')
|
||||||
|
|
||||||
|
|
||||||
def onkeydown(container_id, close_action, ev):
|
def onkeydown(container_id, close_action, ev):
|
||||||
@ -215,7 +215,7 @@ def init_edit(container_id):
|
|||||||
container = document.getElementById(container_id)
|
container = document.getElementById(container_id)
|
||||||
q = parse_url_params()
|
q = parse_url_params()
|
||||||
close_action, close_icon = get_close_action()
|
close_action, close_icon = get_close_action()
|
||||||
create_top_bar(container, title=_('Edit notes for:') + ' ' + q.item, action=close_action, icon=close_icon, tooltip=_('Discard any changes'))
|
create_top_bar(container, title=_('Edit {}').format(q.item), action=close_action, icon=close_icon, tooltip=_('Discard any changes'))
|
||||||
setup_container(container, close_action)
|
setup_container(container, close_action)
|
||||||
if q.item_id is '0' or q.item_id is 0 or not q.item_id:
|
if q.item_id is '0' or q.item_id is 0 or not q.item_id:
|
||||||
return reroute_with_item_id(container, q)
|
return reroute_with_item_id(container, q)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user