diff --git a/frontend/apps/reader/modules/readersearch.lua b/frontend/apps/reader/modules/readersearch.lua index 440f64cdd..a0c2e08c5 100644 --- a/frontend/apps/reader/modules/readersearch.lua +++ b/frontend/apps/reader/modules/readersearch.lua @@ -12,6 +12,7 @@ local UIManager = require("ui/uimanager") local VerticalGroup = require("ui/widget/verticalgroup") local logger = require("logger") local _ = require("gettext") +local T = require("ffi/util").template local ReaderSearch = InputContainer:new{ direction = 0, -- 0 for search forward, 1 for search backward @@ -78,6 +79,28 @@ function ReaderSearch:addToMainMenu(menu_items) } end +-- if reverse ~= 0 search backwards +function ReaderSearch:searchCallback(reverse) + if self.input_dialog:getInputText() == "" then return end + self.last_search_text = self.input_dialog:getInputText() + self.use_regex = self.check_button_regex.checked + self.case_insensitive = not self.check_button_case.checked + local regex_error = self.use_regex and self.ui.document:checkRegex(self.input_dialog:getInputText()) + if self.use_regex and regex_error ~= 0 then + logger.dbg("ReaderSearch: regex error", regex_error, SRELL_ERROR_CODES[regex_error]) + local error_message + if SRELL_ERROR_CODES[regex_error] then + error_message = T(_("Invalid regular expression:\n%1"), SRELL_ERROR_CODES[regex_error]) + else + error_message = _("Invalid regular expression.") + end + UIManager:show(InfoMessage:new{ text = error_message }) + else + UIManager:close(self.input_dialog) + self:onShowSearchDialog(self.input_dialog:getInputText(), reverse, self.use_regex, self.case_insensitive) + end +end + function ReaderSearch:onShowFulltextSearchInput() local backward_text = "◁" local forward_text = "▷" @@ -87,8 +110,6 @@ function ReaderSearch:onShowFulltextSearchInput() self.input_dialog = InputDialog:new{ title = _("Enter text to search for"), input = self.last_search_text, - use_regex_checked = self.use_regex, - case_insensitive_checked = not self.case_insensitive, buttons = { { { @@ -100,48 +121,14 @@ function ReaderSearch:onShowFulltextSearchInput() { text = backward_text, callback = function() - if self.input_dialog:getInputText() == "" then return end - self.last_search_text = self.input_dialog:getInputText() - self.use_regex = self.check_button_regex.checked - self.case_insensitive = not self.check_button_case.checked - local regex_error = self.use_regex and self.ui.document:checkRegex(self.input_dialog:getInputText()) - if self.use_regex and regex_error ~= 0 then - logger.dbg("ReaderSearch: regex error", regex_error, SRELL_ERROR_CODES[regex_error]) - local error_message = _("Invalid regular expression") - if SRELL_ERROR_CODES[regex_error] then - error_message = error_message .. ":\n" .. SRELL_ERROR_CODES[regex_error] - else - error_message = error_message .. "." - end - UIManager:show(InfoMessage:new{ text = error_message }) - else - UIManager:close(self.input_dialog) - self:onShowSearchDialog(self.input_dialog:getInputText(), 1, self.use_regex, self.case_insensitive) - end + self:searchCallback(1) end, }, { text = forward_text, is_enter_default = true, callback = function() - if self.input_dialog:getInputText() == "" then return end - self.last_search_text = self.input_dialog:getInputText() - self.use_regex = self.check_button_regex.checked - self.case_insensitive = not self.check_button_case.checked - local regex_error = self.use_regex and self.ui.document:checkRegex(self.input_dialog:getInputText()) - if self.use_regex and regex_error ~= 0 then - logger.dbg("ReaderSearch: regex error", regex_error, SRELL_ERROR_CODES[regex_error]) - local error_message = _("Invalid regular expression") - if SRELL_ERROR_CODES[regex_error] then - error_message = error_message .. ":\n" .. SRELL_ERROR_CODES[regex_error] - else - error_message = error_message .. "." - end - UIManager:show(InfoMessage:new{ text = error_message }) - else - UIManager:close(self.input_dialog) - self:onShowSearchDialog(self.input_dialog:getInputText(), 0, self.use_regex, self.case_insensitive) - end + self:searchCallback(0) end, }, }, @@ -311,6 +298,7 @@ function ReaderSearch:onShowSearchDialog(text, direction, regex, case_insensitiv if regex and isSlowRegex(pattern) then return function() self.wait_button.alpha = 0.75 + self.wait_button.movable:setMovedOffset(self.search_dialog.movable:getMovedOffset()) UIManager:show(self.wait_button) UIManager:tickAfterNext(function() do_search(func, pattern, param, regex, case_insensitive)() @@ -355,6 +343,7 @@ function ReaderSearch:onShowSearchDialog(text, direction, regex, case_insensitiv } if regex and isSlowRegex(text) then self.wait_button.alpha = nil + -- initial position: center of the screen UIManager:show(self.wait_button) UIManager:tickAfterNext(function() do_search(self.searchFromCurrent, text, direction, regex, case_insensitive)()