diff --git a/src/calibre/srv/content.py b/src/calibre/srv/content.py index 6509a56b25..cd44c22e17 100644 --- a/src/calibre/srv/content.py +++ b/src/calibre/srv/content.py @@ -449,6 +449,6 @@ def set_note(ctx, rd, field, item_id, library_id): db_html = re.sub('|'.join(map(re.escape, db_replacements)), lambda m: db_replacements[m.group()], html) if srv_replacements: srv_html = re.sub('|'.join(map(re.escape, srv_replacements)), lambda m: srv_replacements[m.group()], html) - db.set_notes_for(field, item_id, db_html, searchable_text, resources, True) + db.set_notes_for(field, item_id, db_html, searchable_text, resources) rd.outheaders['Content-Type'] = 'text/html; charset=UTF-8' return srv_html diff --git a/src/pyj/book_list/comments_editor.pyj b/src/pyj/book_list/comments_editor.pyj index 99c4e24ba3..b0cf3e2900 100644 --- a/src/pyj/book_list/comments_editor.pyj +++ b/src/pyj/book_list/comments_editor.pyj @@ -443,17 +443,24 @@ class CommentsEditorBoss: registry = {} -def add_editor(editor): +def destroy_removed_editors(): for k in Object.keys(registry): if not document.getElementById(k): registry[k].destroy() v'delete registry[k]' + +def add_editor(editor): + destroy_removed_editors() registry[editor.id] = editor +def destroy_editor(container): + v'delete registry[container.querySelector("iframe").id]' + + class Editor: - def __init__(self, iframe_kw): + def __init__(self, iframe_kw, insert_image_files): handlers = { 'ready': self.on_iframe_ready, 'html': self.on_html_received, @@ -467,6 +474,7 @@ class Editor: self.pending_get_html = v'[]' self.get_html_callbacks = v'[]' self.iframe_obj = iframe + self.insert_image_files = v'!!insert_image_files' def init(self): self.iframe_wrapper.init() @@ -494,7 +502,7 @@ class Editor: self.pending_set_html = None if self.pending_get_html.length > 0: for x in self.pending_get_html: - self.get_html(x.proceed, x.extract_images) + self.get_html(x) def set_html(self, html): if not self.ready: @@ -503,12 +511,12 @@ class Editor: rgba = get_color_as_rgba('window-foreground') self.iframe_wrapper.send_message('set_html', html=html, color_scheme=color_scheme(), color=f'rgba({rgba[0]},{rgba[1]},{rgba[2]},{rgba[3]})') - def get_html(self, proceed, extract_images): + def get_html(self, proceed): self.get_html_callbacks.push(proceed) if self.ready: - self.iframe_wrapper.send_message('get_html', extract_images=v'!!extract_images') + self.iframe_wrapper.send_message('get_html', extract_images=self.insert_image_files) else: - self.pending_get_html.push({'proceed': proceed, 'extract_images': v'!!extract_images'}) + self.pending_get_html.push(proceed) def on_html_received(self, data): if self.get_html_callbacks.length: @@ -531,11 +539,11 @@ class Editor: div.classList.remove('activated') -def create_editor(): +def create_editor(insert_image_files): iframe_kw = { 'sandbox': 'allow-scripts', 'seamless': True, 'style': 'flex-grow: 10; border: solid 1px currentColor' } - editor = Editor(iframe_kw) + editor = Editor(iframe_kw, insert_image_files) iframe = editor.iframe_obj v'delete editor.iframe_obj' add_editor(editor) @@ -560,8 +568,7 @@ def add_action(toolbar, ac_name, action, editor_id): def create_comments_editor(container, options): - iframe, editor = create_editor() - editor.insert_image_files = v'!!options.insert_image_files' + iframe, editor = create_editor(options.insert_image_files) toolbars = E.div(style='flex-grow: 0') toolbar1 = E.div(class_=TOOLBAR_CLASS) toolbar2 = E.div(class_=TOOLBAR_CLASS) @@ -606,11 +613,11 @@ def set_comments_html(container, html): editor.set_html(html or '') -def get_comments_html(container, proceed, extract_images): +def get_comments_html(container, proceed): iframe = container.querySelector('iframe') eid = iframe.getAttribute('id') editor = registry[eid] - editor.get_html(proceed, extract_images) + editor.get_html(proceed) def develop(container): diff --git a/src/pyj/book_list/show_note.pyj b/src/pyj/book_list/show_note.pyj index 3866c5f45e..9780465ac3 100644 --- a/src/pyj/book_list/show_note.pyj +++ b/src/pyj/book_list/show_note.pyj @@ -6,7 +6,8 @@ from elementmaker import E from ajax import ajax from book_list.comments_editor import ( - create_comments_editor, focus_comments_editor, get_comments_html, set_comments_html + create_comments_editor, destroy_editor, focus_comments_editor, get_comments_html, + set_comments_html ) from book_list.details_list import sandbox_css from book_list.router import back, home, show_note @@ -162,12 +163,13 @@ def save(container_id): return q.html = xhr.responseText current_note_markup = q + destroy_editor(c) close_action() def on_got_html(html, extra_data): ajax_send_progress_dialog(url, {'html': html, 'searchable_text': extra_data.text, 'images': extra_data.images}, on_complete, _('Sending note data to calibre server...')) - get_comments_html(c, on_got_html, True) + get_comments_html(c, on_got_html) def init_edit(container_id):