// Local js definitions:
/* global addClass, getCurrentValue, hasClass */
/* global onEachLazy, hasOwnProperty, removeClass, updateLocalStorage */
+/* global hideThemeButtonState, showThemeButtonState */
if (!String.prototype.startsWith) {
String.prototype.startsWith = function(searchString, position) {
return document.getElementById("search");
}
+function getThemesElement() {
+ return document.getElementById("theme-choices");
+}
+
+function getThemePickerElement() {
+ return document.getElementById("theme-picker");
+}
+
// Sets the focus on the search bar at the top of the page
function focusSearchBar() {
getSearchInput().focus();
var mouseMovedAfterSearch = true;
var titleBeforeSearch = document.title;
+ var searchTitle = null;
function clearInputTimeout() {
if (searchTimeout !== null) {
sidebar.appendChild(div);
}
}
- var themePickers = document.getElementsByClassName("theme-picker");
- if (themePickers && themePickers.length > 0) {
- themePickers[0].style.display = "none";
- }
}
function hideSidebar() {
filler.remove();
}
document.getElementsByTagName("body")[0].style.marginTop = "";
- var themePickers = document.getElementsByClassName("theme-picker");
- if (themePickers && themePickers.length > 0) {
- themePickers[0].style.display = null;
- }
}
function showSearchResults(search) {
addClass(main, "hidden");
removeClass(search, "hidden");
mouseMovedAfterSearch = false;
+ document.title = searchTitle;
}
function hideSearchResults(search) {
}
addClass(search, "hidden");
removeClass(main, "hidden");
+ document.title = titleBeforeSearch;
}
// used for special search precedence
clearInputTimeout();
ev.preventDefault();
hideSearchResults(search);
- document.title = titleBeforeSearch;
}
defocusSearchBar();
+ hideThemeButtonState();
}
function handleShortcut(ev) {
case "?":
displayHelp(true, ev);
break;
+
+ default:
+ var themePicker = getThemePickerElement();
+ if (themePicker.parentNode.contains(ev.target)) {
+ handleThemeKeyDown(ev);
+ }
+ }
+ }
+ }
+
+ function handleThemeKeyDown(ev) {
+ var active = document.activeElement;
+ var themes = getThemesElement();
+ switch (getVirtualKey(ev)) {
+ case "ArrowUp":
+ ev.preventDefault();
+ if (active.previousElementSibling && ev.target.id !== "theme-picker") {
+ active.previousElementSibling.focus();
+ } else {
+ showThemeButtonState();
+ themes.lastElementChild.focus();
+ }
+ break;
+ case "ArrowDown":
+ ev.preventDefault();
+ if (active.nextElementSibling && ev.target.id !== "theme-picker") {
+ active.nextElementSibling.focus();
+ } else {
+ showThemeButtonState();
+ themes.firstElementChild.focus();
+ }
+ break;
+ case "Enter":
+ case "Return":
+ case "Space":
+ if (ev.target.id === "theme-picker" && themes.style.display === "none") {
+ ev.preventDefault();
+ showThemeButtonState();
+ themes.firstElementChild.focus();
}
+ break;
+ case "Home":
+ ev.preventDefault();
+ themes.firstElementChild.focus();
+ break;
+ case "End":
+ ev.preventDefault();
+ themes.lastElementChild.focus();
+ break;
+ // The escape key is handled in handleEscape, not here,
+ // so that pressing escape will close the menu even if it isn't focused
}
}
}
// Update document title to maintain a meaningful browser history
- document.title = "Results for " + query.query + " - Rust";
+ searchTitle = "Results for " + query.query + " - Rust";
// Because searching is incremental by character, only the most
// recent search query is added to the browser history.
"",
"?search=" + encodeURIComponent(search_input.value));
}
+ document.title = searchTitle;
}
}