Implemented search box functionality.

This commit is contained in:
WrinklyNinja
2014-07-20 15:11:38 +01:00
parent 1beb150a39
commit 0c12270fc5
2 changed files with 75 additions and 0 deletions
+40
View File
@@ -421,6 +421,40 @@ function hideHoverText(evt) {
hoverText.parentElement.removeChild(hoverText);
}
}
function startSearch(evt) {
if (evt.target.value == '') {
var request_id = window.cefQuery({
request: 'cancelFind',
persistent: false,
onSuccess: function(response) { evt.target.focus(); },
onFailure: function(error_code, error_message) {
showMessageBox('error', "Error", "Error code: " + error_code + "; " + error_message);
}
});
} else {
var request = {
name: 'find',
args: [
evt.target.value
]
};
var request_id = window.cefQuery({
request: JSON.stringify(request),
persistent: false,
onSuccess: function(response) { evt.target.focus(); },
onFailure: function(error_code, error_message) {
showMessageBox('error', "Error", "Error code: " + error_code + "; " + error_message);
}
});
}
}
function focusSearch(evt) {
if (evt.ctrlKey && evt.keyCode == 70) { //'f'
document.getElementById('searchBox').focus();
}
}
function setupEventHandlers() {
var elements;
if (isStorageSupported()) { /*Set up filter value and CSS setting storage read/write handlers.*/
@@ -479,6 +513,12 @@ function setupEventHandlers() {
hoverTargets[i].addEventListener('mouseenter', showHoverText, false);
hoverTargets[i].addEventListener('mouseleave', hideHoverText, false);
}
/* Set up event handlers for content search. */
var searchBox = document.getElementById('searchBox');
searchBox.addEventListener('input', startSearch, false);
searchBox.addEventListener('search', startSearch, false);
window.addEventListener('keyup', focusSearch, false);
}
function processCefError(errorCode, errorMessage) {
showMessageBox('error', "Error", "Error code: " + error_code + "; " + error_message);
+35
View File
@@ -120,6 +120,41 @@ namespace loot {
callback->Success(GetGameData());
return true;
}
else if (request == "cancelFind") {
browser->GetHost()->StopFinding(true);
callback->Success("");
return true;
}
else {
// May be a request with arguments.
YAML::Node req;
try {
req = JSON::parse(request.ToString());
}
catch (exception &e) {
BOOST_LOG_TRIVIAL(error) << "Failed to parse CEF query request \"" << request << "\": " << e.what();
return false;
}
const std::string requestName = req["name"].as<string>();
if (requestName == "find") {
// Has one arg, which is the search string.
const std::string search = req["args"][0].as<string>();
// In case there is a search already running, cancel it.
browser->GetHost()->StopFinding(true);
// Only one search at a time is allowed, so give a constant identifier,
// and we want case-insensitive forward searching, with no repeated
// searches.
browser->GetHost()->Find(0, search, true, false, false);
callback->Success("");
return true;
}
}
return false;
}