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:
Ed Lee 2018-03-29 11:21:54 -07:00
Родитель 1523ce5000
Коммит 0329656aec
233 изменённых файлов: 3437 добавлений и 1464 удалений

Просмотреть файл

@ -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 youve 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 youve 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 youve 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 youve 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 youve 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 youve 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 youve 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 youve 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 dont 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 youve 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 youve 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 dont 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 youve 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 youve 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 youve 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": "Jai compris",
"prefs_home_header": "Contenu de la page daccueil de Firefox",
"prefs_home_description": "Choisissez le contenu que vous souhaitez pour votre écran daccueil de Firefox.",
"prefs_home_description": "Choisissez le contenu que vous souhaitez pour la page daccueil 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 youve 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 dhfhairtlicheadh 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 dhfhairtlicheadh 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 youve 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 youve 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 well show some of the great articles, videos, and other pages youve recently visited or bookmarked here.",
"topstories_empty_state": "Youve caught up. Check back later for more top stories from {provider}. Cant 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"
};

Некоторые файлы не были показаны из-за слишком большого количества измененных файлов Показать больше