Bug 1508407 - Add Return-to-AMO firstrun, Pocket-personalization attachment and bug fixes to Activity Stream r=ursula

Differential Revision: https://phabricator.services.mozilla.com/D12343

--HG--
rename : browser/components/newtab/content-src/components/StartupOverlay/StartupOverlay.jsx => browser/components/newtab/content-src/asrouter/templates/StartupOverlay/StartupOverlay.jsx
rename : browser/components/newtab/content-src/components/StartupOverlay/_StartupOverlay.scss => browser/components/newtab/content-src/asrouter/templates/StartupOverlay/_StartupOverlay.scss
extra : moz-landing-system : lando
This commit is contained in:
Ed Lee 2018-11-19 22:05:29 +00:00
Родитель f7dfd8df9e
Коммит 52414287aa
112 изменённых файлов: 4464 добавлений и 3291 удалений

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

@ -21,14 +21,13 @@ new DetectUserSessionStart(store).sendEventOrAddListener();
if (!global.gActivityStreamPrerenderedState) {
store.dispatch(ac.AlsoToMain({type: at.NEW_TAB_STATE_REQUEST}));
}
enableASRouterContent(store, asrouterContent);
ReactDOM.hydrate(<Provider store={store}>
<Base
isFirstrun={global.document.location.href === "about:welcome"}
isPrerendered={!!global.gActivityStreamPrerenderedState}
locale={global.document.documentElement.lang}
strings={global.gActivityStreamStrings} />
</Provider>, document.getElementById("root"));
enableASRouterContent(store, asrouterContent);
addSnippetsSubscriber(store);

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

@ -1,3 +1,4 @@
import {addLocaleData, IntlProvider} from "react-intl";
import {actionCreators as ac} from "common/Actions.jsm";
import {OUTGOING_MESSAGE_NAME as AS_GENERAL_OUTGOING_MESSAGE_NAME} from "content-src/lib/init-store";
import {generateMessages} from "./rich-text-strings";
@ -7,6 +8,7 @@ import {OnboardingMessage} from "./templates/OnboardingMessage/OnboardingMessage
import React from "react";
import ReactDOM from "react-dom";
import {SnippetsTemplates} from "./templates/template-manifest";
import {StartupOverlay} from "./templates/StartupOverlay/StartupOverlay";
const INCOMING_MESSAGE_NAME = "ASRouter:parent-to-child";
const OUTGOING_MESSAGE_NAME = "ASRouter:child-to-parent";
@ -170,6 +172,9 @@ export class ASRouterUISurface extends React.PureComponent {
}
componentWillMount() {
// Add locale data for StartupOverlay because it uses react-intl
addLocaleData(global.document.documentElement.lang);
const endpoint = ASRouterUtils.getPreviewEndpoint();
ASRouterUtils.addListener(this.onMessageFromParent);
@ -181,11 +186,23 @@ export class ASRouterUISurface extends React.PureComponent {
}
}
componentDidMount() {
if (this.props.document.location.href === "about:welcome") {
// Trigger the onboarding overlay slightly after the startup overlay is mounted,
// to ensure we don't flash the onboarding content before hand
ASRouterUtils.sendMessage({type: "TRIGGER", data: {trigger: {id: "showOnboarding"}}});
}
}
componentWillUnmount() {
ASRouterUtils.removeListener(this.onMessageFromParent);
}
renderSnippets() {
if (this.state.bundle.template === "onboarding" ||
this.state.message.template === "fxa_overlay") {
return null;
}
const SnippetComponent = SnippetsTemplates[this.state.message.template];
const {content} = this.state.message;
@ -211,13 +228,31 @@ export class ASRouterUISurface extends React.PureComponent {
}
renderOnboarding() {
return (
<OnboardingMessage
{...this.state.bundle}
UISurface="NEWTAB_OVERLAY"
onAction={ASRouterUtils.executeAction}
onDoneButton={this.clearBundle(this.state.bundle.bundle)}
sendUserActionTelemetry={this.sendUserActionTelemetry} />);
if (this.state.bundle.template === "onboarding") {
return (
<OnboardingMessage
{...this.state.bundle}
UISurface="NEWTAB_OVERLAY"
onAction={ASRouterUtils.executeAction}
onDoneButton={this.clearBundle(this.state.bundle.bundle)}
sendUserActionTelemetry={this.sendUserActionTelemetry} />);
}
return null;
}
renderFirstRunOverlay() {
if (this.state.message.template === "fxa_overlay") {
global.document.body.classList.add("welcome", "hide-main");
return (
<IntlProvider locale={global.document.documentElement.lang} messages={global.gActivityStreamStrings}>
<StartupOverlay
onBlock={this.onBlockById(this.state.message.id)}
dispatch={this.props.activityStreamStore.dispatch}
store={this.props.activityStreamStore} />
</IntlProvider>
);
}
return null;
}
renderPreviewBanner() {
@ -239,7 +274,9 @@ export class ASRouterUISurface extends React.PureComponent {
return (
<React.Fragment>
{this.renderPreviewBanner()}
{bundle.template === "onboarding" ? this.renderOnboarding() : this.renderSnippets()}
{this.renderFirstRunOverlay()}
{this.renderOnboarding()}
{this.renderSnippets()}
</React.Fragment>
);
}
@ -262,14 +299,15 @@ export class ASRouterContent {
global.document.body.appendChild(this.containerElement);
}
ReactDOM.render(<ASRouterUISurface />, this.containerElement);
ReactDOM.render(<ASRouterUISurface activityStreamStore={this._activityStreamStore} />, this.containerElement);
}
_unmount() {
ReactDOM.unmountComponentAtNode(this.containerElement);
}
init() {
init(store) {
this._activityStreamStore = store;
this._mount();
this.initialized = true;
}

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

@ -1,7 +1,7 @@
.ASRouterButton {
font-weight: bold;
white-space: nowrap;
border-radius: 4px;
border-radius: 2px;
border: 1px solid var(--newtab-border-secondary-color);
background-color: var(--newtab-button-secondary-color);
font-family: inherit;

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

@ -17,7 +17,7 @@ const ALLOWED_TAGS = {
* Transform an object (tag name: {url}) into (tag name: anchor) where the url
* is used as href, in order to render links inside a Fluent.Localized component.
*/
export function convertLinks(links, sendClick, doNotAutoBlock) {
export function convertLinks(links, sendClick, doNotAutoBlock, openNewWindow = false) {
if (links) {
return Object.keys(links).reduce((acc, linkTag) => {
const {action} = links[linkTag];
@ -25,7 +25,7 @@ export function convertLinks(links, sendClick, doNotAutoBlock) {
const url = action ? false : safeURI(links[linkTag].url);
acc[linkTag] = (<a href={url}
target={doNotAutoBlock ? "_blank" : ""}
target={openNewWindow ? "_blank" : ""}
data-metric={links[linkTag].metric}
data-action={action}
data-args={links[linkTag].args}
@ -46,7 +46,7 @@ export function RichText(props) {
throw new Error(`ASRouter: ${props.localization_id} is not a valid rich text property. If you want it to be processed, you need to add it to asrouter/rich-text-strings.js`);
}
return (
<Localized id={props.localization_id} {...ALLOWED_TAGS} {...props.customElements} {...convertLinks(props.links, props.sendClick, props.doNotAutoBlock)}>
<Localized id={props.localization_id} {...ALLOWED_TAGS} {...props.customElements} {...convertLinks(props.links, props.sendClick, props.doNotAutoBlock, props.openNewWindow)}>
<span>{props.text}</span>
</Localized>
);

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

@ -5,8 +5,8 @@
right: 0;
background-color: var(--newtab-snippets-background-color);
color: var(--newtab-text-primary-color);
font-size: 12px;
line-height: 16px;
font-size: 14px;
line-height: 20px;
border-top: 1px solid var(--newtab-snippets-hairline-color);
box-shadow: $shadow-secondary;
display: flex;
@ -22,6 +22,14 @@
}
}
input {
&[type='checkbox'] {
margin-inline-start: 0;
height: 16px;
width: 16px;
}
}
.innerWrapper {
margin: 0 auto;
display: flex;

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

@ -7,6 +7,7 @@ import {MessageContext} from "fluent";
*/
const RICH_TEXT_CONFIG = {
"text": ["text", "scene1_text"],
"scene2_text": "scene2_text",
"privacy_html": "scene2_privacy_html",
"disclaimer_html": "scene2_disclaimer_html",
};

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

@ -1,7 +1,7 @@
.EOYSnippetForm {
margin-top: 12px;
margin: 10px 0 8px;
align-self: start;
font-size: 12px;
font-size: 14px;
display: flex;
align-items: center;
@ -9,7 +9,7 @@
.donation-form-url {
white-space: nowrap;
font-size: 14px;
padding: 5px 14px;
padding: 8px 20px;
border-radius: 2px;
}
@ -17,6 +17,7 @@
color: $grey-90;
margin-inline-end: 18px;
border: 1px solid $grey-40;
padding: 5px 14px;
background: $grey-10;
cursor: pointer;
}
@ -36,11 +37,22 @@
.monthly-checkbox-container {
width: 100%;
input {
&[type='checkbox'] {
width: 24px;
height: 24px;
}
}
label {
vertical-align: super;
}
}
.donation-form-url {
margin-inline-start: 18px;
background-color: $snippets-donation-button-bg;
background-color: var(--newtab-button-primary-color);
border: 0;
color: $white;
align-self: flex-end;

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

@ -6,6 +6,9 @@ export const FXASignupSnippet = props => {
const firefox_version = userAgent ? parseInt(userAgent[1], 10) : 0;
const extendedContent = {
form_action: "https://accounts.firefox.com/",
scene1_button_label: "Learn More",
scene2_button_label: "Sign Me Up",
scene2_email_placeholder_text: "Your Email Here",
...props.content,
hidden_inputs: {
action: "email",

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

@ -27,11 +27,30 @@ function processFormData(input, message) {
return {formData, url};
}
export const SendToDeviceSnippet = props => (
<SubmitFormSnippet {...props}
function addDefaultValues(props) {
return {
...props,
content: {
scene1_button_label: "Learn More",
scene2_dismiss_button_text: "Dismiss",
scene2_button_label: "Send",
scene2_input_placeholder: "YOUR EMAIL HERE",
locale: "en-US",
country: "us",
message_id_email: "",
include_sms: false,
...props.content,
},
};
}
export const SendToDeviceSnippet = props => {
const propsWithDefaults = addDefaultValues(props);
return (<SubmitFormSnippet {...propsWithDefaults}
form_method="POST"
className="send_to_device_snippet"
inputType={props.content.include_sms ? "text" : "email"}
validateInput={props.content.include_sms ? validateInput : null}
processFormData={processFormData} />
);
inputType={propsWithDefaults.content.include_sms ? "text" : "email"}
validateInput={propsWithDefaults.content.include_sms ? validateInput : null}
processFormData={processFormData} />);
};

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

@ -56,6 +56,7 @@ export class _StartupOverlay extends React.PureComponent {
window.removeEventListener("visibilitychange", this.removeOverlay);
document.body.classList.remove("hide-main");
this.setState({show: false});
this.props.onBlock();
setTimeout(() => {
// Allow scrolling and fully remove overlay after animation finishes.
document.body.classList.remove("welcome");

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

@ -89,6 +89,7 @@ export class SubmitFormSnippet extends React.PureComponent {
localization_id="disclaimer_html"
links={content.links}
doNotAutoBlock={true}
openNewWindow={true}
sendClick={this.props.sendClick} />
</p>);
}
@ -101,12 +102,12 @@ export class SubmitFormSnippet extends React.PureComponent {
return (<label className="privacyNotice" htmlFor="id_privacy">
<p>
<input type="checkbox" id="id_privacy" name="privacy" required="required" />
<span><RichText text={content.scene2_privacy_html}
<RichText text={content.scene2_privacy_html}
localization_id="privacy_html"
links={content.links}
doNotAutoBlock={true}
openNewWindow={true}
sendClick={this.props.sendClick} />
</span>
</p>
</label>);
}
@ -150,7 +151,11 @@ export class SubmitFormSnippet extends React.PureComponent {
return (<SnippetBase {...this.props} className={containerClass} footerDismiss={true}>
{content.scene2_icon ? <div className="scene2Icon"><img src={content.scene2_icon} /></div> : null}
<div className="message">
<p>{content.scene2_title ? <h3 className="scene2Title">{content.scene2_title}</h3> : null} {content.scene2_text}</p>
<p>
{content.scene2_title ? <h3 className="scene2Title">{content.scene2_title}</h3> : null}
{" "}
<RichText scene2_text={content.scene2_text} localization_id="scene2_text" />
</p>
</div>
<form action={content.form_action} method={this.props.form_method} onSubmit={this.handleSubmit} ref="form">
{this.renderHiddenFormInputs()}

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

@ -3,22 +3,37 @@
flex: 1 1 100%;
width: 100%;
.disclaimerText {
margin: 20px 0 0;
font-size: 12px;
}
p {
margin: 0;
}
&.send_to_device_snippet {
text-align: center;
.message {
font-size: 16px;
margin-bottom: 20px;
}
}
.ASRouterButton {
&.primary {
flex: 1 1 0;
&[type='submit'] {
font-weight: normal;
}
}
}
.scene2Icon {
width: 100%;
margin-bottom: 20px;
img {
width: 98px;
@ -43,18 +58,17 @@
font-size: 14px;
align-self: stretch;
flex: 0 0 100%;
p {
margin-top: 0;
}
margin-bottom: 10px;
}
.privacyNotice {
font-size: 12px;
color: var(--newtab-text-secondary-color);
margin-top: 10px;
flex: 0 0 100%;
p {
margin-bottom: 0;
span {
vertical-align: top;
}
}
@ -83,12 +97,12 @@
input {
&.mainInput {
border-radius: 3px;
border-radius: 2px;
background-color: var(--newtab-textbox-background-color);
border: $input-border;
padding: 0 8px;
height: 100%;
font-size: 15px;
font-size: 14px;
width: 50%;
&:focus {

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

@ -9,7 +9,6 @@ import {PrerenderData} from "common/PrerenderData.jsm";
import React from "react";
import {Search} from "content-src/components/Search/Search";
import {Sections} from "content-src/components/Sections/Sections";
import {StartupOverlay} from "content-src/components/StartupOverlay/StartupOverlay";
const PrefsButton = injectIntl(props => (
<div className="prefs-button">
@ -42,9 +41,6 @@ export class _Base extends React.PureComponent {
componentWillMount() {
const {locale} = this.props;
addLocaleDataForReactIntl(locale);
if (this.props.isFirstrun) {
global.document.body.classList.add("welcome", "hide-main");
}
}
componentDidMount() {
@ -170,7 +166,6 @@ export class BaseContent extends React.PureComponent {
<ConfirmDialog />
</main>
</div>
{this.props.isFirstrun && <StartupOverlay />}
</div>);
}
}

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

@ -235,8 +235,8 @@ export class Section extends React.PureComponent {
<div className="section-empty-state">
<div className="empty-state">
{emptyState.icon && emptyState.icon.startsWith("moz-extension://") ?
<img className="empty-state-icon icon" style={{"background-image": `url('${emptyState.icon}')`}} /> :
<img className={`empty-state-icon icon icon-${emptyState.icon}`} />}
<span className="empty-state-icon icon" style={{"background-image": `url('${emptyState.icon}')`}} /> :
<span className={`empty-state-icon icon icon-${emptyState.icon}`} />}
<p className="empty-state-message">
{getFormattedMessage(emptyState.message)}
</p>

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

@ -7,7 +7,7 @@ export function enableASRouterContent(store, asrouterContent) {
}
if (!asrouterContent.initialized) {
asrouterContent.init();
asrouterContent.init(store);
}
});
// Return this for testing purposes

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

@ -133,7 +133,6 @@ input {
@import '../components/ErrorBoundary/ErrorBoundary';
@import '../components/TopSites/TopSites';
@import '../components/Sections/Sections';
@import '../components/StartupOverlay/StartupOverlay';
@import '../components/Topics/Topics';
@import '../components/Search/Search';
@import '../components/ContextMenu/ContextMenu';
@ -153,3 +152,4 @@ input {
@import '../asrouter/templates/SubmitFormSnippet/SubmitFormSnippet';
@import '../asrouter/templates/OnboardingMessage/OnboardingMessage';
@import '../asrouter/templates/EOYSnippet/EOYSnippet';
@import '../asrouter/templates/StartupOverlay/StartupOverlay';

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

@ -128,7 +128,6 @@ $error-fallback-line-height: 1.5;
$image-path: '../data/content/assets/';
$snippets-container-height: 120px;
$snippets-donation-button-bg: #0C99D5;
$textbox-shadow-size: 4px;

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

@ -918,264 +918,6 @@ main {
.sections-list .normal-cards .section-list {
grid-template-columns: repeat(auto-fit, 309px); } }
.activity-stream.welcome {
overflow: hidden; }
.activity-stream:not(.welcome) .overlay-wrapper {
display: none; }
.overlay-wrapper {
position: absolute;
top: 0;
left: 0;
width: 100vw;
height: 100vh;
z-index: 21000;
transition: opacity 0.4s;
opacity: 0;
overflow-x: auto; }
.overlay-wrapper.show {
transition: none;
opacity: 1; }
.overlay-wrapper.show .firstrun-sign-in {
transition: opacity 1.5s, transform 1.5s;
transition-delay: 0.2s;
transform: translateY(-50%) scale(1);
opacity: 1; }
@media screen and (max-width: 790px) {
.overlay-wrapper.show .firstrun-sign-in {
float: none;
margin: auto;
top: 190px;
margin-bottom: 100px; } }
.overlay-wrapper.show .firstrun-firefox-logo {
transition: opacity 2.3s;
opacity: 1; }
.overlay-wrapper.show .firstrun-title,
.overlay-wrapper.show .firstrun-content,
.overlay-wrapper.show .firstrun-link {
transition: transform 0.5s, opacity 0.8s;
transform: translateY(0);
opacity: 1; }
.overlay-wrapper.show .firstrun-title {
transition-delay: 0.2s; }
.overlay-wrapper.show .firstrun-content {
transition-delay: 0.4s; }
.overlay-wrapper.show .firstrun-link {
transition-delay: 0.6s; }
.overlay-wrapper.show .fxaccounts-container {
transition: none;
opacity: 1; }
.background,
body.hide-main {
width: 100%;
height: 100%;
display: block;
background-image: url("../data/content/assets/fox-tail.png"), linear-gradient(to bottom, #003EAA 40%, #004EC2 60%, #0060DF 80%, #0080FF 90%, #00C7FF 100%);
background-position-x: center;
background-position-y: -200px, top;
background-repeat: no-repeat;
background-size: cover;
position: fixed; }
.firstrun-sign-in {
transform: translateY(-50%) scale(0.8);
position: relative;
top: 50%;
width: 358px;
opacity: 0;
background-color: #FFF;
float: inline-end;
color: #0C0C0D;
text-align: center;
padding: 10px; }
.firstrun-sign-in form {
position: relative; }
.firstrun-sign-in .extra-links {
font-size: 12px;
max-width: 340px;
margin: 17px 50px;
color: #676F7E;
cursor: default; }
.firstrun-sign-in .extra-links a {
color: #737373;
cursor: pointer;
text-decoration: underline; }
.firstrun-sign-in .extra-links a:hover,
.firstrun-sign-in .extra-links a:active,
.firstrun-sign-in .extra-links a:focus {
color: #0A84FF; }
.firstrun-sign-in .email-input {
box-shadow: none;
margin: auto;
width: 244px;
display: block;
height: 40px;
padding-inline-start: 20px;
border: 1px solid #737373;
border-radius: 2px;
font-size: 16px;
transition: border-color 150ms, box-shadow 150ms; }
.firstrun-sign-in .email-input:hover {
border-color: #0C0C0D; }
.firstrun-sign-in .email-input:focus {
border-color: #0A84FF;
box-shadow: 0 0 0 3px rgba(10, 132, 255, 0.3); }
.firstrun-sign-in .email-input.invalid {
border-color: #D70022; }
.firstrun-sign-in .email-input.invalid:focus {
box-shadow: 0 0 0 3px rgba(215, 0, 34, 0.3); }
.firstrun-sign-in .form-header {
font-size: 22px;
margin: 15px auto; }
.firstrun-sign-in .form-header .sub-header {
font-size: 14px;
margin-top: 4px;
display: block; }
.firstrun-sign-in button {
display: block;
cursor: pointer;
margin: 10px auto 0; }
.firstrun-sign-in .continue-button {
font-size: 18px;
height: 43px;
width: 250px;
padding: 8px 0;
border: 0;
border-radius: 4px;
color: #FFF;
background-color: #0060DF;
transition: background-color 150ms; }
.firstrun-sign-in .continue-button:not([disabled]):active, .firstrun-sign-in .continue-button:not([disabled]):hover {
background: #003EAA;
border-color: #002275; }
.firstrun-sign-in .skip-button {
font-size: 13px;
margin-top: 20px;
margin-bottom: 20px;
background-color: #F9F9FA;
color: #0A84FF;
border: 1px solid #0A84FF;
border-radius: 2px;
min-height: 24px;
padding: 5px 10px;
transition: background-color 150ms, color 150ms, border-color 150ms; }
.firstrun-sign-in .skip-button[disabled] {
background-color: #EDEDF0;
border-color: #B1B1B3;
color: #737373;
cursor: default;
opacity: 0.5; }
.firstrun-sign-in .skip-button:not([disabled]):hover {
background-color: #0A84FF;
border-color: #0060DF;
color: #FFF; }
.firstrun-left-divider {
position: relative;
float: inline-start;
clear: both;
width: 435px; }
@media screen and (max-width: 825px) {
.firstrun-left-divider {
width: 400px; } }
@media screen and (max-width: 790px) {
.firstrun-left-divider {
margin: auto;
float: none;
width: 352px;
text-align: center; } }
.firstrun-content {
line-height: 1.5;
margin-bottom: 48px;
max-width: 352px;
background: url("../data/content/assets/sync-devices.svg") bottom center no-repeat;
padding-bottom: 210px; }
a.firstrun-link {
color: #FFF;
display: block;
text-decoration: underline; }
a.firstrun-link:hover, a.firstrun-link:active, a.firstrun-link:focus {
color: #FFF; }
.firstrun-title {
background: url("chrome://branding/content/about-logo.png") top left no-repeat;
background-size: 90px 90px;
margin: 40px 0 10px;
padding-top: 110px; }
@media screen and (max-width: 790px) {
.firstrun-title {
background: url("chrome://branding/content/about-logo.png") top center no-repeat;
background-size: 90px 90px; } }
.firstrun-title:dir(rtl) {
background-position: top right; }
.fxaccounts-container {
position: absolute;
bottom: 0;
right: 0;
top: 0;
left: 0;
color: #FFF;
height: 515px;
margin: auto;
width: 819px;
z-index: 10;
transition: opacity 0.3s;
opacity: 0; }
@media screen and (max-width: 825px) {
.fxaccounts-container {
width: 784px; } }
@media screen and (max-width: 790px) {
.fxaccounts-container {
width: auto;
height: 100%; } }
.firstrun-title,
.firstrun-content,
.firstrun-link {
opacity: 0;
transform: translateY(-5px); }
.error {
display: none; }
.error.active {
display: block;
padding: 5px 12px;
animation: fade-down 450ms;
font-size: 12px;
font-weight: 500;
color: #FFF;
background-color: #D70022;
position: absolute;
inset-inline-start: 50px;
top: -28px;
border-radius: 2px; }
.error.active::before {
inset-inline-start: 12px;
background: #D70022;
bottom: -8px;
content: '.';
height: 16px;
position: absolute;
text-indent: -999px;
transform: rotate(45deg);
white-space: nowrap;
width: 16px;
z-index: -1; }
@keyframes fade-down {
0% {
opacity: 0;
transform: translateY(-15px); }
100% {
opacity: 1;
transform: translateY(0); } }
.topics ul {
margin: 0;
padding: 0; }
@ -1897,7 +1639,7 @@ a.firstrun-link {
.ASRouterButton {
font-weight: bold;
white-space: nowrap;
border-radius: 4px;
border-radius: 2px;
border: 1px solid var(--newtab-border-secondary-color);
background-color: var(--newtab-button-secondary-color);
font-family: inherit;
@ -1924,8 +1666,8 @@ a.firstrun-link {
right: 0;
background-color: var(--newtab-snippets-background-color);
color: var(--newtab-text-primary-color);
font-size: 12px;
line-height: 16px;
font-size: 14px;
line-height: 20px;
border-top: 1px solid var(--newtab-snippets-hairline-color);
box-shadow: 0 1px 4px 0 rgba(12, 12, 13, 0.2);
display: flex;
@ -1936,6 +1678,10 @@ a.firstrun-link {
text-decoration: underline; }
[lwt-newtab-brighttext] .SnippetBaseContainer a {
font-weight: bold; }
.SnippetBaseContainer input[type='checkbox'] {
margin-inline-start: 0;
height: 16px;
width: 16px; }
.SnippetBaseContainer .innerWrapper {
margin: 0 auto;
display: flex;
@ -2137,14 +1883,23 @@ a.firstrun-link {
flex-direction: column;
flex: 1 1 100%;
width: 100%; }
.SubmitFormSnippet .disclaimerText {
margin: 20px 0 0;
font-size: 12px; }
.SubmitFormSnippet p {
margin: 0; }
.SubmitFormSnippet.send_to_device_snippet {
text-align: center; }
.SubmitFormSnippet.send_to_device_snippet .message {
font-size: 16px; }
font-size: 16px;
margin-bottom: 20px; }
.SubmitFormSnippet .ASRouterButton.primary {
flex: 1 1 0; }
.SubmitFormSnippet .ASRouterButton.primary[type='submit'] {
font-weight: normal; }
.SubmitFormSnippet .scene2Icon {
width: 100%; }
width: 100%;
margin-bottom: 20px; }
.SubmitFormSnippet .scene2Icon img {
width: 98px;
display: inline-block; }
@ -2160,14 +1915,15 @@ a.firstrun-link {
.SubmitFormSnippet .message {
font-size: 14px;
align-self: stretch;
flex: 0 0 100%; }
.SubmitFormSnippet .message p {
margin-top: 0; }
flex: 0 0 100%;
margin-bottom: 10px; }
.SubmitFormSnippet .privacyNotice {
font-size: 12px;
color: var(--newtab-text-secondary-color);
margin-top: 10px;
flex: 0 0 100%; }
.SubmitFormSnippet .privacyNotice p {
margin-bottom: 0; }
.SubmitFormSnippet .privacyNotice span {
vertical-align: top; }
.SubmitFormSnippet .innerWrapper {
max-width: 670px;
flex-wrap: wrap;
@ -2186,12 +1942,12 @@ a.firstrun-link {
width: 100%;
text-align: right; }
.SubmitFormSnippet input.mainInput {
border-radius: 3px;
border-radius: 2px;
background-color: var(--newtab-textbox-background-color);
border: 1px solid var(--newtab-textbox-border);
padding: 0 8px;
height: 100%;
font-size: 15px;
font-size: 14px;
width: 50%; }
.SubmitFormSnippet input.mainInput:focus {
border: 1px solid var(--newtab-textbox-focus-color);
@ -2320,21 +2076,22 @@ a.firstrun-link {
content: none; }
.EOYSnippetForm {
margin-top: 12px;
margin: 10px 0 8px;
align-self: start;
font-size: 12px;
font-size: 14px;
display: flex;
align-items: center; }
.EOYSnippetForm .donation-amount,
.EOYSnippetForm .donation-form-url {
white-space: nowrap;
font-size: 14px;
padding: 5px 14px;
padding: 8px 20px;
border-radius: 2px; }
.EOYSnippetForm .donation-amount {
color: #0C0C0D;
margin-inline-end: 18px;
border: 1px solid #B1B1B3;
padding: 5px 14px;
background: #F9F9FA;
cursor: pointer; }
.EOYSnippetForm input[type='radio'] {
@ -2346,13 +2103,276 @@ a.firstrun-link {
border: 1px solid #4A4A4F; }
.EOYSnippetForm .monthly-checkbox-container {
width: 100%; }
.EOYSnippetForm .monthly-checkbox-container input[type='checkbox'] {
width: 24px;
height: 24px; }
.EOYSnippetForm .monthly-checkbox-container label {
vertical-align: super; }
.EOYSnippetForm .donation-form-url {
margin-inline-start: 18px;
background-color: #0C99D5;
background-color: var(--newtab-button-primary-color);
border: 0;
color: #FFF;
align-self: flex-end;
display: flex;
cursor: pointer; }
.activity-stream.welcome {
overflow: hidden; }
.activity-stream:not(.welcome) .overlay-wrapper {
display: none; }
.overlay-wrapper {
position: absolute;
top: 0;
left: 0;
width: 100vw;
height: 100vh;
z-index: 21000;
transition: opacity 0.4s;
opacity: 0;
overflow-x: auto; }
.overlay-wrapper.show {
transition: none;
opacity: 1; }
.overlay-wrapper.show .firstrun-sign-in {
transition: opacity 1.5s, transform 1.5s;
transition-delay: 0.2s;
transform: translateY(-50%) scale(1);
opacity: 1; }
@media screen and (max-width: 790px) {
.overlay-wrapper.show .firstrun-sign-in {
float: none;
margin: auto;
top: 190px;
margin-bottom: 100px; } }
.overlay-wrapper.show .firstrun-firefox-logo {
transition: opacity 2.3s;
opacity: 1; }
.overlay-wrapper.show .firstrun-title,
.overlay-wrapper.show .firstrun-content,
.overlay-wrapper.show .firstrun-link {
transition: transform 0.5s, opacity 0.8s;
transform: translateY(0);
opacity: 1; }
.overlay-wrapper.show .firstrun-title {
transition-delay: 0.2s; }
.overlay-wrapper.show .firstrun-content {
transition-delay: 0.4s; }
.overlay-wrapper.show .firstrun-link {
transition-delay: 0.6s; }
.overlay-wrapper.show .fxaccounts-container {
transition: none;
opacity: 1; }
.background,
body.hide-main {
width: 100%;
height: 100%;
display: block;
background-image: url("../data/content/assets/fox-tail.png"), linear-gradient(to bottom, #003EAA 40%, #004EC2 60%, #0060DF 80%, #0080FF 90%, #00C7FF 100%);
background-position-x: center;
background-position-y: -200px, top;
background-repeat: no-repeat;
background-size: cover;
position: fixed; }
.firstrun-sign-in {
transform: translateY(-50%) scale(0.8);
position: relative;
top: 50%;
width: 358px;
opacity: 0;
background-color: #FFF;
float: inline-end;
color: #0C0C0D;
text-align: center;
padding: 10px; }
.firstrun-sign-in form {
position: relative; }
.firstrun-sign-in .extra-links {
font-size: 12px;
max-width: 340px;
margin: 17px 50px;
color: #676F7E;
cursor: default; }
.firstrun-sign-in .extra-links a {
color: #737373;
cursor: pointer;
text-decoration: underline; }
.firstrun-sign-in .extra-links a:hover,
.firstrun-sign-in .extra-links a:active,
.firstrun-sign-in .extra-links a:focus {
color: #0A84FF; }
.firstrun-sign-in .email-input {
box-shadow: none;
margin: auto;
width: 244px;
display: block;
height: 40px;
padding-inline-start: 20px;
border: 1px solid #737373;
border-radius: 2px;
font-size: 16px;
transition: border-color 150ms, box-shadow 150ms; }
.firstrun-sign-in .email-input:hover {
border-color: #0C0C0D; }
.firstrun-sign-in .email-input:focus {
border-color: #0A84FF;
box-shadow: 0 0 0 3px rgba(10, 132, 255, 0.3); }
.firstrun-sign-in .email-input.invalid {
border-color: #D70022; }
.firstrun-sign-in .email-input.invalid:focus {
box-shadow: 0 0 0 3px rgba(215, 0, 34, 0.3); }
.firstrun-sign-in .form-header {
font-size: 22px;
margin: 15px auto; }
.firstrun-sign-in .form-header .sub-header {
font-size: 14px;
margin-top: 4px;
display: block; }
.firstrun-sign-in button {
display: block;
cursor: pointer;
margin: 10px auto 0; }
.firstrun-sign-in .continue-button {
font-size: 18px;
height: 43px;
width: 250px;
padding: 8px 0;
border: 0;
border-radius: 4px;
color: #FFF;
background-color: #0060DF;
transition: background-color 150ms; }
.firstrun-sign-in .continue-button:not([disabled]):active, .firstrun-sign-in .continue-button:not([disabled]):hover {
background: #003EAA;
border-color: #002275; }
.firstrun-sign-in .skip-button {
font-size: 13px;
margin-top: 20px;
margin-bottom: 20px;
background-color: #F9F9FA;
color: #0A84FF;
border: 1px solid #0A84FF;
border-radius: 2px;
min-height: 24px;
padding: 5px 10px;
transition: background-color 150ms, color 150ms, border-color 150ms; }
.firstrun-sign-in .skip-button[disabled] {
background-color: #EDEDF0;
border-color: #B1B1B3;
color: #737373;
cursor: default;
opacity: 0.5; }
.firstrun-sign-in .skip-button:not([disabled]):hover {
background-color: #0A84FF;
border-color: #0060DF;
color: #FFF; }
.firstrun-left-divider {
position: relative;
float: inline-start;
clear: both;
width: 435px; }
@media screen and (max-width: 825px) {
.firstrun-left-divider {
width: 400px; } }
@media screen and (max-width: 790px) {
.firstrun-left-divider {
margin: auto;
float: none;
width: 352px;
text-align: center; } }
.firstrun-content {
line-height: 1.5;
margin-bottom: 48px;
max-width: 352px;
background: url("../data/content/assets/sync-devices.svg") bottom center no-repeat;
padding-bottom: 210px; }
a.firstrun-link {
color: #FFF;
display: block;
text-decoration: underline; }
a.firstrun-link:hover, a.firstrun-link:active, a.firstrun-link:focus {
color: #FFF; }
.firstrun-title {
background: url("chrome://branding/content/about-logo.png") top left no-repeat;
background-size: 90px 90px;
margin: 40px 0 10px;
padding-top: 110px; }
@media screen and (max-width: 790px) {
.firstrun-title {
background: url("chrome://branding/content/about-logo.png") top center no-repeat;
background-size: 90px 90px; } }
.firstrun-title:dir(rtl) {
background-position: top right; }
.fxaccounts-container {
position: absolute;
bottom: 0;
right: 0;
top: 0;
left: 0;
color: #FFF;
height: 515px;
margin: auto;
width: 819px;
z-index: 10;
transition: opacity 0.3s;
opacity: 0; }
@media screen and (max-width: 825px) {
.fxaccounts-container {
width: 784px; } }
@media screen and (max-width: 790px) {
.fxaccounts-container {
width: auto;
height: 100%; } }
.firstrun-title,
.firstrun-content,
.firstrun-link {
opacity: 0;
transform: translateY(-5px); }
.error {
display: none; }
.error.active {
display: block;
padding: 5px 12px;
animation: fade-down 450ms;
font-size: 12px;
font-weight: 500;
color: #FFF;
background-color: #D70022;
position: absolute;
inset-inline-start: 50px;
top: -28px;
border-radius: 2px; }
.error.active::before {
inset-inline-start: 12px;
background: #D70022;
bottom: -8px;
content: '.';
height: 16px;
position: absolute;
text-indent: -999px;
transform: rotate(45deg);
white-space: nowrap;
width: 16px;
z-index: -1; }
@keyframes fade-down {
0% {
opacity: 0;
transform: translateY(-15px); }
100% {
opacity: 1;
transform: translateY(0); } }
/*# sourceMappingURL=activity-stream-linux.css.map */

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

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

@ -921,264 +921,6 @@ main {
.sections-list .normal-cards .section-list {
grid-template-columns: repeat(auto-fit, 309px); } }
.activity-stream.welcome {
overflow: hidden; }
.activity-stream:not(.welcome) .overlay-wrapper {
display: none; }
.overlay-wrapper {
position: absolute;
top: 0;
left: 0;
width: 100vw;
height: 100vh;
z-index: 21000;
transition: opacity 0.4s;
opacity: 0;
overflow-x: auto; }
.overlay-wrapper.show {
transition: none;
opacity: 1; }
.overlay-wrapper.show .firstrun-sign-in {
transition: opacity 1.5s, transform 1.5s;
transition-delay: 0.2s;
transform: translateY(-50%) scale(1);
opacity: 1; }
@media screen and (max-width: 790px) {
.overlay-wrapper.show .firstrun-sign-in {
float: none;
margin: auto;
top: 190px;
margin-bottom: 100px; } }
.overlay-wrapper.show .firstrun-firefox-logo {
transition: opacity 2.3s;
opacity: 1; }
.overlay-wrapper.show .firstrun-title,
.overlay-wrapper.show .firstrun-content,
.overlay-wrapper.show .firstrun-link {
transition: transform 0.5s, opacity 0.8s;
transform: translateY(0);
opacity: 1; }
.overlay-wrapper.show .firstrun-title {
transition-delay: 0.2s; }
.overlay-wrapper.show .firstrun-content {
transition-delay: 0.4s; }
.overlay-wrapper.show .firstrun-link {
transition-delay: 0.6s; }
.overlay-wrapper.show .fxaccounts-container {
transition: none;
opacity: 1; }
.background,
body.hide-main {
width: 100%;
height: 100%;
display: block;
background-image: url("../data/content/assets/fox-tail.png"), linear-gradient(to bottom, #003EAA 40%, #004EC2 60%, #0060DF 80%, #0080FF 90%, #00C7FF 100%);
background-position-x: center;
background-position-y: -200px, top;
background-repeat: no-repeat;
background-size: cover;
position: fixed; }
.firstrun-sign-in {
transform: translateY(-50%) scale(0.8);
position: relative;
top: 50%;
width: 358px;
opacity: 0;
background-color: #FFF;
float: inline-end;
color: #0C0C0D;
text-align: center;
padding: 10px; }
.firstrun-sign-in form {
position: relative; }
.firstrun-sign-in .extra-links {
font-size: 12px;
max-width: 340px;
margin: 17px 50px;
color: #676F7E;
cursor: default; }
.firstrun-sign-in .extra-links a {
color: #737373;
cursor: pointer;
text-decoration: underline; }
.firstrun-sign-in .extra-links a:hover,
.firstrun-sign-in .extra-links a:active,
.firstrun-sign-in .extra-links a:focus {
color: #0A84FF; }
.firstrun-sign-in .email-input {
box-shadow: none;
margin: auto;
width: 244px;
display: block;
height: 40px;
padding-inline-start: 20px;
border: 1px solid #737373;
border-radius: 2px;
font-size: 16px;
transition: border-color 150ms, box-shadow 150ms; }
.firstrun-sign-in .email-input:hover {
border-color: #0C0C0D; }
.firstrun-sign-in .email-input:focus {
border-color: #0A84FF;
box-shadow: 0 0 0 3px rgba(10, 132, 255, 0.3); }
.firstrun-sign-in .email-input.invalid {
border-color: #D70022; }
.firstrun-sign-in .email-input.invalid:focus {
box-shadow: 0 0 0 3px rgba(215, 0, 34, 0.3); }
.firstrun-sign-in .form-header {
font-size: 22px;
margin: 15px auto; }
.firstrun-sign-in .form-header .sub-header {
font-size: 14px;
margin-top: 4px;
display: block; }
.firstrun-sign-in button {
display: block;
cursor: pointer;
margin: 10px auto 0; }
.firstrun-sign-in .continue-button {
font-size: 18px;
height: 43px;
width: 250px;
padding: 8px 0;
border: 0;
border-radius: 4px;
color: #FFF;
background-color: #0060DF;
transition: background-color 150ms; }
.firstrun-sign-in .continue-button:not([disabled]):active, .firstrun-sign-in .continue-button:not([disabled]):hover {
background: #003EAA;
border-color: #002275; }
.firstrun-sign-in .skip-button {
font-size: 13px;
margin-top: 20px;
margin-bottom: 20px;
background-color: #F9F9FA;
color: #0A84FF;
border: 1px solid #0A84FF;
border-radius: 2px;
min-height: 24px;
padding: 5px 10px;
transition: background-color 150ms, color 150ms, border-color 150ms; }
.firstrun-sign-in .skip-button[disabled] {
background-color: #EDEDF0;
border-color: #B1B1B3;
color: #737373;
cursor: default;
opacity: 0.5; }
.firstrun-sign-in .skip-button:not([disabled]):hover {
background-color: #0A84FF;
border-color: #0060DF;
color: #FFF; }
.firstrun-left-divider {
position: relative;
float: inline-start;
clear: both;
width: 435px; }
@media screen and (max-width: 825px) {
.firstrun-left-divider {
width: 400px; } }
@media screen and (max-width: 790px) {
.firstrun-left-divider {
margin: auto;
float: none;
width: 352px;
text-align: center; } }
.firstrun-content {
line-height: 1.5;
margin-bottom: 48px;
max-width: 352px;
background: url("../data/content/assets/sync-devices.svg") bottom center no-repeat;
padding-bottom: 210px; }
a.firstrun-link {
color: #FFF;
display: block;
text-decoration: underline; }
a.firstrun-link:hover, a.firstrun-link:active, a.firstrun-link:focus {
color: #FFF; }
.firstrun-title {
background: url("chrome://branding/content/about-logo.png") top left no-repeat;
background-size: 90px 90px;
margin: 40px 0 10px;
padding-top: 110px; }
@media screen and (max-width: 790px) {
.firstrun-title {
background: url("chrome://branding/content/about-logo.png") top center no-repeat;
background-size: 90px 90px; } }
.firstrun-title:dir(rtl) {
background-position: top right; }
.fxaccounts-container {
position: absolute;
bottom: 0;
right: 0;
top: 0;
left: 0;
color: #FFF;
height: 515px;
margin: auto;
width: 819px;
z-index: 10;
transition: opacity 0.3s;
opacity: 0; }
@media screen and (max-width: 825px) {
.fxaccounts-container {
width: 784px; } }
@media screen and (max-width: 790px) {
.fxaccounts-container {
width: auto;
height: 100%; } }
.firstrun-title,
.firstrun-content,
.firstrun-link {
opacity: 0;
transform: translateY(-5px); }
.error {
display: none; }
.error.active {
display: block;
padding: 5px 12px;
animation: fade-down 450ms;
font-size: 12px;
font-weight: 500;
color: #FFF;
background-color: #D70022;
position: absolute;
inset-inline-start: 50px;
top: -28px;
border-radius: 2px; }
.error.active::before {
inset-inline-start: 12px;
background: #D70022;
bottom: -8px;
content: '.';
height: 16px;
position: absolute;
text-indent: -999px;
transform: rotate(45deg);
white-space: nowrap;
width: 16px;
z-index: -1; }
@keyframes fade-down {
0% {
opacity: 0;
transform: translateY(-15px); }
100% {
opacity: 1;
transform: translateY(0); } }
.topics ul {
margin: 0;
padding: 0; }
@ -1900,7 +1642,7 @@ a.firstrun-link {
.ASRouterButton {
font-weight: bold;
white-space: nowrap;
border-radius: 4px;
border-radius: 2px;
border: 1px solid var(--newtab-border-secondary-color);
background-color: var(--newtab-button-secondary-color);
font-family: inherit;
@ -1927,8 +1669,8 @@ a.firstrun-link {
right: 0;
background-color: var(--newtab-snippets-background-color);
color: var(--newtab-text-primary-color);
font-size: 12px;
line-height: 16px;
font-size: 14px;
line-height: 20px;
border-top: 1px solid var(--newtab-snippets-hairline-color);
box-shadow: 0 1px 4px 0 rgba(12, 12, 13, 0.2);
display: flex;
@ -1939,6 +1681,10 @@ a.firstrun-link {
text-decoration: underline; }
[lwt-newtab-brighttext] .SnippetBaseContainer a {
font-weight: bold; }
.SnippetBaseContainer input[type='checkbox'] {
margin-inline-start: 0;
height: 16px;
width: 16px; }
.SnippetBaseContainer .innerWrapper {
margin: 0 auto;
display: flex;
@ -2140,14 +1886,23 @@ a.firstrun-link {
flex-direction: column;
flex: 1 1 100%;
width: 100%; }
.SubmitFormSnippet .disclaimerText {
margin: 20px 0 0;
font-size: 12px; }
.SubmitFormSnippet p {
margin: 0; }
.SubmitFormSnippet.send_to_device_snippet {
text-align: center; }
.SubmitFormSnippet.send_to_device_snippet .message {
font-size: 16px; }
font-size: 16px;
margin-bottom: 20px; }
.SubmitFormSnippet .ASRouterButton.primary {
flex: 1 1 0; }
.SubmitFormSnippet .ASRouterButton.primary[type='submit'] {
font-weight: normal; }
.SubmitFormSnippet .scene2Icon {
width: 100%; }
width: 100%;
margin-bottom: 20px; }
.SubmitFormSnippet .scene2Icon img {
width: 98px;
display: inline-block; }
@ -2163,14 +1918,15 @@ a.firstrun-link {
.SubmitFormSnippet .message {
font-size: 14px;
align-self: stretch;
flex: 0 0 100%; }
.SubmitFormSnippet .message p {
margin-top: 0; }
flex: 0 0 100%;
margin-bottom: 10px; }
.SubmitFormSnippet .privacyNotice {
font-size: 12px;
color: var(--newtab-text-secondary-color);
margin-top: 10px;
flex: 0 0 100%; }
.SubmitFormSnippet .privacyNotice p {
margin-bottom: 0; }
.SubmitFormSnippet .privacyNotice span {
vertical-align: top; }
.SubmitFormSnippet .innerWrapper {
max-width: 670px;
flex-wrap: wrap;
@ -2189,12 +1945,12 @@ a.firstrun-link {
width: 100%;
text-align: right; }
.SubmitFormSnippet input.mainInput {
border-radius: 3px;
border-radius: 2px;
background-color: var(--newtab-textbox-background-color);
border: 1px solid var(--newtab-textbox-border);
padding: 0 8px;
height: 100%;
font-size: 15px;
font-size: 14px;
width: 50%; }
.SubmitFormSnippet input.mainInput:focus {
border: 1px solid var(--newtab-textbox-focus-color);
@ -2323,21 +2079,22 @@ a.firstrun-link {
content: none; }
.EOYSnippetForm {
margin-top: 12px;
margin: 10px 0 8px;
align-self: start;
font-size: 12px;
font-size: 14px;
display: flex;
align-items: center; }
.EOYSnippetForm .donation-amount,
.EOYSnippetForm .donation-form-url {
white-space: nowrap;
font-size: 14px;
padding: 5px 14px;
padding: 8px 20px;
border-radius: 2px; }
.EOYSnippetForm .donation-amount {
color: #0C0C0D;
margin-inline-end: 18px;
border: 1px solid #B1B1B3;
padding: 5px 14px;
background: #F9F9FA;
cursor: pointer; }
.EOYSnippetForm input[type='radio'] {
@ -2349,13 +2106,276 @@ a.firstrun-link {
border: 1px solid #4A4A4F; }
.EOYSnippetForm .monthly-checkbox-container {
width: 100%; }
.EOYSnippetForm .monthly-checkbox-container input[type='checkbox'] {
width: 24px;
height: 24px; }
.EOYSnippetForm .monthly-checkbox-container label {
vertical-align: super; }
.EOYSnippetForm .donation-form-url {
margin-inline-start: 18px;
background-color: #0C99D5;
background-color: var(--newtab-button-primary-color);
border: 0;
color: #FFF;
align-self: flex-end;
display: flex;
cursor: pointer; }
.activity-stream.welcome {
overflow: hidden; }
.activity-stream:not(.welcome) .overlay-wrapper {
display: none; }
.overlay-wrapper {
position: absolute;
top: 0;
left: 0;
width: 100vw;
height: 100vh;
z-index: 21000;
transition: opacity 0.4s;
opacity: 0;
overflow-x: auto; }
.overlay-wrapper.show {
transition: none;
opacity: 1; }
.overlay-wrapper.show .firstrun-sign-in {
transition: opacity 1.5s, transform 1.5s;
transition-delay: 0.2s;
transform: translateY(-50%) scale(1);
opacity: 1; }
@media screen and (max-width: 790px) {
.overlay-wrapper.show .firstrun-sign-in {
float: none;
margin: auto;
top: 190px;
margin-bottom: 100px; } }
.overlay-wrapper.show .firstrun-firefox-logo {
transition: opacity 2.3s;
opacity: 1; }
.overlay-wrapper.show .firstrun-title,
.overlay-wrapper.show .firstrun-content,
.overlay-wrapper.show .firstrun-link {
transition: transform 0.5s, opacity 0.8s;
transform: translateY(0);
opacity: 1; }
.overlay-wrapper.show .firstrun-title {
transition-delay: 0.2s; }
.overlay-wrapper.show .firstrun-content {
transition-delay: 0.4s; }
.overlay-wrapper.show .firstrun-link {
transition-delay: 0.6s; }
.overlay-wrapper.show .fxaccounts-container {
transition: none;
opacity: 1; }
.background,
body.hide-main {
width: 100%;
height: 100%;
display: block;
background-image: url("../data/content/assets/fox-tail.png"), linear-gradient(to bottom, #003EAA 40%, #004EC2 60%, #0060DF 80%, #0080FF 90%, #00C7FF 100%);
background-position-x: center;
background-position-y: -200px, top;
background-repeat: no-repeat;
background-size: cover;
position: fixed; }
.firstrun-sign-in {
transform: translateY(-50%) scale(0.8);
position: relative;
top: 50%;
width: 358px;
opacity: 0;
background-color: #FFF;
float: inline-end;
color: #0C0C0D;
text-align: center;
padding: 10px; }
.firstrun-sign-in form {
position: relative; }
.firstrun-sign-in .extra-links {
font-size: 12px;
max-width: 340px;
margin: 17px 50px;
color: #676F7E;
cursor: default; }
.firstrun-sign-in .extra-links a {
color: #737373;
cursor: pointer;
text-decoration: underline; }
.firstrun-sign-in .extra-links a:hover,
.firstrun-sign-in .extra-links a:active,
.firstrun-sign-in .extra-links a:focus {
color: #0A84FF; }
.firstrun-sign-in .email-input {
box-shadow: none;
margin: auto;
width: 244px;
display: block;
height: 40px;
padding-inline-start: 20px;
border: 1px solid #737373;
border-radius: 2px;
font-size: 16px;
transition: border-color 150ms, box-shadow 150ms; }
.firstrun-sign-in .email-input:hover {
border-color: #0C0C0D; }
.firstrun-sign-in .email-input:focus {
border-color: #0A84FF;
box-shadow: 0 0 0 3px rgba(10, 132, 255, 0.3); }
.firstrun-sign-in .email-input.invalid {
border-color: #D70022; }
.firstrun-sign-in .email-input.invalid:focus {
box-shadow: 0 0 0 3px rgba(215, 0, 34, 0.3); }
.firstrun-sign-in .form-header {
font-size: 22px;
margin: 15px auto; }
.firstrun-sign-in .form-header .sub-header {
font-size: 14px;
margin-top: 4px;
display: block; }
.firstrun-sign-in button {
display: block;
cursor: pointer;
margin: 10px auto 0; }
.firstrun-sign-in .continue-button {
font-size: 18px;
height: 43px;
width: 250px;
padding: 8px 0;
border: 0;
border-radius: 4px;
color: #FFF;
background-color: #0060DF;
transition: background-color 150ms; }
.firstrun-sign-in .continue-button:not([disabled]):active, .firstrun-sign-in .continue-button:not([disabled]):hover {
background: #003EAA;
border-color: #002275; }
.firstrun-sign-in .skip-button {
font-size: 13px;
margin-top: 20px;
margin-bottom: 20px;
background-color: #F9F9FA;
color: #0A84FF;
border: 1px solid #0A84FF;
border-radius: 2px;
min-height: 24px;
padding: 5px 10px;
transition: background-color 150ms, color 150ms, border-color 150ms; }
.firstrun-sign-in .skip-button[disabled] {
background-color: #EDEDF0;
border-color: #B1B1B3;
color: #737373;
cursor: default;
opacity: 0.5; }
.firstrun-sign-in .skip-button:not([disabled]):hover {
background-color: #0A84FF;
border-color: #0060DF;
color: #FFF; }
.firstrun-left-divider {
position: relative;
float: inline-start;
clear: both;
width: 435px; }
@media screen and (max-width: 825px) {
.firstrun-left-divider {
width: 400px; } }
@media screen and (max-width: 790px) {
.firstrun-left-divider {
margin: auto;
float: none;
width: 352px;
text-align: center; } }
.firstrun-content {
line-height: 1.5;
margin-bottom: 48px;
max-width: 352px;
background: url("../data/content/assets/sync-devices.svg") bottom center no-repeat;
padding-bottom: 210px; }
a.firstrun-link {
color: #FFF;
display: block;
text-decoration: underline; }
a.firstrun-link:hover, a.firstrun-link:active, a.firstrun-link:focus {
color: #FFF; }
.firstrun-title {
background: url("chrome://branding/content/about-logo.png") top left no-repeat;
background-size: 90px 90px;
margin: 40px 0 10px;
padding-top: 110px; }
@media screen and (max-width: 790px) {
.firstrun-title {
background: url("chrome://branding/content/about-logo.png") top center no-repeat;
background-size: 90px 90px; } }
.firstrun-title:dir(rtl) {
background-position: top right; }
.fxaccounts-container {
position: absolute;
bottom: 0;
right: 0;
top: 0;
left: 0;
color: #FFF;
height: 515px;
margin: auto;
width: 819px;
z-index: 10;
transition: opacity 0.3s;
opacity: 0; }
@media screen and (max-width: 825px) {
.fxaccounts-container {
width: 784px; } }
@media screen and (max-width: 790px) {
.fxaccounts-container {
width: auto;
height: 100%; } }
.firstrun-title,
.firstrun-content,
.firstrun-link {
opacity: 0;
transform: translateY(-5px); }
.error {
display: none; }
.error.active {
display: block;
padding: 5px 12px;
animation: fade-down 450ms;
font-size: 12px;
font-weight: 500;
color: #FFF;
background-color: #D70022;
position: absolute;
inset-inline-start: 50px;
top: -28px;
border-radius: 2px; }
.error.active::before {
inset-inline-start: 12px;
background: #D70022;
bottom: -8px;
content: '.';
height: 16px;
position: absolute;
text-indent: -999px;
transform: rotate(45deg);
white-space: nowrap;
width: 16px;
z-index: -1; }
@keyframes fade-down {
0% {
opacity: 0;
transform: translateY(-15px); }
100% {
opacity: 1;
transform: translateY(0); } }
/*# sourceMappingURL=activity-stream-mac.css.map */

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

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

@ -918,264 +918,6 @@ main {
.sections-list .normal-cards .section-list {
grid-template-columns: repeat(auto-fit, 309px); } }
.activity-stream.welcome {
overflow: hidden; }
.activity-stream:not(.welcome) .overlay-wrapper {
display: none; }
.overlay-wrapper {
position: absolute;
top: 0;
left: 0;
width: 100vw;
height: 100vh;
z-index: 21000;
transition: opacity 0.4s;
opacity: 0;
overflow-x: auto; }
.overlay-wrapper.show {
transition: none;
opacity: 1; }
.overlay-wrapper.show .firstrun-sign-in {
transition: opacity 1.5s, transform 1.5s;
transition-delay: 0.2s;
transform: translateY(-50%) scale(1);
opacity: 1; }
@media screen and (max-width: 790px) {
.overlay-wrapper.show .firstrun-sign-in {
float: none;
margin: auto;
top: 190px;
margin-bottom: 100px; } }
.overlay-wrapper.show .firstrun-firefox-logo {
transition: opacity 2.3s;
opacity: 1; }
.overlay-wrapper.show .firstrun-title,
.overlay-wrapper.show .firstrun-content,
.overlay-wrapper.show .firstrun-link {
transition: transform 0.5s, opacity 0.8s;
transform: translateY(0);
opacity: 1; }
.overlay-wrapper.show .firstrun-title {
transition-delay: 0.2s; }
.overlay-wrapper.show .firstrun-content {
transition-delay: 0.4s; }
.overlay-wrapper.show .firstrun-link {
transition-delay: 0.6s; }
.overlay-wrapper.show .fxaccounts-container {
transition: none;
opacity: 1; }
.background,
body.hide-main {
width: 100%;
height: 100%;
display: block;
background-image: url("../data/content/assets/fox-tail.png"), linear-gradient(to bottom, #003EAA 40%, #004EC2 60%, #0060DF 80%, #0080FF 90%, #00C7FF 100%);
background-position-x: center;
background-position-y: -200px, top;
background-repeat: no-repeat;
background-size: cover;
position: fixed; }
.firstrun-sign-in {
transform: translateY(-50%) scale(0.8);
position: relative;
top: 50%;
width: 358px;
opacity: 0;
background-color: #FFF;
float: inline-end;
color: #0C0C0D;
text-align: center;
padding: 10px; }
.firstrun-sign-in form {
position: relative; }
.firstrun-sign-in .extra-links {
font-size: 12px;
max-width: 340px;
margin: 17px 50px;
color: #676F7E;
cursor: default; }
.firstrun-sign-in .extra-links a {
color: #737373;
cursor: pointer;
text-decoration: underline; }
.firstrun-sign-in .extra-links a:hover,
.firstrun-sign-in .extra-links a:active,
.firstrun-sign-in .extra-links a:focus {
color: #0A84FF; }
.firstrun-sign-in .email-input {
box-shadow: none;
margin: auto;
width: 244px;
display: block;
height: 40px;
padding-inline-start: 20px;
border: 1px solid #737373;
border-radius: 2px;
font-size: 16px;
transition: border-color 150ms, box-shadow 150ms; }
.firstrun-sign-in .email-input:hover {
border-color: #0C0C0D; }
.firstrun-sign-in .email-input:focus {
border-color: #0A84FF;
box-shadow: 0 0 0 3px rgba(10, 132, 255, 0.3); }
.firstrun-sign-in .email-input.invalid {
border-color: #D70022; }
.firstrun-sign-in .email-input.invalid:focus {
box-shadow: 0 0 0 3px rgba(215, 0, 34, 0.3); }
.firstrun-sign-in .form-header {
font-size: 22px;
margin: 15px auto; }
.firstrun-sign-in .form-header .sub-header {
font-size: 14px;
margin-top: 4px;
display: block; }
.firstrun-sign-in button {
display: block;
cursor: pointer;
margin: 10px auto 0; }
.firstrun-sign-in .continue-button {
font-size: 18px;
height: 43px;
width: 250px;
padding: 8px 0;
border: 0;
border-radius: 4px;
color: #FFF;
background-color: #0060DF;
transition: background-color 150ms; }
.firstrun-sign-in .continue-button:not([disabled]):active, .firstrun-sign-in .continue-button:not([disabled]):hover {
background: #003EAA;
border-color: #002275; }
.firstrun-sign-in .skip-button {
font-size: 13px;
margin-top: 20px;
margin-bottom: 20px;
background-color: #F9F9FA;
color: #0A84FF;
border: 1px solid #0A84FF;
border-radius: 2px;
min-height: 24px;
padding: 5px 10px;
transition: background-color 150ms, color 150ms, border-color 150ms; }
.firstrun-sign-in .skip-button[disabled] {
background-color: #EDEDF0;
border-color: #B1B1B3;
color: #737373;
cursor: default;
opacity: 0.5; }
.firstrun-sign-in .skip-button:not([disabled]):hover {
background-color: #0A84FF;
border-color: #0060DF;
color: #FFF; }
.firstrun-left-divider {
position: relative;
float: inline-start;
clear: both;
width: 435px; }
@media screen and (max-width: 825px) {
.firstrun-left-divider {
width: 400px; } }
@media screen and (max-width: 790px) {
.firstrun-left-divider {
margin: auto;
float: none;
width: 352px;
text-align: center; } }
.firstrun-content {
line-height: 1.5;
margin-bottom: 48px;
max-width: 352px;
background: url("../data/content/assets/sync-devices.svg") bottom center no-repeat;
padding-bottom: 210px; }
a.firstrun-link {
color: #FFF;
display: block;
text-decoration: underline; }
a.firstrun-link:hover, a.firstrun-link:active, a.firstrun-link:focus {
color: #FFF; }
.firstrun-title {
background: url("chrome://branding/content/about-logo.png") top left no-repeat;
background-size: 90px 90px;
margin: 40px 0 10px;
padding-top: 110px; }
@media screen and (max-width: 790px) {
.firstrun-title {
background: url("chrome://branding/content/about-logo.png") top center no-repeat;
background-size: 90px 90px; } }
.firstrun-title:dir(rtl) {
background-position: top right; }
.fxaccounts-container {
position: absolute;
bottom: 0;
right: 0;
top: 0;
left: 0;
color: #FFF;
height: 515px;
margin: auto;
width: 819px;
z-index: 10;
transition: opacity 0.3s;
opacity: 0; }
@media screen and (max-width: 825px) {
.fxaccounts-container {
width: 784px; } }
@media screen and (max-width: 790px) {
.fxaccounts-container {
width: auto;
height: 100%; } }
.firstrun-title,
.firstrun-content,
.firstrun-link {
opacity: 0;
transform: translateY(-5px); }
.error {
display: none; }
.error.active {
display: block;
padding: 5px 12px;
animation: fade-down 450ms;
font-size: 12px;
font-weight: 500;
color: #FFF;
background-color: #D70022;
position: absolute;
inset-inline-start: 50px;
top: -28px;
border-radius: 2px; }
.error.active::before {
inset-inline-start: 12px;
background: #D70022;
bottom: -8px;
content: '.';
height: 16px;
position: absolute;
text-indent: -999px;
transform: rotate(45deg);
white-space: nowrap;
width: 16px;
z-index: -1; }
@keyframes fade-down {
0% {
opacity: 0;
transform: translateY(-15px); }
100% {
opacity: 1;
transform: translateY(0); } }
.topics ul {
margin: 0;
padding: 0; }
@ -1897,7 +1639,7 @@ a.firstrun-link {
.ASRouterButton {
font-weight: bold;
white-space: nowrap;
border-radius: 4px;
border-radius: 2px;
border: 1px solid var(--newtab-border-secondary-color);
background-color: var(--newtab-button-secondary-color);
font-family: inherit;
@ -1924,8 +1666,8 @@ a.firstrun-link {
right: 0;
background-color: var(--newtab-snippets-background-color);
color: var(--newtab-text-primary-color);
font-size: 12px;
line-height: 16px;
font-size: 14px;
line-height: 20px;
border-top: 1px solid var(--newtab-snippets-hairline-color);
box-shadow: 0 1px 4px 0 rgba(12, 12, 13, 0.2);
display: flex;
@ -1936,6 +1678,10 @@ a.firstrun-link {
text-decoration: underline; }
[lwt-newtab-brighttext] .SnippetBaseContainer a {
font-weight: bold; }
.SnippetBaseContainer input[type='checkbox'] {
margin-inline-start: 0;
height: 16px;
width: 16px; }
.SnippetBaseContainer .innerWrapper {
margin: 0 auto;
display: flex;
@ -2137,14 +1883,23 @@ a.firstrun-link {
flex-direction: column;
flex: 1 1 100%;
width: 100%; }
.SubmitFormSnippet .disclaimerText {
margin: 20px 0 0;
font-size: 12px; }
.SubmitFormSnippet p {
margin: 0; }
.SubmitFormSnippet.send_to_device_snippet {
text-align: center; }
.SubmitFormSnippet.send_to_device_snippet .message {
font-size: 16px; }
font-size: 16px;
margin-bottom: 20px; }
.SubmitFormSnippet .ASRouterButton.primary {
flex: 1 1 0; }
.SubmitFormSnippet .ASRouterButton.primary[type='submit'] {
font-weight: normal; }
.SubmitFormSnippet .scene2Icon {
width: 100%; }
width: 100%;
margin-bottom: 20px; }
.SubmitFormSnippet .scene2Icon img {
width: 98px;
display: inline-block; }
@ -2160,14 +1915,15 @@ a.firstrun-link {
.SubmitFormSnippet .message {
font-size: 14px;
align-self: stretch;
flex: 0 0 100%; }
.SubmitFormSnippet .message p {
margin-top: 0; }
flex: 0 0 100%;
margin-bottom: 10px; }
.SubmitFormSnippet .privacyNotice {
font-size: 12px;
color: var(--newtab-text-secondary-color);
margin-top: 10px;
flex: 0 0 100%; }
.SubmitFormSnippet .privacyNotice p {
margin-bottom: 0; }
.SubmitFormSnippet .privacyNotice span {
vertical-align: top; }
.SubmitFormSnippet .innerWrapper {
max-width: 670px;
flex-wrap: wrap;
@ -2186,12 +1942,12 @@ a.firstrun-link {
width: 100%;
text-align: right; }
.SubmitFormSnippet input.mainInput {
border-radius: 3px;
border-radius: 2px;
background-color: var(--newtab-textbox-background-color);
border: 1px solid var(--newtab-textbox-border);
padding: 0 8px;
height: 100%;
font-size: 15px;
font-size: 14px;
width: 50%; }
.SubmitFormSnippet input.mainInput:focus {
border: 1px solid var(--newtab-textbox-focus-color);
@ -2320,21 +2076,22 @@ a.firstrun-link {
content: none; }
.EOYSnippetForm {
margin-top: 12px;
margin: 10px 0 8px;
align-self: start;
font-size: 12px;
font-size: 14px;
display: flex;
align-items: center; }
.EOYSnippetForm .donation-amount,
.EOYSnippetForm .donation-form-url {
white-space: nowrap;
font-size: 14px;
padding: 5px 14px;
padding: 8px 20px;
border-radius: 2px; }
.EOYSnippetForm .donation-amount {
color: #0C0C0D;
margin-inline-end: 18px;
border: 1px solid #B1B1B3;
padding: 5px 14px;
background: #F9F9FA;
cursor: pointer; }
.EOYSnippetForm input[type='radio'] {
@ -2346,13 +2103,276 @@ a.firstrun-link {
border: 1px solid #4A4A4F; }
.EOYSnippetForm .monthly-checkbox-container {
width: 100%; }
.EOYSnippetForm .monthly-checkbox-container input[type='checkbox'] {
width: 24px;
height: 24px; }
.EOYSnippetForm .monthly-checkbox-container label {
vertical-align: super; }
.EOYSnippetForm .donation-form-url {
margin-inline-start: 18px;
background-color: #0C99D5;
background-color: var(--newtab-button-primary-color);
border: 0;
color: #FFF;
align-self: flex-end;
display: flex;
cursor: pointer; }
.activity-stream.welcome {
overflow: hidden; }
.activity-stream:not(.welcome) .overlay-wrapper {
display: none; }
.overlay-wrapper {
position: absolute;
top: 0;
left: 0;
width: 100vw;
height: 100vh;
z-index: 21000;
transition: opacity 0.4s;
opacity: 0;
overflow-x: auto; }
.overlay-wrapper.show {
transition: none;
opacity: 1; }
.overlay-wrapper.show .firstrun-sign-in {
transition: opacity 1.5s, transform 1.5s;
transition-delay: 0.2s;
transform: translateY(-50%) scale(1);
opacity: 1; }
@media screen and (max-width: 790px) {
.overlay-wrapper.show .firstrun-sign-in {
float: none;
margin: auto;
top: 190px;
margin-bottom: 100px; } }
.overlay-wrapper.show .firstrun-firefox-logo {
transition: opacity 2.3s;
opacity: 1; }
.overlay-wrapper.show .firstrun-title,
.overlay-wrapper.show .firstrun-content,
.overlay-wrapper.show .firstrun-link {
transition: transform 0.5s, opacity 0.8s;
transform: translateY(0);
opacity: 1; }
.overlay-wrapper.show .firstrun-title {
transition-delay: 0.2s; }
.overlay-wrapper.show .firstrun-content {
transition-delay: 0.4s; }
.overlay-wrapper.show .firstrun-link {
transition-delay: 0.6s; }
.overlay-wrapper.show .fxaccounts-container {
transition: none;
opacity: 1; }
.background,
body.hide-main {
width: 100%;
height: 100%;
display: block;
background-image: url("../data/content/assets/fox-tail.png"), linear-gradient(to bottom, #003EAA 40%, #004EC2 60%, #0060DF 80%, #0080FF 90%, #00C7FF 100%);
background-position-x: center;
background-position-y: -200px, top;
background-repeat: no-repeat;
background-size: cover;
position: fixed; }
.firstrun-sign-in {
transform: translateY(-50%) scale(0.8);
position: relative;
top: 50%;
width: 358px;
opacity: 0;
background-color: #FFF;
float: inline-end;
color: #0C0C0D;
text-align: center;
padding: 10px; }
.firstrun-sign-in form {
position: relative; }
.firstrun-sign-in .extra-links {
font-size: 12px;
max-width: 340px;
margin: 17px 50px;
color: #676F7E;
cursor: default; }
.firstrun-sign-in .extra-links a {
color: #737373;
cursor: pointer;
text-decoration: underline; }
.firstrun-sign-in .extra-links a:hover,
.firstrun-sign-in .extra-links a:active,
.firstrun-sign-in .extra-links a:focus {
color: #0A84FF; }
.firstrun-sign-in .email-input {
box-shadow: none;
margin: auto;
width: 244px;
display: block;
height: 40px;
padding-inline-start: 20px;
border: 1px solid #737373;
border-radius: 2px;
font-size: 16px;
transition: border-color 150ms, box-shadow 150ms; }
.firstrun-sign-in .email-input:hover {
border-color: #0C0C0D; }
.firstrun-sign-in .email-input:focus {
border-color: #0A84FF;
box-shadow: 0 0 0 3px rgba(10, 132, 255, 0.3); }
.firstrun-sign-in .email-input.invalid {
border-color: #D70022; }
.firstrun-sign-in .email-input.invalid:focus {
box-shadow: 0 0 0 3px rgba(215, 0, 34, 0.3); }
.firstrun-sign-in .form-header {
font-size: 22px;
margin: 15px auto; }
.firstrun-sign-in .form-header .sub-header {
font-size: 14px;
margin-top: 4px;
display: block; }
.firstrun-sign-in button {
display: block;
cursor: pointer;
margin: 10px auto 0; }
.firstrun-sign-in .continue-button {
font-size: 18px;
height: 43px;
width: 250px;
padding: 8px 0;
border: 0;
border-radius: 4px;
color: #FFF;
background-color: #0060DF;
transition: background-color 150ms; }
.firstrun-sign-in .continue-button:not([disabled]):active, .firstrun-sign-in .continue-button:not([disabled]):hover {
background: #003EAA;
border-color: #002275; }
.firstrun-sign-in .skip-button {
font-size: 13px;
margin-top: 20px;
margin-bottom: 20px;
background-color: #F9F9FA;
color: #0A84FF;
border: 1px solid #0A84FF;
border-radius: 2px;
min-height: 24px;
padding: 5px 10px;
transition: background-color 150ms, color 150ms, border-color 150ms; }
.firstrun-sign-in .skip-button[disabled] {
background-color: #EDEDF0;
border-color: #B1B1B3;
color: #737373;
cursor: default;
opacity: 0.5; }
.firstrun-sign-in .skip-button:not([disabled]):hover {
background-color: #0A84FF;
border-color: #0060DF;
color: #FFF; }
.firstrun-left-divider {
position: relative;
float: inline-start;
clear: both;
width: 435px; }
@media screen and (max-width: 825px) {
.firstrun-left-divider {
width: 400px; } }
@media screen and (max-width: 790px) {
.firstrun-left-divider {
margin: auto;
float: none;
width: 352px;
text-align: center; } }
.firstrun-content {
line-height: 1.5;
margin-bottom: 48px;
max-width: 352px;
background: url("../data/content/assets/sync-devices.svg") bottom center no-repeat;
padding-bottom: 210px; }
a.firstrun-link {
color: #FFF;
display: block;
text-decoration: underline; }
a.firstrun-link:hover, a.firstrun-link:active, a.firstrun-link:focus {
color: #FFF; }
.firstrun-title {
background: url("chrome://branding/content/about-logo.png") top left no-repeat;
background-size: 90px 90px;
margin: 40px 0 10px;
padding-top: 110px; }
@media screen and (max-width: 790px) {
.firstrun-title {
background: url("chrome://branding/content/about-logo.png") top center no-repeat;
background-size: 90px 90px; } }
.firstrun-title:dir(rtl) {
background-position: top right; }
.fxaccounts-container {
position: absolute;
bottom: 0;
right: 0;
top: 0;
left: 0;
color: #FFF;
height: 515px;
margin: auto;
width: 819px;
z-index: 10;
transition: opacity 0.3s;
opacity: 0; }
@media screen and (max-width: 825px) {
.fxaccounts-container {
width: 784px; } }
@media screen and (max-width: 790px) {
.fxaccounts-container {
width: auto;
height: 100%; } }
.firstrun-title,
.firstrun-content,
.firstrun-link {
opacity: 0;
transform: translateY(-5px); }
.error {
display: none; }
.error.active {
display: block;
padding: 5px 12px;
animation: fade-down 450ms;
font-size: 12px;
font-weight: 500;
color: #FFF;
background-color: #D70022;
position: absolute;
inset-inline-start: 50px;
top: -28px;
border-radius: 2px; }
.error.active::before {
inset-inline-start: 12px;
background: #D70022;
bottom: -8px;
content: '.';
height: 16px;
position: absolute;
text-indent: -999px;
transform: rotate(45deg);
white-space: nowrap;
width: 16px;
z-index: -1; }
@keyframes fade-down {
0% {
opacity: 0;
transform: translateY(-15px); }
100% {
opacity: 1;
transform: translateY(0); } }
/*# sourceMappingURL=activity-stream-windows.css.map */

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

Разница между файлами не показана из-за своего большого размера Загрузить разницу

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

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

@ -928,7 +928,7 @@ class _ASRouter {
target.browser.ownerGlobal.OpenBrowserWindow({private: true});
break;
case ra.OPEN_URL:
target.browser.ownerGlobal.openLinkIn(action.data.args, "tabshifted", {
target.browser.ownerGlobal.openLinkIn(action.data.args, action.data.where || "current", {
private: false,
triggeringPrincipal: Services.scriptSecurityManager.createNullPrincipal({}),
});
@ -948,7 +948,7 @@ class _ASRouter {
case ra.SHOW_FIREFOX_ACCOUNTS:
const url = await FxAccounts.config.promiseSignUpURI("snippets");
// We want to replace the current tab.
target.browser.ownerGlobal.openLinkIn(url, "tabshifted", {
target.browser.ownerGlobal.openLinkIn(url, "current", {
private: false,
triggeringPrincipal: Services.scriptSecurityManager.createNullPrincipal({}),
});

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

@ -24,7 +24,7 @@ const ONBOARDING_MESSAGES = async () => ([
button_label: {string_id: "onboarding-button-label-try-now"},
button_action: {type: "OPEN_PRIVATE_BROWSER_WINDOW"},
},
trigger: {id: "firstRun"},
trigger: {id: "showOnboarding"},
},
{
id: "ONBOARDING_2",
@ -38,10 +38,10 @@ const ONBOARDING_MESSAGES = async () => ([
button_label: {string_id: "onboarding-button-label-try-now"},
button_action: {
type: "OPEN_URL",
data: {args: "https://screenshots.firefox.com/#tour"},
data: {args: "https://screenshots.firefox.com/#tour", where: "tabshifted"},
},
},
trigger: {id: "firstRun"},
trigger: {id: "showOnboarding"},
},
{
id: "ONBOARDING_3",
@ -59,7 +59,7 @@ const ONBOARDING_MESSAGES = async () => ([
},
},
targeting: "attributionData.campaign != 'non-fx-button' && attributionData.source != 'addons.mozilla.org'",
trigger: {id: "firstRun"},
trigger: {id: "showOnboarding"},
},
{
id: "ONBOARDING_4",
@ -73,11 +73,11 @@ const ONBOARDING_MESSAGES = async () => ([
button_label: {string_id: "onboarding-button-label-try-now"},
button_action: {
type: "OPEN_URL",
data: {args: "https://addons.mozilla.org/en-US/firefox/addon/ghostery/"},
data: {args: "https://addons.mozilla.org/en-US/firefox/addon/ghostery/", where: "tabshifted"},
},
},
targeting: "providerCohorts.onboarding == 'ghostery'",
trigger: {id: "firstRun"},
trigger: {id: "showOnboarding"},
},
{
id: "ONBOARDING_5",
@ -91,10 +91,16 @@ const ONBOARDING_MESSAGES = async () => ([
button_label: {string_id: "onboarding-button-label-get-started"},
button_action: {
type: "OPEN_URL",
data: {args: await FxAccountsConfig.promiseEmailFirstURI("onboarding")},
data: {args: await FxAccountsConfig.promiseEmailFirstURI("onboarding"), where: "tabshifted"},
},
},
targeting: "attributionData.campaign == 'non-fx-button' && attributionData.source == 'addons.mozilla.org'",
trigger: {id: "showOnboarding"},
},
{
id: "FXA_1",
template: "fxa_overlay",
targeting: "attributionData.campaign != 'non-fx-button' && attributionData.source != 'addons.mozilla.org'",
trigger: {id: "firstRun"},
},
]);
@ -120,6 +126,11 @@ const OnboardingMessageProvider = {
let translatedMessages = [];
for (const msg of messages) {
let translatedMessage = msg;
// If the message has no content, do not attempt to translate it
if (!msg.content) {
translatedMessages.push(msg);
continue;
}
const [button_string, title_string, text_string] = await L10N.formatMessages([
{id: msg.content.button_label.string_id},
{id: msg.content.title.string_id},

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

@ -15,6 +15,38 @@ const {RecipeExecutor} = ChromeUtils.import("resource://activity-stream/lib/Reci
ChromeUtils.defineModuleGetter(this, "NewTabUtils",
"resource://gre/modules/NewTabUtils.jsm");
ChromeUtils.import("resource://gre/modules/Services.jsm");
ChromeUtils.import("resource://gre/modules/XPCOMUtils.jsm");
ChromeUtils.defineModuleGetter(this, "OS", "resource://gre/modules/osfile.jsm");
XPCOMUtils.defineLazyGlobalGetters(this, ["fetch"]);
XPCOMUtils.defineLazyGetter(this, "gTextDecoder", () => new TextDecoder());
XPCOMUtils.defineLazyGetter(this, "baseAttachmentsURL", async () => {
const server = Services.prefs.getCharPref("services.settings.server");
const serverInfo = await (await fetch(`${server}/`)).json();
const {capabilities: {attachments: {base_url}}} = serverInfo;
return base_url;
});
const PERSONALITY_PROVIDER_DIR = OS.Path.join(OS.Constants.Path.localProfileDir, "personality-provider");
const RECIPE_NAME = "personality-provider-recipe";
const MODELS_NAME = "personality-provider-models";
function getHash(aStr) {
// return the two-digit hexadecimal code for a byte
let toHexString = charCode => (`0${charCode.toString(16)}`).slice(-2);
let hasher = Cc["@mozilla.org/security/hash;1"].createInstance(Ci.nsICryptoHash);
hasher.init(Ci.nsICryptoHash.SHA256);
let stringStream = Cc["@mozilla.org/io/string-input-stream;1"].createInstance(Ci.nsIStringInputStream);
stringStream.data = aStr;
hasher.updateFromStream(stringStream, -1);
// convert the binary hash data to a hex string.
let binary = hasher.finish(false);
return Array.from(binary, (c, i) => toHexString(binary.charCodeAt(i))).join("").toLowerCase();
}
/**
* V2 provider builds and ranks an interest profile (also called an interest vector) off the browse history.
* This allows Firefox to classify pages into topics, by examining the text found on the page.
@ -38,6 +70,97 @@ this.PersonalityProvider = class PersonalityProvider {
this.scores = scores || {};
this.interestConfig = this.scores.interestConfig;
this.interestVector = this.scores.interestVector;
this.onSync = this.onSync.bind(this);
this.setupSyncAttachment(RECIPE_NAME);
this.setupSyncAttachment(MODELS_NAME);
}
async onSync(event) {
const {
data: {created, updated, deleted},
} = event;
// Remove every removed attachment.
const toRemove = deleted.concat(updated.map(u => u.old));
await Promise.all(toRemove.map(record => this.deleteAttachment(record)));
// Download every new/updated attachment.
const toDownload = created.concat(updated.map(u => u.new));
await Promise.all(toDownload.map(record => this.maybeDownloadAttachment(record)));
}
setupSyncAttachment(collection) {
RemoteSettings(collection).on("sync", this.onSync);
}
/**
* Downloads the attachment to disk assuming the dir already exists
* and any existing files matching the filename are clobbered.
*/
async _downloadAttachment(record) {
const {attachment: {location, filename}} = record;
const remoteFilePath = (await baseAttachmentsURL) + location;
const localFilePath = OS.Path.join(PERSONALITY_PROVIDER_DIR, filename);
const headers = new Headers();
headers.set("Accept-Encoding", "gzip");
const resp = await fetch(remoteFilePath, {headers});
if (!resp.ok) {
Cu.reportError(`Failed to fetch ${remoteFilePath}: ${resp.status}`);
return;
}
const buffer = await resp.arrayBuffer();
const bytes = new Uint8Array(buffer);
await OS.File.writeAtomic(localFilePath, bytes, {tmpPath: `${localFilePath}.tmp`});
}
/**
* Attempts to download the attachment, but only if it doesn't already exist.
*/
async maybeDownloadAttachment(record, retries = 3) {
const {attachment: {filename, hash, size}} = record;
await OS.File.makeDir(PERSONALITY_PROVIDER_DIR);
const localFilePath = OS.Path.join(PERSONALITY_PROVIDER_DIR, filename);
let retry = 0;
while ((retry++ < retries) &&
(!await OS.File.exists(localFilePath) ||
(await OS.File.stat(localFilePath)).size !== size ||
getHash(await this._getFileStr(localFilePath)) !== hash)) {
await this._downloadAttachment(record);
}
}
async deleteAttachment(record) {
const {attachment: {filename}} = record;
await OS.File.makeDir(PERSONALITY_PROVIDER_DIR);
const path = OS.Path.join(PERSONALITY_PROVIDER_DIR, filename);
await OS.File.remove(path, {ignoreAbsent: true});
return OS.File.removeEmptyDir(PERSONALITY_PROVIDER_DIR, {ignoreAbsent: true});
}
/**
* Gets contents of the attachment if it already exists on file,
* and if not attempts to download it.
*/
async getAttachment(record) {
const {attachment: {filename}} = record;
const filepath = OS.Path.join(PERSONALITY_PROVIDER_DIR, filename);
try {
await this.maybeDownloadAttachment(record);
return JSON.parse(await this._getFileStr(filepath));
} catch (error) {
Cu.reportError(`Failed to load ${filepath}: ${error.message}`);
}
return {};
}
// A helper function to read and decode a file, it isn't a stand alone function.
// If you use this, ensure you check the file exists and you have a try catch.
async _getFileStr(filepath) {
const binaryData = await OS.File.read(filepath);
return gTextDecoder.decode(binaryData);
}
async init(callback) {
@ -71,7 +194,7 @@ this.PersonalityProvider = class PersonalityProvider {
async getFromRemoteSettings(name) {
const result = await RemoteSettings(name).get();
return result;
return Promise.all(result.map(async record => ({...await this.getAttachment(record), recordKey: record.key})));
}
/**
@ -79,15 +202,15 @@ this.PersonalityProvider = class PersonalityProvider {
* A Recipe is a set of instructions on how to processes a RecipeExecutor.
*/
async getRecipe() {
if (!this.recipe || !this.recipe.length) {
if (!this.recipes || !this.recipes.length) {
const start = perfService.absNow();
this.recipe = await this.getFromRemoteSettings("personality-provider-recipe");
this.recipes = await this.getFromRemoteSettings(RECIPE_NAME);
this.dispatch(ac.PerfEvent({
event: "PERSONALIZATION_V2_GET_RECIPE_DURATION",
value: Math.round(perfService.absNow() - start),
}));
}
return this.recipe[0];
return this.recipes[0];
}
/**
@ -100,20 +223,20 @@ this.PersonalityProvider = class PersonalityProvider {
const startTaggers = perfService.absNow();
let nbTaggers = [];
let nmfTaggers = {};
const models = await this.getFromRemoteSettings("personality-provider-models");
const models = await this.getFromRemoteSettings(MODELS_NAME);
if (models.length === 0) {
return null;
}
for (let model of models) {
if (!model || !this.modelKeys.includes(model.key)) {
if (!this.modelKeys.includes(model.recordKey)) {
continue;
}
if (model.data.model_type === "nb") {
nbTaggers.push(new NaiveBayesTextTagger(model.data));
} else if (model.data.model_type === "nmf") {
nmfTaggers[model.data.parent_tag] = new NmfTextTagger(model.data);
if (model.model_type === "nb") {
nbTaggers.push(new NaiveBayesTextTagger(model));
} else if (model.model_type === "nmf") {
nmfTaggers[model.parent_tag] = new NmfTextTagger(model);
}
}
this.dispatch(ac.PerfEvent({

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

@ -145,6 +145,7 @@ pocket_read_more=Nima'q taq Na'oj:
pocket_read_even_more=Ketz'et ch'aqa' chik taq B'anob'äl
pocket_more_reccommendations=Ch'aqa' chik taq Chilab'enïk
pocket_learn_more=Tetamäx Ch'aqa' Chik
pocket_how_it_works=Achike rub'eyal nisamäj
pocket_cta_button=Tik'ul Pocket
pocket_cta_text=Ke'ayaka' ri taq b'anob'äl ye'awajo' pa Pocket, chuqa' taya' ruchuq'a' ajolom kik'in jeb'ël taq sik'inïk.

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

@ -143,7 +143,6 @@ pocket_read_more=Δημοφιλή θέματα:
# LOCALIZATION NOTE (pocket_read_even_more): This is shown as a link at the
# end of the list of popular topic links.
pocket_read_even_more=Προβολή περισσότερων ιστοριών
pocket_more_reccommendations=Περισσότερες προτάσεις
pocket_learn_more=Μάθετε περισσότερα
pocket_how_it_works=Πώς λειτουργεί
@ -196,7 +195,6 @@ firstrun_form_header=Εισάγετε το email σας
firstrun_form_sub_header=για να συνεχίσετε στο Firefox Sync.
firstrun_email_input_placeholder=Email
firstrun_invalid_input=Απαιτείται έγκυρο email
# LOCALIZATION NOTE (firstrun_extra_legal_links): {terms} is equal to firstrun_terms_of_service, and
@ -207,3 +205,6 @@ firstrun_privacy_notice=Σημείωση Απορρήτου
firstrun_continue_to_login=Συνέχεια
firstrun_skip_login=Παράλειψη βήματος
# LOCALIZATION NOTE (context_menu_title): Action tooltip to open a context menu
context_menu_title=Άνοιγμα μενού

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

@ -143,7 +143,6 @@ pocket_read_more=Temas populares:
# LOCALIZATION NOTE (pocket_read_even_more): This is shown as a link at the
# end of the list of popular topic links.
pocket_read_even_more=Ver más historias
pocket_more_reccommendations=Más recomendaciones
pocket_learn_more=Saber más
pocket_cta_button=Obtener Pocket
@ -196,7 +195,6 @@ 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_invalid_input=Se requiere un correo válido
# LOCALIZATION NOTE (firstrun_extra_legal_links): {terms} is equal to firstrun_terms_of_service, and
@ -207,3 +205,6 @@ firstrun_privacy_notice=Aviso de privacidad
firstrun_continue_to_login=Continuar
firstrun_skip_login=Saltar este paso
# LOCALIZATION NOTE (context_menu_title): Action tooltip to open a context menu
context_menu_title=Abrir menú

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

@ -4,10 +4,12 @@ header_top_sites=Լավագույն կայքեր
header_highlights=Գունանշում
# LOCALIZATION NOTE(header_recommended_by): This is followed by the name
# of the corresponding content provider.
header_recommended_by=Առաջարկվում է {provider}
# LOCALIZATION NOTE(context_menu_button_sr): This is for screen readers when
# the context menu button is focused/active. Title is the label or hostname of
# the site.
context_menu_button_sr=Բաց կոնտեքստի ընտրացանկը {title}-ի համար
# LOCALIZATION NOTE(section_context_menu_button_sr): This is for screen readers when
# the section edit context menu button is focused/active.
@ -17,6 +19,7 @@ header_highlights=Գունանշում
# the page is bookmarked, or is currently open on another device
type_label_visited=Այցելած
type_label_bookmarked=Էջանշված
type_label_recommended=Թրենդինգ
# LOCALIZATION NOTE (menu_action_*): These strings are displayed in a context
# menu and are meant as a call to action for a given page.
@ -29,9 +32,12 @@ menu_action_open_private_window=Բացել Նոր Գաղտնի դիտարկմա
menu_action_dismiss=Բաց թողնել
menu_action_delete=Ջնջել Պատմությունից
menu_action_unpin=Ապամրացնել
confirm_history_delete_p1=Վստահ եք, որ ցանկանում եք ջնջել այս էջի ամեն մի օրինակ ձեր պատմությունից?
# LOCALIZATION NOTE (confirm_history_delete_notice_p2): this string is displayed in
# the same dialog as confirm_history_delete_p1. "This action" refers to deleting a
# page from history.
confirm_history_delete_notice_p2=Այս գործողությունը չի կարող վերացվել.
menu_action_save_to_pocket=Պահպանեք գրպանում
# LOCALIZATION NOTE (menu_action_show_file_*): These are platform specific strings
# found in the context menu of an item that has been downloaded. The intention behind
@ -44,6 +50,7 @@ menu_action_unpin=Ապամրացնել
# LOCALIZATION NOTE (search_button): This is screenreader only text for the
# search button.
search_button=որոնում
# LOCALIZATION NOTE (search_header): Displayed at the top of the panel
# showing search suggestions. {search_engine_name} is replaced with the name of
@ -57,8 +64,11 @@ search_web_placeholder=Որոնել առցանց
# LOCALIZATION NOTE (section_disclaimer_topstories): This is shown below
# the topstories section title to provide additional information about
# how the stories are selected.
section_disclaimer_topstories=Ինտերնետում ամենահետաքրքիր պատմությունները, որոնք ընտրվել են այն, ինչ կարդում եք: Pocket- ից, այժմ Mozilla- ի մի մասը.
section_disclaimer_topstories_linktext=Իմացեք, թե ինչպես է այն աշխատում.
# LOCALIZATION NOTE (section_disclaimer_topstories_buttontext): The text of
# the button used to acknowledge, and hide this disclaimer in the future.
section_disclaimer_topstories_buttontext=Լավ, ստացվեց
# LOCALIZATION NOTE (prefs_*, settings_*): These are shown in about:preferences
# for a "Firefox Home" section. "Firefox" should be treated as a brand and kept

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

@ -193,7 +193,7 @@ firstrun_learn_more_link=Pelajari selengkapnya tentang Firefox Accounts
# firstrun_form_sub_header is a continuation of firstrun_form_header, they are one sentence.
# firstrun_form_header is displayed more boldly as the call to action.
firstrun_form_header=Masukkan surel Anda
firstrun_form_sub_header=Lanjutkan ke Firefox Sync.
firstrun_form_sub_header=Lanjutkan ke Firefox Sync
firstrun_email_input_placeholder=Surel
firstrun_invalid_input=Surel harus valid
@ -206,3 +206,6 @@ firstrun_privacy_notice=Pernyataan Privasi
firstrun_continue_to_login=Lanjutkan
firstrun_skip_login=Lewati langkah ini
# LOCALIZATION NOTE (context_menu_title): Action tooltip to open a context menu
context_menu_title=Buka menu

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

@ -19,6 +19,7 @@ header_recommended_by=បានណែនាំដោយ {provider}
type_label_visited=បាន​ចូល​មើល
type_label_bookmarked=បាន​ចំណាំ
type_label_recommended=និន្នាការ
type_label_pocket=បានរក្សាទុកទៅ Pocket
type_label_downloaded=បានទាញយក
# LOCALIZATION NOTE (menu_action_*): These strings are displayed in a context
@ -39,11 +40,14 @@ confirm_history_delete_p1=តើអ្នកប្រាកដថាអ្នក
# page from history.
confirm_history_delete_notice_p2=សកម្មភាពនេះមិនអាចមិនធ្វើឡើង​វិញបានទេ។
menu_action_save_to_pocket=រក្សាទុកទៅ Pocket
menu_action_delete_pocket=លុបចេញពី Pocket
menu_action_archive_pocket=ទុកក្នុងប័ណ្ណសារក្នុង Pocket
# LOCALIZATION NOTE (menu_action_show_file_*): These are platform specific strings
# found in the context menu of an item that has been downloaded. The intention behind
# "this action" is that it will show where the downloaded file exists on the file system
# for each operating system.
menu_action_show_file_mac_os=បង្ហាញ​ក្នុង Finder
menu_action_show_file_default=បង្ហាញ​ឯកសារ
menu_action_open_file=បើកឯកសារ
@ -67,6 +71,8 @@ search_web_placeholder=ស្វែងរក​បណ្ដាញ
# LOCALIZATION NOTE (section_disclaimer_topstories): This is shown below
# the topstories section title to provide additional information about
# how the stories are selected.
section_disclaimer_topstories=រឿងដែលគួរឱ្យចាប់អារម្មណ៍បំផុតនៅលើទំព័រ​បណ្ដាញ ដែលត្រូវបានជ្រើសរើសដោយផ្អែកលើអ្វីដែលអ្នកបានអាន។ ពី Pocket ឥឡូវនេះជាផ្នែកមួយនៃ Mozilla។
section_disclaimer_topstories_linktext=ស្វែងយល់​ដំណើរការ​របស់​វា។
# LOCALIZATION NOTE (section_disclaimer_topstories_buttontext): The text of
# the button used to acknowledge, and hide this disclaimer in the future.
section_disclaimer_topstories_buttontext=យល់​ហើយ
@ -76,10 +82,17 @@ section_disclaimer_topstories_buttontext=យល់​ហើយ
# in English, while "Home" should be localized matching the about:preferences
# sidebar mozilla-central string for the panel that has preferences related to
# what is shown for the homepage, new windows, and new tabs.
prefs_home_header=ខ្លឹមសារ Firefox Home
prefs_home_description=ជ្រើសរើស​ខ្លឹមសារ​អ្វីដែលអ្នកចង់បាននៅលើអេក្រង់ Firefox Home របស់អ្នក។
# LOCALIZATION NOTE (prefs_section_rows_option): This is a semi-colon list of
# plural forms used in a drop down of multiple row options (1 row, 2 rows).
# See: http://developer.mozilla.org/en/docs/Localization_and_Plurals
prefs_search_header=ការស្វែងរកតាម​អ៊ីនធឺណិត
prefs_topsites_description=គេហទំព័រ​ដែល​អ្នក​មើល​ច្រើន​បំផុត
prefs_topstories_sponsored_learn_more=ស្វែងយល់​បន្ថែម
prefs_highlights_description=ការជ្រើសរើស​គេហទំព័រ​ដែល​អ្នក​បាន​រក្សាទុក ឬ​មើល
prefs_highlights_options_visited_label=ទំព័រ​ដែល​បាន​ទស្សនា
prefs_snippets_description=បច្ចុប្បន្នភាពពី Mozilla និង Firefox
settings_pane_button_label=ប្តូរទំព័រ ផ្ទាំងថ្មី របស់អ្នកតាមបំណង
settings_pane_topsites_header=សាយកំពូល
settings_pane_highlights_header=រឿងសំខាន់ៗ
@ -98,13 +111,19 @@ edit_topsites_edit_button=កែសម្រួលសាយនេះ
# LOCALIZATION NOTE (topsites_form_*): This is shown in the New/Edit Topsite modal.
topsites_form_add_header=សាយកំពូលថ្មី
topsites_form_edit_header=កែសម្រួលសាយកំពូល
topsites_form_title_label=ចំណង​ជើង
topsites_form_title_placeholder=បញ្ចូលចំណងជើង
topsites_form_url_label=URL
topsites_form_image_url_label=URL រូបភាពផ្ទាល់ខ្លួន
topsites_form_url_placeholder=វាយបញ្ចូល ឬបិទភ្ជាប់ URL
topsites_form_use_image_link=ប្រើ​ប្រាស់​រូបភាព​ផ្ទាល់ខ្លួន...
# LOCALIZATION NOTE (topsites_form_*_button): These are verbs/actions.
topsites_form_preview_button=មើល​សាកល្បង
topsites_form_add_button=បន្ថែម
topsites_form_save_button=រក្សាទុក
topsites_form_cancel_button=បោះបង់
topsites_form_url_validation=ត្រូវការ URL ដែលត្រឹមត្រូវ
topsites_form_image_validation=មិន​អាច​ផ្ទុក​រូបភាព​បាន​ទេ។ សាកល្បង URL ផ្សេង។
# LOCALIZATION NOTE (pocket_read_more): This is shown at the bottom of the
# trending stories section and precedes a list of links to popular topics.
@ -113,11 +132,11 @@ pocket_read_more=ប្រធានបទកំពុងពេញនិយម៖
# end of the list of popular topic links.
pocket_read_even_more=មើលរឿងរ៉ាវច្រើនទៀត
highlights_empty_state=ចាប់ផ្តើមការរុករក ហើយយើងនឹងបង្ហាញអត្ថបទ វីដេអូ និងទំព័រដ៏អស្ចារ្យផ្សេងទៀតដែលអ្នកបានមើល ឬបានចំណាំនៅទីនេះ។
# LOCALIZATION NOTE (topstories_empty_state): When there are no recommendations,
# in the space that would have shown a few stories, this is shown instead.
# {provider} is replaced by the name of the content provider for this section.
topstories_empty_state=អ្នកបានអានរឿងទាំងអស់ហើយ។ ពិនិត្យ​រឿង​ដែល​ពេញនិយមបំផុត​ឡើងវិញ​​ពី {provider}។ មិនអាចរង់ចាំ? ជ្រើសរើសប្រធានបទកំពុងពេញនិយម ដើម្បីស្វែងរករឿងដ៏អស្ចារ្យនៅ​លើ​អ៊ីនធឺណិត។
# LOCALIZATION NOTE (manual_migration_explanation2): This message is shown to encourage users to
# import their browser profile from another browser they might be using.
@ -131,12 +150,21 @@ manual_migration_import_button=នាំចូលឥឡូវនេះ
# LOCALIZATION NOTE (error_fallback_default_*): This message and suggested
# action link are shown in each section of UI that fails to render
error_fallback_default_info=អូ មានអ្វីមួយខុសប្រក្រតីក្នុងការផ្ទុក​ខ្លឹមសារ​នេះ។
error_fallback_default_refresh_suggestion=ផ្ទុកទំព័រឡើងវិញ ដើម្បីព្យាយាមម្ដងទៀត។
# LOCALIZATION NOTE (section_menu_action_*). These strings are displayed in the section
# context menu and are meant as a call to action for the given section.
section_menu_action_remove_section=លុប​ផ្នែក​ចេញ
section_menu_action_collapse_section=បង្រួមផ្នែក
section_menu_action_expand_section=ពង្រីកផ្នែក
section_menu_action_manage_section=គ្រប់គ្រងផ្នែក
section_menu_action_manage_webext=គ្រប់គ្រងផ្នែកបន្ថែម
section_menu_action_add_topsite=បញ្ចូល​គេហទំព័រ​ពេញនិយម​បំផុត
section_menu_action_add_search_engine=បន្ថែម​ម៉ាស៊ីន​ស្វែងរក
section_menu_action_move_up=​ផ្លាស់ទី​ឡើង​លើ
section_menu_action_move_down=ផ្លាស់ទី​ចុះក្រោម
section_menu_action_privacy_notice=ការជូនដំណឹង​អំពី​ឯកជនភាព
# LOCALIZATION NOTE (firstrun_*). These strings are displayed only once, on the
# firstrun of the browser, they give an introduction to Firefox and Sync.
@ -148,8 +176,9 @@ firstrun_form_header=បញ្ចូល​អ៊ីមែល​របស់​
firstrun_email_input_placeholder=អ៊ីមែល
# LOCALIZATION NOTE (firstrun_extra_legal_links): {terms} is equal to firstrun_terms_of_service, and
# {privacy} is equal to firstrun_privacy_notice. {terms} and {privacy} are clickable links.
firstrun_continue_to_login=បន្ត
# LOCALIZATION NOTE (context_menu_title): Action tooltip to open a context menu

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

@ -1,33 +1,25 @@
newtab_page_title=တပ်ဗ်အသစ်ဖွင့်
default_label_loading=ရယူနေသှ်…
header_top_sites=အများဆုံးသုံးဆိုက်များ
header_stories=အကြည့်အများဆုံးသတင်းများ
header_highlights=ဦးစားပေးအကြောင်းအရာများ
header_visit_again=ထပ်မံလည်ပတ်ရန်
header_bookmarks=လတ်တလော စာမှတ်များ
# LOCALIZATION NOTE(header_recommended_by): This is followed by the name
# of the corresponding content provider.
header_recommended_by={provider} က အကြံပြုထားသည်
# LOCALIZATION NOTE(header_bookmarks_placeholder): This message is
# meant to inform that section contains no information because
# the user hasn't added any bookmarks.
header_bookmarks_placeholder=မည်သည့်စာမှတ်မျှ မရှိသေးပါ။
# LOCALIZATION NOTE(header_stories_from): This is followed by a logo of the
# corresponding content (stories) provider
header_stories_from=မှ
# LOCALIZATION NOTE(context_menu_button_sr): This is for screen readers when
# the context menu button is focused/active. Title is the label or hostname of
# the site.
# LOCALIZATION NOTE(section_context_menu_button_sr): This is for screen readers when
# the section edit context menu button is focused/active.
# LOCALIZATION NOTE (type_label_*): These labels are associated to pages to give
# context on how the element is related to the user, e.g. type indicates that
# the page is bookmarked, or is currently open on another device
type_label_visited=သွားလည်ခဲ့သော
type_label_bookmarked=စာအမှတ်မှတ်ထားသော
type_label_synced=အခြားပစ္စည်းတစ်ခုမှရယူထားသှ်
type_label_recommended=လူကြိုက်များနေသော
# LOCALIZATION NOTE(type_label_open): Open is an adjective, as in "page is open"
type_label_open=ဖွင့်ပါ
type_label_topic=အကြောင်းအရာ
type_label_now=ယခု
type_label_downloaded=ဆွဲချခဲ့သည်
# LOCALIZATION NOTE (menu_action_*): These strings are displayed in a context
# menu and are meant as a call to action for a given page.
@ -35,8 +27,6 @@ type_label_now=ယခု
# bookmarks"
menu_action_bookmark=စာအမှတ်
menu_action_remove_bookmark=စာအမှတ်အားဖယ်ပါ
menu_action_copy_address=လိပ်စာအားကူးယူပါ
menu_action_email_link=လင်ခ့်အားအီးမေလ်းဖြင့်ပို့ပါ…
menu_action_open_new_window=အခြားဝင်းဒိုးတစ်ခုမှဖွင့်ပါ
menu_action_open_private_window=အခြားတစ်ကိုယ်ရေသုံးဝင်းဒိုးတစ်ခုဖွင့်ပါ
menu_action_dismiss=ပိတ်လိုက်ပါ
@ -49,12 +39,16 @@ confirm_history_delete_p1=ယခုစာမျက်နှာနှင့်
# page from history.
confirm_history_delete_notice_p2=ယခုလုပ်ဆောင်မှုသည် နောက်ပြန်ဆုတ်၍မရသော လုပ်ဆောင်မှု ဖြစ်သည်။
menu_action_save_to_pocket=Pocket သို့ သိမ်းရန်
menu_action_delete_pocket=ပေါ့ကပ်မှပယ်ဖျက်ပါ
# LOCALIZATION NOTE (search_for_something_with): {search_term} is a placeholder
# for what the user has typed in the search input field, e.g. 'Search for ' +
# search_term + 'with:' becomes 'Search for abc with:'
# The search engine name is displayed as an icon and does not need a translation
search_for_something_with={search_term} အားရှာပါ -
# LOCALIZATION NOTE (menu_action_show_file_*): These are platform specific strings
# found in the context menu of an item that has been downloaded. The intention behind
# "this action" is that it will show where the downloaded file exists on the file system
# for each operating system.
# LOCALIZATION NOTE (menu_action_copy_download_link, menu_action_go_to_download_page):
# "Download" here, in both cases, is not a verb, it is a noun. As in, "Copy the
# link that belongs to this downloaded item"
# LOCALIZATION NOTE (search_button): This is screenreader only text for the
# search button.
@ -67,74 +61,59 @@ search_header={search_engine_name} ရှာဖွေမှု
# LOCALIZATION NOTE (search_web_placeholder): This is shown in the searchbox when
# the user hasn't typed anything yet.
search_web_placeholder=ဝတ်ဘ်ပေါ်တွင် ရှာဖွေခြင်း
search_settings=ရှာဖွေမှုအပြင်အဆင်အားပြောင်းလဲပါ
search_web_placeholder=ဝဘ်တွင် ရှာဖွေပါ
# LOCALIZATION NOTE (section_info_option): This is the screenreader text for the
# (?) icon that would show a section's description with optional feedback link.
section_info_option=အချက်အလက်
section_info_send_feedback=အကြံပေးချက် ပေးပို့ရန်
section_info_privacy_notice=ကိုယ်ရေးကာကွယ်မှု သတိပေးချက်
# LOCALIZATION NOTE (section_disclaimer_topstories): This is shown below
# the topstories section title to provide additional information about
# how the stories are selected.
# LOCALIZATION NOTE (section_disclaimer_topstories_buttontext): The text of
# the button used to acknowledge, and hide this disclaimer in the future.
section_disclaimer_topstories_buttontext=ကောင်းပြီ၊ ရပါပြီ။
# LOCALIZATION NOTE (welcome_*): This is shown as a modal dialog, typically on a
# first-run experience when there's no data to display yet
welcome_title=တပ်ဗ်အသစ်တစ်ခုမှကြိုဆိုပါတယ်
welcome_body=ယခုနေရာအား Firefox မှ အသင့်လျော်ဆုံး သင်သွားလည်ခဲ့ဖူးသော စာအမှတ်များ၊ ဆောင်းပါးများ၊ ရုပ်ရှင်များ နှင့် စာမျက်နှာများအား ပြသဖို့အသုံးပြုမည်ဖြစ်ပါတယ်။
welcome_label=သင့် အသားပေးဖော်ပြချက်များကိုသတိထားမည်
# LOCALIZATION NOTE (time_label_*): {number} is a placeholder for a number which
# represents a shortened timestamp format, e.g. '10m' means '10 minutes ago'.
time_label_less_than_minute=<1မီတာ
time_label_minute={number}မီတာ
time_label_hour={number}အမြင့်
time_label_day={number}နေ့
# LOCALIZATION NOTE (settings_pane_*): This is shown in the Settings Pane sidebar.
# LOCALIZATION NOTE (prefs_*, settings_*): These are shown in about:preferences
# for a "Firefox Home" section. "Firefox" should be treated as a brand and kept
# in English, while "Home" should be localized matching the about:preferences
# sidebar mozilla-central string for the panel that has preferences related to
# what is shown for the homepage, new windows, and new tabs.
# LOCALIZATION NOTE (prefs_section_rows_option): This is a semi-colon list of
# plural forms used in a drop down of multiple row options (1 row, 2 rows).
# See: http://developer.mozilla.org/en/docs/Localization_and_Plurals
prefs_topstories_sponsored_learn_more=ပိုမိုလေ့လာရန်
prefs_highlights_options_visited_label=လည်ပတ်ခဲ့သည့်စာမျက်နှာများ
prefs_highlights_options_download_label=လတ်တလောဆွဲချမှုများ
prefs_highlights_options_pocket_label=ပေါ့ကတ်သို့ စာမျက်နှာများသိမ်းပါ
prefs_snippets_description=Mozilla နှင့် Firefox မှ အပ်ဒိတ်များ
settings_pane_button_label=သင့်တပ်ဗ်အသစ်စာမျက်နှာအား ပြင်ဆင်မည်
settings_pane_header=စာတပ်ဗ်အသစ်အပြင်အဆင်များ
settings_pane_body2=ယခုစာမျက်နှာတွင် ကြည့်လိုသည်များကို ရွေးပါ။
settings_pane_search_header=ရှာဖွေပါ
settings_pane_search_body=ဝက်ဘ်ပေါ်တွင် သင့်တပ်ဗ်အသစ်မှရှာဖွေပါ
settings_pane_topsites_header=ထိပ်တန်းဝတ်ဘ်ဆိုက်များ
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=မှတ်ထားလိုသော သို့မဟုတ် ပြန်ဖွင့်လိုသော လည်ပတ်မှတ်တမ်းထဲမှ တချို့ကို Firefox က ပြပါမည်။
settings_pane_topsites_header=ထိပ်တန်းဝဘ်ဆိုက်များ
settings_pane_highlights_header=ဦးစားပေးအကြောင်းအရာများ
settings_pane_highlights_options_bookmarks=စာမှတ်များ
settings_pane_highlights_options_visited=လည်ပတ်ထားသော ဆိုက်များ
# LOCALIZATION NOTE(settings_pane_snippets_header): For the "Snippets" feature
# traditionally on about:home. Alternative translation options: "Small Note" or
# something that expresses the idea of "a small message, shortened from
# something else, and non-essential but also not entirely trivial and useless."
settings_pane_snippets_header=မှတ်စုတိုများ
settings_pane_snippets_body=Mozilla မှ Firefox အကြောင်း၊ အင်တာနက်ယဉ်ကျေးမှုနှင့် အခါအားလျော်စွာ ဖြစ်ပေါ်လာသော ကျပန်း meme စသည့် နောက်ဆုံးရသတင်းများကို ဖတ်ရှုပါ။
settings_pane_done_button=ပြီးပြီ
# LOCALIZATION NOTE (edit_topsites_*): This is shown in the Edit Top Sites modal
# dialog.
edit_topsites_button_text=ပြင်ဆင်မည်
edit_topsites_button_label=သင့်ထိပ်တန်းဆိုက် အမြင်အားပြင်ဆင်ပါ
edit_topsites_showmore_button=ထပ်ပြပါ
edit_topsites_showless_button=ချုံ့ပြရန်
edit_topsites_done_button=ပြီးပြီ
edit_topsites_pin_button=တ်ဆိုဒ်အားpinလုပ်ထားမည်
edit_topsites_unpin_button=ယခုဆိုက်ကို တွယ်ဖြုတ်ရန်
edit_topsites_edit_button=ဆိုက်အားပြင်မည်
edit_topsites_dismiss_button=ဆိုက်အားဖျက်လိုက်မည်
edit_topsites_add_button=ထည့်ရန်
# LOCALIZATION NOTE (topsites_form_*): This is shown in the New/Edit Topsite modal.
topsites_form_add_header=ထိပ်တန်းဆိုက် အသစ်
topsites_form_edit_header=ထိပ်တန်းဆိုက်ကို တည်းဖြတ်ရန်
topsites_form_title_label=ခေါင်းစဉ်
topsites_form_title_placeholder=ခေါင်းစဉ် ရေးပါ
topsites_form_url_label=URL
topsites_form_image_url_label=စိတ်ကြိုက်ပုံ URL
topsites_form_url_placeholder=URL ကို ရိုက်ပါ သို့မဟုတ် ပွားထည့်ပါ
topsites_form_use_image_link=စိတ်ကြိုက်ပုံတစ်ခုသုံးပါ…
# LOCALIZATION NOTE (topsites_form_*_button): These are verbs/actions.
topsites_form_preview_button=အစမ်းမြင်ကွင်း
topsites_form_add_button=ထည့်ရန်
topsites_form_save_button=သိမ်းရန်
topsites_form_cancel_button=မလုပ်တော့ပါ
topsites_form_url_validation=URL အမှန် လိုအပ်သည်
topsites_form_image_validation=ပုံတင်ရန် ပျက်ကွက်ခဲ့သည်။ မတူသော URL ကို စမ်းပါ။
# LOCALIZATION NOTE (pocket_read_more): This is shown at the bottom of the
# trending stories section and precedes a list of links to popular topics.
@ -142,10 +121,10 @@ pocket_read_more=လူကြိုက်များခေါင်းစဉ်
# LOCALIZATION NOTE (pocket_read_even_more): This is shown as a link at the
# end of the list of popular topic links.
pocket_read_even_more=နောက်ထပ်သတင်းများ ကြည့်ရန်
# LOCALIZATION NOTE (pocket_feedback_header): This is shown as an introduction
# to Pocket as part of the feedback form.
# LOCALIZATION NOTE (pocket_description): This is shown in the settings pane and
# below (pocket_feedback_header) to provide more information about Pocket.
pocket_more_reccommendations=ပိုများသောအကြံပြုချက်များ
pocket_learn_more=ပိုမိုလေ့လာရန်
pocket_how_it_works=ဘယ်လိုအလုပ်လုပ်လဲ
pocket_cta_button=ပေါ့ကပ်ရယူပါ
# LOCALIZATION NOTE (topstories_empty_state): When there are no recommendations,
# in the space that would have shown a few stories, this is shown instead.
@ -160,3 +139,31 @@ manual_migration_cancel_button=မလိုတော့ပါ၊ ကျေးဇ
# LOCALIZATION NOTE (manual_migration_import_button): This message is shown on a button that starts the process
# of importing another browsers profile profile into Firefox.
manual_migration_import_button=ထည့်သွင်းရန်
# LOCALIZATION NOTE (error_fallback_default_*): This message and suggested
# action link are shown in each section of UI that fails to render
error_fallback_default_refresh_suggestion=ထပ်ကြိုးစားရန် စာမျက်နှာကို ပြန်တင်ပါ
# LOCALIZATION NOTE (section_menu_action_*). These strings are displayed in the section
# context menu and are meant as a call to action for the given section.
section_menu_action_remove_section=အပိုင်းကို ပယ်ဖျက်ပါ
section_menu_action_expand_section=အပိုင်းတိုးချဲ့ပါ
section_menu_action_manage_section=အပိုင်းများကိုစီမံရန်
section_menu_action_add_topsite=ထိပ်တန်းဆိုက်များကို ပေါင်းထည့်ပါ
# LOCALIZATION NOTE (firstrun_*). These strings are displayed only once, on the
# firstrun of the browser, they give an introduction to Firefox and Sync.
# LOCALIZATION NOTE (firstrun_form_header and firstrun_form_sub_header):
# firstrun_form_sub_header is a continuation of firstrun_form_header, they are one sentence.
# firstrun_form_header is displayed more boldly as the call to action.
firstrun_form_header=သင့်အီးမေလ်းအားထည့်ပါ
firstrun_email_input_placeholder=အီးမေးလ်
firstrun_invalid_input=အီးမေးလ်အမှန် လိုအပ်သည်
# LOCALIZATION NOTE (firstrun_extra_legal_links): {terms} is equal to firstrun_terms_of_service, and
# {privacy} is equal to firstrun_privacy_notice. {terms} and {privacy} are clickable links.
# LOCALIZATION NOTE (context_menu_title): Action tooltip to open a context menu

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

@ -143,7 +143,6 @@ pocket_read_more=Populære emner:
# LOCALIZATION NOTE (pocket_read_even_more): This is shown as a link at the
# end of the list of popular topic links.
pocket_read_even_more=Vis flere saker
pocket_more_reccommendations=Flere anbefalinger
pocket_learn_more=Les mer
pocket_how_it_works=Hvordan det virker
@ -197,7 +196,6 @@ firstrun_form_header=Skriv inn e-postadressen din
firstrun_form_sub_header=for å fortsette til Firefox Sync.
firstrun_email_input_placeholder=E-post
firstrun_invalid_input=Gyldig e-post er nødvendig
# LOCALIZATION NOTE (firstrun_extra_legal_links): {terms} is equal to firstrun_terms_of_service, and
@ -208,3 +206,6 @@ firstrun_privacy_notice=Personvernbestemmelser
firstrun_continue_to_login=Fortsett
firstrun_skip_login=Hopp over dette trinnet
# LOCALIZATION NOTE (context_menu_title): Action tooltip to open a context menu
context_menu_title=Åpne meny

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

@ -123,3 +123,5 @@ 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ń
context_menu_title=Otwórz menu

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

@ -208,3 +208,4 @@ firstrun_continue_to_login=Continuă
firstrun_skip_login=Omite acest pas
# LOCALIZATION NOTE (context_menu_title): Action tooltip to open a context menu
context_menu_title=Deschide meniul

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

@ -143,9 +143,9 @@ pocket_read_more=ప్రముఖ అంశాలు:
# LOCALIZATION NOTE (pocket_read_even_more): This is shown as a link at the
# end of the list of popular topic links.
pocket_read_even_more=మరిన్ని కథలను వీక్షించండి
pocket_more_reccommendations=మరిన్ని సిఫారసులు
pocket_learn_more=ఇంకా తెలుసుకోండి
pocket_how_it_works=ఇది ఎలా పనిచేస్తుంది
highlights_empty_state=విహారించడం మొదలుపెట్టండి, మీరు ఈమధ్య చూసిన లేదా ఇష్టపడిన గొప్ప వ్యాసాలను, వీడియోలను, ఇతర పేజీలను ఇక్కడ చూపిస్తాం.
# LOCALIZATION NOTE (topstories_empty_state): When there are no recommendations,
@ -192,7 +192,6 @@ firstrun_learn_more_link=Firefox ఖాతాల గురించి మరి
firstrun_form_header=ఈ ఈమెయిలును ఇవ్వండి
firstrun_email_input_placeholder=ఈమెయిలు
firstrun_invalid_input=సరైన ఈమెయిలు తప్పనిసరి
# LOCALIZATION NOTE (firstrun_extra_legal_links): {terms} is equal to firstrun_terms_of_service, and
@ -203,4 +202,6 @@ firstrun_privacy_notice=అంతరంగికత గమనిక
firstrun_continue_to_login=కొనసాగు
firstrun_skip_login=ఈ అంచెను దాటవేయి
# LOCALIZATION NOTE (context_menu_title): Action tooltip to open a context menu
section_menu_action_add_search_engine=శోధన యంత్రాన్ని చేర్చు

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

@ -194,9 +194,11 @@ firstrun_form_header=ป้อนอีเมลของคุณ
firstrun_form_sub_header=เพื่อดำเนินการต่อไปยัง Firefox Sync
firstrun_email_input_placeholder=อีเมล
firstrun_invalid_input=ต้องการอีเมลที่ถูกต้อง
# LOCALIZATION NOTE (firstrun_extra_legal_links): {terms} is equal to firstrun_terms_of_service, and
# {privacy} is equal to firstrun_privacy_notice. {terms} and {privacy} are clickable links.
firstrun_extra_legal_links=เพื่อดำเนินการต่อ คุณยอมรับ {terms} และ {privacy}
firstrun_terms_of_service=เงื่อนไขการให้บริการ
firstrun_privacy_notice=ประกาศความเป็นส่วนตัว

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

@ -22,6 +22,7 @@ type_label_visited=Binisita
type_label_bookmarked=Bookmarked
type_label_recommended=Nagte-trend
type_label_pocket=I-save sa Pocket
type_label_downloaded=Nai-download na
# LOCALIZATION NOTE (menu_action_*): These strings are displayed in a context
# menu and are meant as a call to action for a given page.
@ -48,10 +49,18 @@ menu_action_archive_pocket=Mag-archive sa Pocket
# found in the context menu of an item that has been downloaded. The intention behind
# "this action" is that it will show where the downloaded file exists on the file system
# for each operating system.
menu_action_show_file_mac_os=Ipakita sa Finder
menu_action_show_file_windows=Buksan ang Naglalaman na Folder
menu_action_show_file_linux=Buksan ang Naglalaman na Folder
menu_action_show_file_default=Ipakita ang File
menu_action_open_file=Buksan ang File
# LOCALIZATION NOTE (menu_action_copy_download_link, menu_action_go_to_download_page):
# "Download" here, in both cases, is not a verb, it is a noun. As in, "Copy the
# link that belongs to this downloaded item"
menu_action_copy_download_link=Kopyahin ang Download Link
menu_action_go_to_download_page=Pumunta sa Pahina ng mga Download
menu_action_remove_download=Burahin sa Kasaysayan
# LOCALIZATION NOTE (search_button): This is screenreader only text for the
# search button.
@ -90,6 +99,9 @@ prefs_search_header=Paghahanap sa Web
prefs_topsites_description=Ang mga site na iyong pinupuntahan
prefs_topstories_sponsored_learn_more=Matuto ng higit pa
prefs_highlights_description=Ang isang seleksyon ng mga site na iyong nai-save o binisita
prefs_highlights_options_visited_label=Mga pahinang binisita
prefs_highlights_options_download_label=Pinakabagong Nai-download
prefs_highlights_options_pocket_label=Mga Pahina na Nai-save sa Pocket
prefs_snippets_description=Mga Update mula sa Mozilla at Firefox
settings_pane_button_label=I-customize ang iyong pahina ng Bagong Tab
settings_pane_topsites_header=Tuktok na mga Site
@ -129,6 +141,9 @@ pocket_read_more=Tanyag na mga paksa:
# LOCALIZATION NOTE (pocket_read_even_more): This is shown as a link at the
# end of the list of popular topic links.
pocket_read_even_more=Tignan ang higit pang mga kuwento
pocket_learn_more=Alamin Pa
pocket_how_it_works=Paano gamitin
pocket_cta_button=Kunin ang Pocket
highlights_empty_state=Magsimulang mag-browse, at ipapakita namin ang ilan sa mga magagandang artikulo, video, at iba pang mga pahina na kamakailan mong binisita o na-bookmark dito.
# LOCALIZATION NOTE (topstories_empty_state): When there are no recommendations,
@ -158,20 +173,29 @@ section_menu_action_collapse_section=I-collapse ang Seksyon
section_menu_action_expand_section=Palawakin ang Seksyon
section_menu_action_manage_section=Pamahalaan ang Seksyon
section_menu_action_add_topsite=Magdagdag ng Nangungunang Site
section_menu_action_add_search_engine=Magdagdag ng Search Engine
section_menu_action_move_up=Ilipat Up
section_menu_action_move_down=Ilipat sa Baba
section_menu_action_privacy_notice=Paunawa sa Privacy
# LOCALIZATION NOTE (firstrun_*). These strings are displayed only once, on the
# firstrun of the browser, they give an introduction to Firefox and Sync.
firstrun_title=Isama ang Firefox saan man
# LOCALIZATION NOTE (firstrun_form_header and firstrun_form_sub_header):
# firstrun_form_sub_header is a continuation of firstrun_form_header, they are one sentence.
# firstrun_form_header is displayed more boldly as the call to action.
firstrun_form_header=Ilagay ang iyong email
firstrun_email_input_placeholder=Email
firstrun_invalid_input=Balidong email ang kinakailangan
# LOCALIZATION NOTE (firstrun_extra_legal_links): {terms} is equal to firstrun_terms_of_service, and
# {privacy} is equal to firstrun_privacy_notice. {terms} and {privacy} are clickable links.
firstrun_privacy_notice=Abisong Pangbribasiya
firstrun_continue_to_login=Magpatuloy
firstrun_skip_login=Laktawan ang hakbang na ito
# LOCALIZATION NOTE (context_menu_title): Action tooltip to open a context menu
context_menu_title=Buksan ang menu

3574
browser/components/newtab/package-lock.json сгенерированный

Разница между файлами не показана из-за своего большого размера Загрузить разницу

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

@ -9,7 +9,6 @@
"dependencies": {
"fluent": "0.6.4",
"fluent-react": "0.7.0",
"prop-types": "15.6.1",
"react": "16.2.0",
"react-dom": "16.2.0",
"react-intl": "2.4.0",
@ -17,7 +16,7 @@
"redux": "4.0.1"
},
"devDependencies": {
"@octokit/rest": "15.3.0",
"@octokit/rest": "15.17.0",
"babel-core": "6.26.3",
"babel-loader": "7.1.4",
"babel-plugin-jsm-to-commonjs": "0.4.0",
@ -33,7 +32,7 @@
"co-task": "1.0.0",
"cpx": "1.5.0",
"enzyme": "3.7.0",
"enzyme-adapter-react-16": "1.6.0",
"enzyme-adapter-react-16": "1.7.0",
"eslint": "4.19.1",
"eslint-plugin-import": "2.11.0",
"eslint-plugin-json": "1.2.1",
@ -42,9 +41,9 @@
"eslint-plugin-promise": "3.7.0",
"eslint-plugin-react": "7.7.0",
"eslint-watch": "3.1.4",
"husky": "0.14.3",
"husky": "1.1.3",
"istanbul-instrumenter-loader": "3.0.1",
"joi-browser": "13.0.1",
"joi-browser": "13.4.0",
"karma": "3.1.1",
"karma-chai": "0.1.0",
"karma-coverage-istanbul-reporter": "2.0.4",
@ -56,22 +55,23 @@
"karma-webpack": "3.0.5",
"loader-utils": "0.2.16",
"minimist": "1.2.0",
"mocha": "5.1.1",
"mock-raf": "1.0.0",
"node-fetch": "2.1.2",
"node-sass": "4.9.4",
"npm-run-all": "4.1.2",
"mocha": "5.2.0",
"mock-raf": "1.0.1",
"node-fetch": "2.2.1",
"node-sass": "4.10.0",
"npm-run-all": "4.1.3",
"pontoon-to-json": "2.0.0",
"prop-types": "15.6.2",
"raw-loader": "0.5.1",
"react-test-renderer": "16.3.2",
"react-test-renderer": "16.6.1",
"rimraf": "2.6.2",
"sass": "1.14.3",
"sass-lint": "1.12.1",
"shelljs": "0.8.1",
"simple-git": "1.92.0",
"sinon": "4.5.0",
"webpack": "4.15.0",
"webpack-cli": "3.0.8",
"shelljs": "0.8.2",
"simple-git": "1.107.0",
"sinon": "7.1.1",
"webpack": "4.25.1",
"webpack-cli": "3.1.2",
"yamscripts": "0.1.0"
},
"engines": {

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

@ -75,7 +75,7 @@ window.gActivityStreamStrings = {
"pocket_read_more": "Nima'q taq Na'oj:",
"pocket_read_even_more": "Ketz'et ch'aqa' chik taq B'anob'äl",
"pocket_more_reccommendations": "Ch'aqa' chik taq Chilab'enïk",
"pocket_how_it_works": "How it works",
"pocket_how_it_works": "Achike rub'eyal nisamäj",
"pocket_cta_button": "Tik'ul Pocket",
"pocket_cta_text": "Ke'ayaka' ri taq b'anob'äl ye'awajo' pa Pocket, chuqa' taya' ruchuq'a' ajolom kik'in jeb'ël taq sik'inïk.",
"highlights_empty_state": "Katok pa k'amaya'l richin niqak'üt chawäch jeb'ël taq cholna'oj, taq silowachib'äl, chuqa' ch'aqa' chik taq ruxaq k'a b'a' ke'atz'ët o aya'on kan ketal wawe'.",

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

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

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

@ -107,6 +107,6 @@ window.gActivityStreamStrings = {
"firstrun_privacy_notice": "Σημείωση Απορρήτου",
"firstrun_continue_to_login": "Συνέχεια",
"firstrun_skip_login": "Παράλειψη βήματος",
"context_menu_title": "Open menu",
"context_menu_title": "Άνοιγμα μενού",
"pocket_learn_more": "Μάθετε περισσότερα"
};

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

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

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

@ -3,12 +3,12 @@ window.gActivityStreamStrings = {
"newtab_page_title": "Նոր ներդիր",
"header_top_sites": "Լավագույն կայքեր",
"header_highlights": "Գունանշում",
"header_recommended_by": "Recommended by {provider}",
"context_menu_button_sr": "Open context menu for {title}",
"header_recommended_by": "Առաջարկվում է {provider}",
"context_menu_button_sr": "Բաց կոնտեքստի ընտրացանկը {title}-ի համար",
"section_context_menu_button_sr": "Open the section context menu",
"type_label_visited": "Այցելած",
"type_label_bookmarked": "Էջանշված",
"type_label_recommended": "Trending",
"type_label_recommended": "Թրենդինգ",
"type_label_pocket": "Saved to Pocket",
"type_label_downloaded": "Downloaded",
"menu_action_bookmark": "Էջանիշ",
@ -19,9 +19,9 @@ window.gActivityStreamStrings = {
"menu_action_delete": "Ջնջել Պատմությունից",
"menu_action_pin": "Pin",
"menu_action_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",
"confirm_history_delete_p1": "Վստահ եք, որ ցանկանում եք ջնջել այս էջի ամեն մի օրինակ ձեր պատմությունից?",
"confirm_history_delete_notice_p2": "Այս գործողությունը չի կարող վերացվել.",
"menu_action_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",
@ -32,12 +32,12 @@ window.gActivityStreamStrings = {
"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",
"search_button": "Search",
"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_linktext": "Learn how it works.",
"section_disclaimer_topstories_buttontext": "Okay, got it",
"section_disclaimer_topstories": "Ինտերնետում ամենահետաքրքիր պատմությունները, որոնք ընտրվել են այն, ինչ կարդում եք: Pocket- ից, այժմ Mozilla- ի մի մասը.",
"section_disclaimer_topstories_linktext": "Իմացեք, թե ինչպես է այն աշխատում.",
"section_disclaimer_topstories_buttontext": "Լավ, ստացվեց",
"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",

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

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

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

@ -99,7 +99,7 @@ window.gActivityStreamStrings = {
"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_form_sub_header": "Lanjutkan ke Firefox Sync",
"firstrun_email_input_placeholder": "Surel",
"firstrun_invalid_input": "Surel harus valid",
"firstrun_extra_legal_links": "Dengan melanjutkan, Anda menyetujui {terms} dan {privacy}.",
@ -107,6 +107,6 @@ window.gActivityStreamStrings = {
"firstrun_privacy_notice": "Pernyataan Privasi",
"firstrun_continue_to_login": "Lanjutkan",
"firstrun_skip_login": "Lewati langkah ini",
"context_menu_title": "Open menu",
"context_menu_title": "Buka menu",
"pocket_learn_more": "Pelajari Lebih Lanjut"
};

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

@ -9,7 +9,7 @@ window.gActivityStreamStrings = {
"type_label_visited": "បាន​ចូល​មើល",
"type_label_bookmarked": "បាន​ចំណាំ",
"type_label_recommended": "និន្នាការ",
"type_label_pocket": "Saved to Pocket",
"type_label_pocket": "បានរក្សាទុកទៅ Pocket",
"type_label_downloaded": "បានទាញយក",
"menu_action_bookmark": "ចំណាំ",
"menu_action_remove_bookmark": "លុប​ចំណាំ​ចេញ",
@ -22,9 +22,9 @@ window.gActivityStreamStrings = {
"confirm_history_delete_p1": "តើអ្នកប្រាកដថាអ្នកចង់លុបគ្រប់វត្ថុនៃទំព័រនេះពីប្រវត្តិរបស់អ្នកឬ?",
"confirm_history_delete_notice_p2": "សកម្មភាពនេះមិនអាចមិនធ្វើឡើង​វិញបានទេ។",
"menu_action_save_to_pocket": "រក្សាទុកទៅ 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_delete_pocket": "លុបចេញពី Pocket",
"menu_action_archive_pocket": "ទុកក្នុងប័ណ្ណសារក្នុង Pocket",
"menu_action_show_file_mac_os": "បង្ហាញ​ក្នុង Finder",
"menu_action_show_file_windows": "Open Containing Folder",
"menu_action_show_file_linux": "Open Containing Folder",
"menu_action_show_file_default": "បង្ហាញ​ឯកសារ",
@ -35,22 +35,22 @@ 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_linktext": "Learn how it works.",
"section_disclaimer_topstories": "រឿងដែលគួរឱ្យចាប់អារម្មណ៍បំផុតនៅលើទំព័រ​បណ្ដាញ ដែលត្រូវបានជ្រើសរើសដោយផ្អែកលើអ្វីដែលអ្នកបានអាន។ ពី Pocket ឥឡូវនេះជាផ្នែកមួយនៃ Mozilla។",
"section_disclaimer_topstories_linktext": "ស្វែងយល់​ដំណើរការ​របស់​វា។",
"section_disclaimer_topstories_buttontext": "យល់​ហើយ",
"prefs_home_header": "Firefox Home Content",
"prefs_home_description": "Choose what content you want on your Firefox Home screen.",
"prefs_home_header": "ខ្លឹមសារ Firefox Home",
"prefs_home_description": "ជ្រើសរើស​ខ្លឹមសារ​អ្វីដែលអ្នកចង់បាននៅលើអេក្រង់ Firefox Home របស់អ្នក។",
"prefs_section_rows_option": "{num} row;{num} rows",
"prefs_search_header": "Web Search",
"prefs_topsites_description": "The sites you visit most",
"prefs_search_header": "ការស្វែងរកតាម​អ៊ីនធឺណិត",
"prefs_topsites_description": "គេហទំព័រ​ដែល​អ្នក​មើល​ច្រើន​បំផុត",
"prefs_topstories_description2": "Great content from around the web, personalized for you",
"prefs_topstories_options_sponsored_label": "Sponsored Stories",
"prefs_topstories_sponsored_learn_more": "Learn more",
"prefs_highlights_description": "A selection of sites that youve saved or visited",
"prefs_topstories_sponsored_learn_more": "ស្វែងយល់​បន្ថែម",
"prefs_highlights_description": "ការជ្រើសរើស​គេហទំព័រ​ដែល​អ្នក​បាន​រក្សាទុក ឬ​មើល",
"prefs_highlights_options_visited_label": "ទំព័រ​ដែល​បាន​ទស្សនា",
"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_snippets_description": "បច្ចុប្បន្នភាពពី Mozilla និង Firefox",
"settings_pane_button_label": "ប្តូរទំព័រ ផ្ទាំងថ្មី របស់អ្នកតាមបំណង",
"settings_pane_topsites_header": "សាយកំពូល",
"settings_pane_highlights_header": "រឿងសំខាន់ៗ",
@ -60,18 +60,18 @@ window.gActivityStreamStrings = {
"edit_topsites_edit_button": "កែសម្រួលសាយនេះ",
"topsites_form_add_header": "សាយកំពូលថ្មី",
"topsites_form_edit_header": "កែសម្រួលសាយកំពូល",
"topsites_form_title_label": "Title",
"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": "Use a custom image…",
"topsites_form_preview_button": "Preview",
"topsites_form_use_image_link": "ប្រើ​ប្រាស់​រូបភាព​ផ្ទាល់ខ្លួន...",
"topsites_form_preview_button": "មើល​សាកល្បង",
"topsites_form_add_button": "បន្ថែម",
"topsites_form_save_button": "រក្សាទុក",
"topsites_form_cancel_button": "បោះបង់",
"topsites_form_url_validation": "ត្រូវការ URL ដែលត្រឹមត្រូវ",
"topsites_form_image_validation": "Image failed to load. Try a different URL.",
"topsites_form_image_validation": "មិន​អាច​ផ្ទុក​រូបភាព​បាន​ទេ។ សាកល្បង URL ផ្សេង។",
"pocket_read_more": "ប្រធានបទកំពុងពេញនិយម៖",
"pocket_read_even_more": "មើលរឿងរ៉ាវច្រើនទៀត",
"pocket_more_reccommendations": "More Recommendations",
@ -79,22 +79,22 @@ window.gActivityStreamStrings = {
"pocket_cta_button": "Get Pocket",
"pocket_cta_text": "Save the stories you love in Pocket, and fuel your mind with fascinating reads.",
"highlights_empty_state": "ចាប់ផ្តើមការរុករក ហើយយើងនឹងបង្ហាញអត្ថបទ វីដេអូ និងទំព័រដ៏អស្ចារ្យផ្សេងទៀតដែលអ្នកបានមើល ឬបានចំណាំនៅទីនេះ។",
"topstories_empty_state": "Youve caught up. Check back later for more top stories from {provider}. Cant wait? Select a popular topic to find more great stories from around the web.",
"topstories_empty_state": "អ្នកបានអានរឿងទាំងអស់ហើយ។ ពិនិត្យ​រឿង​ដែល​ពេញនិយមបំផុត​ឡើងវិញ​​ពី {provider}។ មិនអាចរង់ចាំ? ជ្រើសរើសប្រធានបទកំពុងពេញនិយម ដើម្បីស្វែងរករឿងដ៏អស្ចារ្យនៅ​លើ​អ៊ីនធឺណិត។",
"manual_migration_explanation2": "សាកល្បងប្រើ Firefox ជាមួយចំណាំ ប្រវត្តិ និងពាក្យសម្ងាត់ពីកម្មវិធីរុករកផ្សេងទៀត។",
"manual_migration_cancel_button": "ទេ អរគុណ",
"manual_migration_import_button": "នាំចូលឥឡូវនេះ",
"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",
"error_fallback_default_info": "អូ មានអ្វីមួយខុសប្រក្រតីក្នុងការផ្ទុក​ខ្លឹមសារ​នេះ។",
"error_fallback_default_refresh_suggestion": "ផ្ទុកទំព័រឡើងវិញ ដើម្បីព្យាយាមម្ដងទៀត។",
"section_menu_action_remove_section": "លុប​ផ្នែក​ចេញ",
"section_menu_action_collapse_section": "បង្រួមផ្នែក",
"section_menu_action_expand_section": "ពង្រីកផ្នែក",
"section_menu_action_manage_section": "គ្រប់គ្រងផ្នែក",
"section_menu_action_manage_webext": "គ្រប់គ្រងផ្នែកបន្ថែម",
"section_menu_action_add_topsite": "បញ្ចូល​គេហទំព័រ​ពេញនិយម​បំផុត",
"section_menu_action_add_search_engine": "បន្ថែម​ម៉ាស៊ីន​ស្វែងរក",
"section_menu_action_move_up": "​ផ្លាស់ទី​ឡើង​លើ",
"section_menu_action_move_down": "ផ្លាស់ទី​ចុះក្រោម",
"section_menu_action_privacy_notice": "Privacy Notice",
"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",

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

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

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

@ -10,7 +10,7 @@ window.gActivityStreamStrings = {
"type_label_bookmarked": "စာအမှတ်မှတ်ထားသော",
"type_label_recommended": "လူကြိုက်များနေသော",
"type_label_pocket": "Saved to Pocket",
"type_label_downloaded": "Downloaded",
"type_label_downloaded": "ဆွဲချခဲ့သည်",
"menu_action_bookmark": "စာအမှတ်",
"menu_action_remove_bookmark": "စာအမှတ်အားဖယ်ပါ",
"menu_action_open_new_window": "အခြားဝင်းဒိုးတစ်ခုမှဖွင့်ပါ",
@ -22,7 +22,7 @@ window.gActivityStreamStrings = {
"confirm_history_delete_p1": "ယခုစာမျက်နှာနှင့် ဆိုင်သော အရာအားလုံးကို မှတ်တမ်းမှ ဖယ်ရှားလိုပါသလား။",
"confirm_history_delete_notice_p2": "ယခုလုပ်ဆောင်မှုသည် နောက်ပြန်ဆုတ်၍မရသော လုပ်ဆောင်မှု ဖြစ်သည်။",
"menu_action_save_to_pocket": "Pocket သို့ သိမ်းရန်",
"menu_action_delete_pocket": "Delete from Pocket",
"menu_action_delete_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",
@ -34,10 +34,10 @@ window.gActivityStreamStrings = {
"menu_action_remove_download": "Remove from History",
"search_button": "ရှာ",
"search_header": "{search_engine_name} ရှာဖွေမှု",
"search_web_placeholder": "တ်ဘ်ပေါ်တွင် ရှာဖွေခြင်း",
"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_linktext": "Learn how it works.",
"section_disclaimer_topstories_buttontext": "Okay, got it",
"section_disclaimer_topstories_buttontext": "ကောင်းပြီ၊ ရပါပြီ။",
"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",
@ -45,14 +45,14 @@ window.gActivityStreamStrings = {
"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_topstories_sponsored_learn_more": "ပိုမိုလေ့လာရန်",
"prefs_highlights_description": "A selection of sites that youve 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_highlights_options_visited_label": "လည်ပတ်ခဲ့သည့်စာမျက်နှာများ",
"prefs_highlights_options_download_label": "လတ်တလောဆွဲချမှုများ",
"prefs_highlights_options_pocket_label": "ပေါ့ကတ်သို့ စာမျက်နှာများသိမ်းပါ",
"prefs_snippets_description": "Mozilla နှင့် Firefox မှ အပ်ဒိတ်များ",
"settings_pane_button_label": "သင့်တပ်ဗ်အသစ်စာမျက်နှာအား ပြင်ဆင်မည်",
"settings_pane_topsites_header": "ထိပ်တန်းဝတ်ဘ်ဆိုက်များ",
"settings_pane_topsites_header": "ထိပ်တန်းဝဘ်ဆိုက်များ",
"settings_pane_highlights_header": "ဦးစားပေးအကြောင်းအရာများ",
"settings_pane_highlights_options_bookmarks": "စာမှတ်များ",
"settings_pane_snippets_header": "မှတ်စုတိုများ",
@ -60,23 +60,23 @@ window.gActivityStreamStrings = {
"edit_topsites_edit_button": "ဆိုက်အားပြင်မည်",
"topsites_form_add_header": "ထိပ်တန်းဆိုက် အသစ်",
"topsites_form_edit_header": "ထိပ်တန်းဆိုက်ကို တည်းဖြတ်ရန်",
"topsites_form_title_label": "Title",
"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": "Use a custom image…",
"topsites_form_preview_button": "Preview",
"topsites_form_use_image_link": "စိတ်ကြိုက်ပုံတစ်ခုသုံးပါ…",
"topsites_form_preview_button": "အစမ်းမြင်ကွင်း",
"topsites_form_add_button": "ထည့်ရန်",
"topsites_form_save_button": "သိမ်းရန်",
"topsites_form_cancel_button": "မလုပ်တော့ပါ",
"topsites_form_url_validation": "URL အမှန် လိုအပ်သည်",
"topsites_form_image_validation": "Image failed to load. Try a different URL.",
"topsites_form_image_validation": "ပုံတင်ရန် ပျက်ကွက်ခဲ့သည်။ မတူသော URL ကို စမ်းပါ။",
"pocket_read_more": "လူကြိုက်များခေါင်းစဉ်များ",
"pocket_read_even_more": "နောက်ထပ်သတင်းများ ကြည့်ရန်",
"pocket_more_reccommendations": "More Recommendations",
"pocket_how_it_works": "How it works",
"pocket_cta_button": "Get Pocket",
"pocket_more_reccommendations": "ပိုများသောအကြံပြုချက်များ",
"pocket_how_it_works": "ဘယ်လိုအလုပ်လုပ်လဲ",
"pocket_cta_button": "ပေါ့ကပ်ရယူပါ",
"pocket_cta_text": "Save the stories you love in Pocket, and fuel your mind with fascinating reads.",
"highlights_empty_state": "Start browsing, and well show some of the great articles, videos, and other pages youve recently visited or bookmarked here.",
"topstories_empty_state": "Youve caught up. Check back later for more top stories from {provider}. Cant wait? Select a popular topic to find more great stories from around the web.",
@ -84,13 +84,13 @@ window.gActivityStreamStrings = {
"manual_migration_cancel_button": "မလိုတော့ပါ၊ ကျေးဇူးတင်ပါသည်။",
"manual_migration_import_button": "ထည့်သွင်းရန်",
"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",
"error_fallback_default_refresh_suggestion": "ထပ်ကြိုးစားရန် စာမျက်နှာကို ပြန်တင်ပါ",
"section_menu_action_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_expand_section": "အပိုင်းတိုးချဲ့ပါ",
"section_menu_action_manage_section": "အပိုင်းများကိုစီမံရန်",
"section_menu_action_manage_webext": "Manage Extension",
"section_menu_action_add_topsite": "Add Top Site",
"section_menu_action_add_topsite": "ထိပ်တန်းဆိုက်များကို ပေါင်းထည့်ပါ",
"section_menu_action_add_search_engine": "Add Search Engine",
"section_menu_action_move_up": "Move Up",
"section_menu_action_move_down": "Move Down",
@ -98,59 +98,15 @@ window.gActivityStreamStrings = {
"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_header": "သင့်အီးမေလ်းအားထည့်ပါ",
"firstrun_form_sub_header": "to continue to Firefox Sync",
"firstrun_email_input_placeholder": "Email",
"firstrun_invalid_input": "Valid email required",
"firstrun_email_input_placeholder": "အီးမေးလ်",
"firstrun_invalid_input": "အီးမေးလ်အမှန် လိုအပ်သည်",
"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",
"context_menu_title": "Open menu",
"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": "ယခုနေရာအား Firefox မှ အသင့်လျော်ဆုံး သင်သွားလည်ခဲ့ဖူးသော စာအမှတ်များ၊ ဆောင်းပါးများ၊ ရုပ်ရှင်များ နှင့် စာမျက်နှာများအား ပြသဖို့အသုံးပြုမည်ဖြစ်ပါတယ်။",
"welcome_label": "သင့် အသားပေးဖော်ပြချက်များကိုသတိထားမည်",
"time_label_less_than_minute": "<1မီတာ",
"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": "မှတ်ထားလိုသော သို့မဟုတ် ပြန်ဖွင့်လိုသော လည်ပတ်မှတ်တမ်းထဲမှ တချို့ကို Firefox က ပြပါမည်။",
"settings_pane_highlights_options_visited": "လည်ပတ်ထားသော ဆိုက်များ",
"settings_pane_snippets_body": "Mozilla မှ Firefox အကြောင်း၊ အင်တာနက်ယဉ်ကျေးမှုနှင့် အခါအားလျော်စွာ ဖြစ်ပေါ်လာသော ကျပန်း meme စသည့် နောက်ဆုံးရသတင်းများကို ဖတ်ရှုပါ။",
"settings_pane_done_button": "ပြီးပြီ",
"edit_topsites_button_label": "သင့်ထိပ်တန်းဆိုက် အမြင်အားပြင်ဆင်ပါ",
"edit_topsites_showmore_button": "ထပ်ပြပါ",
"edit_topsites_showless_button": "ချုံ့ပြရန်",
"edit_topsites_done_button": "ပြီးပြီ",
"edit_topsites_pin_button": "တ်ဆိုဒ်အားpinလုပ်ထားမည်",
"edit_topsites_unpin_button": "ယခုဆိုက်ကို တွယ်ဖြုတ်ရန်",
"edit_topsites_dismiss_button": "ဆိုက်အားဖျက်လိုက်မည်",
"edit_topsites_add_button": "ထည့်ရန်"
"pocket_learn_more": "ပိုမိုလေ့လာရန်"
};

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

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

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

@ -107,6 +107,6 @@ window.gActivityStreamStrings = {
"firstrun_privacy_notice": "Personvernbestemmelser",
"firstrun_continue_to_login": "Fortsett",
"firstrun_skip_login": "Hopp over dette trinnet",
"context_menu_title": "Open menu",
"context_menu_title": "Åpne meny",
"pocket_learn_more": "Les mer"
};

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

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

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

@ -107,7 +107,7 @@ window.gActivityStreamStrings = {
"firstrun_privacy_notice": "uwagi dotyczące prywatności",
"firstrun_continue_to_login": "Kontynuuj",
"firstrun_skip_login": "Pomiń",
"context_menu_title": "Open menu",
"context_menu_title": "Otwórz menu",
"prefs_restore_defaults_button": "Przywróć domyślne",
"settings_pane_header": "Ustawienia nowej karty",
"settings_pane_body2": "Wybierz, co wyświetlać na tej stronie",

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

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

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

@ -107,6 +107,6 @@ window.gActivityStreamStrings = {
"firstrun_privacy_notice": "Politica de confidențialitate",
"firstrun_continue_to_login": "Continuă",
"firstrun_skip_login": "Omite acest pas",
"context_menu_title": "Open menu",
"context_menu_title": "Deschide meniul",
"pocket_learn_more": "Află mai multe"
};

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

@ -75,7 +75,7 @@ window.gActivityStreamStrings = {
"pocket_read_more": "ప్రముఖ అంశాలు:",
"pocket_read_even_more": "మరిన్ని కథలను వీక్షించండి",
"pocket_more_reccommendations": "మరిన్ని సిఫారసులు",
"pocket_how_it_works": "How it works",
"pocket_how_it_works": "ఇది ఎలా పనిచేస్తుంది",
"pocket_cta_button": "Get Pocket",
"pocket_cta_text": "Save the stories you love in Pocket, and fuel your mind with fascinating reads.",
"highlights_empty_state": "విహారించడం మొదలుపెట్టండి, మీరు ఈమధ్య చూసిన లేదా ఇష్టపడిన గొప్ప వ్యాసాలను, వీడియోలను, ఇతర పేజీలను ఇక్కడ చూపిస్తాం.",

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

@ -101,8 +101,8 @@ window.gActivityStreamStrings = {
"firstrun_form_header": "ป้อนอีเมลของคุณ",
"firstrun_form_sub_header": "เพื่อดำเนินการต่อไปยัง Firefox Sync",
"firstrun_email_input_placeholder": "อีเมล",
"firstrun_invalid_input": "Valid email required",
"firstrun_extra_legal_links": "By proceeding, you agree to the {terms} and {privacy}.",
"firstrun_invalid_input": "ต้องการอีเมลที่ถูกต้อง",
"firstrun_extra_legal_links": "เพื่อดำเนินการต่อ คุณยอมรับ {terms} และ {privacy}",
"firstrun_terms_of_service": "เงื่อนไขการให้บริการ",
"firstrun_privacy_notice": "ประกาศความเป็นส่วนตัว",
"firstrun_continue_to_login": "ดำเนินการต่อ",

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

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

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

@ -10,7 +10,7 @@ window.gActivityStreamStrings = {
"type_label_bookmarked": "Bookmarked",
"type_label_recommended": "Nagte-trend",
"type_label_pocket": "I-save sa Pocket",
"type_label_downloaded": "Downloaded",
"type_label_downloaded": "Nai-download na",
"menu_action_bookmark": "Bookmark",
"menu_action_remove_bookmark": "Alisin ang Bookmark",
"menu_action_open_new_window": "Buksan sa isang Bagong Window",
@ -24,14 +24,14 @@ window.gActivityStreamStrings = {
"menu_action_save_to_pocket": "I-save sa Pocket",
"menu_action_delete_pocket": "I-delete sa Pocket",
"menu_action_archive_pocket": "Mag-archive sa 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": "Ipakita sa Finder",
"menu_action_show_file_windows": "Buksan ang Naglalaman na Folder",
"menu_action_show_file_linux": "Buksan ang Naglalaman na Folder",
"menu_action_show_file_default": "Ipakita ang File",
"menu_action_open_file": "Buksan ang File",
"menu_action_copy_download_link": "Kopyahin ang Download Link",
"menu_action_go_to_download_page": "Pumunta sa Pahina ng mga Download",
"menu_action_remove_download": "Burahin sa Kasaysayan",
"search_button": "Hanapin",
"search_header": "{search_engine_name} Hanapin",
"search_web_placeholder": "Hanapin sa Web",
@ -47,9 +47,9 @@ window.gActivityStreamStrings = {
"prefs_topstories_options_sponsored_label": "Sponsored Stories",
"prefs_topstories_sponsored_learn_more": "Matuto ng higit pa",
"prefs_highlights_description": "Ang isang seleksyon ng mga site na iyong nai-save o binisita",
"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": "Mga pahinang binisita",
"prefs_highlights_options_download_label": "Pinakabagong Nai-download",
"prefs_highlights_options_pocket_label": "Mga Pahina na Nai-save sa Pocket",
"prefs_snippets_description": "Mga Update mula sa Mozilla at Firefox",
"settings_pane_button_label": "I-customize ang iyong pahina ng Bagong Tab",
"settings_pane_topsites_header": "Tuktok na mga Site",
@ -75,8 +75,8 @@ window.gActivityStreamStrings = {
"pocket_read_more": "Tanyag na mga paksa:",
"pocket_read_even_more": "Tignan ang higit pang mga kuwento",
"pocket_more_reccommendations": "More Recommendations",
"pocket_how_it_works": "How it works",
"pocket_cta_button": "Get Pocket",
"pocket_how_it_works": "Paano gamitin",
"pocket_cta_button": "Kunin ang Pocket",
"pocket_cta_text": "Save the stories you love in Pocket, and fuel your mind with fascinating reads.",
"highlights_empty_state": "Magsimulang mag-browse, at ipapakita namin ang ilan sa mga magagandang artikulo, video, at iba pang mga pahina na kamakailan mong binisita o na-bookmark dito.",
"topstories_empty_state": "Nakahabol ka na. Bumalik sa ibang pagkakataon para sa higit pang mga nangungunang kuwento mula sa {provider}. Hindi makapaghintay? Pumili ng isang tanyag na paksa upang makahanap ng higit pang mahusay na mga kuwento mula sa buong web.",
@ -91,21 +91,22 @@ window.gActivityStreamStrings = {
"section_menu_action_manage_section": "Pamahalaan ang Seksyon",
"section_menu_action_manage_webext": "Manage Extension",
"section_menu_action_add_topsite": "Magdagdag ng Nangungunang Site",
"section_menu_action_add_search_engine": "Add Search Engine",
"section_menu_action_add_search_engine": "Magdagdag ng Search Engine",
"section_menu_action_move_up": "Ilipat Up",
"section_menu_action_move_down": "Ilipat sa Baba",
"section_menu_action_privacy_notice": "Paunawa sa Privacy",
"firstrun_title": "Take Firefox with You",
"firstrun_title": "Isama ang Firefox saan man",
"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_header": "Ilagay ang iyong email",
"firstrun_form_sub_header": "to continue to Firefox Sync",
"firstrun_email_input_placeholder": "Email",
"firstrun_invalid_input": "Valid email required",
"firstrun_invalid_input": "Balidong email ang kinakailangan",
"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",
"context_menu_title": "Open menu"
"firstrun_privacy_notice": "Abisong Pangbribasiya",
"firstrun_continue_to_login": "Magpatuloy",
"firstrun_skip_login": "Laktawan ang hakbang na ito",
"context_menu_title": "Buksan ang menu",
"pocket_learn_more": "Alamin Pa"
};

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

@ -8,7 +8,7 @@ describe("asrouter", () => {
let store;
let asrouterContent;
beforeEach(() => {
sandbox = sinon.sandbox.create();
sandbox = sinon.createSandbox();
store = createStore(combineReducers(reducers));
sandbox.spy(store, "subscribe");
});
@ -26,7 +26,7 @@ describe("asrouter", () => {
// Dispatch another irrelevant event to make sure we don't initialize twice.
store.dispatch({type: at.PREF_CHANGED, data: {name: "foo", value: "bar"}});
assert.calledOnce(asrouterContent.init);
assert.calledWith(asrouterContent.init, store);
});
it("should do nothing if ASRouter is not initialized", () => {
const addStub = sandbox.stub(global.document.body.classList, "add");

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

@ -80,7 +80,7 @@ describe("ASRouter", () => {
messageImpressions = {};
providerImpressions = {};
previousSessionEnd = 100;
sandbox = sinon.sandbox.create();
sandbox = sinon.createSandbox();
sandbox.spy(ASRouterPreferences, "init");
sandbox.spy(ASRouterPreferences, "uninit");
@ -840,7 +840,7 @@ describe("ASRouter", () => {
});
it("should call openLinkIn with the correct params on OPEN_URL", async () => {
let [testMessage] = Router.state.messages;
testMessage.button_action = {type: "OPEN_URL", data: {args: "some/url.com"}};
testMessage.button_action = {type: "OPEN_URL", data: {args: "some/url.com", where: "tabshifted"}};
const msg = fakeExecuteUserAction(testMessage.button_action);
await Router.onMessage(msg);
@ -873,7 +873,7 @@ describe("ASRouter", () => {
assert.calledOnce(msg.target.browser.ownerGlobal.openLinkIn);
assert.calledWith(msg.target.browser.ownerGlobal.openLinkIn,
"some/url", "tabshifted", {"private": false, "triggeringPrincipal": undefined});
"some/url", "current", {"private": false, "triggeringPrincipal": undefined});
});
});

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

@ -11,7 +11,7 @@ describe("ASRouterFeed", () => {
let storage;
beforeEach(() => {
Router = new _ASRouter({providers: [FAKE_LOCAL_PROVIDER]});
sandbox = sinon.sandbox.create();
sandbox = sinon.createSandbox();
storage = {
get: sandbox.stub().returns(Promise.resolve([])),
set: sandbox.stub().returns(Promise.resolve()),

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

@ -24,7 +24,7 @@ describe("ASRouterPreferences", () => {
beforeEach(() => {
ASRouterPreferences = new _ASRouterPreferences();
sandbox = sinon.sandbox.create();
sandbox = sinon.createSandbox();
addObserverStub = sandbox.stub(global.Services.prefs, "addObserver");
stringPrefStub = sandbox.stub(global.Services.prefs, "getStringPref");
FAKE_PROVIDERS.forEach(provider => {

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

@ -10,7 +10,7 @@ describe("#CachedTargetingGetter", () => {
let frecentStub;
let topsitesCache;
beforeEach(() => {
sandbox = sinon.sandbox.create();
sandbox = sinon.createSandbox();
clock = sinon.useFakeTimers();
frecentStub = sandbox.stub(global.NewTabUtils.activityStreamProvider, "getTopFrecentSites");
sandbox.stub(global.Cu, "reportError");

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

@ -17,7 +17,7 @@ describe("ASRouterTriggerListeners", () => {
}
beforeEach(async () => {
sandbox = sinon.sandbox.create();
sandbox = sinon.createSandbox();
registerWindowNotificationStub = sandbox.stub(global.Services.ww, "registerNotification");
unregisterWindoNotificationStub = sandbox.stub(global.Services.ww, "unregisterNotification");
existingWindow = {gBrowser: {addTabsProgressListener: sandbox.stub(), removeTabsProgressListener: sandbox.stub()}};

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

@ -31,7 +31,7 @@ describe("CFRPageActions", () => {
];
beforeEach(() => {
sandbox = sinon.sandbox.create();
sandbox = sinon.createSandbox();
clock = sandbox.useFakeTimers();
fakeRecommendation = {

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

@ -232,7 +232,7 @@ describe("MessageLoaderUtils", () => {
let installAddonStub;
beforeEach(() => {
globals = new GlobalOverrider();
sandbox = sinon.sandbox.create();
sandbox = sinon.createSandbox();
getInstallStub = sandbox.stub();
installAddonStub = sandbox.stub();
globals.set("AddonManager", {

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

@ -6,7 +6,7 @@ import React from "react";
describe("convertLinks", () => {
let sandbox;
beforeEach(() => {
sandbox = sinon.sandbox.create();
sandbox = sinon.createSandbox();
});
afterEach(() => {
sandbox.restore();
@ -43,6 +43,14 @@ describe("convertLinks", () => {
assert.propertyVal(result.cta.props, "data-args", cta.args);
assert.propertyVal(result.cta.props, "onClick", stub);
});
it("should follow openNewWindow prop", () => {
const cta = {url: "https://foo.com"};
const newWindow = convertLinks({cta}, sandbox.stub(), false, true);
const sameWindow = convertLinks({cta}, sandbox.stub(), false);
assert.propertyVal(newWindow.cta.props, "target", "_blank");
assert.propertyVal(sameWindow.cta.props, "target", "");
});
it("should allow for custom elements & styles", () => {
const wrapper = mount(<RichText customElements={{em: <em style={{color: "#f05"}} />}} text="<em>foo</em>" localization_id="text" />);

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

@ -17,7 +17,7 @@ describe("ASRouterUtils", () => {
let fakeSendAsyncMessage;
beforeEach(() => {
global = new GlobalOverrider();
sandbox = sinon.sandbox.create();
sandbox = sinon.createSandbox();
fakeSendAsyncMessage = sandbox.stub();
global.set({RPMSendAsyncMessage: fakeSendAsyncMessage});
});
@ -43,7 +43,7 @@ describe("ASRouterUISurface", () => {
let fakeDocument;
beforeEach(() => {
sandbox = sinon.sandbox.create();
sandbox = sinon.createSandbox();
fakeDocument = {
location: {href: ""},
_listeners: new Set(),

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

@ -37,7 +37,7 @@ describe("EOYSnippet", () => {
}
beforeEach(() => {
sandbox = sinon.sandbox.create();
sandbox = sinon.createSandbox();
wrapper = mountAndCheckProps();
});

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

@ -0,0 +1,65 @@
import {FXASignupSnippet} from "content-src/asrouter/templates/FXASignupSnippet/FXASignupSnippet";
import {mount} from "enzyme";
import React from "react";
import schema from "content-src/asrouter/templates/SubmitFormSnippet/SubmitFormSnippet.schema.json";
import {SnippetsTestMessageProvider} from "lib/SnippetsTestMessageProvider.jsm";
const DEFAULT_CONTENT = SnippetsTestMessageProvider.getMessages().find(msg => msg.template === "fxa_signup_snippet").content;
describe("FXASignupSnippet", () => {
let sandbox;
function mountAndCheckProps(content = {}) {
const props = {
id: "foo123",
content: Object.assign({}, DEFAULT_CONTENT, content),
onBlock() {},
onDismiss: sandbox.stub(),
sendUserActionTelemetry: sandbox.stub(),
onAction: sandbox.stub(),
};
const comp = mount(<FXASignupSnippet {...props} />);
// Check schema with the final props the component receives (including defaults)
assert.jsonSchema(comp.children().get(0).props.content, schema);
return comp;
}
beforeEach(() => {
sandbox = sinon.sandbox.create();
});
afterEach(() => {
sandbox.restore();
});
it("should have the correct defaults", () => {
const defaults = {
id: "foo123",
onBlock() {},
content: {},
onDismiss: sandbox.stub(),
sendUserActionTelemetry: sandbox.stub(),
onAction: sandbox.stub(),
};
const wrapper = mount(<FXASignupSnippet {...defaults} />);
// SendToDeviceSnippet is a wrapper around SubmitFormSnippet
const {props} = wrapper.children().get(0);
assert.propertyVal(props.content, "form_action", "https://accounts.firefox.com/");
assert.propertyVal(props.content, "scene1_button_label", "Learn More");
assert.propertyVal(props.content, "scene2_button_label", "Sign Me Up");
assert.propertyVal(props.content, "scene2_email_placeholder_text", "Your Email Here");
assert.propertyVal(props.content.hidden_inputs, "action", "email");
assert.propertyVal(props.content.hidden_inputs, "context", "fx_desktop_v3");
assert.propertyVal(props.content.hidden_inputs, "entrypoint", "snippets");
assert.propertyVal(props.content.hidden_inputs, "service", "sync");
assert.propertyVal(props.content.hidden_inputs, "utm_source", "snippet");
});
it("should navigate to scene2", () => {
const wrapper = mountAndCheckProps({});
wrapper.find(".ASRouterButton").simulate("click");
assert.lengthOf(wrapper.find(".mainInput"), 1);
});
});

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

@ -26,7 +26,7 @@ describe("OnboardingMessage", () => {
let sandbox;
beforeEach(() => {
globals = new GlobalOverrider();
sandbox = sinon.sandbox.create();
sandbox = sinon.createSandbox();
globals.set("FxAccountsConfig", {promiseEmailFirstURI: sandbox.stub().resolves("some/url")});
});
afterEach(() => {
@ -41,6 +41,7 @@ describe("OnboardingMessage", () => {
});
it("should validate all messages from OnboardingMessageProvider", async () => {
const messages = await OnboardingMessageProvider.getUntranslatedMessages();
messages.forEach(msg => assert.jsonSchema(msg.content, schema));
// FXA_1 doesn't have content - so filter it out
messages.filter(msg => msg.content).forEach(msg => assert.jsonSchema(msg.content, schema));
});
});

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

@ -43,12 +43,14 @@ describe("SendToDeviceSnippet", () => {
onAction: sandbox.stub(),
form_method: "POST",
};
assert.jsonSchema(props.content, schema);
return mount(<SendToDeviceSnippet {...props} />);
const comp = mount(<SendToDeviceSnippet {...props} />);
// Check schema with the final props the component receives (including defaults)
assert.jsonSchema(comp.children().get(0).props.content, schema);
return comp;
}
beforeEach(() => {
sandbox = sinon.sandbox.create();
sandbox = sinon.createSandbox();
jsonResponse = {status: "ok"};
fetchStub = sandbox.stub(global, "fetch")
.returns(Promise.resolve({json: () => Promise.resolve(jsonResponse)}));
@ -57,6 +59,30 @@ describe("SendToDeviceSnippet", () => {
sandbox.restore();
});
it("should have the correct defaults", () => {
const defaults = {
id: "foo123",
onBlock() {},
content: {},
onDismiss: sandbox.stub(),
sendUserActionTelemetry: sandbox.stub(),
onAction: sandbox.stub(),
form_method: "POST",
};
const wrapper = mount(<SendToDeviceSnippet {...defaults} />);
// SendToDeviceSnippet is a wrapper around SubmitFormSnippet
const {props} = wrapper.children().get(0);
assert.propertyVal(props.content, "scene1_button_label", "Learn More");
assert.propertyVal(props.content, "scene2_dismiss_button_text", "Dismiss");
assert.propertyVal(props.content, "scene2_button_label", "Send");
assert.propertyVal(props.content, "scene2_input_placeholder", "YOUR EMAIL HERE");
assert.propertyVal(props.content, "locale", "en-US");
assert.propertyVal(props.content, "country", "us");
assert.propertyVal(props.content, "include_sms", false);
assert.propertyVal(props.content, "message_id_email", "");
});
describe("form input", () => {
it("should set the input type to text if content.include_sms is true", () => {
const wrapper = mountAndCheckProps({include_sms: true});

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

@ -29,7 +29,7 @@ describe("SimpleSnippet", () => {
}
beforeEach(() => {
sandbox = sinon.sandbox.create();
sandbox = sinon.createSandbox();
onBlockStub = sandbox.stub();
sendUserActionTelemetryStub = sandbox.stub();
});

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

@ -37,7 +37,7 @@ describe("SubmitFormSnippet", () => {
}
beforeEach(() => {
sandbox = sinon.sandbox.create();
sandbox = sinon.createSandbox();
onBlockStub = sandbox.stub();
});

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

@ -9,7 +9,7 @@ describe("_PerfService", () => {
let fakePerfObj;
beforeEach(() => {
sandbox = sinon.sandbox.create();
sandbox = sinon.createSandbox();
fakePerfObj = new FakePerformance();
perfService = new _PerfService({performanceObj: fakePerfObj});
});

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

@ -3,7 +3,6 @@ import {ErrorBoundary} from "content-src/components/ErrorBoundary/ErrorBoundary"
import React from "react";
import {Search} from "content-src/components/Search/Search";
import {shallow} from "enzyme";
import {StartupOverlay} from "content-src/components/StartupOverlay/StartupOverlay";
describe("<Base>", () => {
let DEFAULT_PROPS = {store: {getState: () => {}}, App: {initialized: true}, Prefs: {values: {}}, Sections: [], dispatch: () => {}};
@ -38,22 +37,4 @@ describe("<BaseContent>", () => {
assert.isTrue(wrapper.find(Search).parent().is(ErrorBoundary));
});
it("should render a StartupOverlay when on about:welcome (props are sent as true)", () => {
const isFirstrunProps =
Object.assign({}, DEFAULT_PROPS, {isFirstrun: true});
const wrapper = shallow(<BaseContent {...isFirstrunProps} />);
assert.ok(wrapper.find(StartupOverlay).exists());
});
it("should not render a StartupOverlay when not on about:welcome (props are sent as false)", () => {
const notFirstrunProps =
Object.assign({}, DEFAULT_PROPS, {isFirstrun: false});
const wrapper = shallow(<BaseContent {...notFirstrunProps} />);
assert.ok(!wrapper.find(StartupOverlay).exists());
});
});

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

@ -28,7 +28,7 @@ describe("<ComponentPerfTimer>", () => {
beforeEach(() => {
mockRaf = createMockRaf();
sandbox = sinon.sandbox.create();
sandbox = sinon.createSandbox();
sandbox.stub(window, "requestAnimationFrame").callsFake(mockRaf.raf);
wrapper = shallow(<ComponentPerfTimer {...DEFAULT_PROPS}><InnerEl /></ComponentPerfTimer>);
});

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

@ -354,7 +354,7 @@ describe("<Section>", () => {
it("should send an impression if props are updated and props.rows are different", () => {
const props = {dispatch: sinon.spy()};
wrapper = renderSection(props);
props.dispatch.reset();
props.dispatch.resetHistory();
// New rows
wrapper.setProps(Object.assign({},
@ -367,7 +367,7 @@ describe("<Section>", () => {
it("should not send an impression if props are updated but props.rows are the same", () => {
const props = {dispatch: sinon.spy()};
wrapper = renderSection(props);
props.dispatch.reset();
props.dispatch.resetHistory();
// Only update the disclaimer prop
wrapper.setProps(Object.assign({},
@ -380,7 +380,7 @@ describe("<Section>", () => {
it("should not send an impression if props are updated and props.rows are the same but section is collapsed", () => {
const props = {dispatch: sinon.spy()};
wrapper = renderSection(props);
props.dispatch.reset();
props.dispatch.resetHistory();
// New rows and collapsed
wrapper.setProps(Object.assign({},
@ -407,7 +407,7 @@ describe("<Section>", () => {
it("should not send an impression if props are updated but GUIDs are the same", () => {
const props = {dispatch: sinon.spy()};
wrapper = renderSection(props);
props.dispatch.reset();
props.dispatch.resetHistory();
wrapper.setProps(Object.assign({},
FAKE_TOPSTORIES_SECTION_PROPS,

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

@ -1,14 +1,19 @@
import {actionCreators as ac, actionTypes as at} from "common/Actions.jsm";
import {mountWithIntl} from "test/unit/utils";
import React from "react";
import {_StartupOverlay as StartupOverlay} from "content-src/components/StartupOverlay/StartupOverlay";
import {_StartupOverlay as StartupOverlay} from "content-src/asrouter/templates/StartupOverlay/StartupOverlay";
describe("<StartupOverlay>", () => {
let wrapper;
let dispatch;
let onReady;
let onBlock;
beforeEach(() => {
dispatch = sinon.stub();
wrapper = mountWithIntl(<StartupOverlay dispatch={dispatch} />);
onReady = sinon.stub();
onBlock = sinon.stub();
wrapper = mountWithIntl(<StartupOverlay onBlock={onBlock} onReady={onReady} dispatch={dispatch} />);
});
it("should not render if state.show is false", () => {

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

@ -33,7 +33,7 @@ describe("<TopSites>", () => {
let sandbox;
beforeEach(() => {
sandbox = sinon.sandbox.create();
sandbox = sinon.createSandbox();
});
afterEach(() => {
@ -666,7 +666,7 @@ describe("<TopSiteForm>", () => {
let sandbox;
function setup(props = {}) {
sandbox = sinon.sandbox.create();
sandbox = sinon.createSandbox();
const customProps = Object.assign({}, {onClose: sandbox.spy(), dispatch: sandbox.spy()}, props);
wrapper = mountWithIntl(<TopSiteForm {...customProps} />);
}
@ -1098,7 +1098,7 @@ describe("<TopSiteList>", () => {
const link = {url: "https://foo.com", customScreenshotURL: "foo"};
const title = "foo";
instance.onDragEvent({type: "dragstart"}, index, link, title);
dispatch.reset();
dispatch.resetHistory();
instance.onDragEvent({type: "drop"}, 3);
assert.calledTwice(dispatch);
assert.calledWith(dispatch, {

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

@ -96,7 +96,7 @@ describe("initStore", () => {
rehydrationMiddleware(store)(next)(requestAction);
next.reset();
next.resetHistory();
rehydrationMiddleware(store)(next)({type: at.INIT});
assert.calledWith(next, requestAction);
});
@ -123,7 +123,7 @@ describe("initStore", () => {
it("should allow actions from main to go through after MERGE_STORE_ACTION has been received", () => {
const next = sinon.spy();
rehydrationMiddleware(store)(next)({type: MERGE_STORE_ACTION});
next.reset();
next.resetHistory();
const action = ac.AlsoToOneContent({type: "FOO"}, 123);
rehydrationMiddleware(store)(next)(action);
@ -160,7 +160,7 @@ describe("initStore", () => {
assert.notCalled(next);
assert.equal(testStore._earlyActionQueue.length, 2);
next.reset();
next.resetHistory();
// Receiving action from main would empty the queue
queueEarlyMessageMiddleware(testStore)(next)(fromMainAction);
@ -170,7 +170,7 @@ describe("initStore", () => {
assert.equal(next.secondCall.args[0], action);
assert.equal(next.thirdCall.args[0], action);
assert.equal(testStore._earlyActionQueue.length, 0);
next.reset();
next.resetHistory();
// New action should go through immediately
queueEarlyMessageMiddleware(testStore)(next)(action);

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

@ -13,7 +13,7 @@ import {reducers} from "common/Reducers.jsm";
describe("SnippetsMap", () => {
let snippetsMap;
let dispatch;
let sandbox = sinon.sandbox.create();
let sandbox = sinon.createSandbox();
let globals;
beforeEach(() => {
dispatch = sandbox.spy();
@ -185,7 +185,7 @@ describe("SnippetsProvider", () => {
let globals;
let dispatch;
beforeEach(() => {
sandbox = sinon.sandbox.create();
sandbox = sinon.createSandbox();
sandbox.stub(window, "fetch").returns(Promise.resolve(""));
globals = new GlobalOverrider();
globals.set("RPMAddMessageListener", sandbox.spy());
@ -300,7 +300,7 @@ describe("SnippetsProvider", () => {
await snippets.init({connect: false, appData: {version: 5, snippetsURL: "foo.com"}});
assert.calledOnce(global.gSnippetsMap.clear);
global.gSnippetsMap.clear.reset();
global.gSnippetsMap.clear.resetHistory();
global.gSnippetsMap.delete("snippets-cached-version");
await snippets.init({connect: false, appData: {version: 5, snippetsURL: "foo.com"}});
assert.calledOnce(global.gSnippetsMap.clear);
@ -420,7 +420,7 @@ describe("addSnippetsSubscriber", () => {
let snippets;
beforeEach(() => {
sandbox = sinon.sandbox.create();
sandbox = sinon.createSandbox();
store = createStore(combineReducers(reducers));
sandbox.spy(store, "subscribe");
({snippets} = addSnippetsSubscriber(store));

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

@ -9,7 +9,7 @@
// function Fake() {}
// beforeEach(() => {
// sandbox = sinon.sandbox.create();
// sandbox = sinon.createSandbox();
// ({ActivityStream, PREFS_CONFIG} = injector({
// "lib/AboutPreferences.jsm": {AboutPreferences: Fake},
// "lib/ManualMigration.jsm": {ManualMigration: Fake},

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

@ -39,7 +39,7 @@ describe("ActivityStreamMessageChannel", () => {
describe("portID validation", () => {
let sandbox;
beforeEach(() => {
sandbox = sinon.sandbox.create();
sandbox = sinon.createSandbox();
sandbox.spy(global.Cu, "reportError");
});
afterEach(() => {
@ -254,7 +254,7 @@ describe("ActivityStreamMessageChannel", () => {
describe("#onMessage", () => {
let sandbox;
beforeEach(() => {
sandbox = sinon.sandbox.create();
sandbox = sinon.createSandbox();
sandbox.spy(global.Cu, "reportError");
});
afterEach(() => sandbox.restore());

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

@ -70,7 +70,7 @@ describe("ActivityStreamPrefs", () => {
let defaultPrefs;
let sandbox;
beforeEach(() => {
sandbox = sinon.sandbox.create();
sandbox = sinon.createSandbox();
defaultPrefs = new DefaultPrefs(TEST_PREF_CONFIG);
sinon.stub(defaultPrefs, "set");
});

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

@ -8,7 +8,7 @@ describe("ActivityStreamStorage", () => {
let indexedDB;
let storage;
beforeEach(() => {
sandbox = sinon.sandbox.create();
sandbox = sinon.createSandbox();
indexedDB = {
open: sandbox.stub().resolves({}),
deleteDatabase: sandbox.stub().resolves(),

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