Bug 1463943 - Add compact highlights, compress images and bug fixes to Activity Stream. r=k88hudson

MozReview-Commit-ID: LKbXq4nHBVS

--HG--
extra : rebase_source : 127374ca6077f547ad6ced91d580399c2e6a2670
This commit is contained in:
Ed Lee 2018-05-23 17:43:54 -07:00
Родитель 0ad8e6325d
Коммит e8d4461a55
126 изменённых файлов: 810 добавлений и 490 удалений

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

@ -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": "Pocketten sil",
"menu_action_archive_pocket": "Pockette 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 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_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"
};

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

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