--- a/browser/extensions/screenshots/install.rdf
+++ b/browser/extensions/screenshots/install.rdf
@@ -7,14 +7,14 @@
<em:targetApplication>
<Description>
<em:id>{ec8030f7-c20a-464f-9b0e-13a3a9e97384}</em:id> <!--Firefox-->
<em:minVersion>51.0a1</em:minVersion>
<em:maxVersion>*</em:maxVersion>
</Description>
</em:targetApplication>
<em:type>2</em:type>
- <em:version>8.1.0</em:version>
+ <em:version>9.0.0</em:version>
<em:bootstrap>true</em:bootstrap>
<em:homepageURL>https://pageshot.net/</em:homepageURL>
<em:multiprocessCompatible>true</em:multiprocessCompatible>
</Description>
</RDF>
--- a/browser/extensions/screenshots/moz.build
+++ b/browser/extensions/screenshots/moz.build
@@ -23,16 +23,20 @@ FINAL_TARGET_FILES.features['screenshots
'webextension/randomString.js',
'webextension/sitehelper.js'
]
FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["ach"] += [
'webextension/_locales/ach/messages.json'
]
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["ar"] += [
+ 'webextension/_locales/ar/messages.json'
+]
+
FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["az"] += [
'webextension/_locales/az/messages.json'
]
FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["be"] += [
'webextension/_locales/be/messages.json'
]
new file mode 100644
--- /dev/null
+++ b/browser/extensions/screenshots/webextension/_locales/ar/messages.json
@@ -0,0 +1,123 @@
+{
+ "addonDescription": {
+ "message": "خذ مقاطع و لقطات من الوب و احفظهم مؤقتًا أو دائمًا."
+ },
+ "addonAuthorsList": {
+ "message": "موزيلا <screenshots-feedback@mozilla.com>"
+ },
+ "contextMenuLabel": {
+ "message": "خذ لقطة شاشة"
+ },
+ "myShotsLink": {
+ "message": "لقطاتي"
+ },
+ "screenshotInstructions": {
+ "message": "اسحب أو انقر في الصفحة لاختيار منطقة. اضغط ESC للإلغاء."
+ },
+ "saveScreenshotSelectedArea": {
+ "message": "احفظ"
+ },
+ "saveScreenshotVisibleArea": {
+ "message": "احفظ الجزء المرئي"
+ },
+ "saveScreenshotFullPage": {
+ "message": "احفظ كل الصفحة"
+ },
+ "cancelScreenshot": {
+ "message": "ألغِ"
+ },
+ "downloadScreenshot": {
+ "message": "نزّل"
+ },
+ "notificationLinkCopiedTitle": {
+ "message": "نُسخ الرابط"
+ },
+ "notificationLinkCopiedDetails": {
+ "message": "نُسِخَ رابط اللقطة إلى الحافظة. اضغط $META_KEY$-V للصقها.",
+ "placeholders": {
+ "meta_key": {
+ "content": "$1"
+ }
+ }
+ },
+ "requestErrorTitle": {
+ "message": "خارج الخدمة."
+ },
+ "requestErrorDetails": {
+ "message": "تعذّر حفظ لقطتك. رجاء أعد المحاولة فيما بعد."
+ },
+ "connectionErrorTitle": {
+ "message": "تعذّر الاتصال بلقطات شاشتك."
+ },
+ "connectionErrorDetails": {
+ "message": "رجاء فحص اتصال الإنترنت. إذا كان باستطاعتك الاتصال بالإنترنت، فربما هناك عطل مؤقت في خدمة «لقطات شاشة فَيَرفُكس»."
+ },
+ "loginErrorDetails": {
+ "message": "تعذّر حفظ لقطتك لعُطل في خدمة «لقطات شاشة فَيَرفُكس». رجاء إعادة المحاولة لاحقًا."
+ },
+ "unshootablePageErrorTitle": {
+ "message": "تعذّر أخذ لقطة شاشة لهذه الصفحة."
+ },
+ "unshootablePageErrorDetails": {
+ "message": "ليست هذه صفحة وِب قياسية، لذا لا يمكنك أخذ لقطة لها."
+ },
+ "selfScreenshotErrorTitle": {
+ "message": "لا يمكننا أخذ لقطة لصفحة من صفحات «لقطات شاشة فَيَرفُكس»!"
+ },
+ "genericErrorTitle": {
+ "message": "هناك عطل في «لقطات شاشة فَيَرفُكس»."
+ },
+ "genericErrorDetails": {
+ "message": "لسنا متأكدين ما المشكلة. أتمانع إعادة المحاولة أو أخذ لقطة لصفحة أخرى؟"
+ },
+ "tourBodyOne": {
+ "message": "خذ لقطات الشاشة و احفظها و شارطها دون مغادرة فَيَرفُكس."
+ },
+ "tourHeaderTwo": {
+ "message": "التقط ما تريده فقط"
+ },
+ "tourBodyTwo": {
+ "message": "انقر و اسحب لالتقاط جزء معين من الصفحة. يمكنك أيضًا التحويم لإبراز التحديد."
+ },
+ "tourHeaderThree": {
+ "message": "كما تريدها"
+ },
+ "tourBodyThree": {
+ "message": "احفظ اللقطات التي أخذتها على الوب لمشاركتها بسهولة، أو نزّلها على حاسوبك. يمكنك أيضًل النقر على زر ”لقطاتي“ للعثور على كل اللقطات التي أخذتها."
+ },
+ "tourHeaderFour": {
+ "message": "التقط النوافذ أو صفحات كاملة"
+ },
+ "tourBodyFour": {
+ "message": "اختر الأزرار في أعلى اليمين لالتقاط المنطقة المرئية في النافذة أو الصفحة كلها."
+ },
+ "tourSkip": {
+ "message": "تخطَّ"
+ },
+ "tourNext": {
+ "message": "الشريحة التالية"
+ },
+ "tourPrevious": {
+ "message": "الشريحة السابقة"
+ },
+ "tourDone": {
+ "message": "تمّ"
+ },
+ "termsAndPrivacyNoticeCloudServices": {
+ "message": "استخدامك لخدمات «لقطات شاشة فَيَرفُكس» يعني موافقتك على $TERMSANDPRIVACYNOTICETERMSLINK$ و $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
+ "placeholders": {
+ "termsandprivacynoticetermslink": {
+ "content": "$1"
+ },
+ "termsandprivacynoticeprivacylink": {
+ "content": "$2"
+ }
+ }
+ },
+ "termsAndPrivacyNoticeTermsLink": {
+ "message": "الشروط"
+ },
+ "termsAndPrivacyNoticyPrivacyLink": {
+ "message": "تنويه الخصوصية"
+ }
+}
\ No newline at end of file
--- a/browser/extensions/screenshots/webextension/_locales/de/messages.json
+++ b/browser/extensions/screenshots/webextension/_locales/de/messages.json
@@ -59,16 +59,19 @@
"message": "Ein Bildschirmfoto dieser Seite ist nicht möglich."
},
"unshootablePageErrorDetails": {
"message": "Dies ist keine Standard-Webseite, daher sind keine Bildschirmfotos von ihr möglich."
},
"selfScreenshotErrorTitle": {
"message": "Sie können kein Bildschirmfoto einer Firefox-Screenshots-Seite machen!"
},
+ "emptySelectionErrorTitle": {
+ "message": "Ihr Auswahlbereich ist zu klein"
+ },
"genericErrorTitle": {
"message": "Firefox Screenshots funktioniert nicht richtig."
},
"genericErrorDetails": {
"message": "Wir wissen auch nicht, was gerade passiert ist. Könnten Sie das Bildschirmfoto erneut oder auf einer anderen Seite aufnehmen?"
},
"tourBodyOne": {
"message": "Bildschirmfotos aufnehmen, speichern und teilen, ohne Firefox zu verlassen."
--- a/browser/extensions/screenshots/webextension/_locales/dsb/messages.json
+++ b/browser/extensions/screenshots/webextension/_locales/dsb/messages.json
@@ -59,16 +59,19 @@
"message": "Foto wobrazowki toś togo boka njejo móžne."
},
"unshootablePageErrorDetails": {
"message": "To njejo standardny webbok, togodla foto wobrazowki wót njeje njejo móžne."
},
"selfScreenshotErrorTitle": {
"message": "Njamóžośo wobrazowku boka Firefox Screenshots fotografěrowaś!"
},
+ "emptySelectionErrorTitle": {
+ "message": "Waš wuběrk jo pśemały"
+ },
"genericErrorTitle": {
"message": "Hopla! Firefox Screenshots njeźěła."
},
"genericErrorDetails": {
"message": "Njejsmy se wěste, což jo se stało. Cośo hyšći raz wopytaś abo cośo drugi bok fotografěrowaś?"
},
"tourBodyOne": {
"message": "Gótujśo, składujśo a źělśo fota wobrazowki mimo až Firefox spušćaśo."
--- a/browser/extensions/screenshots/webextension/_locales/en_US/messages.json
+++ b/browser/extensions/screenshots/webextension/_locales/en_US/messages.json
@@ -59,16 +59,19 @@
"message": "We can’t screenshot this page."
},
"unshootablePageErrorDetails": {
"message": "This isn’t a standard Web page, so you can’t take a screenshot of it."
},
"selfScreenshotErrorTitle": {
"message": "You can’t take a shot of a Firefox Screenshots page!"
},
+ "emptySelectionErrorTitle": {
+ "message": "Your selection is too small"
+ },
"genericErrorTitle": {
"message": "Whoa! Firefox Screenshots went haywire."
},
"genericErrorDetails": {
"message": "We’re not sure what just happened. Care to try again or take a shot of a different page?"
},
"tourBodyOne": {
"message": "Take, save, and share screenshots without leaving Firefox."
--- a/browser/extensions/screenshots/webextension/_locales/es_MX/messages.json
+++ b/browser/extensions/screenshots/webextension/_locales/es_MX/messages.json
@@ -59,16 +59,19 @@
"message": "No podemos realizar una captura de pantalla a esta página."
},
"unshootablePageErrorDetails": {
"message": "Esta no es una página web estándar, por lo tanto no podemos tomar una captura de pantalla de ella."
},
"selfScreenshotErrorTitle": {
"message": "¡No puedes tomar una captura de la página de capturas de pantalla de Firefox!"
},
+ "emptySelectionErrorTitle": {
+ "message": "Tu selección es demasiado pequeña"
+ },
"genericErrorTitle": {
"message": "¡Oye! Las capturas de pantalla de Firefox salieron mal."
},
"genericErrorDetails": {
"message": "No estamos seguros qué pasó. ¿Te importaría intentarlo de nuevo o tomar una captura de una página diferente?"
},
"tourBodyOne": {
"message": "Toma, guarda y comparte capturas de pantalla sin dejar Firefox."
--- a/browser/extensions/screenshots/webextension/_locales/fr/messages.json
+++ b/browser/extensions/screenshots/webextension/_locales/fr/messages.json
@@ -59,16 +59,19 @@
"message": "Impossible d’effectuer une capture de cette page."
},
"unshootablePageErrorDetails": {
"message": "Impossible d’effectuer une capture d’écran, car cette page web n’est pas standard."
},
"selfScreenshotErrorTitle": {
"message": "Vous ne pouvez pas effectuer une capture d’écran d’une page Firefox Screenshots."
},
+ "emptySelectionErrorTitle": {
+ "message": "La zone sélectionnée est trop petite"
+ },
"genericErrorTitle": {
"message": "Firefox Screenshots semble avoir un problème."
},
"genericErrorDetails": {
"message": "Un problème non identifié est survenu. Vous pouvez réessayer ou effectuer une capture d’écran d’une autre page."
},
"tourBodyOne": {
"message": "Effectuez des captures d’écran, enregistrez et partagez-les sans quitter Firefox."
--- a/browser/extensions/screenshots/webextension/_locales/hsb/messages.json
+++ b/browser/extensions/screenshots/webextension/_locales/hsb/messages.json
@@ -59,16 +59,19 @@
"message": "Foto wobrazowki tuteje strony móžne njeje."
},
"unshootablePageErrorDetails": {
"message": "To standardna webstrona njeje, tohodla foto wobrazowki wot njeje móžne njeje."
},
"selfScreenshotErrorTitle": {
"message": "Njemóžeće wobrazowku strony Firefox Screenshots fotografować!"
},
+ "emptySelectionErrorTitle": {
+ "message": "Waš wuběr je přemały"
+ },
"genericErrorTitle": {
"message": "Hopla! Firefox Screenshots njefunguje."
},
"genericErrorDetails": {
"message": "Njejsmy sej wěsći, štož je so stało. Chceće hišće raz spytać abo chceće druhu stronu fotografować?"
},
"tourBodyOne": {
"message": "Čińće, składujće a dźělće fota wobrazowki bjez toho, zo byšće Firefox wopušćił."
--- a/browser/extensions/screenshots/webextension/_locales/hu/messages.json
+++ b/browser/extensions/screenshots/webextension/_locales/hu/messages.json
@@ -59,16 +59,19 @@
"message": "Nem lehet képet készíteni erről a lapról."
},
"unshootablePageErrorDetails": {
"message": "Ez egy nem szabványos weblap, így nem készíthet róla képernyőképet."
},
"selfScreenshotErrorTitle": {
"message": "Nem készíthet képet a Firefox képernyőképek oldalról!"
},
+ "emptySelectionErrorTitle": {
+ "message": "A kijelölés túl kicsi"
+ },
"genericErrorTitle": {
"message": "Húha! A Firefox képernyőképek megkergült."
},
"genericErrorDetails": {
"message": "Nem vagyunk benne biztosak, hogy mi történt. Próbálja újra, vagy készítsen képet egy másik oldalról."
},
"tourBodyOne": {
"message": "Készítsen, mentsen és osszon meg képernyőképeket, anélkül, hogy elhagyná a Firefoxot."
--- a/browser/extensions/screenshots/webextension/_locales/it/messages.json
+++ b/browser/extensions/screenshots/webextension/_locales/it/messages.json
@@ -59,16 +59,19 @@
"message": "Non è possibile salvare uno screenshot di questa pagina."
},
"unshootablePageErrorDetails": {
"message": "Non è possibile salvare uno screenshot in quanto non si tratta di una normale pagina web."
},
"selfScreenshotErrorTitle": {
"message": "Non è possibile salvare uno screenshot di una pagina di Firefox Screenshots"
},
+ "emptySelectionErrorTitle": {
+ "message": "L’area selezionata è troppo piccola"
+ },
"genericErrorTitle": {
"message": "Wow! Firefox Screenshots è andato in tilt"
},
"genericErrorDetails": {
"message": "Non sappiamo che cosa sia successo. Riprova, magari con una pagina diversa."
},
"tourBodyOne": {
"message": "Cattura, salva e condividi screenshot senza mai uscire da Firefox."
--- a/browser/extensions/screenshots/webextension/_locales/ja/messages.json
+++ b/browser/extensions/screenshots/webextension/_locales/ja/messages.json
@@ -59,16 +59,19 @@
"message": "このページはスクリーンショットを撮れません。"
},
"unshootablePageErrorDetails": {
"message": "これは通常のウェブページでないため、スクリーンショットを撮ることができません。"
},
"selfScreenshotErrorTitle": {
"message": "Firefox Screenshots ページのショットは撮れません。"
},
+ "emptySelectionErrorTitle": {
+ "message": "選択範囲が小さすぎます"
+ },
"genericErrorTitle": {
"message": "Firefox Screenshots に問題が発生しました。"
},
"genericErrorDetails": {
"message": "何か問題が発生したようです。再度試すか、別のページのショットを撮ってみてください。"
},
"tourBodyOne": {
"message": "Firefox を離れることなく、スクリーンショットを撮影、保存、共有。"
--- a/browser/extensions/screenshots/webextension/_locales/pt_BR/messages.json
+++ b/browser/extensions/screenshots/webextension/_locales/pt_BR/messages.json
@@ -7,17 +7,17 @@
},
"contextMenuLabel": {
"message": "Tirar uma captura de tela"
},
"myShotsLink": {
"message": "Minhas capturas"
},
"screenshotInstructions": {
- "message": "Arraste ou clique na página para selecionar uma área. Pressione ESC para cancelar."
+ "message": "Arraste ou clique na página para selecionar uma região. Pressione ESC para cancelar."
},
"saveScreenshotSelectedArea": {
"message": "Salvar"
},
"saveScreenshotVisibleArea": {
"message": "Salvar área visível"
},
"saveScreenshotFullPage": {
@@ -36,17 +36,17 @@
"message": "O link da sua captura foi copiado para a área de transferência. Pressione $META_KEY$-V para colar.",
"placeholders": {
"meta_key": {
"content": "$1"
}
}
},
"requestErrorTitle": {
- "message": "Fora de ordem."
+ "message": "Com defeito."
},
"requestErrorDetails": {
"message": "Desculpa! Não pudemos salvar a sua captura de tela. Por favor, tente novamente mais tarde."
},
"connectionErrorTitle": {
"message": "Não conseguimos conectar suas capturas de tela."
},
"connectionErrorDetails": {
--- a/browser/extensions/screenshots/webextension/_locales/sk/messages.json
+++ b/browser/extensions/screenshots/webextension/_locales/sk/messages.json
@@ -59,16 +59,19 @@
"message": "Túto stránku nemôžeme zachytiť."
},
"unshootablePageErrorDetails": {
"message": "Toto nie je štandardná webová stránka, takže z nej nemôžeme vytvoriť snímku obrazovky."
},
"selfScreenshotErrorTitle": {
"message": "Nemôžete vytvoriť snímku obrazovky stránky Firefox Screenshots!"
},
+ "emptySelectionErrorTitle": {
+ "message": "Váš výber je príliš malý"
+ },
"genericErrorTitle": {
"message": "Ups! Služba Firefox Screenshots prestala pracovať."
},
"genericErrorDetails": {
"message": "Nie sme si istí, čo sa práve stalo. Chcete tú skúsiť znova alebo chcete vytvoriť snímku inej stránky?"
},
"tourBodyOne": {
"message": "Tvorte, ukladajte a zdieľajte snímky obrazovky bez toho, aby ste museli opustiť Firefox."
--- a/browser/extensions/screenshots/webextension/_locales/sl/messages.json
+++ b/browser/extensions/screenshots/webextension/_locales/sl/messages.json
@@ -59,16 +59,19 @@
"message": "Ne moremo zajeti posnetka te strani."
},
"unshootablePageErrorDetails": {
"message": "To ni običajna spletna stran, zato ne morete zajeti njenega zaslonskega posnetka."
},
"selfScreenshotErrorTitle": {
"message": "Posnetka strani Firefox Screenshots ni mogoče zajeti!"
},
+ "emptySelectionErrorTitle": {
+ "message": "Vaš izbor je premajhen"
+ },
"genericErrorTitle": {
"message": "Uf! Firefox Screenshots se je pokvaril."
},
"genericErrorDetails": {
"message": "Ne vemo točno, kaj se je pravkar zgodilo. Bi radi poskusili znova ali pa zajeli posnetek kakšne druge strani?"
},
"tourBodyOne": {
"message": "Zajemite, shranite in delite zaslonske posnetke, ne da bi zapustili Firefox."
--- a/browser/extensions/screenshots/webextension/_locales/sr/messages.json
+++ b/browser/extensions/screenshots/webextension/_locales/sr/messages.json
@@ -1,17 +1,17 @@
{
"addonDescription": {
"message": "Бележите снимке екрана са веба и сачувајте их привремено или трајно."
},
"addonAuthorsList": {
"message": "Mozilla <screenshots-feedback@mozilla.com>"
},
"contextMenuLabel": {
- "message": "Усликајте екран"
+ "message": "Усликај екран"
},
"myShotsLink": {
"message": "Моји снимци"
},
"screenshotInstructions": {
"message": "Превуците или кликните на страницу да изаберете област. Притисните ESC да прекинете."
},
"saveScreenshotSelectedArea": {
@@ -59,16 +59,19 @@
"message": "Не можемо забележити снимак ове странице."
},
"unshootablePageErrorDetails": {
"message": "Ово није стандардна веб страница, тако да не можете забележити њен снимак."
},
"selfScreenshotErrorTitle": {
"message": "Не можете усликати Firefox Screenshots страницу!"
},
+ "emptySelectionErrorTitle": {
+ "message": "Ваша селекција је премала"
+ },
"genericErrorTitle": {
"message": "Ајој! Firefox Screenshots је пошашавио."
},
"genericErrorDetails": {
"message": "Нисмо сигурни шта се управо догодило. Желите ли покушати поново или да усликате другачију страницу?"
},
"tourBodyOne": {
"message": "Забележите, сачувајте и поделите снимке екрана без напуштања Firefox-а."
--- a/browser/extensions/screenshots/webextension/_locales/sv_SE/messages.json
+++ b/browser/extensions/screenshots/webextension/_locales/sv_SE/messages.json
@@ -59,16 +59,19 @@
"message": "Vi kan inte ta en skärmbild av sidan."
},
"unshootablePageErrorDetails": {
"message": "Detta är inte en vanlig webbsida, så du kan inte ta en skärmbild av den."
},
"selfScreenshotErrorTitle": {
"message": "Du kan inte ta en skärmbild av sidan Firefox Screenshots!"
},
+ "emptySelectionErrorTitle": {
+ "message": "Ditt val är för litet"
+ },
"genericErrorTitle": {
"message": "Oj! Firefox Screenshots verkar inte fungera korrekt."
},
"genericErrorDetails": {
"message": "Vi är inte säkra på vad som just hände. Kan du försöka igen eller ta en bild på en annan sida?"
},
"tourBodyOne": {
"message": "Ta, spara, och dela skärmbilder utan att lämna Firefox."
--- a/browser/extensions/screenshots/webextension/_locales/te/messages.json
+++ b/browser/extensions/screenshots/webextension/_locales/te/messages.json
@@ -6,31 +6,40 @@
"message": "ఒక తెరపట్టు తీసుకోండి"
},
"myShotsLink": {
"message": "నా షాట్లు"
},
"saveScreenshotSelectedArea": {
"message": "భద్రపరచు"
},
+ "saveScreenshotVisibleArea": {
+ "message": "కనిపించే దానిని బద్రపరచండి"
+ },
"saveScreenshotFullPage": {
"message": "పూర్తి పేజీని భద్రపరచు"
},
"cancelScreenshot": {
"message": "రద్దుచేయి"
},
"downloadScreenshot": {
"message": "దింపుకోండి"
},
"notificationLinkCopiedTitle": {
"message": "లంకె కాపీ అయింది"
},
+ "requestErrorTitle": {
+ "message": "పని చెయుట లేదు."
+ },
"requestErrorDetails": {
"message": "క్షమిచండి! మీ తెరను భద్రపరచలేకపోయాం. దయచేసి కాసేపాగి మళ్ళీ ప్రయత్నించండి."
},
+ "tourHeaderTwo": {
+ "message": ""
+ },
"tourHeaderThree": {
"message": "మీకు నచ్చినట్టుగా"
},
"tourSkip": {
"message": "దాటవేయి"
},
"tourNext": {
"message": "తర్వాతి ఫలకం"
--- a/browser/extensions/screenshots/webextension/_locales/uk/messages.json
+++ b/browser/extensions/screenshots/webextension/_locales/uk/messages.json
@@ -59,16 +59,19 @@
"message": "Ми не можемо зробити знімок цієї сторінки."
},
"unshootablePageErrorDetails": {
"message": "Це не стандартна веб-сторінка, тому ви не можете зробити її знімок."
},
"selfScreenshotErrorTitle": {
"message": "Ви не можете зробити знімок сторінки Firefox Screenshots!"
},
+ "emptySelectionErrorTitle": {
+ "message": "Обрана область є замалою"
+ },
"genericErrorTitle": {
"message": "Оу! З Firefox Screenshots щось негаразд."
},
"genericErrorDetails": {
"message": "Ми не впевнені, в чому проблема. Спробувати ще раз, або ж зробити знімок іншої сторінки?"
},
"tourBodyOne": {
"message": "Робіть знімки екрану, зберігайте та діліться ними прямо в Firefox."
--- a/browser/extensions/screenshots/webextension/background/auth.js
+++ b/browser/extensions/screenshots/webextension/background/auth.js
@@ -7,17 +7,17 @@ this.auth = (function() {
let exports = {};
let registrationInfo;
let initialized = false;
let authHeader = null;
let sentryPublicDSN = null;
let abTests = {};
- catcher.watchPromise(browser.storage.local.get(["registrationInfo", "abTests"]).then((result) => {
+ let registrationInfoFetched = catcher.watchPromise(browser.storage.local.get(["registrationInfo", "abTests"]).then((result) => {
if (result.abTests) {
abTests = result.abTests;
}
if (result.registrationInfo) {
registrationInfo = result.registrationInfo;
} else {
registrationInfo = generateRegistrationInfo();
log.info("Generating new device authentication ID", registrationInfo);
@@ -172,39 +172,43 @@ this.auth = (function() {
return abTests;
};
exports.isRegistered = function() {
return registrationInfo.registered;
};
exports.setDeviceInfoFromOldAddon = function(newDeviceInfo) {
- if (!(newDeviceInfo.deviceId && newDeviceInfo.secret)) {
- throw new Error("Bad deviceInfo");
- }
- if (registrationInfo.deviceId === newDeviceInfo.deviceId &&
- registrationInfo.secret === newDeviceInfo.secret) {
- // Probably we already imported the information
- return Promise.resolve(false);
- }
- registrationInfo = {
- deviceId: newDeviceInfo.deviceId,
- secret: newDeviceInfo.secret,
- registered: true
- };
- initialized = false;
- return browser.storage.local.set({registrationInfo}).then(() => {
- return true;
+ return registrationInfoFetched.then(() => {
+ if (!(newDeviceInfo.deviceId && newDeviceInfo.secret)) {
+ throw new Error("Bad deviceInfo");
+ }
+ if (registrationInfo.deviceId === newDeviceInfo.deviceId &&
+ registrationInfo.secret === newDeviceInfo.secret) {
+ // Probably we already imported the information
+ return Promise.resolve(false);
+ }
+ registrationInfo = {
+ deviceId: newDeviceInfo.deviceId,
+ secret: newDeviceInfo.secret,
+ registered: true
+ };
+ initialized = false;
+ return browser.storage.local.set({registrationInfo}).then(() => {
+ return true;
+ });
});
};
communication.register("getAuthInfo", (sender, ownershipCheck) => {
- let info = registrationInfo;
- if (info.registered) {
- return login({ownershipCheck}).then((result) => {
- return {isOwner: result && result.isOwner, deviceId: registrationInfo.deviceId};
- });
- }
- return Promise.resolve(info);
+ return registrationInfoFetched.then(() => {
+ let info = registrationInfo;
+ if (info.registered) {
+ return login({ownershipCheck}).then((result) => {
+ return {isOwner: result && result.isOwner, deviceId: registrationInfo.deviceId};
+ });
+ }
+ return info;
+ });
});
return exports;
})();
--- a/browser/extensions/screenshots/webextension/background/senderror.js
+++ b/browser/extensions/screenshots/webextension/background/senderror.js
@@ -32,16 +32,19 @@ this.senderror = (function() {
info: browser.i18n.getMessage("unshootablePageErrorDetails")
},
SHOT_PAGE: {
title: browser.i18n.getMessage("selfScreenshotErrorTitle")
},
MY_SHOTS: {
title: browser.i18n.getMessage("selfScreenshotErrorTitle")
},
+ EMPTY_SELECTION: {
+ title: browser.i18n.getMessage("emptySelectionErrorTitle")
+ },
generic: {
title: browser.i18n.getMessage("genericErrorTitle"),
info: browser.i18n.getMessage("genericErrorDetails"),
showMessage: true
}
};
communication.register("reportError", (sender, error) => {
@@ -84,17 +87,17 @@ this.senderror = (function() {
return;
}
let dsn = auth.getSentryPublicDSN();
if (!dsn) {
log.warn("Error:", e);
return;
}
if (!Raven.isSetup()) {
- Raven.config(dsn).install();
+ Raven.config(dsn, {allowSecretKey: true}).install();
}
let exception = new Error(e.message);
exception.stack = e.multilineStack || e.stack || undefined;
let rest = {};
for (let attr in e) {
if (!["name", "message", "stack", "multilineStack", "popupMessage", "version", "sentryPublicDSN", "help"].includes(attr)) {
rest[attr] = e[attr];
}
@@ -107,13 +110,15 @@ this.senderror = (function() {
extra: rest
});
};
catcher.registerHandler((errorObj) => {
if (!errorObj.noPopup) {
exports.showError(errorObj);
}
- exports.reportError(errorObj);
+ if (!errorObj.noReport) {
+ exports.reportError(errorObj);
+ }
});
return exports;
})();
--- a/browser/extensions/screenshots/webextension/build/buildSettings.js
+++ b/browser/extensions/screenshots/webextension/build/buildSettings.js
@@ -1,6 +1,7 @@
window.buildSettings = {
- defaultSentryDsn: "https://97d8afa496f94764ae255e739b147f4b@sentry.prod.mozaws.net/139",
- logLevel: "" || "warn"
+ defaultSentryDsn: "https://904ccdd4866247c092ae8fc1a4764a63:940d44bdc71d4daea133c19080ccd38d@sentry.prod.mozaws.net/224",
+ logLevel: "" || "warn",
+ captureText: ("" === "true")
};
null;
--- a/browser/extensions/screenshots/webextension/build/inlineSelectionCss.js
+++ b/browser/extensions/screenshots/webextension/build/inlineSelectionCss.js
@@ -416,16 +416,19 @@ window.inlineSelectionCss = `
background: #f5f5f5;
border-radius: 1px;
box-sizing: border-box;
height: 80px;
padding: 8px;
position: absolute;
right: 5px;
top: 5px; }
+ html[dir="rtl"] .myshots-all-buttons-container {
+ left: 5px;
+ right: inherit; }
.myshots-all-buttons-container .spacer {
background-color: #c9c9c9;
flex: 0 0 1px;
height: 80px;
margin: 0 10px;
position: relative;
top: -8px; }
.myshots-all-buttons-container button {
--- a/browser/extensions/screenshots/webextension/build/shot.js
+++ b/browser/extensions/screenshots/webextension/build/shot.js
@@ -488,16 +488,19 @@ class AbstractShot {
this._clips[name] = clip;
}
delClip(name) {
if (!this._clips[name]) {
throw new Error("No existing clip with id: " + name);
}
delete this._clips[name];
}
+ delAllClips() {
+ this._clips = {};
+ }
biggestClipSortOrder() {
let biggest = 0;
for (let clipId in this._clips) {
biggest = Math.max(biggest, this._clips[clipId].sortOrder);
}
return biggest;
}
updateClipUrl(clipId, clipUrl) {
--- a/browser/extensions/screenshots/webextension/manifest.json
+++ b/browser/extensions/screenshots/webextension/manifest.json
@@ -1,27 +1,27 @@
{
"manifest_version": 2,
"name": "Firefox Screenshots",
- "version": "8.1.0",
+ "version": "9.0.0",
"description": "__MSG_addonDescription__",
"author": "__MSG_addonAuthorsList__",
"homepage_url": "https://github.com/mozilla-services/screenshots",
"applications": {
"gecko": {
"id": "screenshots@mozilla.org"
}
},
"default_locale": "en_US",
"browser_action": {
"default_icon": {
"16": "icons/icon-16.svg",
"32": "icons/icon-32.svg"
},
- "default_title": "__MSG_contextMenuLabel__",
+ "default_title": "Firefox Screenshots",
"browser_style": false
},
"background": {
"scripts": [
"build/buildSettings.js",
"log.js",
"makeUuid.js",
"catcher.js",
--- a/browser/extensions/screenshots/webextension/onboarding/slides.js
+++ b/browser/extensions/screenshots/webextension/onboarding/slides.js
@@ -41,16 +41,18 @@ this.slides = (function() {
"text/html"
);
doc = iframe.contentDocument;
doc.replaceChild(
doc.adoptNode(parsedDom.documentElement),
doc.documentElement
);
doc.addEventListener("keyup", onKeyUp);
+ doc.documentElement.dir = browser.i18n.getMessage("@@bidi_dir");
+ doc.documentElement.lang = browser.i18n.getMessage("@@ui_locale");
localizeText(doc);
activateSlide(doc);
resolve();
});
document.body.appendChild(iframe);
iframe.focus();
window.addEventListener("resize", onResize);
});
--- a/browser/extensions/screenshots/webextension/selector/shooter.js
+++ b/browser/extensions/screenshots/webextension/selector/shooter.js
@@ -1,10 +1,10 @@
/* globals global, documentMetadata, util, uicontrol, ui, catcher */
-/* globals domainFromUrl, randomString */
+/* globals buildSettings, domainFromUrl, randomString */
"use strict";
this.shooter = (function() { // eslint-disable-line no-unused-vars
let exports = {};
const { AbstractShot } = window.shot;
const RANDOM_STRING_LENGTH = 16;
@@ -62,28 +62,41 @@ this.shooter = (function() { // eslint-d
}
let isSaving = null;
exports.takeShot = function(captureType, selectedPos) {
// 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
+ if (Math.floor(selectedPos.left) == Math.floor(selectedPos.right) ||
+ Math.floor(selectedPos.top) == Math.floor(selectedPos.bottom)) {
+ let exc = new Error("Empty selection");
+ exc.popupMessage = "EMPTY_SELECTION";
+ exc.noReport = true;
+ catcher.unhandled(exc);
+ return;
+ }
const uicontrol = global.uicontrol;
let deactivateAfterFinish = true;
if (isSaving) {
return;
}
isSaving = setTimeout(() => {
+ ui.Box.clearSaveDisabled();
isSaving = null;
}, 1000);
selectedPos = selectedPos.asJson();
- let captureText = util.captureEnclosedText(selectedPos);
+ let captureText = "";
+ if (buildSettings.captureText) {
+ captureText = util.captureEnclosedText(selectedPos);
+ }
let dataUrl = screenshotPage(selectedPos);
if (dataUrl) {
+ shot.delAllClips();
shot.addClip({
createdDate: Date.now(),
image: {
url: dataUrl,
captureType,
text: captureText,
location: selectedPos,
dimensions: {
--- a/browser/extensions/screenshots/webextension/selector/ui.js
+++ b/browser/extensions/screenshots/webextension/selector/ui.js
@@ -99,16 +99,18 @@ this.ui = (function() { // eslint-disabl
<style>${substitutedCss}</style>
<title></title>
</head>
<body></body>`;
installHandlerOnDocument(this.document);
if (this.addClassName) {
this.document.body.className = this.addClassName;
}
+ this.document.documentElement.dir = browser.i18n.getMessage("@@bidi_dir");
+ this.document.documentElement.lang = browser.i18n.getMessage("@@ui_locale");
resolve();
});
document.body.appendChild(this.element);
} else {
resolve();
}
});
},
@@ -241,16 +243,18 @@ this.ui = (function() { // eslint-disabl
</div>
</div>
</div>
</body>`;
installHandlerOnDocument(this.document);
if (this.addClassName) {
this.document.body.className = this.addClassName;
}
+ 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");
overlay.querySelector(".visible").textContent = browser.i18n.getMessage("saveScreenshotVisibleArea");
overlay.querySelector(".full-page").textContent = browser.i18n.getMessage("saveScreenshotFullPage");
overlay.querySelector(".myshots-button").addEventListener(
"click", watchFunction(assertIsTrusted(standardOverlayCallbacks.onOpenMyShots)));
overlay.querySelector(".visible").addEventListener(
@@ -532,16 +536,20 @@ this.ui = (function() { // eslint-disabl
if (target.nodeType === document.ELEMENT_NODE && target.classList.contains("highlight-buttons")) {
return true;
}
target = target.parentNode;
}
return false;
},
+ clearSaveDisabled() {
+ this.save.removeAttribute("disabled");
+ },
+
el: null,
boxTopEl: null,
boxLeftEl: null,
boxRightEl: null,
boxBottomEl: null
};
exports.HoverBox = {
--- a/browser/extensions/screenshots/webextension/selector/uicontrol.js
+++ b/browser/extensions/screenshots/webextension/selector/uicontrol.js
@@ -371,17 +371,17 @@ this.uicontrol = (function() {
start() {
selectedPos = mousedownPos = null;
this.cachedEl = null;
watchPromise(ui.iframe.display(installHandlersOnDocument, standardOverlayCallbacks).then(() => {
ui.iframe.usePreSelection();
ui.Box.remove();
const handler = watchFunction(assertIsTrusted(keyupHandler));
document.addEventListener("keyup", handler);
- registeredDocumentHandlers.push({name: "keyup", doc: document, handler});
+ registeredDocumentHandlers.push({name: "keyup", doc: document, handler, useCapture: false});
}));
},
mousemove(event) {
ui.PixelDimensions.display(event.pageX, event.pageY, event.pageX, event.pageY);
if (event.target.classList &&
(!event.target.classList.contains("preview-overlay"))) {
// User is hovering over a toolbar button or control
@@ -869,25 +869,31 @@ this.uicontrol = (function() {
return undefined;
}).bind(null, eventName));
primedDocumentHandlers.set(eventName, fn);
});
primedDocumentHandlers.set("keyup", keyupHandler);
window.addEventListener('beforeunload', beforeunloadHandler);
}
+ let mousedownSetOnDocument = false;
+
function installHandlersOnDocument(docObj) {
for (let [eventName, handler] of primedDocumentHandlers) {
let watchHandler = watchFunction(handler);
- docObj.addEventListener(eventName, watchHandler, eventName !== "keyup");
- registeredDocumentHandlers.push({name: eventName, doc: docObj, watchHandler});
+ let useCapture = eventName !== "keyup";
+ docObj.addEventListener(eventName, watchHandler, useCapture);
+ registeredDocumentHandlers.push({name: eventName, doc: docObj, handler: watchHandler, useCapture});
}
- let mousedownHandler = primedDocumentHandlers.get("mousedown");
- document.addEventListener("mousedown", mousedownHandler, true);
- registeredDocumentHandlers.push({name: "mousedown", doc: document, watchHandler: mousedownHandler, useCapture: true});
+ if (!mousedownSetOnDocument) {
+ let mousedownHandler = primedDocumentHandlers.get("mousedown");
+ document.addEventListener("mousedown", mousedownHandler, true);
+ registeredDocumentHandlers.push({name: "mousedown", doc: document, handler: mousedownHandler, useCapture: true});
+ mousedownSetOnDocument = true;
+ }
}
function beforeunloadHandler() {
sendEvent("cancel-shot", "tab-load");
exports.deactivate();
}
function keyupHandler(event) {