Abrowser: new about:home page and artwork
This commit is contained in:
parent
ccd5b3b467
commit
550bed8e8a
16 changed files with 223 additions and 908 deletions
|
|
@ -1,24 +0,0 @@
|
|||
Extension built by Ruben Rodriguez using pieces of torbutton as a template
|
||||
|
||||
Copyright (c) 2014, Ruben Rodriguez <ruben@gnu.org>
|
||||
Copyright (c) 2013, The Tor Project, Inc.
|
||||
Copyright (c) 2006 Scott Squires, Oleg Ivanov
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a
|
||||
copy of this software and associated documentation files (the "Software"),
|
||||
to deal in the Software without restriction, including without limitation
|
||||
the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
and/or sell copies of the Software, and to permit persons to whom the
|
||||
Software is furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included
|
||||
in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
|
||||
OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
|
||||
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||
OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
|
|
@ -1,9 +0,0 @@
|
|||
content abrowserhome chrome/content/
|
||||
|
||||
locale abrowserhome af chrome/locale/es/
|
||||
locale abrowserhome ak chrome/locale/en/
|
||||
|
||||
component {a364a9c0-2960-11e4-8c21-0800200c9a66} components/aboutAbrowser.js
|
||||
contract @mozilla.org/network/protocol/about;1?what=startpage {a364a9c0-2960-11e4-8c21-0800200c9a66}
|
||||
contract @mozilla.org/network/protocol/about;1?what=home {a364a9c0-2960-11e4-8c21-0800200c9a66}
|
||||
|
||||
|
|
@ -1,364 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<!-- 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/. -->
|
||||
|
||||
<!DOCTYPE html [
|
||||
<!ENTITY % htmlDTD
|
||||
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
|
||||
"DTD/xhtml1-strict.dtd">
|
||||
%htmlDTD;
|
||||
<!ENTITY % globalDTD SYSTEM "chrome://global/locale/global.dtd">
|
||||
%globalDTD;
|
||||
<!ENTITY % aboutHomeDTD SYSTEM "chrome://browser/locale/aboutHome.dtd">
|
||||
%aboutHomeDTD;
|
||||
<!ENTITY % browserDTD SYSTEM "chrome://browser/locale/browser.dtd" >
|
||||
%browserDTD;
|
||||
]>
|
||||
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<title>&abouthome.pageTitle;</title>
|
||||
|
||||
<link rel="icon" type="image/png" id="favicon"
|
||||
href="chrome://branding/content/icon32.png"/>
|
||||
<link rel="stylesheet" type="text/css" media="all"
|
||||
href="chrome://browser/content/abouthome/aboutHome.css"/>
|
||||
|
||||
<style>
|
||||
|
||||
body{
|
||||
margin:0;
|
||||
background-color:#f2f2f2;
|
||||
}
|
||||
#box{
|
||||
display: flex;
|
||||
flex-flow: column;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
align-content: center;
|
||||
height: 100vh;
|
||||
}
|
||||
|
||||
#topSection, #box3, #block-horizontal-margin{
|
||||
flex: 0 1 auto;
|
||||
align-self: auto;
|
||||
}
|
||||
#topSection {
|
||||
margin-top:10vh;
|
||||
order:1;
|
||||
}
|
||||
#block-horizontal-margin{
|
||||
order:2;
|
||||
}
|
||||
#box3{
|
||||
order:3;
|
||||
width:100vw;
|
||||
}
|
||||
|
||||
|
||||
label{
|
||||
position:relative;
|
||||
bottom:2px;
|
||||
left:2px;
|
||||
}
|
||||
|
||||
#addonsform form{
|
||||
position:relative;
|
||||
left:10px;
|
||||
}
|
||||
|
||||
em {
|
||||
color:#600
|
||||
}
|
||||
|
||||
a{
|
||||
color:#004998
|
||||
}
|
||||
|
||||
#addonsform{
|
||||
background-color:#fff;
|
||||
font-size:14px;
|
||||
padding:10px 25px 20px 25px;
|
||||
border-radius: 5px;
|
||||
box-shadow: 0 0px 2px hsla(0,0%,0%,.3) inset;
|
||||
}
|
||||
|
||||
.block-side-margin {
|
||||
min-width: 16px;
|
||||
}
|
||||
|
||||
|
||||
ul li {
|
||||
list-style:none;
|
||||
float:left;
|
||||
}
|
||||
|
||||
ul li a{
|
||||
font-weight:bold;
|
||||
text-shadow:0px 1px 0px #fff;
|
||||
padding:5px 10px 5px 10px;
|
||||
border-radius:3px;
|
||||
margin:5px;
|
||||
color:#888;
|
||||
background:#dcdcdc;
|
||||
box-shadow: 0px 2px 0 #ccc ;
|
||||
}
|
||||
|
||||
ul li a:hover{
|
||||
color:#666;
|
||||
background:#ccc;
|
||||
box-shadow: 0px 2px 0 #aaa;
|
||||
|
||||
}
|
||||
|
||||
.titlelink{
|
||||
font-weight:bold;
|
||||
color: #678;
|
||||
text-shadow: 0px 1px 0px white;
|
||||
}
|
||||
|
||||
#footer{
|
||||
min-height:50px;
|
||||
display: -moz-box;
|
||||
-moz-box-align: center;
|
||||
-moz-box-pack: center;
|
||||
width: 100%;
|
||||
background-color: hsla(0,0%,0%,.03);
|
||||
border-top: 1px solid hsla(0,0%,0%,.03);
|
||||
box-shadow: 0 -1px 2px hsla(0,0%,0%,.1) inset, 0 -1px 0 hsla(0,0%,100%,.25);
|
||||
}
|
||||
|
||||
#searchLogoContainer{
|
||||
color:#888;
|
||||
text-shadow: 0 1px 0 #fff;
|
||||
}
|
||||
|
||||
</style>
|
||||
|
||||
<script type="text/javascript">
|
||||
<![CDATA[
|
||||
|
||||
Components.utils.import("resource://gre/modules/AddonManager.jsm");
|
||||
Components.utils.import("resource://gre/modules/Services.jsm");
|
||||
|
||||
function flip(sel){
|
||||
var id = sel.id;
|
||||
var addonObj=-1;
|
||||
AddonManager.getAddonByID(id, function(addon) {
|
||||
addonObj=addon;
|
||||
});
|
||||
var thread = Components.classes["@mozilla.org/thread-manager;1"].getService().currentThread;
|
||||
while (addonObj == null || addonObj == -1)
|
||||
thread.processNextEvent(true);
|
||||
addonObj.userDisabled = addonObj.isActive;
|
||||
if ( addonObj.operationsRequiringRestart != 0)
|
||||
alert("This change will be applied when you restart Abrowser");
|
||||
}
|
||||
|
||||
function languagesettings(sel){
|
||||
if (sel.checked)
|
||||
Services.prefs.setCharPref(sel.id,sel.value);
|
||||
else
|
||||
Services.prefs.clearUserPref(sel.id);
|
||||
}
|
||||
|
||||
function fontsettings(sel){
|
||||
if (sel.checked)
|
||||
Services.prefs.setIntPref(sel.id,sel.value);
|
||||
else
|
||||
Services.prefs.clearUserPref(sel.id);
|
||||
}
|
||||
|
||||
function jssettings(sel){
|
||||
if (sel.checked){
|
||||
Services.prefs.setBoolPref(sel.id, !sel.checked);}
|
||||
else
|
||||
Services.prefs.clearUserPref(sel.id);
|
||||
}
|
||||
|
||||
function prepare(){
|
||||
|
||||
srchsvc = Components.classes["@mozilla.org/browser/search-service;1"].getService(Components.interfaces.nsIBrowserSearchService);
|
||||
currentEngine = srchsvc.defaultEngine.name;
|
||||
document.getElementById("searchLogoContainer").innerHTML=currentEngine+":";
|
||||
|
||||
/*try {
|
||||
Services.prefs.getCharPref("extensions.abrowserhome.intl.accept_languages");
|
||||
}catch(err){
|
||||
Services.prefs.setCharPref("intl.accept_languages","en-US, en");
|
||||
Services.prefs.setCharPref("extensions.abrowserhome.intl.accept_languages","en-US, en");
|
||||
}
|
||||
|
||||
try {
|
||||
Services.prefs.getIntPref("extensions.abrowserhome.browser.display.use_document_fonts");
|
||||
}catch(err){
|
||||
Services.prefs.setIntPref("browser.display.use_document_fonts",0);
|
||||
Services.prefs.setIntPref("extensions.abrowserhome.browser.display.use_document_fonts",0);
|
||||
}*/
|
||||
|
||||
var f = document.createElement("form");
|
||||
|
||||
var extensions=[
|
||||
["jid1-KtlZuoiikVfFew@jetpack","Block execution of non-free <a target=\"_blank\" href=\"http://www.gnu.org/software/librejs/\">JavaScript</a> <em>(experimental)</em>"],
|
||||
["spyblock@gnu.org","Block privacy <a target=\"_blank\" href=\"https://easylist.adblockplus.org\">trackers</a>"],
|
||||
["torproxy@trisquel","Use <a target=\"_blank\" href=\"https://www.torproject.org/about/overview.html.en#overview\">Tor</a> when in Private Mode"],
|
||||
["https-everywhere@eff.org","Get redirected to <a target=\"_blank\" href=\"https://www.eff.org/https-everywhere/faq\">HTTPS</a> when possible"],
|
||||
]
|
||||
|
||||
for (var i=0; i<extensions.length; ++i) {
|
||||
var ex=extensions[i][0];
|
||||
|
||||
var tmp = document.createElement("input");
|
||||
tmp.setAttribute('type',"checkbox");
|
||||
tmp.setAttribute('id', ex);
|
||||
tmp.setAttribute('onclick','flip(this);');
|
||||
|
||||
var label = document.createElement("label");
|
||||
label.htmlFor = ex ;
|
||||
label.id = ex+'label';
|
||||
label.appendChild(document.createTextNode(''));
|
||||
|
||||
f.appendChild(tmp);
|
||||
f.appendChild(label);
|
||||
|
||||
document.getElementById("addonsform").appendChild(f);
|
||||
}
|
||||
|
||||
var tmp = document.createElement("input");
|
||||
tmp.setAttribute('type',"checkbox");
|
||||
tmp.setAttribute('id', "intl.accept_languages");
|
||||
tmp.setAttribute('value', "en-US, en");
|
||||
tmp.setAttribute('onclick','languagesettings(this);');
|
||||
value=Services.prefs.getCharPref("intl.accept_languages");
|
||||
tmp.checked=(value=="en-US, en");
|
||||
var label = document.createElement("label");
|
||||
label.htmlFor = "intl.accept_languages" ;
|
||||
label.id = "intl.accept_languageslabel";
|
||||
label.appendChild(document.createTextNode("Request pages in English"));
|
||||
f.appendChild(tmp);
|
||||
f.appendChild(label);
|
||||
f.appendChild(document.createElement("br"));
|
||||
document.getElementById("addonsform").appendChild(f);
|
||||
|
||||
var tmp = document.createElement("input");
|
||||
tmp.setAttribute('type',"checkbox");
|
||||
tmp.setAttribute('id', "browser.display.use_document_fonts");
|
||||
tmp.setAttribute('value', 0);
|
||||
tmp.setAttribute('onclick','fontsettings(this);');
|
||||
value=Services.prefs.getIntPref("browser.display.use_document_fonts");
|
||||
tmp.checked=(value==0);
|
||||
var label = document.createElement("label");
|
||||
label.htmlFor = "browser.display.use_document_fonts" ;
|
||||
label.id = "browser.display.use_document_fontslabel";
|
||||
label.appendChild(document.createTextNode("Use system fonts"));
|
||||
f.appendChild(tmp);
|
||||
f.appendChild(label);
|
||||
f.appendChild(document.createElement("br"));
|
||||
document.getElementById("addonsform").appendChild(f);
|
||||
|
||||
var tmp = document.createElement("input");
|
||||
tmp.setAttribute('type',"checkbox");
|
||||
tmp.setAttribute('id', "javascript.enabled");
|
||||
tmp.setAttribute('value', 0);
|
||||
tmp.setAttribute('onclick','jssettings(this);');
|
||||
value=Services.prefs.getBoolPref("javascript.enabled");
|
||||
tmp.checked=(value==0);
|
||||
var label = document.createElement("label");
|
||||
label.htmlFor = "javascript.enabled" ;
|
||||
label.id = "javascript.enabledlabel";
|
||||
label.appendChild(document.createTextNode("Disable JavaScript"));
|
||||
f.appendChild(tmp);
|
||||
f.appendChild(label);
|
||||
f.appendChild(document.createElement("br"));
|
||||
document.getElementById("addonsform").appendChild(f);
|
||||
|
||||
for (var i=0; i<extensions.length; ++i) {
|
||||
var ex=extensions[i][0];
|
||||
var addonObj=-1;
|
||||
|
||||
AddonManager.getAddonByID(ex, function(addon) {
|
||||
addonObj=addon;
|
||||
});
|
||||
|
||||
var thread = Components.classes["@mozilla.org/thread-manager;1"].getService().currentThread;
|
||||
while ( addonObj == -1)
|
||||
thread.processNextEvent(true);
|
||||
if ( addonObj != null){
|
||||
document.getElementById(ex).checked = addonObj.isActive;
|
||||
//document.getElementById(ex+'label').innerHTML = addonObj.name;
|
||||
document.getElementById(ex+'label').innerHTML = extensions[i][1]+"<br/>";
|
||||
}else{
|
||||
document.getElementById(ex).style.display='none';
|
||||
document.getElementById(ex+'label').style.display='none';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function onSearchSubmit(){
|
||||
|
||||
srchsvc = Components.classes["@mozilla.org/browser/search-service;1"].getService(Components.interfaces.nsIBrowserSearchService);
|
||||
currentEngine = srchsvc.defaultEngine;
|
||||
var selectedText=document.getElementById("searchText").value;
|
||||
submission = currentEngine.getSubmission(selectedText,null);
|
||||
window.location = submission.uri.spec;
|
||||
|
||||
}
|
||||
|
||||
]]>
|
||||
</script>
|
||||
|
||||
</head>
|
||||
|
||||
<body dir="&locale.dir;" onload="prepare();">
|
||||
|
||||
|
||||
<div id="box">
|
||||
<div id="box1">
|
||||
<div id="topSection">
|
||||
<img src="chrome://branding/content/about-logo.png"/>
|
||||
<br/>
|
||||
<br/>
|
||||
<div id="searchContainer">
|
||||
<form name="searchForm" id="searchForm" onsubmit="onSearchSubmit(); return false">
|
||||
<div id="searchLogoContainer"></div>
|
||||
<input type="text" name="q" value="" id="searchText" maxlength="256"
|
||||
autofocus="autofocus" dir="auto"/>
|
||||
<input id="searchSubmit" type="submit" value="Search"/>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div id="box2">
|
||||
<div id="block-horizontal-margin">
|
||||
<div class="block-side-margin"></div>
|
||||
<div id="addonsform">
|
||||
<!--<h3>Enabled privacy features:</h3>-->
|
||||
<p><a target="_blank" href="https://trisquel.info/browser">Abrowser</a> protects your <a target="_blank" href="http://www.gnu.org/philosophy/free-sw.html">freedom</a> and your privacy!<br/><small>For a browser with an even bigger focus on privacy, <a href="apt:icecat">install GNU IceCat</a></small></p>
|
||||
</div>
|
||||
<div class="block-side-margin"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div id="box3">
|
||||
<div id="footer">
|
||||
<p ><a class="titlelink" href="https://trisquel.info">Trisquel GNU/Linux</a></p>
|
||||
<ul style="font-size:0.8em">
|
||||
<li><a href="https://trisquel.info/forum">Forum</a></li>
|
||||
<li><a href="https://trisquel.info/wiki">Wiki</a></li>
|
||||
<li><a href="http://store.trisquel.info/">Store</a></li>
|
||||
<li><a href="https://trisquel.info/donate">Donate</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
||||
|
|
@ -1 +0,0 @@
|
|||
<!ENTITY aboutAbrowser.title "About Abrowser">
|
||||
|
|
@ -1 +0,0 @@
|
|||
<!ENTITY aboutAbrowser.title "Acerca de Abrowser">
|
||||
|
|
@ -1,72 +0,0 @@
|
|||
/*
|
||||
|
||||
Copyright (c) 2014, Ruben Rodriguez <ruben@gnu.org>
|
||||
Copyright (c) 2013, The Tor Project, Inc.
|
||||
Copyright (c) 2006 Scott Squires, Oleg Ivanov
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a
|
||||
copy of this software and associated documentation files (the "Software"),
|
||||
to deal in the Software without restriction, including without limitation
|
||||
the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
and/or sell copies of the Software, and to permit persons to whom the
|
||||
Software is furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included
|
||||
in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
|
||||
OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
|
||||
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||
OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
*/
|
||||
|
||||
// Module specific constants
|
||||
const kMODULE_NAME = "about:abrowser";
|
||||
const kMODULE_CONTRACTID = "@mozilla.org/network/protocol/about;1?what=abrowser";
|
||||
const kMODULE_CID = Components.ID("a364a9c0-2960-11e4-8c21-0800200c9a66");
|
||||
|
||||
const kAboutAbrowserURL = "chrome://abrowserhome/content/aboutAbrowser/aboutAbrowser.xhtml";
|
||||
|
||||
const Cc = Components.classes;
|
||||
const Ci = Components.interfaces;
|
||||
const Cu = Components.utils;
|
||||
|
||||
Cu.import("resource://gre/modules/XPCOMUtils.jsm");
|
||||
|
||||
function AboutAbrowser()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
AboutAbrowser.prototype =
|
||||
{
|
||||
QueryInterface: XPCOMUtils.generateQI([Ci.nsIAboutModule]),
|
||||
|
||||
// nsIClassInfo implementation:
|
||||
classDescription: kMODULE_NAME,
|
||||
classID: kMODULE_CID,
|
||||
contractID: kMODULE_CONTRACTID,
|
||||
|
||||
// nsIAboutModule implementation:
|
||||
newChannel: function(aURI)
|
||||
{
|
||||
let ioSvc = Cc["@mozilla.org/network/io-service;1"]
|
||||
.getService(Ci.nsIIOService);
|
||||
let channel = ioSvc.newChannel(kAboutAbrowserURL, null, null);
|
||||
channel.originalURI = aURI;
|
||||
|
||||
return channel;
|
||||
},
|
||||
|
||||
getURIFlags: function(aURI)
|
||||
{
|
||||
return Ci.nsIAboutModule.ALLOW_SCRIPT;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
const NSGetFactory = XPCOMUtils.generateNSGetFactory([AboutAbrowser]);
|
||||
|
|
@ -1,22 +0,0 @@
|
|||
<?xml version="1.0"?>
|
||||
<RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:em="http://www.mozilla.org/2004/em-rdf#">
|
||||
|
||||
<Description about="urn:mozilla:install-manifest">
|
||||
<em:name>AbrowserHome</em:name>
|
||||
<em:creator>Ruben Rodriguez</em:creator>
|
||||
<em:id>aboutabrowser@trisquel.info</em:id>
|
||||
<em:version>1.1</em:version>
|
||||
<em:updateURL>https://127.0.0.1/</em:updateURL>
|
||||
<em:multiprocessCompatible>true</em:multiprocessCompatible>
|
||||
<!-- <em:updateKey></em:updateKey> -->
|
||||
<!-- firefox -->
|
||||
<em:targetApplication>
|
||||
<Description>
|
||||
<em:id>{ec8030f7-c20a-464f-9b0e-13a3a9e97384}</em:id>
|
||||
<em:minVersion>30.0</em:minVersion>
|
||||
<em:maxVersion>10000.0</em:maxVersion>
|
||||
</Description>
|
||||
</em:targetApplication>
|
||||
</Description>
|
||||
</RDF>
|
||||
|
|
@ -1,8 +1,3 @@
|
|||
%if 0
|
||||
/* 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/. */
|
||||
%endif
|
||||
|
||||
html {
|
||||
font: message-box;
|
||||
|
|
@ -40,8 +35,8 @@ a {
|
|||
}
|
||||
|
||||
#brandLogo {
|
||||
height: 420px;
|
||||
width: 150px;
|
||||
height: 150px;
|
||||
width: 420px;
|
||||
margin: 22px auto 31px;
|
||||
background-image: url("chrome://branding/content/about-logo.png");
|
||||
background-size: 420px 150px;
|
||||
|
|
@ -49,90 +44,105 @@ a {
|
|||
background-repeat: no-repeat;
|
||||
}
|
||||
|
||||
#searchForm,
|
||||
#searchIconAndTextContainer,
|
||||
#snippets {
|
||||
width: 470px;
|
||||
}
|
||||
|
||||
#searchForm {
|
||||
#searchIconAndTextContainer {
|
||||
display: -moz-box;
|
||||
height: 36px;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
#searchLogoContainer {
|
||||
display: -moz-box;
|
||||
-moz-box-align: center;
|
||||
padding-top: 2px;
|
||||
-moz-padding-end: 8px;
|
||||
}
|
||||
|
||||
#searchLogoContainer[hidden] {
|
||||
display: none;
|
||||
}
|
||||
|
||||
#searchEngineLogo {
|
||||
display: inline-block;
|
||||
height: 28px;
|
||||
width: 70px;
|
||||
min-width: 70px;
|
||||
#searchIcon {
|
||||
border: 1px transparent;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
width: 36px;
|
||||
height: 36px;
|
||||
background: url("chrome://browser/skin/search-indicator-magnifying-glass.svg") center center no-repeat;
|
||||
position: absolute;
|
||||
}
|
||||
|
||||
#searchText {
|
||||
margin-left: 0;
|
||||
-moz-box-flex: 1;
|
||||
padding: 6px 8px;
|
||||
padding-top: 6px;
|
||||
padding-bottom: 6px;
|
||||
padding-inline-start: 34px;
|
||||
padding-inline-end: 8px;
|
||||
background: hsla(0,0%,100%,.9) padding-box;
|
||||
border: 1px solid;
|
||||
border-radius: 2px 0 0 2px;
|
||||
border-color: hsla(210,54%,20%,.15) hsla(210,54%,20%,.17) hsla(210,54%,20%,.2);
|
||||
box-shadow: 0 1px 0 hsla(210,65%,9%,.02) inset,
|
||||
0 0 2px hsla(210,65%,9%,.1) inset,
|
||||
0 1px 0 hsla(0,0%,100%,.2);
|
||||
border-radius: 2.5px 0 0 2.5px;
|
||||
color: inherit;
|
||||
unicode-bidi: plaintext;
|
||||
}
|
||||
|
||||
#searchText:-moz-dir(rtl) {
|
||||
border-radius: 0 2.5px 2.5px 0;
|
||||
#searchText:dir(rtl) {
|
||||
border-radius: 0 2px 2px 0;
|
||||
}
|
||||
|
||||
#searchText[aria-expanded="true"] {
|
||||
border-radius: 2px 0 0 0;
|
||||
}
|
||||
|
||||
#searchText[aria-expanded="true"]:dir(rtl) {
|
||||
border-radius: 0 2px 0 0;
|
||||
}
|
||||
|
||||
#searchText[keepfocus],
|
||||
#searchText:focus,
|
||||
#searchText[autofocus] {
|
||||
border-color: hsla(206,100%,60%,.6) hsla(206,76%,52%,.6) hsla(204,100%,40%,.6);
|
||||
}
|
||||
|
||||
#searchSubmit {
|
||||
-moz-margin-start: -1px;
|
||||
background: linear-gradient(hsla(0,0%,100%,.8), hsla(0,0%,100%,.1)) padding-box;
|
||||
padding: 0 9px;
|
||||
margin-inline-start: -1px;
|
||||
color: transparent;
|
||||
background: url("chrome://browser/skin/search-arrow-go.svg") center center no-repeat, linear-gradient(hsla(0,0%,100%,.8), hsla(0,0%,100%,.1)) padding-box;
|
||||
-moz-context-properties: fill;
|
||||
fill: #616366;
|
||||
padding: 0;
|
||||
border: 1px solid;
|
||||
border-color: hsla(210,54%,20%,.15) hsla(210,54%,20%,.17) hsla(210,54%,20%,.2);
|
||||
-moz-border-start: 1px solid transparent;
|
||||
border-radius: 0 2.5px 2.5px 0;
|
||||
border-color: hsla(210,54%,20%,.15) hsla(210,54%,20%,.17) hsla(210,54%,20%,.2) transparent;
|
||||
border-radius: 0 2px 2px 0;
|
||||
box-shadow: 0 0 2px hsla(0,0%,100%,.5) inset,
|
||||
0 1px 0 hsla(0,0%,100%,.2);
|
||||
cursor: pointer;
|
||||
transition-property: background-color, border-color, box-shadow;
|
||||
transition-duration: 150ms;
|
||||
width: 50px;
|
||||
}
|
||||
|
||||
#searchSubmit:-moz-dir(rtl) {
|
||||
border-radius: 2.5px 0 0 2.5px;
|
||||
#searchSubmit:dir(rtl) {
|
||||
transform: scaleX(-1);
|
||||
}
|
||||
|
||||
#searchText:focus + #searchSubmit,
|
||||
#searchText[keepfocus] + #searchSubmit,
|
||||
#searchText + #searchSubmit:hover,
|
||||
#searchText[autofocus] + #searchSubmit {
|
||||
border-color: #59b5fc #45a3e7 #3294d5;
|
||||
color: white;
|
||||
}
|
||||
|
||||
#searchText:focus + #searchSubmit,
|
||||
#searchText[keepfocus] + #searchSubmit,
|
||||
#searchText[autofocus] + #searchSubmit {
|
||||
background-image: linear-gradient(#4cb1ff, #1793e5);
|
||||
background-image: url("chrome://browser/skin/search-arrow-go.svg"), linear-gradient(#4cb1ff, #1793e5);
|
||||
fill: white;
|
||||
box-shadow: 0 1px 0 hsla(0,0%,100%,.2) inset,
|
||||
0 0 0 1px hsla(0,0%,100%,.1) inset,
|
||||
0 1px 0 hsla(210,54%,20%,.03);
|
||||
}
|
||||
|
||||
#searchText + #searchSubmit:hover {
|
||||
background-image: linear-gradient(#66bdff, #0d9eff);
|
||||
background-image: url("chrome://browser/skin/search-arrow-go.svg"), linear-gradient(#66bdff, #0d9eff);
|
||||
fill: white;
|
||||
box-shadow: 0 1px 0 hsla(0,0%,100%,.2) inset,
|
||||
0 0 0 1px hsla(0,0%,100%,.1) inset,
|
||||
0 1px 0 hsla(210,54%,20%,.03),
|
||||
|
|
@ -150,19 +160,19 @@ a {
|
|||
#rightsSnippet {
|
||||
display: block;
|
||||
min-height: 38px;
|
||||
background: 30px center no-repeat;
|
||||
background: 0 center no-repeat;
|
||||
padding: 6px 0;
|
||||
-moz-padding-start: 79px;
|
||||
padding-inline-start: 49px;
|
||||
}
|
||||
|
||||
#rightsSnippet[hidden] {
|
||||
display: none;
|
||||
}
|
||||
|
||||
#defaultSnippet1:-moz-dir(rtl),
|
||||
#defaultSnippet2:-moz-dir(rtl),
|
||||
#rightsSnippet:-moz-dir(rtl) {
|
||||
background-position: right 30px center;
|
||||
#defaultSnippet1:dir(rtl),
|
||||
#defaultSnippet2:dir(rtl),
|
||||
#rightsSnippet:dir(rtl) {
|
||||
background-position: right 0 center;
|
||||
}
|
||||
|
||||
#defaultSnippet1 {
|
||||
|
|
@ -217,7 +227,7 @@ body[narrow] #launcher[session] {
|
|||
white-space: normal;
|
||||
background: transparent padding-box;
|
||||
border: 1px solid transparent;
|
||||
border-radius: 2.5px;
|
||||
border-radius: 2px;
|
||||
color: #525c66;
|
||||
font-size: 75%;
|
||||
cursor: pointer;
|
||||
|
|
@ -299,10 +309,6 @@ body[narrow] #restorePreviousSession {
|
|||
content: url("chrome://browser/content/abouthome/history.png");
|
||||
}
|
||||
|
||||
#apps::before {
|
||||
content: url("chrome://browser/content/abouthome/apps.png");
|
||||
}
|
||||
|
||||
#addons::before {
|
||||
content: url("chrome://browser/content/abouthome/addons.png");
|
||||
}
|
||||
|
|
@ -322,10 +328,10 @@ body[narrow] #restorePreviousSession {
|
|||
display: inline-block; /* display on same line as text label */
|
||||
vertical-align: middle;
|
||||
margin-bottom: 0;
|
||||
-moz-margin-end: 8px;
|
||||
margin-inline-end: 8px;
|
||||
}
|
||||
|
||||
#restorePreviousSession:-moz-dir(rtl)::before {
|
||||
#restorePreviousSession:dir(rtl)::before {
|
||||
transform: scaleX(-1);
|
||||
}
|
||||
|
||||
|
|
@ -339,21 +345,21 @@ body[narrow] #restorePreviousSession::before {
|
|||
display: block;
|
||||
position: relative; /* pin wordmark to edge of document, not of viewport */
|
||||
-moz-box-ordinal-group: 0;
|
||||
opacity: .5;
|
||||
opacity: .2;
|
||||
transition: opacity 150ms;
|
||||
}
|
||||
|
||||
#aboutMozilla:hover {
|
||||
opacity: 1;
|
||||
opacity: .6;
|
||||
}
|
||||
|
||||
#aboutMozilla::before {
|
||||
content: url("chrome://browser/content/abouthome/mozilla.png");
|
||||
content: url("chrome://browser/content/abouthome/mozilla.svg");
|
||||
display: block;
|
||||
position: absolute;
|
||||
top: 12px;
|
||||
right: 12px;
|
||||
width: 69px;
|
||||
offset-inline-end: 12px;
|
||||
width: 67px;
|
||||
height: 19px;
|
||||
}
|
||||
|
||||
|
|
@ -362,9 +368,6 @@ body[narrow] #restorePreviousSession::before {
|
|||
* rather than upscaling the original-size ones (bug 818940).
|
||||
*/
|
||||
@media not all and (max-resolution: 1dppx) {
|
||||
#brandLogo {
|
||||
background-image: url("chrome://branding/content/about-logo@2x.png");
|
||||
}
|
||||
|
||||
#defaultSnippet1,
|
||||
#defaultSnippet2,
|
||||
|
|
@ -380,12 +383,15 @@ body[narrow] #restorePreviousSession::before {
|
|||
background-image: url("chrome://browser/content/abouthome/snippet2@2x.png");
|
||||
}
|
||||
|
||||
.launchButton::before,
|
||||
#aboutMozilla::before {
|
||||
.launchButton::before {
|
||||
transform: scale(.5);
|
||||
transform-origin: 0 0;
|
||||
}
|
||||
|
||||
.launchButton:dir(rtl)::before {
|
||||
transform: scale(.5) translateX(32px);
|
||||
}
|
||||
|
||||
#downloads::before {
|
||||
content: url("chrome://browser/content/abouthome/downloads@2x.png");
|
||||
}
|
||||
|
|
@ -398,10 +404,6 @@ body[narrow] #restorePreviousSession::before {
|
|||
content: url("chrome://browser/content/abouthome/history@2x.png");
|
||||
}
|
||||
|
||||
#apps::before {
|
||||
content: url("chrome://browser/content/abouthome/apps@2x.png");
|
||||
}
|
||||
|
||||
#addons::before {
|
||||
content: url("chrome://browser/content/abouthome/addons@2x.png");
|
||||
}
|
||||
|
|
@ -422,8 +424,8 @@ body[narrow] #restorePreviousSession::before {
|
|||
content: url("chrome://browser/content/abouthome/restore@2x.png");
|
||||
}
|
||||
|
||||
#aboutMozilla::before {
|
||||
content: url("chrome://browser/content/abouthome/mozilla@2x.png");
|
||||
#restorePreviousSession:dir(rtl)::before {
|
||||
transform: scale(-0.5, 0.5) translateX(24px);
|
||||
transform-origin: top center;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -2,158 +2,37 @@
|
|||
* 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/. */
|
||||
|
||||
const SEARCH_ENGINES = {
|
||||
"Google": {
|
||||
// This is the "2x" image designed for OS X retina resolution, Windows at 192dpi, etc.;
|
||||
// it will be scaled down as necessary on lower-dpi displays.
|
||||
image: "data:image/png;base64," +
|
||||
"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"
|
||||
}
|
||||
};
|
||||
"use strict";
|
||||
|
||||
/* import-globals-from ../contentSearchUI.js */
|
||||
|
||||
// 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 = [ "" ];
|
||||
const DEFAULT_SNIPPETS_URLS = [];
|
||||
|
||||
const SNIPPETS_UPDATE_INTERVAL_MS = 86400000; // 1 Day.
|
||||
const SNIPPETS_UPDATE_INTERVAL_MS = 14400000; // 4 hours.
|
||||
|
||||
// IndexedDB storage constants.
|
||||
const DATABASE_NAME = "abouthome";
|
||||
const DATABASE_VERSION = 1;
|
||||
const DATABASE_STORAGE = "persistent";
|
||||
const SNIPPETS_OBJECTSTORE_NAME = "snippets";
|
||||
var searchText;
|
||||
|
||||
// This global tracks if the page has been set up before, to prevent double inits
|
||||
let gInitialized = false;
|
||||
let gObserver = new MutationObserver(function (mutations) {
|
||||
var gInitialized = false;
|
||||
var gObserver = new MutationObserver(function(mutations) {
|
||||
for (let mutation of mutations) {
|
||||
if (mutation.attributeName == "searchEngineName") {
|
||||
setupSearchEngine();
|
||||
// The addition of the restore session button changes our width:
|
||||
if (mutation.attributeName == "session") {
|
||||
fitToWidth();
|
||||
}
|
||||
if (mutation.attributeName == "snippetsVersion") {
|
||||
if (!gInitialized) {
|
||||
// ensureSnippetsMapThen(loadSnippets);
|
||||
ensureSnippetsMapThen(loadSnippets);
|
||||
gInitialized = true;
|
||||
}
|
||||
return;
|
||||
|
|
@ -161,15 +40,17 @@ let gObserver = new MutationObserver(function (mutations) {
|
|||
}
|
||||
});
|
||||
|
||||
window.addEventListener("pageshow", function () {
|
||||
window.addEventListener("pageshow", function() {
|
||||
// Delay search engine setup, cause browser.js::BrowserOnAboutPageLoad runs
|
||||
// later and may use asynchronous getters.
|
||||
window.gObserver.observe(document.documentElement, { attributes: true });
|
||||
window.gObserver.observe(document.getElementById("launcher"), { attributes: true });
|
||||
fitToWidth();
|
||||
setupSearch();
|
||||
window.addEventListener("resize", fitToWidth);
|
||||
|
||||
// Ask chrome to update snippets.
|
||||
var event = new CustomEvent("AboutHomeLoad", {bubbles:true});
|
||||
var event = new CustomEvent("AboutHomeLoad", {bubbles: true});
|
||||
document.dispatchEvent(event);
|
||||
});
|
||||
|
||||
|
|
@ -178,11 +59,39 @@ window.addEventListener("pagehide", function() {
|
|||
window.removeEventListener("resize", fitToWidth);
|
||||
});
|
||||
|
||||
window.addEventListener("keypress", ev => {
|
||||
if (ev.defaultPrevented) {
|
||||
return;
|
||||
}
|
||||
|
||||
// don't focus the search-box on keypress if something other than the
|
||||
// body or document element has focus - don't want to steal input from other elements
|
||||
// Make an exception for <a> and <button> elements (and input[type=button|submit])
|
||||
// which don't usefully take keypresses anyway.
|
||||
// (except space, which is handled below)
|
||||
if (document.activeElement && document.activeElement != document.body &&
|
||||
document.activeElement != document.documentElement &&
|
||||
!["a", "button"].includes(document.activeElement.localName) &&
|
||||
!document.activeElement.matches("input:-moz-any([type=button],[type=submit])")) {
|
||||
return;
|
||||
}
|
||||
|
||||
let modifiers = ev.ctrlKey + ev.altKey + ev.metaKey;
|
||||
// ignore Ctrl/Cmd/Alt, but not Shift
|
||||
// also ignore Tab, Insert, PageUp, etc., and Space
|
||||
if (modifiers != 0 || ev.charCode == 0 || ev.charCode == 32)
|
||||
return;
|
||||
|
||||
searchText.focus();
|
||||
// need to send the first keypress outside the search-box manually to it
|
||||
searchText.value += ev.key;
|
||||
});
|
||||
|
||||
// This object has the same interface as Map and is used to store and retrieve
|
||||
// the snippets data. It is lazily initialized by ensureSnippetsMapThen(), so
|
||||
// be sure its callback returned before trying to use it.
|
||||
let gSnippetsMap;
|
||||
let gSnippetsMapCallbacks = [];
|
||||
var gSnippetsMap;
|
||||
var gSnippetsMapCallbacks = [];
|
||||
|
||||
/**
|
||||
* Ensure the snippets map is properly initialized.
|
||||
|
|
@ -192,9 +101,7 @@ let gSnippetsMapCallbacks = [];
|
|||
* @note Snippets should never directly manage the underlying storage, since
|
||||
* it may change inadvertently.
|
||||
*/
|
||||
function ensureSnippetsMapThen(aCallback)
|
||||
{
|
||||
return;
|
||||
function ensureSnippetsMapThen(aCallback) {
|
||||
if (gSnippetsMap) {
|
||||
aCallback(gSnippetsMap);
|
||||
return;
|
||||
|
|
@ -207,7 +114,7 @@ return;
|
|||
return;
|
||||
}
|
||||
|
||||
let invokeCallbacks = function () {
|
||||
let invokeCallbacks = function() {
|
||||
if (!gSnippetsMap) {
|
||||
gSnippetsMap = Object.freeze(new Map());
|
||||
}
|
||||
|
|
@ -218,43 +125,52 @@ return;
|
|||
gSnippetsMapCallbacks.length = 0;
|
||||
}
|
||||
|
||||
let openRequest = indexedDB.open(DATABASE_NAME, DATABASE_VERSION);
|
||||
let openRequest = indexedDB.open(DATABASE_NAME, {version: DATABASE_VERSION,
|
||||
storage: DATABASE_STORAGE});
|
||||
|
||||
openRequest.onerror = function (event) {
|
||||
openRequest.onerror = function(event) {
|
||||
// Try to delete the old database so that we can start this process over
|
||||
// next time.
|
||||
indexedDB.deleteDatabase(DATABASE_NAME);
|
||||
invokeCallbacks();
|
||||
};
|
||||
|
||||
openRequest.onupgradeneeded = function (event) {
|
||||
openRequest.onupgradeneeded = function(event) {
|
||||
let db = event.target.result;
|
||||
if (!db.objectStoreNames.contains(SNIPPETS_OBJECTSTORE_NAME)) {
|
||||
db.createObjectStore(SNIPPETS_OBJECTSTORE_NAME);
|
||||
}
|
||||
}
|
||||
|
||||
openRequest.onsuccess = function (event) {
|
||||
openRequest.onsuccess = function(event) {
|
||||
let db = event.target.result;
|
||||
|
||||
db.onerror = function (event) {
|
||||
db.onerror = function() {
|
||||
invokeCallbacks();
|
||||
}
|
||||
|
||||
db.onversionchange = function (event) {
|
||||
event.target.close();
|
||||
db.onversionchange = function(versionChangeEvent) {
|
||||
versionChangeEvent.target.close();
|
||||
invokeCallbacks();
|
||||
}
|
||||
|
||||
let cache = new Map();
|
||||
let cursorRequest = db.transaction(SNIPPETS_OBJECTSTORE_NAME)
|
||||
let cursorRequest;
|
||||
try {
|
||||
cursorRequest = db.transaction(SNIPPETS_OBJECTSTORE_NAME)
|
||||
.objectStore(SNIPPETS_OBJECTSTORE_NAME).openCursor();
|
||||
cursorRequest.onerror = function (event) {
|
||||
} catch (ex) {
|
||||
console.error(ex);
|
||||
invokeCallbacks();
|
||||
return;
|
||||
}
|
||||
|
||||
cursorRequest.onerror = function() {
|
||||
invokeCallbacks();
|
||||
}
|
||||
|
||||
cursorRequest.onsuccess = function(event) {
|
||||
let cursor = event.target.result;
|
||||
cursorRequest.onsuccess = function(cursorRequestEvent) {
|
||||
let cursor = cursorRequestEvent.target.result;
|
||||
|
||||
// Populate the cache from the persistent storage.
|
||||
if (cursor) {
|
||||
|
|
@ -265,24 +181,24 @@ return;
|
|||
|
||||
// The cache has been filled up, create the snippets map.
|
||||
gSnippetsMap = Object.freeze({
|
||||
get: function (aKey) cache.get(aKey),
|
||||
set: function (aKey, aValue) {
|
||||
get: (aKey) => cache.get(aKey),
|
||||
set(aKey, aValue) {
|
||||
db.transaction(SNIPPETS_OBJECTSTORE_NAME, "readwrite")
|
||||
.objectStore(SNIPPETS_OBJECTSTORE_NAME).put(aValue, aKey);
|
||||
return cache.set(aKey, aValue);
|
||||
},
|
||||
has: function (aKey) cache.has(aKey),
|
||||
delete: function (aKey) {
|
||||
has: (aKey) => cache.has(aKey),
|
||||
delete(aKey) {
|
||||
db.transaction(SNIPPETS_OBJECTSTORE_NAME, "readwrite")
|
||||
.objectStore(SNIPPETS_OBJECTSTORE_NAME).delete(aKey);
|
||||
return cache.delete(aKey);
|
||||
},
|
||||
clear: function () {
|
||||
clear() {
|
||||
db.transaction(SNIPPETS_OBJECTSTORE_NAME, "readwrite")
|
||||
.objectStore(SNIPPETS_OBJECTSTORE_NAME).clear();
|
||||
return cache.clear();
|
||||
},
|
||||
get size() cache.size
|
||||
get size() { return cache.size; },
|
||||
});
|
||||
|
||||
setTimeout(invokeCallbacks, 0);
|
||||
|
|
@ -290,61 +206,39 @@ return;
|
|||
}
|
||||
}
|
||||
|
||||
function onSearchSubmit(aEvent)
|
||||
{
|
||||
let searchTerms = document.getElementById("searchText").value;
|
||||
let engineName = document.documentElement.getAttribute("searchEngineName");
|
||||
|
||||
if (engineName && searchTerms.length > 0) {
|
||||
// Send an event that will perform a search and Firefox Health Report will
|
||||
// record that a search from about:home has occurred.
|
||||
let eventData = JSON.stringify({
|
||||
engineName: engineName,
|
||||
searchTerms: searchTerms
|
||||
});
|
||||
let event = new CustomEvent("AboutHomeSearchEvent", {detail: eventData});
|
||||
document.dispatchEvent(event);
|
||||
}
|
||||
|
||||
aEvent.preventDefault();
|
||||
function onSearchSubmit(aEvent) {
|
||||
gContentSearchController.search(aEvent);
|
||||
}
|
||||
|
||||
|
||||
function setupSearchEngine()
|
||||
{
|
||||
var gContentSearchController;
|
||||
|
||||
function setupSearch() {
|
||||
// Set submit button label for when CSS background are disabled (e.g.
|
||||
// high contrast mode).
|
||||
document.getElementById("searchSubmit").value =
|
||||
document.body.getAttribute("dir") == "ltr" ? "\u25B6" : "\u25C0";
|
||||
|
||||
// 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 = document.getElementById("searchText");
|
||||
searchText.addEventListener("blur", function() {
|
||||
searchText.removeAttribute("autofocus");
|
||||
});
|
||||
}, {once: true});
|
||||
|
||||
let searchEngineName = document.documentElement.getAttribute("searchEngineName");
|
||||
let searchEngineInfo = SEARCH_ENGINES[searchEngineName];
|
||||
let logoElt = document.getElementById("searchEngineLogo");
|
||||
|
||||
// Add search engine logo.
|
||||
if (searchEngineInfo && searchEngineInfo.image) {
|
||||
logoElt.parentNode.hidden = false;
|
||||
logoElt.src = searchEngineInfo.image;
|
||||
logoElt.alt = searchEngineName;
|
||||
searchText.placeholder = "";
|
||||
if (!gContentSearchController) {
|
||||
gContentSearchController =
|
||||
new ContentSearchUIController(searchText, searchText.parentNode,
|
||||
"abouthome", "homepage");
|
||||
}
|
||||
else {
|
||||
logoElt.parentNode.hidden = true;
|
||||
searchText.placeholder = searchEngineName;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Inform the test harness that we're done loading the page.
|
||||
*/
|
||||
function loadSucceeded()
|
||||
{
|
||||
var event = new CustomEvent("AboutHomeLoadSnippetsSucceeded", {bubbles:true});
|
||||
function loadCompleted() {
|
||||
var event = new CustomEvent("AboutHomeLoadSnippetsCompleted", {bubbles: true});
|
||||
document.dispatchEvent(event);
|
||||
}
|
||||
|
||||
|
|
@ -352,14 +246,13 @@ function loadSucceeded()
|
|||
* Update the local snippets from the remote storage, then show them through
|
||||
* showSnippets.
|
||||
*/
|
||||
function loadSnippets()
|
||||
{
|
||||
return;
|
||||
function loadSnippets() {
|
||||
return();
|
||||
if (!gSnippetsMap)
|
||||
throw new Error("Snippets map has not properly been initialized");
|
||||
|
||||
// Allow tests to modify the snippets map before using it.
|
||||
var event = new CustomEvent("AboutHomeLoadSnippets", {bubbles:true});
|
||||
var event = new CustomEvent("AboutHomeLoadSnippets", {bubbles: true});
|
||||
document.dispatchEvent(event);
|
||||
|
||||
// Check cached snippets version.
|
||||
|
|
@ -378,32 +271,28 @@ return;
|
|||
if (updateURL && shouldUpdate) {
|
||||
// Try to update from network.
|
||||
let xhr = new XMLHttpRequest();
|
||||
try {
|
||||
xhr.open("GET", updateURL, true);
|
||||
} catch (ex) {
|
||||
showSnippets();
|
||||
loadSucceeded();
|
||||
return;
|
||||
}
|
||||
xhr.timeout = 5000;
|
||||
// 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.
|
||||
gSnippetsMap.set("snippets-last-update", Date.now());
|
||||
xhr.onerror = function (event) {
|
||||
showSnippets();
|
||||
};
|
||||
xhr.onload = function (event)
|
||||
{
|
||||
xhr.onloadend = function() {
|
||||
if (xhr.status == 200) {
|
||||
gSnippetsMap.set("snippets", xhr.responseText);
|
||||
gSnippetsMap.set("snippets-cached-version", currentVersion);
|
||||
}
|
||||
showSnippets();
|
||||
loadSucceeded();
|
||||
loadCompleted();
|
||||
};
|
||||
try {
|
||||
xhr.open("GET", updateURL, true);
|
||||
xhr.send(null);
|
||||
} catch (ex) {
|
||||
showSnippets();
|
||||
loadCompleted();
|
||||
}
|
||||
} else {
|
||||
showSnippets();
|
||||
loadSucceeded();
|
||||
loadCompleted();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -413,10 +302,8 @@ return;
|
|||
* @note: snippets should never invoke showSnippets(), or they may cause
|
||||
* a "too much recursion" exception.
|
||||
*/
|
||||
let _snippetsShown = false;
|
||||
function showSnippets()
|
||||
{
|
||||
return;
|
||||
var _snippetsShown = false;
|
||||
function showSnippets() {
|
||||
let snippetsElt = document.getElementById("snippets");
|
||||
|
||||
// Show about:rights notification, if needed.
|
||||
|
|
@ -445,12 +332,13 @@ return;
|
|||
if (snippets) {
|
||||
// Injecting snippets can throw if they're invalid XML.
|
||||
try {
|
||||
// eslint-disable-next-line no-unsanitized/property
|
||||
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.type = "text/javascript";
|
||||
relocatedScript.text = elt.text;
|
||||
elt.parentNode.replaceChild(relocatedScript, elt);
|
||||
});
|
||||
|
|
@ -466,9 +354,7 @@ return;
|
|||
/**
|
||||
* Clear snippets element contents and show default snippets.
|
||||
*/
|
||||
function showDefaultSnippets()
|
||||
{
|
||||
return;
|
||||
function showDefaultSnippets() {
|
||||
// Clear eventual contents...
|
||||
let snippetsElt = document.getElementById("snippets");
|
||||
snippetsElt.innerHTML = "";
|
||||
|
|
@ -493,7 +379,7 @@ return;
|
|||
}
|
||||
|
||||
function fitToWidth() {
|
||||
if (window.scrollMaxX) {
|
||||
if (document.documentElement.scrollWidth > window.innerWidth) {
|
||||
document.body.setAttribute("narrow", "true");
|
||||
} else if (document.body.hasAttribute("narrow")) {
|
||||
document.body.removeAttribute("narrow");
|
||||
|
|
|
|||
|
|
@ -24,126 +24,41 @@
|
|||
<link rel="icon" type="image/png" id="favicon"
|
||||
href="chrome://branding/content/icon32.png"/>
|
||||
<link rel="stylesheet" type="text/css" media="all"
|
||||
href="chrome://browser/content/contentSearchUI.css"/>
|
||||
<link rel="stylesheet" type="text/css" media="all" defer="defer"
|
||||
href="chrome://browser/content/abouthome/aboutHome.css"/>
|
||||
|
||||
<style>
|
||||
|
||||
body{
|
||||
margin:0;
|
||||
background-color:#f2f2f2;
|
||||
}
|
||||
#box{
|
||||
display: flex;
|
||||
flex-flow: column;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
align-content: center;
|
||||
height: 100vh;
|
||||
}
|
||||
|
||||
#topSection, #box3, #block-horizontal-margin{
|
||||
flex: 0 1 auto;
|
||||
align-self: auto;
|
||||
}
|
||||
#topSection {
|
||||
margin-top:10vh;
|
||||
order:1;
|
||||
}
|
||||
#block-horizontal-margin{
|
||||
order:2;
|
||||
}
|
||||
#box3{
|
||||
order:3;
|
||||
width:100vw;
|
||||
}
|
||||
|
||||
|
||||
label{
|
||||
position:relative;
|
||||
bottom:2px;
|
||||
left:2px;
|
||||
}
|
||||
|
||||
em {
|
||||
color:#600
|
||||
}
|
||||
|
||||
a{
|
||||
color:#004998
|
||||
}
|
||||
|
||||
.block-side-margin {
|
||||
min-width: 16px;
|
||||
-moz-box-flex: 1;
|
||||
}
|
||||
|
||||
#block-horizontal-margin {
|
||||
display: -moz-box;
|
||||
-moz-box-flex: 1;
|
||||
}
|
||||
|
||||
ul li {
|
||||
list-style:none;
|
||||
background:#ddd;
|
||||
border-radius:3px;
|
||||
padding:3px 5px 3px 5px;
|
||||
margin:5px;
|
||||
box-shadow: 0px 2px 0 #ccc ;
|
||||
float:left;
|
||||
}
|
||||
|
||||
ul li a{
|
||||
font-weight:bold;
|
||||
color:#666;
|
||||
text-shadow:0px 1px 0px #fff;
|
||||
}
|
||||
|
||||
.titlelink {
|
||||
font-weight:bold;
|
||||
color:#56728C;
|
||||
text-shadow:0px 1px 0px #fff;
|
||||
}
|
||||
|
||||
#footer{
|
||||
min-height:100px;
|
||||
}
|
||||
|
||||
</style>
|
||||
|
||||
<script type="text/javascript"
|
||||
src="chrome://browser/content/abouthome/aboutHome.js"/>
|
||||
<script type="text/javascript"
|
||||
src="chrome://browser/content/contentSearchUI.js"/>
|
||||
</head>
|
||||
|
||||
<body dir="&locale.dir;">
|
||||
|
||||
<div id="box">
|
||||
<div id="box1">
|
||||
<div class="spacer"/>
|
||||
<div id="topSection">
|
||||
<img src="chrome://branding/content/about-logo.png"/>
|
||||
<div id="brandLogo"></div>
|
||||
|
||||
<div id="searchContainer">
|
||||
<form name="searchForm" id="searchForm" action="https://duckduckgo.com/">
|
||||
<input type="hidden" name="t" value="trisquel"/>
|
||||
<div id="searchIconAndTextContainer">
|
||||
<div id="searchIcon"/>
|
||||
<input type="text" name="q" value="" id="searchText" maxlength="256"
|
||||
autofocus="autofocus"/>
|
||||
<input id="searchSubmit" type="submit" value="Search"/>
|
||||
</form>
|
||||
aria-label="&contentSearchInput.label;" autofocus="autofocus"/>
|
||||
<input id="searchSubmit" type="button" onclick="onSearchSubmit(event)"
|
||||
title="&contentSearchSubmit.tooltip;"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="spacer"/>
|
||||
|
||||
<div id="launcher">
|
||||
<button class="launchButton" id="downloads">&abouthome.downloadsButton.label;</button>
|
||||
<button class="launchButton" id="bookmarks">&abouthome.bookmarksButton.label;</button>
|
||||
<button class="launchButton" id="history">&abouthome.historyButton.label;</button>
|
||||
<button class="launchButton" id="addons">&abouthome.addonsButton.label;</button>
|
||||
<button class="launchButton" id="sync">&abouthome.syncButton.label;</button>
|
||||
<button class="launchButton" id="settings">&abouthome.preferencesButtonUnix.label;</button>
|
||||
<div id="restorePreviousSessionSeparator"/>
|
||||
<button class="launchButton" id="restorePreviousSession">&historyRestoreLastSession.label;</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="box2">
|
||||
<div id="footer" style=" display: -moz-box; -moz-box-align: center; -moz-box-pack: center; width: 100%; background-color: hsla(0,0%,0%,.03); border-top: 1px solid hsla(0,0%,0%,.03); box-shadow: 0 2px 5px hsla(0,0%,0%,.1) inset, 0 -1px 0 hsla(0,0%,100%,.25);">
|
||||
<p ><a class="titlelink" href="https://trisquel.info">Trisquel GNU/Linux</a>:</p>
|
||||
<ul style="font-size:0.8em">
|
||||
<li><a href="https://trisquel.info/forum">Forum</a></li>
|
||||
<li><a href="https://trisquel.info/wiki">Wiki</a></li>
|
||||
<li><a href="http://store.trisquel.info/">Store</a></li>
|
||||
<li><a href="https://trisquel.info/donate">Donate</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
||||
|
|
|
|||
3
helpers/DATA/firefox/abouthome/mozilla.svg
Normal file
3
helpers/DATA/firefox/abouthome/mozilla.svg
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 134 38">
|
||||
<path d="M54.2,21.8c0,3.2-1.6,5.2-4.1,5.2s-3.9-2.2-3.9-5.1,1.5-4.9,3.9-4.9S54.2,18.4,54.2,21.8Zm61.1,3.5a1.7,1.7,0,0,0,2,1.9c1.7,0,3.5-1.2,3.6-4l-2.4-.2C116.8,23,115.3,23.4,115.3,25.3ZM134,0V38H0V0ZM39.2,26.6H37V19a5.4,5.4,0,0,0-5.7-5.8,5.6,5.6,0,0,0-5.4,3.6,5.4,5.4,0,0,0-5.4-3.6,5.5,5.5,0,0,0-5.1,2.8V13.6h-7v3.6h2.2v9.4H8.4v3.6H18.6V26.6H15.4V20.8c0-2.3.9-3.9,3.2-3.9s2.8,1.1,2.8,4v9.4h7V26.6H26.2V20.8c0-2.3.9-3.9,3.2-3.9s2.8,1.1,2.8,4v9.4h7Zm19.9-4.7c0-4.6-2.9-8.7-8.9-8.7s-8.9,4-8.9,8.9,3.5,8.4,8.7,8.4S59.1,27.2,59.1,21.9Zm18.7,2.5L74,24l-.8,2.6H67.9l9.2-10.5-.4-2.5H62.1l-.6,5.8,3.4.4.7-2.6h5.2L61.8,27.7l.5,2.5H76.8Zm8.5-.1h-5v6h5Zm0-10.7h-5v6h5ZM94,30.2l7.2-25.4H96.6L89.4,30.2Zm9.7,0,7.2-25.4h-4.7L99,30.2Zm23.8-.4V27.3h-.7c-.8,0-1.1-.3-1.1-1.3V18.9c0-3.8-3-5.6-6.6-5.6a16,16,0,0,0-7.1,1.5l-.6,3.8,3.8.4.5-1.9a5.2,5.2,0,0,1,2.5-.5c2.7,0,2.7,2,2.7,3.7v.6h-2.7c-3.8,0-7.7,1-7.7,5.1s2.7,4.8,5.1,4.8a6,6,0,0,0,5.3-3.3,3.4,3.4,0,0,0,3.6,3.3A6.4,6.4,0,0,0,127.5,29.8Z"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 34 KiB After Width: | Height: | Size: 43 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 28 KiB |
|
|
@ -123,7 +123,7 @@ pref("browser.newtabpage.directory.source", "");
|
|||
pref("browser.newtabpage.directory.ping", "");
|
||||
pref("browser.newtabpage.introShown", true);
|
||||
// Disable home snippets
|
||||
pref("browser.aboutHomeSnippets.updateUrl", "data:text/html");
|
||||
pref("browser.aboutHomeSnippets.updateUrl", "");
|
||||
|
||||
// Services
|
||||
pref("gecko.handlerService.schemes.mailto.0.name", "");
|
||||
|
|
|
|||
|
|
@ -176,9 +176,11 @@ cp $DATA/bookmarks.html.in browser/locales/generic/profile/bookmarks.html.in
|
|||
cp $DATA/searchplugins/*.xml debian/searchplugins/en-US/
|
||||
cp $DATA/searchplugins/searchplugins.conf debian/config/
|
||||
|
||||
# install aboutabrowser extension
|
||||
cp $DATA/aboutabrowser@trisquel.info -r debian
|
||||
echo "debian/aboutabrowser@trisquel.info @MOZ_ADDONDIR@/extensions/" >> debian/abrowser.install.in
|
||||
# install extensions
|
||||
for extension in $(ls -1 $DATA/extensions/); do
|
||||
cp $DATA/extensions/$extension -r debian
|
||||
echo "debian/$extension @MOZ_ADDONDIR@/extensions/" >> debian/abrowser.install.in
|
||||
done
|
||||
|
||||
# Disable newtab "What is this" popup and config button
|
||||
cat << EOF >> browser/themes/linux/newtab/newTab.css
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue