зеркало из https://github.com/mozilla/gecko-dev.git
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:
Родитель
f7dfd8df9e
Коммит
52414287aa
|
@ -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 browser’s 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
|
||||
|
|
Разница между файлами не показана из-за своего большого размера
Загрузить разницу
|
@ -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 you’ve 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": "You’ve caught up. Check back later for more top stories from {provider}. Can’t wait? Select a popular topic to find more great stories from around the web.",
|
||||
"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 you’ve saved or visited",
|
||||
"prefs_highlights_options_visited_label": "Visited Pages",
|
||||
"prefs_highlights_options_download_label": "Most Recent Download",
|
||||
"prefs_highlights_options_pocket_label": "Pages Saved to Pocket",
|
||||
"prefs_snippets_description": "Updates from Mozilla and Firefox",
|
||||
"prefs_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 we’ll show some of the great articles, videos, and other pages you’ve recently visited or bookmarked here.",
|
||||
"topstories_empty_state": "You’ve caught up. Check back later for more top stories from {provider}. Can’t wait? Select a popular topic to find more great stories from around the web.",
|
||||
|
@ -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(),
|
||||
|
|
Некоторые файлы не были показаны из-за слишком большого количества измененных файлов Показать больше
Загрузка…
Ссылка в новой задаче