Skip to content

Instantly share code, notes, and snippets.

@ianb
Created August 14, 2017 21:08
Show Gist options
  • Save ianb/586620fb218b9f0b4aa1e0899f19770e to your computer and use it in GitHub Desktop.
Save ianb/586620fb218b9f0b4aa1e0899f19770e to your computer and use it in GitHub Desktop.
diff --git a/browser/extensions/screenshots/bootstrap.js b/browser/extensions/screenshots/bootstrap.js
index d252588..800ad66 100644
--- a/browser/extensions/screenshots/bootstrap.js
+++ b/browser/extensions/screenshots/bootstrap.js
@@ -11,12 +11,18 @@ const { interfaces: Ci, utils: Cu } = Components;
Cu.import("resource://gre/modules/XPCOMUtils.jsm");
XPCOMUtils.defineLazyModuleGetter(this, "AddonManager",
"resource://gre/modules/AddonManager.jsm");
+XPCOMUtils.defineLazyModuleGetter(this, "AppConstants",
+ "resource://gre/modules/AppConstants.jsm");
XPCOMUtils.defineLazyModuleGetter(this, "Console",
"resource://gre/modules/Console.jsm");
-XPCOMUtils.defineLazyModuleGetter(this, "Services",
- "resource://gre/modules/Services.jsm");
+XPCOMUtils.defineLazyModuleGetter(this, "CustomizableUI",
+ "resource:///modules/CustomizableUI.jsm");
XPCOMUtils.defineLazyModuleGetter(this, "LegacyExtensionsUtils",
"resource://gre/modules/LegacyExtensionsUtils.jsm");
+XPCOMUtils.defineLazyModuleGetter(this, "PageActions",
+ "resource:///modules/PageActions.jsm");
+XPCOMUtils.defineLazyModuleGetter(this, "Services",
+ "resource://gre/modules/Services.jsm");
let addonResourceURI;
let appStartupDone;
@@ -59,7 +65,59 @@ const appStartupObserver = {
}
}
+const LibraryButton = {
+ ITEM_ID: "appMenu-library-screenshots",
+
+ init(webExtension) {
+ this._initialized = true;
+ let permissionPages = [...webExtension.extension.permissions].filter(p => (/^https?:\/\//i).test(p));
+ this.PAGE_TO_OPEN = permissionPages.length ? permissionPages[0].replace(/\*$/, "") : "https://screenshots.firefox.com/";
+ this.PAGE_TO_OPEN += "shots";
+ this.ICON_URL = webExtension.extension.getURL("icons/icon-16-v2.svg");
+ this.ICON_URL_2X = webExtension.extension.getURL("icons/icon-32-v2.svg");
+ this.LABEL = webExtension.extension.localizeMessage("libraryLabel");
+ CustomizableUI.addListener(this);
+ for (let win of CustomizableUI.windows) {
+ this.onWindowOpened(win);
+ }
+ },
+
+ uninit() {
+ if (!this._initialized) {
+ return;
+ }
+ for (let win of CustomizableUI.windows) {
+ let item = win.document.getElementById(this.ITEM_ID);
+ if (item) {
+ item.remove();
+ }
+ }
+ CustomizableUI.removeListener(this);
+ },
+
+ onWindowOpened(win) {
+ let libraryViewInsertionPoint = win.document.getElementById("appMenu-library-remotetabs-button");
+ // If the library view doesn't exist (on non-photon builds, for instance),
+ // this will be null, and we bail out early.
+ if (!libraryViewInsertionPoint) {
+ return;
+ }
+ let parent = libraryViewInsertionPoint.parentNode;
+ let {nextSibling} = libraryViewInsertionPoint;
+ let item = win.document.createElement("toolbarbutton");
+ item.className = "subviewbutton subviewbutton-iconic";
+ item.addEventListener("command", () => win.openUILinkIn(this.PAGE_TO_OPEN, "tab"));
+ item.id = this.ITEM_ID;
+ let iconURL = win.devicePixelRatio >= 1.1 ? this.ICON_URL_2X : this.ICON_URL;
+ item.setAttribute("image", iconURL);
+ item.setAttribute("label", this.LABEL);
+
+ parent.insertBefore(item, nextSibling);
+ },
+};
+
const APP_STARTUP = 1;
+const APP_SHUTDOWN = 2;
let startupReason;
function startup(data, reason) { // eslint-disable-line no-unused-vars
@@ -81,6 +139,11 @@ function shutdown(data, reason) { // eslint-disable-line no-unused-vars
id: ADDON_ID,
resourceURI: addonResourceURI
});
+ // Immediately exit if Firefox is exiting, #3323
+ if (reason === APP_SHUTDOWN) {
+ stop(webExtension, reason);
+ return;
+ }
// Because the prefObserver is unregistered above, this _should_ terminate the promise chain.
appStartupPromise = appStartupPromise.then(() => { stop(webExtension, reason); });
}
@@ -113,7 +176,8 @@ function handleStartup() {
function start(webExtension) {
return webExtension.startup(startupReason).then((api) => {
api.browser.runtime.onMessage.addListener(handleMessage);
- return Promise.resolve(null);
+ LibraryButton.init(webExtension);
+ initPhotonPageAction(api);
}).catch((err) => {
// The startup() promise will be rejected if the webExtension was
// already started (a harmless error), or if initializing the
@@ -126,6 +190,13 @@ function start(webExtension) {
}
function stop(webExtension, reason) {
+ if (reason != APP_SHUTDOWN) {
+ LibraryButton.uninit();
+ if (photonPageAction) {
+ photonPageAction.remove();
+ photonPageAction = null;
+ }
+ }
return Promise.resolve(webExtension.shutdown(reason));
}
@@ -151,3 +222,86 @@ function handleMessage(msg, sender, sendReply) {
return true;
}
}
+
+let photonPageAction;
+
+// If the current Firefox version supports Photon (57 and later), this sets up
+// a Photon page action and removes the UI for the WebExtension browser action.
+// Does nothing otherwise. Ideally, in the future, WebExtension page actions
+// and Photon page actions would be one in the same, but they aren't right now.
+function initPhotonPageAction(api) {
+ // The MOZ_PHOTON_THEME ifdef got removed, but we need to support 55 and 56 as well,
+ // so check if the property exists *and* is false before bailing.
+ if (typeof AppConstants.MOZ_PHOTON_THEME != "undefined" && !AppConstants.MOZ_PHOTON_THEME) {
+ // Photon not supported. Use the WebExtension's browser action.
+ return;
+ }
+
+ let id = "screenshots";
+ let port = null;
+ let baseIconPath = addonResourceURI.spec + "webextension/";
+
+ let {Management: {global: {tabTracker}}} = Cu.import("resource://gre/modules/Extension.jsm", {});
+
+ // Make the page action.
+ photonPageAction = PageActions.actionForID(id) || PageActions.addAction(new PageActions.Action({
+ id,
+ title: "Take a Screenshot",
+ iconURL: baseIconPath + "icons/icon-32-v2.svg",
+ _insertBeforeActionID: null,
+ onCommand(event, buttonNode) {
+ if (port) {
+ let browserWin = buttonNode.ownerGlobal;
+ port.postMessage({
+ type: "click",
+ tab: {
+ url: browserWin.gBrowser.selectedBrowser.currentURI.spec,
+ id: tabTracker.getId(browserWin.gBrowser.selectedTab),
+ },
+ });
+ }
+ },
+ }));
+
+ // Remove the navbar button of the WebExtension's browser action.
+ let cuiWidgetID = "screenshots_mozilla_org-browser-action";
+ CustomizableUI.addListener({
+ onWidgetAfterCreation(wid, aArea) {
+ if (wid == cuiWidgetID) {
+ CustomizableUI.destroyWidget(cuiWidgetID);
+ CustomizableUI.removeListener(this);
+ }
+ },
+ });
+
+ // Establish a port to the WebExtension side.
+ api.browser.runtime.onConnect.addListener((listenerPort) => {
+ if (listenerPort.name != "photonPageActionPort") {
+ return;
+ }
+ port = listenerPort;
+ port.onMessage.addListener((message) => {
+ switch (message.type) {
+ case "setProperties":
+ if (message.title) {
+ photonPageAction.title = message.title;
+ }
+ if (message.iconPath) {
+ photonPageAction.iconURL = baseIconPath + message.iconPath;
+ }
+ break;
+ default:
+ console.error("Unrecognized message:", message);
+ break;
+ }
+ });
+
+ // It's necessary to tell the WebExtension not to use its browser action,
+ // due to the CUI widget's removal. Otherwise Firefox's WebExtension
+ // machinery throws exceptions.
+ port.postMessage({
+ type: "setUsePhotonPageAction",
+ value: true
+ });
+ });
+}
diff --git a/browser/extensions/screenshots/install.rdf b/browser/extensions/screenshots/install.rdf
index 15be526..b133814 100644
--- a/browser/extensions/screenshots/install.rdf
+++ b/browser/extensions/screenshots/install.rdf
@@ -12,9 +12,9 @@
</Description>
</em:targetApplication>
<em:type>2</em:type>
- <em:version>10.11.0</em:version>
+ <em:version>16.0.0</em:version>
<em:bootstrap>true</em:bootstrap>
- <em:homepageURL>https://pageshot.net/</em:homepageURL>
+ <em:homepageURL>https://screenshots.firefox.com/</em:homepageURL>
<em:multiprocessCompatible>true</em:multiprocessCompatible>
</Description>
</RDF>
diff --git a/browser/extensions/screenshots/moz.build b/browser/extensions/screenshots/moz.build
index 2e864b4..496c3ef 100644
--- a/browser/extensions/screenshots/moz.build
+++ b/browser/extensions/screenshots/moz.build
@@ -360,6 +360,7 @@ FINAL_TARGET_FILES.features['[email protected]']["webextension"]["icons"]
'webextension/icons/icon-starred-32-v2.svg',
'webextension/icons/icon-welcome-face-without-eyes.svg',
'webextension/icons/menu-fullpage.svg',
+ 'webextension/icons/menu-myshot-white.svg',
'webextension/icons/menu-myshot.svg',
'webextension/icons/menu-visible.svg',
'webextension/icons/onboarding-1.png',
diff --git a/browser/extensions/screenshots/test/browser/browser_screenshots_ui_check.js b/browser/extensions/screenshots/test/browser/browser_screenshots_ui_check.js
index c5b2e4c..66710ea 100644
--- a/browser/extensions/screenshots/test/browser/browser_screenshots_ui_check.js
+++ b/browser/extensions/screenshots/test/browser/browser_screenshots_ui_check.js
@@ -13,9 +13,12 @@ add_task(async function() {
await promiseScreenshotsReset();
});
+ let id = AppConstants.MOZ_PHOTON_THEME ? "pageAction-panel-screenshots"
+ : "screenshots_mozilla_org-browser-action";
+
await BrowserTestUtils.waitForCondition(
- () => document.getElementById("screenshots_mozilla_org-browser-action"),
+ () => document.getElementById(id),
"Screenshots button should be present", 100, 100);
- checkElements(true, ["screenshots_mozilla_org-browser-action"]);
+ checkElements(true, [id]);
});
diff --git a/browser/extensions/screenshots/test/browser/head.js b/browser/extensions/screenshots/test/browser/head.js
index 2c3fa2f..8c99bea 100644
--- a/browser/extensions/screenshots/test/browser/head.js
+++ b/browser/extensions/screenshots/test/browser/head.js
@@ -1,3 +1,5 @@
+/* globals PageActions */
+
// Currently Screenshots is disabled in tests. We want these tests to work under
// either case that Screenshots is disabled or enabled on startup of the browser,
// and that at the end we're reset to the correct state.
@@ -13,16 +15,27 @@ function promiseScreenshotsEnabled() {
}
info("Screenshots is not enabled");
return new Promise((resolve, reject) => {
- let listener = {
- onWidgetAfterCreation(widgetid) {
- if (widgetid == "screenshots_mozilla_org-browser-action") {
- info("screenshots_mozilla_org-browser-action button created");
- CustomizableUI.removeListener(listener);
- resolve(false);
+ if (!AppConstants.MOZ_PHOTON_THEME) {
+ let listener = {
+ onWidgetAfterCreation(widgetid) {
+ if (widgetid == "screenshots_mozilla_org-browser-action") {
+ info("screenshots_mozilla_org-browser-action button created");
+ CustomizableUI.removeListener(listener);
+ resolve(false);
+ }
}
}
+ CustomizableUI.addListener(listener);
+ } else {
+ let interval = setInterval(() => {
+ let action = PageActions.actionForID("screenshots");
+ if (action) {
+ info("screenshots page action created");
+ clearInterval(interval);
+ resolve(false);
+ }
+ }, 100);
}
- CustomizableUI.addListener(listener);
info("Set Screenshots disabled pref to false.");
Services.prefs.setBoolPref("extensions.screenshots.system-disabled", false);
});
@@ -34,16 +47,27 @@ function promiseScreenshotsDisabled() {
return Promise.resolve(true);
}
return new Promise((resolve, reject) => {
- let listener = {
- onWidgetDestroyed(widgetid) {
- if (widgetid == "screenshots_mozilla_org-browser-action") {
- CustomizableUI.removeListener(listener);
- info("screenshots_mozilla_org-browser-action destroyed");
- resolve(false);
+ if (!AppConstants.MOZ_PHOTON_THEME) {
+ let listener = {
+ onWidgetDestroyed(widgetid) {
+ if (widgetid == "screenshots_mozilla_org-browser-action") {
+ CustomizableUI.removeListener(listener);
+ info("screenshots_mozilla_org-browser-action destroyed");
+ resolve(false);
+ }
}
}
+ CustomizableUI.addListener(listener);
+ } else {
+ let interval = setInterval(() => {
+ let action = PageActions.actionForID("screenshots");
+ if (!action) {
+ info("screenshots page action removed");
+ clearInterval(interval);
+ resolve(false);
+ }
+ }, 100);
}
- CustomizableUI.addListener(listener);
info("Set Screenshots disabled pref to true.");
Services.prefs.setBoolPref("extensions.screenshots.system-disabled", true);
});
diff --git a/browser/extensions/screenshots/webextension/_locales/ach/messages.json b/browser/extensions/screenshots/webextension/_locales/ach/messages.json
index 72bdf4b..d4510de 100644
--- a/browser/extensions/screenshots/webextension/_locales/ach/messages.json
+++ b/browser/extensions/screenshots/webextension/_locales/ach/messages.json
@@ -106,8 +106,8 @@
"tourDone": {
"message": "Otum"
},
- "termsAndPrivacyNoticeCloudServices": {
- "message": "Tic ki Firefox Screenshots nyuto, ni i yee $TERMSANDPRIVACYNOTICETERMSLINK$ ki $TERMSANDPRIVACYNOTICEPRIVACYLINK$ me tic me Cloud pa Firefox.",
+ "termsAndPrivacyNotice2": {
+ "message": "Tic ki Firefox Screenshots nyuto ni, i yee $TERMSANDPRIVACYNOTICETERMSLINK$ ki $TERMSANDPRIVACYNOTICEPRIVACYLINK$ wa.",
"placeholders": {
"termsandprivacynoticetermslink": {
"content": "$1"
diff --git a/browser/extensions/screenshots/webextension/_locales/ar/messages.json b/browser/extensions/screenshots/webextension/_locales/ar/messages.json
index 74b01a6..98ccdae 100644
--- a/browser/extensions/screenshots/webextension/_locales/ar/messages.json
+++ b/browser/extensions/screenshots/webextension/_locales/ar/messages.json
@@ -112,8 +112,8 @@
"tourDone": {
"message": "تمّ"
},
- "termsAndPrivacyNoticeCloudServices": {
- "message": "استخدامك لخدمات «لقطات شاشة فَيَرفُكس» يعني موافقتك على $TERMSANDPRIVACYNOTICETERMSLINK$ و $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
+ "termsAndPrivacyNotice2": {
+ "message": "استخدامك للقطات شاشة فَيَرفُكس يُعد موافقة على $TERMSANDPRIVACYNOTICETERMSLINK$ و $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
"placeholders": {
"termsandprivacynoticetermslink": {
"content": "$1"
@@ -128,5 +128,8 @@
},
"termsAndPrivacyNoticyPrivacyLink": {
"message": "تنويه الخصوصية"
+ },
+ "libraryLabel": {
+ "message": "لقطات الشاشة"
}
}
\ No newline at end of file
diff --git a/browser/extensions/screenshots/webextension/_locales/az/messages.json b/browser/extensions/screenshots/webextension/_locales/az/messages.json
index afd71fb..f79dcfe 100644
--- a/browser/extensions/screenshots/webextension/_locales/az/messages.json
+++ b/browser/extensions/screenshots/webextension/_locales/az/messages.json
@@ -112,7 +112,7 @@
"tourDone": {
"message": "Tamamlandı"
},
- "termsAndPrivacyNoticeCloudServices": {
+ "termsAndPrivacyNotice2": {
"message": "Firefox Screenshots işlədərək $TERMSANDPRIVACYNOTICETERMSLINK$ və $TERMSANDPRIVACYNOTICEPRIVACYLINK$ ilə razılaşmış olursunuz.",
"placeholders": {
"termsandprivacynoticetermslink": {
@@ -128,5 +128,8 @@
},
"termsAndPrivacyNoticyPrivacyLink": {
"message": "Məxfilik Bildirişi"
+ },
+ "libraryLabel": {
+ "message": "Ekran Görüntüləri"
}
}
\ No newline at end of file
diff --git a/browser/extensions/screenshots/webextension/_locales/be/messages.json b/browser/extensions/screenshots/webextension/_locales/be/messages.json
index 5d598f8..e7c51e6 100644
--- a/browser/extensions/screenshots/webextension/_locales/be/messages.json
+++ b/browser/extensions/screenshots/webextension/_locales/be/messages.json
@@ -112,8 +112,8 @@
"tourDone": {
"message": "Гатова"
},
- "termsAndPrivacyNoticeCloudServices": {
- "message": "Выкарыстоўваючы Firefox Screenshots, вы згаджаецеся з $TERMSANDPRIVACYNOTICETERMSLINK$ і $TERMSANDPRIVACYNOTICEPRIVACYLINK$ Firefox Cloud Services.",
+ "termsAndPrivacyNotice2": {
+ "message": "Выкарыстоўваючы Firefox Screenshots, вы згаджаецеся з нашымі $TERMSANDPRIVACYNOTICETERMSLINK$ і $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
"placeholders": {
"termsandprivacynoticetermslink": {
"content": "$1"
@@ -128,5 +128,8 @@
},
"termsAndPrivacyNoticyPrivacyLink": {
"message": "Паведамленнем аб прыватнасці"
+ },
+ "libraryLabel": {
+ "message": "Скрыншоты"
}
}
\ No newline at end of file
diff --git a/browser/extensions/screenshots/webextension/_locales/bg/messages.json b/browser/extensions/screenshots/webextension/_locales/bg/messages.json
index 5720c1c..b4e1828 100644
--- a/browser/extensions/screenshots/webextension/_locales/bg/messages.json
+++ b/browser/extensions/screenshots/webextension/_locales/bg/messages.json
@@ -112,8 +112,8 @@
"tourDone": {
"message": "Готово"
},
- "termsAndPrivacyNoticeCloudServices": {
- "message": "Използвайки Firefox Screenshots вие се съгласявате с $TERMSANDPRIVACYNOTICETERMSLINK$ и $TERMSANDPRIVACYNOTICEPRIVACYLINK$ на облачните услуги на Firefox.",
+ "termsAndPrivacyNotice2": {
+ "message": "Използвайки Firefox Screenshots вие се съгласявате с $TERMSANDPRIVACYNOTICETERMSLINK$ и $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
"placeholders": {
"termsandprivacynoticetermslink": {
"content": "$1"
@@ -128,5 +128,8 @@
},
"termsAndPrivacyNoticyPrivacyLink": {
"message": "Политиката на поверителност"
+ },
+ "libraryLabel": {
+ "message": "Снимки"
}
}
\ No newline at end of file
diff --git a/browser/extensions/screenshots/webextension/_locales/bn_BD/messages.json b/browser/extensions/screenshots/webextension/_locales/bn_BD/messages.json
index a7f7c58..8e1ccdd 100644
--- a/browser/extensions/screenshots/webextension/_locales/bn_BD/messages.json
+++ b/browser/extensions/screenshots/webextension/_locales/bn_BD/messages.json
@@ -112,8 +112,8 @@
"tourDone": {
"message": "সম্পন্ন"
},
- "termsAndPrivacyNoticeCloudServices": {
- "message": "Firefox Screenshots ব্যবহারে, আপনি Firefox Cloud Services এর $TERMSANDPRIVACYNOTICETERMSLINK$ এবং $TERMSANDPRIVACYNOTICEPRIVACYLINK$ নীতিতে সম্মত হয়েছেন।",
+ "termsAndPrivacyNotice2": {
+ "message": "Firefox Screenshots ব্যবহারের জন্য, আপনি আমাদের $TERMSANDPRIVACYNOTICETERMSLINK$ এবং $TERMSANDPRIVACYNOTICEPRIVACYLINK$ নীতিতে সম্মত হয়েছেন।",
"placeholders": {
"termsandprivacynoticetermslink": {
"content": "$1"
@@ -128,5 +128,8 @@
},
"termsAndPrivacyNoticyPrivacyLink": {
"message": "গোপনীয়তা নীতি"
+ },
+ "libraryLabel": {
+ "message": "স্ক্রীনশট"
}
}
\ No newline at end of file
diff --git a/browser/extensions/screenshots/webextension/_locales/ca/messages.json b/browser/extensions/screenshots/webextension/_locales/ca/messages.json
index 875cc49..0650785 100644
--- a/browser/extensions/screenshots/webextension/_locales/ca/messages.json
+++ b/browser/extensions/screenshots/webextension/_locales/ca/messages.json
@@ -112,7 +112,7 @@
"tourDone": {
"message": "Fet"
},
- "termsAndPrivacyNoticeCloudServices": {
+ "termsAndPrivacyNotice2": {
"message": "Si utilitzeu el Firefox Screenshots, esteu acceptant les nostres $TERMSANDPRIVACYNOTICETERMSLINK$ i l'$TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
"placeholders": {
"termsandprivacynoticetermslink": {
@@ -128,5 +128,8 @@
},
"termsAndPrivacyNoticyPrivacyLink": {
"message": "avís de privadesa"
+ },
+ "libraryLabel": {
+ "message": "Captures de pantalla"
}
}
\ No newline at end of file
diff --git a/browser/extensions/screenshots/webextension/_locales/cak/messages.json b/browser/extensions/screenshots/webextension/_locales/cak/messages.json
index 1ac0f12..ab93f3c 100644
--- a/browser/extensions/screenshots/webextension/_locales/cak/messages.json
+++ b/browser/extensions/screenshots/webextension/_locales/cak/messages.json
@@ -112,7 +112,7 @@
"tourDone": {
"message": "Xb'an"
},
- "termsAndPrivacyNoticeCloudServices": {
+ "termsAndPrivacyNotice2": {
"message": "Rik'in rokisaxik ri Firefox Chapoj Wachib'äl, nawoqaj $TERMSANDPRIVACYNOTICETERMSLINK$ chuqa' $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
"placeholders": {
"termsandprivacynoticetermslink": {
@@ -128,5 +128,8 @@
},
"termsAndPrivacyNoticyPrivacyLink": {
"message": "Rutzijol Ichinanem"
+ },
+ "libraryLabel": {
+ "message": "Chapoj taq wachib'äl"
}
}
\ No newline at end of file
diff --git a/browser/extensions/screenshots/webextension/_locales/cs/messages.json b/browser/extensions/screenshots/webextension/_locales/cs/messages.json
index 5a559dd..e1054bf 100644
--- a/browser/extensions/screenshots/webextension/_locales/cs/messages.json
+++ b/browser/extensions/screenshots/webextension/_locales/cs/messages.json
@@ -112,8 +112,8 @@
"tourDone": {
"message": "Hotovo"
},
- "termsAndPrivacyNoticeCloudServices": {
- "message": "Používáním služby Firefox Screenshots souhlasíte s $TERMSANDPRIVACYNOTICETERMSLINK$ a $TERMSANDPRIVACYNOTICEPRIVACYLINK$ Firefox Cloud Services.",
+ "termsAndPrivacyNotice2": {
+ "message": "Používáním služby Firefox Screenshots souhlasíte s našimi $TERMSANDPRIVACYNOTICETERMSLINK$ a $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
"placeholders": {
"termsandprivacynoticetermslink": {
"content": "$1"
@@ -128,5 +128,8 @@
},
"termsAndPrivacyNoticyPrivacyLink": {
"message": "zásadami ochrany osobních údajů"
+ },
+ "libraryLabel": {
+ "message": "Screenshots"
}
}
\ No newline at end of file
diff --git a/browser/extensions/screenshots/webextension/_locales/cy/messages.json b/browser/extensions/screenshots/webextension/_locales/cy/messages.json
index 9361041..541d22f 100644
--- a/browser/extensions/screenshots/webextension/_locales/cy/messages.json
+++ b/browser/extensions/screenshots/webextension/_locales/cy/messages.json
@@ -112,8 +112,8 @@
"tourDone": {
"message": "Gorffen"
},
- "termsAndPrivacyNoticeCloudServices": {
- "message": "Drwy ddefnyddio Firefox Screenshots, rydych yn cytuno i Firefox Cloud Services $TERMSANDPRIVACYNOTICETERMSLINK$ a $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
+ "termsAndPrivacyNotice2": {
+ "message": "Drwy ddefnyddio Firefox Screenshots, rydych yn cytuno i'n $TERMSANDPRIVACYNOTICETERMSLINK$ a'n $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
"placeholders": {
"termsandprivacynoticetermslink": {
"content": "$1"
@@ -128,5 +128,8 @@
},
"termsAndPrivacyNoticyPrivacyLink": {
"message": "Hysbysiad Preifatrwydd"
+ },
+ "libraryLabel": {
+ "message": "Rhannu ar Pinterest"
}
}
\ No newline at end of file
diff --git a/browser/extensions/screenshots/webextension/_locales/da/messages.json b/browser/extensions/screenshots/webextension/_locales/da/messages.json
index 49e066f..ea796ca 100644
--- a/browser/extensions/screenshots/webextension/_locales/da/messages.json
+++ b/browser/extensions/screenshots/webextension/_locales/da/messages.json
@@ -33,7 +33,7 @@
"message": "Link kopieret"
},
"notificationLinkCopiedDetails": {
- "message": "Linket til dit skærmbillede er blevet gemt i udklipsholderen. Tryk på $META_KEY$-V for at sætte ind.",
+ "message": "Linket til dit skærmbillede er blevet gemt i udklipsholderen. Tryk på $META_KEY$-V for at sætte ind. ",
"placeholders": {
"meta_key": {
"content": "$1"
@@ -50,16 +50,16 @@
"message": "Vi kan ikke oprette forbindelse til dine skærmbilleder."
},
"connectionErrorDetails": {
- "message": "Kontroller din internet-forbindelse. Hvis du ikke kan oprette forbindelse til internettet, kan der være et midlertidigt teknisk problem med Firefox Screenshots."
+ "message": "Kontroller din internet-forbindelse. Hvis du ikke kan oprette forbindelse til internettet, kan der være et midlertidigt teknisk problem med Firefox Screenshots. "
},
"loginErrorDetails": {
- "message": "Vi kunne ikke gemme dit skærmbillede, fordi der er et teknisk problem med Firefox Screenshots. Prøv igen senere."
+ "message": "Vi kunne ikke gemme dit skærmbillede, fordi der er et teknisk problem med Firefox Screenshots. Prøv igen senere. "
},
"unshootablePageErrorTitle": {
- "message": "Vi kan ikke tage et skærmbillede af denne side."
+ "message": "Vi kan ikke tage et skærmbillede af denne side. "
},
"unshootablePageErrorDetails": {
- "message": "Dette er ikke en almindelig webside, så du kan ikke tage skærmbilleder af den."
+ "message": "Dette er ikke en almindelig webside, så du kan ikke tage skærmbilleder af den. "
},
"selfScreenshotErrorTitle": {
"message": "Du kan ikke tage skærmbilleder af en side i Firefox Screenshots."
@@ -80,7 +80,7 @@
"message": "Vi er ikke sikre på, hvad der lige skete. Vil du prøve igen - eller vil du tage et skærmbillede af en anden side?"
},
"tourBodyOne": {
- "message": "Tag, gem og del skærmbilleder uden at forlade Firefox."
+ "message": "Tag, gem og del skærmbilleder uden at forlade Firefox. "
},
"tourHeaderTwo": {
"message": "Gem lige hvad du vil."
@@ -112,8 +112,8 @@
"tourDone": {
"message": "Færdig"
},
- "termsAndPrivacyNoticeCloudServices": {
- "message": "Ved at anvende Firefox Screenshots godkender du $TERMSANDPRIVACYNOTICETERMSLINK$ og $TERMSANDPRIVACYNOTICEPRIVACYLINK$ for Firefox Cloud Services.",
+ "termsAndPrivacyNotice2": {
+ "message": "Ved at anvende Firefox Screenshots godkender du vores $TERMSANDPRIVACYNOTICETERMSLINK$ og $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
"placeholders": {
"termsandprivacynoticetermslink": {
"content": "$1"
@@ -128,5 +128,8 @@
},
"termsAndPrivacyNoticyPrivacyLink": {
"message": "privatlivspolitik"
+ },
+ "libraryLabel": {
+ "message": "Skærmbilleder"
}
}
\ No newline at end of file
diff --git a/browser/extensions/screenshots/webextension/_locales/de/messages.json b/browser/extensions/screenshots/webextension/_locales/de/messages.json
index c400f36..3f80814 100644
--- a/browser/extensions/screenshots/webextension/_locales/de/messages.json
+++ b/browser/extensions/screenshots/webextension/_locales/de/messages.json
@@ -112,8 +112,8 @@
"tourDone": {
"message": "Fertig"
},
- "termsAndPrivacyNoticeCloudServices": {
- "message": "Durch die Verwendung von Firefox Screenshots stimmen Sie den $TERMSANDPRIVACYNOTICETERMSLINK$ und dem $TERMSANDPRIVACYNOTICEPRIVACYLINK$ von Firefox Cloud Services zu.",
+ "termsAndPrivacyNotice2": {
+ "message": "Durch die Verwendung von Firefox Screenshots stimmen Sie unseren $TERMSANDPRIVACYNOTICETERMSLINK$ und $TERMSANDPRIVACYNOTICEPRIVACYLINK$ zu.",
"placeholders": {
"termsandprivacynoticetermslink": {
"content": "$1"
@@ -128,5 +128,8 @@
},
"termsAndPrivacyNoticyPrivacyLink": {
"message": "Datenschutzhinweis"
+ },
+ "libraryLabel": {
+ "message": "Bildschirmfotos"
}
}
\ No newline at end of file
diff --git a/browser/extensions/screenshots/webextension/_locales/dsb/messages.json b/browser/extensions/screenshots/webextension/_locales/dsb/messages.json
index e9caee3..3f4a5ae 100644
--- a/browser/extensions/screenshots/webextension/_locales/dsb/messages.json
+++ b/browser/extensions/screenshots/webextension/_locales/dsb/messages.json
@@ -112,8 +112,8 @@
"tourDone": {
"message": "Gótowo"
},
- "termsAndPrivacyNoticeCloudServices": {
- "message": "Pśez wužywanje Firefox ScreenShots, zwolijośo do $TERMSANDPRIVACYNOTICETERMSLINK$ a $TERMSANDPRIVACYNOTICEPRIVACYLINK$ Firefox Cloud Services.",
+ "termsAndPrivacyNotice2": {
+ "message": "Pśez wužywanje Firefox ScreenShots, zwolijośo do našych $TERMSANDPRIVACYNOTICETERMSLINK$ a $TERMSANDPRIVACYNOTICEPRIVACYLINK$ Firefox Screenshots.",
"placeholders": {
"termsandprivacynoticetermslink": {
"content": "$1"
@@ -128,5 +128,8 @@
},
"termsAndPrivacyNoticyPrivacyLink": {
"message": "Powěźeńka priwatnosći"
+ },
+ "libraryLabel": {
+ "message": "Fota wobrazowki"
}
}
\ No newline at end of file
diff --git a/browser/extensions/screenshots/webextension/_locales/el/messages.json b/browser/extensions/screenshots/webextension/_locales/el/messages.json
index e322c9b..cde1648 100644
--- a/browser/extensions/screenshots/webextension/_locales/el/messages.json
+++ b/browser/extensions/screenshots/webextension/_locales/el/messages.json
@@ -112,8 +112,8 @@
"tourDone": {
"message": "Τέλος"
},
- "termsAndPrivacyNoticeCloudServices": {
- "message": "Χρησιμοποιώντας το Firefox Screenshots, συμφωνείτε με τους $TERMSANDPRIVACYNOTICETERMSLINK$ και την $TERMSANDPRIVACYNOTICEPRIVACYLINK$ των Υπηρεσιών Cloud του Firefox.",
+ "termsAndPrivacyNotice2": {
+ "message": "Χρησιμοποιώντας το Firefox Screenshots, συμφωνείτε με τους $TERMSANDPRIVACYNOTICETERMSLINK$ και την $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
"placeholders": {
"termsandprivacynoticetermslink": {
"content": "$1"
@@ -128,5 +128,8 @@
},
"termsAndPrivacyNoticyPrivacyLink": {
"message": "Σημείωση απορρήτου"
+ },
+ "libraryLabel": {
+ "message": "Στιγμιότυπα"
}
}
\ No newline at end of file
diff --git a/browser/extensions/screenshots/webextension/_locales/en_US/messages.json b/browser/extensions/screenshots/webextension/_locales/en_US/messages.json
index 22ebfbe..0f4c3d4 100644
--- a/browser/extensions/screenshots/webextension/_locales/en_US/messages.json
+++ b/browser/extensions/screenshots/webextension/_locales/en_US/messages.json
@@ -112,7 +112,7 @@
"tourDone": {
"message": "Done"
},
- "termsAndPrivacyNoticeCloudServices": {
+ "termsAndPrivacyNotice2": {
"message": "By using Firefox Screenshots, you agree to our $TERMSANDPRIVACYNOTICETERMSLINK$ and $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
"placeholders": {
"termsandprivacynoticetermslink": {
@@ -128,5 +128,8 @@
},
"termsAndPrivacyNoticyPrivacyLink": {
"message": "Privacy Notice"
+ },
+ "libraryLabel": {
+ "message": "Screenshots"
}
}
\ No newline at end of file
diff --git a/browser/extensions/screenshots/webextension/_locales/eo/messages.json b/browser/extensions/screenshots/webextension/_locales/eo/messages.json
index 337e629..86da12b 100644
--- a/browser/extensions/screenshots/webextension/_locales/eo/messages.json
+++ b/browser/extensions/screenshots/webextension/_locales/eo/messages.json
@@ -112,7 +112,7 @@
"tourDone": {
"message": "Farita"
},
- "termsAndPrivacyNoticeCloudServices": {
+ "termsAndPrivacyNotice2": {
"message": "Se vi uzas Firefox Screenshots, vi akceptas nian $TERMSANDPRIVACYNOTICETERMSLINK$ kaj $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
"placeholders": {
"termsandprivacynoticetermslink": {
@@ -128,5 +128,8 @@
},
"termsAndPrivacyNoticyPrivacyLink": {
"message": "rimarkon pri privateco"
+ },
+ "libraryLabel": {
+ "message": "Ekrankopioj"
}
}
\ No newline at end of file
diff --git a/browser/extensions/screenshots/webextension/_locales/es_AR/messages.json b/browser/extensions/screenshots/webextension/_locales/es_AR/messages.json
index 180b85e..fefc5dd 100644
--- a/browser/extensions/screenshots/webextension/_locales/es_AR/messages.json
+++ b/browser/extensions/screenshots/webextension/_locales/es_AR/messages.json
@@ -112,8 +112,8 @@
"tourDone": {
"message": "Listo"
},
- "termsAndPrivacyNoticeCloudServices": {
- "message": "Al usar Firefox Screenshots, aceptás los $TERMSANDPRIVACYNOTICETERMSLINK$ y $TERMSANDPRIVACYNOTICEPRIVACYLINK$ de los servicios en la nube de Firefox.",
+ "termsAndPrivacyNotice2": {
+ "message": "Al usar Firefox Screenshots, aceptás los $TERMSANDPRIVACYNOTICETERMSLINK$ y $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
"placeholders": {
"termsandprivacynoticetermslink": {
"content": "$1"
@@ -128,5 +128,8 @@
},
"termsAndPrivacyNoticyPrivacyLink": {
"message": "Nota de privacidad"
+ },
+ "libraryLabel": {
+ "message": "Capturas"
}
}
\ No newline at end of file
diff --git a/browser/extensions/screenshots/webextension/_locales/es_CL/messages.json b/browser/extensions/screenshots/webextension/_locales/es_CL/messages.json
index eba0a7a..7aab98b 100644
--- a/browser/extensions/screenshots/webextension/_locales/es_CL/messages.json
+++ b/browser/extensions/screenshots/webextension/_locales/es_CL/messages.json
@@ -112,8 +112,8 @@
"tourDone": {
"message": "Hecho"
},
- "termsAndPrivacyNoticeCloudServices": {
- "message": "Al usar Firefox Screenshots, aceptas los $TERMSANDPRIVACYNOTICETERMSLINK$ y el $TERMSANDPRIVACYNOTICEPRIVACYLINK$ de Firefox Cloud Services.",
+ "termsAndPrivacyNotice2": {
+ "message": "Al usar Firefox Screenshots, aceptas nuestros $TERMSANDPRIVACYNOTICETERMSLINK$ y el $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
"placeholders": {
"termsandprivacynoticetermslink": {
"content": "$1"
@@ -128,5 +128,8 @@
},
"termsAndPrivacyNoticyPrivacyLink": {
"message": "Aviso de privacidad"
+ },
+ "libraryLabel": {
+ "message": "Capturas de pantalla"
}
}
\ No newline at end of file
diff --git a/browser/extensions/screenshots/webextension/_locales/es_ES/messages.json b/browser/extensions/screenshots/webextension/_locales/es_ES/messages.json
index 88f2c00..eab5d51 100644
--- a/browser/extensions/screenshots/webextension/_locales/es_ES/messages.json
+++ b/browser/extensions/screenshots/webextension/_locales/es_ES/messages.json
@@ -112,8 +112,8 @@
"tourDone": {
"message": "Hecho"
},
- "termsAndPrivacyNoticeCloudServices": {
- "message": "Al usar Firefox Screenshots, aceptas los $TERMSANDPRIVACYNOTICETERMSLINK$ y el $TERMSANDPRIVACYNOTICEPRIVACYLINK$ de Firefox Cloud Services.",
+ "termsAndPrivacyNotice2": {
+ "message": "Al usar Firefox Screenshots, estás de acuerdo con nuestros $TERMSANDPRIVACYNOTICETERMSLINK$ y $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
"placeholders": {
"termsandprivacynoticetermslink": {
"content": "$1"
@@ -128,5 +128,8 @@
},
"termsAndPrivacyNoticyPrivacyLink": {
"message": "Aviso de privacidad"
+ },
+ "libraryLabel": {
+ "message": "Screenshots"
}
}
\ No newline at end of file
diff --git a/browser/extensions/screenshots/webextension/_locales/es_MX/messages.json b/browser/extensions/screenshots/webextension/_locales/es_MX/messages.json
index 0c37e393..81943aa 100644
--- a/browser/extensions/screenshots/webextension/_locales/es_MX/messages.json
+++ b/browser/extensions/screenshots/webextension/_locales/es_MX/messages.json
@@ -112,8 +112,8 @@
"tourDone": {
"message": "Terminado"
},
- "termsAndPrivacyNoticeCloudServices": {
- "message": "Al usar Firefox Screenshots, estás de acuerdo con los servicios de Firefox Cloud $TERMSANDPRIVACYNOTICETERMSLINK$ y $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
+ "termsAndPrivacyNotice2": {
+ "message": "Al usar Firefox Screenshots, estás de acuerdo con nuestros $TERMSANDPRIVACYNOTICETERMSLINK$ y $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
"placeholders": {
"termsandprivacynoticetermslink": {
"content": "$1"
@@ -128,5 +128,8 @@
},
"termsAndPrivacyNoticyPrivacyLink": {
"message": "Aviso de privacidad"
+ },
+ "libraryLabel": {
+ "message": "Screenshots"
}
}
\ No newline at end of file
diff --git a/browser/extensions/screenshots/webextension/_locales/et/messages.json b/browser/extensions/screenshots/webextension/_locales/et/messages.json
index d3a8b14..41166b4 100644
--- a/browser/extensions/screenshots/webextension/_locales/et/messages.json
+++ b/browser/extensions/screenshots/webextension/_locales/et/messages.json
@@ -112,8 +112,8 @@
"tourDone": {
"message": "Valmis"
},
- "termsAndPrivacyNoticeCloudServices": {
- "message": "Firefox Screenshots kasutamisel nõustud Firefox Cloud Services $TERMSANDPRIVACYNOTICETERMSLINK$ ja $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
+ "termsAndPrivacyNotice2": {
+ "message": "Firefox Screenshots'i kasutades nõustud meie $TERMSANDPRIVACYNOTICETERMSLINK$ ja $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
"placeholders": {
"termsandprivacynoticetermslink": {
"content": "$1"
diff --git a/browser/extensions/screenshots/webextension/_locales/fa/messages.json b/browser/extensions/screenshots/webextension/_locales/fa/messages.json
index c088a9c..30e1c76 100644
--- a/browser/extensions/screenshots/webextension/_locales/fa/messages.json
+++ b/browser/extensions/screenshots/webextension/_locales/fa/messages.json
@@ -112,8 +112,8 @@
"tourDone": {
"message": "انجام شد"
},
- "termsAndPrivacyNoticeCloudServices": {
- "message": "با استفاده از سرویس تصاویرِ صفحه فایرفاکس، شما با شرایط سرویس‌های ابری فایرفاکس $TERMSANDPRIVACYNOTICETERMSLINK$ و $TERMSANDPRIVACYNOTICEPRIVACYLINK$ موافقت می‌کنید.",
+ "termsAndPrivacyNotice2": {
+ "message": "با استفاده از سرویس تصاویر صفحه فایرفاکس، شما با $TERMSANDPRIVACYNOTICETERMSLINK$ ما و $TERMSANDPRIVACYNOTICEPRIVACYLINK$ موافقت می‌کنید.",
"placeholders": {
"termsandprivacynoticetermslink": {
"content": "$1"
@@ -128,5 +128,8 @@
},
"termsAndPrivacyNoticyPrivacyLink": {
"message": "نکات حریم‌خصوصی"
+ },
+ "libraryLabel": {
+ "message": "تصاویر صفحه"
}
}
\ No newline at end of file
diff --git a/browser/extensions/screenshots/webextension/_locales/fi/messages.json b/browser/extensions/screenshots/webextension/_locales/fi/messages.json
index d12f67b..4bea241 100644
--- a/browser/extensions/screenshots/webextension/_locales/fi/messages.json
+++ b/browser/extensions/screenshots/webextension/_locales/fi/messages.json
@@ -112,8 +112,8 @@
"tourDone": {
"message": "Valmis"
},
- "termsAndPrivacyNoticeCloudServices": {
- "message": "Käyttämällä Firefox Screenshots –ominaisuutta hyväksyt Firefoxin pilvipalveluiden $TERMSANDPRIVACYNOTICETERMSLINK$ ja $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
+ "termsAndPrivacyNotice2": {
+ "message": "Käyttämällä Firefox Screenshots -ominaisuutta hyväksyt meidän $TERMSANDPRIVACYNOTICETERMSLINK$ ja $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
"placeholders": {
"termsandprivacynoticetermslink": {
"content": "$1"
@@ -128,5 +128,8 @@
},
"termsAndPrivacyNoticyPrivacyLink": {
"message": "tietosuojakäytännön"
+ },
+ "libraryLabel": {
+ "message": "Kuvakaappaukset"
}
}
\ No newline at end of file
diff --git a/browser/extensions/screenshots/webextension/_locales/fr/messages.json b/browser/extensions/screenshots/webextension/_locales/fr/messages.json
index d2af062..959be107 100644
--- a/browser/extensions/screenshots/webextension/_locales/fr/messages.json
+++ b/browser/extensions/screenshots/webextension/_locales/fr/messages.json
@@ -112,8 +112,8 @@
"tourDone": {
"message": "Terminé"
},
- "termsAndPrivacyNoticeCloudServices": {
- "message": "En utilisant Firefox Screenshots, vous acceptez les $TERMSANDPRIVACYNOTICETERMSLINK$ et la $TERMSANDPRIVACYNOTICEPRIVACYLINK$ des services en ligne de Firefox.",
+ "termsAndPrivacyNotice2": {
+ "message": "En utilisant Firefox Screenshots, vous acceptez nos $TERMSANDPRIVACYNOTICETERMSLINK$ et notre $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
"placeholders": {
"termsandprivacynoticetermslink": {
"content": "$1"
@@ -128,5 +128,8 @@
},
"termsAndPrivacyNoticyPrivacyLink": {
"message": "politique de confidentialité"
+ },
+ "libraryLabel": {
+ "message": "Captures d’écran"
}
}
\ No newline at end of file
diff --git a/browser/extensions/screenshots/webextension/_locales/fy_NL/messages.json b/browser/extensions/screenshots/webextension/_locales/fy_NL/messages.json
index 6b95e63..ed438a2 100644
--- a/browser/extensions/screenshots/webextension/_locales/fy_NL/messages.json
+++ b/browser/extensions/screenshots/webextension/_locales/fy_NL/messages.json
@@ -112,8 +112,8 @@
"tourDone": {
"message": "Dien"
},
- "termsAndPrivacyNoticeCloudServices": {
- "message": "Troch Firefox Screenshots te brûken, geane jo akkoard mei de $TERMSANDPRIVACYNOTICETERMSLINK$ en $TERMSANDPRIVACYNOTICEPRIVACYLINK$ fan Firefox-cloudtsjinsten.",
+ "termsAndPrivacyNotice2": {
+ "message": "Troch Firefox Screenshots te brûken, gean jo akkoard mei ús $TERMSANDPRIVACYNOTICETERMSLINK$ en $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
"placeholders": {
"termsandprivacynoticetermslink": {
"content": "$1"
@@ -128,5 +128,8 @@
},
"termsAndPrivacyNoticyPrivacyLink": {
"message": "Privacyferklearring"
+ },
+ "libraryLabel": {
+ "message": "Skermôfbyldingen"
}
}
\ No newline at end of file
diff --git a/browser/extensions/screenshots/webextension/_locales/ga_IE/messages.json b/browser/extensions/screenshots/webextension/_locales/ga_IE/messages.json
index 43055cc..fe46185 100644
--- a/browser/extensions/screenshots/webextension/_locales/ga_IE/messages.json
+++ b/browser/extensions/screenshots/webextension/_locales/ga_IE/messages.json
@@ -107,7 +107,15 @@
"message": "Críochnaithe"
},
"termsAndPrivacyNotice2": {
- "message": "Má úsáideann tú Gabhálacha Scáileáin Firefox, glacann tú leis na {termsAndPrivacyNoticeTermsLink} agus leis an {termsAndPrivacyNoticePrivacyLink}."
+ "message": "Má úsáideann tú Gabhálacha Scáileáin Firefox, glacann tú leis na $TERMSANDPRIVACYNOTICETERMSLINK$ agus leis an $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
+ "placeholders": {
+ "termsandprivacynoticetermslink": {
+ "content": "$1"
+ },
+ "termsandprivacynoticeprivacylink": {
+ "content": "$2"
+ }
+ }
},
"termsAndPrivacyNoticeTermsLink": {
"message": "Téarmaí"
diff --git a/browser/extensions/screenshots/webextension/_locales/gu_IN/messages.json b/browser/extensions/screenshots/webextension/_locales/gu_IN/messages.json
index 5371283..8abe50c 100644
--- a/browser/extensions/screenshots/webextension/_locales/gu_IN/messages.json
+++ b/browser/extensions/screenshots/webextension/_locales/gu_IN/messages.json
@@ -112,8 +112,8 @@
"tourDone": {
"message": "થઈ ગયું"
},
- "termsAndPrivacyNoticeCloudServices": {
- "message": "Firefox સ્ક્રીનશોટ્સ વાપરીને, તમે Firefox Cloud સેવાઓ સાથે સંમત થાઓ છો $TERMSANDPRIVACYNOTICETERMSLINK$ અને $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
+ "termsAndPrivacyNotice2": {
+ "message": "Firefox સ્ક્રિનશોટનો ઉપયોગ કરીને, તમે અમારી સાથે સંમત થાઓ છો $TERMSANDPRIVACYNOTICETERMSLINK$ અને $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
"placeholders": {
"termsandprivacynoticetermslink": {
"content": "$1"
@@ -128,5 +128,8 @@
},
"termsAndPrivacyNoticyPrivacyLink": {
"message": "ખાનગી સૂચના"
+ },
+ "libraryLabel": {
+ "message": "સ્ક્રીનશૉટ્સ"
}
}
\ No newline at end of file
diff --git a/browser/extensions/screenshots/webextension/_locales/he/messages.json b/browser/extensions/screenshots/webextension/_locales/he/messages.json
index 756e4b9..8fa8ff4 100644
--- a/browser/extensions/screenshots/webextension/_locales/he/messages.json
+++ b/browser/extensions/screenshots/webextension/_locales/he/messages.json
@@ -107,15 +107,7 @@
"message": "סיום"
},
"termsAndPrivacyNoticeCloudServices": {
- "message": "מעצם השימוש ב־Firefox Screenshots הכללים של שירותי הענן של Firefox‏ $TERMSANDPRIVACYNOTICETERMSLINK$ ו$TERMSANDPRIVACYNOTICEPRIVACYLINK$ מוסכמים עליך.",
- "placeholders": {
- "termsandprivacynoticetermslink": {
- "content": "$1"
- },
- "termsandprivacynoticeprivacylink": {
- "content": "$2"
- }
- }
+ "message": "מעצם השימוש ב־Firefox Screenshots הכללים של שירותי הענן של Firefox‏ {termsAndPrivacyNoticeTermsLink} ו{termsAndPrivacyNoticePrivacyLink} מוסכמים עליך."
},
"termsAndPrivacyNoticeTermsLink": {
"message": "תנאים"
diff --git a/browser/extensions/screenshots/webextension/_locales/hi_IN/messages.json b/browser/extensions/screenshots/webextension/_locales/hi_IN/messages.json
index 4230e49..89305b2 100644
--- a/browser/extensions/screenshots/webextension/_locales/hi_IN/messages.json
+++ b/browser/extensions/screenshots/webextension/_locales/hi_IN/messages.json
@@ -112,8 +112,8 @@
"tourDone": {
"message": "पूर्ण"
},
- "termsAndPrivacyNoticeCloudServices": {
- "message": "Firefox स्क्रीनशॉट का उपयोग करके, आप Firefox क्लाउड सेवाओं $TERMSANDPRIVACYNOTICETERMSLINK$ और $TERMSANDPRIVACYNOTICEPRIVACYLINK$ के लिए सहमत हैं.",
+ "termsAndPrivacyNotice2": {
+ "message": "Firefox स्क्रीनशॉट्स का उपयोग करके, आप हमारी $TERMSANDPRIVACYNOTICETERMSLINK$ और $TERMSANDPRIVACYNOTICEPRIVACYLINK$ से सहमत हैं.",
"placeholders": {
"termsandprivacynoticetermslink": {
"content": "$1"
@@ -128,5 +128,8 @@
},
"termsAndPrivacyNoticyPrivacyLink": {
"message": "गोपनीयता सूचना"
+ },
+ "libraryLabel": {
+ "message": "स्क्रीनशॉट"
}
}
\ No newline at end of file
diff --git a/browser/extensions/screenshots/webextension/_locales/hr/messages.json b/browser/extensions/screenshots/webextension/_locales/hr/messages.json
index a120c8e..7d42ba1 100644
--- a/browser/extensions/screenshots/webextension/_locales/hr/messages.json
+++ b/browser/extensions/screenshots/webextension/_locales/hr/messages.json
@@ -67,6 +67,12 @@
"emptySelectionErrorTitle": {
"message": "Vaš odabir je premalen"
},
+ "privateWindowErrorTitle": {
+ "message": "Snimke ekrana su onemogućene u načinu privatnog pretraživanja"
+ },
+ "privateWindowErrorDetails": {
+ "message": "Žao nam je na neugodnosti. Radimo na ovoj mogućnosti za buduća izdanja."
+ },
"genericErrorTitle": {
"message": "Uf! Firefox Screenshots se zbrkao."
},
@@ -106,10 +112,24 @@
"tourDone": {
"message": "Gotovo"
},
+ "termsAndPrivacyNotice2": {
+ "message": "Koristeći Firefox Screenshots slažete se s našim $TERMSANDPRIVACYNOTICETERMSLINK$ i $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
+ "placeholders": {
+ "termsandprivacynoticetermslink": {
+ "content": "$1"
+ },
+ "termsandprivacynoticeprivacylink": {
+ "content": "$2"
+ }
+ }
+ },
"termsAndPrivacyNoticeTermsLink": {
"message": "Uvjeti"
},
"termsAndPrivacyNoticyPrivacyLink": {
"message": "Pravila o privatnosti"
+ },
+ "libraryLabel": {
+ "message": "Snimke ekrana"
}
}
\ No newline at end of file
diff --git a/browser/extensions/screenshots/webextension/_locales/hsb/messages.json b/browser/extensions/screenshots/webextension/_locales/hsb/messages.json
index e6b3bb3..d3a29f0 100644
--- a/browser/extensions/screenshots/webextension/_locales/hsb/messages.json
+++ b/browser/extensions/screenshots/webextension/_locales/hsb/messages.json
@@ -112,8 +112,8 @@
"tourDone": {
"message": "Hotowo"
},
- "termsAndPrivacyNoticeCloudServices": {
- "message": "Přez wužiwanje Firefox ScreenShots, zwoliće do $TERMSANDPRIVACYNOTICETERMSLINK$ a $TERMSANDPRIVACYNOTICEPRIVACYLINK$ Firefox Cloud Services.",
+ "termsAndPrivacyNotice2": {
+ "message": "Přez wužiwanje Firefox ScreenShots, zwoliće do našich $TERMSANDPRIVACYNOTICETERMSLINK$ a $TERMSANDPRIVACYNOTICEPRIVACYLINK$ Firefox Screenshots.",
"placeholders": {
"termsandprivacynoticetermslink": {
"content": "$1"
@@ -128,5 +128,8 @@
},
"termsAndPrivacyNoticyPrivacyLink": {
"message": "Pokaz priwatnosće"
+ },
+ "libraryLabel": {
+ "message": "Fota wobrazowki"
}
}
\ No newline at end of file
diff --git a/browser/extensions/screenshots/webextension/_locales/hu/messages.json b/browser/extensions/screenshots/webextension/_locales/hu/messages.json
index 953a413..ef3c0ab 100644
--- a/browser/extensions/screenshots/webextension/_locales/hu/messages.json
+++ b/browser/extensions/screenshots/webextension/_locales/hu/messages.json
@@ -112,8 +112,8 @@
"tourDone": {
"message": "Kész"
},
- "termsAndPrivacyNoticeCloudServices": {
- "message": "A Firefox képernyőképek használatával beleegyezik a Firefox felhőszolgáltatások $TERMSANDPRIVACYNOTICETERMSLINK$ és $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
+ "termsAndPrivacyNotice2": {
+ "message": "A Firefox képernyőképek használatával, Ön beleegyezik a $TERMSANDPRIVACYNOTICETERMSLINK$ és $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
"placeholders": {
"termsandprivacynoticetermslink": {
"content": "$1"
@@ -128,5 +128,8 @@
},
"termsAndPrivacyNoticyPrivacyLink": {
"message": "Adatvédelmi nyilatkozatba"
+ },
+ "libraryLabel": {
+ "message": "Képernyőképek"
}
}
\ No newline at end of file
diff --git a/browser/extensions/screenshots/webextension/_locales/hy_AM/messages.json b/browser/extensions/screenshots/webextension/_locales/hy_AM/messages.json
index 93539d9..2533430 100644
--- a/browser/extensions/screenshots/webextension/_locales/hy_AM/messages.json
+++ b/browser/extensions/screenshots/webextension/_locales/hy_AM/messages.json
@@ -106,8 +106,8 @@
"tourDone": {
"message": "Պատրաստ է"
},
- "termsAndPrivacyNoticeCloudServices": {
- "message": "Օգտագործելով Firefox Screenshots-ը՝ դուք ընդունում եք Firefox Cloud ծառայությունների $TERMSANDPRIVACYNOTICETERMSLINK$ը և $TERMSANDPRIVACYNOTICEPRIVACYLINK$ը:",
+ "termsAndPrivacyNotice2": {
+ "message": "Firefox Screenshots-ը օգտագործելով՝ դուք ընդունեւմ եք $TERMSANDPRIVACYNOTICETERMSLINK$ը և $TERMSANDPRIVACYNOTICEPRIVACYLINK$ը:",
"placeholders": {
"termsandprivacynoticetermslink": {
"content": "$1"
diff --git a/browser/extensions/screenshots/webextension/_locales/id/messages.json b/browser/extensions/screenshots/webextension/_locales/id/messages.json
index 813e352..eed6ae08 100644
--- a/browser/extensions/screenshots/webextension/_locales/id/messages.json
+++ b/browser/extensions/screenshots/webextension/_locales/id/messages.json
@@ -112,8 +112,8 @@
"tourDone": {
"message": "Selesai"
},
- "termsAndPrivacyNoticeCloudServices": {
- "message": "Dengan menggunakan Firefox Screenshots, Anda setuju dengan $TERMSANDPRIVACYNOTICETERMSLINK$ dan $TERMSANDPRIVACYNOTICEPRIVACYLINK$ Firefox Cloud Services.",
+ "termsAndPrivacyNotice2": {
+ "message": "Dengan menggunakan Firefox Screenshots, Anda setuju dengan $TERMSANDPRIVACYNOTICETERMSLINK$ dan $TERMSANDPRIVACYNOTICEPRIVACYLINK$ kami.",
"placeholders": {
"termsandprivacynoticetermslink": {
"content": "$1"
@@ -128,5 +128,8 @@
},
"termsAndPrivacyNoticyPrivacyLink": {
"message": "Kebijakan Privasi"
+ },
+ "libraryLabel": {
+ "message": "Tangkapan Layar"
}
}
\ No newline at end of file
diff --git a/browser/extensions/screenshots/webextension/_locales/it/messages.json b/browser/extensions/screenshots/webextension/_locales/it/messages.json
index f59a547..f39bc59 100644
--- a/browser/extensions/screenshots/webextension/_locales/it/messages.json
+++ b/browser/extensions/screenshots/webextension/_locales/it/messages.json
@@ -112,8 +112,8 @@
"tourDone": {
"message": "Fine"
},
- "termsAndPrivacyNoticeCloudServices": {
- "message": "Utilizzando Firefox Screenshots si accettano le $TERMSANDPRIVACYNOTICETERMSLINK$ e l’$TERMSANDPRIVACYNOTICEPRIVACYLINK$ di Firefox Cloud Services.",
+ "termsAndPrivacyNotice2": {
+ "message": "Utilizzando Firefox Screenshots si accettano le $TERMSANDPRIVACYNOTICETERMSLINK$ e l’$TERMSANDPRIVACYNOTICEPRIVACYLINK$ del servizio.",
"placeholders": {
"termsandprivacynoticetermslink": {
"content": "$1"
@@ -128,5 +128,8 @@
},
"termsAndPrivacyNoticyPrivacyLink": {
"message": "informativa sulla privacy"
+ },
+ "libraryLabel": {
+ "message": "Screenshot"
}
}
\ No newline at end of file
diff --git a/browser/extensions/screenshots/webextension/_locales/ja/messages.json b/browser/extensions/screenshots/webextension/_locales/ja/messages.json
index ad83d05..a3521c7 100644
--- a/browser/extensions/screenshots/webextension/_locales/ja/messages.json
+++ b/browser/extensions/screenshots/webextension/_locales/ja/messages.json
@@ -112,8 +112,8 @@
"tourDone": {
"message": "完了"
},
- "termsAndPrivacyNoticeCloudServices": {
- "message": "Firefox Screenshots を使うことで、あなたは Firefox Cloud Services の $TERMSANDPRIVACYNOTICETERMSLINK$ と $TERMSANDPRIVACYNOTICEPRIVACYLINK$ に同意したことになります。",
+ "termsAndPrivacyNotice2": {
+ "message": "Firefox Screenshots を使うことで、あなたは $TERMSANDPRIVACYNOTICETERMSLINK$ と $TERMSANDPRIVACYNOTICEPRIVACYLINK$ に同意したことになります。",
"placeholders": {
"termsandprivacynoticetermslink": {
"content": "$1"
@@ -128,5 +128,8 @@
},
"termsAndPrivacyNoticyPrivacyLink": {
"message": "プライバシー通知"
+ },
+ "libraryLabel": {
+ "message": "スクリーンショット"
}
}
\ No newline at end of file
diff --git a/browser/extensions/screenshots/webextension/_locales/ka/messages.json b/browser/extensions/screenshots/webextension/_locales/ka/messages.json
index 80acebf..5da474f 100644
--- a/browser/extensions/screenshots/webextension/_locales/ka/messages.json
+++ b/browser/extensions/screenshots/webextension/_locales/ka/messages.json
@@ -112,7 +112,7 @@
"tourDone": {
"message": "მზადაა"
},
- "termsAndPrivacyNoticeCloudServices": {
+ "termsAndPrivacyNotice2": {
"message": "Firefox Screenshots-ის გამოყენებით, თქვენ ეთანხმებით $TERMSANDPRIVACYNOTICETERMSLINK$ და $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
"placeholders": {
"termsandprivacynoticetermslink": {
@@ -128,5 +128,8 @@
},
"termsAndPrivacyNoticyPrivacyLink": {
"message": "პირადი მონაცემების შესახებ განცხადებას"
+ },
+ "libraryLabel": {
+ "message": "Screenshots"
}
}
\ No newline at end of file
diff --git a/browser/extensions/screenshots/webextension/_locales/kab/messages.json b/browser/extensions/screenshots/webextension/_locales/kab/messages.json
index 550f474..b6f0ad6 100644
--- a/browser/extensions/screenshots/webextension/_locales/kab/messages.json
+++ b/browser/extensions/screenshots/webextension/_locales/kab/messages.json
@@ -112,8 +112,8 @@
"tourDone": {
"message": "Immed"
},
- "termsAndPrivacyNoticeCloudServices": {
- "message": "S useqdec n Firefox Screenshots, ad tqebleḍ tiwuriwin n usigna Firefox $TERMSANDPRIVACYNOTICETERMSLINK$ akked $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
+ "termsAndPrivacyNotice2": {
+ "message": "S useqdec Firefox Screenshots, ad tqebleḍ $TERMSANDPRIVACYNOTICETERMSLINK$ akked $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
"placeholders": {
"termsandprivacynoticetermslink": {
"content": "$1"
@@ -128,5 +128,8 @@
},
"termsAndPrivacyNoticyPrivacyLink": {
"message": "Tasertit n tbaḍnit"
+ },
+ "libraryLabel": {
+ "message": "Tuṭṭfiwin n ugdil"
}
}
\ No newline at end of file
diff --git a/browser/extensions/screenshots/webextension/_locales/kk/messages.json b/browser/extensions/screenshots/webextension/_locales/kk/messages.json
index 9b64273..380bb9d 100644
--- a/browser/extensions/screenshots/webextension/_locales/kk/messages.json
+++ b/browser/extensions/screenshots/webextension/_locales/kk/messages.json
@@ -112,8 +112,8 @@
"tourDone": {
"message": "Дайын"
},
- "termsAndPrivacyNoticeCloudServices": {
- "message": "Firefox скриншоттарын қолдану арқылы, сіз Firefox бұлттық қызметтерінің $TERMSANDPRIVACYNOTICETERMSLINK$ және $TERMSANDPRIVACYNOTICEPRIVACYLINK$ келісесіз.",
+ "termsAndPrivacyNotice2": {
+ "message": "Firefox скриншоттарын қолдану арқылы, сіз біздің $TERMSANDPRIVACYNOTICETERMSLINK$ және $TERMSANDPRIVACYNOTICEPRIVACYLINK$ келісесіз.",
"placeholders": {
"termsandprivacynoticetermslink": {
"content": "$1"
diff --git a/browser/extensions/screenshots/webextension/_locales/ko/messages.json b/browser/extensions/screenshots/webextension/_locales/ko/messages.json
index 48c5898..63d4f94 100644
--- a/browser/extensions/screenshots/webextension/_locales/ko/messages.json
+++ b/browser/extensions/screenshots/webextension/_locales/ko/messages.json
@@ -112,8 +112,8 @@
"tourDone": {
"message": "완료"
},
- "termsAndPrivacyNoticeCloudServices": {
- "message": "Firefox Screenshots을 사용함으로써, Firefox Cloud Services $TERMSANDPRIVACYNOTICETERMSLINK$과 $TERMSANDPRIVACYNOTICEPRIVACYLINK$에 동의하게 됩니다.",
+ "termsAndPrivacyNotice2": {
+ "message": "Firefox Screenshots을 사용함으로써, $TERMSANDPRIVACYNOTICETERMSLINK$과 $TERMSANDPRIVACYNOTICEPRIVACYLINK$에 동의하게 됩니다.",
"placeholders": {
"termsandprivacynoticetermslink": {
"content": "$1"
@@ -128,5 +128,8 @@
},
"termsAndPrivacyNoticyPrivacyLink": {
"message": "개인 정보 취급 방침"
+ },
+ "libraryLabel": {
+ "message": "Screenshots"
}
}
\ No newline at end of file
diff --git a/browser/extensions/screenshots/webextension/_locales/lij/messages.json b/browser/extensions/screenshots/webextension/_locales/lij/messages.json
index 23d8fb9..b6ecd41 100644
--- a/browser/extensions/screenshots/webextension/_locales/lij/messages.json
+++ b/browser/extensions/screenshots/webextension/_locales/lij/messages.json
@@ -104,15 +104,7 @@
"message": "Fæto"
},
"termsAndPrivacyNoticeCloudServices": {
- "message": "Se ti deuvi Firefox Screenshots, ti e d'acordio con $TERMSANDPRIVACYNOTICETERMSLINK$ e $TERMSANDPRIVACYNOTICEPRIVACYLINK$ de Firefox Cloud Services.",
- "placeholders": {
- "termsandprivacynoticetermslink": {
- "content": "$1"
- },
- "termsandprivacynoticeprivacylink": {
- "content": "$2"
- }
- }
+ "message": "Se ti deuvi Firefox Screenshots, ti e d'acordio con {termsAndPrivacyNoticeTermsLink} e {termsAndPrivacyNoticePrivacyLink} de Firefox Cloud Services."
},
"termsAndPrivacyNoticeTermsLink": {
"message": "Termini"
diff --git a/browser/extensions/screenshots/webextension/_locales/lo/messages.json b/browser/extensions/screenshots/webextension/_locales/lo/messages.json
index d211986..9807543 100644
--- a/browser/extensions/screenshots/webextension/_locales/lo/messages.json
+++ b/browser/extensions/screenshots/webextension/_locales/lo/messages.json
@@ -106,8 +106,8 @@
"tourDone": {
"message": "ສຳເລັດ"
},
- "termsAndPrivacyNoticeCloudServices": {
- "message": "ການນຳໃຊ້ Firefox Screenshots ແມ່ນທ່ານໄດ້ຍອມຮັບເງືອນໄຂການໃຫ້ບໍລິການຂອງ Firefox Cloud Services $TERMSANDPRIVACYNOTICETERMSLINK$ ແລະ $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
+ "termsAndPrivacyNotice2": {
+ "message": "ເພື່ອນຳໃຊ້ Firefox Screenshots ທ່ານໄດ້ຍອມຮັບ $TERMSANDPRIVACYNOTICETERMSLINK$ ແລະ $TERMSANDPRIVACYNOTICEPRIVACYLINK$ ຂອງພວກເຮົາ.",
"placeholders": {
"termsandprivacynoticetermslink": {
"content": "$1"
diff --git a/browser/extensions/screenshots/webextension/_locales/lt/messages.json b/browser/extensions/screenshots/webextension/_locales/lt/messages.json
index ea3cccb..7e09a8dd 100644
--- a/browser/extensions/screenshots/webextension/_locales/lt/messages.json
+++ b/browser/extensions/screenshots/webextension/_locales/lt/messages.json
@@ -112,8 +112,8 @@
"tourDone": {
"message": "Baigta"
},
- "termsAndPrivacyNoticeCloudServices": {
- "message": "Naudodami „Firefox Screenshots“ sutinkate su „Firefox“ tinklo paslaugų $TERMSANDPRIVACYNOTICETERMSLINK$ bei $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
+ "termsAndPrivacyNotice2": {
+ "message": "Naudodamiesi „Firefox“ ekrano nuotraukomis, sutinkate su mūsų $TERMSANDPRIVACYNOTICETERMSLINK$ bei $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
"placeholders": {
"termsandprivacynoticetermslink": {
"content": "$1"
@@ -128,5 +128,8 @@
},
"termsAndPrivacyNoticyPrivacyLink": {
"message": "privatumo nuostatais"
+ },
+ "libraryLabel": {
+ "message": "Ekrano nuotraukos"
}
}
\ No newline at end of file
diff --git a/browser/extensions/screenshots/webextension/_locales/mk/messages.json b/browser/extensions/screenshots/webextension/_locales/mk/messages.json
index deec732..f7bae8b 100644
--- a/browser/extensions/screenshots/webextension/_locales/mk/messages.json
+++ b/browser/extensions/screenshots/webextension/_locales/mk/messages.json
@@ -112,7 +112,7 @@
"tourDone": {
"message": "Готово"
},
- "termsAndPrivacyNoticeCloudServices": {
+ "termsAndPrivacyNotice2": {
"message": "Со користење на Firefox Screenshots, се согласувате со нашите $TERMSANDPRIVACYNOTICETERMSLINK$ и $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
"placeholders": {
"termsandprivacynoticetermslink": {
@@ -128,5 +128,8 @@
},
"termsAndPrivacyNoticyPrivacyLink": {
"message": "Известување за приватност"
+ },
+ "libraryLabel": {
+ "message": "Слики од екран"
}
}
\ No newline at end of file
diff --git a/browser/extensions/screenshots/webextension/_locales/mr/messages.json b/browser/extensions/screenshots/webextension/_locales/mr/messages.json
index f190db2..390a4b6 100644
--- a/browser/extensions/screenshots/webextension/_locales/mr/messages.json
+++ b/browser/extensions/screenshots/webextension/_locales/mr/messages.json
@@ -112,7 +112,7 @@
"tourDone": {
"message": "झाले"
},
- "termsAndPrivacyNoticeCloudServices": {
+ "termsAndPrivacyNotice2": {
"message": "Firefox Screenshots वापरून, आपण आमच्या $TERMSANDPRIVACYNOTICETERMSLINK$आणि $TERMSANDPRIVACYNOTICEPRIVACYLINK$ शी सहमत आहात.",
"placeholders": {
"termsandprivacynoticetermslink": {
@@ -128,5 +128,8 @@
},
"termsAndPrivacyNoticyPrivacyLink": {
"message": "गोपनीयता सूचना"
+ },
+ "libraryLabel": {
+ "message": "स्क्रीनशॉट"
}
}
\ No newline at end of file
diff --git a/browser/extensions/screenshots/webextension/_locales/ms/messages.json b/browser/extensions/screenshots/webextension/_locales/ms/messages.json
index 318b49a..624a9de 100644
--- a/browser/extensions/screenshots/webextension/_locales/ms/messages.json
+++ b/browser/extensions/screenshots/webextension/_locales/ms/messages.json
@@ -112,8 +112,8 @@
"tourDone": {
"message": "Selesai"
},
- "termsAndPrivacyNoticeCloudServices": {
- "message": "Dengan menggunakan Firefox Screenshots, anda bersetuju dengan $TERMSANDPRIVACYNOTICETERMSLINK$ dan $TERMSANDPRIVACYNOTICEPRIVACYLINK$ Firefox Cloud Services.",
+ "termsAndPrivacyNotice2": {
+ "message": "Apabila menggunakan Firefox Screenshots, anda bersetuju dengan $TERMSANDPRIVACYNOTICETERMSLINK$ dan $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
"placeholders": {
"termsandprivacynoticetermslink": {
"content": "$1"
@@ -128,5 +128,8 @@
},
"termsAndPrivacyNoticyPrivacyLink": {
"message": "Notis Privasi"
+ },
+ "libraryLabel": {
+ "message": "Screenshots"
}
}
\ No newline at end of file
diff --git a/browser/extensions/screenshots/webextension/_locales/nb_NO/messages.json b/browser/extensions/screenshots/webextension/_locales/nb_NO/messages.json
index ebb29d5..9dcaa63 100644
--- a/browser/extensions/screenshots/webextension/_locales/nb_NO/messages.json
+++ b/browser/extensions/screenshots/webextension/_locales/nb_NO/messages.json
@@ -112,8 +112,8 @@
"tourDone": {
"message": "Ferdig"
},
- "termsAndPrivacyNoticeCloudServices": {
- "message": "Ved å bruke Firefox Screenshots, godtar du $TERMSANDPRIVACYNOTICETERMSLINK$ og $TERMSANDPRIVACYNOTICEPRIVACYLINK$ for Firefox Cloud Services.",
+ "termsAndPrivacyNotice2": {
+ "message": "Ved å bruke Firefox Screenshots, godtar du vår $TERMSANDPRIVACYNOTICETERMSLINK$ og $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
"placeholders": {
"termsandprivacynoticetermslink": {
"content": "$1"
@@ -128,5 +128,8 @@
},
"termsAndPrivacyNoticyPrivacyLink": {
"message": "personvernbestemmelser"
+ },
+ "libraryLabel": {
+ "message": "Skjermbilder"
}
}
\ No newline at end of file
diff --git a/browser/extensions/screenshots/webextension/_locales/nl/messages.json b/browser/extensions/screenshots/webextension/_locales/nl/messages.json
index 0513d76..b8df8ea 100644
--- a/browser/extensions/screenshots/webextension/_locales/nl/messages.json
+++ b/browser/extensions/screenshots/webextension/_locales/nl/messages.json
@@ -112,8 +112,8 @@
"tourDone": {
"message": "Gereed"
},
- "termsAndPrivacyNoticeCloudServices": {
- "message": "Door Firefox Screenshots te gebruiken, gaat u akkoord met de $TERMSANDPRIVACYNOTICETERMSLINK$ en $TERMSANDPRIVACYNOTICEPRIVACYLINK$ van Firefox-cloudservices.",
+ "termsAndPrivacyNotice2": {
+ "message": "Door Firefox Screenshots te gebruiken, gaat u akkoord met onze $TERMSANDPRIVACYNOTICETERMSLINK$ en $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
"placeholders": {
"termsandprivacynoticetermslink": {
"content": "$1"
@@ -128,5 +128,8 @@
},
"termsAndPrivacyNoticyPrivacyLink": {
"message": "Privacyverklaring"
+ },
+ "libraryLabel": {
+ "message": "Schermafbeeldingen"
}
}
\ No newline at end of file
diff --git a/browser/extensions/screenshots/webextension/_locales/nn_NO/messages.json b/browser/extensions/screenshots/webextension/_locales/nn_NO/messages.json
index 89c963f..f1bd7b6 100644
--- a/browser/extensions/screenshots/webextension/_locales/nn_NO/messages.json
+++ b/browser/extensions/screenshots/webextension/_locales/nn_NO/messages.json
@@ -112,8 +112,8 @@
"tourDone": {
"message": "Ferdig"
},
- "termsAndPrivacyNoticeCloudServices": {
- "message": "Ved å bruke Firefox Screenshots, godtar du $TERMSANDPRIVACYNOTICETERMSLINK$ og $TERMSANDPRIVACYNOTICEPRIVACYLINK$ for Firefox Cloud Services.",
+ "termsAndPrivacyNotice2": {
+ "message": "Ved å bruke Firefox Screenshots, seier du deg samd i $TERMSANDPRIVACYNOTICETERMSLINK$ og $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
"placeholders": {
"termsandprivacynoticetermslink": {
"content": "$1"
@@ -128,5 +128,8 @@
},
"termsAndPrivacyNoticyPrivacyLink": {
"message": "Personvernmerknad"
+ },
+ "libraryLabel": {
+ "message": "Skjermbilde"
}
}
\ No newline at end of file
diff --git a/browser/extensions/screenshots/webextension/_locales/pl/messages.json b/browser/extensions/screenshots/webextension/_locales/pl/messages.json
index d91d9d3..e122833 100644
--- a/browser/extensions/screenshots/webextension/_locales/pl/messages.json
+++ b/browser/extensions/screenshots/webextension/_locales/pl/messages.json
@@ -112,8 +112,8 @@
"tourDone": {
"message": "Zamknij"
},
- "termsAndPrivacyNoticeCloudServices": {
- "message": "Używając Firefox Screenshots, zgadzasz się na $TERMSANDPRIVACYNOTICETERMSLINK$ i $TERMSANDPRIVACYNOTICEPRIVACYLINK$ usług Firefox Cloud.",
+ "termsAndPrivacyNotice2": {
+ "message": "Używając Firefox Screenshots, zgadzasz się na $TERMSANDPRIVACYNOTICETERMSLINK$ i $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
"placeholders": {
"termsandprivacynoticetermslink": {
"content": "$1"
@@ -128,5 +128,8 @@
},
"termsAndPrivacyNoticyPrivacyLink": {
"message": "zasady ochrony prywatności"
+ },
+ "libraryLabel": {
+ "message": "Zrzuty ekranu"
}
}
\ No newline at end of file
diff --git a/browser/extensions/screenshots/webextension/_locales/pt_BR/messages.json b/browser/extensions/screenshots/webextension/_locales/pt_BR/messages.json
index add2eca..869e08c 100644
--- a/browser/extensions/screenshots/webextension/_locales/pt_BR/messages.json
+++ b/browser/extensions/screenshots/webextension/_locales/pt_BR/messages.json
@@ -112,8 +112,8 @@
"tourDone": {
"message": "Concluído"
},
- "termsAndPrivacyNoticeCloudServices": {
- "message": "Usando o Firefox Screenshots, você concorda com os $TERMSANDPRIVACYNOTICETERMSLINK$ e $TERMSANDPRIVACYNOTICEPRIVACYLINK$ dos serviços na nuvem do Firefox.",
+ "termsAndPrivacyNotice2": {
+ "message": "Ao usar o Firefox Screenshots, você concorda com os $TERMSANDPRIVACYNOTICETERMSLINK$ e $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
"placeholders": {
"termsandprivacynoticetermslink": {
"content": "$1"
@@ -128,5 +128,8 @@
},
"termsAndPrivacyNoticyPrivacyLink": {
"message": "Política de privacidade"
+ },
+ "libraryLabel": {
+ "message": "Screenshots"
}
}
\ No newline at end of file
diff --git a/browser/extensions/screenshots/webextension/_locales/pt_PT/messages.json b/browser/extensions/screenshots/webextension/_locales/pt_PT/messages.json
index 102af1b..df6ea80 100644
--- a/browser/extensions/screenshots/webextension/_locales/pt_PT/messages.json
+++ b/browser/extensions/screenshots/webextension/_locales/pt_PT/messages.json
@@ -112,8 +112,8 @@
"tourDone": {
"message": "Feito"
},
- "termsAndPrivacyNoticeCloudServices": {
- "message": "Ao utilizar o Firefox Screenshots, você concorda com os $TERMSANDPRIVACYNOTICETERMSLINK$ e com o $TERMSANDPRIVACYNOTICEPRIVACYLINK$ do Firefox Cloud Services.",
+ "termsAndPrivacyNotice2": {
+ "message": "Ao utilizar o Firefox Screenshots, concorda com os nossos $TERMSANDPRIVACYNOTICETERMSLINK$ e com o $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
"placeholders": {
"termsandprivacynoticetermslink": {
"content": "$1"
@@ -128,5 +128,8 @@
},
"termsAndPrivacyNoticyPrivacyLink": {
"message": "Aviso de privacidade"
+ },
+ "libraryLabel": {
+ "message": "Capturas de ecrã"
}
}
\ No newline at end of file
diff --git a/browser/extensions/screenshots/webextension/_locales/rm/messages.json b/browser/extensions/screenshots/webextension/_locales/rm/messages.json
index 2f3aaa9..bb344d6 100644
--- a/browser/extensions/screenshots/webextension/_locales/rm/messages.json
+++ b/browser/extensions/screenshots/webextension/_locales/rm/messages.json
@@ -67,6 +67,12 @@
"emptySelectionErrorTitle": {
"message": "La zona selecziunada è memia pitschna"
},
+ "privateWindowErrorTitle": {
+ "message": "Screenshots è deactivà en il modus privat"
+ },
+ "privateWindowErrorDetails": {
+ "message": "Perstgisa las malempernaivladads. Nus furnin questa funcziun en ina da las proximas versiuns."
+ },
"genericErrorTitle": {
"message": "Oh dieu! Firefox Screenshots ha il singlut."
},
@@ -106,8 +112,8 @@
"tourDone": {
"message": "Finì"
},
- "termsAndPrivacyNoticeCloudServices": {
- "message": "Cun utilisar Firefox Screenshots accepteschas ti $TERMSANDPRIVACYNOTICETERMSLINK$ e $TERMSANDPRIVACYNOTICEPRIVACYLINK$ da Firefox Cloud Services.",
+ "termsAndPrivacyNotice2": {
+ "message": "Cun utilisar Firefox Screenshots acceptas ti $TERMSANDPRIVACYNOTICETERMSLINK$ e $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
"placeholders": {
"termsandprivacynoticetermslink": {
"content": "$1"
@@ -122,5 +128,8 @@
},
"termsAndPrivacyNoticyPrivacyLink": {
"message": "la decleraziun da protecziun da datas"
+ },
+ "libraryLabel": {
+ "message": "Maletgs dal visur"
}
}
\ No newline at end of file
diff --git a/browser/extensions/screenshots/webextension/_locales/ru/messages.json b/browser/extensions/screenshots/webextension/_locales/ru/messages.json
index 8ca51dc..0073c6e 100644
--- a/browser/extensions/screenshots/webextension/_locales/ru/messages.json
+++ b/browser/extensions/screenshots/webextension/_locales/ru/messages.json
@@ -112,8 +112,8 @@
"tourDone": {
"message": "Готово"
},
- "termsAndPrivacyNoticeCloudServices": {
- "message": "Используя Скриншоты Firefox, вы соглашаетесь с $TERMSANDPRIVACYNOTICETERMSLINK$ и $TERMSANDPRIVACYNOTICEPRIVACYLINK$ облачных сервисов Firefox.",
+ "termsAndPrivacyNotice2": {
+ "message": "Используя Firefox Screenshots, вы соглашаетесь с нашими $TERMSANDPRIVACYNOTICETERMSLINK$ и $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
"placeholders": {
"termsandprivacynoticetermslink": {
"content": "$1"
@@ -128,5 +128,8 @@
},
"termsAndPrivacyNoticyPrivacyLink": {
"message": "Уведомлением о приватности"
+ },
+ "libraryLabel": {
+ "message": "Скриншоты"
}
}
\ No newline at end of file
diff --git a/browser/extensions/screenshots/webextension/_locales/sk/messages.json b/browser/extensions/screenshots/webextension/_locales/sk/messages.json
index 6b1b491..b49f0f4 100644
--- a/browser/extensions/screenshots/webextension/_locales/sk/messages.json
+++ b/browser/extensions/screenshots/webextension/_locales/sk/messages.json
@@ -112,8 +112,8 @@
"tourDone": {
"message": "Hotovo"
},
- "termsAndPrivacyNoticeCloudServices": {
- "message": "Používaním služby Firefox Screenshots súhlasíte s $TERMSANDPRIVACYNOTICETERMSLINK$ a $TERMSANDPRIVACYNOTICEPRIVACYLINK$ Firefox Cloud Services.",
+ "termsAndPrivacyNotice2": {
+ "message": "Používaním služby Firefox Screenshots súhlasíte s našimi $TERMSANDPRIVACYNOTICETERMSLINK$ a $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
"placeholders": {
"termsandprivacynoticetermslink": {
"content": "$1"
@@ -128,5 +128,8 @@
},
"termsAndPrivacyNoticyPrivacyLink": {
"message": "zásadami ochrany súkromia"
+ },
+ "libraryLabel": {
+ "message": "Snímky obrazovky"
}
}
\ No newline at end of file
diff --git a/browser/extensions/screenshots/webextension/_locales/sl/messages.json b/browser/extensions/screenshots/webextension/_locales/sl/messages.json
index d36c352..4395059 100644
--- a/browser/extensions/screenshots/webextension/_locales/sl/messages.json
+++ b/browser/extensions/screenshots/webextension/_locales/sl/messages.json
@@ -112,8 +112,8 @@
"tourDone": {
"message": "Končano"
},
- "termsAndPrivacyNoticeCloudServices": {
- "message": "Z uporabo Firefox Screenshots se strinjate s $TERMSANDPRIVACYNOTICETERMSLINK$ Firefoxovih storitev v oblaku in $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
+ "termsAndPrivacyNotice2": {
+ "message": "Z uporabo razširitve Firefox Screenshots se strinjate z našimi $TERMSANDPRIVACYNOTICETERMSLINK$ in $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
"placeholders": {
"termsandprivacynoticetermslink": {
"content": "$1"
@@ -128,5 +128,8 @@
},
"termsAndPrivacyNoticyPrivacyLink": {
"message": "obvestilom o zasebnosti"
+ },
+ "libraryLabel": {
+ "message": "Posnetki zaslona"
}
}
\ No newline at end of file
diff --git a/browser/extensions/screenshots/webextension/_locales/sr/messages.json b/browser/extensions/screenshots/webextension/_locales/sr/messages.json
index 6c5d372..bc258f8 100644
--- a/browser/extensions/screenshots/webextension/_locales/sr/messages.json
+++ b/browser/extensions/screenshots/webextension/_locales/sr/messages.json
@@ -112,8 +112,8 @@
"tourDone": {
"message": "Готово"
},
- "termsAndPrivacyNoticeCloudServices": {
- "message": "Коришћењем Firefox Screenshots-а, прихватате Firefox Cloud Services $TERMSANDPRIVACYNOTICETERMSLINK$ и $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
+ "termsAndPrivacyNotice2": {
+ "message": "Коришћењем Firefox Screenshots прихватате наше $TERMSANDPRIVACYNOTICETERMSLINK$ и $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
"placeholders": {
"termsandprivacynoticetermslink": {
"content": "$1"
diff --git a/browser/extensions/screenshots/webextension/_locales/sv_SE/messages.json b/browser/extensions/screenshots/webextension/_locales/sv_SE/messages.json
index f0b0db6..bf15f33 100644
--- a/browser/extensions/screenshots/webextension/_locales/sv_SE/messages.json
+++ b/browser/extensions/screenshots/webextension/_locales/sv_SE/messages.json
@@ -112,8 +112,8 @@
"tourDone": {
"message": "Färdig"
},
- "termsAndPrivacyNoticeCloudServices": {
- "message": "Genom att använda Firefox Screenshots, godkänner du $TERMSANDPRIVACYNOTICETERMSLINK$ och $TERMSANDPRIVACYNOTICEPRIVACYLINK$ för Firefox molntjänster.",
+ "termsAndPrivacyNotice2": {
+ "message": "Genom att använda Firefox Screenshots, godkänner du $TERMSANDPRIVACYNOTICETERMSLINK$ och $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
"placeholders": {
"termsandprivacynoticetermslink": {
"content": "$1"
@@ -128,5 +128,8 @@
},
"termsAndPrivacyNoticyPrivacyLink": {
"message": "Sekretesspolicy"
+ },
+ "libraryLabel": {
+ "message": "Skärmbilder"
}
}
\ No newline at end of file
diff --git a/browser/extensions/screenshots/webextension/_locales/ta/messages.json b/browser/extensions/screenshots/webextension/_locales/ta/messages.json
index c8aba78..d0e8e07 100644
--- a/browser/extensions/screenshots/webextension/_locales/ta/messages.json
+++ b/browser/extensions/screenshots/webextension/_locales/ta/messages.json
@@ -74,7 +74,7 @@
"message": "சிரமத்திற்கு வருந்துகிறோம். எதிர்கால வெளியீடுகளில் நாங்கள் இந்த வசதியைச் செய்து தருகிறோம்."
},
"genericErrorTitle": {
- "message": "அய் அய்யோ! பயர்பாஃசு திரைப்பிடிப்பு வீணாய் போனது."
+ "message": "அய் அய்யோ! பயர்பாஃசு திரைப்பிடிப்பு வீணாய் போனது. "
},
"genericErrorDetails": {
"message": "என்ன நடந்தது என எங்களுக்குத் தெரியவில்லை. முடிந்தால் மீண்டும் முயற்சியுங்கள் (அ) வேறொரு பக்கத்தில் முயற்சியுங்கள்?"
@@ -112,8 +112,8 @@
"tourDone": {
"message": "முடிந்தது"
},
- "termsAndPrivacyNoticeCloudServices": {
- "message": "பயர்பாஃசு திரைப்பிடிப்பைப் பயன்படுத்துவதன் மூலம் எங்களின் முகில் கணிமச் சேவைகளுக்கான பின்வரும் $TERMSANDPRIVACYNOTICETERMSLINK$ $TERMSANDPRIVACYNOTICEPRIVACYLINK$ நிபந்தனைகளை ஏற்றுக் கொள்கிறீர்கள்.",
+ "termsAndPrivacyNotice2": {
+ "message": "பயர்பாஃசு திரைப்பிடிப்புகளைப் பயன்படுத்துவதன் மூலம் $TERMSANDPRIVACYNOTICETERMSLINK$ மற்றும் $TERMSANDPRIVACYNOTICEPRIVACYLINK$ சேவை நிபற்தனைகளை ஏற்கிறீர்கள்.",
"placeholders": {
"termsandprivacynoticetermslink": {
"content": "$1"
@@ -128,5 +128,8 @@
},
"termsAndPrivacyNoticyPrivacyLink": {
"message": "தனியுரிம கொள்கை"
+ },
+ "libraryLabel": {
+ "message": "திரைபிடிப்புகள்"
}
}
\ No newline at end of file
diff --git a/browser/extensions/screenshots/webextension/_locales/te/messages.json b/browser/extensions/screenshots/webextension/_locales/te/messages.json
index d4c9a9e..29cd142 100644
--- a/browser/extensions/screenshots/webextension/_locales/te/messages.json
+++ b/browser/extensions/screenshots/webextension/_locales/te/messages.json
@@ -76,5 +76,8 @@
},
"termsAndPrivacyNoticyPrivacyLink": {
"message": "గోప్యతా నోటీసు"
+ },
+ "libraryLabel": {
+ "message": "తెరపట్లు"
}
}
\ No newline at end of file
diff --git a/browser/extensions/screenshots/webextension/_locales/th/messages.json b/browser/extensions/screenshots/webextension/_locales/th/messages.json
index 660300b..bcdea49 100644
--- a/browser/extensions/screenshots/webextension/_locales/th/messages.json
+++ b/browser/extensions/screenshots/webextension/_locales/th/messages.json
@@ -112,8 +112,8 @@
"tourDone": {
"message": "เสร็จสิ้น"
},
- "termsAndPrivacyNoticeCloudServices": {
- "message": "เพื่อใช้ Firefox Screenshots คุณยอมรับ $TERMSANDPRIVACYNOTICETERMSLINK$ และ $TERMSANDPRIVACYNOTICEPRIVACYLINK$ ของบริการกลุ่มเมฆ Firefox",
+ "termsAndPrivacyNotice2": {
+ "message": "เพื่อใช้ Firefox Screenshots คุณยอมรับ $TERMSANDPRIVACYNOTICETERMSLINK$ และ $TERMSANDPRIVACYNOTICEPRIVACYLINK$ ของเรา",
"placeholders": {
"termsandprivacynoticetermslink": {
"content": "$1"
@@ -128,5 +128,8 @@
},
"termsAndPrivacyNoticyPrivacyLink": {
"message": "ประกาศความเป็นส่วนตัว"
+ },
+ "libraryLabel": {
+ "message": "ภาพหน้าจอ"
}
}
\ No newline at end of file
diff --git a/browser/extensions/screenshots/webextension/_locales/tl/messages.json b/browser/extensions/screenshots/webextension/_locales/tl/messages.json
index a4e0033..2eb82ba 100644
--- a/browser/extensions/screenshots/webextension/_locales/tl/messages.json
+++ b/browser/extensions/screenshots/webextension/_locales/tl/messages.json
@@ -104,15 +104,7 @@
"message": "Tapos"
},
"termsAndPrivacyNoticeCloudServices": {
- "message": "Sa paggamit ng Firefox Screenshots, tinatanggap mo ang Firefox Cloud Services $TERMSANDPRIVACYNOTICETERMSLINK$ at $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
- "placeholders": {
- "termsandprivacynoticetermslink": {
- "content": "$1"
- },
- "termsandprivacynoticeprivacylink": {
- "content": "$2"
- }
- }
+ "message": "Sa paggamit ng Firefox Screenshots, tinatanggap mo ang Firefox Cloud Services {termsAndPrivacyNoticeTermsLink} at {termsAndPrivacyNoticePrivacyLink}."
},
"termsAndPrivacyNoticeTermsLink": {
"message": "Mga tuntunin"
diff --git a/browser/extensions/screenshots/webextension/_locales/tr/messages.json b/browser/extensions/screenshots/webextension/_locales/tr/messages.json
index 519f80d..54c2d31 100644
--- a/browser/extensions/screenshots/webextension/_locales/tr/messages.json
+++ b/browser/extensions/screenshots/webextension/_locales/tr/messages.json
@@ -112,8 +112,8 @@
"tourDone": {
"message": "Tamam"
},
- "termsAndPrivacyNoticeCloudServices": {
- "message": "Firefox Screenshots'ı kullandığınızda Firefox Bulut Hizmetleri'nin $TERMSANDPRIVACYNOTICETERMSLINK$ ve $TERMSANDPRIVACYNOTICEPRIVACYLINK$ kabul etmiş sayılırsınız.",
+ "termsAndPrivacyNotice2": {
+ "message": "Firefox Screenshots'ı kullandığınızda $TERMSANDPRIVACYNOTICETERMSLINK$ ve $TERMSANDPRIVACYNOTICEPRIVACYLINK$ kabul etmiş sayılırsınız.",
"placeholders": {
"termsandprivacynoticetermslink": {
"content": "$1"
@@ -128,5 +128,8 @@
},
"termsAndPrivacyNoticyPrivacyLink": {
"message": "Gizlilik Bildirimimizi"
+ },
+ "libraryLabel": {
+ "message": "Ekran görüntüleri"
}
}
\ No newline at end of file
diff --git a/browser/extensions/screenshots/webextension/_locales/uk/messages.json b/browser/extensions/screenshots/webextension/_locales/uk/messages.json
index a01ac49..703445f 100644
--- a/browser/extensions/screenshots/webextension/_locales/uk/messages.json
+++ b/browser/extensions/screenshots/webextension/_locales/uk/messages.json
@@ -112,8 +112,8 @@
"tourDone": {
"message": "Готово"
},
- "termsAndPrivacyNoticeCloudServices": {
- "message": "Використовуючи Firefox Screenshots, ви погоджуєтеся з умовами хмарних послуг Firefox: $TERMSANDPRIVACYNOTICETERMSLINK$ та $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
+ "termsAndPrivacyNotice2": {
+ "message": "Використовуючи Firefox Screenshots, ви погоджуєтеся з нашими $TERMSANDPRIVACYNOTICETERMSLINK$ та $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
"placeholders": {
"termsandprivacynoticetermslink": {
"content": "$1"
@@ -128,5 +128,8 @@
},
"termsAndPrivacyNoticyPrivacyLink": {
"message": "Повідомленням про приватність"
+ },
+ "libraryLabel": {
+ "message": "Знімки екрану"
}
}
\ No newline at end of file
diff --git a/browser/extensions/screenshots/webextension/_locales/ur/messages.json b/browser/extensions/screenshots/webextension/_locales/ur/messages.json
index 4a1ec9e..24f6040 100644
--- a/browser/extensions/screenshots/webextension/_locales/ur/messages.json
+++ b/browser/extensions/screenshots/webextension/_locales/ur/messages.json
@@ -106,17 +106,6 @@
"tourDone": {
"message": "ہوگیا"
},
- "termsAndPrivacyNoticeCloudServices": {
- "message": "۔Firefox Screenshots کے استعمال کے ساتھ آپ Firefox Cloud Services کے $TERMSANDPRIVACYNOTICETERMSLINK$ اور $TERMSANDPRIVACYNOTICEPRIVACYLINK$ کے ساتھ متفق ہیں۔",
- "placeholders": {
- "termsandprivacynoticetermslink": {
- "content": "$1"
- },
- "termsandprivacynoticeprivacylink": {
- "content": "$2"
- }
- }
- },
"termsAndPrivacyNoticeTermsLink": {
"message": "شرائط"
},
diff --git a/browser/extensions/screenshots/webextension/_locales/vi/messages.json b/browser/extensions/screenshots/webextension/_locales/vi/messages.json
index 9733b67..fcb631e 100644
--- a/browser/extensions/screenshots/webextension/_locales/vi/messages.json
+++ b/browser/extensions/screenshots/webextension/_locales/vi/messages.json
@@ -46,5 +46,8 @@
},
"termsAndPrivacyNoticyPrivacyLink": {
"message": "Chính sách riêng tư"
+ },
+ "libraryLabel": {
+ "message": "Các ảnh chụp màn hình"
}
}
\ No newline at end of file
diff --git a/browser/extensions/screenshots/webextension/_locales/zh_CN/messages.json b/browser/extensions/screenshots/webextension/_locales/zh_CN/messages.json
index 001df4e..fb5d477 100644
--- a/browser/extensions/screenshots/webextension/_locales/zh_CN/messages.json
+++ b/browser/extensions/screenshots/webextension/_locales/zh_CN/messages.json
@@ -12,7 +12,7 @@
"message": "我的截图"
},
"screenshotInstructions": {
- "message": "在页面上拖拽或单击即可选择要截图的区域。按 ESC 键可取消。"
+ "message": "在此页上拖拽或单击选择截图区域。按 ESC 键取消截图。"
},
"saveScreenshotSelectedArea": {
"message": "保存"
@@ -112,8 +112,8 @@
"tourDone": {
"message": "完成"
},
- "termsAndPrivacyNoticeCloudServices": {
- "message": "使用 Firefox Screenshots 即代表您同意 Firefox 云服务的$TERMSANDPRIVACYNOTICETERMSLINK$和$TERMSANDPRIVACYNOTICEPRIVACYLINK$。",
+ "termsAndPrivacyNotice2": {
+ "message": "使用 Firefox Screenshots 即代表您同意我们的$TERMSANDPRIVACYNOTICETERMSLINK$和$TERMSANDPRIVACYNOTICEPRIVACYLINK$。",
"placeholders": {
"termsandprivacynoticetermslink": {
"content": "$1"
@@ -128,5 +128,8 @@
},
"termsAndPrivacyNoticyPrivacyLink": {
"message": "隐私声明"
+ },
+ "libraryLabel": {
+ "message": "屏幕截图"
}
}
\ No newline at end of file
diff --git a/browser/extensions/screenshots/webextension/_locales/zh_TW/messages.json b/browser/extensions/screenshots/webextension/_locales/zh_TW/messages.json
index 6f75383..e761390 100644
--- a/browser/extensions/screenshots/webextension/_locales/zh_TW/messages.json
+++ b/browser/extensions/screenshots/webextension/_locales/zh_TW/messages.json
@@ -112,8 +112,8 @@
"tourDone": {
"message": "完成"
},
- "termsAndPrivacyNoticeCloudServices": {
- "message": "繼續使用 Firefox Screenshots,代表您同意 Firefox 雲端服務的 $TERMSANDPRIVACYNOTICETERMSLINK$ 以及 $TERMSANDPRIVACYNOTICEPRIVACYLINK$。",
+ "termsAndPrivacyNotice2": {
+ "message": "使用 Firefox Screenshots 時,代表您同意我們的 $TERMSANDPRIVACYNOTICETERMSLINK$ 及 $TERMSANDPRIVACYNOTICEPRIVACYLINK$。",
"placeholders": {
"termsandprivacynoticetermslink": {
"content": "$1"
@@ -128,5 +128,8 @@
},
"termsAndPrivacyNoticyPrivacyLink": {
"message": "隱私權保護政策"
+ },
+ "libraryLabel": {
+ "message": "擷圖"
}
}
\ No newline at end of file
diff --git a/browser/extensions/screenshots/webextension/background/deviceInfo.js b/browser/extensions/screenshots/webextension/background/deviceInfo.js
index e665cc2..822143e 100644
--- a/browser/extensions/screenshots/webextension/background/deviceInfo.js
+++ b/browser/extensions/screenshots/webextension/background/deviceInfo.js
@@ -11,9 +11,9 @@ this.deviceInfo = (function() {
}));
return function deviceInfo() {
- let match = navigator.userAgent.match(/Chrom(?:e|ium)\/([0-9\.]{1,1000})/);
+ let match = navigator.userAgent.match(/Chrom(?:e|ium)\/([0-9.]{1,1000})/);
let chromeVersion = match ? match[1] : null;
- match = navigator.userAgent.match(/Firefox\/([0-9\.]{1,1000})/);
+ match = navigator.userAgent.match(/Firefox\/([0-9.]{1,1000})/);
let firefoxVersion = match ? match[1] : null;
let appName = chromeVersion ? "chrome" : "firefox";
diff --git a/browser/extensions/screenshots/webextension/background/main.js b/browser/extensions/screenshots/webextension/background/main.js
index 3af58e5..e12ef6c 100644
--- a/browser/extensions/screenshots/webextension/background/main.js
+++ b/browser/extensions/screenshots/webextension/background/main.js
@@ -1,4 +1,4 @@
-/* globals selectorLoader, analytics, communication, catcher, log, makeUuid, auth, senderror */
+/* globals selectorLoader, analytics, communication, catcher, log, makeUuid, auth, senderror, startBackground */
"use strict";
@@ -18,9 +18,16 @@ this.main = (function() {
if (!hasSeenOnboarding) {
setIconActive(false, null);
// Note that the branded name 'Firefox Screenshots' is not localized:
- browser.browserAction.setTitle({
- title: "Firefox Screenshots"
- });
+ if (!startBackground.usePhotonPageAction) {
+ browser.browserAction.setTitle({
+ title: "Firefox Screenshots"
+ });
+ } else {
+ startBackground.photonPageActionPort.postMessage({
+ type: "setProperties",
+ title: "Firefox Screenshots"
+ });
+ }
}
}).catch((error) => {
log.error("Error getting hasSeenOnboarding:", error);
@@ -55,14 +62,21 @@ this.main = (function() {
if ((!hasSeenOnboarding) && !active) {
path = "icons/icon-starred-32-v2.svg";
}
- browser.browserAction.setIcon({path, tabId}).catch((error) => {
- // FIXME: use errorCode
- if (error.message && /Invalid tab ID/.test(error.message)) {
- // This is a normal exception that we can ignore
- } else {
- catcher.unhandled(error);
- }
- });
+ if (!startBackground.usePhotonPageAction) {
+ browser.browserAction.setIcon({path, tabId}).catch((error) => {
+ // FIXME: use errorCode
+ if (error.message && /Invalid tab ID/.test(error.message)) {
+ // This is a normal exception that we can ignore
+ } else {
+ catcher.unhandled(error);
+ }
+ });
+ } else {
+ startBackground.photonPageActionPort.postMessage({
+ type: "setProperties",
+ iconPath: path
+ });
+ }
}
function toggleSelector(tab) {
@@ -94,10 +108,11 @@ this.main = (function() {
}
function shouldOpenMyShots(url) {
- return /^about:(?:newtab|blank)/i.test(url) || /^resource:\/\/activity-streams\//i.test(url);
+ return /^about:(?:newtab|blank|home)/i.test(url) || /^resource:\/\/activity-streams\//i.test(url);
}
// This is called by startBackground.js, directly in response to browser.browserAction.onClicked
+ // and clicks on the Photon page action
exports.onClicked = catcher.watchFunction((tab) => {
if (tab.incognito) {
senderror.showError({
@@ -274,9 +289,16 @@ this.main = (function() {
hasSeenOnboarding = true;
catcher.watchPromise(browser.storage.local.set({hasSeenOnboarding}));
setIconActive(false, null);
- browser.browserAction.setTitle({
- title: browser.i18n.getMessage("contextMenuLabel")
- });
+ if (!startBackground.usePhotonPageAction) {
+ browser.browserAction.setTitle({
+ title: browser.i18n.getMessage("contextMenuLabel")
+ });
+ } else {
+ startBackground.photonPageActionPort.postMessage({
+ type: "setProperties",
+ title: browser.i18n.getMessage("contextMenuLabel")
+ });
+ }
});
communication.register("abortFrameset", () => {
diff --git a/browser/extensions/screenshots/webextension/background/startBackground.js b/browser/extensions/screenshots/webextension/background/startBackground.js
index 04397ef..29c3064 100644
--- a/browser/extensions/screenshots/webextension/background/startBackground.js
+++ b/browser/extensions/screenshots/webextension/background/startBackground.js
@@ -1,6 +1,7 @@
/* globals browser, main, communication */
/* This file handles:
browser.browserAction.onClicked
+ clicks on the Photon page action
browser.contextMenus.onClicked
browser.runtime.onMessage
and loads the rest of the background page in response to those events, forwarding
@@ -8,6 +9,8 @@
*/
this.startBackground = (function() {
+ let exports = {};
+
const backgroundScripts = [
"log.js",
"makeUuid.js",
@@ -52,11 +55,22 @@ this.startBackground = (function() {
// Note this duplicates functionality in main.js, but we need to change
// the onboarding icon before main.js loads up
+ let iconPath = null;
browser.storage.local.get(["hasSeenOnboarding"]).then((result) => {
let hasSeenOnboarding = !!result.hasSeenOnboarding;
if (!hasSeenOnboarding) {
let path = "icons/icon-starred-32-v2.svg";
- browser.browserAction.setIcon({path});
+ if (!usePhotonPageAction) {
+ browser.browserAction.setIcon({path});
+ } else {
+ iconPath = path;
+ if (photonPageActionPort) {
+ photonPageActionPort.postMessage({
+ type: "setProperties",
+ iconPath
+ });
+ }
+ }
}
}).catch((error) => {
console.error("Error loading Screenshots onboarding flag:", error);
@@ -71,6 +85,10 @@ this.startBackground = (function() {
return true;
});
+ let usePhotonPageAction = false;
+ let photonPageActionPort = null;
+ initPhotonPageAction();
+
// We delay this check (by CHECK_MIGRATION_DELAY) just to avoid piling too
// many things onto browser/add-on startup
requestIdleCallback(() => {
@@ -122,4 +140,50 @@ this.startBackground = (function() {
return loadedPromise;
}
+ function initPhotonPageAction() {
+ // Set up this side of the Photon page action port. The other side is in
+ // bootstrap.js. Ideally, in the future, WebExtension page actions and
+ // Photon page actions would be one in the same, but they aren't right now.
+ photonPageActionPort = browser.runtime.connect({ name: "photonPageActionPort" });
+ photonPageActionPort.onMessage.addListener((message) => {
+ switch (message.type) {
+ case "setUsePhotonPageAction":
+ usePhotonPageAction = message.value;
+ break;
+ case "click":
+ loadIfNecessary().then(() => {
+ main.onClicked(message.tab);
+ }).catch((error) => {
+ console.error("Error loading Screenshots:", error);
+ });
+ break;
+ default:
+ console.error("Unrecognized message:", message);
+ break;
+ }
+ });
+ photonPageActionPort.postMessage({
+ type: "setProperties",
+ title: browser.i18n.getMessage("contextMenuLabel"),
+ iconPath
+ });
+
+ // Export these so that main.js can use them.
+ Object.defineProperties(exports, {
+ "photonPageActionPort": {
+ enumerable: true,
+ get() {
+ return photonPageActionPort;
+ }
+ },
+ "usePhotonPageAction": {
+ enumerable: true,
+ get() {
+ return usePhotonPageAction;
+ }
+ }
+ });
+ }
+
+ return exports;
})();
diff --git a/browser/extensions/screenshots/webextension/build/inlineSelectionCss.js b/browser/extensions/screenshots/webextension/build/inlineSelectionCss.js
index dc7f616..9e0ac1e 100644
--- a/browser/extensions/screenshots/webextension/build/inlineSelectionCss.js
+++ b/browser/extensions/screenshots/webextension/build/inlineSelectionCss.js
@@ -1,6 +1,6 @@
/* Created from build/server/static/css/inline-selection.css */
window.inlineSelectionCss = `
-.button, .highlight-button-cancel, .highlight-button-save, .highlight-button-download {
+.button, .highlight-button-cancel, .highlight-button-save, .highlight-button-download, .preview-button-save {
display: flex;
align-items: center;
justify-content: center;
@@ -19,28 +19,28 @@ window.inlineSelectionCss = `
transition: background 150ms cubic-bezier(0.07, 0.95, 0, 1), border 150ms cubic-bezier(0.07, 0.95, 0, 1);
user-select: none;
white-space: nowrap; }
- .button.small, .small.highlight-button-cancel, .small.highlight-button-save, .small.highlight-button-download {
+ .button.small, .small.highlight-button-cancel, .small.highlight-button-save, .small.highlight-button-download, .small.preview-button-save {
height: 32px;
line-height: 32px;
padding: 0 8px; }
- .button.tiny, .tiny.highlight-button-cancel, .tiny.highlight-button-save, .tiny.highlight-button-download {
+ .button.tiny, .tiny.highlight-button-cancel, .tiny.highlight-button-save, .tiny.highlight-button-download, .tiny.preview-button-save {
font-size: 14px;
height: 26px;
border: 1px solid #c7c7c7; }
- .button.tiny:hover, .tiny.highlight-button-cancel:hover, .tiny.highlight-button-save:hover, .tiny.highlight-button-download:hover, .button.tiny:focus, .tiny.highlight-button-cancel:focus, .tiny.highlight-button-save:focus, .tiny.highlight-button-download:focus {
+ .button.tiny:hover, .tiny.highlight-button-cancel:hover, .tiny.highlight-button-save:hover, .tiny.highlight-button-download:hover, .tiny.preview-button-save:hover, .button.tiny:focus, .tiny.highlight-button-cancel:focus, .tiny.highlight-button-save:focus, .tiny.highlight-button-download:focus, .tiny.preview-button-save:focus {
background: #ebebeb;
border-color: #989898; }
- .button.tiny:active, .tiny.highlight-button-cancel:active, .tiny.highlight-button-save:active, .tiny.highlight-button-download:active {
+ .button.tiny:active, .tiny.highlight-button-cancel:active, .tiny.highlight-button-save:active, .tiny.highlight-button-download:active, .tiny.preview-button-save:active {
background: #dedede;
border-color: #989898; }
- .button.block-button, .block-button.highlight-button-cancel, .block-button.highlight-button-save, .block-button.highlight-button-download {
+ .button.block-button, .block-button.highlight-button-cancel, .block-button.highlight-button-save, .block-button.highlight-button-download, .block-button.preview-button-save {
display: flex;
align-items: center;
justify-content: center;
box-sizing: border-box;
- border: none;
+ border: 0;
border-right: 1px solid #c7c7c7;
- box-shadow: none;
+ box-shadow: 0;
border-radius: 0;
flex-shrink: 0;
font-size: 20px;
@@ -48,25 +48,54 @@ window.inlineSelectionCss = `
line-height: 100%;
overflow: hidden; }
@media (max-width: 719px) {
- .button.block-button, .block-button.highlight-button-cancel, .block-button.highlight-button-save, .block-button.highlight-button-download {
+ .button.block-button, .block-button.highlight-button-cancel, .block-button.highlight-button-save, .block-button.highlight-button-download, .block-button.preview-button-save {
justify-content: flex-start;
font-size: 16px;
height: 72px;
margin-right: 10px;
padding: 0 5px; } }
- .button.block-button:hover, .block-button.highlight-button-cancel:hover, .block-button.highlight-button-save:hover, .block-button.highlight-button-download:hover {
+ .button.block-button:hover, .block-button.highlight-button-cancel:hover, .block-button.highlight-button-save:hover, .block-button.highlight-button-download:hover, .block-button.preview-button-save:hover {
background: #ebebeb; }
- .button.block-button:active, .block-button.highlight-button-cancel:active, .block-button.highlight-button-save:active, .block-button.highlight-button-download:active {
+ .button.block-button:active, .block-button.highlight-button-cancel:active, .block-button.highlight-button-save:active, .block-button.highlight-button-download:active, .block-button.preview-button-save:active {
background: #dedede; }
+ .button.download, .download.highlight-button-cancel, .download.highlight-button-save, .download.highlight-button-download, .download.preview-button-save, .button.trash, .trash.highlight-button-cancel, .trash.highlight-button-save, .trash.highlight-button-download, .trash.preview-button-save, .button.share, .share.highlight-button-cancel, .share.highlight-button-save, .share.highlight-button-download, .share.preview-button-save, .button.flag, .flag.highlight-button-cancel, .flag.highlight-button-save, .flag.highlight-button-download, .flag.preview-button-save {
+ background-image: url("../img/icon-sprite.svg");
+ background-size: 480px 40px;
+ background-repeat: no-repeat;
+ background-position: 0 0;
+ margin-right: 10px;
+ transition: background-color 150ms cubic-bezier(0.07, 0.95, 0, 1); }
+ .button.download:hover, .download.highlight-button-cancel:hover, .download.highlight-button-save:hover, .download.highlight-button-download:hover, .download.preview-button-save:hover {
+ background-position: -40px 0; }
+ .button.download:active, .download.highlight-button-cancel:active, .download.highlight-button-save:active, .download.highlight-button-download:active, .download.preview-button-save:active {
+ background-position: -80px 0; }
+ .button.share, .share.highlight-button-cancel, .share.highlight-button-save, .share.highlight-button-download, .share.preview-button-save {
+ background-position: -120px 0; }
+ .button.share:hover, .share.highlight-button-cancel:hover, .share.highlight-button-save:hover, .share.highlight-button-download:hover, .share.preview-button-save:hover {
+ background-position: -160px 0; }
+ .button.share:active, .share.highlight-button-cancel:active, .share.highlight-button-save:active, .share.highlight-button-download:active, .share.preview-button-save:active, .button.share.active, .share.active.highlight-button-cancel, .share.active.highlight-button-save, .share.active.highlight-button-download, .share.active.preview-button-save {
+ background-position: -200px 0; }
+ .button.trash, .trash.highlight-button-cancel, .trash.highlight-button-save, .trash.highlight-button-download, .trash.preview-button-save {
+ background-position: -240px 0; }
+ .button.trash:hover, .trash.highlight-button-cancel:hover, .trash.highlight-button-save:hover, .trash.highlight-button-download:hover, .trash.preview-button-save:hover {
+ background-position: -280px 0; }
+ .button.trash:active, .trash.highlight-button-cancel:active, .trash.highlight-button-save:active, .trash.highlight-button-download:active, .trash.preview-button-save:active {
+ background-position: -320px 0; }
+ .button.flag, .flag.highlight-button-cancel, .flag.highlight-button-save, .flag.highlight-button-download, .flag.preview-button-save {
+ background-position: -360px 0; }
+ .button.flag:hover, .flag.highlight-button-cancel:hover, .flag.highlight-button-save:hover, .flag.highlight-button-download:hover, .flag.preview-button-save:hover {
+ background-position: -400px 0; }
+ .button.flag:active, .flag.highlight-button-cancel:active, .flag.highlight-button-save:active, .flag.highlight-button-download:active, .flag.preview-button-save:active {
+ background-position: -440px 0; }
.inverse-color-scheme {
background: #3e3d40;
- color: #f5f5f7; }
+ color: #f6f6f8; }
.inverse-color-scheme a {
color: #e1e1e6; }
.default-color-scheme {
- background: #f5f5f7;
+ background: #f6f6f8;
color: #3e3d40; }
.default-color-scheme a {
color: #009ec0; }
@@ -79,47 +108,71 @@ window.inlineSelectionCss = `
text-decoration: underline; }
.alt-color-scheme {
- background: #31365A;
- color: #f5f5f7; }
+ background: #31365a;
+ color: #f6f6f8; }
.alt-color-scheme h1 {
- color: #6F7FB6; }
+ color: #6f7fb6; }
.alt-color-scheme a {
color: #e1e1e6;
text-decoration: underline; }
-.button.primary, .primary.highlight-button-cancel, .highlight-button-save, .primary.highlight-button-download {
+.button.primary, .primary.highlight-button-cancel, .highlight-button-save, .primary.highlight-button-download, .preview-button-save {
background-color: #009ec0;
color: #fff; }
- .button.primary:hover, .primary.highlight-button-cancel:hover, .highlight-button-save:hover, .primary.highlight-button-download:hover, .button.primary:focus, .primary.highlight-button-cancel:focus, .highlight-button-save:focus, .primary.highlight-button-download:focus {
+ .button.primary:hover, .primary.highlight-button-cancel:hover, .highlight-button-save:hover, .primary.highlight-button-download:hover, .preview-button-save:hover, .button.primary:focus, .primary.highlight-button-cancel:focus, .highlight-button-save:focus, .primary.highlight-button-download:focus, .preview-button-save:focus {
background-color: #00819c; }
- .button.primary:active, .primary.highlight-button-cancel:active, .highlight-button-save:active, .primary.highlight-button-download:active {
+ .button.primary:active, .primary.highlight-button-cancel:active, .highlight-button-save:active, .primary.highlight-button-download:active, .preview-button-save:active {
background-color: #006c83; }
-.button.secondary, .highlight-button-cancel, .secondary.highlight-button-save, .highlight-button-download {
- background-color: #f5f5f7;
+.button.secondary, .highlight-button-cancel, .secondary.highlight-button-save, .highlight-button-download, .secondary.preview-button-save {
+ background-color: #f6f6f8;
color: #3e3d40; }
- .button.secondary:hover, .highlight-button-cancel:hover, .secondary.highlight-button-save:hover, .highlight-button-download:hover {
+ .button.secondary:hover, .highlight-button-cancel:hover, .secondary.highlight-button-save:hover, .highlight-button-download:hover, .secondary.preview-button-save:hover {
background-color: #ebebeb; }
- .button.secondary:hover, .highlight-button-cancel:hover, .secondary.highlight-button-save:hover, .highlight-button-download:hover {
+ .button.secondary:active, .highlight-button-cancel:active, .secondary.highlight-button-save:active, .highlight-button-download:active, .secondary.preview-button-save:active {
background-color: #dedede; }
-.button.transparent, .transparent.highlight-button-cancel, .transparent.highlight-button-save, .transparent.highlight-button-download {
+.button.transparent, .transparent.highlight-button-cancel, .transparent.highlight-button-save, .transparent.highlight-button-download, .transparent.preview-button-save {
background-color: transparent;
color: #3e3d40; }
- .button.transparent:hover, .transparent.highlight-button-cancel:hover, .transparent.highlight-button-save:hover, .transparent.highlight-button-download:hover, .button.transparent:focus, .transparent.highlight-button-cancel:focus, .transparent.highlight-button-save:focus, .transparent.highlight-button-download:focus, .button.transparent:active, .transparent.highlight-button-cancel:active, .transparent.highlight-button-save:active, .transparent.highlight-button-download:active {
+ .button.transparent:hover, .transparent.highlight-button-cancel:hover, .transparent.highlight-button-save:hover, .transparent.highlight-button-download:hover, .transparent.preview-button-save:hover, .button.transparent:focus, .transparent.highlight-button-cancel:focus, .transparent.highlight-button-save:focus, .transparent.highlight-button-download:focus, .transparent.preview-button-save:focus, .button.transparent:active, .transparent.highlight-button-cancel:active, .transparent.highlight-button-save:active, .transparent.highlight-button-download:active, .transparent.preview-button-save:active {
background-color: rgba(0, 0, 0, 0.05); }
-.button.warning, .warning.highlight-button-cancel, .warning.highlight-button-save, .warning.highlight-button-download {
+.button.warning, .warning.highlight-button-cancel, .warning.highlight-button-save, .warning.highlight-button-download, .warning.preview-button-save {
color: #fff;
background: #d92215; }
- .button.warning:hover, .warning.highlight-button-cancel:hover, .warning.highlight-button-save:hover, .warning.highlight-button-download:hover, .button.warning:focus, .warning.highlight-button-cancel:focus, .warning.highlight-button-save:focus, .warning.highlight-button-download:focus {
+ .button.warning:hover, .warning.highlight-button-cancel:hover, .warning.highlight-button-save:hover, .warning.highlight-button-download:hover, .warning.preview-button-save:hover, .button.warning:focus, .warning.highlight-button-cancel:focus, .warning.highlight-button-save:focus, .warning.highlight-button-download:focus, .warning.preview-button-save:focus {
background: #b81d12; }
- .button.warning:active, .warning.highlight-button-cancel:active, .warning.highlight-button-save:active, .warning.highlight-button-download:active {
+ .button.warning:active, .warning.highlight-button-cancel:active, .warning.highlight-button-save:active, .warning.highlight-button-download:active, .warning.preview-button-save:active {
background: #a11910; }
.subtitle-link {
color: #009ec0; }
+.loader {
+ background: #2e2d30;
+ border-radius: 2px;
+ height: 4px;
+ overflow: hidden;
+ position: relative;
+ width: 200px; }
+ #shot-index .loader {
+ background-color: #dedede; }
+
+.loader-inner {
+ animation: bounce infinite alternate 1250ms cubic-bezier(0.7, 0, 0.3, 1);
+ background: #04d1e6;
+ border-radius: 2px;
+ height: 4px;
+ transform: translateX(-40px);
+ width: 50px; }
+
+@keyframes bounce {
+ 0% {
+ transform: translateX(-40px); }
+ 100% {
+ transform: translate(190px); } }
+
@keyframes fade-in {
0% {
opacity: 0; }
@@ -136,13 +189,13 @@ window.inlineSelectionCss = `
@keyframes pulse {
0% {
- opacity: .3;
+ opacity: 0.3;
transform: scale(1); }
70% {
- opacity: .25;
+ opacity: 0.25;
transform: scale(1.04); }
100% {
- opacity: .3;
+ opacity: 0.3;
transform: scale(1); } }
@keyframes slide-left {
@@ -153,6 +206,16 @@ window.inlineSelectionCss = `
opacity: 1;
transform: translate3d(0, 0, 0); } }
+@keyframes bounce-in {
+ 0% {
+ opacity: 0;
+ transform: scale(1); }
+ 60% {
+ opacity: 1;
+ transform: scale(1.02); }
+ 100% {
+ transform: scale(1); } }
+
.mover-target {
display: flex;
align-items: center;
@@ -177,10 +240,10 @@ window.inlineSelectionCss = `
pointer-events: none;
position: absolute;
z-index: 10000000000; }
- .hover-highlight:before {
+ .hover-highlight::before {
border: 2px dashed rgba(255, 255, 255, 0.4);
bottom: 0;
- content: '';
+ content: "";
left: 0;
position: absolute;
right: 0;
@@ -356,11 +419,47 @@ window.inlineSelectionCss = `
position: absolute;
pointer-events: none;
font-weight: bold;
- font-family: sans-serif;
+ font-family: -apple-system, BlinkMacSystemFont, "segoe ui", "helvetica neue", helvetica, ubuntu, roboto, noto, arial, sans-serif;
font-size: 70%;
color: #000;
text-shadow: -1px -1px 0 #fff, 1px -1px 0 #fff, -1px 1px 0 #fff, 1px 1px 0 #fff; }
+.preview-buttons {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ position: absolute;
+ right: 0;
+ top: -2px; }
+
+.preview-image {
+ position: relative;
+ height: 80%;
+ max-width: 100%;
+ margin: auto 2em;
+ text-align: center;
+ animation-delay: 50ms;
+ animation: bounce-in 300ms forwards ease-in-out; }
+
+.preview-image img {
+ display: block;
+ width: auto;
+ height: auto;
+ max-width: 100%;
+ max-height: 90%;
+ margin: 50px auto;
+ border: 1px solid rgba(255, 255, 255, 0.8); }
+
+.preview-button-save {
+ background-image: url("MOZ_EXTENSION/icons/cloud.svg");
+ background-position: 8px center;
+ background-repeat: no-repeat;
+ background-size: 20px 18px;
+ font-size: 18px;
+ margin: 5px;
+ min-width: 80px;
+ padding-left: 34px; }
+
.fixed-container {
align-items: center;
display: flex;
@@ -418,7 +517,7 @@ window.inlineSelectionCss = `
justify-content: center;
animation: pulse 125mm cubic-bezier(0.07, 0.95, 0, 1);
color: #fff;
- font-family: -apple-system, BlinkMacSystemFont, sans-serif;
+ font-family: -apple-system, BlinkMacSystemFont, "segoe ui", "helvetica neue", helvetica, ubuntu, roboto, noto, arial, sans-serif;
font-size: 24px;
line-height: 32px;
text-align: center;
diff --git a/browser/extensions/screenshots/webextension/build/onboardingCss.js b/browser/extensions/screenshots/webextension/build/onboardingCss.js
index 37e4750..9063da7 100644
--- a/browser/extensions/screenshots/webextension/build/onboardingCss.js
+++ b/browser/extensions/screenshots/webextension/build/onboardingCss.js
@@ -1,5 +1,29 @@
/* Created from build/server/static/css/onboarding.css */
window.onboardingCss = `
+.loader {
+ background: #2e2d30;
+ border-radius: 2px;
+ height: 4px;
+ overflow: hidden;
+ position: relative;
+ width: 200px; }
+ #shot-index .loader {
+ background-color: #dedede; }
+
+.loader-inner {
+ animation: bounce infinite alternate 1250ms cubic-bezier(0.7, 0, 0.3, 1);
+ background: #04d1e6;
+ border-radius: 2px;
+ height: 4px;
+ transform: translateX(-40px);
+ width: 50px; }
+
+@keyframes bounce {
+ 0% {
+ transform: translateX(-40px); }
+ 100% {
+ transform: translate(190px); } }
+
@keyframes fade-in {
0% {
opacity: 0; }
@@ -16,13 +40,13 @@ window.onboardingCss = `
@keyframes pulse {
0% {
- opacity: .3;
+ opacity: 0.3;
transform: scale(1); }
70% {
- opacity: .25;
+ opacity: 0.25;
transform: scale(1.04); }
100% {
- opacity: .3;
+ opacity: 0.3;
transform: scale(1); } }
@keyframes slide-left {
@@ -33,10 +57,20 @@ window.onboardingCss = `
opacity: 1;
transform: translate3d(0, 0, 0); } }
+@keyframes bounce-in {
+ 0% {
+ opacity: 0;
+ transform: scale(1); }
+ 60% {
+ opacity: 1;
+ transform: scale(1.02); }
+ 100% {
+ transform: scale(1); } }
+
html,
body {
box-sizing: border-box;
- font-family: -apple-system, BlinkMacSystemFont, sans-serif;
+ font-family: -apple-system, BlinkMacSystemFont, "segoe ui", "helvetica neue", helvetica, ubuntu, roboto, noto, arial, sans-serif;
height: 100%;
margin: 0;
width: 100%; }
@@ -62,7 +96,7 @@ body {
align-items: center;
flex-direction: column;
justify-content: center;
- background-color: #f5f5f7;
+ background-color: #f6f6f8;
border-radius: 5px;
height: 520px;
overflow: hidden;
@@ -145,7 +179,7 @@ body {
.goto-slide {
background: transparent;
- background-color: #f5f5f7;
+ background-color: #f6f6f8;
border-radius: 50%;
border: 0;
flex: 0 0 9px;
@@ -231,14 +265,14 @@ body {
opacity: 1; }
.active-slide-1 #prev,
-.active-slide-3 #next {
+.active-slide-4 #next {
display: none; }
#done {
background-image: url("MOZ_EXTENSION/icons/done.svg");
display: none; }
-.active-slide-3 #done {
+.active-slide-4 #done {
display: inline-block; }
/* for smaller screen sizes */
diff --git a/browser/extensions/screenshots/webextension/build/onboardingHtml.js b/browser/extensions/screenshots/webextension/build/onboardingHtml.js
index 02cb8d4..8683f46 100644
--- a/browser/extensions/screenshots/webextension/build/onboardingHtml.js
+++ b/browser/extensions/screenshots/webextension/build/onboardingHtml.js
@@ -10,7 +10,7 @@ window.onboardingHtml = `
<body>
<div id="slide-overlay">
<!-- The current slide is set by having .active-slide-1, .active-slide-2, etc on #slide element: -->
- <div id="slide-container" data-number-of-slides="3" class="active-slide-1">
+ <div id="slide-container" data-number-of-slides="4" class="active-slide-1">
<div class="slide slide-1">
<!-- Note: all images must be listed in manifest.json.template under web_accessible_resources -->
<div class="slide-image" style="background-image: url('MOZ_EXTENSION/icons/onboarding-1.png');"></div>
@@ -30,6 +30,13 @@ window.onboardingHtml = `
</div>
</div>
<div class="slide slide-3">
+ <div class="slide-image" style="background-image: url('MOZ_EXTENSION/icons/onboarding-3.png');"></div>
+ <div class="slide-content">
+ <h1 data-l10n-id="tourHeaderThree"></h1>
+ <p data-l10n-id="tourBodyThree"></p>
+ </div>
+ </div>
+ <div class="slide slide-4">
<div class="slide-image" style="background-image: url('MOZ_EXTENSION/icons/onboarding-4.png');"></div>
<div class="slide-content">
<h1 data-l10n-id="tourHeaderFour"></h1>
@@ -46,6 +53,7 @@ window.onboardingHtml = `
<button class="goto-slide goto-slide-1" data-number="1" tabindex=4></button>
<button class="goto-slide goto-slide-2" data-number="2" tabindex=5></button>
<button class="goto-slide goto-slide-3" data-number="3" tabindex=6></button>
+ <button class="goto-slide goto-slide-4" data-number="4" tabindex=7></button>
</div>
<!-- FIXME: Need to put in privacy / etc links -->
</div>
diff --git a/browser/extensions/screenshots/webextension/build/raven.js b/browser/extensions/screenshots/webextension/build/raven.js
index 14e25ec..b453c3e 100644
--- a/browser/extensions/screenshots/webextension/build/raven.js
+++ b/browser/extensions/screenshots/webextension/build/raven.js
@@ -1,4 +1,4 @@
-/*! Raven.js 3.15.0 (d49a1b8) | github.com/getsentry/raven-js */
+/*! Raven.js 3.17.0 (6384830) | github.com/getsentry/raven-js */
/*
* Includes TraceKit
@@ -91,6 +91,13 @@ var _window = typeof window !== 'undefined' ? window
var _document = _window.document;
var _navigator = _window.navigator;
+
+function keepOriginalCallback(original, callback) {
+ return isFunction(callback) ?
+ function (data) { return callback(data, original) } :
+ callback;
+}
+
// First, check for JSON support
// If there is no JSON, we no-op the core features of Raven
// since JSON is required to encode the payload
@@ -156,7 +163,7 @@ Raven.prototype = {
// webpack (using a build step causes webpack #1617). Grunt verifies that
// this value matches package.json during build.
// See: https://github.com/getsentry/raven-js/issues/465
- VERSION: '3.15.0',
+ VERSION: '3.17.0',
debug: false,
@@ -638,10 +645,8 @@ Raven.prototype = {
*/
setDataCallback: function(callback) {
var original = this._globalOptions.dataCallback;
- this._globalOptions.dataCallback = isFunction(callback)
- ? function (data) { return callback(data, original); }
- : callback;
-
+ this._globalOptions.dataCallback =
+ keepOriginalCallback(original, callback);
return this;
},
@@ -654,10 +659,8 @@ Raven.prototype = {
*/
setBreadcrumbCallback: function(callback) {
var original = this._globalOptions.breadcrumbCallback;
- this._globalOptions.breadcrumbCallback = isFunction(callback)
- ? function (data) { return callback(data, original); }
- : callback;
-
+ this._globalOptions.breadcrumbCallback =
+ keepOriginalCallback(original, callback);
return this;
},
@@ -670,10 +673,8 @@ Raven.prototype = {
*/
setShouldSendCallback: function(callback) {
var original = this._globalOptions.shouldSendCallback;
- this._globalOptions.shouldSendCallback = isFunction(callback)
- ? function (data) { return callback(data, original); }
- : callback;
-
+ this._globalOptions.shouldSendCallback =
+ keepOriginalCallback(original, callback);
return this;
},
@@ -1449,16 +1450,17 @@ Raven.prototype = {
for (var i = 0; i < breadcrumbs.values.length; ++i) {
crumb = breadcrumbs.values[i];
- if (!crumb.hasOwnProperty('data') || !isObject(crumb.data))
+ if (!crumb.hasOwnProperty('data') || !isObject(crumb.data) || objectFrozen(crumb.data))
continue;
- data = crumb.data;
+ data = objectMerge({}, crumb.data);
for (var j = 0; j < urlProps.length; ++j) {
urlProp = urlProps[j];
if (data.hasOwnProperty(urlProp)) {
data[urlProp] = truncate(data[urlProp], this._globalOptions.maxUrlLength);
}
}
+ breadcrumbs.values[i].data = data;
}
},
@@ -1843,6 +1845,21 @@ function objectMerge(obj1, obj2) {
return obj1;
}
+/**
+ * This function is only used for react-native.
+ * react-native freezes object that have already been sent over the
+ * js bridge. We need this function in order to check if the object is frozen.
+ * So it's ok that objectFrozen returns false if Object.isFrozen is not
+ * supported because it's not relevant for other "platforms". See related issue:
+ * https://github.com/getsentry/react-native-sentry/issues/57
+ */
+function objectFrozen(obj) {
+ if (!Object.isFrozen) {
+ return false;
+ }
+ return Object.isFrozen(obj);
+}
+
function truncate(str, max) {
return !max || str.length <= max ? str : str.substr(0, max) + '\u2026';
}
@@ -2168,9 +2185,22 @@ function isError(value) {
}
}
+function wrappedCallback(callback) {
+ function dataCallback(data, original) {
+ var normalizedData = callback(data) || data;
+ if (original) {
+ return original(normalizedData) || normalizedData;
+ }
+ return normalizedData;
+ }
+
+ return dataCallback;
+}
+
module.exports = {
isObject: isObject,
- isError: isError
+ isError: isError,
+ wrappedCallback: wrappedCallback
};
},{}],6:[function(_dereq_,module,exports){
@@ -2547,7 +2577,7 @@ TraceKit.computeStackTrace = (function computeStackTraceWrapper() {
if (typeof ex.stack === 'undefined' || !ex.stack) return;
var chrome = /^\s*at (.*?) ?\(((?:file|https?|blob|chrome-extension|native|eval|webpack|<anonymous>|\/).*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i,
- gecko = /^\s*(.*?)(?:\((.*?)\))?(?:^|@)((?:file|https?|blob|chrome|webpack|resource|\[native).*?)(?::(\d+))?(?::(\d+))?\s*$/i,
+ gecko = /^\s*(.*?)(?:\((.*?)\))?(?:^|@)((?:file|https?|blob|chrome|webpack|resource|\[native).*?|[^@]*bundle)(?::(\d+))?(?::(\d+))?\s*$/i,
winjs = /^\s*at (?:((?:\[object object\])?.+) )?\(?((?:file|ms-appx|https?|webpack|blob):.*?):(\d+)(?::(\d+))?\)?\s*$/i,
// Used to additionally parse URL/line/column from eval frames
diff --git a/browser/extensions/screenshots/webextension/build/shot.js b/browser/extensions/screenshots/webextension/build/shot.js
index 02fbe03..7968b03 100644
--- a/browser/extensions/screenshots/webextension/build/shot.js
+++ b/browser/extensions/screenshots/webextension/build/shot.js
@@ -29,7 +29,7 @@ function isUrl(url) {
if ((/^view-source:/i).test(url)) {
return isUrl(url.substr("view-source:".length));
}
- return (/^https?:\/\/[a-z0-9\.\-]{1,8000}[a-z0-9](:[0-9]{1,8000})?\/?/i).test(url);
+ return (/^https?:\/\/[a-z0-9.-]{1,8000}[a-z0-9](:[0-9]{1,8000})?\/?/i).test(url);
}
function assertUrl(url) {
@@ -121,7 +121,7 @@ function resolveUrl(base, url) {
}
if (url.indexOf("/") === 0) {
// Domain-relative URL
- return (/^https?:\/\/[a-z0-9\.\-]{1,4000}/i).exec(base)[0] + url;
+ return (/^https?:\/\/[a-z0-9.-]{1,4000}/i).exec(base)[0] + url;
}
// Otherwise, a full relative URL
while (url.indexOf("./") === 0) {
@@ -201,7 +201,7 @@ class AbstractShot {
constructor(backend, id, attrs) {
attrs = attrs || {};
- assert((/^[a-zA-Z0-9]{1,4000}\/[a-z0-9\.-]{1,4000}$/).test(id), "Bad ID (should be alphanumeric):", JSON.stringify(id));
+ assert((/^[a-zA-Z0-9]{1,4000}\/[a-z0-9.-]{1,4000}$/).test(id), "Bad ID (should be alphanumeric):", JSON.stringify(id));
this._backend = backend;
this._id = id;
this.origin = attrs.origin || null;
@@ -351,7 +351,7 @@ class AbstractShot {
get filename() {
let filenameTitle = this.title;
let date = new Date(this.createdDate);
- filenameTitle = filenameTitle.replace(/[:\\<>\/!@&*.|\n\r\t]/g, " ");
+ filenameTitle = filenameTitle.replace(/[:\\<>/!@&*.|\n\r\t]/g, " ");
filenameTitle = filenameTitle.replace(/\s{1,4000}/g, " ");
let clipFilename = `Screenshot-${date.getFullYear()}-${date.getMonth() + 1}-${date.getDate()} ${filenameTitle}`;
const clipFilenameBytesSize = clipFilename.length * 2; // JS STrings are UTF-16
diff --git a/browser/extensions/screenshots/webextension/domainFromUrl.js b/browser/extensions/screenshots/webextension/domainFromUrl.js
index ac45684..187412d 100644
--- a/browser/extensions/screenshots/webextension/domainFromUrl.js
+++ b/browser/extensions/screenshots/webextension/domainFromUrl.js
@@ -14,10 +14,10 @@ this.domainFromUrl = (function() {
domain = "unknown";
}
}
- if (domain.search(/^[a-z0-9.\-]{1,1000}$/i) === -1) {
+ if (domain.search(/^[a-z0-9.-]{1,1000}$/i) === -1) {
// Probably a unicode domain; we could use punycode but it wouldn't decode
// well in the URL anyway. Instead we'll punt.
- domain = domain.replace(/[^a-z0-9.\-]/ig, "");
+ domain = domain.replace(/[^a-z0-9.-]/ig, "");
if (!domain) {
domain = "site";
}
diff --git a/browser/extensions/screenshots/webextension/icons/menu-myshot-white.svg b/browser/extensions/screenshots/webextension/icons/menu-myshot-white.svg
new file mode 100644
index 0000000..21566cf
--- /dev/null
+++ b/browser/extensions/screenshots/webextension/icons/menu-myshot-white.svg
@@ -0,0 +1 @@
+<svg width="40" height="40" viewBox="0 0 46 46" xmlns="http://www.w3.org/2000/svg"><title>Screenshots</title><path d="M11 11.995c0-.55.455-.995.995-.995h23.01c.55 0 .995.455.995.995v23.01c0 .55-.455.995-.995.995h-23.01c-.55 0-.995-.455-.995-.995v-23.01zM11 25v-2h7v2h-7zm9-5h7v-2h-7v2zm9 5h7v-2h-7v2zm-9 4h7v-2h-7v2zm-2-18h2v25h-2V11zm9 0h2v25h-2V11z" fill="#FFF" fill-rule="evenodd"/></svg>
diff --git a/browser/extensions/screenshots/webextension/manifest.json b/browser/extensions/screenshots/webextension/manifest.json
index 8a6f918..eb2b2b7f 100644
--- a/browser/extensions/screenshots/webextension/manifest.json
+++ b/browser/extensions/screenshots/webextension/manifest.json
@@ -1,7 +1,7 @@
{
"manifest_version": 2,
"name": "Firefox Screenshots",
- "version": "10.11.0",
+ "version": "16.0.0",
"description": "__MSG_addonDescription__",
"author": "__MSG_addonAuthorsList__",
"homepage_url": "https://github.com/mozilla-services/screenshots",
diff --git a/browser/extensions/screenshots/webextension/onboarding/slides.html b/browser/extensions/screenshots/webextension/onboarding/slides.html
index 2150dac..20cf039 100644
--- a/browser/extensions/screenshots/webextension/onboarding/slides.html
+++ b/browser/extensions/screenshots/webextension/onboarding/slides.html
@@ -8,7 +8,7 @@
<body>
<div id="slide-overlay">
<!-- The current slide is set by having .active-slide-1, .active-slide-2, etc on #slide element: -->
- <div id="slide-container" data-number-of-slides="3" class="active-slide-1">
+ <div id="slide-container" data-number-of-slides="4" class="active-slide-1">
<div class="slide slide-1">
<!-- Note: all images must be listed in manifest.json.template under web_accessible_resources -->
<div class="slide-image" style="background-image: url('MOZ_EXTENSION/icons/onboarding-1.png');"></div>
@@ -28,6 +28,13 @@
</div>
</div>
<div class="slide slide-3">
+ <div class="slide-image" style="background-image: url('MOZ_EXTENSION/icons/onboarding-3.png');"></div>
+ <div class="slide-content">
+ <h1 data-l10n-id="tourHeaderThree"></h1>
+ <p data-l10n-id="tourBodyThree"></p>
+ </div>
+ </div>
+ <div class="slide slide-4">
<div class="slide-image" style="background-image: url('MOZ_EXTENSION/icons/onboarding-4.png');"></div>
<div class="slide-content">
<h1 data-l10n-id="tourHeaderFour"></h1>
@@ -44,6 +51,7 @@
<button class="goto-slide goto-slide-1" data-number="1" tabindex=4></button>
<button class="goto-slide goto-slide-2" data-number="2" tabindex=5></button>
<button class="goto-slide goto-slide-3" data-number="3" tabindex=6></button>
+ <button class="goto-slide goto-slide-4" data-number="4" tabindex=7></button>
</div>
<!-- FIXME: Need to put in privacy / etc links -->
</div>
diff --git a/browser/extensions/screenshots/webextension/onboarding/slides.js b/browser/extensions/screenshots/webextension/onboarding/slides.js
index 92d38f2..2eab430 100644
--- a/browser/extensions/screenshots/webextension/onboarding/slides.js
+++ b/browser/extensions/screenshots/webextension/onboarding/slides.js
@@ -32,7 +32,7 @@ this.slides = (function() {
iframe.scrolling = "no";
updateIframeSize();
let html = onboardingHtml.replace('<style></style>', `<style>${onboardingCss}</style>`);
- html = html.replace(/MOZ_EXTENSION([^\"]+)/g, (match, filename) => {
+ html = html.replace(/MOZ_EXTENSION([^"]+)/g, (match, filename) => {
return browser.extension.getURL(filename);
});
iframe.addEventListener("load", catcher.watchFunction(() => {
@@ -99,7 +99,7 @@ this.slides = (function() {
[privacySentinel]: "https://www.mozilla.org/privacy/firefox/"
};
let text = browser.i18n.getMessage(
- "termsAndPrivacyNoticeCloudServices",
+ "termsAndPrivacyNotice2",
[sentinelSplitter + termsSentinel + sentinelSplitter,
sentinelSplitter + privacySentinel + sentinelSplitter]);
let parts = text.split(sentinelSplitter);
diff --git a/browser/extensions/screenshots/webextension/selector/callBackground.js b/browser/extensions/screenshots/webextension/selector/callBackground.js
index fec1843..89e4364 100644
--- a/browser/extensions/screenshots/webextension/selector/callBackground.js
+++ b/browser/extensions/screenshots/webextension/selector/callBackground.js
@@ -4,10 +4,10 @@
this.callBackground = function callBackground(funcName, ...args) {
return browser.runtime.sendMessage({funcName, args}).then((result) => {
- if (result.type === "success") {
+ if (result && result.type === "success") {
return result.value;
- } else if (result.type === "error") {
- let exc = new Error(result.message);
+ } else if (result && result.type === "error") {
+ let exc = new Error(result.message || "Unknown error");
exc.name = "BackgroundError";
if ('errorCode' in result) {
exc.errorCode = result.errorCode;
@@ -18,8 +18,8 @@ this.callBackground = function callBackground(funcName, ...args) {
throw exc;
} else {
log.error("Unexpected background result:", result);
- let exc = new Error(`Bad response type from background page: ${result.type || undefined}`);
- exc.resultType = result.type || "undefined";
+ let exc = new Error(`Bad response type from background page: ${result && result.type || undefined}`);
+ exc.resultType = result ? (result.type || "undefined") : "undefined result";
throw exc;
}
});
diff --git a/browser/extensions/screenshots/webextension/selector/shooter.js b/browser/extensions/screenshots/webextension/selector/shooter.js
index b1c4c5e..612ff06 100644
--- a/browser/extensions/screenshots/webextension/selector/shooter.js
+++ b/browser/extensions/screenshots/webextension/selector/shooter.js
@@ -21,7 +21,7 @@ this.shooter = (function() { // eslint-disable-line no-unused-vars
function sanitizeError(data) {
const href = new RegExp(regexpEscape(window.location.href), 'g');
- const origin = new RegExp(`${regexpEscape(window.location.origin)}[^\s",>]*`, 'g');
+ const origin = new RegExp(`${regexpEscape(window.location.origin)}[^ \t\n\r",>]*`, 'g');
const json = JSON.stringify(data)
.replace(href, 'REDACTED_HREF')
.replace(origin, 'REDACTED_URL');
@@ -39,17 +39,22 @@ this.shooter = (function() { // eslint-disable-line no-unused-vars
supportsDrawWindow = !!ctx.drawWindow;
})();
- function screenshotPage(selectedPos) {
+ let screenshotPage = exports.screenshotPage = function(selectedPos, captureType) {
if (!supportsDrawWindow) {
return null;
}
let height = selectedPos.bottom - selectedPos.top;
let width = selectedPos.right - selectedPos.left;
let canvas = document.createElementNS('http://www.w3.org/1999/xhtml', 'canvas');
- canvas.width = width * window.devicePixelRatio;
- canvas.height = height * window.devicePixelRatio;
let ctx = canvas.getContext('2d');
- if (window.devicePixelRatio !== 1) {
+ if (captureType == 'fullPage') {
+ canvas.width = width;
+ canvas.height = height;
+ } else {
+ canvas.width = width * window.devicePixelRatio;
+ canvas.height = height * window.devicePixelRatio;
+ }
+ if (window.devicePixelRatio !== 1 && captureType != 'fullPage') {
ctx.scale(window.devicePixelRatio, window.devicePixelRatio);
}
ui.iframe.hide();
@@ -59,11 +64,11 @@ this.shooter = (function() { // eslint-disable-line no-unused-vars
ui.iframe.unhide();
}
return canvas.toDataURL();
- }
+ };
let isSaving = null;
- exports.takeShot = function(captureType, selectedPos) {
+ exports.takeShot = function(captureType, selectedPos, url) {
// isSaving indicates we're aleady in the middle of saving
// we use a timeout so in the case of a failure the button will
// still start working again
@@ -92,7 +97,7 @@ this.shooter = (function() { // eslint-disable-line no-unused-vars
if (buildSettings.captureText) {
captureText = util.captureEnclosedText(selectedPos);
}
- let dataUrl = screenshotPage(selectedPos);
+ let dataUrl = url || screenshotPage(selectedPos, captureType);
if (dataUrl) {
shotObject.delAllClips();
shotObject.addClip({
diff --git a/browser/extensions/screenshots/webextension/selector/ui.js b/browser/extensions/screenshots/webextension/selector/ui.js
index d7aff1e..3c41210 100644
--- a/browser/extensions/screenshots/webextension/selector/ui.js
+++ b/browser/extensions/screenshots/webextension/selector/ui.js
@@ -43,7 +43,7 @@ this.ui = (function() { // eslint-disable-line no-unused-vars
return false;
}
- let substitutedCss = inlineSelectionCss.replace(/MOZ_EXTENSION([^\"]+)/g, (match, filename) => {
+ let substitutedCss = inlineSelectionCss.replace(/MOZ_EXTENSION([^"]+)/g, (match, filename) => {
return browser.extension.getURL(filename);
});
@@ -67,6 +67,28 @@ this.ui = (function() { // eslint-disable-line no-unused-vars
}), 50);
}
+ function localizeText(doc) {
+ let els = doc.querySelectorAll("[data-l10n-id]");
+ for (let el of els) {
+ let id = el.getAttribute("data-l10n-id");
+ let text = browser.i18n.getMessage(id);
+ el.textContent = text;
+ }
+ }
+
+ function initializeIframe() {
+ let el = document.createElement("iframe");
+ el.src = browser.extension.getURL("blank.html");
+ el.style.zIndex = "99999999999";
+ el.style.border = "none";
+ el.style.top = "0";
+ el.style.left = "0";
+ el.style.margin = "0";
+ el.scrolling = "no";
+ el.style.clip = "auto";
+ return el;
+ }
+
let iframeSelection = exports.iframeSelection = {
element: null,
addClassName: "",
@@ -80,21 +102,15 @@ this.ui = (function() { // eslint-disable-line no-unused-vars
display(installHandlerOnDocument) {
return new Promise((resolve, reject) => {
if (!this.element) {
- this.element = document.createElement("iframe");
- this.element.src = browser.extension.getURL("blank.html");
+ this.element = initializeIframe();
this.element.id = "firefox-screenshots-selection-iframe";
this.element.style.display = "none";
- this.element.style.zIndex = "99999999999";
- this.element.style.border = "none";
- this.element.style.position = "absolute";
- this.element.style.top = "0";
- this.element.style.left = "0";
- this.element.style.margin = "0";
- this.element.scrolling = "no";
+ this.element.style.setProperty('position', 'absolute', 'important');
this.updateElementSize();
this.element.addEventListener("load", watchFunction(() => {
this.document = this.element.contentDocument;
assertIsBlankDocument(this.document);
+ // eslint-disable-next-line no-unsanitized/property
this.document.documentElement.innerHTML = `
<head>
<style>${substitutedCss}</style>
@@ -203,26 +219,18 @@ this.ui = (function() { // eslint-disable-line no-unused-vars
let iframePreSelection = exports.iframePreSelection = {
element: null,
document: null,
- sizeTracking: {
- windowDelayer: null
- },
display(installHandlerOnDocument, standardOverlayCallbacks) {
return new Promise((resolve, reject) => {
if (!this.element) {
- this.element = document.createElement("iframe");
- this.element.src = browser.extension.getURL("blank.html");
+ this.element = initializeIframe();
this.element.id = "firefox-screenshots-preselection-iframe";
- this.element.style.zIndex = "99999999999";
- this.element.style.border = "none";
- this.element.style.position = "fixed";
- this.element.style.top = "0";
- this.element.style.left = "0";
- this.element.style.margin = "0";
- this.element.scrolling = "no";
- this.updateElementSize();
+ this.element.style.setProperty('position', 'fixed', 'important');
+ this.element.style.width = "100%";
+ this.element.style.height = "100%";
this.element.addEventListener("load", watchFunction(() => {
this.document = this.element.contentDocument;
assertIsBlankDocument(this.document)
+ // eslint-disable-next-line no-unsanitized/property
this.document.documentElement.innerHTML = `
<head>
<style>${substitutedCss}</style>
@@ -236,9 +244,12 @@ this.ui = (function() { // eslint-disable-line no-unused-vars
<div class="eye right"><div class="eyeball"></div></div>
<div class="face"></div>
</div>
- <div class="preview-instructions"></div>
+ <div class="preview-instructions" data-l10n-id="screenshotInstructions"></div>
<div class="myshots-all-buttons-container">
- <button class="myshots-button myshots-link" tabindex="1"></button>
+ <button class="myshots-button myshots-link" tabindex="1" data-l10n-id="myShotsLink"></button>
+ <div class="spacer"></div>
+ <button class="myshots-button visible" tabindex="2" data-l10n-id="saveScreenshotVisibleArea"></button>
+ <button class="myshots-button full-page" tabindex="3" data-l10n-id="saveScreenshotFullPage"></button>
</div>
</div>
</div>
@@ -250,10 +261,13 @@ this.ui = (function() { // eslint-disable-line no-unused-vars
this.document.documentElement.dir = browser.i18n.getMessage("@@bidi_dir");
this.document.documentElement.lang = browser.i18n.getMessage("@@ui_locale");
const overlay = this.document.querySelector(".preview-overlay");
- overlay.querySelector(".preview-instructions").textContent = browser.i18n.getMessage("screenshotInstructions");
- overlay.querySelector(".myshots-link").textContent = browser.i18n.getMessage("myShotsLink");
+ localizeText(this.document);
overlay.querySelector(".myshots-button").addEventListener(
"click", watchFunction(assertIsTrusted(standardOverlayCallbacks.onOpenMyShots)));
+ overlay.querySelector(".visible").addEventListener(
+ "click", watchFunction(assertIsTrusted(standardOverlayCallbacks.onClickVisible)));
+ overlay.querySelector(".full-page").addEventListener(
+ "click", watchFunction(assertIsTrusted(standardOverlayCallbacks.onClickFullPage)));
resolve();
}), {once: true});
document.body.appendChild(this.element);
@@ -264,16 +278,6 @@ this.ui = (function() { // eslint-disable-line no-unused-vars
});
},
- updateElementSize() {
- if (!this.element) {
- // This can happen if the selector is unloaded during the resize adjustment
- // time-delay
- return;
- }
- this.element.style.height = window.innerHeight + "px";
- this.element.style.width = window.innerWidth + "px";
- },
-
hide() {
window.removeEventListener("scroll", watchFunction(assertIsTrusted(this.onScroll)));
window.removeEventListener("resize", this.onResize, true);
@@ -283,7 +287,6 @@ this.ui = (function() { // eslint-disable-line no-unused-vars
},
unhide() {
- this.updateElementSize();
window.addEventListener("scroll", watchFunction(assertIsTrusted(this.onScroll)));
window.addEventListener("resize", this.onResize, true);
this.element.style.display = "";
@@ -313,13 +316,84 @@ this.ui = (function() { // eslint-disable-line no-unused-vars
}
};
+ let iframePreview = exports.iframePreview = {
+ element: null,
+ document: null,
+ display(installHandlerOnDocument, standardOverlayCallbacks) {
+ return new Promise((resolve, reject) => {
+ if (!this.element) {
+ this.element = initializeIframe();
+ this.element.id = "firefox-screenshots-preview-iframe";
+ this.element.style.display = "none";
+ this.element.style.setProperty('position', 'fixed', 'important');
+ this.element.style.height = "100%";
+ this.element.style.width = "100%";
+ this.element.onload = watchFunction(() => {
+ this.document = this.element.contentDocument;
+ // eslint-disable-next-line no-unsanitized/property
+ this.document.documentElement.innerHTML = `
+ <head>
+ <style>${substitutedCss}</style>
+ <title></title>
+ </head>
+ <body>
+ <div class="preview-overlay">
+ <div class="preview-image">
+ <div class="preview-buttons">
+ <button class="highlight-button-cancel"></button>
+ <button class="highlight-button-download"></button>
+ <button class="preview-button-save" data-l10n-id="saveScreenshotSelectedArea"></button>
+ </div>
+ </div>
+ </div>
+ </body>`;
+ installHandlerOnDocument(this.document);
+ this.document.documentElement.dir = browser.i18n.getMessage("@@bidi_dir");
+ this.document.documentElement.lang = browser.i18n.getMessage("@@ui_locale");
+ localizeText(this.document);
+ const overlay = this.document.querySelector(".preview-overlay");
+ overlay.querySelector(".highlight-button-download").addEventListener(
+ "click", watchFunction(assertIsTrusted(standardOverlayCallbacks.onDownloadPreview)));
+ overlay.querySelector(".preview-button-save").addEventListener(
+ "click", watchFunction(assertIsTrusted(standardOverlayCallbacks.onSavePreview)));
+ overlay.querySelector(".highlight-button-cancel").addEventListener(
+ "click", watchFunction(assertIsTrusted(standardOverlayCallbacks.cancel)));
+ resolve();
+ });
+ document.body.appendChild(this.element);
+ } else {
+ resolve();
+ }
+ });
+ },
+
+ hide() {
+ if (this.element) {
+ this.element.style.display = "none";
+ }
+ },
+
+ unhide() {
+ this.element.style.display = "";
+ this.element.focus();
+ },
+
+ remove() {
+ this.hide();
+ util.removeNode(this.element);
+ this.element = null;
+ this.document = null;
+ }
+ };
+
iframePreSelection.onResize = watchFunction(onResize.bind(iframePreSelection), true);
let iframe = exports.iframe = {
currentIframe: iframePreSelection,
display(installHandlerOnDocument, standardOverlayCallbacks) {
return iframeSelection.display(installHandlerOnDocument)
- .then(() => iframePreSelection.display(installHandlerOnDocument, standardOverlayCallbacks));
+ .then(() => iframePreSelection.display(installHandlerOnDocument, standardOverlayCallbacks))
+ .then(() => iframePreview.display(installHandlerOnDocument, standardOverlayCallbacks));
},
hide() {
@@ -337,6 +411,7 @@ this.ui = (function() { // eslint-disable-line no-unused-vars
remove() {
iframeSelection.remove();
iframePreSelection.remove();
+ iframePreview.remove();
},
document() {
@@ -344,7 +419,7 @@ this.ui = (function() { // eslint-disable-line no-unused-vars
},
useSelection() {
- if (this.currentIframe === iframePreSelection) {
+ if (this.currentIframe === iframePreSelection || this.currentIframe === iframePreview) {
this.hide();
}
this.currentIframe = iframeSelection;
@@ -352,11 +427,19 @@ this.ui = (function() { // eslint-disable-line no-unused-vars
},
usePreSelection() {
- if (this.currentIframe === iframeSelection) {
+ if (this.currentIframe === iframeSelection || this.currentIframe === iframePreview) {
this.hide();
}
this.currentIframe = iframePreSelection;
this.unhide();
+ },
+
+ usePreview() {
+ if (this.currentIframe === iframeSelection || this.currentIframe === iframePreSelection) {
+ this.hide();
+ }
+ this.currentIframe = iframePreview;
+ this.unhide();
}
};
@@ -403,7 +486,6 @@ this.ui = (function() { // eslint-disable-line no-unused-vars
let bodyRect = getBodyRect();
// Note, document.documentElement.scrollHeight is zero on some strange pages (such as the page created when you load an image):
let docHeight = Math.max(document.documentElement.scrollHeight || 0, document.body.scrollHeight);
- let docWidth = Math.max(document.documentElement.scrollWidth, document.body.scrollWidth);
let winBottom = window.innerHeight;
let pageYOffset = window.pageYOffset;
@@ -434,11 +516,11 @@ this.ui = (function() { // eslint-disable-line no-unused-vars
this.bgTop.style.top = "0px";
this.bgTop.style.height = (pos.top - bodyRect.top) + "px";
this.bgTop.style.left = "0px";
- this.bgTop.style.width = docWidth + "px";
+ this.bgTop.style.width = "100%";
this.bgBottom.style.top = (pos.bottom - bodyRect.top) + "px";
this.bgBottom.style.height = docHeight - (pos.bottom - bodyRect.top) + "px";
this.bgBottom.style.left = "0px";
- this.bgBottom.style.width = docWidth + "px";
+ this.bgBottom.style.width = "100%";
this.bgLeft.style.top = (pos.top - bodyRect.top) + "px";
this.bgLeft.style.height = pos.bottom - pos.top + "px";
this.bgLeft.style.left = "0px";
@@ -446,7 +528,7 @@ this.ui = (function() { // eslint-disable-line no-unused-vars
this.bgRight.style.top = (pos.top - bodyRect.top) + "px";
this.bgRight.style.height = pos.bottom - pos.top + "px";
this.bgRight.style.left = (pos.right - bodyRect.left) + "px";
- this.bgRight.style.width = docWidth - (pos.right - bodyRect.left) + "px";
+ this.bgRight.style.width = "100%";
if (!(this.isElementInViewport(this.buttons))) {
this.cancel.style.position = this.download.style.position = this.save.style.position = "fixed";
@@ -557,6 +639,11 @@ this.ui = (function() { // eslint-disable-line no-unused-vars
},
clearSaveDisabled() {
+ if (!this.save) {
+ // Happens if we try to remove the disabled status after the worker
+ // has been shut down
+ return;
+ }
this.save.removeAttribute("disabled");
},
@@ -619,6 +706,14 @@ this.ui = (function() { // eslint-disable-line no-unused-vars
}
};
+ exports.Preview = {
+ display(dataUrl) {
+ let img = makeEl("IMG");
+ img.src = dataUrl;
+ iframe.document().querySelector(".preview-image").appendChild(img);
+ }
+ };
+
/** Removes every UI this module creates */
exports.remove = function() {
for (let name in exports) {
diff --git a/browser/extensions/screenshots/webextension/selector/uicontrol.js b/browser/extensions/screenshots/webextension/selector/uicontrol.js
index a9d7fa2..7b2eb07 100644
--- a/browser/extensions/screenshots/webextension/selector/uicontrol.js
+++ b/browser/extensions/screenshots/webextension/selector/uicontrol.js
@@ -24,6 +24,8 @@ this.uicontrol = (function() {
The user is resizing the selection
"cancelled":
Everything has been cancelled
+ "previewing":
+ The user is previewing the full-screen/visible image
A mousedown goes from crosshairs to dragging.
A mouseup goes from dragging to selected
@@ -120,6 +122,8 @@ this.uicontrol = (function() {
H6: true
};
+ let captureType;
+
let standardDisplayCallbacks = {
cancel: () => {
sendEvent("cancel-shot", "overlay-cancel-button");
@@ -134,6 +138,10 @@ this.uicontrol = (function() {
};
let standardOverlayCallbacks = {
+ cancel: () => {
+ sendEvent("cancel-shot", "cancel-preview-button");
+ exports.deactivate();
+ },
onOpenMyShots: () => {
sendEvent("goto-myshots", "selection-button");
callBackground("openMyShots")
@@ -147,7 +155,8 @@ this.uicontrol = (function() {
selectedPos = new Selection(
window.scrollX, window.scrollY,
window.scrollX + window.innerWidth, window.scrollY + window.innerHeight);
- shooter.takeShot("visible", selectedPos);
+ captureType = 'visible';
+ setState("previewing");
},
onClickFullPage: () => {
sendEvent("capture-full-page", "selection-button");
@@ -166,9 +175,18 @@ this.uicontrol = (function() {
selectedPos = new Selection(
0, 0,
width, height);
- shooter.takeShot("fullPage", selectedPos);
+ captureType = 'fullPage';
+ setState("previewing");
+ },
+ onSavePreview: () => {
+ sendEvent(`save-${captureType.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase()}`, "save-preview-button");
+ shooter.takeShot(captureType, selectedPos, dataUrl);
+ },
+ onDownloadPreview: () => {
+ sendEvent(`download-${captureType.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase()}`, "download-preview-button");
+ shooter.downloadShot(selectedPos);
}
- }
+ };
/** Holds all the objects that handle events for each state: */
let stateHandlers = {};
@@ -344,6 +362,16 @@ this.uicontrol = (function() {
* all stateHandlers
*/
+ let dataUrl;
+
+ stateHandlers.previewing = {
+ start() {
+ dataUrl = shooter.screenshotPage(selectedPos, captureType);
+ ui.iframe.usePreview();
+ ui.Preview.display(dataUrl);
+ }
+ };
+
stateHandlers.onboarding = {
start() {
if (typeof slides == "undefined") {
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment