зеркало из https://github.com/mozilla/gecko-dev.git
Merge mozilla-central to inbound. a=merge CLOSED TREE
This commit is contained in:
Коммит
494d8952b9
|
@ -1355,10 +1355,11 @@ void
|
|||
Accessible::Value(nsString& aValue) const
|
||||
{
|
||||
const nsRoleMapEntry* roleMapEntry = ARIARoleMap();
|
||||
if (!roleMapEntry)
|
||||
return;
|
||||
|
||||
if (roleMapEntry->valueRule != eNoValue) {
|
||||
if ((roleMapEntry && roleMapEntry->valueRule != eNoValue) ||
|
||||
// Bug 1475376: aria-valuetext should also be supported for implicit ARIA
|
||||
// roles; e.g. <input type="range">.
|
||||
HasNumericValue()) {
|
||||
// aria-valuenow is a number, and aria-valuetext is the optional text
|
||||
// equivalent. For the string value, we will try the optional text
|
||||
// equivalent first.
|
||||
|
@ -1374,6 +1375,10 @@ Accessible::Value(nsString& aValue) const
|
|||
return;
|
||||
}
|
||||
|
||||
if (!roleMapEntry) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Value of textbox is a textified subtree.
|
||||
if (roleMapEntry->Is(nsGkAtoms::textbox)) {
|
||||
nsTextEquivUtils::GetTextEquivFromSubtree(this, aValue);
|
||||
|
|
|
@ -26,6 +26,7 @@
|
|||
testValue("pr_one", "100%", 1, 0, 1, 0);
|
||||
testValue("pr_42", "100%", 42, 0, 1, 0);
|
||||
testValue("pr_21", "50%", 21, 0, 42, 0);
|
||||
testValue("pr_valuetext", "value", 0, 0, 1, 0);
|
||||
|
||||
SimpleTest.finish();
|
||||
}
|
||||
|
@ -56,5 +57,7 @@
|
|||
<progress id="pr_one" value="1">this will be read by legacy browsers</progress>
|
||||
<progress id="pr_42" value="42">this will be read by legacy browsers</progress>
|
||||
<progress id="pr_21" value="21" max="42">this will be read by legacy browsers</progress>
|
||||
<!-- aria-valuetext should work due to implicit progressbar role (bug 1475376) -->
|
||||
<progress id="pr_valuetext" aria-valuetext="value">this will be read by legacy browsers</progress>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
@ -25,6 +25,7 @@
|
|||
testValue("range_step", "50", 50, 0, 100, 1);
|
||||
testValue("range_min42", "71", 71, 42, 100, 1);
|
||||
testValue("range_max42", "21", 21, 0, 42, 1);
|
||||
testValue("range_valuetext", "value", 50, 0, 100, 1);
|
||||
|
||||
SimpleTest.finish();
|
||||
}
|
||||
|
@ -54,5 +55,7 @@
|
|||
<input type="range" id="range_step" step="1">
|
||||
<input type="range" id="range_min42" min="42">
|
||||
<input type="range" id="range_max42" max="42">
|
||||
<!-- aria-valuetext should work due to implicit slider role (bug 1475376) -->
|
||||
<input type="range" id="range_valuetext" aria-valuetext="value">
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
@ -75,9 +75,7 @@ pref("extensions.webextensions.default-content-security-policy", "script-src 'se
|
|||
pref("extensions.webextensions.remote", true);
|
||||
#endif
|
||||
|
||||
#ifdef NIGHTLY_BUILD
|
||||
pref("extensions.webextensions.background-delayed-startup", true);
|
||||
#endif
|
||||
|
||||
// Extensions that should not be flagged as legacy in about:addons
|
||||
pref("extensions.legacy.exceptions", "testpilot@cliqz.com,@testpilot-containers,jid1-NeEaf3sAHdKHPA@jetpack,@activity-streams,pulse@mozilla.com,@testpilot-addon,@min-vid,tabcentertest1@mozilla.com,snoozetabs@mozilla.com,speaktome@mozilla.com,hoverpad@mozilla.com");
|
||||
|
|
|
@ -446,15 +446,12 @@ var PlacesCommandHook = {
|
|||
|
||||
/**
|
||||
* Adds a bookmark to the page targeted by a link.
|
||||
* @param parentId
|
||||
* The folder in which to create a new bookmark if aURL isn't
|
||||
* bookmarked.
|
||||
* @param url (string)
|
||||
* the address of the link target
|
||||
* @param title
|
||||
* The link text
|
||||
*/
|
||||
async bookmarkLink(parentId, url, title) {
|
||||
async bookmarkLink(url, title) {
|
||||
let bm = await PlacesUtils.bookmarks.fetch({url});
|
||||
if (bm) {
|
||||
let node = await PlacesUIUtils.promiseNodeLikeFromFetchInfo(bm);
|
||||
|
@ -462,10 +459,10 @@ var PlacesCommandHook = {
|
|||
return;
|
||||
}
|
||||
|
||||
let parentGuid = parentId == PlacesUtils.bookmarksMenuFolderId ?
|
||||
PlacesUtils.bookmarks.menuGuid :
|
||||
await PlacesUtils.promiseItemGuid(parentId);
|
||||
let defaultInsertionPoint = new PlacesInsertionPoint({ parentId, parentGuid });
|
||||
let defaultInsertionPoint = new PlacesInsertionPoint({
|
||||
parentId: PlacesUtils.bookmarksMenuFolderId,
|
||||
parentGuid: PlacesUtils.bookmarks.menuGuid
|
||||
});
|
||||
PlacesUIUtils.showBookmarkDialog({ action: "add",
|
||||
type: "bookmark",
|
||||
uri: makeURI(url),
|
||||
|
|
|
@ -1437,8 +1437,8 @@ nsContextMenu.prototype = {
|
|||
},
|
||||
|
||||
bookmarkLink: function CM_bookmarkLink() {
|
||||
window.top.PlacesCommandHook.bookmarkLink(PlacesUtils.bookmarksMenuFolderId,
|
||||
this.linkURL, this.linkTextStr);
|
||||
window.top.PlacesCommandHook.bookmarkLink(this.linkURL, this.linkTextStr)
|
||||
.catch(Cu.reportError);
|
||||
},
|
||||
|
||||
addBookmarkForFrame: function CM_addBookmarkForFrame() {
|
||||
|
@ -1448,9 +1448,7 @@ nsContextMenu.prototype = {
|
|||
let onMessage = (message) => {
|
||||
mm.removeMessageListener("ContextMenu:BookmarkFrame:Result", onMessage);
|
||||
|
||||
window.top.PlacesCommandHook.bookmarkLink(PlacesUtils.bookmarksMenuFolderId,
|
||||
uri.spec,
|
||||
message.data.title)
|
||||
window.top.PlacesCommandHook.bookmarkLink(uri.spec, message.data.title)
|
||||
.catch(Cu.reportError);
|
||||
};
|
||||
mm.addMessageListener("ContextMenu:BookmarkFrame:Result", onMessage);
|
||||
|
|
|
@ -14,7 +14,7 @@ Debugging/Development
|
|||
=====================
|
||||
|
||||
Must Have Electrolysis
|
||||
-------
|
||||
----------------------
|
||||
|
||||
Web Payments `does not work without e10s <https://bugzilla.mozilla.org/show_bug.cgi?id=1365964>`_!
|
||||
|
||||
|
@ -69,3 +69,19 @@ Instead, all communication across the privileged/unprivileged boundary is done v
|
|||
|
||||
These events are converted to/from message manager messages of the same name to communicate to the other process.
|
||||
The purpose of `paymentDialogFrameScript.js` is to simply convert unprivileged DOM events to/from messages from the other process.
|
||||
|
||||
Custom Elements
|
||||
---------------
|
||||
|
||||
The Payment Request UI uses Custom Elements for the UI components.
|
||||
|
||||
Some guidelines:
|
||||
* If you're overriding a lifecycle callback, don't forget to call that method on
|
||||
``super`` from the implementation to ensure that mixins and ancestor classes
|
||||
work properly.
|
||||
* From within a custom element, don't use ``document.getElementById`` or
|
||||
``document.querySelector*`` because they can return elements that are outside
|
||||
of the component, thus breaking the modularization. It can also cause problems
|
||||
if the elements you're looking for aren't attached to the document yet. Use
|
||||
``querySelector*`` on ``this`` (the custom element) or one of its descendants
|
||||
instead.
|
||||
|
|
|
@ -5,33 +5,68 @@
|
|||
"use strict";
|
||||
|
||||
/**
|
||||
* <currency-amount value="7.5" currency="USD"></currency-amount>
|
||||
* <currency-amount value="7.5" currency="USD" display-code></currency-amount>
|
||||
*/
|
||||
|
||||
import ObservedPropertiesMixin from "../mixins/ObservedPropertiesMixin.js";
|
||||
|
||||
export default class CurrencyAmount extends ObservedPropertiesMixin(HTMLElement) {
|
||||
static get observedAttributes() {
|
||||
return ["currency", "value"];
|
||||
return [
|
||||
"currency",
|
||||
"display-code",
|
||||
"value",
|
||||
];
|
||||
}
|
||||
|
||||
constructor() {
|
||||
super();
|
||||
this._currencyAmountTextNode = document.createTextNode("");
|
||||
this._currencyCodeElement = document.createElement("span");
|
||||
this._currencyCodeElement.classList.add("currency-code");
|
||||
}
|
||||
|
||||
connectedCallback() {
|
||||
if (super.connectedCallback) {
|
||||
super.connectedCallback();
|
||||
}
|
||||
|
||||
this.append(this._currencyAmountTextNode, this._currencyCodeElement);
|
||||
}
|
||||
|
||||
render() {
|
||||
let output = "";
|
||||
let currencyAmount = "";
|
||||
let currencyCode = "";
|
||||
try {
|
||||
if (this.value && this.currency) {
|
||||
let number = Number.parseFloat(this.value);
|
||||
if (Number.isNaN(number) || !Number.isFinite(number)) {
|
||||
throw new RangeError("currency-amount value must be a finite number");
|
||||
}
|
||||
const formatter = new Intl.NumberFormat(navigator.languages, {
|
||||
const symbolFormatter = new Intl.NumberFormat(navigator.languages, {
|
||||
style: "currency",
|
||||
currency: this.currency,
|
||||
currencyDisplay: "symbol",
|
||||
});
|
||||
output = formatter.format(this.value);
|
||||
currencyAmount = symbolFormatter.format(this.value);
|
||||
|
||||
if (this.displayCode !== null) {
|
||||
// XXX: Bug 1473772 will move the separator to a Fluent string.
|
||||
currencyAmount += " ";
|
||||
|
||||
const codeFormatter = new Intl.NumberFormat(navigator.languages, {
|
||||
style: "currency",
|
||||
currency: this.currency,
|
||||
currencyDisplay: "code",
|
||||
});
|
||||
let parts = codeFormatter.formatToParts(this.value);
|
||||
let currencyPart = parts.find(part => part.type == "currency");
|
||||
currencyCode = currencyPart.value;
|
||||
}
|
||||
}
|
||||
} finally {
|
||||
this.textContent = output;
|
||||
this._currencyAmountTextNode.textContent = currencyAmount;
|
||||
this._currencyCodeElement.textContent = currencyCode;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,33 @@
|
|||
/* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
|
||||
/**
|
||||
* <payment-request-page></payment-request-page>
|
||||
*/
|
||||
|
||||
export default class PaymentRequestPage extends HTMLElement {
|
||||
constructor() {
|
||||
super();
|
||||
|
||||
this.classList.add("page");
|
||||
|
||||
this.pageTitleHeading = document.createElement("h2");
|
||||
|
||||
// The body and footer may be pre-defined in the template so re-use them if they exist.
|
||||
this.body = this.querySelector(":scope > .page-body") || document.createElement("div");
|
||||
this.body.classList.add("page-body");
|
||||
|
||||
this.footer = this.querySelector(":scope > footer") || document.createElement("footer");
|
||||
}
|
||||
|
||||
connectedCallback() {
|
||||
// The heading goes inside the body so it scrolls.
|
||||
this.body.prepend(this.pageTitleHeading);
|
||||
this.appendChild(this.body);
|
||||
|
||||
this.appendChild(this.footer);
|
||||
}
|
||||
}
|
||||
|
||||
customElements.define("payment-request-page", PaymentRequestPage);
|
|
@ -73,3 +73,14 @@ body[dir=rtl] .error-text::before {
|
|||
:-moz-any(input, textarea, select):valid + .error-text {
|
||||
display: none;
|
||||
}
|
||||
|
||||
address-form > footer > .cancel-button {
|
||||
/* When cancel is shown (during onboarding), it should always be on the left with a space after it */
|
||||
margin-right: auto;
|
||||
}
|
||||
|
||||
address-form > footer > .back-button {
|
||||
/* When back is shown (outside onboarding) we want "Back <space> Add/Save" */
|
||||
/* Bug 1468153 may change the button ordering to match platform conventions */
|
||||
margin-right: auto;
|
||||
}
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
|
||||
/* import-globals-from ../../../../../browser/extensions/formautofill/content/autofillEditForms.js*/
|
||||
import LabelledCheckbox from "../components/labelled-checkbox.js";
|
||||
import PaymentRequestPage from "../components/payment-request-page.js";
|
||||
import PaymentStateSubscriberMixin from "../mixins/PaymentStateSubscriberMixin.js";
|
||||
import paymentRequest from "../paymentRequest.js";
|
||||
/* import-globals-from ../unprivileged-fallbacks.js */
|
||||
|
@ -11,15 +12,18 @@ import paymentRequest from "../paymentRequest.js";
|
|||
/**
|
||||
* <address-form></address-form>
|
||||
*
|
||||
* Don't use document.getElementById or document.querySelector* to access form
|
||||
* elements, use querySelector on `this` or `this.form` instead so that elements
|
||||
* can be found before the element is connected.
|
||||
*
|
||||
* XXX: Bug 1446164 - This form isn't localized when used via this custom element
|
||||
* as it will be much easier to share the logic once we switch to Fluent.
|
||||
*/
|
||||
|
||||
export default class AddressForm extends PaymentStateSubscriberMixin(HTMLElement) {
|
||||
export default class AddressForm extends PaymentStateSubscriberMixin(PaymentRequestPage) {
|
||||
constructor() {
|
||||
super();
|
||||
|
||||
this.pageTitle = document.createElement("h2");
|
||||
this.genericErrorText = document.createElement("div");
|
||||
|
||||
this.cancelButton = document.createElement("button");
|
||||
|
@ -73,8 +77,7 @@ export default class AddressForm extends PaymentStateSubscriberMixin(HTMLElement
|
|||
|
||||
connectedCallback() {
|
||||
this.promiseReady.then(form => {
|
||||
this.appendChild(this.pageTitle);
|
||||
this.appendChild(form);
|
||||
this.body.appendChild(form);
|
||||
|
||||
let record = {};
|
||||
this.formHandler = new EditAddress({
|
||||
|
@ -85,11 +88,12 @@ export default class AddressForm extends PaymentStateSubscriberMixin(HTMLElement
|
|||
supportedCountries: PaymentDialogUtils.supportedCountries,
|
||||
});
|
||||
|
||||
this.appendChild(this.persistCheckbox);
|
||||
this.appendChild(this.genericErrorText);
|
||||
this.appendChild(this.cancelButton);
|
||||
this.appendChild(this.backButton);
|
||||
this.appendChild(this.saveButton);
|
||||
this.body.appendChild(this.persistCheckbox);
|
||||
this.body.appendChild(this.genericErrorText);
|
||||
|
||||
this.footer.appendChild(this.cancelButton);
|
||||
this.footer.appendChild(this.backButton);
|
||||
this.footer.appendChild(this.saveButton);
|
||||
// Only call the connected super callback(s) once our markup is fully
|
||||
// connected, including the shared form fetched asynchronously.
|
||||
super.connectedCallback();
|
||||
|
@ -123,7 +127,7 @@ export default class AddressForm extends PaymentStateSubscriberMixin(HTMLElement
|
|||
this.removeAttribute("address-fields");
|
||||
}
|
||||
|
||||
this.pageTitle.textContent = addressPage.title;
|
||||
this.pageTitleHeading.textContent = addressPage.title;
|
||||
this.genericErrorText.textContent = page.error;
|
||||
|
||||
let editing = !!addressPage.guid;
|
||||
|
@ -161,8 +165,8 @@ export default class AddressForm extends PaymentStateSubscriberMixin(HTMLElement
|
|||
|
||||
let shippingAddressErrors = request.paymentDetails.shippingAddressErrors;
|
||||
for (let [errorName, errorSelector] of Object.entries(this._errorFieldMap)) {
|
||||
let container = document.querySelector(errorSelector + "-container");
|
||||
let field = document.querySelector(errorSelector);
|
||||
let container = this.form.querySelector(errorSelector + "-container");
|
||||
let field = this.form.querySelector(errorSelector);
|
||||
let errorText = (shippingAddressErrors && shippingAddressErrors[errorName]) || "";
|
||||
container.classList.toggle("error", !!errorText);
|
||||
field.setCustomValidity(errorText);
|
||||
|
|
|
@ -0,0 +1,14 @@
|
|||
/* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
|
||||
basic-card-form > footer > .cancel-button {
|
||||
/* When cancel is shown (during onboarding), it should always be on the left with a space after it */
|
||||
margin-right: auto;
|
||||
}
|
||||
|
||||
basic-card-form > footer > .cancel-button[hidden] ~ .back-button {
|
||||
/* When back is shown (outside onboarding) we want "Back <space> Add/Save" */
|
||||
/* Bug 1468153 may change the button ordering to match platform conventions */
|
||||
margin-right: auto;
|
||||
}
|
|
@ -4,6 +4,7 @@
|
|||
|
||||
/* import-globals-from ../../../../../browser/extensions/formautofill/content/autofillEditForms.js*/
|
||||
import LabelledCheckbox from "../components/labelled-checkbox.js";
|
||||
import PaymentRequestPage from "../components/payment-request-page.js";
|
||||
import PaymentStateSubscriberMixin from "../mixins/PaymentStateSubscriberMixin.js";
|
||||
import paymentRequest from "../paymentRequest.js";
|
||||
|
||||
|
@ -16,17 +17,12 @@ import paymentRequest from "../paymentRequest.js";
|
|||
* as it will be much easier to share the logic once we switch to Fluent.
|
||||
*/
|
||||
|
||||
export default class BasicCardForm extends PaymentStateSubscriberMixin(HTMLElement) {
|
||||
export default class BasicCardForm extends PaymentStateSubscriberMixin(PaymentRequestPage) {
|
||||
constructor() {
|
||||
super();
|
||||
|
||||
this.pageTitle = document.createElement("h2");
|
||||
this.genericErrorText = document.createElement("div");
|
||||
|
||||
this.cancelButton = document.createElement("button");
|
||||
this.cancelButton.className = "cancel-button";
|
||||
this.cancelButton.addEventListener("click", this);
|
||||
|
||||
this.addressAddLink = document.createElement("a");
|
||||
this.addressAddLink.className = "add-link";
|
||||
this.addressAddLink.href = "javascript:void(0)";
|
||||
|
@ -36,6 +32,14 @@ export default class BasicCardForm extends PaymentStateSubscriberMixin(HTMLEleme
|
|||
this.addressEditLink.href = "javascript:void(0)";
|
||||
this.addressEditLink.addEventListener("click", this);
|
||||
|
||||
this.persistCheckbox = new LabelledCheckbox();
|
||||
this.persistCheckbox.className = "persist-checkbox";
|
||||
|
||||
// page footer
|
||||
this.cancelButton = document.createElement("button");
|
||||
this.cancelButton.className = "cancel-button";
|
||||
this.cancelButton.addEventListener("click", this);
|
||||
|
||||
this.backButton = document.createElement("button");
|
||||
this.backButton.className = "back-button";
|
||||
this.backButton.addEventListener("click", this);
|
||||
|
@ -44,8 +48,7 @@ export default class BasicCardForm extends PaymentStateSubscriberMixin(HTMLEleme
|
|||
this.saveButton.className = "save-button primary";
|
||||
this.saveButton.addEventListener("click", this);
|
||||
|
||||
this.persistCheckbox = new LabelledCheckbox();
|
||||
this.persistCheckbox.className = "persist-checkbox";
|
||||
this.footer.append(this.cancelButton, this.backButton, this.saveButton);
|
||||
|
||||
// The markup is shared with form autofill preferences.
|
||||
let url = "formautofill/editCreditCard.xhtml";
|
||||
|
@ -70,8 +73,7 @@ export default class BasicCardForm extends PaymentStateSubscriberMixin(HTMLEleme
|
|||
|
||||
connectedCallback() {
|
||||
this.promiseReady.then(form => {
|
||||
this.appendChild(this.pageTitle);
|
||||
this.appendChild(form);
|
||||
this.body.appendChild(form);
|
||||
|
||||
let record = {};
|
||||
let addresses = [];
|
||||
|
@ -89,11 +91,8 @@ export default class BasicCardForm extends PaymentStateSubscriberMixin(HTMLEleme
|
|||
let billingAddressRow = this.form.querySelector(".billingAddressRow");
|
||||
billingAddressRow.appendChild(fragment);
|
||||
|
||||
this.appendChild(this.persistCheckbox);
|
||||
this.appendChild(this.genericErrorText);
|
||||
this.appendChild(this.cancelButton);
|
||||
this.appendChild(this.backButton);
|
||||
this.appendChild(this.saveButton);
|
||||
this.body.appendChild(this.persistCheckbox);
|
||||
this.body.appendChild(this.genericErrorText);
|
||||
// Only call the connected super callback(s) once our markup is fully
|
||||
// connected, including the shared form fetched asynchronously.
|
||||
super.connectedCallback();
|
||||
|
@ -135,7 +134,7 @@ export default class BasicCardForm extends PaymentStateSubscriberMixin(HTMLEleme
|
|||
|
||||
// If a card is selected we want to edit it.
|
||||
if (editing) {
|
||||
this.pageTitle.textContent = this.dataset.editBasicCardTitle;
|
||||
this.pageTitleHeading.textContent = this.dataset.editBasicCardTitle;
|
||||
record = basicCards[basicCardPage.guid];
|
||||
if (!record) {
|
||||
throw new Error("Trying to edit a non-existing card: " + basicCardPage.guid);
|
||||
|
@ -143,7 +142,7 @@ export default class BasicCardForm extends PaymentStateSubscriberMixin(HTMLEleme
|
|||
// When editing an existing record, prevent changes to persistence
|
||||
this.persistCheckbox.hidden = true;
|
||||
} else {
|
||||
this.pageTitle.textContent = this.dataset.addBasicCardTitle;
|
||||
this.pageTitleHeading.textContent = this.dataset.addBasicCardTitle;
|
||||
// Use a currently selected shipping address as the default billing address
|
||||
record.billingAddressGUID = basicCardPage.billingAddressGUID;
|
||||
if (!record.billingAddressGUID && selectedShippingAddress) {
|
||||
|
|
|
@ -8,6 +8,7 @@ import PaymentStateSubscriberMixin from "../mixins/PaymentStateSubscriberMixin.j
|
|||
import paymentRequest from "../paymentRequest.js";
|
||||
|
||||
import "../components/currency-amount.js";
|
||||
import "../components/payment-request-page.js";
|
||||
import "./address-picker.js";
|
||||
import "./address-form.js";
|
||||
import "./basic-card-form.js";
|
||||
|
|
|
@ -3,9 +3,6 @@
|
|||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
|
||||
html {
|
||||
/* Based on global.css styles for top-level XUL windows */
|
||||
-moz-appearance: dialog;
|
||||
background-color: -moz-Dialog;
|
||||
color: -moz-DialogText;
|
||||
font: message-box;
|
||||
/* Make sure the background ends to the bottom if there is unused space */
|
||||
|
|
|
@ -42,6 +42,7 @@ let REQUEST_1 = {
|
|||
},
|
||||
},
|
||||
],
|
||||
shippingAddressErrors: {},
|
||||
shippingOptions: [
|
||||
{
|
||||
id: "123",
|
||||
|
@ -107,6 +108,7 @@ let REQUEST_2 = {
|
|||
},
|
||||
},
|
||||
],
|
||||
shippingAddressErrors: {},
|
||||
shippingOptions: [
|
||||
{
|
||||
id: "123",
|
||||
|
|
|
@ -40,6 +40,7 @@ export let requestStore = new PaymentsStore({
|
|||
id: null,
|
||||
totalItem: {label: null, amount: {currency: null, value: 0}},
|
||||
displayItems: [],
|
||||
shippingAddressErrors: {},
|
||||
shippingOptions: [],
|
||||
modifiers: null,
|
||||
error: "",
|
||||
|
|
|
@ -3,28 +3,14 @@
|
|||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
|
||||
html {
|
||||
/* Based on global.css styles for top-level XUL windows */
|
||||
color: -moz-DialogText;
|
||||
font: message-box;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
body {
|
||||
/* Override font-size from in-content/common.css which is too large */
|
||||
font-size: inherit;
|
||||
}
|
||||
|
||||
#order-details-overlay,
|
||||
html {
|
||||
/* Based on global.css styles for top-level XUL windows */
|
||||
-moz-appearance: dialog;
|
||||
background-color: -moz-Dialog;
|
||||
}
|
||||
|
||||
body {
|
||||
height: 100%;
|
||||
margin: 0;
|
||||
overflow: hidden;
|
||||
/* Override font-size from in-content/common.css which is too large */
|
||||
font-size: inherit;
|
||||
}
|
||||
|
||||
[hidden] {
|
||||
|
@ -35,8 +21,7 @@ body {
|
|||
/* include the default borders in the max-height */
|
||||
box-sizing: border-box;
|
||||
float: right;
|
||||
/* avoid causing the body to scroll */
|
||||
max-height: 100vh;
|
||||
height: 100vh;
|
||||
/* Float above the other overlays */
|
||||
position: relative;
|
||||
z-index: 99;
|
||||
|
@ -45,26 +30,60 @@ body {
|
|||
payment-dialog {
|
||||
box-sizing: border-box;
|
||||
display: grid;
|
||||
grid-template-rows: fit-content(10%) auto;
|
||||
grid-template: "header" auto
|
||||
"main" 1fr
|
||||
"disabled-overlay" auto;
|
||||
height: 100%;
|
||||
margin: 0 10%;
|
||||
padding: 1em;
|
||||
}
|
||||
|
||||
payment-dialog > header,
|
||||
.page > .page-body,
|
||||
.page > footer {
|
||||
padding: 0 10%;
|
||||
}
|
||||
|
||||
payment-dialog > header {
|
||||
border-bottom: 1px solid rgba(0,0,0,0.1);
|
||||
display: flex;
|
||||
/* from visual spec: */
|
||||
padding-bottom: 19px;
|
||||
padding-top: 19px;
|
||||
}
|
||||
|
||||
#main-container {
|
||||
display: flex;
|
||||
grid-area: main;
|
||||
position: relative;
|
||||
max-height: 100%;
|
||||
}
|
||||
|
||||
#payment-summary {
|
||||
display: grid;
|
||||
flex: 1 1 auto;
|
||||
grid-template-rows: fit-content(10%) auto fit-content(10%);
|
||||
.page {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
height: 100%;
|
||||
position: relative;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.page > .page-body {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
flex-grow: 1;
|
||||
/* The area above the footer should scroll, if necessary. */
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
.page > .page-body > h2:empty {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.page > footer {
|
||||
align-items: center;
|
||||
background-color: #eaeaee;
|
||||
display: flex;
|
||||
/* from visual spec: */
|
||||
padding-top: 20px;
|
||||
padding-bottom: 18px;
|
||||
}
|
||||
|
||||
#error-text {
|
||||
|
@ -72,6 +91,7 @@ payment-dialog > header {
|
|||
}
|
||||
|
||||
#order-details-overlay {
|
||||
background-color: var(--in-content-page-background);
|
||||
overflow: auto;
|
||||
position: absolute;
|
||||
top: 0;
|
||||
|
@ -81,22 +101,37 @@ payment-dialog > header {
|
|||
z-index: 1;
|
||||
}
|
||||
|
||||
payment-dialog > footer {
|
||||
align-items: baseline;
|
||||
display: flex;
|
||||
}
|
||||
|
||||
#total {
|
||||
flex: 1 1 auto;
|
||||
margin: 5px;
|
||||
}
|
||||
|
||||
#total > currency-amount {
|
||||
color: var(--in-content-link-color);
|
||||
font-size: 1.5em;
|
||||
}
|
||||
|
||||
#total > currency-amount > .currency-code {
|
||||
color: GrayText;
|
||||
font-size: 1rem;
|
||||
}
|
||||
|
||||
#total > div {
|
||||
color: GrayText;
|
||||
}
|
||||
|
||||
#view-all {
|
||||
flex: 0 1 auto;
|
||||
}
|
||||
|
||||
#total .label {
|
||||
font-size: 15px;
|
||||
font-weight: bold;
|
||||
payment-dialog #pay::before {
|
||||
-moz-context-properties: fill;
|
||||
content: url(chrome://browser/skin/connection-secure.svg);
|
||||
fill: currentColor;
|
||||
height: 16px;
|
||||
margin-right: 0.5em;
|
||||
vertical-align: text-bottom;
|
||||
width: 16px;
|
||||
}
|
||||
|
||||
payment-dialog[changes-prevented][completion-state="fail"] #pay,
|
||||
|
@ -108,8 +143,13 @@ payment-dialog[changes-prevented][completion-state="success"] #pay {
|
|||
z-index: 1;
|
||||
}
|
||||
|
||||
#cancel {
|
||||
margin-left: auto;
|
||||
}
|
||||
|
||||
#disabled-overlay {
|
||||
background: white;
|
||||
grid-area: disabled-overlay;
|
||||
opacity: 0.6;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
|
|
|
@ -10,6 +10,8 @@
|
|||
|
||||
<!ENTITY viewAllItems "View All Items">
|
||||
<!ENTITY paymentSummaryTitle "Your Payment">
|
||||
<!ENTITY header.payTo "Pay to">
|
||||
|
||||
<!ENTITY shippingAddressLabel "Shipping Address">
|
||||
<!ENTITY deliveryAddressLabel "Delivery Address">
|
||||
<!ENTITY pickupAddressLabel "Pickup Address">
|
||||
|
@ -69,6 +71,7 @@
|
|||
<link rel="stylesheet" href="components/shipping-option.css"/>
|
||||
<link rel="stylesheet" href="components/payment-details-item.css"/>
|
||||
<link rel="stylesheet" href="containers/address-form.css"/>
|
||||
<link rel="stylesheet" href="containers/basic-card-form.css"/>
|
||||
<link rel="stylesheet" href="containers/order-details.css"/>
|
||||
|
||||
<script src="unprivileged-fallbacks.js"></script>
|
||||
|
@ -81,20 +84,17 @@
|
|||
<template id="payment-dialog-template">
|
||||
<header>
|
||||
<div id="total">
|
||||
<h2 class="label"></h2>
|
||||
<currency-amount></currency-amount>
|
||||
<div id="host-name"></div>
|
||||
<currency-amount display-code="display-code"></currency-amount>
|
||||
<div>&header.payTo; <span id="host-name"></span></div>
|
||||
</div>
|
||||
<div id="top-buttons" >
|
||||
<div id="top-buttons" hidden="hidden">
|
||||
<button id="view-all" class="closed">&viewAllItems;</button>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<div id="main-container">
|
||||
<section id="payment-summary" class="page">
|
||||
<h2>&paymentSummaryTitle;</h2>
|
||||
|
||||
<section>
|
||||
<payment-request-page id="payment-summary">
|
||||
<div class="page-body">
|
||||
<div id="error-text"></div>
|
||||
|
||||
<div class="shipping-related"
|
||||
|
@ -123,9 +123,9 @@
|
|||
data-edit-link-label="&payer.editLink.label;"
|
||||
selected-state-key="selectedPayerAddress"></address-picker>
|
||||
<div id="error-text"></div>
|
||||
</section>
|
||||
</div>
|
||||
|
||||
<footer id="controls-container">
|
||||
<footer>
|
||||
<button id="cancel">&cancelPaymentButton.label;</button>
|
||||
<button id="pay"
|
||||
class="primary"
|
||||
|
@ -135,14 +135,13 @@
|
|||
data-unknown-label="&unknownPaymentButton.label;"
|
||||
data-success-label="&successPaymentButton.label;"></button>
|
||||
</footer>
|
||||
</section>
|
||||
</payment-request-page>
|
||||
<section id="order-details-overlay" hidden="hidden">
|
||||
<h2>&orderDetailsLabel;</h2>
|
||||
<order-details></order-details>
|
||||
</section>
|
||||
|
||||
<basic-card-form id="basic-card-page"
|
||||
class="page"
|
||||
data-add-basic-card-title="&basicCard.addPage.title;"
|
||||
data-edit-basic-card-title="&basicCard.editPage.title;"
|
||||
data-error-generic-save="&basicCardPage.error.genericSave;"
|
||||
|
@ -157,7 +156,6 @@
|
|||
hidden="hidden"></basic-card-form>
|
||||
|
||||
<address-form id="address-page"
|
||||
class="page"
|
||||
data-error-generic-save="&addressPage.error.genericSave;"
|
||||
data-cancel-button-label="&addressPage.cancelButton.label;"
|
||||
data-back-button-label="&addressPage.backButton.label;"
|
||||
|
@ -183,8 +181,8 @@
|
|||
</head>
|
||||
<body dir="&locale.dir;">
|
||||
<iframe id="debugging-console"
|
||||
hidden="hidden"
|
||||
height="400"></iframe>
|
||||
hidden="hidden">
|
||||
</iframe>
|
||||
<payment-dialog data-shipping-address-title-add="&shippingAddress.addPage.title;"
|
||||
data-shipping-address-title-edit="&shippingAddress.editPage.title;"
|
||||
data-delivery-address-title-add="&deliveryAddress.addPage.title;"
|
||||
|
|
|
@ -69,7 +69,7 @@ add_task(async function test_change_shipping() {
|
|||
// Note: The update includes a modifier, and modifiers must include a total
|
||||
// so the expected total is that one
|
||||
is(content.document.querySelector("#total > currency-amount").textContent,
|
||||
"\u20AC2.50",
|
||||
"\u20AC2.50 EUR",
|
||||
"Check updated total currency amount");
|
||||
|
||||
let btn = content.document.querySelector("#view-all");
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
add_task(async function test_total() {
|
||||
const testTask = ({methodData, details}) => {
|
||||
is(content.document.querySelector("#total > currency-amount").textContent,
|
||||
"$60.00",
|
||||
"$60.00 USD",
|
||||
"Check total currency amount");
|
||||
};
|
||||
const args = {
|
||||
|
@ -17,7 +17,7 @@ add_task(async function test_modifier_with_no_method_selected() {
|
|||
const testTask = async ({methodData, details}) => {
|
||||
// There are no payment methods installed/setup so we expect the original (unmodified) total.
|
||||
is(content.document.querySelector("#total > currency-amount").textContent,
|
||||
"$2.00",
|
||||
"$2.00 USD",
|
||||
"Check unmodified total currency amount");
|
||||
};
|
||||
const args = {
|
||||
|
@ -34,7 +34,7 @@ add_task(async function test_modifier_with_no_method_selected() {
|
|||
const testTask = async ({methodData, details}) => {
|
||||
// We expect the *only* payment method (the one basic-card) to be selected initially.
|
||||
is(content.document.querySelector("#total > currency-amount").textContent,
|
||||
"$2.50",
|
||||
"$2.50 USD",
|
||||
"Check modified total currency amount");
|
||||
};
|
||||
const args = {
|
||||
|
|
|
@ -94,7 +94,7 @@ add_task(async function test_backButton() {
|
|||
await asyncElementRendered();
|
||||
|
||||
let stateChangePromise = promiseStateChange(form.requestStore);
|
||||
is(form.pageTitle.textContent, "Sample page title", "Check label");
|
||||
is(form.pageTitleHeading.textContent, "Sample page title", "Check label");
|
||||
|
||||
is(form.backButton.textContent, "Back", "Check label");
|
||||
form.backButton.scrollIntoView();
|
||||
|
|
|
@ -78,7 +78,7 @@ add_task(async function test_backButton() {
|
|||
await asyncElementRendered();
|
||||
|
||||
let stateChangePromise = promiseStateChange(form.requestStore);
|
||||
is(form.pageTitle.textContent, "Sample page title 2", "Check title");
|
||||
is(form.pageTitleHeading.textContent, "Sample page title 2", "Check title");
|
||||
is(form.backButton.textContent, "Back", "Check label");
|
||||
synthesizeMouseAtCenter(form.backButton, {});
|
||||
|
||||
|
|
|
@ -80,6 +80,26 @@ add_task(async function test_valid_currency_amount_cad() {
|
|||
is(amount1.textContent, "CA$12.34", "Check output format");
|
||||
});
|
||||
|
||||
add_task(async function test_valid_currency_amount_displayCode() {
|
||||
amount1.value = 12.34;
|
||||
info("showing the currency code");
|
||||
await asyncElementRendered();
|
||||
amount1.currency = "CAD";
|
||||
await asyncElementRendered();
|
||||
amount1.displayCode = true;
|
||||
await asyncElementRendered();
|
||||
|
||||
is(amount1.getAttribute("value"), "12.34", "Check @value");
|
||||
is(amount1.value, "12.34", "Check .value");
|
||||
is(amount1.getAttribute("currency"), "CAD", "Check @currency");
|
||||
is(amount1.currency, "CAD", "Check .currency");
|
||||
is(amount1.textContent, "CA$12.34 CAD", "Check output format");
|
||||
|
||||
amount1.displayCode = false;
|
||||
await asyncElementRendered();
|
||||
});
|
||||
|
||||
|
||||
add_task(async function test_valid_currency_amount_eur_batched_prop() {
|
||||
info("setting two properties in a row synchronously");
|
||||
amount1.value = 98.76;
|
||||
|
|
|
@ -8,6 +8,7 @@ Test the payment-dialog custom element
|
|||
<title>Test the payment-dialog element</title>
|
||||
<script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
|
||||
<script type="application/javascript" src="/tests/SimpleTest/AddTask.js"></script>
|
||||
<script type="application/javascript" src="/tests/SimpleTest/EventUtils.js"></script>
|
||||
<script src="sinon-2.3.2.js"></script>
|
||||
<script src="payments_common.js"></script>
|
||||
<script src="../../res/vendor/custom-elements.min.js"></script>
|
||||
|
@ -93,6 +94,7 @@ add_task(async function test_viewAllButtonVisibility() {
|
|||
|
||||
let button = el1._viewAllButton;
|
||||
ok(button.hidden, "Button is initially hidden when there are no items to show");
|
||||
ok(isHidden(button), "Button should be visibly hidden since bug 1469464");
|
||||
|
||||
// Add a display item.
|
||||
let request = deepClone(el1.requestStore.getState().request);
|
||||
|
@ -180,6 +182,19 @@ add_task(async function test_completionStateChangesPrevented() {
|
|||
}
|
||||
});
|
||||
|
||||
add_task(async function test_scrollPaymentRequestPage() {
|
||||
await setup();
|
||||
info("making the payment-dialog container small to require scrolling");
|
||||
el1.parentElement.style.height = "100px";
|
||||
let summaryPageBody = document.querySelector("#payment-summary .page-body");
|
||||
is(summaryPageBody.scrollTop, 0, "Page body not scrolled initially");
|
||||
let securityCodeInput = summaryPageBody.querySelector("payment-method-picker input");
|
||||
securityCodeInput.focus();
|
||||
await new Promise(resolve => SimpleTest.executeSoon(resolve));
|
||||
ok(summaryPageBody.scrollTop > 0, "Page body scrolled after focusing the CVV field");
|
||||
el1.parentElement.style.height = "";
|
||||
});
|
||||
|
||||
add_task(async function test_disconnect() {
|
||||
await setup();
|
||||
|
||||
|
|
|
@ -85,8 +85,7 @@
|
|||
// Calculate positions taking care of arrowscrollbox
|
||||
let scrollbox = this._scrollBox;
|
||||
let eventY = aEvent.layerY + (scrollbox.boxObject.y - this.boxObject.y);
|
||||
let scrollboxOffset = scrollbox.scrollBoxObject.y -
|
||||
(scrollbox.boxObject.y - this.boxObject.y);
|
||||
let scrollboxOffset = this.boxObject.y;
|
||||
let eltY = elt.boxObject.y - scrollboxOffset;
|
||||
let eltHeight = elt.boxObject.height;
|
||||
|
||||
|
@ -434,20 +433,20 @@
|
|||
}
|
||||
|
||||
// We should display the drop indicator relative to the arrowscrollbox.
|
||||
let sbo = this._scrollBox.scrollBoxObject;
|
||||
let scrollbox = this._scrollBox.boxObject;
|
||||
let newMarginTop = 0;
|
||||
if (scrollDir == 0) {
|
||||
let elt = this.firstChild;
|
||||
while (elt && event.screenY > elt.boxObject.screenY +
|
||||
elt.boxObject.height / 2)
|
||||
elt = elt.nextSibling;
|
||||
newMarginTop = elt ? elt.boxObject.screenY - sbo.screenY :
|
||||
sbo.height;
|
||||
newMarginTop = elt ? elt.boxObject.screenY - scrollbox.screenY :
|
||||
scrollbox.height;
|
||||
} else if (scrollDir == 1)
|
||||
newMarginTop = sbo.height;
|
||||
newMarginTop = scrollbox.height;
|
||||
|
||||
// Set the new marginTop based on arrowscrollbox.
|
||||
newMarginTop += sbo.y - this._scrollBox.boxObject.y;
|
||||
newMarginTop += scrollbox.y - this._scrollBox.boxObject.y;
|
||||
this._indicatorBar.firstChild.style.marginTop = newMarginTop + "px";
|
||||
this._indicatorBar.hidden = false;
|
||||
|
||||
|
|
|
@ -103,7 +103,7 @@
|
|||
<image class="fxaProfileImage"/>
|
||||
</vbox>
|
||||
<vbox flex="1" pack="center">
|
||||
<hbox>
|
||||
<hbox align="center">
|
||||
<image class="fxaLoginRejectedWarning"/>
|
||||
<description flex="1"
|
||||
class="l10nArgsEmailAddress"
|
||||
|
@ -123,7 +123,7 @@
|
|||
<image class="fxaProfileImage"/>
|
||||
</vbox>
|
||||
<vbox flex="1" pack="center">
|
||||
<hbox>
|
||||
<hbox align="center">
|
||||
<image class="fxaLoginRejectedWarning"/>
|
||||
<description flex="1"
|
||||
class="l10nArgsEmailAddress"
|
||||
|
|
|
@ -106,9 +106,8 @@ TabListComponent.prototype = {
|
|||
},
|
||||
|
||||
onBookmarkTab(uri, title) {
|
||||
this._window.top.PlacesCommandHook
|
||||
.bookmarkLink(this._window.top.PlacesUtils.bookmarksMenuFolderId, uri, title)
|
||||
.catch(Cu.reportError);
|
||||
this._window.top.PlacesCommandHook.bookmarkLink(uri, title)
|
||||
.catch(Cu.reportError);
|
||||
},
|
||||
|
||||
onOpenTab(url, where, params) {
|
||||
|
|
|
@ -130,8 +130,8 @@ add_task(async function testActions() {
|
|||
|
||||
sinon.spy(windowMock.top.PlacesCommandHook, "bookmarkLink");
|
||||
component.onBookmarkTab("uri", "title");
|
||||
Assert.equal(windowMock.top.PlacesCommandHook.bookmarkLink.args[0][1], "uri");
|
||||
Assert.equal(windowMock.top.PlacesCommandHook.bookmarkLink.args[0][2], "title");
|
||||
Assert.equal(windowMock.top.PlacesCommandHook.bookmarkLink.args[0][0], "uri");
|
||||
Assert.equal(windowMock.top.PlacesCommandHook.bookmarkLink.args[0][1], "title");
|
||||
|
||||
sinon.spy(windowMock, "openTrustedLinkIn");
|
||||
component.onOpenTab("uri", "where", "params");
|
||||
|
|
|
@ -18,12 +18,8 @@ const RESOURCE_HOST = "activity-stream";
|
|||
const BROWSER_READY_NOTIFICATION = "sessionstore-windows-restored";
|
||||
const RESOURCE_BASE = "resource://activity-stream";
|
||||
|
||||
const ACTIVITY_STREAM_OPTIONS = {newTabURL: "about:newtab"};
|
||||
|
||||
let activityStream;
|
||||
let modulesToUnload = new Set();
|
||||
let startupData;
|
||||
let startupReason;
|
||||
let waitingForBrowserReady = true;
|
||||
|
||||
// Lazily load ActivityStream then find related modules to unload
|
||||
|
@ -57,18 +53,15 @@ XPCOMUtils.defineLazyModuleGetter(this, "ActivityStream",
|
|||
/**
|
||||
* init - Initializes an instance of ActivityStream. This could be called by
|
||||
* the startup() function exposed by bootstrap.js.
|
||||
*
|
||||
* @param {string} reason - Reason for initialization. Could be install, upgrade, or PREF_ON
|
||||
*/
|
||||
function init(reason) {
|
||||
function init() {
|
||||
// Don't re-initialize
|
||||
if (activityStream && activityStream.initialized) {
|
||||
return;
|
||||
}
|
||||
const options = Object.assign({}, startupData || {}, ACTIVITY_STREAM_OPTIONS);
|
||||
activityStream = new ActivityStream(options);
|
||||
activityStream = new ActivityStream();
|
||||
try {
|
||||
activityStream.init(reason);
|
||||
activityStream.init();
|
||||
} catch (e) {
|
||||
Cu.reportError(e);
|
||||
}
|
||||
|
@ -125,7 +118,7 @@ function migratePref(oldPrefName, cbIfNotDefault) {
|
|||
*/
|
||||
function onBrowserReady() {
|
||||
waitingForBrowserReady = false;
|
||||
init(startupReason);
|
||||
init();
|
||||
|
||||
// Do a one time migration of Tiles about:newtab prefs that have been modified
|
||||
migratePref("browser.newtabpage.rows", rows => {
|
||||
|
@ -171,11 +164,6 @@ this.startup = function startup(data, reason) {
|
|||
Services.io.newURI("chrome/content/", null, data.resourceURI),
|
||||
resProto.ALLOW_CONTENT_ACCESS);
|
||||
|
||||
// Cache startup data which contains stuff like the version number, etc.
|
||||
// so we can use it when we init
|
||||
startupData = data;
|
||||
startupReason = reason;
|
||||
|
||||
// Only start Activity Stream up when the browser UI is ready
|
||||
if (Services.startup.startingUp) {
|
||||
Services.obs.addObserver(observe, BROWSER_READY_NOTIFICATION);
|
||||
|
@ -189,8 +177,6 @@ this.shutdown = function shutdown(data, reason) {
|
|||
resProto.setSubstitution(RESOURCE_HOST, null);
|
||||
|
||||
// Uninitialize Activity Stream
|
||||
startupData = null;
|
||||
startupReason = null;
|
||||
uninit(reason);
|
||||
|
||||
// Stop waiting for browser to be ready
|
||||
|
|
|
@ -14,9 +14,7 @@ const dedupe = new Dedupe(site => site && site.url);
|
|||
const INITIAL_STATE = {
|
||||
App: {
|
||||
// Have we received real data from the app yet?
|
||||
initialized: false,
|
||||
// The version of the system-addon
|
||||
version: null
|
||||
initialized: false
|
||||
},
|
||||
Snippets: {initialized: false},
|
||||
TopSites: {
|
||||
|
|
|
@ -30,7 +30,7 @@ export class _Base extends React.PureComponent {
|
|||
this.sendNewTabRehydrated(App);
|
||||
addLocaleDataForReactIntl(locale);
|
||||
if (this.props.isFirstrun) {
|
||||
global.document.body.classList.add("welcome");
|
||||
global.document.body.classList.add("welcome", "hide-main");
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -56,9 +56,10 @@ export class _Base extends React.PureComponent {
|
|||
updateTheme() {
|
||||
const bodyClassName = [
|
||||
"activity-stream",
|
||||
// If we skipped the about:welcome overlay and removed the CSS class
|
||||
// we don't want to add it back to the Activity Stream view
|
||||
document.body.classList.contains("welcome") ? "welcome" : ""
|
||||
// If we skipped the about:welcome overlay and removed the CSS classes
|
||||
// we don't want to add them back to the Activity Stream view
|
||||
document.body.classList.contains("welcome") ? "welcome" : "",
|
||||
document.body.classList.contains("hide-main") ? "hide-main" : ""
|
||||
].filter(v => v).join(" ");
|
||||
global.document.body.className = bodyClassName;
|
||||
}
|
||||
|
|
|
@ -15,6 +15,10 @@
|
|||
}
|
||||
|
||||
main {
|
||||
.hide-main & {
|
||||
visibility: hidden;
|
||||
}
|
||||
|
||||
margin: auto;
|
||||
// Offset the snippets container so things at the bottom of the page are still
|
||||
// visible when snippets / onboarding are visible. Adjust for other spacing.
|
||||
|
|
|
@ -30,6 +30,7 @@ export class _StartupOverlay extends React.PureComponent {
|
|||
|
||||
removeOverlay() {
|
||||
window.removeEventListener("visibilitychange", this.removeOverlay);
|
||||
document.body.classList.remove("hide-main");
|
||||
this.setState({show: false});
|
||||
setTimeout(() => {
|
||||
// Allow scrolling and fully remove overlay after animation finishes.
|
||||
|
@ -73,7 +74,7 @@ export class _StartupOverlay extends React.PureComponent {
|
|||
let termsLink = (<a href="https://accounts.firefox.com/legal/terms" target="_blank" rel="noopener noreferrer"><FormattedMessage id="firstrun_terms_of_service" /></a>);
|
||||
let privacyLink = (<a href="https://accounts.firefox.com/legal/privacy" target="_blank" rel="noopener noreferrer"><FormattedMessage id="firstrun_privacy_notice" /></a>);
|
||||
return (
|
||||
<div className={`overlay-wrapper ${this.state.show ? "show " : ""}`}>
|
||||
<div className={`overlay-wrapper ${this.state.show ? "show" : ""}`}>
|
||||
<div className="background" />
|
||||
<div className="firstrun-scene">
|
||||
<div className="fxaccounts-container">
|
||||
|
|
|
@ -13,6 +13,7 @@
|
|||
.overlay-wrapper {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100vw;
|
||||
height: 100vh;
|
||||
z-index: 21000;
|
||||
|
@ -70,13 +71,15 @@
|
|||
}
|
||||
}
|
||||
|
||||
.background {
|
||||
.background,
|
||||
body.hide-main {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
display: block;
|
||||
background: url('#{$image-path}fox-tail.png') top -200px center no-repeat,
|
||||
linear-gradient(to bottom, $blue-70 40%, #004EC2 60%, $blue-60 80%, #0080FF 90%, #00C7FF 100%) top center no-repeat,
|
||||
$blue-70;
|
||||
background-image: url('#{$image-path}fox-tail.png'), linear-gradient(to bottom, $blue-70 40%, #004EC2 60%, $blue-60 80%, #0080FF 90%, #00C7FF 100%);
|
||||
background-position-x: center;
|
||||
background-position-y: -200px, top;
|
||||
background-repeat: no-repeat;
|
||||
background-size: cover;
|
||||
position: fixed;
|
||||
}
|
||||
|
@ -236,7 +239,7 @@
|
|||
padding-bottom: 210px;
|
||||
}
|
||||
|
||||
.firstrun-link {
|
||||
a.firstrun-link {
|
||||
color: $white;
|
||||
display: block;
|
||||
text-decoration: underline;
|
||||
|
|
|
@ -18,9 +18,13 @@ body {
|
|||
font-size: 16px;
|
||||
overflow-y: scroll;
|
||||
|
||||
&.hide-onboarding > #onboarding-overlay-button {
|
||||
&.hide-onboarding, &.hide-main > #onboarding-overlay-button {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
&.hide-main > #onboarding-notification-bar {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
h1,
|
||||
|
|
|
@ -230,8 +230,10 @@ body {
|
|||
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Ubuntu', 'Helvetica Neue', sans-serif;
|
||||
font-size: 16px;
|
||||
overflow-y: scroll; }
|
||||
body.hide-onboarding > #onboarding-overlay-button {
|
||||
body.hide-onboarding, body.hide-main > #onboarding-overlay-button {
|
||||
display: none !important; }
|
||||
body.hide-main > #onboarding-notification-bar {
|
||||
display: none; }
|
||||
|
||||
h1,
|
||||
h2 {
|
||||
|
@ -332,6 +334,8 @@ main {
|
|||
margin: auto;
|
||||
padding-bottom: 68px;
|
||||
width: 274px; }
|
||||
.hide-main main {
|
||||
visibility: hidden; }
|
||||
@media (min-width: 482px) {
|
||||
main {
|
||||
width: 402px; } }
|
||||
|
@ -814,6 +818,7 @@ main {
|
|||
.overlay-wrapper {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100vw;
|
||||
height: 100vh;
|
||||
z-index: 21000;
|
||||
|
@ -853,11 +858,15 @@ main {
|
|||
transition: none;
|
||||
opacity: 1; }
|
||||
|
||||
.background {
|
||||
.background,
|
||||
body.hide-main {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
display: block;
|
||||
background: url("../data/content/assets/fox-tail.png") top -200px center no-repeat, linear-gradient(to bottom, #003EAA 40%, #004EC2 60%, #0060DF 80%, #0080FF 90%, #00C7FF 100%) top center no-repeat, #003EAA;
|
||||
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; }
|
||||
|
||||
|
@ -976,11 +985,11 @@ main {
|
|||
background: url("../data/content/assets/sync-devices.svg") bottom center no-repeat;
|
||||
padding-bottom: 210px; }
|
||||
|
||||
.firstrun-link {
|
||||
a.firstrun-link {
|
||||
color: #FFF;
|
||||
display: block;
|
||||
text-decoration: underline; }
|
||||
.firstrun-link:hover, .firstrun-link:active, .firstrun-link:focus {
|
||||
a.firstrun-link:hover, a.firstrun-link:active, a.firstrun-link:focus {
|
||||
color: #FFF; }
|
||||
|
||||
.firstrun-title {
|
||||
|
|
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
|
@ -233,8 +233,10 @@ body {
|
|||
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Ubuntu', 'Helvetica Neue', sans-serif;
|
||||
font-size: 16px;
|
||||
overflow-y: scroll; }
|
||||
body.hide-onboarding > #onboarding-overlay-button {
|
||||
body.hide-onboarding, body.hide-main > #onboarding-overlay-button {
|
||||
display: none !important; }
|
||||
body.hide-main > #onboarding-notification-bar {
|
||||
display: none; }
|
||||
|
||||
h1,
|
||||
h2 {
|
||||
|
@ -335,6 +337,8 @@ main {
|
|||
margin: auto;
|
||||
padding-bottom: 68px;
|
||||
width: 274px; }
|
||||
.hide-main main {
|
||||
visibility: hidden; }
|
||||
@media (min-width: 482px) {
|
||||
main {
|
||||
width: 402px; } }
|
||||
|
@ -817,6 +821,7 @@ main {
|
|||
.overlay-wrapper {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100vw;
|
||||
height: 100vh;
|
||||
z-index: 21000;
|
||||
|
@ -856,11 +861,15 @@ main {
|
|||
transition: none;
|
||||
opacity: 1; }
|
||||
|
||||
.background {
|
||||
.background,
|
||||
body.hide-main {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
display: block;
|
||||
background: url("../data/content/assets/fox-tail.png") top -200px center no-repeat, linear-gradient(to bottom, #003EAA 40%, #004EC2 60%, #0060DF 80%, #0080FF 90%, #00C7FF 100%) top center no-repeat, #003EAA;
|
||||
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; }
|
||||
|
||||
|
@ -979,11 +988,11 @@ main {
|
|||
background: url("../data/content/assets/sync-devices.svg") bottom center no-repeat;
|
||||
padding-bottom: 210px; }
|
||||
|
||||
.firstrun-link {
|
||||
a.firstrun-link {
|
||||
color: #FFF;
|
||||
display: block;
|
||||
text-decoration: underline; }
|
||||
.firstrun-link:hover, .firstrun-link:active, .firstrun-link:focus {
|
||||
a.firstrun-link:hover, a.firstrun-link:active, a.firstrun-link:focus {
|
||||
color: #FFF; }
|
||||
|
||||
.firstrun-title {
|
||||
|
|
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
|
@ -230,8 +230,10 @@ body {
|
|||
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Ubuntu', 'Helvetica Neue', sans-serif;
|
||||
font-size: 16px;
|
||||
overflow-y: scroll; }
|
||||
body.hide-onboarding > #onboarding-overlay-button {
|
||||
body.hide-onboarding, body.hide-main > #onboarding-overlay-button {
|
||||
display: none !important; }
|
||||
body.hide-main > #onboarding-notification-bar {
|
||||
display: none; }
|
||||
|
||||
h1,
|
||||
h2 {
|
||||
|
@ -332,6 +334,8 @@ main {
|
|||
margin: auto;
|
||||
padding-bottom: 68px;
|
||||
width: 274px; }
|
||||
.hide-main main {
|
||||
visibility: hidden; }
|
||||
@media (min-width: 482px) {
|
||||
main {
|
||||
width: 402px; } }
|
||||
|
@ -814,6 +818,7 @@ main {
|
|||
.overlay-wrapper {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100vw;
|
||||
height: 100vh;
|
||||
z-index: 21000;
|
||||
|
@ -853,11 +858,15 @@ main {
|
|||
transition: none;
|
||||
opacity: 1; }
|
||||
|
||||
.background {
|
||||
.background,
|
||||
body.hide-main {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
display: block;
|
||||
background: url("../data/content/assets/fox-tail.png") top -200px center no-repeat, linear-gradient(to bottom, #003EAA 40%, #004EC2 60%, #0060DF 80%, #0080FF 90%, #00C7FF 100%) top center no-repeat, #003EAA;
|
||||
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; }
|
||||
|
||||
|
@ -976,11 +985,11 @@ main {
|
|||
background: url("../data/content/assets/sync-devices.svg") bottom center no-repeat;
|
||||
padding-bottom: 210px; }
|
||||
|
||||
.firstrun-link {
|
||||
a.firstrun-link {
|
||||
color: #FFF;
|
||||
display: block;
|
||||
text-decoration: underline; }
|
||||
.firstrun-link:hover, .firstrun-link:active, .firstrun-link:focus {
|
||||
a.firstrun-link:hover, a.firstrun-link:active, a.firstrun-link:focus {
|
||||
color: #FFF; }
|
||||
|
||||
.firstrun-title {
|
||||
|
|
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
|
@ -1543,7 +1543,7 @@ class _Base extends react__WEBPACK_IMPORTED_MODULE_8___default.a.PureComponent {
|
|||
this.sendNewTabRehydrated(App);
|
||||
addLocaleDataForReactIntl(locale);
|
||||
if (this.props.isFirstrun) {
|
||||
global.document.body.classList.add("welcome");
|
||||
global.document.body.classList.add("welcome", "hide-main");
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1568,9 +1568,9 @@ class _Base extends react__WEBPACK_IMPORTED_MODULE_8___default.a.PureComponent {
|
|||
|
||||
updateTheme() {
|
||||
const bodyClassName = ["activity-stream",
|
||||
// If we skipped the about:welcome overlay and removed the CSS class
|
||||
// we don't want to add it back to the Activity Stream view
|
||||
document.body.classList.contains("welcome") ? "welcome" : ""].filter(v => v).join(" ");
|
||||
// If we skipped the about:welcome overlay and removed the CSS classes
|
||||
// we don't want to add them back to the Activity Stream view
|
||||
document.body.classList.contains("welcome") ? "welcome" : "", document.body.classList.contains("hide-main") ? "hide-main" : ""].filter(v => v).join(" ");
|
||||
global.document.body.className = bodyClassName;
|
||||
}
|
||||
|
||||
|
@ -4644,6 +4644,7 @@ class _StartupOverlay extends react__WEBPACK_IMPORTED_MODULE_3___default.a.PureC
|
|||
|
||||
removeOverlay() {
|
||||
window.removeEventListener("visibilitychange", this.removeOverlay);
|
||||
document.body.classList.remove("hide-main");
|
||||
this.setState({ show: false });
|
||||
setTimeout(() => {
|
||||
// Allow scrolling and fully remove overlay after animation finishes.
|
||||
|
@ -4696,7 +4697,7 @@ class _StartupOverlay extends react__WEBPACK_IMPORTED_MODULE_3___default.a.PureC
|
|||
);
|
||||
return react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(
|
||||
"div",
|
||||
{ className: `overlay-wrapper ${this.state.show ? "show " : ""}` },
|
||||
{ className: `overlay-wrapper ${this.state.show ? "show" : ""}` },
|
||||
react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement("div", { className: "background" }),
|
||||
react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(
|
||||
"div",
|
||||
|
@ -7691,9 +7692,7 @@ const dedupe = new Dedupe(site => site && site.url);
|
|||
const INITIAL_STATE = {
|
||||
App: {
|
||||
// Have we received real data from the app yet?
|
||||
initialized: false,
|
||||
// The version of the system-addon
|
||||
version: null
|
||||
initialized: false
|
||||
},
|
||||
Snippets: { initialized: false },
|
||||
TopSites: {
|
||||
|
|
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
|
@ -14,7 +14,7 @@ Schema definitions/validations that can be used for tests can be found in `syste
|
|||
|
||||
```js
|
||||
{
|
||||
"addon_version": "1.0.0",
|
||||
"addon_version": "20180710100040",
|
||||
"client_id": "374dc4d8-0cb2-4ac5-a3cf-c5a9bc3c602e",
|
||||
"locale": "en-US",
|
||||
"version": "62.0a1",
|
||||
|
@ -36,7 +36,7 @@ Schema definitions/validations that can be used for tests can be found in `syste
|
|||
{
|
||||
// These fields are sent from the client
|
||||
"action": "activity_stream_session",
|
||||
"addon_version": "1.0.0",
|
||||
"addon_version": "20180710100040",
|
||||
"client_id": "374dc4d8-0cb2-4ac5-a3cf-c5a9bc3c602e",
|
||||
"locale": "en-US",
|
||||
"page": ["about:newtab" | "about:home" | "about:welcome" | "unknown"],
|
||||
|
@ -60,7 +60,7 @@ Schema definitions/validations that can be used for tests can be found in `syste
|
|||
{
|
||||
"action": "activity_stream_user_event",
|
||||
"action_position": "3",
|
||||
"addon_version": "1.0.0",
|
||||
"addon_version": "20180710100040",
|
||||
"client_id": "374dc4d8-0cb2-4ac5-a3cf-c5a9bc3c602e",
|
||||
"event": "click or scroll or search or delete",
|
||||
"locale": "en-US",
|
||||
|
@ -84,7 +84,7 @@ Schema definitions/validations that can be used for tests can be found in `syste
|
|||
```js
|
||||
{
|
||||
"action": "activity_stream_performance_event",
|
||||
"addon_version": "1.0.0",
|
||||
"addon_version": "20180710100040",
|
||||
"client_id": "374dc4d8-0cb2-4ac5-a3cf-c5a9bc3c602e",
|
||||
"event": "previewCacheHit",
|
||||
"event_id": "45f1912165ca4dfdb5c1c2337dbdc58f",
|
||||
|
@ -108,7 +108,7 @@ Schema definitions/validations that can be used for tests can be found in `syste
|
|||
```js
|
||||
{
|
||||
"action": "activity_stream_undesired_event",
|
||||
"addon_version": "1.0.12",
|
||||
"addon_version": "20180710100040",
|
||||
"client_id": "26288a14-5cc4-d14f-ae0a-bb01ef45be9c",
|
||||
"event": "MISSING_IMAGE",
|
||||
"locale": "en-US",
|
||||
|
@ -132,7 +132,7 @@ Schema definitions/validations that can be used for tests can be found in `syste
|
|||
"client_id": "n/a",
|
||||
"session_id": "n/a",
|
||||
"impression_id": "{005deed0-e3e4-4c02-a041-17405fd703f6}",
|
||||
"addon_version": "1.0.12",
|
||||
"addon_version": "20180710100040",
|
||||
"locale": "en-US",
|
||||
"source": "pocket",
|
||||
"page": ["about:newtab" | "about:home" | "about:welcome" | "unknown"]
|
||||
|
@ -147,7 +147,7 @@ Schema definitions/validations that can be used for tests can be found in `syste
|
|||
"client_id": "n/a",
|
||||
"session_id": "n/a",
|
||||
"impression_id": "{005deed0-e3e4-4c02-a041-17405fd703f6}",
|
||||
"addon_version": "1.0.12",
|
||||
"addon_version": "20180710100040",
|
||||
"locale": "en-US",
|
||||
"source": "pocket",
|
||||
"page": "unknown",
|
||||
|
@ -169,7 +169,7 @@ Schema definitions/validations that can be used for tests can be found in `syste
|
|||
"action": ["snippets_user_event" | "onboarding_user_event"],
|
||||
"impression_id": "{005deed0-e3e4-4c02-a041-17405fd703f6}",
|
||||
"source": "pocket",
|
||||
"addon_version": "1.0.12",
|
||||
"addon_version": "20180710100040",
|
||||
"locale": "en-US",
|
||||
"source": "NEWTAB_FOOTER_BAR",
|
||||
"message_id": "some_snippet_id",
|
||||
|
@ -181,7 +181,7 @@ Schema definitions/validations that can be used for tests can be found in `syste
|
|||
|-----|-------------|:-----:|
|
||||
| `action_position` | [Optional] The index of the element in the `source` that was clicked. | :one:
|
||||
| `action` | [Required] Either `activity_stream_event`, `activity_stream_session`, or `activity_stream_performance`. | :one:
|
||||
| `addon_version` | [Required] The version of the Activity Stream addon. | :one:
|
||||
| `addon_version` | [Required] Firefox build ID, i.e. `Services.appinfo.appBuildID`. | :one:
|
||||
| `client_id` | [Required] An identifier for this client. | :one:
|
||||
| `card_type` | [Optional] ("bookmark", "pocket", "trending", "pinned") | :one:
|
||||
| `date` | [Auto populated by Onyx] The date in YYYY-MM-DD format. | :three:
|
||||
|
|
|
@ -56,7 +56,7 @@ A user event ping includes some basic metadata (tab id, addon version, etc.) as
|
|||
"page": ["about:newtab" | "about:home" | "about:welcome" | "unknown" ],
|
||||
"client_id": "26288a14-5cc4-d14f-ae0a-bb01ef45be9c",
|
||||
"session_id": "005deed0-e3e4-4c02-a041-17405fd703f6",
|
||||
"addon_version": "1.0.12",
|
||||
"addon_version": "20180710100040",
|
||||
"locale": "en-US",
|
||||
"action": "activity_stream_event",
|
||||
"user_prefs": 7
|
||||
|
@ -76,7 +76,7 @@ A user event ping includes some basic metadata (tab id, addon version, etc.) as
|
|||
"page": ["about:newtab" | "about:home" | "about:welcome" | "unknown"],
|
||||
"client_id": "26288a14-5cc4-d14f-ae0a-bb01ef45be9c",
|
||||
"session_id": "005deed0-e3e4-4c02-a041-17405fd703f6",
|
||||
"addon_version": "1.0.12",
|
||||
"addon_version": "20180710100040",
|
||||
"locale": "en-US",
|
||||
"user_prefs": 7
|
||||
}
|
||||
|
@ -99,7 +99,7 @@ A user event ping includes some basic metadata (tab id, addon version, etc.) as
|
|||
"page": ["about:newtab" | "about:home" | "about:welcome" | "unknown"],
|
||||
"client_id": "26288a14-5cc4-d14f-ae0a-bb01ef45be9c",
|
||||
"session_id": "005deed0-e3e4-4c02-a041-17405fd703f6",
|
||||
"addon_version": "1.0.12",
|
||||
"addon_version": "20180710100040",
|
||||
"locale": "en-US",
|
||||
"user_prefs": 7
|
||||
}
|
||||
|
@ -122,7 +122,7 @@ A user event ping includes some basic metadata (tab id, addon version, etc.) as
|
|||
"page": ["about:newtab" | "about:home" | "about:welcome" | "unknown"],
|
||||
"client_id": "26288a14-5cc4-d14f-ae0a-bb01ef45be9c",
|
||||
"session_id": "005deed0-e3e4-4c02-a041-17405fd703f6",
|
||||
"addon_version": "1.0.12",
|
||||
"addon_version": "20180710100040",
|
||||
"locale": "en-US",
|
||||
"user_prefs": 7
|
||||
}
|
||||
|
@ -145,7 +145,7 @@ A user event ping includes some basic metadata (tab id, addon version, etc.) as
|
|||
"page": ["about:newtab" | "about:home" | "about:welcome" | "unknown"],
|
||||
"client_id": "26288a14-5cc4-d14f-ae0a-bb01ef45be9c",
|
||||
"session_id": "005deed0-e3e4-4c02-a041-17405fd703f6",
|
||||
"addon_version": "1.0.12",
|
||||
"addon_version": "20180710100040",
|
||||
"locale": "en-US",
|
||||
"user_prefs": 7
|
||||
}
|
||||
|
@ -167,7 +167,7 @@ A user event ping includes some basic metadata (tab id, addon version, etc.) as
|
|||
"page": ["about:newtab" | "about:home" | "about:welcome"],
|
||||
"client_id": "26288a14-5cc4-d14f-ae0a-bb01ef45be9c",
|
||||
"session_id": "005deed0-e3e4-4c02-a041-17405fd703f6",
|
||||
"addon_version": "1.0.12",
|
||||
"addon_version": "20180710100040",
|
||||
"locale": "en-US",
|
||||
"user_prefs": 7
|
||||
}
|
||||
|
@ -189,7 +189,7 @@ A user event ping includes some basic metadata (tab id, addon version, etc.) as
|
|||
"page": ["about:newtab" | "about:home" | "about:welcome" | "unknown"],
|
||||
"client_id": "26288a14-5cc4-d14f-ae0a-bb01ef45be9c",
|
||||
"session_id": "005deed0-e3e4-4c02-a041-17405fd703f6",
|
||||
"addon_version": "1.0.12",
|
||||
"addon_version": "20180710100040",
|
||||
"locale": "en-US",
|
||||
"user_prefs": 7
|
||||
}
|
||||
|
@ -212,7 +212,7 @@ A user event ping includes some basic metadata (tab id, addon version, etc.) as
|
|||
"page": ["about:newtab" | "about:home" | "about:welcome" | "unknown"],
|
||||
"client_id": "26288a14-5cc4-d14f-ae0a-bb01ef45be9c",
|
||||
"session_id": "005deed0-e3e4-4c02-a041-17405fd703f6",
|
||||
"addon_version": "1.0.12",
|
||||
"addon_version": "20180710100040",
|
||||
"locale": "en-US",
|
||||
"user_prefs": 7
|
||||
}
|
||||
|
@ -235,7 +235,7 @@ A user event ping includes some basic metadata (tab id, addon version, etc.) as
|
|||
"page": ["about:newtab" | "about:home" | "about:welcome" | "unknown"],
|
||||
"client_id": "26288a14-5cc4-d14f-ae0a-bb01ef45be9c",
|
||||
"session_id": "005deed0-e3e4-4c02-a041-17405fd703f6",
|
||||
"addon_version": "1.0.12",
|
||||
"addon_version": "20180710100040",
|
||||
"locale": "en-US",
|
||||
"user_prefs": 7
|
||||
}
|
||||
|
@ -252,7 +252,7 @@ A user event ping includes some basic metadata (tab id, addon version, etc.) as
|
|||
"page": ["about:newtab" | "about:home" | "about:welcome" | "unknown"],
|
||||
"client_id": "26288a14-5cc4-d14f-ae0a-bb01ef45be9c",
|
||||
"session_id": "005deed0-e3e4-4c02-a041-17405fd703f6",
|
||||
"addon_version": "1.0.12",
|
||||
"addon_version": "20180710100040",
|
||||
"locale": "en-US",
|
||||
"user_prefs": 7
|
||||
}
|
||||
|
@ -269,7 +269,7 @@ A user event ping includes some basic metadata (tab id, addon version, etc.) as
|
|||
"page": ["about:newtab" | "about:home" | "about:welcome" | "unknown"],
|
||||
"client_id": "26288a14-5cc4-d14f-ae0a-bb01ef45be9c",
|
||||
"session_id": "005deed0-e3e4-4c02-a041-17405fd703f6",
|
||||
"addon_version": "1.0.12",
|
||||
"addon_version": "20180710100040",
|
||||
"locale": "en-US",
|
||||
"user_prefs": 7
|
||||
}
|
||||
|
@ -287,7 +287,7 @@ A user event ping includes some basic metadata (tab id, addon version, etc.) as
|
|||
"page": ["about:newtab" | "about:home" | "about:welcome" | "unknown"],
|
||||
"client_id": "26288a14-5cc4-d14f-ae0a-bb01ef45be9c",
|
||||
"session_id": "005deed0-e3e4-4c02-a041-17405fd703f6",
|
||||
"addon_version": "1.0.12",
|
||||
"addon_version": "20180710100040",
|
||||
"locale": "en-US",
|
||||
"user_prefs": 7
|
||||
}
|
||||
|
@ -327,7 +327,7 @@ All `"activity_stream_session"` pings have the following basic shape. Some field
|
|||
"action": "activity_stream_session",
|
||||
"client_id": "26288a14-5cc4-d14f-ae0a-bb01ef45be9c",
|
||||
"session_id": "005deed0-e3e4-4c02-a041-17405fd703f6",
|
||||
"addon_version": "1.0.12",
|
||||
"addon_version": "20180710100040",
|
||||
"locale": "en-US",
|
||||
"page": ["about:newtab" | "about:home" | "about:welcome" | "unknown"],
|
||||
"session_duration": 4199,
|
||||
|
@ -426,7 +426,7 @@ This reports all the Pocket recommended articles (a list of `id`s) when the user
|
|||
"client_id": "n/a",
|
||||
"session_id": "n/a",
|
||||
"impression_id": "{005deed0-e3e4-4c02-a041-17405fd703f6}",
|
||||
"addon_version": "1.0.12",
|
||||
"addon_version": "20180710100040",
|
||||
"locale": "en-US",
|
||||
"source": "pocket",
|
||||
"page": ["about:newtab" | "about:home" | "about:welcome" | "unknown"],
|
||||
|
@ -447,7 +447,7 @@ This reports the user's interaction with those Pocket tiles.
|
|||
"client_id": "n/a",
|
||||
"session_id": "n/a",
|
||||
"impression_id": "{005deed0-e3e4-4c02-a041-17405fd703f6}",
|
||||
"addon_version": "1.0.12",
|
||||
"addon_version": "20180710100040",
|
||||
"locale": "en-US",
|
||||
"source": "pocket",
|
||||
"page": ["about:newtab" | "about:home" | "about:welcome" | "unknown"],
|
||||
|
@ -473,7 +473,7 @@ This reports the duration of the domain affinity calculation in milliseconds.
|
|||
{
|
||||
"action": "activity_stream_performance_event",
|
||||
"client_id": "26288a14-5cc4-d14f-ae0a-bb01ef45be9c",
|
||||
"addon_version": "1.0.12",
|
||||
"addon_version": "20180710100040",
|
||||
"locale": "en-US",
|
||||
"user_prefs": 7,
|
||||
"event": "topstories.domain.affinity.calculation.ms",
|
||||
|
@ -493,7 +493,7 @@ This reports when the addon fails to initialize
|
|||
{
|
||||
"action": "activity_stream_undesired_event",
|
||||
"client_id": "26288a14-5cc4-d14f-ae0a-bb01ef45be9c",
|
||||
"addon_version": "1.0.12",
|
||||
"addon_version": "20180710100040",
|
||||
"locale": "en-US",
|
||||
"user_prefs": 7,
|
||||
"event": "ADDON_INIT_FAILED",
|
||||
|
@ -514,7 +514,7 @@ This reports the impression of Activity Stream Router.
|
|||
"action": ["snippets_user_event" | "onboarding_user_event"],
|
||||
"impression_id": "{005deed0-e3e4-4c02-a041-17405fd703f6}",
|
||||
"source": "pocket",
|
||||
"addon_version": "1.0.12",
|
||||
"addon_version": "20180710100040",
|
||||
"locale": "en-US",
|
||||
"source": "NEWTAB_FOOTER_BAR",
|
||||
"message_id": "some_snippet_id",
|
||||
|
@ -531,7 +531,7 @@ This reports the user's interaction with Activity Stream Router.
|
|||
{
|
||||
"client_id": "n/a",
|
||||
"action": ["snippets_user_event" | "onboarding_user_event"],
|
||||
"addon_version": "1.0.12",
|
||||
"addon_version": "20180710100040",
|
||||
"impression_id": "{005deed0-e3e4-4c02-a041-17405fd703f6}",
|
||||
"locale": "en-US",
|
||||
"source": "NEWTAB_FOOTER_BAR",
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
<em:type>2</em:type>
|
||||
<em:bootstrap>true</em:bootstrap>
|
||||
<em:unpack>false</em:unpack>
|
||||
<em:version>2018.07.06.1113-783442c0</em:version>
|
||||
<em:version>2018.07.12.1202-ecc4456e</em:version>
|
||||
<em:name>Activity Stream</em:name>
|
||||
<em:description>A rich visual history feed and a reimagined home page make it easier than ever to find exactly what you're looking for in Firefox.</em:description>
|
||||
<em:multiprocessCompatible>true</em:multiprocessCompatible>
|
||||
|
|
|
@ -47,9 +47,13 @@ class ASRouterFeed {
|
|||
onAction(action) {
|
||||
switch (action.type) {
|
||||
case at.INIT:
|
||||
case at.PREF_CHANGED:
|
||||
this.enableOrDisableBasedOnPref();
|
||||
break;
|
||||
case at.PREF_CHANGED:
|
||||
if (["asrouterOnboardingCohort", "asrouterExperimentEnabled"].includes(action.data.name)) {
|
||||
this.enableOrDisableBasedOnPref();
|
||||
}
|
||||
break;
|
||||
case at.UNINIT:
|
||||
this.disable();
|
||||
break;
|
||||
|
|
|
@ -278,15 +278,9 @@ for (const config of FEEDS_DATA) {
|
|||
this.ActivityStream = class ActivityStream {
|
||||
/**
|
||||
* constructor - Initializes an instance of ActivityStream
|
||||
*
|
||||
* @param {object} options Options for the ActivityStream instance
|
||||
* @param {string} options.id Add-on ID. e.g. "activity-stream@mozilla.org".
|
||||
* @param {string} options.version Version of the add-on. e.g. "0.1.0"
|
||||
* @param {string} options.newTabURL URL of New Tab page on which A.S. is displayed. e.g. "about:newtab"
|
||||
*/
|
||||
constructor(options = {}) {
|
||||
constructor() {
|
||||
this.initialized = false;
|
||||
this.options = options;
|
||||
this.store = new Store();
|
||||
this.feeds = FEEDS_CONFIG;
|
||||
this._defaultPrefs = new DefaultPrefs(PREFS_CONFIG);
|
||||
|
@ -300,7 +294,7 @@ this.ActivityStream = class ActivityStream {
|
|||
// Hook up the store and let all feeds and pages initialize
|
||||
this.store.init(this.feeds, ac.BroadcastToContent({
|
||||
type: at.INIT,
|
||||
data: {version: this.options.version}
|
||||
data: {}
|
||||
}), {type: at.UNINIT});
|
||||
|
||||
this.initialized = true;
|
||||
|
|
|
@ -288,9 +288,8 @@ this.TelemetryFeed = class TelemetryFeed {
|
|||
* @return {obj} A telemetry ping
|
||||
*/
|
||||
createPing(portID) {
|
||||
const appInfo = this.store.getState().App;
|
||||
const ping = {
|
||||
addon_version: appInfo.version,
|
||||
addon_version: Services.appinfo.appBuildID,
|
||||
locale: Services.locale.getAppLocaleAsLangTag(),
|
||||
user_prefs: this.userPreferences
|
||||
};
|
||||
|
@ -366,10 +365,9 @@ this.TelemetryFeed = class TelemetryFeed {
|
|||
}
|
||||
|
||||
createASRouterEvent(action) {
|
||||
const appInfo = this.store.getState().App;
|
||||
const ping = {
|
||||
client_id: "n/a",
|
||||
addon_version: appInfo.version,
|
||||
addon_version: Services.appinfo.appBuildID,
|
||||
locale: Services.locale.getAppLocaleAsLangTag(),
|
||||
impression_id: this._impressionId
|
||||
};
|
||||
|
|
|
@ -191,6 +191,8 @@ firstrun_form_sub_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.
|
||||
firstrun_extra_legal_links=بمواصلة هذه العملية أنت توافق على {terms} و{privacy}.
|
||||
|
|
|
@ -191,6 +191,8 @@ 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}.
|
||||
|
|
|
@ -191,6 +191,8 @@ 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}.
|
||||
|
|
|
@ -191,6 +191,8 @@ firstrun_form_sub_header=evit kenderc'hel etrezek Firefox Sync.
|
|||
|
||||
firstrun_email_input_placeholder=Postel
|
||||
|
||||
firstrun_invalid_input=Postel talvoudek azgoulennet
|
||||
|
||||
# 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=En ur genderc'hel, e savit a-du gant an {terms} hag ar {privacy}.
|
||||
|
|
|
@ -191,6 +191,8 @@ firstrun_form_sub_header=per continuar al Firefox Sync.
|
|||
|
||||
firstrun_email_input_placeholder=Adreça electrònica
|
||||
|
||||
firstrun_invalid_input=Cal una adreça electrònica vàlida
|
||||
|
||||
# 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=Si continueu, accepteu les {terms} i l'{privacy}.
|
||||
|
|
|
@ -78,7 +78,7 @@ search_web_placeholder=Vyhledat na webu
|
|||
# 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=Nejzajímavější příběhy na webu vybrané podle toho, co sami čtete. To je služba Pocket od Mozilly.
|
||||
section_disclaimer_topstories=Nejzajímavější články na webu vybrané podle toho, co sami čtete. To je služba Pocket od Mozilly.
|
||||
section_disclaimer_topstories_linktext=Zjistit, jak to funguje.
|
||||
# LOCALIZATION NOTE (section_disclaimer_topstories_buttontext): The text of
|
||||
# the button used to acknowledge, and hide this disclaimer in the future.
|
||||
|
@ -98,7 +98,7 @@ prefs_section_rows_option={num} řádek;{num} řádky;{num} řádků
|
|||
prefs_search_header=Vyhledávání na webu
|
||||
prefs_topsites_description=Nejnavštěvovanější stránky
|
||||
prefs_topstories_description2=Skvělý obsah z celého webu, vybraný speciálně pro vás
|
||||
prefs_topstories_options_sponsored_label=Sponzorované příběhy
|
||||
prefs_topstories_options_sponsored_label=Sponzorované články
|
||||
prefs_topstories_sponsored_learn_more=Zjistit více
|
||||
prefs_highlights_description=Výběr z uložených nebo navštívených stránek
|
||||
prefs_highlights_options_visited_label=Navštívené stránky
|
||||
|
@ -142,13 +142,13 @@ topsites_form_image_validation=Obrázek se nepodařilo načíst. Zkuste jinou UR
|
|||
pocket_read_more=Populární témata:
|
||||
# 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=Zobrazit více příběhů
|
||||
pocket_read_even_more=Zobrazit více článků
|
||||
|
||||
highlights_empty_state=Začněte prohlížet a my vám zde ukážeme některé skvělé články, videa a další stránky, které jste nedávno viděli nebo uložili do záložek.
|
||||
# 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=Už jste všechno přečetli. Další příběhy ze služby {provider} tu najdete zase později. Ale pokud se nemůžete dočkat, vyberte své oblíbené téma a podívejte se na další velké příběhy z celého webu.
|
||||
topstories_empty_state=Už jste všechno přečetli. Další články ze služby {provider} tu najdete zase později. Ale pokud se nemůžete dočkat, vyberte své oblíbené téma a podívejte se na další velké články z celého webu.
|
||||
|
||||
# LOCALIZATION NOTE (manual_migration_explanation2): This message is shown to encourage users to
|
||||
# import their browser profile from another browser they might be using.
|
||||
|
@ -191,6 +191,8 @@ firstrun_form_sub_header=a používejte službu Firefox Sync.
|
|||
|
||||
firstrun_email_input_placeholder=E-mail
|
||||
|
||||
firstrun_invalid_input=Je požadován platný e-mail
|
||||
|
||||
# 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=Pokračováním souhlasíte s {terms} a {privacy}.
|
||||
|
|
|
@ -191,6 +191,8 @@ firstrun_form_sub_header=i barhau i Firefox Sync.
|
|||
|
||||
firstrun_email_input_placeholder=E-bost
|
||||
|
||||
firstrun_invalid_input=Mae angen e-bost dilys
|
||||
|
||||
# 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=Gan barhau, rydych yn cytuno i delerau'r {terms} a'r {privacy}.
|
||||
|
|
|
@ -191,6 +191,8 @@ firstrun_form_sub_header=aby z Firefox Sync pókšacował.
|
|||
|
||||
firstrun_email_input_placeholder=E-mail
|
||||
|
||||
firstrun_invalid_input=Płaśiwa e-mailowa adresa trěbna
|
||||
|
||||
# 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=Gaž pókšacujośo, zwolijośo do {terms} a {privacy}.
|
||||
|
|
|
@ -191,6 +191,8 @@ 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
|
||||
# {privacy} is equal to firstrun_privacy_notice. {terms} and {privacy} are clickable links.
|
||||
firstrun_extra_legal_links=Συνεχίζοντας, συμφωνείτε με τους {terms} και τη {privacy}.
|
||||
|
|
|
@ -191,6 +191,8 @@ firstrun_form_sub_header=to continue to Firefox Sync.
|
|||
|
||||
firstrun_email_input_placeholder=Email
|
||||
|
||||
firstrun_invalid_input=Valid email required
|
||||
|
||||
# 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=By proceeding, you agree to the {terms} and {privacy}.
|
||||
|
|
|
@ -191,6 +191,8 @@ firstrun_form_sub_header=para pasar a Firefox Sync.
|
|||
|
||||
firstrun_email_input_placeholder=Correo electrónico
|
||||
|
||||
firstrun_invalid_input=Se requiere un correo electrónico válido
|
||||
|
||||
# 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=Al proceder, acepta los {terms} y {privacy}.
|
||||
|
|
|
@ -191,6 +191,8 @@ firstrun_form_sub_header=para conectarte a Firefox Sync.
|
|||
|
||||
firstrun_email_input_placeholder=Correo
|
||||
|
||||
firstrun_invalid_input=Se requiere un correo válido
|
||||
|
||||
# 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=Al proceder, aceptas los {terms} y la {privacy}.
|
||||
|
|
|
@ -102,7 +102,7 @@ prefs_topstories_options_sponsored_label=Historias patrocinadas
|
|||
prefs_topstories_sponsored_learn_more=Más información
|
||||
prefs_highlights_description=Una selección de sitios que ha guardado o visitado
|
||||
prefs_highlights_options_visited_label=Páginas visitadas
|
||||
prefs_highlights_options_download_label=Descargas recientes
|
||||
prefs_highlights_options_download_label=Descargas más recientes
|
||||
prefs_highlights_options_pocket_label=Páginas guardadas en Pocket
|
||||
prefs_snippets_description=Actualizaciones de Mozilla y Firefox
|
||||
settings_pane_button_label=Personalizar la página Nueva pestaña
|
||||
|
@ -191,6 +191,7 @@ firstrun_form_sub_header=para acceder a Firefox Sync.
|
|||
|
||||
firstrun_email_input_placeholder=Correo electrónico
|
||||
|
||||
|
||||
# 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=Al continuar aceptas los {terms} y el {privacy}.
|
||||
|
|
|
@ -191,6 +191,8 @@ firstrun_form_sub_header=ngam jokkude to Firefox Sync
|
|||
|
||||
firstrun_email_input_placeholder=Iimeel
|
||||
|
||||
firstrun_invalid_input=Iimeel gollotooɗo hatojinaa
|
||||
|
||||
# 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=Fuɗɗaade, woni a jaɓii {kuule} ɗee kam e {suturo}oo.
|
||||
|
|
|
@ -191,6 +191,8 @@ firstrun_form_sub_header=om troch te gean nei Firefox Sync.
|
|||
|
||||
firstrun_email_input_placeholder=E-mailadres
|
||||
|
||||
firstrun_invalid_input=Jildich e-mailadres fereaske
|
||||
|
||||
# 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=Troch fierder te gean, gean jo akkoard mei de {terms} en {privacy}.
|
||||
|
|
|
@ -96,10 +96,12 @@ prefs_home_description=चुनें जो सामग्री आप अ
|
|||
prefs_section_rows_option={num} row;{num} rows
|
||||
prefs_search_header=वेब खोज
|
||||
prefs_topsites_description=साइटों आप सबसे अधिक यात्रा
|
||||
prefs_topstories_description2=वेब से शानदार सामग्री, आपके लिए व्यक्तिगत बनाया गया
|
||||
prefs_topstories_options_sponsored_label=प्रायोजित कहानियां
|
||||
prefs_topstories_sponsored_learn_more=अधिक जानें
|
||||
prefs_highlights_description=आपके द्वारा सहेजी गई या विज़िट की गई साइटों का चयन
|
||||
prefs_highlights_options_visited_label=देखे गए पृष्ठ
|
||||
prefs_highlights_options_pocket_label=पॉकेट में सहेजे गए पृष्ठ
|
||||
prefs_snippets_description=Mozilla और Firefox से अद्यतन
|
||||
settings_pane_button_label=अपने नए टैब पृष्ठ को अनुकूलित करें
|
||||
settings_pane_topsites_header=सर्वोच्च साइटें
|
||||
|
@ -175,6 +177,7 @@ 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.
|
||||
firstrun_title=अपने साथ Firefox चुने
|
||||
firstrun_content=अपने सभी उपकरणों पर अपना पुस्तचिह्न, इतिहास, कूटशब्द और अन्य सेटिंग प्राप्त करें.
|
||||
firstrun_learn_more_link=Firefox खातों के बारे में अधिक जानें
|
||||
|
||||
|
@ -186,6 +189,8 @@ firstrun_form_sub_header=Firefox सिंक के लिए जारी र
|
|||
|
||||
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} से सहमत हैं|
|
||||
|
|
|
@ -191,6 +191,8 @@ firstrun_form_sub_header=zo byšće z Firefox Sync pokročował.
|
|||
|
||||
firstrun_email_input_placeholder=E-mejl
|
||||
|
||||
firstrun_invalid_input=Płaćiwa e-mejlowa adresa trěbna
|
||||
|
||||
# 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=Hdyž pokročujeće, zwoliće do {terms} a {privacy}.
|
||||
|
|
|
@ -191,6 +191,8 @@ firstrun_form_sub_header=és lépjen tovább a Firefox Synchez.
|
|||
|
||||
firstrun_email_input_placeholder=E-mail
|
||||
|
||||
firstrun_invalid_input=Érvényes e-mail szükséges
|
||||
|
||||
# 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=A folytatással elfogadja a {terms} és az {privacy}.
|
||||
|
|
|
@ -191,6 +191,8 @@ firstrun_form_sub_header=pro continuar con Firefox Sync.
|
|||
|
||||
firstrun_email_input_placeholder=Email
|
||||
|
||||
firstrun_invalid_input=Il es necesse un valide adresse email
|
||||
|
||||
# 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=Si tu procede, tu consenti a {terms} e {privacy}.
|
||||
|
|
|
@ -191,6 +191,8 @@ firstrun_form_sub_header=Lanjutkan ke Firefox Sync.
|
|||
|
||||
firstrun_email_input_placeholder=Surel
|
||||
|
||||
firstrun_invalid_input=Surel harus valid
|
||||
|
||||
# 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=Dengan melanjutkan, Anda menyetujui {terms} dan {privacy}.
|
||||
|
|
|
@ -191,6 +191,8 @@ 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}.
|
||||
|
|
|
@ -191,6 +191,8 @@ firstrun_form_sub_header=akken ad tkemleḍ akked Firefox Sync
|
|||
|
||||
firstrun_email_input_placeholder=Imayl
|
||||
|
||||
firstrun_invalid_input=Imayl ameɣtu ilaq
|
||||
|
||||
# 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=Ma tkemmleḍ, ad tqebleḍ {terms} d {privacy}.
|
||||
|
|
|
@ -191,6 +191,8 @@ firstrun_form_sub_header=Firefox синхрондауына жалғастыру
|
|||
|
||||
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} шарттарымен келісесіз.
|
||||
|
|
|
@ -19,6 +19,7 @@ header_recommended_by=បានណែនាំដោយ {provider}
|
|||
type_label_visited=បានចូលមើល
|
||||
type_label_bookmarked=បានចំណាំ
|
||||
type_label_recommended=និន្នាការ
|
||||
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.
|
||||
|
@ -140,6 +141,7 @@ manual_migration_import_button=នាំចូលឥឡូវនេះ
|
|||
# firstrun_form_header is displayed more boldly as the call to action.
|
||||
|
||||
|
||||
|
||||
# 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.
|
||||
|
||||
|
|
|
@ -191,6 +191,8 @@ firstrun_form_sub_header=pe continoâ con Firefox Sync.
|
|||
|
||||
firstrun_email_input_placeholder=Email
|
||||
|
||||
firstrun_invalid_input=Serve 'na email bonn-a
|
||||
|
||||
# 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=Se ti væ avanti t'ê d'acòrdio co-i {terms} e l'{privacy}.
|
||||
|
|
|
@ -191,6 +191,8 @@ firstrun_form_sub_header=untuk ke Firefox Sync
|
|||
|
||||
firstrun_email_input_placeholder=E-mel
|
||||
|
||||
firstrun_invalid_input=Perlu e-mel yang sah
|
||||
|
||||
# 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=Dengan meneruskan, anda bersetuju dengan {terms} dan {privacy}.
|
||||
|
|
|
@ -191,6 +191,8 @@ 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
|
||||
# {privacy} is equal to firstrun_privacy_notice. {terms} and {privacy} are clickable links.
|
||||
firstrun_extra_legal_links=Ved å fortsette, godtar du {terms} og {privacy}.
|
||||
|
|
|
@ -191,6 +191,8 @@ firstrun_form_sub_header=for å fortsetje til Firefox Sync.
|
|||
|
||||
firstrun_email_input_placeholder=E-post
|
||||
|
||||
firstrun_invalid_input=Gyldig e-post påkravd
|
||||
|
||||
# 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=Ved å fortsetje, godtek du {terms} og {privacy}.
|
||||
|
|
|
@ -44,7 +44,7 @@ prefs_search_header=Pasek wyszukiwania
|
|||
prefs_topsites_description=Popularne odwiedzane strony
|
||||
prefs_topstories_description2=Świetne rzeczy z całego Internetu, personalizowane specjalnie dla Ciebie
|
||||
prefs_topstories_options_sponsored_label=Sponsorowane treści
|
||||
prefs_topstories_sponsored_learn_more=Więcej informacji
|
||||
prefs_topstories_sponsored_learn_more=Więcej informacji
|
||||
prefs_highlights_description=Wybierane z zachowanych i odwiedzonych stron.
|
||||
prefs_highlights_options_visited_label=Historia
|
||||
prefs_highlights_options_download_label=Ostatnio pobrane pliki
|
||||
|
@ -105,10 +105,11 @@ section_menu_action_privacy_notice=Uwagi dotyczące prywatności
|
|||
|
||||
firstrun_title=Zabierz swoje dane ze sobą
|
||||
firstrun_content=Zakładki, historia, hasła i inne ustawienia mogą być dostępne i synchronizowane na wszystkich urządzeniach.
|
||||
firstrun_learn_more_link=Więcej informacji
|
||||
firstrun_learn_more_link=Więcej informacji
|
||||
firstrun_form_header=Wprowadź adres e-mail
|
||||
firstrun_form_sub_header=i zacznij korzystać z Firefox Sync
|
||||
firstrun_email_input_placeholder=Adres e-mail
|
||||
firstrun_invalid_input=Wymagany jest prawidłowy adres e-mail
|
||||
firstrun_extra_legal_links=Kontynuując, akceptujesz {terms} i {privacy}.
|
||||
firstrun_terms_of_service=warunki korzystania z usługi
|
||||
firstrun_privacy_notice=uwagi dotyczące prywatności
|
||||
|
|
|
@ -191,6 +191,8 @@ firstrun_form_sub_header=para continuar para o Firefox Sync.
|
|||
|
||||
firstrun_email_input_placeholder=Email
|
||||
|
||||
firstrun_invalid_input=Email válido requerido
|
||||
|
||||
# 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=Ao proceder, está a concordar com os {terms} e o {privacy}.
|
||||
|
|
|
@ -191,6 +191,8 @@ firstrun_form_sub_header=per cuntinuar cun Firefox Sync.
|
|||
|
||||
firstrun_email_input_placeholder=E-mail
|
||||
|
||||
firstrun_invalid_input=Adressa dad e-mail valida è obligatorica
|
||||
|
||||
# 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=Cun cuntinuar acceptas ti las {terms} e las {privacy}.
|
||||
|
|
|
@ -191,6 +191,8 @@ 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}.
|
||||
|
|
|
@ -191,6 +191,8 @@ firstrun_form_sub_header=för att fortsätta till Firefox Sync.
|
|||
|
||||
firstrun_email_input_placeholder=E-post
|
||||
|
||||
firstrun_invalid_input=Giltig e-postadress krävs
|
||||
|
||||
# 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=Genom att fortsätta godkänner du {terms} och {privacy}.
|
||||
|
|
|
@ -190,6 +190,8 @@ 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.
|
||||
firstrun_extra_legal_links=కొనసాగడం ద్వారా మీరు {terms}, {privacy} లను అంగీకరిస్తున్నారు.
|
||||
|
|
|
@ -1,21 +1,10 @@
|
|||
newtab_page_title=Bagong Tab
|
||||
default_label_loading=Pagkarga…
|
||||
|
||||
header_top_sites=Tuktok na mga Site
|
||||
header_stories=Nangunguna na mga Kwento
|
||||
header_highlights=Naka-highlight
|
||||
header_visit_again=Bisitahin Muli
|
||||
header_bookmarks=Kamakailang mga Bookmark
|
||||
# LOCALIZATION NOTE(header_recommended_by): This is followed by the name
|
||||
# of the corresponding content provider.
|
||||
header_recommended_by=Inirekomenda ni {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=Wala kang anumang mga bookmark.
|
||||
# LOCALIZATION NOTE(header_stories_from): This is followed by a logo of the
|
||||
# corresponding content (stories) provider
|
||||
header_stories_from=mula sa
|
||||
|
||||
# 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
|
||||
|
@ -31,13 +20,8 @@ section_context_menu_button_sr=Buksan ang menu ng konteksto ng seksyon
|
|||
# the page is bookmarked, or is currently open on another device
|
||||
type_label_visited=Binisita
|
||||
type_label_bookmarked=Bookmarked
|
||||
type_label_synced=Naka-sync mula sa ibang kagamitan
|
||||
type_label_recommended=Nagte-trend
|
||||
type_label_pocket=I-save sa Pocket
|
||||
# LOCALIZATION NOTE(type_label_open): Open is an adjective, as in "page is open"
|
||||
type_label_open=Bukas
|
||||
type_label_topic=Topiko
|
||||
type_label_now=Ngayon
|
||||
|
||||
# LOCALIZATION NOTE (menu_action_*): These strings are displayed in a context
|
||||
# menu and are meant as a call to action for a given page.
|
||||
|
@ -45,8 +29,6 @@ type_label_now=Ngayon
|
|||
# bookmarks"
|
||||
menu_action_bookmark=Bookmark
|
||||
menu_action_remove_bookmark=Alisin ang Bookmark
|
||||
menu_action_copy_address=Kopyahin ang Address
|
||||
menu_action_email_link=Email Link…
|
||||
menu_action_open_new_window=Buksan sa isang Bagong Window
|
||||
menu_action_open_private_window=Buksan sa isang Pribadong Bago na Window
|
||||
menu_action_dismiss=Paalisin
|
||||
|
@ -62,11 +44,14 @@ 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
|
||||
|
||||
# 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=Maghanap ng mga {search_term} na may:
|
||||
# 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.
|
||||
|
@ -80,13 +65,6 @@ search_header={search_engine_name} Hanapin
|
|||
# LOCALIZATION NOTE (search_web_placeholder): This is shown in the searchbox when
|
||||
# the user hasn't typed anything yet.
|
||||
search_web_placeholder=Hanapin sa Web
|
||||
search_settings=Baguhin ang mga Setting ng Paghahanap
|
||||
|
||||
# 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=Impormasyon
|
||||
section_info_send_feedback=Magbigay ng Feedback
|
||||
section_info_privacy_notice=Abiso sa Privacy
|
||||
|
||||
# LOCALIZATION NOTE (section_disclaimer_topstories): This is shown below
|
||||
# the topstories section title to provide additional information about
|
||||
|
@ -97,19 +75,6 @@ section_disclaimer_topstories_linktext=Alamin kung paano ito gumagana.
|
|||
# the button used to acknowledge, and hide this disclaimer in the future.
|
||||
section_disclaimer_topstories_buttontext=Sige, nakuha ko
|
||||
|
||||
# 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=Maligayang pagdating sa bagong tab
|
||||
welcome_body=Firefox ay gagamit ng puwang upang ipakita ang iyong mga pinaka-kaugnay na bookmark, artikulo, video, at mga pahina ng kamakailan na iyong binisita, kaya maaari kang bumalik sa mga ito ng madali.
|
||||
welcome_label=Ang pagkilala sa iyong Highlights
|
||||
|
||||
# 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=<1m
|
||||
time_label_minute={number}m
|
||||
time_label_hour={number}h
|
||||
time_label_day={number}d
|
||||
|
||||
# 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
|
||||
|
@ -117,57 +82,29 @@ time_label_day={number}d
|
|||
# what is shown for the homepage, new windows, and new tabs.
|
||||
prefs_home_header=Nilalaman ng Home ng Firefox
|
||||
prefs_home_description=Piliin kung anong nilalaman ang gusto mo sa iyong screen ng Home ng Firefox.
|
||||
prefs_restore_defaults_button=Ibalik sa dating ayos
|
||||
# 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_section_rows_option={num} hilera;{num} mga hilera
|
||||
prefs_search_header=Paghahanap sa Web
|
||||
prefs_topsites_description=Ang mga site na iyong pinupuntahan
|
||||
prefs_topstories_description=Maaaring makaligtaan ang mataas na kalidad na nilalaman
|
||||
# LOCALIZATION NOTE (prefs_topstories_show_sponsored_label): {provider} is
|
||||
# replaced by the name of the content provider for this section, e.g., "Pocket"
|
||||
prefs_topstories_show_sponsored_label={provider} Mga Na-sponsor na Kwento
|
||||
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_snippets_description=Mga Update mula sa Mozilla at Firefox
|
||||
settings_pane_button_label=I-customize ang iyong pahina ng Bagong Tab
|
||||
settings_pane_header=Bagong Kagustuhan na Tab
|
||||
settings_pane_body2=Piliin kung ano ang gusto mong makita sa pahinang ito.
|
||||
settings_pane_search_header=Paghahanap
|
||||
settings_pane_search_body=Hanapin sa Web mula sa iyong bagong tab.
|
||||
settings_pane_topsites_header=Tuktok na mga Site
|
||||
settings_pane_topsites_body=Ma-access ang mga website na karamihang binibisita.
|
||||
settings_pane_topsites_options_showmore=Ipakita ang dalawang mga hanay
|
||||
settings_pane_bookmarks_header=Kamakailang mga Bookmark
|
||||
settings_pane_bookmarks_body=Ang iyong mga bagong gawang bookmark ay nsa isang madaling gamiting lokasyon.
|
||||
settings_pane_visit_again_header=Bisitahin Muli
|
||||
settings_pane_visit_again_body=Ipapakita sa iyo ng Firefox ang mga bahagi ng iyong kasaysayan ng pagba-browse na maaaring gusto mong matandaan o makabalik.
|
||||
settings_pane_highlights_header=Mga highlight
|
||||
settings_pane_highlights_body2=Hanapin ang iyong daan pabalik sa mga kagiliw-giliw na bagay na kamakailan mong binisita o na-bookmark.
|
||||
settings_pane_highlights_options_bookmarks=Mga bookmark
|
||||
settings_pane_highlights_options_visited=Mga binisitang site
|
||||
# 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=Mga snippet
|
||||
settings_pane_snippets_body=Magbasa ng maikli at matamis na mga update mula sa Mozilla tungkol sa Firefox, kultura sa internet, at paminsan-minsang random na meme.
|
||||
settings_pane_done_button=Tapos
|
||||
settings_pane_topstories_options_sponsored=Ipakita ang Mga Na-sponsor na Kuwento
|
||||
|
||||
# LOCALIZATION NOTE (edit_topsites_*): This is shown in the Edit Top Sites modal
|
||||
# dialog.
|
||||
edit_topsites_button_text=I-edit
|
||||
edit_topsites_button_label=I-customize ang iyong Tuktok na mga seksyon ng Sites
|
||||
edit_topsites_showmore_button=Magpakita ng higit pa
|
||||
edit_topsites_showless_button=Magpakita ng mas kaunti
|
||||
edit_topsites_done_button=Tapos
|
||||
edit_topsites_pin_button=I-pin sa site na ito
|
||||
edit_topsites_unpin_button=I-unpin ang site na ito
|
||||
edit_topsites_edit_button=I-edit ang site na ito
|
||||
edit_topsites_dismiss_button=I-dismiss sa site na ito
|
||||
edit_topsites_add_button=Idagdag
|
||||
|
||||
# LOCALIZATION NOTE (topsites_form_*): This is shown in the New/Edit Topsite modal.
|
||||
topsites_form_add_header=Bagong nangungunang site
|
||||
|
@ -192,12 +129,6 @@ 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
|
||||
# LOCALIZATION NOTE (pocket_feedback_header): This is shown as an introduction
|
||||
# to Pocket as part of the feedback form.
|
||||
pocket_feedback_header=Ang pinakamahusay sa web, na gawa ng higit sa 25 milyong tao.
|
||||
# LOCALIZATION NOTE (pocket_description): This is shown in the settings pane and
|
||||
# below (pocket_feedback_header) to provide more information about Pocket.
|
||||
pocket_description=Tuklasin ang mataas na kalidad na nilalaman na maaari mong makaligtaan, sa tulong ng Pocket, ay bahagi na ngayon ng Mozilla.
|
||||
|
||||
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,
|
||||
|
@ -230,3 +161,17 @@ section_menu_action_add_topsite=Magdagdag ng Nangungunang Site
|
|||
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.
|
||||
|
||||
# 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_email_input_placeholder=Email
|
||||
|
||||
|
||||
# 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.
|
||||
|
||||
|
|
|
@ -191,6 +191,8 @@ firstrun_form_sub_header=e-posta adresinizi yazın.
|
|||
|
||||
firstrun_email_input_placeholder=E-posta
|
||||
|
||||
firstrun_invalid_input=Geçerli bir e-posta gerekiyor
|
||||
|
||||
# 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=Devam ederseniz {terms} ve {privacy} kabul etmiş sayılırsınız.
|
||||
|
|
|
@ -191,6 +191,8 @@ firstrun_form_sub_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.
|
||||
firstrun_extra_legal_links=Продовжуючи, ви приймаєте {terms} і {privacy}.
|
||||
|
|
|
@ -191,6 +191,8 @@ firstrun_form_sub_header=继续使用 Firefox 同步服务。
|
|||
|
||||
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}。
|
||||
|
|
|
@ -191,6 +191,8 @@ 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}。
|
||||
|
|
|
@ -96,7 +96,7 @@ window.gActivityStreamStrings = {
|
|||
"firstrun_form_header": "أدخِل بريدك الإلكتروني",
|
||||
"firstrun_form_sub_header": "لمواصلة استخدام «تزامُن فَيَرفُكس»",
|
||||
"firstrun_email_input_placeholder": "البريد الإلكتروني",
|
||||
"firstrun_invalid_input": "Valid email required",
|
||||
"firstrun_invalid_input": "مطلوب بريد إلكتروني صالح",
|
||||
"firstrun_extra_legal_links": "بمواصلة هذه العملية أنت توافق على {terms} و{privacy}.",
|
||||
"firstrun_terms_of_service": "بنود الخدمة",
|
||||
"firstrun_privacy_notice": "تنويه الخصوصية",
|
||||
|
|
|
@ -96,7 +96,7 @@ window.gActivityStreamStrings = {
|
|||
"firstrun_form_header": "Увядзіце сваю электронную пошту",
|
||||
"firstrun_form_sub_header": "каб прадоўжыць з Firefox Sync.",
|
||||
"firstrun_email_input_placeholder": "Эл.пошта",
|
||||
"firstrun_invalid_input": "Valid email required",
|
||||
"firstrun_invalid_input": "Патрабуецца сапраўдны адрас эл.пошты",
|
||||
"firstrun_extra_legal_links": "Працягваючы, вы згаджаецеся з {terms} і {privacy}.",
|
||||
"firstrun_terms_of_service": "умовамі абслугоўвання",
|
||||
"firstrun_privacy_notice": "паведамленнем аб прыватнасці",
|
||||
|
|
|
@ -96,7 +96,7 @@ window.gActivityStreamStrings = {
|
|||
"firstrun_form_header": "Въведете своята ел. поща,",
|
||||
"firstrun_form_sub_header": "за да продължите към Firefox Sync",
|
||||
"firstrun_email_input_placeholder": "адрес на електронна поща",
|
||||
"firstrun_invalid_input": "Valid email required",
|
||||
"firstrun_invalid_input": "Необходим е валиден адрес на ел. поща",
|
||||
"firstrun_extra_legal_links": "Продължавайки, вие се съгласявате с {terms} и {privacy}.",
|
||||
"firstrun_terms_of_service": "Условията на услугата",
|
||||
"firstrun_privacy_notice": "Политиката за лични данни",
|
||||
|
|
|
@ -96,7 +96,7 @@ window.gActivityStreamStrings = {
|
|||
"firstrun_form_header": "Enankit ho chomlec'h postel",
|
||||
"firstrun_form_sub_header": "evit kenderc'hel etrezek Firefox Sync.",
|
||||
"firstrun_email_input_placeholder": "Postel",
|
||||
"firstrun_invalid_input": "Valid email required",
|
||||
"firstrun_invalid_input": "Postel talvoudek azgoulennet",
|
||||
"firstrun_extra_legal_links": "En ur genderc'hel, e savit a-du gant an {terms} hag ar {privacy}.",
|
||||
"firstrun_terms_of_service": "divizoù arver",
|
||||
"firstrun_privacy_notice": "evezhiadennoù a-fet buhez prevez",
|
||||
|
|
|
@ -96,7 +96,7 @@ window.gActivityStreamStrings = {
|
|||
"firstrun_form_header": "Introduïu la vostra adreça electrònica",
|
||||
"firstrun_form_sub_header": "per continuar al Firefox Sync.",
|
||||
"firstrun_email_input_placeholder": "Adreça electrònica",
|
||||
"firstrun_invalid_input": "Valid email required",
|
||||
"firstrun_invalid_input": "Cal una adreça electrònica vàlida",
|
||||
"firstrun_extra_legal_links": "Si continueu, accepteu les {terms} i l'{privacy}.",
|
||||
"firstrun_terms_of_service": "Condicions del servei",
|
||||
"firstrun_privacy_notice": "Avís de privadesa",
|
||||
|
|
|
@ -35,7 +35,7 @@ window.gActivityStreamStrings = {
|
|||
"search_button": "Vyhledat",
|
||||
"search_header": "Vyhledat pomocí {search_engine_name}",
|
||||
"search_web_placeholder": "Vyhledat na webu",
|
||||
"section_disclaimer_topstories": "Nejzajímavější příběhy na webu vybrané podle toho, co sami čtete. To je služba Pocket od Mozilly.",
|
||||
"section_disclaimer_topstories": "Nejzajímavější články na webu vybrané podle toho, co sami čtete. To je služba Pocket od Mozilly.",
|
||||
"section_disclaimer_topstories_linktext": "Zjistit, jak to funguje.",
|
||||
"section_disclaimer_topstories_buttontext": "Ok, rozumím",
|
||||
"prefs_home_header": "Obsah domovské stránky Firefoxu",
|
||||
|
@ -44,7 +44,7 @@ window.gActivityStreamStrings = {
|
|||
"prefs_search_header": "Vyhledávání na webu",
|
||||
"prefs_topsites_description": "Nejnavštěvovanější stránky",
|
||||
"prefs_topstories_description2": "Skvělý obsah z celého webu, vybraný speciálně pro vás",
|
||||
"prefs_topstories_options_sponsored_label": "Sponzorované příběhy",
|
||||
"prefs_topstories_options_sponsored_label": "Sponzorované články",
|
||||
"prefs_topstories_sponsored_learn_more": "Zjistit více",
|
||||
"prefs_highlights_description": "Výběr z uložených nebo navštívených stránek",
|
||||
"prefs_highlights_options_visited_label": "Navštívené stránky",
|
||||
|
@ -73,9 +73,9 @@ window.gActivityStreamStrings = {
|
|||
"topsites_form_url_validation": "Je vyžadována platná URL",
|
||||
"topsites_form_image_validation": "Obrázek se nepodařilo načíst. Zkuste jinou URL adresu.",
|
||||
"pocket_read_more": "Populární témata:",
|
||||
"pocket_read_even_more": "Zobrazit více příběhů",
|
||||
"pocket_read_even_more": "Zobrazit více článků",
|
||||
"highlights_empty_state": "Začněte prohlížet a my vám zde ukážeme některé skvělé články, videa a další stránky, které jste nedávno viděli nebo uložili do záložek.",
|
||||
"topstories_empty_state": "Už jste všechno přečetli. Další příběhy ze služby {provider} tu najdete zase později. Ale pokud se nemůžete dočkat, vyberte své oblíbené téma a podívejte se na další velké příběhy z celého webu.",
|
||||
"topstories_empty_state": "Už jste všechno přečetli. Další články ze služby {provider} tu najdete zase později. Ale pokud se nemůžete dočkat, vyberte své oblíbené téma a podívejte se na další velké články z celého webu.",
|
||||
"manual_migration_explanation2": "Vyzkoušejte Firefox se záložkami, historií a hesly z jiného vašeho prohlížeče.",
|
||||
"manual_migration_cancel_button": "Ne, děkuji",
|
||||
"manual_migration_import_button": "Importovat nyní",
|
||||
|
@ -96,7 +96,7 @@ window.gActivityStreamStrings = {
|
|||
"firstrun_form_header": "Zadejte svoji e-mailovou adresu",
|
||||
"firstrun_form_sub_header": "a používejte službu Firefox Sync.",
|
||||
"firstrun_email_input_placeholder": "E-mail",
|
||||
"firstrun_invalid_input": "Valid email required",
|
||||
"firstrun_invalid_input": "Je požadován platný e-mail",
|
||||
"firstrun_extra_legal_links": "Pokračováním souhlasíte s {terms} a {privacy}.",
|
||||
"firstrun_terms_of_service": "Podmínkami používání služby",
|
||||
"firstrun_privacy_notice": "Zásadami ochrany soukromí",
|
||||
|
|
|
@ -96,7 +96,7 @@ window.gActivityStreamStrings = {
|
|||
"firstrun_form_header": "Rhowch eich e-bost",
|
||||
"firstrun_form_sub_header": "i barhau i Firefox Sync.",
|
||||
"firstrun_email_input_placeholder": "E-bost",
|
||||
"firstrun_invalid_input": "Valid email required",
|
||||
"firstrun_invalid_input": "Mae angen e-bost dilys",
|
||||
"firstrun_extra_legal_links": "Gan barhau, rydych yn cytuno i delerau'r {terms} a'r {privacy}.",
|
||||
"firstrun_terms_of_service": "Amodau Gwasanaeth",
|
||||
"firstrun_privacy_notice": "Hysbysiad Preifatrwydd",
|
||||
|
|
|
@ -96,7 +96,7 @@ window.gActivityStreamStrings = {
|
|||
"firstrun_form_header": "Zapódajśo swóju e-mailowu adresu",
|
||||
"firstrun_form_sub_header": "aby z Firefox Sync pókšacował.",
|
||||
"firstrun_email_input_placeholder": "E-mail",
|
||||
"firstrun_invalid_input": "Valid email required",
|
||||
"firstrun_invalid_input": "Płaśiwa e-mailowa adresa trěbna",
|
||||
"firstrun_extra_legal_links": "Gaž pókšacujośo, zwolijośo do {terms} a {privacy}.",
|
||||
"firstrun_terms_of_service": "Wužywańske wuměnjenja",
|
||||
"firstrun_privacy_notice": "Powěźeńka priwatnosći",
|
||||
|
|
|
@ -96,7 +96,7 @@ window.gActivityStreamStrings = {
|
|||
"firstrun_form_header": "Εισάγετε το email σας",
|
||||
"firstrun_form_sub_header": "για να συνεχίσετε στο Firefox Sync.",
|
||||
"firstrun_email_input_placeholder": "Email",
|
||||
"firstrun_invalid_input": "Valid email required",
|
||||
"firstrun_invalid_input": "Απαιτείται έγκυρο email",
|
||||
"firstrun_extra_legal_links": "Συνεχίζοντας, συμφωνείτε με τους {terms} και τη {privacy}.",
|
||||
"firstrun_terms_of_service": "Όρους Υπηρεσίας",
|
||||
"firstrun_privacy_notice": "Σημείωση Απορρήτου",
|
||||
|
|
|
@ -96,7 +96,7 @@ window.gActivityStreamStrings = {
|
|||
"firstrun_form_header": "Ingrese su correo electrónico",
|
||||
"firstrun_form_sub_header": "para pasar a Firefox Sync.",
|
||||
"firstrun_email_input_placeholder": "Correo electrónico",
|
||||
"firstrun_invalid_input": "Valid email required",
|
||||
"firstrun_invalid_input": "Se requiere un correo electrónico válido",
|
||||
"firstrun_extra_legal_links": "Al proceder, acepta los {terms} y {privacy}.",
|
||||
"firstrun_terms_of_service": "Términos del servicio",
|
||||
"firstrun_privacy_notice": "Anuncio de privacidad",
|
||||
|
|
|
@ -96,7 +96,7 @@ window.gActivityStreamStrings = {
|
|||
"firstrun_form_header": "Ingresa tu correo",
|
||||
"firstrun_form_sub_header": "para conectarte a Firefox Sync.",
|
||||
"firstrun_email_input_placeholder": "Correo",
|
||||
"firstrun_invalid_input": "Valid email required",
|
||||
"firstrun_invalid_input": "Se requiere un correo válido",
|
||||
"firstrun_extra_legal_links": "Al proceder, aceptas los {terms} y la {privacy}.",
|
||||
"firstrun_terms_of_service": "Términos del servicio",
|
||||
"firstrun_privacy_notice": "Política de privacidad",
|
||||
|
|
Некоторые файлы не были показаны из-за слишком большого количества измененных файлов Показать больше
Загрузка…
Ссылка в новой задаче