mirror of
https://github.com/mozilla/gecko-dev.git
synced 2025-11-12 14:20:14 +02:00
This implements the introduction display for the new search engine preference. The decision for whether or not to display the introduction is handled in AboutPrivateBrowsingHandler.jsm, as we need to limit it to being displayed once per session. Differential Revision: https://phabricator.services.mozilla.com/D48722 --HG-- extra : moz-landing-system : lando
133 lines
4.2 KiB
JavaScript
133 lines
4.2 KiB
JavaScript
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
/* eslint-env mozilla/frame-script */
|
|
|
|
document.addEventListener("DOMContentLoaded", function() {
|
|
if (!RPMIsWindowPrivate()) {
|
|
document.documentElement.classList.remove("private");
|
|
document.documentElement.classList.add("normal");
|
|
document
|
|
.getElementById("startPrivateBrowsing")
|
|
.addEventListener("click", function() {
|
|
RPMSendAsyncMessage("OpenPrivateWindow");
|
|
});
|
|
return;
|
|
}
|
|
|
|
// Setup the private browsing myths link.
|
|
document
|
|
.getElementById("private-browsing-myths")
|
|
.setAttribute(
|
|
"href",
|
|
RPMGetFormatURLPref("app.support.baseURL") + "private-browsing-myths"
|
|
);
|
|
|
|
// Set up the private search banner.
|
|
const privateSearchBanner = document.getElementById("search-banner");
|
|
|
|
RPMAddMessageListener("ShowSearchBanner", msg => {
|
|
if (msg.data.show) {
|
|
document.l10n.setAttributes(
|
|
document.getElementById("about-private-browsing-search-banner-title"),
|
|
"about-private-browsing-search-banner-title",
|
|
{ engineName: msg.data.engineName }
|
|
);
|
|
privateSearchBanner.removeAttribute("hidden");
|
|
document.body.classList.add("showBanner");
|
|
}
|
|
|
|
// We set this attribute so that tests know when we are done.
|
|
document.documentElement.setAttribute("SearchBannerInitialized", true);
|
|
});
|
|
RPMSendAsyncMessage("ShouldShowSearchBanner");
|
|
|
|
function hideSearchBanner() {
|
|
privateSearchBanner.setAttribute("hidden", "true");
|
|
document.body.classList.remove("showBanner");
|
|
RPMSendAsyncMessage("SearchBannerDismissed");
|
|
}
|
|
|
|
document
|
|
.getElementById("search-banner-close-button")
|
|
.addEventListener("click", () => {
|
|
hideSearchBanner();
|
|
});
|
|
|
|
let openSearchOptions = document.getElementById(
|
|
"about-private-browsing-search-banner-description"
|
|
);
|
|
let openSearchOptionsEvtHandler = evt => {
|
|
if (
|
|
evt.target.id == "open-search-options-link" &&
|
|
(evt.keyCode == evt.DOM_VK_RETURN || evt.type == "click")
|
|
) {
|
|
RPMSendAsyncMessage("OpenSearchPreferences");
|
|
hideSearchBanner();
|
|
}
|
|
};
|
|
openSearchOptions.addEventListener("click", openSearchOptionsEvtHandler);
|
|
openSearchOptions.addEventListener("keypress", openSearchOptionsEvtHandler);
|
|
|
|
// Setup the search hand-off box.
|
|
let btn = document.getElementById("search-handoff-button");
|
|
let editable = document.getElementById("fake-editable");
|
|
let HIDE_SEARCH_TOPIC = "HideSearch";
|
|
let SHOW_SEARCH_TOPIC = "ShowSearch";
|
|
let SEARCH_HANDOFF_TOPIC = "SearchHandoff";
|
|
|
|
function showSearch() {
|
|
btn.classList.remove("focused");
|
|
btn.classList.remove("hidden");
|
|
RPMRemoveMessageListener(SHOW_SEARCH_TOPIC, showSearch);
|
|
}
|
|
|
|
function hideSearch() {
|
|
btn.classList.add("hidden");
|
|
}
|
|
|
|
function handoffSearch(text) {
|
|
RPMSendAsyncMessage(SEARCH_HANDOFF_TOPIC, { text });
|
|
RPMAddMessageListener(SHOW_SEARCH_TOPIC, showSearch);
|
|
if (text) {
|
|
hideSearch();
|
|
} else {
|
|
btn.classList.add("focused");
|
|
RPMAddMessageListener(HIDE_SEARCH_TOPIC, hideSearch);
|
|
}
|
|
}
|
|
btn.addEventListener("focus", function() {
|
|
handoffSearch();
|
|
});
|
|
btn.addEventListener("click", function() {
|
|
handoffSearch();
|
|
});
|
|
|
|
// Hand-off any text that gets dropped or pasted
|
|
editable.addEventListener("drop", function(ev) {
|
|
ev.preventDefault();
|
|
let text = ev.dataTransfer.getData("text");
|
|
if (text) {
|
|
handoffSearch(text);
|
|
}
|
|
});
|
|
editable.addEventListener("paste", function(ev) {
|
|
ev.preventDefault();
|
|
handoffSearch(ev.clipboardData.getData("Text"));
|
|
});
|
|
|
|
// Load contentSearchUI so it sets the search engine icon for us.
|
|
// TODO: FIXME. We should eventually refector contentSearchUI to do only what
|
|
// we need and have it do the common search handoff work for
|
|
// about:newtab and about:privatebrowsing.
|
|
let input = document.getElementById("dummy-input");
|
|
new window.ContentSearchUIController(
|
|
input,
|
|
input.parentNode,
|
|
"aboutprivatebrowsing",
|
|
"aboutprivatebrowsing",
|
|
// We know we're definitely in a PB window here.
|
|
true
|
|
);
|
|
});
|