зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1449792 - Add dark theme, thumbnail debounce and bug fixes to Activity Stream. r=ursula
MozReview-Commit-ID: FXrgjI0f1VF --HG-- extra : rebase_source : d1f4e3ee0b466a3a09ed4737d5adbf979d1cef61
This commit is contained in:
Родитель
1523ce5000
Коммит
0329656aec
|
@ -31,7 +31,6 @@ for (const type of [
|
|||
"DELETE_BOOKMARK_BY_ID",
|
||||
"DELETE_FROM_POCKET",
|
||||
"DELETE_HISTORY_URL",
|
||||
"DELETE_HISTORY_URL_CONFIRM",
|
||||
"DIALOG_CANCEL",
|
||||
"DIALOG_OPEN",
|
||||
"DISABLE_ONBOARDING",
|
||||
|
@ -50,11 +49,11 @@ for (const type of [
|
|||
"OPEN_PRIVATE_WINDOW",
|
||||
"PAGE_PRERENDERED",
|
||||
"PLACES_BOOKMARK_ADDED",
|
||||
"PLACES_BOOKMARK_CHANGED",
|
||||
"PLACES_BOOKMARK_REMOVED",
|
||||
"PLACES_HISTORY_CLEARED",
|
||||
"PLACES_LINKS_DELETED",
|
||||
"PLACES_LINKS_CHANGED",
|
||||
"PLACES_LINK_BLOCKED",
|
||||
"PLACES_LINK_DELETED",
|
||||
"PLACES_SAVED_TO_POCKET",
|
||||
"PREFS_INITIAL_VALUES",
|
||||
"PREF_CHANGED",
|
||||
|
@ -87,15 +86,18 @@ for (const type of [
|
|||
"TELEMETRY_PERFORMANCE_EVENT",
|
||||
"TELEMETRY_UNDESIRED_EVENT",
|
||||
"TELEMETRY_USER_EVENT",
|
||||
"THEME_UPDATE",
|
||||
"TOP_SITES_CANCEL_EDIT",
|
||||
"TOP_SITES_EDIT",
|
||||
"TOP_SITES_INSERT",
|
||||
"TOP_SITES_PIN",
|
||||
"TOP_SITES_PREFS_UPDATED",
|
||||
"TOP_SITES_UNPIN",
|
||||
"TOP_SITES_UPDATED",
|
||||
"TOTAL_BOOKMARKS_REQUEST",
|
||||
"TOTAL_BOOKMARKS_RESPONSE",
|
||||
"UNINIT",
|
||||
"UPDATE_SECTION_PREFS",
|
||||
"WEBEXT_CLICK",
|
||||
"WEBEXT_DISMISS"
|
||||
]) {
|
||||
|
|
|
@ -26,18 +26,26 @@ class _PrerenderData {
|
|||
return result;
|
||||
} else if (next && next.oneOf) {
|
||||
return result.concat(next.oneOf);
|
||||
} else if (next && next.indexedDB) {
|
||||
return result.concat(next.indexedDB);
|
||||
}
|
||||
throw new Error("Your validation configuration is not properly configured");
|
||||
}, []);
|
||||
}
|
||||
|
||||
arePrefsValid(getPref) {
|
||||
arePrefsValid(getPref, indexedDBPrefs) {
|
||||
for (const prefs of this.validation) {
|
||||
// {oneOf: ["foo", "bar"]}
|
||||
if (prefs && prefs.oneOf && !prefs.oneOf.some(name => getPref(name) === this.initialPrefs[name])) {
|
||||
return false;
|
||||
|
||||
// "foo"
|
||||
// {indexedDB: ["foo", "bar"]}
|
||||
} else if (indexedDBPrefs && prefs && prefs.indexedDB) {
|
||||
const anyModifiedPrefs = prefs.indexedDB.some(prefName => indexedDBPrefs.some(pref => pref && pref[prefName]));
|
||||
if (anyModifiedPrefs) {
|
||||
return false;
|
||||
}
|
||||
// "foo"
|
||||
} else if (getPref(prefs) !== this.initialPrefs[prefs]) {
|
||||
return false;
|
||||
}
|
||||
|
@ -52,13 +60,11 @@ this.PrerenderData = new _PrerenderData({
|
|||
"showTopSites": true,
|
||||
"showSearch": true,
|
||||
"topSitesRows": 1,
|
||||
"collapseTopSites": false,
|
||||
"section.highlights.collapsed": false,
|
||||
"section.topstories.collapsed": false,
|
||||
"feeds.section.topstories": true,
|
||||
"feeds.section.highlights": true,
|
||||
"enableWideLayout": true,
|
||||
"sectionOrder": "topsites,topstories,highlights"
|
||||
"sectionOrder": "topsites,topstories,highlights",
|
||||
"collapsed": false
|
||||
},
|
||||
// Prefs listed as invalidating will prevent the prerendered version
|
||||
// of AS from being used if their value is something other than what is listed
|
||||
|
@ -70,14 +76,14 @@ this.PrerenderData = new _PrerenderData({
|
|||
"showTopSites",
|
||||
"showSearch",
|
||||
"topSitesRows",
|
||||
"collapseTopSites",
|
||||
"section.highlights.collapsed",
|
||||
"section.topstories.collapsed",
|
||||
"enableWideLayout",
|
||||
"sectionOrder",
|
||||
// This means if either of these are set to their default values,
|
||||
// prerendering can be used.
|
||||
{oneOf: ["feeds.section.topstories", "feeds.section.highlights"]}
|
||||
{oneOf: ["feeds.section.topstories", "feeds.section.highlights"]},
|
||||
// If any component has the following preference set to `true` it will
|
||||
// invalidate the prerendered version.
|
||||
{indexedDB: ["collapsed"]}
|
||||
],
|
||||
initialSections: [
|
||||
{
|
||||
|
|
|
@ -31,6 +31,7 @@ const INITIAL_STATE = {
|
|||
initialized: false,
|
||||
values: {}
|
||||
},
|
||||
Theme: {className: ""},
|
||||
Dialog: {
|
||||
visible: false,
|
||||
data: {}
|
||||
|
@ -85,10 +86,12 @@ function TopSites(prevState = INITIAL_STATE.TopSites, action) {
|
|||
let newRows;
|
||||
switch (action.type) {
|
||||
case at.TOP_SITES_UPDATED:
|
||||
if (!action.data) {
|
||||
if (!action.data || !action.data.links) {
|
||||
return prevState;
|
||||
}
|
||||
return Object.assign({}, prevState, {initialized: true, rows: action.data});
|
||||
return Object.assign({}, prevState, {initialized: true, rows: action.data.links}, action.data.pref ? {pref: action.data.pref} : {});
|
||||
case at.TOP_SITES_PREFS_UPDATED:
|
||||
return Object.assign({}, prevState, {pref: action.data.pref});
|
||||
case at.TOP_SITES_EDIT:
|
||||
return Object.assign({}, prevState, {
|
||||
editForm: {
|
||||
|
@ -166,6 +169,12 @@ function TopSites(prevState = INITIAL_STATE.TopSites, action) {
|
|||
return site;
|
||||
});
|
||||
return Object.assign({}, prevState, {rows: newRows});
|
||||
case at.PLACES_LINK_DELETED:
|
||||
if (!action.data) {
|
||||
return prevState;
|
||||
}
|
||||
newRows = prevState.rows.filter(site => action.data.url !== site.url);
|
||||
return Object.assign({}, prevState, {rows: newRows});
|
||||
default:
|
||||
return prevState;
|
||||
}
|
||||
|
@ -334,10 +343,11 @@ function Sections(prevState = INITIAL_STATE.Sections, action) {
|
|||
return item;
|
||||
})
|
||||
}));
|
||||
case at.PLACES_LINKS_DELETED:
|
||||
return prevState.map(section => Object.assign({}, section,
|
||||
{rows: section.rows.filter(site => !action.data.includes(site.url))}));
|
||||
case at.PLACES_LINK_DELETED:
|
||||
case at.PLACES_LINK_BLOCKED:
|
||||
if (!action.data) {
|
||||
return prevState;
|
||||
}
|
||||
return prevState.map(section =>
|
||||
Object.assign({}, section, {rows: section.rows.filter(site => site.url !== action.data.url)}));
|
||||
case at.DELETE_FROM_POCKET:
|
||||
|
@ -364,10 +374,19 @@ function Snippets(prevState = INITIAL_STATE.Snippets, action) {
|
|||
}
|
||||
}
|
||||
|
||||
function Theme(prevState = INITIAL_STATE.Theme, action) {
|
||||
switch (action.type) {
|
||||
case at.THEME_UPDATE:
|
||||
return Object.assign({}, prevState, action.data);
|
||||
default:
|
||||
return prevState;
|
||||
}
|
||||
}
|
||||
|
||||
this.INITIAL_STATE = INITIAL_STATE;
|
||||
this.TOP_SITES_DEFAULT_ROWS = TOP_SITES_DEFAULT_ROWS;
|
||||
this.TOP_SITES_MAX_SITES_PER_ROW = TOP_SITES_MAX_SITES_PER_ROW;
|
||||
|
||||
this.reducers = {TopSites, App, Snippets, Prefs, Dialog, Sections};
|
||||
this.reducers = {TopSites, App, Snippets, Prefs, Dialog, Sections, Theme};
|
||||
|
||||
const EXPORTED_SYMBOLS = ["reducers", "INITIAL_STATE", "insertPinned", "TOP_SITES_DEFAULT_ROWS", "TOP_SITES_MAX_SITES_PER_ROW"];
|
||||
|
|
|
@ -24,13 +24,79 @@ input {
|
|||
[hidden] {
|
||||
display: none !important; }
|
||||
|
||||
.outer-wrapper {
|
||||
--newtab-background-color: #F9F9FA;
|
||||
--newtab-border-primary-color: #B1B1B3;
|
||||
--newtab-border-secondary-color: #D7D7DB;
|
||||
--newtab-button-primary-color: #0060DF;
|
||||
--newtab-button-secondary-color: inherit;
|
||||
--newtab-element-active-color: rgba(237, 237, 240, 0.6);
|
||||
--newtab-icon-primary-color: rgba(12, 12, 13, 0.8);
|
||||
--newtab-icon-secondary-color: rgba(12, 12, 13, 0.6);
|
||||
--newtab-icon-tertiary-color: #D7D7DB;
|
||||
--newtab-inner-box-shadow-color: rgba(0, 0, 0, 0.1);
|
||||
--newtab-link-primary-color: #0060DF;
|
||||
--newtab-link-secondary-color: #008EA4;
|
||||
--newtab-text-conditional-color: #4A4A4F;
|
||||
--newtab-text-primary-color: #0C0C0D;
|
||||
--newtab-text-secondary-color: #737373;
|
||||
--newtab-textbox-border: rgba(12, 12, 13, 0.2);
|
||||
--newtab-textbox-color: inherit;
|
||||
--newtab-contextmenu-button-color: #FFF;
|
||||
--newtab-modal-color: #FFF;
|
||||
--newtab-overlay-color: #EDEDF0;
|
||||
--newtab-section-header-text-color: #737373;
|
||||
--newtab-section-navigation-text-color: #737373;
|
||||
--newtab-section-active-contextmenu-color: #0C0C0D;
|
||||
--newtab-search-background-color: #FFF;
|
||||
--newtab-search-border-color: transparent;
|
||||
--newtab-search-focus-border-color: #0A84FF;
|
||||
--newtab-search-icon-color: rgba(12, 12, 13, 0.4);
|
||||
--newtab-search-text-color: inherit;
|
||||
--newtab-topsites-label-color: inherit;
|
||||
--newtab-card-background-color: #FFF;
|
||||
--newtab-card-active-outline-color: #D7D7DB; }
|
||||
|
||||
.outer-wrapper.dark-theme {
|
||||
--newtab-background-color: #2A2A2E;
|
||||
--newtab-border-primary-color: rgba(249, 249, 250, 0.8);
|
||||
--newtab-border-secondary-color: rgba(249, 249, 250, 0.2);
|
||||
--newtab-button-primary-color: #45A1FF;
|
||||
--newtab-button-secondary-color: #38383D;
|
||||
--newtab-element-active-color: #4A4A4F;
|
||||
--newtab-icon-primary-color: rgba(249, 249, 250, 0.8);
|
||||
--newtab-icon-secondary-color: rgba(249, 249, 250, 0.4);
|
||||
--newtab-icon-tertiary-color: rgba(249, 249, 250, 0.2);
|
||||
--newtab-inner-box-shadow-color: rgba(249, 249, 250, 0.2);
|
||||
--newtab-link-primary-color: #45A1FF;
|
||||
--newtab-link-secondary-color: #50BCB6;
|
||||
--newtab-text-conditional-color: #F9F9FA;
|
||||
--newtab-text-primary-color: #F9F9FA;
|
||||
--newtab-text-secondary-color: rgba(249, 249, 250, 0.4);
|
||||
--newtab-textbox-border: rgba(249, 249, 250, 0.4);
|
||||
--newtab-textbox-color: #2A2A2E;
|
||||
--newtab-contextmenu-button-color: #2A2A2E;
|
||||
--newtab-modal-color: #0C0C0D;
|
||||
--newtab-overlay-color: #2A2A2E;
|
||||
--newtab-section-header-text-color: rgba(249, 249, 250, 0.8);
|
||||
--newtab-section-navigation-text-color: rgba(249, 249, 250, 0.8);
|
||||
--newtab-section-active-contextmenu-color: #FFF;
|
||||
--newtab-search-background-color: #4A4A4F;
|
||||
--newtab-search-border-color: rgba(249, 249, 250, 0.4);
|
||||
--newtab-search-focus-border-color: #45A1FF;
|
||||
--newtab-search-icon-color: rgba(249, 249, 250, 0.6);
|
||||
--newtab-search-text-color: rgba(249, 249, 250, 0.6);
|
||||
--newtab-topsites-label-color: rgba(249, 249, 250, 0.8);
|
||||
--newtab-card-background-color: #0C0C0D;
|
||||
--newtab-card-active-outline-color: #4A4A4F; }
|
||||
|
||||
.icon {
|
||||
background-position: center center;
|
||||
background-repeat: no-repeat;
|
||||
background-size: 16px;
|
||||
-moz-context-properties: fill;
|
||||
display: inline-block;
|
||||
fill: rgba(12, 12, 13, 0.8);
|
||||
fill: var(--newtab-icon-primary-color);
|
||||
height: 16px;
|
||||
vertical-align: middle;
|
||||
width: 16px; }
|
||||
|
@ -43,7 +109,7 @@ input {
|
|||
.icon.icon-bookmark-hollow {
|
||||
background-image: url("chrome://browser/skin/bookmark-hollow.svg"); }
|
||||
.icon.icon-clear-input {
|
||||
fill: rgba(12, 12, 13, 0.6);
|
||||
fill: var(--newtab-icon-secondary-color);
|
||||
background-image: url("../data/content/assets/glyph-cancel-16.svg"); }
|
||||
.icon.icon-delete {
|
||||
background-image: url("../data/content/assets/glyph-delete-16.svg"); }
|
||||
|
@ -125,14 +191,14 @@ input {
|
|||
.icon.icon-maximize {
|
||||
background-image: url("../data/content/assets/glyph-maximize-16.svg"); }
|
||||
|
||||
html,
|
||||
body,
|
||||
#root {
|
||||
html {
|
||||
height: 100%; }
|
||||
|
||||
body,
|
||||
#root {
|
||||
min-height: 100vh; }
|
||||
|
||||
body {
|
||||
background: #F9F9FA;
|
||||
color: #0C0C0D;
|
||||
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Ubuntu', 'Helvetica Neue', sans-serif;
|
||||
font-size: 16px;
|
||||
overflow-y: scroll; }
|
||||
|
@ -142,10 +208,7 @@ h2 {
|
|||
font-weight: normal; }
|
||||
|
||||
a {
|
||||
color: #0060DF;
|
||||
text-decoration: none; }
|
||||
a:hover {
|
||||
color: #008EA4; }
|
||||
|
||||
.sr-only {
|
||||
border: 0;
|
||||
|
@ -158,7 +221,7 @@ a {
|
|||
width: 1px; }
|
||||
|
||||
.inner-border {
|
||||
border: 1px solid #D7D7DB;
|
||||
border: 1px solid var(--newtab-border-secondary-color);
|
||||
border-radius: 3px;
|
||||
height: 100%;
|
||||
left: 0;
|
||||
|
@ -182,45 +245,56 @@ a {
|
|||
opacity: 1; }
|
||||
|
||||
.actions {
|
||||
border-top: 1px solid #D7D7DB;
|
||||
border-top: 1px solid var(--newtab-border-secondary-color);
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
flex-wrap: wrap;
|
||||
justify-content: flex-start;
|
||||
margin: 0;
|
||||
padding: 15px 25px 0; }
|
||||
.actions button {
|
||||
background-color: #F9F9FA;
|
||||
border: 1px solid #B1B1B3;
|
||||
border-radius: 4px;
|
||||
color: inherit;
|
||||
cursor: pointer;
|
||||
margin-bottom: 15px;
|
||||
padding: 10px 30px;
|
||||
white-space: nowrap; }
|
||||
.actions button:hover:not(.dismiss) {
|
||||
box-shadow: 0 0 0 5px #D7D7DB;
|
||||
transition: box-shadow 150ms; }
|
||||
.actions button.dismiss {
|
||||
border: 0;
|
||||
padding: 0;
|
||||
text-decoration: underline; }
|
||||
.actions button.done {
|
||||
background: #0060DF;
|
||||
border: solid 1px #0060DF;
|
||||
color: #FFF;
|
||||
margin-inline-start: auto; }
|
||||
|
||||
.button,
|
||||
.actions button {
|
||||
background-color: var(--newtab-button-secondary-color);
|
||||
border: 1px solid var(--newtab-border-primary-color);
|
||||
border-radius: 4px;
|
||||
color: inherit;
|
||||
cursor: pointer;
|
||||
margin-bottom: 15px;
|
||||
padding: 10px 30px;
|
||||
white-space: nowrap; }
|
||||
.button:hover:not(.dismiss),
|
||||
.actions button:hover:not(.dismiss) {
|
||||
box-shadow: 0 0 0 5px var(--newtab-card-active-outline-color);
|
||||
transition: box-shadow 150ms; }
|
||||
.button.dismiss,
|
||||
.actions button.dismiss {
|
||||
background-color: transparent;
|
||||
border: 0;
|
||||
padding: 0;
|
||||
text-decoration: underline; }
|
||||
.button.primary, .button.done,
|
||||
.actions button.primary,
|
||||
.actions button.done {
|
||||
background-color: var(--newtab-button-primary-color);
|
||||
border: solid 1px var(--newtab-button-primary-color);
|
||||
color: #FFF;
|
||||
margin-inline-start: auto; }
|
||||
|
||||
#snippets-container {
|
||||
z-index: 1; }
|
||||
|
||||
.outer-wrapper {
|
||||
background-color: var(--newtab-background-color);
|
||||
color: var(--newtab-text-primary-color);
|
||||
display: flex;
|
||||
flex-grow: 1;
|
||||
height: 100%;
|
||||
min-height: 100vh;
|
||||
padding: 30px 32px 32px; }
|
||||
.outer-wrapper.fixed-to-top {
|
||||
height: auto; }
|
||||
display: block; }
|
||||
.outer-wrapper a {
|
||||
color: var(--newtab-link-primary-color); }
|
||||
|
||||
main {
|
||||
margin: auto;
|
||||
|
@ -243,19 +317,6 @@ main {
|
|||
.wide-layout-enabled main {
|
||||
width: 1042px; } }
|
||||
|
||||
.section-top-bar {
|
||||
height: 16px;
|
||||
margin-bottom: 16px; }
|
||||
|
||||
.section-title {
|
||||
font-size: 13px;
|
||||
font-weight: bold;
|
||||
text-transform: uppercase; }
|
||||
.section-title span {
|
||||
color: #737373;
|
||||
fill: #737373;
|
||||
vertical-align: middle; }
|
||||
|
||||
.base-content-fallback {
|
||||
height: 100vh; }
|
||||
|
||||
|
@ -278,22 +339,20 @@ main {
|
|||
background-color: transparent;
|
||||
border: 0;
|
||||
cursor: pointer;
|
||||
fill: rgba(12, 12, 13, 0.6);
|
||||
fill: var(--newtab-icon-primary-color);
|
||||
offset-inline-end: 15px;
|
||||
padding: 15px;
|
||||
position: fixed;
|
||||
top: 15px;
|
||||
z-index: 12001; }
|
||||
.prefs-button button:hover {
|
||||
background-color: #EDEDF0; }
|
||||
.prefs-button button:active {
|
||||
background-color: #F9F9FA; }
|
||||
.prefs-button button:hover, .prefs-button button:focus {
|
||||
background-color: var(--newtab-element-active-color); }
|
||||
|
||||
.as-error-fallback {
|
||||
align-items: center;
|
||||
border-radius: 3px;
|
||||
box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.1);
|
||||
color: #4A4A4F;
|
||||
box-shadow: inset 0 0 0 1px var(--newtab-inner-box-shadow-color);
|
||||
color: var(--newtab-text-conditional-color);
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
font-size: 12px;
|
||||
|
@ -301,7 +360,7 @@ main {
|
|||
justify-items: center;
|
||||
line-height: 1.5; }
|
||||
.as-error-fallback a {
|
||||
color: #4A4A4F;
|
||||
color: var(--newtab-text-conditional-color);
|
||||
text-decoration: underline; }
|
||||
|
||||
.top-sites {
|
||||
|
@ -356,7 +415,7 @@ main {
|
|||
.top-sites-list li {
|
||||
margin: 0 0 8px; }
|
||||
.top-sites-list:not(.dnd-active) .top-site-outer:-moz-any(.active, :focus, :hover) .tile {
|
||||
box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.1), 0 0 0 5px #D7D7DB;
|
||||
box-shadow: inset 0 0 0 1px var(--newtab-inner-box-shadow-color), 0 0 0 5px var(--newtab-card-active-outline-color);
|
||||
transition: box-shadow 150ms; }
|
||||
.top-sites-list:not(.dnd-active) .top-site-outer:-moz-any(.active, :focus, :hover) .context-menu-button {
|
||||
opacity: 1;
|
||||
|
@ -372,18 +431,18 @@ main {
|
|||
display: block;
|
||||
outline: none; }
|
||||
.top-site-outer .top-site-inner > a:-moz-any(.active, :focus) .tile {
|
||||
box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.1), 0 0 0 5px #D7D7DB;
|
||||
box-shadow: inset 0 0 0 1px var(--newtab-inner-box-shadow-color), 0 0 0 5px var(--newtab-card-active-outline-color);
|
||||
transition: box-shadow 150ms; }
|
||||
.top-site-outer .context-menu-button {
|
||||
background-clip: padding-box;
|
||||
background-color: #FFF;
|
||||
background-color: var(--newtab-contextmenu-button-color);
|
||||
background-image: url("chrome://browser/skin/page-action.svg");
|
||||
background-position: 55%;
|
||||
border: 1px solid #B1B1B3;
|
||||
border: 1px solid var(--newtab-border-primary-color);
|
||||
border-radius: 100%;
|
||||
box-shadow: 0 2px rgba(12, 12, 13, 0.1);
|
||||
cursor: pointer;
|
||||
fill: rgba(12, 12, 13, 0.8);
|
||||
fill: var(--newtab-icon-primary-color);
|
||||
height: 27px;
|
||||
offset-inline-end: -13.5px;
|
||||
opacity: 0;
|
||||
|
@ -398,12 +457,12 @@ main {
|
|||
transform: scale(1); }
|
||||
.top-site-outer .tile {
|
||||
border-radius: 6px;
|
||||
box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.1), 0 1px 4px 0 rgba(12, 12, 13, 0.1);
|
||||
box-shadow: inset 0 0 0 1px var(--newtab-inner-box-shadow-color), 0 1px 4px 0 rgba(12, 12, 13, 0.1);
|
||||
height: 96px;
|
||||
position: relative;
|
||||
width: 96px;
|
||||
align-items: center;
|
||||
color: #737373;
|
||||
color: var(--newtab-text-secondary-color);
|
||||
display: flex;
|
||||
font-size: 32px;
|
||||
font-weight: 200;
|
||||
|
@ -416,7 +475,7 @@ main {
|
|||
background-position: top left;
|
||||
background-size: cover;
|
||||
border-radius: 6px;
|
||||
box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.1);
|
||||
box-shadow: inset 0 0 0 1px var(--newtab-inner-box-shadow-color);
|
||||
height: 100%;
|
||||
left: 0;
|
||||
opacity: 0;
|
||||
|
@ -427,11 +486,11 @@ main {
|
|||
.top-site-outer .screenshot.active {
|
||||
opacity: 1; }
|
||||
.top-site-outer .top-site-icon {
|
||||
background-color: #F9F9FA;
|
||||
background-color: var(--newtab-background-color);
|
||||
background-position: center center;
|
||||
background-repeat: no-repeat;
|
||||
border-radius: 6px;
|
||||
box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.1);
|
||||
box-shadow: inset 0 0 0 1px var(--newtab-inner-box-shadow-color);
|
||||
position: absolute; }
|
||||
.top-site-outer .rich-icon {
|
||||
background-size: cover;
|
||||
|
@ -452,6 +511,7 @@ main {
|
|||
.top-site-outer .default-icon[data-fallback]::before {
|
||||
content: attr(data-fallback); }
|
||||
.top-site-outer .title {
|
||||
color: var(--newtab-topsites-label-color);
|
||||
font: message-box;
|
||||
height: 30px;
|
||||
line-height: 30px;
|
||||
|
@ -459,7 +519,7 @@ main {
|
|||
width: 96px;
|
||||
position: relative; }
|
||||
.top-site-outer .title .icon {
|
||||
fill: #D7D7DB;
|
||||
fill: var(--newtab-icon-tertiary-color);
|
||||
offset-inline-start: 0;
|
||||
position: absolute;
|
||||
top: 10px; }
|
||||
|
@ -474,7 +534,7 @@ main {
|
|||
.top-site-outer .edit-button {
|
||||
background-image: url("../data/content/assets/glyph-edit-16.svg"); }
|
||||
.top-site-outer.placeholder .tile {
|
||||
box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.1); }
|
||||
box-shadow: inset 0 0 0 1px var(--newtab-inner-box-shadow-color); }
|
||||
.top-site-outer.placeholder .screenshot {
|
||||
display: none; }
|
||||
.top-site-outer.dragged .tile {
|
||||
|
@ -566,8 +626,7 @@ main {
|
|||
margin-top: 4px;
|
||||
cursor: pointer; }
|
||||
.topsite-form .form-wrapper .enable-custom-image-input:hover {
|
||||
text-decoration: underline;
|
||||
color: #0060DF; }
|
||||
text-decoration: underline; }
|
||||
.topsite-form .form-wrapper .custom-image-input-container {
|
||||
margin-top: 4px; }
|
||||
.topsite-form .form-wrapper .custom-image-input-container .loading-container {
|
||||
|
@ -596,7 +655,8 @@ main {
|
|||
.topsite-form .form-wrapper .custom-image-input-container .loading-animation:dir(rtl) {
|
||||
animation-name: tab-throbber-animation-rtl; }
|
||||
.topsite-form .form-wrapper input[type='text'] {
|
||||
border: solid 1px rgba(12, 12, 13, 0.2);
|
||||
background-color: var(--newtab-textbox-color);
|
||||
border: solid 1px var(--newtab-textbox-border);
|
||||
border-radius: 2px;
|
||||
margin: 8px 0;
|
||||
padding: 0 8px;
|
||||
|
@ -607,7 +667,7 @@ main {
|
|||
border: solid 1px #0A84FF;
|
||||
box-shadow: 0 0 0 1px #0A84FF, 0 0 0 4px rgba(10, 132, 255, 0.3); }
|
||||
.topsite-form .form-wrapper input[type='text'][disabled] {
|
||||
border: solid 1px rgba(12, 12, 13, 0.2);
|
||||
border: solid 1px var(--newtab-textbox-border);
|
||||
box-shadow: none;
|
||||
opacity: 0.4; }
|
||||
.topsite-form .form-wrapper .invalid input[type='text'] {
|
||||
|
@ -682,7 +742,7 @@ main {
|
|||
offset-inline-start: auto; } }
|
||||
|
||||
.sections-list .section-empty-state {
|
||||
border: 1px solid #D7D7DB;
|
||||
border: 1px solid var(--newtab-border-secondary-color);
|
||||
border-radius: 3px;
|
||||
display: flex;
|
||||
height: 266px;
|
||||
|
@ -696,12 +756,12 @@ main {
|
|||
background-size: 50px 50px;
|
||||
-moz-context-properties: fill;
|
||||
display: block;
|
||||
fill: rgba(12, 12, 13, 0.6);
|
||||
fill: var(--newtab-icon-secondary-color);
|
||||
height: 50px;
|
||||
margin: 0 auto;
|
||||
width: 50px; }
|
||||
.sections-list .section-empty-state .empty-state .empty-state-message {
|
||||
color: #737373;
|
||||
color: var(--newtab-text-primary-color);
|
||||
font-size: 13px;
|
||||
margin-bottom: 0;
|
||||
text-align: center; }
|
||||
|
@ -721,7 +781,7 @@ main {
|
|||
height: 370px; }
|
||||
|
||||
.topic {
|
||||
color: #737373;
|
||||
color: var(--newtab-section-navigation-text-color);
|
||||
font-size: 12px;
|
||||
line-height: 1.6;
|
||||
margin-top: 12px; }
|
||||
|
@ -743,9 +803,9 @@ main {
|
|||
.topic ul li:last-child::after {
|
||||
content: none; }
|
||||
.topic .topic-link {
|
||||
color: #008EA4; }
|
||||
color: var(--newtab-link-secondary-color); }
|
||||
.topic .topic-read-more {
|
||||
color: #008EA4; }
|
||||
color: var(--newtab-link-secondary-color); }
|
||||
@media (min-width: 866px) {
|
||||
.topic .topic-read-more {
|
||||
float: right; }
|
||||
|
@ -756,7 +816,7 @@ main {
|
|||
content: '';
|
||||
-moz-context-properties: fill;
|
||||
display: inline-block;
|
||||
fill: #008EA4;
|
||||
fill: var(--newtab-link-secondary-color);
|
||||
height: 16px;
|
||||
margin-inline-start: 5px;
|
||||
vertical-align: top;
|
||||
|
@ -776,9 +836,11 @@ main {
|
|||
position: relative;
|
||||
width: 100%; }
|
||||
.search-wrapper input {
|
||||
border: 0;
|
||||
background: var(--newtab-search-background-color);
|
||||
border: solid 1px var(--newtab-search-border-color);
|
||||
border-radius: 3px;
|
||||
box-shadow: 0 1px 4px 0 rgba(12, 12, 13, 0.1), 0 0 0 1px rgba(0, 0, 0, 0.15);
|
||||
color: var(--newtab-search-text-color);
|
||||
font-size: 15px;
|
||||
padding: 0;
|
||||
padding-inline-end: 36px;
|
||||
|
@ -788,11 +850,11 @@ main {
|
|||
box-shadow: 0 1px 4px 0 rgba(12, 12, 13, 0.1), 0 0 0 1px rgba(0, 0, 0, 0.25); }
|
||||
.search-wrapper:active input,
|
||||
.search-wrapper input:focus {
|
||||
box-shadow: 0 0 0 3px #0A84FF; }
|
||||
box-shadow: 0 0 0 3px var(--newtab-search-focus-border-color); }
|
||||
.search-wrapper .search-label {
|
||||
background: url("chrome://browser/skin/search-glass.svg") no-repeat 12px center/16px;
|
||||
-moz-context-properties: fill;
|
||||
fill: rgba(12, 12, 13, 0.4);
|
||||
fill: var(--newtab-search-icon-color);
|
||||
height: 100%;
|
||||
offset-inline-start: 0;
|
||||
position: absolute;
|
||||
|
@ -803,7 +865,7 @@ main {
|
|||
border: 0;
|
||||
border-radius: 0 3px 3px 0;
|
||||
-moz-context-properties: fill;
|
||||
fill: rgba(12, 12, 13, 0.4);
|
||||
fill: var(--newtab-search-icon-color);
|
||||
height: 100%;
|
||||
offset-inline-end: 0;
|
||||
position: absolute;
|
||||
|
@ -815,12 +877,21 @@ main {
|
|||
background-color: rgba(12, 12, 13, 0.2); }
|
||||
.search-wrapper .search-button:dir(rtl) {
|
||||
transform: scaleX(-1); }
|
||||
.search-wrapper .contentSearchSuggestionTable {
|
||||
border: 0;
|
||||
transform: translateY(2px); }
|
||||
|
||||
.contentSearchSuggestionTable {
|
||||
background-color: var(--newtab-search-background-color);
|
||||
border: 0;
|
||||
transform: translateY(3px); }
|
||||
.contentSearchSuggestionTable .contentSearchHeader {
|
||||
background-color: var(--newtab-background-color);
|
||||
color: var(--newtab-text-secondary-color); }
|
||||
.contentSearchSuggestionTable .contentSearchHeader, .contentSearchSuggestionTable .contentSearchSuggestionsList {
|
||||
border-color: var(--newtab-border-primary-color); }
|
||||
.contentSearchSuggestionTable .contentSearchSearchWithHeaderSearchText {
|
||||
color: var(--newtab-text-primary-color); }
|
||||
|
||||
.context-menu {
|
||||
background: #F9F9FA;
|
||||
background: var(--newtab-background-color);
|
||||
border-radius: 5px;
|
||||
box-shadow: 0 5px 10px rgba(0, 0, 0, 0.3), 0 0 0 1px rgba(0, 0, 0, 0.2);
|
||||
display: block;
|
||||
|
@ -838,7 +909,7 @@ main {
|
|||
margin: 0;
|
||||
width: 100%; }
|
||||
.context-menu > ul > li.separator {
|
||||
border-bottom: 1px solid rgba(0, 0, 0, 0.2);
|
||||
border-bottom: 1px solid var(--newtab-border-secondary-color);
|
||||
margin: 5px 0; }
|
||||
.context-menu > ul > li > a {
|
||||
align-items: center;
|
||||
|
@ -850,7 +921,7 @@ main {
|
|||
padding: 3px 12px;
|
||||
white-space: nowrap; }
|
||||
.context-menu > ul > li > a:-moz-any(:focus, :hover) {
|
||||
background: #0060DF;
|
||||
background: var(--newtab-link-primary-color);
|
||||
color: #FFF; }
|
||||
.context-menu > ul > li > a:-moz-any(:focus, :hover) a {
|
||||
color: #0C0C0D; }
|
||||
|
@ -900,7 +971,7 @@ main {
|
|||
margin-inline-end: 16px; }
|
||||
|
||||
.modal-overlay {
|
||||
background: #EDEDF0;
|
||||
background: var(--newtab-overlay-color);
|
||||
height: 100%;
|
||||
left: 0;
|
||||
opacity: 0.8;
|
||||
|
@ -910,14 +981,14 @@ main {
|
|||
z-index: 11001; }
|
||||
|
||||
.modal {
|
||||
background: #FFF;
|
||||
border: 1px solid #D7D7DB;
|
||||
background: var(--newtab-modal-color);
|
||||
border: 1px solid var(--newtab-border-secondary-color);
|
||||
border-radius: 5px;
|
||||
font-size: 15px;
|
||||
z-index: 11002; }
|
||||
|
||||
.card-outer {
|
||||
background: #FFF;
|
||||
background: var(--newtab-card-background-color);
|
||||
border-radius: 3px;
|
||||
display: inline-block;
|
||||
height: 266px;
|
||||
|
@ -926,14 +997,14 @@ main {
|
|||
width: 100%; }
|
||||
.card-outer .context-menu-button {
|
||||
background-clip: padding-box;
|
||||
background-color: #FFF;
|
||||
background-color: var(--newtab-contextmenu-button-color);
|
||||
background-image: url("chrome://browser/skin/page-action.svg");
|
||||
background-position: 55%;
|
||||
border: 1px solid #B1B1B3;
|
||||
border: 1px solid var(--newtab-border-primary-color);
|
||||
border-radius: 100%;
|
||||
box-shadow: 0 2px rgba(12, 12, 13, 0.1);
|
||||
cursor: pointer;
|
||||
fill: rgba(12, 12, 13, 0.8);
|
||||
fill: var(--newtab-icon-primary-color);
|
||||
height: 27px;
|
||||
offset-inline-end: -13.5px;
|
||||
opacity: 0;
|
||||
|
@ -949,7 +1020,7 @@ main {
|
|||
.card-outer.placeholder {
|
||||
background: transparent; }
|
||||
.card-outer.placeholder .card {
|
||||
box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.1); }
|
||||
box-shadow: inset 0 0 0 1px var(--newtab-inner-box-shadow-color); }
|
||||
.card-outer .card {
|
||||
border-radius: 3px;
|
||||
box-shadow: 0 1px 4px 0 rgba(12, 12, 13, 0.1);
|
||||
|
@ -962,21 +1033,21 @@ main {
|
|||
position: absolute;
|
||||
width: 100%; }
|
||||
.card-outer > a:-moz-any(.active, :focus) .card {
|
||||
box-shadow: 0 0 0 5px #D7D7DB;
|
||||
box-shadow: 0 0 0 5px var(--newtab-card-active-outline-color);
|
||||
transition: box-shadow 150ms; }
|
||||
.card-outer > a:-moz-any(.active, :focus) .card-title {
|
||||
color: #0060DF; }
|
||||
color: var(--newtab-link-primary-color); }
|
||||
.card-outer:-moz-any(:hover, :focus, .active):not(.placeholder) {
|
||||
box-shadow: 0 0 0 5px #D7D7DB;
|
||||
box-shadow: 0 0 0 5px var(--newtab-card-active-outline-color);
|
||||
transition: box-shadow 150ms;
|
||||
outline: none; }
|
||||
.card-outer:-moz-any(:hover, :focus, .active):not(.placeholder) .context-menu-button {
|
||||
opacity: 1;
|
||||
transform: scale(1); }
|
||||
.card-outer:-moz-any(:hover, :focus, .active):not(.placeholder) .card-title {
|
||||
color: #0060DF; }
|
||||
color: var(--newtab-link-primary-color); }
|
||||
.card-outer .card-preview-image-outer {
|
||||
background-color: #F9F9FA;
|
||||
background-color: var(--newtab-background-color);
|
||||
border-radius: 3px 3px 0 0;
|
||||
height: 122px;
|
||||
overflow: hidden;
|
||||
|
@ -1018,7 +1089,7 @@ main {
|
|||
max-height: 57px;
|
||||
overflow: hidden; }
|
||||
.card-outer .card-host-name {
|
||||
color: #737373;
|
||||
color: var(--newtab-text-secondary-color);
|
||||
font-size: 10px;
|
||||
overflow: hidden;
|
||||
padding-bottom: 4px;
|
||||
|
@ -1037,19 +1108,20 @@ main {
|
|||
word-wrap: break-word; }
|
||||
.card-outer .card-context {
|
||||
bottom: 0;
|
||||
color: #737373;
|
||||
color: var(--newtab-text-secondary-color);
|
||||
display: flex;
|
||||
font-size: 11px;
|
||||
left: 0;
|
||||
padding: 12px 16px 12px 14px;
|
||||
padding: 9px 16px 9px 14px;
|
||||
position: absolute;
|
||||
right: 0; }
|
||||
.card-outer .card-context-icon {
|
||||
fill: rgba(12, 12, 13, 0.6);
|
||||
fill: var(--newtab-icon-secondary-color);
|
||||
height: 22px;
|
||||
margin-inline-end: 6px; }
|
||||
.card-outer .card-context-label {
|
||||
flex-grow: 1;
|
||||
line-height: 16px;
|
||||
line-height: 22px;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap; }
|
||||
|
@ -1080,7 +1152,7 @@ main {
|
|||
font-size: 14px; } }
|
||||
|
||||
.manual-migration-container {
|
||||
color: #4A4A4F;
|
||||
color: var(--newtab-text-conditional-color);
|
||||
font-size: 13px;
|
||||
line-height: 15px;
|
||||
margin-bottom: 20px;
|
||||
|
@ -1103,7 +1175,7 @@ main {
|
|||
.manual-migration-container .icon {
|
||||
align-self: center;
|
||||
display: block;
|
||||
fill: rgba(12, 12, 13, 0.6);
|
||||
fill: var(--newtab-icon-secondary-color);
|
||||
margin-inline-end: 6px; } }
|
||||
|
||||
.manual-migration-actions {
|
||||
|
@ -1128,7 +1200,15 @@ main {
|
|||
transition-duration: 100ms;
|
||||
transition-property: background-color; }
|
||||
.collapsible-section .section-title {
|
||||
margin: 0; }
|
||||
font-size: 13px;
|
||||
font-weight: bold;
|
||||
margin: 0;
|
||||
text-transform: uppercase; }
|
||||
.collapsible-section .section-title span {
|
||||
color: var(--newtab-section-header-text-color);
|
||||
display: inline-block;
|
||||
fill: var(--newtab-section-header-text-color);
|
||||
vertical-align: middle; }
|
||||
.collapsible-section .section-title .click-target {
|
||||
cursor: pointer;
|
||||
vertical-align: top;
|
||||
|
@ -1137,13 +1217,15 @@ main {
|
|||
margin-inline-start: 8px;
|
||||
margin-top: -1px; }
|
||||
.collapsible-section .section-top-bar {
|
||||
height: 19px;
|
||||
margin-bottom: 13px;
|
||||
position: relative; }
|
||||
.collapsible-section .section-top-bar .context-menu-button {
|
||||
background: url("chrome://browser/skin/page-action.svg") no-repeat right center;
|
||||
border: 0;
|
||||
cursor: pointer;
|
||||
fill: #737373;
|
||||
height: 20px;
|
||||
fill: var(--newtab-section-header-text-color);
|
||||
height: 100%;
|
||||
offset-inline-end: 0;
|
||||
opacity: 0;
|
||||
position: absolute;
|
||||
|
@ -1165,12 +1247,12 @@ main {
|
|||
.collapsible-section:hover .section-top-bar .context-menu-button, .collapsible-section.active .section-top-bar .context-menu-button {
|
||||
opacity: 1; }
|
||||
.collapsible-section.active {
|
||||
background: rgba(237, 237, 240, 0.6);
|
||||
background: var(--newtab-element-active-color);
|
||||
border-radius: 4px; }
|
||||
.collapsible-section.active .section-top-bar .context-menu-button {
|
||||
fill: #0C0C0D; }
|
||||
fill: var(--newtab-section-active-contextmenu-color); }
|
||||
.collapsible-section .section-disclaimer {
|
||||
color: #4A4A4F;
|
||||
color: var(--newtab-text-conditional-color);
|
||||
font-size: 13px;
|
||||
margin-bottom: 16px;
|
||||
position: relative; }
|
||||
|
@ -1182,10 +1264,11 @@ main {
|
|||
.collapsible-section .section-disclaimer .section-disclaimer-text {
|
||||
width: 224px; } }
|
||||
.collapsible-section .section-disclaimer a {
|
||||
color: #008EA4;
|
||||
color: var(--newtab-link-secondary-color);
|
||||
font-weight: bold;
|
||||
padding-left: 3px; }
|
||||
.collapsible-section .section-disclaimer button {
|
||||
background: #F9F9FA;
|
||||
background: transparent;
|
||||
border: 1px solid #B1B1B3;
|
||||
border-radius: 4px;
|
||||
cursor: pointer;
|
||||
|
@ -1194,7 +1277,7 @@ main {
|
|||
min-height: 26px;
|
||||
offset-inline-end: 0; }
|
||||
.collapsible-section .section-disclaimer button:hover:not(.dismiss) {
|
||||
box-shadow: 0 0 0 5px #D7D7DB;
|
||||
box-shadow: 0 0 0 5px var(--newtab-card-active-outline-color);
|
||||
transition: box-shadow 150ms; }
|
||||
@media (min-width: 482px) {
|
||||
.collapsible-section .section-disclaimer button {
|
||||
|
@ -1215,4 +1298,44 @@ main {
|
|||
max-height: 0;
|
||||
overflow: hidden; }
|
||||
|
||||
.messages-admin {
|
||||
max-width: 996px;
|
||||
margin: 0 auto;
|
||||
font-size: 14px; }
|
||||
.messages-admin h1 {
|
||||
font-weight: 200;
|
||||
font-size: 32px; }
|
||||
.messages-admin table {
|
||||
border-collapse: collapse;
|
||||
width: 100%; }
|
||||
.messages-admin .message-item:first-child td {
|
||||
border-top: 1px solid rgba(0, 0, 0, 0.1); }
|
||||
.messages-admin .message-item td {
|
||||
vertical-align: top;
|
||||
border-bottom: 1px solid rgba(0, 0, 0, 0.1);
|
||||
padding: 8px; }
|
||||
.messages-admin .message-item td:first-child {
|
||||
border-left: 1px solid rgba(0, 0, 0, 0.1); }
|
||||
.messages-admin .message-item td:last-child {
|
||||
border-right: 1px solid rgba(0, 0, 0, 0.1); }
|
||||
.messages-admin .message-item.current .message-id span {
|
||||
background: #FFE900;
|
||||
padding: 2px 5px; }
|
||||
.messages-admin .message-item.blocked .message-id,
|
||||
.messages-admin .message-item.blocked .message-summary {
|
||||
opacity: 0.5; }
|
||||
.messages-admin .message-item.blocked .message-id {
|
||||
color: #0C0C0D; }
|
||||
.messages-admin .message-item .message-id {
|
||||
font-family: "SF Mono", "Monaco", "Inconsolata", "Fira Mono", "Droid Sans Mono", "Source Code Pro", monospace;
|
||||
font-size: 12px; }
|
||||
.messages-admin pre {
|
||||
background: #FFF;
|
||||
margin: 0;
|
||||
padding: 8px;
|
||||
font-size: 12px;
|
||||
max-width: 750px;
|
||||
overflow: auto;
|
||||
font-family: "SF Mono", "Monaco", "Inconsolata", "Fira Mono", "Droid Sans Mono", "Source Code Pro", monospace; }
|
||||
|
||||
/*# sourceMappingURL=activity-stream-linux.css.map */
|
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
|
@ -24,13 +24,79 @@ input {
|
|||
[hidden] {
|
||||
display: none !important; }
|
||||
|
||||
.outer-wrapper {
|
||||
--newtab-background-color: #F9F9FA;
|
||||
--newtab-border-primary-color: #B1B1B3;
|
||||
--newtab-border-secondary-color: #D7D7DB;
|
||||
--newtab-button-primary-color: #0060DF;
|
||||
--newtab-button-secondary-color: inherit;
|
||||
--newtab-element-active-color: rgba(237, 237, 240, 0.6);
|
||||
--newtab-icon-primary-color: rgba(12, 12, 13, 0.8);
|
||||
--newtab-icon-secondary-color: rgba(12, 12, 13, 0.6);
|
||||
--newtab-icon-tertiary-color: #D7D7DB;
|
||||
--newtab-inner-box-shadow-color: rgba(0, 0, 0, 0.1);
|
||||
--newtab-link-primary-color: #0060DF;
|
||||
--newtab-link-secondary-color: #008EA4;
|
||||
--newtab-text-conditional-color: #4A4A4F;
|
||||
--newtab-text-primary-color: #0C0C0D;
|
||||
--newtab-text-secondary-color: #737373;
|
||||
--newtab-textbox-border: rgba(12, 12, 13, 0.2);
|
||||
--newtab-textbox-color: inherit;
|
||||
--newtab-contextmenu-button-color: #FFF;
|
||||
--newtab-modal-color: #FFF;
|
||||
--newtab-overlay-color: #EDEDF0;
|
||||
--newtab-section-header-text-color: #737373;
|
||||
--newtab-section-navigation-text-color: #737373;
|
||||
--newtab-section-active-contextmenu-color: #0C0C0D;
|
||||
--newtab-search-background-color: #FFF;
|
||||
--newtab-search-border-color: transparent;
|
||||
--newtab-search-focus-border-color: #0A84FF;
|
||||
--newtab-search-icon-color: rgba(12, 12, 13, 0.4);
|
||||
--newtab-search-text-color: inherit;
|
||||
--newtab-topsites-label-color: inherit;
|
||||
--newtab-card-background-color: #FFF;
|
||||
--newtab-card-active-outline-color: #D7D7DB; }
|
||||
|
||||
.outer-wrapper.dark-theme {
|
||||
--newtab-background-color: #2A2A2E;
|
||||
--newtab-border-primary-color: rgba(249, 249, 250, 0.8);
|
||||
--newtab-border-secondary-color: rgba(249, 249, 250, 0.2);
|
||||
--newtab-button-primary-color: #45A1FF;
|
||||
--newtab-button-secondary-color: #38383D;
|
||||
--newtab-element-active-color: #4A4A4F;
|
||||
--newtab-icon-primary-color: rgba(249, 249, 250, 0.8);
|
||||
--newtab-icon-secondary-color: rgba(249, 249, 250, 0.4);
|
||||
--newtab-icon-tertiary-color: rgba(249, 249, 250, 0.2);
|
||||
--newtab-inner-box-shadow-color: rgba(249, 249, 250, 0.2);
|
||||
--newtab-link-primary-color: #45A1FF;
|
||||
--newtab-link-secondary-color: #50BCB6;
|
||||
--newtab-text-conditional-color: #F9F9FA;
|
||||
--newtab-text-primary-color: #F9F9FA;
|
||||
--newtab-text-secondary-color: rgba(249, 249, 250, 0.4);
|
||||
--newtab-textbox-border: rgba(249, 249, 250, 0.4);
|
||||
--newtab-textbox-color: #2A2A2E;
|
||||
--newtab-contextmenu-button-color: #2A2A2E;
|
||||
--newtab-modal-color: #0C0C0D;
|
||||
--newtab-overlay-color: #2A2A2E;
|
||||
--newtab-section-header-text-color: rgba(249, 249, 250, 0.8);
|
||||
--newtab-section-navigation-text-color: rgba(249, 249, 250, 0.8);
|
||||
--newtab-section-active-contextmenu-color: #FFF;
|
||||
--newtab-search-background-color: #4A4A4F;
|
||||
--newtab-search-border-color: rgba(249, 249, 250, 0.4);
|
||||
--newtab-search-focus-border-color: #45A1FF;
|
||||
--newtab-search-icon-color: rgba(249, 249, 250, 0.6);
|
||||
--newtab-search-text-color: rgba(249, 249, 250, 0.6);
|
||||
--newtab-topsites-label-color: rgba(249, 249, 250, 0.8);
|
||||
--newtab-card-background-color: #0C0C0D;
|
||||
--newtab-card-active-outline-color: #4A4A4F; }
|
||||
|
||||
.icon {
|
||||
background-position: center center;
|
||||
background-repeat: no-repeat;
|
||||
background-size: 16px;
|
||||
-moz-context-properties: fill;
|
||||
display: inline-block;
|
||||
fill: rgba(12, 12, 13, 0.8);
|
||||
fill: var(--newtab-icon-primary-color);
|
||||
height: 16px;
|
||||
vertical-align: middle;
|
||||
width: 16px; }
|
||||
|
@ -43,7 +109,7 @@ input {
|
|||
.icon.icon-bookmark-hollow {
|
||||
background-image: url("chrome://browser/skin/bookmark-hollow.svg"); }
|
||||
.icon.icon-clear-input {
|
||||
fill: rgba(12, 12, 13, 0.6);
|
||||
fill: var(--newtab-icon-secondary-color);
|
||||
background-image: url("../data/content/assets/glyph-cancel-16.svg"); }
|
||||
.icon.icon-delete {
|
||||
background-image: url("../data/content/assets/glyph-delete-16.svg"); }
|
||||
|
@ -125,14 +191,14 @@ input {
|
|||
.icon.icon-maximize {
|
||||
background-image: url("../data/content/assets/glyph-maximize-16.svg"); }
|
||||
|
||||
html,
|
||||
body,
|
||||
#root {
|
||||
html {
|
||||
height: 100%; }
|
||||
|
||||
body,
|
||||
#root {
|
||||
min-height: 100vh; }
|
||||
|
||||
body {
|
||||
background: #F9F9FA;
|
||||
color: #0C0C0D;
|
||||
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Ubuntu', 'Helvetica Neue', sans-serif;
|
||||
font-size: 16px;
|
||||
overflow-y: scroll; }
|
||||
|
@ -142,10 +208,7 @@ h2 {
|
|||
font-weight: normal; }
|
||||
|
||||
a {
|
||||
color: #0060DF;
|
||||
text-decoration: none; }
|
||||
a:hover {
|
||||
color: #008EA4; }
|
||||
|
||||
.sr-only {
|
||||
border: 0;
|
||||
|
@ -158,7 +221,7 @@ a {
|
|||
width: 1px; }
|
||||
|
||||
.inner-border {
|
||||
border: 1px solid #D7D7DB;
|
||||
border: 1px solid var(--newtab-border-secondary-color);
|
||||
border-radius: 3px;
|
||||
height: 100%;
|
||||
left: 0;
|
||||
|
@ -182,45 +245,56 @@ a {
|
|||
opacity: 1; }
|
||||
|
||||
.actions {
|
||||
border-top: 1px solid #D7D7DB;
|
||||
border-top: 1px solid var(--newtab-border-secondary-color);
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
flex-wrap: wrap;
|
||||
justify-content: flex-start;
|
||||
margin: 0;
|
||||
padding: 15px 25px 0; }
|
||||
.actions button {
|
||||
background-color: #F9F9FA;
|
||||
border: 1px solid #B1B1B3;
|
||||
border-radius: 4px;
|
||||
color: inherit;
|
||||
cursor: pointer;
|
||||
margin-bottom: 15px;
|
||||
padding: 10px 30px;
|
||||
white-space: nowrap; }
|
||||
.actions button:hover:not(.dismiss) {
|
||||
box-shadow: 0 0 0 5px #D7D7DB;
|
||||
transition: box-shadow 150ms; }
|
||||
.actions button.dismiss {
|
||||
border: 0;
|
||||
padding: 0;
|
||||
text-decoration: underline; }
|
||||
.actions button.done {
|
||||
background: #0060DF;
|
||||
border: solid 1px #0060DF;
|
||||
color: #FFF;
|
||||
margin-inline-start: auto; }
|
||||
|
||||
.button,
|
||||
.actions button {
|
||||
background-color: var(--newtab-button-secondary-color);
|
||||
border: 1px solid var(--newtab-border-primary-color);
|
||||
border-radius: 4px;
|
||||
color: inherit;
|
||||
cursor: pointer;
|
||||
margin-bottom: 15px;
|
||||
padding: 10px 30px;
|
||||
white-space: nowrap; }
|
||||
.button:hover:not(.dismiss),
|
||||
.actions button:hover:not(.dismiss) {
|
||||
box-shadow: 0 0 0 5px var(--newtab-card-active-outline-color);
|
||||
transition: box-shadow 150ms; }
|
||||
.button.dismiss,
|
||||
.actions button.dismiss {
|
||||
background-color: transparent;
|
||||
border: 0;
|
||||
padding: 0;
|
||||
text-decoration: underline; }
|
||||
.button.primary, .button.done,
|
||||
.actions button.primary,
|
||||
.actions button.done {
|
||||
background-color: var(--newtab-button-primary-color);
|
||||
border: solid 1px var(--newtab-button-primary-color);
|
||||
color: #FFF;
|
||||
margin-inline-start: auto; }
|
||||
|
||||
#snippets-container {
|
||||
z-index: 1; }
|
||||
|
||||
.outer-wrapper {
|
||||
background-color: var(--newtab-background-color);
|
||||
color: var(--newtab-text-primary-color);
|
||||
display: flex;
|
||||
flex-grow: 1;
|
||||
height: 100%;
|
||||
min-height: 100vh;
|
||||
padding: 30px 32px 32px; }
|
||||
.outer-wrapper.fixed-to-top {
|
||||
height: auto; }
|
||||
display: block; }
|
||||
.outer-wrapper a {
|
||||
color: var(--newtab-link-primary-color); }
|
||||
|
||||
main {
|
||||
margin: auto;
|
||||
|
@ -243,19 +317,6 @@ main {
|
|||
.wide-layout-enabled main {
|
||||
width: 1042px; } }
|
||||
|
||||
.section-top-bar {
|
||||
height: 16px;
|
||||
margin-bottom: 16px; }
|
||||
|
||||
.section-title {
|
||||
font-size: 13px;
|
||||
font-weight: bold;
|
||||
text-transform: uppercase; }
|
||||
.section-title span {
|
||||
color: #737373;
|
||||
fill: #737373;
|
||||
vertical-align: middle; }
|
||||
|
||||
.base-content-fallback {
|
||||
height: 100vh; }
|
||||
|
||||
|
@ -278,22 +339,20 @@ main {
|
|||
background-color: transparent;
|
||||
border: 0;
|
||||
cursor: pointer;
|
||||
fill: rgba(12, 12, 13, 0.6);
|
||||
fill: var(--newtab-icon-primary-color);
|
||||
offset-inline-end: 15px;
|
||||
padding: 15px;
|
||||
position: fixed;
|
||||
top: 15px;
|
||||
z-index: 12001; }
|
||||
.prefs-button button:hover {
|
||||
background-color: #EDEDF0; }
|
||||
.prefs-button button:active {
|
||||
background-color: #F9F9FA; }
|
||||
.prefs-button button:hover, .prefs-button button:focus {
|
||||
background-color: var(--newtab-element-active-color); }
|
||||
|
||||
.as-error-fallback {
|
||||
align-items: center;
|
||||
border-radius: 3px;
|
||||
box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.1);
|
||||
color: #4A4A4F;
|
||||
box-shadow: inset 0 0 0 1px var(--newtab-inner-box-shadow-color);
|
||||
color: var(--newtab-text-conditional-color);
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
font-size: 12px;
|
||||
|
@ -301,7 +360,7 @@ main {
|
|||
justify-items: center;
|
||||
line-height: 1.5; }
|
||||
.as-error-fallback a {
|
||||
color: #4A4A4F;
|
||||
color: var(--newtab-text-conditional-color);
|
||||
text-decoration: underline; }
|
||||
|
||||
.top-sites {
|
||||
|
@ -356,7 +415,7 @@ main {
|
|||
.top-sites-list li {
|
||||
margin: 0 0 8px; }
|
||||
.top-sites-list:not(.dnd-active) .top-site-outer:-moz-any(.active, :focus, :hover) .tile {
|
||||
box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.1), 0 0 0 5px #D7D7DB;
|
||||
box-shadow: inset 0 0 0 1px var(--newtab-inner-box-shadow-color), 0 0 0 5px var(--newtab-card-active-outline-color);
|
||||
transition: box-shadow 150ms; }
|
||||
.top-sites-list:not(.dnd-active) .top-site-outer:-moz-any(.active, :focus, :hover) .context-menu-button {
|
||||
opacity: 1;
|
||||
|
@ -372,18 +431,18 @@ main {
|
|||
display: block;
|
||||
outline: none; }
|
||||
.top-site-outer .top-site-inner > a:-moz-any(.active, :focus) .tile {
|
||||
box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.1), 0 0 0 5px #D7D7DB;
|
||||
box-shadow: inset 0 0 0 1px var(--newtab-inner-box-shadow-color), 0 0 0 5px var(--newtab-card-active-outline-color);
|
||||
transition: box-shadow 150ms; }
|
||||
.top-site-outer .context-menu-button {
|
||||
background-clip: padding-box;
|
||||
background-color: #FFF;
|
||||
background-color: var(--newtab-contextmenu-button-color);
|
||||
background-image: url("chrome://browser/skin/page-action.svg");
|
||||
background-position: 55%;
|
||||
border: 1px solid #B1B1B3;
|
||||
border: 1px solid var(--newtab-border-primary-color);
|
||||
border-radius: 100%;
|
||||
box-shadow: 0 2px rgba(12, 12, 13, 0.1);
|
||||
cursor: pointer;
|
||||
fill: rgba(12, 12, 13, 0.8);
|
||||
fill: var(--newtab-icon-primary-color);
|
||||
height: 27px;
|
||||
offset-inline-end: -13.5px;
|
||||
opacity: 0;
|
||||
|
@ -398,12 +457,12 @@ main {
|
|||
transform: scale(1); }
|
||||
.top-site-outer .tile {
|
||||
border-radius: 6px;
|
||||
box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.1), 0 1px 4px 0 rgba(12, 12, 13, 0.1);
|
||||
box-shadow: inset 0 0 0 1px var(--newtab-inner-box-shadow-color), 0 1px 4px 0 rgba(12, 12, 13, 0.1);
|
||||
height: 96px;
|
||||
position: relative;
|
||||
width: 96px;
|
||||
align-items: center;
|
||||
color: #737373;
|
||||
color: var(--newtab-text-secondary-color);
|
||||
display: flex;
|
||||
font-size: 32px;
|
||||
font-weight: 200;
|
||||
|
@ -416,7 +475,7 @@ main {
|
|||
background-position: top left;
|
||||
background-size: cover;
|
||||
border-radius: 6px;
|
||||
box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.1);
|
||||
box-shadow: inset 0 0 0 1px var(--newtab-inner-box-shadow-color);
|
||||
height: 100%;
|
||||
left: 0;
|
||||
opacity: 0;
|
||||
|
@ -427,11 +486,11 @@ main {
|
|||
.top-site-outer .screenshot.active {
|
||||
opacity: 1; }
|
||||
.top-site-outer .top-site-icon {
|
||||
background-color: #F9F9FA;
|
||||
background-color: var(--newtab-background-color);
|
||||
background-position: center center;
|
||||
background-repeat: no-repeat;
|
||||
border-radius: 6px;
|
||||
box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.1);
|
||||
box-shadow: inset 0 0 0 1px var(--newtab-inner-box-shadow-color);
|
||||
position: absolute; }
|
||||
.top-site-outer .rich-icon {
|
||||
background-size: cover;
|
||||
|
@ -452,6 +511,7 @@ main {
|
|||
.top-site-outer .default-icon[data-fallback]::before {
|
||||
content: attr(data-fallback); }
|
||||
.top-site-outer .title {
|
||||
color: var(--newtab-topsites-label-color);
|
||||
font: message-box;
|
||||
height: 30px;
|
||||
line-height: 30px;
|
||||
|
@ -459,7 +519,7 @@ main {
|
|||
width: 96px;
|
||||
position: relative; }
|
||||
.top-site-outer .title .icon {
|
||||
fill: #D7D7DB;
|
||||
fill: var(--newtab-icon-tertiary-color);
|
||||
offset-inline-start: 0;
|
||||
position: absolute;
|
||||
top: 10px; }
|
||||
|
@ -474,7 +534,7 @@ main {
|
|||
.top-site-outer .edit-button {
|
||||
background-image: url("../data/content/assets/glyph-edit-16.svg"); }
|
||||
.top-site-outer.placeholder .tile {
|
||||
box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.1); }
|
||||
box-shadow: inset 0 0 0 1px var(--newtab-inner-box-shadow-color); }
|
||||
.top-site-outer.placeholder .screenshot {
|
||||
display: none; }
|
||||
.top-site-outer.dragged .tile {
|
||||
|
@ -566,8 +626,7 @@ main {
|
|||
margin-top: 4px;
|
||||
cursor: pointer; }
|
||||
.topsite-form .form-wrapper .enable-custom-image-input:hover {
|
||||
text-decoration: underline;
|
||||
color: #0060DF; }
|
||||
text-decoration: underline; }
|
||||
.topsite-form .form-wrapper .custom-image-input-container {
|
||||
margin-top: 4px; }
|
||||
.topsite-form .form-wrapper .custom-image-input-container .loading-container {
|
||||
|
@ -596,7 +655,8 @@ main {
|
|||
.topsite-form .form-wrapper .custom-image-input-container .loading-animation:dir(rtl) {
|
||||
animation-name: tab-throbber-animation-rtl; }
|
||||
.topsite-form .form-wrapper input[type='text'] {
|
||||
border: solid 1px rgba(12, 12, 13, 0.2);
|
||||
background-color: var(--newtab-textbox-color);
|
||||
border: solid 1px var(--newtab-textbox-border);
|
||||
border-radius: 2px;
|
||||
margin: 8px 0;
|
||||
padding: 0 8px;
|
||||
|
@ -607,7 +667,7 @@ main {
|
|||
border: solid 1px #0A84FF;
|
||||
box-shadow: 0 0 0 1px #0A84FF, 0 0 0 4px rgba(10, 132, 255, 0.3); }
|
||||
.topsite-form .form-wrapper input[type='text'][disabled] {
|
||||
border: solid 1px rgba(12, 12, 13, 0.2);
|
||||
border: solid 1px var(--newtab-textbox-border);
|
||||
box-shadow: none;
|
||||
opacity: 0.4; }
|
||||
.topsite-form .form-wrapper .invalid input[type='text'] {
|
||||
|
@ -682,7 +742,7 @@ main {
|
|||
offset-inline-start: auto; } }
|
||||
|
||||
.sections-list .section-empty-state {
|
||||
border: 1px solid #D7D7DB;
|
||||
border: 1px solid var(--newtab-border-secondary-color);
|
||||
border-radius: 3px;
|
||||
display: flex;
|
||||
height: 266px;
|
||||
|
@ -696,12 +756,12 @@ main {
|
|||
background-size: 50px 50px;
|
||||
-moz-context-properties: fill;
|
||||
display: block;
|
||||
fill: rgba(12, 12, 13, 0.6);
|
||||
fill: var(--newtab-icon-secondary-color);
|
||||
height: 50px;
|
||||
margin: 0 auto;
|
||||
width: 50px; }
|
||||
.sections-list .section-empty-state .empty-state .empty-state-message {
|
||||
color: #737373;
|
||||
color: var(--newtab-text-primary-color);
|
||||
font-size: 13px;
|
||||
margin-bottom: 0;
|
||||
text-align: center; }
|
||||
|
@ -721,7 +781,7 @@ main {
|
|||
height: 370px; }
|
||||
|
||||
.topic {
|
||||
color: #737373;
|
||||
color: var(--newtab-section-navigation-text-color);
|
||||
font-size: 12px;
|
||||
line-height: 1.6;
|
||||
margin-top: 12px; }
|
||||
|
@ -743,9 +803,9 @@ main {
|
|||
.topic ul li:last-child::after {
|
||||
content: none; }
|
||||
.topic .topic-link {
|
||||
color: #008EA4; }
|
||||
color: var(--newtab-link-secondary-color); }
|
||||
.topic .topic-read-more {
|
||||
color: #008EA4; }
|
||||
color: var(--newtab-link-secondary-color); }
|
||||
@media (min-width: 866px) {
|
||||
.topic .topic-read-more {
|
||||
float: right; }
|
||||
|
@ -756,7 +816,7 @@ main {
|
|||
content: '';
|
||||
-moz-context-properties: fill;
|
||||
display: inline-block;
|
||||
fill: #008EA4;
|
||||
fill: var(--newtab-link-secondary-color);
|
||||
height: 16px;
|
||||
margin-inline-start: 5px;
|
||||
vertical-align: top;
|
||||
|
@ -776,9 +836,11 @@ main {
|
|||
position: relative;
|
||||
width: 100%; }
|
||||
.search-wrapper input {
|
||||
border: 0;
|
||||
background: var(--newtab-search-background-color);
|
||||
border: solid 1px var(--newtab-search-border-color);
|
||||
border-radius: 3px;
|
||||
box-shadow: 0 1px 4px 0 rgba(12, 12, 13, 0.1), 0 0 0 1px rgba(0, 0, 0, 0.15);
|
||||
color: var(--newtab-search-text-color);
|
||||
font-size: 15px;
|
||||
padding: 0;
|
||||
padding-inline-end: 36px;
|
||||
|
@ -788,11 +850,11 @@ main {
|
|||
box-shadow: 0 1px 4px 0 rgba(12, 12, 13, 0.1), 0 0 0 1px rgba(0, 0, 0, 0.25); }
|
||||
.search-wrapper:active input,
|
||||
.search-wrapper input:focus {
|
||||
box-shadow: 0 0 0 3px #0A84FF; }
|
||||
box-shadow: 0 0 0 3px var(--newtab-search-focus-border-color); }
|
||||
.search-wrapper .search-label {
|
||||
background: url("chrome://browser/skin/search-glass.svg") no-repeat 12px center/16px;
|
||||
-moz-context-properties: fill;
|
||||
fill: rgba(12, 12, 13, 0.4);
|
||||
fill: var(--newtab-search-icon-color);
|
||||
height: 100%;
|
||||
offset-inline-start: 0;
|
||||
position: absolute;
|
||||
|
@ -803,7 +865,7 @@ main {
|
|||
border: 0;
|
||||
border-radius: 0 3px 3px 0;
|
||||
-moz-context-properties: fill;
|
||||
fill: rgba(12, 12, 13, 0.4);
|
||||
fill: var(--newtab-search-icon-color);
|
||||
height: 100%;
|
||||
offset-inline-end: 0;
|
||||
position: absolute;
|
||||
|
@ -815,12 +877,21 @@ main {
|
|||
background-color: rgba(12, 12, 13, 0.2); }
|
||||
.search-wrapper .search-button:dir(rtl) {
|
||||
transform: scaleX(-1); }
|
||||
.search-wrapper .contentSearchSuggestionTable {
|
||||
border: 0;
|
||||
transform: translateY(2px); }
|
||||
|
||||
.contentSearchSuggestionTable {
|
||||
background-color: var(--newtab-search-background-color);
|
||||
border: 0;
|
||||
transform: translateY(3px); }
|
||||
.contentSearchSuggestionTable .contentSearchHeader {
|
||||
background-color: var(--newtab-background-color);
|
||||
color: var(--newtab-text-secondary-color); }
|
||||
.contentSearchSuggestionTable .contentSearchHeader, .contentSearchSuggestionTable .contentSearchSuggestionsList {
|
||||
border-color: var(--newtab-border-primary-color); }
|
||||
.contentSearchSuggestionTable .contentSearchSearchWithHeaderSearchText {
|
||||
color: var(--newtab-text-primary-color); }
|
||||
|
||||
.context-menu {
|
||||
background: #F9F9FA;
|
||||
background: var(--newtab-background-color);
|
||||
border-radius: 5px;
|
||||
box-shadow: 0 5px 10px rgba(0, 0, 0, 0.3), 0 0 0 1px rgba(0, 0, 0, 0.2);
|
||||
display: block;
|
||||
|
@ -838,7 +909,7 @@ main {
|
|||
margin: 0;
|
||||
width: 100%; }
|
||||
.context-menu > ul > li.separator {
|
||||
border-bottom: 1px solid rgba(0, 0, 0, 0.2);
|
||||
border-bottom: 1px solid var(--newtab-border-secondary-color);
|
||||
margin: 5px 0; }
|
||||
.context-menu > ul > li > a {
|
||||
align-items: center;
|
||||
|
@ -850,7 +921,7 @@ main {
|
|||
padding: 3px 12px;
|
||||
white-space: nowrap; }
|
||||
.context-menu > ul > li > a:-moz-any(:focus, :hover) {
|
||||
background: #0060DF;
|
||||
background: var(--newtab-link-primary-color);
|
||||
color: #FFF; }
|
||||
.context-menu > ul > li > a:-moz-any(:focus, :hover) a {
|
||||
color: #0C0C0D; }
|
||||
|
@ -900,7 +971,7 @@ main {
|
|||
margin-inline-end: 16px; }
|
||||
|
||||
.modal-overlay {
|
||||
background: #EDEDF0;
|
||||
background: var(--newtab-overlay-color);
|
||||
height: 100%;
|
||||
left: 0;
|
||||
opacity: 0.8;
|
||||
|
@ -910,14 +981,14 @@ main {
|
|||
z-index: 11001; }
|
||||
|
||||
.modal {
|
||||
background: #FFF;
|
||||
border: 1px solid #D7D7DB;
|
||||
background: var(--newtab-modal-color);
|
||||
border: 1px solid var(--newtab-border-secondary-color);
|
||||
border-radius: 5px;
|
||||
font-size: 15px;
|
||||
z-index: 11002; }
|
||||
|
||||
.card-outer {
|
||||
background: #FFF;
|
||||
background: var(--newtab-card-background-color);
|
||||
border-radius: 3px;
|
||||
display: inline-block;
|
||||
height: 266px;
|
||||
|
@ -926,14 +997,14 @@ main {
|
|||
width: 100%; }
|
||||
.card-outer .context-menu-button {
|
||||
background-clip: padding-box;
|
||||
background-color: #FFF;
|
||||
background-color: var(--newtab-contextmenu-button-color);
|
||||
background-image: url("chrome://browser/skin/page-action.svg");
|
||||
background-position: 55%;
|
||||
border: 1px solid #B1B1B3;
|
||||
border: 1px solid var(--newtab-border-primary-color);
|
||||
border-radius: 100%;
|
||||
box-shadow: 0 2px rgba(12, 12, 13, 0.1);
|
||||
cursor: pointer;
|
||||
fill: rgba(12, 12, 13, 0.8);
|
||||
fill: var(--newtab-icon-primary-color);
|
||||
height: 27px;
|
||||
offset-inline-end: -13.5px;
|
||||
opacity: 0;
|
||||
|
@ -949,7 +1020,7 @@ main {
|
|||
.card-outer.placeholder {
|
||||
background: transparent; }
|
||||
.card-outer.placeholder .card {
|
||||
box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.1); }
|
||||
box-shadow: inset 0 0 0 1px var(--newtab-inner-box-shadow-color); }
|
||||
.card-outer .card {
|
||||
border-radius: 3px;
|
||||
box-shadow: 0 1px 4px 0 rgba(12, 12, 13, 0.1);
|
||||
|
@ -962,21 +1033,21 @@ main {
|
|||
position: absolute;
|
||||
width: 100%; }
|
||||
.card-outer > a:-moz-any(.active, :focus) .card {
|
||||
box-shadow: 0 0 0 5px #D7D7DB;
|
||||
box-shadow: 0 0 0 5px var(--newtab-card-active-outline-color);
|
||||
transition: box-shadow 150ms; }
|
||||
.card-outer > a:-moz-any(.active, :focus) .card-title {
|
||||
color: #0060DF; }
|
||||
color: var(--newtab-link-primary-color); }
|
||||
.card-outer:-moz-any(:hover, :focus, .active):not(.placeholder) {
|
||||
box-shadow: 0 0 0 5px #D7D7DB;
|
||||
box-shadow: 0 0 0 5px var(--newtab-card-active-outline-color);
|
||||
transition: box-shadow 150ms;
|
||||
outline: none; }
|
||||
.card-outer:-moz-any(:hover, :focus, .active):not(.placeholder) .context-menu-button {
|
||||
opacity: 1;
|
||||
transform: scale(1); }
|
||||
.card-outer:-moz-any(:hover, :focus, .active):not(.placeholder) .card-title {
|
||||
color: #0060DF; }
|
||||
color: var(--newtab-link-primary-color); }
|
||||
.card-outer .card-preview-image-outer {
|
||||
background-color: #F9F9FA;
|
||||
background-color: var(--newtab-background-color);
|
||||
border-radius: 3px 3px 0 0;
|
||||
height: 122px;
|
||||
overflow: hidden;
|
||||
|
@ -1018,7 +1089,7 @@ main {
|
|||
max-height: 57px;
|
||||
overflow: hidden; }
|
||||
.card-outer .card-host-name {
|
||||
color: #737373;
|
||||
color: var(--newtab-text-secondary-color);
|
||||
font-size: 10px;
|
||||
overflow: hidden;
|
||||
padding-bottom: 4px;
|
||||
|
@ -1037,19 +1108,20 @@ main {
|
|||
word-wrap: break-word; }
|
||||
.card-outer .card-context {
|
||||
bottom: 0;
|
||||
color: #737373;
|
||||
color: var(--newtab-text-secondary-color);
|
||||
display: flex;
|
||||
font-size: 11px;
|
||||
left: 0;
|
||||
padding: 12px 16px 12px 14px;
|
||||
padding: 9px 16px 9px 14px;
|
||||
position: absolute;
|
||||
right: 0; }
|
||||
.card-outer .card-context-icon {
|
||||
fill: rgba(12, 12, 13, 0.6);
|
||||
fill: var(--newtab-icon-secondary-color);
|
||||
height: 22px;
|
||||
margin-inline-end: 6px; }
|
||||
.card-outer .card-context-label {
|
||||
flex-grow: 1;
|
||||
line-height: 16px;
|
||||
line-height: 22px;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap; }
|
||||
|
@ -1080,7 +1152,7 @@ main {
|
|||
font-size: 14px; } }
|
||||
|
||||
.manual-migration-container {
|
||||
color: #4A4A4F;
|
||||
color: var(--newtab-text-conditional-color);
|
||||
font-size: 13px;
|
||||
line-height: 15px;
|
||||
margin-bottom: 20px;
|
||||
|
@ -1103,7 +1175,7 @@ main {
|
|||
.manual-migration-container .icon {
|
||||
align-self: center;
|
||||
display: block;
|
||||
fill: rgba(12, 12, 13, 0.6);
|
||||
fill: var(--newtab-icon-secondary-color);
|
||||
margin-inline-end: 6px; } }
|
||||
|
||||
.manual-migration-actions {
|
||||
|
@ -1128,7 +1200,15 @@ main {
|
|||
transition-duration: 100ms;
|
||||
transition-property: background-color; }
|
||||
.collapsible-section .section-title {
|
||||
margin: 0; }
|
||||
font-size: 13px;
|
||||
font-weight: bold;
|
||||
margin: 0;
|
||||
text-transform: uppercase; }
|
||||
.collapsible-section .section-title span {
|
||||
color: var(--newtab-section-header-text-color);
|
||||
display: inline-block;
|
||||
fill: var(--newtab-section-header-text-color);
|
||||
vertical-align: middle; }
|
||||
.collapsible-section .section-title .click-target {
|
||||
cursor: pointer;
|
||||
vertical-align: top;
|
||||
|
@ -1137,13 +1217,15 @@ main {
|
|||
margin-inline-start: 8px;
|
||||
margin-top: -1px; }
|
||||
.collapsible-section .section-top-bar {
|
||||
height: 19px;
|
||||
margin-bottom: 13px;
|
||||
position: relative; }
|
||||
.collapsible-section .section-top-bar .context-menu-button {
|
||||
background: url("chrome://browser/skin/page-action.svg") no-repeat right center;
|
||||
border: 0;
|
||||
cursor: pointer;
|
||||
fill: #737373;
|
||||
height: 20px;
|
||||
fill: var(--newtab-section-header-text-color);
|
||||
height: 100%;
|
||||
offset-inline-end: 0;
|
||||
opacity: 0;
|
||||
position: absolute;
|
||||
|
@ -1165,12 +1247,12 @@ main {
|
|||
.collapsible-section:hover .section-top-bar .context-menu-button, .collapsible-section.active .section-top-bar .context-menu-button {
|
||||
opacity: 1; }
|
||||
.collapsible-section.active {
|
||||
background: rgba(237, 237, 240, 0.6);
|
||||
background: var(--newtab-element-active-color);
|
||||
border-radius: 4px; }
|
||||
.collapsible-section.active .section-top-bar .context-menu-button {
|
||||
fill: #0C0C0D; }
|
||||
fill: var(--newtab-section-active-contextmenu-color); }
|
||||
.collapsible-section .section-disclaimer {
|
||||
color: #4A4A4F;
|
||||
color: var(--newtab-text-conditional-color);
|
||||
font-size: 13px;
|
||||
margin-bottom: 16px;
|
||||
position: relative; }
|
||||
|
@ -1182,10 +1264,11 @@ main {
|
|||
.collapsible-section .section-disclaimer .section-disclaimer-text {
|
||||
width: 224px; } }
|
||||
.collapsible-section .section-disclaimer a {
|
||||
color: #008EA4;
|
||||
color: var(--newtab-link-secondary-color);
|
||||
font-weight: bold;
|
||||
padding-left: 3px; }
|
||||
.collapsible-section .section-disclaimer button {
|
||||
background: #F9F9FA;
|
||||
background: transparent;
|
||||
border: 1px solid #B1B1B3;
|
||||
border-radius: 4px;
|
||||
cursor: pointer;
|
||||
|
@ -1194,7 +1277,7 @@ main {
|
|||
min-height: 26px;
|
||||
offset-inline-end: 0; }
|
||||
.collapsible-section .section-disclaimer button:hover:not(.dismiss) {
|
||||
box-shadow: 0 0 0 5px #D7D7DB;
|
||||
box-shadow: 0 0 0 5px var(--newtab-card-active-outline-color);
|
||||
transition: box-shadow 150ms; }
|
||||
@media (min-width: 482px) {
|
||||
.collapsible-section .section-disclaimer button {
|
||||
|
@ -1215,4 +1298,44 @@ main {
|
|||
max-height: 0;
|
||||
overflow: hidden; }
|
||||
|
||||
.messages-admin {
|
||||
max-width: 996px;
|
||||
margin: 0 auto;
|
||||
font-size: 14px; }
|
||||
.messages-admin h1 {
|
||||
font-weight: 200;
|
||||
font-size: 32px; }
|
||||
.messages-admin table {
|
||||
border-collapse: collapse;
|
||||
width: 100%; }
|
||||
.messages-admin .message-item:first-child td {
|
||||
border-top: 1px solid rgba(0, 0, 0, 0.1); }
|
||||
.messages-admin .message-item td {
|
||||
vertical-align: top;
|
||||
border-bottom: 1px solid rgba(0, 0, 0, 0.1);
|
||||
padding: 8px; }
|
||||
.messages-admin .message-item td:first-child {
|
||||
border-left: 1px solid rgba(0, 0, 0, 0.1); }
|
||||
.messages-admin .message-item td:last-child {
|
||||
border-right: 1px solid rgba(0, 0, 0, 0.1); }
|
||||
.messages-admin .message-item.current .message-id span {
|
||||
background: #FFE900;
|
||||
padding: 2px 5px; }
|
||||
.messages-admin .message-item.blocked .message-id,
|
||||
.messages-admin .message-item.blocked .message-summary {
|
||||
opacity: 0.5; }
|
||||
.messages-admin .message-item.blocked .message-id {
|
||||
color: #0C0C0D; }
|
||||
.messages-admin .message-item .message-id {
|
||||
font-family: "SF Mono", "Monaco", "Inconsolata", "Fira Mono", "Droid Sans Mono", "Source Code Pro", monospace;
|
||||
font-size: 12px; }
|
||||
.messages-admin pre {
|
||||
background: #FFF;
|
||||
margin: 0;
|
||||
padding: 8px;
|
||||
font-size: 12px;
|
||||
max-width: 750px;
|
||||
overflow: auto;
|
||||
font-family: "SF Mono", "Monaco", "Inconsolata", "Fira Mono", "Droid Sans Mono", "Source Code Pro", monospace; }
|
||||
|
||||
/*# sourceMappingURL=activity-stream-mac.css.map */
|
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
|
@ -24,13 +24,79 @@ input {
|
|||
[hidden] {
|
||||
display: none !important; }
|
||||
|
||||
.outer-wrapper {
|
||||
--newtab-background-color: #F9F9FA;
|
||||
--newtab-border-primary-color: #B1B1B3;
|
||||
--newtab-border-secondary-color: #D7D7DB;
|
||||
--newtab-button-primary-color: #0060DF;
|
||||
--newtab-button-secondary-color: inherit;
|
||||
--newtab-element-active-color: rgba(237, 237, 240, 0.6);
|
||||
--newtab-icon-primary-color: rgba(12, 12, 13, 0.8);
|
||||
--newtab-icon-secondary-color: rgba(12, 12, 13, 0.6);
|
||||
--newtab-icon-tertiary-color: #D7D7DB;
|
||||
--newtab-inner-box-shadow-color: rgba(0, 0, 0, 0.1);
|
||||
--newtab-link-primary-color: #0060DF;
|
||||
--newtab-link-secondary-color: #008EA4;
|
||||
--newtab-text-conditional-color: #4A4A4F;
|
||||
--newtab-text-primary-color: #0C0C0D;
|
||||
--newtab-text-secondary-color: #737373;
|
||||
--newtab-textbox-border: rgba(12, 12, 13, 0.2);
|
||||
--newtab-textbox-color: inherit;
|
||||
--newtab-contextmenu-button-color: #FFF;
|
||||
--newtab-modal-color: #FFF;
|
||||
--newtab-overlay-color: #EDEDF0;
|
||||
--newtab-section-header-text-color: #737373;
|
||||
--newtab-section-navigation-text-color: #737373;
|
||||
--newtab-section-active-contextmenu-color: #0C0C0D;
|
||||
--newtab-search-background-color: #FFF;
|
||||
--newtab-search-border-color: transparent;
|
||||
--newtab-search-focus-border-color: #0A84FF;
|
||||
--newtab-search-icon-color: rgba(12, 12, 13, 0.4);
|
||||
--newtab-search-text-color: inherit;
|
||||
--newtab-topsites-label-color: inherit;
|
||||
--newtab-card-background-color: #FFF;
|
||||
--newtab-card-active-outline-color: #D7D7DB; }
|
||||
|
||||
.outer-wrapper.dark-theme {
|
||||
--newtab-background-color: #2A2A2E;
|
||||
--newtab-border-primary-color: rgba(249, 249, 250, 0.8);
|
||||
--newtab-border-secondary-color: rgba(249, 249, 250, 0.2);
|
||||
--newtab-button-primary-color: #45A1FF;
|
||||
--newtab-button-secondary-color: #38383D;
|
||||
--newtab-element-active-color: #4A4A4F;
|
||||
--newtab-icon-primary-color: rgba(249, 249, 250, 0.8);
|
||||
--newtab-icon-secondary-color: rgba(249, 249, 250, 0.4);
|
||||
--newtab-icon-tertiary-color: rgba(249, 249, 250, 0.2);
|
||||
--newtab-inner-box-shadow-color: rgba(249, 249, 250, 0.2);
|
||||
--newtab-link-primary-color: #45A1FF;
|
||||
--newtab-link-secondary-color: #50BCB6;
|
||||
--newtab-text-conditional-color: #F9F9FA;
|
||||
--newtab-text-primary-color: #F9F9FA;
|
||||
--newtab-text-secondary-color: rgba(249, 249, 250, 0.4);
|
||||
--newtab-textbox-border: rgba(249, 249, 250, 0.4);
|
||||
--newtab-textbox-color: #2A2A2E;
|
||||
--newtab-contextmenu-button-color: #2A2A2E;
|
||||
--newtab-modal-color: #0C0C0D;
|
||||
--newtab-overlay-color: #2A2A2E;
|
||||
--newtab-section-header-text-color: rgba(249, 249, 250, 0.8);
|
||||
--newtab-section-navigation-text-color: rgba(249, 249, 250, 0.8);
|
||||
--newtab-section-active-contextmenu-color: #FFF;
|
||||
--newtab-search-background-color: #4A4A4F;
|
||||
--newtab-search-border-color: rgba(249, 249, 250, 0.4);
|
||||
--newtab-search-focus-border-color: #45A1FF;
|
||||
--newtab-search-icon-color: rgba(249, 249, 250, 0.6);
|
||||
--newtab-search-text-color: rgba(249, 249, 250, 0.6);
|
||||
--newtab-topsites-label-color: rgba(249, 249, 250, 0.8);
|
||||
--newtab-card-background-color: #0C0C0D;
|
||||
--newtab-card-active-outline-color: #4A4A4F; }
|
||||
|
||||
.icon {
|
||||
background-position: center center;
|
||||
background-repeat: no-repeat;
|
||||
background-size: 16px;
|
||||
-moz-context-properties: fill;
|
||||
display: inline-block;
|
||||
fill: rgba(12, 12, 13, 0.8);
|
||||
fill: var(--newtab-icon-primary-color);
|
||||
height: 16px;
|
||||
vertical-align: middle;
|
||||
width: 16px; }
|
||||
|
@ -43,7 +109,7 @@ input {
|
|||
.icon.icon-bookmark-hollow {
|
||||
background-image: url("chrome://browser/skin/bookmark-hollow.svg"); }
|
||||
.icon.icon-clear-input {
|
||||
fill: rgba(12, 12, 13, 0.6);
|
||||
fill: var(--newtab-icon-secondary-color);
|
||||
background-image: url("../data/content/assets/glyph-cancel-16.svg"); }
|
||||
.icon.icon-delete {
|
||||
background-image: url("../data/content/assets/glyph-delete-16.svg"); }
|
||||
|
@ -125,14 +191,14 @@ input {
|
|||
.icon.icon-maximize {
|
||||
background-image: url("../data/content/assets/glyph-maximize-16.svg"); }
|
||||
|
||||
html,
|
||||
body,
|
||||
#root {
|
||||
html {
|
||||
height: 100%; }
|
||||
|
||||
body,
|
||||
#root {
|
||||
min-height: 100vh; }
|
||||
|
||||
body {
|
||||
background: #F9F9FA;
|
||||
color: #0C0C0D;
|
||||
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Ubuntu', 'Helvetica Neue', sans-serif;
|
||||
font-size: 16px;
|
||||
overflow-y: scroll; }
|
||||
|
@ -142,10 +208,7 @@ h2 {
|
|||
font-weight: normal; }
|
||||
|
||||
a {
|
||||
color: #0060DF;
|
||||
text-decoration: none; }
|
||||
a:hover {
|
||||
color: #008EA4; }
|
||||
|
||||
.sr-only {
|
||||
border: 0;
|
||||
|
@ -158,7 +221,7 @@ a {
|
|||
width: 1px; }
|
||||
|
||||
.inner-border {
|
||||
border: 1px solid #D7D7DB;
|
||||
border: 1px solid var(--newtab-border-secondary-color);
|
||||
border-radius: 3px;
|
||||
height: 100%;
|
||||
left: 0;
|
||||
|
@ -182,45 +245,56 @@ a {
|
|||
opacity: 1; }
|
||||
|
||||
.actions {
|
||||
border-top: 1px solid #D7D7DB;
|
||||
border-top: 1px solid var(--newtab-border-secondary-color);
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
flex-wrap: wrap;
|
||||
justify-content: flex-start;
|
||||
margin: 0;
|
||||
padding: 15px 25px 0; }
|
||||
.actions button {
|
||||
background-color: #F9F9FA;
|
||||
border: 1px solid #B1B1B3;
|
||||
border-radius: 4px;
|
||||
color: inherit;
|
||||
cursor: pointer;
|
||||
margin-bottom: 15px;
|
||||
padding: 10px 30px;
|
||||
white-space: nowrap; }
|
||||
.actions button:hover:not(.dismiss) {
|
||||
box-shadow: 0 0 0 5px #D7D7DB;
|
||||
transition: box-shadow 150ms; }
|
||||
.actions button.dismiss {
|
||||
border: 0;
|
||||
padding: 0;
|
||||
text-decoration: underline; }
|
||||
.actions button.done {
|
||||
background: #0060DF;
|
||||
border: solid 1px #0060DF;
|
||||
color: #FFF;
|
||||
margin-inline-start: auto; }
|
||||
|
||||
.button,
|
||||
.actions button {
|
||||
background-color: var(--newtab-button-secondary-color);
|
||||
border: 1px solid var(--newtab-border-primary-color);
|
||||
border-radius: 4px;
|
||||
color: inherit;
|
||||
cursor: pointer;
|
||||
margin-bottom: 15px;
|
||||
padding: 10px 30px;
|
||||
white-space: nowrap; }
|
||||
.button:hover:not(.dismiss),
|
||||
.actions button:hover:not(.dismiss) {
|
||||
box-shadow: 0 0 0 5px var(--newtab-card-active-outline-color);
|
||||
transition: box-shadow 150ms; }
|
||||
.button.dismiss,
|
||||
.actions button.dismiss {
|
||||
background-color: transparent;
|
||||
border: 0;
|
||||
padding: 0;
|
||||
text-decoration: underline; }
|
||||
.button.primary, .button.done,
|
||||
.actions button.primary,
|
||||
.actions button.done {
|
||||
background-color: var(--newtab-button-primary-color);
|
||||
border: solid 1px var(--newtab-button-primary-color);
|
||||
color: #FFF;
|
||||
margin-inline-start: auto; }
|
||||
|
||||
#snippets-container {
|
||||
z-index: 1; }
|
||||
|
||||
.outer-wrapper {
|
||||
background-color: var(--newtab-background-color);
|
||||
color: var(--newtab-text-primary-color);
|
||||
display: flex;
|
||||
flex-grow: 1;
|
||||
height: 100%;
|
||||
min-height: 100vh;
|
||||
padding: 30px 32px 32px; }
|
||||
.outer-wrapper.fixed-to-top {
|
||||
height: auto; }
|
||||
display: block; }
|
||||
.outer-wrapper a {
|
||||
color: var(--newtab-link-primary-color); }
|
||||
|
||||
main {
|
||||
margin: auto;
|
||||
|
@ -243,19 +317,6 @@ main {
|
|||
.wide-layout-enabled main {
|
||||
width: 1042px; } }
|
||||
|
||||
.section-top-bar {
|
||||
height: 16px;
|
||||
margin-bottom: 16px; }
|
||||
|
||||
.section-title {
|
||||
font-size: 13px;
|
||||
font-weight: bold;
|
||||
text-transform: uppercase; }
|
||||
.section-title span {
|
||||
color: #737373;
|
||||
fill: #737373;
|
||||
vertical-align: middle; }
|
||||
|
||||
.base-content-fallback {
|
||||
height: 100vh; }
|
||||
|
||||
|
@ -278,22 +339,20 @@ main {
|
|||
background-color: transparent;
|
||||
border: 0;
|
||||
cursor: pointer;
|
||||
fill: rgba(12, 12, 13, 0.6);
|
||||
fill: var(--newtab-icon-primary-color);
|
||||
offset-inline-end: 15px;
|
||||
padding: 15px;
|
||||
position: fixed;
|
||||
top: 15px;
|
||||
z-index: 12001; }
|
||||
.prefs-button button:hover {
|
||||
background-color: #EDEDF0; }
|
||||
.prefs-button button:active {
|
||||
background-color: #F9F9FA; }
|
||||
.prefs-button button:hover, .prefs-button button:focus {
|
||||
background-color: var(--newtab-element-active-color); }
|
||||
|
||||
.as-error-fallback {
|
||||
align-items: center;
|
||||
border-radius: 3px;
|
||||
box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.1);
|
||||
color: #4A4A4F;
|
||||
box-shadow: inset 0 0 0 1px var(--newtab-inner-box-shadow-color);
|
||||
color: var(--newtab-text-conditional-color);
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
font-size: 12px;
|
||||
|
@ -301,7 +360,7 @@ main {
|
|||
justify-items: center;
|
||||
line-height: 1.5; }
|
||||
.as-error-fallback a {
|
||||
color: #4A4A4F;
|
||||
color: var(--newtab-text-conditional-color);
|
||||
text-decoration: underline; }
|
||||
|
||||
.top-sites {
|
||||
|
@ -356,7 +415,7 @@ main {
|
|||
.top-sites-list li {
|
||||
margin: 0 0 8px; }
|
||||
.top-sites-list:not(.dnd-active) .top-site-outer:-moz-any(.active, :focus, :hover) .tile {
|
||||
box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.1), 0 0 0 5px #D7D7DB;
|
||||
box-shadow: inset 0 0 0 1px var(--newtab-inner-box-shadow-color), 0 0 0 5px var(--newtab-card-active-outline-color);
|
||||
transition: box-shadow 150ms; }
|
||||
.top-sites-list:not(.dnd-active) .top-site-outer:-moz-any(.active, :focus, :hover) .context-menu-button {
|
||||
opacity: 1;
|
||||
|
@ -372,18 +431,18 @@ main {
|
|||
display: block;
|
||||
outline: none; }
|
||||
.top-site-outer .top-site-inner > a:-moz-any(.active, :focus) .tile {
|
||||
box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.1), 0 0 0 5px #D7D7DB;
|
||||
box-shadow: inset 0 0 0 1px var(--newtab-inner-box-shadow-color), 0 0 0 5px var(--newtab-card-active-outline-color);
|
||||
transition: box-shadow 150ms; }
|
||||
.top-site-outer .context-menu-button {
|
||||
background-clip: padding-box;
|
||||
background-color: #FFF;
|
||||
background-color: var(--newtab-contextmenu-button-color);
|
||||
background-image: url("chrome://browser/skin/page-action.svg");
|
||||
background-position: 55%;
|
||||
border: 1px solid #B1B1B3;
|
||||
border: 1px solid var(--newtab-border-primary-color);
|
||||
border-radius: 100%;
|
||||
box-shadow: 0 2px rgba(12, 12, 13, 0.1);
|
||||
cursor: pointer;
|
||||
fill: rgba(12, 12, 13, 0.8);
|
||||
fill: var(--newtab-icon-primary-color);
|
||||
height: 27px;
|
||||
offset-inline-end: -13.5px;
|
||||
opacity: 0;
|
||||
|
@ -398,12 +457,12 @@ main {
|
|||
transform: scale(1); }
|
||||
.top-site-outer .tile {
|
||||
border-radius: 6px;
|
||||
box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.1), 0 1px 4px 0 rgba(12, 12, 13, 0.1);
|
||||
box-shadow: inset 0 0 0 1px var(--newtab-inner-box-shadow-color), 0 1px 4px 0 rgba(12, 12, 13, 0.1);
|
||||
height: 96px;
|
||||
position: relative;
|
||||
width: 96px;
|
||||
align-items: center;
|
||||
color: #737373;
|
||||
color: var(--newtab-text-secondary-color);
|
||||
display: flex;
|
||||
font-size: 32px;
|
||||
font-weight: 200;
|
||||
|
@ -416,7 +475,7 @@ main {
|
|||
background-position: top left;
|
||||
background-size: cover;
|
||||
border-radius: 6px;
|
||||
box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.1);
|
||||
box-shadow: inset 0 0 0 1px var(--newtab-inner-box-shadow-color);
|
||||
height: 100%;
|
||||
left: 0;
|
||||
opacity: 0;
|
||||
|
@ -427,11 +486,11 @@ main {
|
|||
.top-site-outer .screenshot.active {
|
||||
opacity: 1; }
|
||||
.top-site-outer .top-site-icon {
|
||||
background-color: #F9F9FA;
|
||||
background-color: var(--newtab-background-color);
|
||||
background-position: center center;
|
||||
background-repeat: no-repeat;
|
||||
border-radius: 6px;
|
||||
box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.1);
|
||||
box-shadow: inset 0 0 0 1px var(--newtab-inner-box-shadow-color);
|
||||
position: absolute; }
|
||||
.top-site-outer .rich-icon {
|
||||
background-size: cover;
|
||||
|
@ -452,6 +511,7 @@ main {
|
|||
.top-site-outer .default-icon[data-fallback]::before {
|
||||
content: attr(data-fallback); }
|
||||
.top-site-outer .title {
|
||||
color: var(--newtab-topsites-label-color);
|
||||
font: message-box;
|
||||
height: 30px;
|
||||
line-height: 30px;
|
||||
|
@ -459,7 +519,7 @@ main {
|
|||
width: 96px;
|
||||
position: relative; }
|
||||
.top-site-outer .title .icon {
|
||||
fill: #D7D7DB;
|
||||
fill: var(--newtab-icon-tertiary-color);
|
||||
offset-inline-start: 0;
|
||||
position: absolute;
|
||||
top: 10px; }
|
||||
|
@ -474,7 +534,7 @@ main {
|
|||
.top-site-outer .edit-button {
|
||||
background-image: url("../data/content/assets/glyph-edit-16.svg"); }
|
||||
.top-site-outer.placeholder .tile {
|
||||
box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.1); }
|
||||
box-shadow: inset 0 0 0 1px var(--newtab-inner-box-shadow-color); }
|
||||
.top-site-outer.placeholder .screenshot {
|
||||
display: none; }
|
||||
.top-site-outer.dragged .tile {
|
||||
|
@ -566,8 +626,7 @@ main {
|
|||
margin-top: 4px;
|
||||
cursor: pointer; }
|
||||
.topsite-form .form-wrapper .enable-custom-image-input:hover {
|
||||
text-decoration: underline;
|
||||
color: #0060DF; }
|
||||
text-decoration: underline; }
|
||||
.topsite-form .form-wrapper .custom-image-input-container {
|
||||
margin-top: 4px; }
|
||||
.topsite-form .form-wrapper .custom-image-input-container .loading-container {
|
||||
|
@ -596,7 +655,8 @@ main {
|
|||
.topsite-form .form-wrapper .custom-image-input-container .loading-animation:dir(rtl) {
|
||||
animation-name: tab-throbber-animation-rtl; }
|
||||
.topsite-form .form-wrapper input[type='text'] {
|
||||
border: solid 1px rgba(12, 12, 13, 0.2);
|
||||
background-color: var(--newtab-textbox-color);
|
||||
border: solid 1px var(--newtab-textbox-border);
|
||||
border-radius: 2px;
|
||||
margin: 8px 0;
|
||||
padding: 0 8px;
|
||||
|
@ -607,7 +667,7 @@ main {
|
|||
border: solid 1px #0A84FF;
|
||||
box-shadow: 0 0 0 1px #0A84FF, 0 0 0 4px rgba(10, 132, 255, 0.3); }
|
||||
.topsite-form .form-wrapper input[type='text'][disabled] {
|
||||
border: solid 1px rgba(12, 12, 13, 0.2);
|
||||
border: solid 1px var(--newtab-textbox-border);
|
||||
box-shadow: none;
|
||||
opacity: 0.4; }
|
||||
.topsite-form .form-wrapper .invalid input[type='text'] {
|
||||
|
@ -682,7 +742,7 @@ main {
|
|||
offset-inline-start: auto; } }
|
||||
|
||||
.sections-list .section-empty-state {
|
||||
border: 1px solid #D7D7DB;
|
||||
border: 1px solid var(--newtab-border-secondary-color);
|
||||
border-radius: 3px;
|
||||
display: flex;
|
||||
height: 266px;
|
||||
|
@ -696,12 +756,12 @@ main {
|
|||
background-size: 50px 50px;
|
||||
-moz-context-properties: fill;
|
||||
display: block;
|
||||
fill: rgba(12, 12, 13, 0.6);
|
||||
fill: var(--newtab-icon-secondary-color);
|
||||
height: 50px;
|
||||
margin: 0 auto;
|
||||
width: 50px; }
|
||||
.sections-list .section-empty-state .empty-state .empty-state-message {
|
||||
color: #737373;
|
||||
color: var(--newtab-text-primary-color);
|
||||
font-size: 13px;
|
||||
margin-bottom: 0;
|
||||
text-align: center; }
|
||||
|
@ -721,7 +781,7 @@ main {
|
|||
height: 370px; }
|
||||
|
||||
.topic {
|
||||
color: #737373;
|
||||
color: var(--newtab-section-navigation-text-color);
|
||||
font-size: 12px;
|
||||
line-height: 1.6;
|
||||
margin-top: 12px; }
|
||||
|
@ -743,9 +803,9 @@ main {
|
|||
.topic ul li:last-child::after {
|
||||
content: none; }
|
||||
.topic .topic-link {
|
||||
color: #008EA4; }
|
||||
color: var(--newtab-link-secondary-color); }
|
||||
.topic .topic-read-more {
|
||||
color: #008EA4; }
|
||||
color: var(--newtab-link-secondary-color); }
|
||||
@media (min-width: 866px) {
|
||||
.topic .topic-read-more {
|
||||
float: right; }
|
||||
|
@ -756,7 +816,7 @@ main {
|
|||
content: '';
|
||||
-moz-context-properties: fill;
|
||||
display: inline-block;
|
||||
fill: #008EA4;
|
||||
fill: var(--newtab-link-secondary-color);
|
||||
height: 16px;
|
||||
margin-inline-start: 5px;
|
||||
vertical-align: top;
|
||||
|
@ -776,9 +836,11 @@ main {
|
|||
position: relative;
|
||||
width: 100%; }
|
||||
.search-wrapper input {
|
||||
border: 0;
|
||||
background: var(--newtab-search-background-color);
|
||||
border: solid 1px var(--newtab-search-border-color);
|
||||
border-radius: 3px;
|
||||
box-shadow: 0 1px 4px 0 rgba(12, 12, 13, 0.1), 0 0 0 1px rgba(0, 0, 0, 0.15);
|
||||
color: var(--newtab-search-text-color);
|
||||
font-size: 15px;
|
||||
padding: 0;
|
||||
padding-inline-end: 36px;
|
||||
|
@ -788,11 +850,11 @@ main {
|
|||
box-shadow: 0 1px 4px 0 rgba(12, 12, 13, 0.1), 0 0 0 1px rgba(0, 0, 0, 0.25); }
|
||||
.search-wrapper:active input,
|
||||
.search-wrapper input:focus {
|
||||
box-shadow: 0 0 0 1px #0A84FF; }
|
||||
box-shadow: 0 0 0 1px var(--newtab-search-focus-border-color); }
|
||||
.search-wrapper .search-label {
|
||||
background: url("chrome://browser/skin/search-glass.svg") no-repeat 12px center/16px;
|
||||
-moz-context-properties: fill;
|
||||
fill: rgba(12, 12, 13, 0.4);
|
||||
fill: var(--newtab-search-icon-color);
|
||||
height: 100%;
|
||||
offset-inline-start: 0;
|
||||
position: absolute;
|
||||
|
@ -803,7 +865,7 @@ main {
|
|||
border: 0;
|
||||
border-radius: 0 3px 3px 0;
|
||||
-moz-context-properties: fill;
|
||||
fill: rgba(12, 12, 13, 0.4);
|
||||
fill: var(--newtab-search-icon-color);
|
||||
height: 100%;
|
||||
offset-inline-end: 0;
|
||||
position: absolute;
|
||||
|
@ -815,12 +877,21 @@ main {
|
|||
background-color: rgba(12, 12, 13, 0.2); }
|
||||
.search-wrapper .search-button:dir(rtl) {
|
||||
transform: scaleX(-1); }
|
||||
.search-wrapper .contentSearchSuggestionTable {
|
||||
border: 0;
|
||||
transform: translateY(2px); }
|
||||
|
||||
.contentSearchSuggestionTable {
|
||||
background-color: var(--newtab-search-background-color);
|
||||
border: 0;
|
||||
transform: translateY(3px); }
|
||||
.contentSearchSuggestionTable .contentSearchHeader {
|
||||
background-color: var(--newtab-background-color);
|
||||
color: var(--newtab-text-secondary-color); }
|
||||
.contentSearchSuggestionTable .contentSearchHeader, .contentSearchSuggestionTable .contentSearchSuggestionsList {
|
||||
border-color: var(--newtab-border-primary-color); }
|
||||
.contentSearchSuggestionTable .contentSearchSearchWithHeaderSearchText {
|
||||
color: var(--newtab-text-primary-color); }
|
||||
|
||||
.context-menu {
|
||||
background: #F9F9FA;
|
||||
background: var(--newtab-background-color);
|
||||
border-radius: 5px;
|
||||
box-shadow: 0 5px 10px rgba(0, 0, 0, 0.3), 0 0 0 1px rgba(0, 0, 0, 0.2);
|
||||
display: block;
|
||||
|
@ -838,7 +909,7 @@ main {
|
|||
margin: 0;
|
||||
width: 100%; }
|
||||
.context-menu > ul > li.separator {
|
||||
border-bottom: 1px solid rgba(0, 0, 0, 0.2);
|
||||
border-bottom: 1px solid var(--newtab-border-secondary-color);
|
||||
margin: 5px 0; }
|
||||
.context-menu > ul > li > a {
|
||||
align-items: center;
|
||||
|
@ -850,7 +921,7 @@ main {
|
|||
padding: 3px 12px;
|
||||
white-space: nowrap; }
|
||||
.context-menu > ul > li > a:-moz-any(:focus, :hover) {
|
||||
background: #0060DF;
|
||||
background: var(--newtab-link-primary-color);
|
||||
color: #FFF; }
|
||||
.context-menu > ul > li > a:-moz-any(:focus, :hover) a {
|
||||
color: #0C0C0D; }
|
||||
|
@ -900,7 +971,7 @@ main {
|
|||
margin-inline-end: 16px; }
|
||||
|
||||
.modal-overlay {
|
||||
background: #EDEDF0;
|
||||
background: var(--newtab-overlay-color);
|
||||
height: 100%;
|
||||
left: 0;
|
||||
opacity: 0.8;
|
||||
|
@ -910,14 +981,14 @@ main {
|
|||
z-index: 11001; }
|
||||
|
||||
.modal {
|
||||
background: #FFF;
|
||||
border: 1px solid #D7D7DB;
|
||||
background: var(--newtab-modal-color);
|
||||
border: 1px solid var(--newtab-border-secondary-color);
|
||||
border-radius: 5px;
|
||||
font-size: 15px;
|
||||
z-index: 11002; }
|
||||
|
||||
.card-outer {
|
||||
background: #FFF;
|
||||
background: var(--newtab-card-background-color);
|
||||
border-radius: 3px;
|
||||
display: inline-block;
|
||||
height: 266px;
|
||||
|
@ -926,14 +997,14 @@ main {
|
|||
width: 100%; }
|
||||
.card-outer .context-menu-button {
|
||||
background-clip: padding-box;
|
||||
background-color: #FFF;
|
||||
background-color: var(--newtab-contextmenu-button-color);
|
||||
background-image: url("chrome://browser/skin/page-action.svg");
|
||||
background-position: 55%;
|
||||
border: 1px solid #B1B1B3;
|
||||
border: 1px solid var(--newtab-border-primary-color);
|
||||
border-radius: 100%;
|
||||
box-shadow: 0 2px rgba(12, 12, 13, 0.1);
|
||||
cursor: pointer;
|
||||
fill: rgba(12, 12, 13, 0.8);
|
||||
fill: var(--newtab-icon-primary-color);
|
||||
height: 27px;
|
||||
offset-inline-end: -13.5px;
|
||||
opacity: 0;
|
||||
|
@ -949,7 +1020,7 @@ main {
|
|||
.card-outer.placeholder {
|
||||
background: transparent; }
|
||||
.card-outer.placeholder .card {
|
||||
box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.1); }
|
||||
box-shadow: inset 0 0 0 1px var(--newtab-inner-box-shadow-color); }
|
||||
.card-outer .card {
|
||||
border-radius: 3px;
|
||||
box-shadow: 0 1px 4px 0 rgba(12, 12, 13, 0.1);
|
||||
|
@ -962,21 +1033,21 @@ main {
|
|||
position: absolute;
|
||||
width: 100%; }
|
||||
.card-outer > a:-moz-any(.active, :focus) .card {
|
||||
box-shadow: 0 0 0 5px #D7D7DB;
|
||||
box-shadow: 0 0 0 5px var(--newtab-card-active-outline-color);
|
||||
transition: box-shadow 150ms; }
|
||||
.card-outer > a:-moz-any(.active, :focus) .card-title {
|
||||
color: #0060DF; }
|
||||
color: var(--newtab-link-primary-color); }
|
||||
.card-outer:-moz-any(:hover, :focus, .active):not(.placeholder) {
|
||||
box-shadow: 0 0 0 5px #D7D7DB;
|
||||
box-shadow: 0 0 0 5px var(--newtab-card-active-outline-color);
|
||||
transition: box-shadow 150ms;
|
||||
outline: none; }
|
||||
.card-outer:-moz-any(:hover, :focus, .active):not(.placeholder) .context-menu-button {
|
||||
opacity: 1;
|
||||
transform: scale(1); }
|
||||
.card-outer:-moz-any(:hover, :focus, .active):not(.placeholder) .card-title {
|
||||
color: #0060DF; }
|
||||
color: var(--newtab-link-primary-color); }
|
||||
.card-outer .card-preview-image-outer {
|
||||
background-color: #F9F9FA;
|
||||
background-color: var(--newtab-background-color);
|
||||
border-radius: 3px 3px 0 0;
|
||||
height: 122px;
|
||||
overflow: hidden;
|
||||
|
@ -1018,7 +1089,7 @@ main {
|
|||
max-height: 57px;
|
||||
overflow: hidden; }
|
||||
.card-outer .card-host-name {
|
||||
color: #737373;
|
||||
color: var(--newtab-text-secondary-color);
|
||||
font-size: 10px;
|
||||
overflow: hidden;
|
||||
padding-bottom: 4px;
|
||||
|
@ -1037,19 +1108,20 @@ main {
|
|||
word-wrap: break-word; }
|
||||
.card-outer .card-context {
|
||||
bottom: 0;
|
||||
color: #737373;
|
||||
color: var(--newtab-text-secondary-color);
|
||||
display: flex;
|
||||
font-size: 11px;
|
||||
left: 0;
|
||||
padding: 12px 16px 12px 14px;
|
||||
padding: 9px 16px 9px 14px;
|
||||
position: absolute;
|
||||
right: 0; }
|
||||
.card-outer .card-context-icon {
|
||||
fill: rgba(12, 12, 13, 0.6);
|
||||
fill: var(--newtab-icon-secondary-color);
|
||||
height: 22px;
|
||||
margin-inline-end: 6px; }
|
||||
.card-outer .card-context-label {
|
||||
flex-grow: 1;
|
||||
line-height: 16px;
|
||||
line-height: 22px;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap; }
|
||||
|
@ -1080,7 +1152,7 @@ main {
|
|||
font-size: 14px; } }
|
||||
|
||||
.manual-migration-container {
|
||||
color: #4A4A4F;
|
||||
color: var(--newtab-text-conditional-color);
|
||||
font-size: 13px;
|
||||
line-height: 15px;
|
||||
margin-bottom: 20px;
|
||||
|
@ -1103,7 +1175,7 @@ main {
|
|||
.manual-migration-container .icon {
|
||||
align-self: center;
|
||||
display: block;
|
||||
fill: rgba(12, 12, 13, 0.6);
|
||||
fill: var(--newtab-icon-secondary-color);
|
||||
margin-inline-end: 6px; } }
|
||||
|
||||
.manual-migration-actions {
|
||||
|
@ -1128,7 +1200,15 @@ main {
|
|||
transition-duration: 100ms;
|
||||
transition-property: background-color; }
|
||||
.collapsible-section .section-title {
|
||||
margin: 0; }
|
||||
font-size: 13px;
|
||||
font-weight: bold;
|
||||
margin: 0;
|
||||
text-transform: uppercase; }
|
||||
.collapsible-section .section-title span {
|
||||
color: var(--newtab-section-header-text-color);
|
||||
display: inline-block;
|
||||
fill: var(--newtab-section-header-text-color);
|
||||
vertical-align: middle; }
|
||||
.collapsible-section .section-title .click-target {
|
||||
cursor: pointer;
|
||||
vertical-align: top;
|
||||
|
@ -1137,13 +1217,15 @@ main {
|
|||
margin-inline-start: 8px;
|
||||
margin-top: -1px; }
|
||||
.collapsible-section .section-top-bar {
|
||||
height: 19px;
|
||||
margin-bottom: 13px;
|
||||
position: relative; }
|
||||
.collapsible-section .section-top-bar .context-menu-button {
|
||||
background: url("chrome://browser/skin/page-action.svg") no-repeat right center;
|
||||
border: 0;
|
||||
cursor: pointer;
|
||||
fill: #737373;
|
||||
height: 20px;
|
||||
fill: var(--newtab-section-header-text-color);
|
||||
height: 100%;
|
||||
offset-inline-end: 0;
|
||||
opacity: 0;
|
||||
position: absolute;
|
||||
|
@ -1165,12 +1247,12 @@ main {
|
|||
.collapsible-section:hover .section-top-bar .context-menu-button, .collapsible-section.active .section-top-bar .context-menu-button {
|
||||
opacity: 1; }
|
||||
.collapsible-section.active {
|
||||
background: rgba(237, 237, 240, 0.6);
|
||||
background: var(--newtab-element-active-color);
|
||||
border-radius: 4px; }
|
||||
.collapsible-section.active .section-top-bar .context-menu-button {
|
||||
fill: #0C0C0D; }
|
||||
fill: var(--newtab-section-active-contextmenu-color); }
|
||||
.collapsible-section .section-disclaimer {
|
||||
color: #4A4A4F;
|
||||
color: var(--newtab-text-conditional-color);
|
||||
font-size: 13px;
|
||||
margin-bottom: 16px;
|
||||
position: relative; }
|
||||
|
@ -1182,10 +1264,11 @@ main {
|
|||
.collapsible-section .section-disclaimer .section-disclaimer-text {
|
||||
width: 224px; } }
|
||||
.collapsible-section .section-disclaimer a {
|
||||
color: #008EA4;
|
||||
color: var(--newtab-link-secondary-color);
|
||||
font-weight: bold;
|
||||
padding-left: 3px; }
|
||||
.collapsible-section .section-disclaimer button {
|
||||
background: #F9F9FA;
|
||||
background: transparent;
|
||||
border: 1px solid #B1B1B3;
|
||||
border-radius: 4px;
|
||||
cursor: pointer;
|
||||
|
@ -1194,7 +1277,7 @@ main {
|
|||
min-height: 26px;
|
||||
offset-inline-end: 0; }
|
||||
.collapsible-section .section-disclaimer button:hover:not(.dismiss) {
|
||||
box-shadow: 0 0 0 5px #D7D7DB;
|
||||
box-shadow: 0 0 0 5px var(--newtab-card-active-outline-color);
|
||||
transition: box-shadow 150ms; }
|
||||
@media (min-width: 482px) {
|
||||
.collapsible-section .section-disclaimer button {
|
||||
|
@ -1215,4 +1298,44 @@ main {
|
|||
max-height: 0;
|
||||
overflow: hidden; }
|
||||
|
||||
.messages-admin {
|
||||
max-width: 996px;
|
||||
margin: 0 auto;
|
||||
font-size: 14px; }
|
||||
.messages-admin h1 {
|
||||
font-weight: 200;
|
||||
font-size: 32px; }
|
||||
.messages-admin table {
|
||||
border-collapse: collapse;
|
||||
width: 100%; }
|
||||
.messages-admin .message-item:first-child td {
|
||||
border-top: 1px solid rgba(0, 0, 0, 0.1); }
|
||||
.messages-admin .message-item td {
|
||||
vertical-align: top;
|
||||
border-bottom: 1px solid rgba(0, 0, 0, 0.1);
|
||||
padding: 8px; }
|
||||
.messages-admin .message-item td:first-child {
|
||||
border-left: 1px solid rgba(0, 0, 0, 0.1); }
|
||||
.messages-admin .message-item td:last-child {
|
||||
border-right: 1px solid rgba(0, 0, 0, 0.1); }
|
||||
.messages-admin .message-item.current .message-id span {
|
||||
background: #FFE900;
|
||||
padding: 2px 5px; }
|
||||
.messages-admin .message-item.blocked .message-id,
|
||||
.messages-admin .message-item.blocked .message-summary {
|
||||
opacity: 0.5; }
|
||||
.messages-admin .message-item.blocked .message-id {
|
||||
color: #0C0C0D; }
|
||||
.messages-admin .message-item .message-id {
|
||||
font-family: "SF Mono", "Monaco", "Inconsolata", "Fira Mono", "Droid Sans Mono", "Source Code Pro", monospace;
|
||||
font-size: 12px; }
|
||||
.messages-admin pre {
|
||||
background: #FFF;
|
||||
margin: 0;
|
||||
padding: 8px;
|
||||
font-size: 12px;
|
||||
max-width: 750px;
|
||||
overflow: auto;
|
||||
font-family: "SF Mono", "Monaco", "Inconsolata", "Fira Mono", "Droid Sans Mono", "Source Code Pro", monospace; }
|
||||
|
||||
/*# sourceMappingURL=activity-stream-windows.css.map */
|
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
Разница между файлами не показана из-за своего большого размера
Загрузить разницу
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
|
@ -8,7 +8,7 @@
|
|||
<em:type>2</em:type>
|
||||
<em:bootstrap>true</em:bootstrap>
|
||||
<em:unpack>false</em:unpack>
|
||||
<em:version>2018.03.23.1170-837cea5f</em:version>
|
||||
<em:version>2018.03.29.1163-6170061b</em:version>
|
||||
<em:name>Activity Stream</em:name>
|
||||
<em:description>A rich visual history feed and a reimagined home page make it easier than ever to find exactly what you're looking for in Firefox.</em:description>
|
||||
<em:multiprocessCompatible>true</em:multiprocessCompatible>
|
||||
|
|
|
@ -195,6 +195,20 @@ this.AboutPreferences = class AboutPreferences {
|
|||
label.classList.add("indent");
|
||||
label.textContent = formatString(descString);
|
||||
|
||||
// Specially add a link for stories
|
||||
if (id === "topstories") {
|
||||
const sponsoredHbox = createAppend("hbox", detailVbox);
|
||||
sponsoredHbox.setAttribute("align", "center");
|
||||
sponsoredHbox.appendChild(label);
|
||||
label.classList.add("tail-with-learn-more");
|
||||
|
||||
const link = createAppend("label", sponsoredHbox);
|
||||
link.classList.add("learn-sponsored");
|
||||
link.classList.add("text-link");
|
||||
link.setAttribute("href", sectionData.disclaimer.link.href);
|
||||
link.textContent = formatString("prefs_topstories_sponsored_learn_more");
|
||||
}
|
||||
|
||||
// Add a rows dropdown if we have a pref to control and a maximum
|
||||
if (rowsPref && maxRows) {
|
||||
const detailHbox = createAppend("hbox", detailVbox);
|
||||
|
@ -221,20 +235,6 @@ this.AboutPreferences = class AboutPreferences {
|
|||
subcheck.classList.add("indent");
|
||||
subcheck.setAttribute("label", formatString(nested.titleString));
|
||||
linkPref(subcheck, nested.name, "bool");
|
||||
|
||||
// Specially add a link for sponsored content
|
||||
if (nested.name === "showSponsored") {
|
||||
const sponsoredHbox = createAppend("hbox", detailVbox);
|
||||
sponsoredHbox.setAttribute("align", "center");
|
||||
sponsoredHbox.appendChild(subcheck);
|
||||
subcheck.classList.add("tail-with-learn-more");
|
||||
|
||||
const link = createAppend("label", sponsoredHbox);
|
||||
link.classList.add("learn-sponsored");
|
||||
link.classList.add("text-link");
|
||||
link.setAttribute("href", sectionData.disclaimer.link.href);
|
||||
link.textContent = formatString("prefs_topstories_sponsored_learn_more");
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
|
|
@ -26,6 +26,9 @@ const {FaviconFeed} = ChromeUtils.import("resource://activity-stream/lib/Favicon
|
|||
const {TopSitesFeed} = ChromeUtils.import("resource://activity-stream/lib/TopSitesFeed.jsm", {});
|
||||
const {TopStoriesFeed} = ChromeUtils.import("resource://activity-stream/lib/TopStoriesFeed.jsm", {});
|
||||
const {HighlightsFeed} = ChromeUtils.import("resource://activity-stream/lib/HighlightsFeed.jsm", {});
|
||||
const {ActivityStreamStorage} = ChromeUtils.import("resource://activity-stream/lib/ActivityStreamStorage.jsm", {});
|
||||
const {ThemeFeed} = ChromeUtils.import("resource://activity-stream/lib/ThemeFeed.jsm", {});
|
||||
const {MessageCenterFeed} = ChromeUtils.import("resource://activity-stream/lib/MessageCenterFeed.jsm", {});
|
||||
|
||||
const DEFAULT_SITES = new Map([
|
||||
// This first item is the global list fallback for any unexpected geos
|
||||
|
@ -60,7 +63,6 @@ const PREFS_CONFIG = new Map([
|
|||
read_more_endpoint: "https://getpocket.com/explore/trending?src=fx_new_tab",
|
||||
stories_endpoint: `https://getpocket.cdn.mozilla.net/v3/firefox/global-recs?version=3&consumer_key=$apiKey&locale_lang=${args.locale}`,
|
||||
stories_referrer: "https://getpocket.com/recommendations",
|
||||
disclaimer_link: "https://getpocket.com/firefox/new_tab_learn_more",
|
||||
topics_endpoint: `https://getpocket.cdn.mozilla.net/v3/firefox/trending-topics?version=2&consumer_key=$apiKey&locale_lang=${args.locale}`,
|
||||
show_spocs: false,
|
||||
personalized: true
|
||||
|
@ -102,10 +104,6 @@ const PREFS_CONFIG = new Map([
|
|||
title: "Show the Top Sites section",
|
||||
value: true
|
||||
}],
|
||||
["collapseTopSites", {
|
||||
title: "Collapse the Top Sites section",
|
||||
value: false
|
||||
}],
|
||||
["topSitesRows", {
|
||||
title: "Number of rows of Top Sites to display",
|
||||
value: 1
|
||||
|
@ -124,18 +122,10 @@ const PREFS_CONFIG = new Map([
|
|||
title: "Telemetry server endpoint",
|
||||
value: "https://tiles.services.mozilla.com/v4/links/activity-stream"
|
||||
}],
|
||||
["section.highlights.collapsed", {
|
||||
title: "Collapse the Highlights section",
|
||||
value: false
|
||||
}],
|
||||
["section.highlights.includePocket", {
|
||||
title: "Boolean flag that decides whether or not to show saved Pocket stories in highlights.",
|
||||
value: true
|
||||
}],
|
||||
["section.topstories.collapsed", {
|
||||
title: "Collapse the Top Stories section",
|
||||
value: false
|
||||
}],
|
||||
["section.topstories.showDisclaimer", {
|
||||
title: "Boolean flag that decides whether or not to show the topstories disclaimer.",
|
||||
value: true
|
||||
|
@ -151,6 +141,10 @@ const PREFS_CONFIG = new Map([
|
|||
["sectionOrder", {
|
||||
title: "The rendering order for the sections",
|
||||
value: "topsites,topstories,highlights"
|
||||
}],
|
||||
["messageCenterExperimentEnabled", {
|
||||
title: "Is the message center experiment on?",
|
||||
value: false
|
||||
}]
|
||||
]);
|
||||
|
||||
|
@ -186,6 +180,12 @@ const FEEDS_DATA = [
|
|||
title: "Preferences",
|
||||
value: true
|
||||
},
|
||||
{
|
||||
name: "theme",
|
||||
factory: () => new ThemeFeed(),
|
||||
title: "Theme",
|
||||
value: true
|
||||
},
|
||||
{
|
||||
name: "sections",
|
||||
factory: () => new SectionsFeed(),
|
||||
|
@ -241,6 +241,12 @@ const FEEDS_DATA = [
|
|||
factory: () => new TopSitesFeed(),
|
||||
title: "Queries places and gets metadata for Top Sites section",
|
||||
value: true
|
||||
},
|
||||
{
|
||||
name: "messagecenterfeed",
|
||||
factory: () => new MessageCenterFeed(),
|
||||
title: "Queries places and gets metadata for Top Sites section",
|
||||
value: true
|
||||
}
|
||||
];
|
||||
|
||||
|
@ -266,6 +272,7 @@ this.ActivityStream = class ActivityStream {
|
|||
this.store = new Store();
|
||||
this.feeds = FEEDS_CONFIG;
|
||||
this._defaultPrefs = new DefaultPrefs(PREFS_CONFIG);
|
||||
this._storage = new ActivityStreamStorage(["sectionPrefs", "snippets"]);
|
||||
}
|
||||
|
||||
init() {
|
||||
|
@ -273,6 +280,11 @@ this.ActivityStream = class ActivityStream {
|
|||
this._updateDynamicPrefs();
|
||||
this._defaultPrefs.init();
|
||||
|
||||
// Accessing the db causes the object stores to be created / migrated.
|
||||
// This needs to happen before other instances try to access the db, which
|
||||
// would update only a subset of the stores to the latest version.
|
||||
this._storage.db; // eslint-disable-line no-unused-expressions
|
||||
|
||||
// Hook up the store and let all feeds and pages initialize
|
||||
this.store.init(this.feeds, ac.BroadcastToContent({
|
||||
type: at.INIT,
|
||||
|
|
|
@ -1,42 +1,55 @@
|
|||
ChromeUtils.defineModuleGetter(this, "IndexedDB", "resource://gre/modules/IndexedDB.jsm");
|
||||
|
||||
this.ActivityStreamStorage = class ActivityStreamStorage {
|
||||
/**
|
||||
* @param storeName String with the store name to access or array of strings
|
||||
* to create all the required stores
|
||||
*/
|
||||
constructor(storeName) {
|
||||
this.dbName = "ActivityStream";
|
||||
this.dbVersion = 2;
|
||||
this.dbVersion = 3;
|
||||
this.storeName = storeName;
|
||||
|
||||
this._db = null;
|
||||
}
|
||||
|
||||
get db() {
|
||||
if (!this._db) {
|
||||
throw new Error("It looks like the db connection has not initialized yet. Are you use .init was called?");
|
||||
}
|
||||
return this._db;
|
||||
return this._db || (this._db = this._openDatabase());
|
||||
}
|
||||
|
||||
getStore() {
|
||||
return this.db.objectStore(this.storeName, "readwrite");
|
||||
async getStore() {
|
||||
return (await this.db).objectStore(this.storeName, "readwrite");
|
||||
}
|
||||
|
||||
get(key) {
|
||||
return this.getStore().get(key);
|
||||
async get(key) {
|
||||
return (await this.getStore()).get(key);
|
||||
}
|
||||
|
||||
set(key, value) {
|
||||
return this.getStore().put(value, key);
|
||||
async getAll() {
|
||||
return (await this.getStore()).getAll();
|
||||
}
|
||||
|
||||
async set(key, value) {
|
||||
return (await this.getStore()).put(value, key);
|
||||
}
|
||||
|
||||
_openDatabase() {
|
||||
return IndexedDB.open(this.dbName, {version: this.dbVersion}, db => {
|
||||
db.createObjectStore(this.storeName);
|
||||
// If provided with array of objectStore names we need to create all the
|
||||
// individual stores
|
||||
if (Array.isArray(this.storeName)) {
|
||||
this.storeName.forEach(store => {
|
||||
if (!db.objectStoreNames.contains(store)) {
|
||||
db.createObjectStore(store);
|
||||
}
|
||||
});
|
||||
} else if (!db.objectStoreNames.contains(this.storeName)) {
|
||||
db.createObjectStore(this.storeName);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
async init() {
|
||||
this._db = await this._openDatabase();
|
||||
}
|
||||
};
|
||||
|
||||
const EXPORTED_SYMBOLS = ["ActivityStreamStorage"];
|
||||
function getDefaultOptions(options) {
|
||||
return {collapsed: !!options.collapsed};
|
||||
}
|
||||
|
||||
const EXPORTED_SYMBOLS = ["ActivityStreamStorage", "getDefaultOptions"];
|
||||
|
|
|
@ -15,11 +15,108 @@ ChromeUtils.defineModuleGetter(this, "PlacesUtils",
|
|||
"resource://gre/modules/PlacesUtils.jsm");
|
||||
ChromeUtils.defineModuleGetter(this, "Services",
|
||||
"resource://gre/modules/Services.jsm");
|
||||
ChromeUtils.defineModuleGetter(this, "NewTabUtils",
|
||||
"resource://gre/modules/NewTabUtils.jsm");
|
||||
|
||||
const FIVE_MINUTES = 5 * 60 * 1000;
|
||||
const ONE_DAY = 24 * 60 * 60 * 1000;
|
||||
const TIPPYTOP_UPDATE_TIME = ONE_DAY;
|
||||
const TIPPYTOP_RETRY_DELAY = FIVE_MINUTES;
|
||||
const MIN_FAVICON_SIZE = 96;
|
||||
|
||||
/**
|
||||
* Get favicon info (uri and size) for a uri from Places.
|
||||
*
|
||||
* @param uri {nsIURI} Page to check for favicon data
|
||||
* @returns A promise of an object (possibly null) containing the data
|
||||
*/
|
||||
function getFaviconInfo(uri) {
|
||||
// Use 0 to get the biggest width available
|
||||
const preferredWidth = 0;
|
||||
return new Promise(resolve => PlacesUtils.favicons.getFaviconDataForPage(
|
||||
uri,
|
||||
// Package up the icon data in an object if we have it; otherwise null
|
||||
(iconUri, faviconLength, favicon, mimeType, faviconSize) =>
|
||||
resolve(iconUri ? {iconUri, faviconSize} : null),
|
||||
preferredWidth));
|
||||
}
|
||||
|
||||
/**
|
||||
* Fetches visit paths for a given URL from its most recent visit in Places.
|
||||
*
|
||||
* Note that this includes the URL itself as well as all the following
|
||||
* permenent&temporary redirected URLs if any.
|
||||
*
|
||||
* @param {String} a URL string
|
||||
*
|
||||
* @returns {Array} Returns an array containing objects as
|
||||
* {int} visit_id: ID of the visit in moz_historyvisits.
|
||||
* {String} url: URL of the redirected URL.
|
||||
*/
|
||||
async function fetchVisitPaths(url) {
|
||||
const query = `
|
||||
WITH RECURSIVE path(visit_id)
|
||||
AS (
|
||||
SELECT v.id
|
||||
FROM moz_places h
|
||||
JOIN moz_historyvisits v
|
||||
ON v.place_id = h.id
|
||||
WHERE h.url_hash = hash(:url) AND h.url = :url
|
||||
AND v.visit_date = h.last_visit_date
|
||||
|
||||
UNION
|
||||
|
||||
SELECT id
|
||||
FROM moz_historyvisits
|
||||
JOIN path
|
||||
ON visit_id = from_visit
|
||||
WHERE visit_type IN
|
||||
(${PlacesUtils.history.TRANSITIONS.REDIRECT_PERMANENT},
|
||||
${PlacesUtils.history.TRANSITIONS.REDIRECT_TEMPORARY})
|
||||
)
|
||||
SELECT visit_id, (
|
||||
SELECT (
|
||||
SELECT url
|
||||
FROM moz_places
|
||||
WHERE id = place_id)
|
||||
FROM moz_historyvisits
|
||||
WHERE id = visit_id) AS url
|
||||
FROM path
|
||||
`;
|
||||
|
||||
const visits = await NewTabUtils.activityStreamProvider.executePlacesQuery(query, {
|
||||
columns: ["visit_id", "url"],
|
||||
params: {url}
|
||||
});
|
||||
return visits;
|
||||
}
|
||||
|
||||
/**
|
||||
* Fetch favicon for a url by following its redirects in Places.
|
||||
*
|
||||
* This can improve the rich icon coverage for Top Sites since Places only
|
||||
* associates the favicon to the final url if the original one gets redirected.
|
||||
* Note this is not an urgent request, hence it is dispatched to the main
|
||||
* thread idle handler to avoid any possible performance impact.
|
||||
*/
|
||||
async function fetchIconFromRedirects(url) {
|
||||
const visitPaths = await fetchVisitPaths(url);
|
||||
if (visitPaths.length > 1) {
|
||||
const lastVisit = visitPaths.pop();
|
||||
const redirectedUri = Services.io.newURI(lastVisit.url);
|
||||
const iconInfo = await getFaviconInfo(redirectedUri);
|
||||
if (iconInfo && iconInfo.faviconSize >= MIN_FAVICON_SIZE) {
|
||||
PlacesUtils.favicons.setAndFetchFaviconForPage(
|
||||
Services.io.newURI(url),
|
||||
iconInfo.iconUri,
|
||||
false,
|
||||
PlacesUtils.favicons.FAVICON_LOAD_NON_PRIVATE,
|
||||
null,
|
||||
Services.scriptSecurityManager.getSystemPrincipal()
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
this.FaviconFeed = class FaviconFeed {
|
||||
constructor() {
|
||||
|
@ -27,6 +124,7 @@ this.FaviconFeed = class FaviconFeed {
|
|||
this.cache = new PersistentCache("tippytop", true);
|
||||
this._sitesByDomain = null;
|
||||
this.numRetries = 0;
|
||||
this._queryForRedirects = new Set();
|
||||
}
|
||||
|
||||
get endpoint() {
|
||||
|
@ -113,6 +211,12 @@ this.FaviconFeed = class FaviconFeed {
|
|||
}));
|
||||
}
|
||||
|
||||
/**
|
||||
* fetchIcon attempts to fetch a rich icon for the given url from two sources.
|
||||
* First, it looks up the tippy top feed, if it's still missing, then it queries
|
||||
* the places for rich icon with its most recent visit in order to deal with
|
||||
* the redirected visit. See Bug 1421428 for more details.
|
||||
*/
|
||||
async fetchIcon(url) {
|
||||
// Avoid initializing and fetching icons if prefs are turned off
|
||||
if (!this.shouldFetchIcons) {
|
||||
|
@ -133,6 +237,12 @@ this.FaviconFeed = class FaviconFeed {
|
|||
null,
|
||||
Services.scriptSecurityManager.getSystemPrincipal()
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!this._queryForRedirects.has(url)) {
|
||||
this._queryForRedirects.add(url);
|
||||
Services.tm.idleDispatchToMainThread(() => fetchIconFromRedirects(url));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -158,4 +268,4 @@ this.FaviconFeed = class FaviconFeed {
|
|||
}
|
||||
};
|
||||
|
||||
const EXPORTED_SYMBOLS = ["FaviconFeed"];
|
||||
const EXPORTED_SYMBOLS = ["FaviconFeed", "fetchIconFromRedirects"];
|
||||
|
|
|
@ -213,11 +213,11 @@ this.HighlightsFeed = class HighlightsFeed {
|
|||
this.init();
|
||||
break;
|
||||
case at.SYSTEM_TICK:
|
||||
case at.TOP_SITES_UPDATED:
|
||||
this.fetchHighlights({broadcast: false});
|
||||
break;
|
||||
case at.MIGRATION_COMPLETED:
|
||||
case at.PLACES_HISTORY_CLEARED:
|
||||
case at.PLACES_LINKS_DELETED:
|
||||
case at.PLACES_LINK_BLOCKED:
|
||||
this.fetchHighlights({broadcast: true});
|
||||
break;
|
||||
|
@ -227,15 +227,11 @@ this.HighlightsFeed = class HighlightsFeed {
|
|||
case at.ARCHIVE_FROM_POCKET:
|
||||
this.archiveFromPocket(action.data.pocket_id);
|
||||
break;
|
||||
case at.PLACES_BOOKMARK_ADDED:
|
||||
case at.PLACES_BOOKMARK_REMOVED:
|
||||
case at.PLACES_LINKS_CHANGED:
|
||||
case at.PLACES_SAVED_TO_POCKET:
|
||||
this.linksCache.expire();
|
||||
this.fetchHighlights({broadcast: false});
|
||||
break;
|
||||
case at.TOP_SITES_UPDATED:
|
||||
this.fetchHighlights({broadcast: false});
|
||||
break;
|
||||
case at.UNINIT:
|
||||
this.uninit();
|
||||
break;
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
"use strict";
|
||||
|
||||
const {actionCreators: ac, actionTypes: at} = ChromeUtils.import("resource://activity-stream/common/Actions.jsm", {});
|
||||
const {Prefs} = ChromeUtils.import("resource://activity-stream/lib/ActivityStreamPrefs.jsm", {});
|
||||
|
||||
const MIGRATION_ENDED_EVENT = "Migration:Ended";
|
||||
const MS_PER_DAY = 86400000;
|
||||
|
||||
|
@ -17,7 +17,22 @@ ChromeUtils.defineModuleGetter(this, "ProfileAge", "resource://gre/modules/Profi
|
|||
this.ManualMigration = class ManualMigration {
|
||||
constructor() {
|
||||
Services.obs.addObserver(this, MIGRATION_ENDED_EVENT);
|
||||
this._prefs = new Prefs();
|
||||
}
|
||||
|
||||
get migrationLastShownDate() {
|
||||
return this.store.getState().Prefs.values.migrationLastShownDate;
|
||||
}
|
||||
|
||||
set migrationLastShownDate(newDate) {
|
||||
this.store.dispatch(ac.SetPref("migrationLastShownDate", newDate));
|
||||
}
|
||||
|
||||
get migrationRemainingDays() {
|
||||
return this.store.getState().Prefs.values.migrationRemainingDays;
|
||||
}
|
||||
|
||||
set migrationRemainingDays(newDate) {
|
||||
this.store.dispatch(ac.SetPref("migrationRemainingDays", newDate));
|
||||
}
|
||||
|
||||
uninit() {
|
||||
|
@ -34,16 +49,17 @@ this.ManualMigration = class ManualMigration {
|
|||
return true;
|
||||
}
|
||||
|
||||
let migrationLastShownDate = new Date(this._prefs.get("migrationLastShownDate") * 1000);
|
||||
let migrationLastShownDate = new Date(this.migrationLastShownDate * 1000);
|
||||
let today = new Date();
|
||||
// Round down to midnight.
|
||||
today = new Date(today.getFullYear(), today.getMonth(), today.getDate());
|
||||
if (migrationLastShownDate < today) {
|
||||
let migrationRemainingDays = this._prefs.get("migrationRemainingDays") - 1;
|
||||
let migrationRemainingDays = this.migrationRemainingDays - 1;
|
||||
|
||||
this.migrationRemainingDays = migrationRemainingDays;
|
||||
|
||||
this._prefs.set("migrationRemainingDays", migrationRemainingDays);
|
||||
// .valueOf returns a value that is too large to store so we need to divide by 1000.
|
||||
this._prefs.set("migrationLastShownDate", today.valueOf() / 1000);
|
||||
this.migrationLastShownDate = today.valueOf() / 1000;
|
||||
|
||||
if (migrationRemainingDays <= 0) {
|
||||
return true;
|
||||
|
|
|
@ -0,0 +1,58 @@
|
|||
const {actionTypes: at} = ChromeUtils.import("resource://activity-stream/common/Actions.jsm", {});
|
||||
const {MessageCenterRouter} = ChromeUtils.import("resource://activity-stream/lib/MessageCenterRouter.jsm", {});
|
||||
ChromeUtils.import("resource://gre/modules/Services.jsm");
|
||||
|
||||
const ONBOARDING_FINISHED_PREF = "browser.onboarding.notification.finished";
|
||||
|
||||
/**
|
||||
* @class MessageCenterFeed - Connects MessageCenter singleton (see above) to Activity Stream's
|
||||
* store so that it can use the RemotePageManager.
|
||||
*/
|
||||
class MessageCenterFeed {
|
||||
constructor(options = {}) {
|
||||
this.router = options.router || MessageCenterRouter;
|
||||
}
|
||||
|
||||
enable() {
|
||||
this.router.init(this.store._messageChannel.channel);
|
||||
// Disable onboarding
|
||||
Services.prefs.setBoolPref(ONBOARDING_FINISHED_PREF, true);
|
||||
}
|
||||
|
||||
disable() {
|
||||
if (this.router.initialized) {
|
||||
this.router.uninit();
|
||||
// Re-enable onboarding
|
||||
Services.prefs.setBoolPref(ONBOARDING_FINISHED_PREF, false);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* enableOrDisableBasedOnPref - Check the experiment pref
|
||||
* (messageCenterExperimentEnabled) and enable or disable MessageCenter based on
|
||||
* its value.
|
||||
*/
|
||||
enableOrDisableBasedOnPref() {
|
||||
const isExperimentEnabled = this.store.getState().Prefs.values.messageCenterExperimentEnabled;
|
||||
if (!this.router.initialized && isExperimentEnabled) {
|
||||
this.enable();
|
||||
} else if (!isExperimentEnabled && this.router.initialized) {
|
||||
this.disable();
|
||||
}
|
||||
}
|
||||
|
||||
onAction(action) {
|
||||
switch (action.type) {
|
||||
case at.INIT:
|
||||
case at.PREF_CHANGED:
|
||||
this.enableOrDisableBasedOnPref();
|
||||
break;
|
||||
case at.UNINIT:
|
||||
this.disable();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
this.MessageCenterFeed = MessageCenterFeed;
|
||||
|
||||
const EXPORTED_SYMBOLS = ["MessageCenterFeed"];
|
|
@ -0,0 +1,163 @@
|
|||
const INCOMING_MESSAGE_NAME = "MessageCenter:child-to-parent";
|
||||
const OUTGOING_MESSAGE_NAME = "MessageCenter:parent-to-child";
|
||||
|
||||
const FAKE_MESSAGES = [
|
||||
{
|
||||
id: "ONBOARDING_1",
|
||||
template: "simple_snippet",
|
||||
content: {
|
||||
title: "Find it faster",
|
||||
body: "Access all of your favorite search engines with a click. Search the whole Web or just one website from the search box.",
|
||||
button: {
|
||||
label: "Learn More",
|
||||
action: "OPEN_LINK",
|
||||
params: {url: "https://mozilla.org"}
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
id: "ONBOARDING_2",
|
||||
template: "simple_snippet",
|
||||
content: {
|
||||
title: "Make Firefox your go-to-browser",
|
||||
body: "It doesn't take much to get the most from Firefox. Just set Firefox as your default browser and put control, customization, and protection on autopilot."
|
||||
}
|
||||
},
|
||||
{
|
||||
id: "ONBOARDING_3",
|
||||
template: "simple_snippet",
|
||||
content: {
|
||||
title: "Did you know?",
|
||||
body: "All human beings are born free and equal in dignity and rights. They are endowed with reason and conscience and should act towards one another in a spirit of brotherhood."
|
||||
}
|
||||
}
|
||||
];
|
||||
|
||||
/**
|
||||
* getRandomItemFromArray
|
||||
*
|
||||
* @param {Array} arr An array of items
|
||||
* @returns one of the items in the array
|
||||
*/
|
||||
function getRandomItemFromArray(arr) {
|
||||
const index = Math.floor(Math.random() * arr.length);
|
||||
return arr[index];
|
||||
}
|
||||
|
||||
/**
|
||||
* @class _MessageCenterRouter - Keeps track of all messages, UI surfaces, and
|
||||
* handles blocking, rotation, etc. Inspecting MessageCenter.state will
|
||||
* tell you what the current displayed message is in all UI surfaces.
|
||||
*
|
||||
* Note: This is written as a constructor rather than just a plain object
|
||||
* so that it can be more easily unit tested.
|
||||
*/
|
||||
class _MessageCenterRouter {
|
||||
constructor(initialState = {}) {
|
||||
this.initialized = false;
|
||||
this.messageChannel = null;
|
||||
this._state = Object.assign({
|
||||
currentId: null,
|
||||
blockList: {},
|
||||
messages: {}
|
||||
}, initialState);
|
||||
this.onMessage = this.onMessage.bind(this);
|
||||
}
|
||||
|
||||
get state() {
|
||||
return this._state;
|
||||
}
|
||||
|
||||
set state(value) {
|
||||
throw new Error("Do not modify this.state directy. Instead, call this.setState(newState)");
|
||||
}
|
||||
|
||||
/**
|
||||
* init - Initializes the MessageRouter.
|
||||
* It is ready when it has been connected to a RemotePageManager instance.
|
||||
*
|
||||
* @param {RemotePageManager} channel a RemotePageManager instance
|
||||
* @memberof _MessageCenterRouter
|
||||
*/
|
||||
init(channel) {
|
||||
this.messageChannel = channel;
|
||||
this.messageChannel.addMessageListener(INCOMING_MESSAGE_NAME, this.onMessage);
|
||||
this.initialized = true;
|
||||
}
|
||||
|
||||
uninit() {
|
||||
this.messageChannel.sendAsyncMessage(OUTGOING_MESSAGE_NAME, {type: "CLEAR_MESSAGE"});
|
||||
this.messageChannel.removeMessageListener(INCOMING_MESSAGE_NAME, this.onMessage);
|
||||
this.messageChannel = null;
|
||||
this.initialized = false;
|
||||
}
|
||||
|
||||
setState(callbackOrObj) {
|
||||
const newState = (typeof callbackOrObj === "function") ? callbackOrObj(this.state) : callbackOrObj;
|
||||
this._state = Object.assign({}, this.state, newState);
|
||||
return new Promise(resolve => {
|
||||
this._onStateChanged(this.state);
|
||||
resolve();
|
||||
});
|
||||
}
|
||||
|
||||
_onStateChanged(state) {
|
||||
this.messageChannel.sendAsyncMessage(OUTGOING_MESSAGE_NAME, {type: "ADMIN_SET_STATE", data: state});
|
||||
}
|
||||
|
||||
async sendNextMessage(target, id) {
|
||||
let message;
|
||||
await this.setState(state => {
|
||||
message = getRandomItemFromArray(state.messages.filter(item => item.id !== state.currentId && !state.blockList[item.id]));
|
||||
return {currentId: message ? message.id : null};
|
||||
});
|
||||
if (message) {
|
||||
target.sendAsyncMessage(OUTGOING_MESSAGE_NAME, {type: "SET_MESSAGE", data: message});
|
||||
} else {
|
||||
target.sendAsyncMessage(OUTGOING_MESSAGE_NAME, {type: "CLEAR_MESSAGE"});
|
||||
}
|
||||
}
|
||||
|
||||
async clearMessage(target, id) {
|
||||
if (this.state.currentId === id) {
|
||||
await this.setState({currentId: null});
|
||||
}
|
||||
target.sendAsyncMessage(OUTGOING_MESSAGE_NAME, {type: "CLEAR_MESSAGE"});
|
||||
}
|
||||
|
||||
async onMessage({data: action, target}) {
|
||||
switch (action.type) {
|
||||
case "CONNECT_UI_REQUEST":
|
||||
case "GET_NEXT_MESSAGE":
|
||||
await this.sendNextMessage(target);
|
||||
break;
|
||||
case "BLOCK_MESSAGE_BY_ID":
|
||||
await this.setState(state => {
|
||||
const newState = Object.assign({}, state.blockList);
|
||||
newState[action.data.id] = true;
|
||||
return {blockList: newState};
|
||||
});
|
||||
await this.clearMessage(target, action.data.id);
|
||||
break;
|
||||
case "UNBLOCK_MESSAGE_BY_ID":
|
||||
await this.setState(state => {
|
||||
const newState = Object.assign({}, state.blockList);
|
||||
delete newState[action.data.id];
|
||||
return {blockList: newState};
|
||||
});
|
||||
break;
|
||||
case "ADMIN_CONNECT_STATE":
|
||||
target.sendAsyncMessage(OUTGOING_MESSAGE_NAME, {type: "ADMIN_SET_STATE", data: this.state});
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
this._MessageCenterRouter = _MessageCenterRouter;
|
||||
|
||||
/**
|
||||
* MessageCenterRouter - singleton instance of _MessageCenterRouter that controls all messages
|
||||
* in the new tab page.
|
||||
*/
|
||||
this.MessageCenterRouter = new _MessageCenterRouter({messages: FAKE_MESSAGES});
|
||||
|
||||
const EXPORTED_SYMBOLS = ["_MessageCenterRouter", "MessageCenterRouter"];
|
|
@ -14,6 +14,7 @@ ChromeUtils.defineModuleGetter(this, "PlacesUtils",
|
|||
"resource://gre/modules/PlacesUtils.jsm");
|
||||
|
||||
const LINK_BLOCKED_EVENT = "newtab-linkBlocked";
|
||||
const PLACES_LINKS_CHANGED_DELAY_TIME = 1000; // time in ms to delay timer for places links changed events
|
||||
|
||||
/**
|
||||
* Observer - a wrapper around history/bookmark observers to add the QueryInterface.
|
||||
|
@ -39,24 +40,12 @@ class HistoryObserver extends Observer {
|
|||
* @param {obj} uri A URI object representing the link's url
|
||||
* {str} uri.spec The URI as a string
|
||||
*/
|
||||
async onDeleteURI(uri) {
|
||||
// Add to an existing array of links if we haven't dispatched yet
|
||||
const {spec} = uri;
|
||||
if (this._deletedLinks) {
|
||||
this._deletedLinks.push(spec);
|
||||
} else {
|
||||
// Store an array of synchronously deleted links
|
||||
this._deletedLinks = [spec];
|
||||
|
||||
// Only dispatch a single action when we've gotten all deleted urls
|
||||
await Promise.resolve().then(() => {
|
||||
this.dispatch({
|
||||
type: at.PLACES_LINKS_DELETED,
|
||||
data: this._deletedLinks
|
||||
});
|
||||
delete this._deletedLinks;
|
||||
});
|
||||
}
|
||||
onDeleteURI(uri) {
|
||||
this.dispatch({type: at.PLACES_LINKS_CHANGED});
|
||||
this.dispatch({
|
||||
type: at.PLACES_LINK_DELETED,
|
||||
data: {url: uri.spec}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -120,6 +109,8 @@ class BookmarksObserver extends Observer {
|
|||
(uri.scheme !== "http" && uri.scheme !== "https")) {
|
||||
return;
|
||||
}
|
||||
|
||||
this.dispatch({type: at.PLACES_LINKS_CHANGED});
|
||||
this.dispatch({
|
||||
type: at.PLACES_BOOKMARK_ADDED,
|
||||
data: {
|
||||
|
@ -148,6 +139,7 @@ class BookmarksObserver extends Observer {
|
|||
source !== PlacesUtils.bookmarks.SOURCES.RESTORE &&
|
||||
source !== PlacesUtils.bookmarks.SOURCES.RESTORE_ON_STARTUP &&
|
||||
source !== PlacesUtils.bookmarks.SOURCES.SYNC) {
|
||||
this.dispatch({type: at.PLACES_LINKS_CHANGED});
|
||||
this.dispatch({
|
||||
type: at.PLACES_BOOKMARK_REMOVED,
|
||||
data: {url: uri.spec, bookmarkGuid: guid}
|
||||
|
@ -171,8 +163,10 @@ class BookmarksObserver extends Observer {
|
|||
|
||||
class PlacesFeed {
|
||||
constructor() {
|
||||
this.historyObserver = new HistoryObserver(action => this.store.dispatch(ac.BroadcastToContent(action)));
|
||||
this.bookmarksObserver = new BookmarksObserver(action => this.store.dispatch(ac.BroadcastToContent(action)));
|
||||
this.placesChangedTimer = null;
|
||||
this.customDispatch = this.customDispatch.bind(this);
|
||||
this.historyObserver = new HistoryObserver(this.customDispatch);
|
||||
this.bookmarksObserver = new BookmarksObserver(this.customDispatch);
|
||||
}
|
||||
|
||||
addObservers() {
|
||||
|
@ -187,7 +181,40 @@ class PlacesFeed {
|
|||
Services.obs.addObserver(this, LINK_BLOCKED_EVENT);
|
||||
}
|
||||
|
||||
/**
|
||||
* setTimeout - A custom function that creates an nsITimer that can be cancelled
|
||||
*
|
||||
* @param {func} callback A function to be executed after the timer expires
|
||||
* @param {int} delay The time (in ms) the timer should wait before the function is executed
|
||||
*/
|
||||
setTimeout(callback, delay) {
|
||||
let timer = Cc["@mozilla.org/timer;1"].createInstance(Ci.nsITimer);
|
||||
timer.initWithCallback(callback, delay, Ci.nsITimer.TYPE_ONE_SHOT);
|
||||
return timer;
|
||||
}
|
||||
|
||||
customDispatch(action) {
|
||||
// If we are changing many links at once, delay this action and only dispatch
|
||||
// one action at the end
|
||||
if (action.type === at.PLACES_LINKS_CHANGED) {
|
||||
if (this.placesChangedTimer) {
|
||||
this.placesChangedTimer.delay = PLACES_LINKS_CHANGED_DELAY_TIME;
|
||||
} else {
|
||||
this.placesChangedTimer = this.setTimeout(() => {
|
||||
this.placesChangedTimer = null;
|
||||
this.store.dispatch(ac.OnlyToMain(action));
|
||||
}, PLACES_LINKS_CHANGED_DELAY_TIME);
|
||||
}
|
||||
} else {
|
||||
this.store.dispatch(ac.BroadcastToContent(action));
|
||||
}
|
||||
}
|
||||
|
||||
removeObservers() {
|
||||
if (this.placesChangedTimer) {
|
||||
this.placesChangedTimer.cancel();
|
||||
this.placesChangedTimer = null;
|
||||
}
|
||||
PlacesUtils.history.removeObserver(this.historyObserver);
|
||||
PlacesUtils.bookmarks.removeObserver(this.bookmarksObserver);
|
||||
Services.obs.removeObserver(this, LINK_BLOCKED_EVENT);
|
||||
|
|
|
@ -3,9 +3,11 @@
|
|||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
"use strict";
|
||||
|
||||
const {ActivityStreamStorage} = ChromeUtils.import("resource://activity-stream/lib/ActivityStreamStorage.jsm", {});
|
||||
const {actionCreators: ac, actionTypes: at} = ChromeUtils.import("resource://activity-stream/common/Actions.jsm", {});
|
||||
const {Prefs} = ChromeUtils.import("resource://activity-stream/lib/ActivityStreamPrefs.jsm", {});
|
||||
const {PrerenderData} = ChromeUtils.import("resource://activity-stream/common/PrerenderData.jsm", {});
|
||||
const {INITIAL_STATE} = ChromeUtils.import("resource://activity-stream/common/Reducers.jsm", {});
|
||||
ChromeUtils.import("resource://gre/modules/Services.jsm");
|
||||
|
||||
ChromeUtils.defineModuleGetter(this, "PrivateBrowsingUtils",
|
||||
|
@ -13,16 +15,31 @@ ChromeUtils.defineModuleGetter(this, "PrivateBrowsingUtils",
|
|||
|
||||
const ONBOARDING_FINISHED_PREF = "browser.onboarding.notification.finished";
|
||||
|
||||
// List of prefs that require migration to indexedDB.
|
||||
// Object key is the name of the pref in indexedDB, each will contain a
|
||||
// map (key: name of preference to migrate, value: name of component).
|
||||
const PREF_MIGRATION = {
|
||||
collapsed: new Map([
|
||||
["collapseTopSites", "topsites"],
|
||||
["section.highlights.collapsed", "highlights"],
|
||||
["section.topstories.collapsed", "topstories"]
|
||||
])
|
||||
};
|
||||
|
||||
this.PrefsFeed = class PrefsFeed {
|
||||
constructor(prefMap) {
|
||||
this._prefMap = prefMap;
|
||||
this._prefs = new Prefs();
|
||||
this._storage = new ActivityStreamStorage("sectionPrefs");
|
||||
}
|
||||
|
||||
// If the any prefs are set to something other than what the prerendered version
|
||||
// of AS expects, we can't use it.
|
||||
_setPrerenderPref(name) {
|
||||
this._prefs.set("prerender", PrerenderData.arePrefsValid(pref => this._prefs.get(pref)));
|
||||
// If any prefs or the theme are set to something other than what the
|
||||
// prerendered version of AS expects, we can't use it.
|
||||
async _setPrerenderPref(theme) {
|
||||
const indexedDBPrefs = await this._storage.getAll();
|
||||
const prefsAreValid = PrerenderData.arePrefsValid(pref => this._prefs.get(pref), indexedDBPrefs);
|
||||
const themeIsDefault = (theme || this.store.getState().Theme).className === INITIAL_STATE.Theme.className;
|
||||
this._prefs.set("prerender", prefsAreValid && themeIsDefault);
|
||||
}
|
||||
|
||||
_checkPrerender(name) {
|
||||
|
@ -57,6 +74,20 @@ this.PrefsFeed = class PrefsFeed {
|
|||
}
|
||||
}
|
||||
|
||||
_migratePrefs() {
|
||||
for (const indexedDBPref of Object.keys(PREF_MIGRATION)) {
|
||||
for (const migratePref of PREF_MIGRATION[indexedDBPref].keys()) {
|
||||
// Check if pref exists (if the user changed the default)
|
||||
if (this._prefs.get(migratePref, null) === true) {
|
||||
const data = {id: PREF_MIGRATION[indexedDBPref].get(migratePref), value: {}};
|
||||
data.value[indexedDBPref] = true;
|
||||
this.store.dispatch(ac.OnlyToMain({type: at.UPDATE_SECTION_PREFS, data}));
|
||||
this._prefs.reset(migratePref);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
init() {
|
||||
this._prefs.observeBranch(this);
|
||||
|
||||
|
@ -72,6 +103,7 @@ this.PrefsFeed = class PrefsFeed {
|
|||
// Set the initial state of all prefs in redux
|
||||
this.store.dispatch(ac.BroadcastToContent({type: at.PREFS_INITIAL_VALUES, data: values}));
|
||||
|
||||
this._migratePrefs();
|
||||
this._setPrerenderPref();
|
||||
this._initOnboardingPref();
|
||||
}
|
||||
|
@ -80,6 +112,12 @@ this.PrefsFeed = class PrefsFeed {
|
|||
this._prefs.ignoreBranch(this);
|
||||
}
|
||||
|
||||
async _setIndexedDBPref(id, value) {
|
||||
const name = id === "topsites" ? id : `feeds.section.${id}`;
|
||||
await this._storage.set(name, value);
|
||||
this._setPrerenderPref();
|
||||
}
|
||||
|
||||
onAction(action) {
|
||||
switch (action.type) {
|
||||
case at.INIT:
|
||||
|
@ -92,9 +130,15 @@ this.PrefsFeed = class PrefsFeed {
|
|||
case at.SET_PREF:
|
||||
this._prefs.set(action.data.name, action.data.value);
|
||||
break;
|
||||
case at.THEME_UPDATE:
|
||||
this._setPrerenderPref(action.data);
|
||||
break;
|
||||
case at.DISABLE_ONBOARDING:
|
||||
this.setOnboardingDisabledDefault(true);
|
||||
break;
|
||||
case at.UPDATE_SECTION_PREFS:
|
||||
this._setIndexedDBPref(action.data.id, action.data.value);
|
||||
break;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
|
|
@ -7,6 +7,7 @@ ChromeUtils.import("resource://gre/modules/EventEmitter.jsm");
|
|||
ChromeUtils.import("resource://gre/modules/Services.jsm");
|
||||
ChromeUtils.import("resource://gre/modules/XPCOMUtils.jsm");
|
||||
const {actionCreators: ac, actionTypes: at} = ChromeUtils.import("resource://activity-stream/common/Actions.jsm", {});
|
||||
const {ActivityStreamStorage, getDefaultOptions} = ChromeUtils.import("resource://activity-stream/lib/ActivityStreamStorage.jsm", {});
|
||||
|
||||
ChromeUtils.defineModuleGetter(this, "PlacesUtils", "resource://gre/modules/PlacesUtils.jsm");
|
||||
|
||||
|
@ -20,7 +21,7 @@ const BUILT_IN_SECTIONS = {
|
|||
id: "topstories",
|
||||
pref: {
|
||||
titleString: {id: "header_recommended_by", values: {provider: options.provider_name}},
|
||||
descString: {id: options.provider_description || "prefs_topstories_description"},
|
||||
descString: {id: "prefs_topstories_description2"},
|
||||
nestedPrefs: options.show_spocs ? [{
|
||||
name: "showSponsored",
|
||||
titleString: {id: "prefs_topstories_show_sponsored_label", values: {provider: options.provider_name}},
|
||||
|
@ -32,15 +33,14 @@ const BUILT_IN_SECTIONS = {
|
|||
icon: options.provider_icon,
|
||||
title: {id: "header_recommended_by", values: {provider: options.provider_name}},
|
||||
disclaimer: {
|
||||
text: {id: options.disclaimer_text || "section_disclaimer_topstories"},
|
||||
text: {id: "section_disclaimer_topstories"},
|
||||
link: {
|
||||
// The href fallback is temporary so users in existing Shield studies get this configuration as well
|
||||
href: options.disclaimer_link || "https://getpocket.cdn.mozilla.net/firefox/new_tab_learn_more",
|
||||
id: options.disclaimer_linktext || "section_disclaimer_topstories_linktext"
|
||||
href: "https://getpocket.com/firefox/new_tab_learn_more",
|
||||
id: "section_disclaimer_topstories_linktext"
|
||||
},
|
||||
button: {id: options.disclaimer_buttontext || "section_disclaimer_topstories_buttontext"}
|
||||
button: {id: "section_disclaimer_topstories_buttontext"}
|
||||
},
|
||||
privacyNoticeURL: options.privacy_notice_link || "https://www.mozilla.org/privacy/firefox/#suggest-relevant-content",
|
||||
privacyNoticeURL: "https://www.mozilla.org/privacy/firefox/#suggest-relevant-content",
|
||||
maxRows: 1,
|
||||
availableLinkMenuOptions: ["CheckBookmarkOrArchive", "CheckSavedToPocket", "Separator", "OpenInNewWindow", "OpenInPrivateWindow", "Separator", "BlockUrl"],
|
||||
emptyState: {
|
||||
|
@ -79,10 +79,12 @@ const SectionsManager = {
|
|||
},
|
||||
initialized: false,
|
||||
sections: new Map(),
|
||||
init(prefs = {}) {
|
||||
async init(prefs = {}) {
|
||||
this._storage = new ActivityStreamStorage("sectionPrefs");
|
||||
|
||||
for (const feedPrefName of Object.keys(BUILT_IN_SECTIONS)) {
|
||||
const optionsPrefName = `${feedPrefName}.options`;
|
||||
this.addBuiltInSection(feedPrefName, prefs[optionsPrefName]);
|
||||
await this.addBuiltInSection(feedPrefName, prefs[optionsPrefName]);
|
||||
|
||||
this._dedupeConfiguration = [];
|
||||
this.sections.forEach(section => {
|
||||
|
@ -112,7 +114,16 @@ const SectionsManager = {
|
|||
break;
|
||||
}
|
||||
},
|
||||
addBuiltInSection(feedPrefName, optionsPrefValue = "{}") {
|
||||
updateSectionPrefs(id, collapsed) {
|
||||
const section = this.sections.get(id);
|
||||
if (!section) {
|
||||
return;
|
||||
}
|
||||
|
||||
const updatedSection = Object.assign({}, section, {pref: Object.assign({}, section.pref, collapsed)});
|
||||
this.updateSection(id, updatedSection, true);
|
||||
},
|
||||
async addBuiltInSection(feedPrefName, optionsPrefValue = "{}") {
|
||||
let options;
|
||||
try {
|
||||
options = JSON.parse(optionsPrefValue);
|
||||
|
@ -120,7 +131,9 @@ const SectionsManager = {
|
|||
options = {};
|
||||
Cu.reportError(`Problem parsing options pref for ${feedPrefName}`);
|
||||
}
|
||||
const section = BUILT_IN_SECTIONS[feedPrefName](options);
|
||||
const storedPrefs = await this._storage.get(feedPrefName) || {};
|
||||
const defaultSection = BUILT_IN_SECTIONS[feedPrefName](options);
|
||||
const section = Object.assign({}, defaultSection, {pref: Object.assign({}, defaultSection.pref, getDefaultOptions(storedPrefs))});
|
||||
section.pref.feed = feedPrefName;
|
||||
this.addSection(section.id, Object.assign(section, {options}));
|
||||
},
|
||||
|
@ -404,6 +417,9 @@ class SectionsFeed {
|
|||
}
|
||||
break;
|
||||
}
|
||||
case at.UPDATE_SECTION_PREFS:
|
||||
SectionsManager.updateSectionPrefs(action.data.id, action.data.value);
|
||||
break;
|
||||
case at.PLACES_BOOKMARK_ADDED:
|
||||
SectionsManager.updateBookmarkMetadata(action.data);
|
||||
break;
|
||||
|
|
|
@ -169,14 +169,13 @@ this.SnippetsFeed = class SnippetsFeed {
|
|||
}
|
||||
|
||||
async init() {
|
||||
await this._storage.init();
|
||||
Services.obs.addObserver(this, SEARCH_ENGINE_OBSERVER_TOPIC);
|
||||
this._previousSessionEnd = await this._storage.get("previousSessionEnd");
|
||||
await this._refresh();
|
||||
Services.prefs.addObserver(ONBOARDING_FINISHED_PREF, this._refresh);
|
||||
Services.prefs.addObserver(SNIPPETS_URL_PREF, this._refresh);
|
||||
Services.prefs.addObserver(TELEMETRY_PREF, this._refresh);
|
||||
Services.prefs.addObserver(FXA_USERNAME_PREF, this._refresh);
|
||||
Services.obs.addObserver(this, SEARCH_ENGINE_OBSERVER_TOPIC);
|
||||
}
|
||||
|
||||
uninit() {
|
||||
|
|
|
@ -0,0 +1,66 @@
|
|||
/* 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/. */
|
||||
"use strict";
|
||||
|
||||
ChromeUtils.import("resource://gre/modules/LightweightThemeManager.jsm");
|
||||
ChromeUtils.import("resource://gre/modules/Services.jsm");
|
||||
|
||||
const {actionCreators: ac, actionTypes: at} = ChromeUtils.import("resource://activity-stream/common/Actions.jsm", {});
|
||||
|
||||
const THEME_UPDATE_EVENT = "lightweight-theme-styling-update";
|
||||
|
||||
this.ThemeFeed = class ThemeFeed {
|
||||
init() {
|
||||
Services.obs.addObserver(this, THEME_UPDATE_EVENT);
|
||||
this.updateTheme(LightweightThemeManager.currentThemeForDisplay);
|
||||
}
|
||||
|
||||
uninit() {
|
||||
Services.obs.removeObserver(this, THEME_UPDATE_EVENT);
|
||||
}
|
||||
|
||||
observe(subject, topic, data) {
|
||||
if (topic === THEME_UPDATE_EVENT) {
|
||||
this.updateTheme(JSON.parse(data));
|
||||
}
|
||||
}
|
||||
|
||||
_parseRGB(colorString) {
|
||||
let rgb = colorString.match(/^rgba?\((\d+), (\d+), (\d+)/);
|
||||
rgb.shift();
|
||||
return rgb.map(x => parseInt(x, 10));
|
||||
}
|
||||
|
||||
updateTheme(data) {
|
||||
if (data && data.window) {
|
||||
// We only update newtab theme if the theme activated isn't window specific.
|
||||
// We'll be able to do better in the future: see Bug 1444459
|
||||
return;
|
||||
}
|
||||
|
||||
// Jump through some hoops to check if the current theme has light or dark
|
||||
// text. If light, then we enable our dark (background) theme.
|
||||
const textcolor = (data && data.textcolor) || "black";
|
||||
const window = Services.wm.getMostRecentWindow("navigator:browser");
|
||||
const dummy = window.document.createElement("dummy");
|
||||
dummy.style.color = textcolor;
|
||||
const [r, g, b] = this._parseRGB(window.getComputedStyle(dummy).color);
|
||||
const luminance = 0.2125 * r + 0.7154 * g + 0.0721 * b;
|
||||
const className = (luminance <= 110) ? "" : "dark-theme";
|
||||
this.store.dispatch(ac.BroadcastToContent({type: at.THEME_UPDATE, data: {className}}));
|
||||
}
|
||||
|
||||
onAction(action) {
|
||||
switch (action.type) {
|
||||
case at.INIT:
|
||||
this.init();
|
||||
break;
|
||||
case at.UNINIT:
|
||||
this.uninit();
|
||||
break;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
const EXPORTED_SYMBOLS = ["ThemeFeed", "THEME_UPDATE_EVENT"];
|
|
@ -10,6 +10,7 @@ const {TippyTopProvider} = ChromeUtils.import("resource://activity-stream/lib/Ti
|
|||
const {insertPinned, TOP_SITES_MAX_SITES_PER_ROW} = ChromeUtils.import("resource://activity-stream/common/Reducers.jsm", {});
|
||||
const {Dedupe} = ChromeUtils.import("resource://activity-stream/common/Dedupe.jsm", {});
|
||||
const {shortURL} = ChromeUtils.import("resource://activity-stream/lib/ShortURL.jsm", {});
|
||||
const {ActivityStreamStorage, getDefaultOptions} = ChromeUtils.import("resource://activity-stream/lib/ActivityStreamStorage.jsm", {});
|
||||
|
||||
ChromeUtils.defineModuleGetter(this, "filterAdult",
|
||||
"resource://activity-stream/lib/FilterAdult.jsm");
|
||||
|
@ -28,6 +29,7 @@ const FRECENCY_THRESHOLD = 100 + 1; // 1 visit (skip first-run/one-time pages)
|
|||
const MIN_FAVICON_SIZE = 96;
|
||||
const CACHED_LINK_PROPS_TO_MIGRATE = ["screenshot", "customScreenshot"];
|
||||
const PINNED_FAVICON_PROPS_TO_MIGRATE = ["favicon", "faviconRef", "faviconSize"];
|
||||
const SECTION_ID = "topsites";
|
||||
|
||||
this.TopSitesFeed = class TopSitesFeed {
|
||||
constructor() {
|
||||
|
@ -40,6 +42,7 @@ this.TopSitesFeed = class TopSitesFeed {
|
|||
this.pinnedCache = new LinksCache(NewTabUtils.pinnedLinks, "links",
|
||||
[...CACHED_LINK_PROPS_TO_MIGRATE, ...PINNED_FAVICON_PROPS_TO_MIGRATE]);
|
||||
PageThumbs.addExpirationFilter(this);
|
||||
this._storage = new ActivityStreamStorage("sectionPrefs");
|
||||
}
|
||||
|
||||
uninit() {
|
||||
|
@ -78,7 +81,7 @@ this.TopSitesFeed = class TopSitesFeed {
|
|||
}, []));
|
||||
}
|
||||
|
||||
async getLinksWithDefaults(action) {
|
||||
async getLinksWithDefaults() {
|
||||
// Get at least 2 rows so toggling between 1 and 2 rows has sites
|
||||
const numItems = Math.max(this.store.getState().Prefs.values.topSitesRows, 2) * TOP_SITES_MAX_SITES_PER_ROW;
|
||||
const frecent = (await this.frecentCache.request({
|
||||
|
@ -100,9 +103,14 @@ this.TopSitesFeed = class TopSitesFeed {
|
|||
// Copy all properties from a frecent link and add more
|
||||
const finder = other => other.url === link.url;
|
||||
|
||||
// Remove frecent link's screenshot if pinned link has a custom one
|
||||
const frecentSite = frecent.find(finder);
|
||||
if (frecentSite && link.customScreenshotURL) {
|
||||
delete frecentSite.screenshot;
|
||||
}
|
||||
// If the link is a frecent site, do not copy over 'isDefault', else check
|
||||
// if the site is a default site
|
||||
const copy = Object.assign({}, frecent.find(finder) ||
|
||||
const copy = Object.assign({}, frecentSite ||
|
||||
{isDefault: !!notBlockedDefaultSites.find(finder)}, link, {hostname: shortURL(link)});
|
||||
|
||||
// Add in favicons if we don't already have it
|
||||
|
@ -162,7 +170,11 @@ this.TopSitesFeed = class TopSitesFeed {
|
|||
}
|
||||
|
||||
const links = await this.getLinksWithDefaults();
|
||||
const newAction = {type: at.TOP_SITES_UPDATED, data: links};
|
||||
const newAction = {type: at.TOP_SITES_UPDATED, data: {links}};
|
||||
|
||||
const storedPrefs = await this._storage.get(SECTION_ID) || {};
|
||||
newAction.data.pref = getDefaultOptions(storedPrefs);
|
||||
|
||||
if (options.broadcast) {
|
||||
// Broadcast an update to all open content pages
|
||||
this.store.dispatch(ac.BroadcastToContent(newAction));
|
||||
|
@ -230,6 +242,10 @@ this.TopSitesFeed = class TopSitesFeed {
|
|||
});
|
||||
}
|
||||
|
||||
updateSectionPrefs(collapsed) {
|
||||
this.store.dispatch(ac.BroadcastToContent({type: at.TOP_SITES_PREFS_UPDATED, data: {pref: collapsed}}));
|
||||
}
|
||||
|
||||
/**
|
||||
* Inform others that top sites data has been updated due to pinned changes.
|
||||
*/
|
||||
|
@ -366,10 +382,13 @@ this.TopSitesFeed = class TopSitesFeed {
|
|||
// All these actions mean we need new top sites
|
||||
case at.MIGRATION_COMPLETED:
|
||||
case at.PLACES_HISTORY_CLEARED:
|
||||
case at.PLACES_LINKS_DELETED:
|
||||
this.frecentCache.expire();
|
||||
this.refresh({broadcast: true});
|
||||
break;
|
||||
case at.PLACES_LINKS_CHANGED:
|
||||
this.frecentCache.expire();
|
||||
this.refresh({broadcast: false});
|
||||
break;
|
||||
case at.PLACES_LINK_BLOCKED:
|
||||
this.frecentCache.expire();
|
||||
this.pinnedCache.expire();
|
||||
|
@ -380,6 +399,11 @@ this.TopSitesFeed = class TopSitesFeed {
|
|||
this.refreshDefaults(action.data.value);
|
||||
}
|
||||
break;
|
||||
case at.UPDATE_SECTION_PREFS:
|
||||
if (action.data.id === SECTION_ID) {
|
||||
this.updateSectionPrefs(action.data.value);
|
||||
}
|
||||
break;
|
||||
case at.PREFS_INITIAL_VALUES:
|
||||
this.refreshDefaults(action.data[DEFAULT_SITES_PREF]);
|
||||
break;
|
||||
|
|
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
|
@ -9,7 +9,7 @@ window.gActivityStreamStrings = {
|
|||
"type_label_visited": "Kilimo",
|
||||
"type_label_bookmarked": "Kiketo alamabuk",
|
||||
"type_label_recommended": "Ma cuke lamal",
|
||||
"type_label_pocket": "Saved to Pocket",
|
||||
"type_label_pocket": "Kigwoko i Pocket",
|
||||
"menu_action_bookmark": "Alamabuk",
|
||||
"menu_action_remove_bookmark": "Kwany alamabuk",
|
||||
"menu_action_open_new_window": "Yab i dirica manyen",
|
||||
|
@ -21,25 +21,25 @@ window.gActivityStreamStrings = {
|
|||
"confirm_history_delete_p1": "Imoko ni imito kwanyo nyig jami weng me potbuk man ki i gin mukato mamegi?",
|
||||
"confirm_history_delete_notice_p2": "Pe ki twero gonyo tic man.",
|
||||
"menu_action_save_to_pocket": "Gwoki i jaba",
|
||||
"menu_action_delete_pocket": "Delete from Pocket",
|
||||
"menu_action_archive_pocket": "Archive in Pocket",
|
||||
"menu_action_delete_pocket": "Kwany ki ii Pocket",
|
||||
"menu_action_archive_pocket": "Kan i Pocket",
|
||||
"search_button": "Yeny",
|
||||
"search_header": "Yeny me {search_engine_name}",
|
||||
"search_web_placeholder": "Yeny kakube",
|
||||
"section_disclaimer_topstories": "Lok ma mit loyo i kakube, ki yero malube ki ngo ma ikwano. Ki ii Pocket, kombedi dong but Mozilla.",
|
||||
"section_disclaimer_topstories_linktext": "Nong ngec kit ma tyo kwede.",
|
||||
"section_disclaimer_topstories_buttontext": "Eyo, aniang",
|
||||
"prefs_home_header": "Firefox Home Content",
|
||||
"prefs_home_description": "Choose what content you want on your Firefox Home screen.",
|
||||
"prefs_restore_defaults_button": "Restore Defaults",
|
||||
"prefs_home_header": "Jami me Acakki Firefox",
|
||||
"prefs_home_description": "Yer jami ma imito ii kio me Acakki Firefox.",
|
||||
"prefs_restore_defaults_button": "Dwok makwongo",
|
||||
"prefs_section_rows_option": "{num} row;{num} rows",
|
||||
"prefs_search_header": "Web Search",
|
||||
"prefs_topsites_description": "The sites you visit most",
|
||||
"prefs_topstories_description": "High-quality content you might otherwise miss",
|
||||
"prefs_search_header": "Yeny me kakube",
|
||||
"prefs_topsites_description": "Kakube ma ilimo loyo",
|
||||
"prefs_topstories_description2": "Great content from around the web, personalized for you",
|
||||
"prefs_topstories_show_sponsored_label": "{provider} Sponsored Stories",
|
||||
"prefs_topstories_sponsored_learn_more": "Learn more",
|
||||
"prefs_highlights_description": "A selection of sites that you’ve saved or visited",
|
||||
"prefs_snippets_description": "Updates from Mozilla and Firefox",
|
||||
"prefs_topstories_sponsored_learn_more": "Nong ngec mapol",
|
||||
"prefs_highlights_description": "Yer me kakube ma igwoko nyo ilimo",
|
||||
"prefs_snippets_description": "Ngec manyen ki bot Mozilla ki Firefox",
|
||||
"settings_pane_button_label": "Yub potbuk me dirica matidi mamegi manyen",
|
||||
"settings_pane_header": "Ter me dirica matidi manyen",
|
||||
"settings_pane_body2": "Yer ngo ma i neno i potbuk man.",
|
||||
|
@ -60,18 +60,18 @@ window.gActivityStreamStrings = {
|
|||
"edit_topsites_edit_button": "Yub kakube man",
|
||||
"topsites_form_add_header": "Kakube maloyo manyen",
|
||||
"topsites_form_edit_header": "Yub Kakube maloyo",
|
||||
"topsites_form_title_label": "Title",
|
||||
"topsites_form_title_label": "Wiye madit",
|
||||
"topsites_form_title_placeholder": "Ket wiye",
|
||||
"topsites_form_url_label": "URL",
|
||||
"topsites_form_image_url_label": "Custom Image URL",
|
||||
"topsites_form_url_placeholder": "Coo onyo mwon URL",
|
||||
"topsites_form_use_image_link": "Use a custom image…",
|
||||
"topsites_form_preview_button": "Preview",
|
||||
"topsites_form_preview_button": "Nen",
|
||||
"topsites_form_add_button": "Medi",
|
||||
"topsites_form_save_button": "Gwoki",
|
||||
"topsites_form_cancel_button": "Kwer",
|
||||
"topsites_form_url_validation": "URL ma tye atir mite",
|
||||
"topsites_form_image_validation": "Image failed to load. Try a different URL.",
|
||||
"topsites_form_image_validation": "Cano cal pe olare. Tem URL mukene.",
|
||||
"pocket_read_more": "Lok macuk gi lamal:",
|
||||
"pocket_read_even_more": "Nen Lok mapol",
|
||||
"pocket_description": "Nong jami me rwom ma lamal ma itwero keng woko, ki kony ma aa ki bot Pocket, dong tye but Mozilla.",
|
||||
|
@ -80,52 +80,15 @@ window.gActivityStreamStrings = {
|
|||
"manual_migration_explanation2": "Tem Firefox ki alamabuk, gin mukato ki mung me donyo ki ii layeny mukene.",
|
||||
"manual_migration_cancel_button": "Pe Apwoyo",
|
||||
"manual_migration_import_button": "Kel kombedi",
|
||||
"error_fallback_default_info": "Oops, something went wrong loading this content.",
|
||||
"error_fallback_default_refresh_suggestion": "Refresh page to try again.",
|
||||
"section_menu_action_remove_section": "Remove Section",
|
||||
"section_menu_action_collapse_section": "Collapse Section",
|
||||
"section_menu_action_expand_section": "Expand Section",
|
||||
"section_menu_action_manage_section": "Manage Section",
|
||||
"section_menu_action_add_topsite": "Add Top Site",
|
||||
"section_menu_action_move_up": "Move Up",
|
||||
"section_menu_action_move_down": "Move Down",
|
||||
"section_menu_action_privacy_notice": "Privacy Notice",
|
||||
"default_label_loading": "Tye ka cano…",
|
||||
"header_stories": "Lok madito",
|
||||
"header_visit_again": "Lim doki",
|
||||
"header_bookmarks": "Alamabuk ma cok coki",
|
||||
"header_bookmarks_placeholder": "Pud i pee ki alamabuk.",
|
||||
"header_stories_from": "ki bot",
|
||||
"type_label_synced": "Kiribo ki i nyonyo mukene",
|
||||
"type_label_open": "Tye ayaba",
|
||||
"type_label_topic": "Lok",
|
||||
"type_label_now": "Kombedi",
|
||||
"menu_action_copy_address": "Lok kabedo",
|
||||
"menu_action_email_link": "Kakube me email…",
|
||||
"search_for_something_with": "Yeny pi {search_term} ki:",
|
||||
"search_settings": "Lok ter me yeny",
|
||||
"section_info_option": "Ngec",
|
||||
"section_info_send_feedback": "Cwal adwogi",
|
||||
"section_info_privacy_notice": "Ngec me mung",
|
||||
"welcome_title": "Wajoli i dirica matidi manyen",
|
||||
"welcome_body": "Firefox bi tic ki kabedo man me nyuto alamabukke mamegi, coc akwana, vidio, ki potbukke ma ilimo cokcoki ma pi gi tego loyo, wek i dok ii gi ma yot.",
|
||||
"welcome_label": "Tye ka kube ki wiye madito mamegi",
|
||||
"time_label_less_than_minute": "<dakika1",
|
||||
"time_label_minute": "dakika{number}",
|
||||
"time_label_hour": "cawa{number}",
|
||||
"time_label_day": "nino{number}",
|
||||
"settings_pane_bookmarks_header": "Alamabuk ma cocoki",
|
||||
"settings_pane_bookmarks_body": "Alamabukke ni ma kicweyo manyen i kabedo acel macek.",
|
||||
"settings_pane_visit_again_header": "Lim Kidoco",
|
||||
"settings_pane_visit_again_body": "Firefox bi nyuti but gin mukato me yeny mamegi ma itwero mito me poo ikome onyo dok cen iyie.",
|
||||
"edit_topsites_button_label": "Yub bute pi kakubi ni ma giloyo",
|
||||
"edit_topsites_showmore_button": "Nyut mukene",
|
||||
"edit_topsites_showless_button": "Nyut manok",
|
||||
"edit_topsites_done_button": "Otum",
|
||||
"edit_topsites_pin_button": "Mwon kakube man",
|
||||
"edit_topsites_unpin_button": "War kakube man",
|
||||
"edit_topsites_dismiss_button": "Kwer kakube man",
|
||||
"edit_topsites_add_button": "Medi",
|
||||
"edit_topsites_add_button_tooltip": "Med Kakube maloyo",
|
||||
"pocket_feedback_header": "Kakube maber loyo, dano makato milion 25 aye oyubo."
|
||||
"error_fallback_default_info": "Aii, gin mo otime marac i cano jami man.",
|
||||
"error_fallback_default_refresh_suggestion": "Nwo cano potbuk me temo odoco.",
|
||||
"section_menu_action_remove_section": "Kwany bute",
|
||||
"section_menu_action_collapse_section": "Kan bute",
|
||||
"section_menu_action_expand_section": "Yar bute",
|
||||
"section_menu_action_manage_section": "Lo bute",
|
||||
"section_menu_action_add_topsite": "Med Kakube maloyo",
|
||||
"section_menu_action_move_up": "Kob Malo",
|
||||
"section_menu_action_move_down": "Kob Piny",
|
||||
"section_menu_action_privacy_notice": "Ngec me mung",
|
||||
"prefs_topstories_description": "Jami me rwom ma lamal ma itwero keng"
|
||||
};
|
||||
|
|
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
|
@ -29,17 +29,17 @@ window.gActivityStreamStrings = {
|
|||
"section_disclaimer_topstories": "Los articlos mas interesants d'o web, triaus en función d'o que gosas leyer. Gracias a lo Pocket, que agora ya fa parte de Mozilla.",
|
||||
"section_disclaimer_topstories_linktext": "Aprende cómo funciona",
|
||||
"section_disclaimer_topstories_buttontext": "Entendiu",
|
||||
"prefs_home_header": "Firefox Home Content",
|
||||
"prefs_home_description": "Choose what content you want on your Firefox Home screen.",
|
||||
"prefs_restore_defaults_button": "Restore Defaults",
|
||||
"prefs_section_rows_option": "{num} row;{num} rows",
|
||||
"prefs_search_header": "Web Search",
|
||||
"prefs_topsites_description": "The sites you visit most",
|
||||
"prefs_topstories_description": "High-quality content you might otherwise miss",
|
||||
"prefs_topstories_show_sponsored_label": "{provider} Sponsored Stories",
|
||||
"prefs_topstories_sponsored_learn_more": "Learn more",
|
||||
"prefs_highlights_description": "A selection of sites that you’ve saved or visited",
|
||||
"prefs_snippets_description": "Updates from Mozilla and Firefox",
|
||||
"prefs_home_header": "Conteniu d'inicio de Firefox",
|
||||
"prefs_home_description": "Tría qué contenisu quiers veyer en a tuya pachina d'inicio de Firefox.",
|
||||
"prefs_restore_defaults_button": "Restaurar valors per defecto",
|
||||
"prefs_section_rows_option": "{num} ringlera;{num} ringleras",
|
||||
"prefs_search_header": "Busqueda web",
|
||||
"prefs_topsites_description": "Los puestos que mas vesitas",
|
||||
"prefs_topstories_description2": "Great content from around the web, personalized for you",
|
||||
"prefs_topstories_show_sponsored_label": "Articlos patrocinaus per {provider}",
|
||||
"prefs_topstories_sponsored_learn_more": "Saber-ne mas",
|
||||
"prefs_highlights_description": "Una tría d'os puestos que has alzau u vesitau",
|
||||
"prefs_snippets_description": "Actualizacions de Mozilla y Firefox",
|
||||
"settings_pane_button_label": "Personaliza la tuya pachina de Nueva Pestanya",
|
||||
"settings_pane_header": "Preferencias de Nueva Pestanya",
|
||||
"settings_pane_body2": "Tría lo que veyes en esta pachina.",
|
||||
|
@ -63,15 +63,15 @@ window.gActivityStreamStrings = {
|
|||
"topsites_form_title_label": "Titol",
|
||||
"topsites_form_title_placeholder": "Escribir un titol",
|
||||
"topsites_form_url_label": "URL",
|
||||
"topsites_form_image_url_label": "Custom Image URL",
|
||||
"topsites_form_image_url_label": "URL d'imachen personalizada",
|
||||
"topsites_form_url_placeholder": "Triar u apegar una adreza web",
|
||||
"topsites_form_use_image_link": "Use a custom image…",
|
||||
"topsites_form_preview_button": "Preview",
|
||||
"topsites_form_use_image_link": "Usar una imachen personalizada…",
|
||||
"topsites_form_preview_button": "Previsualizar",
|
||||
"topsites_form_add_button": "Anyadir",
|
||||
"topsites_form_save_button": "Alzar",
|
||||
"topsites_form_cancel_button": "Cancelar",
|
||||
"topsites_form_url_validation": "Fa falta una URL valida",
|
||||
"topsites_form_image_validation": "Image failed to load. Try a different URL.",
|
||||
"topsites_form_image_validation": "Ha fallau la carga d'a imachen. Preba con una URL diferent.",
|
||||
"pocket_read_more": "Temas populars:",
|
||||
"pocket_read_even_more": "Amostrar mas articlos",
|
||||
"pocket_description": "Descubre gracias a Pocket, que dende agora fa parte de Mozilla, contenius d'alta calidat que d'atra manera te puetz perder.",
|
||||
|
@ -90,41 +90,5 @@ window.gActivityStreamStrings = {
|
|||
"section_menu_action_move_up": "Puyar",
|
||||
"section_menu_action_move_down": "Baixar",
|
||||
"section_menu_action_privacy_notice": "Nota sobre privacidat",
|
||||
"default_label_loading": "Se ye cargando…",
|
||||
"header_stories": "Articlos populars",
|
||||
"header_visit_again": "Tornar a vesitar",
|
||||
"header_bookmarks": "Marcapachinas recients",
|
||||
"header_bookmarks_placeholder": "No tiens encara marcapachinas.",
|
||||
"header_stories_from": "dende",
|
||||
"type_label_synced": "Sincronizau dende belatro dispositivo",
|
||||
"type_label_open": "Ubierto",
|
||||
"type_label_topic": "Tema",
|
||||
"type_label_now": "Agora",
|
||||
"menu_action_copy_address": "Copiar l'adreza",
|
||||
"menu_action_email_link": "Vinclo de correu-e…",
|
||||
"search_for_something_with": "Mirar {search_term} con:",
|
||||
"search_settings": "Cambiar achustes de busqueda",
|
||||
"section_info_option": "Info",
|
||||
"section_info_send_feedback": "Ninviar opinión",
|
||||
"section_info_privacy_notice": "Aviso de privvacidat",
|
||||
"welcome_title": "Bienveniu ta la nueva pestanya",
|
||||
"welcome_body": "Firefox fará servir este espacio pa amostrar-te los marcapachinas, articlos, videos y pachinas mas relevants que has vesitau en zaguers, pa que i puedas tornar facilment.",
|
||||
"welcome_label": "Identificando los tuyos puestos destacaus",
|
||||
"time_label_less_than_minute": "<1m",
|
||||
"time_label_minute": "{number}m",
|
||||
"time_label_hour": "{number}h",
|
||||
"time_label_day": "{number}d",
|
||||
"settings_pane_bookmarks_header": "Marcapachinas recients",
|
||||
"settings_pane_bookmarks_body": "Los marcapachinas que vas creando, a l'alcanz d'a man.",
|
||||
"settings_pane_visit_again_header": "Tornar a vesitar",
|
||||
"settings_pane_visit_again_body": "Firefox t'amostrará partes d'o tuyo historial de busqueda que podrías querer remerar u tornar enta ellas.",
|
||||
"edit_topsites_button_label": "Personaliza la tuya sección de Puestos mas vesitaus",
|
||||
"edit_topsites_showmore_button": "Amostrar-ne mas",
|
||||
"edit_topsites_showless_button": "Amostrar-ne menos",
|
||||
"edit_topsites_done_button": "Feito",
|
||||
"edit_topsites_pin_button": "Clava este puesto",
|
||||
"edit_topsites_unpin_button": "Desclava este puesto",
|
||||
"edit_topsites_dismiss_button": "Retira este puesto",
|
||||
"edit_topsites_add_button": "Anyadir",
|
||||
"pocket_feedback_header": "Lo millor d'o web, triau per mas de 25 millons de personas."
|
||||
"prefs_topstories_description": "Contenius d'alta calidat que no te quiers perder"
|
||||
};
|
||||
|
|
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
|
@ -35,7 +35,7 @@ window.gActivityStreamStrings = {
|
|||
"prefs_section_rows_option": "{num} row;{num} rows",
|
||||
"prefs_search_header": "Web Search",
|
||||
"prefs_topsites_description": "The sites you visit most",
|
||||
"prefs_topstories_description": "High-quality content you might otherwise miss",
|
||||
"prefs_topstories_description2": "Great content from around the web, personalized for you",
|
||||
"prefs_topstories_show_sponsored_label": "{provider} Sponsored Stories",
|
||||
"prefs_topstories_sponsored_learn_more": "Learn more",
|
||||
"prefs_highlights_description": "A selection of sites that you’ve saved or visited",
|
||||
|
|
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
|
@ -35,7 +35,7 @@ window.gActivityStreamStrings = {
|
|||
"prefs_section_rows_option": "{num} row;{num} rows",
|
||||
"prefs_search_header": "Web Search",
|
||||
"prefs_topsites_description": "The sites you visit most",
|
||||
"prefs_topstories_description": "High-quality content you might otherwise miss",
|
||||
"prefs_topstories_description2": "Great content from around the web, personalized for you",
|
||||
"prefs_topstories_show_sponsored_label": "{provider} Sponsored Stories",
|
||||
"prefs_topstories_sponsored_learn_more": "Learn more",
|
||||
"prefs_highlights_description": "A selection of sites that you’ve saved or visited",
|
||||
|
|
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
|
@ -35,7 +35,7 @@ window.gActivityStreamStrings = {
|
|||
"prefs_section_rows_option": "{num} sətir;{num} sətir",
|
||||
"prefs_search_header": "Web Axtarış",
|
||||
"prefs_topsites_description": "Ən çox ziyarət etdiyiniz saytlar",
|
||||
"prefs_topstories_description": "Qaçırda biləcəyiniz yüksək keyfiyyətli məzmun",
|
||||
"prefs_topstories_description2": "Great content from around the web, personalized for you",
|
||||
"prefs_topstories_show_sponsored_label": "{provider} Sponsorlu Hekayələr",
|
||||
"prefs_topstories_sponsored_learn_more": "Ətraflı öyrən",
|
||||
"prefs_highlights_description": "Saxladığınız və ya ziyarət etdiyiniz saytlardan seçmələr",
|
||||
|
@ -114,6 +114,7 @@ window.gActivityStreamStrings = {
|
|||
"time_label_minute": "{number}d",
|
||||
"time_label_hour": "{number}s",
|
||||
"time_label_day": "{number}g",
|
||||
"prefs_topstories_description": "Qaçırda biləcəyiniz yüksək keyfiyyətli məzmun",
|
||||
"settings_pane_bookmarks_header": "Son Əlfəcinlər",
|
||||
"settings_pane_bookmarks_body": "Yeni yaradılan əlfəcinlər tək bir əlverişli yerdə.",
|
||||
"settings_pane_visit_again_header": "Təkrar ziyarət et",
|
||||
|
|
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
|
@ -35,7 +35,7 @@ window.gActivityStreamStrings = {
|
|||
"prefs_section_rows_option": "{num} радок;{num} радкі;{num} радкоў",
|
||||
"prefs_search_header": "Пошук у сеціве",
|
||||
"prefs_topsites_description": "Сайты, якія вы наведваеце найчасцей",
|
||||
"prefs_topstories_description": "Якасны змест, які вы маглі іначай прапусціць",
|
||||
"prefs_topstories_description2": "Great content from around the web, personalized for you",
|
||||
"prefs_topstories_show_sponsored_label": "Артыкулы ад спонсараў {provider}",
|
||||
"prefs_topstories_sponsored_learn_more": "Даведацца больш",
|
||||
"prefs_highlights_description": "Выбраныя сайты, якія вы захавалі ці наведалі",
|
||||
|
@ -89,5 +89,6 @@ window.gActivityStreamStrings = {
|
|||
"section_menu_action_add_topsite": "Дадаць папулярны сайт",
|
||||
"section_menu_action_move_up": "Пасунуць вышэй",
|
||||
"section_menu_action_move_down": "Пасунуць ніжэй",
|
||||
"section_menu_action_privacy_notice": "Паведамленне аб прыватнасці"
|
||||
"section_menu_action_privacy_notice": "Паведамленне аб прыватнасці",
|
||||
"prefs_topstories_description": "Якасны змест, які вы маглі іначай прапусціць"
|
||||
};
|
||||
|
|
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
|
@ -35,7 +35,7 @@ window.gActivityStreamStrings = {
|
|||
"prefs_section_rows_option": "{num} row;{num} rows",
|
||||
"prefs_search_header": "Web Search",
|
||||
"prefs_topsites_description": "The sites you visit most",
|
||||
"prefs_topstories_description": "High-quality content you might otherwise miss",
|
||||
"prefs_topstories_description2": "Great content from around the web, personalized for you",
|
||||
"prefs_topstories_show_sponsored_label": "{provider} Sponsored Stories",
|
||||
"prefs_topstories_sponsored_learn_more": "Learn more",
|
||||
"prefs_highlights_description": "A selection of sites that you’ve saved or visited",
|
||||
|
|
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
|
@ -35,7 +35,7 @@ window.gActivityStreamStrings = {
|
|||
"prefs_section_rows_option": "{num} সারি; {num} সারিগুলি",
|
||||
"prefs_search_header": "ওয়েব অনুসন্ধান",
|
||||
"prefs_topsites_description": "যে সাইটগুলিতে আপনি বেশি যান",
|
||||
"prefs_topstories_description": "আপনি উচ্চ-মানের কনটেন্টের অভাব বোধ করতে পারেন",
|
||||
"prefs_topstories_description2": "Great content from around the web, personalized for you",
|
||||
"prefs_topstories_show_sponsored_label": "{provider} বিজ্ঞাপনী গল্প",
|
||||
"prefs_topstories_sponsored_learn_more": "আরও জানুন",
|
||||
"prefs_highlights_description": "সাইটের একটি সেকশন যা আপনি সংরক্ষণ অথবা গিয়েছিলেন",
|
||||
|
@ -111,5 +111,6 @@ window.gActivityStreamStrings = {
|
|||
"edit_topsites_done_button": "হয়েছে",
|
||||
"edit_topsites_pin_button": "সাইটটি পিন করুন",
|
||||
"edit_topsites_dismiss_button": "সাইটটি মুছে দিন",
|
||||
"edit_topsites_add_button": "যুক্ত করুন"
|
||||
"edit_topsites_add_button": "যুক্ত করুন",
|
||||
"prefs_topstories_description": "আপনি উচ্চ-মানের কনটেন্টের অভাব বোধ করতে পারেন"
|
||||
};
|
||||
|
|
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
|
@ -35,7 +35,7 @@ window.gActivityStreamStrings = {
|
|||
"prefs_section_rows_option": "{num} সারি; {num} সারিগুলি",
|
||||
"prefs_search_header": "ওয়েব অনুসন্ধান",
|
||||
"prefs_topsites_description": "যে সাইটগুলিতে আপনি বেশি যান",
|
||||
"prefs_topstories_description": "আপনি উচ্চ-মানের কনটেন্টের অভাব বোধ করতে পারেন",
|
||||
"prefs_topstories_description2": "Great content from around the web, personalized for you",
|
||||
"prefs_topstories_show_sponsored_label": "{provider} বিজ্ঞাপনী গল্প",
|
||||
"prefs_topstories_sponsored_learn_more": "আরও জানুন",
|
||||
"prefs_highlights_description": "সাইটের একটি সেকশন যা আপনি সংরক্ষণ অথবা গিয়েছিলেন",
|
||||
|
@ -90,6 +90,7 @@ window.gActivityStreamStrings = {
|
|||
"section_menu_action_move_up": "উপরে উঠাও",
|
||||
"section_menu_action_move_down": "নীচে নামাও",
|
||||
"section_menu_action_privacy_notice": "গোপনীয়তা নীতি",
|
||||
"prefs_topstories_description": "আপনি উচ্চ-মানের কনটেন্টের অভাব বোধ করতে পারেন",
|
||||
"default_label_loading": "লোড করা হচ্ছে…",
|
||||
"type_label_synced": "অন্য ডিভাইস থেকে সিঙ্ক করা হয়েছে",
|
||||
"type_label_open": "খুলুন",
|
||||
|
|
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
|
@ -35,7 +35,7 @@ window.gActivityStreamStrings = {
|
|||
"prefs_section_rows_option": "{num} renk;{num} renk;{num} renk;{num} a renkoù;{num} renk",
|
||||
"prefs_search_header": "Klask web",
|
||||
"prefs_topsites_description": "Al lec'hiennoù a weladennit ar muiañ",
|
||||
"prefs_topstories_description": "Danvez eus an dibab a c'hallfec'h c'hwitout a-hend-all",
|
||||
"prefs_topstories_description2": "Great content from around the web, personalized for you",
|
||||
"prefs_topstories_show_sponsored_label": "Istorioù kevelet {provider}",
|
||||
"prefs_topstories_sponsored_learn_more": "Gouzout hiroc'h",
|
||||
"prefs_highlights_description": "Un dibab a lec'hiennoù ho peus enrollet pe gweladennet",
|
||||
|
@ -89,5 +89,6 @@ window.gActivityStreamStrings = {
|
|||
"section_menu_action_add_topsite": "Ouzhpennañ ul lec'hienn gwellañ din",
|
||||
"section_menu_action_move_up": "Dilec'hiañ etrezek ar c'hrec'h",
|
||||
"section_menu_action_move_down": "Dilec'hiañ etrezek an traoñ",
|
||||
"section_menu_action_privacy_notice": "Evezhiadennoù a-fet buhez prevez"
|
||||
"section_menu_action_privacy_notice": "Evezhiadennoù a-fet buhez prevez",
|
||||
"prefs_topstories_description": "Danvez eus an dibab a c'hallfec'h c'hwitout a-hend-all"
|
||||
};
|
||||
|
|
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
|
@ -35,7 +35,7 @@ window.gActivityStreamStrings = {
|
|||
"prefs_section_rows_option": "{num} red;{num} redovi",
|
||||
"prefs_search_header": "Web pretraga",
|
||||
"prefs_topsites_description": "Stranice koje najviše posjećujete",
|
||||
"prefs_topstories_description": "Visoko kvalitetan sadržaj koji biste inače promašili",
|
||||
"prefs_topstories_description2": "Great content from around the web, personalized for you",
|
||||
"prefs_topstories_show_sponsored_label": "{provider} sponzorisane priče",
|
||||
"prefs_topstories_sponsored_learn_more": "Saznajte više",
|
||||
"prefs_highlights_description": "Izbor stranica koje ste sačuvali ili posjetili",
|
||||
|
@ -114,6 +114,7 @@ window.gActivityStreamStrings = {
|
|||
"time_label_minute": "{number}m",
|
||||
"time_label_hour": "{number}h",
|
||||
"time_label_day": "{number}d",
|
||||
"prefs_topstories_description": "Visoko kvalitetan sadržaj koji biste inače promašili",
|
||||
"settings_pane_bookmarks_header": "Nedavne zabilješke",
|
||||
"settings_pane_bookmarks_body": "Vaše novo stvorene zabilješke na jednom praktičnom mjestu.",
|
||||
"settings_pane_visit_again_header": "Posjetite ponovo",
|
||||
|
|
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
|
@ -35,7 +35,7 @@ window.gActivityStreamStrings = {
|
|||
"prefs_section_rows_option": "{num} row;{num} rows",
|
||||
"prefs_search_header": "Web Search",
|
||||
"prefs_topsites_description": "The sites you visit most",
|
||||
"prefs_topstories_description": "High-quality content you might otherwise miss",
|
||||
"prefs_topstories_description2": "Great content from around the web, personalized for you",
|
||||
"prefs_topstories_show_sponsored_label": "{provider} Sponsored Stories",
|
||||
"prefs_topstories_sponsored_learn_more": "Learn more",
|
||||
"prefs_highlights_description": "A selection of sites that you’ve saved or visited",
|
||||
|
|
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
|
@ -35,7 +35,7 @@ window.gActivityStreamStrings = {
|
|||
"prefs_section_rows_option": "{num} cholaj:{num} taq cholaj",
|
||||
"prefs_search_header": "Ajk'amaya'l Kanoxïk",
|
||||
"prefs_topsites_description": "Taq ruxaq yalan ye'atz'ët",
|
||||
"prefs_topstories_description": "Etamab'äl nïm rub'anikil, we mani choj xtik'o",
|
||||
"prefs_topstories_description2": "Great content from around the web, personalized for you",
|
||||
"prefs_topstories_show_sponsored_label": "{provider} To'on taq B'anob'äl",
|
||||
"prefs_topstories_sponsored_learn_more": "Tetamäx ch'aqa' chik",
|
||||
"prefs_highlights_description": "Jun rucha'onem ruxaq, ri xayäk o xatz'ët",
|
||||
|
@ -89,5 +89,6 @@ window.gActivityStreamStrings = {
|
|||
"section_menu_action_add_topsite": "Titz'aqatisäx K'ïy Ruwinaq Ruxaq K'amaya'l",
|
||||
"section_menu_action_move_up": "Tijotob'äx",
|
||||
"section_menu_action_move_down": "Tiqasäx qa",
|
||||
"section_menu_action_privacy_notice": "Ichinan na'oj"
|
||||
"section_menu_action_privacy_notice": "Ichinan na'oj",
|
||||
"prefs_topstories_description": "Etamab'äl nïm rub'anikil, we mani choj xtik'o"
|
||||
};
|
||||
|
|
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
|
@ -35,7 +35,7 @@ window.gActivityStreamStrings = {
|
|||
"prefs_section_rows_option": "{num} row;{num} rows",
|
||||
"prefs_search_header": "Ağ Qıdırması",
|
||||
"prefs_topsites_description": "The sites you visit most",
|
||||
"prefs_topstories_description": "High-quality content you might otherwise miss",
|
||||
"prefs_topstories_description2": "Great content from around the web, personalized for you",
|
||||
"prefs_topstories_show_sponsored_label": "{provider} Sponsored Stories",
|
||||
"prefs_topstories_sponsored_learn_more": "Daha çoq ögren",
|
||||
"prefs_highlights_description": "A selection of sites that you’ve saved or visited",
|
||||
|
|
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
|
@ -35,7 +35,7 @@ window.gActivityStreamStrings = {
|
|||
"prefs_section_rows_option": "{num} řádek;{num} řádky;{num} řádků",
|
||||
"prefs_search_header": "Vyhledávání na webu",
|
||||
"prefs_topsites_description": "Nejnavštěvovanější stránky",
|
||||
"prefs_topstories_description": "Kvalitní obsah, o který byste jinak mohli přijít",
|
||||
"prefs_topstories_description2": "Great content from around the web, personalized for you",
|
||||
"prefs_topstories_show_sponsored_label": "Sponzorované příběhy ze služby {provider}",
|
||||
"prefs_topstories_sponsored_learn_more": "Zjistit více",
|
||||
"prefs_highlights_description": "Výběr stránek, které jste si uložili nebo navštívili",
|
||||
|
@ -89,5 +89,6 @@ window.gActivityStreamStrings = {
|
|||
"section_menu_action_add_topsite": "Přidat mezi top stránky",
|
||||
"section_menu_action_move_up": "Posunout nahoru",
|
||||
"section_menu_action_move_down": "Posunout dolů",
|
||||
"section_menu_action_privacy_notice": "Zásady ochrany soukromí"
|
||||
"section_menu_action_privacy_notice": "Zásady ochrany soukromí",
|
||||
"prefs_topstories_description": "Kvalitní obsah, o který byste jinak mohli přijít"
|
||||
};
|
||||
|
|
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
|
@ -35,7 +35,7 @@ window.gActivityStreamStrings = {
|
|||
"prefs_section_rows_option": "{num} rhes;{num} rhes",
|
||||
"prefs_search_header": "Chwilio'r We",
|
||||
"prefs_topsites_description": "Y gwefannau rydych yn ymweld â nhw amlaf",
|
||||
"prefs_topstories_description": "Cynnwys o safon uchel y gallech chi fod yn eu colli",
|
||||
"prefs_topstories_description2": "Great content from around the web, personalized for you",
|
||||
"prefs_topstories_show_sponsored_label": "Straeon Noddedig {provider}",
|
||||
"prefs_topstories_sponsored_learn_more": "Dysgu rhagor",
|
||||
"prefs_highlights_description": "Detholiad o wefannau rydych wedi eu cadw neu ymweld â nhw",
|
||||
|
@ -114,6 +114,7 @@ window.gActivityStreamStrings = {
|
|||
"time_label_minute": "{number}m",
|
||||
"time_label_hour": "{number}a",
|
||||
"time_label_day": "{number}d",
|
||||
"prefs_topstories_description": "Cynnwys o safon uchel y gallech chi fod yn eu colli",
|
||||
"settings_pane_bookmarks_header": "Nodau Tudalen Diweddar",
|
||||
"settings_pane_bookmarks_body": "Eich nodau tudalen diweddaraf mewn un lleoliad hwylus.",
|
||||
"settings_pane_visit_again_header": "Ymweld Eto",
|
||||
|
|
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
|
@ -35,7 +35,7 @@ window.gActivityStreamStrings = {
|
|||
"prefs_section_rows_option": "{num} række;{num} rækker",
|
||||
"prefs_search_header": "Søgning på internettet",
|
||||
"prefs_topsites_description": "Mest besøgte websider",
|
||||
"prefs_topstories_description": "Indhold af høj kvalitet, som du måske ellers kunne have overset",
|
||||
"prefs_topstories_description2": "Great content from around the web, personalized for you",
|
||||
"prefs_topstories_show_sponsored_label": "Sponsorerede historier fra {provider}",
|
||||
"prefs_topstories_sponsored_learn_more": "Læs mere",
|
||||
"prefs_highlights_description": "Et afsnit med sider, du har gemt eller besøgt",
|
||||
|
@ -89,5 +89,6 @@ window.gActivityStreamStrings = {
|
|||
"section_menu_action_add_topsite": "Tilføj ny webside",
|
||||
"section_menu_action_move_up": "Flyt op",
|
||||
"section_menu_action_move_down": "Flyt ned",
|
||||
"section_menu_action_privacy_notice": "Privatlivspolitik"
|
||||
"section_menu_action_privacy_notice": "Privatlivspolitik",
|
||||
"prefs_topstories_description": "Indhold af høj kvalitet, som du måske ellers kunne have overset"
|
||||
};
|
||||
|
|
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
|
@ -35,7 +35,7 @@ window.gActivityStreamStrings = {
|
|||
"prefs_section_rows_option": "{num} Zeile;{num} Zeilen",
|
||||
"prefs_search_header": "Internetsuche",
|
||||
"prefs_topsites_description": "Die von die Ihnen am meisten besuchten Websites",
|
||||
"prefs_topstories_description": "Qualitativ hochwertige Inhalte, die Sie sonst verpassen",
|
||||
"prefs_topstories_description2": "Great content from around the web, personalized for you",
|
||||
"prefs_topstories_show_sponsored_label": "Gesponserte Geschichten von {provider}",
|
||||
"prefs_topstories_sponsored_learn_more": "Weitere Informationen",
|
||||
"prefs_highlights_description": "Eine Auswahl von Websites, die Sie gespeichert oder besucht haben",
|
||||
|
@ -114,6 +114,7 @@ window.gActivityStreamStrings = {
|
|||
"time_label_minute": "{number} m",
|
||||
"time_label_hour": "{number} h",
|
||||
"time_label_day": "{number} t",
|
||||
"prefs_topstories_description": "Qualitativ hochwertige Inhalte, die Sie sonst verpassen",
|
||||
"settings_pane_bookmarks_header": "Neue Lesezeichen",
|
||||
"settings_pane_bookmarks_body": "Ihre neu erstellten Lesezeichen ganz bequem an einem Ort.",
|
||||
"settings_pane_visit_again_header": "Erneut besuchen",
|
||||
|
|
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
|
@ -35,7 +35,7 @@ window.gActivityStreamStrings = {
|
|||
"prefs_section_rows_option": "{num} smužka;{num} smužce;{num}smužki;{num} smužkow",
|
||||
"prefs_search_header": "Webpytanje",
|
||||
"prefs_topsites_description": "Sedła, ku kótarymž se nejcesćej woglědujośo",
|
||||
"prefs_topstories_description": "Wopšimjeśe wusokeje kwality, kótarež howac snaź zapasośo",
|
||||
"prefs_topstories_description2": "Great content from around the web, personalized for you",
|
||||
"prefs_topstories_show_sponsored_label": "Sponsorowane tšojenja wót {provider}",
|
||||
"prefs_topstories_sponsored_learn_more": "Dalšne informacije",
|
||||
"prefs_highlights_description": "Wuběrk websedłow, kótarež sćo składował abo se woglědał",
|
||||
|
@ -114,6 +114,7 @@ window.gActivityStreamStrings = {
|
|||
"time_label_minute": "{number} m",
|
||||
"time_label_hour": "{number} h",
|
||||
"time_label_day": "{number} d",
|
||||
"prefs_topstories_description": "Wopšimjeśe wusokeje kwality, kótarež howac snaź zapasośo",
|
||||
"settings_pane_bookmarks_header": "Nejnowše cytańske znamjenja",
|
||||
"settings_pane_bookmarks_body": "Waše nowo załožone cytańske znamjenja ned k ruce.",
|
||||
"settings_pane_visit_again_header": "Hyšći raz se woglědaś",
|
||||
|
|
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
|
@ -35,7 +35,7 @@ window.gActivityStreamStrings = {
|
|||
"prefs_section_rows_option": "{num} σειρά;{num} σειρές",
|
||||
"prefs_search_header": "Αναζήτηση ιστού",
|
||||
"prefs_topsites_description": "Οι ιστοσελίδες που επισκέπτεστε περισσότερο",
|
||||
"prefs_topstories_description": "Υψηλής ποιότητας περιεχόμενο που ίσως έχετε χάσει",
|
||||
"prefs_topstories_description2": "Great content from around the web, personalized for you",
|
||||
"prefs_topstories_show_sponsored_label": "Χορηγούμενες ιστορίες του {provider}",
|
||||
"prefs_topstories_sponsored_learn_more": "Μάθετε περισσότερα",
|
||||
"prefs_highlights_description": "Μια συλλογή ιστοσελίδων που έχετε αποθηκεύσει ή επισκεφθεί",
|
||||
|
@ -89,5 +89,6 @@ window.gActivityStreamStrings = {
|
|||
"section_menu_action_add_topsite": "Προσθήκη κορυφαίας ιστοσελίδας",
|
||||
"section_menu_action_move_up": "Μετακίνηση επάνω",
|
||||
"section_menu_action_move_down": "Μετακίνηση κάτω",
|
||||
"section_menu_action_privacy_notice": "Σημείωση απορρήτου"
|
||||
"section_menu_action_privacy_notice": "Σημείωση απορρήτου",
|
||||
"prefs_topstories_description": "Υψηλής ποιότητας περιεχόμενο που ίσως έχετε χάσει"
|
||||
};
|
||||
|
|
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
|
@ -35,7 +35,7 @@ window.gActivityStreamStrings = {
|
|||
"prefs_section_rows_option": "{num} row;{num} rows",
|
||||
"prefs_search_header": "Web Search",
|
||||
"prefs_topsites_description": "The sites you visit most",
|
||||
"prefs_topstories_description": "High-quality content you might otherwise miss",
|
||||
"prefs_topstories_description2": "Great content from around the web, personalized for you",
|
||||
"prefs_topstories_show_sponsored_label": "{provider} Sponsored Stories",
|
||||
"prefs_topstories_sponsored_learn_more": "Learn more",
|
||||
"prefs_highlights_description": "A selection of sites that you’ve saved or visited",
|
||||
|
@ -90,41 +90,5 @@ window.gActivityStreamStrings = {
|
|||
"section_menu_action_move_up": "Move Up",
|
||||
"section_menu_action_move_down": "Move Down",
|
||||
"section_menu_action_privacy_notice": "Privacy Notice",
|
||||
"default_label_loading": "Loading…",
|
||||
"header_stories": "Top Stories",
|
||||
"header_visit_again": "Visit Again",
|
||||
"header_bookmarks": "Recent Bookmarks",
|
||||
"header_bookmarks_placeholder": "You don’t have any bookmarks yet.",
|
||||
"header_stories_from": "from",
|
||||
"type_label_synced": "Synchronised from another device",
|
||||
"type_label_open": "Open",
|
||||
"type_label_topic": "Topic",
|
||||
"type_label_now": "Now",
|
||||
"menu_action_copy_address": "Copy Address",
|
||||
"menu_action_email_link": "Email Link…",
|
||||
"search_for_something_with": "Search for {search_term} with:",
|
||||
"search_settings": "Change Search Settings",
|
||||
"section_info_option": "Info",
|
||||
"section_info_send_feedback": "Send Feedback",
|
||||
"section_info_privacy_notice": "Privacy Notice",
|
||||
"welcome_title": "Welcome to new tab",
|
||||
"welcome_body": "Firefox will use this space to show your most relevant bookmarks, articles, videos, and pages you’ve recently visited, so you can get back to them easily.",
|
||||
"welcome_label": "Identifying your Highlights",
|
||||
"time_label_less_than_minute": "<1m",
|
||||
"time_label_minute": "{number}m",
|
||||
"time_label_hour": "{number}h",
|
||||
"time_label_day": "{number}d",
|
||||
"settings_pane_bookmarks_header": "Recent Bookmarks",
|
||||
"settings_pane_bookmarks_body": "Your newly created bookmarks in one handy location.",
|
||||
"settings_pane_visit_again_header": "Visit Again",
|
||||
"settings_pane_visit_again_body": "Firefox will show you parts of your browsing history that you might want to remember or get back to.",
|
||||
"edit_topsites_button_label": "Customise your Top Sites section",
|
||||
"edit_topsites_showmore_button": "Show more",
|
||||
"edit_topsites_showless_button": "Show less",
|
||||
"edit_topsites_done_button": "Done",
|
||||
"edit_topsites_pin_button": "Pin this site",
|
||||
"edit_topsites_unpin_button": "Unpin this site",
|
||||
"edit_topsites_dismiss_button": "Dismiss this site",
|
||||
"edit_topsites_add_button": "Add",
|
||||
"pocket_feedback_header": "The best of the web, curated by over 25 million people."
|
||||
"prefs_topstories_description": "High-quality content you might otherwise miss"
|
||||
};
|
||||
|
|
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
|
@ -35,7 +35,7 @@ window.gActivityStreamStrings = {
|
|||
"prefs_section_rows_option": "{num} row;{num} rows",
|
||||
"prefs_search_header": "Web Search",
|
||||
"prefs_topsites_description": "The sites you visit most",
|
||||
"prefs_topstories_description": "High-quality content you might otherwise miss",
|
||||
"prefs_topstories_description2": "Great content from around the web, personalized for you",
|
||||
"prefs_topstories_show_sponsored_label": "{provider} Sponsored Stories",
|
||||
"prefs_topstories_sponsored_learn_more": "Learn more",
|
||||
"prefs_highlights_description": "A selection of sites that you’ve saved or visited",
|
||||
|
@ -90,41 +90,5 @@ window.gActivityStreamStrings = {
|
|||
"section_menu_action_move_up": "Move Up",
|
||||
"section_menu_action_move_down": "Move Down",
|
||||
"section_menu_action_privacy_notice": "Privacy Notice",
|
||||
"default_label_loading": "Loading…",
|
||||
"header_stories": "Top Stories",
|
||||
"header_visit_again": "Visit Again",
|
||||
"header_bookmarks": "Recent Bookmarks",
|
||||
"header_bookmarks_placeholder": "You don’t have any bookmarks yet.",
|
||||
"header_stories_from": "from",
|
||||
"type_label_synced": "Synchronised from another device",
|
||||
"type_label_open": "Open",
|
||||
"type_label_topic": "Topic",
|
||||
"type_label_now": "Now",
|
||||
"menu_action_copy_address": "Copy Address",
|
||||
"menu_action_email_link": "Email Link…",
|
||||
"search_for_something_with": "Search for {search_term} with:",
|
||||
"search_settings": "Change Search Settings",
|
||||
"section_info_option": "Info",
|
||||
"section_info_send_feedback": "Send Feedback",
|
||||
"section_info_privacy_notice": "Privacy Notice",
|
||||
"welcome_title": "Welcome to new tab",
|
||||
"welcome_body": "Firefox will use this space to show your most relevant bookmarks, articles, videos, and pages you’ve recently visited, so you can get back to them easily.",
|
||||
"welcome_label": "Identifying your Highlights",
|
||||
"time_label_less_than_minute": "<1m",
|
||||
"time_label_minute": "{number}m",
|
||||
"time_label_hour": "{number}h",
|
||||
"time_label_day": "{number}d",
|
||||
"settings_pane_bookmarks_header": "Recent Bookmarks",
|
||||
"settings_pane_bookmarks_body": "Your newly created bookmarks in one handy location.",
|
||||
"settings_pane_visit_again_header": "Visit Again",
|
||||
"settings_pane_visit_again_body": "Firefox will show you parts of your browsing history that you might want to remember or get back to.",
|
||||
"edit_topsites_button_label": "Customise your Top Sites section",
|
||||
"edit_topsites_showmore_button": "Show more",
|
||||
"edit_topsites_showless_button": "Show less",
|
||||
"edit_topsites_done_button": "Done",
|
||||
"edit_topsites_pin_button": "Pin this site",
|
||||
"edit_topsites_unpin_button": "Unpin this site",
|
||||
"edit_topsites_dismiss_button": "Dismiss this site",
|
||||
"edit_topsites_add_button": "Add",
|
||||
"pocket_feedback_header": "The best of the web, curated by over 25 million people."
|
||||
"prefs_topstories_description": "High-quality content you might otherwise miss"
|
||||
};
|
||||
|
|
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
|
@ -35,7 +35,7 @@ window.gActivityStreamStrings = {
|
|||
"prefs_section_rows_option": "{num} vico;{num} vicoj",
|
||||
"prefs_search_header": "Serĉo en la reto",
|
||||
"prefs_topsites_description": "Viaj plej vizititaj retejoj",
|
||||
"prefs_topstories_description": "Altkvalita enhavo, kiun aliokaze vi povus maltrafi",
|
||||
"prefs_topstories_description2": "Great content from around the web, personalized for you",
|
||||
"prefs_topstories_show_sponsored_label": "Patronitaj artikoloj de {provider}",
|
||||
"prefs_topstories_sponsored_learn_more": "Pli da informo",
|
||||
"prefs_highlights_description": "Retejoj elektitaj inter tiuj, kiun vi vizitis aŭ konservis",
|
||||
|
@ -89,5 +89,6 @@ window.gActivityStreamStrings = {
|
|||
"section_menu_action_add_topsite": "Aldoni oftan retejon",
|
||||
"section_menu_action_move_up": "Movi supren",
|
||||
"section_menu_action_move_down": "Movi malsupren",
|
||||
"section_menu_action_privacy_notice": "Rimarko pri privateco"
|
||||
"section_menu_action_privacy_notice": "Rimarko pri privateco",
|
||||
"prefs_topstories_description": "Altkvalita enhavo, kiun aliokaze vi povus maltrafi"
|
||||
};
|
||||
|
|
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
|
@ -35,7 +35,7 @@ window.gActivityStreamStrings = {
|
|||
"prefs_section_rows_option": "fila de {num}; filas de {num}",
|
||||
"prefs_search_header": "Búsqueda en la web",
|
||||
"prefs_topsites_description": "Los sitios que más visita",
|
||||
"prefs_topstories_description": "Contenido de alta calidad que de lo contrario podría pasar por alto",
|
||||
"prefs_topstories_description2": "Great content from around the web, personalized for you",
|
||||
"prefs_topstories_show_sponsored_label": "{provider} Historias patrocinadas",
|
||||
"prefs_topstories_sponsored_learn_more": "Conocer más",
|
||||
"prefs_highlights_description": "Una selección de sitios que guardó o visitó",
|
||||
|
@ -114,6 +114,7 @@ window.gActivityStreamStrings = {
|
|||
"time_label_minute": "{number}m",
|
||||
"time_label_hour": "{number}h",
|
||||
"time_label_day": "{number}d",
|
||||
"prefs_topstories_description": "Contenido de alta calidad que de lo contrario podría pasar por alto",
|
||||
"settings_pane_bookmarks_header": "Marcadores recientes",
|
||||
"settings_pane_bookmarks_body": "Los marcadores recién creados en una ubicación cómoda.",
|
||||
"settings_pane_visit_again_header": "Visitar de nuevo",
|
||||
|
@ -126,6 +127,5 @@ window.gActivityStreamStrings = {
|
|||
"edit_topsites_unpin_button": "Despegar este sitio",
|
||||
"edit_topsites_dismiss_button": "Descartar este sitio",
|
||||
"edit_topsites_add_button": "Agregar",
|
||||
"pocket_feedback_header": "Lo mejor de la web, seleccionado por más de 25 millones de personas.",
|
||||
"edit_topsites_add_button_tooltip": "Agregar sitio popular"
|
||||
"pocket_feedback_header": "Lo mejor de la web, seleccionado por más de 25 millones de personas."
|
||||
};
|
||||
|
|
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
|
@ -35,7 +35,7 @@ window.gActivityStreamStrings = {
|
|||
"prefs_section_rows_option": "{num} fila;{num} filas",
|
||||
"prefs_search_header": "Búsqueda web",
|
||||
"prefs_topsites_description": "Los sitios que más visitas",
|
||||
"prefs_topstories_description": "Contenido de alta calidad que de otra forma te lo perderías",
|
||||
"prefs_topstories_description2": "Great content from around the web, personalized for you",
|
||||
"prefs_topstories_show_sponsored_label": "Historias patrocinadas de {provider}",
|
||||
"prefs_topstories_sponsored_learn_more": "Aprender más",
|
||||
"prefs_highlights_description": "Una selección de sitios que guardaste o visitaste",
|
||||
|
@ -114,6 +114,7 @@ window.gActivityStreamStrings = {
|
|||
"time_label_minute": "{number}m",
|
||||
"time_label_hour": "{number}h",
|
||||
"time_label_day": "{number}d",
|
||||
"prefs_topstories_description": "Contenido de alta calidad que de otra forma te lo perderías",
|
||||
"settings_pane_bookmarks_header": "Marcadores recientes",
|
||||
"settings_pane_bookmarks_body": "Tus marcadores recién creados en un lugar accesible.",
|
||||
"settings_pane_visit_again_header": "Volver a visitar",
|
||||
|
@ -126,6 +127,5 @@ window.gActivityStreamStrings = {
|
|||
"edit_topsites_unpin_button": "Soltar este sitio",
|
||||
"edit_topsites_dismiss_button": "Sacar este sitio",
|
||||
"edit_topsites_add_button": "Añadir",
|
||||
"pocket_feedback_header": "Lo mejor de la web, revisado por más de 25 millones de personas.",
|
||||
"edit_topsites_add_button_tooltip": "Agregar sitio popular"
|
||||
"pocket_feedback_header": "Lo mejor de la web, revisado por más de 25 millones de personas."
|
||||
};
|
||||
|
|
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
|
@ -35,7 +35,7 @@ window.gActivityStreamStrings = {
|
|||
"prefs_section_rows_option": "{num} fila{num} filas",
|
||||
"prefs_search_header": "Búsqueda web",
|
||||
"prefs_topsites_description": "Los sitios que más visita",
|
||||
"prefs_topstories_description": "Contenido de alta calidad que de otra forma se perdería",
|
||||
"prefs_topstories_description2": "Great content from around the web, personalized for you",
|
||||
"prefs_topstories_show_sponsored_label": "{provider} Historias patrocinadas",
|
||||
"prefs_topstories_sponsored_learn_more": "Más información",
|
||||
"prefs_highlights_description": "Una selección de sitios que ha guardado o visitado",
|
||||
|
@ -114,6 +114,7 @@ window.gActivityStreamStrings = {
|
|||
"time_label_minute": "{number}m",
|
||||
"time_label_hour": "{number}h",
|
||||
"time_label_day": "{number}d",
|
||||
"prefs_topstories_description": "Contenido de alta calidad que de otra forma se perdería",
|
||||
"settings_pane_bookmarks_header": "Marcadores recientes",
|
||||
"settings_pane_bookmarks_body": "Tus marcadores recién creados, fácilmente accesibles.",
|
||||
"settings_pane_visit_again_header": "Visitar de nuevo",
|
||||
|
@ -126,6 +127,5 @@ window.gActivityStreamStrings = {
|
|||
"edit_topsites_unpin_button": "Eliminar este sitio fijo",
|
||||
"edit_topsites_dismiss_button": "Olvidar este sitio",
|
||||
"edit_topsites_add_button": "Agregar",
|
||||
"pocket_feedback_header": "Lo mejor de la web, confirmado por más de 25 millones de personas.",
|
||||
"edit_topsites_add_button_tooltip": "Agregar sitio popular"
|
||||
"pocket_feedback_header": "Lo mejor de la web, confirmado por más de 25 millones de personas."
|
||||
};
|
||||
|
|
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
|
@ -31,14 +31,14 @@ window.gActivityStreamStrings = {
|
|||
"section_disclaimer_topstories_buttontext": "Está bien, lo entiendo",
|
||||
"prefs_home_header": "Contenido de la página de inicio de Firefox",
|
||||
"prefs_home_description": "Selecciona el contenido que desea en la pantalla de inicio de Firefox.",
|
||||
"prefs_restore_defaults_button": "Restaurar predeterminados",
|
||||
"prefs_section_rows_option": "{num} fila{num} filas",
|
||||
"prefs_restore_defaults_button": "Restaurar valores predeterminados",
|
||||
"prefs_section_rows_option": "{num} fila;{num} filas",
|
||||
"prefs_search_header": "Búsqueda web",
|
||||
"prefs_topsites_description": "Los sitios que más visita",
|
||||
"prefs_topstories_description": "Contenido de alta calidad que de otra forma se perdería",
|
||||
"prefs_topsites_description": "Los sitios que más visitas",
|
||||
"prefs_topstories_description2": "Great content from around the web, personalized for you",
|
||||
"prefs_topstories_show_sponsored_label": "{provider} Historias patrocinadas",
|
||||
"prefs_topstories_sponsored_learn_more": "Más información",
|
||||
"prefs_highlights_description": "Una selección de sitios que ha guardado o visitado",
|
||||
"prefs_topstories_sponsored_learn_more": "Saber más",
|
||||
"prefs_highlights_description": "Una selección de sitios que has guardado o visitado",
|
||||
"prefs_snippets_description": "Actualizaciones de Mozilla y Firefox",
|
||||
"settings_pane_button_label": "Personalizar tu página de nueva pestaña",
|
||||
"settings_pane_header": "Preferencias de nueva pestaña",
|
||||
|
@ -66,7 +66,7 @@ window.gActivityStreamStrings = {
|
|||
"topsites_form_image_url_label": "URL de imagen personalizada",
|
||||
"topsites_form_url_placeholder": "Escribir o pegar una URL",
|
||||
"topsites_form_use_image_link": "Utilizar una imagen personalizada…",
|
||||
"topsites_form_preview_button": "Vista preliminar",
|
||||
"topsites_form_preview_button": "Vista previa",
|
||||
"topsites_form_add_button": "Agregar",
|
||||
"topsites_form_save_button": "Guardar",
|
||||
"topsites_form_cancel_button": "Cancelar",
|
||||
|
@ -80,52 +80,52 @@ window.gActivityStreamStrings = {
|
|||
"manual_migration_explanation2": "Prueba Firefox con los marcadores, historial y contraseñas de otro navegador.",
|
||||
"manual_migration_cancel_button": "No, gracias",
|
||||
"manual_migration_import_button": "Importar ahora",
|
||||
"error_fallback_default_info": "Lo sentimos, algo salió mal al cargar el contenido.",
|
||||
"error_fallback_default_refresh_suggestion": "Recarga la página e intentálo de nuevo.",
|
||||
"error_fallback_default_info": "Ups, algo salió mal mientras se cargaba el contenido.",
|
||||
"error_fallback_default_refresh_suggestion": "Actualiza la página e intenta de nuevo.",
|
||||
"section_menu_action_remove_section": "Eliminar sección",
|
||||
"section_menu_action_collapse_section": "Contraer sección",
|
||||
"section_menu_action_expand_section": "Expandir sección",
|
||||
"section_menu_action_manage_section": "Gestionar sección",
|
||||
"section_menu_action_add_topsite": "Añadir sitio popular",
|
||||
"section_menu_action_move_up": "Subir",
|
||||
"section_menu_action_collapse_section": "Sección de colapso",
|
||||
"section_menu_action_expand_section": "Ampliar la sección",
|
||||
"section_menu_action_manage_section": "Administrar sección",
|
||||
"section_menu_action_add_topsite": "Agregar sitio popular",
|
||||
"section_menu_action_move_up": "Más",
|
||||
"section_menu_action_move_down": "Bajar",
|
||||
"section_menu_action_privacy_notice": "Aviso de privacidad",
|
||||
"section_menu_action_privacy_notice": "Política de privacidad",
|
||||
"default_label_loading": "Cargando…",
|
||||
"header_stories": "Historias populares",
|
||||
"header_visit_again": "Visitar de nuevo",
|
||||
"header_bookmarks": "Marcadores recientes",
|
||||
"header_bookmarks_placeholder": "Aún no tienes ningún marcador.",
|
||||
"header_stories_from": "de",
|
||||
"header_bookmarks_placeholder": "Todavía no tienes ningún marcador.",
|
||||
"header_stories_from": "desde",
|
||||
"type_label_synced": "Sincronizado desde otro dispositivo",
|
||||
"type_label_open": "Abrir",
|
||||
"type_label_topic": "Tema",
|
||||
"type_label_now": "Ahora",
|
||||
"menu_action_copy_address": "Copiar dirección",
|
||||
"menu_action_email_link": "Enlace por correo electrónico…",
|
||||
"menu_action_email_link": "Enviar enlace…",
|
||||
"search_for_something_with": "Buscar {search_term} con:",
|
||||
"search_settings": "Cambiar configuraciones de búsqueda",
|
||||
"section_info_option": "Información",
|
||||
"section_info_send_feedback": "Enviar comentarios",
|
||||
"section_info_privacy_notice": "Política de privacidad",
|
||||
"welcome_title": "Bienvenido a una nueva pestaña",
|
||||
"welcome_body": "Firefox usará este espacio para mostrar tus marcadores, artículos, videos y páginas más relevantes que se hayan visitado para poder volver más fácilmente.",
|
||||
"welcome_label": "Identificando tus destacados",
|
||||
"search_settings": "Cambiar ajustes de búsqueda",
|
||||
"section_info_option": "Info",
|
||||
"section_info_send_feedback": "Enviar comentario",
|
||||
"section_info_privacy_notice": "Aviso de privacidad",
|
||||
"welcome_title": "Bienvenido a la nueva pestaña",
|
||||
"welcome_body": "Firefox utilizará este espacio para mostrarte los marcadores, artículos y vídeos más relevantes y las páginas que has visitado recientemente, para que puedas acceder más rápido.",
|
||||
"welcome_label": "Identificar lo más destacado para ti",
|
||||
"time_label_less_than_minute": "<1m",
|
||||
"time_label_minute": "{number}m",
|
||||
"time_label_hour": "{number}h",
|
||||
"time_label_day": "{number}d",
|
||||
"prefs_topstories_description": "Contenido de alta calidad que de otra forma se perdería",
|
||||
"settings_pane_bookmarks_header": "Marcadores recientes",
|
||||
"settings_pane_bookmarks_body": "Tus marcadores recién creados en un solo lugar.",
|
||||
"settings_pane_bookmarks_body": "Tus marcadores recién creados, fácilmente accesibles.",
|
||||
"settings_pane_visit_again_header": "Visitar de nuevo",
|
||||
"settings_pane_visit_again_body": "Firefox te mostrará partes de tu historial de navegación que a lo mejor te gustaría recordar o volver a visitar.",
|
||||
"edit_topsites_button_label": "Personalizar la sección de tus sitios preferidos",
|
||||
"settings_pane_visit_again_body": "Firefox te mostrará partes de tu historial de navegación que te gustaría recordar o volver a visitar.",
|
||||
"edit_topsites_button_label": "Personalizar la sección de Sitios populares",
|
||||
"edit_topsites_showmore_button": "Mostrar más",
|
||||
"edit_topsites_showless_button": "Mostrar menos",
|
||||
"edit_topsites_done_button": "Listo",
|
||||
"edit_topsites_done_button": "Hecho",
|
||||
"edit_topsites_pin_button": "Fijar este sitio",
|
||||
"edit_topsites_unpin_button": "Despegar este sitio",
|
||||
"edit_topsites_dismiss_button": "Descartar este sitio",
|
||||
"edit_topsites_unpin_button": "Eliminar este sitio fijo",
|
||||
"edit_topsites_dismiss_button": "Olvidar este sitio",
|
||||
"edit_topsites_add_button": "Agregar",
|
||||
"pocket_feedback_header": "Lo mejor de la web, seleccionado por más 25 millones de personas.",
|
||||
"edit_topsites_add_button_tooltip": "Agregar sitio popular"
|
||||
"pocket_feedback_header": "Lo mejor de la web, confirmado por más de 25 millones de personas."
|
||||
};
|
||||
|
|
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
|
@ -35,7 +35,7 @@ window.gActivityStreamStrings = {
|
|||
"prefs_section_rows_option": "{num} rida;{num} rida",
|
||||
"prefs_search_header": "Veebiotsing",
|
||||
"prefs_topsites_description": "Enim külastatud saidid",
|
||||
"prefs_topstories_description": "Kõrge kvaliteediga sisu, mida sa ei pruugi ise märgata",
|
||||
"prefs_topstories_description2": "Great content from around the web, personalized for you",
|
||||
"prefs_topstories_show_sponsored_label": "Sponsitud lood ({provider})",
|
||||
"prefs_topstories_sponsored_learn_more": "Rohkem teavet",
|
||||
"prefs_highlights_description": "Valik saitidest, mille oled salvestanud või mida oled külastanud",
|
||||
|
@ -89,5 +89,6 @@ window.gActivityStreamStrings = {
|
|||
"section_menu_action_add_topsite": "Lisa top sait",
|
||||
"section_menu_action_move_up": "Liiguta üles",
|
||||
"section_menu_action_move_down": "Liiguta alla",
|
||||
"section_menu_action_privacy_notice": "Privaatsuspoliitika"
|
||||
"section_menu_action_privacy_notice": "Privaatsuspoliitika",
|
||||
"prefs_topstories_description": "Kõrge kvaliteediga sisu, mida sa ei pruugi ise märgata"
|
||||
};
|
||||
|
|
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
|
@ -35,7 +35,7 @@ window.gActivityStreamStrings = {
|
|||
"prefs_section_rows_option": "Errenkada bat;{num} errenkada",
|
||||
"prefs_search_header": "Web bilaketa",
|
||||
"prefs_topsites_description": "Gehien bisitatzen dituzun guneak",
|
||||
"prefs_topstories_description": "Bestela galduko zenukeen kalitatezko edukia",
|
||||
"prefs_topstories_description2": "Great content from around the web, personalized for you",
|
||||
"prefs_topstories_show_sponsored_label": "{provider} babeslearen istorioak",
|
||||
"prefs_topstories_sponsored_learn_more": "Argibide gehiago",
|
||||
"prefs_highlights_description": "Gorde edo bisitatu dituzun guneen hautapena",
|
||||
|
@ -89,5 +89,6 @@ window.gActivityStreamStrings = {
|
|||
"section_menu_action_add_topsite": "Gehitu maiz erabilitako gunea",
|
||||
"section_menu_action_move_up": "Eraman gora",
|
||||
"section_menu_action_move_down": "Eraman behera",
|
||||
"section_menu_action_privacy_notice": "Pribatutasun-oharra"
|
||||
"section_menu_action_privacy_notice": "Pribatutasun-oharra",
|
||||
"prefs_topstories_description": "Bestela galduko zenukeen kalitatezko edukia"
|
||||
};
|
||||
|
|
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
|
@ -35,7 +35,7 @@ window.gActivityStreamStrings = {
|
|||
"prefs_section_rows_option": "{num} row;{num} rows",
|
||||
"prefs_search_header": "Web Search",
|
||||
"prefs_topsites_description": "The sites you visit most",
|
||||
"prefs_topstories_description": "High-quality content you might otherwise miss",
|
||||
"prefs_topstories_description2": "Great content from around the web, personalized for you",
|
||||
"prefs_topstories_show_sponsored_label": "{provider} Sponsored Stories",
|
||||
"prefs_topstories_sponsored_learn_more": "Learn more",
|
||||
"prefs_highlights_description": "A selection of sites that you’ve saved or visited",
|
||||
|
|
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
|
@ -35,7 +35,7 @@ window.gActivityStreamStrings = {
|
|||
"prefs_section_rows_option": "{num} row;{num} rows",
|
||||
"prefs_search_header": "Web Search",
|
||||
"prefs_topsites_description": "The sites you visit most",
|
||||
"prefs_topstories_description": "High-quality content you might otherwise miss",
|
||||
"prefs_topstories_description2": "Great content from around the web, personalized for you",
|
||||
"prefs_topstories_show_sponsored_label": "{provider} Sponsored Stories",
|
||||
"prefs_topstories_sponsored_learn_more": "Learn more",
|
||||
"prefs_highlights_description": "A selection of sites that you’ve saved or visited",
|
||||
|
|
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
|
@ -35,7 +35,7 @@ window.gActivityStreamStrings = {
|
|||
"prefs_section_rows_option": "{num} rivi;{num} riviä",
|
||||
"prefs_search_header": "Verkkohaku",
|
||||
"prefs_topsites_description": "Useimmin vierailemasi sivustot",
|
||||
"prefs_topstories_description": "Laadukasta sisältöä, joista olisit muuten saattanut jäädä paitsi",
|
||||
"prefs_topstories_description2": "Great content from around the web, personalized for you",
|
||||
"prefs_topstories_show_sponsored_label": "{provider}-palvelun sponsoroidut jutut",
|
||||
"prefs_topstories_sponsored_learn_more": "Lue lisää",
|
||||
"prefs_highlights_description": "Valikoima sivustoja, joilla olet käynyt tai jotka olet tallentanut",
|
||||
|
@ -114,6 +114,7 @@ window.gActivityStreamStrings = {
|
|||
"time_label_minute": "{number} min",
|
||||
"time_label_hour": "{number} h",
|
||||
"time_label_day": "{number} pv",
|
||||
"prefs_topstories_description": "Laadukasta sisältöä, joista olisit muuten saattanut jäädä paitsi",
|
||||
"settings_pane_bookmarks_header": "Uusimmat kirjanmerkit",
|
||||
"settings_pane_bookmarks_body": "Uusimmat kirjanmerkkisi, yhdessä kätevässä paikassa.",
|
||||
"settings_pane_visit_again_header": "Käy toistekin",
|
||||
|
|
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
|
@ -30,12 +30,12 @@ window.gActivityStreamStrings = {
|
|||
"section_disclaimer_topstories_linktext": "Découvrez comment cela fonctionne.",
|
||||
"section_disclaimer_topstories_buttontext": "J’ai compris",
|
||||
"prefs_home_header": "Contenu de la page d’accueil de Firefox",
|
||||
"prefs_home_description": "Choisissez le contenu que vous souhaitez pour votre écran d’accueil de Firefox.",
|
||||
"prefs_home_description": "Choisissez le contenu que vous souhaitez pour la page d’accueil de Firefox.",
|
||||
"prefs_restore_defaults_button": "Configuration par défaut",
|
||||
"prefs_section_rows_option": "{num} ligne;{num} lignes",
|
||||
"prefs_search_header": "Recherche web",
|
||||
"prefs_topsites_description": "Les sites que vous visitez le plus",
|
||||
"prefs_topstories_description": "Contenu de grande qualité que vous pourriez rater",
|
||||
"prefs_topstories_description2": "Great content from around the web, personalized for you",
|
||||
"prefs_topstories_show_sponsored_label": "Articles sponsorisés par {provider}",
|
||||
"prefs_topstories_sponsored_learn_more": "En savoir plus",
|
||||
"prefs_highlights_description": "Une sélection de sites que vous avez sauvegardés ou visités",
|
||||
|
@ -89,5 +89,6 @@ window.gActivityStreamStrings = {
|
|||
"section_menu_action_add_topsite": "Ajouter un site populaire",
|
||||
"section_menu_action_move_up": "Déplacer vers le haut",
|
||||
"section_menu_action_move_down": "Déplacer vers le bas",
|
||||
"section_menu_action_privacy_notice": "Politique de confidentialité"
|
||||
"section_menu_action_privacy_notice": "Politique de confidentialité",
|
||||
"prefs_topstories_description": "Contenu de grande qualité que vous pourriez rater"
|
||||
};
|
||||
|
|
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
|
@ -35,7 +35,7 @@ window.gActivityStreamStrings = {
|
|||
"prefs_section_rows_option": "{num} rige;{num} rigen",
|
||||
"prefs_search_header": "Sykje op it web",
|
||||
"prefs_topsites_description": "De troch jo meast besochte websites",
|
||||
"prefs_topstories_description": "Ynhâld fan hege kwaliteit dy't jo oars mooglik misse",
|
||||
"prefs_topstories_description2": "Great content from around the web, personalized for you",
|
||||
"prefs_topstories_show_sponsored_label": "Sponsore ferhalen fan {provider}",
|
||||
"prefs_topstories_sponsored_learn_more": "Mear ynfo",
|
||||
"prefs_highlights_description": "In seleksje fan websites dy't jo bewarre of besocht hawwe",
|
||||
|
@ -114,6 +114,7 @@ window.gActivityStreamStrings = {
|
|||
"time_label_minute": "{number} m",
|
||||
"time_label_hour": "{number} o",
|
||||
"time_label_day": "{number} d",
|
||||
"prefs_topstories_description": "Ynhâld fan hege kwaliteit dy't jo oars mooglik misse",
|
||||
"settings_pane_bookmarks_header": "Resinte blêdwizers",
|
||||
"settings_pane_bookmarks_body": "Jo koartlyn oanmakke blêdwizers op ien handich plak.",
|
||||
"settings_pane_visit_again_header": "Nochris besykje",
|
||||
|
|
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
|
@ -35,7 +35,7 @@ window.gActivityStreamStrings = {
|
|||
"prefs_section_rows_option": "{num} row;{num} rows",
|
||||
"prefs_search_header": "Web Search",
|
||||
"prefs_topsites_description": "The sites you visit most",
|
||||
"prefs_topstories_description": "High-quality content you might otherwise miss",
|
||||
"prefs_topstories_description2": "Great content from around the web, personalized for you",
|
||||
"prefs_topstories_show_sponsored_label": "{provider} Sponsored Stories",
|
||||
"prefs_topstories_sponsored_learn_more": "Learn more",
|
||||
"prefs_highlights_description": "A selection of sites that you’ve saved or visited",
|
||||
|
|
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
|
@ -35,7 +35,7 @@ window.gActivityStreamStrings = {
|
|||
"prefs_section_rows_option": "{num} ràgh;{num} ràgh;{num} ràghan;{num} ràgh",
|
||||
"prefs_search_header": "Lorg air an lìon",
|
||||
"prefs_topsites_description": "Na làraichean air an tadhail thu as trice",
|
||||
"prefs_topstories_description": "Brod susbaint a dh’fhairtlicheadh ort",
|
||||
"prefs_topstories_description2": "Great content from around the web, personalized for you",
|
||||
"prefs_topstories_show_sponsored_label": "Sgeulachdan sponsairichte {provider}",
|
||||
"prefs_topstories_sponsored_learn_more": "Barrachd fiosrachaidh",
|
||||
"prefs_highlights_description": "Taghadh de làraichean a shàbhail thu no air an do thadhail thu",
|
||||
|
@ -114,6 +114,7 @@ window.gActivityStreamStrings = {
|
|||
"time_label_minute": "{number}m",
|
||||
"time_label_hour": "{number}u",
|
||||
"time_label_day": "{number}l",
|
||||
"prefs_topstories_description": "Brod susbaint a dh’fhairtlicheadh ort",
|
||||
"settings_pane_bookmarks_header": "Comharran-lìn o chionn goirid",
|
||||
"settings_pane_bookmarks_body": "Na comharran-lìn ùra agad san aon àite ghoireasach.",
|
||||
"settings_pane_visit_again_header": "Tadhail a-rithist",
|
||||
|
|
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
|
@ -33,12 +33,12 @@ window.gActivityStreamStrings = {
|
|||
"prefs_home_description": "Escolla o contido que quere na pantalla de inicio de Firefox.",
|
||||
"prefs_restore_defaults_button": "Restaurar a configuración predeterminada",
|
||||
"prefs_section_rows_option": "{num} fila;{num} filas",
|
||||
"prefs_search_header": "Web Search",
|
||||
"prefs_topsites_description": "The sites you visit most",
|
||||
"prefs_topstories_description": "High-quality content you might otherwise miss",
|
||||
"prefs_topstories_show_sponsored_label": "{provider} Sponsored Stories",
|
||||
"prefs_search_header": "Busca na web",
|
||||
"prefs_topsites_description": "Os sitios que máis visita",
|
||||
"prefs_topstories_description2": "Great content from around the web, personalized for you",
|
||||
"prefs_topstories_show_sponsored_label": "Artigos patrocinados por {provider}",
|
||||
"prefs_topstories_sponsored_learn_more": "Máis información",
|
||||
"prefs_highlights_description": "A selection of sites that you’ve saved or visited",
|
||||
"prefs_highlights_description": "Unha selección de sitios que gardou ou visitou",
|
||||
"prefs_snippets_description": "Actualizacións de Mozilla e Firefox",
|
||||
"settings_pane_button_label": "Personalice a páxina de nova lapela",
|
||||
"settings_pane_header": "Preferencias de nova lapela",
|
||||
|
@ -49,11 +49,11 @@ window.gActivityStreamStrings = {
|
|||
"settings_pane_topsites_body": "Acceda aos sitios web que máis visita.",
|
||||
"settings_pane_topsites_options_showmore": "Amosar dúas filas",
|
||||
"settings_pane_highlights_header": "Destacados",
|
||||
"settings_pane_highlights_body2": "Find your way back to interesting things you’ve recently visited or bookmarked.",
|
||||
"settings_pane_highlights_body2": "Atope algunhas páxinas interesantes que vostede xa visitou ou marcou recentemente.",
|
||||
"settings_pane_highlights_options_bookmarks": "Marcadores",
|
||||
"settings_pane_highlights_options_visited": "Sitios visitados",
|
||||
"settings_pane_snippets_header": "Snippets",
|
||||
"settings_pane_snippets_body": "Read short and sweet updates from Mozilla about Firefox, internet culture, and the occasional random meme.",
|
||||
"settings_pane_snippets_body": "Lea noticias curtas de Mozilla sobre o Firefox, a cultura de Internet, e ocasionalmente, algún meme.",
|
||||
"settings_pane_done_button": "Feito",
|
||||
"settings_pane_topstories_options_sponsored": "Amosar historias patrocinadas",
|
||||
"edit_topsites_button_text": "Editar",
|
||||
|
@ -66,22 +66,22 @@ window.gActivityStreamStrings = {
|
|||
"topsites_form_image_url_label": "URL da imaxe personalizada",
|
||||
"topsites_form_url_placeholder": "Escribir ou pegar un URL",
|
||||
"topsites_form_use_image_link": "Usar unha imaxe personalizada…",
|
||||
"topsites_form_preview_button": "Preview",
|
||||
"topsites_form_preview_button": "Previsualizar",
|
||||
"topsites_form_add_button": "Engadir",
|
||||
"topsites_form_save_button": "Gardar",
|
||||
"topsites_form_cancel_button": "Cancelar",
|
||||
"topsites_form_url_validation": "Requírese un URL válido",
|
||||
"topsites_form_image_validation": "Image failed to load. Try a different URL.",
|
||||
"topsites_form_image_validation": "Produciuse un fallo ao cargar a imaxe. Probe un URL diferente.",
|
||||
"pocket_read_more": "Temas populares:",
|
||||
"pocket_read_even_more": "Ver máis historias",
|
||||
"pocket_description": "Discover high-quality content you might otherwise miss, with help from Pocket, now part of Mozilla.",
|
||||
"pocket_description": "Grazas a Pocket, que agora forma parte de Mozilla, poderá descubrir contido de gran calidade que doutra forma se perdería.",
|
||||
"highlights_empty_state": "Start browsing, and we’ll show some of the great articles, videos, and other pages you’ve recently visited or bookmarked here.",
|
||||
"topstories_empty_state": "You’ve caught up. Check back later for more top stories from {provider}. Can’t wait? Select a popular topic to find more great stories from around the web.",
|
||||
"manual_migration_explanation2": "Try Firefox with the bookmarks, history and passwords from another browser.",
|
||||
"manual_migration_explanation2": "Probe Firefox cos marcadores, historial e contrasinais doutro navegador.",
|
||||
"manual_migration_cancel_button": "Non, grazas",
|
||||
"manual_migration_import_button": "Importar agora",
|
||||
"error_fallback_default_info": "Oops, something went wrong loading this content.",
|
||||
"error_fallback_default_refresh_suggestion": "Refresh page to try again.",
|
||||
"error_fallback_default_info": "Vaites, produciuse un erro ao cargar este contido.",
|
||||
"error_fallback_default_refresh_suggestion": "Actualice a páxina para tentalo de novo.",
|
||||
"section_menu_action_remove_section": "Retirar sección",
|
||||
"section_menu_action_collapse_section": "Contraer sección",
|
||||
"section_menu_action_expand_section": "Expandir sección",
|
||||
|
@ -89,5 +89,6 @@ window.gActivityStreamStrings = {
|
|||
"section_menu_action_add_topsite": "Engadir sitio favorito",
|
||||
"section_menu_action_move_up": "Subir",
|
||||
"section_menu_action_move_down": "Baixar",
|
||||
"section_menu_action_privacy_notice": "Política de privacidade"
|
||||
"section_menu_action_privacy_notice": "Política de privacidade",
|
||||
"prefs_topstories_description": "Contido de gran calidade que doutra forma se perdería"
|
||||
};
|
||||
|
|
Некоторые файлы не были показаны из-за слишком большого количества измененных файлов Показать больше
Загрузка…
Ссылка в новой задаче