├── utils
├── __init__.py
├── locale-headers.pl
├── import-localized.pl
├── check-manifests.sh
├── check-locale-integration.py
├── check-accesskeys.py
├── build-sugar.sh
└── make-manifest-locales.pl
├── icon.png
├── chrome
├── content
│ ├── editor.css
│ ├── toolbarButton.png
│ ├── composing.xul
│ ├── headerViewTB68.xul
│ ├── headerView.xul
│ ├── ask.js
│ ├── ask.xul
│ └── backgrounding.xul
├── locale
│ ├── bg-BG
│ │ ├── headerView.dtd
│ │ ├── sendlater3.properties
│ │ ├── ask.dtd
│ │ ├── editor.dtd
│ │ └── prompt.dtd
│ ├── ca-ES
│ │ ├── headerView.dtd
│ │ ├── sendlater3.properties
│ │ ├── ask.dtd
│ │ └── editor.dtd
│ ├── cs-CZ
│ │ ├── headerView.dtd
│ │ ├── sendlater3.properties
│ │ ├── ask.dtd
│ │ ├── editor.dtd
│ │ └── prompt.dtd
│ ├── de-DE
│ │ ├── headerView.dtd
│ │ ├── sendlater3.properties
│ │ ├── ask.dtd
│ │ └── editor.dtd
│ ├── el-GR
│ │ ├── headerView.dtd
│ │ ├── sendlater3.properties
│ │ ├── ask.dtd
│ │ └── editor.dtd
│ ├── en-US
│ │ ├── headerView.dtd
│ │ ├── sendlater3.properties
│ │ ├── ask.dtd
│ │ ├── editor.dtd
│ │ └── prompt.dtd
│ ├── es-ES
│ │ ├── headerView.dtd
│ │ ├── sendlater3.properties
│ │ ├── ask.dtd
│ │ └── editor.dtd
│ ├── fi-FI
│ │ ├── headerView.dtd
│ │ ├── sendlater3.properties
│ │ ├── ask.dtd
│ │ └── editor.dtd
│ ├── fr-FR
│ │ ├── headerView.dtd
│ │ ├── sendlater3.properties
│ │ ├── ask.dtd
│ │ └── editor.dtd
│ ├── gl-ES
│ │ ├── headerView.dtd
│ │ ├── sendlater3.properties
│ │ ├── ask.dtd
│ │ └── editor.dtd
│ ├── he-IL
│ │ ├── headerView.dtd
│ │ ├── sendlater3.properties
│ │ ├── ask.dtd
│ │ ├── editor.dtd
│ │ └── prompt.dtd
│ ├── hu-HU
│ │ ├── headerView.dtd
│ │ ├── sendlater3.properties
│ │ ├── ask.dtd
│ │ └── editor.dtd
│ ├── hy-AM
│ │ ├── headerView.dtd
│ │ ├── sendlater3.properties
│ │ ├── ask.dtd
│ │ ├── prompt.dtd
│ │ └── prefwindow.dtd
│ ├── it-IT
│ │ ├── headerView.dtd
│ │ ├── sendlater3.properties
│ │ ├── ask.dtd
│ │ └── editor.dtd
│ ├── ja-JP
│ │ ├── headerView.dtd
│ │ ├── sendlater3.properties
│ │ ├── ask.dtd
│ │ ├── editor.dtd
│ │ ├── prompt.dtd
│ │ └── prefwindow.dtd
│ ├── nb-NO
│ │ ├── headerView.dtd
│ │ ├── sendlater3.properties
│ │ ├── ask.dtd
│ │ └── editor.dtd
│ ├── nl-NL
│ │ ├── headerView.dtd
│ │ ├── sendlater3.properties
│ │ ├── ask.dtd
│ │ └── editor.dtd
│ ├── pl-PL
│ │ ├── headerView.dtd
│ │ ├── sendlater3.properties
│ │ ├── ask.dtd
│ │ └── editor.dtd
│ ├── pt-BR
│ │ ├── headerView.dtd
│ │ ├── sendlater3.properties
│ │ ├── ask.dtd
│ │ └── editor.dtd
│ ├── pt-PT
│ │ ├── headerView.dtd
│ │ ├── sendlater3.properties
│ │ ├── ask.dtd
│ │ └── editor.dtd
│ ├── ro-RO
│ │ ├── headerView.dtd
│ │ ├── sendlater3.properties
│ │ ├── ask.dtd
│ │ └── editor.dtd
│ ├── ru-RU
│ │ ├── headerView.dtd
│ │ ├── sendlater3.properties
│ │ ├── ask.dtd
│ │ └── editor.dtd
│ ├── sv-SE
│ │ ├── headerView.dtd
│ │ ├── sendlater3.properties
│ │ ├── ask.dtd
│ │ └── editor.dtd
│ ├── tr-TR
│ │ ├── headerView.dtd
│ │ ├── ask.dtd
│ │ ├── editor.dtd
│ │ └── prompt.dtd
│ ├── zh-CN
│ │ ├── headerView.dtd
│ │ ├── sendlater3.properties
│ │ ├── ask.dtd
│ │ ├── editor.dtd
│ │ ├── prompt.dtd
│ │ └── prefwindow.dtd
│ ├── zh-TW
│ │ ├── headerView.dtd
│ │ ├── sendlater3.properties
│ │ ├── ask.dtd
│ │ ├── editor.dtd
│ │ ├── prompt.dtd
│ │ └── prefwindow.dtd
│ └── da-DK
│ │ ├── ask.dtd
│ │ └── editor.dtd
└── resource
│ └── dateparse.jsm
├── src
├── clock.jpg
├── stamp.png
├── logo-big.xcf
├── Green_arrow_right.svg.png
├── sample_cancel_button.jpg
└── l10n
│ ├── sl-SI
│ └── project_strings.csv
│ ├── tr-TR
│ └── project_strings.csv
│ ├── zh-CN
│ └── project_strings.csv
│ ├── zh-TW
│ └── project_strings.csv
│ ├── ja-JP
│ └── project_strings.csv
│ ├── he-IL
│ └── project_strings.csv
│ ├── en-US
│ └── project_strings.csv
│ ├── pt-PT
│ └── project_strings.csv
│ ├── fi-FI
│ └── project_strings.csv
│ ├── hy-AM
│ └── project_strings.csv
│ ├── fr-FR
│ └── project_strings.csv
│ ├── nb-NO
│ └── project_strings.csv
│ ├── sv-SE
│ └── project_strings.csv
│ ├── pl-PL
│ └── project_strings.csv
│ ├── ro-RO
│ └── project_strings.csv
│ ├── el-GR
│ └── project_strings.csv
│ ├── da-DK
│ └── project_strings.csv
│ ├── nl-NL
│ └── project_strings.csv
│ ├── it-IT
│ └── project_strings.csv
│ ├── cs-CZ
│ └── project_strings.csv
│ ├── gl-ES
│ └── project_strings.csv
│ ├── ru-RU
│ └── project_strings.csv
│ ├── ca-ES
│ └── project_strings.csv
│ ├── de-DE
│ └── project_strings.csv
│ ├── pt-BR
│ └── project_strings.csv
│ ├── hu-HU
│ └── project_strings.csv
│ ├── es-ES
│ └── project_strings.csv
│ └── bg-BG
│ └── project_strings.csv
├── .gitignore
├── .ignore-ids
├── crowdin.yaml.template
├── manifest.json
├── README.md
├── contrib
└── scheduling-functions
│ ├── FirstFourDaysOfEachMonth.slj
│ ├── NextChol.slj
│ ├── DaysBeforeNthWeekday.slj
│ └── README.md
├── exclude-manifest
├── chrome.manifest
├── defaults
└── preferences
│ └── sendlater3.js
└── Makefile
/utils/__init__.py:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jikamens/send-later/HEAD/icon.png
--------------------------------------------------------------------------------
/chrome/content/editor.css:
--------------------------------------------------------------------------------
1 | #code {
2 | font-family: monospace;
3 | }
4 |
--------------------------------------------------------------------------------
/src/clock.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jikamens/send-later/HEAD/src/clock.jpg
--------------------------------------------------------------------------------
/src/stamp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jikamens/send-later/HEAD/src/stamp.png
--------------------------------------------------------------------------------
/src/logo-big.xcf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jikamens/send-later/HEAD/src/logo-big.xcf
--------------------------------------------------------------------------------
/src/Green_arrow_right.svg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jikamens/send-later/HEAD/src/Green_arrow_right.svg.png
--------------------------------------------------------------------------------
/src/sample_cancel_button.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jikamens/send-later/HEAD/src/sample_cancel_button.jpg
--------------------------------------------------------------------------------
/chrome/locale/bg-BG/headerView.dtd:
--------------------------------------------------------------------------------
1 |
2 |
3 |
--------------------------------------------------------------------------------
/chrome/locale/ca-ES/headerView.dtd:
--------------------------------------------------------------------------------
1 |
2 |
3 |
--------------------------------------------------------------------------------
/chrome/locale/cs-CZ/headerView.dtd:
--------------------------------------------------------------------------------
1 |
2 |
3 |
--------------------------------------------------------------------------------
/chrome/locale/de-DE/headerView.dtd:
--------------------------------------------------------------------------------
1 |
2 |
3 |
--------------------------------------------------------------------------------
/chrome/locale/el-GR/headerView.dtd:
--------------------------------------------------------------------------------
1 |
2 |
3 |
--------------------------------------------------------------------------------
/chrome/locale/en-US/headerView.dtd:
--------------------------------------------------------------------------------
1 |
2 |
3 |
--------------------------------------------------------------------------------
/chrome/locale/es-ES/headerView.dtd:
--------------------------------------------------------------------------------
1 |
2 |
3 |
--------------------------------------------------------------------------------
/chrome/locale/fi-FI/headerView.dtd:
--------------------------------------------------------------------------------
1 |
2 |
3 |
--------------------------------------------------------------------------------
/chrome/locale/fr-FR/headerView.dtd:
--------------------------------------------------------------------------------
1 |
2 |
3 |
--------------------------------------------------------------------------------
/chrome/locale/gl-ES/headerView.dtd:
--------------------------------------------------------------------------------
1 |
2 |
3 |
--------------------------------------------------------------------------------
/chrome/locale/he-IL/headerView.dtd:
--------------------------------------------------------------------------------
1 |
2 |
3 |
--------------------------------------------------------------------------------
/chrome/locale/hu-HU/headerView.dtd:
--------------------------------------------------------------------------------
1 |
2 |
3 |
--------------------------------------------------------------------------------
/chrome/locale/hy-AM/headerView.dtd:
--------------------------------------------------------------------------------
1 |
2 |
3 |
--------------------------------------------------------------------------------
/chrome/locale/it-IT/headerView.dtd:
--------------------------------------------------------------------------------
1 |
2 |
3 |
--------------------------------------------------------------------------------
/chrome/locale/ja-JP/headerView.dtd:
--------------------------------------------------------------------------------
1 |
2 |
3 |
--------------------------------------------------------------------------------
/chrome/locale/nb-NO/headerView.dtd:
--------------------------------------------------------------------------------
1 |
2 |
3 |
--------------------------------------------------------------------------------
/chrome/locale/nl-NL/headerView.dtd:
--------------------------------------------------------------------------------
1 |
2 |
3 |
--------------------------------------------------------------------------------
/chrome/locale/pl-PL/headerView.dtd:
--------------------------------------------------------------------------------
1 |
2 |
3 |
--------------------------------------------------------------------------------
/chrome/locale/pt-BR/headerView.dtd:
--------------------------------------------------------------------------------
1 |
2 |
3 |
--------------------------------------------------------------------------------
/chrome/locale/pt-PT/headerView.dtd:
--------------------------------------------------------------------------------
1 |
2 |
3 |
--------------------------------------------------------------------------------
/chrome/locale/ro-RO/headerView.dtd:
--------------------------------------------------------------------------------
1 |
2 |
3 |
--------------------------------------------------------------------------------
/chrome/locale/ru-RU/headerView.dtd:
--------------------------------------------------------------------------------
1 |
2 |
3 |
--------------------------------------------------------------------------------
/chrome/locale/sv-SE/headerView.dtd:
--------------------------------------------------------------------------------
1 |
2 |
3 |
--------------------------------------------------------------------------------
/chrome/locale/tr-TR/headerView.dtd:
--------------------------------------------------------------------------------
1 |
2 |
3 |
--------------------------------------------------------------------------------
/chrome/locale/zh-CN/headerView.dtd:
--------------------------------------------------------------------------------
1 |
2 |
3 |
--------------------------------------------------------------------------------
/chrome/locale/zh-TW/headerView.dtd:
--------------------------------------------------------------------------------
1 |
2 |
3 |
--------------------------------------------------------------------------------
/chrome/content/toolbarButton.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jikamens/send-later/HEAD/chrome/content/toolbarButton.png
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | .#*
2 | *.pyc
3 | *.tmp
4 | *.xpi
5 | *~
6 | _locales
7 | crowdin.yaml
8 | exclude-manifest2
9 | build
10 |
--------------------------------------------------------------------------------
/chrome/locale/zh-TW/sendlater3.properties:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | extensions.sendlater3@kamens.us.description=用來預定傳送信件的時間寄信
3 |
--------------------------------------------------------------------------------
/chrome/locale/zh-CN/sendlater3.properties:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | extensions.sendlater3@kamens.us.description=以后发送用来预定发送消息的时间并延期发送
3 |
--------------------------------------------------------------------------------
/chrome/locale/ja-JP/sendlater3.properties:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | extensions.sendlater3@kamens.us.description=“Send Later”は指定した時間にメールを送信する機能を提供します。
3 |
--------------------------------------------------------------------------------
/chrome/locale/he-IL/sendlater3.properties:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | extensions.sendlater3@kamens.us.description='שלח מאוחר יותר' משמש לשליחת הודעות במועד עתידי
3 |
--------------------------------------------------------------------------------
/chrome/locale/gl-ES/sendlater3.properties:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | extensions.sendlater3@kamens.us.description=“Send Later” co obxetivo de programar a hora de envío
3 |
--------------------------------------------------------------------------------
/chrome/locale/pt-BR/sendlater3.properties:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | extensions.sendlater3@kamens.us.description=Função de “Send Later” para agendar horário de envio
3 |
--------------------------------------------------------------------------------
/chrome/locale/it-IT/sendlater3.properties:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | extensions.sendlater3@kamens.us.description=Funzione “Invia dopo” per pianificare l'orario degli invii
3 |
--------------------------------------------------------------------------------
/chrome/locale/es-ES/sendlater3.properties:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | extensions.sendlater3@kamens.us.description=Funcionalidad “Enviar más tarde” para programar la hora de envío.
3 |
--------------------------------------------------------------------------------
/chrome/locale/fi-FI/sendlater3.properties:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | extensions.sendlater3@kamens.us.description=Lisää mahdollisuuden ajastaa viestejä myöhemmin lähetettäviksi
3 |
--------------------------------------------------------------------------------
/chrome/locale/pt-PT/sendlater3.properties:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | extensions.sendlater3@kamens.us.description=Funcionalidade do “Enviar mais tarde” para marcar a hora de envio
3 |
--------------------------------------------------------------------------------
/chrome/locale/de-DE/sendlater3.properties:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | extensions.sendlater3@kamens.us.description=Eine erweiterte „Später senden”-Funktion zur Planung der Sendezeit
3 |
--------------------------------------------------------------------------------
/chrome/locale/hu-HU/sendlater3.properties:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | extensions.sendlater3@kamens.us.description=Teljes küldemény „Küldés később” az e-mail küldésének ütemezéséhez.
3 |
--------------------------------------------------------------------------------
/chrome/locale/ca-ES/sendlater3.properties:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | extensions.sendlater3@kamens.us.description=“Enviar més tard” és la funció per programar quan vols fer l'enviament.
3 |
--------------------------------------------------------------------------------
/chrome/locale/cs-CZ/sendlater3.properties:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | extensions.sendlater3@kamens.us.description=„Odeslat později“ umožňuje naplánovat čas pro pozdější odeslání emailu.
3 |
--------------------------------------------------------------------------------
/chrome/locale/en-US/sendlater3.properties:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | extensions.sendlater3@kamens.us.description=True “Send Later” functionality to schedule the time for sending an email.
3 |
--------------------------------------------------------------------------------
/chrome/locale/ru-RU/sendlater3.properties:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | extensions.sendlater3@kamens.us.description=“Send Later” - планировщик времени отправки сообщений электронной почты.
3 |
--------------------------------------------------------------------------------
/chrome/locale/nb-NO/sendlater3.properties:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | extensions.sendlater3@kamens.us.description=Sann "Send senere" -funksjonalitet for å planlegge tiden for å sende en e-post.
3 |
--------------------------------------------------------------------------------
/chrome/locale/fr-FR/sendlater3.properties:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | extensions.sendlater3@kamens.us.description=Véritable fonction d'« Envoyer Plus Tard » pour planifier le moment exact de l'envoi.
3 |
--------------------------------------------------------------------------------
/chrome/locale/hy-AM/sendlater3.properties:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | extensions.sendlater3@kamens.us.description=«Ուղարկել ավելի ուշ»-ը ապահովում է նամակները ավելի ուշ ուղարկելու հնարավորություն
3 |
--------------------------------------------------------------------------------
/chrome/locale/pl-PL/sendlater3.properties:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | extensions.sendlater3@kamens.us.description=Dodaje funkcję “wyślij później”, aby można było wysyłać wiadomości o zaplanowanym czasie.
3 |
--------------------------------------------------------------------------------
/chrome/locale/ro-RO/sendlater3.properties:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | extensions.sendlater3@kamens.us.description=Funcționalitate completă "Trimite mai târziu" pentru a programa trimiterea unui email.
3 |
--------------------------------------------------------------------------------
/chrome/locale/sv-SE/sendlater3.properties:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | extensions.sendlater3@kamens.us.description=“Skicka senare”-funktion som låter användaren schemalägga tidpunkten för sändning av ett e-brev.
3 |
--------------------------------------------------------------------------------
/chrome/locale/nl-NL/sendlater3.properties:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | extensions.sendlater3@kamens.us.description=Echte functionaliteit voor ‘Later verzenden’ om het verzendtijdstip van een e-mailbericht te plannen.
3 |
--------------------------------------------------------------------------------
/chrome/locale/bg-BG/sendlater3.properties:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | extensions.sendlater3@kamens.us.description=Истинска "Изпращане по-късно" функционалност за планиране на времето за изпращане на електронни съобщения.
3 |
--------------------------------------------------------------------------------
/chrome/locale/el-GR/sendlater3.properties:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | extensions.sendlater3@kamens.us.description=Πραγματική «Στείλετε αργότερα» λειτουργικότητα για να προγραμματίσετε την ώρα για την αποστολή μηνύματοςμέσω ηλεκτρονικού ταχυδρομείου.
3 |
--------------------------------------------------------------------------------
/src/l10n/sl-SI/project_strings.csv:
--------------------------------------------------------------------------------
1 | "AMODescription","","AMODescription
2 | Description of the add-on that appears under “Add-on Details” on the addons.thunderbird.net."
3 | "AMOComments","","The text that appears under “Developer’s Comments” for the add-on on addons.thunderbird.net."
4 |
--------------------------------------------------------------------------------
/src/l10n/tr-TR/project_strings.csv:
--------------------------------------------------------------------------------
1 | "AMODescription","","AMODescription
2 | Description of the add-on that appears under “Add-on Details” on the addons.thunderbird.net."
3 | "AMOComments","","The text that appears under “Developer’s Comments” for the add-on on addons.thunderbird.net."
4 |
--------------------------------------------------------------------------------
/.ignore-ids:
--------------------------------------------------------------------------------
1 | MsgComposeToolbarPalette
2 | already-button
3 | cmd_sendLater
4 | composeCommands
5 | expandedHeader2Rows
6 | expandedHeaders
7 | expandedHeaders2
8 | folderPaneBox
9 | headerRows
10 | key_sendLater
11 | pitch
12 | pledge-button
13 | remind-button
14 | status-bar
15 | stringbundleset
16 | tasksKeys
17 | threadCols
18 | threadTree
19 |
--------------------------------------------------------------------------------
/utils/locale-headers.pl:
--------------------------------------------------------------------------------
1 | #!/usr/bin/perl -i
2 |
3 | $last = "";
4 |
5 | while (<>) {
6 | if ($ARGV ne $last and ! /coding:/) {
7 | if ($ARGV =~ /\.properties$/) {
8 | print "# -*- coding: utf-8 -*-\n";
9 | }
10 | else {
11 | print "\n";
12 | }
13 | }
14 | $last = $ARGV;
15 | }
16 | continue {
17 | print;
18 | }
19 |
--------------------------------------------------------------------------------
/chrome/locale/tr-TR/ask.dtd:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/crowdin.yaml.template:
--------------------------------------------------------------------------------
1 | project_identifier: send-later
2 | api_key: {{api_key}}
3 | preserve_hierarchy: true
4 | files:
5 | - source: '/chrome/locale/en-US/*.dtd'
6 | translation: '/chrome/locale/%locale%/%original_file_name%'
7 | update_option: update_without_changes
8 |
9 | - source: '/chrome/locale/en-US/*.properties'
10 | translation: '/chrome/locale/%locale%/%original_file_name%'
11 | update_option: update_without_changes
12 |
13 | - source: '/src/l10n/en-US/*.csv'
14 | translation: '/src/l10n/%locale%/%original_file_name%'
15 | update_option: update_without_changes
16 |
--------------------------------------------------------------------------------
/chrome/content/composing.xul:
--------------------------------------------------------------------------------
1 |
2 |
3 |
5 |
6 |
7 |
8 |
9 |
11 |
14 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/chrome/locale/zh-CN/ask.dtd:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/chrome/locale/zh-TW/ask.dtd:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/chrome/locale/ja-JP/ask.dtd:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "__MSG_appName__",
3 | "version": "7.4.4",
4 | "description": "__MSG_appDesc__",
5 | "author": "Jonathan Kamens",
6 | "default_locale": "en-US",
7 | "homepage_url": "https://blog.kamens.us/send-later/",
8 | "legacy": {
9 | "options": {
10 | "page": "chrome://sendlater3/content/options.xul",
11 | "open_in_tab": true
12 | }
13 | },
14 | "applications": {
15 | "gecko": {
16 | "id": "sendlater3@kamens.us",
17 | "strict_min_version": "68.0a1",
18 | "strict_max_version": "71.*"
19 | }
20 | },
21 | "icons": {
22 | "48": "icon.png"
23 | },
24 | "manifest_version": 2
25 | }
26 |
--------------------------------------------------------------------------------
/chrome/locale/he-IL/ask.dtd:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/chrome/locale/cs-CZ/ask.dtd:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/src/l10n/zh-CN/project_strings.csv:
--------------------------------------------------------------------------------
1 | "AMODescription","在訊息編寫視窗更改“send later”命令(Ctrl + Shift + Return),這樣不單將該訊息複製到發件文件匣中,在上線時或“發送未發送消息”時發送消息,並會彈出一個對話框,允許您指定訊息何時發送。
2 |
3 | 您可以指定一個特定的時間和日期,或者點擊“15分鐘後”,“30分鐘後”或“2小時後”,或者點擊“放入發件箱”,使用Thunderbird內置的“稍後發送”功能 (即複製到發件文件匣)。
4 |
5 | 有關其他信息,請參閱用戶指南。
6 |
7 | 加入郵寄名單!
8 |
9 | Send Later使用Andrew Plummer的 SugarJS 。 謝謝Andrew!","AMODescription
10 | Description of the add-on that appears under “Add-on Details” on the addons.thunderbird.net."
11 | "AMOComments","請給我發送電子郵件 ,提供錯誤報告及建議等。","The text that appears under “Developer’s Comments” for the add-on on addons.thunderbird.net."
12 |
--------------------------------------------------------------------------------
/src/l10n/zh-TW/project_strings.csv:
--------------------------------------------------------------------------------
1 | "AMODescription","在訊息編寫視窗更改“send later”命令(Ctrl + Shift + Return),這樣不單將該訊息複製到發件文件匣中,在上線時或“發送未發送消息”時發送消息,並會彈出一個對話框,允許您指定訊息何時發送。
2 |
3 | 您可以指定一個特定的時間和日期,或者點擊“15分鐘後”,“30分鐘後”或“2小時後”,或者點擊“放入發件箱”,使用Thunderbird內置的“稍後發送”功能 (即複製到發件文件匣)。
4 |
5 | 有關其他信息,請參閱用戶指南。
6 |
7 | 加入郵寄名單!
8 |
9 | Send Later使用Andrew Plummer的 SugarJS 。 謝謝Andrew!","AMODescription
10 | Description of the add-on that appears under “Add-on Details” on the addons.thunderbird.net."
11 | "AMOComments","請給我發送電子郵件 ,提供錯誤報告及建議等。","The text that appears under “Developer’s Comments” for the add-on on addons.thunderbird.net."
12 |
--------------------------------------------------------------------------------
/chrome/locale/fr-FR/ask.dtd:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/chrome/locale/gl-ES/ask.dtd:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/chrome/locale/ru-RU/ask.dtd:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/chrome/locale/hy-AM/ask.dtd:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/chrome/locale/nl-NL/ask.dtd:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/chrome/locale/pl-PL/ask.dtd:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/chrome/locale/pt-PT/ask.dtd:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/chrome/locale/es-ES/ask.dtd:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/chrome/locale/hu-HU/ask.dtd:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/chrome/locale/ro-RO/ask.dtd:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/chrome/locale/bg-BG/ask.dtd:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/chrome/locale/ca-ES/ask.dtd:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/chrome/locale/el-GR/ask.dtd:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/chrome/locale/en-US/ask.dtd:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/chrome/locale/fi-FI/ask.dtd:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/chrome/locale/sv-SE/ask.dtd:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/chrome/locale/de-DE/ask.dtd:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/chrome/locale/it-IT/ask.dtd:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/chrome/locale/pt-BR/ask.dtd:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/chrome/locale/nb-NO/ask.dtd:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/chrome/locale/tr-TR/editor.dtd:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
--------------------------------------------------------------------------------
/src/l10n/ja-JP/project_strings.csv:
--------------------------------------------------------------------------------
1 | "AMODescription","メッセージ作成ウィンドウの""後で送信""コマンド(Ctrl+Shift+Return)を変更しました。
2 | 単にメッセージを送信箱にコピーして次回オンラインになった時や""未送信メッセージを送信する""を実行したときにそのメッセージが送信されるようにする代わりに、ダイアログが表示され、メッセージをいつ送信するかを指定できるようになります。
3 |
4 | 特定の日時を指定することもできますが、""15分後"", ""30分後""あるいは""2時間後"", or click ""Put in Outbox"" to get the built-in Thunderbird ""Send Later"" functionality (i.e., copy to Outbox).
5 |
6 | さらに詳しい情報はユーザーガイドをご覧ください。
7 |
8 | Send Lateユーザーのメーリングリストに参加してください!
9 |
10 | Send LaterはAndrew Plummer氏によるSugarJSを使用しています。ありがとうAndrew!","AMODescription
11 | Description of the add-on that appears under “Add-on Details” on the addons.thunderbird.net."
12 | "AMOComments","バグ報告や提案はこちらまでご連絡ください。","The text that appears under “Developer’s Comments” for the add-on on addons.thunderbird.net."
13 |
--------------------------------------------------------------------------------
/chrome/locale/da-DK/ask.dtd:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | (This repository is obsolete. Please see [https://github.com/Extended-Thunder/send-later/](https://github.com/Extended-Thunder/send-later/).)
2 |
3 | Send Later Thunderbird add-on
4 | ===================================================
5 |
6 | Add-on for allowing email messages to be scheduled to be sent later.
7 |
8 | AMO home page, from which the add-on can be downloaded and installed:
9 | [https://addons.thunderbird.net/thunderbird/addon/send-later-3/](
10 | https://addons.thunderbird.net/thunderbird/addon/send-later-3/)
11 |
12 | User guide: [https://blog.kamens.us/send-later/](
13 | https://blog.kamens.us/send-later/)
14 |
15 | Mailing list: [https://groups.google.com/forum/#!forum/send-later-users](
16 | https://groups.google.com/forum/#!forum/send-later-users)
17 |
18 | Author: Jonathan Kamens <[jik+sendlater3@kamens.us](
19 | mailto:jik+sendlater3@kamens.us)>
20 |
21 | Copyright (c) 2010-2015 Jonathan Kamens.
22 |
23 | Released under the terms of the Mozilla Public License, v. 2.0. The
24 | MPL can be found in the file [LICENSE](LICENSE).
25 |
--------------------------------------------------------------------------------
/contrib/scheduling-functions/FirstFourDaysOfEachMonth.slj:
--------------------------------------------------------------------------------
1 | {"version":2,"name":"FirstFourDaysOfEachMonth","help":"Schedule a recurring message to be sent at 9:00am on the first four days of every month. You can alter the behavior of the function with the following arguments in this order: hour at which to send the message (default 9), minutes after the hour to send the message (default 0), last day of each month to send the message (default 4).","body":"function getarg(idx, deflt) {
2 | if (args[idx] == null)
3 | return deflt;
4 | return args[idx];
5 | };
6 |
7 | if (! prev) {
8 | prev = new Date();
9 | }
10 | hour = getarg(0, 9);
11 | minute = getarg(1, 0);
12 | lastDay = getarg(2, 4);
13 | dayOfMonth = prev.getDate() + 1;
14 | month = prev.getMonth();
15 | year = prev.getFullYear();
16 | if (dayOfMonth > lastDay) {
17 | dayOfMonth = 1;
18 | month++;
19 | if (month > 11) { // month in JavaScript Date objects is 0-based
20 | month = 0;
21 | year++;
22 | }
23 | }
24 | next = new Date(year, month, dayOfMonth, hour, minute);
25 | nextspec = \"function \" + specname;
26 | nextargs = args;"}
--------------------------------------------------------------------------------
/src/l10n/he-IL/project_strings.csv:
--------------------------------------------------------------------------------
1 | "AMODescription","משנה את הפקודה ""שלח מאוחר יותר"" (Ctrl + Shift + Return) בחלון כתיבת הודעה, כך שבמקום להעתיק את ההודעה לתיבת הדואר היוצא היא תישלח בפעם הבאה שתתחבר לאינטרנט או שתבחר באפשרות ""שלח הודעות שלא נשלחו"", ותוצג תיבת דו שיח בה ניתן לציין מתי יש לשלוח את ההודעה.
2 |
3 | תוכל להגדיר תאריך ושעה ספציפיים, או ללחוץ ""בעוד 15 דקות"", ""בעוד 30 דקות"" או ""בעוד שעתיים"", או ללחוץ ""העבר לתיבת דואר יוצא"" כדי להשתמש בתכונה ""שלח מאוחר יותר"" המובנית של Thunderbird (כלומר, העתקה לתיבת דואר יוצא).
4 |
5 | לפרטים נוספים, עיין במדריך למשתמש.
6 |
7 | הצטרף לרשימת התפוצה!
8 |
9 | Send Later משתמש ב- SugarJS מאת אנדרו פלאמר. תודה, אנדרו!","AMODescription
10 | Description of the add-on that appears under “Add-on Details” on the addons.thunderbird.net."
11 | "AMOComments","נא לשלוח לי דיווחים על באגים, הצעות וכל דבר אחר.","The text that appears under “Developer’s Comments” for the add-on on addons.thunderbird.net."
12 |
--------------------------------------------------------------------------------
/src/l10n/en-US/project_strings.csv:
--------------------------------------------------------------------------------
1 | AMODescription,"Changes the ""Send Later"" command (Ctrl+Shift+Return) in the message composition window, so that instead of merely copying the message into your Outbox so that it is sent the next time you go online or do ""Send Unsent Messages"", a dialog pops up which allows you to specify when the message will be sent.
2 |
3 | You can specify a specific time and date, or click ""15 mins later"", ""30 mins later"" or ""2 hours later"", or click ""Put in Outbox"" to get the built-in Thunderbird ""Send Later"" functionality (i.e., copy to Outbox).
4 |
5 | For additional information, see the user guide.
6 |
7 | Join the mailing list!
8 |
9 | Send Later uses SugarJS by Andrew Plummer. Thanks Andrew!",Description of the add-on that appears under “Add-on Details” on the addons.thunderbird.net.
10 | AMOComments,"Please email me bug reports, suggestions, etc.",The text that appears under “Developer’s Comments” for the add-on on addons.thunderbird.net.
11 |
--------------------------------------------------------------------------------
/chrome/content/headerViewTB68.xul:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
32 |
--------------------------------------------------------------------------------
/src/l10n/pt-PT/project_strings.csv:
--------------------------------------------------------------------------------
1 | "AMODescription","Mudanças no comando (Ctrl+Shift+Return) ""Send Latter""na janela de composição da mensagem. Invés de meramente copiar a mensagem para a caixa de entrada da próxima vez que entrar online ou fazer ""sent Unsent Messages"" uma caixa de dialogo aparece e que lhe irá permitir qual a mensagem que será enviada.
2 |
3 | Pode especificar uma hora e uma data, ou escolher ""15min mais tarde"", ""30min lmais tarde"" or ""2h mais tarde"", ou clique em ""Put in Outbox"" para obter a funcionalidade do Thunderbird ""Send later"" (ex: copiar para a Outbox).
4 |
5 | Para mais informação veja user guide.
6 |
7 | Junte-se em mailing list!
8 |
9 | ""Send Later"" usa SugarJS by Andrew Plummer. Thanks Andrew!
10 |
11 | ","AMODescription
12 | Description of the add-on that appears under “Add-on Details” on the addons.thunderbird.net."
13 | "AMOComments","Envie-me por email, relatórios de bugs, sugestões, etc.","The text that appears under “Developer’s Comments” for the add-on on addons.thunderbird.net."
14 |
--------------------------------------------------------------------------------
/src/l10n/fi-FI/project_strings.csv:
--------------------------------------------------------------------------------
1 | "AMODescription","Muuttaa ""Lähetä myöhemmin"" komentoa (Ctrl+Shift+Return) viestin luonti-ikkunassa, jotta pelkän Lähtevät-kansioon kopioimisen sijasta se lähetetään kun luot yhteyden verkkoon tai painat ""Lähetä lähettämättömät viestit"", jolloin ilmestyy dialogi joka antaa sinun määritää milloin viesti lähetetään.
2 |
3 | Voit määrittää tietyn ajan ja päivämäärän tai painaa ""15 min myöhemmin"", ""30 min myöhemmin"" tai ""2 tuntia myöhemmin"" tai käyttää normaalia Thunderbirdin ""Lähetä myöhemmin"" toimintoa (jolloin viesti siis vain kopioidaan Lähtevät-kansioon).
4 |
5 | Lisätietoja saat käyttöohjeesta.
6 |
7 | Liity sähköpostilistalle!
8 |
9 | Send Later käyttää Andrew Plummerin SugarJS:ää. Kiitos Andrew!","AMODescription
10 | Description of the add-on that appears under “Add-on Details” on the addons.thunderbird.net."
11 | "AMOComments","Ole hyvä ja lähetä minulle sähköpostia virheistä, ehdotuksista jne.","The text that appears under “Developer’s Comments” for the add-on on addons.thunderbird.net."
12 |
--------------------------------------------------------------------------------
/src/l10n/hy-AM/project_strings.csv:
--------------------------------------------------------------------------------
1 | "AMODescription","Փոխում է ""Send Later"" հրամանը (Ctrl+Shift+Return) նամակը գրելու պատուհանում, որպեսզի այն պարզապես Ելքայինում պատճենելու փոխարեն ուղարկվի այն ժամանակ, երբ հաջորդ անգամ լինեք առցանց կամ կատարվի ""Ուղարկել չուղարկված նամակները"" հրահանգով: Կարող եք ինքներդ նշել, թե երբ պետք է ուղարկվի նամակը:
2 |
3 | Կարող եք նշել ձեր ցանակացած ամսաթիվը և ժամանակը կամ սեղմեք ""15 րոպե հետո"", ""30 րոպե հետո"" կամ ""2 ժամ հետո"" կամ՝ ""Տեղավորել Ելքայինում""՝ ունենալու համար Thunderbird-ի ներկառուցված ""Send Later"" գործառությունը (օր.՝ պատճենել Ելքային):
4 |
5 | Լրացուցիչ տեղեկությունների համար կարդացեք օգտվողի ձեռնարկը:
6 |
7 | Միացեք փոստառաքման մեր ցուցակին:
8 |
9 | Send Later-ը օգտագործում է SugarJS՝ Andrew Plummer-ի կողմից: Շնորհակալություն նրան:","AMODescription
10 | Description of the add-on that appears under “Add-on Details” on the addons.thunderbird.net."
11 | "AMOComments","Գրեք ինձ ցանկացած խնդրի հետ կապված:","The text that appears under “Developer’s Comments” for the add-on on addons.thunderbird.net."
12 |
--------------------------------------------------------------------------------
/src/l10n/fr-FR/project_strings.csv:
--------------------------------------------------------------------------------
1 | "AMODescription","Modifie la commande « Envoyer Plus Tard » (Ctrl + Maj + Retour) dans la fenêtre de composition de message, de sorte qu’au lieu de simplement envoyer le message, une boîte de dialogue apparaît qui vous permet d’indiquer quand le message sera envoyé.
2 |
3 | Vous pouvez spécifier une date et heure précise ou cliquer sur « 15 minutes plus tard », « 30 minutes plus tard » ou « 2 heures plus tard » ou cliquer sur « Envoyer Plus Tard » pour utiliser la fonction native de Thunderbird (copie le message dans la boîte d'envoi).
4 |
5 | Pour plus d’informations, consultez le guide de l’utilisateur.
6 |
7 | Inscrivez-vous sur la liste de diffusion !
8 |
9 | Envoyer Plus Tard utilise SugarJS par Andrew Plummer. Merci Andrew!","AMODescription
10 | Description of the add-on that appears under “Add-on Details” on the addons.thunderbird.net."
11 | "AMOComments","N'hésitez pas à m'envoyer des rapports de bug, suggestions, etc.","The text that appears under “Developer’s Comments” for the add-on on addons.thunderbird.net."
12 |
--------------------------------------------------------------------------------
/src/l10n/nb-NO/project_strings.csv:
--------------------------------------------------------------------------------
1 | "AMODescription","Endrer ""Send senere"" -kommandoen (Ctrl + Shift + Enter) i meldingsammensetningsvinduet, slik at i stedet for bare å kopiere meldingen til utgangen din slik at den sendes neste gang du går online eller gjør ""Send ikke sendte meldinger"" en dialogboks dukker opp som lar deg spesifisere når meldingen skal sendes.
2 |
3 | Du kan spesifisere en bestemt dato og klokkeslett, eller klikk ""15 minutter senere"", ""30 minutter senere"" eller ""2 timer senere"", eller klikk ""Sett inn i utgang"" for å få den innebygde Thunderbird ""Send later"" -funksjonaliteten (dvs., kopier til utgang).
4 |
5 | For mer informasjon, se brukerhåndboken .
6 |
7 | Bli med på postlisten !
8 |
9 | Send senere bruker SugarJS av Andrew Plummer. Takk Andrew!","AMODescription
10 | Description of the add-on that appears under “Add-on Details” on the addons.thunderbird.net."
11 | "AMOComments","Vennligst email meg feilrapporter, forslag, etc.","The text that appears under “Developer’s Comments” for the add-on on addons.thunderbird.net."
12 |
--------------------------------------------------------------------------------
/src/l10n/sv-SE/project_strings.csv:
--------------------------------------------------------------------------------
1 | "AMODescription","Ändrar kommandot ""Skicka senare"" (Ctrl+Skift+Retur) i Skriv-fönstret. Istället för att endast kopiera meddelandet till din utkorg, så att det skickas nästa gång du ansluter till Internet eller klickar på ""Skicka meddelanden som inte är skickade"", visas ett dialogfönster som låter dig bestämma när meddelandet skall skickas.
2 |
3 | Du kan ange en viss tid och ett visst datum, klicka på de förinställda värdena ""15 min senare"", ""30 min senare"" eller ""2 timmar senare"", eller klicka på ""Lägg i utkorgen"" för att använda Thunderbirds inbyggda ""Skicka senare""-funktion (d.v.s. kopiera till utkorgen).
4 |
5 | Läs användarhandboken för ytterligare information.
6 |
7 | Gå med i e-postlistan!
8 |
9 | Skicka senare använder SugarJS av Andrew Plummer. Tusen tack, Andrew!","AMODescription
10 | Description of the add-on that appears under “Add-on Details” on the addons.thunderbird.net."
11 | "AMOComments","Vänligen maila mig felrapporter, förslag, etc.","The text that appears under “Developer’s Comments” for the add-on on addons.thunderbird.net."
12 |
--------------------------------------------------------------------------------
/src/l10n/pl-PL/project_strings.csv:
--------------------------------------------------------------------------------
1 | "AMODescription","Zmienia wbudowane polecenie ""Wyślij później"" (Ctrl + Shift + Return) w oknie tworzenia wiadomości, tak, że zamiast zwykłego umieszczenia wiadomości w skrzynce nadawczej aby były wysyłane przy następnym przejściu w tryb online lub użycia polecenia ""Wyślij niewysłane wiadomości"", wyskakuje okno dialogowe które pozwala określić, kiedy wiadomość zostanie wysłana.
2 |
3 | Możesz podać datę i godzinę wysłania, lub wybrać opóźnienie ""za 15 min."", ""za 30 min."", ""za 2 godz."" albo użyć ""umieść w skrzynce nadawczej"" i pozwolić działać wbudowanej w Thunderibirda funkcjonalności ""Wyślij później"".
4 |
5 | Po dodatkowe informacje zajżyj do instrukcji.
6 |
7 | Dołącz się i zapisz się do listy mailingowej!
8 |
9 | Send Later używa SugarJS autorstwa Andrew Plummer. Dzięki Andrew!","AMODescription
10 | Description of the add-on that appears under “Add-on Details” on the addons.thunderbird.net."
11 | "AMOComments","Proszę przyślij mi informację o błędach, swoje sugestie, itp.","The text that appears under “Developer’s Comments” for the add-on on addons.thunderbird.net."
12 |
--------------------------------------------------------------------------------
/src/l10n/ro-RO/project_strings.csv:
--------------------------------------------------------------------------------
1 | "AMODescription","Schimbă comanda „Trimite mai târziu” (Ctrl+Shift+Return) din fereastra de compunere a mesajului: în loc ca mesajul să fie doar pus în dosarul „De trimis” pentru a fi trimis la următoarea operațiune de trimitere, fie când aplicația revine online fie la „Trimite mesajele neexpediate”, se va deschide o fereastra care permite programarea trimiterii mesajului.
2 |
3 | Se poate selecta fie o anumita dată/oră, fie „peste 15 minute”, „peste 30 minute” sau „peste 2 ore”, fie „Pune în „De trimis”” pentru a obține funcționalitatea implicită din Thunderbird pentru „Trimite mai târziu” (adică copiere în „De trimis”).
4 |
5 | Pentru informații suplimentare, vezi: ghidul utilizatorului.
6 |
7 | Înscrie-te în lista de corespondență!
8 |
9 | Send Later folosește SugarJS de Andrew Plummer. Mulțumesc Andrew!","AMODescription
10 | Description of the add-on that appears under “Add-on Details” on the addons.thunderbird.net."
11 | "AMOComments","Raportează erori sau trimite sugestii prin email.","The text that appears under “Developer’s Comments” for the add-on on addons.thunderbird.net."
12 |
--------------------------------------------------------------------------------
/src/l10n/el-GR/project_strings.csv:
--------------------------------------------------------------------------------
1 | "AMODescription","Αλλάζει το ""Send Later"" εντολής (Ctrl + Shift + Return) στο παράθυρο σύνθεση μηνύματος, έτσι ώστε αντί απλώς αντιγράφοντας το μήνυμα στο φάκελο ""Εξερχόμενα"", έτσι ώστε να αποσταλεί την επόμενη φορά που πηγαίνετε σε απευθείας σύνδεση ή να κάνετε «Αποστολή μη απεσταλμένα μηνύματα», ένα παράθυρο διαλόγου σκάει επάνω που σας επιτρέπει να καθορίσετε πότε θα σταλεί το μήνυμα.
2 | Μπορείτε να καθορίσετε μια συγκεκριμένη ώρα και ημερομηνία, ή κάντε κλικ στο κουμπί ""15 mins later"", ""30 mins later"" ή ""2 hours later"", ή κάντε κλικ στο κουμπί ""Put in Outbox"" για να πάρει το ενσωματωμένο Thunderbird""Send Later"" λειτουργία (δηλ., αντίγραφο στα εξερχόμενα).
3 | Για πρόσθετες πληροφορίες, ανατρέξτε στον λίστας αλληλογραφίας!
4 | Αποστολή αργότερα χρησιμοποιεί SugarJS by Andrew Plummer. Ευχαριστώ Andrew!","AMODescription
5 | Description of the add-on that appears under “Add-on Details” on the addons.thunderbird.net."
6 | "AMOComments","Παρακαλώ στείλτε μου μήνυμα μέσω του ηλεκτρονικού ταχυδρομείου αναφορές σφαλμάτων, εισηγήσεις, κλπ.","The text that appears under “Developer’s Comments” for the add-on on addons.thunderbird.net."
7 |
--------------------------------------------------------------------------------
/src/l10n/da-DK/project_strings.csv:
--------------------------------------------------------------------------------
1 | "AMODescription","Verandert het ""Send Later"" commando (Ctrl+Shift+Return) in het bericht aanmaken scherm, zodat in plaats van alleen maar kopiëren van het bericht in je Uitgaande mail map zodat het wordt verzonden de volgende keer dat je online gaat of ""Verzend nog niet verzonden berichten"" doet, een dialoogvenster opkomt dat het mogelijk maakt om aan te geven wanneer het bericht zal worden verzonden.
2 |
3 | Je kan een specifieke tijd en datum aangeven, of klik ""15 min. later"", ""30 min. later"" of 2 uur later"", of klik ""Zet in Uitgaande mail"" om de ingebouwde Thunderbird ""Send Later"" functionaliteit te krijgen (m.a.w. kopieer naar Uitgaande mail).
4 |
5 | Voor meer informatie, zie de gebruikershandleiding.
6 |
7 | Doe mee met de maillijst!
8 |
9 | Send Later gebruikt SugarJS van Andrew Plummer. Bedankt Andrew!","AMODescription
10 | Description of the add-on that appears under “Add-on Details” on the addons.thunderbird.net."
11 | "AMOComments","Stuur me a.u.b. bugrapporten, suggesties, enz.","The text that appears under “Developer’s Comments” for the add-on on addons.thunderbird.net."
12 |
--------------------------------------------------------------------------------
/src/l10n/nl-NL/project_strings.csv:
--------------------------------------------------------------------------------
1 | "AMODescription","Wijzigt de opdracht ‘Later verzenden’ (Ctrl+Shift+Return) in het berichtopstelvenster, zodat in plaats van alleen het bericht naar uw Postvak UIT te kopiëren en dit de volgende keer dat u online gaat of door ‘Niet-verzonden berichten verzenden’ te kiezen wordt verzonden, een dialoogvenster verschijnt waarmee u kunt opgeven wanneer het bericht wordt verzonden.
2 |
3 | U kunt een bepaalde tijd en datum opgeven, of op ‘15 min. later’, ‘30 min. later’ of ‘2 uur later’ klikken, of op ‘In Postvak UIT plaatsen’ klikken voor de ingebouwde functionaliteit voor ‘Later verzenden’ van Thunderbird (m.a.w. kopiëren naar Postvak UIT).
4 |
5 | Zie de gebruikershandleiding voor aanvullende informatie.
6 |
7 | Schrijf u in voor de mailinglijst!
8 |
9 | Send Later gebruikt SugarJS van Andrew Plummer. Bedankt Andrew!","AMODescription
10 | Description of the add-on that appears under “Add-on Details” on the addons.thunderbird.net."
11 | "AMOComments","Bugrapporten, suggesties etc. zijn welkom via e-mail.","The text that appears under “Developer’s Comments” for the add-on on addons.thunderbird.net."
12 |
--------------------------------------------------------------------------------
/src/l10n/it-IT/project_strings.csv:
--------------------------------------------------------------------------------
1 | "AMODescription","Modifica il comando ""Invia Dopo"" (Ctrl+Shift+Invio) nella finistra di composizione del messaggio, cosi che invece che semplicemente copiare il messaggio nella tua Posta in Uscita perchè venga inviato la prossima volta che sei online o esegui ""Invia Messaggi in Uscita"", compare una finestra di dialogo che ti permette di specificare quando il messaggio debba essere inviato.
2 |
3 | Puoi indicare una specifica data e ora, o cliccare ""Tra 15 minuti"", ""Tra 30 minuti"" or ""Tra 2 ore"", o cliccare ""Metti nella Posta in Uscita"" per replicare la funzionalità nativa di Thunderbird ""Invia Dopo"" (ovvero, copiare nella Posta in Uscita).
4 |
5 | Per ulteriori informazioni, leggi il manuale utente.
6 |
7 | Iscriviti alla mailing list!
8 |
9 | Send Later usa SugarJS di Andrew Plummer. Grazie Andrew!","AMODescription
10 | Description of the add-on that appears under “Add-on Details” on the addons.thunderbird.net."
11 | "AMOComments","Ti prego di inviarmi via email segnalazioni di bug, consigli, ecc.","The text that appears under “Developer’s Comments” for the add-on on addons.thunderbird.net."
12 |
--------------------------------------------------------------------------------
/src/l10n/cs-CZ/project_strings.csv:
--------------------------------------------------------------------------------
1 | "AMODescription","Upravuje příkaz „Odeslat později“ (Ctrl + Shift + Return) v okně pro vytvoření zprávy, takže místo pouhého zkopírování zprávy do složky „Pošta k odeslání“, aby byla odeslána později při dalším připojení, nebo při použití funkce „Odeslat neodeslané zprávy“, se otevře dialogové okno, ve kterém můžete určit, kdy má být zpráva odeslána.
2 |
3 | Pro pozdější odeslání zprávy můžete určit konkrétní čas a datum, nebo použít předvolby „Za 15 minut“, „Za 30 minut“ a „Za 2 hodiny“, nebo kliknout na „Dát do „Pošty k odeslání““ pro použití originální funkce „Odeslat později“ v Thunderbirdu (tj., zkopírovat zprávu do složky „Pošty k odeslání“).
4 |
5 | Další informace naleznete v uživatelské příručce.
6 |
7 | Připojte se k mailing listu!
8 |
9 | „Odeslat později“ využívá SugarJS od Andrew Plummera. Díky Andrew!","AMODescription
10 | Description of the add-on that appears under “Add-on Details” on the addons.thunderbird.net."
11 | "AMOComments","Prosím pošlete mi hlášení o chybách, návrhy na vylepšení atd.","The text that appears under “Developer’s Comments” for the add-on on addons.thunderbird.net."
12 |
--------------------------------------------------------------------------------
/chrome/content/headerView.xul:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
36 |
--------------------------------------------------------------------------------
/src/l10n/gl-ES/project_strings.csv:
--------------------------------------------------------------------------------
1 | "AMODescription","Muda o comando ""enviar máis tarde"" (Ctrl+May+Enter) na fiestra de composición de mensaxes, para que en troques de simplemente copiar a mensaxe ó cartafol de Saída para enviarse a seguinte vez que Vd. se conecte (ou execute ""procesar mensaxes"" non enviados), un diálogo apareza para permitirlle especificar cándo se enviará a mensaxe.
2 |
3 | Pode especificar unha data e hora específicas ou facer click en ""15 minutos máis tarde"", ""30 minutos máis tarde"" ou ""2 horas máis tarde"", ou, alternativamente, premer ""enviar á Bandexa de Saída"" para ter a funcionalidade nativa de Thunderbird para envío diferido.
4 |
5 | Para información adicional, mire a guía de usuario en: Send Later user guide.
6 |
7 | Apúntese á lista de correo en: mailing list!
8 |
9 | Send Later utiliza SugarJS por Andrew Plummer. ¡Grazas Andrew!","AMODescription
10 | Description of the add-on that appears under “Add-on Details” on the addons.thunderbird.net."
11 | "AMOComments","Envíeme por email, informes de erros, suxestións, etc.","The text that appears under “Developer’s Comments” for the add-on on addons.thunderbird.net."
12 |
--------------------------------------------------------------------------------
/src/l10n/ru-RU/project_strings.csv:
--------------------------------------------------------------------------------
1 | "AMODescription","Вызывайте команду ""Send Later"" (Ctrl+Shift+Return) из окна редактирования письма, чтобы взамен простого копирования сообщения в вашу папку «Исходящие» оно было бы отправлено в следующий раз, когда вы будете онлайн или отправите «Неотправленные сообщения». Эту команду возможно изменить в диалоговом окне, позволяющем указать время отправки сообщения.
2 |
3 | Чтобы воспользоваться встроенной функцией ""Send Later"" в Thunderbird (например, скопировать в папку «Исходящие»), Вы можете установить определенное время и дату или нажать на клавиши ""15 минут спустя"", или ""30 минут спустя"", или ""2 часа спустя"", или ""Поместить в папку «Исходящие»"".
4 |
5 | Для дополнительной информации смотрите Руководство Пользователя.
6 |
7 | Подпишитесь на рассылку!
8 |
9 | Send Later использует SugarJS Андрея Пламмера. Спасибо, Андрей!","AMODescription
10 | Description of the add-on that appears under “Add-on Details” on the addons.thunderbird.net."
11 | "AMOComments","Пожалуйста, пишите мне о возникших ошибках, предложениях и т.д.","The text that appears under “Developer’s Comments” for the add-on on addons.thunderbird.net."
12 |
--------------------------------------------------------------------------------
/src/l10n/ca-ES/project_strings.csv:
--------------------------------------------------------------------------------
1 | "AMODescription","Modifica la comanda ""Enviar més tard"" (Ctrl+Majúsc+Intro) a la finestra de redacció, de manera que en comptes de copiar el missatge a la safata de sortida perquè s'enviï la propera vegada que es connecti o es doni l'ordre d'""Enviar els missatges pendents"", es mostra una finestra emergent que permet especificar quan s'enviarà el missatge.
2 |
3 | Es pot especificar una data i hora, o seleccionar ""15 minuts després"", ""30 minuts després"" o ""2 hores després"", o marcar ""Enviar a la safata de sortida"" per obtenir la funcionalitat pròpia per ""Enviar més tard"" de Thunderbird, és a dir, copiar a la safata de sortida.
4 |
5 | Per informació addicional, pot consultar la guia d'usuari.
6 |
7 | Uneix-te a la llista de correus!
8 |
9 | Send Later utilitza SugarJS d'Andrew Plummer. Gràcies Andrew!","AMODescription
10 | Description of the add-on that appears under “Add-on Details” on the addons.thunderbird.net."
11 | "AMOComments","Si us plau envia'm un correu si trobes qualsevol problema, tens alguna suggerència, etc.","The text that appears under “Developer’s Comments” for the add-on on addons.thunderbird.net."
12 |
--------------------------------------------------------------------------------
/chrome/locale/tr-TR/prompt.dtd:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
--------------------------------------------------------------------------------
/contrib/scheduling-functions/NextChol.slj:
--------------------------------------------------------------------------------
1 | {"version":2,"name":"NextChol","help":"Schedules the message to send a short time after the end of the current Sabbath or Jewish holiday, or the next Sabbath or Jewish Holiday if it isn't currently one (e.g., if you use this function on a regular Thursday the message will be scheduled to be sent Saturday night. Useful if you use email at these times but don't want to offend your Jewish friends who don't.
2 | ","body":"Components.utils.importGlobalProperties([\"XMLHttpRequest\"]);
3 | // See https://jewish-holidays.kamens.us/next-chol?help' for supported cities.
4 | var city = 'Boston';
5 | var url = 'https://jewish-holidays.kamens.us/next-chol?force&city=' + city;
6 | //var req = Components.classes[\"@mozilla.org/xmlextras/xmlhttprequest;1\"].
7 | // createInstance();
8 | var req = new XMLHttpRequest();
9 | req.open('GET', url, false);
10 | req.send();
11 | if (req.readyState != 4)
12 | return;
13 | if (req.status != 200) {
14 | msg = 'Error fetching from ' + url;
15 | throw(msg);
16 | }
17 | var matches = req.responseText.match(/^\\s*(\\d+)/);
18 | if (matches.length < 1) {
19 | msg = url + \" did not return a number\";
20 | throw(msg);
21 | }
22 | var unix_time = matches[1];
23 | next = new Date();
24 | next.setTime(unix_time * 1000);
25 | next.setMinutes(next.getMinutes() + Math.floor(Math.random() * 15));
26 | "}
--------------------------------------------------------------------------------
/src/l10n/de-DE/project_strings.csv:
--------------------------------------------------------------------------------
1 | "AMODescription","Verändert den „Später senden”-Befehl (Strg+Umschalt+Enter) im Entwurfs-Fenster so, dass die Nachricht nicht nur in den Postausgang kopiert und bei der nächsten Sitzung versendet wird oder mit „Nachrichten aus Postausgang senden” verschickt werden kann, sondern ein Dialog erscheint, in dem Sie genauer angeben können, wann die Nachricht versendet werden soll.
2 |
3 | Sie können spezifische Zeit- und Datumsangaben machen oder entweder „in 15 Minuten”, „in 30 Minuten”, „in zwei Stunden” bzw. „In den Postausgang verschieben” auswählen, um die „Später senden”-Funktion von Thunderbird zu verwenden (d.h. die Nachricht in den Postausgang zu verschieben.)
4 |
5 | Für weitere Informationen lesen Sie das Handbuch.
6 |
7 | Treten Sie der Mailing-Liste bei!
8 |
9 | Später senden benutzt SugarJS von Andrew Plummer. Danke Andrew!","AMODescription
10 | Description of the add-on that appears under “Add-on Details” on the addons.thunderbird.net."
11 | "AMOComments","Bitte schreiben Sie mir für Fehlerberichte, Vorschläge und Ähnliches eine E-Mail.","The text that appears under “Developer’s Comments” for the add-on on addons.thunderbird.net."
12 |
--------------------------------------------------------------------------------
/src/l10n/pt-BR/project_strings.csv:
--------------------------------------------------------------------------------
1 | "AMODescription","Altera o ""Enviar mais tarde"" (Ctrl + Shift + Return) na janela de composição da mensagem, de modo que em vez de simplesmente copiar a mensagem em sua caixa de saída para que ele seja enviada na próxima vez que estiver online ou ""Enviar mensagens não enviadas"", aparece uma janela que lhe permite especificar quando a mensagem será enviada.
2 |
3 | Você pode especificar uma data e hora, ou clique em ""15 minutos mais tarde"", ""30 minutos mais tarde"" ou ""2 horas mais tarde"", ou clique em ""Coloque na Caixa de saída"" para obter o built-in Thunderbird ""Enviar mais tarde"" funcionalidade (ou seja, copiar a caixa de saída).
4 |
5 | Para obter informações adicionais, consulte o guia do usuário.
6 |
7 | Junte-se à lista de discussão!
8 |
9 | Enviar mais tarde usa SugarJS por Andrew Plummer. Obrigado Andrew!","AMODescription
10 | Description of the add-on that appears under “Add-on Details” on the addons.thunderbird.net."
11 | "AMOComments","Envie-me por e-mail, relatórios de bugs, sugestões, etc, para jik+sendlater3@kamens.us.","The text that appears under “Developer’s Comments” for the add-on on addons.thunderbird.net."
12 |
--------------------------------------------------------------------------------
/src/l10n/hu-HU/project_strings.csv:
--------------------------------------------------------------------------------
1 | "AMODescription","Az üzenet-összetétel ablakban megváltoztatja a „Küldés később” parancsot (Ctrl+Shift+Enter), hogy ahelyett, hogy csak az üzeneteket másolná a Kimenő mappába, hogy elküldje a következő alkalommal, amikor online megy, vagy „Postázandó üzenetek elküldése”, megjelenik egy párbeszédablak, amely lehetővé teszi, hogy megadja, mikor küld az üzenet.
2 |
3 | Megadhat egy adott időpontot és dátumot, vagy kattintson a „15 perccel később”, „30 perccel később” vagy „2 órával később” gombra, vagy kattintson a „Kimenő üzenetek” gombra a beépített Thunderbird „Küldés később” funkciójának eléréséhez (azaz, másolja a Postázandó üzenetek mappába).
4 |
5 | További tájékoztatókért kattintson ide a felhasználói útmutató megtekintéséhez.
6 |
7 | Csatlakozzon a levelezési listához!
8 |
9 | A Küldés később használja a Plummer András által SugarJS készített alkalmazást. Köszönöm, András!","AMODescription
10 | Description of the add-on that appears under “Add-on Details” on the addons.thunderbird.net."
11 | "AMOComments","Kérem, írjon nekem hibajelentéseket, javaslatokat stb.","The text that appears under “Developer’s Comments” for the add-on on addons.thunderbird.net."
12 |
--------------------------------------------------------------------------------
/src/l10n/es-ES/project_strings.csv:
--------------------------------------------------------------------------------
1 | "AMODescription","Cambia el comando ""enviar después"" (Ctrl+May+Enter) en la ventana de composición de mensajes, para que en vez de simplemente copiar el mensaje a la bandeja de salida para enviarse la siguiente vez que Vd. se conecte (o ejecute ""procesar mensajes"" no enviados), un diálogo aparezca para permitirle especificar cuándo se enviará el mensaje.
2 |
3 | Puede especificar una fecha y hora específicas o hacer click en ""15 minutos más tarde"", ""30 minutos más tarde"" o ""2 horas más tarde"", o, alternativamente, pulsar ""enviar a bandeja de salida"" para tener la funcionalidad nativa de Thunderbird para envío diferido.
4 |
5 | Para información adicional, mire la guía de usuario en: Send Later user guide.
6 |
7 | Apúntese a la ilsta de correo en: mailing list!
8 |
9 | EnviarDespués (SendeLater) utiliza SugarJS por Andrew Plummer. ¡Gracias Andrew!","AMODescription
10 | Description of the add-on that appears under “Add-on Details” on the addons.thunderbird.net."
11 | "AMOComments","Envíeme un correo con problemas (bugs) o sugerencias... (preferiblemente en inglés).","The text that appears under “Developer’s Comments” for the add-on on addons.thunderbird.net."
12 |
--------------------------------------------------------------------------------
/src/l10n/bg-BG/project_strings.csv:
--------------------------------------------------------------------------------
1 | "AMODescription","Променя командата ""Изпращане по-късно"" (Ctrl + Shift + Return) в прозореца за съставяне на съобщения, така че вместо просто да копира съобщението във вашата Изходяща кутия, за да бъде изпратено следващия път, когато отворите приложението или изпращате ""Изпращане на неизпратените писма"", отваря диалогов прозорец, който ви позволява да посочите, кога да бъде изпратено съобщението.
2 |
3 | Може да зададете определено време и дата, или да щракнете върху ""15 минути по-късно"", ""30 минути по-късно"" или ""2 часа по-късно"", или да щракнете върху ""Поставяне в изходящи"", за да получите вградената в Thunderbird ""Изпращане по-късно"" функционалност (т.е., копиране в папка ""Изходяща кутия"").
4 |
5 | За допълнителна информация вижте ръководство на потребителя.
6 |
7 | Присъединете се към пощенския списък!
8 |
9 | Изпращане по-късно използва SugarJS от Андрю Плъмър. Благодаря Андрю!","AMODescription
10 | Description of the add-on that appears under “Add-on Details” on the addons.thunderbird.net."
11 | "AMOComments","Моля, пишете ми за възникнали грешки, предложения и др.","The text that appears under “Developer’s Comments” for the add-on on addons.thunderbird.net."
12 |
--------------------------------------------------------------------------------
/chrome/locale/zh-CN/editor.dtd:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
--------------------------------------------------------------------------------
/utils/import-localized.pl:
--------------------------------------------------------------------------------
1 | #!/usr/bin/perl
2 |
3 | use FindBin;
4 |
5 | chdir($FindBin::Bin) or die;
6 |
7 | open(LOCALIZED, "<:utf8", "chrome/locale/BZ_localized.txt") or die;
8 |
9 | while () {
10 | if (m,(.*),) {
11 | $locale = $1;
12 | next;
13 | }
14 | if (m,(.*),) {
15 | die if (! $locale);
16 | $descriptions{$locale} = $1;
17 | $locale = undef;
18 | next;
19 | }
20 | }
21 | close(LOCALIZED);
22 |
23 | open(NEW, ">:utf8", "install.rdf.new") or die;
24 | open(OLD, "<:utf8", "install.rdf") or die;
25 |
26 | $locale = undef;
27 | while () {
28 | if (//) {
29 | $started = 1;
30 | next;
31 | }
32 | next if (! $started);
33 | if (m,(.*),) {
34 | $locale = $1;
35 | next;
36 | }
37 | if (m,(.*),) {
38 | die if (! $locale);
39 | $old = $1;
40 | $new = $descriptions{$locale};
41 | if ($new) {
42 | if ($old eq $new) {
43 | warn "Locale $locale unchanged\n";
44 | }
45 | else {
46 | warn "Locale $locale changed\n";
47 | $changed = 1;
48 | s,().*(),$1$new$2,;
49 | }
50 | }
51 | else {
52 | warn "$locale missing from BZ_localized.txt\n";
53 | }
54 | }
55 | }
56 | continue {
57 | print(NEW) or die;
58 | }
59 |
60 | close(OLD) or die;
61 | close(NEW) or die;
62 |
63 | if ($changed) {
64 | rename("install.rdf.new", "install.rdf") or die;
65 | }
66 | else {
67 | unlink("install.rdf.new");
68 | }
69 |
--------------------------------------------------------------------------------
/chrome/content/ask.js:
--------------------------------------------------------------------------------
1 | function Sendlater3AskDonate() {
2 | var url = "https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=jik%40kamens%2eus&lc=US&item_name=Send%20Later%20add%2don%20%28%245%2e00%20recommended%20donation%2c%20but%20give%20what%20you%27d%20like%21%29¤cy_code=USD&bn=PP%2dDonationsBF%3abtn_donat";
3 | var protocolSvc = Components
4 | .classes["@mozilla.org/uriloader/external-protocol-service;1"]
5 | .getService(Components.interfaces.nsIExternalProtocolService);
6 | var uri = Components.classes["@mozilla.org/network/io-service;1"]
7 | .getService(Components.interfaces.nsIIOService)
8 | .newURI(url, null, null);
9 | protocolSvc.loadURI(uri);
10 | // -1 == already donated, -2 == stop asking
11 | SL3U.setIntPref("ask.sent", -1);
12 | window.close();
13 | }
14 |
15 | function Sendlater3AskRemind() {
16 | // Preferences were already updated when window was popped up.
17 | window.close();
18 | }
19 |
20 | function Sendlater3AskAlready() {
21 | // -1 == already donated, -2 == stop asking
22 | SL3U.setIntPref("ask.sent", -1);
23 | window.close();
24 | }
25 |
26 | function Sendlater3AskStop() {
27 | // -1 == already donated, -2 == stop asking
28 | SL3U.setIntPref("ask.sent", -2);
29 | window.close();
30 | }
31 |
32 | function Sendlater3AskInit() {
33 | window.removeEventListener("load", Sendlater3AskInit, false);
34 | SL3U.initUtil();
35 | }
36 |
37 | window.addEventListener("load", Sendlater3AskInit, false);
38 | window.addEventListener("unload", SL3U.uninitUtil, false);
39 |
--------------------------------------------------------------------------------
/chrome/locale/zh-TW/editor.dtd:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
--------------------------------------------------------------------------------
/chrome/content/ask.xul:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
7 |
8 |
9 |
10 | &sendlater.ask.message1;
11 |
12 | &sendlater.ask.message2;
13 |
14 | &sendlater.ask.message3;
15 |
16 |
17 |
20 |
21 |
24 |
25 |
28 |
29 |
32 |
33 |
34 |
35 |
--------------------------------------------------------------------------------
/chrome/locale/ja-JP/editor.dtd:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
--------------------------------------------------------------------------------
/exclude-manifest:
--------------------------------------------------------------------------------
1 | Makefile
2 | README.md
3 | TESTS.txt
4 | TODO.txt
5 | TRANSLATING.md
6 | chrome/content/custom-datepicker-bindings/datetimepicker.css
7 | chrome/content/datetimepicker.xml
8 | crowdin.yaml
9 | crowdin.yaml.template
10 | exclude-manifest
11 | include-manifest
12 | src/Green_arrow_right.svg.png
13 | src/clock.jpg
14 | src/l10n/bg-BG/project_strings.csv
15 | src/l10n/ca-ES/project_strings.csv
16 | src/l10n/cs-CZ/project_strings.csv
17 | src/l10n/da-DK/project_strings.csv
18 | src/l10n/de-DE/project_strings.csv
19 | src/l10n/el-GR/project_strings.csv
20 | src/l10n/en-US/project_strings.csv
21 | src/l10n/es-ES/project_strings.csv
22 | src/l10n/fi-FI/project_strings.csv
23 | src/l10n/fr-FR/project_strings.csv
24 | src/l10n/gl-ES/project_strings.csv
25 | src/l10n/he-IL/project_strings.csv
26 | src/l10n/hu-HU/project_strings.csv
27 | src/l10n/hy-AM/project_strings.csv
28 | src/l10n/it-IT/project_strings.csv
29 | src/l10n/ja-JP/project_strings.csv
30 | src/l10n/sl-SI/project_strings.csv
31 | src/l10n/nb-NO/project_strings.csv
32 | src/l10n/nl-NL/project_strings.csv
33 | src/l10n/pl-PL/project_strings.csv
34 | src/l10n/pt-BR/project_strings.csv
35 | src/l10n/pt-PT/project_strings.csv
36 | src/l10n/ro-RO/project_strings.csv
37 | src/l10n/ru-RU/project_strings.csv
38 | src/l10n/sv-SE/project_strings.csv
39 | src/l10n/tr-TR/project_strings.csv
40 | src/l10n/zh-CN/project_strings.csv
41 | src/l10n/zh-TW/project_strings.csv
42 | src/logo-big.xcf
43 | src/sample_cancel_button.jpg
44 | src/stamp.png
45 | utils/__init__.py
46 | utils/build-sugar.sh
47 | utils/check-accesskeys.py
48 | utils/check-locale-integration.py
49 | utils/check-locales.pl
50 | utils/check-manifests.sh
51 | utils/fix-addon-ids.pl
52 | utils/import-localized.pl
53 | utils/locale-headers.pl
54 | utils/locale_file.py
55 | utils/make-manifest-locales.pl
56 | utils/propagate_strings.py
57 |
--------------------------------------------------------------------------------
/chrome.manifest:
--------------------------------------------------------------------------------
1 | content sendlater3 chrome/content/
2 | content sendlater3-defaults defaults/
3 | resource sendlater3 chrome/resource/
4 | locale sendlater3 bg chrome/locale/bg-BG/
5 | locale sendlater3 ca chrome/locale/ca-ES/
6 | locale sendlater3 cs chrome/locale/cs-CZ/
7 | locale sendlater3 da-DK chrome/locale/da-DK/
8 | locale sendlater3 de chrome/locale/de-DE/
9 | locale sendlater3 el chrome/locale/el-GR/
10 | locale sendlater3 en-US chrome/locale/en-US/
11 | locale sendlater3 es chrome/locale/es-ES/
12 | locale sendlater3 fi chrome/locale/fi-FI/
13 | locale sendlater3 fr chrome/locale/fr-FR/
14 | locale sendlater3 gl-ES chrome/locale/gl-ES/
15 | locale sendlater3 he chrome/locale/he-IL/
16 | locale sendlater3 hu chrome/locale/hu-HU/
17 | locale sendlater3 hy-AM chrome/locale/hy-AM/
18 | locale sendlater3 it-IT chrome/locale/it-IT/
19 | locale sendlater3 ja chrome/locale/ja-JP/
20 | locale sendlater3 nb-NO chrome/locale/nb-NO/
21 | locale sendlater3 nl chrome/locale/nl-NL/
22 | locale sendlater3 pl chrome/locale/pl-PL/
23 | locale sendlater3 pt-BR chrome/locale/pt-BR/
24 | locale sendlater3 pt-PT chrome/locale/pt-PT/
25 | locale sendlater3 ro-RO chrome/locale/ro-RO/
26 | locale sendlater3 ru-RU chrome/locale/ru-RU/
27 | locale sendlater3 sv chrome/locale/sv-SE/
28 | locale sendlater3 tr chrome/locale/tr-TR/
29 | locale sendlater3 zh-CN chrome/locale/zh-CN/
30 | locale sendlater3 zh-TW chrome/locale/zh-TW/
31 | overlay chrome://messenger/content/messenger.xul chrome://sendlater3/content/backgrounding.xul
32 | overlay chrome://messenger/content/messenger.xul chrome://sendlater3/content/headerViewTB68.xul appversion<71
33 | overlay chrome://messenger/content/messenger.xul chrome://sendlater3/content/headerView.xul appversion>70
34 | overlay chrome://messenger/content/messengercompose/messengercompose.xul chrome://sendlater3/content/composing.xul
35 | overlay chrome://messenger/content/messengercompose/messengercompose.xul chrome://sendlater3/content/composeToolbar.xul
36 |
--------------------------------------------------------------------------------
/chrome/locale/he-IL/editor.dtd:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
--------------------------------------------------------------------------------
/utils/check-manifests.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | WHOAMI="$(basename "$0")"
4 | INCLUDES=include-manifest
5 | EXCLUDES=exclude-manifest
6 | CHECK_OVERLAP=false
7 | CHECK_EXTRA=false
8 | CHECK_MISSING=false
9 | EXIT_STATUS=0
10 | TMP_PREFIX="/tmp/$WHOAMI.$$"
11 |
12 | trap "rm -f $TMP_PREFIX.*" EXIT
13 |
14 | while [ -n "$1" ] ; do
15 | case "$1" in
16 | "--includes") shift; INCLUDES="$1"; shift ;;
17 | "--excludes") shift; EXCLUDES="$1"; shift ;;
18 | "--overlap") shift; CHECK_OVERLAP=true ;;
19 | "--extra") shift; CHECK_EXTRA=true ;;
20 | "--missing") shift; CHECK_MISSING=true ;;
21 | *) echo "Unrecognized argument: $1" 1>&2; exit 1 ;;
22 | esac
23 | done
24 |
25 | if ! ($CHECK_OVERLAP || $CHECK_EXTRA || $CHECK_MISSING); then
26 | echo "Must specify at least one of --overlap, --extra, --missing" 1>&2
27 | exit 1
28 | fi
29 |
30 | if [ ! -f "$INCLUDES" ]; then
31 | echo "Could not find $INCLUDES" 1>&2
32 | exit 1
33 | fi
34 |
35 | if [ ! -f "$EXCLUDES" ]; then
36 | echo "Could not find $EXCLUDES" 1>&2
37 | exit 1
38 | fi
39 |
40 | if $CHECK_OVERLAP; then
41 | if comm -12 <(sort -u "$INCLUDES") <(sort -u "$EXCLUDES") | grep .; then
42 | echo "The files listed above are in both $INCLUDES and $EXCLUDES." 1>&2
43 | EXIT_STATUS=1
44 | fi
45 | fi
46 |
47 | if $CHECK_EXTRA || $CHECK_MISSING; then
48 | DISK_LIST="$TMP_PREFIX.disk"
49 |
50 | find * \( \( -name '.??*' -o -name '*~' -o -name '.\#*' -o \
51 | -name '*.xpi' -o -name '\#*' -o -name core -o \
52 | -name '*.tmp' -o -name '*.pyc' \) -prune \) \
53 | -o -type f -print | sort > "$DISK_LIST"
54 |
55 |
56 | if $CHECK_EXTRA; then
57 | MERGED_LIST="$TMP_PREFIX.merged"
58 | sort -u -o "$MERGED_LIST" "$INCLUDES" "$EXCLUDES"
59 | if comm -13 "$MERGED_LIST" "$DISK_LIST" | grep .; then
60 | echo "The files listed above aren't in $INCLUDES or $EXCLUDES." 1>&2
61 | EXIT_STATUS=1
62 | fi
63 | fi
64 |
65 | if $CHECK_MISSING && comm -23 "$INCLUDES" "$DISK_LIST" | grep .; then
66 | echo "The files listed above are missing." 1>&2
67 | EXIT_STATUS=1
68 | fi
69 | fi
70 |
71 | exit $EXIT_STATUS
72 |
--------------------------------------------------------------------------------
/contrib/scheduling-functions/DaysBeforeNthWeekday.slj:
--------------------------------------------------------------------------------
1 | {"version":2,"name":"DaysBeforeNthWeekday","help":"Send an email n days before a specific day of the week on a specific week of the month, e.g., \"9:00am five days before the 4th Wednesday of the month.\" Arguments:
2 | - Recurring -- true or false value indicating whether this is a recurring message (default false)
3 | - Weekday to look for (0 is Sunday, 1 is Monday, etc.); default is Wednesday (3)
4 | - Which week of the month to look for (first, second, third, etc.) (default is 4th)
5 | - How many days in advance to send the message (default is 5)
6 | - Hour at which to send the message (default is 9)
7 | - Minutes after the hour at which to send the message (default is 0)
8 | Specifying \"-\" for any argument is the same as not specifying the argument at all.
9 | If today is the day the email should be sent, the message will be scheduled for today even if the hour and minute are earlier than the current time, which means that Send Later will send out ","body":" function getarg(num, deflt) {
10 | if (args[num] == '-' || args[num] === undefined)
11 | return deflt;
12 | return args[num];
13 | }
14 |
15 | recurring = getarg(0, false);
16 | weekday = getarg(1, 3);
17 | week_number = getarg(2, 4);
18 | days_in_advance = getarg(3, 5);
19 | send_hour = getarg(5, 9);
20 | send_minute = getarg(5, 0);
21 |
22 | one_day_value = 24 * 60 * 60 * 1000;
23 | in_advance_value = one_day_value * days_in_advance;
24 |
25 | if (prev)
26 | now = new Date(prev.valueOf() + one_day_value);
27 | else
28 | now = new Date();
29 |
30 | while (true) {
31 | then = new Date(now.valueOf() + in_advance_value);
32 | if (then.getDay() == weekday &&
33 | Math.floor((then.getDate() - 1) / 7) == week_number - 1) {
34 | break;
35 | }
36 | now = new Date(now.valueOf() + one_day_value);
37 | }
38 |
39 | now.setHours(send_hour);
40 | now.setMinutes(send_minute);
41 | now.setSeconds(0);
42 | now.setMilliseconds(0);
43 |
44 | next = now;
45 |
46 | if (recurring) {
47 | nextspec = \"function \" + specname;
48 | nextargs = [true, weekday, week_number, days_in_advance,
49 | send_hour, send_minute];
50 | }
51 | "}
--------------------------------------------------------------------------------
/chrome/locale/en-US/editor.dtd:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
--------------------------------------------------------------------------------
/chrome/locale/cs-CZ/editor.dtd:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
--------------------------------------------------------------------------------
/chrome/locale/fi-FI/editor.dtd:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
--------------------------------------------------------------------------------
/chrome/locale/ru-RU/editor.dtd:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
--------------------------------------------------------------------------------
/chrome/locale/nb-NO/editor.dtd:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
--------------------------------------------------------------------------------
/chrome/locale/ro-RO/editor.dtd:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
--------------------------------------------------------------------------------
/chrome/locale/sv-SE/editor.dtd:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
--------------------------------------------------------------------------------
/chrome/locale/pl-PL/editor.dtd:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
--------------------------------------------------------------------------------
/chrome/locale/da-DK/editor.dtd:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
--------------------------------------------------------------------------------
/chrome/locale/hu-HU/editor.dtd:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
--------------------------------------------------------------------------------
/chrome/locale/pt-BR/editor.dtd:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
--------------------------------------------------------------------------------
/chrome/locale/fr-FR/editor.dtd:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
--------------------------------------------------------------------------------
/utils/check-locale-integration.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python3
2 |
3 | # Confirms that every locale in chrome/locale is properly listed in
4 | # chrome.manifest, and that there are no extra locales listed there.
5 |
6 | import glob
7 | import json
8 | import lxml.etree
9 | import os
10 | import sys
11 | from utils.locale_file import LocaleFile
12 |
13 | LOCALE_DIR = 'chrome/locale'
14 |
15 | ###
16 | ### Read locales from chrome.manifest
17 | ###
18 |
19 | def read_chrome_manifest():
20 | manifest = {}
21 | with open('chrome.manifest') as f:
22 | for line in f:
23 | fields = line.split()
24 | if fields[0] != 'locale':
25 | continue
26 | if fields[1] != 'sendlater3':
27 | raise Exception('Bad second field in chrome.manifest: {}'.
28 | format(line))
29 | if not fields[3].endswith('/'):
30 | raise Exception('Bad fourth field (no trailing slash) in '
31 | 'chrome.manifest: {}'.format(line))
32 | manifest[fields[3][0:-1]] = fields[2]
33 | return manifest
34 |
35 |
36 | def check_locale(manifest, locale_dir):
37 | name_file = os.path.join(locale_dir, 'prompt.properties')
38 | description_file = os.path.join(locale_dir, 'sendlater3.properties')
39 |
40 | try:
41 | name = LocaleFile(name_file)['MessageTag']
42 | except:
43 | name = None
44 | print('Warning: {}: No add-on name'.format(locale_dir))
45 |
46 | try:
47 | description = LocaleFile(description_file)[
48 | 'extensions.sendlater3@kamens.us.description']
49 | except KeyError:
50 | description = None
51 | print('Warning: {}: No add-on description'.format(
52 | locale_dir))
53 |
54 | try:
55 | locale_code = manifest.pop(locale_dir)
56 | except:
57 | print('ERROR: {}: not in chrome.manifest'.format(locale_dir))
58 | return False
59 |
60 | ok = True
61 |
62 | return ok
63 |
64 |
65 | def main():
66 | manifest = read_chrome_manifest()
67 | ok = True
68 |
69 | locale_dirs = glob.glob(os.path.join(LOCALE_DIR, '*'))
70 | locale_dirs.sort()
71 |
72 | for dir in locale_dirs:
73 | ok = check_locale(manifest, dir) and ok
74 |
75 | for dir in manifest:
76 | print('ERROR: {}: Extra directory in manifest'.format(dir))
77 | ok = False
78 |
79 | sys.exit(0 if ok else 1)
80 |
81 |
82 | if __name__ == '__main__':
83 | main()
84 |
--------------------------------------------------------------------------------
/chrome/locale/it-IT/editor.dtd:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
--------------------------------------------------------------------------------
/chrome/locale/gl-ES/editor.dtd:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
--------------------------------------------------------------------------------
/chrome/locale/ca-ES/editor.dtd:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
--------------------------------------------------------------------------------
/chrome/locale/es-ES/editor.dtd:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
--------------------------------------------------------------------------------
/chrome/locale/pt-PT/editor.dtd:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
--------------------------------------------------------------------------------
/chrome/locale/nl-NL/editor.dtd:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
--------------------------------------------------------------------------------
/utils/check-accesskeys.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python3
2 |
3 | import codecs
4 | from collections import OrderedDict
5 | import glob
6 | import os
7 | import re
8 | import sys
9 | import unicodedata
10 |
11 |
12 | symbolic_languages = ('ja', 'ja-JP', 'zh-CN', 'zh-TW')
13 |
14 |
15 | def remove_accents(input_str):
16 | nfkd_form = unicodedata.normalize('NFKD', input_str)
17 | return u"".join([c for c in nfkd_form if not unicodedata.combining(c)])
18 |
19 |
20 | def check_file(file_name):
21 | locale = os.path.basename(os.path.dirname(file_name))
22 | ok = True
23 | labels = {}
24 | access_keys = OrderedDict()
25 | seen_keys = {}
26 | with codecs.open(file_name, encoding='utf-8') as f:
27 | for line in f:
28 | match = re.match(r'', line)
29 | if match:
30 | labels[match.group(1)] = match.group(2)
31 | continue
32 | match = re.match(r'', line)
33 | if match:
34 | access_keys[match.group(1)] = match.group(2)
35 | continue
36 | for name, access_key in access_keys.items():
37 | unaccented_key = remove_accents(access_key)
38 | lower_key = unaccented_key.lower()
39 | if lower_key not in seen_keys:
40 | seen_keys[lower_key] = name
41 | try:
42 | label = labels[name]
43 | except KeyError:
44 | ok = False
45 | print(u"{0}: No {1}.label corresponding to {1}.accesskey".format(
46 | file_name, name))
47 | continue
48 | unaccented_label = remove_accents(label)
49 | if len(access_key) != 1:
50 | ok = False
51 | print(u"{0}: {1}.accesskey \"{2}\" isn't one character".format(
52 | file_name, name, access_key))
53 | continue
54 | if access_key not in label and unaccented_key not in unaccented_label \
55 | and locale not in symbolic_languages:
56 | ok = False
57 | print(u"{0}: {1}: access key \"{2}\" not in label \"{3}\"".format(
58 | file_name, name, access_key, label))
59 | if seen_keys[lower_key] != name:
60 | ok = False
61 | print(u"{0}: access key \"{1}\" for {2} conflicts with {3}".
62 | format(file_name, access_key, name, seen_keys[lower_key]))
63 | return ok
64 |
65 |
66 | ok = True
67 |
68 | for file_name in sorted(glob.glob("chrome/locale/*/*.dtd")):
69 | ok = check_file(file_name) and ok
70 |
71 | sys.exit(0 if ok else 1)
72 |
--------------------------------------------------------------------------------
/defaults/preferences/sendlater3.js:
--------------------------------------------------------------------------------
1 | pref("extensions.sendlater3.checktimepref", 1);
2 | pref("extensions.sendlater3.checktimepref.is_milliseconds", false);
3 | // See http://kb.mozillazine.org/Localize_extension_descriptions
4 | pref("extensions.sendlater3@kamens.us.description", "chrome://sendlater3/locale/sendlater3.properties");
5 | pref("extensions.sendlater3.quickoptions.1.label","");
6 | pref("extensions.sendlater3.quickoptions.2.label","");
7 | pref("extensions.sendlater3.quickoptions.3.label","");
8 | pref("extensions.sendlater3.quickoptions.1.valuestring","15");
9 | pref("extensions.sendlater3.quickoptions.2.valuestring","30");
10 | pref("extensions.sendlater3.quickoptions.3.valuestring","120");
11 | pref("extensions.sendlater3.showheader",true);
12 | pref("extensions.sendlater3.showcolumn",true);
13 | pref("extensions.sendlater3.showstatus",true);
14 | // "Info" for terse logging, "Debug" for verbose logging, "Trace" for everything
15 | pref("extensions.sendlater3.logging.console","Warn");
16 | pref("extensions.sendlater3.logging.dump","Fatal");
17 | pref("extensions.sendlater3.logging.filter","");
18 | pref("extensions.sendlater3.sendunsentmessages",true);
19 | pref("extensions.sendlater3.senddrafts",true);
20 | pref("extensions.sendlater3.sendbutton",false);
21 | pref("extensions.sendlater3.send_does_delay", false);
22 | pref("extensions.sendlater3.send_delay", 1);
23 | pref("extensions.sendlater3.show_edit_alert",true);
24 | pref("extensions.sendlater3.show_outbox_alert",true);
25 | pref("extensions.sendlater3.show_sendnow_alert",true);
26 | pref("extensions.sendlater3.alt_binding",false);
27 | pref("extensions.sendlater3.send_while_offline",true);
28 | pref("extensions.sendlater3.enforce_restrictions", false);
29 | pref("extensions.sendlater3.block_late_messages", false);
30 | pref("extensions.sendlater3.late_grace_period", 5);
31 | // Internal settings not to be messed with
32 | pref("extensions.sendlater3.activescanner.last_uuid","");
33 | pref("extensions.sendlater3.activescanner.uuid","");
34 | pref("extensions.sendlater3.activescanner.time",0);
35 | pref("extensions.sendlater3.instance.uuid","");
36 | pref("extensions.sendlater3.ask.time", 0);
37 | pref("extensions.sendlater3.ask.sent", 0);
38 | pref("extensions.sendlater3.ask.quit",true);
39 | pref("extensions.sendlater3.relnotes","");
40 | pref("extensions.sendlater3.disabled_for_enigmail",false);
41 | pref("extensions.sendlater3.editor.first_use", true);
42 | pref("extensions.sendlater3.prompt.defaults", "");
43 | pref("extensions.sendlater3.mark_drafts_read", true);
44 | pref("extensions.sendlater3.compose_window_hot_keys", true);
45 |
--------------------------------------------------------------------------------
/chrome/locale/bg-BG/editor.dtd:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
--------------------------------------------------------------------------------
/chrome/locale/zh-TW/prompt.dtd:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
--------------------------------------------------------------------------------
/Makefile:
--------------------------------------------------------------------------------
1 | SHELL=/bin/bash
2 | export LC_COLLATE=C
3 | export PYTHONPATH=$(CURDIR)
4 |
5 | all: send_later.xpi
6 |
7 | send_later.xpi: utils/check-locales.pl utils/propagate_strings.py \
8 | utils/check-accesskeys.py utils/check-locale-integration.py \
9 | utils/check-manifests.sh Makefile include-manifest exclude-manifest2 \
10 | $(shell ls $(shell cat include-manifest) 2>/dev/null)
11 | -rm -rf build
12 | ./utils/check-manifests.sh --excludes exclude-manifest2 --overlap \
13 | --extra
14 | ./utils/fix-addon-ids.pl --check
15 | ./utils/make-manifest-locales.pl
16 | ./utils/check-locale-integration.py
17 | mkdir build
18 | # Some locale files are generated dynamically below, and therefore
19 | # tar won't be able to find them here.
20 | tar c --files-from include-manifest \
21 | 2> >(egrep -v '^tar: chrome/.*: No such file or directory|due to previous errors' \
22 | >/tmp/$@.errors) | tar -C build -x
23 | @if [ -s /tmp/$@.errors ]; then \
24 | cat /tmp/$@.errors; \
25 | exit 1; \
26 | fi
27 | @rm -f /tmp/$@.errors
28 | cd build; ../utils/check-locales.pl --replace
29 | cd build; ../utils/propagate_strings.py
30 | cd build; ../utils/check-accesskeys.py
31 | cd build; ../utils/check-manifests.sh --includes ../include-manifest \
32 | --excludes ../exclude-manifest2 --missing --extra
33 | cd build; zip -q -r $@.tmp -@ < ../include-manifest
34 | mv build/$@.tmp $@
35 |
36 | clean:: ; -rm -rf *.xpi *.tmp */*.pyc _locales build
37 | clean:: ; -rm -f exclude-manifest2
38 |
39 | exclude-manifest2: exclude-manifest
40 | cat $< > $@.tmp
41 | echo $@ >> $@.tmp
42 | find contrib -type f >> $@.tmp
43 | mv -f $@.tmp $@
44 |
45 | locale_import: crowdin.yaml
46 | crowdin-cli download translations
47 | sed -i -e '/^$$/d' $$(ls chrome/locale/*/* | grep -v /en-US/)
48 | sed -i -e 's/\(/dev/null
55 |
56 | locale_export: crowdin.yaml
57 | crowdin-cli upload sources
58 |
59 | # Be very careful about this because it could mess with translation
60 | # work in progress.
61 | upload_translations:
62 | crowdin-cli upload translations --import-eq-suggestions
63 |
64 | crowdin.yaml: crowdin.yaml.template
65 | set -e; echo -n "Enter Crowdin API key: "; read api_key; \
66 | sed -e "s/{{api_key}}/$$api_key/" $< > $@.tmp
67 | mv -f $@.tmp $@
68 |
--------------------------------------------------------------------------------
/chrome/locale/zh-CN/prompt.dtd:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
--------------------------------------------------------------------------------
/utils/build-sugar.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash -ex
2 |
3 | commitish=4adba2e6ef8c8734a693af3141461dec6d674d50
4 |
5 | cd /tmp
6 | rm -rf Sugar-$commitish
7 | wget -q https://github.com/andrewplummer/Sugar/archive/$commitish.zip
8 | unzip -q $commitish.zip
9 | rm $commitish.zip
10 | cd Sugar-$commitish
11 | patch -p1 -s <<\EOF
12 | commit 9bc728a3efab8e4d49f7ffac1c047eb70cfeb391
13 | Author: Jonathan Kamens
14 | Date: Mon Aug 5 09:45:01 2019 -0400
15 |
16 | Fix for getting global context in recent Firefox and Thunderbird
17 |
18 | If we can't get the global contest from either `global` or `window`
19 | and `Cu.getGlobalForObject` exists, then use that.
20 |
21 | See https://developer.mozilla.org/docs/Mozilla/Tech/XPCOM/Language_Bindings/Components.utils.getGlobalForObject.
22 |
23 | Fixes andrewplummer/Sugar#627.
24 |
25 | diff --git a/lib/core.js b/lib/core.js
26 | index 9b28df75..7734598d 100644
27 | --- a/lib/core.js
28 | +++ b/lib/core.js
29 | @@ -50,8 +50,13 @@ var DefaultChainable = getNewChainableClass('Chainable');
30 | function getGlobal() {
31 | // Get global context by keyword here to avoid issues with libraries
32 | // that can potentially alter this script's context object.
33 | - return testGlobal(typeof global !== 'undefined' && global) ||
34 | - testGlobal(typeof window !== 'undefined' && window);
35 | + var ret = testGlobal(typeof global !== 'undefined' && global) ||
36 | + testGlobal(typeof window !== 'undefined' && window);
37 | + if (ret) return ret;
38 | + // Firefox / Thunderbird specific
39 | + if (typeof Cu != 'undefined' && typeof Cu.getGlobalForObject != 'undefined')
40 | + ret = testGlobal(Cu.getGlobalForObject(getGlobal));
41 | + return ret;
42 | }
43 |
44 | function testGlobal(obj) {
45 |
46 | commit 1aa90d738fa590bb26687c26356980fec706b8c5
47 | Author: Jonathan Kamens
48 | Date: Mon Aug 5 09:30:00 2019 -0400
49 |
50 | Don't convert locale directory names to lower case
51 |
52 | Fixes andrewplummer/Sugar#654
53 |
54 | diff --git a/gulpfile.js b/gulpfile.js
55 | index ee3c7aa4..9b9d2e63 100644
56 | --- a/gulpfile.js
57 | +++ b/gulpfile.js
58 | @@ -793,7 +793,7 @@ function getLocalePaths(l) {
59 | var codes = getLocaleCodes(l);
60 |
61 | function getPath(l) {
62 | - return path.join('lib', 'locales', l.toLowerCase() + '.js');
63 | + return path.join('lib', 'locales', l + '.js');
64 | }
65 |
66 | codes.forEach(function(n) {
67 |
68 | EOF
69 | npm -s install
70 | ./node_modules/.bin/gulp build:dev --silent -m all -l all
71 |
72 | test -f sugar-custom.js
73 | echo "The build file sugar-custom.js is what's in Send Later."
74 |
--------------------------------------------------------------------------------
/chrome/resource/dateparse.jsm:
--------------------------------------------------------------------------------
1 | var EXPORTED_SYMBOLS = ["DateParse", "DateToSugarDate", "SugarLocale"];
2 |
3 | // Using mozIJSSubScriptLoader instead of Cu.import because I want to
4 | // preserve SugarJS unmodified from the official
5 | // distribution, and it doesn't define EXPORTED_SYMBOLS, which is
6 | // required by CU.import.
7 | var loader = Components.classes["@mozilla.org/moz/jssubscript-loader;1"]
8 | .getService(Components.interfaces.mozIJSSubScriptLoader);
9 | loader.loadSubScript("resource://sendlater3/sugar.js", null, "UTF-8");
10 |
11 | // https://github.com/andrewplummer/Sugar/issues/605
12 | Sugar.Date.extend();
13 |
14 | var didLocale = false;
15 | var locale;
16 |
17 | function getLocale() {
18 | if (! didLocale) {
19 | didLocale = true;
20 | var locales;
21 | try {
22 | locales = Components.classes[
23 | "@mozilla.org/intl/localeservice;1"]
24 | .getService(Components.interfaces.mozILocaleService)
25 | .appLocalesAsLangTags;
26 | console.log("Found potential locales: " + locales);
27 | }
28 | catch (ex) {
29 | console.log("Locale exception: " + ex);
30 | locales = [];
31 | }
32 | for (var l of locales) {
33 | // Sugar may not recognize the locale. It throws an error when
34 | // an unrecognized locale is passed in and the locale is
35 | // needed.
36 | try {
37 | (new Date()).format(null, l);
38 | locale = l;
39 | console.log("Using locale " + l + " with Sugar");
40 | return locale;
41 | }
42 | catch (ex) {
43 | console.log("Locale unrecognized by Sugar: " + l);
44 | }
45 | console.log("Failed to find a Locale that Sugar recognizes");
46 | }
47 | }
48 | return locale;
49 | }
50 |
51 | function DateParse(date) {
52 | // Sugar.Date.create is actually Sugar.Date.parse. It returns an unextended
53 | // Date object. Since we call Date.extend above, the core Date constructor
54 | // now returns an extended object, so we use that after parsing to create
55 | // an extended object.
56 | var locale = getLocale();
57 | var obj = new Date(
58 | Sugar.Date.create(date, {locale: locale, future: true}));
59 | if (! (obj.isValid() || locale.substr(0, 2) == "en")) {
60 | // Fall back on English date rules
61 | obj = new Date(Sugar.Date.create(date, {future: true}));
62 | }
63 | return obj;
64 | }
65 |
66 | function DateToSugarDate(date) {
67 | return new Date(date);
68 | }
69 |
70 | function SugarLocale() {
71 | return getLocale();
72 | }
73 |
--------------------------------------------------------------------------------
/chrome/locale/de-DE/editor.dtd:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
--------------------------------------------------------------------------------
/chrome/locale/el-GR/editor.dtd:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
--------------------------------------------------------------------------------
/utils/make-manifest-locales.pl:
--------------------------------------------------------------------------------
1 | #!/usr/bin/perl
2 |
3 | use strict;
4 | use warnings;
5 |
6 | use File::Path 'make_path';
7 | use JSON;
8 |
9 | my %locale_dirs;
10 |
11 | open(MANIFEST, "<", "chrome.manifest") or die;
12 | while () {
13 | next if (! /^locale\s+\S+\s+(\S+)\s+(\S+)/);
14 | $locale_dirs{$1} = $2;
15 | }
16 | close(MANIFEST) or die;
17 |
18 | my($default_name, $default_description) = &load_locale($locale_dirs{'en-US'});
19 |
20 | foreach my $locale (keys %locale_dirs) {
21 | my($name, $description) = &load_locale($locale_dirs{$locale}, $default_name,
22 | $default_description);
23 | &save_locale($locale, $name, $description);
24 | }
25 |
26 | sub load_locale {
27 | my($dir, $default_name, $default_description) = @_;
28 | my($name, $description);
29 | if (! open(PROP, "<:utf8", "$dir/prompt.properties")) {
30 | warn "Warning: No ${dir}prompt.properties\n";
31 | $name = $default_name;
32 | }
33 | else {
34 | while () {
35 | chomp;
36 | if (s/^MessageTag=//) {
37 | $name = $_;
38 | last;
39 | }
40 | }
41 | if (! $name) {
42 | warn "Warning: No MessageTag in ${dir}prompt.properties\n";
43 | $name = $default_name;
44 | }
45 | close(PROP) or die;
46 | }
47 | if (! open(PROP, "<:utf8", "$dir/sendlater3.properties")) {
48 | warn "Warning: No ${dir}sendlater3.properties\n";
49 | $description = $default_description;
50 | }
51 | else {
52 | while () {
53 | chomp;
54 | if (s/^extensions.sendlater3\@kamens.us.description=//) {
55 | $description = $_;
56 | last;
57 | }
58 | }
59 | if (! $description) {
60 | warn("Warning: No extensions.sendlater3\@kamens.us.description in ",
61 | "${dir}sendlater3.properties\n");
62 | $description = $default_description;
63 | }
64 | close(PROP) or die;
65 | }
66 | return($name, $description);
67 | }
68 |
69 | sub save_locale {
70 | my($locale, $name, $description) = @_;
71 | my $data = {
72 | "appName" => {
73 | "message" => $name,
74 | "description" => "The name of the add-on, displayed in various places.",
75 | },
76 | "appDesc" => {
77 | "message" => $description,
78 | "description" => "A short description of the add-on."
79 | },
80 | };
81 | make_path("_locales/$locale");
82 | open(JSON, ">", "_locales/$locale/messages.json") or die;
83 | print(JSON encode_json($data)) or die;
84 | close(JSON) or die;
85 | }
86 |
--------------------------------------------------------------------------------
/chrome/content/backgrounding.xul:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
7 |
8 |
9 |
10 |
13 |
22 |
23 |
24 |
--------------------------------------------------------------------------------
/chrome/locale/hy-AM/prompt.dtd:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
--------------------------------------------------------------------------------
/chrome/locale/ja-JP/prompt.dtd:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
--------------------------------------------------------------------------------
/contrib/scheduling-functions/README.md:
--------------------------------------------------------------------------------
1 | # Send Later dynamic scheduling function library
2 |
3 | This directory contains a library of dynamic scheduling functions for use with the [Send Later Thunderbird add-on](https://addons.thunderbird.net/thunderbird/addon/send-later-3/).
4 |
5 | For more information about dynamic scheduling functions, see the [Send Later user guide](https://blog.kamens.us/send-later/#dynamic).
6 |
7 | The preferred method for contributing a new function to this library is to fork [Send Later on Github](https://github.com/jikamens/send-later), export your function from the dynamic function editor in Send Later, commit it in this directory in your fork along with an update to this file to describe your function (following the format of the existing entries), and submit a pull request.
8 |
9 | Alternatively, you can just [email me](mailto:jik@kamens.us) your ".slj" file exported from the dynamic function editor and let me know what it does, and I'll add it here.
10 |
11 | Thanks for your contributions!
12 |
13 | - Jonathan Kamens
14 |
15 | ## Contributed functions
16 |
17 | ### DaysBeforeNthWeekday.sjl
18 |
19 | By: Jonathan Kamens <[jik@kamens.us](mailto:jik@kamens.us)>
20 |
21 | A user on the [send-later-users mailing list](https://groups.google.com/forum/#!forum/send-later-users) asked how to generate an email a certain number of days before a particular weekday of a particular weekday of the month, e.g., "five days before the fourth Wednesday of the month." This function demonstrates how to do that. It can be configured by passing in arguments or by editing the defaults at the top of the function.
22 |
23 | ### FirstFourDaysOfEachMonth.slj
24 |
25 | By: Jonathan Kamens <[jik@kamens.us](mailto:jik@kamens.us)>
26 |
27 | Schedules a recurring message that sends at 9:00am on the first four days of each month.
28 |
29 | You can use variables to control the send time as well as the last day of each month when the message is sent. See the documentation string for the function for details.
30 |
31 | ### NextChol.slj
32 |
33 | By: Jonathan Kamens <[jik@kamens.us](mailto:jik@kamens.us)>
34 |
35 | This function is useful if you are Jewish and use email on the Sabbath and Jewish holidays but you have some Jewish friends who don't, and you'd rather not annoy them by sending them emails when they're offline.
36 |
37 | The NextChol function will schedule your message to be sent shortly after the end of the current Sabbath or holiday, or after the end of the next one if it is not currently one.
38 |
39 | Note that this function calls out to a little HTTP API endpoint I wrote to calculate the end time of the Sabbath or holiday.
40 |
41 | You will probably want to edit the function after importing it to specify what city you're in, so the times will be correct for you. See the [API endpoint's help page](https://jewish-holidays.kamens.us/next-chol?help) for a list of supported cities.
42 |
43 |
--------------------------------------------------------------------------------
/chrome/locale/zh-CN/prefwindow.dtd:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
--------------------------------------------------------------------------------
/chrome/locale/zh-TW/prefwindow.dtd:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
--------------------------------------------------------------------------------
/chrome/locale/hy-AM/prefwindow.dtd:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
--------------------------------------------------------------------------------
/chrome/locale/he-IL/prompt.dtd:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
--------------------------------------------------------------------------------
/chrome/locale/bg-BG/prompt.dtd:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
--------------------------------------------------------------------------------
/chrome/locale/en-US/prompt.dtd:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
--------------------------------------------------------------------------------
/chrome/locale/ja-JP/prefwindow.dtd:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
--------------------------------------------------------------------------------
/chrome/locale/cs-CZ/prompt.dtd:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
--------------------------------------------------------------------------------