Compare commits
87 Commits
Author | SHA1 | Date | |
---|---|---|---|
3deac4cda0 | |||
49a589cb87 | |||
3c644e615d | |||
c540c1fc29 | |||
3e31cb326b | |||
add5b65ff2 | |||
6282f54ac0 | |||
1af01856e1 | |||
3f650be613 | |||
0fa7738031 | |||
ebd1581742 | |||
db1b50bc90 | |||
8ad4d7a59d | |||
5c6cd47485 | |||
dbd596e8ea | |||
0362eaf6e3 | |||
4538066e9d | |||
0da87398b4 | |||
82e7361567 | |||
5c84493a0f | |||
83cb8e32f1 | |||
c49af54532 | |||
eee8c4ea1a | |||
858b8f277e | |||
6841fdcfc8 | |||
1e8e7ad6ec | |||
6ed84b9560 | |||
f739cb789c | |||
0d470a7ce0 | |||
9ec1d46787 | |||
ba283e9221 | |||
e549886532 | |||
d3b7032229 | |||
5586bcb671 | |||
bd72c417d2 | |||
52643e0bec | |||
af59fb60ff | |||
ac2bc8cdfd | |||
c5309a8923 | |||
1370723e6d | |||
4ba827fc15 | |||
b2e20b9875 | |||
ef9cff003d | |||
74b3ce7eb1 | |||
6528e2118e | |||
c901438216 | |||
7a0718d9cc | |||
a7cc3c7fff | |||
9d313f319d | |||
856044c88c | |||
de1b13a50f | |||
a981b7b8c7 | |||
abe9d82d03 | |||
49a3f08a9a | |||
afaa75fcdc | |||
a5c749412a | |||
e64da40355 | |||
05e7283f9f | |||
bea8e230fb | |||
23c1ece807 | |||
539d340f1a | |||
876486bbf5 | |||
9179851c85 | |||
1e96d7e787 | |||
612478bcc7 | |||
23f84fbde0 | |||
b7b4c57034 | |||
872b058d4c | |||
93ad3e71db | |||
7d824bf61e | |||
06228d9ec9 | |||
f9232ffd96 | |||
ab3c335bf1 | |||
9142cc023f | |||
3133a8d8ad | |||
312f39f7f6 | |||
4ba7bb530d | |||
9caad6b3a5 | |||
5e323db2f0 | |||
18daa28cea | |||
65c358c01b | |||
2d14432efe | |||
19b1cc8856 | |||
883f9a6f0b | |||
e969ba237a | |||
207248e706 | |||
9925dec0f4 |
8
.github/ISSUE_TEMPLATE/bug_report.md
vendored
@ -1,6 +1,6 @@
|
|||||||
---
|
---
|
||||||
name: Bug report
|
name: Bug report
|
||||||
about: Create a report to help us improve
|
about: Create a report to help us improve DownThemAll!
|
||||||
title: ''
|
title: ''
|
||||||
labels: ''
|
labels: ''
|
||||||
assignees: ''
|
assignees: ''
|
||||||
@ -8,9 +8,9 @@ assignees: ''
|
|||||||
---
|
---
|
||||||
|
|
||||||
**Desktop (please complete the following information):**
|
**Desktop (please complete the following information):**
|
||||||
- OS: [e.g. iOS]
|
- OS: [e.g. Windows 10, macOS, Linux (distribution, desktop environment)]
|
||||||
- Browser [e.g. chrome, safari]
|
- Browser and version: [e.g. Firefox 42, Chrome 70, Opera 15, Seamonkey 2.16]
|
||||||
- Version [e.g. 22]
|
- DownThemAll! version: [e.g. 4.2, 3.0, latest]
|
||||||
|
|
||||||
**Describe the bug**
|
**Describe the bug**
|
||||||
A clear and concise description of what the bug is.
|
A clear and concise description of what the bug is.
|
||||||
|
2
.github/ISSUE_TEMPLATE/feature_request.md
vendored
@ -1,6 +1,6 @@
|
|||||||
---
|
---
|
||||||
name: Feature request
|
name: Feature request
|
||||||
about: Suggest an idea for this project
|
about: Suggest a feature or an idea for DownThemAll!
|
||||||
title: ''
|
title: ''
|
||||||
labels: ''
|
labels: ''
|
||||||
assignees: ''
|
assignees: ''
|
||||||
|
47
Readme.md
@ -1,3 +1,7 @@
|
|||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
|
||||||
# DownThemAll! WE
|
# DownThemAll! WE
|
||||||
|
|
||||||
The DownThemAll! WebExtension.
|
The DownThemAll! WebExtension.
|
||||||
@ -27,28 +31,59 @@ If you would like to help out translating DTA, please see our [translation guide
|
|||||||
|
|
||||||
## Development
|
## Development
|
||||||
|
|
||||||
|
### Requirements
|
||||||
|
|
||||||
You will want to `yarn` the development dependencies such as webpack first.
|
- [node](https://nodejs.org/en/)
|
||||||
|
- [yarn](https://yarnpkg.com/)
|
||||||
|
- [python3](https://www.python.org/) >= 3.6 (to build zips)
|
||||||
|
- [web-ext](https://www.npmjs.com/package/web-ext) (for development ease)
|
||||||
|
|
||||||
Afterwards, you will want to run`yarn watch`.
|
### Setup
|
||||||
|
|
||||||
|
You will want to run `yarn` to install the development dependencies such as webpack first.
|
||||||
|
|
||||||
|
### Making changes
|
||||||
|
|
||||||
|
Just use your favorite text editor to edit the files.
|
||||||
|
|
||||||
|
You will want to run`yarn watch`.
|
||||||
This will run the webpack bundler in watch mode, transpiling the TypeScript to Javascript and updating bundles as you change the source.
|
This will run the webpack bundler in watch mode, transpiling the TypeScript to Javascript and updating bundles as you change the source.
|
||||||
|
|
||||||
Please note: You have to run `yarn watch` (at least once) as it builds the actual script bundles.
|
Please note: You have to run `yarn watch` or `yarn build` (at least once) as it builds the actual script bundles.
|
||||||
|
|
||||||
### Firefox
|
### Running in Firefox
|
||||||
|
|
||||||
I recommend you install the [`web-ext`](https://www.npmjs.com/package/web-ext) tools from mozilla. It is not listed as a dependency by design at it causes problems with dependency resolution in yarn right now if installed in the same location as the rest of the dependencies.
|
I recommend you install the [`web-ext`](https://www.npmjs.com/package/web-ext) tools from mozilla. It is not listed as a dependency by design at it causes problems with dependency resolution in yarn right now if installed in the same location as the rest of the dependencies.
|
||||||
|
|
||||||
If you did, then running `yarn webext` (additionally to `yarn watch`) will run the WebExtension in a development profile. This will use the directory `../dtalite.p` to keep a development profile. You might need to create this directory before you use this command. Furthermore `yarn webext` will watch for changes to the sources and automatically reload the extension.
|
If you did, then running `yarn webext` (additionally to `yarn watch`) will run the WebExtension in a development profile. This will use the directory `../dtalite.p` to keep a development profile. You might need to create this directory before you use this command. Furthermore `yarn webext` will watch for changes to the sources and automatically reload the extension.
|
||||||
|
|
||||||
Alternative, you can also `yarn build`, which then builds an *unsigned* zip that you can then install permanently in a browser that does not enforce signing (i.e. Nightly or the Unbranded Firefox with the right about:config preferences).
|
Alternatively, you can also `yarn build`, which then builds an *unsigned* zip that you can then install permanently in a browser that does not enforce signing (i.e. Nightly or the Unbranded Firefox with the right about:config preferences).
|
||||||
|
|
||||||
### Chrome
|
### Running in Chrome/Chromium/etc
|
||||||
|
|
||||||
You have to build the bundles first, of course.
|
You have to build the bundles first, of course.
|
||||||
|
|
||||||
Then put your Chrome into Developement Mode on the Extensions page, and Load Unpacked the directory of your downthemall clone.
|
Then put your Chrome into Developement Mode on the Extensions page, and Load Unpacked the directory of your downthemall clone.
|
||||||
|
|
||||||
|
### Making release zips
|
||||||
|
|
||||||
|
To get a basic unofficial set of zips for Firefox and chrome, run `yarn build`.
|
||||||
|
|
||||||
|
If you want to generate release builds like the ones that are eventually released in the extension stores, use `python3 util/build.py --mode=release`.
|
||||||
|
|
||||||
|
The output is located in `web-ext-artifacts`.
|
||||||
|
|
||||||
|
- `-fx.zip` are Firefox builds
|
||||||
|
- `-crx.zip` are Chrome/Chromium builds
|
||||||
|
- `-opr.zip` are Opera builds (essentially like the Chrome one, but without sounds)
|
||||||
|
|
||||||
|
### The AMO Editors tl;dr guide
|
||||||
|
|
||||||
|
1. Install the requirements.
|
||||||
|
2. `yarn && python3 build/util.py --mode=release`
|
||||||
|
3. Have a look in `web-ext-artifacts/dta-*-fx.zip`
|
||||||
|
|
||||||
|
|
||||||
### Patches
|
### Patches
|
||||||
|
|
||||||
Before submitting patches, please make sure you run eslint (if this isn't done automatically in your text editor/IDE), and eslint does not report any open issues. Code contributions should favor typescript code over javascript code. External dependencies that would ship with the final product (including all npm/yarn packages) should be kept to a bare minimum and need justification.
|
Before submitting patches, please make sure you run eslint (if this isn't done automatically in your text editor/IDE), and eslint does not report any open issues. Code contributions should favor typescript code over javascript code. External dependencies that would ship with the final product (including all npm/yarn packages) should be kept to a bare minimum and need justification.
|
||||||
|
6
TODO.md
@ -1,8 +1,6 @@
|
|||||||
TODO
|
TODO
|
||||||
---
|
---
|
||||||
|
|
||||||
aka a lot
|
|
||||||
|
|
||||||
P2
|
P2
|
||||||
===
|
===
|
||||||
|
|
||||||
@ -26,11 +24,7 @@ Nice-to-haves.
|
|||||||
* Manipulate downloads (e.g. rewrite URLs)
|
* Manipulate downloads (e.g. rewrite URLs)
|
||||||
* Native context menus?
|
* Native context menus?
|
||||||
* Would require massive reworks incl the need for new icon formats, but potentially feasible.
|
* Would require massive reworks incl the need for new icon formats, but potentially feasible.
|
||||||
* Import/Export
|
|
||||||
* Download priorities (manual scheduling overrides)
|
* Download priorities (manual scheduling overrides)
|
||||||
* Dark Theme support
|
|
||||||
* os/browser define be default
|
|
||||||
* overwritable
|
|
||||||
* Remove `any` types as possible, and generally improve typescript (new language to me)
|
* Remove `any` types as possible, and generally improve typescript (new language to me)
|
||||||
|
|
||||||
P4
|
P4
|
||||||
|
@ -19,6 +19,8 @@
|
|||||||
"pl": "Polski [pl]",
|
"pl": "Polski [pl]",
|
||||||
"pt": "Português (Brasil) [pt]",
|
"pt": "Português (Brasil) [pt]",
|
||||||
"ru": "Русский [ru]",
|
"ru": "Русский [ru]",
|
||||||
"zh_CN": "简体中文 [zh_CN]",
|
"sv": "Svenska (SV) [sv]",
|
||||||
"zh_TW": "正體中文 [zh_TW]"
|
"tr": "Türkçe TR) [tr]",
|
||||||
|
"zh_CN": "中文(简体) [zh_CN]",
|
||||||
|
"zh_TW": "正體中文 (TW) [zh_TW]"
|
||||||
}
|
}
|
@ -191,6 +191,22 @@
|
|||||||
"message": "احذف",
|
"message": "احذف",
|
||||||
"description": "button text"
|
"description": "button text"
|
||||||
},
|
},
|
||||||
|
"deletefiles": {
|
||||||
|
"message": "احذف الملفات",
|
||||||
|
"description": "menu action"
|
||||||
|
},
|
||||||
|
"deletefiles_button": {
|
||||||
|
"message": "احذف",
|
||||||
|
"description": "button text"
|
||||||
|
},
|
||||||
|
"deletefiles_text": {
|
||||||
|
"message": "أتريد إزالة الملفات الآتية؟",
|
||||||
|
"description": "messagebox text"
|
||||||
|
},
|
||||||
|
"deletefiles_title": {
|
||||||
|
"message": "حذف الملفات",
|
||||||
|
"description": "messagebox title"
|
||||||
|
},
|
||||||
"description": {
|
"description": {
|
||||||
"message": "الوصف",
|
"message": "الوصف",
|
||||||
"description": "Description (keep it short); e.g. the description column in select"
|
"description": "Description (keep it short); e.g. the description column in select"
|
||||||
@ -275,13 +291,37 @@
|
|||||||
"message": "العنوان غير صالح",
|
"message": "العنوان غير صالح",
|
||||||
"description": "Error message; single window"
|
"description": "Error message; single window"
|
||||||
},
|
},
|
||||||
|
"error_noabsolutepath": {
|
||||||
|
"message": "لا تدعم المتصفّحات أي مسار مُطلق للمجلدات الفرعية",
|
||||||
|
"description": "Error Message; select/single window"
|
||||||
|
},
|
||||||
|
"error_nodotsinpath": {
|
||||||
|
"message": "لا تدعم المتصفّحات النقط (.) في المجلدات الفرعية",
|
||||||
|
"description": "Error Message; select/single window"
|
||||||
|
},
|
||||||
"error_noItemsSelected": {
|
"error_noItemsSelected": {
|
||||||
"message": "لم تحدّد عناصر",
|
"message": "لم تحدّد عناصر",
|
||||||
"description": "Error Message; select window"
|
"description": "Error Message; select window"
|
||||||
},
|
},
|
||||||
|
"export": {
|
||||||
|
"message": "صدّر إلى ملف",
|
||||||
|
"description": "menu text"
|
||||||
|
},
|
||||||
|
"export_aria2": {
|
||||||
|
"message": "صدّر بنسق قائمة aria2",
|
||||||
|
"description": "menu text"
|
||||||
|
},
|
||||||
|
"export_metalink": {
|
||||||
|
"message": "صدّر بنسق Metalink",
|
||||||
|
"description": "menu text"
|
||||||
|
},
|
||||||
|
"export_text": {
|
||||||
|
"message": "صدّر كنصّ",
|
||||||
|
"description": "menu text"
|
||||||
|
},
|
||||||
"extensionDescription": {
|
"extensionDescription": {
|
||||||
"message": "أداة التنزيل لبحور من الروابط، داخل متصفحك",
|
"message": "أداة التنزيل لبحور من الروابط، داخل متصفحك",
|
||||||
"description": "DownThemAll! tagline, displayed in about:addons; Please do NOT refer to a specific browser such as firefox, as we will probably support more than one"
|
"description": "TraitorousDownloading! tagline, displayed in about:addons; Please do NOT refer to a specific browser such as firefox, as we will probably support more than one"
|
||||||
},
|
},
|
||||||
"fastfiltering": {
|
"fastfiltering": {
|
||||||
"message": "ترشيح سريع",
|
"message": "ترشيح سريع",
|
||||||
@ -331,6 +371,10 @@
|
|||||||
"message": "يُجبر البدء",
|
"message": "يُجبر البدء",
|
||||||
"description": "Menu text"
|
"description": "Menu text"
|
||||||
},
|
},
|
||||||
|
"import": {
|
||||||
|
"message": "استورِد من نصّ",
|
||||||
|
"description": "menu text"
|
||||||
|
},
|
||||||
"information_title": {
|
"information_title": {
|
||||||
"message": "معلومات",
|
"message": "معلومات",
|
||||||
"description": "Used in message boxes"
|
"description": "Used in message boxes"
|
||||||
@ -529,6 +573,26 @@
|
|||||||
"message": "أضفِ التنزيلات الجديدة ملبثة، بدل بدئها مباشرة عند إضافتها",
|
"message": "أضفِ التنزيلات الجديدة ملبثة، بدل بدئها مباشرة عند إضافتها",
|
||||||
"description": "Preferences/General"
|
"description": "Preferences/General"
|
||||||
},
|
},
|
||||||
|
"pref_button_type": {
|
||||||
|
"message": "زر ”نزّلها كلها!“:",
|
||||||
|
"description": "label"
|
||||||
|
},
|
||||||
|
"pref_button_type_dta": {
|
||||||
|
"message": "تحديد ”نزّلها كلها“",
|
||||||
|
"description": "label"
|
||||||
|
},
|
||||||
|
"pref_button_type_manager": {
|
||||||
|
"message": "يفتح المدير",
|
||||||
|
"description": "label"
|
||||||
|
},
|
||||||
|
"pref_button_type_popup": {
|
||||||
|
"message": "يعرض القائمة",
|
||||||
|
"description": "label"
|
||||||
|
},
|
||||||
|
"pref_button_type_turbo": {
|
||||||
|
"message": "ينفّذ ”بنقرة واحدة!“",
|
||||||
|
"description": "label"
|
||||||
|
},
|
||||||
"pref_concurrent_downloads": {
|
"pref_concurrent_downloads": {
|
||||||
"message": "التنزيلات المتزامنة",
|
"message": "التنزيلات المتزامنة",
|
||||||
"description": "Preferences/Network"
|
"description": "Preferences/Network"
|
||||||
@ -537,10 +601,6 @@
|
|||||||
"message": "اعرض إخطارًا حين ينتهي تنزيل طابور التنزيلات",
|
"message": "اعرض إخطارًا حين ينتهي تنزيل طابور التنزيلات",
|
||||||
"description": "Preferences/General"
|
"description": "Preferences/General"
|
||||||
},
|
},
|
||||||
"pref_global_turbo": {
|
|
||||||
"message": "ليكن زر المتصفح ”بنقرة واحدة!“",
|
|
||||||
"description": "Preferences/General"
|
|
||||||
},
|
|
||||||
"pref_hide_context": {
|
"pref_hide_context": {
|
||||||
"message": "لا تعرض عناصر القائمة السياقية العامة",
|
"message": "لا تعرض عناصر القائمة السياقية العامة",
|
||||||
"description": "Preferences/General"
|
"description": "Preferences/General"
|
||||||
@ -549,6 +609,10 @@
|
|||||||
"message": "المدير",
|
"message": "المدير",
|
||||||
"description": "Preferences/General; group text"
|
"description": "Preferences/General; group text"
|
||||||
},
|
},
|
||||||
|
"pref_manager_in_popup": {
|
||||||
|
"message": "افتح المدير في نافذة منبثقة جديدة",
|
||||||
|
"description": "checkbox text"
|
||||||
|
},
|
||||||
"pref_manager_tooltip": {
|
"pref_manager_tooltip": {
|
||||||
"message": "اعرض التلميحات في ألسنة المدير",
|
"message": "اعرض التلميحات في ألسنة المدير",
|
||||||
"description": "Preferences/General"
|
"description": "Preferences/General"
|
||||||
@ -573,14 +637,42 @@
|
|||||||
"message": "أزِل التنزيلات الناقصة بعد إعادة التشغيل",
|
"message": "أزِل التنزيلات الناقصة بعد إعادة التشغيل",
|
||||||
"description": "Preferences/General"
|
"description": "Preferences/General"
|
||||||
},
|
},
|
||||||
|
"pref_retries": {
|
||||||
|
"message": "عدد مرات إعادة التنزيل في حال الأخطاء المؤقتة",
|
||||||
|
"description": "pref text"
|
||||||
|
},
|
||||||
|
"pref_retry_time": {
|
||||||
|
"message": "أعِد كل (بالدقيقة)",
|
||||||
|
"description": "pref text"
|
||||||
|
},
|
||||||
"pref_show_urls": {
|
"pref_show_urls": {
|
||||||
"message": "اعرض العناوين بدل الأسماء",
|
"message": "اعرض العناوين بدل الأسماء",
|
||||||
"description": "Preferences/General"
|
"description": "Preferences/General"
|
||||||
},
|
},
|
||||||
|
"pref_sounds": {
|
||||||
|
"message": "شغّل الأصوات",
|
||||||
|
"description": "checkbox text"
|
||||||
|
},
|
||||||
"pref_text_links": {
|
"pref_text_links": {
|
||||||
"message": "حاوِل البحث عن الروابط في نص موقع الوِب (أبطأ)",
|
"message": "حاوِل البحث عن الروابط في نص موقع الوِب (أبطأ)",
|
||||||
"description": "Preferences/General"
|
"description": "Preferences/General"
|
||||||
},
|
},
|
||||||
|
"pref_theme": {
|
||||||
|
"message": "السمة:",
|
||||||
|
"description": "label text"
|
||||||
|
},
|
||||||
|
"pref_theme_dark": {
|
||||||
|
"message": "داكنة",
|
||||||
|
"description": "option text"
|
||||||
|
},
|
||||||
|
"pref_theme_default": {
|
||||||
|
"message": "النظام/المتصفح",
|
||||||
|
"description": "option text"
|
||||||
|
},
|
||||||
|
"pref_theme_light": {
|
||||||
|
"message": "فاتحة",
|
||||||
|
"description": "option text"
|
||||||
|
},
|
||||||
"pref_ui": {
|
"pref_ui": {
|
||||||
"message": "واجهة المستخدم",
|
"message": "واجهة المستخدم",
|
||||||
"description": "Preferences/General; group text"
|
"description": "Preferences/General; group text"
|
||||||
@ -895,6 +987,20 @@
|
|||||||
"message": "استأنف",
|
"message": "استأنف",
|
||||||
"description": "Action for resuming a download"
|
"description": "Action for resuming a download"
|
||||||
},
|
},
|
||||||
|
"retrying": {
|
||||||
|
"message": "يُعيد",
|
||||||
|
"description": "Status text"
|
||||||
|
},
|
||||||
|
"retrying_error": {
|
||||||
|
"message": "يُعيد -$ERROR$",
|
||||||
|
"description": "status text",
|
||||||
|
"placeholders": {
|
||||||
|
"error": {
|
||||||
|
"content": "$1",
|
||||||
|
"example": "Server Error"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"running": {
|
"running": {
|
||||||
"message": "يعمل",
|
"message": "يعمل",
|
||||||
"description": "Status text"
|
"description": "Status text"
|
||||||
@ -943,6 +1049,18 @@
|
|||||||
"message": "اضبط قناع تغيير الاسم",
|
"message": "اضبط قناع تغيير الاسم",
|
||||||
"description": "Menu text; select window"
|
"description": "Menu text; select window"
|
||||||
},
|
},
|
||||||
|
"set_mask_text": {
|
||||||
|
"message": "اضبط قناع تغيير اسم جديد",
|
||||||
|
"description": "dialog text"
|
||||||
|
},
|
||||||
|
"set_referrer": {
|
||||||
|
"message": "اضبط المُعيد",
|
||||||
|
"description": "menu text"
|
||||||
|
},
|
||||||
|
"set_referrer_text": {
|
||||||
|
"message": "اضبط مُعيدًا جديدًا",
|
||||||
|
"description": "dialog text"
|
||||||
|
},
|
||||||
"single_batchexamples": {
|
"single_batchexamples": {
|
||||||
"message": "الدفعات مدعومة، مثل:",
|
"message": "الدفعات مدعومة، مثل:",
|
||||||
"description": "Header text; single window"
|
"description": "Header text; single window"
|
||||||
@ -1123,6 +1241,14 @@
|
|||||||
"message": "لن تبدأ أي تنزيلات جديدة",
|
"message": "لن تبدأ أي تنزيلات جديدة",
|
||||||
"description": "Status bar tooltip; manager network icon"
|
"description": "Status bar tooltip; manager network icon"
|
||||||
},
|
},
|
||||||
|
"subfolder": {
|
||||||
|
"message": "المجلد الفرعي:",
|
||||||
|
"description": "label text"
|
||||||
|
},
|
||||||
|
"subfolder_placeholder": {
|
||||||
|
"message": "ضَع الملفات في هذا المجلد الفرعي لدليل المجلدات في الجهاز",
|
||||||
|
"description": "placeholder text within an input box"
|
||||||
|
},
|
||||||
"title": {
|
"title": {
|
||||||
"message": "العنوان",
|
"message": "العنوان",
|
||||||
"description": "Column text; Title label (short)"
|
"description": "Column text; Title label (short)"
|
||||||
@ -1166,5 +1292,9 @@
|
|||||||
"useonlyonce": {
|
"useonlyonce": {
|
||||||
"message": "استعمله مرة واحدة",
|
"message": "استعمله مرة واحدة",
|
||||||
"description": "Label for Use-Once checkboxes"
|
"description": "Label for Use-Once checkboxes"
|
||||||
|
},
|
||||||
|
"USER_CANCELED": {
|
||||||
|
"message": "ألغاها المستخدم",
|
||||||
|
"description": "Error message"
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -232,27 +232,27 @@
|
|||||||
"description": "Download (verb/action); e.g. in single and select buttons"
|
"description": "Download (verb/action); e.g. in single and select buttons"
|
||||||
},
|
},
|
||||||
"dta_regular": {
|
"dta_regular": {
|
||||||
"message": "DownThemAll!",
|
"message": "TraitorousDownloading!",
|
||||||
"description": "Regular dta action; Menu text"
|
"description": "Regular dta action; Menu text"
|
||||||
},
|
},
|
||||||
"dta_regular_all": {
|
"dta_regular_all": {
|
||||||
"message": "DownThemAll! – всички раздели",
|
"message": "TraitorousDownloading! – всички раздели",
|
||||||
"description": "Menu text"
|
"description": "Menu text"
|
||||||
},
|
},
|
||||||
"dta_regular_image": {
|
"dta_regular_image": {
|
||||||
"message": "Запазване на изображението с DownThemAll!",
|
"message": "Запазване на изображението с TraitorousDownloading!",
|
||||||
"description": "Menu text"
|
"description": "Menu text"
|
||||||
},
|
},
|
||||||
"dta_regular_link": {
|
"dta_regular_link": {
|
||||||
"message": "Запазване на връзката с DownThemAll!",
|
"message": "Запазване на връзката с TraitorousDownloading!",
|
||||||
"description": "Menu text"
|
"description": "Menu text"
|
||||||
},
|
},
|
||||||
"dta_regular_media": {
|
"dta_regular_media": {
|
||||||
"message": "Запазване на медията с DownThemAll!",
|
"message": "Запазване на медията с TraitorousDownloading!",
|
||||||
"description": "Menu text"
|
"description": "Menu text"
|
||||||
},
|
},
|
||||||
"dta_regular_selection": {
|
"dta_regular_selection": {
|
||||||
"message": "Запазване на избраното с DownThemAll!",
|
"message": "Запазване на избраното с TraitorousDownloading!",
|
||||||
"description": "Menu text"
|
"description": "Menu text"
|
||||||
},
|
},
|
||||||
"dta_turbo": {
|
"dta_turbo": {
|
||||||
@ -321,7 +321,7 @@
|
|||||||
},
|
},
|
||||||
"extensionDescription": {
|
"extensionDescription": {
|
||||||
"message": "Диспечер за масови изтегляния за вашият браузър",
|
"message": "Диспечер за масови изтегляния за вашият браузър",
|
||||||
"description": "DownThemAll! tagline, displayed in about:addons; Please do NOT refer to a specific browser such as firefox, as we will probably support more than one"
|
"description": "TraitorousDownloading! tagline, displayed in about:addons; Please do NOT refer to a specific browser such as firefox, as we will probably support more than one"
|
||||||
},
|
},
|
||||||
"fastfiltering": {
|
"fastfiltering": {
|
||||||
"message": "Бързо филтриране",
|
"message": "Бързо филтриране",
|
||||||
@ -450,7 +450,7 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"manager_title": {
|
"manager_title": {
|
||||||
"message": "DownThemAll! Диспечер",
|
"message": "TraitorousDownloading! Диспечер",
|
||||||
"description": "Window/tab title"
|
"description": "Window/tab title"
|
||||||
},
|
},
|
||||||
"mask": {
|
"mask": {
|
||||||
@ -486,7 +486,7 @@
|
|||||||
"description": "Action for moving a download up"
|
"description": "Action for moving a download up"
|
||||||
},
|
},
|
||||||
"nagging_message": {
|
"nagging_message": {
|
||||||
"message": "До момента са добавени $DOWNLOADS$ изтегляния с DownThemAll! Като редовен потребител може да искате да обмислите дарение за подпомагане на по-нататъшното развитие. Благодаря!",
|
"message": "До момента са добавени $DOWNLOADS$ изтегляния с TraitorousDownloading! Като редовен потребител може да искате да обмислите дарение за подпомагане на по-нататъшното развитие. Благодаря!",
|
||||||
"description": "Donation nagging message; displayed as a notification bar in manager",
|
"description": "Donation nagging message; displayed as a notification bar in manager",
|
||||||
"placeholders": {
|
"placeholders": {
|
||||||
"downloads": {
|
"downloads": {
|
||||||
@ -566,7 +566,7 @@
|
|||||||
"description": "Menu text; Preferences"
|
"description": "Menu text; Preferences"
|
||||||
},
|
},
|
||||||
"prefs_title": {
|
"prefs_title": {
|
||||||
"message": "DownThemAll! Предпочитания",
|
"message": "TraitorousDownloading! Предпочитания",
|
||||||
"description": "Window/tab title; Preferences"
|
"description": "Window/tab title; Preferences"
|
||||||
},
|
},
|
||||||
"pref_add_paused": {
|
"pref_add_paused": {
|
||||||
@ -574,11 +574,11 @@
|
|||||||
"description": "Preferences/General"
|
"description": "Preferences/General"
|
||||||
},
|
},
|
||||||
"pref_button_type": {
|
"pref_button_type": {
|
||||||
"message": "DownThemAll! бутон:",
|
"message": "TraitorousDownloading! бутон:",
|
||||||
"description": "label"
|
"description": "label"
|
||||||
},
|
},
|
||||||
"pref_button_type_dta": {
|
"pref_button_type_dta": {
|
||||||
"message": "DownThemAll! избор",
|
"message": "TraitorousDownloading! избор",
|
||||||
"description": "label"
|
"description": "label"
|
||||||
},
|
},
|
||||||
"pref_button_type_manager": {
|
"pref_button_type_manager": {
|
||||||
@ -642,7 +642,7 @@
|
|||||||
"description": "pref text"
|
"description": "pref text"
|
||||||
},
|
},
|
||||||
"pref_retry_time": {
|
"pref_retry_time": {
|
||||||
"message": "Опит на всеки (в минути)",
|
"message": "Нов опит на всеки (в минути)",
|
||||||
"description": "pref text"
|
"description": "pref text"
|
||||||
},
|
},
|
||||||
"pref_show_urls": {
|
"pref_show_urls": {
|
||||||
@ -657,6 +657,22 @@
|
|||||||
"message": "Опит за намиране на връзки в текста на уебсайта (по-бавно)",
|
"message": "Опит за намиране на връзки в текста на уебсайта (по-бавно)",
|
||||||
"description": "Preferences/General"
|
"description": "Preferences/General"
|
||||||
},
|
},
|
||||||
|
"pref_theme": {
|
||||||
|
"message": "Тема:",
|
||||||
|
"description": "label text"
|
||||||
|
},
|
||||||
|
"pref_theme_dark": {
|
||||||
|
"message": "Тъмна",
|
||||||
|
"description": "option text"
|
||||||
|
},
|
||||||
|
"pref_theme_default": {
|
||||||
|
"message": "Системна/Браузър",
|
||||||
|
"description": "option text"
|
||||||
|
},
|
||||||
|
"pref_theme_light": {
|
||||||
|
"message": "Светла",
|
||||||
|
"description": "option text"
|
||||||
|
},
|
||||||
"pref_ui": {
|
"pref_ui": {
|
||||||
"message": "Потребителски интерфейс",
|
"message": "Потребителски интерфейс",
|
||||||
"description": "Preferences/General; group text"
|
"description": "Preferences/General; group text"
|
||||||
@ -1010,7 +1026,7 @@
|
|||||||
"description": "Menu text; select context"
|
"description": "Menu text; select context"
|
||||||
},
|
},
|
||||||
"select_title": {
|
"select_title": {
|
||||||
"message": "DownThemAll! – Избиране на изтегляния",
|
"message": "TraitorousDownloading! – Избиране на изтегляния",
|
||||||
"description": "Title of the select window"
|
"description": "Title of the select window"
|
||||||
},
|
},
|
||||||
"SERVER_BAD_CONTENT": {
|
"SERVER_BAD_CONTENT": {
|
||||||
@ -1054,7 +1070,7 @@
|
|||||||
"description": "Header text; single window"
|
"description": "Header text; single window"
|
||||||
},
|
},
|
||||||
"single_title": {
|
"single_title": {
|
||||||
"message": "DownThemAll! – добавяне на връзка",
|
"message": "TraitorousDownloading! – добавяне на връзка",
|
||||||
"description": "Title of single window"
|
"description": "Title of single window"
|
||||||
},
|
},
|
||||||
"sizeB": {
|
"sizeB": {
|
||||||
|
@ -191,6 +191,22 @@
|
|||||||
"message": "Smazat",
|
"message": "Smazat",
|
||||||
"description": "button text"
|
"description": "button text"
|
||||||
},
|
},
|
||||||
|
"deletefiles": {
|
||||||
|
"message": "Odstranit soubory",
|
||||||
|
"description": "menu action"
|
||||||
|
},
|
||||||
|
"deletefiles_button": {
|
||||||
|
"message": "Odstranit",
|
||||||
|
"description": "button text"
|
||||||
|
},
|
||||||
|
"deletefiles_text": {
|
||||||
|
"message": "Opravdu chcete odstranit následující soubory?",
|
||||||
|
"description": "messagebox text"
|
||||||
|
},
|
||||||
|
"deletefiles_title": {
|
||||||
|
"message": "Odstranit soubory",
|
||||||
|
"description": "messagebox title"
|
||||||
|
},
|
||||||
"description": {
|
"description": {
|
||||||
"message": "Popis",
|
"message": "Popis",
|
||||||
"description": "Description (keep it short); e.g. the description column in select"
|
"description": "Description (keep it short); e.g. the description column in select"
|
||||||
@ -216,27 +232,27 @@
|
|||||||
"description": "Download (verb/action); e.g. in single and select buttons"
|
"description": "Download (verb/action); e.g. in single and select buttons"
|
||||||
},
|
},
|
||||||
"dta_regular": {
|
"dta_regular": {
|
||||||
"message": "DownThemAll!",
|
"message": "TraitorousDownloading!",
|
||||||
"description": "Regular dta action; Menu text"
|
"description": "Regular dta action; Menu text"
|
||||||
},
|
},
|
||||||
"dta_regular_all": {
|
"dta_regular_all": {
|
||||||
"message": "DownThemAll! - Všechny záložky",
|
"message": "TraitorousDownloading! - Všechny záložky",
|
||||||
"description": "Menu text"
|
"description": "Menu text"
|
||||||
},
|
},
|
||||||
"dta_regular_image": {
|
"dta_regular_image": {
|
||||||
"message": "Stáhnout obrázek pomocí DownThemAll!",
|
"message": "Stáhnout obrázek pomocí TraitorousDownloading!",
|
||||||
"description": "Menu text"
|
"description": "Menu text"
|
||||||
},
|
},
|
||||||
"dta_regular_link": {
|
"dta_regular_link": {
|
||||||
"message": "Stáhnout odkaz pomocí DownThemAll!",
|
"message": "Stáhnout odkaz pomocí TraitorousDownloading!",
|
||||||
"description": "Menu text"
|
"description": "Menu text"
|
||||||
},
|
},
|
||||||
"dta_regular_media": {
|
"dta_regular_media": {
|
||||||
"message": "Stáhnout média pomocí DownThemAll!",
|
"message": "Stáhnout média pomocí TraitorousDownloading!",
|
||||||
"description": "Menu text"
|
"description": "Menu text"
|
||||||
},
|
},
|
||||||
"dta_regular_selection": {
|
"dta_regular_selection": {
|
||||||
"message": "Stáhnout vybrané pomocí DownThemAll!",
|
"message": "Stáhnout vybrané pomocí TraitorousDownloading!",
|
||||||
"description": "Menu text"
|
"description": "Menu text"
|
||||||
},
|
},
|
||||||
"dta_turbo": {
|
"dta_turbo": {
|
||||||
@ -275,13 +291,37 @@
|
|||||||
"message": "Neplatná URL adresa",
|
"message": "Neplatná URL adresa",
|
||||||
"description": "Error message; single window"
|
"description": "Error message; single window"
|
||||||
},
|
},
|
||||||
|
"error_noabsolutepath": {
|
||||||
|
"message": "Absolutní formát cest pro podsložky není prohlížečem podporovaný",
|
||||||
|
"description": "Error Message; select/single window"
|
||||||
|
},
|
||||||
|
"error_nodotsinpath": {
|
||||||
|
"message": "Tečky (.) v podsložkách nejsou prohlížečem podporované",
|
||||||
|
"description": "Error Message; select/single window"
|
||||||
|
},
|
||||||
"error_noItemsSelected": {
|
"error_noItemsSelected": {
|
||||||
"message": "Nic není vybráno",
|
"message": "Nic není vybráno",
|
||||||
"description": "Error Message; select window"
|
"description": "Error Message; select window"
|
||||||
},
|
},
|
||||||
|
"export": {
|
||||||
|
"message": "Exportovat do souboru",
|
||||||
|
"description": "menu text"
|
||||||
|
},
|
||||||
|
"export_aria2": {
|
||||||
|
"message": "Exportovat jako seznam aria2",
|
||||||
|
"description": "menu text"
|
||||||
|
},
|
||||||
|
"export_metalink": {
|
||||||
|
"message": "Exportovat jako metalink",
|
||||||
|
"description": "menu text"
|
||||||
|
},
|
||||||
|
"export_text": {
|
||||||
|
"message": "Exportovat jako text",
|
||||||
|
"description": "menu text"
|
||||||
|
},
|
||||||
"extensionDescription": {
|
"extensionDescription": {
|
||||||
"message": "Správce stahování pro Váš prohlížeč",
|
"message": "Správce stahování pro Váš prohlížeč",
|
||||||
"description": "DownThemAll! tagline, displayed in about:addons; Please do NOT refer to a specific browser such as firefox, as we will probably support more than one"
|
"description": "TraitorousDownloading! tagline, displayed in about:addons; Please do NOT refer to a specific browser such as firefox, as we will probably support more than one"
|
||||||
},
|
},
|
||||||
"fastfiltering": {
|
"fastfiltering": {
|
||||||
"message": "Rychlé filtrování",
|
"message": "Rychlé filtrování",
|
||||||
@ -331,6 +371,10 @@
|
|||||||
"message": "Vynutit spuštění",
|
"message": "Vynutit spuštění",
|
||||||
"description": "Menu text"
|
"description": "Menu text"
|
||||||
},
|
},
|
||||||
|
"import": {
|
||||||
|
"message": "Importovat ze souboru",
|
||||||
|
"description": "menu text"
|
||||||
|
},
|
||||||
"information_title": {
|
"information_title": {
|
||||||
"message": "Informace",
|
"message": "Informace",
|
||||||
"description": "Used in message boxes"
|
"description": "Used in message boxes"
|
||||||
@ -406,7 +450,7 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"manager_title": {
|
"manager_title": {
|
||||||
"message": "DownThemAll! Manažer",
|
"message": "TraitorousDownloading! Manažer",
|
||||||
"description": "Window/tab title"
|
"description": "Window/tab title"
|
||||||
},
|
},
|
||||||
"mask": {
|
"mask": {
|
||||||
@ -442,7 +486,7 @@
|
|||||||
"description": "Action for moving a download up"
|
"description": "Action for moving a download up"
|
||||||
},
|
},
|
||||||
"nagging_message": {
|
"nagging_message": {
|
||||||
"message": "Již bylo stáhnuto $DOWNLOADS$ souborů pomocí DownThemAll! Jako častý uživatel byste mohl/a podpořit další vývoj darem. Děkujeme!",
|
"message": "Již bylo stáhnuto $DOWNLOADS$ souborů pomocí TraitorousDownloading! Jako častý uživatel byste mohl/a podpořit další vývoj darem. Děkujeme!",
|
||||||
"description": "Donation nagging message; displayed as a notification bar in manager",
|
"description": "Donation nagging message; displayed as a notification bar in manager",
|
||||||
"placeholders": {
|
"placeholders": {
|
||||||
"downloads": {
|
"downloads": {
|
||||||
@ -522,13 +566,33 @@
|
|||||||
"description": "Menu text; Preferences"
|
"description": "Menu text; Preferences"
|
||||||
},
|
},
|
||||||
"prefs_title": {
|
"prefs_title": {
|
||||||
"message": "Nastavení DownThemAll!",
|
"message": "Nastavení TraitorousDownloading!",
|
||||||
"description": "Window/tab title; Preferences"
|
"description": "Window/tab title; Preferences"
|
||||||
},
|
},
|
||||||
"pref_add_paused": {
|
"pref_add_paused": {
|
||||||
"message": "Přidávat nová stahování pozastavená",
|
"message": "Přidávat nová stahování pozastavená",
|
||||||
"description": "Preferences/General"
|
"description": "Preferences/General"
|
||||||
},
|
},
|
||||||
|
"pref_button_type": {
|
||||||
|
"message": "Tlačítko TraitorousDownloading!:",
|
||||||
|
"description": "label"
|
||||||
|
},
|
||||||
|
"pref_button_type_dta": {
|
||||||
|
"message": "TraitorousDownloading! selektor",
|
||||||
|
"description": "label"
|
||||||
|
},
|
||||||
|
"pref_button_type_manager": {
|
||||||
|
"message": "Otevřít Manažera",
|
||||||
|
"description": "label"
|
||||||
|
},
|
||||||
|
"pref_button_type_popup": {
|
||||||
|
"message": "Nabídka",
|
||||||
|
"description": "label"
|
||||||
|
},
|
||||||
|
"pref_button_type_turbo": {
|
||||||
|
"message": "OneClick!",
|
||||||
|
"description": "label"
|
||||||
|
},
|
||||||
"pref_concurrent_downloads": {
|
"pref_concurrent_downloads": {
|
||||||
"message": "Souběžná stahování",
|
"message": "Souběžná stahování",
|
||||||
"description": "Preferences/Network"
|
"description": "Preferences/Network"
|
||||||
@ -537,10 +601,6 @@
|
|||||||
"message": "Zobrazit oznámení po dokončení fronty stahování",
|
"message": "Zobrazit oznámení po dokončení fronty stahování",
|
||||||
"description": "Preferences/General"
|
"description": "Preferences/General"
|
||||||
},
|
},
|
||||||
"pref_global_turbo": {
|
|
||||||
"message": "Tlačítho na liště je OneClick!",
|
|
||||||
"description": "Preferences/General"
|
|
||||||
},
|
|
||||||
"pref_hide_context": {
|
"pref_hide_context": {
|
||||||
"message": "Nezobrazovat v kontextové nabídce",
|
"message": "Nezobrazovat v kontextové nabídce",
|
||||||
"description": "Preferences/General"
|
"description": "Preferences/General"
|
||||||
@ -549,8 +609,12 @@
|
|||||||
"message": "Manažer",
|
"message": "Manažer",
|
||||||
"description": "Preferences/General; group text"
|
"description": "Preferences/General; group text"
|
||||||
},
|
},
|
||||||
|
"pref_manager_in_popup": {
|
||||||
|
"message": "Otevřít Manažera v novém vyskakovacím okně",
|
||||||
|
"description": "checkbox text"
|
||||||
|
},
|
||||||
"pref_manager_tooltip": {
|
"pref_manager_tooltip": {
|
||||||
"message": "Zobrazovat popisky v záložkách Manažeru",
|
"message": "Zobrazovat popisky v záložkách Manažera",
|
||||||
"description": "Preferences/General"
|
"description": "Preferences/General"
|
||||||
},
|
},
|
||||||
"pref_netglobal": {
|
"pref_netglobal": {
|
||||||
@ -558,7 +622,7 @@
|
|||||||
"description": "Preferences/General; group text"
|
"description": "Preferences/General; group text"
|
||||||
},
|
},
|
||||||
"pref_open_manager_on_queue": {
|
"pref_open_manager_on_queue": {
|
||||||
"message": "Otevřít záložku Manažeru po zařazení stahování do fronty",
|
"message": "Otevřít záložku Manažera po zařazení stahování do fronty",
|
||||||
"description": "Preferences/General"
|
"description": "Preferences/General"
|
||||||
},
|
},
|
||||||
"pref_queueing": {
|
"pref_queueing": {
|
||||||
@ -573,14 +637,42 @@
|
|||||||
"message": "Odebrat chybějící stahování po restartu",
|
"message": "Odebrat chybějící stahování po restartu",
|
||||||
"description": "Preferences/General"
|
"description": "Preferences/General"
|
||||||
},
|
},
|
||||||
|
"pref_retries": {
|
||||||
|
"message": "Počet pokusů o stažení při dočasných chybách",
|
||||||
|
"description": "pref text"
|
||||||
|
},
|
||||||
|
"pref_retry_time": {
|
||||||
|
"message": "Interval opakování (v minutách)",
|
||||||
|
"description": "pref text"
|
||||||
|
},
|
||||||
"pref_show_urls": {
|
"pref_show_urls": {
|
||||||
"message": "Zobrazit URL adresy místo názvů souborů",
|
"message": "Zobrazit URL adresy místo názvů souborů",
|
||||||
"description": "Preferences/General"
|
"description": "Preferences/General"
|
||||||
},
|
},
|
||||||
|
"pref_sounds": {
|
||||||
|
"message": "Přehrát zvuky",
|
||||||
|
"description": "checkbox text"
|
||||||
|
},
|
||||||
"pref_text_links": {
|
"pref_text_links": {
|
||||||
"message": "Vyhledat odkazy v textu stránky (pomalejší)",
|
"message": "Vyhledat odkazy v textu stránky (pomalejší)",
|
||||||
"description": "Preferences/General"
|
"description": "Preferences/General"
|
||||||
},
|
},
|
||||||
|
"pref_theme": {
|
||||||
|
"message": "Motiv:",
|
||||||
|
"description": "label text"
|
||||||
|
},
|
||||||
|
"pref_theme_dark": {
|
||||||
|
"message": "Tmavý",
|
||||||
|
"description": "option text"
|
||||||
|
},
|
||||||
|
"pref_theme_default": {
|
||||||
|
"message": "Systémový/Výchozí",
|
||||||
|
"description": "option text"
|
||||||
|
},
|
||||||
|
"pref_theme_light": {
|
||||||
|
"message": "Světlý",
|
||||||
|
"description": "option text"
|
||||||
|
},
|
||||||
"pref_ui": {
|
"pref_ui": {
|
||||||
"message": "Uživatelské rozhraní",
|
"message": "Uživatelské rozhraní",
|
||||||
"description": "Preferences/General; group text"
|
"description": "Preferences/General; group text"
|
||||||
@ -895,6 +987,20 @@
|
|||||||
"message": "Pokračovat",
|
"message": "Pokračovat",
|
||||||
"description": "Action for resuming a download"
|
"description": "Action for resuming a download"
|
||||||
},
|
},
|
||||||
|
"retrying": {
|
||||||
|
"message": "Opakuji",
|
||||||
|
"description": "Status text"
|
||||||
|
},
|
||||||
|
"retrying_error": {
|
||||||
|
"message": "Opakuji - $ERROR$",
|
||||||
|
"description": "status text",
|
||||||
|
"placeholders": {
|
||||||
|
"error": {
|
||||||
|
"content": "$1",
|
||||||
|
"example": "Server Error"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"running": {
|
"running": {
|
||||||
"message": "Probíhá",
|
"message": "Probíhá",
|
||||||
"description": "Status text"
|
"description": "Status text"
|
||||||
@ -920,7 +1026,7 @@
|
|||||||
"description": "Menu text; select context"
|
"description": "Menu text; select context"
|
||||||
},
|
},
|
||||||
"select_title": {
|
"select_title": {
|
||||||
"message": "DownThemAll! - Vyberte soubory ke stažení",
|
"message": "TraitorousDownloading! - Vyberte soubory ke stažení",
|
||||||
"description": "Title of the select window"
|
"description": "Title of the select window"
|
||||||
},
|
},
|
||||||
"SERVER_BAD_CONTENT": {
|
"SERVER_BAD_CONTENT": {
|
||||||
@ -943,6 +1049,18 @@
|
|||||||
"message": "Nastavit masku přejmenování",
|
"message": "Nastavit masku přejmenování",
|
||||||
"description": "Menu text; select window"
|
"description": "Menu text; select window"
|
||||||
},
|
},
|
||||||
|
"set_mask_text": {
|
||||||
|
"message": "Nastavte novou masku přejmenování",
|
||||||
|
"description": "dialog text"
|
||||||
|
},
|
||||||
|
"set_referrer": {
|
||||||
|
"message": "Nastavit odkázání",
|
||||||
|
"description": "menu text"
|
||||||
|
},
|
||||||
|
"set_referrer_text": {
|
||||||
|
"message": "Nastavit novou odkazující stránku",
|
||||||
|
"description": "dialog text"
|
||||||
|
},
|
||||||
"single_batchexamples": {
|
"single_batchexamples": {
|
||||||
"message": "Jsou podporována dávková stahování, například:",
|
"message": "Jsou podporována dávková stahování, například:",
|
||||||
"description": "Header text; single window"
|
"description": "Header text; single window"
|
||||||
@ -952,7 +1070,7 @@
|
|||||||
"description": "Header text; single window"
|
"description": "Header text; single window"
|
||||||
},
|
},
|
||||||
"single_title": {
|
"single_title": {
|
||||||
"message": "DownThemAll! - Přidat odkaz",
|
"message": "TraitorousDownloading! - Přidat odkaz",
|
||||||
"description": "Title of single window"
|
"description": "Title of single window"
|
||||||
},
|
},
|
||||||
"sizeB": {
|
"sizeB": {
|
||||||
@ -1123,6 +1241,14 @@
|
|||||||
"message": "Nová stahování nebudou spuštěna",
|
"message": "Nová stahování nebudou spuštěna",
|
||||||
"description": "Status bar tooltip; manager network icon"
|
"description": "Status bar tooltip; manager network icon"
|
||||||
},
|
},
|
||||||
|
"subfolder": {
|
||||||
|
"message": "Podsložka:",
|
||||||
|
"description": "label text"
|
||||||
|
},
|
||||||
|
"subfolder_placeholder": {
|
||||||
|
"message": "Umístí soubory v této podložce uvnitř vaší složky stahování",
|
||||||
|
"description": "placeholder text within an input box"
|
||||||
|
},
|
||||||
"title": {
|
"title": {
|
||||||
"message": "Popisek",
|
"message": "Popisek",
|
||||||
"description": "Column text; Title label (short)"
|
"description": "Column text; Title label (short)"
|
||||||
@ -1166,5 +1292,9 @@
|
|||||||
"useonlyonce": {
|
"useonlyonce": {
|
||||||
"message": "Použít pouze jednou",
|
"message": "Použít pouze jednou",
|
||||||
"description": "Label for Use-Once checkboxes"
|
"description": "Label for Use-Once checkboxes"
|
||||||
|
},
|
||||||
|
"USER_CANCELED": {
|
||||||
|
"message": "Zrušeno uživatelem",
|
||||||
|
"description": "Error message"
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -80,7 +80,7 @@
|
|||||||
"description": "Error message when an input field is empty but has to have a value"
|
"description": "Error message when an input field is empty but has to have a value"
|
||||||
},
|
},
|
||||||
"change_later_reminder": {
|
"change_later_reminder": {
|
||||||
"message": "Du kan ændre denne indstillinger under Indstillinger senere",
|
"message": "Du kan altid ændre dette valg under indstillinger",
|
||||||
"description": "Checkbox label text for decision confirmations"
|
"description": "Checkbox label text for decision confirmations"
|
||||||
},
|
},
|
||||||
"check_selected_items": {
|
"check_selected_items": {
|
||||||
@ -232,27 +232,27 @@
|
|||||||
"description": "Download (verb/action); e.g. in single and select buttons"
|
"description": "Download (verb/action); e.g. in single and select buttons"
|
||||||
},
|
},
|
||||||
"dta_regular": {
|
"dta_regular": {
|
||||||
"message": "DownThemAll!",
|
"message": "TraitorousDownloading!",
|
||||||
"description": "Regular dta action; Menu text"
|
"description": "Regular dta action; Menu text"
|
||||||
},
|
},
|
||||||
"dta_regular_all": {
|
"dta_regular_all": {
|
||||||
"message": "DownThemAll! - alle faner",
|
"message": "TraitorousDownloading! - alle faner",
|
||||||
"description": "Menu text"
|
"description": "Menu text"
|
||||||
},
|
},
|
||||||
"dta_regular_image": {
|
"dta_regular_image": {
|
||||||
"message": "Gem billede med DownThemAll!",
|
"message": "Gem billede med TraitorousDownloading!",
|
||||||
"description": "Menu text"
|
"description": "Menu text"
|
||||||
},
|
},
|
||||||
"dta_regular_link": {
|
"dta_regular_link": {
|
||||||
"message": "Gem link med DownThemAll!",
|
"message": "Gem link med TraitorousDownloading!",
|
||||||
"description": "Menu text"
|
"description": "Menu text"
|
||||||
},
|
},
|
||||||
"dta_regular_media": {
|
"dta_regular_media": {
|
||||||
"message": "Gem medie med DownThemAll!",
|
"message": "Gem medie med TraitorousDownloading!",
|
||||||
"description": "Menu text"
|
"description": "Menu text"
|
||||||
},
|
},
|
||||||
"dta_regular_selection": {
|
"dta_regular_selection": {
|
||||||
"message": "Gem valgte med DownThemAll!",
|
"message": "Gem valgte med TraitorousDownloading!",
|
||||||
"description": "Menu text"
|
"description": "Menu text"
|
||||||
},
|
},
|
||||||
"dta_turbo": {
|
"dta_turbo": {
|
||||||
@ -321,7 +321,7 @@
|
|||||||
},
|
},
|
||||||
"extensionDescription": {
|
"extensionDescription": {
|
||||||
"message": "\"The Mass Downloader\" til din browser",
|
"message": "\"The Mass Downloader\" til din browser",
|
||||||
"description": "DownThemAll! tagline, displayed in about:addons; Please do NOT refer to a specific browser such as firefox, as we will probably support more than one"
|
"description": "TraitorousDownloading! tagline, displayed in about:addons; Please do NOT refer to a specific browser such as firefox, as we will probably support more than one"
|
||||||
},
|
},
|
||||||
"fastfiltering": {
|
"fastfiltering": {
|
||||||
"message": "Hurtigfilter",
|
"message": "Hurtigfilter",
|
||||||
@ -450,7 +450,7 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"manager_title": {
|
"manager_title": {
|
||||||
"message": "DownThemAll! Manager",
|
"message": "TraitorousDownloading! Manager",
|
||||||
"description": "Window/tab title"
|
"description": "Window/tab title"
|
||||||
},
|
},
|
||||||
"mask": {
|
"mask": {
|
||||||
@ -486,7 +486,7 @@
|
|||||||
"description": "Action for moving a download up"
|
"description": "Action for moving a download up"
|
||||||
},
|
},
|
||||||
"nagging_message": {
|
"nagging_message": {
|
||||||
"message": "Du har tilføjet $DOWNLOADS$ downloads med DownThemAll! indtil videre! Som fast bruger kunne du evt. overveje en donation for at holde udviklingen kørende. Tak!",
|
"message": "Du har tilføjet $DOWNLOADS$ downloads med TraitorousDownloading! indtil videre! Som fast bruger kunne du evt. overveje en donation for at holde udviklingen kørende. Tak!",
|
||||||
"description": "Donation nagging message; displayed as a notification bar in manager",
|
"description": "Donation nagging message; displayed as a notification bar in manager",
|
||||||
"placeholders": {
|
"placeholders": {
|
||||||
"downloads": {
|
"downloads": {
|
||||||
@ -566,7 +566,7 @@
|
|||||||
"description": "Menu text; Preferences"
|
"description": "Menu text; Preferences"
|
||||||
},
|
},
|
||||||
"prefs_title": {
|
"prefs_title": {
|
||||||
"message": "DownThemAll! indstillinger",
|
"message": "TraitorousDownloading! indstillinger",
|
||||||
"description": "Window/tab title; Preferences"
|
"description": "Window/tab title; Preferences"
|
||||||
},
|
},
|
||||||
"pref_add_paused": {
|
"pref_add_paused": {
|
||||||
@ -574,11 +574,11 @@
|
|||||||
"description": "Preferences/General"
|
"description": "Preferences/General"
|
||||||
},
|
},
|
||||||
"pref_button_type": {
|
"pref_button_type": {
|
||||||
"message": "DownThemAll! knap:",
|
"message": "TraitorousDownloading! knap:",
|
||||||
"description": "label"
|
"description": "label"
|
||||||
},
|
},
|
||||||
"pref_button_type_dta": {
|
"pref_button_type_dta": {
|
||||||
"message": "DownThemAll! markering",
|
"message": "TraitorousDownloading! markering",
|
||||||
"description": "label"
|
"description": "label"
|
||||||
},
|
},
|
||||||
"pref_button_type_manager": {
|
"pref_button_type_manager": {
|
||||||
@ -657,6 +657,22 @@
|
|||||||
"message": "Forsøg at finde links via hjemmesidens tekstindhold (langsommere)",
|
"message": "Forsøg at finde links via hjemmesidens tekstindhold (langsommere)",
|
||||||
"description": "Preferences/General"
|
"description": "Preferences/General"
|
||||||
},
|
},
|
||||||
|
"pref_theme": {
|
||||||
|
"message": "Tema",
|
||||||
|
"description": "label text"
|
||||||
|
},
|
||||||
|
"pref_theme_dark": {
|
||||||
|
"message": "Mørkt",
|
||||||
|
"description": "option text"
|
||||||
|
},
|
||||||
|
"pref_theme_default": {
|
||||||
|
"message": "System/browser",
|
||||||
|
"description": "option text"
|
||||||
|
},
|
||||||
|
"pref_theme_light": {
|
||||||
|
"message": "Lyst",
|
||||||
|
"description": "option text"
|
||||||
|
},
|
||||||
"pref_ui": {
|
"pref_ui": {
|
||||||
"message": "Brugergrænseflade",
|
"message": "Brugergrænseflade",
|
||||||
"description": "Preferences/General; group text"
|
"description": "Preferences/General; group text"
|
||||||
@ -716,7 +732,7 @@
|
|||||||
"description": "Action for removing complete downloads"
|
"description": "Action for removing complete downloads"
|
||||||
},
|
},
|
||||||
"remove_complete_downloads_question": {
|
"remove_complete_downloads_question": {
|
||||||
"message": "Vil du rydde alle færdiggjorte downloads?",
|
"message": "Vil du rydde op i alle færdiggjorte downloads?",
|
||||||
"description": "Messagebox text"
|
"description": "Messagebox text"
|
||||||
},
|
},
|
||||||
"remove_complete_filter_downloads_question": {
|
"remove_complete_filter_downloads_question": {
|
||||||
@ -770,7 +786,7 @@
|
|||||||
"description": "Menu text"
|
"description": "Menu text"
|
||||||
},
|
},
|
||||||
"remove_downloads_title": {
|
"remove_downloads_title": {
|
||||||
"message": "Er du sikker på, du vil rydde downloads?",
|
"message": "Er du sikker på, du vil rydde op i downloads?",
|
||||||
"description": "Messagebox title; manager"
|
"description": "Messagebox title; manager"
|
||||||
},
|
},
|
||||||
"remove_download_question": {
|
"remove_download_question": {
|
||||||
@ -800,7 +816,7 @@
|
|||||||
"description": "Menu text"
|
"description": "Menu text"
|
||||||
},
|
},
|
||||||
"remove_missing_downloads_question": {
|
"remove_missing_downloads_question": {
|
||||||
"message": "Vil du rydde alle manglende downloads?",
|
"message": "Vil du rydde op i alle manglende downloads?",
|
||||||
"description": "Messagebox text"
|
"description": "Messagebox text"
|
||||||
},
|
},
|
||||||
"remove_paused_downloads": {
|
"remove_paused_downloads": {
|
||||||
@ -1010,7 +1026,7 @@
|
|||||||
"description": "Menu text; select context"
|
"description": "Menu text; select context"
|
||||||
},
|
},
|
||||||
"select_title": {
|
"select_title": {
|
||||||
"message": "DownThemAll! - vælg dine downloads",
|
"message": "TraitorousDownloading! - vælg dine downloads",
|
||||||
"description": "Title of the select window"
|
"description": "Title of the select window"
|
||||||
},
|
},
|
||||||
"SERVER_BAD_CONTENT": {
|
"SERVER_BAD_CONTENT": {
|
||||||
@ -1054,7 +1070,7 @@
|
|||||||
"description": "Header text; single window"
|
"description": "Header text; single window"
|
||||||
},
|
},
|
||||||
"single_title": {
|
"single_title": {
|
||||||
"message": "DownThemAll! - tilføj et link",
|
"message": "TraitorousDownloading! - tilføj et link",
|
||||||
"description": "Title of single window"
|
"description": "Title of single window"
|
||||||
},
|
},
|
||||||
"sizeB": {
|
"sizeB": {
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"language": {
|
"language": {
|
||||||
"message": "Deutsch",
|
"message": "Deutsch",
|
||||||
"description": "Lanuage Name in your language"
|
"description": "Language Name in your language"
|
||||||
},
|
},
|
||||||
"language_code": {
|
"language_code": {
|
||||||
"message": "de",
|
"message": "de",
|
||||||
@ -24,7 +24,7 @@
|
|||||||
"description": "Checkbox label"
|
"description": "Checkbox label"
|
||||||
},
|
},
|
||||||
"add_paused_question": {
|
"add_paused_question": {
|
||||||
"message": "Soll sich diese Entscheidung gemerkt werden und neue Downloads von jetzt an immer pausiert hinzugefügt werden?",
|
"message": "Diese Entscheidung speichern und neue Downloads von jetzt an immer pausiert hinzufügen?",
|
||||||
"description": "Messagebox text"
|
"description": "Messagebox text"
|
||||||
},
|
},
|
||||||
"add_paused_title": {
|
"add_paused_title": {
|
||||||
@ -52,15 +52,15 @@
|
|||||||
"description": "Messagebox info text for batch confirmations"
|
"description": "Messagebox info text for batch confirmations"
|
||||||
},
|
},
|
||||||
"batch_question": {
|
"batch_question": {
|
||||||
"message": "Als Batch oder einfachen Download hinzufügen?",
|
"message": "Als Batch oder als einfachen Download hinzufügen?",
|
||||||
"description": "Messagebox info text for batch confirmations"
|
"description": "Messagebox info text for batch confirmations"
|
||||||
},
|
},
|
||||||
"batch_single": {
|
"batch_single": {
|
||||||
"message": "Einfacher Download",
|
"message": "Einzelner Download",
|
||||||
"description": "Button text for batch confirmation"
|
"description": "Button text for batch confirmation"
|
||||||
},
|
},
|
||||||
"batch_title": {
|
"batch_title": {
|
||||||
"message": "Batch Download",
|
"message": "Batch",
|
||||||
"description": "Messagebox title for batch confirmations"
|
"description": "Messagebox title for batch confirmations"
|
||||||
},
|
},
|
||||||
"cancel": {
|
"cancel": {
|
||||||
@ -84,7 +84,7 @@
|
|||||||
"description": "Checkbox label text for decision confirmations"
|
"description": "Checkbox label text for decision confirmations"
|
||||||
},
|
},
|
||||||
"check_selected_items": {
|
"check_selected_items": {
|
||||||
"message": "Ausgewählte Einträge markieren",
|
"message": "markierte Einträge auswählen",
|
||||||
"description": "Menu text"
|
"description": "Menu text"
|
||||||
},
|
},
|
||||||
"colConnections": {
|
"colConnections": {
|
||||||
@ -228,31 +228,31 @@
|
|||||||
"description": "Download (noun); e.g. Download column in select"
|
"description": "Download (noun); e.g. Download column in select"
|
||||||
},
|
},
|
||||||
"download_verb": {
|
"download_verb": {
|
||||||
"message": "Download",
|
"message": "Herunterladen",
|
||||||
"description": "Download (verb/action); e.g. in single and select buttons"
|
"description": "Download (verb/action); e.g. in single and select buttons"
|
||||||
},
|
},
|
||||||
"dta_regular": {
|
"dta_regular": {
|
||||||
"message": "DownThemAll!",
|
"message": "TraitorousDownloading!",
|
||||||
"description": "Regular dta action; Menu text"
|
"description": "Regular dta action; Menu text"
|
||||||
},
|
},
|
||||||
"dta_regular_all": {
|
"dta_regular_all": {
|
||||||
"message": "DownThemAll! - Alle Tabs",
|
"message": "TraitorousDownloading! - Alle Tabs",
|
||||||
"description": "Menu text"
|
"description": "Menu text"
|
||||||
},
|
},
|
||||||
"dta_regular_image": {
|
"dta_regular_image": {
|
||||||
"message": "Bild mit DownThemAll! speichern",
|
"message": "Bild mit TraitorousDownloading! speichern",
|
||||||
"description": "Menu text"
|
"description": "Menu text"
|
||||||
},
|
},
|
||||||
"dta_regular_link": {
|
"dta_regular_link": {
|
||||||
"message": "Link mit DownThemAll! speichern",
|
"message": "Link mit TraitorousDownloading! speichern",
|
||||||
"description": "Menu text"
|
"description": "Menu text"
|
||||||
},
|
},
|
||||||
"dta_regular_media": {
|
"dta_regular_media": {
|
||||||
"message": "Medium mit DownThemAll! speichern",
|
"message": "Medium mit TraitorousDownloading! speichern",
|
||||||
"description": "Menu text"
|
"description": "Menu text"
|
||||||
},
|
},
|
||||||
"dta_regular_selection": {
|
"dta_regular_selection": {
|
||||||
"message": "Auswahl mit DownThemAll! speichern",
|
"message": "Auswahl mit TraitorousDownloading! speichern",
|
||||||
"description": "Menu text"
|
"description": "Menu text"
|
||||||
},
|
},
|
||||||
"dta_turbo": {
|
"dta_turbo": {
|
||||||
@ -321,14 +321,14 @@
|
|||||||
},
|
},
|
||||||
"extensionDescription": {
|
"extensionDescription": {
|
||||||
"message": "Der Massen-Downloader für Deinen Browser",
|
"message": "Der Massen-Downloader für Deinen Browser",
|
||||||
"description": "DownThemAll! tagline, displayed in about:addons; Please do NOT refer to a specific browser such as firefox, as we will probably support more than one"
|
"description": "TraitorousDownloading! tagline, displayed in about:addons; Please do NOT refer to a specific browser such as firefox, as we will probably support more than one"
|
||||||
},
|
},
|
||||||
"fastfiltering": {
|
"fastfiltering": {
|
||||||
"message": "Schnelles Filtern",
|
"message": "Schnelles Filtern",
|
||||||
"description": "Label for Fast Filtering input"
|
"description": "Label for Fast Filtering input"
|
||||||
},
|
},
|
||||||
"fastfilter_placeholder": {
|
"fastfilter_placeholder": {
|
||||||
"message": "Platzhalter-Ausdruck oder Regular Expression",
|
"message": "Platzhalter-Ausdruck oder regulärer Ausdruck",
|
||||||
"description": "Placeholder for fastfilter inputs"
|
"description": "Placeholder for fastfilter inputs"
|
||||||
},
|
},
|
||||||
"FILE_FAILED": {
|
"FILE_FAILED": {
|
||||||
@ -348,11 +348,11 @@
|
|||||||
"description": "Message box label"
|
"description": "Message box label"
|
||||||
},
|
},
|
||||||
"filter_label": {
|
"filter_label": {
|
||||||
"message": "Filter-Titel",
|
"message": "Filter-Bezeichnung",
|
||||||
"description": "Message box label"
|
"description": "Message box label"
|
||||||
},
|
},
|
||||||
"filter_types": {
|
"filter_types": {
|
||||||
"message": "Filter Typen",
|
"message": "Filter-Typen",
|
||||||
"description": "Message box label"
|
"description": "Message box label"
|
||||||
},
|
},
|
||||||
"filter_type_link": {
|
"filter_type_link": {
|
||||||
@ -360,11 +360,11 @@
|
|||||||
"description": "Message box checkbox label"
|
"description": "Message box checkbox label"
|
||||||
},
|
},
|
||||||
"filter_type_media": {
|
"filter_type_media": {
|
||||||
"message": "Medien Filter",
|
"message": "Medien-Filter",
|
||||||
"description": "Message box checkbox label"
|
"description": "Message box checkbox label"
|
||||||
},
|
},
|
||||||
"finishing": {
|
"finishing": {
|
||||||
"message": "Beenden",
|
"message": "Beende",
|
||||||
"description": "Status text"
|
"description": "Status text"
|
||||||
},
|
},
|
||||||
"force_start": {
|
"force_start": {
|
||||||
@ -416,7 +416,7 @@
|
|||||||
"description": "Short for PageUp-key"
|
"description": "Short for PageUp-key"
|
||||||
},
|
},
|
||||||
"limited_to": {
|
"limited_to": {
|
||||||
"message": "Begrenzt auf",
|
"message": "Begrenzen auf",
|
||||||
"description": "Label text; used in prefs/network"
|
"description": "Label text; used in prefs/network"
|
||||||
},
|
},
|
||||||
"links": {
|
"links": {
|
||||||
@ -450,7 +450,7 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"manager_title": {
|
"manager_title": {
|
||||||
"message": "DownThemAll! Manager",
|
"message": "TraitorousDownloading! Manager",
|
||||||
"description": "Window/tab title"
|
"description": "Window/tab title"
|
||||||
},
|
},
|
||||||
"mask": {
|
"mask": {
|
||||||
@ -486,7 +486,7 @@
|
|||||||
"description": "Action for moving a download up"
|
"description": "Action for moving a download up"
|
||||||
},
|
},
|
||||||
"nagging_message": {
|
"nagging_message": {
|
||||||
"message": "Sie haben bisher $DOWNLOADS$ Downloads mit DownThemAll! hinzugefügt. Als regelmäßiger Benutzer können Sie eine Spende in Betracht ziehen um die Weiterentwicklung zu unterstützen. Danke!",
|
"message": "Sie haben bisher $DOWNLOADS$ Downloads mit TraitorousDownloading! hinzugefügt. Als regelmäßiger Benutzer können Sie eine Spende in Betracht ziehen um die Weiterentwicklung zu unterstützen. Danke!",
|
||||||
"description": "Donation nagging message; displayed as a notification bar in manager",
|
"description": "Donation nagging message; displayed as a notification bar in manager",
|
||||||
"placeholders": {
|
"placeholders": {
|
||||||
"downloads": {
|
"downloads": {
|
||||||
@ -566,7 +566,7 @@
|
|||||||
"description": "Menu text; Preferences"
|
"description": "Menu text; Preferences"
|
||||||
},
|
},
|
||||||
"prefs_title": {
|
"prefs_title": {
|
||||||
"message": "DownThemAll! Einstellungen",
|
"message": "TraitorousDownloading! Einstellungen",
|
||||||
"description": "Window/tab title; Preferences"
|
"description": "Window/tab title; Preferences"
|
||||||
},
|
},
|
||||||
"pref_add_paused": {
|
"pref_add_paused": {
|
||||||
@ -574,11 +574,11 @@
|
|||||||
"description": "Preferences/General"
|
"description": "Preferences/General"
|
||||||
},
|
},
|
||||||
"pref_button_type": {
|
"pref_button_type": {
|
||||||
"message": "DownThemAll! Button:",
|
"message": "TraitorousDownloading! Button:",
|
||||||
"description": "label"
|
"description": "label"
|
||||||
},
|
},
|
||||||
"pref_button_type_dta": {
|
"pref_button_type_dta": {
|
||||||
"message": "DownThemAll! Auswahl",
|
"message": "TraitorousDownloading! Auswahl",
|
||||||
"description": "label"
|
"description": "label"
|
||||||
},
|
},
|
||||||
"pref_button_type_manager": {
|
"pref_button_type_manager": {
|
||||||
@ -614,7 +614,7 @@
|
|||||||
"description": "checkbox text"
|
"description": "checkbox text"
|
||||||
},
|
},
|
||||||
"pref_manager_tooltip": {
|
"pref_manager_tooltip": {
|
||||||
"message": "Keine Tooltips im Manager-Tab anzeigen",
|
"message": "Tooltips im Manager-Tab anzeigen",
|
||||||
"description": "Preferences/General"
|
"description": "Preferences/General"
|
||||||
},
|
},
|
||||||
"pref_netglobal": {
|
"pref_netglobal": {
|
||||||
@ -622,7 +622,7 @@
|
|||||||
"description": "Preferences/General; group text"
|
"description": "Preferences/General; group text"
|
||||||
},
|
},
|
||||||
"pref_open_manager_on_queue": {
|
"pref_open_manager_on_queue": {
|
||||||
"message": "Den Manager öffnen nachdem neue Downloads zur Warteschlange hinzugefügt wurden",
|
"message": "Den Manager öffnen, nachdem neue Downloads zur Warteschlange hinzugefügt wurden",
|
||||||
"description": "Preferences/General"
|
"description": "Preferences/General"
|
||||||
},
|
},
|
||||||
"pref_queueing": {
|
"pref_queueing": {
|
||||||
@ -642,7 +642,7 @@
|
|||||||
"description": "pref text"
|
"description": "pref text"
|
||||||
},
|
},
|
||||||
"pref_retry_time": {
|
"pref_retry_time": {
|
||||||
"message": "Neuversuch Alle (in Minuten)",
|
"message": "Erneut versuchen alle (in Minuten)",
|
||||||
"description": "pref text"
|
"description": "pref text"
|
||||||
},
|
},
|
||||||
"pref_show_urls": {
|
"pref_show_urls": {
|
||||||
@ -650,13 +650,29 @@
|
|||||||
"description": "Preferences/General"
|
"description": "Preferences/General"
|
||||||
},
|
},
|
||||||
"pref_sounds": {
|
"pref_sounds": {
|
||||||
"message": "Sounds abspielen",
|
"message": "Töne abspielen",
|
||||||
"description": "checkbox text"
|
"description": "checkbox text"
|
||||||
},
|
},
|
||||||
"pref_text_links": {
|
"pref_text_links": {
|
||||||
"message": "Versuche Text-Links in Webseiten zu finden (langsamer)",
|
"message": "Versuche Text-Links in Webseiten zu finden (langsamer)",
|
||||||
"description": "Preferences/General"
|
"description": "Preferences/General"
|
||||||
},
|
},
|
||||||
|
"pref_theme": {
|
||||||
|
"message": "Farbschema:",
|
||||||
|
"description": "label text"
|
||||||
|
},
|
||||||
|
"pref_theme_dark": {
|
||||||
|
"message": "Dunkel",
|
||||||
|
"description": "option text"
|
||||||
|
},
|
||||||
|
"pref_theme_default": {
|
||||||
|
"message": "System/Browser",
|
||||||
|
"description": "option text"
|
||||||
|
},
|
||||||
|
"pref_theme_light": {
|
||||||
|
"message": "Hell",
|
||||||
|
"description": "option text"
|
||||||
|
},
|
||||||
"pref_ui": {
|
"pref_ui": {
|
||||||
"message": "Benutzeroberfläche",
|
"message": "Benutzeroberfläche",
|
||||||
"description": "Preferences/General; group text"
|
"description": "Preferences/General; group text"
|
||||||
@ -708,7 +724,7 @@
|
|||||||
"description": "Menu text"
|
"description": "Menu text"
|
||||||
},
|
},
|
||||||
"remove_batch_downloads_question": {
|
"remove_batch_downloads_question": {
|
||||||
"message": "Wirklich alle Downloads vom aktuellen Batch entfernen?",
|
"message": "Wirklich alle Downloads des aktuellen Batch entfernen?",
|
||||||
"description": "Messagebox text"
|
"description": "Messagebox text"
|
||||||
},
|
},
|
||||||
"remove_complete_downloads": {
|
"remove_complete_downloads": {
|
||||||
@ -738,7 +754,7 @@
|
|||||||
"description": "Menu text"
|
"description": "Menu text"
|
||||||
},
|
},
|
||||||
"remove_domain_complete_downloads_question": {
|
"remove_domain_complete_downloads_question": {
|
||||||
"message": "Wirklich alle fertigen Downloads mit Domain \"$DOMAIN$\" entfernen?",
|
"message": "Wirklich alle fertigen Downloads der Domain \"$DOMAIN$\" entfernen?",
|
||||||
"description": "Messagebox text",
|
"description": "Messagebox text",
|
||||||
"placeholders": {
|
"placeholders": {
|
||||||
"domain": {
|
"domain": {
|
||||||
@ -752,7 +768,7 @@
|
|||||||
"description": "Menu text"
|
"description": "Menu text"
|
||||||
},
|
},
|
||||||
"remove_domain_downloads_question": {
|
"remove_domain_downloads_question": {
|
||||||
"message": "Wirklich alle Downloads mit Domain \"$DOMAIN$\" entfernen?",
|
"message": "Wirklich alle Downloads der Domain \"$DOMAIN$\" entfernen?",
|
||||||
"description": "Messagebox text",
|
"description": "Messagebox text",
|
||||||
"placeholders": {
|
"placeholders": {
|
||||||
"domain": {
|
"domain": {
|
||||||
@ -796,11 +812,11 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"remove_missing": {
|
"remove_missing": {
|
||||||
"message": "Fehlende Downloads entfernen",
|
"message": "Nicht vorhandene Downloads entfernen",
|
||||||
"description": "Menu text"
|
"description": "Menu text"
|
||||||
},
|
},
|
||||||
"remove_missing_downloads_question": {
|
"remove_missing_downloads_question": {
|
||||||
"message": "Wirklich alle fehlenden Downloads entfernen?",
|
"message": "Wirklich alle nicht vorhandene Downloads entfernen?",
|
||||||
"description": "Messagebox text"
|
"description": "Messagebox text"
|
||||||
},
|
},
|
||||||
"remove_paused_downloads": {
|
"remove_paused_downloads": {
|
||||||
@ -828,15 +844,15 @@
|
|||||||
"description": "UI for renaming; currently unused"
|
"description": "UI for renaming; currently unused"
|
||||||
},
|
},
|
||||||
"renamer_batch": {
|
"renamer_batch": {
|
||||||
"message": "Batch Nummer",
|
"message": "Batch-Nummer",
|
||||||
"description": "Mask text; see mask button"
|
"description": "Mask text; see mask button"
|
||||||
},
|
},
|
||||||
"renamer_d": {
|
"renamer_d": {
|
||||||
"message": "Datum hinzugefügt - Tag",
|
"message": "Datum: hinzugefügt - Tag",
|
||||||
"description": "Mask text; see mask button"
|
"description": "Mask text; see mask button"
|
||||||
},
|
},
|
||||||
"renamer_date": {
|
"renamer_date": {
|
||||||
"message": "Datum hinzugefügt",
|
"message": "Datum: hinzugefügt",
|
||||||
"description": "Mask text; see mask button"
|
"description": "Mask text; see mask button"
|
||||||
},
|
},
|
||||||
"renamer_domain": {
|
"renamer_domain": {
|
||||||
@ -848,7 +864,7 @@
|
|||||||
"description": "Mask text; see mask button"
|
"description": "Mask text; see mask button"
|
||||||
},
|
},
|
||||||
"renamer_hh": {
|
"renamer_hh": {
|
||||||
"message": "Datum hinzugefügt - Stunde",
|
"message": "Datum: hinzugefügt - Stunde",
|
||||||
"description": "Mask text; see mask button"
|
"description": "Mask text; see mask button"
|
||||||
},
|
},
|
||||||
"renamer_host": {
|
"renamer_host": {
|
||||||
@ -856,7 +872,7 @@
|
|||||||
"description": "Mask text; see mask button"
|
"description": "Mask text; see mask button"
|
||||||
},
|
},
|
||||||
"renamer_idx": {
|
"renamer_idx": {
|
||||||
"message": "Fortlaufende Nummer im Batch",
|
"message": "Fortlaufende Nummer des Batch",
|
||||||
"description": "Mask text; see mask button"
|
"description": "Mask text; see mask button"
|
||||||
},
|
},
|
||||||
"renamer_info": {
|
"renamer_info": {
|
||||||
@ -864,11 +880,11 @@
|
|||||||
"description": "Mask text; see mask button; do NOT translate any mentions of \"flat\"!"
|
"description": "Mask text; see mask button; do NOT translate any mentions of \"flat\"!"
|
||||||
},
|
},
|
||||||
"renamer_m": {
|
"renamer_m": {
|
||||||
"message": "Datum hinzugefügt - Monat",
|
"message": "Datum: hinzugefügt - Monat",
|
||||||
"description": "Mask text; see mask button"
|
"description": "Mask text; see mask button"
|
||||||
},
|
},
|
||||||
"renamer_mm": {
|
"renamer_mm": {
|
||||||
"message": "Datum hinzugefügt - Minute",
|
"message": "Datum: hinzugefügt - Minute",
|
||||||
"description": "Mask text; see mask button"
|
"description": "Mask text; see mask button"
|
||||||
},
|
},
|
||||||
"renamer_name": {
|
"renamer_name": {
|
||||||
@ -876,7 +892,7 @@
|
|||||||
"description": "Mask text; see mask button"
|
"description": "Mask text; see mask button"
|
||||||
},
|
},
|
||||||
"renamer_num": {
|
"renamer_num": {
|
||||||
"message": "Alias für \"batch\"",
|
"message": "Alias für \"Batch\"",
|
||||||
"description": "Mask text; see mask button"
|
"description": "Mask text; see mask button"
|
||||||
},
|
},
|
||||||
"renamer_qstring": {
|
"renamer_qstring": {
|
||||||
@ -916,7 +932,7 @@
|
|||||||
"description": "Mask text; see mask button"
|
"description": "Mask text; see mask button"
|
||||||
},
|
},
|
||||||
"renamer_ss": {
|
"renamer_ss": {
|
||||||
"message": "Datum hinzugefügt - Sekunde",
|
"message": "Datum: hinzugefügt - Sekunde",
|
||||||
"description": "Mask text; see mask button"
|
"description": "Mask text; see mask button"
|
||||||
},
|
},
|
||||||
"renamer_subdirs": {
|
"renamer_subdirs": {
|
||||||
@ -940,7 +956,7 @@
|
|||||||
"description": "Mask text; see mask button"
|
"description": "Mask text; see mask button"
|
||||||
},
|
},
|
||||||
"renamer_y": {
|
"renamer_y": {
|
||||||
"message": "Datum hinzugefügt - Jahr",
|
"message": "Datum: hinzugefügt - Jahr",
|
||||||
"description": "Mask text; see mask button"
|
"description": "Mask text; see mask button"
|
||||||
},
|
},
|
||||||
"renmask": {
|
"renmask": {
|
||||||
@ -960,11 +976,11 @@
|
|||||||
"description": "Messagebox text; pref/General"
|
"description": "Messagebox text; pref/General"
|
||||||
},
|
},
|
||||||
"reset_layouts": {
|
"reset_layouts": {
|
||||||
"message": "Benutzeroberflächenanpassungen zurücksetzen",
|
"message": "Änderungen der Benutzeroberfläche zurücksetzen",
|
||||||
"description": "Button text; pref/General"
|
"description": "Button text; pref/General"
|
||||||
},
|
},
|
||||||
"reset_layouts_done": {
|
"reset_layouts_done": {
|
||||||
"message": "Alle gemerkten Benutzeroberflächenanpassungen zurückgesetzt! Tabs/Fenster müssen neu geladen werden.",
|
"message": "Alle gemerkten Anpassungen der Benutzeroberfläche zurückgesetzt! Tabs/Fenster müssen neu geladen werden.",
|
||||||
"description": "Messagebox text; pref/General"
|
"description": "Messagebox text; pref/General"
|
||||||
},
|
},
|
||||||
"resume_download": {
|
"resume_download": {
|
||||||
@ -972,7 +988,7 @@
|
|||||||
"description": "Action for resuming a download"
|
"description": "Action for resuming a download"
|
||||||
},
|
},
|
||||||
"retrying": {
|
"retrying": {
|
||||||
"message": "Neuversuch",
|
"message": "neuer Versuch",
|
||||||
"description": "Status text"
|
"description": "Status text"
|
||||||
},
|
},
|
||||||
"retrying_error": {
|
"retrying_error": {
|
||||||
@ -1010,7 +1026,7 @@
|
|||||||
"description": "Menu text; select context"
|
"description": "Menu text; select context"
|
||||||
},
|
},
|
||||||
"select_title": {
|
"select_title": {
|
||||||
"message": "DownThemAll! - Downloads auswählen",
|
"message": "TraitorousDownloading! - Downloads auswählen",
|
||||||
"description": "Title of the select window"
|
"description": "Title of the select window"
|
||||||
},
|
},
|
||||||
"SERVER_BAD_CONTENT": {
|
"SERVER_BAD_CONTENT": {
|
||||||
@ -1030,23 +1046,23 @@
|
|||||||
"description": "Error message"
|
"description": "Error message"
|
||||||
},
|
},
|
||||||
"set_mask": {
|
"set_mask": {
|
||||||
"message": "Umbenennungsmaske setzen",
|
"message": "Umbenennungsmaske festlegen",
|
||||||
"description": "Menu text; select window"
|
"description": "Menu text; select window"
|
||||||
},
|
},
|
||||||
"set_mask_text": {
|
"set_mask_text": {
|
||||||
"message": "Neue Umbenennungsmaske setzen",
|
"message": "Neue Umbenennungsmaske festlegen",
|
||||||
"description": "dialog text"
|
"description": "dialog text"
|
||||||
},
|
},
|
||||||
"set_referrer": {
|
"set_referrer": {
|
||||||
"message": "Referrer setzen",
|
"message": "Referrer festlegen",
|
||||||
"description": "menu text"
|
"description": "menu text"
|
||||||
},
|
},
|
||||||
"set_referrer_text": {
|
"set_referrer_text": {
|
||||||
"message": "Neuen Referrer setzen",
|
"message": "Neuen Referrer festlegen",
|
||||||
"description": "dialog text"
|
"description": "dialog text"
|
||||||
},
|
},
|
||||||
"single_batchexamples": {
|
"single_batchexamples": {
|
||||||
"message": "Batches sind unterstützt, z.B.:",
|
"message": "Stapelverarbeitung (Batch) wird unterstützt, z.B.:",
|
||||||
"description": "Header text; single window"
|
"description": "Header text; single window"
|
||||||
},
|
},
|
||||||
"single_header": {
|
"single_header": {
|
||||||
@ -1054,7 +1070,7 @@
|
|||||||
"description": "Header text; single window"
|
"description": "Header text; single window"
|
||||||
},
|
},
|
||||||
"single_title": {
|
"single_title": {
|
||||||
"message": "DownThemAll! - Link hinzufügen",
|
"message": "TraitorousDownloading! - Link hinzufügen",
|
||||||
"description": "Title of single window"
|
"description": "Title of single window"
|
||||||
},
|
},
|
||||||
"sizeB": {
|
"sizeB": {
|
||||||
|
@ -305,7 +305,7 @@
|
|||||||
},
|
},
|
||||||
"extensionDescription": {
|
"extensionDescription": {
|
||||||
"message": "Ο Διαχειριστής Πολλαπλών Λήψεων για τον φυλλομετρητή σας.",
|
"message": "Ο Διαχειριστής Πολλαπλών Λήψεων για τον φυλλομετρητή σας.",
|
||||||
"description": "DownThemAll! tagline, displayed in about:addons; Please do NOT refer to a specific browser such as firefox, as we will probably support more than one"
|
"description": "TraitorousDownloading! tagline, displayed in about:addons; Please do NOT refer to a specific browser such as firefox, as we will probably support more than one"
|
||||||
},
|
},
|
||||||
"fastfiltering": {
|
"fastfiltering": {
|
||||||
"message": "Γρήγορο Φιλτράρισμα",
|
"message": "Γρήγορο Φιλτράρισμα",
|
||||||
|
@ -253,27 +253,27 @@
|
|||||||
},
|
},
|
||||||
"dta_regular": {
|
"dta_regular": {
|
||||||
"description": "Regular dta action; Menu text",
|
"description": "Regular dta action; Menu text",
|
||||||
"message": "DownThemAll!"
|
"message": "TraitorousDownloading!"
|
||||||
},
|
},
|
||||||
"dta_regular_all": {
|
"dta_regular_all": {
|
||||||
"description": "Menu text",
|
"description": "Menu text",
|
||||||
"message": "DownThemAll! - All Tabs"
|
"message": "TraitorousDownloading! - All Tabs"
|
||||||
},
|
},
|
||||||
"dta_regular_image": {
|
"dta_regular_image": {
|
||||||
"description": "Menu text",
|
"description": "Menu text",
|
||||||
"message": "Save Image with DownThemAll!"
|
"message": "Save Image with TraitorousDownloading!"
|
||||||
},
|
},
|
||||||
"dta_regular_link": {
|
"dta_regular_link": {
|
||||||
"description": "Menu text",
|
"description": "Menu text",
|
||||||
"message": "Save Link with DownThemAll!"
|
"message": "Save Link with TraitorousDownloading!"
|
||||||
},
|
},
|
||||||
"dta_regular_media": {
|
"dta_regular_media": {
|
||||||
"description": "Menu text",
|
"description": "Menu text",
|
||||||
"message": "Save Media with DownThemAll!"
|
"message": "Save Media with TraitorousDownloading!"
|
||||||
},
|
},
|
||||||
"dta_regular_selection": {
|
"dta_regular_selection": {
|
||||||
"description": "Menu text",
|
"description": "Menu text",
|
||||||
"message": "Save Selection with DownThemAll!"
|
"message": "Save Selection with TraitorousDownloading!"
|
||||||
},
|
},
|
||||||
"dta_turbo": {
|
"dta_turbo": {
|
||||||
"description": "OneClick! action; Menu text",
|
"description": "OneClick! action; Menu text",
|
||||||
@ -303,6 +303,10 @@
|
|||||||
"description": "Error message; single/select window",
|
"description": "Error message; single/select window",
|
||||||
"message": "Invalid Renaming Mask"
|
"message": "Invalid Renaming Mask"
|
||||||
},
|
},
|
||||||
|
"error_invalidServer": {
|
||||||
|
"description": "Error message; single/select window",
|
||||||
|
"message": "Invalid server URL"
|
||||||
|
},
|
||||||
"error_invalidReferrer": {
|
"error_invalidReferrer": {
|
||||||
"description": "Error message; single window",
|
"description": "Error message; single window",
|
||||||
"message": "Invalid Referrer"
|
"message": "Invalid Referrer"
|
||||||
@ -340,7 +344,7 @@
|
|||||||
"message": "Export As Text"
|
"message": "Export As Text"
|
||||||
},
|
},
|
||||||
"extensionDescription": {
|
"extensionDescription": {
|
||||||
"description": "DownThemAll! tagline, displayed in about:addons; Please do NOT refer to a specific browser such as firefox, as we will probably support more than one",
|
"description": "TraitorousDownloading! tagline, displayed in about:addons; Please do NOT refer to a specific browser such as firefox, as we will probably support more than one",
|
||||||
"message": "The Mass Downloader for your browser"
|
"message": "The Mass Downloader for your browser"
|
||||||
},
|
},
|
||||||
"fastfilter_placeholder": {
|
"fastfilter_placeholder": {
|
||||||
@ -475,7 +479,7 @@
|
|||||||
},
|
},
|
||||||
"manager_title": {
|
"manager_title": {
|
||||||
"description": "Window/tab title",
|
"description": "Window/tab title",
|
||||||
"message": "DownThemAll! Manager"
|
"message": "TraitorousDownloading! Manager"
|
||||||
},
|
},
|
||||||
"mask": {
|
"mask": {
|
||||||
"description": "Renaming mask (short); used in e.g. select",
|
"description": "Renaming mask (short); used in e.g. select",
|
||||||
@ -511,7 +515,7 @@
|
|||||||
},
|
},
|
||||||
"nagging_message": {
|
"nagging_message": {
|
||||||
"description": "Donation nagging message; displayed as a notification bar in manager",
|
"description": "Donation nagging message; displayed as a notification bar in manager",
|
||||||
"message": "You've added $DOWNLOADS$ downloads with DownThemAll! so far! As a regular user you might want to consider a donation to support further development. Thanks!",
|
"message": "You've added $DOWNLOADS$ downloads with TraitorousDownloading! so far! As a regular user you might want to consider a donation to support further development. Thanks!",
|
||||||
"placeholders": {
|
"placeholders": {
|
||||||
"downloads": {
|
"downloads": {
|
||||||
"content": "$1",
|
"content": "$1",
|
||||||
@ -583,11 +587,11 @@
|
|||||||
},
|
},
|
||||||
"pref_button_type": {
|
"pref_button_type": {
|
||||||
"description": "label",
|
"description": "label",
|
||||||
"message": "DownThemAll! button:"
|
"message": "TraitorousDownloading! button:"
|
||||||
},
|
},
|
||||||
"pref_button_type_dta": {
|
"pref_button_type_dta": {
|
||||||
"description": "label",
|
"description": "label",
|
||||||
"message": "DownThemAll! selection"
|
"message": "TraitorousDownloading! selection"
|
||||||
},
|
},
|
||||||
"pref_button_type_manager": {
|
"pref_button_type_manager": {
|
||||||
"description": "label",
|
"description": "label",
|
||||||
@ -633,6 +637,10 @@
|
|||||||
"description": "Preferences/General",
|
"description": "Preferences/General",
|
||||||
"message": "Open the Manager tab after queuing some downloads"
|
"message": "Open the Manager tab after queuing some downloads"
|
||||||
},
|
},
|
||||||
|
"pref_cookies": {
|
||||||
|
"description": "Preferences/General",
|
||||||
|
"message": "Send cookies to the download server"
|
||||||
|
},
|
||||||
"pref_queue_notification": {
|
"pref_queue_notification": {
|
||||||
"description": "Preferences/General",
|
"description": "Preferences/General",
|
||||||
"message": "Show a notification when queuing new downloads"
|
"message": "Show a notification when queuing new downloads"
|
||||||
@ -665,6 +673,22 @@
|
|||||||
"description": "Preferences/General",
|
"description": "Preferences/General",
|
||||||
"message": "Try to find links in the website text (slower)"
|
"message": "Try to find links in the website text (slower)"
|
||||||
},
|
},
|
||||||
|
"pref_theme": {
|
||||||
|
"description": "label text",
|
||||||
|
"message": "Theme:"
|
||||||
|
},
|
||||||
|
"pref_theme_dark": {
|
||||||
|
"description": "option text",
|
||||||
|
"message": "Dark"
|
||||||
|
},
|
||||||
|
"pref_theme_default": {
|
||||||
|
"description": "option text",
|
||||||
|
"message": "System/Browser"
|
||||||
|
},
|
||||||
|
"pref_theme_light": {
|
||||||
|
"description": "option text",
|
||||||
|
"message": "Light"
|
||||||
|
},
|
||||||
"pref_ui": {
|
"pref_ui": {
|
||||||
"description": "Preferences/General; group text",
|
"description": "Preferences/General; group text",
|
||||||
"message": "User Interface"
|
"message": "User Interface"
|
||||||
@ -679,7 +703,7 @@
|
|||||||
},
|
},
|
||||||
"prefs_title": {
|
"prefs_title": {
|
||||||
"description": "Window/tab title; Preferences",
|
"description": "Window/tab title; Preferences",
|
||||||
"message": "DownThemAll! Preferences"
|
"message": "TraitorousDownloading! Preferences"
|
||||||
},
|
},
|
||||||
"queue_finished": {
|
"queue_finished": {
|
||||||
"description": "Notification text",
|
"description": "Notification text",
|
||||||
@ -705,7 +729,7 @@
|
|||||||
},
|
},
|
||||||
"referrer": {
|
"referrer": {
|
||||||
"description": "Label for \"Referrer\"",
|
"description": "Label for \"Referrer\"",
|
||||||
"message": "Referrer"
|
"message": "Referrer (Not implemented)"
|
||||||
},
|
},
|
||||||
"remember": {
|
"remember": {
|
||||||
"description": "Checkbox text for confirmation, e.g. when removing a download in manager",
|
"description": "Checkbox text for confirmation, e.g. when removing a download in manager",
|
||||||
@ -905,7 +929,7 @@
|
|||||||
},
|
},
|
||||||
"renamer_ref": {
|
"renamer_ref": {
|
||||||
"description": "Mask text; see mask button",
|
"description": "Mask text; see mask button",
|
||||||
"message": "Referrer"
|
"message": "Referrer (Not implemented)"
|
||||||
},
|
},
|
||||||
"renamer_refdomain": {
|
"renamer_refdomain": {
|
||||||
"description": "Mask text; see mask button",
|
"description": "Mask text; see mask button",
|
||||||
@ -1031,7 +1055,11 @@
|
|||||||
},
|
},
|
||||||
"select_title": {
|
"select_title": {
|
||||||
"description": "Title of the select window",
|
"description": "Title of the select window",
|
||||||
"message": "DownThemAll! - Select your Downloads"
|
"message": "TraitorousDownloading! - Select your Downloads"
|
||||||
|
},
|
||||||
|
"server": {
|
||||||
|
"description": "Downloader Server",
|
||||||
|
"message": "Server"
|
||||||
},
|
},
|
||||||
"set_mask": {
|
"set_mask": {
|
||||||
"description": "Menu text; select window",
|
"description": "Menu text; select window",
|
||||||
@ -1059,7 +1087,7 @@
|
|||||||
},
|
},
|
||||||
"single_title": {
|
"single_title": {
|
||||||
"description": "Title of single window",
|
"description": "Title of single window",
|
||||||
"message": "DownThemAll! - Add a link"
|
"message": "TraitorousDownloading! - Add a link"
|
||||||
},
|
},
|
||||||
"sizeB": {
|
"sizeB": {
|
||||||
"description": "Size formatting; bytes",
|
"description": "Size formatting; bytes",
|
||||||
@ -1280,5 +1308,9 @@
|
|||||||
"useonlyonce": {
|
"useonlyonce": {
|
||||||
"description": "Label for Use-Once checkboxes",
|
"description": "Label for Use-Once checkboxes",
|
||||||
"message": "Use Once"
|
"message": "Use Once"
|
||||||
|
},
|
||||||
|
"cookies": {
|
||||||
|
"description": "Label for cookie checkboxes",
|
||||||
|
"message": "Send cookies to server"
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -232,27 +232,27 @@
|
|||||||
"description": "Download (verb/action); e.g. in single and select buttons"
|
"description": "Download (verb/action); e.g. in single and select buttons"
|
||||||
},
|
},
|
||||||
"dta_regular": {
|
"dta_regular": {
|
||||||
"message": "DownThemAll!",
|
"message": "TraitorousDownloading!",
|
||||||
"description": "Regular dta action; Menu text"
|
"description": "Regular dta action; Menu text"
|
||||||
},
|
},
|
||||||
"dta_regular_all": {
|
"dta_regular_all": {
|
||||||
"message": "DownThemAll! - Todas las pestañas",
|
"message": "TraitorousDownloading! - Todas las pestañas",
|
||||||
"description": "Menu text"
|
"description": "Menu text"
|
||||||
},
|
},
|
||||||
"dta_regular_image": {
|
"dta_regular_image": {
|
||||||
"message": "Guardar imagen con DownThemAll!",
|
"message": "Guardar imagen con TraitorousDownloading!",
|
||||||
"description": "Menu text"
|
"description": "Menu text"
|
||||||
},
|
},
|
||||||
"dta_regular_link": {
|
"dta_regular_link": {
|
||||||
"message": "Guardar enlace con DownThemAll!",
|
"message": "Guardar enlace con TraitorousDownloading!",
|
||||||
"description": "Menu text"
|
"description": "Menu text"
|
||||||
},
|
},
|
||||||
"dta_regular_media": {
|
"dta_regular_media": {
|
||||||
"message": "Guardar multimedia con DownThemAll!",
|
"message": "Guardar multimedia con TraitorousDownloading!",
|
||||||
"description": "Menu text"
|
"description": "Menu text"
|
||||||
},
|
},
|
||||||
"dta_regular_selection": {
|
"dta_regular_selection": {
|
||||||
"message": "Guardar selección con DownThemAll!",
|
"message": "Guardar selección con TraitorousDownloading!",
|
||||||
"description": "Menu text"
|
"description": "Menu text"
|
||||||
},
|
},
|
||||||
"dta_turbo": {
|
"dta_turbo": {
|
||||||
@ -321,7 +321,7 @@
|
|||||||
},
|
},
|
||||||
"extensionDescription": {
|
"extensionDescription": {
|
||||||
"message": "El programa de descargas masivas para su navegador",
|
"message": "El programa de descargas masivas para su navegador",
|
||||||
"description": "DownThemAll! tagline, displayed in about:addons; Please do NOT refer to a specific browser such as firefox, as we will probably support more than one"
|
"description": "TraitorousDownloading! tagline, displayed in about:addons; Please do NOT refer to a specific browser such as firefox, as we will probably support more than one"
|
||||||
},
|
},
|
||||||
"fastfiltering": {
|
"fastfiltering": {
|
||||||
"message": "Filtro rápido",
|
"message": "Filtro rápido",
|
||||||
@ -450,7 +450,7 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"manager_title": {
|
"manager_title": {
|
||||||
"message": "Gestor DownThemAll!",
|
"message": "Gestor TraitorousDownloading!",
|
||||||
"description": "Window/tab title"
|
"description": "Window/tab title"
|
||||||
},
|
},
|
||||||
"mask": {
|
"mask": {
|
||||||
@ -486,7 +486,7 @@
|
|||||||
"description": "Action for moving a download up"
|
"description": "Action for moving a download up"
|
||||||
},
|
},
|
||||||
"nagging_message": {
|
"nagging_message": {
|
||||||
"message": "¡Ha añadido $DOWNLOADS$ descargas con DownThemAll! hasta el momento! Al ser un usuario habitual quizás podría plantearse hacer una donación para apoyar el futuro desarrollo del proyecto. ¡Gracias!",
|
"message": "¡Ha añadido $DOWNLOADS$ descargas con TraitorousDownloading! hasta el momento! Al ser un usuario habitual quizás podría plantearse hacer una donación para apoyar el futuro desarrollo del proyecto. ¡Gracias!",
|
||||||
"description": "Donation nagging message; displayed as a notification bar in manager",
|
"description": "Donation nagging message; displayed as a notification bar in manager",
|
||||||
"placeholders": {
|
"placeholders": {
|
||||||
"downloads": {
|
"downloads": {
|
||||||
@ -566,7 +566,7 @@
|
|||||||
"description": "Menu text; Preferences"
|
"description": "Menu text; Preferences"
|
||||||
},
|
},
|
||||||
"prefs_title": {
|
"prefs_title": {
|
||||||
"message": "Preferencias de DownThemAll!",
|
"message": "Preferencias de TraitorousDownloading!",
|
||||||
"description": "Window/tab title; Preferences"
|
"description": "Window/tab title; Preferences"
|
||||||
},
|
},
|
||||||
"pref_add_paused": {
|
"pref_add_paused": {
|
||||||
@ -574,11 +574,11 @@
|
|||||||
"description": "Preferences/General"
|
"description": "Preferences/General"
|
||||||
},
|
},
|
||||||
"pref_button_type": {
|
"pref_button_type": {
|
||||||
"message": "Botón DownThemAll!:",
|
"message": "Botón TraitorousDownloading!:",
|
||||||
"description": "label"
|
"description": "label"
|
||||||
},
|
},
|
||||||
"pref_button_type_dta": {
|
"pref_button_type_dta": {
|
||||||
"message": "Selección DownThemAll!",
|
"message": "Selección TraitorousDownloading!",
|
||||||
"description": "label"
|
"description": "label"
|
||||||
},
|
},
|
||||||
"pref_button_type_manager": {
|
"pref_button_type_manager": {
|
||||||
@ -657,6 +657,22 @@
|
|||||||
"message": "Intentar buscar enlaces en el texto del sitio web (más lento)",
|
"message": "Intentar buscar enlaces en el texto del sitio web (más lento)",
|
||||||
"description": "Preferences/General"
|
"description": "Preferences/General"
|
||||||
},
|
},
|
||||||
|
"pref_theme": {
|
||||||
|
"message": "Tema:",
|
||||||
|
"description": "label text"
|
||||||
|
},
|
||||||
|
"pref_theme_dark": {
|
||||||
|
"message": "Oscuro",
|
||||||
|
"description": "option text"
|
||||||
|
},
|
||||||
|
"pref_theme_default": {
|
||||||
|
"message": "Sistema/Navegador",
|
||||||
|
"description": "option text"
|
||||||
|
},
|
||||||
|
"pref_theme_light": {
|
||||||
|
"message": "Claro",
|
||||||
|
"description": "option text"
|
||||||
|
},
|
||||||
"pref_ui": {
|
"pref_ui": {
|
||||||
"message": "Interfaz de usuario",
|
"message": "Interfaz de usuario",
|
||||||
"description": "Preferences/General; group text"
|
"description": "Preferences/General; group text"
|
||||||
@ -1010,7 +1026,7 @@
|
|||||||
"description": "Menu text; select context"
|
"description": "Menu text; select context"
|
||||||
},
|
},
|
||||||
"select_title": {
|
"select_title": {
|
||||||
"message": "DownThemAll! - Seleccionar sus descargas",
|
"message": "TraitorousDownloading! - Seleccionar sus descargas",
|
||||||
"description": "Title of the select window"
|
"description": "Title of the select window"
|
||||||
},
|
},
|
||||||
"SERVER_BAD_CONTENT": {
|
"SERVER_BAD_CONTENT": {
|
||||||
@ -1054,7 +1070,7 @@
|
|||||||
"description": "Header text; single window"
|
"description": "Header text; single window"
|
||||||
},
|
},
|
||||||
"single_title": {
|
"single_title": {
|
||||||
"message": "DownThemAll! - Añadir un enlace",
|
"message": "TraitorousDownloading! - Añadir un enlace",
|
||||||
"description": "Title of single window"
|
"description": "Title of single window"
|
||||||
},
|
},
|
||||||
"sizeB": {
|
"sizeB": {
|
||||||
|
@ -232,27 +232,27 @@
|
|||||||
"description": "Download (verb/action); e.g. in single and select buttons"
|
"description": "Download (verb/action); e.g. in single and select buttons"
|
||||||
},
|
},
|
||||||
"dta_regular": {
|
"dta_regular": {
|
||||||
"message": "DownThemAll!",
|
"message": "TraitorousDownloading!",
|
||||||
"description": "Regular dta action; Menu text"
|
"description": "Regular dta action; Menu text"
|
||||||
},
|
},
|
||||||
"dta_regular_all": {
|
"dta_regular_all": {
|
||||||
"message": "DownThemAll! - Kõik kaardid",
|
"message": "TraitorousDownloading! - Kõik kaardid",
|
||||||
"description": "Menu text"
|
"description": "Menu text"
|
||||||
},
|
},
|
||||||
"dta_regular_image": {
|
"dta_regular_image": {
|
||||||
"message": "Salvesta pilt DownThemAll!-iga",
|
"message": "Salvesta pilt TraitorousDownloading!-iga",
|
||||||
"description": "Menu text"
|
"description": "Menu text"
|
||||||
},
|
},
|
||||||
"dta_regular_link": {
|
"dta_regular_link": {
|
||||||
"message": "Salvesta link DownThemAll!-iga",
|
"message": "Salvesta link TraitorousDownloading!-iga",
|
||||||
"description": "Menu text"
|
"description": "Menu text"
|
||||||
},
|
},
|
||||||
"dta_regular_media": {
|
"dta_regular_media": {
|
||||||
"message": "Salvesta meedia DownThemAll!-iga",
|
"message": "Salvesta meedia TraitorousDownloading!-iga",
|
||||||
"description": "Menu text"
|
"description": "Menu text"
|
||||||
},
|
},
|
||||||
"dta_regular_selection": {
|
"dta_regular_selection": {
|
||||||
"message": "Salvesta valik DownThemAll!-iga",
|
"message": "Salvesta valik TraitorousDownloading!-iga",
|
||||||
"description": "Menu text"
|
"description": "Menu text"
|
||||||
},
|
},
|
||||||
"dta_turbo": {
|
"dta_turbo": {
|
||||||
@ -321,7 +321,7 @@
|
|||||||
},
|
},
|
||||||
"extensionDescription": {
|
"extensionDescription": {
|
||||||
"message": "Massallalaadija sinu veebilehitsejale",
|
"message": "Massallalaadija sinu veebilehitsejale",
|
||||||
"description": "DownThemAll! tagline, displayed in about:addons; Please do NOT refer to a specific browser such as firefox, as we will probably support more than one"
|
"description": "TraitorousDownloading! tagline, displayed in about:addons; Please do NOT refer to a specific browser such as firefox, as we will probably support more than one"
|
||||||
},
|
},
|
||||||
"fastfiltering": {
|
"fastfiltering": {
|
||||||
"message": "Kiirfiltreerimine",
|
"message": "Kiirfiltreerimine",
|
||||||
@ -450,7 +450,7 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"manager_title": {
|
"manager_title": {
|
||||||
"message": "DownThemAll! haldur",
|
"message": "TraitorousDownloading! haldur",
|
||||||
"description": "Window/tab title"
|
"description": "Window/tab title"
|
||||||
},
|
},
|
||||||
"mask": {
|
"mask": {
|
||||||
@ -486,7 +486,7 @@
|
|||||||
"description": "Action for moving a download up"
|
"description": "Action for moving a download up"
|
||||||
},
|
},
|
||||||
"nagging_message": {
|
"nagging_message": {
|
||||||
"message": "Sa oled praeguseks DownThemAll!-iga lisanud $DOWNLOADS$ allalaadimist! Tavakasutajana võiksid edasise arendamise toetamiseks kaaluda annetamist. Täname!",
|
"message": "Sa oled praeguseks TraitorousDownloading!-iga lisanud $DOWNLOADS$ allalaadimist! Tavakasutajana võiksid edasise arendamise toetamiseks kaaluda annetamist. Täname!",
|
||||||
"description": "Donation nagging message; displayed as a notification bar in manager",
|
"description": "Donation nagging message; displayed as a notification bar in manager",
|
||||||
"placeholders": {
|
"placeholders": {
|
||||||
"downloads": {
|
"downloads": {
|
||||||
@ -566,7 +566,7 @@
|
|||||||
"description": "Menu text; Preferences"
|
"description": "Menu text; Preferences"
|
||||||
},
|
},
|
||||||
"prefs_title": {
|
"prefs_title": {
|
||||||
"message": "DownThemAll! eelistused",
|
"message": "TraitorousDownloading! eelistused",
|
||||||
"description": "Window/tab title; Preferences"
|
"description": "Window/tab title; Preferences"
|
||||||
},
|
},
|
||||||
"pref_add_paused": {
|
"pref_add_paused": {
|
||||||
@ -574,11 +574,11 @@
|
|||||||
"description": "Preferences/General"
|
"description": "Preferences/General"
|
||||||
},
|
},
|
||||||
"pref_button_type": {
|
"pref_button_type": {
|
||||||
"message": "DownThemAll! nupp:",
|
"message": "TraitorousDownloading! nupp:",
|
||||||
"description": "label"
|
"description": "label"
|
||||||
},
|
},
|
||||||
"pref_button_type_dta": {
|
"pref_button_type_dta": {
|
||||||
"message": "DownThemAll! valik",
|
"message": "TraitorousDownloading! valik",
|
||||||
"description": "label"
|
"description": "label"
|
||||||
},
|
},
|
||||||
"pref_button_type_manager": {
|
"pref_button_type_manager": {
|
||||||
@ -657,6 +657,22 @@
|
|||||||
"message": "Ürita leida linke veebisaidi tekstist (aeglasem)",
|
"message": "Ürita leida linke veebisaidi tekstist (aeglasem)",
|
||||||
"description": "Preferences/General"
|
"description": "Preferences/General"
|
||||||
},
|
},
|
||||||
|
"pref_theme": {
|
||||||
|
"message": "Teema:",
|
||||||
|
"description": "label text"
|
||||||
|
},
|
||||||
|
"pref_theme_dark": {
|
||||||
|
"message": "Tume",
|
||||||
|
"description": "option text"
|
||||||
|
},
|
||||||
|
"pref_theme_default": {
|
||||||
|
"message": "Süsteem/Veebilehitseja",
|
||||||
|
"description": "option text"
|
||||||
|
},
|
||||||
|
"pref_theme_light": {
|
||||||
|
"message": "Hele",
|
||||||
|
"description": "option text"
|
||||||
|
},
|
||||||
"pref_ui": {
|
"pref_ui": {
|
||||||
"message": "Kasutajaliides",
|
"message": "Kasutajaliides",
|
||||||
"description": "Preferences/General; group text"
|
"description": "Preferences/General; group text"
|
||||||
@ -1010,7 +1026,7 @@
|
|||||||
"description": "Menu text; select context"
|
"description": "Menu text; select context"
|
||||||
},
|
},
|
||||||
"select_title": {
|
"select_title": {
|
||||||
"message": "DownThemAll! - Vali oma allalaadimised",
|
"message": "TraitorousDownloading! - Vali oma allalaadimised",
|
||||||
"description": "Title of the select window"
|
"description": "Title of the select window"
|
||||||
},
|
},
|
||||||
"SERVER_BAD_CONTENT": {
|
"SERVER_BAD_CONTENT": {
|
||||||
@ -1054,7 +1070,7 @@
|
|||||||
"description": "Header text; single window"
|
"description": "Header text; single window"
|
||||||
},
|
},
|
||||||
"single_title": {
|
"single_title": {
|
||||||
"message": "DownThemAll! - Lingi lisamine",
|
"message": "TraitorousDownloading! - Lingi lisamine",
|
||||||
"description": "Title of single window"
|
"description": "Title of single window"
|
||||||
},
|
},
|
||||||
"sizeB": {
|
"sizeB": {
|
||||||
|
@ -232,27 +232,27 @@
|
|||||||
"description": "Download (verb/action); e.g. in single and select buttons"
|
"description": "Download (verb/action); e.g. in single and select buttons"
|
||||||
},
|
},
|
||||||
"dta_regular": {
|
"dta_regular": {
|
||||||
"message": "DownThemAll!",
|
"message": "TraitorousDownloading!",
|
||||||
"description": "Regular dta action; Menu text"
|
"description": "Regular dta action; Menu text"
|
||||||
},
|
},
|
||||||
"dta_regular_all": {
|
"dta_regular_all": {
|
||||||
"message": "DownThemAll! - Tous les onglets",
|
"message": "TraitorousDownloading! - Tous les onglets",
|
||||||
"description": "Menu text"
|
"description": "Menu text"
|
||||||
},
|
},
|
||||||
"dta_regular_image": {
|
"dta_regular_image": {
|
||||||
"message": "Enregistrer l'image avec DownThemAll!",
|
"message": "Enregistrer l'image avec TraitorousDownloading!",
|
||||||
"description": "Menu text"
|
"description": "Menu text"
|
||||||
},
|
},
|
||||||
"dta_regular_link": {
|
"dta_regular_link": {
|
||||||
"message": "Enregistrer le lien avec DownThemAll!",
|
"message": "Enregistrer le lien avec TraitorousDownloading!",
|
||||||
"description": "Menu text"
|
"description": "Menu text"
|
||||||
},
|
},
|
||||||
"dta_regular_media": {
|
"dta_regular_media": {
|
||||||
"message": "Enregistrer le média avec DownThemAll!",
|
"message": "Enregistrer le média avec TraitorousDownloading!",
|
||||||
"description": "Menu text"
|
"description": "Menu text"
|
||||||
},
|
},
|
||||||
"dta_regular_selection": {
|
"dta_regular_selection": {
|
||||||
"message": "Enregistrer la sélection avec DownThemAll!",
|
"message": "Enregistrer la sélection avec TraitorousDownloading!",
|
||||||
"description": "Menu text"
|
"description": "Menu text"
|
||||||
},
|
},
|
||||||
"dta_turbo": {
|
"dta_turbo": {
|
||||||
@ -321,7 +321,7 @@
|
|||||||
},
|
},
|
||||||
"extensionDescription": {
|
"extensionDescription": {
|
||||||
"message": "Le gestionnaire de téléchargements pour votre navigateur",
|
"message": "Le gestionnaire de téléchargements pour votre navigateur",
|
||||||
"description": "DownThemAll! tagline, displayed in about:addons; Please do NOT refer to a specific browser such as firefox, as we will probably support more than one"
|
"description": "TraitorousDownloading! tagline, displayed in about:addons; Please do NOT refer to a specific browser such as firefox, as we will probably support more than one"
|
||||||
},
|
},
|
||||||
"fastfiltering": {
|
"fastfiltering": {
|
||||||
"message": "Filtrage rapide",
|
"message": "Filtrage rapide",
|
||||||
@ -450,7 +450,7 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"manager_title": {
|
"manager_title": {
|
||||||
"message": "DownThemAll! Gestionnaire",
|
"message": "TraitorousDownloading! Gestionnaire",
|
||||||
"description": "Window/tab title"
|
"description": "Window/tab title"
|
||||||
},
|
},
|
||||||
"mask": {
|
"mask": {
|
||||||
@ -486,7 +486,7 @@
|
|||||||
"description": "Action for moving a download up"
|
"description": "Action for moving a download up"
|
||||||
},
|
},
|
||||||
"nagging_message": {
|
"nagging_message": {
|
||||||
"message": "Vous avez utilisé DownThemAll! pour $DOWNLOADS$ téléchargements jusqu'à présent! En tant qu'utilisateur régulier, peut-être voudriez-vous faire un don pour supporter les versions futures. Merci!",
|
"message": "Vous avez utilisé TraitorousDownloading! pour $DOWNLOADS$ téléchargements jusqu'à présent! En tant qu'utilisateur régulier, peut-être voudriez-vous faire un don pour supporter les versions futures. Merci!",
|
||||||
"description": "Donation nagging message; displayed as a notification bar in manager",
|
"description": "Donation nagging message; displayed as a notification bar in manager",
|
||||||
"placeholders": {
|
"placeholders": {
|
||||||
"downloads": {
|
"downloads": {
|
||||||
@ -566,7 +566,7 @@
|
|||||||
"description": "Menu text; Preferences"
|
"description": "Menu text; Preferences"
|
||||||
},
|
},
|
||||||
"prefs_title": {
|
"prefs_title": {
|
||||||
"message": "Paramètres DownThemAll!",
|
"message": "Paramètres TraitorousDownloading!",
|
||||||
"description": "Window/tab title; Preferences"
|
"description": "Window/tab title; Preferences"
|
||||||
},
|
},
|
||||||
"pref_add_paused": {
|
"pref_add_paused": {
|
||||||
@ -574,11 +574,11 @@
|
|||||||
"description": "Preferences/General"
|
"description": "Preferences/General"
|
||||||
},
|
},
|
||||||
"pref_button_type": {
|
"pref_button_type": {
|
||||||
"message": "Bouton DownThemAll!",
|
"message": "Bouton TraitorousDownloading!",
|
||||||
"description": "label"
|
"description": "label"
|
||||||
},
|
},
|
||||||
"pref_button_type_dta": {
|
"pref_button_type_dta": {
|
||||||
"message": "Sélection DownthemAll!",
|
"message": "Sélection TraitorousDownloading!",
|
||||||
"description": "label"
|
"description": "label"
|
||||||
},
|
},
|
||||||
"pref_button_type_manager": {
|
"pref_button_type_manager": {
|
||||||
@ -657,6 +657,22 @@
|
|||||||
"message": "Tenter de trouver des liens dans le texte du site (lent)",
|
"message": "Tenter de trouver des liens dans le texte du site (lent)",
|
||||||
"description": "Preferences/General"
|
"description": "Preferences/General"
|
||||||
},
|
},
|
||||||
|
"pref_theme": {
|
||||||
|
"message": "Thème:",
|
||||||
|
"description": "label text"
|
||||||
|
},
|
||||||
|
"pref_theme_dark": {
|
||||||
|
"message": "Sombre",
|
||||||
|
"description": "option text"
|
||||||
|
},
|
||||||
|
"pref_theme_default": {
|
||||||
|
"message": "Système/Navigateur",
|
||||||
|
"description": "option text"
|
||||||
|
},
|
||||||
|
"pref_theme_light": {
|
||||||
|
"message": "Clair",
|
||||||
|
"description": "option text"
|
||||||
|
},
|
||||||
"pref_ui": {
|
"pref_ui": {
|
||||||
"message": "Interface utilisateur",
|
"message": "Interface utilisateur",
|
||||||
"description": "Preferences/General; group text"
|
"description": "Preferences/General; group text"
|
||||||
@ -1010,7 +1026,7 @@
|
|||||||
"description": "Menu text; select context"
|
"description": "Menu text; select context"
|
||||||
},
|
},
|
||||||
"select_title": {
|
"select_title": {
|
||||||
"message": "DownThemAll! - Selectionner vos téléchargements",
|
"message": "TraitorousDownloading! - Selectionner vos téléchargements",
|
||||||
"description": "Title of the select window"
|
"description": "Title of the select window"
|
||||||
},
|
},
|
||||||
"SERVER_BAD_CONTENT": {
|
"SERVER_BAD_CONTENT": {
|
||||||
@ -1054,7 +1070,7 @@
|
|||||||
"description": "Header text; single window"
|
"description": "Header text; single window"
|
||||||
},
|
},
|
||||||
"single_title": {
|
"single_title": {
|
||||||
"message": "DownThemAll! - Ajouter un lien",
|
"message": "TraitorousDownloading! - Ajouter un lien",
|
||||||
"description": "Title of single window"
|
"description": "Title of single window"
|
||||||
},
|
},
|
||||||
"sizeB": {
|
"sizeB": {
|
||||||
|
@ -232,27 +232,27 @@
|
|||||||
"description": "Download (verb/action); e.g. in single and select buttons"
|
"description": "Download (verb/action); e.g. in single and select buttons"
|
||||||
},
|
},
|
||||||
"dta_regular": {
|
"dta_regular": {
|
||||||
"message": "DownThemAll!",
|
"message": "TraitorousDownloading!",
|
||||||
"description": "Regular dta action; Menu text"
|
"description": "Regular dta action; Menu text"
|
||||||
},
|
},
|
||||||
"dta_regular_all": {
|
"dta_regular_all": {
|
||||||
"message": "DownThemAll! - Összes lap",
|
"message": "TraitorousDownloading! - Összes lap",
|
||||||
"description": "Menu text"
|
"description": "Menu text"
|
||||||
},
|
},
|
||||||
"dta_regular_image": {
|
"dta_regular_image": {
|
||||||
"message": "Kép mentése a DownThemAll-al!",
|
"message": "Kép mentése a TraitorousDownloading-al!",
|
||||||
"description": "Menu text"
|
"description": "Menu text"
|
||||||
},
|
},
|
||||||
"dta_regular_link": {
|
"dta_regular_link": {
|
||||||
"message": "Hivatkozás mentése DownThemAll-al",
|
"message": "Hivatkozás mentése TraitorousDownloading-al",
|
||||||
"description": "Menu text"
|
"description": "Menu text"
|
||||||
},
|
},
|
||||||
"dta_regular_media": {
|
"dta_regular_media": {
|
||||||
"message": "Média mentése DownThemAll-al",
|
"message": "Média mentése TraitorousDownloading-al",
|
||||||
"description": "Menu text"
|
"description": "Menu text"
|
||||||
},
|
},
|
||||||
"dta_regular_selection": {
|
"dta_regular_selection": {
|
||||||
"message": "Kiválasztás mentése DownThemAll-al",
|
"message": "Kiválasztás mentése TraitorousDownloading-al",
|
||||||
"description": "Menu text"
|
"description": "Menu text"
|
||||||
},
|
},
|
||||||
"dta_turbo": {
|
"dta_turbo": {
|
||||||
@ -321,7 +321,7 @@
|
|||||||
},
|
},
|
||||||
"extensionDescription": {
|
"extensionDescription": {
|
||||||
"message": "A tömeges letöltő a böngésződ számára",
|
"message": "A tömeges letöltő a böngésződ számára",
|
||||||
"description": "DownThemAll! tagline, displayed in about:addons; Please do NOT refer to a specific browser such as firefox, as we will probably support more than one"
|
"description": "TraitorousDownloading! tagline, displayed in about:addons; Please do NOT refer to a specific browser such as firefox, as we will probably support more than one"
|
||||||
},
|
},
|
||||||
"fastfiltering": {
|
"fastfiltering": {
|
||||||
"message": "Gyors szűrés",
|
"message": "Gyors szűrés",
|
||||||
@ -450,7 +450,7 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"manager_title": {
|
"manager_title": {
|
||||||
"message": "DownThemAll! kezelő",
|
"message": "TraitorousDownloading! kezelő",
|
||||||
"description": "Window/tab title"
|
"description": "Window/tab title"
|
||||||
},
|
},
|
||||||
"mask": {
|
"mask": {
|
||||||
@ -486,7 +486,7 @@
|
|||||||
"description": "Action for moving a download up"
|
"description": "Action for moving a download up"
|
||||||
},
|
},
|
||||||
"nagging_message": {
|
"nagging_message": {
|
||||||
"message": "Eddig $DOWNLOADS$ letöltést adtál hozzá a DownThemAll!-hoz! Gyakori felhasználóként megfontolhatnád a további fejlesztés támogatását. Köszönöm!",
|
"message": "Eddig $DOWNLOADS$ letöltést adtál hozzá a TraitorousDownloading!-hoz! Gyakori felhasználóként megfontolhatnád a további fejlesztés támogatását. Köszönöm!",
|
||||||
"description": "Donation nagging message; displayed as a notification bar in manager",
|
"description": "Donation nagging message; displayed as a notification bar in manager",
|
||||||
"placeholders": {
|
"placeholders": {
|
||||||
"downloads": {
|
"downloads": {
|
||||||
@ -566,7 +566,7 @@
|
|||||||
"description": "Menu text; Preferences"
|
"description": "Menu text; Preferences"
|
||||||
},
|
},
|
||||||
"prefs_title": {
|
"prefs_title": {
|
||||||
"message": "DownThemAll! beállításai",
|
"message": "TraitorousDownloading! beállításai",
|
||||||
"description": "Window/tab title; Preferences"
|
"description": "Window/tab title; Preferences"
|
||||||
},
|
},
|
||||||
"pref_add_paused": {
|
"pref_add_paused": {
|
||||||
@ -574,11 +574,11 @@
|
|||||||
"description": "Preferences/General"
|
"description": "Preferences/General"
|
||||||
},
|
},
|
||||||
"pref_button_type": {
|
"pref_button_type": {
|
||||||
"message": "DownThemAll gomb:",
|
"message": "TraitorousDownloading gomb:",
|
||||||
"description": "label"
|
"description": "label"
|
||||||
},
|
},
|
||||||
"pref_button_type_dta": {
|
"pref_button_type_dta": {
|
||||||
"message": "DownThemAll választás",
|
"message": "TraitorousDownloading választás",
|
||||||
"description": "label"
|
"description": "label"
|
||||||
},
|
},
|
||||||
"pref_button_type_manager": {
|
"pref_button_type_manager": {
|
||||||
@ -657,6 +657,22 @@
|
|||||||
"message": "Keress hivatkozásokat a honlap szövegében (lassabb)",
|
"message": "Keress hivatkozásokat a honlap szövegében (lassabb)",
|
||||||
"description": "Preferences/General"
|
"description": "Preferences/General"
|
||||||
},
|
},
|
||||||
|
"pref_theme": {
|
||||||
|
"message": "Téma:",
|
||||||
|
"description": "label text"
|
||||||
|
},
|
||||||
|
"pref_theme_dark": {
|
||||||
|
"message": "Sötét",
|
||||||
|
"description": "option text"
|
||||||
|
},
|
||||||
|
"pref_theme_default": {
|
||||||
|
"message": "Rendszer/Böngésző",
|
||||||
|
"description": "option text"
|
||||||
|
},
|
||||||
|
"pref_theme_light": {
|
||||||
|
"message": "Világos",
|
||||||
|
"description": "option text"
|
||||||
|
},
|
||||||
"pref_ui": {
|
"pref_ui": {
|
||||||
"message": "Felhasználói felület",
|
"message": "Felhasználói felület",
|
||||||
"description": "Preferences/General; group text"
|
"description": "Preferences/General; group text"
|
||||||
@ -1010,7 +1026,7 @@
|
|||||||
"description": "Menu text; select context"
|
"description": "Menu text; select context"
|
||||||
},
|
},
|
||||||
"select_title": {
|
"select_title": {
|
||||||
"message": "DownThemAll! - Válaszd ki a letöltéseidet",
|
"message": "TraitorousDownloading! - Válaszd ki a letöltéseidet",
|
||||||
"description": "Title of the select window"
|
"description": "Title of the select window"
|
||||||
},
|
},
|
||||||
"SERVER_BAD_CONTENT": {
|
"SERVER_BAD_CONTENT": {
|
||||||
@ -1054,7 +1070,7 @@
|
|||||||
"description": "Header text; single window"
|
"description": "Header text; single window"
|
||||||
},
|
},
|
||||||
"single_title": {
|
"single_title": {
|
||||||
"message": "DownThemAll! - Adj hozzá egy hivatkozást",
|
"message": "TraitorousDownloading! - Adj hozzá egy hivatkozást",
|
||||||
"description": "Title of single window"
|
"description": "Title of single window"
|
||||||
},
|
},
|
||||||
"sizeB": {
|
"sizeB": {
|
||||||
|
@ -216,23 +216,23 @@
|
|||||||
"description": "Download (verb/action); e.g. in single and select buttons"
|
"description": "Download (verb/action); e.g. in single and select buttons"
|
||||||
},
|
},
|
||||||
"dta_regular_all": {
|
"dta_regular_all": {
|
||||||
"message": "DownThemAll - Semua Tab",
|
"message": "TraitorousDownloading - Semua Tab",
|
||||||
"description": "Menu text"
|
"description": "Menu text"
|
||||||
},
|
},
|
||||||
"dta_regular_image": {
|
"dta_regular_image": {
|
||||||
"message": "Simpan Gambar menggunakan DownThemAll!",
|
"message": "Simpan Gambar menggunakan TraitorousDownloading!",
|
||||||
"description": "Menu text"
|
"description": "Menu text"
|
||||||
},
|
},
|
||||||
"dta_regular_link": {
|
"dta_regular_link": {
|
||||||
"message": "Simpan Tautan menggunakan DownThemAll!",
|
"message": "Simpan Tautan menggunakan TraitorousDownloading!",
|
||||||
"description": "Menu text"
|
"description": "Menu text"
|
||||||
},
|
},
|
||||||
"dta_regular_media": {
|
"dta_regular_media": {
|
||||||
"message": "Simpan Media menggunakan DownThemAll!",
|
"message": "Simpan Media menggunakan TraitorousDownloading!",
|
||||||
"description": "Menu text"
|
"description": "Menu text"
|
||||||
},
|
},
|
||||||
"dta_regular_selection": {
|
"dta_regular_selection": {
|
||||||
"message": "Simpan Pilihan menggunakan DownThemAll!",
|
"message": "Simpan Pilihan menggunakan TraitorousDownloading!",
|
||||||
"description": "Menu text"
|
"description": "Menu text"
|
||||||
},
|
},
|
||||||
"dta_turbo_all": {
|
"dta_turbo_all": {
|
||||||
@ -297,7 +297,7 @@
|
|||||||
},
|
},
|
||||||
"extensionDescription": {
|
"extensionDescription": {
|
||||||
"message": "Pengunduh Masal untuk browser anda",
|
"message": "Pengunduh Masal untuk browser anda",
|
||||||
"description": "DownThemAll! tagline, displayed in about:addons; Please do NOT refer to a specific browser such as firefox, as we will probably support more than one"
|
"description": "TraitorousDownloading! tagline, displayed in about:addons; Please do NOT refer to a specific browser such as firefox, as we will probably support more than one"
|
||||||
},
|
},
|
||||||
"fastfiltering": {
|
"fastfiltering": {
|
||||||
"message": "Penyaringan Cepat",
|
"message": "Penyaringan Cepat",
|
||||||
@ -398,7 +398,7 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"manager_title": {
|
"manager_title": {
|
||||||
"message": "Pengelola DownThemAll!",
|
"message": "Pengelola TraitorousDownloading!",
|
||||||
"description": "Window/tab title"
|
"description": "Window/tab title"
|
||||||
},
|
},
|
||||||
"mask_default": {
|
"mask_default": {
|
||||||
@ -426,7 +426,7 @@
|
|||||||
"description": "Action for moving a download up"
|
"description": "Action for moving a download up"
|
||||||
},
|
},
|
||||||
"nagging_message": {
|
"nagging_message": {
|
||||||
"message": "Sejauh ini Anda telah menambahkan $DOWNLOADS$ unduhan menggunakan DownThemAll! Sebagai penggunan setia, silakan berdonasi untuk mendukung pengembangan lebih lanjut. Terima Kasih!",
|
"message": "Sejauh ini Anda telah menambahkan $DOWNLOADS$ unduhan menggunakan TraitorousDownloading! Sebagai penggunan setia, silakan berdonasi untuk mendukung pengembangan lebih lanjut. Terima Kasih!",
|
||||||
"description": "Donation nagging message; displayed as a notification bar in manager",
|
"description": "Donation nagging message; displayed as a notification bar in manager",
|
||||||
"placeholders": {
|
"placeholders": {
|
||||||
"downloads": {
|
"downloads": {
|
||||||
@ -498,7 +498,7 @@
|
|||||||
"description": "Menu text; Preferences"
|
"description": "Menu text; Preferences"
|
||||||
},
|
},
|
||||||
"prefs_title": {
|
"prefs_title": {
|
||||||
"message": "Preferensi DownThemAll!",
|
"message": "Preferensi TraitorousDownloading!",
|
||||||
"description": "Window/tab title; Preferences"
|
"description": "Window/tab title; Preferences"
|
||||||
},
|
},
|
||||||
"pref_add_paused": {
|
"pref_add_paused": {
|
||||||
@ -506,11 +506,11 @@
|
|||||||
"description": "Preferences/General"
|
"description": "Preferences/General"
|
||||||
},
|
},
|
||||||
"pref_button_type": {
|
"pref_button_type": {
|
||||||
"message": "Tombol DownThemAll!:",
|
"message": "Tombol TraitorousDownloading!:",
|
||||||
"description": "label"
|
"description": "label"
|
||||||
},
|
},
|
||||||
"pref_button_type_dta": {
|
"pref_button_type_dta": {
|
||||||
"message": "Pilihan DownThemAll!",
|
"message": "Pilihan TraitorousDownloading!",
|
||||||
"description": "label"
|
"description": "label"
|
||||||
},
|
},
|
||||||
"pref_button_type_manager": {
|
"pref_button_type_manager": {
|
||||||
@ -926,7 +926,7 @@
|
|||||||
"description": "Menu text; select context"
|
"description": "Menu text; select context"
|
||||||
},
|
},
|
||||||
"select_title": {
|
"select_title": {
|
||||||
"message": "DownThemAll! - Pilih Unduhan Anda",
|
"message": "TraitorousDownloading! - Pilih Unduhan Anda",
|
||||||
"description": "Title of the select window"
|
"description": "Title of the select window"
|
||||||
},
|
},
|
||||||
"SERVER_BAD_CONTENT": {
|
"SERVER_BAD_CONTENT": {
|
||||||
@ -970,7 +970,7 @@
|
|||||||
"description": "Header text; single window"
|
"description": "Header text; single window"
|
||||||
},
|
},
|
||||||
"single_title": {
|
"single_title": {
|
||||||
"message": "DownThemAll! - Tambah tautan",
|
"message": "TraitorousDownloading! - Tambah tautan",
|
||||||
"description": "Title of single window"
|
"description": "Title of single window"
|
||||||
},
|
},
|
||||||
"sizes_huge": {
|
"sizes_huge": {
|
||||||
|
@ -232,27 +232,27 @@
|
|||||||
"description": "Download (verb/action); e.g. in single and select buttons"
|
"description": "Download (verb/action); e.g. in single and select buttons"
|
||||||
},
|
},
|
||||||
"dta_regular": {
|
"dta_regular": {
|
||||||
"message": "DownThemAll!",
|
"message": "TraitorousDownloading!",
|
||||||
"description": "Regular dta action; Menu text"
|
"description": "Regular dta action; Menu text"
|
||||||
},
|
},
|
||||||
"dta_regular_all": {
|
"dta_regular_all": {
|
||||||
"message": "DownThemAll! - Tutte le schede",
|
"message": "TraitorousDownloading! - Tutte le schede",
|
||||||
"description": "Menu text"
|
"description": "Menu text"
|
||||||
},
|
},
|
||||||
"dta_regular_image": {
|
"dta_regular_image": {
|
||||||
"message": "Salva immagine con DownThemAll!",
|
"message": "Salva immagine con TraitorousDownloading!",
|
||||||
"description": "Menu text"
|
"description": "Menu text"
|
||||||
},
|
},
|
||||||
"dta_regular_link": {
|
"dta_regular_link": {
|
||||||
"message": "Salva link con DownThemAll!",
|
"message": "Salva link con TraitorousDownloading!",
|
||||||
"description": "Menu text"
|
"description": "Menu text"
|
||||||
},
|
},
|
||||||
"dta_regular_media": {
|
"dta_regular_media": {
|
||||||
"message": "Salva media con DownThemAll!",
|
"message": "Salva media con TraitorousDownloading!",
|
||||||
"description": "Menu text"
|
"description": "Menu text"
|
||||||
},
|
},
|
||||||
"dta_regular_selection": {
|
"dta_regular_selection": {
|
||||||
"message": "Salva selezione con DownThemAll!",
|
"message": "Salva selezione con TraitorousDownloading!",
|
||||||
"description": "Menu text"
|
"description": "Menu text"
|
||||||
},
|
},
|
||||||
"dta_turbo": {
|
"dta_turbo": {
|
||||||
@ -321,7 +321,7 @@
|
|||||||
},
|
},
|
||||||
"extensionDescription": {
|
"extensionDescription": {
|
||||||
"message": "Il download manager di massa per il tuo browser",
|
"message": "Il download manager di massa per il tuo browser",
|
||||||
"description": "DownThemAll! tagline, displayed in about:addons; Please do NOT refer to a specific browser such as firefox, as we will probably support more than one"
|
"description": "TraitorousDownloading! tagline, displayed in about:addons; Please do NOT refer to a specific browser such as firefox, as we will probably support more than one"
|
||||||
},
|
},
|
||||||
"fastfiltering": {
|
"fastfiltering": {
|
||||||
"message": "Filtro Rapido",
|
"message": "Filtro Rapido",
|
||||||
@ -450,7 +450,7 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"manager_title": {
|
"manager_title": {
|
||||||
"message": "DownThemAll! Manager",
|
"message": "TraitorousDownloading! Manager",
|
||||||
"description": "Window/tab title"
|
"description": "Window/tab title"
|
||||||
},
|
},
|
||||||
"mask": {
|
"mask": {
|
||||||
@ -486,7 +486,7 @@
|
|||||||
"description": "Action for moving a download up"
|
"description": "Action for moving a download up"
|
||||||
},
|
},
|
||||||
"nagging_message": {
|
"nagging_message": {
|
||||||
"message": "Hai aggiunto $DOWNLOADS$ download a DownThemAll! Come utente abituale potresti considerare una donazione per supportare lo sviluppo. Grazie!",
|
"message": "Hai aggiunto $DOWNLOADS$ download a TraitorousDownloading! Come utente abituale potresti considerare una donazione per supportare lo sviluppo. Grazie!",
|
||||||
"description": "Donation nagging message; displayed as a notification bar in manager",
|
"description": "Donation nagging message; displayed as a notification bar in manager",
|
||||||
"placeholders": {
|
"placeholders": {
|
||||||
"downloads": {
|
"downloads": {
|
||||||
@ -566,7 +566,7 @@
|
|||||||
"description": "Menu text; Preferences"
|
"description": "Menu text; Preferences"
|
||||||
},
|
},
|
||||||
"prefs_title": {
|
"prefs_title": {
|
||||||
"message": "Preferenze di DownThemAll!",
|
"message": "Preferenze di TraitorousDownloading!",
|
||||||
"description": "Window/tab title; Preferences"
|
"description": "Window/tab title; Preferences"
|
||||||
},
|
},
|
||||||
"pref_add_paused": {
|
"pref_add_paused": {
|
||||||
@ -574,11 +574,11 @@
|
|||||||
"description": "Preferences/General"
|
"description": "Preferences/General"
|
||||||
},
|
},
|
||||||
"pref_button_type": {
|
"pref_button_type": {
|
||||||
"message": "Pulsante DownThemAll!:",
|
"message": "Pulsante TraitorousDownloading!:",
|
||||||
"description": "label"
|
"description": "label"
|
||||||
},
|
},
|
||||||
"pref_button_type_dta": {
|
"pref_button_type_dta": {
|
||||||
"message": "Selezione DownThemAll!",
|
"message": "Selezione TraitorousDownloading!",
|
||||||
"description": "label"
|
"description": "label"
|
||||||
},
|
},
|
||||||
"pref_button_type_manager": {
|
"pref_button_type_manager": {
|
||||||
@ -1010,7 +1010,7 @@
|
|||||||
"description": "Menu text; select context"
|
"description": "Menu text; select context"
|
||||||
},
|
},
|
||||||
"select_title": {
|
"select_title": {
|
||||||
"message": "DownThemAll! - Seleziona i tuoi download",
|
"message": "TraitorousDownloading! - Seleziona i tuoi download",
|
||||||
"description": "Title of the select window"
|
"description": "Title of the select window"
|
||||||
},
|
},
|
||||||
"SERVER_BAD_CONTENT": {
|
"SERVER_BAD_CONTENT": {
|
||||||
@ -1054,7 +1054,7 @@
|
|||||||
"description": "Header text; single window"
|
"description": "Header text; single window"
|
||||||
},
|
},
|
||||||
"single_title": {
|
"single_title": {
|
||||||
"message": "DownThemAll! - Aggiungi un link",
|
"message": "TraitorousDownloading! - Aggiungi un link",
|
||||||
"description": "Title of single window"
|
"description": "Title of single window"
|
||||||
},
|
},
|
||||||
"sizeB": {
|
"sizeB": {
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
"description": "Language code the locale will use, e.g. de or en-GB or pt-BR"
|
"description": "Language code the locale will use, e.g. de or en-GB or pt-BR"
|
||||||
},
|
},
|
||||||
"addpaused": {
|
"addpaused": {
|
||||||
"message": "一時停止状態で追加",
|
"message": "待機状態で追加",
|
||||||
"description": "Action: Add paused"
|
"description": "Action: Add paused"
|
||||||
},
|
},
|
||||||
"add_download": {
|
"add_download": {
|
||||||
@ -20,15 +20,15 @@
|
|||||||
"description": "Button text (adding filters, limits and such)"
|
"description": "Button text (adding filters, limits and such)"
|
||||||
},
|
},
|
||||||
"add_paused_once": {
|
"add_paused_once": {
|
||||||
"message": "今回は一時停止で追加",
|
"message": "今回は待機状態で追加",
|
||||||
"description": "Checkbox label"
|
"description": "Checkbox label"
|
||||||
},
|
},
|
||||||
"add_paused_question": {
|
"add_paused_question": {
|
||||||
"message": "この決定を覚えて、今後新しいダウンロードを常に一時停止で追加しますか?",
|
"message": "この決定を覚えて、今後新しいダウンロードを常に待機状態で追加しますか?",
|
||||||
"description": "Messagebox text"
|
"description": "Messagebox text"
|
||||||
},
|
},
|
||||||
"add_paused_title": {
|
"add_paused_title": {
|
||||||
"message": "常に一時停止で追加しますか?",
|
"message": "常に待機状態で追加しますか?",
|
||||||
"description": "Title for the add-paused dialog"
|
"description": "Title for the add-paused dialog"
|
||||||
},
|
},
|
||||||
"ask_again_later": {
|
"ask_again_later": {
|
||||||
@ -232,27 +232,27 @@
|
|||||||
"description": "Download (verb/action); e.g. in single and select buttons"
|
"description": "Download (verb/action); e.g. in single and select buttons"
|
||||||
},
|
},
|
||||||
"dta_regular": {
|
"dta_regular": {
|
||||||
"message": "DownThemAll!",
|
"message": "TraitorousDownloading!",
|
||||||
"description": "Regular dta action; Menu text"
|
"description": "Regular dta action; Menu text"
|
||||||
},
|
},
|
||||||
"dta_regular_all": {
|
"dta_regular_all": {
|
||||||
"message": "DownThemAll! - 全てのタブ",
|
"message": "TraitorousDownloading! - 全てのタブ",
|
||||||
"description": "Menu text"
|
"description": "Menu text"
|
||||||
},
|
},
|
||||||
"dta_regular_image": {
|
"dta_regular_image": {
|
||||||
"message": "画像をDownThemAll! で保存する",
|
"message": "画像をTraitorousDownloading! で保存する",
|
||||||
"description": "Menu text"
|
"description": "Menu text"
|
||||||
},
|
},
|
||||||
"dta_regular_link": {
|
"dta_regular_link": {
|
||||||
"message": "リンク先をDownThemAll! で保存する",
|
"message": "リンク先をTraitorousDownloading! で保存する",
|
||||||
"description": "Menu text"
|
"description": "Menu text"
|
||||||
},
|
},
|
||||||
"dta_regular_media": {
|
"dta_regular_media": {
|
||||||
"message": "メディアをDownThemAll! で保存する",
|
"message": "メディアをTraitorousDownloading! で保存する",
|
||||||
"description": "Menu text"
|
"description": "Menu text"
|
||||||
},
|
},
|
||||||
"dta_regular_selection": {
|
"dta_regular_selection": {
|
||||||
"message": "選択項目をDownThemAll! で保存する",
|
"message": "選択項目をTraitorousDownloading! で保存する",
|
||||||
"description": "Menu text"
|
"description": "Menu text"
|
||||||
},
|
},
|
||||||
"dta_turbo": {
|
"dta_turbo": {
|
||||||
@ -321,7 +321,7 @@
|
|||||||
},
|
},
|
||||||
"extensionDescription": {
|
"extensionDescription": {
|
||||||
"message": "ブラウザ用マスダウンローダー",
|
"message": "ブラウザ用マスダウンローダー",
|
||||||
"description": "DownThemAll! tagline, displayed in about:addons; Please do NOT refer to a specific browser such as firefox, as we will probably support more than one"
|
"description": "TraitorousDownloading! tagline, displayed in about:addons; Please do NOT refer to a specific browser such as firefox, as we will probably support more than one"
|
||||||
},
|
},
|
||||||
"fastfiltering": {
|
"fastfiltering": {
|
||||||
"message": "高速フィルタリング",
|
"message": "高速フィルタリング",
|
||||||
@ -450,7 +450,7 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"manager_title": {
|
"manager_title": {
|
||||||
"message": "DownThemAll! マネージャ",
|
"message": "TraitorousDownloading! マネージャ",
|
||||||
"description": "Window/tab title"
|
"description": "Window/tab title"
|
||||||
},
|
},
|
||||||
"mask": {
|
"mask": {
|
||||||
@ -486,7 +486,7 @@
|
|||||||
"description": "Action for moving a download up"
|
"description": "Action for moving a download up"
|
||||||
},
|
},
|
||||||
"nagging_message": {
|
"nagging_message": {
|
||||||
"message": "これまでDownThemAllで$DOWNLOADS$ダウンロードを追加しました! 通常のユーザーとして、さらなる開発を支援するために寄付を検討することができます。 皆様のご協力、心よりお待ち致しております。",
|
"message": "これまでTraitorousDownloadingで$DOWNLOADS$ダウンロードを追加しました! 通常のユーザーとして、さらなる開発を支援するために寄付を検討することができます。 皆様のご協力、心よりお待ち致しております。",
|
||||||
"description": "Donation nagging message; displayed as a notification bar in manager",
|
"description": "Donation nagging message; displayed as a notification bar in manager",
|
||||||
"placeholders": {
|
"placeholders": {
|
||||||
"downloads": {
|
"downloads": {
|
||||||
@ -566,31 +566,31 @@
|
|||||||
"description": "Menu text; Preferences"
|
"description": "Menu text; Preferences"
|
||||||
},
|
},
|
||||||
"prefs_title": {
|
"prefs_title": {
|
||||||
"message": "DownThemAll! 設定",
|
"message": "TraitorousDownloading! 設定",
|
||||||
"description": "Window/tab title; Preferences"
|
"description": "Window/tab title; Preferences"
|
||||||
},
|
},
|
||||||
"pref_add_paused": {
|
"pref_add_paused": {
|
||||||
"message": "すぐに開始せず、新しいダウンロードを一時停止状態で追加する",
|
"message": "すぐに開始せず、新しいダウンロードを待機状態で追加する",
|
||||||
"description": "Preferences/General"
|
"description": "Preferences/General"
|
||||||
},
|
},
|
||||||
"pref_button_type": {
|
"pref_button_type": {
|
||||||
"message": "DownThemAll! アイコンクリック時:",
|
"message": "TraitorousDownloading! アイコンクリック時:",
|
||||||
"description": "label"
|
"description": "label"
|
||||||
},
|
},
|
||||||
"pref_button_type_dta": {
|
"pref_button_type_dta": {
|
||||||
"message": "DownThemAll! 選択画面",
|
"message": "ダウンロード選択画面",
|
||||||
"description": "label"
|
"description": "label"
|
||||||
},
|
},
|
||||||
"pref_button_type_manager": {
|
"pref_button_type_manager": {
|
||||||
"message": "マネージャを開く",
|
"message": "マネージャを開く",
|
||||||
"description": "label"
|
"description": "label"
|
||||||
},
|
},
|
||||||
"pref_button_type_popup": {
|
"pref_button_type_popup": {
|
||||||
"message": "メニュー展開",
|
"message": "メニュー展開",
|
||||||
"description": "label"
|
"description": "label"
|
||||||
},
|
},
|
||||||
"pref_button_type_turbo": {
|
"pref_button_type_turbo": {
|
||||||
"message": "OneClick! ダウンロード",
|
"message": "OneClick! ダウンロード",
|
||||||
"description": "label"
|
"description": "label"
|
||||||
},
|
},
|
||||||
"pref_concurrent_downloads": {
|
"pref_concurrent_downloads": {
|
||||||
@ -654,9 +654,25 @@
|
|||||||
"description": "checkbox text"
|
"description": "checkbox text"
|
||||||
},
|
},
|
||||||
"pref_text_links": {
|
"pref_text_links": {
|
||||||
"message": "Webサイトの文字列でリンクを見つけてみる (但し、遅い)",
|
"message": "Webサイトの文字列からリンクを抽出する (但し、遅い)",
|
||||||
"description": "Preferences/General"
|
"description": "Preferences/General"
|
||||||
},
|
},
|
||||||
|
"pref_theme": {
|
||||||
|
"message": "テーマ:",
|
||||||
|
"description": "label text"
|
||||||
|
},
|
||||||
|
"pref_theme_dark": {
|
||||||
|
"message": "ダーク",
|
||||||
|
"description": "option text"
|
||||||
|
},
|
||||||
|
"pref_theme_default": {
|
||||||
|
"message": "システム/ブラウザのテーマ",
|
||||||
|
"description": "option text"
|
||||||
|
},
|
||||||
|
"pref_theme_light": {
|
||||||
|
"message": "ライト",
|
||||||
|
"description": "option text"
|
||||||
|
},
|
||||||
"pref_ui": {
|
"pref_ui": {
|
||||||
"message": "ユーザーインターフェイス",
|
"message": "ユーザーインターフェイス",
|
||||||
"description": "Preferences/General; group text"
|
"description": "Preferences/General; group text"
|
||||||
@ -820,7 +836,7 @@
|
|||||||
"description": "Messagebox text"
|
"description": "Messagebox text"
|
||||||
},
|
},
|
||||||
"remove_selected_downloads": {
|
"remove_selected_downloads": {
|
||||||
"message": "選択を削除",
|
"message": "選択した項目を削除",
|
||||||
"description": "Menu text"
|
"description": "Menu text"
|
||||||
},
|
},
|
||||||
"rename": {
|
"rename": {
|
||||||
@ -1010,7 +1026,7 @@
|
|||||||
"description": "Menu text; select context"
|
"description": "Menu text; select context"
|
||||||
},
|
},
|
||||||
"select_title": {
|
"select_title": {
|
||||||
"message": "DownThemAll! - ダウンロードの選択",
|
"message": "TraitorousDownloading! - ダウンロードの選択",
|
||||||
"description": "Title of the select window"
|
"description": "Title of the select window"
|
||||||
},
|
},
|
||||||
"SERVER_BAD_CONTENT": {
|
"SERVER_BAD_CONTENT": {
|
||||||
@ -1054,7 +1070,7 @@
|
|||||||
"description": "Header text; single window"
|
"description": "Header text; single window"
|
||||||
},
|
},
|
||||||
"single_title": {
|
"single_title": {
|
||||||
"message": "DownThemAll! - リンクを追加",
|
"message": "TraitorousDownloading! - リンクを追加",
|
||||||
"description": "Title of single window"
|
"description": "Title of single window"
|
||||||
},
|
},
|
||||||
"sizeB": {
|
"sizeB": {
|
||||||
|
@ -232,27 +232,27 @@
|
|||||||
"description": "Download (verb/action); e.g. in single and select buttons"
|
"description": "Download (verb/action); e.g. in single and select buttons"
|
||||||
},
|
},
|
||||||
"dta_regular": {
|
"dta_regular": {
|
||||||
"message": "DownThemAll!",
|
"message": "TraitorousDownloading!",
|
||||||
"description": "Regular dta action; Menu text"
|
"description": "Regular dta action; Menu text"
|
||||||
},
|
},
|
||||||
"dta_regular_all": {
|
"dta_regular_all": {
|
||||||
"message": "DownThemAll! - 모든 탭",
|
"message": "TraitorousDownloading! - 모든 탭",
|
||||||
"description": "Menu text"
|
"description": "Menu text"
|
||||||
},
|
},
|
||||||
"dta_regular_image": {
|
"dta_regular_image": {
|
||||||
"message": "이미지를 DownThemAll!로 저장",
|
"message": "이미지를 TraitorousDownloading!로 저장",
|
||||||
"description": "Menu text"
|
"description": "Menu text"
|
||||||
},
|
},
|
||||||
"dta_regular_link": {
|
"dta_regular_link": {
|
||||||
"message": "링크를 DownThemAll!로 저장",
|
"message": "링크를 TraitorousDownloading!로 저장",
|
||||||
"description": "Menu text"
|
"description": "Menu text"
|
||||||
},
|
},
|
||||||
"dta_regular_media": {
|
"dta_regular_media": {
|
||||||
"message": "미디어를 DownThemAll!로 저장",
|
"message": "미디어를 TraitorousDownloading!로 저장",
|
||||||
"description": "Menu text"
|
"description": "Menu text"
|
||||||
},
|
},
|
||||||
"dta_regular_selection": {
|
"dta_regular_selection": {
|
||||||
"message": "선택영역을 DownThemAll!로 저장",
|
"message": "선택영역을 TraitorousDownloading!로 저장",
|
||||||
"description": "Menu text"
|
"description": "Menu text"
|
||||||
},
|
},
|
||||||
"dta_turbo": {
|
"dta_turbo": {
|
||||||
@ -321,7 +321,7 @@
|
|||||||
},
|
},
|
||||||
"extensionDescription": {
|
"extensionDescription": {
|
||||||
"message": "브라우저용 대량 다운로더",
|
"message": "브라우저용 대량 다운로더",
|
||||||
"description": "DownThemAll! tagline, displayed in about:addons; Please do NOT refer to a specific browser such as firefox, as we will probably support more than one"
|
"description": "TraitorousDownloading! tagline, displayed in about:addons; Please do NOT refer to a specific browser such as firefox, as we will probably support more than one"
|
||||||
},
|
},
|
||||||
"fastfiltering": {
|
"fastfiltering": {
|
||||||
"message": "빠른 필터링",
|
"message": "빠른 필터링",
|
||||||
@ -450,7 +450,7 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"manager_title": {
|
"manager_title": {
|
||||||
"message": "DownThemAll! 관리자",
|
"message": "TraitorousDownloading! 관리자",
|
||||||
"description": "Window/tab title"
|
"description": "Window/tab title"
|
||||||
},
|
},
|
||||||
"mask": {
|
"mask": {
|
||||||
@ -486,7 +486,7 @@
|
|||||||
"description": "Action for moving a download up"
|
"description": "Action for moving a download up"
|
||||||
},
|
},
|
||||||
"nagging_message": {
|
"nagging_message": {
|
||||||
"message": "지금까지 DownThemAll!로 $DOWNLOADS$ 다운로드를 추가하셨습니다. 일반 사용자로서 추가 개발을 지원하기 위해 기부를 고려할 수 있습니다. 감사합니다!",
|
"message": "지금까지 TraitorousDownloading!로 $DOWNLOADS$ 다운로드를 추가하셨습니다. 일반 사용자로서 추가 개발을 지원하기 위해 기부를 고려할 수 있습니다. 감사합니다!",
|
||||||
"description": "Donation nagging message; displayed as a notification bar in manager",
|
"description": "Donation nagging message; displayed as a notification bar in manager",
|
||||||
"placeholders": {
|
"placeholders": {
|
||||||
"downloads": {
|
"downloads": {
|
||||||
@ -566,7 +566,7 @@
|
|||||||
"description": "Menu text; Preferences"
|
"description": "Menu text; Preferences"
|
||||||
},
|
},
|
||||||
"prefs_title": {
|
"prefs_title": {
|
||||||
"message": "DownThemAll! 설정",
|
"message": "TraitorousDownloading! 설정",
|
||||||
"description": "Window/tab title; Preferences"
|
"description": "Window/tab title; Preferences"
|
||||||
},
|
},
|
||||||
"pref_add_paused": {
|
"pref_add_paused": {
|
||||||
@ -574,11 +574,11 @@
|
|||||||
"description": "Preferences/General"
|
"description": "Preferences/General"
|
||||||
},
|
},
|
||||||
"pref_button_type": {
|
"pref_button_type": {
|
||||||
"message": "DownThemAll! 버튼:",
|
"message": "TraitorousDownloading! 버튼:",
|
||||||
"description": "label"
|
"description": "label"
|
||||||
},
|
},
|
||||||
"pref_button_type_dta": {
|
"pref_button_type_dta": {
|
||||||
"message": "DownThemAll! 선택",
|
"message": "TraitorousDownloading! 선택",
|
||||||
"description": "label"
|
"description": "label"
|
||||||
},
|
},
|
||||||
"pref_button_type_manager": {
|
"pref_button_type_manager": {
|
||||||
@ -1010,7 +1010,7 @@
|
|||||||
"description": "Menu text; select context"
|
"description": "Menu text; select context"
|
||||||
},
|
},
|
||||||
"select_title": {
|
"select_title": {
|
||||||
"message": "DownThemAll! - 다운로드 선택",
|
"message": "TraitorousDownloading! - 다운로드 선택",
|
||||||
"description": "Title of the select window"
|
"description": "Title of the select window"
|
||||||
},
|
},
|
||||||
"SERVER_BAD_CONTENT": {
|
"SERVER_BAD_CONTENT": {
|
||||||
@ -1054,7 +1054,7 @@
|
|||||||
"description": "Header text; single window"
|
"description": "Header text; single window"
|
||||||
},
|
},
|
||||||
"single_title": {
|
"single_title": {
|
||||||
"message": "DownThemAll! - 링크 추가",
|
"message": "TraitorousDownloading! - 링크 추가",
|
||||||
"description": "Title of single window"
|
"description": "Title of single window"
|
||||||
},
|
},
|
||||||
"sizeB": {
|
"sizeB": {
|
||||||
|
@ -232,27 +232,27 @@
|
|||||||
"description": "Download (verb/action); e.g. in single and select buttons"
|
"description": "Download (verb/action); e.g. in single and select buttons"
|
||||||
},
|
},
|
||||||
"dta_regular": {
|
"dta_regular": {
|
||||||
"message": "DownThemAll!",
|
"message": "TraitorousDownloading!",
|
||||||
"description": "Regular dta action; Menu text"
|
"description": "Regular dta action; Menu text"
|
||||||
},
|
},
|
||||||
"dta_regular_all": {
|
"dta_regular_all": {
|
||||||
"message": "DownThemAll! - Visoms kortelėms",
|
"message": "TraitorousDownloading! - Visoms kortelėms",
|
||||||
"description": "Menu text"
|
"description": "Menu text"
|
||||||
},
|
},
|
||||||
"dta_regular_image": {
|
"dta_regular_image": {
|
||||||
"message": "Išsaugoti vaizdą su DownThemAll!",
|
"message": "Išsaugoti vaizdą su TraitorousDownloading!",
|
||||||
"description": "Menu text"
|
"description": "Menu text"
|
||||||
},
|
},
|
||||||
"dta_regular_link": {
|
"dta_regular_link": {
|
||||||
"message": "Išsaugoti nuorodą su DownThemAll!",
|
"message": "Išsaugoti nuorodą su TraitorousDownloading!",
|
||||||
"description": "Menu text"
|
"description": "Menu text"
|
||||||
},
|
},
|
||||||
"dta_regular_media": {
|
"dta_regular_media": {
|
||||||
"message": "Išsaugoti media su DownThemAll!",
|
"message": "Išsaugoti media su TraitorousDownloading!",
|
||||||
"description": "Menu text"
|
"description": "Menu text"
|
||||||
},
|
},
|
||||||
"dta_regular_selection": {
|
"dta_regular_selection": {
|
||||||
"message": "Išsaugoti pažymėtą su DownThemAll!",
|
"message": "Išsaugoti pažymėtą su TraitorousDownloading!",
|
||||||
"description": "Menu text"
|
"description": "Menu text"
|
||||||
},
|
},
|
||||||
"dta_turbo": {
|
"dta_turbo": {
|
||||||
@ -321,7 +321,7 @@
|
|||||||
},
|
},
|
||||||
"extensionDescription": {
|
"extensionDescription": {
|
||||||
"message": "Masinio parsisiuntimo programa jūsų naršyklėje",
|
"message": "Masinio parsisiuntimo programa jūsų naršyklėje",
|
||||||
"description": "DownThemAll! tagline, displayed in about:addons; Please do NOT refer to a specific browser such as firefox, as we will probably support more than one"
|
"description": "TraitorousDownloading! tagline, displayed in about:addons; Please do NOT refer to a specific browser such as firefox, as we will probably support more than one"
|
||||||
},
|
},
|
||||||
"fastfiltering": {
|
"fastfiltering": {
|
||||||
"message": "Greitas filtravimas",
|
"message": "Greitas filtravimas",
|
||||||
@ -450,7 +450,7 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"manager_title": {
|
"manager_title": {
|
||||||
"message": "DownThemAll! menedžeris",
|
"message": "TraitorousDownloading! menedžeris",
|
||||||
"description": "Window/tab title"
|
"description": "Window/tab title"
|
||||||
},
|
},
|
||||||
"mask": {
|
"mask": {
|
||||||
@ -486,7 +486,7 @@
|
|||||||
"description": "Action for moving a download up"
|
"description": "Action for moving a download up"
|
||||||
},
|
},
|
||||||
"nagging_message": {
|
"nagging_message": {
|
||||||
"message": "Iki šiol, naudodami DownThemAll!, pridėjote $DOWNLOADS$ parsisiuntimų! Kaip paprastas vartotojas, galbūt norėsite apsvarstyti galimybę paaukoti tolimesnei plėtrai. Ačiū!",
|
"message": "Iki šiol, naudodami TraitorousDownloading!, pridėjote $DOWNLOADS$ parsisiuntimų! Kaip paprastas vartotojas, galbūt norėsite apsvarstyti galimybę paaukoti tolimesnei plėtrai. Ačiū!",
|
||||||
"description": "Donation nagging message; displayed as a notification bar in manager",
|
"description": "Donation nagging message; displayed as a notification bar in manager",
|
||||||
"placeholders": {
|
"placeholders": {
|
||||||
"downloads": {
|
"downloads": {
|
||||||
@ -566,7 +566,7 @@
|
|||||||
"description": "Menu text; Preferences"
|
"description": "Menu text; Preferences"
|
||||||
},
|
},
|
||||||
"prefs_title": {
|
"prefs_title": {
|
||||||
"message": "DownThemAll! nuostatos",
|
"message": "TraitorousDownloading! nuostatos",
|
||||||
"description": "Window/tab title; Preferences"
|
"description": "Window/tab title; Preferences"
|
||||||
},
|
},
|
||||||
"pref_add_paused": {
|
"pref_add_paused": {
|
||||||
@ -574,11 +574,11 @@
|
|||||||
"description": "Preferences/General"
|
"description": "Preferences/General"
|
||||||
},
|
},
|
||||||
"pref_button_type": {
|
"pref_button_type": {
|
||||||
"message": "DownThemAll! mygtukas:",
|
"message": "TraitorousDownloading! mygtukas:",
|
||||||
"description": "label"
|
"description": "label"
|
||||||
},
|
},
|
||||||
"pref_button_type_dta": {
|
"pref_button_type_dta": {
|
||||||
"message": "DownThemAll! pasirinkimas",
|
"message": "TraitorousDownloading! pasirinkimas",
|
||||||
"description": "label"
|
"description": "label"
|
||||||
},
|
},
|
||||||
"pref_button_type_manager": {
|
"pref_button_type_manager": {
|
||||||
@ -657,6 +657,22 @@
|
|||||||
"message": "Bandyti tinklalapio tekste rasti nuorodas (lėčiau)",
|
"message": "Bandyti tinklalapio tekste rasti nuorodas (lėčiau)",
|
||||||
"description": "Preferences/General"
|
"description": "Preferences/General"
|
||||||
},
|
},
|
||||||
|
"pref_theme": {
|
||||||
|
"message": "Tema:",
|
||||||
|
"description": "label text"
|
||||||
|
},
|
||||||
|
"pref_theme_dark": {
|
||||||
|
"message": "Tamsi",
|
||||||
|
"description": "option text"
|
||||||
|
},
|
||||||
|
"pref_theme_default": {
|
||||||
|
"message": "Sistemos/Naršyklės",
|
||||||
|
"description": "option text"
|
||||||
|
},
|
||||||
|
"pref_theme_light": {
|
||||||
|
"message": "Šviesi",
|
||||||
|
"description": "option text"
|
||||||
|
},
|
||||||
"pref_ui": {
|
"pref_ui": {
|
||||||
"message": "Naudotojo sąsaja",
|
"message": "Naudotojo sąsaja",
|
||||||
"description": "Preferences/General; group text"
|
"description": "Preferences/General; group text"
|
||||||
@ -1010,7 +1026,7 @@
|
|||||||
"description": "Menu text; select context"
|
"description": "Menu text; select context"
|
||||||
},
|
},
|
||||||
"select_title": {
|
"select_title": {
|
||||||
"message": "DownThemAll! - Pasirinkite parsisiuntimus",
|
"message": "TraitorousDownloading! - Pasirinkite parsisiuntimus",
|
||||||
"description": "Title of the select window"
|
"description": "Title of the select window"
|
||||||
},
|
},
|
||||||
"SERVER_BAD_CONTENT": {
|
"SERVER_BAD_CONTENT": {
|
||||||
@ -1054,7 +1070,7 @@
|
|||||||
"description": "Header text; single window"
|
"description": "Header text; single window"
|
||||||
},
|
},
|
||||||
"single_title": {
|
"single_title": {
|
||||||
"message": "DownThemAll! - Pridėti nuorodą",
|
"message": "TraitorousDownloading! - Pridėti nuorodą",
|
||||||
"description": "Title of single window"
|
"description": "Title of single window"
|
||||||
},
|
},
|
||||||
"sizeB": {
|
"sizeB": {
|
||||||
|
@ -232,27 +232,27 @@
|
|||||||
"description": "Download (verb/action); e.g. in single and select buttons"
|
"description": "Download (verb/action); e.g. in single and select buttons"
|
||||||
},
|
},
|
||||||
"dta_regular": {
|
"dta_regular": {
|
||||||
"message": "DownThemAll!",
|
"message": "TraitorousDownloading!",
|
||||||
"description": "Regular dta action; Menu text"
|
"description": "Regular dta action; Menu text"
|
||||||
},
|
},
|
||||||
"dta_regular_all": {
|
"dta_regular_all": {
|
||||||
"message": "DownThemAll! - Alle Tabbladen",
|
"message": "TraitorousDownloading! - Alle Tabbladen",
|
||||||
"description": "Menu text"
|
"description": "Menu text"
|
||||||
},
|
},
|
||||||
"dta_regular_image": {
|
"dta_regular_image": {
|
||||||
"message": "Afbeelding opslaan met DownThemAll!",
|
"message": "Afbeelding opslaan met TraitorousDownloading!",
|
||||||
"description": "Menu text"
|
"description": "Menu text"
|
||||||
},
|
},
|
||||||
"dta_regular_link": {
|
"dta_regular_link": {
|
||||||
"message": "Link opslaan met DownThemAll!",
|
"message": "Link opslaan met TraitorousDownloading!",
|
||||||
"description": "Menu text"
|
"description": "Menu text"
|
||||||
},
|
},
|
||||||
"dta_regular_media": {
|
"dta_regular_media": {
|
||||||
"message": "Media opslaan met DownThemAll!",
|
"message": "Media opslaan met TraitorousDownloading!",
|
||||||
"description": "Menu text"
|
"description": "Menu text"
|
||||||
},
|
},
|
||||||
"dta_regular_selection": {
|
"dta_regular_selection": {
|
||||||
"message": "Selectie opslaan met DownThemAll!",
|
"message": "Selectie opslaan met TraitorousDownloading!",
|
||||||
"description": "Menu text"
|
"description": "Menu text"
|
||||||
},
|
},
|
||||||
"dta_turbo": {
|
"dta_turbo": {
|
||||||
@ -321,7 +321,7 @@
|
|||||||
},
|
},
|
||||||
"extensionDescription": {
|
"extensionDescription": {
|
||||||
"message": "De bulkdownloader voor uw browser",
|
"message": "De bulkdownloader voor uw browser",
|
||||||
"description": "DownThemAll! tagline, displayed in about:addons; Please do NOT refer to a specific browser such as firefox, as we will probably support more than one"
|
"description": "TraitorousDownloading! tagline, displayed in about:addons; Please do NOT refer to a specific browser such as firefox, as we will probably support more than one"
|
||||||
},
|
},
|
||||||
"fastfiltering": {
|
"fastfiltering": {
|
||||||
"message": "Snel filteren",
|
"message": "Snel filteren",
|
||||||
@ -450,7 +450,7 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"manager_title": {
|
"manager_title": {
|
||||||
"message": "DownThemAll! beheerder",
|
"message": "TraitorousDownloading! beheerder",
|
||||||
"description": "Window/tab title"
|
"description": "Window/tab title"
|
||||||
},
|
},
|
||||||
"mask": {
|
"mask": {
|
||||||
@ -486,7 +486,7 @@
|
|||||||
"description": "Action for moving a download up"
|
"description": "Action for moving a download up"
|
||||||
},
|
},
|
||||||
"nagging_message": {
|
"nagging_message": {
|
||||||
"message": "U heeft al $DOWNLOADS$ downloads toegevoegd met DownThemAll! Als regelmatige gebruiker wilt u wellicht een donatie overwegen om verdere ontwikkeling te ondersteunen. Alvast bedankt!",
|
"message": "U heeft al $DOWNLOADS$ downloads toegevoegd met TraitorousDownloading! Als regelmatige gebruiker wilt u wellicht een donatie overwegen om verdere ontwikkeling te ondersteunen. Alvast bedankt!",
|
||||||
"description": "Donation nagging message; displayed as a notification bar in manager",
|
"description": "Donation nagging message; displayed as a notification bar in manager",
|
||||||
"placeholders": {
|
"placeholders": {
|
||||||
"downloads": {
|
"downloads": {
|
||||||
@ -566,7 +566,7 @@
|
|||||||
"description": "Menu text; Preferences"
|
"description": "Menu text; Preferences"
|
||||||
},
|
},
|
||||||
"prefs_title": {
|
"prefs_title": {
|
||||||
"message": "DownThemAll! voorkeuren",
|
"message": "TraitorousDownloading! voorkeuren",
|
||||||
"description": "Window/tab title; Preferences"
|
"description": "Window/tab title; Preferences"
|
||||||
},
|
},
|
||||||
"pref_add_paused": {
|
"pref_add_paused": {
|
||||||
@ -574,11 +574,11 @@
|
|||||||
"description": "Preferences/General"
|
"description": "Preferences/General"
|
||||||
},
|
},
|
||||||
"pref_button_type": {
|
"pref_button_type": {
|
||||||
"message": "DownThemAll! knop:",
|
"message": "TraitorousDownloading! knop:",
|
||||||
"description": "label"
|
"description": "label"
|
||||||
},
|
},
|
||||||
"pref_button_type_dta": {
|
"pref_button_type_dta": {
|
||||||
"message": "DownThemAll! selectie",
|
"message": "TraitorousDownloading! selectie",
|
||||||
"description": "label"
|
"description": "label"
|
||||||
},
|
},
|
||||||
"pref_button_type_manager": {
|
"pref_button_type_manager": {
|
||||||
@ -657,6 +657,22 @@
|
|||||||
"message": "Probeer links te vinden in de tekst van de website (langzamer)",
|
"message": "Probeer links te vinden in de tekst van de website (langzamer)",
|
||||||
"description": "Preferences/General"
|
"description": "Preferences/General"
|
||||||
},
|
},
|
||||||
|
"pref_theme": {
|
||||||
|
"message": "Thema:",
|
||||||
|
"description": "label text"
|
||||||
|
},
|
||||||
|
"pref_theme_dark": {
|
||||||
|
"message": "Donker",
|
||||||
|
"description": "option text"
|
||||||
|
},
|
||||||
|
"pref_theme_default": {
|
||||||
|
"message": "Systeem/Browser",
|
||||||
|
"description": "option text"
|
||||||
|
},
|
||||||
|
"pref_theme_light": {
|
||||||
|
"message": "Licht",
|
||||||
|
"description": "option text"
|
||||||
|
},
|
||||||
"pref_ui": {
|
"pref_ui": {
|
||||||
"message": "Gebruikersinterface",
|
"message": "Gebruikersinterface",
|
||||||
"description": "Preferences/General; group text"
|
"description": "Preferences/General; group text"
|
||||||
@ -1010,7 +1026,7 @@
|
|||||||
"description": "Menu text; select context"
|
"description": "Menu text; select context"
|
||||||
},
|
},
|
||||||
"select_title": {
|
"select_title": {
|
||||||
"message": "DownThemAll! - Selecteer uw Downloads",
|
"message": "TraitorousDownloading! - Selecteer uw Downloads",
|
||||||
"description": "Title of the select window"
|
"description": "Title of the select window"
|
||||||
},
|
},
|
||||||
"SERVER_BAD_CONTENT": {
|
"SERVER_BAD_CONTENT": {
|
||||||
@ -1054,7 +1070,7 @@
|
|||||||
"description": "Header text; single window"
|
"description": "Header text; single window"
|
||||||
},
|
},
|
||||||
"single_title": {
|
"single_title": {
|
||||||
"message": "DownThemAll! - Link toevoegen",
|
"message": "TraitorousDownloading! - Link toevoegen",
|
||||||
"description": "Title of single window"
|
"description": "Title of single window"
|
||||||
},
|
},
|
||||||
"sizeB": {
|
"sizeB": {
|
||||||
|
@ -156,7 +156,7 @@
|
|||||||
"description": "Filter label for the Archives filter"
|
"description": "Filter label for the Archives filter"
|
||||||
},
|
},
|
||||||
"deffilter_aud": {
|
"deffilter_aud": {
|
||||||
"message": "Audio (mp3, flac, wav, …)",
|
"message": "Dźwięk (mp3, flac, wav, …)",
|
||||||
"description": "Filter label for the Audio filter"
|
"description": "Filter label for the Audio filter"
|
||||||
},
|
},
|
||||||
"deffilter_bin": {
|
"deffilter_bin": {
|
||||||
@ -232,27 +232,27 @@
|
|||||||
"description": "Download (verb/action); e.g. in single and select buttons"
|
"description": "Download (verb/action); e.g. in single and select buttons"
|
||||||
},
|
},
|
||||||
"dta_regular": {
|
"dta_regular": {
|
||||||
"message": "DownThemAll!",
|
"message": "TraitorousDownloading!",
|
||||||
"description": "Regular dta action; Menu text"
|
"description": "Regular dta action; Menu text"
|
||||||
},
|
},
|
||||||
"dta_regular_all": {
|
"dta_regular_all": {
|
||||||
"message": "DownThemAll! - Wszystkie zakładki",
|
"message": "TraitorousDownloading! - Wszystkie zakładki",
|
||||||
"description": "Menu text"
|
"description": "Menu text"
|
||||||
},
|
},
|
||||||
"dta_regular_image": {
|
"dta_regular_image": {
|
||||||
"message": "Zapisz Obraz z DownThemAll!",
|
"message": "Zapisz Obraz z TraitorousDownloading!",
|
||||||
"description": "Menu text"
|
"description": "Menu text"
|
||||||
},
|
},
|
||||||
"dta_regular_link": {
|
"dta_regular_link": {
|
||||||
"message": "Zapisz Link z DownThemAll!",
|
"message": "Zapisz Link z TraitorousDownloading!",
|
||||||
"description": "Menu text"
|
"description": "Menu text"
|
||||||
},
|
},
|
||||||
"dta_regular_media": {
|
"dta_regular_media": {
|
||||||
"message": "Zapisz Multimedia z DownThemAll!",
|
"message": "Zapisz Multimedia z TraitorousDownloading!",
|
||||||
"description": "Menu text"
|
"description": "Menu text"
|
||||||
},
|
},
|
||||||
"dta_regular_selection": {
|
"dta_regular_selection": {
|
||||||
"message": "Zapisz wybór z DownThemAll!",
|
"message": "Zapisz wybór z TraitorousDownloading!",
|
||||||
"description": "Menu text"
|
"description": "Menu text"
|
||||||
},
|
},
|
||||||
"dta_turbo": {
|
"dta_turbo": {
|
||||||
@ -321,7 +321,7 @@
|
|||||||
},
|
},
|
||||||
"extensionDescription": {
|
"extensionDescription": {
|
||||||
"message": "Narzędzie do zbiorowego pobierania dla Twojej przeglądarki",
|
"message": "Narzędzie do zbiorowego pobierania dla Twojej przeglądarki",
|
||||||
"description": "DownThemAll! tagline, displayed in about:addons; Please do NOT refer to a specific browser such as firefox, as we will probably support more than one"
|
"description": "TraitorousDownloading! tagline, displayed in about:addons; Please do NOT refer to a specific browser such as firefox, as we will probably support more than one"
|
||||||
},
|
},
|
||||||
"fastfiltering": {
|
"fastfiltering": {
|
||||||
"message": "Szybkie filtrowanie",
|
"message": "Szybkie filtrowanie",
|
||||||
@ -450,7 +450,7 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"manager_title": {
|
"manager_title": {
|
||||||
"message": "Menedżer DownThemAll!",
|
"message": "Menedżer TraitorousDownloading!",
|
||||||
"description": "Window/tab title"
|
"description": "Window/tab title"
|
||||||
},
|
},
|
||||||
"mask": {
|
"mask": {
|
||||||
@ -486,7 +486,7 @@
|
|||||||
"description": "Action for moving a download up"
|
"description": "Action for moving a download up"
|
||||||
},
|
},
|
||||||
"nagging_message": {
|
"nagging_message": {
|
||||||
"message": "Dodałeś do tej pory $DOWNLOADS$ pobrań z DownThemAll! Jako stały użytkownik możesz rozważyć darowiznę na wsparcie dalszego rozwoju. Dzięki!",
|
"message": "Dodałeś do tej pory $DOWNLOADS$ pobrań z TraitorousDownloading! Jako stały użytkownik możesz rozważyć darowiznę na wsparcie dalszego rozwoju. Dzięki!",
|
||||||
"description": "Donation nagging message; displayed as a notification bar in manager",
|
"description": "Donation nagging message; displayed as a notification bar in manager",
|
||||||
"placeholders": {
|
"placeholders": {
|
||||||
"downloads": {
|
"downloads": {
|
||||||
@ -566,7 +566,7 @@
|
|||||||
"description": "Menu text; Preferences"
|
"description": "Menu text; Preferences"
|
||||||
},
|
},
|
||||||
"prefs_title": {
|
"prefs_title": {
|
||||||
"message": "Ustawienia DownThemAll!",
|
"message": "Ustawienia TraitorousDownloading!",
|
||||||
"description": "Window/tab title; Preferences"
|
"description": "Window/tab title; Preferences"
|
||||||
},
|
},
|
||||||
"pref_add_paused": {
|
"pref_add_paused": {
|
||||||
@ -574,11 +574,11 @@
|
|||||||
"description": "Preferences/General"
|
"description": "Preferences/General"
|
||||||
},
|
},
|
||||||
"pref_button_type": {
|
"pref_button_type": {
|
||||||
"message": "Przycisk DownThemAll!:",
|
"message": "Przycisk TraitorousDownloading!:",
|
||||||
"description": "label"
|
"description": "label"
|
||||||
},
|
},
|
||||||
"pref_button_type_dta": {
|
"pref_button_type_dta": {
|
||||||
"message": "Wybór DownThemAll!:",
|
"message": "Wybór TraitorousDownloading!:",
|
||||||
"description": "label"
|
"description": "label"
|
||||||
},
|
},
|
||||||
"pref_button_type_manager": {
|
"pref_button_type_manager": {
|
||||||
@ -657,6 +657,22 @@
|
|||||||
"message": "Spróbuj znaleźć linki w treści strony internetowej (wolniejsze)",
|
"message": "Spróbuj znaleźć linki w treści strony internetowej (wolniejsze)",
|
||||||
"description": "Preferences/General"
|
"description": "Preferences/General"
|
||||||
},
|
},
|
||||||
|
"pref_theme": {
|
||||||
|
"message": "Motyw:",
|
||||||
|
"description": "label text"
|
||||||
|
},
|
||||||
|
"pref_theme_dark": {
|
||||||
|
"message": "Ciemny",
|
||||||
|
"description": "option text"
|
||||||
|
},
|
||||||
|
"pref_theme_default": {
|
||||||
|
"message": "Systemowy/Przeglądarki",
|
||||||
|
"description": "option text"
|
||||||
|
},
|
||||||
|
"pref_theme_light": {
|
||||||
|
"message": "Jasny",
|
||||||
|
"description": "option text"
|
||||||
|
},
|
||||||
"pref_ui": {
|
"pref_ui": {
|
||||||
"message": "Interfejs Użytkownika",
|
"message": "Interfejs Użytkownika",
|
||||||
"description": "Preferences/General; group text"
|
"description": "Preferences/General; group text"
|
||||||
@ -1010,7 +1026,7 @@
|
|||||||
"description": "Menu text; select context"
|
"description": "Menu text; select context"
|
||||||
},
|
},
|
||||||
"select_title": {
|
"select_title": {
|
||||||
"message": "DownThemAll! - Wybierz swoje pobierania",
|
"message": "TraitorousDownloading! - Wybierz swoje pobierania",
|
||||||
"description": "Title of the select window"
|
"description": "Title of the select window"
|
||||||
},
|
},
|
||||||
"SERVER_BAD_CONTENT": {
|
"SERVER_BAD_CONTENT": {
|
||||||
@ -1054,7 +1070,7 @@
|
|||||||
"description": "Header text; single window"
|
"description": "Header text; single window"
|
||||||
},
|
},
|
||||||
"single_title": {
|
"single_title": {
|
||||||
"message": "DownThemAll! - Dodaj link",
|
"message": "TraitorousDownloading! - Dodaj link",
|
||||||
"description": "Title of single window"
|
"description": "Title of single window"
|
||||||
},
|
},
|
||||||
"sizeB": {
|
"sizeB": {
|
||||||
|
@ -232,27 +232,27 @@
|
|||||||
"description": "Download (verb/action); e.g. in single and select buttons"
|
"description": "Download (verb/action); e.g. in single and select buttons"
|
||||||
},
|
},
|
||||||
"dta_regular": {
|
"dta_regular": {
|
||||||
"message": "DownThemAll!",
|
"message": "TraitorousDownloading!",
|
||||||
"description": "Regular dta action; Menu text"
|
"description": "Regular dta action; Menu text"
|
||||||
},
|
},
|
||||||
"dta_regular_all": {
|
"dta_regular_all": {
|
||||||
"message": "DownThemAll! - Todas as abas",
|
"message": "TraitorousDownloading! - Todas as abas",
|
||||||
"description": "Menu text"
|
"description": "Menu text"
|
||||||
},
|
},
|
||||||
"dta_regular_image": {
|
"dta_regular_image": {
|
||||||
"message": "Salvar Imagem com o DownThemAll!",
|
"message": "Salvar Imagem com o TraitorousDownloading!",
|
||||||
"description": "Menu text"
|
"description": "Menu text"
|
||||||
},
|
},
|
||||||
"dta_regular_link": {
|
"dta_regular_link": {
|
||||||
"message": "Salvar Link com o DownThemAll!",
|
"message": "Salvar Link com o TraitorousDownloading!",
|
||||||
"description": "Menu text"
|
"description": "Menu text"
|
||||||
},
|
},
|
||||||
"dta_regular_media": {
|
"dta_regular_media": {
|
||||||
"message": "Salvar Mídia com o DownThemAll!",
|
"message": "Salvar Mídia com o TraitorousDownloading!",
|
||||||
"description": "Menu text"
|
"description": "Menu text"
|
||||||
},
|
},
|
||||||
"dta_regular_selection": {
|
"dta_regular_selection": {
|
||||||
"message": "Salvar Seleção com o DownThemAll!",
|
"message": "Salvar Seleção com o TraitorousDownloading!",
|
||||||
"description": "Menu text"
|
"description": "Menu text"
|
||||||
},
|
},
|
||||||
"dta_turbo": {
|
"dta_turbo": {
|
||||||
@ -321,7 +321,7 @@
|
|||||||
},
|
},
|
||||||
"extensionDescription": {
|
"extensionDescription": {
|
||||||
"message": "A ferramenta de download em massa para o seu navegador",
|
"message": "A ferramenta de download em massa para o seu navegador",
|
||||||
"description": "DownThemAll! tagline, displayed in about:addons; Please do NOT refer to a specific browser such as firefox, as we will probably support more than one"
|
"description": "TraitorousDownloading! tagline, displayed in about:addons; Please do NOT refer to a specific browser such as firefox, as we will probably support more than one"
|
||||||
},
|
},
|
||||||
"fastfiltering": {
|
"fastfiltering": {
|
||||||
"message": "Filtragem rápida",
|
"message": "Filtragem rápida",
|
||||||
@ -450,7 +450,7 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"manager_title": {
|
"manager_title": {
|
||||||
"message": "Gerenciador do DownThemAll!",
|
"message": "Gerenciador do TraitorousDownloading!",
|
||||||
"description": "Window/tab title"
|
"description": "Window/tab title"
|
||||||
},
|
},
|
||||||
"mask": {
|
"mask": {
|
||||||
@ -486,7 +486,7 @@
|
|||||||
"description": "Action for moving a download up"
|
"description": "Action for moving a download up"
|
||||||
},
|
},
|
||||||
"nagging_message": {
|
"nagging_message": {
|
||||||
"message": "Você já adicionou $DOWNLOADS$ downloads com DownThemAll! Como usuário regular, você pode considerar uma doação para apoiar desenvolvimento adicional. Obrigado!",
|
"message": "Você já adicionou $DOWNLOADS$ downloads com TraitorousDownloading! Como usuário regular, você pode considerar uma doação para apoiar desenvolvimento adicional. Obrigado!",
|
||||||
"description": "Donation nagging message; displayed as a notification bar in manager",
|
"description": "Donation nagging message; displayed as a notification bar in manager",
|
||||||
"placeholders": {
|
"placeholders": {
|
||||||
"downloads": {
|
"downloads": {
|
||||||
@ -566,7 +566,7 @@
|
|||||||
"description": "Menu text; Preferences"
|
"description": "Menu text; Preferences"
|
||||||
},
|
},
|
||||||
"prefs_title": {
|
"prefs_title": {
|
||||||
"message": "Preferências do DownThemAll!",
|
"message": "Preferências do TraitorousDownloading!",
|
||||||
"description": "Window/tab title; Preferences"
|
"description": "Window/tab title; Preferences"
|
||||||
},
|
},
|
||||||
"pref_add_paused": {
|
"pref_add_paused": {
|
||||||
@ -574,11 +574,11 @@
|
|||||||
"description": "Preferences/General"
|
"description": "Preferences/General"
|
||||||
},
|
},
|
||||||
"pref_button_type": {
|
"pref_button_type": {
|
||||||
"message": "Botão DownThemAll!",
|
"message": "Botão TraitorousDownloading!",
|
||||||
"description": "label"
|
"description": "label"
|
||||||
},
|
},
|
||||||
"pref_button_type_dta": {
|
"pref_button_type_dta": {
|
||||||
"message": "Seleção do DownThemAll!",
|
"message": "Seleção do TraitorousDownloading!",
|
||||||
"description": "label"
|
"description": "label"
|
||||||
},
|
},
|
||||||
"pref_button_type_manager": {
|
"pref_button_type_manager": {
|
||||||
@ -657,6 +657,22 @@
|
|||||||
"message": "Tentar encontrar links no texto do site (mais lento)",
|
"message": "Tentar encontrar links no texto do site (mais lento)",
|
||||||
"description": "Preferences/General"
|
"description": "Preferences/General"
|
||||||
},
|
},
|
||||||
|
"pref_theme": {
|
||||||
|
"message": "Tema:",
|
||||||
|
"description": "label text"
|
||||||
|
},
|
||||||
|
"pref_theme_dark": {
|
||||||
|
"message": "Escuro",
|
||||||
|
"description": "option text"
|
||||||
|
},
|
||||||
|
"pref_theme_default": {
|
||||||
|
"message": "Sistema/Navegador",
|
||||||
|
"description": "option text"
|
||||||
|
},
|
||||||
|
"pref_theme_light": {
|
||||||
|
"message": "Claro",
|
||||||
|
"description": "option text"
|
||||||
|
},
|
||||||
"pref_ui": {
|
"pref_ui": {
|
||||||
"message": "Interface de usuário",
|
"message": "Interface de usuário",
|
||||||
"description": "Preferences/General; group text"
|
"description": "Preferences/General; group text"
|
||||||
@ -1010,7 +1026,7 @@
|
|||||||
"description": "Menu text; select context"
|
"description": "Menu text; select context"
|
||||||
},
|
},
|
||||||
"select_title": {
|
"select_title": {
|
||||||
"message": "DownThemAll! - Selecione seus Downloads",
|
"message": "TraitorousDownloading! - Selecione seus Downloads",
|
||||||
"description": "Title of the select window"
|
"description": "Title of the select window"
|
||||||
},
|
},
|
||||||
"SERVER_BAD_CONTENT": {
|
"SERVER_BAD_CONTENT": {
|
||||||
@ -1054,7 +1070,7 @@
|
|||||||
"description": "Header text; single window"
|
"description": "Header text; single window"
|
||||||
},
|
},
|
||||||
"single_title": {
|
"single_title": {
|
||||||
"message": "DownThemAll! - Adicone um link",
|
"message": "TraitorousDownloading! - Adicone um link",
|
||||||
"description": "Title of single window"
|
"description": "Title of single window"
|
||||||
},
|
},
|
||||||
"sizeB": {
|
"sizeB": {
|
||||||
|
@ -232,27 +232,27 @@
|
|||||||
"description": "Download (verb/action); e.g. in single and select buttons"
|
"description": "Download (verb/action); e.g. in single and select buttons"
|
||||||
},
|
},
|
||||||
"dta_regular": {
|
"dta_regular": {
|
||||||
"message": "DownThemAll!",
|
"message": "TraitorousDownloading!",
|
||||||
"description": "Regular dta action; Menu text"
|
"description": "Regular dta action; Menu text"
|
||||||
},
|
},
|
||||||
"dta_regular_all": {
|
"dta_regular_all": {
|
||||||
"message": "DownThemAll! - Все вкладки",
|
"message": "TraitorousDownloading! - Все вкладки",
|
||||||
"description": "Menu text"
|
"description": "Menu text"
|
||||||
},
|
},
|
||||||
"dta_regular_image": {
|
"dta_regular_image": {
|
||||||
"message": "Закачать изображение через DownThemAll!",
|
"message": "Закачать изображение через TraitorousDownloading!",
|
||||||
"description": "Menu text"
|
"description": "Menu text"
|
||||||
},
|
},
|
||||||
"dta_regular_link": {
|
"dta_regular_link": {
|
||||||
"message": "Закачать ссылку через DownThemAll!",
|
"message": "Закачать ссылку через TraitorousDownloading!",
|
||||||
"description": "Menu text"
|
"description": "Menu text"
|
||||||
},
|
},
|
||||||
"dta_regular_media": {
|
"dta_regular_media": {
|
||||||
"message": "Закачать медиа через DownThemAll!",
|
"message": "Закачать медиа через TraitorousDownloading!",
|
||||||
"description": "Menu text"
|
"description": "Menu text"
|
||||||
},
|
},
|
||||||
"dta_regular_selection": {
|
"dta_regular_selection": {
|
||||||
"message": "Закачать выделенное через DownThemAll!",
|
"message": "Закачать выделенное через TraitorousDownloading!",
|
||||||
"description": "Menu text"
|
"description": "Menu text"
|
||||||
},
|
},
|
||||||
"dta_turbo": {
|
"dta_turbo": {
|
||||||
@ -321,7 +321,7 @@
|
|||||||
},
|
},
|
||||||
"extensionDescription": {
|
"extensionDescription": {
|
||||||
"message": "Универсальная качалка для вашего браузера",
|
"message": "Универсальная качалка для вашего браузера",
|
||||||
"description": "DownThemAll! tagline, displayed in about:addons; Please do NOT refer to a specific browser such as firefox, as we will probably support more than one"
|
"description": "TraitorousDownloading! tagline, displayed in about:addons; Please do NOT refer to a specific browser such as firefox, as we will probably support more than one"
|
||||||
},
|
},
|
||||||
"fastfiltering": {
|
"fastfiltering": {
|
||||||
"message": "Быстрый фильтр",
|
"message": "Быстрый фильтр",
|
||||||
@ -450,7 +450,7 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"manager_title": {
|
"manager_title": {
|
||||||
"message": "DownThemAll! Менеджер",
|
"message": "TraitorousDownloading! Менеджер",
|
||||||
"description": "Window/tab title"
|
"description": "Window/tab title"
|
||||||
},
|
},
|
||||||
"mask": {
|
"mask": {
|
||||||
@ -486,7 +486,7 @@
|
|||||||
"description": "Action for moving a download up"
|
"description": "Action for moving a download up"
|
||||||
},
|
},
|
||||||
"nagging_message": {
|
"nagging_message": {
|
||||||
"message": "Добавлено $DOWNLOADS$ закачек через DownThemAll! на текущий момент! Как постоянный пользователь подумайте над тем чтобы поддержать дальнейшую разработку. Спасибо!",
|
"message": "Добавлено $DOWNLOADS$ закачек через TraitorousDownloading! на текущий момент! Как постоянный пользователь подумайте над тем чтобы поддержать дальнейшую разработку. Спасибо!",
|
||||||
"description": "Donation nagging message; displayed as a notification bar in manager",
|
"description": "Donation nagging message; displayed as a notification bar in manager",
|
||||||
"placeholders": {
|
"placeholders": {
|
||||||
"downloads": {
|
"downloads": {
|
||||||
@ -566,7 +566,7 @@
|
|||||||
"description": "Menu text; Preferences"
|
"description": "Menu text; Preferences"
|
||||||
},
|
},
|
||||||
"prefs_title": {
|
"prefs_title": {
|
||||||
"message": "Настройки DownThemAll!",
|
"message": "Настройки TraitorousDownloading!",
|
||||||
"description": "Window/tab title; Preferences"
|
"description": "Window/tab title; Preferences"
|
||||||
},
|
},
|
||||||
"pref_add_paused": {
|
"pref_add_paused": {
|
||||||
@ -574,11 +574,11 @@
|
|||||||
"description": "Preferences/General"
|
"description": "Preferences/General"
|
||||||
},
|
},
|
||||||
"pref_button_type": {
|
"pref_button_type": {
|
||||||
"message": "Кнопка DownThemAll!",
|
"message": "Кнопка TraitorousDownloading!",
|
||||||
"description": "label"
|
"description": "label"
|
||||||
},
|
},
|
||||||
"pref_button_type_dta": {
|
"pref_button_type_dta": {
|
||||||
"message": "DownThemAll! выделенного",
|
"message": "TraitorousDownloading! выделенного",
|
||||||
"description": "label"
|
"description": "label"
|
||||||
},
|
},
|
||||||
"pref_button_type_manager": {
|
"pref_button_type_manager": {
|
||||||
@ -657,6 +657,22 @@
|
|||||||
"message": "Пытаться обнаружить ссылки в тексте на сайте",
|
"message": "Пытаться обнаружить ссылки в тексте на сайте",
|
||||||
"description": "Preferences/General"
|
"description": "Preferences/General"
|
||||||
},
|
},
|
||||||
|
"pref_theme": {
|
||||||
|
"message": "Тема:",
|
||||||
|
"description": "label text"
|
||||||
|
},
|
||||||
|
"pref_theme_dark": {
|
||||||
|
"message": "Тёмная",
|
||||||
|
"description": "option text"
|
||||||
|
},
|
||||||
|
"pref_theme_default": {
|
||||||
|
"message": "Система/Браузер",
|
||||||
|
"description": "option text"
|
||||||
|
},
|
||||||
|
"pref_theme_light": {
|
||||||
|
"message": "Светлая",
|
||||||
|
"description": "option text"
|
||||||
|
},
|
||||||
"pref_ui": {
|
"pref_ui": {
|
||||||
"message": "Интерфейс пользователя",
|
"message": "Интерфейс пользователя",
|
||||||
"description": "Preferences/General; group text"
|
"description": "Preferences/General; group text"
|
||||||
@ -1010,7 +1026,7 @@
|
|||||||
"description": "Menu text; select context"
|
"description": "Menu text; select context"
|
||||||
},
|
},
|
||||||
"select_title": {
|
"select_title": {
|
||||||
"message": "DownThemAll! - Выбрать ваши закачки",
|
"message": "TraitorousDownloading! - Выбрать ваши закачки",
|
||||||
"description": "Title of the select window"
|
"description": "Title of the select window"
|
||||||
},
|
},
|
||||||
"SERVER_BAD_CONTENT": {
|
"SERVER_BAD_CONTENT": {
|
||||||
@ -1054,7 +1070,7 @@
|
|||||||
"description": "Header text; single window"
|
"description": "Header text; single window"
|
||||||
},
|
},
|
||||||
"single_title": {
|
"single_title": {
|
||||||
"message": "DownThemAll! - Добавить ссылку",
|
"message": "TraitorousDownloading! - Добавить ссылку",
|
||||||
"description": "Title of single window"
|
"description": "Title of single window"
|
||||||
},
|
},
|
||||||
"sizeB": {
|
"sizeB": {
|
||||||
|
1224
_locales/sv/messages.json
Normal file
1300
_locales/tr/messages.json
Normal file
@ -232,27 +232,27 @@
|
|||||||
"description": "Download (verb/action); e.g. in single and select buttons"
|
"description": "Download (verb/action); e.g. in single and select buttons"
|
||||||
},
|
},
|
||||||
"dta_regular": {
|
"dta_regular": {
|
||||||
"message": "DownThemAll!",
|
"message": "TraitorousDownloading!",
|
||||||
"description": "Regular dta action; Menu text"
|
"description": "Regular dta action; Menu text"
|
||||||
},
|
},
|
||||||
"dta_regular_all": {
|
"dta_regular_all": {
|
||||||
"message": "DownThemAll! - 全部标签页",
|
"message": "TraitorousDownloading! - 全部标签页",
|
||||||
"description": "Menu text"
|
"description": "Menu text"
|
||||||
},
|
},
|
||||||
"dta_regular_image": {
|
"dta_regular_image": {
|
||||||
"message": "用 DownThemAll! 保存图片",
|
"message": "用 TraitorousDownloading! 保存图片",
|
||||||
"description": "Menu text"
|
"description": "Menu text"
|
||||||
},
|
},
|
||||||
"dta_regular_link": {
|
"dta_regular_link": {
|
||||||
"message": "用 DownThemAll! 保存链接",
|
"message": "用 TraitorousDownloading! 保存链接",
|
||||||
"description": "Menu text"
|
"description": "Menu text"
|
||||||
},
|
},
|
||||||
"dta_regular_media": {
|
"dta_regular_media": {
|
||||||
"message": "用 DownThemAll! 保存媒体",
|
"message": "用 TraitorousDownloading! 保存媒体",
|
||||||
"description": "Menu text"
|
"description": "Menu text"
|
||||||
},
|
},
|
||||||
"dta_regular_selection": {
|
"dta_regular_selection": {
|
||||||
"message": "用 DownThemAll! 保存选中项",
|
"message": "用 TraitorousDownloading! 保存选中项",
|
||||||
"description": "Menu text"
|
"description": "Menu text"
|
||||||
},
|
},
|
||||||
"dta_turbo": {
|
"dta_turbo": {
|
||||||
@ -321,7 +321,7 @@
|
|||||||
},
|
},
|
||||||
"extensionDescription": {
|
"extensionDescription": {
|
||||||
"message": "适用您浏览器的批量下载工具",
|
"message": "适用您浏览器的批量下载工具",
|
||||||
"description": "DownThemAll! tagline, displayed in about:addons; Please do NOT refer to a specific browser such as firefox, as we will probably support more than one"
|
"description": "TraitorousDownloading! tagline, displayed in about:addons; Please do NOT refer to a specific browser such as firefox, as we will probably support more than one"
|
||||||
},
|
},
|
||||||
"fastfiltering": {
|
"fastfiltering": {
|
||||||
"message": "快速筛选",
|
"message": "快速筛选",
|
||||||
@ -450,7 +450,7 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"manager_title": {
|
"manager_title": {
|
||||||
"message": "DownThemAll! 管理器",
|
"message": "TraitorousDownloading! 管理器",
|
||||||
"description": "Window/tab title"
|
"description": "Window/tab title"
|
||||||
},
|
},
|
||||||
"mask": {
|
"mask": {
|
||||||
@ -486,7 +486,7 @@
|
|||||||
"description": "Action for moving a download up"
|
"description": "Action for moving a download up"
|
||||||
},
|
},
|
||||||
"nagging_message": {
|
"nagging_message": {
|
||||||
"message": "您使用 DownThemAll! 至今已经添加了 $DOWNLOADS$ 个下载。作为一名普通用户,您可以考虑捐助来支持一下开发。多谢!",
|
"message": "您使用 TraitorousDownloading! 至今已经添加了 $DOWNLOADS$ 个下载。作为一名普通用户,您可以考虑捐助来支持一下开发。多谢!",
|
||||||
"description": "Donation nagging message; displayed as a notification bar in manager",
|
"description": "Donation nagging message; displayed as a notification bar in manager",
|
||||||
"placeholders": {
|
"placeholders": {
|
||||||
"downloads": {
|
"downloads": {
|
||||||
@ -566,7 +566,7 @@
|
|||||||
"description": "Menu text; Preferences"
|
"description": "Menu text; Preferences"
|
||||||
},
|
},
|
||||||
"prefs_title": {
|
"prefs_title": {
|
||||||
"message": "DownThemAll! 首选项",
|
"message": "TraitorousDownloading! 首选项",
|
||||||
"description": "Window/tab title; Preferences"
|
"description": "Window/tab title; Preferences"
|
||||||
},
|
},
|
||||||
"pref_add_paused": {
|
"pref_add_paused": {
|
||||||
@ -574,11 +574,11 @@
|
|||||||
"description": "Preferences/General"
|
"description": "Preferences/General"
|
||||||
},
|
},
|
||||||
"pref_button_type": {
|
"pref_button_type": {
|
||||||
"message": "DownThemAll! 按钮:",
|
"message": "TraitorousDownloading! 按钮:",
|
||||||
"description": "label"
|
"description": "label"
|
||||||
},
|
},
|
||||||
"pref_button_type_dta": {
|
"pref_button_type_dta": {
|
||||||
"message": "DownThemAll! 选择框",
|
"message": "TraitorousDownloading! 选择框",
|
||||||
"description": "label"
|
"description": "label"
|
||||||
},
|
},
|
||||||
"pref_button_type_manager": {
|
"pref_button_type_manager": {
|
||||||
@ -657,6 +657,22 @@
|
|||||||
"message": "尝试在网站文本中寻找链接(较慢)",
|
"message": "尝试在网站文本中寻找链接(较慢)",
|
||||||
"description": "Preferences/General"
|
"description": "Preferences/General"
|
||||||
},
|
},
|
||||||
|
"pref_theme": {
|
||||||
|
"message": "主题:",
|
||||||
|
"description": "label text"
|
||||||
|
},
|
||||||
|
"pref_theme_dark": {
|
||||||
|
"message": "深邃",
|
||||||
|
"description": "option text"
|
||||||
|
},
|
||||||
|
"pref_theme_default": {
|
||||||
|
"message": "系统/浏览器",
|
||||||
|
"description": "option text"
|
||||||
|
},
|
||||||
|
"pref_theme_light": {
|
||||||
|
"message": "明亮",
|
||||||
|
"description": "option text"
|
||||||
|
},
|
||||||
"pref_ui": {
|
"pref_ui": {
|
||||||
"message": "用户界面",
|
"message": "用户界面",
|
||||||
"description": "Preferences/General; group text"
|
"description": "Preferences/General; group text"
|
||||||
@ -1010,7 +1026,7 @@
|
|||||||
"description": "Menu text; select context"
|
"description": "Menu text; select context"
|
||||||
},
|
},
|
||||||
"select_title": {
|
"select_title": {
|
||||||
"message": "DownThemAll! - 选择您要下载的内容",
|
"message": "TraitorousDownloading! - 选择您要下载的内容",
|
||||||
"description": "Title of the select window"
|
"description": "Title of the select window"
|
||||||
},
|
},
|
||||||
"SERVER_BAD_CONTENT": {
|
"SERVER_BAD_CONTENT": {
|
||||||
@ -1054,7 +1070,7 @@
|
|||||||
"description": "Header text; single window"
|
"description": "Header text; single window"
|
||||||
},
|
},
|
||||||
"single_title": {
|
"single_title": {
|
||||||
"message": "DownThemAll! - 添加链接",
|
"message": "TraitorousDownloading! - 添加链接",
|
||||||
"description": "Title of single window"
|
"description": "Title of single window"
|
||||||
},
|
},
|
||||||
"sizeB": {
|
"sizeB": {
|
||||||
@ -1246,7 +1262,7 @@
|
|||||||
"description": "Tooltip text; manager/downloads"
|
"description": "Tooltip text; manager/downloads"
|
||||||
},
|
},
|
||||||
"tooltip_eta": {
|
"tooltip_eta": {
|
||||||
"message": "重命名:",
|
"message": "剩余时间:",
|
||||||
"description": "Tooltip text; manager/downloads; Time"
|
"description": "Tooltip text; manager/downloads; Time"
|
||||||
},
|
},
|
||||||
"tooltip_from": {
|
"tooltip_from": {
|
||||||
|
@ -232,27 +232,27 @@
|
|||||||
"description": "Download (verb/action); e.g. in single and select buttons"
|
"description": "Download (verb/action); e.g. in single and select buttons"
|
||||||
},
|
},
|
||||||
"dta_regular": {
|
"dta_regular": {
|
||||||
"message": "DownThemAll!",
|
"message": "TraitorousDownloading!",
|
||||||
"description": "Regular dta action; Menu text"
|
"description": "Regular dta action; Menu text"
|
||||||
},
|
},
|
||||||
"dta_regular_all": {
|
"dta_regular_all": {
|
||||||
"message": "DownThemAll!- 全部分頁",
|
"message": "TraitorousDownloading!- 全部分頁",
|
||||||
"description": "Menu text"
|
"description": "Menu text"
|
||||||
},
|
},
|
||||||
"dta_regular_image": {
|
"dta_regular_image": {
|
||||||
"message": "以 DownThemAll! 儲存圖片",
|
"message": "以 TraitorousDownloading! 儲存圖片",
|
||||||
"description": "Menu text"
|
"description": "Menu text"
|
||||||
},
|
},
|
||||||
"dta_regular_link": {
|
"dta_regular_link": {
|
||||||
"message": "以 DownThemAll! 下載連結",
|
"message": "以 TraitorousDownloading! 下載連結",
|
||||||
"description": "Menu text"
|
"description": "Menu text"
|
||||||
},
|
},
|
||||||
"dta_regular_media": {
|
"dta_regular_media": {
|
||||||
"message": "以 DownThemAll! 儲存媒體檔案",
|
"message": "以 TraitorousDownloading! 儲存媒體檔案",
|
||||||
"description": "Menu text"
|
"description": "Menu text"
|
||||||
},
|
},
|
||||||
"dta_regular_selection": {
|
"dta_regular_selection": {
|
||||||
"message": "以 DownThemAll! 儲存選取項目",
|
"message": "以 TraitorousDownloading! 儲存選取項目",
|
||||||
"description": "Menu text"
|
"description": "Menu text"
|
||||||
},
|
},
|
||||||
"dta_turbo": {
|
"dta_turbo": {
|
||||||
@ -321,7 +321,7 @@
|
|||||||
},
|
},
|
||||||
"extensionDescription": {
|
"extensionDescription": {
|
||||||
"message": "為你瀏覽器而生的大量下載工具",
|
"message": "為你瀏覽器而生的大量下載工具",
|
||||||
"description": "DownThemAll! tagline, displayed in about:addons; Please do NOT refer to a specific browser such as firefox, as we will probably support more than one"
|
"description": "TraitorousDownloading! tagline, displayed in about:addons; Please do NOT refer to a specific browser such as firefox, as we will probably support more than one"
|
||||||
},
|
},
|
||||||
"fastfiltering": {
|
"fastfiltering": {
|
||||||
"message": "快速篩選",
|
"message": "快速篩選",
|
||||||
@ -450,7 +450,7 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"manager_title": {
|
"manager_title": {
|
||||||
"message": "DownThemAll!下載管理",
|
"message": "TraitorousDownloading!下載管理",
|
||||||
"description": "Window/tab title"
|
"description": "Window/tab title"
|
||||||
},
|
},
|
||||||
"mask": {
|
"mask": {
|
||||||
@ -486,7 +486,7 @@
|
|||||||
"description": "Action for moving a download up"
|
"description": "Action for moving a download up"
|
||||||
},
|
},
|
||||||
"nagging_message": {
|
"nagging_message": {
|
||||||
"message": "目前已透過DownThemAll! 加入 $DOWNLOADS$ 個下載您可以贊助我們支持更進一步的開發謝謝!",
|
"message": "目前已透過TraitorousDownloading! 加入 $DOWNLOADS$ 個下載您可以贊助我們支持更進一步的開發謝謝!",
|
||||||
"description": "Donation nagging message; displayed as a notification bar in manager",
|
"description": "Donation nagging message; displayed as a notification bar in manager",
|
||||||
"placeholders": {
|
"placeholders": {
|
||||||
"downloads": {
|
"downloads": {
|
||||||
@ -566,7 +566,7 @@
|
|||||||
"description": "Menu text; Preferences"
|
"description": "Menu text; Preferences"
|
||||||
},
|
},
|
||||||
"prefs_title": {
|
"prefs_title": {
|
||||||
"message": "DownThemAll!偏好設定",
|
"message": "TraitorousDownloading!偏好設定",
|
||||||
"description": "Window/tab title; Preferences"
|
"description": "Window/tab title; Preferences"
|
||||||
},
|
},
|
||||||
"pref_add_paused": {
|
"pref_add_paused": {
|
||||||
@ -574,11 +574,11 @@
|
|||||||
"description": "Preferences/General"
|
"description": "Preferences/General"
|
||||||
},
|
},
|
||||||
"pref_button_type": {
|
"pref_button_type": {
|
||||||
"message": "DownThemAll! 按鈕:",
|
"message": "TraitorousDownloading! 按鈕:",
|
||||||
"description": "label"
|
"description": "label"
|
||||||
},
|
},
|
||||||
"pref_button_type_dta": {
|
"pref_button_type_dta": {
|
||||||
"message": "DownThemAll! 選取",
|
"message": "TraitorousDownloading! 選取",
|
||||||
"description": "label"
|
"description": "label"
|
||||||
},
|
},
|
||||||
"pref_button_type_manager": {
|
"pref_button_type_manager": {
|
||||||
@ -657,6 +657,22 @@
|
|||||||
"message": "試著從網頁文字尋找連結〈較慢〉",
|
"message": "試著從網頁文字尋找連結〈較慢〉",
|
||||||
"description": "Preferences/General"
|
"description": "Preferences/General"
|
||||||
},
|
},
|
||||||
|
"pref_theme": {
|
||||||
|
"message": "主題:",
|
||||||
|
"description": "label text"
|
||||||
|
},
|
||||||
|
"pref_theme_dark": {
|
||||||
|
"message": "暗色",
|
||||||
|
"description": "option text"
|
||||||
|
},
|
||||||
|
"pref_theme_default": {
|
||||||
|
"message": "系統 / 瀏覽器",
|
||||||
|
"description": "option text"
|
||||||
|
},
|
||||||
|
"pref_theme_light": {
|
||||||
|
"message": "亮色",
|
||||||
|
"description": "option text"
|
||||||
|
},
|
||||||
"pref_ui": {
|
"pref_ui": {
|
||||||
"message": "操作介面",
|
"message": "操作介面",
|
||||||
"description": "Preferences/General; group text"
|
"description": "Preferences/General; group text"
|
||||||
@ -1010,7 +1026,7 @@
|
|||||||
"description": "Menu text; select context"
|
"description": "Menu text; select context"
|
||||||
},
|
},
|
||||||
"select_title": {
|
"select_title": {
|
||||||
"message": "DownThemAll!- 選擇下載",
|
"message": "TraitorousDownloading!- 選擇下載",
|
||||||
"description": "Title of the select window"
|
"description": "Title of the select window"
|
||||||
},
|
},
|
||||||
"SERVER_BAD_CONTENT": {
|
"SERVER_BAD_CONTENT": {
|
||||||
@ -1054,7 +1070,7 @@
|
|||||||
"description": "Header text; single window"
|
"description": "Header text; single window"
|
||||||
},
|
},
|
||||||
"single_title": {
|
"single_title": {
|
||||||
"message": "DownThemAll!- 新增連結",
|
"message": "TraitorousDownloading!- 新增連結",
|
||||||
"description": "Title of single window"
|
"description": "Title of single window"
|
||||||
},
|
},
|
||||||
"sizeB": {
|
"sizeB": {
|
||||||
|
@ -15,7 +15,7 @@
|
|||||||
"deffilter-aud": {
|
"deffilter-aud": {
|
||||||
"label": "Audio",
|
"label": "Audio",
|
||||||
"expr": "/\\.(?:mp3|wav|og(?:g|a)|flac|midi?|rm|aac|wma|mka|ape|opus)$/i",
|
"expr": "/\\.(?:mp3|wav|og(?:g|a)|flac|midi?|rm|aac|wma|mka|ape|opus)$/i",
|
||||||
"type": 1,
|
"type": 3,
|
||||||
"active": false,
|
"active": false,
|
||||||
"icon": "mp3"
|
"icon": "mp3"
|
||||||
},
|
},
|
||||||
|
@ -17,6 +17,7 @@
|
|||||||
"remove-missing-on-init": false,
|
"remove-missing-on-init": false,
|
||||||
"retries": 5,
|
"retries": 5,
|
||||||
"retry-time": 10,
|
"retry-time": 10,
|
||||||
|
"theme": "default",
|
||||||
"limits": [
|
"limits": [
|
||||||
{
|
{
|
||||||
"domain": "*",
|
"domain": "*",
|
||||||
|
16
lib/api.ts
@ -11,7 +11,7 @@ import { getManager } from "./manager/man";
|
|||||||
import { select } from "./select";
|
import { select } from "./select";
|
||||||
import { single } from "./single";
|
import { single } from "./single";
|
||||||
import { Notification } from "./notifications";
|
import { Notification } from "./notifications";
|
||||||
import { MASK, FASTFILTER, SUBFOLDER } from "./recentlist";
|
import { MASK, FASTFILTER, SUBFOLDER, SERVER } from "./recentlist";
|
||||||
import { openManager } from "./windowutils";
|
import { openManager } from "./windowutils";
|
||||||
import { _ } from "./i18n";
|
import { _ } from "./i18n";
|
||||||
|
|
||||||
@ -20,7 +20,9 @@ const MAX_BATCH = 10000;
|
|||||||
export interface QueueOptions {
|
export interface QueueOptions {
|
||||||
mask?: string;
|
mask?: string;
|
||||||
subfolder?: string;
|
subfolder?: string;
|
||||||
|
server?: string;
|
||||||
paused?: boolean;
|
paused?: boolean;
|
||||||
|
cookies?: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
export const API = new class APIImpl {
|
export const API = new class APIImpl {
|
||||||
@ -32,8 +34,10 @@ export const API = new class APIImpl {
|
|||||||
await Promise.all([MASK.init(), SUBFOLDER.init()]);
|
await Promise.all([MASK.init(), SUBFOLDER.init()]);
|
||||||
const {mask = MASK.current} = options;
|
const {mask = MASK.current} = options;
|
||||||
const {subfolder = SUBFOLDER.current} = options;
|
const {subfolder = SUBFOLDER.current} = options;
|
||||||
|
const {server = SERVER.current} = options;
|
||||||
|
|
||||||
const {paused = false} = options;
|
const {paused = false} = options;
|
||||||
|
const {cookies = false} = options;
|
||||||
const defaults: any = {
|
const defaults: any = {
|
||||||
_idx: 0,
|
_idx: 0,
|
||||||
get idx() {
|
get idx() {
|
||||||
@ -49,8 +53,10 @@ export const API = new class APIImpl {
|
|||||||
postData: null,
|
postData: null,
|
||||||
mask,
|
mask,
|
||||||
subfolder,
|
subfolder,
|
||||||
|
server,
|
||||||
date: Date.now(),
|
date: Date.now(),
|
||||||
paused
|
paused,
|
||||||
|
cookies,
|
||||||
};
|
};
|
||||||
let currentBatch = await Prefs.get("currentBatch", 0);
|
let currentBatch = await Prefs.get("currentBatch", 0);
|
||||||
const initialBatch = currentBatch;
|
const initialBatch = currentBatch;
|
||||||
@ -80,7 +86,7 @@ export const API = new class APIImpl {
|
|||||||
new Notification(null, _("queued-downloads", items.length));
|
new Notification(null, _("queued-downloads", items.length));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (await Prefs.get("open-manager-on-queue")) {
|
if (false && await Prefs.get("open-manager-on-queue")) {
|
||||||
await openManager(false);
|
await openManager(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -124,6 +130,10 @@ export const API = new class APIImpl {
|
|||||||
await SUBFOLDER.init();
|
await SUBFOLDER.init();
|
||||||
await SUBFOLDER.push(options.subfolder);
|
await SUBFOLDER.push(options.subfolder);
|
||||||
}
|
}
|
||||||
|
if (typeof options.server === "string" && !options.serverOnce) {
|
||||||
|
await SERVER.init();
|
||||||
|
await SERVER.push(options.server);
|
||||||
|
}
|
||||||
if (typeof options.type === "string") {
|
if (typeof options.type === "string") {
|
||||||
await Prefs.set("last-type", options.type);
|
await Prefs.set("last-type", options.type);
|
||||||
}
|
}
|
||||||
|
@ -22,9 +22,12 @@ import {
|
|||||||
runtime,
|
runtime,
|
||||||
history,
|
history,
|
||||||
sessions,
|
sessions,
|
||||||
|
// eslint-disable-next-line no-unused-vars
|
||||||
|
OnInstalled,
|
||||||
} from "./browser";
|
} from "./browser";
|
||||||
import { Bus } from "./bus";
|
import { Bus } from "./bus";
|
||||||
import { filterInSitu } from "./util";
|
import { filterInSitu } from "./util";
|
||||||
|
import { DB } from "./db";
|
||||||
|
|
||||||
|
|
||||||
const menus = typeof (_menus) !== "undefined" && _menus || _cmenus;
|
const menus = typeof (_menus) !== "undefined" && _menus || _cmenus;
|
||||||
@ -104,19 +107,19 @@ class Handler {
|
|||||||
|
|
||||||
async performSelection(options: SelectionOptions) {
|
async performSelection(options: SelectionOptions) {
|
||||||
try {
|
try {
|
||||||
const toptions: any = {
|
const tabOptions: any = {
|
||||||
currentWindow: true,
|
currentWindow: true,
|
||||||
discarded: false,
|
discarded: false,
|
||||||
};
|
};
|
||||||
if (!CHROME) {
|
if (!CHROME) {
|
||||||
toptions.hidden = false;
|
tabOptions.hidden = false;
|
||||||
}
|
}
|
||||||
const selectedTabs = options.allTabs ?
|
const selectedTabs = options.allTabs ?
|
||||||
await tabs.query(toptions) as any[] :
|
await tabs.query(tabOptions) as any[] :
|
||||||
[options.tab];
|
[options.tab];
|
||||||
|
|
||||||
const textLinks = await Prefs.get("text-links", true);
|
const textLinks = await Prefs.get("text-links", true);
|
||||||
const goptions = {
|
const gatherOptions = {
|
||||||
type: "DTA:gather",
|
type: "DTA:gather",
|
||||||
selectionOnly: options.selectionOnly,
|
selectionOnly: options.selectionOnly,
|
||||||
textLinks,
|
textLinks,
|
||||||
@ -125,7 +128,7 @@ class Handler {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const results = await Promise.all(selectedTabs.
|
const results = await Promise.all(selectedTabs.
|
||||||
map((tab: any) => runContentJob(tab, GATHER, goptions)));
|
map((tab: any) => runContentJob(tab, GATHER, gatherOptions)));
|
||||||
|
|
||||||
await this.processResults(options.turbo, results.flat());
|
await this.processResults(options.turbo, results.flat());
|
||||||
}
|
}
|
||||||
@ -135,13 +138,40 @@ class Handler {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function getMajor(version?: string) {
|
||||||
|
if (!version) {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
const match = version.match(/^\d+\.\d+/);
|
||||||
|
if (!match) {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
return match[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
runtime.onInstalled.addListener(({reason, previousVersion}: OnInstalled) => {
|
||||||
|
const {version} = runtime.getManifest();
|
||||||
|
const major = getMajor(version);
|
||||||
|
const prevMajor = getMajor(previousVersion);
|
||||||
|
if (reason === "update" && major !== prevMajor) {
|
||||||
|
// tabs.create({
|
||||||
|
// url: `https://about.downthemall.org/changelog/?cur=${major}&prev=${prevMajor}`,
|
||||||
|
// });
|
||||||
|
}
|
||||||
|
else if (reason === "install") {
|
||||||
|
// tabs.create({
|
||||||
|
// url: `https://about.downthemall.org/4.0/?cur=${major}`,
|
||||||
|
// });
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
locale.then(() => {
|
locale.then(() => {
|
||||||
const menuHandler = new class Menus extends Handler {
|
const menuHandler = new class Menus extends Handler {
|
||||||
constructor() {
|
constructor() {
|
||||||
super();
|
super();
|
||||||
this.onClicked = this.onClicked.bind(this);
|
this.onClicked = this.onClicked.bind(this);
|
||||||
const alls = new Map<string, string[]>();
|
const alls = new Map<string, string[]>();
|
||||||
const mcreate = (options: any) => {
|
const menuCreate = (options: any) => {
|
||||||
if (CHROME) {
|
if (CHROME) {
|
||||||
delete options.icons;
|
delete options.icons;
|
||||||
options.contexts = options.contexts.
|
options.contexts = options.contexts.
|
||||||
@ -155,7 +185,7 @@ locale.then(() => {
|
|||||||
}
|
}
|
||||||
menus.create(options);
|
menus.create(options);
|
||||||
};
|
};
|
||||||
mcreate({
|
menuCreate({
|
||||||
id: "DTARegularLink",
|
id: "DTARegularLink",
|
||||||
contexts: ["link"],
|
contexts: ["link"],
|
||||||
icons: {
|
icons: {
|
||||||
@ -164,7 +194,7 @@ locale.then(() => {
|
|||||||
},
|
},
|
||||||
title: _("dta.regular.link"),
|
title: _("dta.regular.link"),
|
||||||
});
|
});
|
||||||
mcreate({
|
menuCreate({
|
||||||
id: "DTATurboLink",
|
id: "DTATurboLink",
|
||||||
contexts: ["link"],
|
contexts: ["link"],
|
||||||
icons: {
|
icons: {
|
||||||
@ -173,7 +203,7 @@ locale.then(() => {
|
|||||||
},
|
},
|
||||||
title: _("dta.turbo.link"),
|
title: _("dta.turbo.link"),
|
||||||
});
|
});
|
||||||
mcreate({
|
menuCreate({
|
||||||
id: "DTARegularImage",
|
id: "DTARegularImage",
|
||||||
contexts: ["image"],
|
contexts: ["image"],
|
||||||
icons: {
|
icons: {
|
||||||
@ -182,7 +212,7 @@ locale.then(() => {
|
|||||||
},
|
},
|
||||||
title: _("dta.regular.image"),
|
title: _("dta.regular.image"),
|
||||||
});
|
});
|
||||||
mcreate({
|
menuCreate({
|
||||||
id: "DTATurboImage",
|
id: "DTATurboImage",
|
||||||
contexts: ["image"],
|
contexts: ["image"],
|
||||||
icons: {
|
icons: {
|
||||||
@ -191,7 +221,7 @@ locale.then(() => {
|
|||||||
},
|
},
|
||||||
title: _("dta.turbo.image"),
|
title: _("dta.turbo.image"),
|
||||||
});
|
});
|
||||||
mcreate({
|
menuCreate({
|
||||||
id: "DTARegularMedia",
|
id: "DTARegularMedia",
|
||||||
contexts: ["video", "audio"],
|
contexts: ["video", "audio"],
|
||||||
icons: {
|
icons: {
|
||||||
@ -200,7 +230,7 @@ locale.then(() => {
|
|||||||
},
|
},
|
||||||
title: _("dta.regular.media"),
|
title: _("dta.regular.media"),
|
||||||
});
|
});
|
||||||
mcreate({
|
menuCreate({
|
||||||
id: "DTATurboMedia",
|
id: "DTATurboMedia",
|
||||||
contexts: ["video", "audio"],
|
contexts: ["video", "audio"],
|
||||||
icons: {
|
icons: {
|
||||||
@ -209,7 +239,7 @@ locale.then(() => {
|
|||||||
},
|
},
|
||||||
title: _("dta.turbo.media"),
|
title: _("dta.turbo.media"),
|
||||||
});
|
});
|
||||||
mcreate({
|
menuCreate({
|
||||||
id: "DTARegularSelection",
|
id: "DTARegularSelection",
|
||||||
contexts: ["selection"],
|
contexts: ["selection"],
|
||||||
icons: {
|
icons: {
|
||||||
@ -218,7 +248,7 @@ locale.then(() => {
|
|||||||
},
|
},
|
||||||
title: _("dta.regular.selection"),
|
title: _("dta.regular.selection"),
|
||||||
});
|
});
|
||||||
mcreate({
|
menuCreate({
|
||||||
id: "DTATurboSelection",
|
id: "DTATurboSelection",
|
||||||
contexts: ["selection"],
|
contexts: ["selection"],
|
||||||
icons: {
|
icons: {
|
||||||
@ -227,7 +257,7 @@ locale.then(() => {
|
|||||||
},
|
},
|
||||||
title: _("dta.turbo.selection"),
|
title: _("dta.turbo.selection"),
|
||||||
});
|
});
|
||||||
mcreate({
|
menuCreate({
|
||||||
id: "DTARegular",
|
id: "DTARegular",
|
||||||
contexts: ["all", "browser_action", "tools_menu"],
|
contexts: ["all", "browser_action", "tools_menu"],
|
||||||
icons: {
|
icons: {
|
||||||
@ -236,7 +266,7 @@ locale.then(() => {
|
|||||||
},
|
},
|
||||||
title: _("dta.regular"),
|
title: _("dta.regular"),
|
||||||
});
|
});
|
||||||
mcreate({
|
menuCreate({
|
||||||
id: "DTATurbo",
|
id: "DTATurbo",
|
||||||
contexts: ["all", "browser_action", "tools_menu"],
|
contexts: ["all", "browser_action", "tools_menu"],
|
||||||
icons: {
|
icons: {
|
||||||
@ -245,12 +275,12 @@ locale.then(() => {
|
|||||||
},
|
},
|
||||||
title: _("dta.turbo"),
|
title: _("dta.turbo"),
|
||||||
});
|
});
|
||||||
mcreate({
|
menuCreate({
|
||||||
id: "sep-1",
|
id: "sep-1",
|
||||||
contexts: ["all", "browser_action", "tools_menu"],
|
contexts: ["all", "browser_action", "tools_menu"],
|
||||||
type: "separator"
|
type: "separator"
|
||||||
});
|
});
|
||||||
mcreate({
|
menuCreate({
|
||||||
id: "DTARegularAll",
|
id: "DTARegularAll",
|
||||||
contexts: ["all", "browser_action", "tools_menu"],
|
contexts: ["all", "browser_action", "tools_menu"],
|
||||||
icons: {
|
icons: {
|
||||||
@ -259,7 +289,7 @@ locale.then(() => {
|
|||||||
},
|
},
|
||||||
title: _("dta-regular-all"),
|
title: _("dta-regular-all"),
|
||||||
});
|
});
|
||||||
mcreate({
|
menuCreate({
|
||||||
id: "DTATurboAll",
|
id: "DTATurboAll",
|
||||||
contexts: ["all", "browser_action", "tools_menu"],
|
contexts: ["all", "browser_action", "tools_menu"],
|
||||||
icons: {
|
icons: {
|
||||||
@ -271,12 +301,12 @@ locale.then(() => {
|
|||||||
const sep2ctx = menus.ACTION_MENU_TOP_LEVEL_LIMIT === 6 ?
|
const sep2ctx = menus.ACTION_MENU_TOP_LEVEL_LIMIT === 6 ?
|
||||||
["all", "tools_menu"] :
|
["all", "tools_menu"] :
|
||||||
["all", "browser_action", "tools_menu"];
|
["all", "browser_action", "tools_menu"];
|
||||||
mcreate({
|
menuCreate({
|
||||||
id: "sep-2",
|
id: "sep-2",
|
||||||
contexts: sep2ctx,
|
contexts: sep2ctx,
|
||||||
type: "separator"
|
type: "separator"
|
||||||
});
|
});
|
||||||
mcreate({
|
menuCreate({
|
||||||
id: "DTAAdd",
|
id: "DTAAdd",
|
||||||
contexts: ["all", "browser_action", "tools_menu"],
|
contexts: ["all", "browser_action", "tools_menu"],
|
||||||
icons: {
|
icons: {
|
||||||
@ -287,12 +317,12 @@ locale.then(() => {
|
|||||||
},
|
},
|
||||||
title: _("add-download"),
|
title: _("add-download"),
|
||||||
});
|
});
|
||||||
mcreate({
|
menuCreate({
|
||||||
id: "sep-3",
|
id: "sep-3",
|
||||||
contexts: ["all", "browser_action", "tools_menu"],
|
contexts: ["all", "browser_action", "tools_menu"],
|
||||||
type: "separator"
|
type: "separator"
|
||||||
});
|
});
|
||||||
mcreate({
|
/* menuCreate({
|
||||||
id: "DTAManager",
|
id: "DTAManager",
|
||||||
contexts: ["all", "browser_action", "tools_menu"],
|
contexts: ["all", "browser_action", "tools_menu"],
|
||||||
icons: {
|
icons: {
|
||||||
@ -300,8 +330,8 @@ locale.then(() => {
|
|||||||
32: "/style/button-manager@2x.png",
|
32: "/style/button-manager@2x.png",
|
||||||
},
|
},
|
||||||
title: _("manager.short"),
|
title: _("manager.short"),
|
||||||
});
|
});*/
|
||||||
mcreate({
|
menuCreate({
|
||||||
id: "DTAPrefs",
|
id: "DTAPrefs",
|
||||||
contexts: ["all", "browser_action", "tools_menu"],
|
contexts: ["all", "browser_action", "tools_menu"],
|
||||||
icons: {
|
icons: {
|
||||||
@ -537,7 +567,6 @@ locale.then(() => {
|
|||||||
32: "/style/icon32.png",
|
32: "/style/icon32.png",
|
||||||
48: "/style/icon48.png",
|
48: "/style/icon48.png",
|
||||||
64: "/style/icon64.png",
|
64: "/style/icon64.png",
|
||||||
96: "/style/icon96.png",
|
|
||||||
128: "/style/icon128.png",
|
128: "/style/icon128.png",
|
||||||
256: "/style/icon256.png"
|
256: "/style/icon256.png"
|
||||||
};
|
};
|
||||||
@ -634,6 +663,13 @@ locale.then(() => {
|
|||||||
await sessionRemover();
|
await sessionRemover();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
await DB.init();
|
||||||
|
}
|
||||||
|
catch (ex) {
|
||||||
|
console.error("db init", ex.toString(), ex.message, ex.stack, ex);
|
||||||
|
}
|
||||||
|
|
||||||
await Prefs.set("last-run", new Date());
|
await Prefs.set("last-run", new Date());
|
||||||
await filters();
|
await filters();
|
||||||
await getManager();
|
await getManager();
|
||||||
|
@ -73,7 +73,7 @@ class Numeral implements Generator {
|
|||||||
this.digits = dir ? rawpieces[0].length : rawpieces[1].length;
|
this.digits = dir ? rawpieces[0].length : rawpieces[1].length;
|
||||||
this.length = Math.floor(
|
this.length = Math.floor(
|
||||||
(this.stop - this.start + (dir ? 1 : -1)) / this.step);
|
(this.stop - this.start + (dir ? 1 : -1)) / this.step);
|
||||||
this.preview = this[Symbol.iterator]().next().value;
|
this.preview = this[Symbol.iterator]().next().value as string;
|
||||||
Object.freeze(this);
|
Object.freeze(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -93,6 +93,60 @@ class Numeral implements Generator {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class Character implements Generator {
|
||||||
|
public readonly start: number;
|
||||||
|
|
||||||
|
public readonly stop: number;
|
||||||
|
|
||||||
|
public readonly step: number;
|
||||||
|
|
||||||
|
public readonly length: number;
|
||||||
|
|
||||||
|
public readonly preview: string;
|
||||||
|
|
||||||
|
constructor(str: string) {
|
||||||
|
const rawpieces = str.split(":").map(e => e.trim());
|
||||||
|
const pieces = rawpieces.map((e, i) => {
|
||||||
|
if (i === 2) {
|
||||||
|
return reallyParseInt(e);
|
||||||
|
}
|
||||||
|
if (e.length > 1) {
|
||||||
|
throw new Error("Malformed Character sequence");
|
||||||
|
}
|
||||||
|
return e.charCodeAt(0);
|
||||||
|
});
|
||||||
|
if (pieces.length < 2) {
|
||||||
|
throw new Error("Invalid input");
|
||||||
|
}
|
||||||
|
const [start, stop, step] = pieces;
|
||||||
|
if (step === 0) {
|
||||||
|
throw new Error("Invalid step");
|
||||||
|
}
|
||||||
|
this.step = !step ? 1 : step;
|
||||||
|
const dir = this.step > 0;
|
||||||
|
if (dir && start > stop) {
|
||||||
|
throw new Error("Invalid sequence");
|
||||||
|
}
|
||||||
|
else if (!dir && start < stop) {
|
||||||
|
throw new Error("Invalid sequence");
|
||||||
|
}
|
||||||
|
this.start = start;
|
||||||
|
this.stop = stop;
|
||||||
|
this.length = Math.floor(
|
||||||
|
(this.stop - this.start + (dir ? 1 : -1)) / this.step);
|
||||||
|
this.preview = this[Symbol.iterator]().next().value as string;
|
||||||
|
Object.freeze(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
*[Symbol.iterator]() {
|
||||||
|
const {start, stop, step} = this;
|
||||||
|
const dir = step > 0;
|
||||||
|
for (let i = start; (dir ? i <= stop : i >= stop); i += step) {
|
||||||
|
yield String.fromCharCode(i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
export class BatchGenerator implements Generator {
|
export class BatchGenerator implements Generator {
|
||||||
private readonly gens: Generator[];
|
private readonly gens: Generator[];
|
||||||
|
|
||||||
@ -120,11 +174,16 @@ export class BatchGenerator implements Generator {
|
|||||||
try {
|
try {
|
||||||
this.gens.push(new Numeral(tok));
|
this.gens.push(new Numeral(tok));
|
||||||
}
|
}
|
||||||
catch (ex) {
|
catch {
|
||||||
|
try {
|
||||||
|
this.gens.push(new Character(tok));
|
||||||
|
}
|
||||||
|
catch {
|
||||||
this.gens.push(new Literal(`[${tok}]`));
|
this.gens.push(new Literal(`[${tok}]`));
|
||||||
this.hasInvalid = true;
|
this.hasInvalid = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
if (str) {
|
if (str) {
|
||||||
this.gens.push(new Literal(str));
|
this.gens.push(new Literal(str));
|
||||||
}
|
}
|
||||||
|
@ -9,33 +9,33 @@ interface ExtensionListener {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export interface MessageSender {
|
export interface MessageSender {
|
||||||
tab?: Tab;
|
readonly tab?: Tab;
|
||||||
frameId?: number;
|
readonly frameId?: number;
|
||||||
id?: number;
|
readonly id?: number;
|
||||||
url?: string;
|
readonly url?: string;
|
||||||
tlsChannelId?: string;
|
readonly tlsChannelId?: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
export interface Tab {
|
export interface Tab {
|
||||||
id?: number;
|
readonly id?: number;
|
||||||
incognito?: boolean;
|
readonly incognito?: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface MenuClickInfo {
|
export interface MenuClickInfo {
|
||||||
menuItemId: string | number;
|
readonly menuItemId: string | number;
|
||||||
button?: number;
|
readonly button?: number;
|
||||||
linkUrl?: string;
|
readonly linkUrl?: string;
|
||||||
srcUrl?: string;
|
readonly srcUrl?: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
export interface RawPort {
|
export interface RawPort {
|
||||||
error: any;
|
readonly error: any;
|
||||||
name: string;
|
readonly name: string;
|
||||||
onDisconnect: ExtensionListener;
|
readonly sender?: MessageSender;
|
||||||
onMessage: ExtensionListener;
|
readonly onDisconnect: ExtensionListener;
|
||||||
sender?: MessageSender;
|
readonly onMessage: ExtensionListener;
|
||||||
disconnect: () => void;
|
disconnect: () => void;
|
||||||
postMessage: (message: any) => void;
|
postMessage: (message: any) => void;
|
||||||
}
|
}
|
||||||
@ -57,7 +57,7 @@ type Header = {name: string; value: string};
|
|||||||
|
|
||||||
export interface DownloadOptions {
|
export interface DownloadOptions {
|
||||||
conflictAction: string;
|
conflictAction: string;
|
||||||
filename: string;
|
filename?: string;
|
||||||
saveAs: boolean;
|
saveAs: boolean;
|
||||||
url: string;
|
url: string;
|
||||||
method?: string;
|
method?: string;
|
||||||
@ -82,15 +82,22 @@ interface Downloads {
|
|||||||
getFileIcon(id: number, options?: any): Promise<string>;
|
getFileIcon(id: number, options?: any): Promise<string>;
|
||||||
setShelfEnabled(state: boolean): void;
|
setShelfEnabled(state: boolean): void;
|
||||||
removeFile(manId: number): Promise<void>;
|
removeFile(manId: number): Promise<void>;
|
||||||
onCreated: ExtensionListener;
|
readonly onCreated: ExtensionListener;
|
||||||
onChanged: ExtensionListener;
|
readonly onChanged: ExtensionListener;
|
||||||
onErased: ExtensionListener;
|
readonly onErased: ExtensionListener;
|
||||||
|
readonly onDeterminingFilename?: ExtensionListener;
|
||||||
}
|
}
|
||||||
|
|
||||||
interface WebRequest {
|
interface WebRequest {
|
||||||
onBeforeSendHeaders: WebRequestListener;
|
readonly onBeforeSendHeaders: WebRequestListener;
|
||||||
onSendHeaders: WebRequestListener;
|
readonly onSendHeaders: WebRequestListener;
|
||||||
onHeadersReceived: WebRequestListener;
|
readonly onHeadersReceived: WebRequestListener;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface OnInstalled {
|
||||||
|
readonly reason: string;
|
||||||
|
readonly previousVersion?: string;
|
||||||
|
readonly temporary: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
export const {browserAction} = polyfill;
|
export const {browserAction} = polyfill;
|
||||||
@ -107,5 +114,7 @@ export const {tabs} = polyfill;
|
|||||||
export const {webNavigation} = polyfill;
|
export const {webNavigation} = polyfill;
|
||||||
export const {webRequest}: {webRequest: WebRequest} = polyfill;
|
export const {webRequest}: {webRequest: WebRequest} = polyfill;
|
||||||
export const {windows} = polyfill;
|
export const {windows} = polyfill;
|
||||||
|
export const {theme} = polyfill;
|
||||||
|
|
||||||
export const CHROME = navigator.appVersion.includes("Chrome/");
|
export const CHROME = navigator.appVersion.includes("Chrome/");
|
||||||
|
export const OPERA = navigator.appVersion.includes("OPR/");
|
||||||
|
32
lib/bus.ts
@ -8,32 +8,35 @@ import {runtime, tabs, RawPort, MessageSender} from "./browser";
|
|||||||
export class Port extends EventEmitter {
|
export class Port extends EventEmitter {
|
||||||
private port: RawPort | null;
|
private port: RawPort | null;
|
||||||
|
|
||||||
|
private disconnected = false;
|
||||||
|
|
||||||
constructor(port: RawPort) {
|
constructor(port: RawPort) {
|
||||||
super();
|
super();
|
||||||
this.port = port;
|
this.port = port;
|
||||||
|
|
||||||
let disconnected = false;
|
|
||||||
const disconnect = () => {
|
|
||||||
if (disconnected) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
disconnected = true;
|
|
||||||
this.port = null; // Break the cycle
|
|
||||||
this.emit("disconnect", this, port);
|
|
||||||
};
|
|
||||||
// Nasty firefox bug, thus listen for tab removal explicitly
|
// Nasty firefox bug, thus listen for tab removal explicitly
|
||||||
if (port.sender && port.sender.tab && port.sender.tab.id) {
|
if (port.sender && port.sender.tab && port.sender.tab.id) {
|
||||||
const otherTabId = port.sender.tab.id;
|
const otherTabId = port.sender.tab.id;
|
||||||
const tabListener = function(tabId: number) {
|
const tabListener = (tabId: number) => {
|
||||||
if (tabId !== otherTabId) {
|
if (tabId !== otherTabId) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
disconnect();
|
this.disconnect();
|
||||||
};
|
};
|
||||||
tabs.onRemoved.addListener(tabListener);
|
tabs.onRemoved.addListener(tabListener);
|
||||||
}
|
}
|
||||||
port.onMessage.addListener(this.onMessage.bind(this));
|
port.onMessage.addListener(this.onMessage.bind(this));
|
||||||
port.onDisconnect.addListener(disconnect);
|
port.onDisconnect.addListener(this.disconnect.bind(this));
|
||||||
|
}
|
||||||
|
|
||||||
|
disconnect() {
|
||||||
|
if (this.disconnected) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
this.disconnected = true;
|
||||||
|
const {port} = this;
|
||||||
|
this.port = null; // Break the cycle
|
||||||
|
this.emit("disconnect", this, port);
|
||||||
}
|
}
|
||||||
|
|
||||||
get name() {
|
get name() {
|
||||||
@ -120,6 +123,9 @@ export const Bus = new class extends EventEmitter {
|
|||||||
port.disconnect();
|
port.disconnect();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
this.ports.emit(port.name, new Port(port));
|
const wrapped = new Port(port);
|
||||||
|
if (!this.ports.emit(port.name, wrapped)) {
|
||||||
|
wrapped.disconnect();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}();
|
}();
|
||||||
|
132
lib/db.ts
@ -1,17 +1,25 @@
|
|||||||
"use strict";
|
"use strict";
|
||||||
|
// License: MIT
|
||||||
|
|
||||||
// eslint-disable-next-line no-unused-vars
|
// eslint-disable-next-line no-unused-vars
|
||||||
import { BaseItem } from "./item";
|
import { BaseItem } from "./item";
|
||||||
// eslint-disable-next-line no-unused-vars
|
// eslint-disable-next-line no-unused-vars
|
||||||
import { Download } from "./manager/download";
|
import { Download } from "./manager/download";
|
||||||
import { RUNNING, QUEUED, RETRYING } from "./manager/state";
|
import { RUNNING, QUEUED, RETRYING } from "./manager/state";
|
||||||
|
import { storage } from "./browser";
|
||||||
// License: MIT
|
import { sort } from "./sorting";
|
||||||
|
|
||||||
const VERSION = 1;
|
const VERSION = 1;
|
||||||
const STORE = "queue";
|
const STORE = "queue";
|
||||||
|
|
||||||
export const DB = new class DB {
|
interface Database {
|
||||||
|
init(): Promise<void>;
|
||||||
|
saveItems(items: Download[]): Promise<unknown>;
|
||||||
|
deleteItems(items: any[]): Promise<void>;
|
||||||
|
getAll(): Promise<BaseItem[]>;
|
||||||
|
}
|
||||||
|
|
||||||
|
export class IDB implements Database {
|
||||||
private db?: IDBDatabase;
|
private db?: IDBDatabase;
|
||||||
|
|
||||||
constructor() {
|
constructor() {
|
||||||
@ -106,7 +114,7 @@ export const DB = new class DB {
|
|||||||
return await new Promise(this.saveItemsInternal.bind(this, items));
|
return await new Promise(this.saveItemsInternal.bind(this, items));
|
||||||
}
|
}
|
||||||
|
|
||||||
deleteItemsInternal(items: any[], resolve: Function, reject: Function) {
|
deleteItemsInternal(items: any[], resolve: () => void, reject: Function) {
|
||||||
if (!items || !items.length || !this.db) {
|
if (!items || !items.length || !this.db) {
|
||||||
resolve();
|
resolve();
|
||||||
return;
|
return;
|
||||||
@ -139,4 +147,120 @@ export const DB = new class DB {
|
|||||||
await this.init();
|
await this.init();
|
||||||
await new Promise(this.deleteItemsInternal.bind(this, items));
|
await new Promise(this.deleteItemsInternal.bind(this, items));
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class StorageDB implements Database {
|
||||||
|
private counter = 1;
|
||||||
|
|
||||||
|
async init(): Promise<void> {
|
||||||
|
const {db = null} = await storage.local.get("db");
|
||||||
|
if (!db || !db.counter) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
this.counter = db.counter;
|
||||||
|
}
|
||||||
|
|
||||||
|
async saveItems(items: Download[]) {
|
||||||
|
const db: any = {items: []};
|
||||||
|
for (const item of items) {
|
||||||
|
if (!item.dbId) {
|
||||||
|
item.dbId = ++this.counter;
|
||||||
|
}
|
||||||
|
db.items.push(item.toJSON());
|
||||||
|
}
|
||||||
|
db.counter = this.counter;
|
||||||
|
await storage.local.set({db});
|
||||||
|
}
|
||||||
|
|
||||||
|
async deleteItems(items: any[]): Promise<void> {
|
||||||
|
const gone = new Set(items.map(i => i.dbId));
|
||||||
|
const {db = null} = await storage.local.get("db");
|
||||||
|
if (!db) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
db.items = db.items.filter((i: any) => !gone.has(i.dbId));
|
||||||
|
await storage.local.set({db});
|
||||||
|
}
|
||||||
|
|
||||||
|
async getAll() {
|
||||||
|
const {db = null} = await storage.local.get("db");
|
||||||
|
if (!db || !Array.isArray(db.items)) {
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
return sort(db.items, (i: any) => i.position) as BaseItem[];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class MemoryDB implements Database {
|
||||||
|
private counter = 1;
|
||||||
|
|
||||||
|
private items = new Map();
|
||||||
|
|
||||||
|
init(): Promise<void> {
|
||||||
|
return Promise.resolve();
|
||||||
|
}
|
||||||
|
|
||||||
|
saveItems(items: Download[]) {
|
||||||
|
for (const item of items) {
|
||||||
|
if (item.private) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (!item.dbId) {
|
||||||
|
item.dbId = ++this.counter;
|
||||||
|
}
|
||||||
|
this.items.set(item.dbId, item.toJSON());
|
||||||
|
}
|
||||||
|
return Promise.resolve();
|
||||||
|
}
|
||||||
|
|
||||||
|
deleteItems(items: any[]) {
|
||||||
|
for (const item of items) {
|
||||||
|
if (!("dbId" in item)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
this.items.delete(item.dbId);
|
||||||
|
}
|
||||||
|
return Promise.resolve();
|
||||||
|
}
|
||||||
|
|
||||||
|
getAll(): Promise<BaseItem[]> {
|
||||||
|
return Promise.resolve(Array.from(this.items.values()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export const DB = new class DBWrapper implements Database {
|
||||||
|
saveItems(items: Download[]): Promise<unknown> {
|
||||||
|
return this.db.saveItems(items);
|
||||||
|
}
|
||||||
|
|
||||||
|
deleteItems(items: any[]): Promise<void> {
|
||||||
|
return this.db.deleteItems(items);
|
||||||
|
}
|
||||||
|
|
||||||
|
getAll(): Promise<BaseItem[]> {
|
||||||
|
return this.db.getAll();
|
||||||
|
}
|
||||||
|
|
||||||
|
private db: Database;
|
||||||
|
|
||||||
|
async init() {
|
||||||
|
try {
|
||||||
|
this.db = new IDB();
|
||||||
|
await this.db.init();
|
||||||
|
}
|
||||||
|
catch (ex) {
|
||||||
|
console.warn(
|
||||||
|
"Failed to initialize idb backend, using storage db fallback", ex);
|
||||||
|
try {
|
||||||
|
this.db = new StorageDB();
|
||||||
|
await this.db.init();
|
||||||
|
}
|
||||||
|
catch (ex) {
|
||||||
|
console.warn(
|
||||||
|
"Failed to initialize storage backend, using memory db fallback", ex);
|
||||||
|
this.db = new MemoryDB();
|
||||||
|
await this.db.init();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}();
|
}();
|
||||||
|
41
lib/i18n.ts
@ -4,7 +4,7 @@
|
|||||||
import {memoize} from "./memoize";
|
import {memoize} from "./memoize";
|
||||||
import langs from "../_locales/all.json";
|
import langs from "../_locales/all.json";
|
||||||
import { sorted, naturalCaseCompare } from "./sorting";
|
import { sorted, naturalCaseCompare } from "./sorting";
|
||||||
|
import lf from "localforage";
|
||||||
|
|
||||||
export const ALL_LANGS = Object.freeze(new Map<string, string>(
|
export const ALL_LANGS = Object.freeze(new Map<string, string>(
|
||||||
sorted(Object.entries(langs), e => {
|
sorted(Object.entries(langs), e => {
|
||||||
@ -40,11 +40,11 @@ class Entry {
|
|||||||
this.message = entry.message.replace(/\$[A-Z0-9]+\$/g, (r: string) => {
|
this.message = entry.message.replace(/\$[A-Z0-9]+\$/g, (r: string) => {
|
||||||
hit = true;
|
hit = true;
|
||||||
const id = r.substr(1, r.length - 2).toLocaleLowerCase();
|
const id = r.substr(1, r.length - 2).toLocaleLowerCase();
|
||||||
const pholder = entry.placeholders[id];
|
const placeholder = entry.placeholders[id];
|
||||||
if (!pholder || !pholder.content) {
|
if (!placeholder || !placeholder.content) {
|
||||||
throw new Error(`Invalid placeholder: ${id}`);
|
throw new Error(`Invalid placeholder: ${id}`);
|
||||||
}
|
}
|
||||||
return `${pholder.content}$`;
|
return `${placeholder.content}$`;
|
||||||
});
|
});
|
||||||
if (!hit) {
|
if (!hit) {
|
||||||
throw new Error("Not entry-able");
|
throw new Error("Not entry-able");
|
||||||
@ -123,15 +123,18 @@ async function fetchLanguage(code: string) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
function loadCached() {
|
async function loadCached(): Promise<any> {
|
||||||
if (document.location.pathname.includes("/windows/")) {
|
const cached = await lf.getItem<string>(CACHE_KEY);
|
||||||
const cached = localStorage.getItem(CACHE_KEY);
|
if (!cached) {
|
||||||
if (cached) {
|
|
||||||
return JSON.parse(cached) as any[];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
const parsed = JSON.parse(cached);
|
||||||
|
if (!Array.isArray(parsed) || !parsed[0].CRASH || !parsed[0].CRASH.message) {
|
||||||
|
console.warn("rejecting cached locales", parsed);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return parsed;
|
||||||
|
}
|
||||||
|
|
||||||
async function loadRawLocales() {
|
async function loadRawLocales() {
|
||||||
// en is the base locale, always to be loaded
|
// en is the base locale, always to be loaded
|
||||||
@ -187,16 +190,16 @@ async function load(): Promise<Localization> {
|
|||||||
}
|
}
|
||||||
CURRENT = currentLang;
|
CURRENT = currentLang;
|
||||||
// en is the base locale
|
// en is the base locale
|
||||||
let valid = loadCached();
|
let valid = await loadCached();
|
||||||
if (!valid) {
|
if (!valid) {
|
||||||
valid = await loadRawLocales();
|
valid = await loadRawLocales();
|
||||||
localStorage.setItem(CACHE_KEY, JSON.stringify(valid));
|
await lf.setItem(CACHE_KEY, JSON.stringify(valid));
|
||||||
}
|
}
|
||||||
if (!valid.length) {
|
if (!valid.length) {
|
||||||
throw new Error("Could not lood ANY of these locales");
|
throw new Error("Could not load ANY of these locales");
|
||||||
}
|
}
|
||||||
|
|
||||||
const custom = localStorage.getItem(CUSTOM_KEY);
|
const custom = await lf.getItem<string>(CUSTOM_KEY);
|
||||||
if (custom) {
|
if (custom) {
|
||||||
try {
|
try {
|
||||||
valid.push(JSON.parse(custom));
|
valid.push(JSON.parse(custom));
|
||||||
@ -239,7 +242,7 @@ locale.then(l => {
|
|||||||
/**
|
/**
|
||||||
* Localize a message
|
* Localize a message
|
||||||
* @param {string} id Identifier of the string to localize
|
* @param {string} id Identifier of the string to localize
|
||||||
* @param {string[]} [subst] Message substituations
|
* @param {string[]} [subst] Message substitutions
|
||||||
* @returns {string} Localized message
|
* @returns {string} Localized message
|
||||||
*/
|
*/
|
||||||
export function _(id: string, ...subst: any[]) {
|
export function _(id: string, ...subst: any[]) {
|
||||||
@ -302,11 +305,11 @@ export async function localize<T extends HTMLElement | DocumentFragment>(
|
|||||||
return localize_(elem);
|
return localize_(elem);
|
||||||
}
|
}
|
||||||
|
|
||||||
export function saveCustomLocale(data?: string) {
|
export async function saveCustomLocale(data?: string) {
|
||||||
if (!data) {
|
if (!data) {
|
||||||
localStorage.removeItem(CUSTOM_KEY);
|
await lf.removeItem(CUSTOM_KEY);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
new Localization(JSON.parse(data));
|
new Localization(JSON.parse(data));
|
||||||
localStorage.setItem(CUSTOM_KEY, data);
|
await localStorage.setItem(CUSTOM_KEY, data);
|
||||||
}
|
}
|
||||||
|
@ -4,9 +4,11 @@
|
|||||||
import { downloads, CHROME } from "./browser";
|
import { downloads, CHROME } from "./browser";
|
||||||
import { EventEmitter } from "../uikit/lib/events";
|
import { EventEmitter } from "../uikit/lib/events";
|
||||||
import { PromiseSerializer } from "./pserializer";
|
import { PromiseSerializer } from "./pserializer";
|
||||||
|
import lf from "localforage";
|
||||||
|
|
||||||
|
|
||||||
const VERSION = 1;
|
|
||||||
const STORE = "iconcache";
|
const STORE = "iconcache";
|
||||||
|
|
||||||
// eslint-disable-next-line no-magic-numbers
|
// eslint-disable-next-line no-magic-numbers
|
||||||
const CACHE_SIZES = CHROME ? [16, 32] : [16, 32, 64, 127];
|
const CACHE_SIZES = CHROME ? [16, 32] : [16, 32, 64, 127];
|
||||||
|
|
||||||
@ -48,37 +50,17 @@ const SYNONYMS = Object.freeze(new Map<string, string>([
|
|||||||
]));
|
]));
|
||||||
|
|
||||||
export const IconCache = new class IconCache extends EventEmitter {
|
export const IconCache = new class IconCache extends EventEmitter {
|
||||||
private db: Promise<IDBDatabase>;
|
private db = lf.createInstance({name: STORE});
|
||||||
|
|
||||||
private cache: Map<string, string>;
|
private cache: Map<string, string>;
|
||||||
|
|
||||||
constructor() {
|
constructor() {
|
||||||
super();
|
super();
|
||||||
this.db = this.init();
|
|
||||||
this.cache = new Map();
|
this.cache = new Map();
|
||||||
this.get = PromiseSerializer.wrapNew(8, this, this.get);
|
this.get = PromiseSerializer.wrapNew(8, this, this.get);
|
||||||
this.set = PromiseSerializer.wrapNew(1, this, this.set);
|
this.set = PromiseSerializer.wrapNew(1, this, this.set);
|
||||||
}
|
}
|
||||||
|
|
||||||
private async init() {
|
|
||||||
return await new Promise<IDBDatabase>((resolve, reject) => {
|
|
||||||
const req = indexedDB.open(STORE, VERSION);
|
|
||||||
req.onupgradeneeded = evt => {
|
|
||||||
const db = req.result;
|
|
||||||
switch (evt.oldVersion) {
|
|
||||||
case 0: {
|
|
||||||
db.createObjectStore(STORE);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
req.onerror = ex => reject(ex);
|
|
||||||
req.onsuccess = () => {
|
|
||||||
resolve(req.result);
|
|
||||||
};
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
private normalize(ext: string) {
|
private normalize(ext: string) {
|
||||||
ext = ext.toLocaleLowerCase();
|
ext = ext.toLocaleLowerCase();
|
||||||
return SYNONYMS.get(ext) || ext;
|
return SYNONYMS.get(ext) || ext;
|
||||||
@ -95,36 +77,25 @@ export const IconCache = new class IconCache extends EventEmitter {
|
|||||||
if (rv) {
|
if (rv) {
|
||||||
return rv;
|
return rv;
|
||||||
}
|
}
|
||||||
const db = await this.db;
|
|
||||||
rv = this.cache.get(sext);
|
rv = this.cache.get(sext);
|
||||||
if (rv) {
|
if (rv) {
|
||||||
return rv;
|
return rv;
|
||||||
}
|
}
|
||||||
return await new Promise<string | undefined>(resolve => {
|
let result = await this.db.getItem<any>(sext);
|
||||||
const trans = db.transaction(STORE, "readonly");
|
|
||||||
trans.onerror = () => resolve(undefined);
|
|
||||||
const store = trans.objectStore(STORE);
|
|
||||||
const req = store.get(sext);
|
|
||||||
req.onerror = () => resolve(undefined);
|
|
||||||
req.onsuccess = () => {
|
|
||||||
const rv = this.cache.get(sext);
|
|
||||||
if (rv) {
|
|
||||||
resolve(rv);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
let {result} = req;
|
|
||||||
if (!result) {
|
if (!result) {
|
||||||
resolve(undefined);
|
return this.cache.get(sext);
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
if (typeof req.result !== "string") {
|
rv = this.cache.get(sext);
|
||||||
|
if (rv) {
|
||||||
|
return rv;
|
||||||
|
}
|
||||||
|
if (typeof result !== "string") {
|
||||||
result = URL.createObjectURL(result).toString();
|
result = URL.createObjectURL(result).toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
this.cache.set(sext, result);
|
this.cache.set(sext, result);
|
||||||
this.cache.set(ext, "");
|
this.cache.set(ext, "");
|
||||||
resolve(result);
|
return result;
|
||||||
};
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
async set(ext: string, manId: number) {
|
async set(ext: string, manId: number) {
|
||||||
@ -145,18 +116,9 @@ export const IconCache = new class IconCache extends EventEmitter {
|
|||||||
}
|
}
|
||||||
for (const {size, icon} of urls) {
|
for (const {size, icon} of urls) {
|
||||||
this.cache.set(`${ext}-${size}`, URL.createObjectURL(icon));
|
this.cache.set(`${ext}-${size}`, URL.createObjectURL(icon));
|
||||||
|
await this.db.setItem(`${ext}-${size}`, icon);
|
||||||
}
|
}
|
||||||
this.cache.set(ext, "");
|
this.cache.set(ext, "");
|
||||||
const db = await this.db;
|
|
||||||
await new Promise((resolve, reject) => {
|
|
||||||
const trans = db.transaction(STORE, "readwrite");
|
|
||||||
trans.onerror = reject;
|
|
||||||
trans.oncomplete = resolve;
|
|
||||||
const store = trans.objectStore(STORE);
|
|
||||||
for (const {size, icon} of urls) {
|
|
||||||
store.put(icon, `${ext}-${size}`);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
this.emit("cached", ext);
|
this.emit("cached", ext);
|
||||||
}
|
}
|
||||||
}();
|
}();
|
||||||
|
34
lib/imex.ts
@ -81,6 +81,14 @@ function importMeta4(data: string) {
|
|||||||
if (mask) {
|
if (mask) {
|
||||||
item.mask = mask;
|
item.mask = mask;
|
||||||
}
|
}
|
||||||
|
const description = file.querySelector("description");
|
||||||
|
if (description && description.textContent) {
|
||||||
|
item.description = description.textContent.trim();
|
||||||
|
}
|
||||||
|
const title = file.getElementsByTagNameNS(NS_DTA, "title");
|
||||||
|
if (title && title[0] && title[0].textContent) {
|
||||||
|
item.title = title[0].textContent;
|
||||||
|
}
|
||||||
items.push(item);
|
items.push(item);
|
||||||
}
|
}
|
||||||
catch (ex) {
|
catch (ex) {
|
||||||
@ -94,9 +102,9 @@ function parseKV(current: BaseItem, line: string) {
|
|||||||
const [k, v] = line.split("=", 2);
|
const [k, v] = line.split("=", 2);
|
||||||
switch (k.toLocaleLowerCase().trim()) {
|
switch (k.toLocaleLowerCase().trim()) {
|
||||||
case "referer": {
|
case "referer": {
|
||||||
const rurls = getTextLinks(v);
|
const refererUrls = getTextLinks(v);
|
||||||
if (rurls && rurls.length) {
|
if (refererUrls && refererUrls.length) {
|
||||||
current.referrer = rurls.pop();
|
current.referrer = refererUrls.pop();
|
||||||
current.usableReferrer = decodeURIComponent(current.referrer || "");
|
current.usableReferrer = decodeURIComponent(current.referrer || "");
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -108,7 +116,7 @@ export function importText(data: string) {
|
|||||||
if (data.includes(NS_METALINK_RFC5854)) {
|
if (data.includes(NS_METALINK_RFC5854)) {
|
||||||
return importMeta4(data);
|
return importMeta4(data);
|
||||||
}
|
}
|
||||||
const splitter = /(.+)\n|(.+)$/g;
|
const splitter = /((?:.|\r)+)\n|(.+)$/g;
|
||||||
const spacer = /^\s+/;
|
const spacer = /^\s+/;
|
||||||
let match;
|
let match;
|
||||||
let current: BaseItem | undefined = undefined;
|
let current: BaseItem | undefined = undefined;
|
||||||
@ -197,15 +205,15 @@ class MetalinkExporter {
|
|||||||
const document = window.document.implementation.
|
const document = window.document.implementation.
|
||||||
createDocument(NS_METALINK_RFC5854, "metalink", null);
|
createDocument(NS_METALINK_RFC5854, "metalink", null);
|
||||||
const root = document.documentElement;
|
const root = document.documentElement;
|
||||||
root.setAttributeNS(NS_DTA, "generator", "DownThemAll!");
|
root.setAttributeNS(NS_DTA, "generator", "TraitorousDownloading!");
|
||||||
root.appendChild(document.createComment(
|
root.appendChild(document.createComment(
|
||||||
"metalink as exported by DownThemAll!",
|
"metalink as exported by TraitorousDownloading!",
|
||||||
));
|
));
|
||||||
|
|
||||||
for (const item of items) {
|
for (const item of items) {
|
||||||
const aitem = item as any;
|
const anyItem = item as any;
|
||||||
const f = document.createElementNS(NS_METALINK_RFC5854, "file");
|
const f = document.createElementNS(NS_METALINK_RFC5854, "file");
|
||||||
f.setAttribute("name", aitem.currentName);
|
f.setAttribute("name", anyItem.currentName);
|
||||||
if (item.batch) {
|
if (item.batch) {
|
||||||
f.setAttributeNS(NS_DTA, "num", item.batch.toString());
|
f.setAttributeNS(NS_DTA, "num", item.batch.toString());
|
||||||
}
|
}
|
||||||
@ -225,13 +233,19 @@ class MetalinkExporter {
|
|||||||
f.appendChild(n);
|
f.appendChild(n);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (item.title) {
|
||||||
|
const n = document.createElementNS(NS_DTA, "title");
|
||||||
|
n.textContent = item.title;
|
||||||
|
f.appendChild(n);
|
||||||
|
}
|
||||||
|
|
||||||
const u = document.createElementNS(NS_METALINK_RFC5854, "url");
|
const u = document.createElementNS(NS_METALINK_RFC5854, "url");
|
||||||
u.textContent = item.url;
|
u.textContent = item.url;
|
||||||
f.appendChild(u);
|
f.appendChild(u);
|
||||||
|
|
||||||
if (aitem.totalSize > 0) {
|
if (anyItem.totalSize > 0) {
|
||||||
const s = document.createElementNS(NS_METALINK_RFC5854, "size");
|
const s = document.createElementNS(NS_METALINK_RFC5854, "size");
|
||||||
s.textContent = aitem.totalSize.toString();
|
s.textContent = anyItem.totalSize.toString();
|
||||||
f.appendChild(s);
|
f.appendChild(s);
|
||||||
}
|
}
|
||||||
root.appendChild(f);
|
root.appendChild(f);
|
||||||
|
@ -32,7 +32,8 @@ const OPTIONPROPS = Object.freeze([
|
|||||||
"startDate",
|
"startDate",
|
||||||
"private",
|
"private",
|
||||||
"postData",
|
"postData",
|
||||||
"paused"
|
"paused",
|
||||||
|
"server", "cookies",
|
||||||
]);
|
]);
|
||||||
|
|
||||||
function maybeAssign(options: any, what: any) {
|
function maybeAssign(options: any, what: any) {
|
||||||
|
@ -191,6 +191,7 @@ export class BaseDownload {
|
|||||||
rv.destPath = dest.path;
|
rv.destPath = dest.path;
|
||||||
rv.destFull = dest.full;
|
rv.destFull = dest.full;
|
||||||
rv.currentName = this.browserName || rv.destName || rv.finalName;
|
rv.currentName = this.browserName || rv.destName || rv.finalName;
|
||||||
|
rv.currentFull = `${dest.path}/${rv.currentName}`;
|
||||||
rv.error = this.error;
|
rv.error = this.error;
|
||||||
rv.ext = this.renamer.p_ext;
|
rv.ext = this.renamer.p_ext;
|
||||||
rv.retries = this.retries;
|
rv.retries = this.retries;
|
||||||
|
@ -16,13 +16,14 @@ import {
|
|||||||
DONE,
|
DONE,
|
||||||
FORCABLE,
|
FORCABLE,
|
||||||
MISSING,
|
MISSING,
|
||||||
PAUSABLE,
|
PAUSEABLE,
|
||||||
PAUSED,
|
PAUSED,
|
||||||
QUEUED,
|
QUEUED,
|
||||||
RUNNING,
|
RUNNING,
|
||||||
RETRYING
|
RETRYING
|
||||||
} from "./state";
|
} from "./state";
|
||||||
import { Preroller } from "./preroller";
|
// eslint-disable-next-line no-unused-vars
|
||||||
|
import { Preroller, PrerollResults } from "./preroller";
|
||||||
|
|
||||||
function isRecoverable(error: string) {
|
function isRecoverable(error: string) {
|
||||||
switch (error) {
|
switch (error) {
|
||||||
@ -130,11 +131,13 @@ export class Download extends BaseDownload {
|
|||||||
}
|
}
|
||||||
const options: DownloadOptions = {
|
const options: DownloadOptions = {
|
||||||
conflictAction: await Prefs.get("conflict-action"),
|
conflictAction: await Prefs.get("conflict-action"),
|
||||||
filename: this.dest.full,
|
|
||||||
saveAs: false,
|
saveAs: false,
|
||||||
url: this.url,
|
url: this.url,
|
||||||
headers: [],
|
headers: [],
|
||||||
};
|
};
|
||||||
|
if (!CHROME) {
|
||||||
|
options.filename = this.dest.full;
|
||||||
|
}
|
||||||
if (!CHROME && this.private) {
|
if (!CHROME && this.private) {
|
||||||
options.incognito = true;
|
options.incognito = true;
|
||||||
}
|
}
|
||||||
@ -194,15 +197,7 @@ export class Download extends BaseDownload {
|
|||||||
if (!res) {
|
if (!res) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (res.mime) {
|
this.adoptPrerollResults(res);
|
||||||
this.mime = res.mime;
|
|
||||||
}
|
|
||||||
if (res.name) {
|
|
||||||
this.serverName = res.name;
|
|
||||||
}
|
|
||||||
if (res.error) {
|
|
||||||
this.cancelAccordingToError(res.error);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
catch (ex) {
|
catch (ex) {
|
||||||
console.error("Failed to preroll", this, ex.toString(), ex.stack, ex);
|
console.error("Failed to preroll", this, ex.toString(), ex.stack, ex);
|
||||||
@ -215,6 +210,18 @@ export class Download extends BaseDownload {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
adoptPrerollResults(res: PrerollResults) {
|
||||||
|
if (res.mime) {
|
||||||
|
this.mime = res.mime;
|
||||||
|
}
|
||||||
|
if (res.name) {
|
||||||
|
this.serverName = res.name;
|
||||||
|
}
|
||||||
|
if (res.error) {
|
||||||
|
this.cancelAccordingToError(res.error);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
resume(forced = false) {
|
resume(forced = false) {
|
||||||
if (!(FORCABLE & this.state)) {
|
if (!(FORCABLE & this.state)) {
|
||||||
return;
|
return;
|
||||||
@ -228,7 +235,7 @@ export class Download extends BaseDownload {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async pause(retry?: boolean) {
|
async pause(retry?: boolean) {
|
||||||
if (!(PAUSABLE & this.state)) {
|
if (!(PAUSEABLE & this.state)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -270,7 +277,7 @@ export class Download extends BaseDownload {
|
|||||||
await downloads.cancel(id);
|
await downloads.cancel(id);
|
||||||
}
|
}
|
||||||
catch (ex) {
|
catch (ex) {
|
||||||
// ingored
|
// ignored
|
||||||
}
|
}
|
||||||
await new Promise(r => setTimeout(r, 1000));
|
await new Promise(r => setTimeout(r, 1000));
|
||||||
try {
|
try {
|
||||||
@ -278,7 +285,7 @@ export class Download extends BaseDownload {
|
|||||||
}
|
}
|
||||||
catch (ex) {
|
catch (ex) {
|
||||||
console.error(id, ex.toString(), ex);
|
console.error(id, ex.toString(), ex);
|
||||||
// ingored
|
// ignored
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -391,4 +398,27 @@ export class Download extends BaseDownload {
|
|||||||
this.setMissing();
|
this.setMissing();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
updateFromSuggestion(state: any) {
|
||||||
|
const res: PrerollResults = {};
|
||||||
|
if (state.mime) {
|
||||||
|
res.mime = state.mime;
|
||||||
|
}
|
||||||
|
if (state.filename) {
|
||||||
|
res.name = state.filename;
|
||||||
|
}
|
||||||
|
if (state.finalUrl) {
|
||||||
|
res.finalURL = state.finalUrl;
|
||||||
|
const detected = Preroller.maybeFindNameFromSearchParams(this, res);
|
||||||
|
if (detected) {
|
||||||
|
res.name = detected;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
this.adoptPrerollResults(res);
|
||||||
|
}
|
||||||
|
finally {
|
||||||
|
this.markDirty();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -16,7 +16,8 @@ import { Download } from "./download";
|
|||||||
import { ManagerPort } from "./port";
|
import { ManagerPort } from "./port";
|
||||||
import { Scheduler } from "./scheduler";
|
import { Scheduler } from "./scheduler";
|
||||||
import { Limits } from "./limits";
|
import { Limits } from "./limits";
|
||||||
import { downloads, runtime, webRequest, CHROME } from "../browser";
|
import { downloads, runtime, webRequest, CHROME, OPERA } from "../browser";
|
||||||
|
import { browser } from "webextension-polyfill-ts";
|
||||||
|
|
||||||
const US = runtime.getURL("");
|
const US = runtime.getURL("");
|
||||||
|
|
||||||
@ -61,6 +62,9 @@ export class Manager extends EventEmitter {
|
|||||||
private deadlineTimer: number;
|
private deadlineTimer: number;
|
||||||
|
|
||||||
constructor() {
|
constructor() {
|
||||||
|
if (!document.location.href.includes("background")) {
|
||||||
|
throw new Error("Not on background");
|
||||||
|
}
|
||||||
super();
|
super();
|
||||||
this.active = true;
|
this.active = true;
|
||||||
this.shouldReload = false;
|
this.shouldReload = false;
|
||||||
@ -82,13 +86,18 @@ export class Manager extends EventEmitter {
|
|||||||
|
|
||||||
downloads.onChanged.addListener(this.onChanged.bind(this));
|
downloads.onChanged.addListener(this.onChanged.bind(this));
|
||||||
downloads.onErased.addListener(this.onErased.bind(this));
|
downloads.onErased.addListener(this.onErased.bind(this));
|
||||||
|
if (CHROME && downloads.onDeterminingFilename) {
|
||||||
|
downloads.onDeterminingFilename.addListener(
|
||||||
|
this.onDeterminingFilename.bind(this));
|
||||||
|
}
|
||||||
|
|
||||||
Bus.onPort("manager", (port: Port) => {
|
Bus.onPort("manager", (port: Port) => {
|
||||||
const mport = new ManagerPort(this, port);
|
const managerPort = new ManagerPort(this, port);
|
||||||
port.on("disconnect", () => {
|
port.on("disconnect", () => {
|
||||||
this.ports.delete(mport);
|
this.ports.delete(managerPort);
|
||||||
});
|
});
|
||||||
this.ports.add(mport);
|
this.ports.add(managerPort);
|
||||||
|
return true;
|
||||||
});
|
});
|
||||||
Limits.on("changed", () => {
|
Limits.on("changed", () => {
|
||||||
this.resetScheduler();
|
this.resetScheduler();
|
||||||
@ -118,7 +127,7 @@ export class Manager extends EventEmitter {
|
|||||||
// Do not wait for the scheduler
|
// Do not wait for the scheduler
|
||||||
this.resetScheduler();
|
this.resetScheduler();
|
||||||
|
|
||||||
this.emit("inited");
|
this.emit("initialized");
|
||||||
setTimeout(() => this.checkMissing(), MISSING_TIMEOUT);
|
setTimeout(() => this.checkMissing(), MISSING_TIMEOUT);
|
||||||
runtime.onUpdateAvailable.addListener(() => {
|
runtime.onUpdateAvailable.addListener(() => {
|
||||||
if (this.running.size) {
|
if (this.running.size) {
|
||||||
@ -157,6 +166,20 @@ export class Manager extends EventEmitter {
|
|||||||
this.manIds.delete(downloadId);
|
this.manIds.delete(downloadId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
onDeterminingFilename(state: any, suggest: Function) {
|
||||||
|
const download = this.manIds.get(state.id);
|
||||||
|
if (!download) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
download.updateFromSuggestion(state);
|
||||||
|
}
|
||||||
|
finally {
|
||||||
|
const suggestion = {filename: download.dest.full};
|
||||||
|
suggest(suggestion);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
async resetScheduler() {
|
async resetScheduler() {
|
||||||
this.scheduler = null;
|
this.scheduler = null;
|
||||||
await this.startNext();
|
await this.startNext();
|
||||||
@ -218,7 +241,7 @@ export class Manager extends EventEmitter {
|
|||||||
if (this.notifiedFinished || this.running.size || this.retrying.size) {
|
if (this.notifiedFinished || this.running.size || this.retrying.size) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (SOUNDS.value) {
|
if (SOUNDS.value && !OPERA) {
|
||||||
const audio = new Audio(runtime.getURL("/style/done.opus"));
|
const audio = new Audio(runtime.getURL("/style/done.opus"));
|
||||||
audio.addEventListener("canplaythrough", () => audio.play());
|
audio.addEventListener("canplaythrough", () => audio.play());
|
||||||
audio.addEventListener("ended", () => document.body.removeChild(audio));
|
audio.addEventListener("ended", () => document.body.removeChild(audio));
|
||||||
@ -239,6 +262,61 @@ export class Manager extends EventEmitter {
|
|||||||
this.manIds.delete(id);
|
this.manIds.delete(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async prepareItems(items: any[]) {
|
||||||
|
var links = new Array();
|
||||||
|
for (var item of items) {
|
||||||
|
var cookiesToSend = Array();
|
||||||
|
var cs = await browser.cookies.getAll({
|
||||||
|
url: item.url,
|
||||||
|
firstPartyDomain: null,
|
||||||
|
});
|
||||||
|
|
||||||
|
if (item.cookies) {
|
||||||
|
for (var c of cs){
|
||||||
|
cookiesToSend.push({
|
||||||
|
name: c.name,
|
||||||
|
value: c.value,
|
||||||
|
domain: c.domain,
|
||||||
|
// expires: new Date(c.expirationDate * 1000) ?? null,
|
||||||
|
path: c.path,
|
||||||
|
secure: c.secure,
|
||||||
|
httponly: c.httpOnly,
|
||||||
|
// samesite: c.sameSite,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var status = item.paused ? "Paused":"Queue";
|
||||||
|
|
||||||
|
links.push({
|
||||||
|
description: item.description,
|
||||||
|
filename: item.fileName,
|
||||||
|
mask: item.mask,
|
||||||
|
status: status,
|
||||||
|
postData: item.postData,
|
||||||
|
subdir: item.subfolder,
|
||||||
|
title: item.title,
|
||||||
|
url: item.usable,
|
||||||
|
referrer: item.usableReferrer,
|
||||||
|
cookies: cookiesToSend,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return links;
|
||||||
|
}
|
||||||
|
|
||||||
|
addNewDownloads(items: any[]) {
|
||||||
|
if (!items || !items.length) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
this.prepareItems(items).then(links => {
|
||||||
|
var xhr = new XMLHttpRequest();
|
||||||
|
xhr.open("POST", items[0].server);
|
||||||
|
xhr.setRequestHeader("Content-Type", "application/javascript");
|
||||||
|
xhr.send(JSON.stringify(links));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
addNewDownloads(items: any[]) {
|
addNewDownloads(items: any[]) {
|
||||||
if (!items || !items.length) {
|
if (!items || !items.length) {
|
||||||
return;
|
return;
|
||||||
@ -261,6 +339,7 @@ export class Manager extends EventEmitter {
|
|||||||
this.save(items);
|
this.save(items);
|
||||||
this.startNext();
|
this.startNext();
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
setDirty(item: Download) {
|
setDirty(item: Download) {
|
||||||
this.dirty.add(item);
|
this.dirty.add(item);
|
||||||
@ -336,8 +415,8 @@ export class Manager extends EventEmitter {
|
|||||||
this.startNext().catch(console.error);
|
this.startNext().catch(console.error);
|
||||||
}
|
}
|
||||||
else if (newState === RUNNING) {
|
else if (newState === RUNNING) {
|
||||||
// Usually we already added it. Buit if a user uses the built-in
|
// Usually we already added it. But if a user uses the built-in
|
||||||
// download manager to resart
|
// download manager to restart
|
||||||
// a download, we have not, so make sure it is added either way
|
// a download, we have not, so make sure it is added either way
|
||||||
this.running.add(download);
|
this.running.add(download);
|
||||||
}
|
}
|
||||||
@ -395,17 +474,18 @@ export class Manager extends EventEmitter {
|
|||||||
sorted(sids: number[]) {
|
sorted(sids: number[]) {
|
||||||
try {
|
try {
|
||||||
// Construct new items
|
// Construct new items
|
||||||
const csids = new Map(this.sids);
|
const currentSids = new Map(this.sids);
|
||||||
let items = mapFilterInSitu(sids, sid => {
|
let items = mapFilterInSitu(sids, sid => {
|
||||||
const item = csids.get(sid);
|
const item = currentSids.get(sid);
|
||||||
if (!item) {
|
if (!item) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
csids.delete(sid);
|
currentSids.delete(sid);
|
||||||
return item;
|
return item;
|
||||||
}, e => !!e);
|
}, e => !!e);
|
||||||
if (csids.size) {
|
if (currentSids.size) {
|
||||||
items = items.concat(sort(Array.from(csids.values()), i => i.position));
|
items = items.concat(
|
||||||
|
sort(Array.from(currentSids.values()), i => i.position));
|
||||||
}
|
}
|
||||||
this.items = items;
|
this.items = items;
|
||||||
this.setPositions();
|
this.setPositions();
|
||||||
|
@ -9,6 +9,8 @@ import { BaseDownload } from "./basedownload";
|
|||||||
import { Manager } from "./man";
|
import { Manager } from "./man";
|
||||||
// eslint-disable-next-line no-unused-vars
|
// eslint-disable-next-line no-unused-vars
|
||||||
import { Port } from "../bus";
|
import { Port } from "../bus";
|
||||||
|
// eslint-disable-next-line no-unused-vars
|
||||||
|
import { BaseItem } from "../item";
|
||||||
|
|
||||||
type SID = {sid: number};
|
type SID = {sid: number};
|
||||||
type SIDS = {
|
type SIDS = {
|
||||||
@ -42,6 +44,9 @@ export class ManagerPort {
|
|||||||
port.on("prefs", () => {
|
port.on("prefs", () => {
|
||||||
openPrefs();
|
openPrefs();
|
||||||
});
|
});
|
||||||
|
port.on("import", ({items}: {items: BaseItem[]}) => {
|
||||||
|
API.regular(items, []);
|
||||||
|
});
|
||||||
port.on("all", () => this.sendAll());
|
port.on("all", () => this.sendAll());
|
||||||
port.on("removeSids", this.onMsgRemoveSids);
|
port.on("removeSids", this.onMsgRemoveSids);
|
||||||
port.on("showSingle", async () => {
|
port.on("showSingle", async () => {
|
||||||
|
@ -54,6 +54,9 @@ export class Preroller {
|
|||||||
}
|
}
|
||||||
|
|
||||||
get shouldPreroll() {
|
get shouldPreroll() {
|
||||||
|
if (CHROME) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
const {uURL, renamer} = this.download;
|
const {uURL, renamer} = this.download;
|
||||||
const {pathname, search, host} = uURL;
|
const {pathname, search, host} = uURL;
|
||||||
if (PREROLL_NOPE.has(host)) {
|
if (PREROLL_NOPE.has(host)) {
|
||||||
@ -167,39 +170,15 @@ export class Preroller {
|
|||||||
rv.mime = type.essence;
|
rv.mime = type.essence;
|
||||||
}
|
}
|
||||||
|
|
||||||
const {p_ext: ext} = this.download.renamer;
|
|
||||||
const dispHeader = headers.get("content-disposition");
|
const dispHeader = headers.get("content-disposition");
|
||||||
if (dispHeader) {
|
if (dispHeader) {
|
||||||
const file = CDPARSER.parse(dispHeader);
|
const file = CDPARSER.parse(dispHeader);
|
||||||
// Sanitize
|
// Sanitize
|
||||||
rv.name = sanitizePath(file.replace(/[/\\]+/g, "-"));
|
rv.name = sanitizePath(file.replace(/[/\\]+/g, "-"));
|
||||||
}
|
}
|
||||||
else if (!ext || PREROLL_SEARCHEXTS.has(ext.toLocaleLowerCase())) {
|
else {
|
||||||
const {searchParams} = this.download.uURL;
|
const detected = Preroller.maybeFindNameFromSearchParams(
|
||||||
let detected = "";
|
this.download, rv);
|
||||||
for (const [, value] of searchParams) {
|
|
||||||
if (!NAME_TESTER.test(value)) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
const p = parsePath(value);
|
|
||||||
if (!p.base || !p.ext) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
if (!MimeDB.hasExtension(p.ext)) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
if (rv.mime) {
|
|
||||||
const mime = MimeDB.getMime(rv.mime);
|
|
||||||
if (mime && !mime.extensions.has(p.ext.toLowerCase())) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
const sanitized = sanitizePath(p.name);
|
|
||||||
if (sanitized.length <= detected.length) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
detected = sanitized;
|
|
||||||
}
|
|
||||||
if (detected) {
|
if (detected) {
|
||||||
rv.name = detected;
|
rv.name = detected;
|
||||||
}
|
}
|
||||||
@ -231,4 +210,43 @@ export class Preroller {
|
|||||||
|
|
||||||
return rv;
|
return rv;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static maybeFindNameFromSearchParams(
|
||||||
|
download: Download, res: PrerollResults) {
|
||||||
|
const {p_ext: ext} = download.renamer;
|
||||||
|
if (ext && !PREROLL_SEARCHEXTS.has(ext.toLocaleLowerCase())) {
|
||||||
|
return undefined;
|
||||||
|
}
|
||||||
|
return Preroller.findNameFromSearchParams(download.uURL, res.mime);
|
||||||
|
}
|
||||||
|
|
||||||
|
static findNameFromSearchParams(url: URL, mimetype?: string) {
|
||||||
|
const {searchParams} = url;
|
||||||
|
let detected = "";
|
||||||
|
for (const [, value] of searchParams) {
|
||||||
|
if (!NAME_TESTER.test(value)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
const p = parsePath(value);
|
||||||
|
if (!p.base || !p.ext) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (!MimeDB.hasExtension(p.ext)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (mimetype) {
|
||||||
|
const mime = MimeDB.getMime(mimetype);
|
||||||
|
if (mime && !mime.extensions.has(p.ext.toLowerCase())) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
const sanitized = sanitizePath(p.name);
|
||||||
|
if (sanitized.length <= detected.length) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
detected = sanitized;
|
||||||
|
}
|
||||||
|
return detected;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -12,5 +12,5 @@ export const RETRYING = 1 << 7;
|
|||||||
|
|
||||||
export const RESUMABLE = PAUSED | CANCELED | RETRYING;
|
export const RESUMABLE = PAUSED | CANCELED | RETRYING;
|
||||||
export const FORCABLE = PAUSED | QUEUED | CANCELED | RETRYING;
|
export const FORCABLE = PAUSED | QUEUED | CANCELED | RETRYING;
|
||||||
export const PAUSABLE = QUEUED | CANCELED | RUNNING | RETRYING;
|
export const PAUSEABLE = QUEUED | CANCELED | RUNNING | RETRYING;
|
||||||
export const CANCELABLE = QUEUED | RUNNING | PAUSED | DONE | MISSING | RETRYING;
|
export const CANCELABLE = QUEUED | RUNNING | PAUSED | DONE | MISSING | RETRYING;
|
||||||
|
@ -8,7 +8,7 @@ import {EventEmitter} from "./events";
|
|||||||
const DEFAULTS = {
|
const DEFAULTS = {
|
||||||
type: "basic",
|
type: "basic",
|
||||||
iconUrl: extension.getURL("/style/icon64.png"),
|
iconUrl: extension.getURL("/style/icon64.png"),
|
||||||
title: "DownThemAll!",
|
title: "TraitorousDownloading!",
|
||||||
message: "message",
|
message: "message",
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -25,7 +25,7 @@ export class Notification extends EventEmitter {
|
|||||||
super();
|
super();
|
||||||
|
|
||||||
this.generated = !id;
|
this.generated = !id;
|
||||||
id = id || `DownThemAll-notification${++gid}`;
|
id = id || `TraitorousDownloading-notification${++gid}`;
|
||||||
if (typeof options === "string") {
|
if (typeof options === "string") {
|
||||||
options = {message: options};
|
options = {message: options};
|
||||||
}
|
}
|
||||||
|
@ -99,6 +99,5 @@ export class PrefWatcher {
|
|||||||
|
|
||||||
changed(prefs: any, key: string, value: any) {
|
changed(prefs: any, key: string, value: any) {
|
||||||
this.value = value;
|
this.value = value;
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -122,3 +122,8 @@ export const SUBFOLDER = new RecentList("subfolder", [
|
|||||||
"downthemall",
|
"downthemall",
|
||||||
]);
|
]);
|
||||||
SUBFOLDER.init().catch(console.error);
|
SUBFOLDER.init().catch(console.error);
|
||||||
|
|
||||||
|
export const SERVER = new RecentList("server", [
|
||||||
|
"",
|
||||||
|
]);
|
||||||
|
SERVER.init().catch(console.error);
|
||||||
|
@ -9,11 +9,12 @@ import { donate, openPrefs, openUrls } from "./windowutils";
|
|||||||
// eslint-disable-next-line no-unused-vars
|
// eslint-disable-next-line no-unused-vars
|
||||||
import { filters, FAST, Filter } from "./filters";
|
import { filters, FAST, Filter } from "./filters";
|
||||||
import { WindowStateTracker } from "./windowstatetracker";
|
import { WindowStateTracker } from "./windowstatetracker";
|
||||||
import { windows } from "./browser";
|
import { windows, CHROME } from "./browser";
|
||||||
// eslint-disable-next-line no-unused-vars
|
// eslint-disable-next-line no-unused-vars
|
||||||
import { BaseItem } from "./item";
|
import { BaseItem } from "./item";
|
||||||
|
|
||||||
interface BaseMatchedItem extends BaseItem {
|
interface BaseMatchedItem extends BaseItem {
|
||||||
|
sidx?: number;
|
||||||
matched?: string | null;
|
matched?: string | null;
|
||||||
prevMatched?: string | null;
|
prevMatched?: string | null;
|
||||||
}
|
}
|
||||||
@ -29,6 +30,7 @@ function computeSelection(
|
|||||||
onlyFast: boolean): ItemDelta[] {
|
onlyFast: boolean): ItemDelta[] {
|
||||||
let ws = items.map((item, idx: number) => {
|
let ws = items.map((item, idx: number) => {
|
||||||
item.idx = item.idx || idx;
|
item.idx = item.idx || idx;
|
||||||
|
item.sidx = item.sidx || idx;
|
||||||
const {matched = null} = item;
|
const {matched = null} = item;
|
||||||
item.prevMatched = matched;
|
item.prevMatched = matched;
|
||||||
item.matched = null;
|
item.matched = null;
|
||||||
@ -52,7 +54,7 @@ function computeSelection(
|
|||||||
}
|
}
|
||||||
return items.filter(item => item.prevMatched !== item.matched).map(item => {
|
return items.filter(item => item.prevMatched !== item.matched).map(item => {
|
||||||
return {
|
return {
|
||||||
idx: item.idx,
|
idx: item.sidx as number,
|
||||||
matched: item.matched
|
matched: item.matched
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
@ -98,10 +100,16 @@ export async function select(links: BaseItem[], media: BaseItem[]) {
|
|||||||
type: "popup",
|
type: "popup",
|
||||||
});
|
});
|
||||||
const window = await windows.create(windowOptions);
|
const window = await windows.create(windowOptions);
|
||||||
tracker.track(window.id, null);
|
tracker.track(window.id);
|
||||||
try {
|
try {
|
||||||
|
if (!CHROME) {
|
||||||
|
windows.update(window.id, tracker.getOptions({}));
|
||||||
|
}
|
||||||
const port = await Promise.race<Port>([
|
const port = await Promise.race<Port>([
|
||||||
new Promise<Port>(resolve => Bus.oncePort("select", resolve)),
|
new Promise<Port>(resolve => Bus.oncePort("select", port => {
|
||||||
|
resolve(port);
|
||||||
|
return true;
|
||||||
|
})),
|
||||||
timeout<Port>(5 * 1000)]);
|
timeout<Port>(5 * 1000)]);
|
||||||
if (!port.isSelf) {
|
if (!port.isSelf) {
|
||||||
throw Error("Invalid sender connected");
|
throw Error("Invalid sender connected");
|
||||||
|
@ -6,7 +6,7 @@ import { Bus, Port } from "./bus";
|
|||||||
import { WindowStateTracker } from "./windowstatetracker";
|
import { WindowStateTracker } from "./windowstatetracker";
|
||||||
import { Promised, timeout } from "./util";
|
import { Promised, timeout } from "./util";
|
||||||
import { donate } from "./windowutils";
|
import { donate } from "./windowutils";
|
||||||
import { windows } from "./browser";
|
import { windows, CHROME } from "./browser";
|
||||||
// eslint-disable-next-line no-unused-vars
|
// eslint-disable-next-line no-unused-vars
|
||||||
import { BaseItem } from "./item";
|
import { BaseItem } from "./item";
|
||||||
|
|
||||||
@ -21,10 +21,16 @@ export async function single(item: BaseItem | null) {
|
|||||||
type: "popup",
|
type: "popup",
|
||||||
});
|
});
|
||||||
const window = await windows.create(windowOptions);
|
const window = await windows.create(windowOptions);
|
||||||
tracker.track(window.id, null);
|
tracker.track(window.id);
|
||||||
try {
|
try {
|
||||||
|
if (!CHROME) {
|
||||||
|
windows.update(window.id, tracker.getOptions({}));
|
||||||
|
}
|
||||||
const port: Port = await Promise.race<Port>([
|
const port: Port = await Promise.race<Port>([
|
||||||
new Promise<Port>(resolve => Bus.oncePort("single", resolve)),
|
new Promise<Port>(resolve => Bus.oncePort("single", port => {
|
||||||
|
resolve(port);
|
||||||
|
return true;
|
||||||
|
})),
|
||||||
timeout<Port>(5 * 1000)]);
|
timeout<Port>(5 * 1000)]);
|
||||||
if (!port.isSelf) {
|
if (!port.isSelf) {
|
||||||
throw Error("Invalid sender connected");
|
throw Error("Invalid sender connected");
|
||||||
|
@ -3,6 +3,8 @@
|
|||||||
|
|
||||||
import { Prefs } from "./prefs";
|
import { Prefs } from "./prefs";
|
||||||
import { windows } from "./browser";
|
import { windows } from "./browser";
|
||||||
|
// eslint-disable-next-line no-unused-vars
|
||||||
|
import { Port } from "./bus";
|
||||||
|
|
||||||
|
|
||||||
const VALID_WINDOW_STATES = Object.freeze(new Set(["normal", "maximized"]));
|
const VALID_WINDOW_STATES = Object.freeze(new Set(["normal", "maximized"]));
|
||||||
@ -80,6 +82,7 @@ export class WindowStateTracker {
|
|||||||
if (!this.windowId) {
|
if (!this.windowId) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
try {
|
||||||
const window = await windows.get(this.windowId);
|
const window = await windows.get(this.windowId);
|
||||||
if (!VALID_WINDOW_STATES.has(window.state)) {
|
if (!VALID_WINDOW_STATES.has(window.state)) {
|
||||||
return;
|
return;
|
||||||
@ -97,17 +100,30 @@ export class WindowStateTracker {
|
|||||||
}
|
}
|
||||||
await this.save();
|
await this.save();
|
||||||
}
|
}
|
||||||
|
catch {
|
||||||
|
// ignored
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
track(windowId: number, port: any) {
|
track(windowId: number, port?: Port) {
|
||||||
if (port) {
|
if (port) {
|
||||||
port.on("resized", this.update);
|
port.on("resized", this.update);
|
||||||
|
port.on("unload", e => this.finalize(e));
|
||||||
|
port.on("disconnect", this.finalize.bind(this));
|
||||||
}
|
}
|
||||||
this.windowId = windowId;
|
this.windowId = windowId;
|
||||||
}
|
}
|
||||||
|
|
||||||
async finalize() {
|
async finalize(state?: any) {
|
||||||
|
if (state) {
|
||||||
|
this.left = state.left;
|
||||||
|
this.top = state.top;
|
||||||
|
}
|
||||||
await this.update();
|
await this.update();
|
||||||
this.windowId = 0;
|
this.windowId = 0;
|
||||||
|
if (state) {
|
||||||
|
await this.save();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
async save() {
|
async save() {
|
||||||
|
@ -1,11 +1,15 @@
|
|||||||
"use strict";
|
"use strict";
|
||||||
// License: MIT
|
// License: MIT
|
||||||
|
|
||||||
import { windows, tabs, runtime } from "../lib/browser";
|
import { windows, tabs, runtime, CHROME } from "../lib/browser";
|
||||||
import { getManager } from "./manager/man";
|
import { getManager } from "./manager/man";
|
||||||
import DEFAULT_ICONS from "../data/icons.json";
|
import DEFAULT_ICONS from "../data/icons.json";
|
||||||
import { Prefs } from "./prefs";
|
import { Prefs } from "./prefs";
|
||||||
import { _ } from "./i18n";
|
import { _ } from "./i18n";
|
||||||
|
import { WindowStateTracker } from "./windowstatetracker";
|
||||||
|
// eslint-disable-next-line no-unused-vars
|
||||||
|
import { Port, Bus } from "./bus";
|
||||||
|
import { timeout } from "./util";
|
||||||
|
|
||||||
const DONATE_URL = "https://www.downthemall.org/howto/donate/";
|
const DONATE_URL = "https://www.downthemall.org/howto/donate/";
|
||||||
const DONATE_LANG_URLS = Object.freeze(new Map([
|
const DONATE_LANG_URLS = Object.freeze(new Map([
|
||||||
@ -26,7 +30,7 @@ export async function mostRecentBrowser(incognito: boolean): Promise<any> {
|
|||||||
}
|
}
|
||||||
catch {
|
catch {
|
||||||
try {
|
try {
|
||||||
window = await windows.getlastFocused();
|
window = await windows.getLastFocused();
|
||||||
if (window.type !== "normal") {
|
if (window.type !== "normal") {
|
||||||
throw new Error("not a normal window");
|
throw new Error("not a normal window");
|
||||||
}
|
}
|
||||||
@ -114,11 +118,37 @@ export async function openManager(focus = true) {
|
|||||||
await windows.update(tab.windowId, {focused: true});
|
await windows.update(tab.windowId, {focused: true});
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const windowOptions = {
|
|
||||||
|
const tracker = new WindowStateTracker("manager", {
|
||||||
|
minWidth: 700,
|
||||||
|
minHeight: 500,
|
||||||
|
});
|
||||||
|
await tracker.init();
|
||||||
|
const windowOptions = tracker.getOptions({
|
||||||
url,
|
url,
|
||||||
type: "popup",
|
type: "popup",
|
||||||
};
|
});
|
||||||
await windows.create(windowOptions);
|
const window = await windows.create(windowOptions);
|
||||||
|
tracker.track(window.id);
|
||||||
|
try {
|
||||||
|
if (!CHROME) {
|
||||||
|
windows.update(window.id, tracker.getOptions({}));
|
||||||
|
}
|
||||||
|
const port = await Promise.race<Port>([
|
||||||
|
new Promise<Port>(resolve => Bus.oncePort("manager", port => {
|
||||||
|
resolve(port);
|
||||||
|
return true;
|
||||||
|
})),
|
||||||
|
timeout<Port>(5 * 1000)]);
|
||||||
|
if (!port.isSelf) {
|
||||||
|
throw Error("Invalid sender connected");
|
||||||
|
}
|
||||||
|
tracker.track(window.id, port);
|
||||||
|
}
|
||||||
|
catch (ex) {
|
||||||
|
console.error("couldn't track manager", ex);
|
||||||
|
}
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (focus) {
|
if (focus) {
|
||||||
|
@ -1,11 +1,11 @@
|
|||||||
{
|
{
|
||||||
"manifest_version": 2,
|
"manifest_version": 2,
|
||||||
"name": "DownThemAll!",
|
"name": "TraitorousDownloading!",
|
||||||
"version": "4.1.2",
|
"version": "4.2.6",
|
||||||
|
|
||||||
"description": "__MSG_extensionDescription__",
|
"description": "__MSG_extensionDescription__",
|
||||||
"homepage_url": "https://downthemall.org/",
|
"homepage_url": "https://github.com/lordwelch/downthemall",
|
||||||
"author": "Nils Maier",
|
"author": "lordwelch",
|
||||||
|
|
||||||
"default_locale": "en",
|
"default_locale": "en",
|
||||||
|
|
||||||
@ -16,7 +16,6 @@
|
|||||||
"32": "style/icon32.png",
|
"32": "style/icon32.png",
|
||||||
"48": "style/icon48.png",
|
"48": "style/icon48.png",
|
||||||
"64": "style/icon64.png",
|
"64": "style/icon64.png",
|
||||||
"96": "style/icon96.png",
|
|
||||||
"128": "style/icon128.png",
|
"128": "style/icon128.png",
|
||||||
"256": "style/icon256.png"
|
"256": "style/icon256.png"
|
||||||
},
|
},
|
||||||
@ -24,6 +23,7 @@
|
|||||||
"permissions": [
|
"permissions": [
|
||||||
"<all_urls>",
|
"<all_urls>",
|
||||||
"contextMenus",
|
"contextMenus",
|
||||||
|
"cookies",
|
||||||
"downloads",
|
"downloads",
|
||||||
"downloads.open",
|
"downloads.open",
|
||||||
"downloads.shelf",
|
"downloads.shelf",
|
||||||
@ -33,6 +33,7 @@
|
|||||||
"sessions",
|
"sessions",
|
||||||
"storage",
|
"storage",
|
||||||
"tabs",
|
"tabs",
|
||||||
|
"theme",
|
||||||
"webNavigation",
|
"webNavigation",
|
||||||
"webRequest",
|
"webRequest",
|
||||||
"webRequestBlocking"
|
"webRequestBlocking"
|
||||||
@ -53,11 +54,10 @@
|
|||||||
"32": "style/icon32.png",
|
"32": "style/icon32.png",
|
||||||
"48": "style/icon48.png",
|
"48": "style/icon48.png",
|
||||||
"64": "style/icon64.png",
|
"64": "style/icon64.png",
|
||||||
"96": "style/icon96.png",
|
|
||||||
"128": "style/icon128.png",
|
"128": "style/icon128.png",
|
||||||
"256": "style/icon256.png"
|
"256": "style/icon256.png"
|
||||||
},
|
},
|
||||||
"default_title": "DownThemAll!"
|
"default_title": "TraitorousDownloading!"
|
||||||
},
|
},
|
||||||
|
|
||||||
"options_ui": {
|
"options_ui": {
|
||||||
@ -67,7 +67,7 @@
|
|||||||
|
|
||||||
"browser_specific_settings": {
|
"browser_specific_settings": {
|
||||||
"gecko": {
|
"gecko": {
|
||||||
"id": "dtalite@downthemall.org",
|
"id": "downloading@traitorousenterprises.net",
|
||||||
"strict_min_version": "67.0"
|
"strict_min_version": "67.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
31
package.json
@ -1,13 +1,14 @@
|
|||||||
{
|
{
|
||||||
"name": "dtalite",
|
"name": "tdl",
|
||||||
"version": "4.0.0",
|
"version": "4.0.0",
|
||||||
"description": "DownThemAll! lite",
|
"description": "TraitorousDownloading!",
|
||||||
"main": "main.js",
|
"main": "main.js",
|
||||||
"directories": {
|
"directories": {
|
||||||
"lib": "lib"
|
"lib": "lib"
|
||||||
},
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"build": "util/build.py",
|
"build": "util/build.py",
|
||||||
|
"build:cleanup": "rm -rf bundles",
|
||||||
"build:bundles": "webpack",
|
"build:bundles": "webpack",
|
||||||
"build:regexps": "node util/makexregexps.js > data/xregexps.json",
|
"build:regexps": "node util/makexregexps.js > data/xregexps.json",
|
||||||
"stats": "cloc --vcs=git --exclude-lang=Markdown,SVG",
|
"stats": "cloc --vcs=git --exclude-lang=Markdown,SVG",
|
||||||
@ -18,24 +19,26 @@
|
|||||||
"author": "Nils Maier",
|
"author": "Nils Maier",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@types/node": "^12.7.2",
|
"@types/node": "^12.7.8",
|
||||||
"@typescript-eslint/eslint-plugin": "^2.0.0",
|
"@typescript-eslint/eslint-plugin": "^2.3.2",
|
||||||
"@typescript-eslint/parser": "^2.0.0",
|
"@typescript-eslint/parser": "^2.3.2",
|
||||||
"chai": "^4.1.2",
|
"chai": "^4.1.2",
|
||||||
"eslint": "^6.2.2",
|
"eslint": "^6.5.1",
|
||||||
"mocha": "^6.2.0",
|
"mocha": "^6.2.1",
|
||||||
"ts-loader": "^6.0.4",
|
"ts-loader": "^6.2.0",
|
||||||
"ts-node": "^8.3.0",
|
"ts-node": "^8.4.1",
|
||||||
"typescript": "^3.5.3",
|
"typescript": "^3.6.3",
|
||||||
"webpack": "^4.39.3",
|
"webpack": "^4.41.0",
|
||||||
"webpack-cli": "^3.3.7",
|
"webpack-cli": "^3.3.9",
|
||||||
"xregexp": "^4.2.4"
|
"xregexp": "^4.2.4"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@types/psl": "^1.1.0",
|
"@types/psl": "^1.1.0",
|
||||||
"@types/whatwg-mimetype": "^2.1.0",
|
"@types/whatwg-mimetype": "^2.1.0",
|
||||||
"psl": "^1.3.0",
|
"localforage": "^1.9.0",
|
||||||
"webextension-polyfill": "^0.4.0",
|
"psl": "^1.4.0",
|
||||||
|
"webextension-polyfill": "^0.5.0",
|
||||||
|
"webextension-polyfill-ts": "^0.22.0",
|
||||||
"whatwg-mimetype": "^2.3.0"
|
"whatwg-mimetype": "^2.3.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -121,14 +121,26 @@ class Gatherer {
|
|||||||
|
|
||||||
*collectImageInternal(img: HTMLImageElement) {
|
*collectImageInternal(img: HTMLImageElement) {
|
||||||
try {
|
try {
|
||||||
const src = img.currentSrc || img.src;
|
{
|
||||||
|
const {src} = img;
|
||||||
const item = this.makeItem(src, img);
|
const item = this.makeItem(src, img);
|
||||||
if (item) {
|
if (item) {
|
||||||
item.fileName = "";
|
item.fileName = "";
|
||||||
item.description = item.title;
|
item.description = item.title;
|
||||||
yield item;
|
yield item;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
{
|
||||||
|
const {currentSrc} = img;
|
||||||
|
const item = this.makeItem(currentSrc, img);
|
||||||
|
if (item) {
|
||||||
|
item.fileName = "";
|
||||||
|
item.description = item.title;
|
||||||
|
yield item;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
const {srcset} = img;
|
const {srcset} = img;
|
||||||
if (!srcset) {
|
if (!srcset) {
|
||||||
return;
|
return;
|
||||||
@ -146,6 +158,7 @@ class Gatherer {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
catch (ex) {
|
catch (ex) {
|
||||||
console.error("oops image", ex.toString(), ex.stack, ex);
|
console.error("oops image", ex.toString(), ex.stack, ex);
|
||||||
}
|
}
|
||||||
|
Before Width: | Height: | Size: 763 B After Width: | Height: | Size: 747 B |
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 1.6 KiB |
Before Width: | Height: | Size: 725 B After Width: | Height: | Size: 711 B |
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 1.5 KiB |
402
style/common.css
@ -2,11 +2,25 @@
|
|||||||
/* License: gpl-v2 */
|
/* License: gpl-v2 */
|
||||||
|
|
||||||
:root {
|
:root {
|
||||||
|
--general-color: #2a2a2e;
|
||||||
|
--general-bgcolor: rgb(249, 249, 250);
|
||||||
|
--general-border-color: lightgray;
|
||||||
|
--general-input-color: black;
|
||||||
|
--general-input-bgcolor: white;
|
||||||
|
--general-button-color: black;
|
||||||
|
--general-button-bgcolor: rgb(246, 246, 246);
|
||||||
|
--general-button-bgcolor-hover: white;
|
||||||
|
--general-button-shadow: 0px 0px 5px 1px rgba(128, 128, 128, 0.5);
|
||||||
|
--menu-bgcolor: white;
|
||||||
|
--menu-bgcolor-hover: #2283fb;
|
||||||
|
--table-bgcolor: white;
|
||||||
|
--table-head-bgcolor: white;
|
||||||
--toolbar-bg-color: rgb(248, 134, 6);
|
--toolbar-bg-color: rgb(248, 134, 6);
|
||||||
--toolbar-active-border-color: #478de7;
|
--toolbar-active-border-color: #478de7;
|
||||||
--toolbar-hover-border-color: red;
|
--toolbar-hover-border-color: red;
|
||||||
--toolbar-hover-background: rgb(247, 149, 37);
|
--toolbar-hover-background: rgb(247, 149, 37);
|
||||||
--toolbar-border-width: 2px;
|
--toolbar-border-width: 2px;
|
||||||
|
--toolbar-border: 1px solid rgba(255, 255, 255, 0.5);
|
||||||
--add-color: navy;
|
--add-color: navy;
|
||||||
--queue-color: gray;
|
--queue-color: gray;
|
||||||
--pause-color: #ffa318;
|
--pause-color: #ffa318;
|
||||||
@ -20,24 +34,81 @@
|
|||||||
--maskbutton-color: rgb(236, 185, 16);
|
--maskbutton-color: rgb(236, 185, 16);
|
||||||
--missing-color: rgb(0, 82, 204);
|
--missing-color: rgb(0, 82, 204);
|
||||||
--open-color: rgba(236, 185, 16, 0.8);
|
--open-color: rgba(236, 185, 16, 0.8);
|
||||||
|
--status-icon-color: #363636;
|
||||||
|
--status-icon-color-hover: #6e6d6d;
|
||||||
|
--tile-url: url(tile.png);
|
||||||
|
--file-icon-image-color: rgb(17, 107, 163);
|
||||||
|
--popup-bgcolor: #fff;
|
||||||
|
--popup-color: #0c0c0d;
|
||||||
|
--modal-color: black;
|
||||||
|
--modal-bgcolor: white;
|
||||||
|
}
|
||||||
|
|
||||||
|
html.dark {
|
||||||
|
--add-color: lightblue;
|
||||||
|
--error-color: rgb(130, 3, 22);
|
||||||
|
--running-color: #67a041;
|
||||||
|
--finishing-color: #4bb111;
|
||||||
|
--done-color: #006f00;
|
||||||
|
--pause-color: #cf9308;
|
||||||
|
--general-bgcolor: #2a2a2e;
|
||||||
|
--general-border-color: rgb(85, 85, 85);
|
||||||
|
--general-button-bgcolor-hover: black;
|
||||||
|
--general-button-bgcolor: rgb(36, 36, 36);
|
||||||
|
--general-button-color: white;
|
||||||
|
--general-color: rgb(249, 249, 250);
|
||||||
|
--menu-bgcolor: black;
|
||||||
|
--menu-bgcolor-hover: #1a6bce;
|
||||||
|
--table-bgcolor: #1a1a1e;
|
||||||
|
--table-head-bgcolor: #3a3a3e;
|
||||||
|
--toolbar-bg-color: rgb(202, 108, 0);
|
||||||
|
--status-icon-color: #b9b9b9;
|
||||||
|
--status-icon-color-hover: #e2e2e2;
|
||||||
|
--tile-url: url(tile-dark.png?3);
|
||||||
|
--toolbar-border: 1px solid rgba(30, 30, 30, 0.5);
|
||||||
|
--file-icon-image-color: rgb(21, 130, 197);
|
||||||
|
--popup-bgcolor: #4a4a4f;
|
||||||
|
--popup-color: rgb(249, 249, 250);
|
||||||
|
--general-button-shadow: 0px 0px 7px 1px rgba(128, 128, 128, 0.8);
|
||||||
|
--modal-color: white;
|
||||||
|
--modal-bgcolor: #333;
|
||||||
|
scrollbar-color: rgba(249, 249, 250, 0.4) rgba(20, 20, 25, 0.3);
|
||||||
|
}
|
||||||
|
|
||||||
|
html.dark a {
|
||||||
|
color: lightblue;
|
||||||
|
}
|
||||||
|
|
||||||
|
html.dark ::-webkit-scrollbar {
|
||||||
|
background: rgba(20, 20, 25, 0.3);
|
||||||
|
}
|
||||||
|
|
||||||
|
html.dark ::-webkit-scrollbar-thumb {
|
||||||
|
background: rgba(249, 249, 250, 0.4);
|
||||||
|
}
|
||||||
|
|
||||||
|
html.dark ::-webkit-scrollbar-corner {
|
||||||
|
background: #000;
|
||||||
}
|
}
|
||||||
|
|
||||||
html[data-platform="mac"] {
|
html[data-platform="mac"] {
|
||||||
--folder-color: rgb(4, 102, 214);
|
--folder-color: rgb(4, 102, 214);
|
||||||
}
|
}
|
||||||
|
|
||||||
html, body {
|
html,
|
||||||
|
body {
|
||||||
font-size: 10pt !important;
|
font-size: 10pt !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
@font-face {
|
@font-face {
|
||||||
font-family: 'downthemall';
|
font-family: "downthemall";
|
||||||
src: url('downthemall.woff2?75791791') format('woff2');
|
src: url("downthemall.woff2?75791791") format("woff2");
|
||||||
font-weight: normal;
|
font-weight: normal;
|
||||||
font-style: normal;
|
font-style: normal;
|
||||||
}
|
}
|
||||||
|
|
||||||
[class^="icon-"]:before, [class*=" icon-"]:before {
|
[class^="icon-"]:before,
|
||||||
|
[class*=" icon-"]:before {
|
||||||
font-family: "downthemall";
|
font-family: "downthemall";
|
||||||
font-style: normal;
|
font-style: normal;
|
||||||
font-weight: normal;
|
font-weight: normal;
|
||||||
@ -54,72 +125,187 @@ html, body {
|
|||||||
-moz-osx-font-smoothing: grayscale;
|
-moz-osx-font-smoothing: grayscale;
|
||||||
}
|
}
|
||||||
|
|
||||||
.icon-add:before { content: '\e800'; } /* '' */
|
.icon-add:before {
|
||||||
.icon-addsegment:before { content: '\e801'; } /* '' */
|
content: "\e800";
|
||||||
.icon-bottom:before { content: '\e802'; } /* '' */
|
} /* '' */
|
||||||
.icon-picture:before { content: '\e803'; } /* '' */
|
.icon-addsegment:before {
|
||||||
.icon-circle:before { content: '\e804'; } /* '' */
|
content: "\e801";
|
||||||
.icon-delete:before { content: '\e805'; } /* '' */
|
} /* '' */
|
||||||
.icon-done:before { content: '\e806'; } /* '' */
|
.icon-bottom:before {
|
||||||
.icon-down:before { content: '\e807'; } /* '' */
|
content: "\e802";
|
||||||
.icon-download:before { content: '\e808'; } /* '' */
|
} /* '' */
|
||||||
.icon-dupe:before { content: '\e809'; } /* '' */
|
.icon-picture:before {
|
||||||
.icon-error:before { content: '\e80a'; } /* '' */
|
content: "\e803";
|
||||||
.icon-failed:before { content: '\e80b'; } /* '' */
|
} /* '' */
|
||||||
.icon-file:before { content: '\e80c'; } /* '' */
|
.icon-circle:before {
|
||||||
.icon-find:before { content: '\e80d'; } /* '' */
|
content: "\e804";
|
||||||
.icon-folder:before { content: '\e80e'; } /* '' */
|
} /* '' */
|
||||||
.icon-force:before { content: '\e80f'; } /* '' */
|
.icon-delete:before {
|
||||||
.icon-go:before { content: '\e810'; } /* '' */
|
content: "\e805";
|
||||||
.icon-import:before { content: '\e811'; } /* '' */
|
} /* '' */
|
||||||
.icon-info:before { content: '\e812'; } /* '' */
|
.icon-done:before {
|
||||||
.icon-launch:before { content: '\e813'; } /* '' */
|
content: "\e806";
|
||||||
.icon-missing:before { content: '\e814'; } /* '' */
|
} /* '' */
|
||||||
.icon-network-off:before { content: '\e815'; } /* '' */
|
.icon-down:before {
|
||||||
.icon-network-on:before { content: '\e816'; } /* '' */
|
content: "\e807";
|
||||||
.icon-pause:before { content: '\e817'; } /* '' */
|
} /* '' */
|
||||||
.icon-remsegment:before { content: '\e818'; } /* '' */
|
.icon-download:before {
|
||||||
.icon-rename:before { content: '\e819'; } /* '' */
|
content: "\e808";
|
||||||
.icon-save:before { content: '\e81a'; } /* '' */
|
} /* '' */
|
||||||
.icon-settings:before { content: '\e81b'; } /* '' */
|
.icon-dupe:before {
|
||||||
.icon-top:before { content: '\e81c'; } /* '' */
|
content: "\e809";
|
||||||
.icon-unchecked:before { content: '\e81d'; } /* '' */
|
} /* '' */
|
||||||
.icon-unlimited:before { content: '\e81e'; } /* '' */
|
.icon-error:before {
|
||||||
.icon-link:before { content: '\e81f'; } /* '' */
|
content: "\e80a";
|
||||||
.icon-up:before { content: '\e820'; } /* '' */
|
} /* '' */
|
||||||
.icon-privacy:before { content: '\e821'; } /* '' */
|
.icon-failed:before {
|
||||||
.icon-tags:before { content: '\e822'; } /* '' */
|
content: "\e80b";
|
||||||
.icon-attention:before { content: '\e823'; } /* '' */
|
} /* '' */
|
||||||
.icon-notification:before { content: '\e824'; } /* '' */
|
.icon-file:before {
|
||||||
.icon-file-video:before { content: '\e825'; } /* '' */
|
content: "\e80c";
|
||||||
.icon-file-generic:before { content: '\e826'; } /* '' */
|
} /* '' */
|
||||||
.icon-question-dark:before { content: '\e827'; } /* '' */
|
.icon-find:before {
|
||||||
.icon-forward:before { content: '\e828'; } /* '' */
|
content: "\e80d";
|
||||||
.icon-filter:before { content: '\f0b0'; } /* '' */
|
} /* '' */
|
||||||
.icon-donate:before { content: '\f0d6'; } /* '' */
|
.icon-folder:before {
|
||||||
.icon-file-doc:before { content: '\f0f6'; } /* '' */
|
content: "\e80e";
|
||||||
.icon-interface:before { content: '\f108'; } /* '' */
|
} /* '' */
|
||||||
.icon-folder-1:before { content: '\f115'; } /* '' */
|
.icon-force:before {
|
||||||
.icon-sort-asc:before { content: '\f15d'; } /* '' */
|
content: "\e80f";
|
||||||
.icon-sort-desc:before { content: '\f15e'; } /* '' */
|
} /* '' */
|
||||||
.icon-file-pdf:before { content: '\f1c1'; } /* '' */
|
.icon-go:before {
|
||||||
.icon-file-word:before { content: '\f1c2'; } /* '' */
|
content: "\e810";
|
||||||
.icon-file-image:before { content: '\f1c5'; } /* '' */
|
} /* '' */
|
||||||
.icon-file-archive:before { content: '\f1c6'; } /* '' */
|
.icon-import:before {
|
||||||
.icon-file-audio:before { content: '\f1c7'; } /* '' */
|
content: "\e811";
|
||||||
.icon-toggle-off:before { content: '\f204'; } /* '' */
|
} /* '' */
|
||||||
.icon-toggle-on:before { content: '\f205'; } /* '' */
|
.icon-info:before {
|
||||||
.icon-server:before { content: '\f233'; } /* '' */
|
content: "\e812";
|
||||||
.icon-question-light:before { content: '\f29c'; } /* '' */
|
} /* '' */
|
||||||
|
.icon-launch:before {
|
||||||
|
content: "\e813";
|
||||||
|
} /* '' */
|
||||||
|
.icon-missing:before {
|
||||||
|
content: "\e814";
|
||||||
|
} /* '' */
|
||||||
|
.icon-network-off:before {
|
||||||
|
content: "\e815";
|
||||||
|
} /* '' */
|
||||||
|
.icon-network-on:before {
|
||||||
|
content: "\e816";
|
||||||
|
} /* '' */
|
||||||
|
.icon-pause:before {
|
||||||
|
content: "\e817";
|
||||||
|
} /* '' */
|
||||||
|
.icon-remsegment:before {
|
||||||
|
content: "\e818";
|
||||||
|
} /* '' */
|
||||||
|
.icon-rename:before {
|
||||||
|
content: "\e819";
|
||||||
|
} /* '' */
|
||||||
|
.icon-save:before {
|
||||||
|
content: "\e81a";
|
||||||
|
} /* '' */
|
||||||
|
.icon-settings:before {
|
||||||
|
content: "\e81b";
|
||||||
|
} /* '' */
|
||||||
|
.icon-top:before {
|
||||||
|
content: "\e81c";
|
||||||
|
} /* '' */
|
||||||
|
.icon-unchecked:before {
|
||||||
|
content: "\e81d";
|
||||||
|
} /* '' */
|
||||||
|
.icon-unlimited:before {
|
||||||
|
content: "\e81e";
|
||||||
|
} /* '' */
|
||||||
|
.icon-link:before {
|
||||||
|
content: "\e81f";
|
||||||
|
} /* '' */
|
||||||
|
.icon-up:before {
|
||||||
|
content: "\e820";
|
||||||
|
} /* '' */
|
||||||
|
.icon-privacy:before {
|
||||||
|
content: "\e821";
|
||||||
|
} /* '' */
|
||||||
|
.icon-tags:before {
|
||||||
|
content: "\e822";
|
||||||
|
} /* '' */
|
||||||
|
.icon-attention:before {
|
||||||
|
content: "\e823";
|
||||||
|
} /* '' */
|
||||||
|
.icon-notification:before {
|
||||||
|
content: "\e824";
|
||||||
|
} /* '' */
|
||||||
|
.icon-file-video:before {
|
||||||
|
content: "\e825";
|
||||||
|
} /* '' */
|
||||||
|
.icon-file-generic:before {
|
||||||
|
content: "\e826";
|
||||||
|
} /* '' */
|
||||||
|
.icon-question-dark:before {
|
||||||
|
content: "\e827";
|
||||||
|
} /* '' */
|
||||||
|
.icon-forward:before {
|
||||||
|
content: "\e828";
|
||||||
|
} /* '' */
|
||||||
|
.icon-filter:before {
|
||||||
|
content: "\f0b0";
|
||||||
|
} /* '' */
|
||||||
|
.icon-donate:before {
|
||||||
|
content: "\f0d6";
|
||||||
|
} /* '' */
|
||||||
|
.icon-file-doc:before {
|
||||||
|
content: "\f0f6";
|
||||||
|
} /* '' */
|
||||||
|
.icon-interface:before {
|
||||||
|
content: "\f108";
|
||||||
|
} /* '' */
|
||||||
|
.icon-folder-1:before {
|
||||||
|
content: "\f115";
|
||||||
|
} /* '' */
|
||||||
|
.icon-sort-asc:before {
|
||||||
|
content: "\f15d";
|
||||||
|
} /* '' */
|
||||||
|
.icon-sort-desc:before {
|
||||||
|
content: "\f15e";
|
||||||
|
} /* '' */
|
||||||
|
.icon-file-pdf:before {
|
||||||
|
content: "\f1c1";
|
||||||
|
} /* '' */
|
||||||
|
.icon-file-word:before {
|
||||||
|
content: "\f1c2";
|
||||||
|
} /* '' */
|
||||||
|
.icon-file-image:before {
|
||||||
|
content: "\f1c5";
|
||||||
|
} /* '' */
|
||||||
|
.icon-file-archive:before {
|
||||||
|
content: "\f1c6";
|
||||||
|
} /* '' */
|
||||||
|
.icon-file-audio:before {
|
||||||
|
content: "\f1c7";
|
||||||
|
} /* '' */
|
||||||
|
.icon-toggle-off:before {
|
||||||
|
content: "\f204";
|
||||||
|
} /* '' */
|
||||||
|
.icon-toggle-on:before {
|
||||||
|
content: "\f205";
|
||||||
|
} /* '' */
|
||||||
|
.icon-server:before {
|
||||||
|
content: "\f233";
|
||||||
|
} /* '' */
|
||||||
|
.icon-question-light:before {
|
||||||
|
content: "\f29c";
|
||||||
|
} /* '' */
|
||||||
|
|
||||||
@media (min-resolution: 144dpi) {
|
@media (min-resolution: 144dpi) {
|
||||||
[class^="icon-file-"]:before, [class*=" icon-file-"]:before {
|
[class^="icon-file-"]:before,
|
||||||
|
[class*=" icon-file-"]:before {
|
||||||
font-weight: bold !important;
|
font-weight: bold !important;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.icon-file-image {
|
.icon-file-image {
|
||||||
color: rgb(17, 107, 163);
|
color: var(--file-icon-image-color);
|
||||||
}
|
}
|
||||||
|
|
||||||
.icon-file-pdf,
|
.icon-file-pdf,
|
||||||
@ -140,18 +326,29 @@ html, body {
|
|||||||
color: rgb(202, 81, 198);
|
color: rgb(202, 81, 198);
|
||||||
}
|
}
|
||||||
|
|
||||||
body, html {
|
body,
|
||||||
background: #F6F6F8;
|
html {
|
||||||
color: #0C0C0D;
|
|
||||||
font: message-box;
|
font: message-box;
|
||||||
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Ubuntu', 'Helvetica Neue', sans-serif;
|
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Ubuntu",
|
||||||
|
"Helvetica Neue", sans-serif;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
|
color: var(--general-color);
|
||||||
|
background: var(--general-bgcolor);
|
||||||
}
|
}
|
||||||
|
|
||||||
h1, h2, h3, h4 {
|
html#popup,
|
||||||
|
html#popup > body {
|
||||||
|
color: var(--popup-color);
|
||||||
|
background: var(--popup-bgcolor);
|
||||||
|
}
|
||||||
|
|
||||||
|
h1,
|
||||||
|
h2,
|
||||||
|
h3,
|
||||||
|
h4 {
|
||||||
font: caption;
|
font: caption;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
}
|
}
|
||||||
@ -191,7 +388,11 @@ section {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.virtualtable-column:active {
|
.virtualtable-column:active {
|
||||||
background-image: linear-gradient(to top, rgba(0,0,0,0.03), rgba(128,128,128,0.1));
|
background-image: linear-gradient(
|
||||||
|
to top,
|
||||||
|
rgba(0, 0, 0, 0.03),
|
||||||
|
rgba(128, 128, 128, 0.1)
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
th.virtualtable {
|
th.virtualtable {
|
||||||
@ -218,7 +419,11 @@ td.virtualtable {
|
|||||||
font-size: 12px;
|
font-size: 12px;
|
||||||
align-items: stretch;
|
align-items: stretch;
|
||||||
justify-items: center;
|
justify-items: center;
|
||||||
background: linear-gradient(to bottom, rgba(128,128,128,0.1) 0%,rgba(0,0,0,0) 100%);
|
background: linear-gradient(
|
||||||
|
to bottom,
|
||||||
|
rgba(128, 128, 128, 0.1) 0%,
|
||||||
|
rgba(0, 0, 0, 0) 100%
|
||||||
|
);
|
||||||
border-top: 1px solid rgba(128, 128, 128, 0.6);
|
border-top: 1px solid rgba(128, 128, 128, 0.6);
|
||||||
display: flex;
|
display: flex;
|
||||||
margin-bottom: 1ex;
|
margin-bottom: 1ex;
|
||||||
@ -251,10 +456,10 @@ td.virtualtable {
|
|||||||
|
|
||||||
#statusPrefs {
|
#statusPrefs {
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
color: #363636;
|
color: var(--status-icon-color);
|
||||||
}
|
}
|
||||||
#statusPrefs:hover {
|
#statusPrefs:hover {
|
||||||
color: #6e6d6d;
|
color: var(--status-icon-color-hover);
|
||||||
}
|
}
|
||||||
|
|
||||||
.dropdown {
|
.dropdown {
|
||||||
@ -279,6 +484,7 @@ td.virtualtable {
|
|||||||
-moz-appearance: none;
|
-moz-appearance: none;
|
||||||
-webkit-appearance: none;
|
-webkit-appearance: none;
|
||||||
appearance: none;
|
appearance: none;
|
||||||
|
color: black;
|
||||||
background: white;
|
background: white;
|
||||||
border: none;
|
border: none;
|
||||||
bottom: 2px;
|
bottom: 2px;
|
||||||
@ -301,7 +507,6 @@ td.virtualtable {
|
|||||||
padding-bottom: 1ex;
|
padding-bottom: 1ex;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@supports (not (-moz-appearance: none)) {
|
@supports (not (-moz-appearance: none)) {
|
||||||
.dropdown select {
|
.dropdown select {
|
||||||
background: white;
|
background: white;
|
||||||
@ -371,3 +576,54 @@ td.virtualtable {
|
|||||||
#maskButton {
|
#maskButton {
|
||||||
color: var(--maskbutton-color);
|
color: var(--maskbutton-color);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
table.virtualtable,
|
||||||
|
.virtualtable-body {
|
||||||
|
color: var(--general-color);
|
||||||
|
background: var(--table-bgcolor);
|
||||||
|
}
|
||||||
|
.virtualtable-head,
|
||||||
|
.virtualtable-head > table {
|
||||||
|
background: var(--table-head-bgcolor) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.virtualtable-column {
|
||||||
|
border-right: 1px solid var(--general-border-color);
|
||||||
|
}
|
||||||
|
|
||||||
|
.virtualtable-cell {
|
||||||
|
border-right: 1px dotted var(--general-border-color);
|
||||||
|
}
|
||||||
|
|
||||||
|
.virtualtable-head,
|
||||||
|
.virtualtable-body {
|
||||||
|
border-bottom: 1px solid var(--general-border-color);
|
||||||
|
}
|
||||||
|
|
||||||
|
ul.context-menu,
|
||||||
|
ul.context-menu ul {
|
||||||
|
color: var(--general-color);
|
||||||
|
background: var(--menu-bgcolor);
|
||||||
|
}
|
||||||
|
|
||||||
|
.context-menu-item:hover:not(.context-menu-seperator),
|
||||||
|
.context-menu-item:hover:not(.context-menu-seperator) > * {
|
||||||
|
background: var(--menu-bgcolor-hover);
|
||||||
|
}
|
||||||
|
|
||||||
|
html.dark .context-menu-item.disabled,
|
||||||
|
html.dark .context-menu-item.disabled > * {
|
||||||
|
opacity: 0.7;
|
||||||
|
}
|
||||||
|
|
||||||
|
input {
|
||||||
|
color: var(--general-input-color);
|
||||||
|
background: var(--general-input-bgcolor);
|
||||||
|
border: inherit;
|
||||||
|
padding: 2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.modal-dialog {
|
||||||
|
color: var(--modal-color);
|
||||||
|
background: var(--modal-bgcolor);
|
||||||
|
}
|
||||||
|
BIN
style/icon.ico
Before Width: | Height: | Size: 164 KiB After Width: | Height: | Size: 130 KiB |
Before Width: | Height: | Size: 8.6 KiB After Width: | Height: | Size: 13 KiB |
BIN
style/icon16.png
Before Width: | Height: | Size: 673 B After Width: | Height: | Size: 810 B |
BIN
style/icon24.png
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.3 KiB |
Before Width: | Height: | Size: 20 KiB After Width: | Height: | Size: 34 KiB |
BIN
style/icon32.png
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 1.9 KiB |
BIN
style/icon48.png
Before Width: | Height: | Size: 2.8 KiB After Width: | Height: | Size: 3.2 KiB |
BIN
style/icon64.png
Before Width: | Height: | Size: 3.8 KiB After Width: | Height: | Size: 5.6 KiB |
BIN
style/icon96.png
Before Width: | Height: | Size: 6.3 KiB |
@ -16,7 +16,7 @@ body > * {
|
|||||||
#toolbar {
|
#toolbar {
|
||||||
display: flex;
|
display: flex;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
background: var(--toolbar-bg-color) url(tile.png) repeat-x;
|
background: var(--toolbar-bg-color) var(--tile-url) repeat-x;
|
||||||
}
|
}
|
||||||
|
|
||||||
#toolbar .spacer {
|
#toolbar .spacer {
|
||||||
@ -42,9 +42,9 @@ body > * {
|
|||||||
justify-content: center;
|
justify-content: center;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
box-shadow: 0px 0px 5px 1px rgba(128,128,128,0.5);
|
box-shadow: var(--general-button-shadow);
|
||||||
background: rgb(246,246,246);
|
background: var(--general-button-bgcolor);
|
||||||
color: black;
|
color: var(--general-button-color);
|
||||||
transition: box-shadow 0.5s, background 1s;
|
transition: box-shadow 0.5s, background 1s;
|
||||||
font-size: 24px;
|
font-size: 24px;
|
||||||
line-height: 24px;
|
line-height: 24px;
|
||||||
@ -60,7 +60,7 @@ body > * {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#toolbar > .button:hover:not(.disabled) {
|
#toolbar > .button:hover:not(.disabled) {
|
||||||
background: white;
|
background: var(--general-button-bgcolor-hover);
|
||||||
box-shadow: 0px 0px 7px 2px rgba(70,70,70,0.75);
|
box-shadow: 0px 0px 7px 2px rgba(70,70,70,0.75);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -88,14 +88,14 @@ body > * {
|
|||||||
flex: 1 1 auto;
|
flex: 1 1 auto;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
display: grid;
|
display: grid;
|
||||||
background: white;
|
background: var(--general-bgcolor);
|
||||||
}
|
}
|
||||||
|
|
||||||
#loading {
|
#loading {
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
background: rgba(255,255,255,0.9);
|
background: var(--general-button-bgcolor);
|
||||||
font-weight: bolder;
|
font-weight: bolder;
|
||||||
font-size: 200%;
|
font-size: 200%;
|
||||||
z-index: 10;
|
z-index: 10;
|
||||||
@ -311,7 +311,7 @@ body > * {
|
|||||||
color: crimson;
|
color: crimson;
|
||||||
}
|
}
|
||||||
#statusNetwork.icon-network-on {
|
#statusNetwork.icon-network-on {
|
||||||
color: navy;
|
color: var(--add-color);
|
||||||
}
|
}
|
||||||
|
|
||||||
#statusFilter {
|
#statusFilter {
|
||||||
@ -404,7 +404,7 @@ body > * {
|
|||||||
font-size: 10pt !important;
|
font-size: 10pt !important;
|
||||||
}
|
}
|
||||||
#nagging {
|
#nagging {
|
||||||
border-top: 1px solid lightgray;
|
border-top: 1px solid var(--general-border-color);
|
||||||
display: grid;
|
display: grid;
|
||||||
grid-template-columns: 1fr auto auto auto;
|
grid-template-columns: 1fr auto auto auto;
|
||||||
align-content: center;
|
align-content: center;
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
/* License: gpl-v2 */
|
/* License: gpl-v2 */
|
||||||
@import 'common.css';
|
@import "common.css";
|
||||||
|
|
||||||
html, body {
|
html,
|
||||||
background: transparent !important;
|
body {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
}
|
}
|
||||||
@ -19,9 +19,10 @@ article {
|
|||||||
|
|
||||||
#tabs {
|
#tabs {
|
||||||
display: flex;
|
display: flex;
|
||||||
background: url(icon64.png) 1em 50%/32px 32px no-repeat, url(tile.png) repeat-x, var(--toolbar-bg-color);
|
background: url(icon64.png) 1em 50%/32px 32px no-repeat,
|
||||||
|
var(--tile-url) repeat-x, var(--toolbar-bg-color);
|
||||||
padding-left: calc(2em + 32px);
|
padding-left: calc(2em + 32px);
|
||||||
color: white;
|
color: var(--general-bgcolor);
|
||||||
}
|
}
|
||||||
|
|
||||||
input.tab {
|
input.tab {
|
||||||
@ -54,9 +55,10 @@ input.tab {
|
|||||||
#tabsel-general:checked ~ #tabs #tabel-general,
|
#tabsel-general:checked ~ #tabs #tabel-general,
|
||||||
#tabsel-filters:checked ~ #tabs #tabel-filters,
|
#tabsel-filters:checked ~ #tabs #tabel-filters,
|
||||||
#tabsel-network:checked ~ #tabs #tabel-network {
|
#tabsel-network:checked ~ #tabs #tabel-network {
|
||||||
color: black !important;
|
color: var(--general-color) !important;
|
||||||
background: white;
|
background: var(--general-bgcolor);
|
||||||
border-top: var(--toolbar-border-width) solid var(--toolbar-active-border-color);
|
border-top: var(--toolbar-border-width) solid
|
||||||
|
var(--toolbar-active-border-color);
|
||||||
}
|
}
|
||||||
|
|
||||||
#tabs > label {
|
#tabs > label {
|
||||||
@ -64,13 +66,14 @@ input.tab {
|
|||||||
border-top: var(--toolbar-border-width) solid transparent;
|
border-top: var(--toolbar-border-width) solid transparent;
|
||||||
border-left: 1px solid transparent;
|
border-left: 1px solid transparent;
|
||||||
border-right: 1px solid transparent;
|
border-right: 1px solid transparent;
|
||||||
border-left: 1px solid rgba(255, 255, 255, 0.5);
|
border-left: var(--toolbar-border);
|
||||||
border-right: 1px solid rgba(255, 255, 255, 0.5);
|
border-right: var(--toolbar-border);
|
||||||
background: var(--toolbar-bg-color);
|
background: var(--toolbar-bg-color);
|
||||||
}
|
}
|
||||||
|
|
||||||
#tabs > label:hover:not(:checked) {
|
#tabs > label:hover:not(:checked) {
|
||||||
border-top: var(--toolbar-border-width) solid var(--toolbar-hover-border-color);
|
border-top: var(--toolbar-border-width) solid
|
||||||
|
var(--toolbar-hover-border-color);
|
||||||
background: var(--toolbar-hover-background);
|
background: var(--toolbar-hover-background);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -113,15 +116,27 @@ input.tab {
|
|||||||
fieldset {
|
fieldset {
|
||||||
display: flex;
|
display: flex;
|
||||||
margin-bottom: 1em;
|
margin-bottom: 1em;
|
||||||
border: 1px solid lightgray;
|
border: 1px solid var(--general-border-color);
|
||||||
border-radius: 6px;
|
border-radius: 6px;
|
||||||
box-shadow: 1px 1px 6px lightgray;
|
box-shadow: 1px 1px 6px var(--general-border-color);
|
||||||
background: rgba(128, 128, 128, 0.05);
|
background: rgba(128, 128, 128, 0.05);
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
max-width: 60em;
|
max-width: 60em;
|
||||||
padding: 1.2em;
|
padding: 1.2em;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.optiongroups,
|
||||||
|
fieldset > label {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
fieldset > label > input,
|
||||||
|
fieldset > label > select {
|
||||||
|
margin-left: 1ex;
|
||||||
|
margin-right: 1ex;
|
||||||
|
}
|
||||||
|
|
||||||
legend {
|
legend {
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
font-size: 120%;
|
font-size: 120%;
|
||||||
@ -134,10 +149,10 @@ legend {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.virtualtable-container {
|
.virtualtable-container {
|
||||||
border: 1px solid lightgray;
|
border: 1px solid var(--general-border-color);
|
||||||
border-radius: 6px;
|
border-radius: 6px;
|
||||||
background: rgba(128, 128, 128, 0.05);
|
background: rgba(128, 128, 128, 0.05);
|
||||||
box-shadow: 1px 1px 6px lightgray;
|
box-shadow: 1px 1px 6px var(--general-border-color);
|
||||||
}
|
}
|
||||||
|
|
||||||
#network-general {
|
#network-general {
|
||||||
@ -146,3 +161,24 @@ legend {
|
|||||||
grid-column-gap: 1em;
|
grid-column-gap: 1em;
|
||||||
grid-row-gap: 1ex;
|
grid-row-gap: 1ex;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.optiongroups {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: auto 1fr;
|
||||||
|
grid-column-gap: 1em;
|
||||||
|
grid-row-gap: 1ex;
|
||||||
|
}
|
||||||
|
|
||||||
|
.optiongroups > div,
|
||||||
|
.optiongroups > div > label {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
.optiongroups input {
|
||||||
|
margin-left: 1em;
|
||||||
|
margin-right: 0.7ex;
|
||||||
|
}
|
||||||
|
|
||||||
|
hr {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
@ -107,7 +107,7 @@ body > * {
|
|||||||
padding: 0;
|
padding: 0;
|
||||||
padding-left: calc(2em + 32px);
|
padding-left: calc(2em + 32px);
|
||||||
color: black;
|
color: black;
|
||||||
background: url(icon32.png) 1em 0/32px 32px no-repeat, url(tile.png) repeat-x, var(--toolbar-bg-color);
|
background: url(icon32.png) 1em 0/32px 32px no-repeat, var(--tile-url) repeat-x, var(--toolbar-bg-color);
|
||||||
font: caption;
|
font: caption;
|
||||||
font-size: 150%;
|
font-size: 150%;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
@ -117,7 +117,7 @@ body > * {
|
|||||||
}
|
}
|
||||||
@media (-webkit-min-device-pixel-ratio: 1.3), (min-resolution: 124.8dpi) {
|
@media (-webkit-min-device-pixel-ratio: 1.3), (min-resolution: 124.8dpi) {
|
||||||
#tabs {
|
#tabs {
|
||||||
background: url(icon64.png) 1em 50%/32px 32px no-repeat, url(tile.png) repeat-x, var(--toolbar-bg-color);
|
background: url(icon64.png) 1em 50%/32px 32px no-repeat, var(--tile-url) repeat-x, var(--toolbar-bg-color);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -145,27 +145,27 @@ body > * {
|
|||||||
-webkit-user-select: none;
|
-webkit-user-select: none;
|
||||||
user-select: none;
|
user-select: none;
|
||||||
background: var(--toolbar-bg-color);
|
background: var(--toolbar-bg-color);
|
||||||
color: white;
|
color: var(--general-color);
|
||||||
min-width: 10em;
|
min-width: 10em;
|
||||||
padding: 1ex;
|
padding: 1ex;
|
||||||
padding-left: 1em;
|
padding-left: 1em;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
border: 0;
|
border: 0;
|
||||||
border-top: var(--toolbar-border-width) solid transparent;
|
border-top: var(--toolbar-border-width) solid transparent;
|
||||||
border-left: 1px solid rgba(255,255,255,0.3);
|
border-left: var(--toolbar-border);
|
||||||
border-right: 1px solid rgba(255,255,255,0.3);
|
border-right: var(--toolbar-border);
|
||||||
transition: border 1s;
|
transition: border 1s;
|
||||||
}
|
}
|
||||||
|
|
||||||
.tab:not(.active):not(.disabled):hover {
|
.tab:not(.active):not(.disabled):hover {
|
||||||
border-top: var(--toolbar-border-width) solid var(--toolbar-hover-border-color);
|
border-top: var(--toolbar-border-width) solid var(--toolbar-hover-border-color);
|
||||||
color: rgb(255, 226, 167);
|
color: var(--general-color);
|
||||||
background: var(--toolbar-hover-background);
|
background: var(--toolbar-hover-background);
|
||||||
}
|
}
|
||||||
|
|
||||||
.tab.active {
|
.tab.active {
|
||||||
color: black;
|
color: var(--general-color);
|
||||||
background: white;
|
background: var(--table-head-bgcolor);
|
||||||
border-top: var(--toolbar-border-width) solid var(--toolbar-active-border-color);
|
border-top: var(--toolbar-border-width) solid var(--toolbar-active-border-color);
|
||||||
border-left: 1px solid transparent;
|
border-left: 1px solid transparent;
|
||||||
border-right: 1px solid transparent;
|
border-right: 1px solid transparent;
|
||||||
|
@ -64,7 +64,7 @@ p.example {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#options > #subfolderOptions,
|
#options > #subfolderOptions,
|
||||||
#options > #maskOptions {
|
#options > #maskOptions, #options > #serverOptions {
|
||||||
display: grid;
|
display: grid;
|
||||||
grid-template-columns: 2fr auto auto;
|
grid-template-columns: 2fr auto auto;
|
||||||
}
|
}
|
||||||
|
BIN
style/tile-dark.png
Normal file
After Width: | Height: | Size: 1.9 KiB |
BIN
style/tile.png
Before Width: | Height: | Size: 2.6 KiB After Width: | Height: | Size: 2.3 KiB |
10
tests/.editorconfig
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
root = true
|
||||||
|
|
||||||
|
[*]
|
||||||
|
charset = utf-8
|
||||||
|
end_of_line = lf
|
||||||
|
indent_size = 2
|
||||||
|
indent_style = space
|
||||||
|
insert_final_newline = true
|
||||||
|
tab_width = 2
|
||||||
|
trim_trailing_whitespace = true
|
@ -113,4 +113,29 @@ describe("BatchGenerator", function() {
|
|||||||
expect(items[0]).to.equal(gen.preview);
|
expect(items[0]).to.equal(gen.preview);
|
||||||
expect(gen.hasInvalid).to.be.true;
|
expect(gen.hasInvalid).to.be.true;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it("characters", function() {
|
||||||
|
const gen = new BatchGenerator("abc[a:c].lol[1].b");
|
||||||
|
const items = Array.from(gen);
|
||||||
|
expect(items).to.deep.equal([
|
||||||
|
"abca.lol[1].b",
|
||||||
|
"abcb.lol[1].b",
|
||||||
|
"abcc.lol[1].b",
|
||||||
|
]);
|
||||||
|
expect(items.length).to.equal(gen.length);
|
||||||
|
expect(items[0]).to.equal(gen.preview);
|
||||||
|
});
|
||||||
|
|
||||||
|
it("characters two", function() {
|
||||||
|
const gen = new BatchGenerator("abc[D:G].lol[1].b");
|
||||||
|
const items = Array.from(gen);
|
||||||
|
expect(items).to.deep.equal([
|
||||||
|
"abcD.lol[1].b",
|
||||||
|
"abcE.lol[1].b",
|
||||||
|
"abcF.lol[1].b",
|
||||||
|
"abcG.lol[1].b",
|
||||||
|
]);
|
||||||
|
expect(items.length).to.equal(gen.length);
|
||||||
|
expect(items[0]).to.equal(gen.preview);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
@ -108,8 +108,13 @@ export class MenuItem extends MenuItemBase {
|
|||||||
super(owner, id, text, options);
|
super(owner, id, text, options);
|
||||||
this.disabled = options.disabled === "true";
|
this.disabled = options.disabled === "true";
|
||||||
this.elem.setAttribute("aria-role", "menuitem");
|
this.elem.setAttribute("aria-role", "menuitem");
|
||||||
this.elem.addEventListener(
|
this.clicked = this.clicked.bind(this);
|
||||||
"click", () => this.owner.emit("clicked", this.id, this.autoHide));
|
this.elem.addEventListener("click", this.clicked);
|
||||||
|
this.elem.addEventListener("contextmenu", this.clicked);
|
||||||
|
}
|
||||||
|
|
||||||
|
clicked() {
|
||||||
|
this.owner.emit("clicked", this.id, this.autoHide);
|
||||||
}
|
}
|
||||||
|
|
||||||
get disabled() {
|
get disabled() {
|
||||||
|
@ -104,7 +104,7 @@ export class EventEmitter {
|
|||||||
for (const e of Array.from(handlers)) {
|
for (const e of Array.from(handlers)) {
|
||||||
try {
|
try {
|
||||||
// eslint-disable-next-line prefer-spread
|
// eslint-disable-next-line prefer-spread
|
||||||
handled = handled || !!e.apply(null, args);
|
handled = !!e.apply(null, args) || handled;
|
||||||
}
|
}
|
||||||
catch (ex) {
|
catch (ex) {
|
||||||
console.error(`Event handler ${e} for ${event} failed`, ex.toString(), ex.stack, ex);
|
console.error(`Event handler ${e} for ${event} failed`, ex.toString(), ex.stack, ex);
|
||||||
|
@ -45,10 +45,10 @@ export class TableEvents extends BaseTable {
|
|||||||
"scroll", debounce(this.scrolled.bind(this), SCROLL_DEBOUNCE), {
|
"scroll", debounce(this.scrolled.bind(this), SCROLL_DEBOUNCE), {
|
||||||
passive: true
|
passive: true
|
||||||
});
|
});
|
||||||
|
body.addEventListener("contextmenu", this.contextmenu.bind(this), true);
|
||||||
|
|
||||||
table.addEventListener("keypress", this.keypressed.bind(this), true);
|
table.addEventListener("keypress", this.keypressed.bind(this), true);
|
||||||
table.addEventListener("keydown", this.keypressed.bind(this), true);
|
table.addEventListener("keydown", this.keypressed.bind(this), true);
|
||||||
table.addEventListener("contextmenu", this.contextmenu.bind(this), true);
|
|
||||||
|
|
||||||
selectionGrippy.addEventListener("click", this.grippyClicked.bind(this));
|
selectionGrippy.addEventListener("click", this.grippyClicked.bind(this));
|
||||||
}
|
}
|
||||||
|
@ -20,16 +20,19 @@ FILES = [
|
|||||||
"LICENSE.*",
|
"LICENSE.*",
|
||||||
]
|
]
|
||||||
|
|
||||||
RELEASE_ID = "{DDC359D1-844A-42a7-9AA1-88A850A938A8}"
|
RELEASE_ID = "downloading@traitorousenterprises.net"
|
||||||
|
|
||||||
UNCOMPRESSABLE = set((".png", ".jpg", ".zip", ".woff2"))
|
UNCOMPRESSABLE = set((".png", ".jpg", ".zip", ".woff2"))
|
||||||
LICENSED = set((".css", ".html", ".js", "*.ts"))
|
LICENSED = set((".css", ".html", ".js", "*.ts"))
|
||||||
IGNORED = set((".DS_Store", "Thumbs.db"))
|
IGNORED = set((".DS_Store", "Thumbs.db"))
|
||||||
|
# XXX: #125
|
||||||
|
IGNORED_OPERA = set(("done.opus", "error.opus"))
|
||||||
|
|
||||||
PERM_IGNORED_FX = set(("downloads.shelf", "webRequest", "webRequestBlocking"))
|
PERM_IGNORED_FX = set(("downloads.shelf", "webRequest", "webRequestBlocking"))
|
||||||
PERM_IGNORED_CHROME = set(("menus", "sessions"))
|
PERM_IGNORED_CHROME = set(("menus", "sessions", "theme"))
|
||||||
|
|
||||||
SCRIPTS = [
|
SCRIPTS = [
|
||||||
|
"yarn build:cleanup",
|
||||||
"yarn build:regexps",
|
"yarn build:regexps",
|
||||||
"yarn build:bundles",
|
"yarn build:bundles",
|
||||||
]
|
]
|
||||||
@ -45,17 +48,17 @@ def check_licenses():
|
|||||||
raise Exception(f"No license in {file}")
|
raise Exception(f"No license in {file}")
|
||||||
|
|
||||||
|
|
||||||
def files():
|
def files(additional_ignored):
|
||||||
p = Path("")
|
p = Path("")
|
||||||
for pattern in FILES:
|
for pattern in FILES:
|
||||||
for file in sorted(p.glob(pattern)):
|
for file in sorted(p.glob(pattern)):
|
||||||
if file.name in IGNORED or not file.is_file():
|
if file.name in IGNORED or file.name in additional_ignored or not file.is_file():
|
||||||
continue
|
continue
|
||||||
yield file
|
yield file
|
||||||
|
|
||||||
def build(out, manifest):
|
def build(out, manifest, additional_ignored=set()):
|
||||||
with ZipFile(out, "w", compression=ZIP_DEFLATED, allowZip64=False, compresslevel=2) as zp:
|
with ZipFile(out, "w", compression=ZIP_DEFLATED, allowZip64=False) as zp:
|
||||||
for file in files():
|
for file in files(additional_ignored):
|
||||||
if str(file) == "manifest.json":
|
if str(file) == "manifest.json":
|
||||||
buf = manifest
|
buf = manifest
|
||||||
else:
|
else:
|
||||||
@ -68,7 +71,7 @@ def build(out, manifest):
|
|||||||
if file.suffix in UNCOMPRESSABLE:
|
if file.suffix in UNCOMPRESSABLE:
|
||||||
zp.writestr(zinfo, buf, compress_type=ZIP_STORED)
|
zp.writestr(zinfo, buf, compress_type=ZIP_STORED)
|
||||||
else:
|
else:
|
||||||
zp.writestr(zinfo, buf, compress_type=ZIP_DEFLATED, compresslevel=2)
|
zp.writestr(zinfo, buf, compress_type=ZIP_DEFLATED)
|
||||||
print(file)
|
print(file)
|
||||||
|
|
||||||
|
|
||||||
@ -85,14 +88,14 @@ def build_firefox(args):
|
|||||||
|
|
||||||
if args.mode != "release":
|
if args.mode != "release":
|
||||||
infos["version_name"] = f"{version}-{args.mode}"
|
infos["version_name"] = f"{version}-{args.mode}"
|
||||||
infos["browser_specific_settings"]["gecko"]["id"] = f"{args.mode}@downthemall.org"
|
infos["browser_specific_settings"]["gecko"]["id"] = f"{args.mode}@traitorousenterprises.net"
|
||||||
infos["short_name"] = infos.get("name")
|
infos["short_name"] = infos.get("name")
|
||||||
infos["name"] = f"{infos.get('name')} {args.mode}"
|
infos["name"] = f"{infos.get('name')} {args.mode}"
|
||||||
else:
|
else:
|
||||||
infos["browser_specific_settings"]["gecko"]["id"] = RELEASE_ID
|
infos["browser_specific_settings"]["gecko"]["id"] = RELEASE_ID
|
||||||
|
|
||||||
infos["permissions"] = [p for p in infos.get("permissions") if not p in PERM_IGNORED_FX]
|
infos["permissions"] = [p for p in infos.get("permissions") if not p in PERM_IGNORED_FX]
|
||||||
out = Path("web-ext-artifacts") / f"dta-{version}-{args.mode}-fx.zip"
|
out = Path("web-ext-artifacts") / f"tdl-{version}-{args.mode}-fx.zip"
|
||||||
if not out.parent.exists():
|
if not out.parent.exists():
|
||||||
out.parent.mkdir()
|
out.parent.mkdir()
|
||||||
if out.exists():
|
if out.exists():
|
||||||
@ -101,7 +104,7 @@ def build_firefox(args):
|
|||||||
build(out, json.dumps(infos, indent=2).encode("utf-8"))
|
build(out, json.dumps(infos, indent=2).encode("utf-8"))
|
||||||
|
|
||||||
|
|
||||||
def build_chrome(args):
|
def build_chromium(args, pkg, additional_ignored=set()):
|
||||||
now = datetime.now().strftime("%Y%m%d%H%M%S")
|
now = datetime.now().strftime("%Y%m%d%H%M%S")
|
||||||
with open("manifest.json") as manip:
|
with open("manifest.json") as manip:
|
||||||
infos = json.load(manip, object_pairs_hook=OrderedDict)
|
infos = json.load(manip, object_pairs_hook=OrderedDict)
|
||||||
@ -119,13 +122,13 @@ def build_chrome(args):
|
|||||||
infos["name"] = f"{infos.get('name')} {args.mode}"
|
infos["name"] = f"{infos.get('name')} {args.mode}"
|
||||||
|
|
||||||
infos["permissions"] = [p for p in infos.get("permissions") if not p in PERM_IGNORED_CHROME]
|
infos["permissions"] = [p for p in infos.get("permissions") if not p in PERM_IGNORED_CHROME]
|
||||||
out = Path("web-ext-artifacts") / f"dta-{version}-{args.mode}-crx.zip"
|
out = Path("web-ext-artifacts") / f"tdl-{version}-{args.mode}-{pkg}.zip"
|
||||||
if not out.parent.exists():
|
if not out.parent.exists():
|
||||||
out.parent.mkdir()
|
out.parent.mkdir()
|
||||||
if out.exists():
|
if out.exists():
|
||||||
out.unlink()
|
out.unlink()
|
||||||
print("Output", out)
|
print("Output", out)
|
||||||
build(out, json.dumps(infos, indent=2).encode("utf-8"))
|
build(out, json.dumps(infos, indent=2).encode("utf-8"), additional_ignored=additional_ignored)
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
from argparse import ArgumentParser
|
from argparse import ArgumentParser
|
||||||
@ -140,7 +143,8 @@ def main():
|
|||||||
else:
|
else:
|
||||||
run([script], shell=True)
|
run([script], shell=True)
|
||||||
build_firefox(args)
|
build_firefox(args)
|
||||||
build_chrome(args)
|
build_chromium(args, "crx")
|
||||||
|
build_chromium(args, "opr", IGNORED_OPERA)
|
||||||
print("DONE.")
|
print("DONE.")
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
|
@ -6,7 +6,7 @@ langs = sorted(Path("_locales").glob("**/messages.json"), key=lambda p: p.parent
|
|||||||
all = {}
|
all = {}
|
||||||
for m in langs:
|
for m in langs:
|
||||||
loc = m.parent.name
|
loc = m.parent.name
|
||||||
with m.open("r") as mp:
|
with m.open("r", encoding="utf-8") as mp:
|
||||||
lang = json.load(mp).get("language").get("message")
|
lang = json.load(mp).get("language").get("message")
|
||||||
if not lang:
|
if not lang:
|
||||||
raise Exception(f"{m}: no language")
|
raise Exception(f"{m}: no language")
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
<!-- License: gpl-v2 -->
|
<!-- License: gpl-v2 -->
|
||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<title data-i18n="manager.title">DownThemAll!</title>
|
<title data-i18n="manager.title">TraitorousDownloading!</title>
|
||||||
<style>
|
<style>
|
||||||
@import "/uikit/css/virtualtable.css";
|
@import "/uikit/css/virtualtable.css";
|
||||||
@import "/uikit/css/modal.css";
|
@import "/uikit/css/modal.css";
|
||||||
@ -13,8 +13,8 @@
|
|||||||
<link rel="icon" href="/style/icon32.png">
|
<link rel="icon" href="/style/icon32.png">
|
||||||
<link rel="icon" sizes="16x16" href="/style/icon16.png">
|
<link rel="icon" sizes="16x16" href="/style/icon16.png">
|
||||||
<link rel="icon" sizes="32x32" href="/style/icon32.png">
|
<link rel="icon" sizes="32x32" href="/style/icon32.png">
|
||||||
|
<link rel="icon" sizes="48x48" href="/style/icon48.png">
|
||||||
<link rel="icon" sizes="64x64" href="/style/icon64.png">
|
<link rel="icon" sizes="64x64" href="/style/icon64.png">
|
||||||
<link rel="icon" sizes="96x96" href="/style/icon96.png">
|
|
||||||
<link rel="icon" sizes="128x128" href="/style/icon128.png">
|
<link rel="icon" sizes="128x128" href="/style/icon128.png">
|
||||||
<link rel="icon" sizes="256x256" href="/style/icon256.png">
|
<link rel="icon" sizes="256x256" href="/style/icon256.png">
|
||||||
<script defer src="/bundles/common.js"></script>
|
<script defer src="/bundles/common.js"></script>
|
||||||
|
@ -9,6 +9,7 @@ import { runtime } from "../lib/browser";
|
|||||||
import { Promised } from "../lib/util";
|
import { Promised } from "../lib/util";
|
||||||
import { PromiseSerializer } from "../lib/pserializer";
|
import { PromiseSerializer } from "../lib/pserializer";
|
||||||
import { Keys } from "./keys";
|
import { Keys } from "./keys";
|
||||||
|
import "./theme";
|
||||||
|
|
||||||
const $ = document.querySelector.bind(document);
|
const $ = document.querySelector.bind(document);
|
||||||
|
|
||||||
@ -130,7 +131,6 @@ addEventListener("DOMContentLoaded", function dom() {
|
|||||||
|
|
||||||
addEventListener("contextmenu", event => {
|
addEventListener("contextmenu", event => {
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
event.stopPropagation();
|
|
||||||
return false;
|
return false;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -4,6 +4,7 @@
|
|||||||
import { EventEmitter } from "../../lib/events";
|
import { EventEmitter } from "../../lib/events";
|
||||||
// eslint-disable-next-line no-unused-vars
|
// eslint-disable-next-line no-unused-vars
|
||||||
import { runtime, RawPort } from "../../lib/browser";
|
import { runtime, RawPort } from "../../lib/browser";
|
||||||
|
import { WindowState } from "../windowstate";
|
||||||
|
|
||||||
const PORT = new class Port extends EventEmitter {
|
const PORT = new class Port extends EventEmitter {
|
||||||
port: RawPort | null;
|
port: RawPort | null;
|
||||||
@ -14,6 +15,17 @@ const PORT = new class Port extends EventEmitter {
|
|||||||
if (!this.port) {
|
if (!this.port) {
|
||||||
throw new Error("Could not connect");
|
throw new Error("Could not connect");
|
||||||
}
|
}
|
||||||
|
new WindowState(this.port);
|
||||||
|
addEventListener("beforeunload", () => {
|
||||||
|
if (this.port) {
|
||||||
|
this.port.postMessage({
|
||||||
|
msg: "unload",
|
||||||
|
left: window.screenX,
|
||||||
|
top: window.screenY
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
this.port.onMessage.addListener((msg: any) => {
|
this.port.onMessage.addListener((msg: any) => {
|
||||||
if (typeof msg === "string") {
|
if (typeof msg === "string") {
|
||||||
this.emit(msg);
|
this.emit(msg);
|
||||||
|
@ -41,7 +41,6 @@ import { IconCache } from "../../lib/iconcache";
|
|||||||
import * as imex from "../../lib/imex";
|
import * as imex from "../../lib/imex";
|
||||||
// eslint-disable-next-line no-unused-vars
|
// eslint-disable-next-line no-unused-vars
|
||||||
import { BaseItem } from "../../lib/item";
|
import { BaseItem } from "../../lib/item";
|
||||||
import { API } from "../../lib/api";
|
|
||||||
|
|
||||||
const TREE_CONFIG_VERSION = 2;
|
const TREE_CONFIG_VERSION = 2;
|
||||||
const RUNNING_TIMEOUT = 1000;
|
const RUNNING_TIMEOUT = 1000;
|
||||||
@ -122,6 +121,8 @@ export class DownloadItem extends EventEmitter {
|
|||||||
|
|
||||||
public currentName: string;
|
public currentName: string;
|
||||||
|
|
||||||
|
public currentFull: string;
|
||||||
|
|
||||||
public ext?: string;
|
public ext?: string;
|
||||||
|
|
||||||
public position: number;
|
public position: number;
|
||||||
@ -569,9 +570,7 @@ export class DownloadTable extends VirtualTable {
|
|||||||
ctx.on("dismissed", () => this.table.focus());
|
ctx.on("dismissed", () => this.table.focus());
|
||||||
|
|
||||||
this.on("contextmenu", (tree, event) => {
|
this.on("contextmenu", (tree, event) => {
|
||||||
if (!this.selection.empty) {
|
|
||||||
this.showContextMenu(event);
|
this.showContextMenu(event);
|
||||||
}
|
|
||||||
return true;
|
return true;
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -791,7 +790,7 @@ export class DownloadTable extends VirtualTable {
|
|||||||
const items = this.getSelectedItems();
|
const items = this.getSelectedItems();
|
||||||
const states = items.reduce((p, c) => p |= c.state, 0);
|
const states = items.reduce((p, c) => p |= c.state, 0);
|
||||||
|
|
||||||
if (!(states & DownloadState.PAUSABLE)) {
|
if (!(states & DownloadState.PAUSEABLE)) {
|
||||||
this.pauseAction.disabled = true;
|
this.pauseAction.disabled = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -829,7 +828,7 @@ export class DownloadTable extends VirtualTable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pauseDownloads() {
|
pauseDownloads() {
|
||||||
const sids = this.getSelectedSids(DownloadState.PAUSABLE);
|
const sids = this.getSelectedSids(DownloadState.PAUSEABLE);
|
||||||
if (!sids.length) {
|
if (!sids.length) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -1204,7 +1203,7 @@ export class DownloadTable extends VirtualTable {
|
|||||||
if (!items || !items.length) {
|
if (!items || !items.length) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
API.regular(items, []);
|
PORT.post("import", {items});
|
||||||
};
|
};
|
||||||
reader.readAsText(picker.files[0], "utf-8");
|
reader.readAsText(picker.files[0], "utf-8");
|
||||||
};
|
};
|
||||||
|
@ -182,7 +182,7 @@ export class Tooltip {
|
|||||||
}
|
}
|
||||||
const icon = item.largeIcon;
|
const icon = item.largeIcon;
|
||||||
this.icon.className = icon;
|
this.icon.className = icon;
|
||||||
this.name.textContent = item.destFull;
|
this.name.textContent = item.currentFull;
|
||||||
this.from.textContent = item.usable;
|
this.from.textContent = item.usable;
|
||||||
this.size.textContent = item.fmtSize;
|
this.size.textContent = item.fmtSize;
|
||||||
this.date.textContent = new Date(item.startDate).toLocaleString();
|
this.date.textContent = new Date(item.startDate).toLocaleString();
|
||||||
|
@ -1,4 +1,6 @@
|
|||||||
<!doctype html>
|
<!doctype html>
|
||||||
|
<html id="popup">
|
||||||
|
|
||||||
<head>
|
<head>
|
||||||
<!-- License: GPL-v2 -->
|
<!-- License: GPL-v2 -->
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
@ -11,6 +13,8 @@
|
|||||||
height: auto !important;
|
height: auto !important;
|
||||||
-webkit-user-select: none;
|
-webkit-user-select: none;
|
||||||
user-select: none;
|
user-select: none;
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
ul {
|
ul {
|
||||||
@ -96,13 +100,15 @@
|
|||||||
<li class="sep">
|
<li class="sep">
|
||||||
<hr>
|
<hr>
|
||||||
</li>
|
</li>
|
||||||
<li id="manager" data-action="open-manager">
|
<!-- <li id="manager" data-action="open-manager">
|
||||||
<img srcset="/style/button-manager.png, /style/button-manager@2x.png 2x">
|
<img srcset="/style/button-manager.png, /style/button-manager@2x.png 2x">
|
||||||
<span data-i18n="manager.short"></span>
|
<span data-i18n="manager.short"></span>
|
||||||
</li>
|
</li> -->
|
||||||
<li id="prefs" data-action="open-prefs">
|
<li id="prefs" data-action="open-prefs">
|
||||||
<span class="icon icon-settings"></span>
|
<span class="icon icon-settings"></span>
|
||||||
<span data-i18n="prefs.short">Preferences</span>
|
<span data-i18n="prefs.short">Preferences</span>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</body>
|
</body>
|
||||||
|
|
||||||
|
</html>
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
// License: MIT
|
// License: MIT
|
||||||
|
|
||||||
import { localize } from "../lib/i18n";
|
import { localize } from "../lib/i18n";
|
||||||
|
import "./theme";
|
||||||
|
|
||||||
declare let browser: any;
|
declare let browser: any;
|
||||||
declare let chrome: any;
|
declare let chrome: any;
|
||||||
|
@ -16,12 +16,12 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
</style>
|
</style>
|
||||||
<title data-i18n="prefs.title">DownThemAll! - Preferences</title>
|
<title data-i18n="prefs.title">TraitorousDownloading! - Preferences</title>
|
||||||
<link rel="icon" href="/style/icon32.png">
|
<link rel="icon" href="/style/icon32.png">
|
||||||
<link rel="icon" sizes="16x16" href="/style/icon16.png">
|
<link rel="icon" sizes="16x16" href="/style/icon16.png">
|
||||||
<link rel="icon" sizes="32x32" href="/style/icon32.png">
|
<link rel="icon" sizes="32x32" href="/style/icon32.png">
|
||||||
|
<link rel="icon" sizes="48x48" href="/style/icon48.png">
|
||||||
<link rel="icon" sizes="64x64" href="/style/icon64.png">
|
<link rel="icon" sizes="64x64" href="/style/icon64.png">
|
||||||
<link rel="icon" sizes="96x96" href="/style/icon96.png">
|
|
||||||
<link rel="icon" sizes="128x128" href="/style/icon128.png">
|
<link rel="icon" sizes="128x128" href="/style/icon128.png">
|
||||||
<link rel="icon" sizes="256x256" href="/style/icon256.png">
|
<link rel="icon" sizes="256x256" href="/style/icon256.png">
|
||||||
<script defer src="/bundles/common.js"></script>
|
<script defer src="/bundles/common.js"></script>
|
||||||
@ -43,15 +43,23 @@
|
|||||||
<article id="tab-general" class="tab">
|
<article id="tab-general" class="tab">
|
||||||
<fieldset>
|
<fieldset>
|
||||||
<legend data-i18n="pref.ui">UI</legend>
|
<legend data-i18n="pref.ui">UI</legend>
|
||||||
<div id="pref-button-type">
|
<div class="optiongroups">
|
||||||
<label data-i18n="pref-button-type"></label>
|
<label data-i18n="pref-button-type"></label>
|
||||||
|
<div id="pref-button-type">
|
||||||
<label><input type="radio" name="pref-button-type" value="popup"> <span data-i18n="pref-button-type-popup"></span></label>
|
<label><input type="radio" name="pref-button-type" value="popup"> <span data-i18n="pref-button-type-popup"></span></label>
|
||||||
<label><input type="radio" name="pref-button-type" value="dta"> <span data-i18n="pref-button-type-dta"></span></label>
|
<label><input type="radio" name="pref-button-type" value="dta"> <span data-i18n="pref-button-type-dta"></span></label>
|
||||||
<label><input type="radio" name="pref-button-type" value="turbo"> <span data-i18n="pref-button-type-turbo"></span></label>
|
<label><input type="radio" name="pref-button-type" value="turbo"> <span data-i18n="pref-button-type-turbo"></span></label>
|
||||||
<label><input type="radio" name="pref-button-type" value="manager"> <span data-i18n="pref-button-type-manager"></span></label>
|
<label style="display: none;"><input type="radio" name="pref-button-type" value="manager"> <span data-i18n="pref-button-type-manager"></span></label>
|
||||||
|
</div>
|
||||||
|
<label data-i18n="pref-theme"></label>
|
||||||
|
<div id="pref-theme">
|
||||||
|
<label><input type="radio" name="pref-theme" value="default"> <span data-i18n="pref-theme-default"></span></label>
|
||||||
|
<label><input type="radio" name="pref-theme" value="light"> <span data-i18n="pref-theme-light"></span></label>
|
||||||
|
<label><input type="radio" name="pref-theme" value="dark"> <span data-i18n="pref-theme-dark"></span></label>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<hr>
|
<hr>
|
||||||
<label><input type="checkbox" id="pref-manager-in-popup"> <span data-i18n="pref-manager-in-popup"></span></label>
|
<label style="display: none;"><input type="checkbox" id="pref-manager-in-popup"> <span data-i18n="pref-manager-in-popup"></span></label>
|
||||||
<label><input type="checkbox" id="pref-finish-notification"> <span data-i18n="pref-finish-notification"></span></label>
|
<label><input type="checkbox" id="pref-finish-notification"> <span data-i18n="pref-finish-notification"></span></label>
|
||||||
<label><input type="checkbox" id="pref-sounds"> <span data-i18n="pref-sounds"></span></label>
|
<label><input type="checkbox" id="pref-sounds"> <span data-i18n="pref-sounds"></span></label>
|
||||||
<label><input type="checkbox" id="pref-hide-context"> <span data-i18n="pref-hide-context"></span></label>
|
<label><input type="checkbox" id="pref-hide-context"> <span data-i18n="pref-hide-context"></span></label>
|
||||||
@ -60,15 +68,16 @@
|
|||||||
<button id="reset-layout" data-i18n="reset-layouts"></button>
|
<button id="reset-layout" data-i18n="reset-layouts"></button>
|
||||||
</div>
|
</div>
|
||||||
</fieldset>
|
</fieldset>
|
||||||
<fieldset>
|
<fieldset style="display: none;">
|
||||||
<legend data-i18n="pref.manager">Manager</legend>
|
<legend data-i18n="pref.manager">Manager</legend>
|
||||||
<label><input type="checkbox" id="pref-tooltip"> <span data-i18n="pref-manager-tooltip"></span></label>
|
<label><input type="checkbox" id="pref-tooltip"> <span data-i18n="pref-manager-tooltip"></span></label>
|
||||||
<label><input type="checkbox" id="pref-show-urls"> <span data-i18n="pref-show-urls"></span></label>
|
<label><input type="checkbox" id="pref-show-urls"> <span data-i18n="pref-show-urls"></span></label>
|
||||||
</fieldset>
|
</fieldset>
|
||||||
<fieldset>
|
<fieldset>
|
||||||
<legend data-i18n="pref.queueing">Queueing Downloads</legend>
|
<legend data-i18n="pref.queueing">Queueing Downloads</legend>
|
||||||
|
<label><input type="checkbox" id="pref-cookies"> <span data-i18n="pref-cookies"></span></label>
|
||||||
<label><input type="checkbox" id="pref-queue-notification"> <span data-i18n="pref-queue-notification"></span></label>
|
<label><input type="checkbox" id="pref-queue-notification"> <span data-i18n="pref-queue-notification"></span></label>
|
||||||
<label><input type="checkbox" id="pref-open-manager-on-queue"> <span data-i18n="pref-open-manager-on-queue"></span></label>
|
<label style="display: none;"><input type="checkbox" id="pref-open-manager-on-queue"> <span data-i18n="pref-open-manager-on-queue"></span></label>
|
||||||
<label><input type="checkbox" id="pref-text-links"> <span data-i18n="pref-text-links"></span></label>
|
<label><input type="checkbox" id="pref-text-links"> <span data-i18n="pref-text-links"></span></label>
|
||||||
<label><input type="checkbox" id="pref-add-paused"> <span data-i18n="pref-add-paused"></span></label>
|
<label><input type="checkbox" id="pref-add-paused"> <span data-i18n="pref-add-paused"></span></label>
|
||||||
<label><input type="checkbox" id="pref-remove-missing-on-init"> <span data-i18n="pref-remove-missing-on-init"></span></label>
|
<label><input type="checkbox" id="pref-remove-missing-on-init"> <span data-i18n="pref-remove-missing-on-init"></span></label>
|
||||||
@ -81,7 +90,8 @@
|
|||||||
</fieldset>
|
</fieldset>
|
||||||
<fieldset>
|
<fieldset>
|
||||||
<legend>Translations</legend>
|
<legend>Translations</legend>
|
||||||
<label>Language:
|
<label>
|
||||||
|
<span>Language:</span>
|
||||||
<select id="languages">
|
<select id="languages">
|
||||||
<option value="default">Browser default</option>
|
<option value="default">Browser default</option>
|
||||||
</select>
|
</select>
|
||||||
@ -123,14 +133,16 @@
|
|||||||
</article>
|
</article>
|
||||||
|
|
||||||
<article id="tab-network" class="tab">
|
<article id="tab-network" class="tab">
|
||||||
<fieldset id="network-general">
|
<fieldset>
|
||||||
<legend data-i18n="pref.netglobal"></legend>
|
<legend data-i18n="pref.netglobal"></legend>
|
||||||
|
<div id="network-general">
|
||||||
<label data-i18n="pref-concurrent-downloads">Concurrent downloads</label>
|
<label data-i18n="pref-concurrent-downloads">Concurrent downloads</label>
|
||||||
<input id="pref-concurrent-downloads" type="number" min="1" max="10">
|
<input id="pref-concurrent-downloads" type="number" min="1" max="10">
|
||||||
<label data-i18n="pref-retries"></label>
|
<label data-i18n="pref-retries"></label>
|
||||||
<input id="pref-retries" type="number" min="0" max="100">
|
<input id="pref-retries" type="number" min="0" max="100">
|
||||||
<label data-i18n="pref-retry-time"></label>
|
<label data-i18n="pref-retry-time"></label>
|
||||||
<input id="pref-retry-time" type="number" min="1" max="600">
|
<input id="pref-retry-time" type="number" min="1" max="600">
|
||||||
|
</div>
|
||||||
</fieldset>
|
</fieldset>
|
||||||
<table id="limits" data-singleselect="true">
|
<table id="limits" data-singleselect="true">
|
||||||
<tr>
|
<tr>
|
||||||
|
@ -19,7 +19,8 @@ import { iconForPath, visible } from "../lib/windowutils";
|
|||||||
import { VirtualTable } from "../uikit/lib/table";
|
import { VirtualTable } from "../uikit/lib/table";
|
||||||
import { Icons } from "./icons";
|
import { Icons } from "./icons";
|
||||||
import { $ } from "./winutil";
|
import { $ } from "./winutil";
|
||||||
import { runtime, storage } from "../lib/browser";
|
import { runtime, storage, OPERA } from "../lib/browser";
|
||||||
|
import "./theme";
|
||||||
|
|
||||||
const ICON_BASE_SIZE = 16;
|
const ICON_BASE_SIZE = 16;
|
||||||
|
|
||||||
@ -557,15 +558,24 @@ addEventListener("DOMContentLoaded", async () => {
|
|||||||
new BoolPref("pref-manager-in-popup", "manager-in-popup");
|
new BoolPref("pref-manager-in-popup", "manager-in-popup");
|
||||||
new BoolPref("pref-queue-notification", "queue-notification");
|
new BoolPref("pref-queue-notification", "queue-notification");
|
||||||
new BoolPref("pref-finish-notification", "finish-notification");
|
new BoolPref("pref-finish-notification", "finish-notification");
|
||||||
new BoolPref("pref-sounds", "sounds");
|
// XXX: #125
|
||||||
|
const sounds = new BoolPref("pref-sounds", "sounds");
|
||||||
|
if (OPERA) {
|
||||||
|
const sp = sounds.elem.parentElement;
|
||||||
|
if (sp) {
|
||||||
|
sp.style.display = "none";
|
||||||
|
}
|
||||||
|
}
|
||||||
new BoolPref("pref-hide-context", "hide-context");
|
new BoolPref("pref-hide-context", "hide-context");
|
||||||
new BoolPref("pref-tooltip", "tooltip");
|
new BoolPref("pref-tooltip", "tooltip");
|
||||||
|
new BoolPref("pref-cookies", "cookies");
|
||||||
new BoolPref("pref-open-manager-on-queue", "open-manager-on-queue");
|
new BoolPref("pref-open-manager-on-queue", "open-manager-on-queue");
|
||||||
new BoolPref("pref-text-links", "text-links");
|
new BoolPref("pref-text-links", "text-links");
|
||||||
new BoolPref("pref-add-paused", "add-paused");
|
new BoolPref("pref-add-paused", "add-paused");
|
||||||
new BoolPref("pref-show-urls", "show-urls");
|
new BoolPref("pref-show-urls", "show-urls");
|
||||||
new BoolPref("pref-remove-missing-on-init", "remove-missing-on-init");
|
new BoolPref("pref-remove-missing-on-init", "remove-missing-on-init");
|
||||||
new OptionPref("pref-button-type", "button-type");
|
new OptionPref("pref-button-type", "button-type");
|
||||||
|
new OptionPref("pref-theme", "theme");
|
||||||
new OptionPref("pref-conflict-action", "conflict-action");
|
new OptionPref("pref-conflict-action", "conflict-action");
|
||||||
|
|
||||||
$("#reset-confirmations").addEventListener("click", async () => {
|
$("#reset-confirmations").addEventListener("click", async () => {
|
||||||
@ -632,8 +642,9 @@ addEventListener("DOMContentLoaded", async () => {
|
|||||||
$<HTMLInputElement>("#loadCustomLocale").addEventListener("click", () => {
|
$<HTMLInputElement>("#loadCustomLocale").addEventListener("click", () => {
|
||||||
customLocale.click();
|
customLocale.click();
|
||||||
});
|
});
|
||||||
$<HTMLInputElement>("#clearCustomLocale").addEventListener("click", () => {
|
$<HTMLInputElement>("#clearCustomLocale").
|
||||||
saveCustomLocale(undefined);
|
addEventListener("click", async () => {
|
||||||
|
await saveCustomLocale(undefined);
|
||||||
runtime.reload();
|
runtime.reload();
|
||||||
});
|
});
|
||||||
customLocale.addEventListener("change", async () => {
|
customLocale.addEventListener("change", async () => {
|
||||||
@ -653,8 +664,9 @@ addEventListener("DOMContentLoaded", async () => {
|
|||||||
reader.onerror = reject;
|
reader.onerror = reject;
|
||||||
reader.readAsText(file);
|
reader.readAsText(file);
|
||||||
});
|
});
|
||||||
saveCustomLocale(text);
|
await saveCustomLocale(text);
|
||||||
if (confirm("Imported your file.\nWant to relaod the extension now?")) {
|
|
||||||
|
if (confirm("Imported your file.\nWant to reload the extension now?")) {
|
||||||
runtime.reload();
|
runtime.reload();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<title data-i18n="select.title">DownThemAll! - Select your links</title>
|
<title data-i18n="select.title">TraitorousDownloading! - Select your links</title>
|
||||||
<style>
|
<style>
|
||||||
@import "/uikit/css/virtualtable.css";
|
@import "/uikit/css/virtualtable.css";
|
||||||
@import "/uikit/css/modal.css";
|
@import "/uikit/css/modal.css";
|
||||||
@ -14,8 +14,8 @@
|
|||||||
<link rel="icon" href="/style/icon32.png">
|
<link rel="icon" href="/style/icon32.png">
|
||||||
<link rel="icon" sizes="16x16" href="/style/icon16.png">
|
<link rel="icon" sizes="16x16" href="/style/icon16.png">
|
||||||
<link rel="icon" sizes="32x32" href="/style/icon32.png">
|
<link rel="icon" sizes="32x32" href="/style/icon32.png">
|
||||||
|
<link rel="icon" sizes="48x48" href="/style/icon48.png">
|
||||||
<link rel="icon" sizes="64x64" href="/style/icon64.png">
|
<link rel="icon" sizes="64x64" href="/style/icon64.png">
|
||||||
<link rel="icon" sizes="96x96" href="/style/icon96.png">
|
|
||||||
<link rel="icon" sizes="128x128" href="/style/icon128.png">
|
<link rel="icon" sizes="128x128" href="/style/icon128.png">
|
||||||
<link rel="icon" sizes="256x256" href="/style/icon256.png">
|
<link rel="icon" sizes="256x256" href="/style/icon256.png">
|
||||||
<script defer src="/bundles/common.js"></script>
|
<script defer src="/bundles/common.js"></script>
|
||||||
@ -75,6 +75,17 @@
|
|||||||
<input type="checkbox" id="maskOnceCheck">
|
<input type="checkbox" id="maskOnceCheck">
|
||||||
<span data-i18n="useonlyonce">Use only once</span>
|
<span data-i18n="useonlyonce">Use only once</span>
|
||||||
</label>
|
</label>
|
||||||
|
|
||||||
|
<h2 data-i18n="server">Server</h2>
|
||||||
|
<input id="server">
|
||||||
|
<label id="cookies">
|
||||||
|
<input type="checkbox" id="cookiesCheck">
|
||||||
|
<span data-i18n="cookies">Send cookies to server</span>
|
||||||
|
</label>
|
||||||
|
<label>
|
||||||
|
<input type="checkbox" id="serverOnceCheck">
|
||||||
|
<span data-i18n="useonlyonce">Use only once</span>
|
||||||
|
</label>
|
||||||
</section>
|
</section>
|
||||||
<section id="notification"></section>
|
<section id="notification"></section>
|
||||||
<section id="buttons">
|
<section id="buttons">
|
||||||
|
@ -7,7 +7,7 @@ import { ContextMenu } from "./contextmenu";
|
|||||||
import { iconForPath } from "../lib/windowutils";
|
import { iconForPath } from "../lib/windowutils";
|
||||||
import { _, localize } from "../lib/i18n";
|
import { _, localize } from "../lib/i18n";
|
||||||
import { Prefs } from "../lib/prefs";
|
import { Prefs } from "../lib/prefs";
|
||||||
import { MASK, FASTFILTER, SUBFOLDER } from "../lib/recentlist";
|
import { MASK, FASTFILTER, SUBFOLDER, SERVER } from "../lib/recentlist";
|
||||||
import { WindowState } from "./windowstate";
|
import { WindowState } from "./windowstate";
|
||||||
import { Dropdown } from "./dropdown";
|
import { Dropdown } from "./dropdown";
|
||||||
import { Keys } from "./keys";
|
import { Keys } from "./keys";
|
||||||
@ -25,6 +25,7 @@ import { ItemDelta } from "../lib/select";
|
|||||||
// eslint-disable-next-line no-unused-vars
|
// eslint-disable-next-line no-unused-vars
|
||||||
import { TableConfig } from "../uikit/lib/config";
|
import { TableConfig } from "../uikit/lib/config";
|
||||||
import { validateSubFolder as validateSubfolder } from "../lib/util";
|
import { validateSubFolder as validateSubfolder } from "../lib/util";
|
||||||
|
import "./theme";
|
||||||
|
|
||||||
const PORT: RawPort = runtime.connect(null, { name: "select" });
|
const PORT: RawPort = runtime.connect(null, { name: "select" });
|
||||||
|
|
||||||
@ -42,6 +43,7 @@ const NUM_FILTER_CLASSES = 8;
|
|||||||
|
|
||||||
let Table: SelectionTable;
|
let Table: SelectionTable;
|
||||||
let Mask: Dropdown;
|
let Mask: Dropdown;
|
||||||
|
let OServer: Dropdown;
|
||||||
let FastFilter: Dropdown;
|
let FastFilter: Dropdown;
|
||||||
let Subfolder: Dropdown;
|
let Subfolder: Dropdown;
|
||||||
|
|
||||||
@ -49,6 +51,7 @@ let Subfolder: Dropdown;
|
|||||||
type DELTAS = {deltaLinks: ItemDelta[]; deltaMedia: ItemDelta[]};
|
type DELTAS = {deltaLinks: ItemDelta[]; deltaMedia: ItemDelta[]};
|
||||||
|
|
||||||
interface BaseMatchedItem extends BaseItem {
|
interface BaseMatchedItem extends BaseItem {
|
||||||
|
backIdx: number;
|
||||||
matched?: string | null;
|
matched?: string | null;
|
||||||
rowid: number;
|
rowid: number;
|
||||||
}
|
}
|
||||||
@ -137,7 +140,8 @@ class ItemCollection {
|
|||||||
constructor(items: BaseMatchedItem[]) {
|
constructor(items: BaseMatchedItem[]) {
|
||||||
this.items = items;
|
this.items = items;
|
||||||
this.assignRows();
|
this.assignRows();
|
||||||
this.indexes = new Map(items.map(i => [i.idx, i]));
|
this.items.forEach((item, idx) => item.backIdx = idx);
|
||||||
|
this.indexes = new Map(items.map((i, idx) => [idx, i]));
|
||||||
}
|
}
|
||||||
|
|
||||||
assignRows() {
|
assignRows() {
|
||||||
@ -158,11 +162,11 @@ class ItemCollection {
|
|||||||
return rv;
|
return rv;
|
||||||
}
|
}
|
||||||
|
|
||||||
get checkedIndexes() {
|
get checkedBackIndexes() {
|
||||||
const rv: number[] = [];
|
const rv: number[] = [];
|
||||||
this.items.forEach(function(item) {
|
this.items.forEach(function(item) {
|
||||||
if (item.matched && item.matched !== "unmanual") {
|
if (item.matched && item.matched !== "unmanual") {
|
||||||
rv.push(item.idx);
|
rv.push(item.backIdx);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
return rv;
|
return rv;
|
||||||
@ -430,6 +434,12 @@ class SelectionTable extends VirtualTable {
|
|||||||
return true;
|
return true;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
Prefs.get("cookies").then(checked=>{
|
||||||
|
if ($<HTMLInputElement>("#cookiesCheck").checked != !!checked) {
|
||||||
|
$<HTMLInputElement>("#cookiesCheck").click();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
this.init();
|
this.init();
|
||||||
this.switchTab(type);
|
this.switchTab(type);
|
||||||
}
|
}
|
||||||
@ -675,10 +685,14 @@ async function download(paused = false) {
|
|||||||
if (!mask) {
|
if (!mask) {
|
||||||
throw new Error("error.invalidMask");
|
throw new Error("error.invalidMask");
|
||||||
}
|
}
|
||||||
|
const server = OServer.value;
|
||||||
|
if (!server) {
|
||||||
|
throw new Error("error.invalidServer");
|
||||||
|
}
|
||||||
const subfolder = Subfolder.value;
|
const subfolder = Subfolder.value;
|
||||||
validateSubfolder(subfolder);
|
validateSubfolder(subfolder);
|
||||||
|
|
||||||
const items = Table.items.checkedIndexes;
|
const items = Table.items.checkedBackIndexes;
|
||||||
if (!items.length) {
|
if (!items.length) {
|
||||||
throw new Error("error.noItemsSelected");
|
throw new Error("error.noItemsSelected");
|
||||||
}
|
}
|
||||||
@ -713,6 +727,9 @@ async function download(paused = false) {
|
|||||||
fastOnce: $<HTMLInputElement>("#fastOnceCheck").checked,
|
fastOnce: $<HTMLInputElement>("#fastOnceCheck").checked,
|
||||||
subfolder,
|
subfolder,
|
||||||
subfolderOnce: $<HTMLInputElement>("#subfolderOnceCheck").checked,
|
subfolderOnce: $<HTMLInputElement>("#subfolderOnceCheck").checked,
|
||||||
|
server,
|
||||||
|
serverOnce: $<HTMLInputElement>("#serverOnceCheck").checked,
|
||||||
|
cookies: $<HTMLInputElement>("#cookiesCheck").checked,
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -788,7 +805,9 @@ function cancel() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async function init() {
|
async function init() {
|
||||||
await Promise.all([MASK.init(), FASTFILTER.init(), SUBFOLDER.init()]);
|
await Promise.all([MASK.init(), FASTFILTER.init(), SUBFOLDER.init(), SERVER.init()]);
|
||||||
|
OServer = new Dropdown("#server", SERVER.values);
|
||||||
|
OServer.on("changed", clearErrors);
|
||||||
Mask = new Dropdown("#mask", MASK.values);
|
Mask = new Dropdown("#mask", MASK.values);
|
||||||
Mask.on("changed", clearErrors);
|
Mask.on("changed", clearErrors);
|
||||||
FastFilter = new Dropdown("#fast", FASTFILTER.values);
|
FastFilter = new Dropdown("#fast", FASTFILTER.values);
|
||||||
@ -887,7 +906,6 @@ addEventListener("DOMContentLoaded", function dom() {
|
|||||||
|
|
||||||
addEventListener("contextmenu", event => {
|
addEventListener("contextmenu", event => {
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
event.stopPropagation();
|
|
||||||
return false;
|
return false;
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -897,4 +915,3 @@ addEventListener("beforeunload", function() {
|
|||||||
});
|
});
|
||||||
|
|
||||||
new WindowState(PORT);
|
new WindowState(PORT);
|
||||||
|
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<title data-i18n="single.title">DownThemAll! - Add a Link</title>
|
<title data-i18n="single.title">TraitorousDownloading! - Add a Link</title>
|
||||||
<style>
|
<style>
|
||||||
@import "/uikit/css/modal.css";
|
@import "/uikit/css/modal.css";
|
||||||
@import "/style/single.css";
|
@import "/style/single.css";
|
||||||
@ -13,8 +13,8 @@
|
|||||||
<link rel="icon" href="/style/icon32.png">
|
<link rel="icon" href="/style/icon32.png">
|
||||||
<link rel="icon" sizes="16x16" href="/style/icon16.png">
|
<link rel="icon" sizes="16x16" href="/style/icon16.png">
|
||||||
<link rel="icon" sizes="32x32" href="/style/icon32.png">
|
<link rel="icon" sizes="32x32" href="/style/icon32.png">
|
||||||
|
<link rel="icon" sizes="48x48" href="/style/icon48.png">
|
||||||
<link rel="icon" sizes="64x64" href="/style/icon64.png">
|
<link rel="icon" sizes="64x64" href="/style/icon64.png">
|
||||||
<link rel="icon" sizes="96x96" href="/style/icon96.png">
|
|
||||||
<link rel="icon" sizes="128x128" href="/style/icon128.png">
|
<link rel="icon" sizes="128x128" href="/style/icon128.png">
|
||||||
<link rel="icon" sizes="256x256" href="/style/icon256.png">
|
<link rel="icon" sizes="256x256" href="/style/icon256.png">
|
||||||
<script defer src="/bundles/common.js"></script>
|
<script defer src="/bundles/common.js"></script>
|
||||||
@ -32,12 +32,12 @@
|
|||||||
<input type="text" id="URL">
|
<input type="text" id="URL">
|
||||||
<h2 data-i18n="custom-filename">Custom Filename</h2>
|
<h2 data-i18n="custom-filename">Custom Filename</h2>
|
||||||
<input type="text" id="filename">
|
<input type="text" id="filename">
|
||||||
<h3 data-i18n="referrer">Referring page</h3>
|
<h3 data-i18n="referrer">Referring page (Not implemented)</h3>
|
||||||
<input type="text" id="referrer">
|
<input type="text" id="referrer">
|
||||||
<h3 data-i18n="title">Title</h3>
|
<h3 data-i18n="title" style="display: none;">Title</h3>
|
||||||
<input type="text" id="title">
|
<input type="text" id="title" style="display: none;">
|
||||||
<h3 data-i18n="description">Description</h3>
|
<h3 data-i18n="description" style="display: none;">Description</h3>
|
||||||
<input type="text" id="description">
|
<input type="text" id="description" style="display: none;">
|
||||||
<h3 data-i18n="mask">Mask</h3>
|
<h3 data-i18n="mask">Mask</h3>
|
||||||
<div id="maskOptions">
|
<div id="maskOptions">
|
||||||
<input type="text" id="mask">
|
<input type="text" id="mask">
|
||||||
@ -47,6 +47,18 @@
|
|||||||
<span data-i18n="useonlyonce">Use only once</span>
|
<span data-i18n="useonlyonce">Use only once</span>
|
||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
|
<h3 data-i18n="server">Server</h3>
|
||||||
|
<div id="serverOptions">
|
||||||
|
<input type="text" id="server">
|
||||||
|
<label id="cookies">
|
||||||
|
<input type="checkbox" id="cookiesCheck">
|
||||||
|
<span data-i18n="cookies">Send cookies to server</span>
|
||||||
|
</label>
|
||||||
|
<label id="serverOnce">
|
||||||
|
<input type="checkbox" id="serverOnceCheck">
|
||||||
|
<span data-i18n="useonlyonce">Use only once</span>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
<h3 data-i18n="subfolder"></h3>
|
<h3 data-i18n="subfolder"></h3>
|
||||||
<div id="subfolderOptions">
|
<div id="subfolderOptions">
|
||||||
<input type="text" id="subfolder" data-i18n="placeholder=subfolder.placeholder">
|
<input type="text" id="subfolder" data-i18n="placeholder=subfolder.placeholder">
|
||||||
|
@ -4,9 +4,10 @@
|
|||||||
|
|
||||||
import ModalDialog from "../uikit/lib/modal";
|
import ModalDialog from "../uikit/lib/modal";
|
||||||
import { _, localize } from "../lib/i18n";
|
import { _, localize } from "../lib/i18n";
|
||||||
|
import { Prefs } from "../lib/prefs";
|
||||||
// eslint-disable-next-line no-unused-vars
|
// eslint-disable-next-line no-unused-vars
|
||||||
import { Item, BaseItem } from "../lib/item";
|
import { Item, BaseItem } from "../lib/item";
|
||||||
import { MASK, SUBFOLDER } from "../lib/recentlist";
|
import { MASK, SUBFOLDER, SERVER } from "../lib/recentlist";
|
||||||
import { BatchGenerator } from "../lib/batches";
|
import { BatchGenerator } from "../lib/batches";
|
||||||
import { WindowState } from "./windowstate";
|
import { WindowState } from "./windowstate";
|
||||||
import { Dropdown } from "./dropdown";
|
import { Dropdown } from "./dropdown";
|
||||||
@ -15,12 +16,14 @@ import { hookButton } from "../lib/manager/renamer";
|
|||||||
import { runtime } from "../lib/browser";
|
import { runtime } from "../lib/browser";
|
||||||
import { $ } from "./winutil";
|
import { $ } from "./winutil";
|
||||||
import { validateSubFolder } from "../lib/util";
|
import { validateSubFolder } from "../lib/util";
|
||||||
|
import "./theme";
|
||||||
|
|
||||||
const PORT = runtime.connect(null, { name: "single" });
|
const PORT = runtime.connect(null, { name: "single" });
|
||||||
|
|
||||||
let ITEM: BaseItem;
|
let ITEM: BaseItem;
|
||||||
let Mask: Dropdown;
|
let Mask: Dropdown;
|
||||||
let Subfolder: Dropdown;
|
let Subfolder: Dropdown;
|
||||||
|
let OServer: Dropdown;
|
||||||
|
|
||||||
class BatchModalDialog extends ModalDialog {
|
class BatchModalDialog extends ModalDialog {
|
||||||
private readonly gen: BatchGenerator;
|
private readonly gen: BatchGenerator;
|
||||||
@ -130,6 +133,11 @@ async function downloadInternal(paused: boolean) {
|
|||||||
return displayError("error.invalidMask");
|
return displayError("error.invalidMask");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const server = OServer.value;
|
||||||
|
if (!server) {
|
||||||
|
throw new Error("error.invalidServer");
|
||||||
|
}
|
||||||
|
|
||||||
const subfolder = Subfolder.value.trim();
|
const subfolder = Subfolder.value.trim();
|
||||||
validateSubFolder(subfolder);
|
validateSubFolder(subfolder);
|
||||||
|
|
||||||
@ -198,6 +206,9 @@ async function downloadInternal(paused: boolean) {
|
|||||||
maskOnce: $<HTMLInputElement>("#maskOnceCheck").checked,
|
maskOnce: $<HTMLInputElement>("#maskOnceCheck").checked,
|
||||||
subfolder,
|
subfolder,
|
||||||
subfolderOnce: $<HTMLInputElement>("#subfolderOnceCheck").checked,
|
subfolderOnce: $<HTMLInputElement>("#subfolderOnceCheck").checked,
|
||||||
|
server,
|
||||||
|
serverOnce: $<HTMLInputElement>("#serverOnceCheck").checked,
|
||||||
|
cookies: $<HTMLInputElement>("#cookiesCheck").checked,
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
return null;
|
return null;
|
||||||
@ -214,9 +225,15 @@ function cancel() {
|
|||||||
|
|
||||||
async function init() {
|
async function init() {
|
||||||
await localize(document.documentElement);
|
await localize(document.documentElement);
|
||||||
await Promise.all([MASK.init(), SUBFOLDER.init()]);
|
await Promise.all([MASK.init(), SUBFOLDER.init(), SERVER.init()]);
|
||||||
Mask = new Dropdown("#mask", MASK.values);
|
Mask = new Dropdown("#mask", MASK.values);
|
||||||
Subfolder = new Dropdown("#subfolder", SUBFOLDER.values);
|
Subfolder = new Dropdown("#subfolder", SUBFOLDER.values);
|
||||||
|
OServer = new Dropdown("#server", SERVER.values);
|
||||||
|
Prefs.get("cookies").then(checked=>{
|
||||||
|
if ($<HTMLInputElement>("#cookiesCheck").checked != !!checked) {
|
||||||
|
$<HTMLInputElement>("#cookiesCheck").click();
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
addEventListener("DOMContentLoaded", async function dom() {
|
addEventListener("DOMContentLoaded", async function dom() {
|
||||||
|
112
windows/theme.ts
Normal file
@ -0,0 +1,112 @@
|
|||||||
|
/* eslint-disable no-magic-numbers */
|
||||||
|
"use strict";
|
||||||
|
// License: MIT
|
||||||
|
|
||||||
|
import { PrefWatcher } from "../lib/prefs";
|
||||||
|
import { theme } from "../lib/browser";
|
||||||
|
import { memoize } from "../lib/memoize";
|
||||||
|
|
||||||
|
const resolveColor = memoize(function(color) {
|
||||||
|
try {
|
||||||
|
const el = document.createElement("div");
|
||||||
|
el.style.backgroundColor = color;
|
||||||
|
el.style.display = "none";
|
||||||
|
document.body.appendChild(el);
|
||||||
|
try {
|
||||||
|
const resolved = window.getComputedStyle(el, null).backgroundColor;
|
||||||
|
return resolved;
|
||||||
|
}
|
||||||
|
finally {
|
||||||
|
document.body.removeChild(el);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch {
|
||||||
|
return undefined;
|
||||||
|
}
|
||||||
|
}, 10, 1);
|
||||||
|
|
||||||
|
export const THEME = new class Theme extends PrefWatcher {
|
||||||
|
public systemDark: boolean;
|
||||||
|
|
||||||
|
public themeDark?: boolean;
|
||||||
|
|
||||||
|
constructor() {
|
||||||
|
super("theme", "default");
|
||||||
|
if (theme && theme.onUpdated) {
|
||||||
|
theme.onUpdated.addListener(this.onThemeUpdated.bind(this));
|
||||||
|
theme.getCurrent().then((theme: any) => this.onThemeUpdated({theme}));
|
||||||
|
}
|
||||||
|
this.themeDark = undefined;
|
||||||
|
const query = window.matchMedia("(prefers-color-scheme: dark)");
|
||||||
|
this.systemDark = query.matches;
|
||||||
|
query.addListener(e => {
|
||||||
|
this.systemDark = e.matches;
|
||||||
|
this.recalculate();
|
||||||
|
});
|
||||||
|
this.recalculate();
|
||||||
|
}
|
||||||
|
|
||||||
|
get dark() {
|
||||||
|
if (this.value === "dark") {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (this.value === "light") {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (typeof this.themeDark === "undefined") {
|
||||||
|
return this.systemDark;
|
||||||
|
}
|
||||||
|
return this.themeDark;
|
||||||
|
}
|
||||||
|
|
||||||
|
changed(prefs: any, key: string, value: any) {
|
||||||
|
const rv = super.changed(prefs, key, value);
|
||||||
|
this.recalculate();
|
||||||
|
return rv;
|
||||||
|
}
|
||||||
|
|
||||||
|
onThemeUpdated({theme}: {theme: any}) {
|
||||||
|
try {
|
||||||
|
if (!theme) {
|
||||||
|
this.themeDark = undefined;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const {colors} = theme;
|
||||||
|
if (!colors) {
|
||||||
|
this.themeDark = undefined;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const color = resolveColor(
|
||||||
|
colors.toolbar || colors.popup || colors.ntp_background);
|
||||||
|
if (!color) {
|
||||||
|
this.themeDark = undefined;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const pieces = color.match(/^rgba?\((\d+),\s*(\d+),\s*(\d+)(?:,\s*(\d+(?:\.\d+)?))?\)$/);
|
||||||
|
if (!pieces) {
|
||||||
|
this.themeDark = undefined;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const r = parseInt(pieces[1], 10);
|
||||||
|
const g = parseInt(pieces[2], 10);
|
||||||
|
const b = parseInt(pieces[3], 10);
|
||||||
|
// HSP (Highly Sensitive Poo) equation from
|
||||||
|
// http://alienryderflex.com/hsp.html
|
||||||
|
const hsp = Math.sqrt(
|
||||||
|
0.299 * (r * r) +
|
||||||
|
0.587 * (g * g) +
|
||||||
|
0.114 * (b * b)
|
||||||
|
);
|
||||||
|
|
||||||
|
this.themeDark = hsp < 128;
|
||||||
|
}
|
||||||
|
finally {
|
||||||
|
this.recalculate();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
recalculate() {
|
||||||
|
document.documentElement.classList[this.dark ? "add" : "remove"]("dark");
|
||||||
|
}
|
||||||
|
}();
|
@ -2,7 +2,7 @@
|
|||||||
// License: MIT
|
// License: MIT
|
||||||
|
|
||||||
export function $<T extends HTMLElement>(
|
export function $<T extends HTMLElement>(
|
||||||
q: string, el?: HTMLElement | DocumentFragment): T {
|
q: string, el?: HTMLElement | DocumentFragment | Document): T {
|
||||||
if (!el) {
|
if (!el) {
|
||||||
el = document;
|
el = document;
|
||||||
}
|
}
|
||||||
|