mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-06-23 15:30:45 -04:00
Viewer: Allow skipping the confirmation when using the remove highlight button in the popup bar. Fixes #1897415 [[Feature Request] Delete text highlight without confirmation box](https://bugs.launchpad.net/calibre/+bug/1897415)
This commit is contained in:
parent
5e524df4dc
commit
bea311405a
@ -11,6 +11,7 @@ from dom import add_extra_css, build_rule, clear, set_css, svgicon, unique_id
|
||||
from popups import MODAL_Z_INDEX
|
||||
from utils import safe_set_inner_html
|
||||
from widgets import create_button
|
||||
from book_list.globals import get_session_data
|
||||
|
||||
modal_container = None
|
||||
modal_count = 0
|
||||
@ -236,7 +237,11 @@ def get_text_dialog(title, callback, initial_text=None, msg=None, rows=12):
|
||||
)
|
||||
|
||||
|
||||
def question_dialog(title, msg, callback, yes_text=None, no_text=None):
|
||||
def question_dialog(
|
||||
title, msg, callback, yes_text=None, no_text=None,
|
||||
skip_dialog_name=None, skip_dialog_msg=None,
|
||||
skip_dialog_skipped_value=True, skip_dialog_skip_precheck=True,
|
||||
):
|
||||
yes_text = yes_text or _('Yes')
|
||||
no_text = no_text or _('No')
|
||||
called = {}
|
||||
@ -245,6 +250,12 @@ def question_dialog(title, msg, callback, yes_text=None, no_text=None):
|
||||
if called.done:
|
||||
return
|
||||
called.done = True
|
||||
if skip_dialog_name:
|
||||
if not skip_box.querySelector('input').checked:
|
||||
sd = get_session_data()
|
||||
skipped_dialogs = Object.assign(v'{}', sd.get('skipped_dialogs', v'{}'))
|
||||
skipped_dialogs[skip_dialog_name] = Date().toISOString()
|
||||
sd.set('skipped_dialogs', skipped_dialogs)
|
||||
if close_modal:
|
||||
close_modal()
|
||||
callback(yes)
|
||||
@ -259,10 +270,24 @@ def question_dialog(title, msg, callback, yes_text=None, no_text=None):
|
||||
event.preventDefault(), event.stopPropagation()
|
||||
keyaction(True, close_modal)
|
||||
|
||||
skip_box = E.div(style='margin-top: 2ex;')
|
||||
if skip_dialog_name:
|
||||
sd = get_session_data()
|
||||
skipped_dialogs = sd.get('skipped_dialogs', v'{}')
|
||||
if skipped_dialogs[skip_dialog_name]:
|
||||
return callback(skip_dialog_skipped_value)
|
||||
skip_dialog_msg = skip_dialog_msg or _('Show this confirmation again')
|
||||
skip_box.appendChild(E.label(E.input(type='checkbox', name='skip_dialog'), '\xa0', skip_dialog_msg))
|
||||
if skip_dialog_skip_precheck:
|
||||
skip_box.querySelector('input').checked = True
|
||||
else:
|
||||
skip_box.style.display = 'none'
|
||||
|
||||
create_custom_dialog(
|
||||
title, def(parent, close_modal):
|
||||
parent.appendChild(E.div(
|
||||
E.div(msg),
|
||||
skip_box,
|
||||
E.div(class_='button-box',
|
||||
create_button(yes_text, 'check', keyaction.bind(None, True, close_modal), highlight=True),
|
||||
'\xa0',
|
||||
|
@ -27,7 +27,7 @@ from read_book.prefs.font_size import create_font_size_panel
|
||||
from read_book.prefs.main import create_prefs_panel
|
||||
from read_book.toc import create_toc_panel
|
||||
from read_book.word_actions import create_word_actions_panel
|
||||
from session import get_device_uuid
|
||||
from session import get_device_uuid, defaults as session_defaults
|
||||
from utils import (
|
||||
default_context_menu_should_be_allowed, full_screen_element,
|
||||
full_screen_supported, is_ios, safe_set_inner_html
|
||||
@ -360,7 +360,12 @@ class MainOverlay: # {{{
|
||||
ac(_('Inspector'), _('Show the content inspector'),
|
||||
def(): self.overlay.hide(), ui_operations.toggle_inspector();, 'bug'),
|
||||
ac(_('Reset interface'), _('Reset viewer panels, toolbars and scrollbars to defaults'),
|
||||
def(): self.overlay.hide(), ui_operations.reset_interface();, 'window-restore'),
|
||||
def():
|
||||
self.overlay.hide()
|
||||
ui_operations.reset_interface()
|
||||
sd = get_session_data()
|
||||
sd.set('skipped_dialogs', session_defaults.skipped_dialogs)
|
||||
, 'window-restore'),
|
||||
ac(_('Quit'), _('Close the viewer'),
|
||||
def(): self.overlay.hide(), ui_operations.quit();, 'remove'),
|
||||
))
|
||||
|
@ -935,10 +935,12 @@ class SelectionBar:
|
||||
def remove_highlight(self):
|
||||
annot_id = self.view.currently_showing.selection.annot_id
|
||||
if annot_id:
|
||||
question_dialog(_('Are you sure?'), _('Are you sure you want to delete this highlight permanently?'),
|
||||
question_dialog(
|
||||
_('Are you sure?'), _('Are you sure you want to delete this highlight permanently?'),
|
||||
def (yes):
|
||||
if yes:
|
||||
self.remove_highlight_with_id(annot_id)
|
||||
, skip_dialog_name='confirm_remove_highlight'
|
||||
)
|
||||
|
||||
def remove_highlight_with_id(self, annot_id):
|
||||
|
@ -68,9 +68,11 @@ defaults = {
|
||||
'net_search_url': 'https://google.com/search?q={q}',
|
||||
'selection_bar_actions': v"['copy', 'lookup', 'highlight', 'remove_highlight', 'search_net', 'clear']",
|
||||
'selection_bar_quick_highlights': v"[]",
|
||||
'skipped_dialogs': v'{}',
|
||||
}
|
||||
|
||||
is_local_setting = {
|
||||
'skipped_dialogs': True,
|
||||
'background_image_fade': True,
|
||||
'background_image_style': True,
|
||||
'background_image': True,
|
||||
|
Loading…
x
Reference in New Issue
Block a user