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

View File

@ -259,7 +259,7 @@ class View:
def do_show_chrome(self, request_id, cfi_data): def do_show_chrome(self, request_id, cfi_data):
self.hide_overlays() self.hide_overlays()
self.on_update_cfi(cfi_data) self.update_cfi_data(cfi_data)
self.overlay.show() self.overlay.show()
def show_search(self): def show_search(self):
@ -511,10 +511,30 @@ class View:
self.report_cfi_callbacks[request_id] = callback self.report_cfi_callbacks[request_id] = callback
self.iframe_wrapper.send_message('get_current_cfi', request_id=request_id) 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): def on_report_cfi(self, data):
cb = self.report_cfi_callbacks[data.request_id] cb = self.report_cfi_callbacks[data.request_id]
if cb: 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]' v'delete self.report_cfi_callbacks[data.request_id]'
def on_update_cfi(self, data): def on_update_cfi(self, data):
@ -526,21 +546,11 @@ class View:
# type anything into text boxes. # type anything into text boxes.
# See https://bugs.chromium.org/p/chromium/issues/detail?id=404315 # See https://bugs.chromium.org/p/chromium/issues/detail?id=404315
return return
self.currently_showing.bookpos = data.cfi
ui_operations.update_url_state(data.replace_history) ui_operations.update_url_state(data.replace_history)
username = get_interface_data().username username = self.update_cfi_data(data)
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
if username: 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( 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): library_id=key[0], book_id=key[1], fmt=key[2]), lrd, def(end_type, xhr, ev):
if end_type is not 'load': if end_type is not 'load':