Bug 1463943 - Add compact highlights, compress images and bug fixes to Activity Stream. r=k88hudson
MozReview-Commit-ID: LKbXq4nHBVS --HG-- extra : rebase_source : 127374ca6077f547ad6ced91d580399c2e6a2670
|
@ -30,8 +30,15 @@ let waitingForBrowserReady = true;
|
|||
XPCOMUtils.defineLazyModuleGetter(this, "ActivityStream",
|
||||
"resource://activity-stream/lib/ActivityStream.jsm", null, null, () => {
|
||||
// Helper to fetch a resource directory listing and call back with each item
|
||||
const processListing = async (uri, cb) => (await (await fetch(uri)).text())
|
||||
.split("\n").slice(2).forEach(line => cb(line.split(" ").slice(1)));
|
||||
const processListing = async (uri, cb) => {
|
||||
try {
|
||||
(await (await fetch(uri)).text())
|
||||
.split("\n").slice(2).forEach(line => cb(line.split(" ").slice(1)));
|
||||
} catch (e) {
|
||||
// Silently ignore listings that fail to load
|
||||
// probably because the resource: has been unloaded
|
||||
}
|
||||
};
|
||||
|
||||
// Look for modules one level deeper than the top resource URI
|
||||
processListing(RESOURCE_BASE, ([directory, , , type]) => {
|
||||
|
|
|
@ -25,6 +25,8 @@ this.globalImportContext = globalImportContext;
|
|||
// }
|
||||
const actionTypes = {};
|
||||
for (const type of [
|
||||
"ADDONS_INFO_REQUEST",
|
||||
"ADDONS_INFO_RESPONSE",
|
||||
"ARCHIVE_FROM_POCKET",
|
||||
"AS_ROUTER_TELEMETRY_USER_EVENT",
|
||||
"BLOCK_URL",
|
||||
|
@ -127,7 +129,7 @@ for (const type of [
|
|||
// Helper function for creating routed actions between content and main
|
||||
// Not intended to be used by consumers
|
||||
function _RouteMessage(action, options) {
|
||||
const meta = action.meta ? Object.assign({}, action.meta) : {};
|
||||
const meta = action.meta ? {...action.meta} : {};
|
||||
if (!options || !options.from || !options.to) {
|
||||
throw new Error("Routed Messages must have options as the second parameter, and must at least include a .from and .to property.");
|
||||
}
|
||||
|
@ -140,7 +142,7 @@ function _RouteMessage(action, options) {
|
|||
delete meta[o];
|
||||
}
|
||||
});
|
||||
return Object.assign({}, action, {meta});
|
||||
return {...action, meta};
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -167,8 +167,8 @@ body {
|
|||
background-image: url("../data/content/assets/glyph-edit-16.svg"); }
|
||||
.icon.icon-pocket {
|
||||
background-image: url("../data/content/assets/glyph-pocket-16.svg"); }
|
||||
.icon.icon-historyItem {
|
||||
background-image: url("../data/content/assets/glyph-historyItem-16.svg"); }
|
||||
.icon.icon-history-item {
|
||||
background-image: url("chrome://browser/skin/history.svg"); }
|
||||
.icon.icon-trending {
|
||||
background-image: url("../data/content/assets/glyph-trending-16.svg");
|
||||
transform: translateY(2px); }
|
||||
|
@ -191,9 +191,6 @@ body {
|
|||
background-image: url("chrome://browser/skin/edit-copy.svg"); }
|
||||
.icon.icon-open-file {
|
||||
background-image: url("../data/content/assets/glyph-open-file-16.svg"); }
|
||||
.icon.icon-download-folder {
|
||||
background-image: url("../data/content/assets/glyph-download-icon.svg");
|
||||
background-size: 100%; }
|
||||
.icon.icon-webextension {
|
||||
background-image: url("../data/content/assets/glyph-webextension-16.svg"); }
|
||||
.icon.icon-highlights {
|
||||
|
@ -775,9 +772,6 @@ main {
|
|||
margin-inline-start: auto;
|
||||
offset-inline-end: 0;
|
||||
offset-inline-start: auto; } }
|
||||
@media (min-width: 1122px) {
|
||||
.sections-list .section-list {
|
||||
grid-template-columns: repeat(auto-fit, 309px); } }
|
||||
|
||||
.sections-list .section-empty-state {
|
||||
border: 1px solid var(--newtab-border-secondary-color);
|
||||
|
@ -807,6 +801,10 @@ main {
|
|||
.sections-list .section-empty-state {
|
||||
height: 370px; } }
|
||||
|
||||
@media (min-width: 1122px) {
|
||||
.sections-list .normal-cards .section-list {
|
||||
grid-template-columns: repeat(auto-fit, 309px); } }
|
||||
|
||||
.activity-stream.welcome {
|
||||
overflow: hidden; }
|
||||
|
||||
|
@ -1250,6 +1248,9 @@ main {
|
|||
background: transparent; }
|
||||
.card-outer.placeholder .card {
|
||||
box-shadow: inset 0 0 0 1px var(--newtab-inner-box-shadow-color); }
|
||||
.card-outer.placeholder .card-preview-image-outer,
|
||||
.card-outer.placeholder .card-context {
|
||||
display: none; }
|
||||
.card-outer .card {
|
||||
border-radius: 3px;
|
||||
box-shadow: var(--newtab-card-shadow);
|
||||
|
@ -1280,6 +1281,7 @@ main {
|
|||
.card-outer:-moz-any(:hover, :focus, .active):not(.placeholder) .card-host-name.alternate {
|
||||
display: block; }
|
||||
.card-outer .card-preview-image-outer {
|
||||
background-color: #D7D7DB;
|
||||
border-radius: 3px 3px 0 0;
|
||||
height: 122px;
|
||||
overflow: hidden;
|
||||
|
@ -1302,21 +1304,13 @@ main {
|
|||
opacity: 1; }
|
||||
.card-outer .card-details {
|
||||
padding: 15px 16px 12px; }
|
||||
.card-outer .card-details.no-image {
|
||||
padding-top: 16px; }
|
||||
.card-outer .card-text {
|
||||
max-height: 78px;
|
||||
overflow: hidden; }
|
||||
.card-outer .card-text.no-image {
|
||||
max-height: 192px; }
|
||||
.card-outer .card-text.no-host-name, .card-outer .card-text.no-context {
|
||||
max-height: 97px; }
|
||||
.card-outer .card-text.no-image.no-host-name, .card-outer .card-text.no-image.no-context {
|
||||
max-height: 211px; }
|
||||
.card-outer .card-text.no-host-name.no-context {
|
||||
max-height: 116px; }
|
||||
.card-outer .card-text.no-image.no-host-name.no-context {
|
||||
max-height: 230px; }
|
||||
.card-outer .card-text:not(.no-description) .card-title {
|
||||
max-height: 57px;
|
||||
overflow: hidden; }
|
||||
|
@ -1329,13 +1323,6 @@ main {
|
|||
text-transform: uppercase; }
|
||||
.card-outer .card-host-name.alternate {
|
||||
display: none; }
|
||||
.card-outer .card-download-icon {
|
||||
float: inline-end;
|
||||
margin-inline-start: 15px;
|
||||
margin-top: 2px; }
|
||||
.card-outer .card-download-icon.icon-download-folder {
|
||||
height: 36px;
|
||||
width: 36px; }
|
||||
.card-outer .card-title {
|
||||
font-size: 14px;
|
||||
font-weight: 600;
|
||||
|
@ -1367,33 +1354,87 @@ main {
|
|||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap; }
|
||||
@media (min-width: 1122px) {
|
||||
.card-outer {
|
||||
height: 370px; }
|
||||
.card-outer .card-preview-image-outer {
|
||||
height: 155px; }
|
||||
.card-outer .card-details {
|
||||
padding: 13px 16px 12px; }
|
||||
.card-outer .card-text {
|
||||
max-height: 140px; }
|
||||
.card-outer .card-host-name {
|
||||
font-size: 12px;
|
||||
padding-bottom: 5px; }
|
||||
.card-outer .card-download-icon.icon-download-folder {
|
||||
height: 54px;
|
||||
width: 54px; }
|
||||
.card-outer .card-title {
|
||||
font-size: 17px;
|
||||
line-height: 23px;
|
||||
margin-bottom: 0; }
|
||||
.card-outer .card-text:not(.no-description) .card-title {
|
||||
max-height: 69px; }
|
||||
.card-outer .card-description {
|
||||
font-size: 15px;
|
||||
line-height: 23px; }
|
||||
.card-outer .card-context {
|
||||
bottom: 4px;
|
||||
font-size: 14px; } }
|
||||
|
||||
@media (min-width: 1122px) {
|
||||
.normal-cards .card-outer {
|
||||
height: 370px; }
|
||||
.normal-cards .card-outer .card-preview-image-outer {
|
||||
height: 155px; }
|
||||
.normal-cards .card-outer .card-details {
|
||||
padding: 13px 16px 12px; }
|
||||
.normal-cards .card-outer .card-text {
|
||||
max-height: 140px; }
|
||||
.normal-cards .card-outer .card-host-name {
|
||||
font-size: 12px;
|
||||
padding-bottom: 5px; }
|
||||
.normal-cards .card-outer .card-title {
|
||||
font-size: 17px;
|
||||
line-height: 23px;
|
||||
margin-bottom: 0; }
|
||||
.normal-cards .card-outer .card-text:not(.no-description) .card-title {
|
||||
max-height: 69px; }
|
||||
.normal-cards .card-outer .card-description {
|
||||
font-size: 15px;
|
||||
line-height: 23px; }
|
||||
.normal-cards .card-outer .card-context {
|
||||
bottom: 4px;
|
||||
font-size: 14px; } }
|
||||
|
||||
.compact-cards .card-outer {
|
||||
height: 160px; }
|
||||
.compact-cards .card-outer .card-preview-image-outer {
|
||||
height: 108px; }
|
||||
.compact-cards .card-outer .card-details {
|
||||
padding: 12px 16px; }
|
||||
.compact-cards .card-outer .card-host-name {
|
||||
line-height: 10px; }
|
||||
.compact-cards .card-outer .card-text .card-title,
|
||||
.compact-cards .card-outer .card-text:not(.no-description) .card-title {
|
||||
font-size: 10px;
|
||||
line-height: 12px;
|
||||
max-height: 12px;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap; }
|
||||
.compact-cards .card-outer .card-description {
|
||||
display: none; }
|
||||
.compact-cards .card-outer .card-context {
|
||||
background-color: var(--newtab-card-background-color);
|
||||
border-radius: 16px;
|
||||
height: 32px;
|
||||
width: 32px;
|
||||
padding: 8px;
|
||||
top: 92px;
|
||||
left: auto;
|
||||
offset-inline-end: 12px; }
|
||||
.compact-cards .card-outer .card-context::after {
|
||||
border: 1px solid var(--newtab-card-hairline-color);
|
||||
border-bottom: 0;
|
||||
border-radius: 16px 16px 0 0;
|
||||
content: '';
|
||||
position: absolute;
|
||||
height: 50%;
|
||||
width: 100%;
|
||||
top: 0;
|
||||
left: 0; }
|
||||
.compact-cards .card-outer .card-context .card-context-icon {
|
||||
margin-inline-end: 0;
|
||||
height: 16px;
|
||||
width: 16px; }
|
||||
.compact-cards .card-outer .card-context .card-context-icon.icon-bookmark-added {
|
||||
fill: #0A84FF; }
|
||||
.compact-cards .card-outer .card-context .card-context-icon.icon-download {
|
||||
fill: #12BC00; }
|
||||
.compact-cards .card-outer .card-context .card-context-icon.icon-history-item {
|
||||
fill: #B1B1B3; }
|
||||
.compact-cards .card-outer .card-context .card-context-icon.icon-pocket {
|
||||
fill: #D70022; }
|
||||
.compact-cards .card-outer .card-context .card-context-label {
|
||||
display: none; }
|
||||
|
||||
@media not all and (min-width: 1122px) {
|
||||
.compact-cards .hide-for-narrow {
|
||||
display: none; } }
|
||||
|
||||
.manual-migration-container {
|
||||
color: var(--newtab-text-conditional-color);
|
||||
|
|
|
@ -170,8 +170,8 @@ body {
|
|||
background-image: url("../data/content/assets/glyph-edit-16.svg"); }
|
||||
.icon.icon-pocket {
|
||||
background-image: url("../data/content/assets/glyph-pocket-16.svg"); }
|
||||
.icon.icon-historyItem {
|
||||
background-image: url("../data/content/assets/glyph-historyItem-16.svg"); }
|
||||
.icon.icon-history-item {
|
||||
background-image: url("chrome://browser/skin/history.svg"); }
|
||||
.icon.icon-trending {
|
||||
background-image: url("../data/content/assets/glyph-trending-16.svg");
|
||||
transform: translateY(2px); }
|
||||
|
@ -194,9 +194,6 @@ body {
|
|||
background-image: url("chrome://browser/skin/edit-copy.svg"); }
|
||||
.icon.icon-open-file {
|
||||
background-image: url("../data/content/assets/glyph-open-file-16.svg"); }
|
||||
.icon.icon-download-folder {
|
||||
background-image: url("../data/content/assets/glyph-download-icon.svg");
|
||||
background-size: 100%; }
|
||||
.icon.icon-webextension {
|
||||
background-image: url("../data/content/assets/glyph-webextension-16.svg"); }
|
||||
.icon.icon-highlights {
|
||||
|
@ -778,9 +775,6 @@ main {
|
|||
margin-inline-start: auto;
|
||||
offset-inline-end: 0;
|
||||
offset-inline-start: auto; } }
|
||||
@media (min-width: 1122px) {
|
||||
.sections-list .section-list {
|
||||
grid-template-columns: repeat(auto-fit, 309px); } }
|
||||
|
||||
.sections-list .section-empty-state {
|
||||
border: 1px solid var(--newtab-border-secondary-color);
|
||||
|
@ -810,6 +804,10 @@ main {
|
|||
.sections-list .section-empty-state {
|
||||
height: 370px; } }
|
||||
|
||||
@media (min-width: 1122px) {
|
||||
.sections-list .normal-cards .section-list {
|
||||
grid-template-columns: repeat(auto-fit, 309px); } }
|
||||
|
||||
.activity-stream.welcome {
|
||||
overflow: hidden; }
|
||||
|
||||
|
@ -1253,6 +1251,9 @@ main {
|
|||
background: transparent; }
|
||||
.card-outer.placeholder .card {
|
||||
box-shadow: inset 0 0 0 1px var(--newtab-inner-box-shadow-color); }
|
||||
.card-outer.placeholder .card-preview-image-outer,
|
||||
.card-outer.placeholder .card-context {
|
||||
display: none; }
|
||||
.card-outer .card {
|
||||
border-radius: 3px;
|
||||
box-shadow: var(--newtab-card-shadow);
|
||||
|
@ -1283,6 +1284,7 @@ main {
|
|||
.card-outer:-moz-any(:hover, :focus, .active):not(.placeholder) .card-host-name.alternate {
|
||||
display: block; }
|
||||
.card-outer .card-preview-image-outer {
|
||||
background-color: #D7D7DB;
|
||||
border-radius: 3px 3px 0 0;
|
||||
height: 122px;
|
||||
overflow: hidden;
|
||||
|
@ -1305,21 +1307,13 @@ main {
|
|||
opacity: 1; }
|
||||
.card-outer .card-details {
|
||||
padding: 15px 16px 12px; }
|
||||
.card-outer .card-details.no-image {
|
||||
padding-top: 16px; }
|
||||
.card-outer .card-text {
|
||||
max-height: 78px;
|
||||
overflow: hidden; }
|
||||
.card-outer .card-text.no-image {
|
||||
max-height: 192px; }
|
||||
.card-outer .card-text.no-host-name, .card-outer .card-text.no-context {
|
||||
max-height: 97px; }
|
||||
.card-outer .card-text.no-image.no-host-name, .card-outer .card-text.no-image.no-context {
|
||||
max-height: 211px; }
|
||||
.card-outer .card-text.no-host-name.no-context {
|
||||
max-height: 116px; }
|
||||
.card-outer .card-text.no-image.no-host-name.no-context {
|
||||
max-height: 230px; }
|
||||
.card-outer .card-text:not(.no-description) .card-title {
|
||||
max-height: 57px;
|
||||
overflow: hidden; }
|
||||
|
@ -1332,13 +1326,6 @@ main {
|
|||
text-transform: uppercase; }
|
||||
.card-outer .card-host-name.alternate {
|
||||
display: none; }
|
||||
.card-outer .card-download-icon {
|
||||
float: inline-end;
|
||||
margin-inline-start: 15px;
|
||||
margin-top: 2px; }
|
||||
.card-outer .card-download-icon.icon-download-folder {
|
||||
height: 36px;
|
||||
width: 36px; }
|
||||
.card-outer .card-title {
|
||||
font-size: 14px;
|
||||
font-weight: 600;
|
||||
|
@ -1370,33 +1357,87 @@ main {
|
|||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap; }
|
||||
@media (min-width: 1122px) {
|
||||
.card-outer {
|
||||
height: 370px; }
|
||||
.card-outer .card-preview-image-outer {
|
||||
height: 155px; }
|
||||
.card-outer .card-details {
|
||||
padding: 13px 16px 12px; }
|
||||
.card-outer .card-text {
|
||||
max-height: 140px; }
|
||||
.card-outer .card-host-name {
|
||||
font-size: 12px;
|
||||
padding-bottom: 5px; }
|
||||
.card-outer .card-download-icon.icon-download-folder {
|
||||
height: 54px;
|
||||
width: 54px; }
|
||||
.card-outer .card-title {
|
||||
font-size: 17px;
|
||||
line-height: 23px;
|
||||
margin-bottom: 0; }
|
||||
.card-outer .card-text:not(.no-description) .card-title {
|
||||
max-height: 69px; }
|
||||
.card-outer .card-description {
|
||||
font-size: 15px;
|
||||
line-height: 23px; }
|
||||
.card-outer .card-context {
|
||||
bottom: 4px;
|
||||
font-size: 14px; } }
|
||||
|
||||
@media (min-width: 1122px) {
|
||||
.normal-cards .card-outer {
|
||||
height: 370px; }
|
||||
.normal-cards .card-outer .card-preview-image-outer {
|
||||
height: 155px; }
|
||||
.normal-cards .card-outer .card-details {
|
||||
padding: 13px 16px 12px; }
|
||||
.normal-cards .card-outer .card-text {
|
||||
max-height: 140px; }
|
||||
.normal-cards .card-outer .card-host-name {
|
||||
font-size: 12px;
|
||||
padding-bottom: 5px; }
|
||||
.normal-cards .card-outer .card-title {
|
||||
font-size: 17px;
|
||||
line-height: 23px;
|
||||
margin-bottom: 0; }
|
||||
.normal-cards .card-outer .card-text:not(.no-description) .card-title {
|
||||
max-height: 69px; }
|
||||
.normal-cards .card-outer .card-description {
|
||||
font-size: 15px;
|
||||
line-height: 23px; }
|
||||
.normal-cards .card-outer .card-context {
|
||||
bottom: 4px;
|
||||
font-size: 14px; } }
|
||||
|
||||
.compact-cards .card-outer {
|
||||
height: 160px; }
|
||||
.compact-cards .card-outer .card-preview-image-outer {
|
||||
height: 108px; }
|
||||
.compact-cards .card-outer .card-details {
|
||||
padding: 12px 16px; }
|
||||
.compact-cards .card-outer .card-host-name {
|
||||
line-height: 10px; }
|
||||
.compact-cards .card-outer .card-text .card-title,
|
||||
.compact-cards .card-outer .card-text:not(.no-description) .card-title {
|
||||
font-size: 10px;
|
||||
line-height: 12px;
|
||||
max-height: 12px;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap; }
|
||||
.compact-cards .card-outer .card-description {
|
||||
display: none; }
|
||||
.compact-cards .card-outer .card-context {
|
||||
background-color: var(--newtab-card-background-color);
|
||||
border-radius: 16px;
|
||||
height: 32px;
|
||||
width: 32px;
|
||||
padding: 8px;
|
||||
top: 92px;
|
||||
left: auto;
|
||||
offset-inline-end: 12px; }
|
||||
.compact-cards .card-outer .card-context::after {
|
||||
border: 1px solid var(--newtab-card-hairline-color);
|
||||
border-bottom: 0;
|
||||
border-radius: 16px 16px 0 0;
|
||||
content: '';
|
||||
position: absolute;
|
||||
height: 50%;
|
||||
width: 100%;
|
||||
top: 0;
|
||||
left: 0; }
|
||||
.compact-cards .card-outer .card-context .card-context-icon {
|
||||
margin-inline-end: 0;
|
||||
height: 16px;
|
||||
width: 16px; }
|
||||
.compact-cards .card-outer .card-context .card-context-icon.icon-bookmark-added {
|
||||
fill: #0A84FF; }
|
||||
.compact-cards .card-outer .card-context .card-context-icon.icon-download {
|
||||
fill: #12BC00; }
|
||||
.compact-cards .card-outer .card-context .card-context-icon.icon-history-item {
|
||||
fill: #B1B1B3; }
|
||||
.compact-cards .card-outer .card-context .card-context-icon.icon-pocket {
|
||||
fill: #D70022; }
|
||||
.compact-cards .card-outer .card-context .card-context-label {
|
||||
display: none; }
|
||||
|
||||
@media not all and (min-width: 1122px) {
|
||||
.compact-cards .hide-for-narrow {
|
||||
display: none; } }
|
||||
|
||||
.manual-migration-container {
|
||||
color: var(--newtab-text-conditional-color);
|
||||
|
|
|
@ -167,8 +167,8 @@ body {
|
|||
background-image: url("../data/content/assets/glyph-edit-16.svg"); }
|
||||
.icon.icon-pocket {
|
||||
background-image: url("../data/content/assets/glyph-pocket-16.svg"); }
|
||||
.icon.icon-historyItem {
|
||||
background-image: url("../data/content/assets/glyph-historyItem-16.svg"); }
|
||||
.icon.icon-history-item {
|
||||
background-image: url("chrome://browser/skin/history.svg"); }
|
||||
.icon.icon-trending {
|
||||
background-image: url("../data/content/assets/glyph-trending-16.svg");
|
||||
transform: translateY(2px); }
|
||||
|
@ -191,9 +191,6 @@ body {
|
|||
background-image: url("chrome://browser/skin/edit-copy.svg"); }
|
||||
.icon.icon-open-file {
|
||||
background-image: url("../data/content/assets/glyph-open-file-16.svg"); }
|
||||
.icon.icon-download-folder {
|
||||
background-image: url("../data/content/assets/glyph-download-icon.svg");
|
||||
background-size: 100%; }
|
||||
.icon.icon-webextension {
|
||||
background-image: url("../data/content/assets/glyph-webextension-16.svg"); }
|
||||
.icon.icon-highlights {
|
||||
|
@ -775,9 +772,6 @@ main {
|
|||
margin-inline-start: auto;
|
||||
offset-inline-end: 0;
|
||||
offset-inline-start: auto; } }
|
||||
@media (min-width: 1122px) {
|
||||
.sections-list .section-list {
|
||||
grid-template-columns: repeat(auto-fit, 309px); } }
|
||||
|
||||
.sections-list .section-empty-state {
|
||||
border: 1px solid var(--newtab-border-secondary-color);
|
||||
|
@ -807,6 +801,10 @@ main {
|
|||
.sections-list .section-empty-state {
|
||||
height: 370px; } }
|
||||
|
||||
@media (min-width: 1122px) {
|
||||
.sections-list .normal-cards .section-list {
|
||||
grid-template-columns: repeat(auto-fit, 309px); } }
|
||||
|
||||
.activity-stream.welcome {
|
||||
overflow: hidden; }
|
||||
|
||||
|
@ -1250,6 +1248,9 @@ main {
|
|||
background: transparent; }
|
||||
.card-outer.placeholder .card {
|
||||
box-shadow: inset 0 0 0 1px var(--newtab-inner-box-shadow-color); }
|
||||
.card-outer.placeholder .card-preview-image-outer,
|
||||
.card-outer.placeholder .card-context {
|
||||
display: none; }
|
||||
.card-outer .card {
|
||||
border-radius: 3px;
|
||||
box-shadow: var(--newtab-card-shadow);
|
||||
|
@ -1280,6 +1281,7 @@ main {
|
|||
.card-outer:-moz-any(:hover, :focus, .active):not(.placeholder) .card-host-name.alternate {
|
||||
display: block; }
|
||||
.card-outer .card-preview-image-outer {
|
||||
background-color: #D7D7DB;
|
||||
border-radius: 3px 3px 0 0;
|
||||
height: 122px;
|
||||
overflow: hidden;
|
||||
|
@ -1302,21 +1304,13 @@ main {
|
|||
opacity: 1; }
|
||||
.card-outer .card-details {
|
||||
padding: 15px 16px 12px; }
|
||||
.card-outer .card-details.no-image {
|
||||
padding-top: 16px; }
|
||||
.card-outer .card-text {
|
||||
max-height: 78px;
|
||||
overflow: hidden; }
|
||||
.card-outer .card-text.no-image {
|
||||
max-height: 192px; }
|
||||
.card-outer .card-text.no-host-name, .card-outer .card-text.no-context {
|
||||
max-height: 97px; }
|
||||
.card-outer .card-text.no-image.no-host-name, .card-outer .card-text.no-image.no-context {
|
||||
max-height: 211px; }
|
||||
.card-outer .card-text.no-host-name.no-context {
|
||||
max-height: 116px; }
|
||||
.card-outer .card-text.no-image.no-host-name.no-context {
|
||||
max-height: 230px; }
|
||||
.card-outer .card-text:not(.no-description) .card-title {
|
||||
max-height: 57px;
|
||||
overflow: hidden; }
|
||||
|
@ -1329,13 +1323,6 @@ main {
|
|||
text-transform: uppercase; }
|
||||
.card-outer .card-host-name.alternate {
|
||||
display: none; }
|
||||
.card-outer .card-download-icon {
|
||||
float: inline-end;
|
||||
margin-inline-start: 15px;
|
||||
margin-top: 2px; }
|
||||
.card-outer .card-download-icon.icon-download-folder {
|
||||
height: 36px;
|
||||
width: 36px; }
|
||||
.card-outer .card-title {
|
||||
font-size: 14px;
|
||||
font-weight: 600;
|
||||
|
@ -1367,33 +1354,87 @@ main {
|
|||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap; }
|
||||
@media (min-width: 1122px) {
|
||||
.card-outer {
|
||||
height: 370px; }
|
||||
.card-outer .card-preview-image-outer {
|
||||
height: 155px; }
|
||||
.card-outer .card-details {
|
||||
padding: 13px 16px 12px; }
|
||||
.card-outer .card-text {
|
||||
max-height: 140px; }
|
||||
.card-outer .card-host-name {
|
||||
font-size: 12px;
|
||||
padding-bottom: 5px; }
|
||||
.card-outer .card-download-icon.icon-download-folder {
|
||||
height: 54px;
|
||||
width: 54px; }
|
||||
.card-outer .card-title {
|
||||
font-size: 17px;
|
||||
line-height: 23px;
|
||||
margin-bottom: 0; }
|
||||
.card-outer .card-text:not(.no-description) .card-title {
|
||||
max-height: 69px; }
|
||||
.card-outer .card-description {
|
||||
font-size: 15px;
|
||||
line-height: 23px; }
|
||||
.card-outer .card-context {
|
||||
bottom: 4px;
|
||||
font-size: 14px; } }
|
||||
|
||||
@media (min-width: 1122px) {
|
||||
.normal-cards .card-outer {
|
||||
height: 370px; }
|
||||
.normal-cards .card-outer .card-preview-image-outer {
|
||||
height: 155px; }
|
||||
.normal-cards .card-outer .card-details {
|
||||
padding: 13px 16px 12px; }
|
||||
.normal-cards .card-outer .card-text {
|
||||
max-height: 140px; }
|
||||
.normal-cards .card-outer .card-host-name {
|
||||
font-size: 12px;
|
||||
padding-bottom: 5px; }
|
||||
.normal-cards .card-outer .card-title {
|
||||
font-size: 17px;
|
||||
line-height: 23px;
|
||||
margin-bottom: 0; }
|
||||
.normal-cards .card-outer .card-text:not(.no-description) .card-title {
|
||||
max-height: 69px; }
|
||||
.normal-cards .card-outer .card-description {
|
||||
font-size: 15px;
|
||||
line-height: 23px; }
|
||||
.normal-cards .card-outer .card-context {
|
||||
bottom: 4px;
|
||||
font-size: 14px; } }
|
||||
|
||||
.compact-cards .card-outer {
|
||||
height: 160px; }
|
||||
.compact-cards .card-outer .card-preview-image-outer {
|
||||
height: 108px; }
|
||||
.compact-cards .card-outer .card-details {
|
||||
padding: 12px 16px; }
|
||||
.compact-cards .card-outer .card-host-name {
|
||||
line-height: 10px; }
|
||||
.compact-cards .card-outer .card-text .card-title,
|
||||
.compact-cards .card-outer .card-text:not(.no-description) .card-title {
|
||||
font-size: 10px;
|
||||
line-height: 12px;
|
||||
max-height: 12px;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap; }
|
||||
.compact-cards .card-outer .card-description {
|
||||
display: none; }
|
||||
.compact-cards .card-outer .card-context {
|
||||
background-color: var(--newtab-card-background-color);
|
||||
border-radius: 16px;
|
||||
height: 32px;
|
||||
width: 32px;
|
||||
padding: 8px;
|
||||
top: 92px;
|
||||
left: auto;
|
||||
offset-inline-end: 12px; }
|
||||
.compact-cards .card-outer .card-context::after {
|
||||
border: 1px solid var(--newtab-card-hairline-color);
|
||||
border-bottom: 0;
|
||||
border-radius: 16px 16px 0 0;
|
||||
content: '';
|
||||
position: absolute;
|
||||
height: 50%;
|
||||
width: 100%;
|
||||
top: 0;
|
||||
left: 0; }
|
||||
.compact-cards .card-outer .card-context .card-context-icon {
|
||||
margin-inline-end: 0;
|
||||
height: 16px;
|
||||
width: 16px; }
|
||||
.compact-cards .card-outer .card-context .card-context-icon.icon-bookmark-added {
|
||||
fill: #0A84FF; }
|
||||
.compact-cards .card-outer .card-context .card-context-icon.icon-download {
|
||||
fill: #12BC00; }
|
||||
.compact-cards .card-outer .card-context .card-context-icon.icon-history-item {
|
||||
fill: #B1B1B3; }
|
||||
.compact-cards .card-outer .card-context .card-context-icon.icon-pocket {
|
||||
fill: #D70022; }
|
||||
.compact-cards .card-outer .card-context .card-context-label {
|
||||
display: none; }
|
||||
|
||||
@media not all and (min-width: 1122px) {
|
||||
.compact-cards .hide-for-narrow {
|
||||
display: none; } }
|
||||
|
||||
.manual-migration-container {
|
||||
color: var(--newtab-text-conditional-color);
|
||||
|
|
|
@ -112,7 +112,7 @@ const actionTypes = {};
|
|||
/* harmony export (immutable) */ __webpack_exports__["c"] = actionTypes;
|
||||
|
||||
|
||||
for (const type of ["ARCHIVE_FROM_POCKET", "AS_ROUTER_TELEMETRY_USER_EVENT", "BLOCK_URL", "BOOKMARK_URL", "COPY_DOWNLOAD_LINK", "DELETE_BOOKMARK_BY_ID", "DELETE_FROM_POCKET", "DELETE_HISTORY_URL", "DIALOG_CANCEL", "DIALOG_OPEN", "DISABLE_ONBOARDING", "DOWNLOAD_CHANGED", "INIT", "MIGRATION_CANCEL", "MIGRATION_COMPLETED", "MIGRATION_START", "NEW_TAB_INIT", "NEW_TAB_INITIAL_STATE", "NEW_TAB_LOAD", "NEW_TAB_REHYDRATED", "NEW_TAB_STATE_REQUEST", "NEW_TAB_UNLOAD", "OPEN_DOWNLOAD_FILE", "OPEN_LINK", "OPEN_NEW_WINDOW", "OPEN_PRIVATE_WINDOW", "OPEN_WEBEXT_SETTINGS", "PAGE_PRERENDERED", "PLACES_BOOKMARK_ADDED", "PLACES_BOOKMARK_REMOVED", "PLACES_HISTORY_CLEARED", "PLACES_LINKS_CHANGED", "PLACES_LINK_BLOCKED", "PLACES_LINK_DELETED", "PLACES_SAVED_TO_POCKET", "PREFS_INITIAL_VALUES", "PREF_CHANGED", "PREVIEW_REQUEST", "PREVIEW_REQUEST_CANCEL", "PREVIEW_RESPONSE", "REMOVE_DOWNLOAD_FILE", "RICH_ICON_MISSING", "SAVE_SESSION_PERF_DATA", "SAVE_TO_POCKET", "SCREENSHOT_UPDATED", "SECTION_DEREGISTER", "SECTION_DISABLE", "SECTION_ENABLE", "SECTION_MOVE", "SECTION_OPTIONS_CHANGED", "SECTION_REGISTER", "SECTION_UPDATE", "SECTION_UPDATE_CARD", "SETTINGS_CLOSE", "SETTINGS_OPEN", "SET_PREF", "SHOW_DOWNLOAD_FILE", "SHOW_FIREFOX_ACCOUNTS", "SKIPPED_SIGNIN", "SNIPPETS_BLOCKLIST_CLEARED", "SNIPPETS_BLOCKLIST_UPDATED", "SNIPPETS_DATA", "SNIPPETS_RESET", "SNIPPET_BLOCKED", "SUBMIT_EMAIL", "SYSTEM_TICK", "TELEMETRY_IMPRESSION_STATS", "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"]) {
|
||||
for (const type of ["ADDONS_INFO_REQUEST", "ADDONS_INFO_RESPONSE", "ARCHIVE_FROM_POCKET", "AS_ROUTER_TELEMETRY_USER_EVENT", "BLOCK_URL", "BOOKMARK_URL", "COPY_DOWNLOAD_LINK", "DELETE_BOOKMARK_BY_ID", "DELETE_FROM_POCKET", "DELETE_HISTORY_URL", "DIALOG_CANCEL", "DIALOG_OPEN", "DISABLE_ONBOARDING", "DOWNLOAD_CHANGED", "INIT", "MIGRATION_CANCEL", "MIGRATION_COMPLETED", "MIGRATION_START", "NEW_TAB_INIT", "NEW_TAB_INITIAL_STATE", "NEW_TAB_LOAD", "NEW_TAB_REHYDRATED", "NEW_TAB_STATE_REQUEST", "NEW_TAB_UNLOAD", "OPEN_DOWNLOAD_FILE", "OPEN_LINK", "OPEN_NEW_WINDOW", "OPEN_PRIVATE_WINDOW", "OPEN_WEBEXT_SETTINGS", "PAGE_PRERENDERED", "PLACES_BOOKMARK_ADDED", "PLACES_BOOKMARK_REMOVED", "PLACES_HISTORY_CLEARED", "PLACES_LINKS_CHANGED", "PLACES_LINK_BLOCKED", "PLACES_LINK_DELETED", "PLACES_SAVED_TO_POCKET", "PREFS_INITIAL_VALUES", "PREF_CHANGED", "PREVIEW_REQUEST", "PREVIEW_REQUEST_CANCEL", "PREVIEW_RESPONSE", "REMOVE_DOWNLOAD_FILE", "RICH_ICON_MISSING", "SAVE_SESSION_PERF_DATA", "SAVE_TO_POCKET", "SCREENSHOT_UPDATED", "SECTION_DEREGISTER", "SECTION_DISABLE", "SECTION_ENABLE", "SECTION_MOVE", "SECTION_OPTIONS_CHANGED", "SECTION_REGISTER", "SECTION_UPDATE", "SECTION_UPDATE_CARD", "SETTINGS_CLOSE", "SETTINGS_OPEN", "SET_PREF", "SHOW_DOWNLOAD_FILE", "SHOW_FIREFOX_ACCOUNTS", "SKIPPED_SIGNIN", "SNIPPETS_BLOCKLIST_CLEARED", "SNIPPETS_BLOCKLIST_UPDATED", "SNIPPETS_DATA", "SNIPPETS_RESET", "SNIPPET_BLOCKED", "SUBMIT_EMAIL", "SYSTEM_TICK", "TELEMETRY_IMPRESSION_STATS", "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"]) {
|
||||
actionTypes[type] = type;
|
||||
}
|
||||
|
||||
|
@ -998,8 +998,17 @@ class ASRouterUISurface extends __WEBPACK_IMPORTED_MODULE_4_react___default.a.Pu
|
|||
this.setState({ bundle: action.data });
|
||||
break;
|
||||
case "CLEAR_MESSAGE":
|
||||
this.setState({ message: {}, bundle: {} });
|
||||
if (action.data.id === this.state.message.id) {
|
||||
this.setState({ message: {} });
|
||||
}
|
||||
break;
|
||||
case "CLEAR_BUNDLE":
|
||||
if (this.state.bundle.bundle) {
|
||||
this.setState({ bundle: {} });
|
||||
}
|
||||
break;
|
||||
case "CLEAR_ALL":
|
||||
this.setState({ message: {}, bundle: {} });
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2970,6 +2979,18 @@ class SnippetsMap extends Map {
|
|||
});
|
||||
}
|
||||
|
||||
getAddonsInfo() {
|
||||
return new Promise(resolve => {
|
||||
this._dispatch(__WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__["b" /* actionCreators */].OnlyToMain({ type: __WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__["c" /* actionTypes */].ADDONS_INFO_REQUEST }));
|
||||
global.addMessageListener("ActivityStream:MainToContent", function onMessage({ data: action }) {
|
||||
if (action.type === __WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__["c" /* actionTypes */].ADDONS_INFO_RESPONSE) {
|
||||
resolve(action.data);
|
||||
global.removeMessageListener("ActivityStream:MainToContent", onMessage);
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* connect - Attaches an indexedDB back-end to the Map so that any set values
|
||||
* are also cached in a store. It also restores any existing values
|
||||
|
@ -3877,7 +3898,7 @@ class ASRouterAdmin extends __WEBPACK_IMPORTED_MODULE_1_react___default.a.PureCo
|
|||
}
|
||||
|
||||
renderMessageItem(msg) {
|
||||
const isCurrent = msg.id === this.state.currentId;
|
||||
const isCurrent = msg.id === this.state.lastMessageId;
|
||||
const isBlocked = this.state.blockList.includes(msg.id);
|
||||
|
||||
let itemClassName = "message-item";
|
||||
|
@ -4453,7 +4474,8 @@ var _extends = Object.assign || function (target) { for (var i = 1; i < argument
|
|||
|
||||
const VISIBLE = "visible";
|
||||
const VISIBILITY_CHANGE_EVENT = "visibilitychange";
|
||||
const CARDS_PER_ROW = 3;
|
||||
const CARDS_PER_ROW_DEFAULT = 3;
|
||||
const CARDS_PER_ROW_COMPACT_WIDE = 4;
|
||||
|
||||
function getFormattedMessage(message) {
|
||||
return typeof message === "string" ? __WEBPACK_IMPORTED_MODULE_6_react___default.a.createElement(
|
||||
|
@ -4466,7 +4488,14 @@ function getFormattedMessage(message) {
|
|||
class Section extends __WEBPACK_IMPORTED_MODULE_6_react___default.a.PureComponent {
|
||||
_dispatchImpressionStats() {
|
||||
const { props } = this;
|
||||
const maxCards = 3 * props.maxRows;
|
||||
let cardsPerRow = CARDS_PER_ROW_DEFAULT;
|
||||
if (props.compactCards && global.matchMedia(`(min-width: 1072px)`).matches) {
|
||||
// If the section has compact cards and the viewport is wide enough, we show
|
||||
// 4 columns instead of 3.
|
||||
// $break-point-widest = 1072px (from _variables.scss)
|
||||
cardsPerRow = CARDS_PER_ROW_COMPACT_WIDE;
|
||||
}
|
||||
const maxCards = cardsPerRow * props.maxRows;
|
||||
const cards = props.rows.slice(0, maxCards);
|
||||
|
||||
if (this.needsImpressionStats(cards)) {
|
||||
|
@ -4552,37 +4581,49 @@ class Section extends __WEBPACK_IMPORTED_MODULE_6_react___default.a.PureComponen
|
|||
return false;
|
||||
}
|
||||
|
||||
numberOfPlaceholders(items) {
|
||||
if (items === 0) {
|
||||
return CARDS_PER_ROW;
|
||||
}
|
||||
const remainder = items % CARDS_PER_ROW;
|
||||
if (remainder === 0) {
|
||||
return 0;
|
||||
}
|
||||
return CARDS_PER_ROW - remainder;
|
||||
}
|
||||
|
||||
render() {
|
||||
const {
|
||||
id, eventSource, title, icon, rows,
|
||||
emptyState, dispatch, maxRows,
|
||||
emptyState, dispatch, compactCards, maxRows,
|
||||
contextMenuOptions, initialized, disclaimer,
|
||||
pref, privacyNoticeURL, isFirst, isLast
|
||||
} = this.props;
|
||||
const maxCards = CARDS_PER_ROW * maxRows;
|
||||
|
||||
const maxCardsPerRow = compactCards ? CARDS_PER_ROW_COMPACT_WIDE : CARDS_PER_ROW_DEFAULT;
|
||||
const maxCards = maxCardsPerRow * maxRows;
|
||||
const maxCardsOnNarrow = CARDS_PER_ROW_DEFAULT * maxRows;
|
||||
|
||||
// Show topics only for top stories and if it's not initialized yet (so
|
||||
// content doesn't shift when it is loaded) or has loaded with topics
|
||||
const shouldShowTopics = id === "topstories" && (!this.props.topics || this.props.topics.length > 0);
|
||||
|
||||
const realRows = rows.slice(0, maxCards);
|
||||
const placeholders = this.numberOfPlaceholders(realRows.length);
|
||||
|
||||
// The empty state should only be shown after we have initialized and there is no content.
|
||||
// Otherwise, we should show placeholders.
|
||||
const shouldShowEmptyState = initialized && !rows.length;
|
||||
|
||||
const cards = [];
|
||||
if (!shouldShowEmptyState) {
|
||||
for (let i = 0; i < maxCards; i++) {
|
||||
const link = realRows[i];
|
||||
// On narrow viewports, we only show 3 cards per row. We'll mark the rest as
|
||||
// .hide-for-narrow to hide in CSS via @media query.
|
||||
const className = i >= maxCardsOnNarrow ? "hide-for-narrow" : "";
|
||||
cards.push(link ? __WEBPACK_IMPORTED_MODULE_6_react___default.a.createElement(__WEBPACK_IMPORTED_MODULE_0_content_src_components_Card_Card__["a" /* Card */], { key: i,
|
||||
index: i,
|
||||
className: className,
|
||||
dispatch: dispatch,
|
||||
link: link,
|
||||
contextMenuOptions: contextMenuOptions,
|
||||
eventSource: eventSource,
|
||||
shouldSendImpressionStats: this.props.shouldSendImpressionStats,
|
||||
isWebExtension: this.props.isWebExtension }) : __WEBPACK_IMPORTED_MODULE_6_react___default.a.createElement(__WEBPACK_IMPORTED_MODULE_0_content_src_components_Card_Card__["b" /* PlaceholderCard */], { key: i, className: className }));
|
||||
}
|
||||
}
|
||||
|
||||
const sectionClassName = ["section", compactCards ? "compact-cards" : "normal-cards"].join(" ");
|
||||
|
||||
// <Section> <-- React component
|
||||
// <section> <-- HTML5 element
|
||||
return __WEBPACK_IMPORTED_MODULE_6_react___default.a.createElement(
|
||||
|
@ -4590,7 +4631,7 @@ class Section extends __WEBPACK_IMPORTED_MODULE_6_react___default.a.PureComponen
|
|||
this.props,
|
||||
__WEBPACK_IMPORTED_MODULE_6_react___default.a.createElement(
|
||||
__WEBPACK_IMPORTED_MODULE_3_content_src_components_CollapsibleSection_CollapsibleSection__["a" /* CollapsibleSection */],
|
||||
{ className: "section", icon: icon,
|
||||
{ className: sectionClassName, icon: icon,
|
||||
title: title,
|
||||
id: id,
|
||||
eventSource: eventSource,
|
||||
|
@ -4606,9 +4647,7 @@ class Section extends __WEBPACK_IMPORTED_MODULE_6_react___default.a.PureComponen
|
|||
!shouldShowEmptyState && __WEBPACK_IMPORTED_MODULE_6_react___default.a.createElement(
|
||||
"ul",
|
||||
{ className: "section-list", style: { padding: 0 } },
|
||||
realRows.map((link, index) => link && __WEBPACK_IMPORTED_MODULE_6_react___default.a.createElement(__WEBPACK_IMPORTED_MODULE_0_content_src_components_Card_Card__["a" /* Card */], { key: index, index: index, dispatch: dispatch, link: link, contextMenuOptions: contextMenuOptions,
|
||||
eventSource: eventSource, shouldSendImpressionStats: this.props.shouldSendImpressionStats, isWebExtension: this.props.isWebExtension })),
|
||||
placeholders > 0 && [...new Array(placeholders)].map((_, i) => __WEBPACK_IMPORTED_MODULE_6_react___default.a.createElement(__WEBPACK_IMPORTED_MODULE_0_content_src_components_Card_Card__["b" /* PlaceholderCard */], { key: i }))
|
||||
cards
|
||||
),
|
||||
shouldShowEmptyState && __WEBPACK_IMPORTED_MODULE_6_react___default.a.createElement(
|
||||
"div",
|
||||
|
@ -4699,7 +4738,7 @@ var Actions = __webpack_require__(1);
|
|||
const cardContextTypes = {
|
||||
history: {
|
||||
intlID: "type_label_visited",
|
||||
icon: "historyItem"
|
||||
icon: "history-item"
|
||||
},
|
||||
bookmark: {
|
||||
intlID: "type_label_bookmarked",
|
||||
|
@ -4882,32 +4921,32 @@ class Card__Card extends external__React__default.a.PureComponent {
|
|||
}
|
||||
|
||||
render() {
|
||||
const { index, link, dispatch, contextMenuOptions, eventSource, shouldSendImpressionStats } = this.props;
|
||||
const { index, className, link, dispatch, contextMenuOptions, eventSource, shouldSendImpressionStats } = this.props;
|
||||
const { props } = this;
|
||||
const isContextMenuOpen = this.state.showContextMenu && this.state.activeCard === index;
|
||||
// Display "now" as "trending" until we have new strings #3402
|
||||
const { icon, intlID } = cardContextTypes[link.type === "now" ? "trending" : link.type] || {};
|
||||
const hasImage = link.image || link.hasImage;
|
||||
const imageStyle = { backgroundImage: link.image ? `url(${link.image})` : "none" };
|
||||
const outerClassName = ["card-outer", className, isContextMenuOpen && "active", props.placeholder && "placeholder"].filter(v => v).join(" ");
|
||||
|
||||
return external__React__default.a.createElement(
|
||||
"li",
|
||||
{ className: `card-outer${isContextMenuOpen ? " active" : ""}${props.placeholder ? " placeholder" : ""}` },
|
||||
{ className: outerClassName },
|
||||
external__React__default.a.createElement(
|
||||
"a",
|
||||
{ href: link.type === "pocket" ? link.open_url : link.url, onClick: !props.placeholder ? this.onLinkClick : undefined },
|
||||
external__React__default.a.createElement(
|
||||
"div",
|
||||
{ className: "card" },
|
||||
hasImage && external__React__default.a.createElement(
|
||||
external__React__default.a.createElement(
|
||||
"div",
|
||||
{ className: "card-preview-image-outer" },
|
||||
external__React__default.a.createElement("div", { className: `card-preview-image${this.state.imageLoaded ? " loaded" : ""}`, style: imageStyle })
|
||||
hasImage && external__React__default.a.createElement("div", { className: `card-preview-image${this.state.imageLoaded ? " loaded" : ""}`, style: imageStyle })
|
||||
),
|
||||
external__React__default.a.createElement(
|
||||
"div",
|
||||
{ className: `card-details${hasImage ? "" : " no-image"}` },
|
||||
link.type === "download" && external__React__default.a.createElement("div", { className: "card-download-icon icon icon-download-folder" }),
|
||||
{ className: "card-details" },
|
||||
link.type === "download" && external__React__default.a.createElement(
|
||||
"div",
|
||||
{ className: "card-host-name alternate" },
|
||||
|
@ -4916,11 +4955,12 @@ class Card__Card extends external__React__default.a.PureComponent {
|
|||
link.hostname && external__React__default.a.createElement(
|
||||
"div",
|
||||
{ className: "card-host-name" },
|
||||
link.hostname
|
||||
link.hostname,
|
||||
link.type === "download" && ` \u2014 ${link.description}`
|
||||
),
|
||||
external__React__default.a.createElement(
|
||||
"div",
|
||||
{ className: ["card-text", icon ? "" : "no-context", link.description ? "" : "no-description", link.hostname ? "" : "no-host-name", hasImage ? "" : "no-image"].join(" ") },
|
||||
{ className: ["card-text", icon ? "" : "no-context", link.description ? "" : "no-description", link.hostname ? "" : "no-host-name"].join(" ") },
|
||||
external__React__default.a.createElement(
|
||||
"h4",
|
||||
{ className: "card-title", dir: "auto" },
|
||||
|
@ -4979,7 +5019,7 @@ Card__Card.defaultProps = { link: {} };
|
|||
const Card = Object(external__ReactRedux_["connect"])(state => ({ platform: state.Prefs.values.platform }))(Card__Card);
|
||||
/* harmony export (immutable) */ __webpack_exports__["a"] = Card;
|
||||
|
||||
const PlaceholderCard = () => external__React__default.a.createElement(Card, { placeholder: true });
|
||||
const PlaceholderCard = props => external__React__default.a.createElement(Card, { placeholder: true, className: props.className });
|
||||
/* harmony export (immutable) */ __webpack_exports__["b"] = PlaceholderCard;
|
||||
|
||||
|
||||
|
@ -5775,7 +5815,7 @@ class _StartupOverlay extends __WEBPACK_IMPORTED_MODULE_3_react___default.a.Pure
|
|||
),
|
||||
__WEBPACK_IMPORTED_MODULE_3_react___default.a.createElement(
|
||||
"form",
|
||||
{ method: "get", action: "https://accounts.firefox.com", target: "_blank", rel: "noopener noreferrer", onSubmit: this.onSubmit },
|
||||
{ method: "get", action: "https://accounts.firefox.com?entrypoint=activity-stream-firstrun&utm_source=activity-stream&utm_campaign=firstrun", target: "_blank", rel: "noopener noreferrer", onSubmit: this.onSubmit },
|
||||
__WEBPACK_IMPORTED_MODULE_3_react___default.a.createElement("input", { name: "service", type: "hidden", value: "sync" }),
|
||||
__WEBPACK_IMPORTED_MODULE_3_react___default.a.createElement("input", { name: "action", type: "hidden", value: "email" }),
|
||||
__WEBPACK_IMPORTED_MODULE_3_react___default.a.createElement("input", { name: "context", type: "hidden", value: "fx_desktop_v3" }),
|
||||
|
|
До Ширина: | Высота: | Размер: 58 KiB После Ширина: | Высота: | Размер: 55 KiB |
|
@ -1 +0,0 @@
|
|||
<svg width="42" height="42" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><path d="M27 16h-5.849l-1.567-1.462A2 2 0 0 0 18.219 14H15a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-8a2 2 0 0 0-2-2zm-8.781 0l1.072 1H15v-1h3.219zM27 26H15v-8h6v-.014c.05 0 .1.014.151.014H27v8z" id="a"/></defs><g fill="none" fill-rule="evenodd"><rect fill="#0A84FF" width="42" height="42" rx="21"/><use fill="#FFF" fill-rule="nonzero" xlink:href="#a"/></g></svg>
|
До Ширина: | Высота: | Размер: 482 B |
|
@ -1 +0,0 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><path fill="context-fill" d="M8 12a4 4 0 1 1 4-4 4 4 0 0 1-4 4zm0-6a2 2 0 1 0 2 2 2 2 0 0 0-2-2z"/></svg>
|
До Ширина: | Высота: | Размер: 165 B |
До Ширина: | Высота: | Размер: 30 KiB После Ширина: | Высота: | Размер: 20 KiB |
До Ширина: | Высота: | Размер: 22 KiB После Ширина: | Высота: | Размер: 16 KiB |
До Ширина: | Высота: | Размер: 16 KiB После Ширина: | Высота: | Размер: 11 KiB |
|
@ -8,7 +8,7 @@
|
|||
<em:type>2</em:type>
|
||||
<em:bootstrap>true</em:bootstrap>
|
||||
<em:unpack>false</em:unpack>
|
||||
<em:version>2018.05.17.1352-edc5578e</em:version>
|
||||
<em:version>2018.05.24.1266-fdda2139</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>
|
||||
|
|
|
@ -81,7 +81,7 @@ const MessageLoaderUtils = {
|
|||
try {
|
||||
remoteMessages = (await (await fetch(provider.url)).json())
|
||||
.messages
|
||||
.map(msg => (Object.assign({}, msg, {provider_url: provider.url})));
|
||||
.map(msg => ({...msg, provider_url: provider.url}));
|
||||
} catch (e) {
|
||||
Cu.reportError(e);
|
||||
}
|
||||
|
@ -127,7 +127,7 @@ const MessageLoaderUtils = {
|
|||
*/
|
||||
async loadMessagesForProvider(provider) {
|
||||
const messages = (await this._getMessageLoader(provider)(provider))
|
||||
.map(msg => Object.assign({}, msg, {provider: provider.id}));
|
||||
.map(msg => ({...msg, provider: provider.id}));
|
||||
const lastUpdated = Date.now();
|
||||
return {messages, lastUpdated};
|
||||
}
|
||||
|
@ -160,15 +160,13 @@ class _ASRouter {
|
|||
this.messageChannel = null;
|
||||
this._storage = null;
|
||||
this._resetInitialization();
|
||||
this._state = Object.assign(
|
||||
{
|
||||
currentId: null,
|
||||
providers: [],
|
||||
blockList: [],
|
||||
messages: []
|
||||
},
|
||||
initialState
|
||||
);
|
||||
this._state = {
|
||||
lastMessageId: null,
|
||||
providers: [],
|
||||
blockList: [],
|
||||
messages: [],
|
||||
...initialState
|
||||
};
|
||||
this.onMessage = this.onMessage.bind(this);
|
||||
}
|
||||
|
||||
|
@ -211,7 +209,7 @@ class _ASRouter {
|
|||
for (const provider of this.state.providers) {
|
||||
if (needsUpdate.includes(provider)) {
|
||||
const {messages, lastUpdated} = await MessageLoaderUtils.loadMessagesForProvider(provider);
|
||||
newState.providers.push((Object.assign({}, provider, {lastUpdated})));
|
||||
newState.providers.push({...provider, lastUpdated});
|
||||
newState.messages = [...newState.messages, ...messages];
|
||||
} else {
|
||||
// Skip updating this provider's messages if no update is required
|
||||
|
@ -245,7 +243,7 @@ class _ASRouter {
|
|||
}
|
||||
|
||||
uninit() {
|
||||
this.messageChannel.sendAsyncMessage(OUTGOING_MESSAGE_NAME, {type: "CLEAR_MESSAGE"});
|
||||
this.messageChannel.sendAsyncMessage(OUTGOING_MESSAGE_NAME, {type: "CLEAR_ALL"});
|
||||
this.messageChannel.removeMessageListener(INCOMING_MESSAGE_NAME, this.onMessage);
|
||||
this.messageChannel = null;
|
||||
this._resetInitialization();
|
||||
|
@ -253,7 +251,7 @@ class _ASRouter {
|
|||
|
||||
setState(callbackOrObj) {
|
||||
const newState = (typeof callbackOrObj === "function") ? callbackOrObj(this.state) : callbackOrObj;
|
||||
this._state = Object.assign({}, this.state, newState);
|
||||
this._state = {...this.state, ...newState};
|
||||
return new Promise(resolve => {
|
||||
this._onStateChanged(this.state);
|
||||
resolve();
|
||||
|
@ -288,8 +286,8 @@ class _ASRouter {
|
|||
let bundledMessages;
|
||||
|
||||
await this.setState(state => {
|
||||
message = getRandomItemFromArray(state.messages.filter(item => item.id !== state.currentId && !state.blockList.includes(item.id)));
|
||||
return {currentId: message ? message.id : null};
|
||||
message = getRandomItemFromArray(state.messages.filter(item => item.id !== state.lastMessageId && !state.blockList.includes(item.id)));
|
||||
return {lastMessageId: message ? message.id : null};
|
||||
});
|
||||
// If this message needs to be bundled with other messages of the same template, find them and bundle them together
|
||||
if (message && message.bundled) {
|
||||
|
@ -302,12 +300,12 @@ class _ASRouter {
|
|||
// If the message we want is bundled with other messages, send the entire bundle
|
||||
target.sendAsyncMessage(OUTGOING_MESSAGE_NAME, {type: "SET_BUNDLED_MESSAGES", data: bundledMessages});
|
||||
} else {
|
||||
target.sendAsyncMessage(OUTGOING_MESSAGE_NAME, {type: "CLEAR_MESSAGE"});
|
||||
target.sendAsyncMessage(OUTGOING_MESSAGE_NAME, {type: "CLEAR_ALL"});
|
||||
}
|
||||
}
|
||||
|
||||
async setMessageById(id) {
|
||||
await this.setState({currentId: id});
|
||||
await this.setState({lastMessageId: id});
|
||||
const newMessage = this.getMessageById(id);
|
||||
if (newMessage) {
|
||||
// If this message needs to be bundled with other messages of the same template, find them and bundle them together
|
||||
|
@ -320,11 +318,13 @@ class _ASRouter {
|
|||
}
|
||||
}
|
||||
|
||||
async clearMessage(target, id) {
|
||||
if (this.state.currentId === id) {
|
||||
await this.setState({currentId: null});
|
||||
}
|
||||
target.sendAsyncMessage(OUTGOING_MESSAGE_NAME, {type: "CLEAR_MESSAGE"});
|
||||
async blockById(idOrIds) {
|
||||
const idsToBlock = Array.isArray(idOrIds) ? idOrIds : [idOrIds];
|
||||
await this.setState(state => {
|
||||
const blockList = [...state.blockList, ...idsToBlock];
|
||||
this._storage.set("blockList", blockList);
|
||||
return {blockList};
|
||||
});
|
||||
}
|
||||
|
||||
openLinkIn(url, target, {isPrivate = false, trusted = false, where = ""}) {
|
||||
|
@ -360,27 +360,12 @@ class _ASRouter {
|
|||
this.openLinkIn(`about:${action.data.button_action_params}`, target, {isPrivate: false, trusted: true, where: "tab"});
|
||||
break;
|
||||
case "BLOCK_MESSAGE_BY_ID":
|
||||
await this.setState(state => {
|
||||
const blockList = [...state.blockList];
|
||||
blockList.push(action.data.id);
|
||||
this._storage.set("blockList", blockList);
|
||||
|
||||
return {blockList};
|
||||
});
|
||||
await this.clearMessage(target, action.data.id);
|
||||
await this.blockById(action.data.id);
|
||||
this.messageChannel.sendAsyncMessage(OUTGOING_MESSAGE_NAME, {type: "CLEAR_MESSAGE", data: {id: action.data.id}});
|
||||
break;
|
||||
case "BLOCK_BUNDLE":
|
||||
await this.setState(state => {
|
||||
const blockList = [...state.blockList];
|
||||
for (let message of action.data.bundle) {
|
||||
blockList.push(message.id);
|
||||
}
|
||||
this._storage.set("blockList", blockList);
|
||||
|
||||
return {blockList};
|
||||
});
|
||||
await this.setState({currentId: null});
|
||||
target.sendAsyncMessage(OUTGOING_MESSAGE_NAME, {type: "CLEAR_MESSAGE"});
|
||||
await this.blockById(action.data.bundle.map(b => b.id));
|
||||
this.messageChannel.sendAsyncMessage(OUTGOING_MESSAGE_NAME, {type: "CLEAR_BUNDLE"});
|
||||
break;
|
||||
case "UNBLOCK_MESSAGE_BY_ID":
|
||||
await this.setState(state => {
|
||||
|
|
|
@ -22,14 +22,6 @@ class DownloadElement extends DownloadsViewUI.DownloadElementShell {
|
|||
return this._download;
|
||||
}
|
||||
|
||||
get fileType() {
|
||||
if (!this.download.target.path) {
|
||||
return null;
|
||||
}
|
||||
let items = this.download.target.path.split(".");
|
||||
return items[items.length - 1].toUpperCase();
|
||||
}
|
||||
|
||||
downloadsCmd_copyLocation() {
|
||||
let clipboard = Cc["@mozilla.org/widget/clipboardhelper;1"].getService(Ci.nsIClipboardHelper);
|
||||
clipboard.copyString(this.download.source.url);
|
||||
|
@ -52,14 +44,7 @@ this.DownloadsManager = class DownloadsManager {
|
|||
|
||||
formatDownload(element) {
|
||||
const downloadedItem = element.download;
|
||||
let description;
|
||||
if (element.fileType) {
|
||||
// If we have a file type: '1.5 MB — PNG'
|
||||
description = `${element.sizeStrings.stateLabel} \u2014 ${element.fileType}`;
|
||||
} else {
|
||||
// If we do not have a file type: '1.5 MB'
|
||||
description = `${element.sizeStrings.stateLabel}`;
|
||||
}
|
||||
const description = element.sizeStrings.stateLabel;
|
||||
return {
|
||||
hostname: new URL(downloadedItem.source.url).hostname,
|
||||
url: downloadedItem.source.url,
|
||||
|
|
|
@ -41,6 +41,7 @@ const BUILT_IN_SECTIONS = {
|
|||
button: {id: "section_disclaimer_topstories_buttontext"}
|
||||
},
|
||||
privacyNoticeURL: "https://www.mozilla.org/privacy/firefox/#suggest-relevant-content",
|
||||
compactCards: false,
|
||||
maxRows: 1,
|
||||
availableLinkMenuOptions: ["CheckBookmarkOrArchive", "CheckSavedToPocket", "Separator", "OpenInNewWindow", "OpenInPrivateWindow", "Separator", "BlockUrl"],
|
||||
emptyState: {
|
||||
|
@ -73,7 +74,8 @@ const BUILT_IN_SECTIONS = {
|
|||
eventSource: "HIGHLIGHTS",
|
||||
icon: "highlights",
|
||||
title: {id: "header_highlights"},
|
||||
maxRows: 3,
|
||||
compactCards: true,
|
||||
maxRows: 2,
|
||||
emptyState: {
|
||||
message: {id: "highlights_empty_state"},
|
||||
icon: "highlights"
|
||||
|
|
|
@ -89,7 +89,7 @@ this.SnippetsFeed = class SnippetsFeed {
|
|||
});
|
||||
}
|
||||
|
||||
async getAddonInfo() {
|
||||
async getAddonsInfo(target) {
|
||||
const {addons, fullData} = await AddonManager.getActiveAddons(["extension", "service"]);
|
||||
const info = {};
|
||||
for (const addon of addons) {
|
||||
|
@ -107,7 +107,8 @@ this.SnippetsFeed = class SnippetsFeed {
|
|||
});
|
||||
}
|
||||
}
|
||||
return info;
|
||||
const data = {addons: info, isFullData: fullData};
|
||||
this.store.dispatch(ac.OnlyToOneContent({type: at.ADDONS_INFO_RESPONSE, data}, target));
|
||||
}
|
||||
|
||||
async getTotalBookmarksCount(target) {
|
||||
|
@ -152,7 +153,6 @@ this.SnippetsFeed = class SnippetsFeed {
|
|||
selectedSearchEngine: await this.getSelectedSearchEngine(),
|
||||
defaultBrowser: this.isDefaultBrowser(),
|
||||
isDevtoolsUser: this.isDevtoolsUser(),
|
||||
addonInfo: await this.getAddonInfo(),
|
||||
blockList: await this._getBlockList() || [],
|
||||
previousSessionEnd: this._previousSessionEnd
|
||||
};
|
||||
|
@ -193,7 +193,7 @@ this.SnippetsFeed = class SnippetsFeed {
|
|||
browser.loadURI(url);
|
||||
}
|
||||
|
||||
onAction(action) {
|
||||
async onAction(action) {
|
||||
switch (action.type) {
|
||||
case at.INIT:
|
||||
this.init();
|
||||
|
@ -214,6 +214,9 @@ this.SnippetsFeed = class SnippetsFeed {
|
|||
case at.TOTAL_BOOKMARKS_REQUEST:
|
||||
this.getTotalBookmarksCount(action.meta.fromTarget);
|
||||
break;
|
||||
case at.ADDONS_INFO_REQUEST:
|
||||
await this.getAddonsInfo(action.meta.fromTarget);
|
||||
break;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
|
|
@ -490,8 +490,13 @@ this.TelemetryFeed = class TelemetryFeed {
|
|||
}
|
||||
|
||||
uninit() {
|
||||
Services.obs.removeObserver(this.browserOpenNewtabStart,
|
||||
"browser-open-newtab-start");
|
||||
try {
|
||||
Services.obs.removeObserver(this.browserOpenNewtabStart,
|
||||
"browser-open-newtab-start");
|
||||
} catch (e) {
|
||||
// Operation can fail when uninit is called before
|
||||
// init has finished setting up the observer
|
||||
}
|
||||
|
||||
// Only uninit if the getter has initialized it
|
||||
if (Object.prototype.hasOwnProperty.call(this, "pingCentre")) {
|
||||
|
|
|
@ -10,7 +10,7 @@ window.gActivityStreamStrings = {
|
|||
"type_label_bookmarked": "Kiketo alamabuk",
|
||||
"type_label_recommended": "Ma cuke lamal",
|
||||
"type_label_pocket": "Kigwoko i Pocket",
|
||||
"type_label_downloaded": "Downloaded",
|
||||
"type_label_downloaded": "Ki gamo",
|
||||
"menu_action_bookmark": "Alamabuk",
|
||||
"menu_action_remove_bookmark": "Kwany alamabuk",
|
||||
"menu_action_open_new_window": "Yab i dirica manyen",
|
||||
|
@ -24,14 +24,14 @@ window.gActivityStreamStrings = {
|
|||
"menu_action_save_to_pocket": "Gwoki i jaba",
|
||||
"menu_action_delete_pocket": "Kwany ki ii Pocket",
|
||||
"menu_action_archive_pocket": "Kan i Pocket",
|
||||
"menu_action_show_file_mac_os": "Show in Finder",
|
||||
"menu_action_show_file_windows": "Open Containing Folder",
|
||||
"menu_action_show_file_linux": "Open Containing Folder",
|
||||
"menu_action_show_file_default": "Show File",
|
||||
"menu_action_open_file": "Open File",
|
||||
"menu_action_copy_download_link": "Copy Download Link",
|
||||
"menu_action_go_to_download_page": "Go to Download Page",
|
||||
"menu_action_remove_download": "Remove from History",
|
||||
"menu_action_show_file_mac_os": "Nyut i Gin nongo",
|
||||
"menu_action_show_file_windows": "Yab boc manonge iyie",
|
||||
"menu_action_show_file_linux": "Yab boc manonge iyie",
|
||||
"menu_action_show_file_default": "Nyut Pwail",
|
||||
"menu_action_open_file": "Yab Pwail",
|
||||
"menu_action_copy_download_link": "Lok Kakube me Gam",
|
||||
"menu_action_go_to_download_page": "Cit i Potbuk me Gam",
|
||||
"menu_action_remove_download": "Kwany ki i Gin mukato",
|
||||
"search_button": "Yeny",
|
||||
"search_header": "Yeny me {search_engine_name}",
|
||||
"search_web_placeholder": "Yeny kakube",
|
||||
|
@ -43,13 +43,13 @@ window.gActivityStreamStrings = {
|
|||
"prefs_section_rows_option": "{num} row;{num} rows",
|
||||
"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_options_sponsored_label": "Sponsored Stories",
|
||||
"prefs_topstories_description2": "Jami mabeco loyo ki ii kakube, kiyubo piri",
|
||||
"prefs_topstories_options_sponsored_label": "Lok ma kicwako",
|
||||
"prefs_topstories_sponsored_learn_more": "Nong ngec mapol",
|
||||
"prefs_highlights_description": "Yer me kakube ma igwoko nyo ilimo",
|
||||
"prefs_highlights_options_visited_label": "Visited Pages",
|
||||
"prefs_highlights_options_download_label": "Most Recent Download",
|
||||
"prefs_highlights_options_pocket_label": "Pages Saved to Pocket",
|
||||
"prefs_highlights_options_visited_label": "Potbuk ma kilimo",
|
||||
"prefs_highlights_options_download_label": "Gam ma cokcoki loyo",
|
||||
"prefs_highlights_options_pocket_label": "Kigwoko potbuk i Pocket",
|
||||
"prefs_snippets_description": "Ngec manyen ki bot Mozilla ki Firefox",
|
||||
"settings_pane_button_label": "Yub potbuk me dirica matidi mamegi manyen",
|
||||
"settings_pane_topsites_header": "Kakube ma gi loyo",
|
||||
|
@ -63,9 +63,9 @@ window.gActivityStreamStrings = {
|
|||
"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_image_url_label": "URL me cal ma kiyubo",
|
||||
"topsites_form_url_placeholder": "Coo onyo mwon URL",
|
||||
"topsites_form_use_image_link": "Use a custom image…",
|
||||
"topsites_form_use_image_link": "Tii ki cal ma kiyubo…",
|
||||
"topsites_form_preview_button": "Nen",
|
||||
"topsites_form_add_button": "Medi",
|
||||
"topsites_form_save_button": "Gwoki",
|
||||
|
@ -100,19 +100,5 @@ window.gActivityStreamStrings = {
|
|||
"firstrun_terms_of_service": "Terms of Service",
|
||||
"firstrun_privacy_notice": "Privacy Notice",
|
||||
"firstrun_continue_to_login": "Continue",
|
||||
"firstrun_skip_login": "Skip this step",
|
||||
"prefs_restore_defaults_button": "Dwok makwongo",
|
||||
"prefs_topstories_description": "Jami me rwom ma lamal ma itwero keng",
|
||||
"settings_pane_header": "Ter me dirica matidi manyen",
|
||||
"settings_pane_body2": "Yer ngo ma i neno i potbuk man.",
|
||||
"settings_pane_search_header": "Yeny",
|
||||
"settings_pane_search_body": "Yeny Kakube ki i dirica ni matidi manyen.",
|
||||
"settings_pane_topsites_body": "Nong kakube ma ilimo loyo.",
|
||||
"settings_pane_topsites_options_showmore": "Nyut rek ariyo",
|
||||
"settings_pane_highlights_body2": "Nong yoo ni cen i jami mamit ma ilimo gi cokcokki onyo iketo alamabuk.",
|
||||
"settings_pane_highlights_options_visited": "Kakube ma kilimo",
|
||||
"settings_pane_snippets_body": "Kwan ngec manyen macego dok mamit ki bot Mozilla ikom Firefox, kwo me intanet, ki meme mabino atata.",
|
||||
"settings_pane_done_button": "Otum",
|
||||
"settings_pane_topstories_options_sponsored": "Nyut lok ma ki cwako",
|
||||
"pocket_description": "Nong jami me rwom ma lamal ma itwero keng woko, ki kony ma aa ki bot Pocket, dong tye but Mozilla."
|
||||
"firstrun_skip_login": "Skip this step"
|
||||
};
|
||||
|
|
|
@ -5,12 +5,12 @@ window.gActivityStreamStrings = {
|
|||
"header_highlights": "Акценти",
|
||||
"header_recommended_by": "Препоръчано от {provider}",
|
||||
"context_menu_button_sr": "Отваряне на контекстуалното меню на {title}",
|
||||
"section_context_menu_button_sr": "Open the section context menu",
|
||||
"section_context_menu_button_sr": "Отваряне на контекстното меню на раздела",
|
||||
"type_label_visited": "Посетена",
|
||||
"type_label_bookmarked": "Отметната",
|
||||
"type_label_recommended": "Тенденции",
|
||||
"type_label_pocket": "Saved to Pocket",
|
||||
"type_label_downloaded": "Downloaded",
|
||||
"type_label_pocket": "Запазено в Pocket",
|
||||
"type_label_downloaded": "Изтеглено",
|
||||
"menu_action_bookmark": "Отметка",
|
||||
"menu_action_remove_bookmark": "Премахване на отметка",
|
||||
"menu_action_open_new_window": "Отваряне в раздел",
|
||||
|
@ -66,7 +66,7 @@ window.gActivityStreamStrings = {
|
|||
"topsites_form_image_url_label": "Custom Image URL",
|
||||
"topsites_form_url_placeholder": "Адрес",
|
||||
"topsites_form_use_image_link": "Use a custom image…",
|
||||
"topsites_form_preview_button": "Preview",
|
||||
"topsites_form_preview_button": "Преглед",
|
||||
"topsites_form_add_button": "Добавяне",
|
||||
"topsites_form_save_button": "Запазване",
|
||||
"topsites_form_cancel_button": "Отказ",
|
||||
|
@ -87,8 +87,8 @@ window.gActivityStreamStrings = {
|
|||
"section_menu_action_manage_section": "Manage Section",
|
||||
"section_menu_action_manage_webext": "Manage Extension",
|
||||
"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_move_up": "Преместване нагоре",
|
||||
"section_menu_action_move_down": "Преместване надолу",
|
||||
"section_menu_action_privacy_notice": "Политика за личните данни",
|
||||
"firstrun_title": "Take Firefox with You",
|
||||
"firstrun_content": "Get your bookmarks, history, passwords and other settings on all your devices.",
|
||||
|
@ -100,17 +100,5 @@ window.gActivityStreamStrings = {
|
|||
"firstrun_terms_of_service": "Terms of Service",
|
||||
"firstrun_privacy_notice": "Privacy Notice",
|
||||
"firstrun_continue_to_login": "Continue",
|
||||
"firstrun_skip_login": "Skip this step",
|
||||
"settings_pane_header": "Настройки на новия раздел",
|
||||
"settings_pane_body2": "Изберете какво да виждате на тази страница.",
|
||||
"settings_pane_search_header": "Търсене",
|
||||
"settings_pane_search_body": "Търсете в мрежата от нов раздел.",
|
||||
"settings_pane_topsites_body": "Достъп до страниците, които посещавате най-често.",
|
||||
"settings_pane_topsites_options_showmore": "Показване на два реда",
|
||||
"settings_pane_highlights_body2": "Намерете интересните неща, които скоро сте посетили или отметнали.",
|
||||
"settings_pane_highlights_options_visited": "Посетени страници",
|
||||
"settings_pane_snippets_body": "Четете кратки и радостни новини от Mozilla относно Firefox, интернет-културата и случайни мемета.",
|
||||
"settings_pane_done_button": "Готово",
|
||||
"settings_pane_topstories_options_sponsored": "Показване на платени статии",
|
||||
"pocket_description": "Открийте висококачествено съдържание, което иначе може да пропуснете, с помощта на Pocket, вече част от Mozilla."
|
||||
"firstrun_skip_login": "Skip this step"
|
||||
};
|
||||
|
|
|
@ -10,7 +10,7 @@ window.gActivityStreamStrings = {
|
|||
"type_label_bookmarked": "Saifeimlengen",
|
||||
"type_label_recommended": "Trendli",
|
||||
"type_label_pocket": "Pocket'ke saqlanğan",
|
||||
"type_label_downloaded": "Downloaded",
|
||||
"type_label_downloaded": "Endirilgen",
|
||||
"menu_action_bookmark": "Saifeimi",
|
||||
"menu_action_remove_bookmark": "Saifeimini Çetleştir",
|
||||
"menu_action_open_new_window": "Yañı Bir Pencerede Aç",
|
||||
|
@ -24,14 +24,14 @@ window.gActivityStreamStrings = {
|
|||
"menu_action_save_to_pocket": "Pocket'ke Saqla",
|
||||
"menu_action_delete_pocket": "Pocket’ten sil",
|
||||
"menu_action_archive_pocket": "Pocket’te arhivle",
|
||||
"menu_action_show_file_mac_os": "Show in Finder",
|
||||
"menu_action_show_file_windows": "Open Containing Folder",
|
||||
"menu_action_show_file_linux": "Open Containing Folder",
|
||||
"menu_action_show_file_default": "Show File",
|
||||
"menu_action_open_file": "Open File",
|
||||
"menu_action_copy_download_link": "Copy Download Link",
|
||||
"menu_action_go_to_download_page": "Go to Download Page",
|
||||
"menu_action_remove_download": "Remove from History",
|
||||
"menu_action_show_file_mac_os": "Tapıcıda Köster",
|
||||
"menu_action_show_file_windows": "İhtiva Etken Cilbentni Aç",
|
||||
"menu_action_show_file_linux": "İhtiva Etken Cilbentni Aç",
|
||||
"menu_action_show_file_default": "Dosyeni Köster",
|
||||
"menu_action_open_file": "Dosyeni Aç",
|
||||
"menu_action_copy_download_link": "Endirme İlişimini Kopiyala",
|
||||
"menu_action_go_to_download_page": "Endirme Saifesine Bar",
|
||||
"menu_action_remove_download": "Keçmişten Çetleştir",
|
||||
"search_button": "Qıdır",
|
||||
"search_header": "{search_engine_name} Qıdırması",
|
||||
"search_web_placeholder": "Ağ'da qıdır",
|
||||
|
@ -77,18 +77,18 @@ window.gActivityStreamStrings = {
|
|||
"highlights_empty_state": "Start browsing, and we’ll show some of the great articles, videos, and other pages you’ve recently visited or bookmarked here.",
|
||||
"topstories_empty_state": "You’ve caught up. Check back later for more top stories from {provider}. Can’t wait? Select a popular topic to find more great stories from around the web.",
|
||||
"manual_migration_explanation2": "Try Firefox with the bookmarks, history and passwords from another browser.",
|
||||
"manual_migration_cancel_button": "No Thanks",
|
||||
"manual_migration_cancel_button": "Hayır, Teşekkürler",
|
||||
"manual_migration_import_button": "Import Now",
|
||||
"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_remove_section": "Kesimni Çetleştir",
|
||||
"section_menu_action_collapse_section": "Kesimni Eştir",
|
||||
"section_menu_action_expand_section": "Kesimni Cayıldır",
|
||||
"section_menu_action_manage_section": "Kesimni İdare Et",
|
||||
"section_menu_action_manage_webext": "Manage Extension",
|
||||
"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_add_topsite": "Zirvedeki Sayt Ekle",
|
||||
"section_menu_action_move_up": "Yuqarı Avuştır",
|
||||
"section_menu_action_move_down": "Aşağı Avuştır",
|
||||
"section_menu_action_privacy_notice": "Hususiyat Tebliği",
|
||||
"firstrun_title": "Take Firefox with You",
|
||||
"firstrun_content": "Get your bookmarks, history, passwords and other settings on all your devices.",
|
||||
|
@ -100,6 +100,5 @@ window.gActivityStreamStrings = {
|
|||
"firstrun_terms_of_service": "Terms of Service",
|
||||
"firstrun_privacy_notice": "Privacy Notice",
|
||||
"firstrun_continue_to_login": "Continue",
|
||||
"firstrun_skip_login": "Skip this step",
|
||||
"settings_pane_search_header": "Qıdır"
|
||||
"firstrun_skip_login": "Skip this step"
|
||||
};
|
||||
|
|
|
@ -5,12 +5,12 @@ window.gActivityStreamStrings = {
|
|||
"header_highlights": "Κορυφαίες στιγμές",
|
||||
"header_recommended_by": "Προτεινόμενο από τον πάροχο {provider}",
|
||||
"context_menu_button_sr": "Άνοιγμα μενού επιλογών για το {title}",
|
||||
"section_context_menu_button_sr": "Open the section context menu",
|
||||
"section_context_menu_button_sr": "Άνοιγμα του μενού επιλογών ενότητας",
|
||||
"type_label_visited": "Από ιστορικό",
|
||||
"type_label_bookmarked": "Από σελιδοδείκτες",
|
||||
"type_label_recommended": "Τάσεις",
|
||||
"type_label_pocket": "Αποθηκεύτηκε στο Pocket",
|
||||
"type_label_downloaded": "Downloaded",
|
||||
"type_label_downloaded": "Λήψεις",
|
||||
"menu_action_bookmark": "Προσθήκη σελιδοδείκτη",
|
||||
"menu_action_remove_bookmark": "Αφαίρεση σελιδοδείκτη",
|
||||
"menu_action_open_new_window": "Άνοιγμα σε νέο παράθυρο",
|
||||
|
@ -24,14 +24,14 @@ window.gActivityStreamStrings = {
|
|||
"menu_action_save_to_pocket": "Αποθήκευση στο Pocket",
|
||||
"menu_action_delete_pocket": "Διαγραφή από το Pocket",
|
||||
"menu_action_archive_pocket": "Αρχειοθέτηση στο Pocket",
|
||||
"menu_action_show_file_mac_os": "Show in Finder",
|
||||
"menu_action_show_file_mac_os": "Εμφάνιση στο Finder",
|
||||
"menu_action_show_file_windows": "Open Containing Folder",
|
||||
"menu_action_show_file_linux": "Open Containing Folder",
|
||||
"menu_action_show_file_default": "Show File",
|
||||
"menu_action_open_file": "Open File",
|
||||
"menu_action_show_file_default": "Προβολή αρχείου",
|
||||
"menu_action_open_file": "Άνοιγμα αρχείου",
|
||||
"menu_action_copy_download_link": "Copy Download Link",
|
||||
"menu_action_go_to_download_page": "Go to Download Page",
|
||||
"menu_action_remove_download": "Remove from History",
|
||||
"menu_action_remove_download": "Αφαίρεση από το ιστορικό",
|
||||
"search_button": "Αναζήτηση",
|
||||
"search_header": "Αναζήτηση {search_engine_name}",
|
||||
"search_web_placeholder": "Αναζήτηση στον ιστό",
|
||||
|
@ -44,7 +44,7 @@ window.gActivityStreamStrings = {
|
|||
"prefs_search_header": "Αναζήτηση ιστού",
|
||||
"prefs_topsites_description": "Οι ιστοσελίδες που επισκέπτεστε περισσότερο",
|
||||
"prefs_topstories_description2": "Great content from around the web, personalized for you",
|
||||
"prefs_topstories_options_sponsored_label": "Sponsored Stories",
|
||||
"prefs_topstories_options_sponsored_label": "Χορηγούμενες ιστορίες",
|
||||
"prefs_topstories_sponsored_learn_more": "Μάθετε περισσότερα",
|
||||
"prefs_highlights_description": "Μια συλλογή ιστοσελίδων που έχετε αποθηκεύσει ή επισκεφθεί",
|
||||
"prefs_highlights_options_visited_label": "Visited Pages",
|
||||
|
@ -100,20 +100,5 @@ window.gActivityStreamStrings = {
|
|||
"firstrun_terms_of_service": "Terms of Service",
|
||||
"firstrun_privacy_notice": "Privacy Notice",
|
||||
"firstrun_continue_to_login": "Continue",
|
||||
"firstrun_skip_login": "Skip this step",
|
||||
"prefs_restore_defaults_button": "Επαναφορά προεπιλογών",
|
||||
"prefs_topstories_description": "Υψηλής ποιότητας περιεχόμενο που ίσως έχετε χάσει",
|
||||
"prefs_topstories_show_sponsored_label": "Χορηγούμενες ιστορίες του {provider}",
|
||||
"settings_pane_header": "Προτιμήσεις νέας καρτέλας",
|
||||
"settings_pane_body2": "Επιλέξτε τι θα βλέπετε σε αυτή τη σελίδα.",
|
||||
"settings_pane_search_header": "Αναζήτηση",
|
||||
"settings_pane_search_body": "Αναζήτηση στο διαδίκτυο από τη νέα σας καρτέλα.",
|
||||
"settings_pane_topsites_body": "Πρόσβαση στις ιστοσελίδες που επισκέπτεστε περισσότερο.",
|
||||
"settings_pane_topsites_options_showmore": "Εμφάνιση δύο σειρών",
|
||||
"settings_pane_highlights_body2": "Βρείτε ξανά κάτι ενδιαφέρον που έχετε επισκεφθεί πρόσφατα ή έχετε αποθηκεύσει στους σελιδοδείκτες σας.",
|
||||
"settings_pane_highlights_options_visited": "Πρόσφατες ιστοσελίδες",
|
||||
"settings_pane_snippets_body": "Διαβάστε σύντομες και όμορφες ενημερώσεις από τη Mozilla σχετικά με το Firefox, το διαδικτυακό πολιτισμό και τα περιστασιακά, τυχαία memes.",
|
||||
"settings_pane_done_button": "Τέλος",
|
||||
"settings_pane_topstories_options_sponsored": "Εμφάνιση χορηγούμενων ιστοριών",
|
||||
"pocket_description": "Ανακαλύψτε περιεχόμενο υψηλής ακρίβειας που ίσως να χάνατε διαφορετικά, με τη βοήθεια του Pocket, μέλους της Mozilla."
|
||||
"firstrun_skip_login": "Skip this step"
|
||||
};
|
||||
|
|