зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1466971 - Add Blob images, Jexl targets and bug fixes to Activity Stream. r=ursula
MozReview-Commit-ID: NRTSgzuIzW --HG-- extra : rebase_source : 4103ffba7c6f6b0c2004245855c1fc67a0dd1843
This commit is contained in:
Родитель
7f90c6a9cc
Коммит
1d122eac32
|
@ -18,7 +18,7 @@ const TOPIC_LOCALES_CHANGE = "intl:app-locales-changed";
|
|||
|
||||
// Automated tests ensure packaged locales are in this list. Copied output of:
|
||||
// https://github.com/mozilla/activity-stream/blob/master/bin/render-activity-stream-html.js
|
||||
const ACTIVITY_STREAM_LOCALES = "en-US ach an ar ast az be bg bn-BD bn-IN br bs ca cak crh cs cy da de dsb el en-CA en-GB eo es-AR es-CL es-ES es-MX et eu fa ff fi fr fy-NL ga-IE gd gl gn gu-IN he hi-IN hr hsb hu hy-AM ia id it ja ka kab kk km kn ko lij lo lt ltg lv mai mk ml mr ms my nb-NO ne-NP nl nn-NO pa-IN pl pt-BR pt-PT rm ro ru si sk sl sq sr sv-SE ta te th tl tr uk ur uz vi zh-CN zh-TW".split(" ");
|
||||
const ACTIVITY_STREAM_LOCALES = "en-US ach an ar ast az be bg bn-BD bn-IN br bs ca cak crh cs cy da de dsb el en-CA en-GB eo es-AR es-CL es-ES es-MX et eu fa ff fi fr fy-NL ga-IE gd gl gn gu-IN he hi-IN hr hsb hu hy-AM ia id it ja ka kab kk km kn ko lij lo lt ltg lv mai mk ml mr ms my nb-NO ne-NP nl nn-NO oc pa-IN pl pt-BR pt-PT rm ro ru si sk sl sq sr sv-SE ta te th tl tr uk ur uz vi zh-CN zh-TW".split(" ");
|
||||
|
||||
const ABOUT_URL = "about:newtab";
|
||||
|
||||
|
|
|
@ -41,7 +41,6 @@ body {
|
|||
--newtab-text-conditional-color: #4A4A4F;
|
||||
--newtab-text-primary-color: #0C0C0D;
|
||||
--newtab-text-secondary-color: #737373;
|
||||
--newtab-text-tertiary-color: #737373;
|
||||
--newtab-textbox-background-color: #FFF;
|
||||
--newtab-textbox-border: rgba(12, 12, 13, 0.2);
|
||||
--newtab-textbox-focus-color: #0060DF;
|
||||
|
@ -84,7 +83,6 @@ body {
|
|||
--newtab-text-conditional-color: #F9F9FA;
|
||||
--newtab-text-primary-color: #F9F9FA;
|
||||
--newtab-text-secondary-color: rgba(249, 249, 250, 0.8);
|
||||
--newtab-text-tertiary-color: rgba(249, 249, 250, 0.6);
|
||||
--newtab-textbox-background-color: #38383D;
|
||||
--newtab-textbox-border: rgba(249, 249, 250, 0.2);
|
||||
--newtab-textbox-focus-color: #45A1FF;
|
||||
|
@ -1338,14 +1336,14 @@ main {
|
|||
word-wrap: break-word; }
|
||||
.card-outer .card-context {
|
||||
bottom: 0;
|
||||
color: var(--newtab-text-tertiary-color);
|
||||
color: var(--newtab-text-secondary-color);
|
||||
display: flex;
|
||||
font-size: 11px;
|
||||
offset-inline-start: 0;
|
||||
padding: 9px 16px 9px 14px;
|
||||
position: absolute; }
|
||||
.card-outer .card-context-icon {
|
||||
fill: var(--newtab-icon-tertiary-color);
|
||||
fill: var(--newtab-text-secondary-color);
|
||||
height: 22px;
|
||||
margin-inline-end: 6px; }
|
||||
.card-outer .card-context-label {
|
||||
|
@ -1390,9 +1388,9 @@ main {
|
|||
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;
|
||||
font-size: 12px;
|
||||
line-height: 13px;
|
||||
max-height: 13px;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap; }
|
||||
|
@ -1401,7 +1399,7 @@ main {
|
|||
.compact-cards .card-outer .card-context {
|
||||
background-color: var(--newtab-card-background-color);
|
||||
border-radius: 16px;
|
||||
clip-path: inset(0 0 4px);
|
||||
clip-path: inset(-1px -1px 4px);
|
||||
height: 32px;
|
||||
width: 32px;
|
||||
padding: 8px;
|
||||
|
@ -1411,13 +1409,13 @@ main {
|
|||
.compact-cards .card-outer .card-context::after {
|
||||
border: 1px solid var(--newtab-card-hairline-color);
|
||||
border-bottom: 0;
|
||||
border-radius: 16px 16px 0 0;
|
||||
border-radius: 17px 17px 0 0;
|
||||
content: '';
|
||||
position: absolute;
|
||||
height: 50%;
|
||||
width: 100%;
|
||||
top: 0;
|
||||
left: 0; }
|
||||
height: 17px;
|
||||
width: 34px;
|
||||
top: -1px;
|
||||
left: -1px; }
|
||||
.compact-cards .card-outer .card-context .card-context-icon {
|
||||
margin-inline-end: 0;
|
||||
height: 16px;
|
||||
|
@ -1635,8 +1633,10 @@ main {
|
|||
background-color: var(--newtab-button-secondary-color);
|
||||
font-family: inherit;
|
||||
padding: 8px 15px;
|
||||
margin-left: 12px;
|
||||
margin-inline-start: 12px;
|
||||
color: inherit; }
|
||||
.tall .ASRouterButton {
|
||||
margin-inline-start: 20px; }
|
||||
|
||||
.SnippetBaseContainer {
|
||||
position: fixed;
|
||||
|
@ -1757,11 +1757,24 @@ main {
|
|||
padding: 4px 0 6px 0;
|
||||
font-size: 15px; }
|
||||
|
||||
.SimpleSnippet.tall {
|
||||
padding: 27px 0; }
|
||||
|
||||
.SimpleSnippet .title {
|
||||
display: inline;
|
||||
font-size: inherit;
|
||||
margin: 0; }
|
||||
|
||||
.SimpleSnippet .titleIcon {
|
||||
background-repeat: no-repeat;
|
||||
background-size: 14px;
|
||||
height: 16px;
|
||||
width: 16px;
|
||||
margin-top: 2px;
|
||||
margin-inline-end: 2px;
|
||||
display: inline-block;
|
||||
vertical-align: top; }
|
||||
|
||||
.SimpleSnippet .body {
|
||||
display: inline;
|
||||
margin: 0; }
|
||||
|
@ -1772,6 +1785,9 @@ main {
|
|||
margin-inline-end: 12px;
|
||||
flex-shrink: 0; }
|
||||
|
||||
.SimpleSnippet.tall .icon {
|
||||
margin-inline-end: 20px; }
|
||||
|
||||
.SimpleSnippet .ASRouterAnchor {
|
||||
color: inherit;
|
||||
text-decoration: underline; }
|
||||
|
|
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
|
@ -44,7 +44,6 @@ body {
|
|||
--newtab-text-conditional-color: #4A4A4F;
|
||||
--newtab-text-primary-color: #0C0C0D;
|
||||
--newtab-text-secondary-color: #737373;
|
||||
--newtab-text-tertiary-color: #737373;
|
||||
--newtab-textbox-background-color: #FFF;
|
||||
--newtab-textbox-border: rgba(12, 12, 13, 0.2);
|
||||
--newtab-textbox-focus-color: #0060DF;
|
||||
|
@ -87,7 +86,6 @@ body {
|
|||
--newtab-text-conditional-color: #F9F9FA;
|
||||
--newtab-text-primary-color: #F9F9FA;
|
||||
--newtab-text-secondary-color: rgba(249, 249, 250, 0.8);
|
||||
--newtab-text-tertiary-color: rgba(249, 249, 250, 0.6);
|
||||
--newtab-textbox-background-color: #38383D;
|
||||
--newtab-textbox-border: rgba(249, 249, 250, 0.2);
|
||||
--newtab-textbox-focus-color: #45A1FF;
|
||||
|
@ -1341,14 +1339,14 @@ main {
|
|||
word-wrap: break-word; }
|
||||
.card-outer .card-context {
|
||||
bottom: 0;
|
||||
color: var(--newtab-text-tertiary-color);
|
||||
color: var(--newtab-text-secondary-color);
|
||||
display: flex;
|
||||
font-size: 11px;
|
||||
offset-inline-start: 0;
|
||||
padding: 9px 16px 9px 14px;
|
||||
position: absolute; }
|
||||
.card-outer .card-context-icon {
|
||||
fill: var(--newtab-icon-tertiary-color);
|
||||
fill: var(--newtab-text-secondary-color);
|
||||
height: 22px;
|
||||
margin-inline-end: 6px; }
|
||||
.card-outer .card-context-label {
|
||||
|
@ -1393,9 +1391,9 @@ main {
|
|||
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;
|
||||
font-size: 12px;
|
||||
line-height: 13px;
|
||||
max-height: 13px;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap; }
|
||||
|
@ -1404,7 +1402,7 @@ main {
|
|||
.compact-cards .card-outer .card-context {
|
||||
background-color: var(--newtab-card-background-color);
|
||||
border-radius: 16px;
|
||||
clip-path: inset(0 0 4px);
|
||||
clip-path: inset(-1px -1px 4px);
|
||||
height: 32px;
|
||||
width: 32px;
|
||||
padding: 8px;
|
||||
|
@ -1414,13 +1412,13 @@ main {
|
|||
.compact-cards .card-outer .card-context::after {
|
||||
border: 1px solid var(--newtab-card-hairline-color);
|
||||
border-bottom: 0;
|
||||
border-radius: 16px 16px 0 0;
|
||||
border-radius: 17px 17px 0 0;
|
||||
content: '';
|
||||
position: absolute;
|
||||
height: 50%;
|
||||
width: 100%;
|
||||
top: 0;
|
||||
left: 0; }
|
||||
height: 17px;
|
||||
width: 34px;
|
||||
top: -1px;
|
||||
left: -1px; }
|
||||
.compact-cards .card-outer .card-context .card-context-icon {
|
||||
margin-inline-end: 0;
|
||||
height: 16px;
|
||||
|
@ -1638,8 +1636,10 @@ main {
|
|||
background-color: var(--newtab-button-secondary-color);
|
||||
font-family: inherit;
|
||||
padding: 8px 15px;
|
||||
margin-left: 12px;
|
||||
margin-inline-start: 12px;
|
||||
color: inherit; }
|
||||
.tall .ASRouterButton {
|
||||
margin-inline-start: 20px; }
|
||||
|
||||
.SnippetBaseContainer {
|
||||
position: fixed;
|
||||
|
@ -1760,11 +1760,24 @@ main {
|
|||
padding: 4px 0 6px 0;
|
||||
font-size: 15px; }
|
||||
|
||||
.SimpleSnippet.tall {
|
||||
padding: 27px 0; }
|
||||
|
||||
.SimpleSnippet .title {
|
||||
display: inline;
|
||||
font-size: inherit;
|
||||
margin: 0; }
|
||||
|
||||
.SimpleSnippet .titleIcon {
|
||||
background-repeat: no-repeat;
|
||||
background-size: 14px;
|
||||
height: 16px;
|
||||
width: 16px;
|
||||
margin-top: 2px;
|
||||
margin-inline-end: 2px;
|
||||
display: inline-block;
|
||||
vertical-align: top; }
|
||||
|
||||
.SimpleSnippet .body {
|
||||
display: inline;
|
||||
margin: 0; }
|
||||
|
@ -1775,6 +1788,9 @@ main {
|
|||
margin-inline-end: 12px;
|
||||
flex-shrink: 0; }
|
||||
|
||||
.SimpleSnippet.tall .icon {
|
||||
margin-inline-end: 20px; }
|
||||
|
||||
.SimpleSnippet .ASRouterAnchor {
|
||||
color: inherit;
|
||||
text-decoration: underline; }
|
||||
|
|
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
|
@ -41,7 +41,6 @@ body {
|
|||
--newtab-text-conditional-color: #4A4A4F;
|
||||
--newtab-text-primary-color: #0C0C0D;
|
||||
--newtab-text-secondary-color: #737373;
|
||||
--newtab-text-tertiary-color: #737373;
|
||||
--newtab-textbox-background-color: #FFF;
|
||||
--newtab-textbox-border: rgba(12, 12, 13, 0.2);
|
||||
--newtab-textbox-focus-color: #0060DF;
|
||||
|
@ -84,7 +83,6 @@ body {
|
|||
--newtab-text-conditional-color: #F9F9FA;
|
||||
--newtab-text-primary-color: #F9F9FA;
|
||||
--newtab-text-secondary-color: rgba(249, 249, 250, 0.8);
|
||||
--newtab-text-tertiary-color: rgba(249, 249, 250, 0.6);
|
||||
--newtab-textbox-background-color: #38383D;
|
||||
--newtab-textbox-border: rgba(249, 249, 250, 0.2);
|
||||
--newtab-textbox-focus-color: #45A1FF;
|
||||
|
@ -1338,14 +1336,14 @@ main {
|
|||
word-wrap: break-word; }
|
||||
.card-outer .card-context {
|
||||
bottom: 0;
|
||||
color: var(--newtab-text-tertiary-color);
|
||||
color: var(--newtab-text-secondary-color);
|
||||
display: flex;
|
||||
font-size: 11px;
|
||||
offset-inline-start: 0;
|
||||
padding: 9px 16px 9px 14px;
|
||||
position: absolute; }
|
||||
.card-outer .card-context-icon {
|
||||
fill: var(--newtab-icon-tertiary-color);
|
||||
fill: var(--newtab-text-secondary-color);
|
||||
height: 22px;
|
||||
margin-inline-end: 6px; }
|
||||
.card-outer .card-context-label {
|
||||
|
@ -1390,9 +1388,9 @@ main {
|
|||
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;
|
||||
font-size: 12px;
|
||||
line-height: 13px;
|
||||
max-height: 13px;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap; }
|
||||
|
@ -1401,7 +1399,7 @@ main {
|
|||
.compact-cards .card-outer .card-context {
|
||||
background-color: var(--newtab-card-background-color);
|
||||
border-radius: 16px;
|
||||
clip-path: inset(0 0 4px);
|
||||
clip-path: inset(-1px -1px 4px);
|
||||
height: 32px;
|
||||
width: 32px;
|
||||
padding: 8px;
|
||||
|
@ -1411,13 +1409,13 @@ main {
|
|||
.compact-cards .card-outer .card-context::after {
|
||||
border: 1px solid var(--newtab-card-hairline-color);
|
||||
border-bottom: 0;
|
||||
border-radius: 16px 16px 0 0;
|
||||
border-radius: 17px 17px 0 0;
|
||||
content: '';
|
||||
position: absolute;
|
||||
height: 50%;
|
||||
width: 100%;
|
||||
top: 0;
|
||||
left: 0; }
|
||||
height: 17px;
|
||||
width: 34px;
|
||||
top: -1px;
|
||||
left: -1px; }
|
||||
.compact-cards .card-outer .card-context .card-context-icon {
|
||||
margin-inline-end: 0;
|
||||
height: 16px;
|
||||
|
@ -1635,8 +1633,10 @@ main {
|
|||
background-color: var(--newtab-button-secondary-color);
|
||||
font-family: inherit;
|
||||
padding: 8px 15px;
|
||||
margin-left: 12px;
|
||||
margin-inline-start: 12px;
|
||||
color: inherit; }
|
||||
.tall .ASRouterButton {
|
||||
margin-inline-start: 20px; }
|
||||
|
||||
.SnippetBaseContainer {
|
||||
position: fixed;
|
||||
|
@ -1757,11 +1757,24 @@ main {
|
|||
padding: 4px 0 6px 0;
|
||||
font-size: 15px; }
|
||||
|
||||
.SimpleSnippet.tall {
|
||||
padding: 27px 0; }
|
||||
|
||||
.SimpleSnippet .title {
|
||||
display: inline;
|
||||
font-size: inherit;
|
||||
margin: 0; }
|
||||
|
||||
.SimpleSnippet .titleIcon {
|
||||
background-repeat: no-repeat;
|
||||
background-size: 14px;
|
||||
height: 16px;
|
||||
width: 16px;
|
||||
margin-top: 2px;
|
||||
margin-inline-end: 2px;
|
||||
display: inline-block;
|
||||
vertical-align: top; }
|
||||
|
||||
.SimpleSnippet .body {
|
||||
display: inline;
|
||||
margin: 0; }
|
||||
|
@ -1772,6 +1785,9 @@ main {
|
|||
margin-inline-end: 12px;
|
||||
flex-shrink: 0; }
|
||||
|
||||
.SimpleSnippet.tall .icon {
|
||||
margin-inline-end: 20px; }
|
||||
|
||||
.SimpleSnippet .ASRouterAnchor {
|
||||
color: inherit;
|
||||
text-decoration: underline; }
|
||||
|
|
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
|
@ -968,16 +968,15 @@ class ASRouterUISurface extends __WEBPACK_IMPORTED_MODULE_4_react___default.a.Pu
|
|||
throw new Error(`You must provide a message_id for bundled messages`);
|
||||
}
|
||||
const eventType = `${message.provider || bundle.provider}_user_event`;
|
||||
|
||||
ASRouterUtils.sendTelemetry(Object.assign({
|
||||
message_id: message.id || extraProps.message_id,
|
||||
source: this.props.id,
|
||||
source: extraProps.id,
|
||||
action: eventType
|
||||
}, extraProps));
|
||||
}
|
||||
|
||||
sendImpression() {
|
||||
this.sendUserActionTelemetry({ event: "IMPRESSION" });
|
||||
sendImpression(extraProps) {
|
||||
this.sendUserActionTelemetry(Object.assign({ event: "IMPRESSION" }, extraProps));
|
||||
}
|
||||
|
||||
onBlockById(id) {
|
||||
|
@ -1024,6 +1023,7 @@ class ASRouterUISurface extends __WEBPACK_IMPORTED_MODULE_4_react___default.a.Pu
|
|||
return __WEBPACK_IMPORTED_MODULE_4_react___default.a.createElement(
|
||||
__WEBPACK_IMPORTED_MODULE_2__components_ImpressionsWrapper_ImpressionsWrapper__["a" /* ImpressionsWrapper */],
|
||||
{
|
||||
id: "NEWTAB_FOOTER_BAR",
|
||||
message: this.state.message,
|
||||
sendImpression: this.sendImpression,
|
||||
shouldSendImpressionOnUpdate: shouldSendImpressionOnUpdate
|
||||
|
@ -1754,7 +1754,7 @@ class ContextMenuItem extends __WEBPACK_IMPORTED_MODULE_0_react___default.a.Pure
|
|||
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_content_src_components_ErrorBoundary_ErrorBoundary__ = __webpack_require__(10);
|
||||
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_react__ = __webpack_require__(0);
|
||||
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_react__);
|
||||
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_content_src_components_SectionMenu_SectionMenu__ = __webpack_require__(34);
|
||||
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_content_src_components_SectionMenu_SectionMenu__ = __webpack_require__(35);
|
||||
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5_content_src_lib_section_menu_options__ = __webpack_require__(15);
|
||||
|
||||
|
||||
|
@ -2866,7 +2866,7 @@ Object.defineProperty(__webpack_exports__, "__esModule", { value: true });
|
|||
/* WEBPACK VAR INJECTION */(function(global) {/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__ = __webpack_require__(1);
|
||||
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_content_src_lib_snippets__ = __webpack_require__(20);
|
||||
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_content_src_components_Base_Base__ = __webpack_require__(25);
|
||||
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_content_src_lib_detect_user_session_start__ = __webpack_require__(39);
|
||||
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_content_src_lib_detect_user_session_start__ = __webpack_require__(40);
|
||||
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_content_src_lib_init_store__ = __webpack_require__(8);
|
||||
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5_react_redux__ = __webpack_require__(4);
|
||||
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5_react_redux___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_5_react_redux__);
|
||||
|
@ -3363,7 +3363,7 @@ class ImpressionsWrapper extends __WEBPACK_IMPORTED_MODULE_0_react___default.a.P
|
|||
// only send the event if the page becomes visible again.
|
||||
sendImpressionOrAddListener() {
|
||||
if (this.props.document.visibilityState === VISIBLE) {
|
||||
this.props.sendImpression();
|
||||
this.props.sendImpression({ id: this.props.id });
|
||||
} else {
|
||||
// We should only ever send the latest impression stats ping, so remove any
|
||||
// older listeners.
|
||||
|
@ -3374,7 +3374,7 @@ class ImpressionsWrapper extends __WEBPACK_IMPORTED_MODULE_0_react___default.a.P
|
|||
// When the page becomes visible, send the impression stats ping if the section isn't collapsed.
|
||||
this._onVisibilityChange = () => {
|
||||
if (this.props.document.visibilityState === VISIBLE) {
|
||||
this.props.sendImpression();
|
||||
this.props.sendImpression({ id: this.props.id });
|
||||
this.props.document.removeEventListener(VISIBILITY_CHANGE_EVENT, this._onVisibilityChange);
|
||||
}
|
||||
};
|
||||
|
@ -3484,7 +3484,7 @@ class OnboardingMessage_OnboardingCard extends external__React__default.a.PureCo
|
|||
|
||||
onClick() {
|
||||
const { props } = this;
|
||||
props.sendUserActionTelemetry({ event: "CLICK_BUTTON", message_id: props.id });
|
||||
props.sendUserActionTelemetry({ event: "CLICK_BUTTON", message_id: props.id, id: props.UISurface });
|
||||
props.onAction(props.content);
|
||||
}
|
||||
|
||||
|
@ -3540,7 +3540,11 @@ class OnboardingMessage_OnboardingMessage extends external__React__default.a.Pur
|
|||
external__React__default.a.createElement(
|
||||
"div",
|
||||
{ className: "onboardingMessageContainer" },
|
||||
props.bundle.map(message => external__React__default.a.createElement(OnboardingMessage_OnboardingCard, _extends({ key: message.id, sendUserActionTelemetry: props.sendUserActionTelemetry, onAction: props.onAction }, message)))
|
||||
props.bundle.map(message => external__React__default.a.createElement(OnboardingMessage_OnboardingCard, _extends({ key: message.id,
|
||||
sendUserActionTelemetry: props.sendUserActionTelemetry,
|
||||
onAction: props.onAction,
|
||||
UISurface: props.UISurface
|
||||
}, message)))
|
||||
)
|
||||
);
|
||||
}
|
||||
|
@ -3574,13 +3578,31 @@ function safeURI(url) {
|
|||
|
||||
|
||||
|
||||
const Button = props => external__React__default.a.createElement(
|
||||
"a",
|
||||
{ href: safeURI(props.url),
|
||||
onClick: props.onClick,
|
||||
className: props.className || "ASRouterButton" },
|
||||
props.children
|
||||
);
|
||||
const ALLOWED_STYLE_TAGS = ["color", "backgroundColor"];
|
||||
|
||||
const Button = props => {
|
||||
const style = {};
|
||||
|
||||
// Add allowed style tags from props, e.g. props.color becomes style={color: props.color}
|
||||
for (const tag of ALLOWED_STYLE_TAGS) {
|
||||
if (typeof props[tag] !== "undefined") {
|
||||
style[tag] = props[tag];
|
||||
}
|
||||
}
|
||||
// remove border if bg is set to something custom
|
||||
if (style.backgroundColor) {
|
||||
style.border = "0";
|
||||
}
|
||||
|
||||
return external__React__default.a.createElement(
|
||||
"a",
|
||||
{ href: safeURI(props.url),
|
||||
onClick: props.onClick,
|
||||
className: props.className || "ASRouterButton",
|
||||
style: style },
|
||||
props.children
|
||||
);
|
||||
};
|
||||
// CONCATENATED MODULE: ./system-addon/content-src/asrouter/components/SnippetBase/SnippetBase.jsx
|
||||
|
||||
|
||||
|
@ -3591,7 +3613,7 @@ class SnippetBase_SnippetBase extends external__React__default.a.PureComponent {
|
|||
}
|
||||
|
||||
onBlockClicked() {
|
||||
this.props.sendUserActionTelemetry({ event: "BLOCK" });
|
||||
this.props.sendUserActionTelemetry({ event: "BLOCK", id: this.props.UISurface });
|
||||
this.props.onBlock();
|
||||
}
|
||||
|
||||
|
@ -3629,7 +3651,7 @@ class SimpleSnippet_SimpleSnippet extends external__React__default.a.PureCompone
|
|||
}
|
||||
|
||||
onButtonClick() {
|
||||
this.props.sendUserActionTelemetry({ event: "CLICK_BUTTON" });
|
||||
this.props.sendUserActionTelemetry({ event: "CLICK_BUTTON", id: this.props.UISurface });
|
||||
}
|
||||
|
||||
renderTitle() {
|
||||
|
@ -3641,6 +3663,11 @@ class SimpleSnippet_SimpleSnippet extends external__React__default.a.PureCompone
|
|||
) : null;
|
||||
}
|
||||
|
||||
renderTitleIcon() {
|
||||
const titleIcon = safeURI(this.props.content.title_icon);
|
||||
return titleIcon ? external__React__default.a.createElement("span", { className: "titleIcon", style: { backgroundImage: `url("${titleIcon}")` } }) : null;
|
||||
}
|
||||
|
||||
renderButton(className) {
|
||||
const { props } = this;
|
||||
return external__React__default.a.createElement(
|
||||
|
@ -3648,7 +3675,9 @@ class SimpleSnippet_SimpleSnippet extends external__React__default.a.PureCompone
|
|||
{
|
||||
className: className,
|
||||
onClick: this.onButtonClick,
|
||||
url: props.content.button_url },
|
||||
url: props.content.button_url,
|
||||
color: props.content.button_color,
|
||||
backgroundColor: props.content.button_background_color },
|
||||
props.content.button_label
|
||||
);
|
||||
}
|
||||
|
@ -3657,13 +3686,16 @@ class SimpleSnippet_SimpleSnippet extends external__React__default.a.PureCompone
|
|||
const { props } = this;
|
||||
const hasLink = props.content.button_url && props.content.button_type === "anchor";
|
||||
const hasButton = props.content.button_url && !props.content.button_type;
|
||||
const className = `SimpleSnippet${props.content.tall ? " tall" : ""}`;
|
||||
return external__React__default.a.createElement(
|
||||
SnippetBase_SnippetBase,
|
||||
_extends({}, props, { className: "SimpleSnippet" }),
|
||||
_extends({}, props, { className: className }),
|
||||
external__React__default.a.createElement("img", { src: safeURI(props.content.icon) || DEFAULT_ICON_PATH, className: "icon" }),
|
||||
external__React__default.a.createElement(
|
||||
"div",
|
||||
null,
|
||||
this.renderTitleIcon(),
|
||||
" ",
|
||||
this.renderTitle(),
|
||||
" ",
|
||||
external__React__default.a.createElement(
|
||||
|
@ -3704,7 +3736,7 @@ class SimpleSnippet_SimpleSnippet extends external__React__default.a.PureCompone
|
|||
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_8_react__);
|
||||
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_9_content_src_components_Search_Search__ = __webpack_require__(30);
|
||||
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_10_content_src_components_Sections_Sections__ = __webpack_require__(32);
|
||||
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_11_content_src_components_StartupOverlay_StartupOverlay__ = __webpack_require__(38);
|
||||
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_11_content_src_components_StartupOverlay_StartupOverlay__ = __webpack_require__(39);
|
||||
|
||||
|
||||
|
||||
|
@ -4488,8 +4520,8 @@ const Search = Object(__WEBPACK_IMPORTED_MODULE_2_react_redux__["connect"])()(Ob
|
|||
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5_react_redux___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_5_react_redux__);
|
||||
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6_react__ = __webpack_require__(0);
|
||||
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_6_react__);
|
||||
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7_content_src_components_Topics_Topics__ = __webpack_require__(35);
|
||||
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8_content_src_components_TopSites_TopSites__ = __webpack_require__(36);
|
||||
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7_content_src_components_Topics_Topics__ = __webpack_require__(36);
|
||||
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8_content_src_components_TopSites_TopSites__ = __webpack_require__(37);
|
||||
var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
|
||||
|
||||
|
||||
|
@ -4766,11 +4798,366 @@ const Sections = Object(__WEBPACK_IMPORTED_MODULE_5_react_redux__["connect"])(st
|
|||
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
||||
|
||||
"use strict";
|
||||
/* WEBPACK VAR INJECTION */(function(global) {/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__ = __webpack_require__(1);
|
||||
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__types__ = __webpack_require__(34);
|
||||
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_react_redux__ = __webpack_require__(4);
|
||||
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_react_redux___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_react_redux__);
|
||||
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_react_intl__ = __webpack_require__(2);
|
||||
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_react_intl___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_react_intl__);
|
||||
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_content_src_lib_link_menu_options__ = __webpack_require__(11);
|
||||
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5_content_src_components_LinkMenu_LinkMenu__ = __webpack_require__(12);
|
||||
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6_react__ = __webpack_require__(0);
|
||||
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_6_react__);
|
||||
|
||||
// EXTERNAL MODULE: ./system-addon/common/Actions.jsm
|
||||
var Actions = __webpack_require__(1);
|
||||
|
||||
// CONCATENATED MODULE: ./system-addon/content-src/components/Card/types.js
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
// Keep track of pending image loads to only request once
|
||||
const gImageLoading = new Map();
|
||||
|
||||
/**
|
||||
* Card component.
|
||||
* Cards are found within a Section component and contain information about a link such
|
||||
* as preview image, page title, page description, and some context about if the page
|
||||
* was visited, bookmarked, trending etc...
|
||||
* Each Section can make an unordered list of Cards which will create one instane of
|
||||
* this class. Each card will then get a context menu which reflects the actions that
|
||||
* can be done on this Card.
|
||||
*/
|
||||
class _Card extends __WEBPACK_IMPORTED_MODULE_6_react___default.a.PureComponent {
|
||||
constructor(props) {
|
||||
super(props);
|
||||
this.state = {
|
||||
activeCard: null,
|
||||
imageLoaded: false,
|
||||
showContextMenu: false,
|
||||
cardImage: null
|
||||
};
|
||||
this.onMenuButtonClick = this.onMenuButtonClick.bind(this);
|
||||
this.onMenuUpdate = this.onMenuUpdate.bind(this);
|
||||
this.onLinkClick = this.onLinkClick.bind(this);
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper to conditionally load an image and update state when it loads.
|
||||
*/
|
||||
async maybeLoadImage() {
|
||||
// No need to load if it's already loaded or no image
|
||||
const { cardImage } = this.state;
|
||||
if (!cardImage) {
|
||||
return;
|
||||
}
|
||||
|
||||
const imageUrl = cardImage.url;
|
||||
if (!this.state.imageLoaded) {
|
||||
// Initialize a promise to share a load across multiple card updates
|
||||
if (!gImageLoading.has(imageUrl)) {
|
||||
const loaderPromise = new Promise((resolve, reject) => {
|
||||
const loader = new Image();
|
||||
loader.addEventListener("load", resolve);
|
||||
loader.addEventListener("error", reject);
|
||||
loader.src = imageUrl;
|
||||
});
|
||||
|
||||
// Save and remove the promise only while it's pending
|
||||
gImageLoading.set(imageUrl, loaderPromise);
|
||||
loaderPromise.catch(ex => ex).then(() => gImageLoading.delete(imageUrl)).catch();
|
||||
}
|
||||
|
||||
// Wait for the image whether just started loading or reused promise
|
||||
await gImageLoading.get(imageUrl);
|
||||
|
||||
// Only update state if we're still waiting to load the original image
|
||||
if (_Card.isImageInState(this.state, this.props.link.image) && !this.state.imageLoaded) {
|
||||
this.setState({ imageLoaded: true });
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if `.image` property on link object is a local image with blob data.
|
||||
* This function only works for props since state has `.url` and not `.data`.
|
||||
*
|
||||
* @param {obj|string} image
|
||||
* @returns {bool} true if image is a local image object, otherwise false
|
||||
* (otherwise, image will be a URL as a string)
|
||||
*/
|
||||
static isLocalImageObject(image) {
|
||||
return image && image.data && image.path;
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper to obtain the next state based on nextProps and prevState.
|
||||
*
|
||||
* NOTE: Rename this method to getDerivedStateFromProps when we update React
|
||||
* to >= 16.3. We will need to update tests as well. We cannot rename this
|
||||
* method to getDerivedStateFromProps now because there is a mismatch in
|
||||
* the React version that we are using for both testing and production.
|
||||
* (i.e. react-test-render => "16.3.2", react => "16.2.0").
|
||||
*
|
||||
* See https://github.com/airbnb/enzyme/blob/master/packages/enzyme-adapter-react-16/package.json#L43.
|
||||
*/
|
||||
static getNextStateFromProps(nextProps, prevState) {
|
||||
const { image } = nextProps.link;
|
||||
const imageInState = _Card.isImageInState(prevState, image);
|
||||
let nextState = null;
|
||||
|
||||
// Image is updating.
|
||||
if (!imageInState && nextProps.link) {
|
||||
nextState = { imageLoaded: false };
|
||||
}
|
||||
|
||||
if (imageInState) {
|
||||
return nextState;
|
||||
}
|
||||
|
||||
nextState = nextState || {};
|
||||
|
||||
// Since image was updated, attempt to revoke old image blob URL, if it exists.
|
||||
_Card.maybeRevokeImageBlob(prevState);
|
||||
|
||||
if (!image) {
|
||||
nextState.cardImage = null;
|
||||
} else if (_Card.isLocalImageObject(image)) {
|
||||
nextState.cardImage = { url: global.URL.createObjectURL(image.data), path: image.path };
|
||||
} else {
|
||||
nextState.cardImage = { url: image };
|
||||
}
|
||||
|
||||
return nextState;
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper to conditionally revoke the previous card image if it is a blob.
|
||||
*/
|
||||
static maybeRevokeImageBlob(prevState) {
|
||||
if (prevState.cardImage && prevState.cardImage.path) {
|
||||
global.URL.revokeObjectURL(prevState.cardImage.url);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper to check if an image is already in state.
|
||||
*/
|
||||
static isImageInState(state, image) {
|
||||
const { cardImage } = state;
|
||||
|
||||
// Both image and cardImage are present.
|
||||
if (image && cardImage) {
|
||||
return _Card.isLocalImageObject(image) ? cardImage.path === image.path : cardImage.url === image;
|
||||
}
|
||||
|
||||
// This will only handle the remaining three possible outcomes.
|
||||
// (i.e. everything except when both image and cardImage are present)
|
||||
return !image && !cardImage;
|
||||
}
|
||||
|
||||
onMenuButtonClick(event) {
|
||||
event.preventDefault();
|
||||
this.setState({
|
||||
activeCard: this.props.index,
|
||||
showContextMenu: true
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Report to telemetry additional information about the item.
|
||||
*/
|
||||
_getTelemetryInfo() {
|
||||
// Filter out "history" type for being the default
|
||||
if (this.props.link.type !== "history") {
|
||||
return { value: { card_type: this.props.link.type } };
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
onLinkClick(event) {
|
||||
event.preventDefault();
|
||||
if (this.props.link.type === "download") {
|
||||
this.props.dispatch(__WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__["b" /* actionCreators */].OnlyToMain({
|
||||
type: __WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__["c" /* actionTypes */].SHOW_DOWNLOAD_FILE,
|
||||
data: this.props.link
|
||||
}));
|
||||
} else {
|
||||
const { altKey, button, ctrlKey, metaKey, shiftKey } = event;
|
||||
this.props.dispatch(__WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__["b" /* actionCreators */].OnlyToMain({
|
||||
type: __WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__["c" /* actionTypes */].OPEN_LINK,
|
||||
data: Object.assign(this.props.link, { event: { altKey, button, ctrlKey, metaKey, shiftKey } })
|
||||
}));
|
||||
}
|
||||
if (this.props.isWebExtension) {
|
||||
this.props.dispatch(__WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__["b" /* actionCreators */].WebExtEvent(__WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__["c" /* actionTypes */].WEBEXT_CLICK, {
|
||||
source: this.props.eventSource,
|
||||
url: this.props.link.url,
|
||||
action_position: this.props.index
|
||||
}));
|
||||
} else {
|
||||
this.props.dispatch(__WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__["b" /* actionCreators */].UserEvent(Object.assign({
|
||||
event: "CLICK",
|
||||
source: this.props.eventSource,
|
||||
action_position: this.props.index
|
||||
}, this._getTelemetryInfo())));
|
||||
|
||||
if (this.props.shouldSendImpressionStats) {
|
||||
this.props.dispatch(__WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__["b" /* actionCreators */].ImpressionStats({
|
||||
source: this.props.eventSource,
|
||||
click: 0,
|
||||
tiles: [{ id: this.props.link.guid, pos: this.props.index }]
|
||||
}));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
onMenuUpdate(showContextMenu) {
|
||||
this.setState({ showContextMenu });
|
||||
}
|
||||
|
||||
componentDidMount() {
|
||||
this.maybeLoadImage();
|
||||
}
|
||||
|
||||
componentDidUpdate() {
|
||||
this.maybeLoadImage();
|
||||
}
|
||||
|
||||
// NOTE: Remove this function when we update React to >= 16.3 since React will
|
||||
// call getDerivedStateFromProps automatically. We will also need to
|
||||
// rename getNextStateFromProps to getDerivedStateFromProps.
|
||||
componentWillMount() {
|
||||
const nextState = _Card.getNextStateFromProps(this.props, this.state);
|
||||
if (nextState) {
|
||||
this.setState(nextState);
|
||||
}
|
||||
}
|
||||
|
||||
// NOTE: Remove this function when we update React to >= 16.3 since React will
|
||||
// call getDerivedStateFromProps automatically. We will also need to
|
||||
// rename getNextStateFromProps to getDerivedStateFromProps.
|
||||
componentWillReceiveProps(nextProps) {
|
||||
const nextState = _Card.getNextStateFromProps(nextProps, this.state);
|
||||
if (nextState) {
|
||||
this.setState(nextState);
|
||||
}
|
||||
}
|
||||
|
||||
componentWillUnmount() {
|
||||
_Card.maybeRevokeImageBlob(this.state);
|
||||
}
|
||||
|
||||
render() {
|
||||
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 } = __WEBPACK_IMPORTED_MODULE_1__types__["a" /* cardContextTypes */][link.type === "now" ? "trending" : link.type] || {};
|
||||
const hasImage = this.state.cardImage || link.hasImage;
|
||||
const imageStyle = { backgroundImage: this.state.cardImage ? `url(${this.state.cardImage.url})` : "none" };
|
||||
const outerClassName = ["card-outer", className, isContextMenuOpen && "active", props.placeholder && "placeholder"].filter(v => v).join(" ");
|
||||
|
||||
return __WEBPACK_IMPORTED_MODULE_6_react___default.a.createElement(
|
||||
"li",
|
||||
{ className: outerClassName },
|
||||
__WEBPACK_IMPORTED_MODULE_6_react___default.a.createElement(
|
||||
"a",
|
||||
{ href: link.type === "pocket" ? link.open_url : link.url, onClick: !props.placeholder ? this.onLinkClick : undefined },
|
||||
__WEBPACK_IMPORTED_MODULE_6_react___default.a.createElement(
|
||||
"div",
|
||||
{ className: "card" },
|
||||
__WEBPACK_IMPORTED_MODULE_6_react___default.a.createElement(
|
||||
"div",
|
||||
{ className: "card-preview-image-outer" },
|
||||
hasImage && __WEBPACK_IMPORTED_MODULE_6_react___default.a.createElement("div", { className: `card-preview-image${this.state.imageLoaded ? " loaded" : ""}`, style: imageStyle })
|
||||
),
|
||||
__WEBPACK_IMPORTED_MODULE_6_react___default.a.createElement(
|
||||
"div",
|
||||
{ className: "card-details" },
|
||||
link.type === "download" && __WEBPACK_IMPORTED_MODULE_6_react___default.a.createElement(
|
||||
"div",
|
||||
{ className: "card-host-name alternate" },
|
||||
__WEBPACK_IMPORTED_MODULE_6_react___default.a.createElement(__WEBPACK_IMPORTED_MODULE_3_react_intl__["FormattedMessage"], { id: Object(__WEBPACK_IMPORTED_MODULE_4_content_src_lib_link_menu_options__["a" /* GetPlatformString */])(this.props.platform) })
|
||||
),
|
||||
link.hostname && __WEBPACK_IMPORTED_MODULE_6_react___default.a.createElement(
|
||||
"div",
|
||||
{ className: "card-host-name" },
|
||||
link.hostname.slice(0, 100),
|
||||
link.type === "download" && ` \u2014 ${link.description}`
|
||||
),
|
||||
__WEBPACK_IMPORTED_MODULE_6_react___default.a.createElement(
|
||||
"div",
|
||||
{ className: ["card-text", icon ? "" : "no-context", link.description ? "" : "no-description", link.hostname ? "" : "no-host-name"].join(" ") },
|
||||
__WEBPACK_IMPORTED_MODULE_6_react___default.a.createElement(
|
||||
"h4",
|
||||
{ className: "card-title", dir: "auto" },
|
||||
link.title
|
||||
),
|
||||
__WEBPACK_IMPORTED_MODULE_6_react___default.a.createElement(
|
||||
"p",
|
||||
{ className: "card-description", dir: "auto" },
|
||||
link.description
|
||||
)
|
||||
),
|
||||
__WEBPACK_IMPORTED_MODULE_6_react___default.a.createElement(
|
||||
"div",
|
||||
{ className: "card-context" },
|
||||
icon && !link.context && __WEBPACK_IMPORTED_MODULE_6_react___default.a.createElement("span", { className: `card-context-icon icon icon-${icon}` }),
|
||||
link.icon && link.context && __WEBPACK_IMPORTED_MODULE_6_react___default.a.createElement("span", { className: "card-context-icon icon", style: { backgroundImage: `url('${link.icon}')` } }),
|
||||
intlID && !link.context && __WEBPACK_IMPORTED_MODULE_6_react___default.a.createElement(
|
||||
"div",
|
||||
{ className: "card-context-label" },
|
||||
__WEBPACK_IMPORTED_MODULE_6_react___default.a.createElement(__WEBPACK_IMPORTED_MODULE_3_react_intl__["FormattedMessage"], { id: intlID, defaultMessage: "Visited" })
|
||||
),
|
||||
link.context && __WEBPACK_IMPORTED_MODULE_6_react___default.a.createElement(
|
||||
"div",
|
||||
{ className: "card-context-label" },
|
||||
link.context
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
),
|
||||
!props.placeholder && __WEBPACK_IMPORTED_MODULE_6_react___default.a.createElement(
|
||||
"button",
|
||||
{ className: "context-menu-button icon",
|
||||
onClick: this.onMenuButtonClick },
|
||||
__WEBPACK_IMPORTED_MODULE_6_react___default.a.createElement(
|
||||
"span",
|
||||
{ className: "sr-only" },
|
||||
`Open context menu for ${link.title}`
|
||||
)
|
||||
),
|
||||
isContextMenuOpen && __WEBPACK_IMPORTED_MODULE_6_react___default.a.createElement(__WEBPACK_IMPORTED_MODULE_5_content_src_components_LinkMenu_LinkMenu__["a" /* LinkMenu */], {
|
||||
dispatch: dispatch,
|
||||
index: index,
|
||||
source: eventSource,
|
||||
onUpdate: this.onMenuUpdate,
|
||||
options: link.contextMenuOptions || contextMenuOptions,
|
||||
site: link,
|
||||
siteInfo: this._getTelemetryInfo(),
|
||||
shouldSendImpressionStats: shouldSendImpressionStats })
|
||||
);
|
||||
}
|
||||
}
|
||||
/* unused harmony export _Card */
|
||||
|
||||
_Card.defaultProps = { link: {} };
|
||||
const Card = Object(__WEBPACK_IMPORTED_MODULE_2_react_redux__["connect"])(state => ({ platform: state.Prefs.values.platform }))(_Card);
|
||||
/* harmony export (immutable) */ __webpack_exports__["a"] = Card;
|
||||
|
||||
const PlaceholderCard = props => __WEBPACK_IMPORTED_MODULE_6_react___default.a.createElement(Card, { placeholder: true, className: props.className });
|
||||
/* harmony export (immutable) */ __webpack_exports__["b"] = PlaceholderCard;
|
||||
|
||||
/* WEBPACK VAR INJECTION */}.call(__webpack_exports__, __webpack_require__(3)))
|
||||
|
||||
/***/ }),
|
||||
/* 34 */
|
||||
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
||||
|
||||
"use strict";
|
||||
const cardContextTypes = {
|
||||
history: {
|
||||
intlID: "type_label_visited",
|
||||
|
@ -4797,270 +5184,11 @@ const cardContextTypes = {
|
|||
icon: "download"
|
||||
}
|
||||
};
|
||||
// EXTERNAL MODULE: external "ReactRedux"
|
||||
var external__ReactRedux_ = __webpack_require__(4);
|
||||
var external__ReactRedux__default = /*#__PURE__*/__webpack_require__.n(external__ReactRedux_);
|
||||
|
||||
// EXTERNAL MODULE: external "ReactIntl"
|
||||
var external__ReactIntl_ = __webpack_require__(2);
|
||||
var external__ReactIntl__default = /*#__PURE__*/__webpack_require__.n(external__ReactIntl_);
|
||||
|
||||
// EXTERNAL MODULE: ./system-addon/content-src/lib/link-menu-options.js
|
||||
var link_menu_options = __webpack_require__(11);
|
||||
|
||||
// EXTERNAL MODULE: ./system-addon/content-src/components/LinkMenu/LinkMenu.jsx
|
||||
var LinkMenu = __webpack_require__(12);
|
||||
|
||||
// EXTERNAL MODULE: external "React"
|
||||
var external__React_ = __webpack_require__(0);
|
||||
var external__React__default = /*#__PURE__*/__webpack_require__.n(external__React_);
|
||||
|
||||
// CONCATENATED MODULE: ./system-addon/content-src/components/Card/Card.jsx
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
// Keep track of pending image loads to only request once
|
||||
const gImageLoading = new Map();
|
||||
|
||||
/**
|
||||
* Card component.
|
||||
* Cards are found within a Section component and contain information about a link such
|
||||
* as preview image, page title, page description, and some context about if the page
|
||||
* was visited, bookmarked, trending etc...
|
||||
* Each Section can make an unordered list of Cards which will create one instane of
|
||||
* this class. Each card will then get a context menu which reflects the actions that
|
||||
* can be done on this Card.
|
||||
*/
|
||||
class Card__Card extends external__React__default.a.PureComponent {
|
||||
constructor(props) {
|
||||
super(props);
|
||||
this.state = {
|
||||
activeCard: null,
|
||||
imageLoaded: false,
|
||||
showContextMenu: false
|
||||
};
|
||||
this.onMenuButtonClick = this.onMenuButtonClick.bind(this);
|
||||
this.onMenuUpdate = this.onMenuUpdate.bind(this);
|
||||
this.onLinkClick = this.onLinkClick.bind(this);
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper to conditionally load an image and update state when it loads.
|
||||
*/
|
||||
async maybeLoadImage() {
|
||||
// No need to load if it's already loaded or no image
|
||||
const { image } = this.props.link;
|
||||
if (!this.state.imageLoaded && image) {
|
||||
// Initialize a promise to share a load across multiple card updates
|
||||
if (!gImageLoading.has(image)) {
|
||||
const loaderPromise = new Promise((resolve, reject) => {
|
||||
const loader = new Image();
|
||||
loader.addEventListener("load", resolve);
|
||||
loader.addEventListener("error", reject);
|
||||
loader.src = image;
|
||||
});
|
||||
|
||||
// Save and remove the promise only while it's pending
|
||||
gImageLoading.set(image, loaderPromise);
|
||||
loaderPromise.catch(ex => ex).then(() => gImageLoading.delete(image)).catch();
|
||||
}
|
||||
|
||||
// Wait for the image whether just started loading or reused promise
|
||||
await gImageLoading.get(image);
|
||||
|
||||
// Only update state if we're still waiting to load the original image
|
||||
if (this.props.link.image === image && !this.state.imageLoaded) {
|
||||
this.setState({ imageLoaded: true });
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
onMenuButtonClick(event) {
|
||||
event.preventDefault();
|
||||
this.setState({
|
||||
activeCard: this.props.index,
|
||||
showContextMenu: true
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Report to telemetry additional information about the item.
|
||||
*/
|
||||
_getTelemetryInfo() {
|
||||
// Filter out "history" type for being the default
|
||||
if (this.props.link.type !== "history") {
|
||||
return { value: { card_type: this.props.link.type } };
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
onLinkClick(event) {
|
||||
event.preventDefault();
|
||||
if (this.props.link.type === "download") {
|
||||
this.props.dispatch(Actions["b" /* actionCreators */].OnlyToMain({
|
||||
type: Actions["c" /* actionTypes */].SHOW_DOWNLOAD_FILE,
|
||||
data: this.props.link
|
||||
}));
|
||||
} else {
|
||||
const { altKey, button, ctrlKey, metaKey, shiftKey } = event;
|
||||
this.props.dispatch(Actions["b" /* actionCreators */].OnlyToMain({
|
||||
type: Actions["c" /* actionTypes */].OPEN_LINK,
|
||||
data: Object.assign(this.props.link, { event: { altKey, button, ctrlKey, metaKey, shiftKey } })
|
||||
}));
|
||||
}
|
||||
if (this.props.isWebExtension) {
|
||||
this.props.dispatch(Actions["b" /* actionCreators */].WebExtEvent(Actions["c" /* actionTypes */].WEBEXT_CLICK, {
|
||||
source: this.props.eventSource,
|
||||
url: this.props.link.url,
|
||||
action_position: this.props.index
|
||||
}));
|
||||
} else {
|
||||
this.props.dispatch(Actions["b" /* actionCreators */].UserEvent(Object.assign({
|
||||
event: "CLICK",
|
||||
source: this.props.eventSource,
|
||||
action_position: this.props.index
|
||||
}, this._getTelemetryInfo())));
|
||||
|
||||
if (this.props.shouldSendImpressionStats) {
|
||||
this.props.dispatch(Actions["b" /* actionCreators */].ImpressionStats({
|
||||
source: this.props.eventSource,
|
||||
click: 0,
|
||||
tiles: [{ id: this.props.link.guid, pos: this.props.index }]
|
||||
}));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
onMenuUpdate(showContextMenu) {
|
||||
this.setState({ showContextMenu });
|
||||
}
|
||||
|
||||
componentDidMount() {
|
||||
this.maybeLoadImage();
|
||||
}
|
||||
|
||||
componentDidUpdate() {
|
||||
this.maybeLoadImage();
|
||||
}
|
||||
|
||||
componentWillReceiveProps(nextProps) {
|
||||
// Clear the image state if changing images
|
||||
if (nextProps.link.image !== this.props.link.image) {
|
||||
this.setState({ imageLoaded: false });
|
||||
}
|
||||
}
|
||||
|
||||
render() {
|
||||
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: 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" },
|
||||
external__React__default.a.createElement(
|
||||
"div",
|
||||
{ className: "card-preview-image-outer" },
|
||||
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" },
|
||||
link.type === "download" && external__React__default.a.createElement(
|
||||
"div",
|
||||
{ className: "card-host-name alternate" },
|
||||
external__React__default.a.createElement(external__ReactIntl_["FormattedMessage"], { id: Object(link_menu_options["a" /* GetPlatformString */])(this.props.platform) })
|
||||
),
|
||||
link.hostname && external__React__default.a.createElement(
|
||||
"div",
|
||||
{ className: "card-host-name" },
|
||||
link.hostname.slice(0, 100),
|
||||
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"].join(" ") },
|
||||
external__React__default.a.createElement(
|
||||
"h4",
|
||||
{ className: "card-title", dir: "auto" },
|
||||
link.title
|
||||
),
|
||||
external__React__default.a.createElement(
|
||||
"p",
|
||||
{ className: "card-description", dir: "auto" },
|
||||
link.description
|
||||
)
|
||||
),
|
||||
external__React__default.a.createElement(
|
||||
"div",
|
||||
{ className: "card-context" },
|
||||
icon && !link.context && external__React__default.a.createElement("span", { className: `card-context-icon icon icon-${icon}` }),
|
||||
link.icon && link.context && external__React__default.a.createElement("span", { className: "card-context-icon icon", style: { backgroundImage: `url('${link.icon}')` } }),
|
||||
intlID && !link.context && external__React__default.a.createElement(
|
||||
"div",
|
||||
{ className: "card-context-label" },
|
||||
external__React__default.a.createElement(external__ReactIntl_["FormattedMessage"], { id: intlID, defaultMessage: "Visited" })
|
||||
),
|
||||
link.context && external__React__default.a.createElement(
|
||||
"div",
|
||||
{ className: "card-context-label" },
|
||||
link.context
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
),
|
||||
!props.placeholder && external__React__default.a.createElement(
|
||||
"button",
|
||||
{ className: "context-menu-button icon",
|
||||
onClick: this.onMenuButtonClick },
|
||||
external__React__default.a.createElement(
|
||||
"span",
|
||||
{ className: "sr-only" },
|
||||
`Open context menu for ${link.title}`
|
||||
)
|
||||
),
|
||||
isContextMenuOpen && external__React__default.a.createElement(LinkMenu["a" /* LinkMenu */], {
|
||||
dispatch: dispatch,
|
||||
index: index,
|
||||
source: eventSource,
|
||||
onUpdate: this.onMenuUpdate,
|
||||
options: link.contextMenuOptions || contextMenuOptions,
|
||||
site: link,
|
||||
siteInfo: this._getTelemetryInfo(),
|
||||
shouldSendImpressionStats: shouldSendImpressionStats })
|
||||
);
|
||||
}
|
||||
}
|
||||
/* unused harmony export _Card */
|
||||
|
||||
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 = props => external__React__default.a.createElement(Card, { placeholder: true, className: props.className });
|
||||
/* harmony export (immutable) */ __webpack_exports__["b"] = PlaceholderCard;
|
||||
/* harmony export (immutable) */ __webpack_exports__["a"] = cardContextTypes;
|
||||
|
||||
|
||||
/***/ }),
|
||||
/* 34 */
|
||||
/* 35 */
|
||||
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
||||
|
||||
"use strict";
|
||||
|
@ -5133,7 +5261,7 @@ const SectionMenu = Object(__WEBPACK_IMPORTED_MODULE_2_react_intl__["injectIntl"
|
|||
|
||||
|
||||
/***/ }),
|
||||
/* 35 */
|
||||
/* 36 */
|
||||
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
||||
|
||||
"use strict";
|
||||
|
@ -5189,7 +5317,7 @@ class Topics extends __WEBPACK_IMPORTED_MODULE_1_react___default.a.PureComponent
|
|||
|
||||
|
||||
/***/ }),
|
||||
/* 36 */
|
||||
/* 37 */
|
||||
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
||||
|
||||
"use strict";
|
||||
|
@ -5204,7 +5332,7 @@ class Topics extends __WEBPACK_IMPORTED_MODULE_1_react___default.a.PureComponent
|
|||
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6_react__ = __webpack_require__(0);
|
||||
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_6_react__);
|
||||
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7_common_Reducers_jsm__ = __webpack_require__(6);
|
||||
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__TopSiteForm__ = __webpack_require__(37);
|
||||
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__TopSiteForm__ = __webpack_require__(38);
|
||||
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_9__TopSite__ = __webpack_require__(18);
|
||||
var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
|
||||
|
||||
|
@ -5366,7 +5494,7 @@ const TopSites = Object(__WEBPACK_IMPORTED_MODULE_4_react_redux__["connect"])(st
|
|||
/* WEBPACK VAR INJECTION */}.call(__webpack_exports__, __webpack_require__(3)))
|
||||
|
||||
/***/ }),
|
||||
/* 37 */
|
||||
/* 38 */
|
||||
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
||||
|
||||
"use strict";
|
||||
|
@ -5736,7 +5864,7 @@ TopSiteForm_TopSiteForm.defaultProps = {
|
|||
};
|
||||
|
||||
/***/ }),
|
||||
/* 38 */
|
||||
/* 39 */
|
||||
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
||||
|
||||
"use strict";
|
||||
|
@ -5891,7 +6019,7 @@ const StartupOverlay = Object(__WEBPACK_IMPORTED_MODULE_2_react_redux__["connect
|
|||
|
||||
|
||||
/***/ }),
|
||||
/* 39 */
|
||||
/* 40 */
|
||||
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
||||
|
||||
"use strict";
|
||||
|
|
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
|
@ -8,7 +8,7 @@
|
|||
<em:type>2</em:type>
|
||||
<em:bootstrap>true</em:bootstrap>
|
||||
<em:unpack>false</em:unpack>
|
||||
<em:version>2018.05.30.1059-64e374ac</em:version>
|
||||
<em:version>2018.06.06.1137-f6f92043</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>
|
||||
|
|
|
@ -8,6 +8,9 @@ Cu.importGlobalProperties(["fetch"]);
|
|||
const {ASRouterActions: ra} = ChromeUtils.import("resource://activity-stream/common/Actions.jsm", {});
|
||||
const {OnboardingMessageProvider} = ChromeUtils.import("resource://activity-stream/lib/OnboardingMessageProvider.jsm", {});
|
||||
|
||||
ChromeUtils.defineModuleGetter(this, "ASRouterTargeting",
|
||||
"resource://activity-stream/lib/ASRouterTargeting.jsm");
|
||||
|
||||
const INCOMING_MESSAGE_NAME = "ASRouter:child-to-parent";
|
||||
const OUTGOING_MESSAGE_NAME = "ASRouter:parent-to-child";
|
||||
const ONE_HOUR_IN_MS = 60 * 60 * 1000;
|
||||
|
@ -102,17 +105,6 @@ const MessageLoaderUtils = {
|
|||
|
||||
this.MessageLoaderUtils = MessageLoaderUtils;
|
||||
|
||||
/**
|
||||
* getRandomItemFromArray
|
||||
*
|
||||
* @param {Array} arr An array of items
|
||||
* @returns one of the items in the array
|
||||
*/
|
||||
function getRandomItemFromArray(arr) {
|
||||
const index = Math.floor(Math.random() * arr.length);
|
||||
return arr[index];
|
||||
}
|
||||
|
||||
/**
|
||||
* @class _ASRouter - Keeps track of all messages, UI surfaces, and
|
||||
* handles blocking, rotation, etc. Inspecting ASRouter.state will
|
||||
|
@ -238,29 +230,40 @@ class _ASRouter {
|
|||
bundledMessages.push({content: originalMessage.content, id: originalMessage.id});
|
||||
for (const msg of this.state.messages) {
|
||||
if (msg.bundled && msg.template === originalMessage.template && msg.id !== originalMessage.id && !this.state.blockList.includes(msg.id)) {
|
||||
// only copy the content - that's what the UI cares about
|
||||
// Only copy the content - that's what the UI cares about
|
||||
bundledMessages.push({content: msg.content, id: msg.id});
|
||||
}
|
||||
|
||||
// Stop once we have enough messages to fill a bundle
|
||||
if (bundledMessages.length === originalMessage.bundled) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// If we did not find enough messages to fill the bundle, do not send the bundle down
|
||||
if (bundledMessages.length < originalMessage.bundled) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return {bundle: bundledMessages, provider: originalMessage.provider, template: originalMessage.template};
|
||||
}
|
||||
|
||||
async sendNextMessage(target) {
|
||||
let message;
|
||||
let bundledMessages;
|
||||
_getUnblockedMessages() {
|
||||
let {state} = this;
|
||||
return state.messages.filter(item => !state.blockList.includes(item.id));
|
||||
}
|
||||
|
||||
async sendNextMessage(target) {
|
||||
let bundledMessages;
|
||||
const msgs = this._getUnblockedMessages();
|
||||
let message = await ASRouterTargeting.findMatchingMessage(msgs);
|
||||
await this.setState({lastMessageId: message ? message.id : null});
|
||||
|
||||
await this.setState(state => {
|
||||
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) {
|
||||
bundledMessages = this._getBundledMessages(message);
|
||||
}
|
||||
if (message && !bundledMessages) {
|
||||
if (message && !message.bundled) {
|
||||
// If we only need to send 1 message, send the message
|
||||
target.sendAsyncMessage(OUTGOING_MESSAGE_NAME, {type: "SET_MESSAGE", data: message});
|
||||
} else if (bundledMessages) {
|
||||
|
|
|
@ -0,0 +1,60 @@
|
|||
ChromeUtils.import("resource://gre/modules/components-utils/FilterExpressions.jsm");
|
||||
ChromeUtils.import("resource://gre/modules/Services.jsm");
|
||||
ChromeUtils.defineModuleGetter(this, "ProfileAge",
|
||||
"resource://gre/modules/ProfileAge.jsm");
|
||||
ChromeUtils.import("resource://gre/modules/Console.jsm");
|
||||
|
||||
const FXA_USERNAME_PREF = "services.sync.username";
|
||||
|
||||
/**
|
||||
* removeRandomItemFromArray - Removes a random item from the array and returns it.
|
||||
*
|
||||
* @param {Array} arr An array of items
|
||||
* @returns one of the items in the array
|
||||
*/
|
||||
function removeRandomItemFromArray(arr) {
|
||||
return arr.splice(Math.floor(Math.random() * arr.length), 1)[0];
|
||||
}
|
||||
|
||||
const TargetingGetters = {
|
||||
get profileAgeCreated() {
|
||||
return new ProfileAge(null, null).created;
|
||||
},
|
||||
get profileAgeReset() {
|
||||
return new ProfileAge(null, null).reset;
|
||||
},
|
||||
get hasFxAccount() {
|
||||
return Services.prefs.prefHasUserValue(FXA_USERNAME_PREF);
|
||||
}
|
||||
};
|
||||
|
||||
this.ASRouterTargeting = {
|
||||
Environment: TargetingGetters,
|
||||
|
||||
isMatch(filterExpression, context = this.Environment) {
|
||||
return FilterExpressions.eval(filterExpression, context);
|
||||
},
|
||||
|
||||
/**
|
||||
* findMatchingMessage - Given an array of messages, returns one message
|
||||
* whos targeting expression evaluates to true
|
||||
*
|
||||
* @param {Array} messages An array of AS router messages
|
||||
* @param {obj|null} context A FilterExpression context. Defaults to TargetingGetters above.
|
||||
* @returns {obj} an AS router message
|
||||
*/
|
||||
async findMatchingMessage(messages, context) {
|
||||
const arrayOfItems = [...messages];
|
||||
let match;
|
||||
let candidate;
|
||||
while (!match && arrayOfItems.length) {
|
||||
candidate = removeRandomItemFromArray(arrayOfItems);
|
||||
if (candidate && (!candidate.targeting || await this.isMatch(candidate.targeting, context))) {
|
||||
match = candidate;
|
||||
}
|
||||
}
|
||||
return match;
|
||||
}
|
||||
};
|
||||
|
||||
this.EXPORTED_SYMBOLS = ["ASRouterTargeting", "removeRandomItemFromArray"];
|
|
@ -30,7 +30,7 @@ const PREFS_BEFORE_SECTIONS = [
|
|||
descString: "prefs_topsites_description"
|
||||
},
|
||||
icon: "topsites",
|
||||
maxRows: 2,
|
||||
maxRows: 4,
|
||||
rowsPref: "topSitesRows"
|
||||
}
|
||||
];
|
||||
|
|
|
@ -5,18 +5,14 @@
|
|||
|
||||
const EXPORTED_SYMBOLS = ["Screenshots"];
|
||||
|
||||
Cu.importGlobalProperties(["fetch"]);
|
||||
|
||||
ChromeUtils.import("resource://gre/modules/XPCOMUtils.jsm");
|
||||
|
||||
ChromeUtils.defineModuleGetter(this, "BackgroundPageThumbs",
|
||||
"resource://gre/modules/BackgroundPageThumbs.jsm");
|
||||
ChromeUtils.defineModuleGetter(this, "PageThumbs",
|
||||
"resource://gre/modules/PageThumbs.jsm");
|
||||
ChromeUtils.defineModuleGetter(this, "FileUtils",
|
||||
"resource://gre/modules/FileUtils.jsm");
|
||||
XPCOMUtils.defineLazyServiceGetter(this, "MIMEService",
|
||||
"@mozilla.org/mime;1", "nsIMIMEService");
|
||||
ChromeUtils.defineModuleGetter(this, "OS",
|
||||
"resource://gre/modules/osfile.jsm");
|
||||
ChromeUtils.defineModuleGetter(this, "PrivateBrowsingUtils",
|
||||
"resource://gre/modules/PrivateBrowsingUtils.jsm");
|
||||
ChromeUtils.defineModuleGetter(this, "Services",
|
||||
|
@ -25,53 +21,28 @@ ChromeUtils.defineModuleGetter(this, "Services",
|
|||
const GREY_10 = "#F9F9FA";
|
||||
|
||||
this.Screenshots = {
|
||||
/**
|
||||
* Convert bytes to a string using extremely fast String.fromCharCode without
|
||||
* exceeding the max number of arguments that can be provided to a function.
|
||||
*/
|
||||
_bytesToString(bytes) {
|
||||
// NB: This comes from js/src/vm/ArgumentsObject.h ARGS_LENGTH_MAX
|
||||
const ARGS_LENGTH_MAX = 500 * 1000;
|
||||
let i = 0;
|
||||
let str = "";
|
||||
let {length} = bytes;
|
||||
while (i < length) {
|
||||
const start = i;
|
||||
i += ARGS_LENGTH_MAX;
|
||||
str += String.fromCharCode.apply(null, bytes.slice(start, i));
|
||||
}
|
||||
return str;
|
||||
},
|
||||
|
||||
/**
|
||||
* Get a screenshot / thumbnail for a url. Either returns the disk cached
|
||||
* image or initiates a background request for the url.
|
||||
*
|
||||
* @param url {string} The url to get a thumbnail
|
||||
* @return {Promise} Resolves a data uri string or null if failed
|
||||
* @return {Promise} Resolves a custom object or null if failed
|
||||
*/
|
||||
async getScreenshotForURL(url) {
|
||||
try {
|
||||
await BackgroundPageThumbs.captureIfMissing(url, {backgroundColor: GREY_10});
|
||||
const imgPath = PageThumbs.getThumbnailPath(url);
|
||||
|
||||
// OS.File object used to easily read off-thread
|
||||
const file = await OS.File.open(imgPath, {read: true, existing: true});
|
||||
const filePathResponse = await fetch(`file://${imgPath}`);
|
||||
const fileContents = await filePathResponse.blob();
|
||||
|
||||
// Check if the file is empty, which indicates there isn't actually a
|
||||
// thumbnail, so callers can show a failure state.
|
||||
const bytes = await file.read();
|
||||
if (bytes.length === 0) {
|
||||
if (fileContents.size === 0) {
|
||||
return null;
|
||||
}
|
||||
|
||||
// nsIFile object needed for MIMEService
|
||||
const nsFile = FileUtils.File(imgPath);
|
||||
const contentType = MIMEService.getTypeFromFile(nsFile);
|
||||
|
||||
const encodedData = btoa(this._bytesToString(bytes));
|
||||
file.close();
|
||||
return `data:${contentType};base64,${encodedData}`;
|
||||
return {path: imgPath, data: fileContents};
|
||||
} catch (err) {
|
||||
Cu.reportError(`getScreenshot(${url}) failed: ${err}`);
|
||||
}
|
||||
|
|
|
@ -30,6 +30,7 @@ const MIN_FAVICON_SIZE = 96;
|
|||
const CACHED_LINK_PROPS_TO_MIGRATE = ["screenshot", "customScreenshot"];
|
||||
const PINNED_FAVICON_PROPS_TO_MIGRATE = ["favicon", "faviconRef", "faviconSize"];
|
||||
const SECTION_ID = "topsites";
|
||||
const ROWS_PREF = "topSitesRows";
|
||||
|
||||
this.TopSitesFeed = class TopSitesFeed {
|
||||
constructor() {
|
||||
|
@ -88,8 +89,7 @@ this.TopSitesFeed = class TopSitesFeed {
|
|||
}
|
||||
|
||||
async getLinksWithDefaults() {
|
||||
// Get at least 2 rows so toggling between 1 and 2 rows has sites
|
||||
const numItems = Math.max(this.store.getState().Prefs.values.topSitesRows, 2) * TOP_SITES_MAX_SITES_PER_ROW;
|
||||
const numItems = this.store.getState().Prefs.values[ROWS_PREF] * TOP_SITES_MAX_SITES_PER_ROW;
|
||||
const frecent = (await this.frecentCache.request({
|
||||
numItems,
|
||||
topsiteFrecency: FRECENCY_THRESHOLD
|
||||
|
@ -329,7 +329,7 @@ this.TopSitesFeed = class TopSitesFeed {
|
|||
// Don't insert any pins past the end of the visible top sites. Otherwise,
|
||||
// we can end up with a bunch of pinned sites that can never be unpinned again
|
||||
// from the UI.
|
||||
const topSitesCount = this.store.getState().Prefs.values.topSitesRows * TOP_SITES_MAX_SITES_PER_ROW;
|
||||
const topSitesCount = this.store.getState().Prefs.values[ROWS_PREF] * TOP_SITES_MAX_SITES_PER_ROW;
|
||||
if (index >= topSitesCount) {
|
||||
return;
|
||||
}
|
||||
|
@ -378,7 +378,7 @@ this.TopSitesFeed = class TopSitesFeed {
|
|||
// pinned in the slot (unless it's the last slot, then it replaces).
|
||||
this._insertPin(
|
||||
action.data.site, index,
|
||||
action.data.draggedFromIndex !== undefined ? action.data.draggedFromIndex : this.store.getState().Prefs.values.topSitesRows * TOP_SITES_MAX_SITES_PER_ROW);
|
||||
action.data.draggedFromIndex !== undefined ? action.data.draggedFromIndex : this.store.getState().Prefs.values[ROWS_PREF] * TOP_SITES_MAX_SITES_PER_ROW);
|
||||
|
||||
await this._clearLinkCustomScreenshot(action.data.site);
|
||||
this._broadcastPinnedSitesUpdated();
|
||||
|
@ -410,6 +410,8 @@ this.TopSitesFeed = class TopSitesFeed {
|
|||
case at.PREF_CHANGED:
|
||||
if (action.data.name === DEFAULT_SITES_PREF) {
|
||||
this.refreshDefaults(action.data.value);
|
||||
} else if (action.data.name === ROWS_PREF) {
|
||||
this.refresh({broadcast: true});
|
||||
}
|
||||
break;
|
||||
case at.UPDATE_SECTION_PREFS:
|
||||
|
|
|
@ -85,33 +85,20 @@ window.gActivityStreamStrings = {
|
|||
"section_menu_action_collapse_section": "Bölməni Daralt",
|
||||
"section_menu_action_expand_section": "Bölməni Genişlət",
|
||||
"section_menu_action_manage_section": "Bölməni İdarə et",
|
||||
"section_menu_action_manage_webext": "Manage Extension",
|
||||
"section_menu_action_manage_webext": "Uzantını idarə et",
|
||||
"section_menu_action_add_topsite": "Qabaqcıl Sayt əlavə et",
|
||||
"section_menu_action_move_up": "Yuxarı daşı",
|
||||
"section_menu_action_move_down": "Aşağı daşı",
|
||||
"section_menu_action_privacy_notice": "Məxfilik Bildirişi",
|
||||
"firstrun_title": "Take Firefox with You",
|
||||
"firstrun_content": "Get your bookmarks, history, passwords and other settings on all your devices.",
|
||||
"firstrun_learn_more_link": "Learn more about Firefox Accounts",
|
||||
"firstrun_form_header": "Enter your email",
|
||||
"firstrun_form_sub_header": "to continue to Firefox Sync.",
|
||||
"firstrun_email_input_placeholder": "Email",
|
||||
"firstrun_extra_legal_links": "By proceeding, you agree to the {terms} and {privacy}.",
|
||||
"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": "İlkin seçənəkləri bərpa et",
|
||||
"settings_pane_header": "Yeni Vərəq Nizamlamaları",
|
||||
"settings_pane_body2": "Bu səhifədə nə görəcəyinizi seçin.",
|
||||
"settings_pane_search_header": "Axtar",
|
||||
"settings_pane_search_body": "Yeni vərəqinizdən Web-də axtarış edin.",
|
||||
"settings_pane_topsites_body": "Ən çox ziyarət etdiyiniz saytları görün.",
|
||||
"settings_pane_topsites_options_showmore": "İki sətir göstər",
|
||||
"settings_pane_highlights_body2": "Son ziyarət etdiyiniz və ya əlfəcinlədiyiniz maraqlı məzmunlara rahat qayıdın.",
|
||||
"settings_pane_highlights_options_visited": "Baxılmış Saytlar",
|
||||
"settings_pane_snippets_body": "Mozilladan Firefox, internet mədəniyyəti və digər yeniliklər haqqında qısa bildirişlər oxuyun.",
|
||||
"settings_pane_done_button": "Oldu",
|
||||
"settings_pane_topstories_options_sponsored": "Sponsor Hekayələrini Göstər",
|
||||
"pocket_description": "Mozilla ailəsinin yeni üzvü olan Pocket ilə yüksək keyfiyyətli məzmunları kəşf edin."
|
||||
"firstrun_title": "Firefox-u özünüzlə gəzdirin",
|
||||
"firstrun_content": "Əlfəcin, tarixçə, parol və digər tənzimləmələrinizi bütün cihazlarınızda əldə edin.",
|
||||
"firstrun_learn_more_link": "Firefox Hesabları haqqında ətraflı öyrənin",
|
||||
"firstrun_form_header": "E-poçtunuzu daxil edin",
|
||||
"firstrun_form_sub_header": "və Firefox Sync ilə davam edin.",
|
||||
"firstrun_email_input_placeholder": "E-poçt",
|
||||
"firstrun_extra_legal_links": "Davam etməklə {terms} və {privacy} ilə razılaşmış olursuz.",
|
||||
"firstrun_terms_of_service": "İstifadə Şərtləri",
|
||||
"firstrun_privacy_notice": "Məxfilik Bildirişi",
|
||||
"firstrun_continue_to_login": "Davam et",
|
||||
"firstrun_skip_login": "Bu addımı keç"
|
||||
};
|
||||
|
|
|
@ -10,7 +10,7 @@ window.gActivityStreamStrings = {
|
|||
"type_label_bookmarked": "A les adreces d'interès",
|
||||
"type_label_recommended": "Tendència",
|
||||
"type_label_pocket": "Desat al Pocket",
|
||||
"type_label_downloaded": "Downloaded",
|
||||
"type_label_downloaded": "Baixat",
|
||||
"menu_action_bookmark": "Afegeix a les adreces d'interès",
|
||||
"menu_action_remove_bookmark": "Elimina l'adreça d'interès",
|
||||
"menu_action_open_new_window": "Obre en una finestra nova",
|
||||
|
@ -24,14 +24,14 @@ window.gActivityStreamStrings = {
|
|||
"menu_action_save_to_pocket": "Desa al Pocket",
|
||||
"menu_action_delete_pocket": "Suprimeix del Pocket",
|
||||
"menu_action_archive_pocket": "Arxiva en el 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": "Mostra-ho en el Finder",
|
||||
"menu_action_show_file_windows": "Obre la carpeta on es troba",
|
||||
"menu_action_show_file_linux": "Obre la carpeta on es troba",
|
||||
"menu_action_show_file_default": "Mostra el fitxer",
|
||||
"menu_action_open_file": "Obre el fitxer",
|
||||
"menu_action_copy_download_link": "Copia l'enllaç de la baixada",
|
||||
"menu_action_go_to_download_page": "Vés a la pàgina de la baixada",
|
||||
"menu_action_remove_download": "Suprimeix de l'historial",
|
||||
"search_button": "Cerca",
|
||||
"search_header": "Cerca de {search_engine_name}",
|
||||
"search_web_placeholder": "Cerca al web",
|
||||
|
@ -43,13 +43,13 @@ window.gActivityStreamStrings = {
|
|||
"prefs_section_rows_option": "{num} fila;{num} files",
|
||||
"prefs_search_header": "Cerca web",
|
||||
"prefs_topsites_description": "El llocs que visiteu més sovint",
|
||||
"prefs_topstories_description2": "Great content from around the web, personalized for you",
|
||||
"prefs_topstories_options_sponsored_label": "Sponsored Stories",
|
||||
"prefs_topstories_description2": "El contingut més interessant de tot el web, personalitzat per a vós",
|
||||
"prefs_topstories_options_sponsored_label": "Articles patrocinats",
|
||||
"prefs_topstories_sponsored_learn_more": "Més informació",
|
||||
"prefs_highlights_description": "Una selecció dels llocs que heu desat o visitat",
|
||||
"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": "Pàgines visitades",
|
||||
"prefs_highlights_options_download_label": "Baixada més recent",
|
||||
"prefs_highlights_options_pocket_label": "Pàgines desades al Pocket",
|
||||
"prefs_snippets_description": "Actualitzacions de Mozilla i del Firefox",
|
||||
"settings_pane_button_label": "Personalitzeu la pàgina de pestanya nova",
|
||||
"settings_pane_topsites_header": "Llocs principals",
|
||||
|
@ -85,35 +85,20 @@ window.gActivityStreamStrings = {
|
|||
"section_menu_action_collapse_section": "Redueix la secció",
|
||||
"section_menu_action_expand_section": "Amplia la secció",
|
||||
"section_menu_action_manage_section": "Gestiona la secció",
|
||||
"section_menu_action_manage_webext": "Manage Extension",
|
||||
"section_menu_action_manage_webext": "Gestiona l'extensió",
|
||||
"section_menu_action_add_topsite": "Afegeix com a lloc principal",
|
||||
"section_menu_action_move_up": "Mou cap amunt",
|
||||
"section_menu_action_move_down": "Mou cap avall",
|
||||
"section_menu_action_privacy_notice": "Avís de privadesa",
|
||||
"firstrun_title": "Take Firefox with You",
|
||||
"firstrun_content": "Get your bookmarks, history, passwords and other settings on all your devices.",
|
||||
"firstrun_learn_more_link": "Learn more about Firefox Accounts",
|
||||
"firstrun_form_header": "Enter your email",
|
||||
"firstrun_form_sub_header": "to continue to Firefox Sync.",
|
||||
"firstrun_email_input_placeholder": "Email",
|
||||
"firstrun_extra_legal_links": "By proceeding, you agree to the {terms} and {privacy}.",
|
||||
"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": "Restaura els valors per defecte",
|
||||
"prefs_topstories_description": "Contingut d'alta qualitat que d'altra manera potser us passaria per alt",
|
||||
"prefs_topstories_show_sponsored_label": "Articles patrocinats per {provider}",
|
||||
"settings_pane_header": "Preferències de pestanya nova",
|
||||
"settings_pane_body2": "Trieu què voleu veure en aquesta pàgina.",
|
||||
"settings_pane_search_header": "Cerca",
|
||||
"settings_pane_search_body": "Cerca al web des de la pestanya nova.",
|
||||
"settings_pane_topsites_body": "Accediu als llocs web que visiteu més sovint.",
|
||||
"settings_pane_topsites_options_showmore": "Mostra dues files",
|
||||
"settings_pane_highlights_body2": "Torneu a trobar allò més interessant que recentment heu visitat o heu afegit a les adreces d'interès.",
|
||||
"settings_pane_highlights_options_visited": "Llocs visitats",
|
||||
"settings_pane_snippets_body": "Llegiu notícies curtes de Mozilla sobre el Firefox, la cultura d'internet i, de tant en tant, algun mem.",
|
||||
"settings_pane_done_button": "Fet",
|
||||
"settings_pane_topstories_options_sponsored": "Mostra articles patrocinats",
|
||||
"pocket_description": "Gràcies al Pocket, que ara és part de Mozilla, podeu descobrir contingut d'alta qualitat que d'altra manera potser us passaria per alt."
|
||||
"firstrun_title": "El vostre Firefox, a tot arreu",
|
||||
"firstrun_content": "Accediu a les vostres adreces d'interès, historial, contrasenyes i preferències en tots els vostres dispositius.",
|
||||
"firstrun_learn_more_link": "Més informació sobre el Compte del Firefox",
|
||||
"firstrun_form_header": "Introduïu la vostra adreça electrònica",
|
||||
"firstrun_form_sub_header": "per continuar al Firefox Sync.",
|
||||
"firstrun_email_input_placeholder": "Adreça electrònica",
|
||||
"firstrun_extra_legal_links": "Si continueu, accepteu les {terms} i l'{privacy}.",
|
||||
"firstrun_terms_of_service": "Condicions del servei",
|
||||
"firstrun_privacy_notice": "Avís de privadesa",
|
||||
"firstrun_continue_to_login": "Continua",
|
||||
"firstrun_skip_login": "Omet aquest pas"
|
||||
};
|
||||
|
|
|
@ -10,7 +10,7 @@ window.gActivityStreamStrings = {
|
|||
"type_label_bookmarked": "Yakon retal",
|
||||
"type_label_recommended": "Rujawaxik",
|
||||
"type_label_pocket": "Yakon pa Pocket",
|
||||
"type_label_downloaded": "Downloaded",
|
||||
"type_label_downloaded": "Xqasäx",
|
||||
"menu_action_bookmark": "Yaketal",
|
||||
"menu_action_remove_bookmark": "Tiyuj el ri yaketal",
|
||||
"menu_action_open_new_window": "Tijaq pa jun K'ak'a' Tzuwäch",
|
||||
|
@ -24,14 +24,14 @@ window.gActivityStreamStrings = {
|
|||
"menu_action_save_to_pocket": "Tiyak pa Pocket",
|
||||
"menu_action_delete_pocket": "Tiyuj el pa Pocket",
|
||||
"menu_action_archive_pocket": "Tiyak pa 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": "Tik'ut pan Finder",
|
||||
"menu_action_show_file_windows": "Tijaq K'wayöl Yakwuj",
|
||||
"menu_action_show_file_linux": "Tijaq K'wayöl Yakwuj",
|
||||
"menu_action_show_file_default": "Tik'ut Yakb'äl",
|
||||
"menu_action_open_file": "Tijaq Yakb'äl",
|
||||
"menu_action_copy_download_link": "Tiwachib'ëx Ruximonel Qasanïk",
|
||||
"menu_action_go_to_download_page": "Tib'e pa Ruxaq Qasanïk",
|
||||
"menu_action_remove_download": "Tiyuj el pa Natab'äl",
|
||||
"search_button": "Tikanöx",
|
||||
"search_header": "{search_engine_name} Tikanöx",
|
||||
"search_web_placeholder": "Tikanöx pa Ajk'amaya'l",
|
||||
|
@ -44,12 +44,12 @@ window.gActivityStreamStrings = {
|
|||
"prefs_search_header": "Ajk'amaya'l Kanoxïk",
|
||||
"prefs_topsites_description": "Taq ruxaq yalan ye'atz'ët",
|
||||
"prefs_topstories_description2": "Nïm rupam chijun ri ajk'amaya'l, ichinan awuma rat",
|
||||
"prefs_topstories_options_sponsored_label": "Sponsored Stories",
|
||||
"prefs_topstories_options_sponsored_label": "To'on taq B'anob'äl",
|
||||
"prefs_topstories_sponsored_learn_more": "Tetamäx ch'aqa' chik",
|
||||
"prefs_highlights_description": "Jun rucha'onem ruxaq, ri xayäk o xatz'ët",
|
||||
"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": "Taq Ruxaq Etz'eton",
|
||||
"prefs_highlights_options_download_label": "K'a B'a' Keqasäx",
|
||||
"prefs_highlights_options_pocket_label": "Taq Ruxaq Eyakon pa Pocket",
|
||||
"prefs_snippets_description": "Kik'exoj Mozilla chuqa' Firefox",
|
||||
"settings_pane_button_label": "Tawichinaj ri ruxaq richin K'ak'a' Ruwi'",
|
||||
"settings_pane_topsites_header": "Utziläj taq ruxaq K'amaya'l",
|
||||
|
@ -85,34 +85,20 @@ window.gActivityStreamStrings = {
|
|||
"section_menu_action_collapse_section": "Tiwulüx Peraj",
|
||||
"section_menu_action_expand_section": "Tirik' Peraj",
|
||||
"section_menu_action_manage_section": "Tinuk'samajïx Peraj",
|
||||
"section_menu_action_manage_webext": "Manage Extension",
|
||||
"section_menu_action_manage_webext": "Tinuk'samajïx K'amal",
|
||||
"section_menu_action_add_topsite": "Titz'aqatisäx K'ïy Ruwinaq Ruxaq K'amaya'l",
|
||||
"section_menu_action_move_up": "Tijotob'äx",
|
||||
"section_menu_action_move_down": "Tiqasäx qa",
|
||||
"section_menu_action_privacy_notice": "Ichinan na'oj",
|
||||
"firstrun_title": "Take Firefox with You",
|
||||
"firstrun_content": "Get your bookmarks, history, passwords and other settings on all your devices.",
|
||||
"firstrun_learn_more_link": "Learn more about Firefox Accounts",
|
||||
"firstrun_form_header": "Enter your email",
|
||||
"firstrun_form_sub_header": "to continue to Firefox Sync.",
|
||||
"firstrun_email_input_placeholder": "Email",
|
||||
"firstrun_extra_legal_links": "By proceeding, you agree to the {terms} and {privacy}.",
|
||||
"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": "Ketzolïx ri e K'o wi",
|
||||
"prefs_topstories_show_sponsored_label": "{provider} To'on taq B'anob'äl",
|
||||
"settings_pane_header": "K'ak'a' Ruwi' Taq Ajowab'äl",
|
||||
"settings_pane_body2": "Tacha' ri natzu' pa re ruxaq re'.",
|
||||
"settings_pane_search_header": "Tikanöx",
|
||||
"settings_pane_search_body": "Tikanoj ri k'ak'a' taq ruwi' pa ri K'amaya'l.",
|
||||
"settings_pane_topsites_body": "Katok pa ri taq ajk'amaya'l yalan ye'atz'ët.",
|
||||
"settings_pane_topsites_options_showmore": "Kek'ut pe ka'i' cholaj",
|
||||
"settings_pane_highlights_body2": "Ke'awila' chik ri jeb'ël taq wachinäq e'atz'eton chuqa' aya'on ketal.",
|
||||
"settings_pane_highlights_options_visited": "Ruxaq k'amaya'l etz'eton",
|
||||
"settings_pane_snippets_body": "Ke'asik'ij koköj taq rutzijol Mozilla chi rij Firefox, rub'anob'al k'amaya'l, chuqa' jantäq q'olonel wachib'äl.",
|
||||
"settings_pane_done_button": "Xk'is",
|
||||
"settings_pane_topstories_options_sponsored": "Kek'ut pe To'on taq B'anob'äl",
|
||||
"pocket_description": "Ke'awila' utziläj taq rupam pa Pocket, wakami ruch'akulan ri' rik'in Mozilla, ri rik'in jub'a' xtasäch rutz'etik."
|
||||
"firstrun_title": "Tak'waj ri Firefox Awik'in",
|
||||
"firstrun_content": "Ke'ak'waj ri taq yaketal, natab'äl, ewan taq tzij chuqa' ch'aqa' chik taq nuk'ulem pa ronojel taq awokisaxel.",
|
||||
"firstrun_learn_more_link": "Tawetamaj ch'aqa' chik pa ruwi' ri Firefox Taqoya'l",
|
||||
"firstrun_form_header": "Tatz'ib'aj ri ataqoya'l",
|
||||
"firstrun_form_sub_header": "richin yatok pa Firefox Sync.",
|
||||
"firstrun_email_input_placeholder": "Taqoya'l",
|
||||
"firstrun_extra_legal_links": "Toq nasamajij qa, nawojqaj ri {terms} chuqa' {privacy}.",
|
||||
"firstrun_terms_of_service": "Kojqanem Samaj",
|
||||
"firstrun_privacy_notice": "Ichinan Na'oj",
|
||||
"firstrun_continue_to_login": "Titikïr chik el",
|
||||
"firstrun_skip_login": "Tixakalüx re jun ruxak re'"
|
||||
};
|
||||
|
|
|
@ -99,6 +99,6 @@ window.gActivityStreamStrings = {
|
|||
"firstrun_extra_legal_links": "By proceeding, you agree to the {terms} and {privacy}.",
|
||||
"firstrun_terms_of_service": "Terms of Service",
|
||||
"firstrun_privacy_notice": "Privacy Notice",
|
||||
"firstrun_continue_to_login": "Continue",
|
||||
"firstrun_continue_to_login": "Συνέχεια",
|
||||
"firstrun_skip_login": "Skip this step"
|
||||
};
|
||||
|
|
|
@ -100,18 +100,5 @@ window.gActivityStreamStrings = {
|
|||
"firstrun_terms_of_service": "Términos del servicio",
|
||||
"firstrun_privacy_notice": "Anuncio de privacidad",
|
||||
"firstrun_continue_to_login": "Continuar",
|
||||
"firstrun_skip_login": "Saltear este paso",
|
||||
"prefs_restore_defaults_button": "Restaurar valores predeterminados",
|
||||
"settings_pane_header": "Preferencias de nueva pestaña",
|
||||
"settings_pane_body2": "Elige lo que ves en esta página.",
|
||||
"settings_pane_search_header": "Buscar",
|
||||
"settings_pane_search_body": "Busca en la web de tu nueva pestaña.",
|
||||
"settings_pane_topsites_body": "Accede a los sitios web que más visitas.",
|
||||
"settings_pane_topsites_options_showmore": "Mostrar dos filas",
|
||||
"settings_pane_highlights_body2": "Encuentra tu camino de regreso a las cosas interesantes que has visitado o marcado recientemente.",
|
||||
"settings_pane_highlights_options_visited": "Sitios visitados",
|
||||
"settings_pane_snippets_body": "Lee actualizaciones breves de Mozilla sobre Firefox, la cultura de internet y de repente un meme de vez en cuando.",
|
||||
"settings_pane_done_button": "Listo",
|
||||
"settings_pane_topstories_options_sponsored": "Mostrar historias patrocinadas",
|
||||
"pocket_description": "Descubre contenido de alta calidad que de otra forma te podrías perder, con la ayuda de Pocket, ahora parte de Mozilla."
|
||||
"firstrun_skip_login": "Saltear este paso"
|
||||
};
|
||||
|
|
|
@ -100,18 +100,5 @@ window.gActivityStreamStrings = {
|
|||
"firstrun_terms_of_service": "Términos del servicio",
|
||||
"firstrun_privacy_notice": "Política de privacidad",
|
||||
"firstrun_continue_to_login": "Continuar",
|
||||
"firstrun_skip_login": "Saltar este paso",
|
||||
"prefs_restore_defaults_button": "Restaurar valores predeterminados",
|
||||
"settings_pane_header": "Preferencias de nueva pestaña",
|
||||
"settings_pane_body2": "Elige lo que ves en esta página.",
|
||||
"settings_pane_search_header": "Buscar",
|
||||
"settings_pane_search_body": "Busca en la web de tu nueva pestaña.",
|
||||
"settings_pane_topsites_body": "Accede a los sitios web que más visitas.",
|
||||
"settings_pane_topsites_options_showmore": "Mostrar dos filas",
|
||||
"settings_pane_highlights_body2": "Encuentra tu camino de regreso a las cosas interesantes que has visitado o marcado recientemente.",
|
||||
"settings_pane_highlights_options_visited": "Sitios visitados",
|
||||
"settings_pane_snippets_body": "Lee actualizaciones breves de Mozilla sobre Firefox, la cultura de internet y de repente un meme de vez en cuando.",
|
||||
"settings_pane_done_button": "Listo",
|
||||
"settings_pane_topstories_options_sponsored": "Mostrar historias patrocinadas",
|
||||
"pocket_description": "Descubre contenido de alta calidad que de otra forma te podrías perder, con la ayuda de Pocket, ahora parte de Mozilla."
|
||||
"firstrun_skip_login": "Saltar este paso"
|
||||
};
|
||||
|
|
|
@ -96,22 +96,9 @@ window.gActivityStreamStrings = {
|
|||
"firstrun_form_header": "Introduzca su correo electrónico",
|
||||
"firstrun_form_sub_header": "para acceder a Firefox Sync.",
|
||||
"firstrun_email_input_placeholder": "Correo electrónico",
|
||||
"firstrun_extra_legal_links": "Al proceder, aceptas los {terms} y la {privacy}.",
|
||||
"firstrun_extra_legal_links": "Al continuar aceptas los {terms} y el {privacy}.",
|
||||
"firstrun_terms_of_service": "Términos del servicio",
|
||||
"firstrun_privacy_notice": "Aviso de privacidad",
|
||||
"firstrun_continue_to_login": "Continuar",
|
||||
"firstrun_skip_login": "Saltar este paso",
|
||||
"prefs_restore_defaults_button": "Restaurar valores predeterminados",
|
||||
"settings_pane_header": "Preferencias de nueva pestaña",
|
||||
"settings_pane_body2": "Elige lo que ves en esta página.",
|
||||
"settings_pane_search_header": "Buscar",
|
||||
"settings_pane_search_body": "Busca en la web de tu nueva pestaña.",
|
||||
"settings_pane_topsites_body": "Accede a los sitios web que más visitas.",
|
||||
"settings_pane_topsites_options_showmore": "Mostrar dos filas",
|
||||
"settings_pane_highlights_body2": "Encuentra tu camino de regreso a las cosas interesantes que has visitado o marcado recientemente.",
|
||||
"settings_pane_highlights_options_visited": "Sitios visitados",
|
||||
"settings_pane_snippets_body": "Lee actualizaciones breves de Mozilla sobre Firefox, la cultura de internet y de repente un meme de vez en cuando.",
|
||||
"settings_pane_done_button": "Listo",
|
||||
"settings_pane_topstories_options_sponsored": "Mostrar historias patrocinadas",
|
||||
"pocket_description": "Descubre contenido de alta calidad que de otra forma te podrías perder, con la ayuda de Pocket, ahora parte de Mozilla."
|
||||
"firstrun_skip_login": "Saltar este paso"
|
||||
};
|
||||
|
|
|
@ -90,28 +90,15 @@ window.gActivityStreamStrings = {
|
|||
"section_menu_action_move_up": "Más",
|
||||
"section_menu_action_move_down": "Bajar",
|
||||
"section_menu_action_privacy_notice": "Política de privacidad",
|
||||
"firstrun_title": "Llévese Firefox consigo",
|
||||
"firstrun_content": "Acceda a sus marcadores, historial, contraseñas y más ajustes en todos sus dispositivos.",
|
||||
"firstrun_learn_more_link": "Descubra más sobre las Cuentas de Firefox",
|
||||
"firstrun_form_header": "Introduzca su correo electrónico",
|
||||
"firstrun_title": "Lleva a Firefox contigo",
|
||||
"firstrun_content": "Accede a tus marcadores, historial, contraseñas y más ajustes en todos tus dispositivos.",
|
||||
"firstrun_learn_more_link": "Conoce más acerca de Firefox Accounts",
|
||||
"firstrun_form_header": "Ingresa tu correo electrónico",
|
||||
"firstrun_form_sub_header": "para acceder a Firefox Sync.",
|
||||
"firstrun_email_input_placeholder": "Correo electrónico",
|
||||
"firstrun_extra_legal_links": "Al proceder, aceptas los {terms} y la {privacy}.",
|
||||
"firstrun_terms_of_service": "Términos del servicio",
|
||||
"firstrun_privacy_notice": "Aviso de privacidad",
|
||||
"firstrun_privacy_notice": "Política de privacidad",
|
||||
"firstrun_continue_to_login": "Continuar",
|
||||
"firstrun_skip_login": "Saltar este paso",
|
||||
"prefs_restore_defaults_button": "Restaurar valores predeterminados",
|
||||
"settings_pane_header": "Preferencias de nueva pestaña",
|
||||
"settings_pane_body2": "Elige lo que ves en esta página.",
|
||||
"settings_pane_search_header": "Buscar",
|
||||
"settings_pane_search_body": "Busca en la web de tu nueva pestaña.",
|
||||
"settings_pane_topsites_body": "Accede a los sitios web que más visitas.",
|
||||
"settings_pane_topsites_options_showmore": "Mostrar dos filas",
|
||||
"settings_pane_highlights_body2": "Encuentra tu camino de regreso a las cosas interesantes que has visitado o marcado recientemente.",
|
||||
"settings_pane_highlights_options_visited": "Sitios visitados",
|
||||
"settings_pane_snippets_body": "Lee actualizaciones breves de Mozilla sobre Firefox, la cultura de internet y de repente un meme de vez en cuando.",
|
||||
"settings_pane_done_button": "Listo",
|
||||
"settings_pane_topstories_options_sponsored": "Mostrar historias patrocinadas",
|
||||
"pocket_description": "Descubre contenido de alta calidad que de otra forma te podrías perder, con la ayuda de Pocket, ahora parte de Mozilla."
|
||||
"firstrun_skip_login": "Saltar este paso"
|
||||
};
|
||||
|
|
|
@ -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": "Privacy Notice",
|
||||
"firstrun_title": "Take Firefox with You",
|
||||
"firstrun_content": "Get your bookmarks, history, passwords and other settings on all your devices.",
|
||||
|
@ -100,55 +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",
|
||||
"default_label_loading": "در حال بارگیری…",
|
||||
"header_stories": "برترین داستانها",
|
||||
"header_visit_again": "مشاهده دوباره",
|
||||
"header_bookmarks": "نشانکهای اخیر",
|
||||
"header_bookmarks_placeholder": "هنوز هیچ نشانکی ندارید.",
|
||||
"header_stories_from": "از",
|
||||
"type_label_synced": "همگام شده از دستگاهی دیگر",
|
||||
"type_label_open": "باز کردن",
|
||||
"type_label_topic": "موضوع",
|
||||
"type_label_now": "هماکنون",
|
||||
"menu_action_copy_address": "رونوشت از آدرس",
|
||||
"menu_action_email_link": "ارسال پیوند…",
|
||||
"search_for_something_with": "جستوجو برای {search_term} با:",
|
||||
"search_settings": "تغییر تنظیمات جستوجو",
|
||||
"section_info_option": "اطلاعات",
|
||||
"section_info_send_feedback": "ارسال بازخورد",
|
||||
"section_info_privacy_notice": "نکات حفظ حریم خصوصی",
|
||||
"welcome_title": "به زبانه جدید خوشآمدید",
|
||||
"welcome_body": "فایرفاکس از این فضا برای نمایش نشانکها، مقالات، ویدئوها و صفحات مرتبطی که بهتازگی مشاهده کردهاید استفاده میکند، تا شما به راحتی دوباره به آنها دسترسی داشته باشید.",
|
||||
"welcome_label": "شناسایی گزینههای برجسته شما",
|
||||
"time_label_less_than_minute": "> ۱ دقیقه",
|
||||
"time_label_minute": "{number} د",
|
||||
"time_label_hour": "{number} س",
|
||||
"time_label_day": "{number} ر",
|
||||
"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_bookmarks_header": "نشانکهای اخیر",
|
||||
"settings_pane_bookmarks_body": "بهتازگی شما نشانکهایی را در یک محل مناسب ساختهاید.",
|
||||
"settings_pane_visit_again_header": "مشاهده دوباره",
|
||||
"settings_pane_visit_again_body": "فایرفاکس بخشهایی از تاریخچه مرورتان را که ممکن است بخواهید به یاد داشته باشید یا به آنها بازگردید به شما نشان خواهد داد.",
|
||||
"settings_pane_highlights_body2": "راه خود را در میان چیزهایی که دوست دارید پیدا کنید.چیزهایی که اخیرا مشاهده کرده اید یا نشانک ها.",
|
||||
"settings_pane_highlights_options_visited": "سایتهای بازدید شده",
|
||||
"settings_pane_snippets_body": "بروزرسانی های شیرین و کوتاه موزیلا در مورد فایرفاکس، فرهنگ اینترنت، و تصاویر تصادفی مناسبتی مطالعه کنید.",
|
||||
"settings_pane_done_button": "انجام شد",
|
||||
"settings_pane_topstories_options_sponsored": "نمایش داستانهای حمایت شده",
|
||||
"edit_topsites_button_label": "قسمت سایتهای برتر را سفارشی کنید",
|
||||
"edit_topsites_showmore_button": "نمایش بیشتر",
|
||||
"edit_topsites_showless_button": "نمایش کمتر",
|
||||
"edit_topsites_done_button": "انجام شد",
|
||||
"edit_topsites_pin_button": "چسباندن این سایت",
|
||||
"edit_topsites_unpin_button": "لغو سنجاق کردن این پایگاه اینترنتی",
|
||||
"edit_topsites_dismiss_button": "نادیده گرفتن این سایت",
|
||||
"edit_topsites_add_button": "افزودن",
|
||||
"edit_topsites_add_button_tooltip": "اضافه کردن به سایت های برتر",
|
||||
"pocket_feedback_header": "بهترینهای وب، گزینش شده توسط بیش از ۲۵ میلیون نفر.",
|
||||
"pocket_description": "محتواهای با کیفیتی را پیدا کنید که ممکن است از دست داده باشید، به کمک Pocket که اکنون بخشی از موزیلا است."
|
||||
"firstrun_skip_login": "Skip this step"
|
||||
};
|
||||
|
|
|
@ -85,33 +85,20 @@ window.gActivityStreamStrings = {
|
|||
"section_menu_action_collapse_section": "Pienennä osio",
|
||||
"section_menu_action_expand_section": "Laajenna osio",
|
||||
"section_menu_action_manage_section": "Muokkaa osiota",
|
||||
"section_menu_action_manage_webext": "Manage Extension",
|
||||
"section_menu_action_manage_webext": "Hallitse laajennusta",
|
||||
"section_menu_action_add_topsite": "Lisää ykkössivusto",
|
||||
"section_menu_action_move_up": "Siirrä ylös",
|
||||
"section_menu_action_move_down": "Siirrä alas",
|
||||
"section_menu_action_privacy_notice": "Tietosuojakäytäntö",
|
||||
"firstrun_title": "Take Firefox with You",
|
||||
"firstrun_content": "Get your bookmarks, history, passwords and other settings on all your devices.",
|
||||
"firstrun_learn_more_link": "Learn more about Firefox Accounts",
|
||||
"firstrun_form_header": "Enter your email",
|
||||
"firstrun_form_sub_header": "to continue to Firefox Sync.",
|
||||
"firstrun_email_input_placeholder": "Email",
|
||||
"firstrun_extra_legal_links": "By proceeding, you agree to the {terms} and {privacy}.",
|
||||
"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": "Palauta oletukset",
|
||||
"settings_pane_header": "Uuden välilehden asetukset",
|
||||
"settings_pane_body2": "Valitse, mitä haluat nähdä tällä sivulla.",
|
||||
"settings_pane_search_header": "Haku",
|
||||
"settings_pane_search_body": "Tee verkkohakuja uudesta välilehdestä.",
|
||||
"settings_pane_topsites_body": "Näe eniten vierailemasi sivustot.",
|
||||
"settings_pane_topsites_options_showmore": "Näytä kaksi riviä",
|
||||
"settings_pane_highlights_body2": "Löydä tiesi takaisin kiinnostaviin juttuihin, joissa olet käynyt tai jotka olet lisännyt kirjanmerkkeihin viime aikoina.",
|
||||
"settings_pane_highlights_options_visited": "Vieraillut sivustot",
|
||||
"settings_pane_snippets_body": "Lue Mozillan lyhyitä päivityksiä liittyen Firefoxiin, internetkulttuuriin ja satunnaisiin meemeihin.",
|
||||
"settings_pane_done_button": "Valmis",
|
||||
"settings_pane_topstories_options_sponsored": "Näytä sponsoroidut jutut",
|
||||
"pocket_description": "Löydä laadukasta sisältöä, josta olisit muutoin ehkä jäänyt paitsi. Pocketilta, joka on nyt osa Mozillaa."
|
||||
"firstrun_title": "Ota Firefox matkalle mukaan",
|
||||
"firstrun_content": "Käytä kirjanmerkkejä, historiaa, salasanoja ja muita asetuksia kaikilla laitteillasi.",
|
||||
"firstrun_learn_more_link": "Lue lisää Firefox-tilistä",
|
||||
"firstrun_form_header": "Kirjoita sähköpostisi",
|
||||
"firstrun_form_sub_header": "jatkaaksesi Firefox Sync -palveluun.",
|
||||
"firstrun_email_input_placeholder": "Sähköposti",
|
||||
"firstrun_extra_legal_links": "Jatkamalla hyväksyt {terms} ja {privacy}.",
|
||||
"firstrun_terms_of_service": "käyttöehdot",
|
||||
"firstrun_privacy_notice": "tietosuojakäytännön",
|
||||
"firstrun_continue_to_login": "Jatka",
|
||||
"firstrun_skip_login": "Ohita tämä vaihe"
|
||||
};
|
||||
|
|
|
@ -85,33 +85,20 @@ window.gActivityStreamStrings = {
|
|||
"section_menu_action_collapse_section": "Co-theannaich an earrann",
|
||||
"section_menu_action_expand_section": "Leudaich an earrann",
|
||||
"section_menu_action_manage_section": "Stiùirich an earrann",
|
||||
"section_menu_action_manage_webext": "Manage Extension",
|
||||
"section_menu_action_manage_webext": "Stiùirich an leudachan",
|
||||
"section_menu_action_add_topsite": "Cuir ris brod làraich",
|
||||
"section_menu_action_move_up": "Gluais suas",
|
||||
"section_menu_action_move_down": "Gluais sìos",
|
||||
"section_menu_action_privacy_notice": "Sanas prìobhaideachd",
|
||||
"firstrun_title": "Take Firefox with You",
|
||||
"firstrun_content": "Get your bookmarks, history, passwords and other settings on all your devices.",
|
||||
"firstrun_learn_more_link": "Learn more about Firefox Accounts",
|
||||
"firstrun_form_header": "Enter your email",
|
||||
"firstrun_form_sub_header": "to continue to Firefox Sync.",
|
||||
"firstrun_email_input_placeholder": "Email",
|
||||
"firstrun_extra_legal_links": "By proceeding, you agree to the {terms} and {privacy}.",
|
||||
"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": "Aisig na bun-roghainnean",
|
||||
"settings_pane_header": "Roghainnean nan tabaichean ùra",
|
||||
"settings_pane_body2": "Tagh na chì thu air an duilleag seo.",
|
||||
"settings_pane_search_header": "Lorg",
|
||||
"settings_pane_search_body": "Lorg air an lìon on taba ùr agad.",
|
||||
"settings_pane_topsites_body": "Faigh cothrom air na làraichean air an tadhail thu gu tric.",
|
||||
"settings_pane_topsites_options_showmore": "Seall dà ràgh",
|
||||
"settings_pane_highlights_body2": "Faigh greim gu furasta air rudan inntinneach air an do thadhail thu roimhe no a rinn thu comharran-lìn dhiubh.",
|
||||
"settings_pane_highlights_options_visited": "Làraichean a thadhladh orra",
|
||||
"settings_pane_snippets_body": "Leugh naidheachdan goirid tlachdmhor o Mozilla mu Firefox, cultar an lìn ’s mìm no dhà.",
|
||||
"settings_pane_done_button": "Deiseil",
|
||||
"settings_pane_topstories_options_sponsored": "Seall sgeulachdan sponsairichte",
|
||||
"pocket_description": "Fiosraich sàr-shusbaint nach lorgadh tu ’s dòcha le taic o Pocket a tha ’na phàirt dhe Mozilla a-nis."
|
||||
"firstrun_title": "Thoir Firefox leat",
|
||||
"firstrun_content": "Faigh na comharran-lìn, an eachdraidh, na faclan-faire ’s roghainnean eile air na h-uidheaman air fad agad.",
|
||||
"firstrun_learn_more_link": "Barrachd fiosrachaidh air cunntasan Firefox",
|
||||
"firstrun_form_header": "Cuir a-steach am post-d agad",
|
||||
"firstrun_form_sub_header": "a leantainn air adhart gu sioncronachadh Firefox.",
|
||||
"firstrun_email_input_placeholder": "Post-d",
|
||||
"firstrun_extra_legal_links": "Ma leanas tu air adhart, bidh tu ag aontachadh ri {terms} agus {privacy}.",
|
||||
"firstrun_terms_of_service": "teirmichean na seirbheise",
|
||||
"firstrun_privacy_notice": "aithris na prìobhaideachd",
|
||||
"firstrun_continue_to_login": "Lean air adhart",
|
||||
"firstrun_skip_login": "Leum seachad air seo"
|
||||
};
|
||||
|
|
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
|
@ -3,7 +3,7 @@ window.gActivityStreamStrings = {
|
|||
"newtab_page_title": "નવી ટૅબ",
|
||||
"header_top_sites": "ટોચની સાઇટ્સ",
|
||||
"header_highlights": "હાઇલાઇટ્સ",
|
||||
"header_recommended_by": "Recommended by {provider}",
|
||||
"header_recommended_by": "{provider} દ્વારા ભલામણ",
|
||||
"context_menu_button_sr": "{title} માટે સંદર્ભ મેનૂ ખોલો",
|
||||
"section_context_menu_button_sr": "વિભાગ સંદર્ભ મેનૂ ખોલો",
|
||||
"type_label_visited": "જોવામા આવેલ:",
|
||||
|
@ -85,20 +85,20 @@ window.gActivityStreamStrings = {
|
|||
"section_menu_action_collapse_section": "વિભાગ સંકુચિત કરો",
|
||||
"section_menu_action_expand_section": "વિભાગ વિસ્તૃત કરો",
|
||||
"section_menu_action_manage_section": "વિભાગ સંચાલિત કરો",
|
||||
"section_menu_action_manage_webext": "Manage Extension",
|
||||
"section_menu_action_manage_webext": "એક્સ્ટેંશનનો વહીવટ કરો",
|
||||
"section_menu_action_add_topsite": "ટોચની સાઇટ ઉમેરો",
|
||||
"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.",
|
||||
"firstrun_learn_more_link": "Learn more about Firefox Accounts",
|
||||
"firstrun_form_header": "Enter your email",
|
||||
"firstrun_form_sub_header": "to continue to Firefox Sync.",
|
||||
"firstrun_email_input_placeholder": "Email",
|
||||
"firstrun_extra_legal_links": "By proceeding, you agree to the {terms} and {privacy}.",
|
||||
"firstrun_terms_of_service": "Terms of Service",
|
||||
"firstrun_privacy_notice": "Privacy Notice",
|
||||
"firstrun_continue_to_login": "Continue",
|
||||
"firstrun_skip_login": "Skip this step"
|
||||
"firstrun_title": "તમારી સાથે Firefox લો",
|
||||
"firstrun_content": "તમારા બધા ઉપકરણો પર તમારા બુકમાર્ક્સ, ઇતિહાસ, પાસવર્ડ્સ અને અન્ય સેટિંગ્સ મેળવો.",
|
||||
"firstrun_learn_more_link": "Fireofox ખાતા વિશે વધુ જાણો",
|
||||
"firstrun_form_header": "તમારા ઇમેઇલ દાખલ કરો",
|
||||
"firstrun_form_sub_header": "Firefox સમન્વયન ચાલુ રાખવા માટે.",
|
||||
"firstrun_email_input_placeholder": "ઇમેઇલ",
|
||||
"firstrun_extra_legal_links": "આગળ વધીને, તમે {terms} અને {privacy} સાથે સંમત થાઓ છો.",
|
||||
"firstrun_terms_of_service": "સેવાની શરતો",
|
||||
"firstrun_privacy_notice": "ખાનગી સૂચના",
|
||||
"firstrun_continue_to_login": "ચાલુ રાખો",
|
||||
"firstrun_skip_login": "આ પગલું છોડી દો"
|
||||
};
|
||||
|
|
|
@ -10,7 +10,7 @@ window.gActivityStreamStrings = {
|
|||
"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": "एक नई विंडो में खोलें",
|
||||
|
@ -91,14 +91,14 @@ window.gActivityStreamStrings = {
|
|||
"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.",
|
||||
"firstrun_learn_more_link": "Learn more about Firefox Accounts",
|
||||
"firstrun_form_header": "Enter your email",
|
||||
"firstrun_form_sub_header": "to continue to Firefox Sync.",
|
||||
"firstrun_email_input_placeholder": "Email",
|
||||
"firstrun_extra_legal_links": "By proceeding, you agree to the {terms} and {privacy}.",
|
||||
"firstrun_terms_of_service": "Terms of Service",
|
||||
"firstrun_privacy_notice": "Privacy Notice",
|
||||
"firstrun_continue_to_login": "Continue",
|
||||
"firstrun_skip_login": "Skip this step"
|
||||
"firstrun_content": "अपने सभी उपकरणों पर अपना पुस्तचिह्न, इतिहास, कूटशब्द और अन्य सेटिंग प्राप्त करें.",
|
||||
"firstrun_learn_more_link": "Firefox खातों के बारे में अधिक जानें",
|
||||
"firstrun_form_header": "अपना ईमेल प्रविष्ट करें",
|
||||
"firstrun_form_sub_header": "Firefox सिंक के लिए जारी रखें.",
|
||||
"firstrun_email_input_placeholder": "ईमेल",
|
||||
"firstrun_extra_legal_links": "आगे बढ़ने से, आप {terms} और {privacy} से सहमत हैं|",
|
||||
"firstrun_terms_of_service": "सेवा की शर्तें",
|
||||
"firstrun_privacy_notice": "गोपनीयता नीति",
|
||||
"firstrun_continue_to_login": "जारी रखें",
|
||||
"firstrun_skip_login": "इस चरण को छोड़ दें"
|
||||
};
|
||||
|
|
|
@ -9,7 +9,7 @@
|
|||
<link rel="stylesheet" href="resource://activity-stream/css/activity-stream.css" />
|
||||
</head>
|
||||
<body class="activity-stream">
|
||||
<div id="root"><div data-reactroot=""><div class="outer-wrapper fixed-to-top"><main><div class="non-collapsible-section"><div class="search-wrapper"><label for="newtab-search-text" class="search-label"><span class="sr-only"><span>Cari di Web</span></span></label><input type="search" id="newtab-search-text" maxLength="256" placeholder="Cari di Web" title="Cari di Web"/><button id="searchSubmit" class="search-button" title="Cari"><span class="sr-only"><span>Cari</span></span></button></div></div><div class="body-wrapper"><div class="sections-list"><section class="collapsible-section top-sites animation-enabled" data-section-id="topsites"><div class="section-top-bar"><h3 class="section-title"><span class="click-target"><span class="icon icon-small-spacer icon-topsites"></span><span>Situs Teratas</span></span></h3><div><button class="context-menu-button icon"><span class="sr-only"><span>Open the section context menu</span></span></button></div></div><div class="section-body"><ul class="top-sites-list"><li class="top-site-outer placeholder "><div class="top-site-inner"><a><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Sunting situs ini"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Sunting situs ini"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Sunting situs ini"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Sunting situs ini"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Sunting situs ini"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Sunting situs ini"></button></div></li><li class="top-site-outer placeholder hide-for-narrow"><div class="top-site-inner"><a><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Sunting situs ini"></button></div></li><li class="top-site-outer placeholder hide-for-narrow"><div class="top-site-inner"><a><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Sunting situs ini"></button></div></li></ul><div class="edit-topsites-wrapper"></div></div></section><section class="collapsible-section section normal-cards animation-enabled" data-section-id="topstories"><div class="section-top-bar"><h3 class="section-title"><span class="click-target"><span class="icon icon-small-spacer icon-pocket"></span><span>Disarankan oleh Pocket</span></span></h3><div><button class="context-menu-button icon"><span class="sr-only"><span>Open the section context menu</span></span></button></div></div><div class="section-body"><ul class="section-list" style="padding:0"></ul><div class="topic"><span><span>Topik Populer:</span></span><ul></ul></div></div></section><section class="collapsible-section section normal-cards animation-enabled" data-section-id="highlights"><div class="section-top-bar"><h3 class="section-title"><span class="click-target"><span class="icon icon-small-spacer icon-highlights"></span><span>Sorotan</span></span></h3><div><button class="context-menu-button icon"><span class="sr-only"><span>Open the section context menu</span></span></button></div></div><div class="section-body"><ul class="section-list" style="padding:0"></ul></div></section></div><div class="prefs-button"><button class="icon icon-settings" title="Ubahsuai laman Tab Baru Anda"></button></div></div></main></div></div></div>
|
||||
<div id="root"><div data-reactroot=""><div class="outer-wrapper fixed-to-top"><main><div class="non-collapsible-section"><div class="search-wrapper"><label for="newtab-search-text" class="search-label"><span class="sr-only"><span>Cari di Web</span></span></label><input type="search" id="newtab-search-text" maxLength="256" placeholder="Cari di Web" title="Cari di Web"/><button id="searchSubmit" class="search-button" title="Cari"><span class="sr-only"><span>Cari</span></span></button></div></div><div class="body-wrapper"><div class="sections-list"><section class="collapsible-section top-sites animation-enabled" data-section-id="topsites"><div class="section-top-bar"><h3 class="section-title"><span class="click-target"><span class="icon icon-small-spacer icon-topsites"></span><span>Situs Teratas</span></span></h3><div><button class="context-menu-button icon"><span class="sr-only"><span>Buka bagian menu konteks</span></span></button></div></div><div class="section-body"><ul class="top-sites-list"><li class="top-site-outer placeholder "><div class="top-site-inner"><a><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Sunting situs ini"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Sunting situs ini"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Sunting situs ini"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Sunting situs ini"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Sunting situs ini"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Sunting situs ini"></button></div></li><li class="top-site-outer placeholder hide-for-narrow"><div class="top-site-inner"><a><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Sunting situs ini"></button></div></li><li class="top-site-outer placeholder hide-for-narrow"><div class="top-site-inner"><a><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Sunting situs ini"></button></div></li></ul><div class="edit-topsites-wrapper"></div></div></section><section class="collapsible-section section normal-cards animation-enabled" data-section-id="topstories"><div class="section-top-bar"><h3 class="section-title"><span class="click-target"><span class="icon icon-small-spacer icon-pocket"></span><span>Disarankan oleh Pocket</span></span></h3><div><button class="context-menu-button icon"><span class="sr-only"><span>Buka bagian menu konteks</span></span></button></div></div><div class="section-body"><ul class="section-list" style="padding:0"></ul><div class="topic"><span><span>Topik Populer:</span></span><ul></ul></div></div></section><section class="collapsible-section section normal-cards animation-enabled" data-section-id="highlights"><div class="section-top-bar"><h3 class="section-title"><span class="click-target"><span class="icon icon-small-spacer icon-highlights"></span><span>Sorotan</span></span></h3><div><button class="context-menu-button icon"><span class="sr-only"><span>Buka bagian menu konteks</span></span></button></div></div><div class="section-body"><ul class="section-list" style="padding:0"></ul></div></section></div><div class="prefs-button"><button class="icon icon-settings" title="Ubahsuai laman Tab Baru Anda"></button></div></div></main></div></div></div>
|
||||
<div id="snippets-container">
|
||||
<div id="snippets"></div>
|
||||
</div>
|
||||
|
|
|
@ -4,13 +4,13 @@ window.gActivityStreamStrings = {
|
|||
"header_top_sites": "Situs Teratas",
|
||||
"header_highlights": "Sorotan",
|
||||
"header_recommended_by": "Disarankan oleh {provider}",
|
||||
"context_menu_button_sr": "Open context menu for {title}",
|
||||
"section_context_menu_button_sr": "Open the section context menu",
|
||||
"context_menu_button_sr": "Buka menu konteks untuk {title}",
|
||||
"section_context_menu_button_sr": "Buka bagian menu konteks",
|
||||
"type_label_visited": "Dikunjungi",
|
||||
"type_label_bookmarked": "Dimarkahi",
|
||||
"type_label_recommended": "Trending",
|
||||
"type_label_pocket": "Disimpan di Pocket",
|
||||
"type_label_downloaded": "Downloaded",
|
||||
"type_label_downloaded": "Terunduh",
|
||||
"menu_action_bookmark": "Markah",
|
||||
"menu_action_remove_bookmark": "Hapus Markah",
|
||||
"menu_action_open_new_window": "Buka di Jendela Baru",
|
||||
|
@ -23,34 +23,34 @@ window.gActivityStreamStrings = {
|
|||
"confirm_history_delete_notice_p2": "Tindakan ini tidak bisa diurungkan.",
|
||||
"menu_action_save_to_pocket": "Simpan ke Pocket",
|
||||
"menu_action_delete_pocket": "Hapus dari Pocket",
|
||||
"menu_action_archive_pocket": "Archive in 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_archive_pocket": "Arsip di Pocket",
|
||||
"menu_action_show_file_mac_os": "Tampilkan di Finder",
|
||||
"menu_action_show_file_windows": "Buka Foldernya",
|
||||
"menu_action_show_file_linux": "Buka Foldernya",
|
||||
"menu_action_show_file_default": "Tampilkan Berkas",
|
||||
"menu_action_open_file": "Buka Berkas",
|
||||
"menu_action_copy_download_link": "Salin Tautan Unduhan",
|
||||
"menu_action_go_to_download_page": "Buka Laman Unduhan",
|
||||
"menu_action_remove_download": "Hapus dari Riwayat",
|
||||
"search_button": "Cari",
|
||||
"search_header": "Pencarian {search_engine_name}",
|
||||
"search_web_placeholder": "Cari di Web",
|
||||
"section_disclaimer_topstories": "The most interesting stories on the web, selected based on what you read. From Pocket, now part of Mozilla.",
|
||||
"section_disclaimer_topstories_linktext": "Learn how it works.",
|
||||
"section_disclaimer_topstories_buttontext": "Okay, got it",
|
||||
"prefs_home_header": "Firefox Home Content",
|
||||
"prefs_home_description": "Choose what content you want on your Firefox Home screen.",
|
||||
"section_disclaimer_topstories": "Cerita paling menarik di web, dipilih berdasarkan apa yang Anda baca. Dari Pocket, yang kini merupakan bagian dari Mozilla.",
|
||||
"section_disclaimer_topstories_linktext": "Pelajari cara kerjanya.",
|
||||
"section_disclaimer_topstories_buttontext": "Oke, paham",
|
||||
"prefs_home_header": "Konten Beranda Firefox",
|
||||
"prefs_home_description": "Pilih konten yang anda ingin untuk ditampilkan dalam Beranda Firefox.",
|
||||
"prefs_section_rows_option": "{num} baris;{num} baris",
|
||||
"prefs_search_header": "Web Search",
|
||||
"prefs_topsites_description": "The sites you visit most",
|
||||
"prefs_topstories_description2": "Great content from around the web, personalized for you",
|
||||
"prefs_topstories_options_sponsored_label": "Sponsored Stories",
|
||||
"prefs_topstories_sponsored_learn_more": "Learn more",
|
||||
"prefs_highlights_description": "A selection of sites that you’ve saved or visited",
|
||||
"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_snippets_description": "Updates from Mozilla and Firefox",
|
||||
"prefs_search_header": "Pencarian Web",
|
||||
"prefs_topsites_description": "Situs yang sering Anda kunjungi",
|
||||
"prefs_topstories_description2": "Konten bermutu dari seluruh web, khusus untuk Anda",
|
||||
"prefs_topstories_options_sponsored_label": "Konten Sponsor",
|
||||
"prefs_topstories_sponsored_learn_more": "Pelajari lebih lanjut",
|
||||
"prefs_highlights_description": "Sejumlah situs yang Anda simpan atau kunjungi",
|
||||
"prefs_highlights_options_visited_label": "Laman yang Dikunjungi",
|
||||
"prefs_highlights_options_download_label": "Unduhan Terbaru",
|
||||
"prefs_highlights_options_pocket_label": "Laman Disimpan di Pocket",
|
||||
"prefs_snippets_description": "Pembaruan dari Mozilla dan Firefox",
|
||||
"settings_pane_button_label": "Ubahsuai laman Tab Baru Anda",
|
||||
"settings_pane_topsites_header": "Situs Teratas",
|
||||
"settings_pane_highlights_header": "Sorotan",
|
||||
|
@ -60,18 +60,18 @@ window.gActivityStreamStrings = {
|
|||
"edit_topsites_edit_button": "Sunting situs ini",
|
||||
"topsites_form_add_header": "Situs Pilihan Baru",
|
||||
"topsites_form_edit_header": "Ubah Situs Pilihan",
|
||||
"topsites_form_title_label": "Title",
|
||||
"topsites_form_title_label": "Judul",
|
||||
"topsites_form_title_placeholder": "Masukkan judul",
|
||||
"topsites_form_url_label": "URL",
|
||||
"topsites_form_image_url_label": "Custom Image URL",
|
||||
"topsites_form_image_url_label": "URL Gambar Khusus",
|
||||
"topsites_form_url_placeholder": "Ketik atau tempel URL",
|
||||
"topsites_form_use_image_link": "Use a custom image…",
|
||||
"topsites_form_use_image_link": "Gunakan gambar khusus…",
|
||||
"topsites_form_preview_button": "Pratinjau",
|
||||
"topsites_form_add_button": "Tambah",
|
||||
"topsites_form_save_button": "Simpan",
|
||||
"topsites_form_cancel_button": "Batalkan",
|
||||
"topsites_form_url_validation": "URL valid diperlukan",
|
||||
"topsites_form_image_validation": "Image failed to load. Try a different URL.",
|
||||
"topsites_form_image_validation": "Gambar gagal dimuat. Cobalah URL lain.",
|
||||
"pocket_read_more": "Topik Populer:",
|
||||
"pocket_read_even_more": "Lihat Cerita Lainnya",
|
||||
"highlights_empty_state": "Mulai menjelajah, dan kami akan menampilkan beberapa artikel bagus, video, dan halaman lain yang baru saja Anda kunjungi atau termarkah di sini.",
|
||||
|
@ -79,37 +79,26 @@ window.gActivityStreamStrings = {
|
|||
"manual_migration_explanation2": "Coba Firefox dengan markah, riwayat, dan sandi dari peramban lain.",
|
||||
"manual_migration_cancel_button": "Tidak, Terima kasih",
|
||||
"manual_migration_import_button": "Impor Sekarang",
|
||||
"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_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_privacy_notice": "Privacy Notice",
|
||||
"firstrun_title": "Take Firefox with You",
|
||||
"firstrun_content": "Get your bookmarks, history, passwords and other settings on all your devices.",
|
||||
"firstrun_learn_more_link": "Learn more about Firefox Accounts",
|
||||
"firstrun_form_header": "Enter your email",
|
||||
"firstrun_form_sub_header": "to continue to Firefox Sync.",
|
||||
"firstrun_email_input_placeholder": "Email",
|
||||
"firstrun_extra_legal_links": "By proceeding, you agree to the {terms} and {privacy}.",
|
||||
"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": "Preferensi Tab Baru",
|
||||
"settings_pane_body2": "Pilih apa yang Anda lihat di halaman ini.",
|
||||
"settings_pane_search_header": "Pencarian",
|
||||
"settings_pane_search_body": "Cari Web dari tab baru Anda.",
|
||||
"settings_pane_topsites_body": "Mengakses situs web yang paling sering Anda kunjungi.",
|
||||
"settings_pane_topsites_options_showmore": "Tampilkan dua baris",
|
||||
"settings_pane_highlights_body2": "Temukan jalan kembali ke hal menarik yang baru saja Anda kunjungi atau dimarkah.",
|
||||
"settings_pane_highlights_options_visited": "Situs Terkunjungi",
|
||||
"settings_pane_snippets_body": "Baca info pendek terbaru dari Mozilla tentang Firefox, budaya internet dan beberapa meme acak.",
|
||||
"settings_pane_done_button": "Selesai",
|
||||
"pocket_description": "Temukan konten berkualitas tinggi yang mungkin Anda lewatkan dengan bantuan Pocket, yang sekarang menjadi bagian dari Mozilla."
|
||||
"error_fallback_default_info": "Ups, ada masalah saat memuat konten ini.",
|
||||
"error_fallback_default_refresh_suggestion": "Segarkan laman untuk mencoba lagi.",
|
||||
"section_menu_action_remove_section": "Hapus Bagian",
|
||||
"section_menu_action_collapse_section": "Ciutkan Bagian",
|
||||
"section_menu_action_expand_section": "Bentangkan Bagian",
|
||||
"section_menu_action_manage_section": "Kelola Bagian",
|
||||
"section_menu_action_manage_webext": "Kelola Ekstensi",
|
||||
"section_menu_action_add_topsite": "Tambah Situs Pilihan",
|
||||
"section_menu_action_move_up": "Naikkan",
|
||||
"section_menu_action_move_down": "Turunkan",
|
||||
"section_menu_action_privacy_notice": "Kebijakan Privasi",
|
||||
"firstrun_title": "Bawa Firefox bersama Anda",
|
||||
"firstrun_content": "Dapatkan markah, riwayat, sandi, dan setelan lainnya di semua peranti Anda.",
|
||||
"firstrun_learn_more_link": "Pelajari selengkapnya tentang Firefox Accounts",
|
||||
"firstrun_form_header": "Masukkan surel Anda",
|
||||
"firstrun_form_sub_header": "Lanjutkan ke Firefox Sync.",
|
||||
"firstrun_email_input_placeholder": "Surel",
|
||||
"firstrun_extra_legal_links": "Dengan melanjutkan, Anda menyetujui {terms} dan {privacy}.",
|
||||
"firstrun_terms_of_service": "Ketentuan Layanan",
|
||||
"firstrun_privacy_notice": "Pernyataan Privasi",
|
||||
"firstrun_continue_to_login": "Lanjutkan",
|
||||
"firstrun_skip_login": "Lewati langkah ini"
|
||||
};
|
||||
|
|
|
@ -85,20 +85,20 @@ window.gActivityStreamStrings = {
|
|||
"section_menu_action_collapse_section": "Fneẓ tigezmi",
|
||||
"section_menu_action_expand_section": "Snefli tigezmi",
|
||||
"section_menu_action_manage_section": "Sefrek tigezmi",
|
||||
"section_menu_action_manage_webext": "Manage Extension",
|
||||
"section_menu_action_manage_webext": "Sefrek asiɣzef",
|
||||
"section_menu_action_add_topsite": "Rnu asmel ifazen",
|
||||
"section_menu_action_move_up": "Ali",
|
||||
"section_menu_action_move_down": "Ader",
|
||||
"section_menu_action_privacy_notice": "Tasertit n tbaḍnit",
|
||||
"firstrun_title": "Take Firefox with You",
|
||||
"firstrun_content": "Get your bookmarks, history, passwords and other settings on all your devices.",
|
||||
"firstrun_learn_more_link": "Learn more about Firefox Accounts",
|
||||
"firstrun_form_header": "Enter your email",
|
||||
"firstrun_form_sub_header": "to continue to Firefox Sync.",
|
||||
"firstrun_email_input_placeholder": "Email",
|
||||
"firstrun_title": "Awi Firefox yid-k",
|
||||
"firstrun_content": "Awi ticraḍ-ik n yisebtar, amazray-ik, awalen-ik uffiren d yiɣewwaṛen-nniḍen ɣef ibenkan-ik meṛṛa.",
|
||||
"firstrun_learn_more_link": "Issin ugar ɣef Firefox Accounts",
|
||||
"firstrun_form_header": "Sekcem imayl inek",
|
||||
"firstrun_form_sub_header": "akken ad tkemleḍ akked Firefox Sync",
|
||||
"firstrun_email_input_placeholder": "Imayl",
|
||||
"firstrun_extra_legal_links": "By proceeding, you agree to the {terms} and {privacy}.",
|
||||
"firstrun_terms_of_service": "Terms of Service",
|
||||
"firstrun_privacy_notice": "Privacy Notice",
|
||||
"firstrun_continue_to_login": "Continue",
|
||||
"firstrun_skip_login": "Skip this step"
|
||||
"firstrun_terms_of_service": "Tiwtilin n useqdec",
|
||||
"firstrun_privacy_notice": "Tasertit n tbaḍnit",
|
||||
"firstrun_continue_to_login": "Kemmel",
|
||||
"firstrun_skip_login": "Zgel amecwaṛ-agi"
|
||||
};
|
||||
|
|
|
@ -85,33 +85,20 @@ window.gActivityStreamStrings = {
|
|||
"section_menu_action_collapse_section": "섹션 닫기",
|
||||
"section_menu_action_expand_section": "섹션 열기",
|
||||
"section_menu_action_manage_section": "섹션 관리",
|
||||
"section_menu_action_manage_webext": "Manage Extension",
|
||||
"section_menu_action_manage_webext": "부가 기능 관리",
|
||||
"section_menu_action_add_topsite": "인기 사이트 추가",
|
||||
"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.",
|
||||
"firstrun_learn_more_link": "Learn more about Firefox Accounts",
|
||||
"firstrun_form_header": "Enter your email",
|
||||
"firstrun_form_sub_header": "to continue to Firefox Sync.",
|
||||
"firstrun_email_input_placeholder": "Email",
|
||||
"firstrun_extra_legal_links": "By proceeding, you agree to the {terms} and {privacy}.",
|
||||
"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": "기본값으로 복원",
|
||||
"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": "Mozilla와 하나가 된 Pocket의 도움으로 놓칠지도 모르는 고품질의 컨텐츠를 접해보세요."
|
||||
"firstrun_title": "Firefox와 함께 하세요",
|
||||
"firstrun_content": "즐겨찾기와 방문기록, 비밀번호, 다른 설정을 모든 기기에서 사용해 보세요.",
|
||||
"firstrun_learn_more_link": "Firefox 계정 자세히 알아보기",
|
||||
"firstrun_form_header": "이메일을 입력",
|
||||
"firstrun_form_sub_header": "해서 Firefox Sync 사용",
|
||||
"firstrun_email_input_placeholder": "이메일",
|
||||
"firstrun_extra_legal_links": "진행하면 {terms}과 {privacy}에 동의하게 됩니다.",
|
||||
"firstrun_terms_of_service": "이용 약관",
|
||||
"firstrun_privacy_notice": "개인 정보 보호 정책",
|
||||
"firstrun_continue_to_login": "계속",
|
||||
"firstrun_skip_login": "단계 건너뛰기"
|
||||
};
|
||||
|
|
|
@ -85,33 +85,20 @@ window.gActivityStreamStrings = {
|
|||
"section_menu_action_collapse_section": "Conprimmi seçion",
|
||||
"section_menu_action_expand_section": "Espandi seçion",
|
||||
"section_menu_action_manage_section": "Gestisci seçion",
|
||||
"section_menu_action_manage_webext": "Manage Extension",
|
||||
"section_menu_action_manage_webext": "Gestisci estenscioin",
|
||||
"section_menu_action_add_topsite": "Azonzi scito prinçipâ",
|
||||
"section_menu_action_move_up": "Mescia in sciù",
|
||||
"section_menu_action_move_down": "Mescia in zu",
|
||||
"section_menu_action_privacy_notice": "Informativa in sciâ privacy",
|
||||
"firstrun_title": "Take Firefox with You",
|
||||
"firstrun_content": "Get your bookmarks, history, passwords and other settings on all your devices.",
|
||||
"firstrun_learn_more_link": "Learn more about Firefox Accounts",
|
||||
"firstrun_form_header": "Enter your email",
|
||||
"firstrun_form_sub_header": "to continue to Firefox Sync.",
|
||||
"firstrun_title": "Pòrta Firefox con ti",
|
||||
"firstrun_content": "Repiggia i teu segnalibbri, stöia, poule segrete e atre inpostaçioin in sce tutti i teu dispoxitivi.",
|
||||
"firstrun_learn_more_link": "Saccine de ciù in sce l'account Firefox",
|
||||
"firstrun_form_header": "Scrivi a teu email",
|
||||
"firstrun_form_sub_header": "pe continoâ con Firefox Sync.",
|
||||
"firstrun_email_input_placeholder": "Email",
|
||||
"firstrun_extra_legal_links": "By proceeding, you agree to the {terms} and {privacy}.",
|
||||
"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": "Repiggia predefinii",
|
||||
"settings_pane_header": "Preferense neuvo feuggio",
|
||||
"settings_pane_body2": "Çerni cöse ti veu vedde in sta pagina.",
|
||||
"settings_pane_search_header": "Çerca",
|
||||
"settings_pane_search_body": "Çerca inta Ræ da-o teu neuvo feuggio.",
|
||||
"settings_pane_topsites_body": "Acedi a-i sciti che ti vixiti ciù de spesso.",
|
||||
"settings_pane_topsites_options_showmore": "Fanni vedde doe righe",
|
||||
"settings_pane_highlights_body2": "Treuva torna e pagine interesanti che t'aivi vixitou ò azonto a-i segnalibbri.",
|
||||
"settings_pane_highlights_options_visited": "Sciti vixitæ",
|
||||
"settings_pane_snippets_body": "Notiçie brevi da Mozille in sciô Firefox, Internet, sensa ascordâ di meme quache vòtta.",
|
||||
"settings_pane_done_button": "Fæto",
|
||||
"settings_pane_topstories_options_sponsored": "Fanni vedde articoli sponsorizæ",
|
||||
"pocket_description": "Graçie a Pocket, un conponente da famiggia Mozilla, descòvri contegnui de erta qualitæ che atrimenti te porieivan scapâ."
|
||||
"firstrun_extra_legal_links": "Se ti væ avanti t'ê d'acòrdio co-i {terms} e l'{privacy}.",
|
||||
"firstrun_terms_of_service": "Termini do serviçio",
|
||||
"firstrun_privacy_notice": "Informativa in sciâ privacy",
|
||||
"firstrun_continue_to_login": "Continoa",
|
||||
"firstrun_skip_login": "Sata sto passo"
|
||||
};
|
||||
|
|
|
@ -85,33 +85,20 @@ window.gActivityStreamStrings = {
|
|||
"section_menu_action_collapse_section": "Suskleisti skiltį",
|
||||
"section_menu_action_expand_section": "Išplėsti skiltį",
|
||||
"section_menu_action_manage_section": "Tvarkyti skiltį",
|
||||
"section_menu_action_manage_webext": "Manage Extension",
|
||||
"section_menu_action_manage_webext": "Tvarkyti priedą",
|
||||
"section_menu_action_add_topsite": "Pridėti lankomą svetainę",
|
||||
"section_menu_action_move_up": "Pakelti",
|
||||
"section_menu_action_move_down": "Nuleisti",
|
||||
"section_menu_action_privacy_notice": "Privatumo nuostatai",
|
||||
"firstrun_title": "Take Firefox with You",
|
||||
"firstrun_content": "Get your bookmarks, history, passwords and other settings on all your devices.",
|
||||
"firstrun_learn_more_link": "Learn more about Firefox Accounts",
|
||||
"firstrun_form_header": "Enter your email",
|
||||
"firstrun_form_sub_header": "to continue to Firefox Sync.",
|
||||
"firstrun_email_input_placeholder": "Email",
|
||||
"firstrun_extra_legal_links": "By proceeding, you agree to the {terms} and {privacy}.",
|
||||
"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": "Grąžinti numatytąsias nuostatas",
|
||||
"settings_pane_header": "Naujos kortelės nuostatos",
|
||||
"settings_pane_body2": "Pasirinkite, ką matysite šiame tinklalapyje.",
|
||||
"settings_pane_search_header": "Paieška",
|
||||
"settings_pane_search_body": "Ieškokite saityne tiesiai iš naujos kortelės.",
|
||||
"settings_pane_topsites_body": "Pasiekite jūsų dažniausiai lankomas svetaines.",
|
||||
"settings_pane_topsites_options_showmore": "Rodyti dvi eilutes",
|
||||
"settings_pane_highlights_body2": "Sugrįžkite prie įdomių dalykų, kuriuose neseniai lankėtės ar įtraukėte į adresyną.",
|
||||
"settings_pane_highlights_options_visited": "Aplankytos svetainės",
|
||||
"settings_pane_snippets_body": "Skaitykite trumpas ir mielas naujienas iš „Mozillos“ apie „Firefox“, interneto kultūrą bei atsitiktinį memą.",
|
||||
"settings_pane_done_button": "Atlikta",
|
||||
"settings_pane_topstories_options_sponsored": "Rodyti rėmėjų straipsnius",
|
||||
"pocket_description": "Atraskite kokybišką turinį, kurio kitaip galbūt nerastumėte, su „Pocket“, kuri yra tapusi „Mozillos“ dalimi, pagalba."
|
||||
"firstrun_title": "Pasiimkite „Firefox“ su savimi",
|
||||
"firstrun_content": "Turėkite savo adresyną, žurnalą, slaptažodžius ir kitas nuostatas visuose savo įrenginiuose.",
|
||||
"firstrun_learn_more_link": "Sužinokite daugiau apie „Firefox“ paskyras",
|
||||
"firstrun_form_header": "Įveskite savo el. paštą",
|
||||
"firstrun_form_sub_header": "norėdami tęsti su „Firefox Sync“.",
|
||||
"firstrun_email_input_placeholder": "El. paštas",
|
||||
"firstrun_extra_legal_links": "Tęsdami sutinkate su {terms} ir {privacy}.",
|
||||
"firstrun_terms_of_service": "paslaugos teikimo nuostatais",
|
||||
"firstrun_privacy_notice": "privatumo nuostatais",
|
||||
"firstrun_continue_to_login": "Tęsti",
|
||||
"firstrun_skip_login": "Praleisti šį žingsnį"
|
||||
};
|
||||
|
|
|
@ -8,9 +8,9 @@ window.gActivityStreamStrings = {
|
|||
"section_context_menu_button_sr": "Buka bahagian menu konteks",
|
||||
"type_label_visited": "Dilawati",
|
||||
"type_label_bookmarked": "Ditandabuku",
|
||||
"type_label_recommended": "Trending",
|
||||
"type_label_recommended": "Sohor kini",
|
||||
"type_label_pocket": "Disimpan ke Pocket",
|
||||
"type_label_downloaded": "Dimuat turun",
|
||||
"type_label_downloaded": "Telah dimuat turun",
|
||||
"menu_action_bookmark": "Tandabuku",
|
||||
"menu_action_remove_bookmark": "Buang Tandabuku",
|
||||
"menu_action_open_new_window": "Buka dalam Tetingkap Baru",
|
||||
|
|
|
@ -91,7 +91,7 @@ window.gActivityStreamStrings = {
|
|||
"section_menu_action_move_down": "Flytt ned",
|
||||
"section_menu_action_privacy_notice": "Personvernmerknad",
|
||||
"firstrun_title": "Ta med deg Firefox",
|
||||
"firstrun_content": "Get your bookmarks, history, passwords and other settings on all your devices.",
|
||||
"firstrun_content": "Få bokmerke, historikk, passord, og andre innstillingar på alle einingane dine.",
|
||||
"firstrun_learn_more_link": "Les meir om Firefox-kontoen",
|
||||
"firstrun_form_header": "Skriv inn e-postadressa di",
|
||||
"firstrun_form_sub_header": "for å fortsetje til Firefox Sync.",
|
||||
|
|
|
@ -0,0 +1,39 @@
|
|||
<!doctype html>
|
||||
<html lang="oc" dir="ltr">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="Content-Security-Policy-Report-Only" content="script-src 'unsafe-inline'; img-src http: https: data: blob:; style-src 'unsafe-inline'; child-src 'none'; object-src 'none'; report-uri https://tiles.services.mozilla.com/v4/links/activity-stream/csp">
|
||||
<title>Onglet novèl</title>
|
||||
<link rel="icon" type="image/png" href="chrome://branding/content/icon32.png"/>
|
||||
<link rel="stylesheet" href="chrome://browser/content/contentSearchUI.css" />
|
||||
<link rel="stylesheet" href="resource://activity-stream/css/activity-stream.css" />
|
||||
</head>
|
||||
<body class="activity-stream">
|
||||
<div id="root"><div data-reactroot=""><div class="outer-wrapper fixed-to-top"><main><div class="non-collapsible-section"><div class="search-wrapper"><label for="newtab-search-text" class="search-label"><span class="sr-only"><span>Recèrca sul web</span></span></label><input type="search" id="newtab-search-text" maxLength="256" placeholder="Recèrca sul web" title="Recèrca sul web"/><button id="searchSubmit" class="search-button" title="Recercar"><span class="sr-only"><span>Recercar</span></span></button></div></div><div class="body-wrapper"><div class="sections-list"><section class="collapsible-section top-sites animation-enabled" data-section-id="topsites"><div class="section-top-bar"><h3 class="section-title"><span class="click-target"><span class="icon icon-small-spacer icon-topsites"></span><span>Sites favorits</span></span></h3><div><button class="context-menu-button icon"><span class="sr-only"><span>Open the section context menu</span></span></button></div></div><div class="section-body"><ul class="top-sites-list"><li class="top-site-outer placeholder "><div class="top-site-inner"><a><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Edit this site"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Edit this site"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Edit this site"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Edit this site"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Edit this site"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Edit this site"></button></div></li><li class="top-site-outer placeholder hide-for-narrow"><div class="top-site-inner"><a><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Edit this site"></button></div></li><li class="top-site-outer placeholder hide-for-narrow"><div class="top-site-inner"><a><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Edit this site"></button></div></li></ul><div class="edit-topsites-wrapper"></div></div></section><section class="collapsible-section section normal-cards animation-enabled" data-section-id="topstories"><div class="section-top-bar"><h3 class="section-title"><span class="click-target"><span class="icon icon-small-spacer icon-pocket"></span><span>Recommended by Pocket</span></span></h3><div><button class="context-menu-button icon"><span class="sr-only"><span>Open the section context menu</span></span></button></div></div><div class="section-body"><ul class="section-list" style="padding:0"></ul><div class="topic"><span><span>Popular Topics:</span></span><ul></ul></div></div></section><section class="collapsible-section section normal-cards animation-enabled" data-section-id="highlights"><div class="section-top-bar"><h3 class="section-title"><span class="click-target"><span class="icon icon-small-spacer icon-highlights"></span><span>Highlights</span></span></h3><div><button class="context-menu-button icon"><span class="sr-only"><span>Open the section context menu</span></span></button></div></div><div class="section-body"><ul class="section-list" style="padding:0"></ul></div></section></div><div class="prefs-button"><button class="icon icon-settings" title="Customize your New Tab page"></button></div></div></main></div></div></div>
|
||||
<div id="snippets-container">
|
||||
<div id="snippets"></div>
|
||||
</div>
|
||||
<script>
|
||||
// Don't directly load the following scripts as part of html to let the page
|
||||
// finish loading to render the content sooner.
|
||||
for (const src of [
|
||||
"resource://activity-stream/prerendered/static/activity-stream-initial-state.js",
|
||||
"chrome://browser/content/contentSearchUI.js",
|
||||
"resource://activity-stream/vendor/react.js",
|
||||
"resource://activity-stream/vendor/react-dom.js",
|
||||
"resource://activity-stream/vendor/prop-types.js",
|
||||
"resource://activity-stream/vendor/react-intl.js",
|
||||
"resource://activity-stream/vendor/redux.js",
|
||||
"resource://activity-stream/vendor/react-redux.js",
|
||||
"resource://activity-stream/prerendered/oc/activity-stream-strings.js",
|
||||
"resource://activity-stream/data/content/activity-stream.bundle.js"
|
||||
]) {
|
||||
// These dynamically inserted scripts by default are async, but we need them
|
||||
// to load in the desired order (i.e., bundle last).
|
||||
const script = document.body.appendChild(document.createElement("script"));
|
||||
script.async = false;
|
||||
script.src = src;
|
||||
}
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,104 @@
|
|||
// Note - this is a generated oc file.
|
||||
window.gActivityStreamStrings = {
|
||||
"newtab_page_title": "Onglet novèl",
|
||||
"header_top_sites": "Sites favorits",
|
||||
"header_highlights": "Highlights",
|
||||
"header_recommended_by": "Recommended by {provider}",
|
||||
"context_menu_button_sr": "Open context menu for {title}",
|
||||
"section_context_menu_button_sr": "Open the section context menu",
|
||||
"type_label_visited": "Visitat",
|
||||
"type_label_bookmarked": "Apondut als marcapaginas",
|
||||
"type_label_recommended": "Tendéncia",
|
||||
"type_label_pocket": "Pagina enregistrada dins Pocket",
|
||||
"type_label_downloaded": "Telecargat",
|
||||
"menu_action_bookmark": "Marcar aquesta pagina",
|
||||
"menu_action_remove_bookmark": "Suprimir lo marcapagina",
|
||||
"menu_action_open_new_window": "Dobrir lo ligam dins una fenèstra novèla",
|
||||
"menu_action_open_private_window": "Dobrir lo ligam dins una fenèstra de navegacion privada",
|
||||
"menu_action_dismiss": "Dismiss",
|
||||
"menu_action_delete": "Delete from History",
|
||||
"menu_action_pin": "Pin",
|
||||
"menu_action_unpin": "Unpin",
|
||||
"confirm_history_delete_p1": "Are you sure you want to delete every instance of this page from your history?",
|
||||
"confirm_history_delete_notice_p2": "This action cannot be undone.",
|
||||
"menu_action_save_to_pocket": "Save to Pocket",
|
||||
"menu_action_delete_pocket": "Delete from Pocket",
|
||||
"menu_action_archive_pocket": "Archive in 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": "Mostrar lo fichièr",
|
||||
"menu_action_open_file": "Dobrir lo fichièr",
|
||||
"menu_action_copy_download_link": "Copy Download Link",
|
||||
"menu_action_go_to_download_page": "Go to Download Page",
|
||||
"menu_action_remove_download": "Tirar de l’istoric",
|
||||
"search_button": "Recercar",
|
||||
"search_header": "{search_engine_name} Search",
|
||||
"search_web_placeholder": "Recèrca sul web",
|
||||
"section_disclaimer_topstories": "The most interesting stories on the web, selected based on what you read. From Pocket, now part of Mozilla.",
|
||||
"section_disclaimer_topstories_linktext": "Vejatz cossí fonciona.",
|
||||
"section_disclaimer_topstories_buttontext": "Comprés",
|
||||
"prefs_home_header": "Firefox Home Content",
|
||||
"prefs_home_description": "Choose what content you want on your Firefox Home screen.",
|
||||
"prefs_section_rows_option": "{num} row;{num} rows",
|
||||
"prefs_search_header": "Web Search",
|
||||
"prefs_topsites_description": "The sites you visit most",
|
||||
"prefs_topstories_description2": "Great content from around the web, personalized for you",
|
||||
"prefs_topstories_options_sponsored_label": "Sponsored Stories",
|
||||
"prefs_topstories_sponsored_learn_more": "Learn more",
|
||||
"prefs_highlights_description": "A selection of sites that you’ve saved or visited",
|
||||
"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_snippets_description": "Updates from Mozilla and Firefox",
|
||||
"settings_pane_button_label": "Customize your New Tab page",
|
||||
"settings_pane_topsites_header": "Top Sites",
|
||||
"settings_pane_highlights_header": "Highlights",
|
||||
"settings_pane_highlights_options_bookmarks": "Bookmarks",
|
||||
"settings_pane_snippets_header": "Snippets",
|
||||
"edit_topsites_button_text": "Edit",
|
||||
"edit_topsites_edit_button": "Edit this site",
|
||||
"topsites_form_add_header": "New Top Site",
|
||||
"topsites_form_edit_header": "Edit Top Site",
|
||||
"topsites_form_title_label": "Title",
|
||||
"topsites_form_title_placeholder": "Enter a title",
|
||||
"topsites_form_url_label": "URL",
|
||||
"topsites_form_image_url_label": "Custom Image URL",
|
||||
"topsites_form_url_placeholder": "Type or paste a URL",
|
||||
"topsites_form_use_image_link": "Use a custom image…",
|
||||
"topsites_form_preview_button": "Preview",
|
||||
"topsites_form_add_button": "Add",
|
||||
"topsites_form_save_button": "Save",
|
||||
"topsites_form_cancel_button": "Cancel",
|
||||
"topsites_form_url_validation": "Valid URL required",
|
||||
"topsites_form_image_validation": "Image failed to load. Try a different URL.",
|
||||
"pocket_read_more": "Popular Topics:",
|
||||
"pocket_read_even_more": "View More Stories",
|
||||
"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_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_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_privacy_notice": "Privacy Notice",
|
||||
"firstrun_title": "Take Firefox with You",
|
||||
"firstrun_content": "Get your bookmarks, history, passwords and other settings on all your devices.",
|
||||
"firstrun_learn_more_link": "Learn more about Firefox Accounts",
|
||||
"firstrun_form_header": "Enter your email",
|
||||
"firstrun_form_sub_header": "to continue to Firefox Sync.",
|
||||
"firstrun_email_input_placeholder": "Email",
|
||||
"firstrun_extra_legal_links": "By proceeding, you agree to the {terms} and {privacy}.",
|
||||
"firstrun_terms_of_service": "Terms of Service",
|
||||
"firstrun_privacy_notice": "Privacy Notice",
|
||||
"firstrun_continue_to_login": "Continue",
|
||||
"firstrun_skip_login": "Skip this step"
|
||||
};
|
|
@ -0,0 +1,38 @@
|
|||
<!doctype html>
|
||||
<html lang="oc" dir="ltr">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="Content-Security-Policy-Report-Only" content="script-src 'unsafe-inline'; img-src http: https: data: blob:; style-src 'unsafe-inline'; child-src 'none'; object-src 'none'; report-uri https://tiles.services.mozilla.com/v4/links/activity-stream/csp">
|
||||
<title>Onglet novèl</title>
|
||||
<link rel="icon" type="image/png" href="chrome://branding/content/icon32.png"/>
|
||||
<link rel="stylesheet" href="chrome://browser/content/contentSearchUI.css" />
|
||||
<link rel="stylesheet" href="resource://activity-stream/css/activity-stream.css" />
|
||||
</head>
|
||||
<body class="activity-stream">
|
||||
<div id="root"></div>
|
||||
<div id="snippets-container">
|
||||
<div id="snippets"></div>
|
||||
</div>
|
||||
<script>
|
||||
// Don't directly load the following scripts as part of html to let the page
|
||||
// finish loading to render the content sooner.
|
||||
for (const src of [
|
||||
"chrome://browser/content/contentSearchUI.js",
|
||||
"resource://activity-stream/vendor/react.js",
|
||||
"resource://activity-stream/vendor/react-dom.js",
|
||||
"resource://activity-stream/vendor/prop-types.js",
|
||||
"resource://activity-stream/vendor/react-intl.js",
|
||||
"resource://activity-stream/vendor/redux.js",
|
||||
"resource://activity-stream/vendor/react-redux.js",
|
||||
"resource://activity-stream/prerendered/oc/activity-stream-strings.js",
|
||||
"resource://activity-stream/data/content/activity-stream.bundle.js"
|
||||
]) {
|
||||
// These dynamically inserted scripts by default are async, but we need them
|
||||
// to load in the desired order (i.e., bundle last).
|
||||
const script = document.body.appendChild(document.createElement("script"));
|
||||
script.async = false;
|
||||
script.src = src;
|
||||
}
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
|
@ -9,7 +9,7 @@
|
|||
<link rel="stylesheet" href="resource://activity-stream/css/activity-stream.css" />
|
||||
</head>
|
||||
<body class="activity-stream">
|
||||
<div id="root"><div data-reactroot=""><div class="outer-wrapper fixed-to-top"><main><div class="non-collapsible-section"><div class="search-wrapper"><label for="newtab-search-text" class="search-label"><span class="sr-only"><span>Szukaj</span></span></label><input type="search" id="newtab-search-text" maxLength="256" placeholder="Szukaj" title="Szukaj"/><button id="searchSubmit" class="search-button" title="Szukaj"><span class="sr-only"><span>Szukaj</span></span></button></div></div><div class="body-wrapper"><div class="sections-list"><section class="collapsible-section top-sites animation-enabled" data-section-id="topsites"><div class="section-top-bar"><h3 class="section-title"><span class="click-target"><span class="icon icon-small-spacer icon-topsites"></span><span>Popularne</span></span></h3><div><button class="context-menu-button icon"><span class="sr-only"><span>Otwórz menu kontekstowe sekcji</span></span></button></div></div><div class="section-body"><ul class="top-sites-list"><li class="top-site-outer placeholder "><div class="top-site-inner"><a><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Edytuj tę stronę"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Edytuj tę stronę"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Edytuj tę stronę"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Edytuj tę stronę"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Edytuj tę stronę"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Edytuj tę stronę"></button></div></li><li class="top-site-outer placeholder hide-for-narrow"><div class="top-site-inner"><a><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Edytuj tę stronę"></button></div></li><li class="top-site-outer placeholder hide-for-narrow"><div class="top-site-inner"><a><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Edytuj tę stronę"></button></div></li></ul><div class="edit-topsites-wrapper"></div></div></section><section class="collapsible-section section normal-cards animation-enabled" data-section-id="topstories"><div class="section-top-bar"><h3 class="section-title"><span class="click-target"><span class="icon icon-small-spacer icon-pocket"></span><span>Poleca: Pocket</span></span></h3><div><button class="context-menu-button icon"><span class="sr-only"><span>Otwórz menu kontekstowe sekcji</span></span></button></div></div><div class="section-body"><ul class="section-list" style="padding:0"></ul><div class="topic"><span><span>Popularne tematy:</span></span><ul></ul></div></div></section><section class="collapsible-section section normal-cards animation-enabled" data-section-id="highlights"><div class="section-top-bar"><h3 class="section-title"><span class="click-target"><span class="icon icon-small-spacer icon-highlights"></span><span>Wyróżnione</span></span></h3><div><button class="context-menu-button icon"><span class="sr-only"><span>Otwórz menu kontekstowe sekcji</span></span></button></div></div><div class="section-body"><ul class="section-list" style="padding:0"></ul></div></section></div><div class="prefs-button"><button class="icon icon-settings" title="Dostosuj stronę nowej karty"></button></div></div></main></div></div></div>
|
||||
<div id="root"><div data-reactroot=""><div class="outer-wrapper fixed-to-top"><main><div class="non-collapsible-section"><div class="search-wrapper"><label for="newtab-search-text" class="search-label"><span class="sr-only"><span>Szukaj w Internecie</span></span></label><input type="search" id="newtab-search-text" maxLength="256" placeholder="Szukaj w Internecie" title="Szukaj w Internecie"/><button id="searchSubmit" class="search-button" title="Szukaj"><span class="sr-only"><span>Szukaj</span></span></button></div></div><div class="body-wrapper"><div class="sections-list"><section class="collapsible-section top-sites animation-enabled" data-section-id="topsites"><div class="section-top-bar"><h3 class="section-title"><span class="click-target"><span class="icon icon-small-spacer icon-topsites"></span><span>Popularne</span></span></h3><div><button class="context-menu-button icon"><span class="sr-only"><span>Otwórz menu kontekstowe sekcji</span></span></button></div></div><div class="section-body"><ul class="top-sites-list"><li class="top-site-outer placeholder "><div class="top-site-inner"><a><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Edytuj stronę"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Edytuj stronę"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Edytuj stronę"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Edytuj stronę"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Edytuj stronę"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Edytuj stronę"></button></div></li><li class="top-site-outer placeholder hide-for-narrow"><div class="top-site-inner"><a><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Edytuj stronę"></button></div></li><li class="top-site-outer placeholder hide-for-narrow"><div class="top-site-inner"><a><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Edytuj stronę"></button></div></li></ul><div class="edit-topsites-wrapper"></div></div></section><section class="collapsible-section section normal-cards animation-enabled" data-section-id="topstories"><div class="section-top-bar"><h3 class="section-title"><span class="click-target"><span class="icon icon-small-spacer icon-pocket"></span><span>Polecane przez Pocket</span></span></h3><div><button class="context-menu-button icon"><span class="sr-only"><span>Otwórz menu kontekstowe sekcji</span></span></button></div></div><div class="section-body"><ul class="section-list" style="padding:0"></ul><div class="topic"><span><span>Popularne treści:</span></span><ul></ul></div></div></section><section class="collapsible-section section normal-cards animation-enabled" data-section-id="highlights"><div class="section-top-bar"><h3 class="section-title"><span class="click-target"><span class="icon icon-small-spacer icon-highlights"></span><span>Wyróżnione</span></span></h3><div><button class="context-menu-button icon"><span class="sr-only"><span>Otwórz menu kontekstowe sekcji</span></span></button></div></div><div class="section-body"><ul class="section-list" style="padding:0"></ul></div></section></div><div class="prefs-button"><button class="icon icon-settings" title="Dostosuj stronę nowej karty"></button></div></div></main></div></div></div>
|
||||
<div id="snippets-container">
|
||||
<div id="snippets"></div>
|
||||
</div>
|
||||
|
|
|
@ -3,115 +3,115 @@ window.gActivityStreamStrings = {
|
|||
"newtab_page_title": "Nowa karta",
|
||||
"header_top_sites": "Popularne",
|
||||
"header_highlights": "Wyróżnione",
|
||||
"header_recommended_by": "Poleca: {provider}",
|
||||
"context_menu_button_sr": "Otwórz menu kontekstowe dla „{title}”",
|
||||
"header_recommended_by": "Polecane przez {provider}",
|
||||
"context_menu_button_sr": "Otwórz menu kontekstowe „{title}”",
|
||||
"section_context_menu_button_sr": "Otwórz menu kontekstowe sekcji",
|
||||
"type_label_visited": "Odwiedzone",
|
||||
"type_label_bookmarked": "Zakładka",
|
||||
"type_label_visited": "Z odwiedzonych",
|
||||
"type_label_bookmarked": "Z zakładek",
|
||||
"type_label_recommended": "Na czasie",
|
||||
"type_label_pocket": "Zachowane w Pocket",
|
||||
"type_label_downloaded": "Pobrane",
|
||||
"type_label_pocket": "Z Pocket",
|
||||
"type_label_downloaded": "Z pobranych",
|
||||
"menu_action_bookmark": "Dodaj zakładkę",
|
||||
"menu_action_remove_bookmark": "Usuń zakładkę",
|
||||
"menu_action_open_new_window": "Otwórz w nowym oknie",
|
||||
"menu_action_open_private_window": "Otwórz w nowym oknie prywatnym",
|
||||
"menu_action_dismiss": "Odrzuć",
|
||||
"menu_action_dismiss": "Usuń z tej sekcji",
|
||||
"menu_action_delete": "Usuń z historii",
|
||||
"menu_action_pin": "Przypnij",
|
||||
"menu_action_unpin": "Odepnij",
|
||||
"confirm_history_delete_p1": "Czy na pewno usunąć każde wystąpienie tej strony z historii?",
|
||||
"confirm_history_delete_notice_p2": "Nie można tego cofnąć.",
|
||||
"confirm_history_delete_p1": "Czy na pewno usunąć wszystkie wizyty na tej stronie z historii?",
|
||||
"confirm_history_delete_notice_p2": "Tej czynności nie można cofnąć.",
|
||||
"menu_action_save_to_pocket": "Zachowaj w Pocket",
|
||||
"menu_action_delete_pocket": "Usuń z Pocket",
|
||||
"menu_action_archive_pocket": "Archiwizuj w Pocket",
|
||||
"menu_action_show_file_mac_os": "Wyświetl w Finderze",
|
||||
"menu_action_show_file_mac_os": "Pokaż w Finderze",
|
||||
"menu_action_show_file_windows": "Otwórz folder nadrzędny",
|
||||
"menu_action_show_file_linux": "Otwórz folder nadrzędny",
|
||||
"menu_action_show_file_default": "Wyświetl plik",
|
||||
"menu_action_open_file": "Otwórz plik",
|
||||
"menu_action_copy_download_link": "Kopiuj adres pobierania",
|
||||
"menu_action_copy_download_link": "Kopiuj adres, z którego pobrano plik",
|
||||
"menu_action_go_to_download_page": "Przejdź do strony pobierania",
|
||||
"menu_action_remove_download": "Usuń z historii",
|
||||
"search_button": "Szukaj",
|
||||
"search_header": "Wyszukiwanie w {search_engine_name}",
|
||||
"search_web_placeholder": "Szukaj",
|
||||
"section_disclaimer_topstories": "Najciekawsze artykuły w Internecie, wybierane na podstawie już przeczytanych. Od serwisu Pocket, będącego teraz częścią Mozilli.",
|
||||
"section_disclaimer_topstories_linktext": "Zobacz, jak to działa.",
|
||||
"section_disclaimer_topstories_buttontext": "OK!",
|
||||
"prefs_home_header": "Strona startowa Firefoksa",
|
||||
"prefs_home_description": "Wybierz, co wyświetlać na stronie startowej Firefoksa.",
|
||||
"prefs_section_rows_option": "{num} rząd;{num} rzędy;{num} rzędów",
|
||||
"prefs_search_header": "Wyszukiwanie",
|
||||
"prefs_topsites_description": "Najczęściej odwiedzane strony",
|
||||
"prefs_topstories_description2": "Świetne rzeczy z całego Internetu, wybrane specjalnie dla Ciebie",
|
||||
"prefs_topstories_options_sponsored_label": "Sponsorowane artykuły",
|
||||
"search_header": "Wyszukiwanie z „{search_engine_name}”",
|
||||
"search_web_placeholder": "Szukaj w Internecie",
|
||||
"section_disclaimer_topstories": "Najciekawsze artykuły w Internecie, wybierane na podstawie tego co czytasz. Od serwisu Pocket, będącego teraz częścią Mozilli.",
|
||||
"section_disclaimer_topstories_linktext": "Zobacz, jak to działa",
|
||||
"section_disclaimer_topstories_buttontext": "OK",
|
||||
"prefs_home_header": "Strona startowa",
|
||||
"prefs_home_description": "Wybierz, jakie treści mają być wyświetlane na stronie startowej.",
|
||||
"prefs_section_rows_option": "{num} wiersz;{num} wiersze;{num} wierszy",
|
||||
"prefs_search_header": "Pasek wyszukiwania",
|
||||
"prefs_topsites_description": "Popularne odwiedzane strony",
|
||||
"prefs_topstories_description2": "Świetne rzeczy z całego Internetu, personalizowane specjalnie dla Ciebie",
|
||||
"prefs_topstories_options_sponsored_label": "Sponsorowane treści",
|
||||
"prefs_topstories_sponsored_learn_more": "Więcej informacji",
|
||||
"prefs_highlights_description": "Wybór zachowanych i odwiedzonych stron",
|
||||
"prefs_highlights_options_visited_label": "Odwiedzone strony",
|
||||
"prefs_highlights_options_download_label": "Ostatnio pobrane",
|
||||
"prefs_highlights_options_pocket_label": "Strony zachowane w Pocket",
|
||||
"prefs_snippets_description": "Informacje od Mozilli i Firefoksa",
|
||||
"prefs_highlights_description": "Wybierane z zachowanych i odwiedzonych stron.",
|
||||
"prefs_highlights_options_visited_label": "Historia",
|
||||
"prefs_highlights_options_download_label": "Ostatnio pobrane pliki",
|
||||
"prefs_highlights_options_pocket_label": "Zachowane w Pocket",
|
||||
"prefs_snippets_description": "Informacje od Mozilli i Firefoksa.",
|
||||
"settings_pane_button_label": "Dostosuj stronę nowej karty",
|
||||
"settings_pane_topsites_header": "Popularne",
|
||||
"settings_pane_highlights_header": "Wyróżnione",
|
||||
"settings_pane_highlights_header": "Wyróżniane",
|
||||
"settings_pane_highlights_options_bookmarks": "Zakładki",
|
||||
"settings_pane_snippets_header": "Notki",
|
||||
"settings_pane_snippets_header": "Od Mozilli",
|
||||
"edit_topsites_button_text": "Edytuj",
|
||||
"edit_topsites_edit_button": "Edytuj tę stronę",
|
||||
"topsites_form_add_header": "Nowa popularna strona",
|
||||
"topsites_form_edit_header": "Edytuj popularną stronę",
|
||||
"edit_topsites_edit_button": "Edytuj stronę",
|
||||
"topsites_form_add_header": "Dodawanie strony do sekcji Popularne",
|
||||
"topsites_form_edit_header": "Edycja strony z sekcji Popularne",
|
||||
"topsites_form_title_label": "Tytuł",
|
||||
"topsites_form_title_placeholder": "Wpisz tytuł",
|
||||
"topsites_form_url_label": "Adres",
|
||||
"topsites_form_image_url_label": "Adres niestandardowego obrazu",
|
||||
"topsites_form_url_placeholder": "Wpisz lub wklej adres",
|
||||
"topsites_form_use_image_link": "Użyj niestandardowego obrazu…",
|
||||
"topsites_form_title_placeholder": "Tytuł strony",
|
||||
"topsites_form_url_label": "Adres URL",
|
||||
"topsites_form_image_url_label": "Własny obraz",
|
||||
"topsites_form_url_placeholder": "Adres strony",
|
||||
"topsites_form_use_image_link": "Użyj własnego obrazu…",
|
||||
"topsites_form_preview_button": "Podgląd",
|
||||
"topsites_form_add_button": "Dodaj",
|
||||
"topsites_form_save_button": "Zapisz",
|
||||
"topsites_form_save_button": "Zachowaj",
|
||||
"topsites_form_cancel_button": "Anuluj",
|
||||
"topsites_form_url_validation": "Wymagany jest prawidłowy adres",
|
||||
"topsites_form_image_validation": "Wczytanie obrazu się nie powiodło. Spróbuj innego adresu.",
|
||||
"pocket_read_more": "Popularne tematy:",
|
||||
"pocket_read_even_more": "Więcej artykułów",
|
||||
"highlights_empty_state": "Zacznij przeglądać Internet, a pojawią się tutaj niedawno dodane zakładki i odwiedzone artykuły, filmy i inne strony.",
|
||||
"topstories_empty_state": "To na razie wszystko. {provider} później będzie mieć więcej popularnych artykułów. Nie możesz się doczekać? Wybierz popularny temat, aby znaleźć więcej artykułów z całego Internetu.",
|
||||
"manual_migration_explanation2": "Używaj Firefoksa z zakładkami, historią i hasłami z innej przeglądarki.",
|
||||
"manual_migration_cancel_button": "Nie, dziękuję",
|
||||
"manual_migration_import_button": "Importuj teraz",
|
||||
"error_fallback_default_info": "Coś się nie powiodło podczas wczytywania tej treści.",
|
||||
"error_fallback_default_refresh_suggestion": "Odśwież stronę, aby spróbować ponownie.",
|
||||
"topsites_form_url_validation": "Wymagany jest prawidłowy adres URL",
|
||||
"topsites_form_image_validation": "Wczytanie obrazu nie powiodło się. Spróbuj innego adresu.",
|
||||
"pocket_read_more": "Popularne treści:",
|
||||
"pocket_read_even_more": "Pokaż więcej artykułów",
|
||||
"highlights_empty_state": "Zacznij przeglądać Internet, a pojawią się tutaj świetne artykuły, filmy oraz inne ostatnio odwiedzane strony i dodane zakładki.",
|
||||
"topstories_empty_state": "To na razie wszystko. {provider} później będzie mieć więcej popularnych artykułów. Nie możesz się doczekać? Wybierz popularny temat, aby znaleźć więcej treści z całego Internetu.",
|
||||
"manual_migration_explanation2": "Wypróbuj program Firefox z zakładkami, historią i hasłami z innej przeglądarki.",
|
||||
"manual_migration_cancel_button": "Anuluj",
|
||||
"manual_migration_import_button": "Importuj",
|
||||
"error_fallback_default_info": "Coś się nie powiodło podczas wczytywania tej treści",
|
||||
"error_fallback_default_refresh_suggestion": "Odśwież stronę, by spróbować ponownie",
|
||||
"section_menu_action_remove_section": "Usuń sekcję",
|
||||
"section_menu_action_collapse_section": "Zwiń sekcję",
|
||||
"section_menu_action_expand_section": "Rozwiń sekcję",
|
||||
"section_menu_action_manage_section": "Zarządzaj sekcją",
|
||||
"section_menu_action_manage_webext": "Manage Extension",
|
||||
"section_menu_action_add_topsite": "Dodaj popularną stronę",
|
||||
"section_menu_action_move_up": "Przenieś w górę",
|
||||
"section_menu_action_move_down": "Przenieś w dół",
|
||||
"section_menu_action_privacy_notice": "Prywatność",
|
||||
"firstrun_title": "Take Firefox with You",
|
||||
"firstrun_content": "Get your bookmarks, history, passwords and other settings on all your devices.",
|
||||
"firstrun_learn_more_link": "Learn more about Firefox Accounts",
|
||||
"firstrun_form_header": "Enter your email",
|
||||
"firstrun_form_sub_header": "to continue to Firefox Sync.",
|
||||
"firstrun_email_input_placeholder": "Email",
|
||||
"firstrun_extra_legal_links": "By proceeding, you agree to the {terms} and {privacy}.",
|
||||
"firstrun_terms_of_service": "Terms of Service",
|
||||
"firstrun_privacy_notice": "Privacy Notice",
|
||||
"firstrun_continue_to_login": "Continue",
|
||||
"firstrun_skip_login": "Skip this step",
|
||||
"section_menu_action_manage_webext": "Zarządzaj rozszerzeniem",
|
||||
"section_menu_action_add_topsite": "Dodaj stronę do popularnych",
|
||||
"section_menu_action_move_up": "Przesuń w górę",
|
||||
"section_menu_action_move_down": "Przesuń w dół",
|
||||
"section_menu_action_privacy_notice": "Uwagi dotyczące prywatności",
|
||||
"firstrun_title": "Zabierz swoje dane ze sobą",
|
||||
"firstrun_content": "Zakładki, historia, hasła i inne ustawienia mogą być dostępne i synchronizowane na wszystkich urządzeniach.",
|
||||
"firstrun_learn_more_link": "Więcej informacji",
|
||||
"firstrun_form_header": "Wprowadź adres e-mail",
|
||||
"firstrun_form_sub_header": ", aby skorzystać z Firefox Sync.",
|
||||
"firstrun_email_input_placeholder": "E-mail",
|
||||
"firstrun_extra_legal_links": "Kontynuując, akceptujesz {terms} i {privacy}.",
|
||||
"firstrun_terms_of_service": "warunki korzystania z usługi",
|
||||
"firstrun_privacy_notice": "uwagi dotyczące prywatności",
|
||||
"firstrun_continue_to_login": "Kontynuuj",
|
||||
"firstrun_skip_login": "Pomiń",
|
||||
"prefs_restore_defaults_button": "Przywróć domyślne",
|
||||
"settings_pane_header": "Preferencje nowej karty",
|
||||
"settings_pane_body2": "Wybierz, co wyświetlać na tej stronie.",
|
||||
"settings_pane_search_header": "Wyszukiwanie",
|
||||
"settings_pane_search_body": "Szukaj w Internecie na nowej karcie.",
|
||||
"settings_pane_topsites_body": "Otwieraj najczęściej odwiedzane strony.",
|
||||
"settings_pane_topsites_options_showmore": "Dwa rzędy",
|
||||
"settings_pane_highlights_body2": "Szybko wracaj do niedawno odwiedzonych stron i dodanych zakładek.",
|
||||
"settings_pane_highlights_options_visited": "Odwiedzone",
|
||||
"settings_pane_snippets_body": "Krótkie informacje od Mozilli o Firefoksie i kulturze internetowej, a od czasu do czasu także jakiś żart.",
|
||||
"settings_pane_header": "Ustawienia nowej karty",
|
||||
"settings_pane_body2": "Wybierz, co wyświetlać na tej stronie",
|
||||
"settings_pane_search_header": "Wyszukiwanie w Internecie",
|
||||
"settings_pane_search_body": "Pasek wyszukiwania na stronie nowej karty.",
|
||||
"settings_pane_topsites_body": "Dostęp do najczęściej odwiedzanych stron.",
|
||||
"settings_pane_topsites_options_showmore": "Dwa wiersze",
|
||||
"settings_pane_highlights_body2": "Szybki dostęp do niedawno odwiedzonych stron i dodanych zakładek.",
|
||||
"settings_pane_highlights_options_visited": "Odwiedzone strony",
|
||||
"settings_pane_snippets_body": "Krótkie i słodkie informacje od Mozilli o Firefoksie i kulturze internetowej, a od czasu do czasu także jakiś żart.",
|
||||
"settings_pane_done_button": "Gotowe",
|
||||
"settings_pane_topstories_options_sponsored": "Sponsorowane artykuły",
|
||||
"pocket_description": "Odkrywaj wysokiej jakości treści dzięki serwisowi Pocket, będącego teraz częścią Mozilli."
|
||||
"settings_pane_topstories_options_sponsored": "Sponsorowane treści",
|
||||
"pocket_description": "Odkrywaj wysokiej jakości treści dzięki serwisowi Pocket, który jest teraz częścią Mozilli."
|
||||
};
|
||||
|
|
|
@ -85,33 +85,20 @@ window.gActivityStreamStrings = {
|
|||
"section_menu_action_collapse_section": "Свернуть раздел",
|
||||
"section_menu_action_expand_section": "Развернуть раздел",
|
||||
"section_menu_action_manage_section": "Управление разделом",
|
||||
"section_menu_action_manage_webext": "Manage Extension",
|
||||
"section_menu_action_manage_webext": "Управление расширением",
|
||||
"section_menu_action_add_topsite": "Добавить в топ сайтов",
|
||||
"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.",
|
||||
"firstrun_learn_more_link": "Learn more about Firefox Accounts",
|
||||
"firstrun_form_header": "Enter your email",
|
||||
"firstrun_form_sub_header": "to continue to Firefox Sync.",
|
||||
"firstrun_email_input_placeholder": "Email",
|
||||
"firstrun_extra_legal_links": "By proceeding, you agree to the {terms} and {privacy}.",
|
||||
"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": "Восстановить по умолчанию",
|
||||
"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_title": "Возьмите Firefox с собой",
|
||||
"firstrun_content": "Получите доступ к вашим закладкам, истории, паролям и другим параметрам на всех ваших устройствах.",
|
||||
"firstrun_learn_more_link": "Узнайте больше об Аккаунтах Firefox",
|
||||
"firstrun_form_header": "Введите ваш адрес электронной почты",
|
||||
"firstrun_form_sub_header": "чтобы продолжить использовать синхронизацию Firefox.",
|
||||
"firstrun_email_input_placeholder": "Эл. почта",
|
||||
"firstrun_extra_legal_links": "Продолжая, вы соглашаетесь с {terms} и {privacy}.",
|
||||
"firstrun_terms_of_service": "условиями службы",
|
||||
"firstrun_privacy_notice": "политикой приватности",
|
||||
"firstrun_continue_to_login": "Продолжить",
|
||||
"firstrun_skip_login": "Пропустить этот шаг"
|
||||
};
|
||||
|
|
|
@ -85,33 +85,20 @@ window.gActivityStreamStrings = {
|
|||
"section_menu_action_collapse_section": "Zbaliť sekciu",
|
||||
"section_menu_action_expand_section": "Rozbaliť sekciu",
|
||||
"section_menu_action_manage_section": "Spravovať sekciu",
|
||||
"section_menu_action_manage_webext": "Manage Extension",
|
||||
"section_menu_action_manage_webext": "Správa rozšírenia",
|
||||
"section_menu_action_add_topsite": "Pridať top stránku",
|
||||
"section_menu_action_move_up": "Posunúť vyššie",
|
||||
"section_menu_action_move_down": "Posunúť nižšie",
|
||||
"section_menu_action_privacy_notice": "Zásady ochrany súkromia",
|
||||
"firstrun_title": "Take Firefox with You",
|
||||
"firstrun_content": "Get your bookmarks, history, passwords and other settings on all your devices.",
|
||||
"firstrun_learn_more_link": "Learn more about Firefox Accounts",
|
||||
"firstrun_form_header": "Enter your email",
|
||||
"firstrun_form_sub_header": "to continue to Firefox Sync.",
|
||||
"firstrun_email_input_placeholder": "Email",
|
||||
"firstrun_extra_legal_links": "By proceeding, you agree to the {terms} and {privacy}.",
|
||||
"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": "Obnoviť predvolené",
|
||||
"settings_pane_header": "Nastavenia Novej karty",
|
||||
"settings_pane_body2": "Vyberte si, čo chcete na tejto stránke vidieť.",
|
||||
"settings_pane_search_header": "Vyhľadávanie",
|
||||
"settings_pane_search_body": "Vyhľadávanie zo stránky novej karty.",
|
||||
"settings_pane_topsites_body": "Prístup k webovým stránkam, ktoré navštevujete najčastejšie.",
|
||||
"settings_pane_topsites_options_showmore": "Zobraziť dva riadky",
|
||||
"settings_pane_highlights_body2": "Pozrite sa na zaujímavé stránky, ktoré ste nedávno navštívili alebo pridali do záložiek.",
|
||||
"settings_pane_highlights_options_visited": "Navštívené stránky",
|
||||
"settings_pane_snippets_body": "Prečítajte si krátke správy od Mozilly o Firefoxe či internetovej kultúre. Občas uvidíte aj náhodné meme.",
|
||||
"settings_pane_done_button": "Hotovo",
|
||||
"settings_pane_topstories_options_sponsored": "Zobraziť sponzorované stránky",
|
||||
"pocket_description": "Objavte vysokokvalitný obsah, ktorý by ste inak prepásli. Pomôže vám s tým Pocket, súčasť Mozilly."
|
||||
"firstrun_title": "Vezmite si Firefox so sebou",
|
||||
"firstrun_content": "Majte svoje záložky, históriu, heslá a ostatné nastavenia na všetkých vašich zariadeniach.",
|
||||
"firstrun_learn_more_link": "Ďalšie informácie o účtoch Firefox",
|
||||
"firstrun_form_header": "Zadajte e-mailovú adresu",
|
||||
"firstrun_form_sub_header": "a používajte službu Firefox Sync.",
|
||||
"firstrun_email_input_placeholder": "E-mail",
|
||||
"firstrun_extra_legal_links": "Pokračovaním súhlasíte s {terms} a {privacy}.",
|
||||
"firstrun_terms_of_service": "podmienkami používania služby",
|
||||
"firstrun_privacy_notice": "zásadami ochrany súkromia",
|
||||
"firstrun_continue_to_login": "Pokračovať",
|
||||
"firstrun_skip_login": "Preskočiť tento krok"
|
||||
};
|
||||
|
|
|
@ -90,13 +90,13 @@ window.gActivityStreamStrings = {
|
|||
"section_menu_action_move_up": "Flytta upp",
|
||||
"section_menu_action_move_down": "Flytta ner",
|
||||
"section_menu_action_privacy_notice": "Sekretesspolicy",
|
||||
"firstrun_title": "Take Firefox with You",
|
||||
"firstrun_content": "Get your bookmarks, history, passwords and other settings on all your devices.",
|
||||
"firstrun_title": "Ta med dig Firefox",
|
||||
"firstrun_content": "Få dina bokmärken, historik, lösenord och andra inställningar på alla dina enheter.",
|
||||
"firstrun_learn_more_link": "Lär dig mer om Firefox-konton",
|
||||
"firstrun_form_header": "Ange din e-postadress",
|
||||
"firstrun_form_sub_header": "to continue to Firefox Sync.",
|
||||
"firstrun_form_sub_header": "för att fortsätta till Firefox Sync.",
|
||||
"firstrun_email_input_placeholder": "E-post",
|
||||
"firstrun_extra_legal_links": "By proceeding, you agree to the {terms} and {privacy}.",
|
||||
"firstrun_extra_legal_links": "Genom att fortsätta godkänner du {terms} och {privacy}.",
|
||||
"firstrun_terms_of_service": "Användarvillkor",
|
||||
"firstrun_privacy_notice": "Sekretesspolicy",
|
||||
"firstrun_continue_to_login": "Fortsätt",
|
||||
|
|
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
|
@ -4,13 +4,13 @@ window.gActivityStreamStrings = {
|
|||
"header_top_sites": "சிறந்த தளங்கள்",
|
||||
"header_highlights": "மிளிர்ப்புகள்",
|
||||
"header_recommended_by": "{provider} என்பவரால் பரிந்துரைக்கப்பட்டது",
|
||||
"context_menu_button_sr": "Open context menu for {title}",
|
||||
"section_context_menu_button_sr": "Open the section context menu",
|
||||
"context_menu_button_sr": "{title} என்பதற்கான உள்ளடக்க பட்டியலைத் திற",
|
||||
"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": "பாக்கெட்டில் சேமிக்கப்பட்டது",
|
||||
"type_label_downloaded": "பதிவிறக்கப்பட்டது",
|
||||
"menu_action_bookmark": "புத்தகக்குறி",
|
||||
"menu_action_remove_bookmark": "புத்தகக்குறியை நீக்கு",
|
||||
"menu_action_open_new_window": "ஒரு புதிய சாளரத்தில் திற",
|
||||
|
@ -35,15 +35,15 @@ window.gActivityStreamStrings = {
|
|||
"search_button": "தேடு",
|
||||
"search_header": "{search_engine_name} தேடுபொறியில் தேடு",
|
||||
"search_web_placeholder": "இணையத்தில் தேடு",
|
||||
"section_disclaimer_topstories": "The most interesting stories on the web, selected based on what you read. From Pocket, now part of Mozilla.",
|
||||
"section_disclaimer_topstories": "இணையத்தின் சுவாரசியமான கதைகள், நீங்கள் படிப்பவற்றின் அடிப்படையில் தேர்ந்தெடுக்கப்பட்டுள்ளன. பாக்கெட், இப்போது மொசில்லாவின் ஒரு பகுதியாகும்.",
|
||||
"section_disclaimer_topstories_linktext": "இது எப்படி வேலை செய்கிறது என்று தெரிந்துகொள்ளவும்.",
|
||||
"section_disclaimer_topstories_buttontext": "சரி, புரிந்தது",
|
||||
"prefs_home_header": "Firefox முகப்பு உள்ளடக்கம்",
|
||||
"prefs_home_description": "Choose what content you want on your Firefox Home screen.",
|
||||
"prefs_section_rows_option": "{num} row;{num} rows",
|
||||
"prefs_home_description": "உங்கள் பயர்பாக்ஸ் முகப்புத் திரையில் என்ன உள்ளடக்கம் வேண்டுமென்று தேர்ந்தெடு.",
|
||||
"prefs_section_rows_option": "{num} வரிசை;{num} வரிசைகள்",
|
||||
"prefs_search_header": "வலைதள தேடல்",
|
||||
"prefs_topsites_description": "நீங்கள் மிகவும் பார்வையிடும் தளங்கள்",
|
||||
"prefs_topstories_description2": "Great content from around the web, personalized for you",
|
||||
"prefs_topstories_description2": "இணையத்திலிருந்து சிறந்த உள்ளடக்கங்கள், உங்களுக்காக தனிப்பயனாக்கப்பட்டவை",
|
||||
"prefs_topstories_options_sponsored_label": "Sponsored Stories",
|
||||
"prefs_topstories_sponsored_learn_more": "மேலும் அறிய",
|
||||
"prefs_highlights_description": "நீங்கள் சேமித்த அல்லது பார்வையிட்ட தளங்களின் தேர்வு",
|
||||
|
@ -63,7 +63,7 @@ window.gActivityStreamStrings = {
|
|||
"topsites_form_title_label": "தலைப்பு",
|
||||
"topsites_form_title_placeholder": "தலைப்பை இடு",
|
||||
"topsites_form_url_label": "URL",
|
||||
"topsites_form_image_url_label": "Custom Image URL",
|
||||
"topsites_form_image_url_label": "தனிப்பயன் பட URL",
|
||||
"topsites_form_url_placeholder": "உள்ளிடு (அ) ஒரு URL ஒட்டு",
|
||||
"topsites_form_use_image_link": "தனிப்பயன் படத்தை பயன்படுத்தவும்…",
|
||||
"topsites_form_preview_button": "முன்தோற்றம்",
|
||||
|
@ -75,8 +75,8 @@ window.gActivityStreamStrings = {
|
|||
"pocket_read_more": "பிரபலமான தலைப்புகள்:",
|
||||
"pocket_read_even_more": "இன்னும் கதைகளைப் பார்க்கவும்",
|
||||
"highlights_empty_state": "உலாவலைத் தொடங்கவும், மேலும் நாங்கள் சில சிறந்த கட்டுரைகள், காணொளிகள், மற்றும் நீங்கள் சமீபத்தில் பார்த்த பிற பக்கங்கள் அல்லது இங்கே புத்தகக்குறியிட்டவற்றைக் காட்டுவோம்.",
|
||||
"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.",
|
||||
"topstories_empty_state": "நீங்கள் முடித்துவிட்டீர்கள். {provider} இலிருந்து கூடுதல் கதைகளுக்கு பின்னர் பாருங்கள். காத்திருக்க முடியவில்லையா? இணையத்திலிருந்து கூடுதலான கதைகளைக் கண்டுபிடிக்க பிரபலமான தலைப்பைத் தேர்ந்தெடுங்கள்.",
|
||||
"manual_migration_explanation2": "மற்றொரு உலாவியின் புத்தகக்குறிகள், வரலாறு மற்றும் கடவுச்சொற்களுடன் பயர்பாக்சை முயற்சித்துப் பாருங்கள்.",
|
||||
"manual_migration_cancel_button": "பரவாயில்லை",
|
||||
"manual_migration_import_button": "இப்போது இறக்கு",
|
||||
"error_fallback_default_info": "அச்சச்சோ, இந்த உள்ளடக்கத்தை ஏற்றுவதில் ஏதோ தவறு ஏற்பட்டது.",
|
||||
|
@ -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",
|
||||
"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": "பயர்பாக்ஸ், இணைய கலாச்சாரம், அவ்வப்போது மீம்கள் போன்ற சுருக்கமான இனிய புதுப்பிப்புகளை மொசில்லாவிடமிருந்து படியுங்கள்.",
|
||||
"settings_pane_done_button": "முடிந்தது",
|
||||
"settings_pane_topstories_options_sponsored": "விளம்பரங்களைக் காட்டு"
|
||||
"firstrun_skip_login": "Skip this step"
|
||||
};
|
||||
|
|
|
@ -91,7 +91,7 @@ window.gActivityStreamStrings = {
|
|||
"section_menu_action_move_down": "ย้ายลง",
|
||||
"section_menu_action_privacy_notice": "ประกาศความเป็นส่วนตัว",
|
||||
"firstrun_title": "นำ Firefox ไปกับคุณ",
|
||||
"firstrun_content": "Get your bookmarks, history, passwords and other settings on all your devices.",
|
||||
"firstrun_content": "รับที่คั่นหน้า, ประวัติ, รหัสผ่าน และการตั้งค่าอื่น ๆ ของคุณในอุปกรณ์ทั้งหมดของคุณ",
|
||||
"firstrun_learn_more_link": "เรียนรู้เพิ่มเติมเกี่ยวกับบัญชี Firefox",
|
||||
"firstrun_form_header": "ป้อนอีเมลของคุณ",
|
||||
"firstrun_form_sub_header": "เพื่อดำเนินการต่อไปยัง Firefox Sync",
|
||||
|
|
|
@ -85,33 +85,20 @@ window.gActivityStreamStrings = {
|
|||
"section_menu_action_collapse_section": "Згорнути розділ",
|
||||
"section_menu_action_expand_section": "Розгорнути розділ",
|
||||
"section_menu_action_manage_section": "Керувати розділом",
|
||||
"section_menu_action_manage_webext": "Manage Extension",
|
||||
"section_menu_action_manage_webext": "Керувати розширенням",
|
||||
"section_menu_action_add_topsite": "Додати до популярних сайтів",
|
||||
"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.",
|
||||
"firstrun_learn_more_link": "Learn more about Firefox Accounts",
|
||||
"firstrun_form_header": "Enter your email",
|
||||
"firstrun_form_sub_header": "to continue to Firefox Sync.",
|
||||
"firstrun_email_input_placeholder": "Email",
|
||||
"firstrun_extra_legal_links": "By proceeding, you agree to the {terms} and {privacy}.",
|
||||
"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": "Відновити типові",
|
||||
"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_title": "Візьміть Firefox з собою",
|
||||
"firstrun_content": "Ваші закладки, історія, паролі та інші налаштування на всіх ваших пристроях.",
|
||||
"firstrun_learn_more_link": "Дізнайтеся більше про обліковий запис Firefox",
|
||||
"firstrun_form_header": "Введіть свою адресу е-пошти",
|
||||
"firstrun_form_sub_header": "для продовження в Синхронізації Firefox.",
|
||||
"firstrun_email_input_placeholder": "Е-пошта",
|
||||
"firstrun_extra_legal_links": "Продовжуючи, ви приймаєте {terms} і {privacy}.",
|
||||
"firstrun_terms_of_service": "Умови надання послуги",
|
||||
"firstrun_privacy_notice": "Повідомлення про приватність",
|
||||
"firstrun_continue_to_login": "Продовжити",
|
||||
"firstrun_skip_login": "Пропустити цей крок"
|
||||
};
|
||||
|
|
|
@ -5,6 +5,7 @@ support-files =
|
|||
|
||||
[browser_as_load_location.js]
|
||||
[browser_as_render.js]
|
||||
[browser_asrouter_targeting.js]
|
||||
[browser_getScreenshots.js]
|
||||
[browser_highlights_section.js]
|
||||
[browser_topsites_contextMenu_options.js]
|
||||
|
|
|
@ -0,0 +1,68 @@
|
|||
ChromeUtils.defineModuleGetter(this, "ASRouterTargeting",
|
||||
"resource://activity-stream/lib/ASRouterTargeting.jsm");
|
||||
ChromeUtils.defineModuleGetter(this, "ProfileAge",
|
||||
"resource://gre/modules/ProfileAge.jsm");
|
||||
|
||||
// ASRouterTargeting.isMatch
|
||||
add_task(async function should_do_correct_targeting() {
|
||||
is(await ASRouterTargeting.isMatch("FOO", {FOO: true}), true, "should return true for a matching value");
|
||||
is(await ASRouterTargeting.isMatch("!FOO", {FOO: true}), false, "should return false for a non-matching value");
|
||||
});
|
||||
|
||||
add_task(async function should_handle_async_getters() {
|
||||
const context = {get FOO() { return Promise.resolve(true); }};
|
||||
is(await ASRouterTargeting.isMatch("FOO", context), true, "should return true for a matching async value");
|
||||
});
|
||||
|
||||
// ASRouterTargeting.findMatchingMessage
|
||||
add_task(async function find_matching_message() {
|
||||
const messages = [
|
||||
{id: "foo", targeting: "FOO"},
|
||||
{id: "bar", targeting: "!FOO"}
|
||||
];
|
||||
const context = {FOO: true};
|
||||
|
||||
const match = await ASRouterTargeting.findMatchingMessage(messages, context);
|
||||
|
||||
is(match, messages[0], "should match and return the correct message");
|
||||
});
|
||||
|
||||
add_task(async function return_nothing_for_no_matching_message() {
|
||||
const messages = [{id: "bar", targeting: "!FOO"}];
|
||||
const context = {FOO: true};
|
||||
|
||||
const match = await ASRouterTargeting.findMatchingMessage(messages, context);
|
||||
|
||||
is(match, undefined, "should return nothing since no matching message exists");
|
||||
});
|
||||
|
||||
// ASRouterTargeting.Environment
|
||||
add_task(async function checkProfileAgeCreated() {
|
||||
let profileAccessor = new ProfileAge();
|
||||
is(await ASRouterTargeting.Environment.profileAgeCreated, await profileAccessor.created,
|
||||
"should return correct profile age creation date");
|
||||
|
||||
const message = {id: "foo", targeting: `profileAgeCreated > ${await profileAccessor.created - 100}`};
|
||||
is(await ASRouterTargeting.findMatchingMessage([message]), message,
|
||||
"should select correct item by profile age created");
|
||||
});
|
||||
|
||||
add_task(async function checkProfileAgeReset() {
|
||||
let profileAccessor = new ProfileAge();
|
||||
is(await ASRouterTargeting.Environment.profileAgeReset, await profileAccessor.reset,
|
||||
"should return correct profile age reset");
|
||||
|
||||
const message = {id: "foo", targeting: `profileAgeReset == ${await profileAccessor.reset}`};
|
||||
is(await ASRouterTargeting.findMatchingMessage([message]), message,
|
||||
"should select correct item by profile age reset");
|
||||
});
|
||||
|
||||
add_task(async function checkhasFxAccount() {
|
||||
await pushPrefs(["services.sync.username", "someone@foo.com"]);
|
||||
is(await ASRouterTargeting.Environment.hasFxAccount, true,
|
||||
"should return true if a fx account is set");
|
||||
|
||||
const message = {id: "foo", targeting: "hasFxAccount"};
|
||||
is(await ASRouterTargeting.findMatchingMessage([message]), message,
|
||||
"should select correct item by hasFxAccount");
|
||||
});
|
|
@ -11,11 +11,12 @@ const XHTMLNS = "http://www.w3.org/1999/xhtml";
|
|||
|
||||
ChromeUtils.defineModuleGetter(this, "Screenshots", "resource://activity-stream/lib/Screenshots.jsm");
|
||||
|
||||
function get_pixels_for_data_uri(dataURI, width, height) {
|
||||
function get_pixels_for_blob(blob, width, height) {
|
||||
return new Promise(resolve => {
|
||||
// get the pixels out of the screenshot that we just took
|
||||
let img = document.createElementNS(XHTMLNS, "img");
|
||||
img.setAttribute("src", dataURI);
|
||||
let imgPath = URL.createObjectURL(blob);
|
||||
img.setAttribute("src", imgPath);
|
||||
img.addEventListener("load", () => {
|
||||
let canvas = document.createElementNS(XHTMLNS, "canvas");
|
||||
canvas.setAttribute("width", width);
|
||||
|
@ -23,6 +24,7 @@ function get_pixels_for_data_uri(dataURI, width, height) {
|
|||
let ctx = canvas.getContext("2d");
|
||||
ctx.drawImage(img, 0, 0, width, height);
|
||||
const result = ctx.getImageData(0, 0, width, height).data;
|
||||
URL.revokeObjectURL(imgPath);
|
||||
resolve(result);
|
||||
}, {once: true});
|
||||
});
|
||||
|
@ -31,9 +33,9 @@ function get_pixels_for_data_uri(dataURI, width, height) {
|
|||
add_task(async function test_screenshot() {
|
||||
await SpecialPowers.pushPrefEnv({set: [["browser.pagethumbnails.capturing_disabled", false]]});
|
||||
|
||||
// take a screenshot of a blue page and save it as a data URI
|
||||
const screenshotAsDataURI = await Screenshots.getScreenshotForURL(TEST_URL);
|
||||
let pixels = await get_pixels_for_data_uri(screenshotAsDataURI, 10, 10);
|
||||
// take a screenshot of a blue page and save it as a blob
|
||||
const screenshotAsObject = await Screenshots.getScreenshotForURL(TEST_URL);
|
||||
let pixels = await get_pixels_for_blob(screenshotAsObject.data, 10, 10);
|
||||
let rgbaCount = {r: 0, g: 0, b: 0, a: 0};
|
||||
while (pixels.length) {
|
||||
// break the pixels into arrays of 4 components [red, green, blue, alpha]
|
||||
|
|
|
@ -7,7 +7,7 @@ export const baseKeys = {
|
|||
addon_version: Joi.string().required(),
|
||||
locale: Joi.string().required(),
|
||||
session_id: Joi.string(),
|
||||
page: Joi.valid(["about:home", "about:newtab", "unknown"]),
|
||||
page: Joi.valid(["about:home", "about:newtab", "about:welcome", "unknown"]),
|
||||
user_prefs: Joi.number().integer().required()
|
||||
};
|
||||
|
||||
|
|
|
@ -188,7 +188,7 @@ describe("ASRouter", () => {
|
|||
});
|
||||
it("should send a message back to the to the target if there is a bundle, too", async () => {
|
||||
// force the only message to be a bundled message so getRandomItemFromArray picks it
|
||||
await Router.setState({messages: [{id: "foo1", template: "simple_template", bundled: 2, content: {title: "Foo1", body: "Foo123-1"}}]});
|
||||
await Router.setState({messages: [{id: "foo1", template: "simple_template", bundled: 1, content: {title: "Foo1", body: "Foo123-1"}}]});
|
||||
const msg = fakeAsyncMessage({type: "CONNECT_UI_REQUEST"});
|
||||
await Router.onMessage(msg);
|
||||
const [currentMessage] = Router.state.messages.filter(message => message.id === Router.state.lastMessageId);
|
||||
|
@ -196,6 +196,19 @@ describe("ASRouter", () => {
|
|||
assert.equal(msg.target.sendAsyncMessage.firstCall.args[1].type, "SET_BUNDLED_MESSAGES");
|
||||
assert.equal(msg.target.sendAsyncMessage.firstCall.args[1].data.bundle[0].content, currentMessage.content);
|
||||
});
|
||||
it("should return a null bundle if we do not have enough messages to fill the bundle", async () => {
|
||||
// force the only message to be a bundled message that needs 2 messages in the bundle
|
||||
await Router.setState({messages: [{id: "foo1", template: "simple_template", bundled: 2, content: {title: "Foo1", body: "Foo123-1"}}]});
|
||||
const bundle = Router._getBundledMessages(Router.state.messages[0]);
|
||||
assert.equal(bundle, null);
|
||||
});
|
||||
it("should send a CLEAR_ALL message if no bundle available", async () => {
|
||||
// force the only message to be a bundled message that needs 2 messages in the bundle
|
||||
await Router.setState({messages: [{id: "foo1", template: "simple_template", bundled: 2, content: {title: "Foo1", body: "Foo123-1"}}]});
|
||||
const msg = fakeAsyncMessage({type: "CONNECT_UI_REQUEST"});
|
||||
await Router.onMessage(msg);
|
||||
assert.calledWith(msg.target.sendAsyncMessage, PARENT_TO_CHILD_MESSAGE_NAME, {type: "CLEAR_ALL"});
|
||||
});
|
||||
it("should send a CLEAR_ALL message if no messages are available", async () => {
|
||||
await Router.setState({messages: []});
|
||||
const msg = fakeAsyncMessage({type: "CONNECT_UI_REQUEST"});
|
||||
|
|
|
@ -89,6 +89,25 @@ describe("ASRouterUISurface", () => {
|
|||
assert.isTrue(wrapper.exists());
|
||||
});
|
||||
|
||||
describe("snippets", () => {
|
||||
it("should send correct event and source when snippet link is clicked", () => {
|
||||
const content = {button_url: "https://foo.com", button_type: "anchor", button_label: "foo", ...FAKE_MESSAGE.content};
|
||||
const message = Object.assign({}, FAKE_MESSAGE, {content});
|
||||
wrapper.setState({message});
|
||||
|
||||
wrapper.find("a.ASRouterAnchor").simulate("click");
|
||||
assert.propertyVal(ASRouterUtils.sendTelemetry.firstCall.args[0], "event", "CLICK_BUTTON");
|
||||
assert.propertyVal(ASRouterUtils.sendTelemetry.firstCall.args[0], "source", "NEWTAB_FOOTER_BAR");
|
||||
});
|
||||
it("should send correct event and source when snippet is blocked", () => {
|
||||
wrapper.setState({message: FAKE_MESSAGE});
|
||||
|
||||
wrapper.find(".blockButton").simulate("click");
|
||||
assert.propertyVal(ASRouterUtils.sendTelemetry.firstCall.args[0], "event", "BLOCK");
|
||||
assert.propertyVal(ASRouterUtils.sendTelemetry.firstCall.args[0], "source", "NEWTAB_FOOTER_BAR");
|
||||
});
|
||||
});
|
||||
|
||||
describe("impressions", () => {
|
||||
function simulateVisibilityChange(value) {
|
||||
fakeDocument.visibilityState = value;
|
||||
|
@ -115,12 +134,13 @@ describe("ASRouterUISurface", () => {
|
|||
assert.calledOnce(ASRouterUtils.sendTelemetry);
|
||||
});
|
||||
|
||||
it("should the right data in the ", () => {
|
||||
it("should send the correct impression source", () => {
|
||||
wrapper.setState({message: FAKE_MESSAGE});
|
||||
assert.notCalled(ASRouterUtils.sendTelemetry);
|
||||
|
||||
simulateVisibilityChange("visible");
|
||||
|
||||
assert.calledOnce(ASRouterUtils.sendTelemetry);
|
||||
assert.propertyVal(ASRouterUtils.sendTelemetry.firstCall.args[0], "event", "IMPRESSION");
|
||||
assert.propertyVal(ASRouterUtils.sendTelemetry.firstCall.args[0], "source", "NEWTAB_FOOTER_BAR");
|
||||
});
|
||||
|
||||
it("should send an impression ping when the page is visible and a message gets loaded", () => {
|
||||
|
@ -169,6 +189,7 @@ describe("ASRouterUISurface", () => {
|
|||
assert.propertyVal(payload, "message_id", FAKE_MESSAGE.id);
|
||||
assert.propertyVal(payload, "event", "IMPRESSION");
|
||||
assert.propertyVal(payload, "action", `${FAKE_MESSAGE.provider}_user_event`);
|
||||
assert.propertyVal(payload, "source", "NEWTAB_FOOTER_BAR");
|
||||
});
|
||||
});
|
||||
});
|
||||
|
|
|
@ -27,14 +27,12 @@ describe("Screenshots", () => {
|
|||
globals.set("BackgroundPageThumbs", {captureIfMissing: sandbox.spy(() => Promise.resolve())});
|
||||
globals.set("PageThumbs", {
|
||||
_store: sandbox.stub(),
|
||||
getThumbnailPath: sandbox.spy(() => Promise.resolve(FAKE_THUMBNAIL_PATH))
|
||||
getThumbnailPath: sandbox.spy(() => FAKE_THUMBNAIL_PATH)
|
||||
});
|
||||
globals.set("PrivateBrowsingUtils", {isWindowPrivate: sandbox.spy(() => false)});
|
||||
testFile = [0];
|
||||
globals.set("OS", {File: {open: sandbox.spy(() => Promise.resolve({read: () => testFile, close: () => {}}))}});
|
||||
globals.set("FileUtils", {File: sandbox.spy(() => {})});
|
||||
globals.set("MIMEService", {getTypeFromFile: sandbox.spy(() => {})});
|
||||
testFile = {size: 1};
|
||||
globals.set("Services", fakeServices);
|
||||
globals.set("fetch", sandbox.spy(() => Promise.resolve({blob: () => Promise.resolve(testFile)})));
|
||||
});
|
||||
afterEach(() => {
|
||||
globals.restore();
|
||||
|
@ -49,20 +47,18 @@ describe("Screenshots", () => {
|
|||
await Screenshots.getScreenshotForURL(URL);
|
||||
assert.calledWith(global.PageThumbs.getThumbnailPath, URL);
|
||||
});
|
||||
it("should call OS.File.open with the correct params", async () => {
|
||||
it("should call fetch", async () => {
|
||||
await Screenshots.getScreenshotForURL(URL);
|
||||
assert.calledOnce(global.OS.File.open);
|
||||
assert.calledOnce(global.fetch);
|
||||
});
|
||||
it("should call FileUtils.File", async () => {
|
||||
await Screenshots.getScreenshotForURL(URL);
|
||||
assert.calledOnce(global.FileUtils.File);
|
||||
});
|
||||
it("should call MIMEService.getTypeFromFile", async () => {
|
||||
await Screenshots.getScreenshotForURL(URL);
|
||||
assert.calledOnce(global.MIMEService.getTypeFromFile);
|
||||
it("should have the necessary keys in the response object", async () => {
|
||||
const screenshot = await Screenshots.getScreenshotForURL(URL);
|
||||
|
||||
assert.notEqual(screenshot.path, undefined);
|
||||
assert.notEqual(screenshot.data, undefined);
|
||||
});
|
||||
it("should get null if something goes wrong", async () => {
|
||||
globals.set("BackgroundPageThumbs", {captureIfMissing: () => new Error("Cannot capture tumbnail")});
|
||||
globals.set("BackgroundPageThumbs", {captureIfMissing: () => Promise.reject(new Error("Cannot capture thumbnail"))});
|
||||
|
||||
const screenshot = await Screenshots.getScreenshotForURL(URL);
|
||||
|
||||
|
@ -70,7 +66,7 @@ describe("Screenshots", () => {
|
|||
assert.equal(screenshot, null);
|
||||
});
|
||||
it("should get null without storing if existing thumbnail is empty", async () => {
|
||||
testFile.length = 0;
|
||||
testFile.size = 0;
|
||||
|
||||
const screenshot = await Screenshots.getScreenshotForURL(URL);
|
||||
|
||||
|
@ -125,29 +121,6 @@ describe("Screenshots", () => {
|
|||
});
|
||||
});
|
||||
|
||||
describe("#_bytesToString", () => {
|
||||
it("should convert no bytes to empty string", () => {
|
||||
assert.equal(Screenshots._bytesToString([]), "");
|
||||
});
|
||||
it("should convert bytes to a string", () => {
|
||||
const str = Screenshots._bytesToString([104, 101, 108, 108, 111, 32, 119, 111, 114, 108, 100]);
|
||||
|
||||
assert.equal(str, "hello world");
|
||||
});
|
||||
it("should convert very many bytes to a long string", () => {
|
||||
const bytes = [];
|
||||
for (let i = 0; i < 1000 * 1000; i++) {
|
||||
bytes.push(9);
|
||||
}
|
||||
|
||||
const str = Screenshots._bytesToString(bytes);
|
||||
|
||||
assert.propertyVal(str, 0, "\t");
|
||||
assert.propertyVal(str, "length", 1000000);
|
||||
assert.propertyVal(str, 999999, "\u0009");
|
||||
});
|
||||
});
|
||||
|
||||
describe("#_shouldGetScreenshots", () => {
|
||||
beforeEach(() => {
|
||||
let more = 2;
|
||||
|
|
|
@ -118,11 +118,17 @@ describe("Top Sites Feed", () => {
|
|||
|
||||
assert.isAbove(DEFAULT_TOP_SITES.length, 0);
|
||||
});
|
||||
it("should add defaults on PREF_CHANGED", () => {
|
||||
it("should add defaults on default.sites PREF_CHANGED", () => {
|
||||
feed.onAction({type: at.PREF_CHANGED, data: {name: "default.sites", value: "https://foo.com"}});
|
||||
|
||||
assert.isAbove(DEFAULT_TOP_SITES.length, 0);
|
||||
});
|
||||
it("should refresh on topSiteRows PREF_CHANGED", () => {
|
||||
feed.refresh = sinon.spy();
|
||||
feed.onAction({type: at.PREF_CHANGED, data: {name: "topSitesRows"}});
|
||||
|
||||
assert.calledOnce(feed.refresh);
|
||||
});
|
||||
it("should have default sites with .isDefault = true", () => {
|
||||
feed.refreshDefaults("https://foo.com");
|
||||
|
||||
|
|
|
@ -176,7 +176,8 @@ const TEST_GLOBAL = {
|
|||
generateQI() { return {}; }
|
||||
},
|
||||
EventEmitter,
|
||||
ShellService: {isDefaultBrowser: () => true}
|
||||
ShellService: {isDefaultBrowser: () => true},
|
||||
FilterExpressions: {eval() { return Promise.resolve(true); }}
|
||||
};
|
||||
overrider.set(TEST_GLOBAL);
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче