2012-05-21 04:12:37 -07:00
|
|
|
/* 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/. */
|
2010-08-26 03:19:37 -07:00
|
|
|
|
|
|
|
// If a definition requires additional params, check that the final search url
|
|
|
|
// is handled correctly by the engine.
|
|
|
|
const SEARCH_ENGINES = {
|
|
|
|
"Google": {
|
2011-01-29 15:33:41 -08:00
|
|
|
image: "data:image/png;base64," +
|
|
|
|
"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"
|
2012-10-04 22:28:04 -07:00
|
|
|
#ifdef XP_MACOSX
|
|
|
|
, imageHD: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIwAAAA4CAYAAAAvmxBdAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAGrFJREFUeNrtfHt4VdW172+utZOASLJ5+BaIFrUeXkFsa0Fl++gDnznVVlvFxt7aqvUUarXtse3Bau35ak/rZ9XT26NtfOvV6wFET+FYCQEKWqsQIT5RCAgSXnlnrzXneNw/1lphJSSQ8BB7bub3zW+LO3uN+fiNMcf4jTEX0N/6W3/rb/2tv30smtnXB3zmRi2FQakxQNKX3WkW9S/tgW3HLpmQM543A0BWVSHMYGIwOTDxzxrOf3/RQQfMZ2/SLAvKhTFVBGUqKFONH2QAzwOMF38awHhYZAxWAqhe/iszp3+b970d/sInc57vz/J8L2eMB2MAEYkBQ6DQ3dRw4dq7AUjcP3rAfPZmLWXCLHKoIAcQAUxaB5EaEfc6AEBhjDEwmcx43/fO9HxT4vkReBIAAZgjgodW3NcPnn1sHgD/iHknn+0d6s8XEUhsXXac/34WAAGw8afuT8GZ3X055YeSJcIsG+pMZwFn0UihezRofPt3G54f/0E8cNMN+Myo8jVTCgYd823PLzrPeIBnABiUQ1F+UoWsVOYb33mkoKp/7/dKyT0AGc47X4s0sjBEoLxbBqAQAMfWRfe38B4BM+VHUkYOs8mi1FrABbK4dcvK73zwp1M3xYPOxANKBqbpCdXNGb0UwPKRF74xpfDQ0t+K54+IvlKoahmAhaO/mv/ZmicG3tqPgT61ZM2dZMQJOYhIdByRM/F3dCCOox4Bc3oEliqyyNoQCPPusXceKZqRsigu7pwaWBowiRb46+f9Q1V2wl1nDx09/R7jF30x9adNlN8yPx4DHwht+B/cBIBoRqeIE4hE/oshTcB0wNbT6/o/zrhFyohR5ZxmrVWE+fDxdx4puhGAH4OkPe5B6pykeJAc/7cDEMZ/095Y870P339m+BXs2v4kbCFsm9u2vnpJ3bzR7wAo2B/R2v+PjSnyXcRxtOLUSXFxwAFz5i2SZUIVO82SBWye/vLOIwNvjL8OYqCEfXCmJAZPHkC7sK1REbj2+lmbq86qTVmmfuuyN2cTiREWKCvACgml9kDL7HQksehsZmSdA6yVpsa6P38v3swg7m4vN1dGXrThKGP8yS5fP33j/LEvxKDbl2f2A0YFCtkZQDOaPjLAnP4jrmBGjh1AVhG2ttxfX33++vjY2eeNXf/siLUAzgEwMJZrY2vF/Vu/t4BRqCqgCmj07wMVHXUCzJQfUlZE72ICnANcqNj21h8eiK1AX46gXh29KT9H+rd9XxBjYGCgig7QHOgjPgMAKigXQZYpsi4uCOc3v35zY2wF9ufGSgxA7fdd9g8ho9ol4P4ojiQWnSUMMANECrJNy1NWYH8eGfsEvJbLv1IK1XIAUwEtA0xplJMwjcaYlTDeShg8dOgjj6/cJxNYfWIWkHJoh5yyjkSZ8RbB89YBZq4/pXafGeuzb9WciXJxo2B2houqgAjABJCLOwFMqFv57+bBxMIAJm1det3avnl1OYCLAeSgWhofaY1QXQSRuYc+/OiD3QLmUzNdqTBKhRVMADsF5beuToXJB90KtFz+lVIVniXOVUAUqjpXVB4WwPjGTPB8/0zjeTnjezl43szmKy6vNkDF4MeeXNc3oJyUhfAMkJsJkSxUVrLos6o6z/O8Ucb3phrPzyHKeVTwkpPXseg3Cqe+1SfG+swfaw6KGTAoJ5eyGF3IBeEIJB2AcXxb0FI/L45uFQBMGiu6Z3ai9eqrclBUClFWVatV5GERNT5wEVQnQLUcIuVNX75kFjn60rA5c1d0AoywlkcxfdwZ2LSgbOmBZAv70povu7RcyFUqcZYdPbxix44fnLv8pbYUOWh+P3ZM9uJRo34xoLDgq8b3YTxvqhqsaPzyJTdmn36msjdyqPqkMhWqBFGZMtV8uDX4zMjp2zemyEoPgGn4zyOvGzy48A54GcD3Sz1jFrqqE+4uOOvdmb0ASlYEs5mQE9afUdhy0yv3lHzwya/8ZcjgI0+5yssU3QKYkgQ4Ivp60LL1n8kBQfOWuvdnj6uLldgHQKoKxU7HV/eg2y1XXXmXEs1U0ZVb29o//4k5c5P5eQB+s+68aVeUFBTcCxUoS6kRWfjhueecc9SfX3ytA9QTr7eVACqYFDYEwnbB2qcHHg6gLY6ODhpomi77coUyVaojhKH9+ZHzF/wqXiztEg34APxNX/jCvQOLCi83fpy8UsCJXHLYnGdn785S0uKTyyBUBXJZcW5x4bSN56ciyLQcD4Bf/+ThVwwbUvRb+JkoswqAWX5b9Lm1M3uSM/UnUiaCKiZk2blvvnxX0ePxuBNAmpMur51wyLBPzjVeBBoVwIXBk6vuP+SG+LkcuwkWAA96/JjZKnKxkACkkFb5Nztz220xX9bJlWi+6opKFalQlpqlmzZNu6B6SaJ0knKJ/DW5qd8p8TO3x6ABqza1EE06cdmy9wDAY5LjmBTMkQnUnZ42H0ywNF52aU6FK4UY5NySI+cv+E3MCnMM5HyqtwFoO3rBgmuDMFjGjiCOIEQwzH9c+7lzju+JTaYlJ2ehUqXMWWFqeurFxqsAFMVf25Ss9kTOEZdvebClJbxTyUGZoEzwlL/b9tzRX+pOztSfSBZApSqyIrL45buKnkaUJEzLCN5+csxr+ab6fyILkI2OIZYBlx9/2bYvpLgw2+EqKLKdwoceVKJp+tfuEpYKZcaW1tZbLqheEsbj3GV+oxdV3x0GwQZrHUIiWKIST3VmDG54zFrKrBBWiGgSyx9Uv6Xh0n/MKlGlOII4h80trQ+kuJt8HGklZHg6FZF/Y/uOb7O1YOvAzkGtKxmoehe6SYNEpkErwZIFC4I2fuLKf2tLtDOPzumPhA6wAPJDLt1yuzjaAEcAMUCMApXfvPP7IcO6gkYFs4RRpgy49qanUsAPu/T8W48e/YwL6S/kYtBYwM8U/yu6KVlQUShr9CkKyK7b1vDVy0qVeaYygaxbdeK85/8a/z7sYR3zgXM1gXUInEPoCEw8PR6z8YQxaidQPh6RrgrPEOZS4chKjFuydEEKFD1xQgrAnfO3V98Jw/B5dhFgmByU+MK/nnrq6K6gcQtPyqlIubJAibCxPv/fsVVNgCI9yGEAQdBq71NHUEdQIoBo5PBBeklazuQfSpYFM0UAFsDmd2yMf9+1XkUT3otc8AiRwpFChCBCI0detGbSLtYr5uw6tk26XctZwgxhRt65ZSmr1t389M1Jk85wzKcHRAiJkCfasDnI/0sMGN+jlLMrAigMhp0+f+TBBIw4milEYOcQBHZZAoZeEIgKgIIgeJbD2MqEFhxaDAFmdAWMisxQFigzlAUnX9e4rA9yeHuTna3koBQBRogxwOPvxNbQAAA7VHQEFKSQKEFIu4lA5d3HiiuFNB4XQZlhUHBK11QO0oRdD7ouROVCkeJZG7ak/KBOYHlz4sTy1WVlVY5oYego2+bs82+3tFw6YcVrp01dteqpxNfyhKQuGlxCMSsKBh570ABT/8XP5dhRVpyDWAd2Ns0O9yrhWdfcMpvCEByEoNCCwhBgvgBdM+PM5TH5FPW+1ZLo8de2viehe12dhVoHOAtDPO61O4o+kYCTnE5wVuGsxlzKHul7BUDKdomKgwpB2QHAyNiP2Dl+0Z2WRXZ9YP0F55WJczvX0jp09U3fLiurWD1+/NqQaHZIVNbu3O1vt7aM+fSqVRWXvPvu0pRldwAkQ5brjO+NMh0kgMIvGjYZwIKETPxIrYt1U5M8iThKJil9yZGc++ab298dP36Jb8wZohqhQHRErKEeAA6fG5FT5yIlYYI6tzfOvtiQni3MYDw0ChqEgUMyejyAdwGwDeW4ZI9FAGQOmwzgv/cERmZbDXhnKBNUGMJkUhGVduSSJJ1P6rw8HIalJo7ilBkchgCgL48fVzLceDc4kZnWUdap1AQi10x+660n4jXyk1M7ZXEZgHhMUkMO4NjphQGMf8h56Fx++ZE1a+1xZC2Szjs3sk9
|
|
|
|
#endif
|
2010-09-10 03:17:31 -07:00
|
|
|
, params: "source=hp&channel=np"
|
2010-08-26 03:19:37 -07:00
|
|
|
}
|
|
|
|
};
|
|
|
|
|
2010-09-11 00:45:08 -07:00
|
|
|
// The process of adding a new default snippet involves:
|
|
|
|
// * add a new entity to aboutHome.dtd
|
|
|
|
// * add a <span/> for it in aboutHome.xhtml
|
|
|
|
// * add an entry here in the proper ordering (based on spans)
|
|
|
|
// The <a/> part of the snippet will be linked to the corresponding url.
|
|
|
|
const DEFAULT_SNIPPETS_URLS = [
|
2011-06-16 03:04:16 -07:00
|
|
|
"http://www.mozilla.com/firefox/features/?WT.mc_ID=default1"
|
|
|
|
, "https://addons.mozilla.org/firefox/?src=snippet&WT.mc_ID=default2"
|
2010-09-11 00:45:08 -07:00
|
|
|
];
|
|
|
|
|
|
|
|
const SNIPPETS_UPDATE_INTERVAL_MS = 86400000; // 1 Day.
|
|
|
|
|
2012-09-12 03:02:03 -07:00
|
|
|
let gObserver = new MutationObserver(function (mutations) {
|
|
|
|
for (let mutation of mutations) {
|
|
|
|
if (mutation.attributeName == "searchEngineURL") {
|
|
|
|
gObserver.disconnect();
|
|
|
|
setupSearchEngine();
|
|
|
|
loadSnippets();
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
});
|
2010-08-26 03:19:37 -07:00
|
|
|
|
2012-09-12 03:02:03 -07:00
|
|
|
window.addEventListener("load", function () {
|
|
|
|
// Delay search engine setup, cause browser.js::BrowserOnAboutPageLoad runs
|
|
|
|
// later and may use asynchronous getters.
|
|
|
|
window.gObserver.observe(document.documentElement, { attributes: true });
|
|
|
|
fitToWidth();
|
2012-03-20 04:22:51 -07:00
|
|
|
});
|
|
|
|
window.addEventListener("resize", fitToWidth);
|
2010-08-26 03:19:37 -07:00
|
|
|
|
|
|
|
|
2010-09-11 00:45:08 -07:00
|
|
|
function onSearchSubmit(aEvent)
|
|
|
|
{
|
2010-08-26 03:19:37 -07:00
|
|
|
let searchTerms = document.getElementById("searchText").value;
|
2012-09-12 03:02:03 -07:00
|
|
|
let searchURL = document.documentElement.getAttribute("searchEngineURL");
|
|
|
|
if (searchURL && searchTerms.length > 0) {
|
2010-08-26 03:19:37 -07:00
|
|
|
const SEARCH_TOKENS = {
|
|
|
|
"_searchTerms_": encodeURIComponent(searchTerms)
|
|
|
|
}
|
|
|
|
for (let key in SEARCH_TOKENS) {
|
2012-09-12 03:02:03 -07:00
|
|
|
searchURL = searchURL.replace(key, SEARCH_TOKENS[key]);
|
2010-08-26 03:19:37 -07:00
|
|
|
}
|
2012-09-12 03:02:03 -07:00
|
|
|
window.location.href = searchURL;
|
2010-08-26 03:19:37 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
aEvent.preventDefault();
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2010-09-11 00:45:08 -07:00
|
|
|
function setupSearchEngine()
|
|
|
|
{
|
2012-09-12 03:02:03 -07:00
|
|
|
let searchEngineName = document.documentElement.getAttribute("searchEngineName");
|
|
|
|
let searchEngineInfo = SEARCH_ENGINES[searchEngineName];
|
|
|
|
if (!searchEngineInfo) {
|
2011-12-02 09:08:34 -08:00
|
|
|
return;
|
2010-08-26 03:19:37 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
// Enqueue additional params if required by the engine definition.
|
2012-09-12 03:02:03 -07:00
|
|
|
if (searchEngineInfo.params) {
|
|
|
|
let searchEngineURL = document.documentElement.getAttribute("searchEngineURL");
|
|
|
|
searchEngineURL += "&" + searchEngineInfo.params;
|
|
|
|
document.documentElement.setAttribute("searchEngineURL", searchEngineURL);
|
|
|
|
}
|
2010-08-26 03:19:37 -07:00
|
|
|
|
|
|
|
// Add search engine logo.
|
2012-09-12 03:02:03 -07:00
|
|
|
if (searchEngineInfo.image) {
|
2010-09-08 07:06:42 -07:00
|
|
|
let logoElt = document.getElementById("searchEngineLogo");
|
2012-09-12 03:02:03 -07:00
|
|
|
logoElt.src = searchEngineInfo.image;
|
2012-10-04 22:28:04 -07:00
|
|
|
#ifdef XP_MACOSX
|
|
|
|
if (searchEngineInfo.imageHD && window.matchMedia("(min-resolution: 2dppx)"))
|
|
|
|
logoElt.src = searchEngineInfo.imageHD;
|
|
|
|
#endif
|
2012-09-12 03:02:03 -07:00
|
|
|
logoElt.alt = searchEngineInfo.name;
|
2010-09-08 07:06:42 -07:00
|
|
|
}
|
2010-08-26 03:19:37 -07:00
|
|
|
|
2012-07-15 04:57:35 -07:00
|
|
|
// The "autofocus" attribute doesn't focus the form element
|
|
|
|
// immediately when the element is first drawn, so the
|
|
|
|
// attribute is also used for styling when the page first loads.
|
|
|
|
let searchText = document.getElementById("searchText");
|
|
|
|
searchText.addEventListener("blur", function searchText_onBlur() {
|
|
|
|
searchText.removeEventListener("blur", searchText_onBlur);
|
|
|
|
searchText.removeAttribute("autofocus");
|
|
|
|
});
|
|
|
|
|
2010-08-26 03:19:37 -07:00
|
|
|
}
|
2010-09-11 00:45:08 -07:00
|
|
|
|
|
|
|
function loadSnippets()
|
|
|
|
{
|
|
|
|
// Check last snippets update.
|
|
|
|
let lastUpdate = localStorage["snippets-last-update"];
|
2012-09-12 03:02:03 -07:00
|
|
|
let updateURL = document.documentElement.getAttribute("snippetsURL");
|
2010-09-11 00:45:08 -07:00
|
|
|
if (updateURL && (!lastUpdate ||
|
|
|
|
Date.now() - lastUpdate > SNIPPETS_UPDATE_INTERVAL_MS)) {
|
2012-03-14 16:09:15 -07:00
|
|
|
// Try to update from network.
|
|
|
|
let xhr = new XMLHttpRequest();
|
|
|
|
try {
|
|
|
|
xhr.open("GET", updateURL, true);
|
|
|
|
} catch (ex) {
|
|
|
|
showSnippets();
|
|
|
|
return;
|
|
|
|
}
|
2010-11-08 06:03:44 -08:00
|
|
|
// Even if fetching should fail we don't want to spam the server, thus
|
|
|
|
// set the last update time regardless its results. Will retry tomorrow.
|
|
|
|
localStorage["snippets-last-update"] = Date.now();
|
2010-09-11 00:45:08 -07:00
|
|
|
xhr.onerror = function (event) {
|
|
|
|
showSnippets();
|
|
|
|
};
|
|
|
|
xhr.onload = function (event)
|
|
|
|
{
|
|
|
|
if (xhr.status == 200) {
|
|
|
|
localStorage["snippets"] = xhr.responseText;
|
|
|
|
}
|
|
|
|
showSnippets();
|
|
|
|
};
|
|
|
|
xhr.send(null);
|
|
|
|
} else {
|
|
|
|
showSnippets();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
function showSnippets()
|
|
|
|
{
|
2011-02-04 18:26:00 -08:00
|
|
|
let snippetsElt = document.getElementById("snippets");
|
2010-09-11 00:45:08 -07:00
|
|
|
let snippets = localStorage["snippets"];
|
2010-11-08 06:03:44 -08:00
|
|
|
// If there are remotely fetched snippets, try to to show them.
|
2010-09-11 00:45:08 -07:00
|
|
|
if (snippets) {
|
2010-11-08 06:03:44 -08:00
|
|
|
// Injecting snippets can throw if they're invalid XML.
|
|
|
|
try {
|
|
|
|
snippetsElt.innerHTML = snippets;
|
|
|
|
// Scripts injected by innerHTML are inactive, so we have to relocate them
|
|
|
|
// through DOM manipulation to activate their contents.
|
|
|
|
Array.forEach(snippetsElt.getElementsByTagName("script"), function(elt) {
|
|
|
|
let relocatedScript = document.createElement("script");
|
|
|
|
relocatedScript.type = "text/javascript;version=1.8";
|
|
|
|
relocatedScript.text = elt.text;
|
|
|
|
elt.parentNode.replaceChild(relocatedScript, elt);
|
|
|
|
});
|
|
|
|
return;
|
|
|
|
} catch (ex) {
|
|
|
|
// Bad content, continue to show default snippets.
|
2010-09-11 00:45:08 -07:00
|
|
|
}
|
|
|
|
}
|
2010-11-08 06:03:44 -08:00
|
|
|
|
|
|
|
// Show default snippets otherwise.
|
|
|
|
let defaultSnippetsElt = document.getElementById("defaultSnippets");
|
|
|
|
let entries = defaultSnippetsElt.querySelectorAll("span");
|
|
|
|
// Choose a random snippet. Assume there is always at least one.
|
2012-03-14 16:10:12 -07:00
|
|
|
let randIndex = Math.floor(Math.random() * entries.length);
|
2010-11-08 06:03:44 -08:00
|
|
|
let entry = entries[randIndex];
|
|
|
|
// Inject url in the eventual link.
|
|
|
|
if (DEFAULT_SNIPPETS_URLS[randIndex]) {
|
|
|
|
let links = entry.getElementsByTagName("a");
|
2011-02-04 18:26:00 -08:00
|
|
|
// Default snippets can have only one link, otherwise something is messed
|
|
|
|
// up in the translation.
|
|
|
|
if (links.length == 1) {
|
|
|
|
links[0].href = DEFAULT_SNIPPETS_URLS[randIndex];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
// Move the default snippet to the snippets element.
|
|
|
|
snippetsElt.appendChild(entry);
|
|
|
|
}
|
|
|
|
|
2012-03-14 16:10:12 -07:00
|
|
|
function fitToWidth() {
|
|
|
|
if (window.scrollMaxX) {
|
|
|
|
document.body.setAttribute("narrow", "true");
|
|
|
|
} else if (document.body.hasAttribute("narrow")) {
|
|
|
|
document.body.removeAttribute("narrow");
|
|
|
|
fitToWidth();
|
2010-11-08 06:03:44 -08:00
|
|
|
}
|
2010-09-11 00:45:08 -07:00
|
|
|
}
|