mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-31 14:33:54 -04:00
Cleanup editor API
This commit is contained in:
parent
a583773bfe
commit
ed980a4c3e
@ -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)
|
db_html = re.sub('|'.join(map(re.escape, db_replacements)), lambda m: db_replacements[m.group()], html)
|
||||||
if srv_replacements:
|
if srv_replacements:
|
||||||
srv_html = re.sub('|'.join(map(re.escape, srv_replacements)), lambda m: srv_replacements[m.group()], html)
|
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'
|
rd.outheaders['Content-Type'] = 'text/html; charset=UTF-8'
|
||||||
return srv_html
|
return srv_html
|
||||||
|
@ -443,17 +443,24 @@ class CommentsEditorBoss:
|
|||||||
|
|
||||||
registry = {}
|
registry = {}
|
||||||
|
|
||||||
def add_editor(editor):
|
def destroy_removed_editors():
|
||||||
for k in Object.keys(registry):
|
for k in Object.keys(registry):
|
||||||
if not document.getElementById(k):
|
if not document.getElementById(k):
|
||||||
registry[k].destroy()
|
registry[k].destroy()
|
||||||
v'delete registry[k]'
|
v'delete registry[k]'
|
||||||
|
|
||||||
|
def add_editor(editor):
|
||||||
|
destroy_removed_editors()
|
||||||
registry[editor.id] = editor
|
registry[editor.id] = editor
|
||||||
|
|
||||||
|
|
||||||
|
def destroy_editor(container):
|
||||||
|
v'delete registry[container.querySelector("iframe").id]'
|
||||||
|
|
||||||
|
|
||||||
class Editor:
|
class Editor:
|
||||||
|
|
||||||
def __init__(self, iframe_kw):
|
def __init__(self, iframe_kw, insert_image_files):
|
||||||
handlers = {
|
handlers = {
|
||||||
'ready': self.on_iframe_ready,
|
'ready': self.on_iframe_ready,
|
||||||
'html': self.on_html_received,
|
'html': self.on_html_received,
|
||||||
@ -467,6 +474,7 @@ class Editor:
|
|||||||
self.pending_get_html = v'[]'
|
self.pending_get_html = v'[]'
|
||||||
self.get_html_callbacks = v'[]'
|
self.get_html_callbacks = v'[]'
|
||||||
self.iframe_obj = iframe
|
self.iframe_obj = iframe
|
||||||
|
self.insert_image_files = v'!!insert_image_files'
|
||||||
|
|
||||||
def init(self):
|
def init(self):
|
||||||
self.iframe_wrapper.init()
|
self.iframe_wrapper.init()
|
||||||
@ -494,7 +502,7 @@ class Editor:
|
|||||||
self.pending_set_html = None
|
self.pending_set_html = None
|
||||||
if self.pending_get_html.length > 0:
|
if self.pending_get_html.length > 0:
|
||||||
for x in self.pending_get_html:
|
for x in self.pending_get_html:
|
||||||
self.get_html(x.proceed, x.extract_images)
|
self.get_html(x)
|
||||||
|
|
||||||
def set_html(self, html):
|
def set_html(self, html):
|
||||||
if not self.ready:
|
if not self.ready:
|
||||||
@ -503,12 +511,12 @@ class Editor:
|
|||||||
rgba = get_color_as_rgba('window-foreground')
|
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]})')
|
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)
|
self.get_html_callbacks.push(proceed)
|
||||||
if self.ready:
|
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:
|
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):
|
def on_html_received(self, data):
|
||||||
if self.get_html_callbacks.length:
|
if self.get_html_callbacks.length:
|
||||||
@ -531,11 +539,11 @@ class Editor:
|
|||||||
div.classList.remove('activated')
|
div.classList.remove('activated')
|
||||||
|
|
||||||
|
|
||||||
def create_editor():
|
def create_editor(insert_image_files):
|
||||||
iframe_kw = {
|
iframe_kw = {
|
||||||
'sandbox': 'allow-scripts', 'seamless': True, 'style': 'flex-grow: 10; border: solid 1px currentColor'
|
'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
|
iframe = editor.iframe_obj
|
||||||
v'delete editor.iframe_obj'
|
v'delete editor.iframe_obj'
|
||||||
add_editor(editor)
|
add_editor(editor)
|
||||||
@ -560,8 +568,7 @@ def add_action(toolbar, ac_name, action, editor_id):
|
|||||||
|
|
||||||
|
|
||||||
def create_comments_editor(container, options):
|
def create_comments_editor(container, options):
|
||||||
iframe, editor = create_editor()
|
iframe, editor = create_editor(options.insert_image_files)
|
||||||
editor.insert_image_files = v'!!options.insert_image_files'
|
|
||||||
toolbars = E.div(style='flex-grow: 0')
|
toolbars = E.div(style='flex-grow: 0')
|
||||||
toolbar1 = E.div(class_=TOOLBAR_CLASS)
|
toolbar1 = E.div(class_=TOOLBAR_CLASS)
|
||||||
toolbar2 = 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 '')
|
editor.set_html(html or '')
|
||||||
|
|
||||||
|
|
||||||
def get_comments_html(container, proceed, extract_images):
|
def get_comments_html(container, proceed):
|
||||||
iframe = container.querySelector('iframe')
|
iframe = container.querySelector('iframe')
|
||||||
eid = iframe.getAttribute('id')
|
eid = iframe.getAttribute('id')
|
||||||
editor = registry[eid]
|
editor = registry[eid]
|
||||||
editor.get_html(proceed, extract_images)
|
editor.get_html(proceed)
|
||||||
|
|
||||||
|
|
||||||
def develop(container):
|
def develop(container):
|
||||||
|
@ -6,7 +6,8 @@ from elementmaker import E
|
|||||||
|
|
||||||
from ajax import ajax
|
from ajax import ajax
|
||||||
from book_list.comments_editor import (
|
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.details_list import sandbox_css
|
||||||
from book_list.router import back, home, show_note
|
from book_list.router import back, home, show_note
|
||||||
@ -162,12 +163,13 @@ def save(container_id):
|
|||||||
return
|
return
|
||||||
q.html = xhr.responseText
|
q.html = xhr.responseText
|
||||||
current_note_markup = q
|
current_note_markup = q
|
||||||
|
destroy_editor(c)
|
||||||
close_action()
|
close_action()
|
||||||
|
|
||||||
def on_got_html(html, extra_data):
|
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...'))
|
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):
|
def init_edit(container_id):
|
||||||
|
Loading…
x
Reference in New Issue
Block a user