Make currently selected text available to the overlay

This commit is contained in:
Kovid Goyal 2019-08-19 10:35:44 +05:30
parent b480086d00
commit 5503ad9d12
No known key found for this signature in database
GPG Key ID: 06BC317B515ACE7C
2 changed files with 34 additions and 19 deletions

View File

@ -264,6 +264,7 @@ class IframeBoss:
def get_current_cfi(self, data):
cfi = at_current()
selected_text = window.getSelection().toString()
if cfi:
spine = self.book.manifest.spine
current_name = current_spine_item().name
@ -272,9 +273,10 @@ class IframeBoss:
cfi = 'epubcfi(/{}{})'.format(2*(index+1), cfi)
self.send_message(
'report_cfi', cfi=cfi, progress_frac=self.calculate_progress_frac(current_name, index),
file_progress_frac=progress_frac(), request_id=data.request_id)
file_progress_frac=progress_frac(), request_id=data.request_id, selected_text=selected_text)
return
self.send_message('report_cfi', cfi=None, progress_frac=0, file_progress_frac=0)
self.send_message(
'report_cfi', cfi=None, progress_frac=0, file_progress_frac=0, selected_text=selected_text, request_id=data.request_id)
def update_cfi(self):
cfi = at_current()
@ -286,8 +288,11 @@ class IframeBoss:
cfi = 'epubcfi(/{}{})'.format(2*(index+1), cfi)
if cfi is not self.last_cfi:
self.last_cfi = cfi
self.send_message('update_cfi', cfi=cfi, replace_history=self.replace_history_on_next_cfi_update,
progress_frac=self.calculate_progress_frac(current_name, index), file_progress_frac=progress_frac())
selected_text = window.getSelection().toString()
self.send_message(
'update_cfi', cfi=cfi, replace_history=self.replace_history_on_next_cfi_update,
progress_frac=self.calculate_progress_frac(current_name, index),
file_progress_frac=progress_frac(), selected_text=selected_text)
self.replace_history_on_next_cfi_update = True
def update_toc_position(self):

View File

@ -259,7 +259,7 @@ class View:
def do_show_chrome(self, request_id, cfi_data):
self.hide_overlays()
self.on_update_cfi(cfi_data)
self.update_cfi_data(cfi_data)
self.overlay.show()
def show_search(self):
@ -511,10 +511,30 @@ class View:
self.report_cfi_callbacks[request_id] = callback
self.iframe_wrapper.send_message('get_current_cfi', request_id=request_id)
def update_cfi_data(self, data):
self.currently_showing.bookpos = data.cfi
self.currently_showing.selected_text = data.selected_text
username = get_interface_data().username
unkey = username_key(username)
if not self.book.last_read_position:
self.book.last_read_position = {}
self.book.last_read_position[unkey] = data.cfi
self.current_progress_frac = data.progress_frac
self.current_file_progress_frac = data.file_progress_frac
self.update_header_footer()
if ui_operations.update_last_read_time:
ui_operations.update_last_read_time(self.book)
return username
def on_report_cfi(self, data):
cb = self.report_cfi_callbacks[data.request_id]
if cb:
cb(data.request_id, {'cfi': data.cfi, 'progress_frac': data.progress_frac, 'file_progress_frac': data.file_progress_frac})
cb(data.request_id, {
'cfi': data.cfi,
'progress_frac': data.progress_frac,
'file_progress_frac': data.file_progress_frac,
'selected_text': data.selected_text,
})
v'delete self.report_cfi_callbacks[data.request_id]'
def on_update_cfi(self, data):
@ -526,21 +546,11 @@ class View:
# type anything into text boxes.
# See https://bugs.chromium.org/p/chromium/issues/detail?id=404315
return
self.currently_showing.bookpos = data.cfi
ui_operations.update_url_state(data.replace_history)
username = get_interface_data().username
unkey = username_key(username)
if not self.book.last_read_position:
self.book.last_read_position = {}
self.book.last_read_position[unkey] = data.cfi
if ui_operations.update_last_read_time:
ui_operations.update_last_read_time(self.book)
lrd = {'device':get_device_uuid(), 'cfi':data.cfi, 'pos_frac':data.progress_frac}
self.current_progress_frac = data.progress_frac
self.current_file_progress_frac = data.file_progress_frac
self.update_header_footer()
key = self.book.key
username = self.update_cfi_data(data)
if username:
key = self.book.key
lrd = {'device':get_device_uuid(), 'cfi':data.cfi, 'pos_frac':data.progress_frac}
ajax_send('book-set-last-read-position/{library_id}/{book_id}/{fmt}'.format(
library_id=key[0], book_id=key[1], fmt=key[2]), lrd, def(end_type, xhr, ev):
if end_type is not 'load':