mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Get highlight range as CFI
This commit is contained in:
parent
5d9515c115
commit
b887ca602a
@ -670,6 +670,25 @@ def at_current(): # {{{
|
|||||||
|
|
||||||
# }}}
|
# }}}
|
||||||
|
|
||||||
|
def cfi_for_selection(r): # {{{
|
||||||
|
if not r:
|
||||||
|
r = window.getSelection().getRangeAt(0)
|
||||||
|
|
||||||
|
def pos(container, offset):
|
||||||
|
nt = container.nodeType
|
||||||
|
if nt is Node.TEXT_NODE or nt is Node.CDATA_SECTION_NODE or nt is Node.COMMENT_NODE:
|
||||||
|
return container, offset
|
||||||
|
if nt is Node.ELEMENT_NODE:
|
||||||
|
return container.childNodes[offset], 0
|
||||||
|
return container, offset
|
||||||
|
|
||||||
|
return {
|
||||||
|
'start': encode(r.startContainer.ownerDocument, *pos(r.startContainer, r.startOffset)),
|
||||||
|
'end': encode(r.endContainer.ownerDocument, *(r.endContainer, r.endOffset)),
|
||||||
|
}
|
||||||
|
|
||||||
|
# }}}
|
||||||
|
|
||||||
if __name__ is '__main__':
|
if __name__ is '__main__':
|
||||||
t = 'a^!,1'
|
t = 'a^!,1'
|
||||||
if unescape_from_cfi(escape_for_cfi(t)) is not t:
|
if unescape_from_cfi(escape_for_cfi(t)) is not t:
|
||||||
|
@ -12,7 +12,7 @@ from select import (
|
|||||||
from fs_images import fix_fullscreen_svg_images
|
from fs_images import fix_fullscreen_svg_images
|
||||||
from iframe_comm import IframeClient
|
from iframe_comm import IframeClient
|
||||||
from range_utils import reset_highlight_counter, wrap_text_in_range
|
from range_utils import reset_highlight_counter, wrap_text_in_range
|
||||||
from read_book.cfi import scroll_to as scroll_to_cfi
|
from read_book.cfi import cfi_for_selection, scroll_to as scroll_to_cfi
|
||||||
from read_book.extract import get_elements
|
from read_book.extract import get_elements
|
||||||
from read_book.find import reset_find_caches, select_search_result
|
from read_book.find import reset_find_caches, select_search_result
|
||||||
from read_book.flow_mode import (
|
from read_book.flow_mode import (
|
||||||
@ -642,11 +642,12 @@ class IframeBoss:
|
|||||||
elif data.type is 'set-highlight-style':
|
elif data.type is 'set-highlight-style':
|
||||||
set_selection_style(data.style)
|
set_selection_style(data.style)
|
||||||
elif data.type is 'apply-highlight':
|
elif data.type is 'apply-highlight':
|
||||||
|
bounds = cfi_for_selection()
|
||||||
annot_id = wrap_text_in_range(data.style)
|
annot_id = wrap_text_in_range(data.style)
|
||||||
if annot_id is not None:
|
if annot_id is not None:
|
||||||
window.getSelection().removeAllRanges()
|
window.getSelection().removeAllRanges()
|
||||||
self.annot_id_uuid_map[annot_id] = data.uuid
|
self.annot_id_uuid_map[annot_id] = data.uuid
|
||||||
self.send_message('annotations', type='highlight-applied', uuid=data.uuid, ok=annot_id is not None)
|
self.send_message('annotations', type='highlight-applied', uuid=data.uuid, ok=annot_id is not None, bounds=bounds)
|
||||||
else:
|
else:
|
||||||
console.log('Ignoring annotations message to iframe with unknown type: ' + data.type)
|
console.log('Ignoring annotations message to iframe with unknown type: ' + data.type)
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user