Compare commits

..

No commits in common. "master" and "v4.2.1" have entirely different histories.

91 changed files with 2161 additions and 4768 deletions

View File

@ -1,6 +1,6 @@
---
name: Bug report
about: Create a report to help us improve DownThemAll!
about: Create a report to help us improve
title: ''
labels: ''
assignees: ''
@ -8,9 +8,9 @@ assignees: ''
---
**Desktop (please complete the following information):**
- OS: [e.g. Windows 10, macOS, Linux (distribution, desktop environment)]
- Browser and version: [e.g. Firefox 42, Chrome 70, Opera 15, Seamonkey 2.16]
- DownThemAll! version: [e.g. 4.2, 3.0, latest]
- OS: [e.g. iOS]
- Browser [e.g. chrome, safari]
- Version [e.g. 22]
**Describe the bug**
A clear and concise description of what the bug is.

View File

@ -1,6 +1,6 @@
---
name: Feature request
about: Suggest a feature or an idea for DownThemAll!
about: Suggest an idea for this project
title: ''
labels: ''
assignees: ''

View File

@ -1,5 +1,5 @@
![DownThemAll!](https://raw.githubusercontent.com/downthemall/downthemall/master/style/icon128.png)
![DownThemAll!](https://raw.githubusercontent.com/downthemall/downthemall/master/style/icon96.png)
# DownThemAll! WE
@ -31,59 +31,28 @@ If you would like to help out translating DTA, please see our [translation guide
## Development
### Requirements
- [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)
### Setup
You will want to `yarn` the development dependencies such as webpack first.
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`.
Afterwards, 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.
Please note: You have to run `yarn watch` or `yarn build` (at least once) as it builds the actual script bundles.
Please note: You have to run `yarn watch` (at least once) as it builds the actual script bundles.
### Running in Firefox
### 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.
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.
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).
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).
### Running in Chrome/Chromium/etc
### Chrome
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.
### 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
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.

View File

@ -19,8 +19,6 @@
"pl": "Polski [pl]",
"pt": "Português (Brasil) [pt]",
"ru": "Русский [ru]",
"sv": "Svenska (SV) [sv]",
"tr": "Türkçe TR) [tr]",
"zh_CN": "中文(简体) [zh_CN]",
"zh_TW": "正體中文 (TW) [zh_TW]"
}
"zh_CN": "简体中文 [zh_CN]",
"zh_TW": "正體中文 [zh_TW]"
}

View File

@ -321,7 +321,7 @@
},
"extensionDescription": {
"message": "أداة التنزيل لبحور من الروابط، داخل متصفحك",
"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"
"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"
},
"fastfiltering": {
"message": "ترشيح سريع",
@ -657,22 +657,6 @@
"message": "حاوِل البحث عن الروابط في نص موقع الوِب (أبطأ)",
"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": {
"message": "واجهة المستخدم",
"description": "Preferences/General; group text"
@ -1297,4 +1281,4 @@
"message": "ألغاها المستخدم",
"description": "Error message"
}
}
}

View File

@ -232,27 +232,27 @@
"description": "Download (verb/action); e.g. in single and select buttons"
},
"dta_regular": {
"message": "TraitorousDownloading!",
"message": "DownThemAll!",
"description": "Regular dta action; Menu text"
},
"dta_regular_all": {
"message": "TraitorousDownloading! всички раздели",
"message": "DownThemAll! всички раздели",
"description": "Menu text"
},
"dta_regular_image": {
"message": "Запазване на изображението с TraitorousDownloading!",
"message": "Запазване на изображението с DownThemAll!",
"description": "Menu text"
},
"dta_regular_link": {
"message": "Запазване на връзката с TraitorousDownloading!",
"message": "Запазване на връзката с DownThemAll!",
"description": "Menu text"
},
"dta_regular_media": {
"message": "Запазване на медията с TraitorousDownloading!",
"message": "Запазване на медията с DownThemAll!",
"description": "Menu text"
},
"dta_regular_selection": {
"message": "Запазване на избраното с TraitorousDownloading!",
"message": "Запазване на избраното с DownThemAll!",
"description": "Menu text"
},
"dta_turbo": {
@ -321,7 +321,7 @@
},
"extensionDescription": {
"message": "Диспечер за масови изтегляния за вашият браузър",
"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"
"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"
},
"fastfiltering": {
"message": "Бързо филтриране",
@ -450,7 +450,7 @@
}
},
"manager_title": {
"message": "TraitorousDownloading! Диспечер",
"message": "DownThemAll! Диспечер",
"description": "Window/tab title"
},
"mask": {
@ -486,7 +486,7 @@
"description": "Action for moving a download up"
},
"nagging_message": {
"message": "До момента са добавени $DOWNLOADS$ изтегляния с TraitorousDownloading! Като редовен потребител може да искате да обмислите дарение за подпомагане на по-нататъшното развитие. Благодаря!",
"message": "До момента са добавени $DOWNLOADS$ изтегляния с DownThemAll! Като редовен потребител може да искате да обмислите дарение за подпомагане на по-нататъшното развитие. Благодаря!",
"description": "Donation nagging message; displayed as a notification bar in manager",
"placeholders": {
"downloads": {
@ -566,7 +566,7 @@
"description": "Menu text; Preferences"
},
"prefs_title": {
"message": "TraitorousDownloading! Предпочитания",
"message": "DownThemAll! Предпочитания",
"description": "Window/tab title; Preferences"
},
"pref_add_paused": {
@ -574,11 +574,11 @@
"description": "Preferences/General"
},
"pref_button_type": {
"message": "TraitorousDownloading! бутон:",
"message": "DownThemAll! бутон:",
"description": "label"
},
"pref_button_type_dta": {
"message": "TraitorousDownloading! избор",
"message": "DownThemAll! избор",
"description": "label"
},
"pref_button_type_manager": {
@ -642,7 +642,7 @@
"description": "pref text"
},
"pref_retry_time": {
"message": "Нов опит на всеки (в минути)",
"message": "Опит на всеки (в минути)",
"description": "pref text"
},
"pref_show_urls": {
@ -657,22 +657,6 @@
"message": "Опит за намиране на връзки в текста на уебсайта (по-бавно)",
"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": {
"message": "Потребителски интерфейс",
"description": "Preferences/General; group text"
@ -1026,7 +1010,7 @@
"description": "Menu text; select context"
},
"select_title": {
"message": "TraitorousDownloading! Избиране на изтегляния",
"message": "DownThemAll! Избиране на изтегляния",
"description": "Title of the select window"
},
"SERVER_BAD_CONTENT": {
@ -1070,7 +1054,7 @@
"description": "Header text; single window"
},
"single_title": {
"message": "TraitorousDownloading! добавяне на връзка",
"message": "DownThemAll! добавяне на връзка",
"description": "Title of single window"
},
"sizeB": {

View File

@ -191,22 +191,6 @@
"message": "Smazat",
"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": {
"message": "Popis",
"description": "Description (keep it short); e.g. the description column in select"
@ -232,27 +216,27 @@
"description": "Download (verb/action); e.g. in single and select buttons"
},
"dta_regular": {
"message": "TraitorousDownloading!",
"message": "DownThemAll!",
"description": "Regular dta action; Menu text"
},
"dta_regular_all": {
"message": "TraitorousDownloading! - Všechny záložky",
"message": "DownThemAll! - Všechny záložky",
"description": "Menu text"
},
"dta_regular_image": {
"message": "Stáhnout obrázek pomocí TraitorousDownloading!",
"message": "Stáhnout obrázek pomocí DownThemAll!",
"description": "Menu text"
},
"dta_regular_link": {
"message": "Stáhnout odkaz pomocí TraitorousDownloading!",
"message": "Stáhnout odkaz pomocí DownThemAll!",
"description": "Menu text"
},
"dta_regular_media": {
"message": "Stáhnout média pomocí TraitorousDownloading!",
"message": "Stáhnout média pomocí DownThemAll!",
"description": "Menu text"
},
"dta_regular_selection": {
"message": "Stáhnout vybrané pomocí TraitorousDownloading!",
"message": "Stáhnout vybrané pomocí DownThemAll!",
"description": "Menu text"
},
"dta_turbo": {
@ -291,37 +275,13 @@
"message": "Neplatná URL adresa",
"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": {
"message": "Nic není vybráno",
"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": {
"message": "Správce stahování pro Váš prohlížeč",
"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"
"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"
},
"fastfiltering": {
"message": "Rychlé filtrování",
@ -371,10 +331,6 @@
"message": "Vynutit spuštění",
"description": "Menu text"
},
"import": {
"message": "Importovat ze souboru",
"description": "menu text"
},
"information_title": {
"message": "Informace",
"description": "Used in message boxes"
@ -450,7 +406,7 @@
}
},
"manager_title": {
"message": "TraitorousDownloading! Manažer",
"message": "DownThemAll! Manažer",
"description": "Window/tab title"
},
"mask": {
@ -486,7 +442,7 @@
"description": "Action for moving a download up"
},
"nagging_message": {
"message": "Již bylo stáhnuto $DOWNLOADS$ souborů pomocí TraitorousDownloading! Jako častý uživatel byste mohl/a podpořit další vývoj darem. Děkujeme!",
"message": "Již bylo stáhnuto $DOWNLOADS$ souborů pomocí DownThemAll! 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",
"placeholders": {
"downloads": {
@ -566,33 +522,13 @@
"description": "Menu text; Preferences"
},
"prefs_title": {
"message": "Nastavení TraitorousDownloading!",
"message": "Nastavení DownThemAll!",
"description": "Window/tab title; Preferences"
},
"pref_add_paused": {
"message": "Přidávat nová stahování pozastavená",
"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": {
"message": "Souběžná stahování",
"description": "Preferences/Network"
@ -601,6 +537,10 @@
"message": "Zobrazit oznámení po dokončení fronty stahování",
"description": "Preferences/General"
},
"pref_global_turbo": {
"message": "Tlačítho na liště je OneClick!",
"description": "Preferences/General"
},
"pref_hide_context": {
"message": "Nezobrazovat v kontextové nabídce",
"description": "Preferences/General"
@ -609,12 +549,8 @@
"message": "Manažer",
"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": {
"message": "Zobrazovat popisky v záložkách Manažera",
"message": "Zobrazovat popisky v záložkách Manažeru",
"description": "Preferences/General"
},
"pref_netglobal": {
@ -622,7 +558,7 @@
"description": "Preferences/General; group text"
},
"pref_open_manager_on_queue": {
"message": "Otevřít záložku Manažera po zařazení stahování do fronty",
"message": "Otevřít záložku Manažeru po zařazení stahování do fronty",
"description": "Preferences/General"
},
"pref_queueing": {
@ -637,42 +573,14 @@
"message": "Odebrat chybějící stahování po restartu",
"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": {
"message": "Zobrazit URL adresy místo názvů souborů",
"description": "Preferences/General"
},
"pref_sounds": {
"message": "Přehrát zvuky",
"description": "checkbox text"
},
"pref_text_links": {
"message": "Vyhledat odkazy v textu stránky (pomalejší)",
"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": {
"message": "Uživatelské rozhraní",
"description": "Preferences/General; group text"
@ -987,20 +895,6 @@
"message": "Pokračovat",
"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": {
"message": "Probíhá",
"description": "Status text"
@ -1026,7 +920,7 @@
"description": "Menu text; select context"
},
"select_title": {
"message": "TraitorousDownloading! - Vyberte soubory ke stažení",
"message": "DownThemAll! - Vyberte soubory ke stažení",
"description": "Title of the select window"
},
"SERVER_BAD_CONTENT": {
@ -1049,18 +943,6 @@
"message": "Nastavit masku přejmenování",
"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": {
"message": "Jsou podporována dávková stahování, například:",
"description": "Header text; single window"
@ -1070,7 +952,7 @@
"description": "Header text; single window"
},
"single_title": {
"message": "TraitorousDownloading! - Přidat odkaz",
"message": "DownThemAll! - Přidat odkaz",
"description": "Title of single window"
},
"sizeB": {
@ -1241,14 +1123,6 @@
"message": "Nová stahování nebudou spuštěna",
"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": {
"message": "Popisek",
"description": "Column text; Title label (short)"
@ -1292,9 +1166,5 @@
"useonlyonce": {
"message": "Použít pouze jednou",
"description": "Label for Use-Once checkboxes"
},
"USER_CANCELED": {
"message": "Zrušeno uživatelem",
"description": "Error message"
}
}

View File

@ -80,7 +80,7 @@
"description": "Error message when an input field is empty but has to have a value"
},
"change_later_reminder": {
"message": "Du kan altid ændre dette valg under indstillinger",
"message": "Du kan ændre denne indstillinger under Indstillinger senere",
"description": "Checkbox label text for decision confirmations"
},
"check_selected_items": {
@ -232,27 +232,27 @@
"description": "Download (verb/action); e.g. in single and select buttons"
},
"dta_regular": {
"message": "TraitorousDownloading!",
"message": "DownThemAll!",
"description": "Regular dta action; Menu text"
},
"dta_regular_all": {
"message": "TraitorousDownloading! - alle faner",
"message": "DownThemAll! - alle faner",
"description": "Menu text"
},
"dta_regular_image": {
"message": "Gem billede med TraitorousDownloading!",
"message": "Gem billede med DownThemAll!",
"description": "Menu text"
},
"dta_regular_link": {
"message": "Gem link med TraitorousDownloading!",
"message": "Gem link med DownThemAll!",
"description": "Menu text"
},
"dta_regular_media": {
"message": "Gem medie med TraitorousDownloading!",
"message": "Gem medie med DownThemAll!",
"description": "Menu text"
},
"dta_regular_selection": {
"message": "Gem valgte med TraitorousDownloading!",
"message": "Gem valgte med DownThemAll!",
"description": "Menu text"
},
"dta_turbo": {
@ -321,7 +321,7 @@
},
"extensionDescription": {
"message": "\"The Mass Downloader\" til din browser",
"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"
"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"
},
"fastfiltering": {
"message": "Hurtigfilter",
@ -450,7 +450,7 @@
}
},
"manager_title": {
"message": "TraitorousDownloading! Manager",
"message": "DownThemAll! Manager",
"description": "Window/tab title"
},
"mask": {
@ -486,7 +486,7 @@
"description": "Action for moving a download up"
},
"nagging_message": {
"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!",
"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!",
"description": "Donation nagging message; displayed as a notification bar in manager",
"placeholders": {
"downloads": {
@ -566,7 +566,7 @@
"description": "Menu text; Preferences"
},
"prefs_title": {
"message": "TraitorousDownloading! indstillinger",
"message": "DownThemAll! indstillinger",
"description": "Window/tab title; Preferences"
},
"pref_add_paused": {
@ -574,11 +574,11 @@
"description": "Preferences/General"
},
"pref_button_type": {
"message": "TraitorousDownloading! knap:",
"message": "DownThemAll! knap:",
"description": "label"
},
"pref_button_type_dta": {
"message": "TraitorousDownloading! markering",
"message": "DownThemAll! markering",
"description": "label"
},
"pref_button_type_manager": {
@ -657,22 +657,6 @@
"message": "Forsøg at finde links via hjemmesidens tekstindhold (langsommere)",
"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": {
"message": "Brugergrænseflade",
"description": "Preferences/General; group text"
@ -732,7 +716,7 @@
"description": "Action for removing complete downloads"
},
"remove_complete_downloads_question": {
"message": "Vil du rydde op i alle færdiggjorte downloads?",
"message": "Vil du rydde alle færdiggjorte downloads?",
"description": "Messagebox text"
},
"remove_complete_filter_downloads_question": {
@ -786,7 +770,7 @@
"description": "Menu text"
},
"remove_downloads_title": {
"message": "Er du sikker på, du vil rydde op i downloads?",
"message": "Er du sikker på, du vil rydde downloads?",
"description": "Messagebox title; manager"
},
"remove_download_question": {
@ -816,7 +800,7 @@
"description": "Menu text"
},
"remove_missing_downloads_question": {
"message": "Vil du rydde op i alle manglende downloads?",
"message": "Vil du rydde alle manglende downloads?",
"description": "Messagebox text"
},
"remove_paused_downloads": {
@ -1026,7 +1010,7 @@
"description": "Menu text; select context"
},
"select_title": {
"message": "TraitorousDownloading! - vælg dine downloads",
"message": "DownThemAll! - vælg dine downloads",
"description": "Title of the select window"
},
"SERVER_BAD_CONTENT": {
@ -1070,7 +1054,7 @@
"description": "Header text; single window"
},
"single_title": {
"message": "TraitorousDownloading! - tilføj et link",
"message": "DownThemAll! - tilføj et link",
"description": "Title of single window"
},
"sizeB": {

View File

@ -1,7 +1,7 @@
{
"language": {
"message": "Deutsch",
"description": "Language Name in your language"
"description": "Lanuage Name in your language"
},
"language_code": {
"message": "de",
@ -24,7 +24,7 @@
"description": "Checkbox label"
},
"add_paused_question": {
"message": "Diese Entscheidung speichern und neue Downloads von jetzt an immer pausiert hinzufügen?",
"message": "Soll sich diese Entscheidung gemerkt werden und neue Downloads von jetzt an immer pausiert hinzugefügt werden?",
"description": "Messagebox text"
},
"add_paused_title": {
@ -52,15 +52,15 @@
"description": "Messagebox info text for batch confirmations"
},
"batch_question": {
"message": "Als Batch oder als einfachen Download hinzufügen?",
"message": "Als Batch oder einfachen Download hinzufügen?",
"description": "Messagebox info text for batch confirmations"
},
"batch_single": {
"message": "Einzelner Download",
"message": "Einfacher Download",
"description": "Button text for batch confirmation"
},
"batch_title": {
"message": "Batch",
"message": "Batch Download",
"description": "Messagebox title for batch confirmations"
},
"cancel": {
@ -84,7 +84,7 @@
"description": "Checkbox label text for decision confirmations"
},
"check_selected_items": {
"message": "markierte Einträge auswählen",
"message": "Ausgewählte Einträge markieren",
"description": "Menu text"
},
"colConnections": {
@ -228,31 +228,31 @@
"description": "Download (noun); e.g. Download column in select"
},
"download_verb": {
"message": "Herunterladen",
"message": "Download",
"description": "Download (verb/action); e.g. in single and select buttons"
},
"dta_regular": {
"message": "TraitorousDownloading!",
"message": "DownThemAll!",
"description": "Regular dta action; Menu text"
},
"dta_regular_all": {
"message": "TraitorousDownloading! - Alle Tabs",
"message": "DownThemAll! - Alle Tabs",
"description": "Menu text"
},
"dta_regular_image": {
"message": "Bild mit TraitorousDownloading! speichern",
"message": "Bild mit DownThemAll! speichern",
"description": "Menu text"
},
"dta_regular_link": {
"message": "Link mit TraitorousDownloading! speichern",
"message": "Link mit DownThemAll! speichern",
"description": "Menu text"
},
"dta_regular_media": {
"message": "Medium mit TraitorousDownloading! speichern",
"message": "Medium mit DownThemAll! speichern",
"description": "Menu text"
},
"dta_regular_selection": {
"message": "Auswahl mit TraitorousDownloading! speichern",
"message": "Auswahl mit DownThemAll! speichern",
"description": "Menu text"
},
"dta_turbo": {
@ -321,14 +321,14 @@
},
"extensionDescription": {
"message": "Der Massen-Downloader für Deinen Browser",
"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"
"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"
},
"fastfiltering": {
"message": "Schnelles Filtern",
"description": "Label for Fast Filtering input"
},
"fastfilter_placeholder": {
"message": "Platzhalter-Ausdruck oder regulärer Ausdruck",
"message": "Platzhalter-Ausdruck oder Regular Expression",
"description": "Placeholder for fastfilter inputs"
},
"FILE_FAILED": {
@ -348,11 +348,11 @@
"description": "Message box label"
},
"filter_label": {
"message": "Filter-Bezeichnung",
"message": "Filter-Titel",
"description": "Message box label"
},
"filter_types": {
"message": "Filter-Typen",
"message": "Filter Typen",
"description": "Message box label"
},
"filter_type_link": {
@ -360,11 +360,11 @@
"description": "Message box checkbox label"
},
"filter_type_media": {
"message": "Medien-Filter",
"message": "Medien Filter",
"description": "Message box checkbox label"
},
"finishing": {
"message": "Beende",
"message": "Beenden",
"description": "Status text"
},
"force_start": {
@ -416,7 +416,7 @@
"description": "Short for PageUp-key"
},
"limited_to": {
"message": "Begrenzen auf",
"message": "Begrenzt auf",
"description": "Label text; used in prefs/network"
},
"links": {
@ -450,7 +450,7 @@
}
},
"manager_title": {
"message": "TraitorousDownloading! Manager",
"message": "DownThemAll! Manager",
"description": "Window/tab title"
},
"mask": {
@ -486,7 +486,7 @@
"description": "Action for moving a download up"
},
"nagging_message": {
"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!",
"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!",
"description": "Donation nagging message; displayed as a notification bar in manager",
"placeholders": {
"downloads": {
@ -566,7 +566,7 @@
"description": "Menu text; Preferences"
},
"prefs_title": {
"message": "TraitorousDownloading! Einstellungen",
"message": "DownThemAll! Einstellungen",
"description": "Window/tab title; Preferences"
},
"pref_add_paused": {
@ -574,11 +574,11 @@
"description": "Preferences/General"
},
"pref_button_type": {
"message": "TraitorousDownloading! Button:",
"message": "DownThemAll! Button:",
"description": "label"
},
"pref_button_type_dta": {
"message": "TraitorousDownloading! Auswahl",
"message": "DownThemAll! Auswahl",
"description": "label"
},
"pref_button_type_manager": {
@ -614,7 +614,7 @@
"description": "checkbox text"
},
"pref_manager_tooltip": {
"message": "Tooltips im Manager-Tab anzeigen",
"message": "Keine Tooltips im Manager-Tab anzeigen",
"description": "Preferences/General"
},
"pref_netglobal": {
@ -622,7 +622,7 @@
"description": "Preferences/General; group text"
},
"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"
},
"pref_queueing": {
@ -642,7 +642,7 @@
"description": "pref text"
},
"pref_retry_time": {
"message": "Erneut versuchen alle (in Minuten)",
"message": "Neuversuch Alle (in Minuten)",
"description": "pref text"
},
"pref_show_urls": {
@ -650,7 +650,7 @@
"description": "Preferences/General"
},
"pref_sounds": {
"message": "Töne abspielen",
"message": "Sounds abspielen",
"description": "checkbox text"
},
"pref_text_links": {
@ -658,7 +658,7 @@
"description": "Preferences/General"
},
"pref_theme": {
"message": "Farbschema:",
"message": "Theme:",
"description": "label text"
},
"pref_theme_dark": {
@ -724,7 +724,7 @@
"description": "Menu text"
},
"remove_batch_downloads_question": {
"message": "Wirklich alle Downloads des aktuellen Batch entfernen?",
"message": "Wirklich alle Downloads vom aktuellen Batch entfernen?",
"description": "Messagebox text"
},
"remove_complete_downloads": {
@ -754,7 +754,7 @@
"description": "Menu text"
},
"remove_domain_complete_downloads_question": {
"message": "Wirklich alle fertigen Downloads der Domain \"$DOMAIN$\" entfernen?",
"message": "Wirklich alle fertigen Downloads mit Domain \"$DOMAIN$\" entfernen?",
"description": "Messagebox text",
"placeholders": {
"domain": {
@ -768,7 +768,7 @@
"description": "Menu text"
},
"remove_domain_downloads_question": {
"message": "Wirklich alle Downloads der Domain \"$DOMAIN$\" entfernen?",
"message": "Wirklich alle Downloads mit Domain \"$DOMAIN$\" entfernen?",
"description": "Messagebox text",
"placeholders": {
"domain": {
@ -812,11 +812,11 @@
}
},
"remove_missing": {
"message": "Nicht vorhandene Downloads entfernen",
"message": "Fehlende Downloads entfernen",
"description": "Menu text"
},
"remove_missing_downloads_question": {
"message": "Wirklich alle nicht vorhandene Downloads entfernen?",
"message": "Wirklich alle fehlenden Downloads entfernen?",
"description": "Messagebox text"
},
"remove_paused_downloads": {
@ -844,15 +844,15 @@
"description": "UI for renaming; currently unused"
},
"renamer_batch": {
"message": "Batch-Nummer",
"message": "Batch Nummer",
"description": "Mask text; see mask button"
},
"renamer_d": {
"message": "Datum: hinzugefügt - Tag",
"message": "Datum hinzugefügt - Tag",
"description": "Mask text; see mask button"
},
"renamer_date": {
"message": "Datum: hinzugefügt",
"message": "Datum hinzugefügt",
"description": "Mask text; see mask button"
},
"renamer_domain": {
@ -864,7 +864,7 @@
"description": "Mask text; see mask button"
},
"renamer_hh": {
"message": "Datum: hinzugefügt - Stunde",
"message": "Datum hinzugefügt - Stunde",
"description": "Mask text; see mask button"
},
"renamer_host": {
@ -872,7 +872,7 @@
"description": "Mask text; see mask button"
},
"renamer_idx": {
"message": "Fortlaufende Nummer des Batch",
"message": "Fortlaufende Nummer im Batch",
"description": "Mask text; see mask button"
},
"renamer_info": {
@ -880,11 +880,11 @@
"description": "Mask text; see mask button; do NOT translate any mentions of \"flat\"!"
},
"renamer_m": {
"message": "Datum: hinzugefügt - Monat",
"message": "Datum hinzugefügt - Monat",
"description": "Mask text; see mask button"
},
"renamer_mm": {
"message": "Datum: hinzugefügt - Minute",
"message": "Datum hinzugefügt - Minute",
"description": "Mask text; see mask button"
},
"renamer_name": {
@ -892,7 +892,7 @@
"description": "Mask text; see mask button"
},
"renamer_num": {
"message": "Alias für \"Batch\"",
"message": "Alias für \"batch\"",
"description": "Mask text; see mask button"
},
"renamer_qstring": {
@ -932,7 +932,7 @@
"description": "Mask text; see mask button"
},
"renamer_ss": {
"message": "Datum: hinzugefügt - Sekunde",
"message": "Datum hinzugefügt - Sekunde",
"description": "Mask text; see mask button"
},
"renamer_subdirs": {
@ -956,7 +956,7 @@
"description": "Mask text; see mask button"
},
"renamer_y": {
"message": "Datum: hinzugefügt - Jahr",
"message": "Datum hinzugefügt - Jahr",
"description": "Mask text; see mask button"
},
"renmask": {
@ -976,11 +976,11 @@
"description": "Messagebox text; pref/General"
},
"reset_layouts": {
"message": "Änderungen der Benutzeroberfläche zurücksetzen",
"message": "Benutzeroberflächenanpassungen zurücksetzen",
"description": "Button text; pref/General"
},
"reset_layouts_done": {
"message": "Alle gemerkten Anpassungen der Benutzeroberfläche zurückgesetzt! Tabs/Fenster müssen neu geladen werden.",
"message": "Alle gemerkten Benutzeroberflächenanpassungen zurückgesetzt! Tabs/Fenster müssen neu geladen werden.",
"description": "Messagebox text; pref/General"
},
"resume_download": {
@ -988,7 +988,7 @@
"description": "Action for resuming a download"
},
"retrying": {
"message": "neuer Versuch",
"message": "Neuversuch",
"description": "Status text"
},
"retrying_error": {
@ -1026,7 +1026,7 @@
"description": "Menu text; select context"
},
"select_title": {
"message": "TraitorousDownloading! - Downloads auswählen",
"message": "DownThemAll! - Downloads auswählen",
"description": "Title of the select window"
},
"SERVER_BAD_CONTENT": {
@ -1046,23 +1046,23 @@
"description": "Error message"
},
"set_mask": {
"message": "Umbenennungsmaske festlegen",
"message": "Umbenennungsmaske setzen",
"description": "Menu text; select window"
},
"set_mask_text": {
"message": "Neue Umbenennungsmaske festlegen",
"message": "Neue Umbenennungsmaske setzen",
"description": "dialog text"
},
"set_referrer": {
"message": "Referrer festlegen",
"message": "Referrer setzen",
"description": "menu text"
},
"set_referrer_text": {
"message": "Neuen Referrer festlegen",
"message": "Neuen Referrer setzen",
"description": "dialog text"
},
"single_batchexamples": {
"message": "Stapelverarbeitung (Batch) wird unterstützt, z.B.:",
"message": "Batches sind unterstützt, z.B.:",
"description": "Header text; single window"
},
"single_header": {
@ -1070,7 +1070,7 @@
"description": "Header text; single window"
},
"single_title": {
"message": "TraitorousDownloading! - Link hinzufügen",
"message": "DownThemAll! - Link hinzufügen",
"description": "Title of single window"
},
"sizeB": {
@ -1297,4 +1297,4 @@
"message": "Benutzerabbruch",
"description": "Error message"
}
}
}

View File

@ -305,7 +305,7 @@
},
"extensionDescription": {
"message": "Ο Διαχειριστής Πολλαπλών Λήψεων για τον φυλλομετρητή σας.",
"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"
"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"
},
"fastfiltering": {
"message": "Γρήγορο Φιλτράρισμα",

View File

@ -253,27 +253,27 @@
},
"dta_regular": {
"description": "Regular dta action; Menu text",
"message": "TraitorousDownloading!"
"message": "DownThemAll!"
},
"dta_regular_all": {
"description": "Menu text",
"message": "TraitorousDownloading! - All Tabs"
"message": "DownThemAll! - All Tabs"
},
"dta_regular_image": {
"description": "Menu text",
"message": "Save Image with TraitorousDownloading!"
"message": "Save Image with DownThemAll!"
},
"dta_regular_link": {
"description": "Menu text",
"message": "Save Link with TraitorousDownloading!"
"message": "Save Link with DownThemAll!"
},
"dta_regular_media": {
"description": "Menu text",
"message": "Save Media with TraitorousDownloading!"
"message": "Save Media with DownThemAll!"
},
"dta_regular_selection": {
"description": "Menu text",
"message": "Save Selection with TraitorousDownloading!"
"message": "Save Selection with DownThemAll!"
},
"dta_turbo": {
"description": "OneClick! action; Menu text",
@ -303,10 +303,6 @@
"description": "Error message; single/select window",
"message": "Invalid Renaming Mask"
},
"error_invalidServer": {
"description": "Error message; single/select window",
"message": "Invalid server URL"
},
"error_invalidReferrer": {
"description": "Error message; single window",
"message": "Invalid Referrer"
@ -344,7 +340,7 @@
"message": "Export As Text"
},
"extensionDescription": {
"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",
"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",
"message": "The Mass Downloader for your browser"
},
"fastfilter_placeholder": {
@ -479,7 +475,7 @@
},
"manager_title": {
"description": "Window/tab title",
"message": "TraitorousDownloading! Manager"
"message": "DownThemAll! Manager"
},
"mask": {
"description": "Renaming mask (short); used in e.g. select",
@ -515,7 +511,7 @@
},
"nagging_message": {
"description": "Donation nagging message; displayed as a notification bar in manager",
"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!",
"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!",
"placeholders": {
"downloads": {
"content": "$1",
@ -587,11 +583,11 @@
},
"pref_button_type": {
"description": "label",
"message": "TraitorousDownloading! button:"
"message": "DownThemAll! button:"
},
"pref_button_type_dta": {
"description": "label",
"message": "TraitorousDownloading! selection"
"message": "DownThemAll! selection"
},
"pref_button_type_manager": {
"description": "label",
@ -637,10 +633,6 @@
"description": "Preferences/General",
"message": "Open the Manager tab after queuing some downloads"
},
"pref_cookies": {
"description": "Preferences/General",
"message": "Send cookies to the download server"
},
"pref_queue_notification": {
"description": "Preferences/General",
"message": "Show a notification when queuing new downloads"
@ -703,7 +695,7 @@
},
"prefs_title": {
"description": "Window/tab title; Preferences",
"message": "TraitorousDownloading! Preferences"
"message": "DownThemAll! Preferences"
},
"queue_finished": {
"description": "Notification text",
@ -729,7 +721,7 @@
},
"referrer": {
"description": "Label for \"Referrer\"",
"message": "Referrer (Not implemented)"
"message": "Referrer"
},
"remember": {
"description": "Checkbox text for confirmation, e.g. when removing a download in manager",
@ -929,7 +921,7 @@
},
"renamer_ref": {
"description": "Mask text; see mask button",
"message": "Referrer (Not implemented)"
"message": "Referrer"
},
"renamer_refdomain": {
"description": "Mask text; see mask button",
@ -1055,11 +1047,7 @@
},
"select_title": {
"description": "Title of the select window",
"message": "TraitorousDownloading! - Select your Downloads"
},
"server": {
"description": "Downloader Server",
"message": "Server"
"message": "DownThemAll! - Select your Downloads"
},
"set_mask": {
"description": "Menu text; select window",
@ -1087,7 +1075,7 @@
},
"single_title": {
"description": "Title of single window",
"message": "TraitorousDownloading! - Add a link"
"message": "DownThemAll! - Add a link"
},
"sizeB": {
"description": "Size formatting; bytes",
@ -1308,9 +1296,5 @@
"useonlyonce": {
"description": "Label for Use-Once checkboxes",
"message": "Use Once"
},
"cookies": {
"description": "Label for cookie checkboxes",
"message": "Send cookies to server"
}
}
}

View File

@ -232,27 +232,27 @@
"description": "Download (verb/action); e.g. in single and select buttons"
},
"dta_regular": {
"message": "TraitorousDownloading!",
"message": "DownThemAll!",
"description": "Regular dta action; Menu text"
},
"dta_regular_all": {
"message": "TraitorousDownloading! - Todas las pestañas",
"message": "DownThemAll! - Todas las pestañas",
"description": "Menu text"
},
"dta_regular_image": {
"message": "Guardar imagen con TraitorousDownloading!",
"message": "Guardar imagen con DownThemAll!",
"description": "Menu text"
},
"dta_regular_link": {
"message": "Guardar enlace con TraitorousDownloading!",
"message": "Guardar enlace con DownThemAll!",
"description": "Menu text"
},
"dta_regular_media": {
"message": "Guardar multimedia con TraitorousDownloading!",
"message": "Guardar multimedia con DownThemAll!",
"description": "Menu text"
},
"dta_regular_selection": {
"message": "Guardar selección con TraitorousDownloading!",
"message": "Guardar selección con DownThemAll!",
"description": "Menu text"
},
"dta_turbo": {
@ -321,7 +321,7 @@
},
"extensionDescription": {
"message": "El programa de descargas masivas para su navegador",
"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"
"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"
},
"fastfiltering": {
"message": "Filtro rápido",
@ -450,7 +450,7 @@
}
},
"manager_title": {
"message": "Gestor TraitorousDownloading!",
"message": "Gestor DownThemAll!",
"description": "Window/tab title"
},
"mask": {
@ -486,7 +486,7 @@
"description": "Action for moving a download up"
},
"nagging_message": {
"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!",
"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!",
"description": "Donation nagging message; displayed as a notification bar in manager",
"placeholders": {
"downloads": {
@ -566,7 +566,7 @@
"description": "Menu text; Preferences"
},
"prefs_title": {
"message": "Preferencias de TraitorousDownloading!",
"message": "Preferencias de DownThemAll!",
"description": "Window/tab title; Preferences"
},
"pref_add_paused": {
@ -574,11 +574,11 @@
"description": "Preferences/General"
},
"pref_button_type": {
"message": "Botón TraitorousDownloading!:",
"message": "Botón DownThemAll!:",
"description": "label"
},
"pref_button_type_dta": {
"message": "Selección TraitorousDownloading!",
"message": "Selección DownThemAll!",
"description": "label"
},
"pref_button_type_manager": {
@ -1026,7 +1026,7 @@
"description": "Menu text; select context"
},
"select_title": {
"message": "TraitorousDownloading! - Seleccionar sus descargas",
"message": "DownThemAll! - Seleccionar sus descargas",
"description": "Title of the select window"
},
"SERVER_BAD_CONTENT": {
@ -1070,7 +1070,7 @@
"description": "Header text; single window"
},
"single_title": {
"message": "TraitorousDownloading! - Añadir un enlace",
"message": "DownThemAll! - Añadir un enlace",
"description": "Title of single window"
},
"sizeB": {

View File

@ -232,27 +232,27 @@
"description": "Download (verb/action); e.g. in single and select buttons"
},
"dta_regular": {
"message": "TraitorousDownloading!",
"message": "DownThemAll!",
"description": "Regular dta action; Menu text"
},
"dta_regular_all": {
"message": "TraitorousDownloading! - Kõik kaardid",
"message": "DownThemAll! - Kõik kaardid",
"description": "Menu text"
},
"dta_regular_image": {
"message": "Salvesta pilt TraitorousDownloading!-iga",
"message": "Salvesta pilt DownThemAll!-iga",
"description": "Menu text"
},
"dta_regular_link": {
"message": "Salvesta link TraitorousDownloading!-iga",
"message": "Salvesta link DownThemAll!-iga",
"description": "Menu text"
},
"dta_regular_media": {
"message": "Salvesta meedia TraitorousDownloading!-iga",
"message": "Salvesta meedia DownThemAll!-iga",
"description": "Menu text"
},
"dta_regular_selection": {
"message": "Salvesta valik TraitorousDownloading!-iga",
"message": "Salvesta valik DownThemAll!-iga",
"description": "Menu text"
},
"dta_turbo": {
@ -321,7 +321,7 @@
},
"extensionDescription": {
"message": "Massallalaadija sinu veebilehitsejale",
"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"
"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"
},
"fastfiltering": {
"message": "Kiirfiltreerimine",
@ -450,7 +450,7 @@
}
},
"manager_title": {
"message": "TraitorousDownloading! haldur",
"message": "DownThemAll! haldur",
"description": "Window/tab title"
},
"mask": {
@ -486,7 +486,7 @@
"description": "Action for moving a download up"
},
"nagging_message": {
"message": "Sa oled praeguseks TraitorousDownloading!-iga lisanud $DOWNLOADS$ allalaadimist! Tavakasutajana võiksid edasise arendamise toetamiseks kaaluda annetamist. Täname!",
"message": "Sa oled praeguseks DownThemAll!-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",
"placeholders": {
"downloads": {
@ -566,7 +566,7 @@
"description": "Menu text; Preferences"
},
"prefs_title": {
"message": "TraitorousDownloading! eelistused",
"message": "DownThemAll! eelistused",
"description": "Window/tab title; Preferences"
},
"pref_add_paused": {
@ -574,11 +574,11 @@
"description": "Preferences/General"
},
"pref_button_type": {
"message": "TraitorousDownloading! nupp:",
"message": "DownThemAll! nupp:",
"description": "label"
},
"pref_button_type_dta": {
"message": "TraitorousDownloading! valik",
"message": "DownThemAll! valik",
"description": "label"
},
"pref_button_type_manager": {
@ -1026,7 +1026,7 @@
"description": "Menu text; select context"
},
"select_title": {
"message": "TraitorousDownloading! - Vali oma allalaadimised",
"message": "DownThemAll! - Vali oma allalaadimised",
"description": "Title of the select window"
},
"SERVER_BAD_CONTENT": {
@ -1070,7 +1070,7 @@
"description": "Header text; single window"
},
"single_title": {
"message": "TraitorousDownloading! - Lingi lisamine",
"message": "DownThemAll! - Lingi lisamine",
"description": "Title of single window"
},
"sizeB": {

View File

@ -232,27 +232,27 @@
"description": "Download (verb/action); e.g. in single and select buttons"
},
"dta_regular": {
"message": "TraitorousDownloading!",
"message": "DownThemAll!",
"description": "Regular dta action; Menu text"
},
"dta_regular_all": {
"message": "TraitorousDownloading! - Tous les onglets",
"message": "DownThemAll! - Tous les onglets",
"description": "Menu text"
},
"dta_regular_image": {
"message": "Enregistrer l'image avec TraitorousDownloading!",
"message": "Enregistrer l'image avec DownThemAll!",
"description": "Menu text"
},
"dta_regular_link": {
"message": "Enregistrer le lien avec TraitorousDownloading!",
"message": "Enregistrer le lien avec DownThemAll!",
"description": "Menu text"
},
"dta_regular_media": {
"message": "Enregistrer le média avec TraitorousDownloading!",
"message": "Enregistrer le média avec DownThemAll!",
"description": "Menu text"
},
"dta_regular_selection": {
"message": "Enregistrer la sélection avec TraitorousDownloading!",
"message": "Enregistrer la sélection avec DownThemAll!",
"description": "Menu text"
},
"dta_turbo": {
@ -321,7 +321,7 @@
},
"extensionDescription": {
"message": "Le gestionnaire de téléchargements pour votre navigateur",
"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"
"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"
},
"fastfiltering": {
"message": "Filtrage rapide",
@ -450,7 +450,7 @@
}
},
"manager_title": {
"message": "TraitorousDownloading! Gestionnaire",
"message": "DownThemAll! Gestionnaire",
"description": "Window/tab title"
},
"mask": {
@ -486,7 +486,7 @@
"description": "Action for moving a download up"
},
"nagging_message": {
"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!",
"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!",
"description": "Donation nagging message; displayed as a notification bar in manager",
"placeholders": {
"downloads": {
@ -566,7 +566,7 @@
"description": "Menu text; Preferences"
},
"prefs_title": {
"message": "Paramètres TraitorousDownloading!",
"message": "Paramètres DownThemAll!",
"description": "Window/tab title; Preferences"
},
"pref_add_paused": {
@ -574,11 +574,11 @@
"description": "Preferences/General"
},
"pref_button_type": {
"message": "Bouton TraitorousDownloading!",
"message": "Bouton DownThemAll!",
"description": "label"
},
"pref_button_type_dta": {
"message": "Sélection TraitorousDownloading!",
"message": "Sélection DownthemAll!",
"description": "label"
},
"pref_button_type_manager": {
@ -657,22 +657,6 @@
"message": "Tenter de trouver des liens dans le texte du site (lent)",
"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": {
"message": "Interface utilisateur",
"description": "Preferences/General; group text"
@ -1026,7 +1010,7 @@
"description": "Menu text; select context"
},
"select_title": {
"message": "TraitorousDownloading! - Selectionner vos téléchargements",
"message": "DownThemAll! - Selectionner vos téléchargements",
"description": "Title of the select window"
},
"SERVER_BAD_CONTENT": {
@ -1070,7 +1054,7 @@
"description": "Header text; single window"
},
"single_title": {
"message": "TraitorousDownloading! - Ajouter un lien",
"message": "DownThemAll! - Ajouter un lien",
"description": "Title of single window"
},
"sizeB": {

View File

@ -232,27 +232,27 @@
"description": "Download (verb/action); e.g. in single and select buttons"
},
"dta_regular": {
"message": "TraitorousDownloading!",
"message": "DownThemAll!",
"description": "Regular dta action; Menu text"
},
"dta_regular_all": {
"message": "TraitorousDownloading! - Összes lap",
"message": "DownThemAll! - Összes lap",
"description": "Menu text"
},
"dta_regular_image": {
"message": "Kép mentése a TraitorousDownloading-al!",
"message": "Kép mentése a DownThemAll-al!",
"description": "Menu text"
},
"dta_regular_link": {
"message": "Hivatkozás mentése TraitorousDownloading-al",
"message": "Hivatkozás mentése DownThemAll-al",
"description": "Menu text"
},
"dta_regular_media": {
"message": "Média mentése TraitorousDownloading-al",
"message": "Média mentése DownThemAll-al",
"description": "Menu text"
},
"dta_regular_selection": {
"message": "Kiválasztás mentése TraitorousDownloading-al",
"message": "Kiválasztás mentése DownThemAll-al",
"description": "Menu text"
},
"dta_turbo": {
@ -321,7 +321,7 @@
},
"extensionDescription": {
"message": "A tömeges letöltő a böngésződ számára",
"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"
"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"
},
"fastfiltering": {
"message": "Gyors szűrés",
@ -450,7 +450,7 @@
}
},
"manager_title": {
"message": "TraitorousDownloading! kezelő",
"message": "DownThemAll! kezelő",
"description": "Window/tab title"
},
"mask": {
@ -486,7 +486,7 @@
"description": "Action for moving a download up"
},
"nagging_message": {
"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!",
"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!",
"description": "Donation nagging message; displayed as a notification bar in manager",
"placeholders": {
"downloads": {
@ -566,7 +566,7 @@
"description": "Menu text; Preferences"
},
"prefs_title": {
"message": "TraitorousDownloading! beállításai",
"message": "DownThemAll! beállításai",
"description": "Window/tab title; Preferences"
},
"pref_add_paused": {
@ -574,11 +574,11 @@
"description": "Preferences/General"
},
"pref_button_type": {
"message": "TraitorousDownloading gomb:",
"message": "DownThemAll gomb:",
"description": "label"
},
"pref_button_type_dta": {
"message": "TraitorousDownloading választás",
"message": "DownThemAll választás",
"description": "label"
},
"pref_button_type_manager": {
@ -657,22 +657,6 @@
"message": "Keress hivatkozásokat a honlap szövegében (lassabb)",
"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": {
"message": "Felhasználói felület",
"description": "Preferences/General; group text"
@ -1026,7 +1010,7 @@
"description": "Menu text; select context"
},
"select_title": {
"message": "TraitorousDownloading! - Válaszd ki a letöltéseidet",
"message": "DownThemAll! - Válaszd ki a letöltéseidet",
"description": "Title of the select window"
},
"SERVER_BAD_CONTENT": {
@ -1070,7 +1054,7 @@
"description": "Header text; single window"
},
"single_title": {
"message": "TraitorousDownloading! - Adj hozzá egy hivatkozást",
"message": "DownThemAll! - Adj hozzá egy hivatkozást",
"description": "Title of single window"
},
"sizeB": {

View File

@ -216,23 +216,23 @@
"description": "Download (verb/action); e.g. in single and select buttons"
},
"dta_regular_all": {
"message": "TraitorousDownloading - Semua Tab",
"message": "DownThemAll - Semua Tab",
"description": "Menu text"
},
"dta_regular_image": {
"message": "Simpan Gambar menggunakan TraitorousDownloading!",
"message": "Simpan Gambar menggunakan DownThemAll!",
"description": "Menu text"
},
"dta_regular_link": {
"message": "Simpan Tautan menggunakan TraitorousDownloading!",
"message": "Simpan Tautan menggunakan DownThemAll!",
"description": "Menu text"
},
"dta_regular_media": {
"message": "Simpan Media menggunakan TraitorousDownloading!",
"message": "Simpan Media menggunakan DownThemAll!",
"description": "Menu text"
},
"dta_regular_selection": {
"message": "Simpan Pilihan menggunakan TraitorousDownloading!",
"message": "Simpan Pilihan menggunakan DownThemAll!",
"description": "Menu text"
},
"dta_turbo_all": {
@ -297,7 +297,7 @@
},
"extensionDescription": {
"message": "Pengunduh Masal untuk browser anda",
"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"
"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"
},
"fastfiltering": {
"message": "Penyaringan Cepat",
@ -398,7 +398,7 @@
}
},
"manager_title": {
"message": "Pengelola TraitorousDownloading!",
"message": "Pengelola DownThemAll!",
"description": "Window/tab title"
},
"mask_default": {
@ -426,7 +426,7 @@
"description": "Action for moving a download up"
},
"nagging_message": {
"message": "Sejauh ini Anda telah menambahkan $DOWNLOADS$ unduhan menggunakan TraitorousDownloading! Sebagai penggunan setia, silakan berdonasi untuk mendukung pengembangan lebih lanjut. Terima Kasih!",
"message": "Sejauh ini Anda telah menambahkan $DOWNLOADS$ unduhan menggunakan DownThemAll! Sebagai penggunan setia, silakan berdonasi untuk mendukung pengembangan lebih lanjut. Terima Kasih!",
"description": "Donation nagging message; displayed as a notification bar in manager",
"placeholders": {
"downloads": {
@ -498,7 +498,7 @@
"description": "Menu text; Preferences"
},
"prefs_title": {
"message": "Preferensi TraitorousDownloading!",
"message": "Preferensi DownThemAll!",
"description": "Window/tab title; Preferences"
},
"pref_add_paused": {
@ -506,11 +506,11 @@
"description": "Preferences/General"
},
"pref_button_type": {
"message": "Tombol TraitorousDownloading!:",
"message": "Tombol DownThemAll!:",
"description": "label"
},
"pref_button_type_dta": {
"message": "Pilihan TraitorousDownloading!",
"message": "Pilihan DownThemAll!",
"description": "label"
},
"pref_button_type_manager": {
@ -926,7 +926,7 @@
"description": "Menu text; select context"
},
"select_title": {
"message": "TraitorousDownloading! - Pilih Unduhan Anda",
"message": "DownThemAll! - Pilih Unduhan Anda",
"description": "Title of the select window"
},
"SERVER_BAD_CONTENT": {
@ -970,7 +970,7 @@
"description": "Header text; single window"
},
"single_title": {
"message": "TraitorousDownloading! - Tambah tautan",
"message": "DownThemAll! - Tambah tautan",
"description": "Title of single window"
},
"sizes_huge": {

View File

@ -232,27 +232,27 @@
"description": "Download (verb/action); e.g. in single and select buttons"
},
"dta_regular": {
"message": "TraitorousDownloading!",
"message": "DownThemAll!",
"description": "Regular dta action; Menu text"
},
"dta_regular_all": {
"message": "TraitorousDownloading! - Tutte le schede",
"message": "DownThemAll! - Tutte le schede",
"description": "Menu text"
},
"dta_regular_image": {
"message": "Salva immagine con TraitorousDownloading!",
"message": "Salva immagine con DownThemAll!",
"description": "Menu text"
},
"dta_regular_link": {
"message": "Salva link con TraitorousDownloading!",
"message": "Salva link con DownThemAll!",
"description": "Menu text"
},
"dta_regular_media": {
"message": "Salva media con TraitorousDownloading!",
"message": "Salva media con DownThemAll!",
"description": "Menu text"
},
"dta_regular_selection": {
"message": "Salva selezione con TraitorousDownloading!",
"message": "Salva selezione con DownThemAll!",
"description": "Menu text"
},
"dta_turbo": {
@ -321,7 +321,7 @@
},
"extensionDescription": {
"message": "Il download manager di massa per il tuo browser",
"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"
"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"
},
"fastfiltering": {
"message": "Filtro Rapido",
@ -450,7 +450,7 @@
}
},
"manager_title": {
"message": "TraitorousDownloading! Manager",
"message": "DownThemAll! Manager",
"description": "Window/tab title"
},
"mask": {
@ -486,7 +486,7 @@
"description": "Action for moving a download up"
},
"nagging_message": {
"message": "Hai aggiunto $DOWNLOADS$ download a TraitorousDownloading! Come utente abituale potresti considerare una donazione per supportare lo sviluppo. Grazie!",
"message": "Hai aggiunto $DOWNLOADS$ download a DownThemAll! Come utente abituale potresti considerare una donazione per supportare lo sviluppo. Grazie!",
"description": "Donation nagging message; displayed as a notification bar in manager",
"placeholders": {
"downloads": {
@ -566,7 +566,7 @@
"description": "Menu text; Preferences"
},
"prefs_title": {
"message": "Preferenze di TraitorousDownloading!",
"message": "Preferenze di DownThemAll!",
"description": "Window/tab title; Preferences"
},
"pref_add_paused": {
@ -574,11 +574,11 @@
"description": "Preferences/General"
},
"pref_button_type": {
"message": "Pulsante TraitorousDownloading!:",
"message": "Pulsante DownThemAll!:",
"description": "label"
},
"pref_button_type_dta": {
"message": "Selezione TraitorousDownloading!",
"message": "Selezione DownThemAll!",
"description": "label"
},
"pref_button_type_manager": {
@ -1010,7 +1010,7 @@
"description": "Menu text; select context"
},
"select_title": {
"message": "TraitorousDownloading! - Seleziona i tuoi download",
"message": "DownThemAll! - Seleziona i tuoi download",
"description": "Title of the select window"
},
"SERVER_BAD_CONTENT": {
@ -1054,7 +1054,7 @@
"description": "Header text; single window"
},
"single_title": {
"message": "TraitorousDownloading! - Aggiungi un link",
"message": "DownThemAll! - Aggiungi un link",
"description": "Title of single window"
},
"sizeB": {

View File

@ -232,27 +232,27 @@
"description": "Download (verb/action); e.g. in single and select buttons"
},
"dta_regular": {
"message": "TraitorousDownloading!",
"message": "DownThemAll!",
"description": "Regular dta action; Menu text"
},
"dta_regular_all": {
"message": "TraitorousDownloading! - 全てのタブ",
"message": "DownThemAll! - 全てのタブ",
"description": "Menu text"
},
"dta_regular_image": {
"message": "画像をTraitorousDownloading! で保存する",
"message": "画像をDownThemAll! で保存する",
"description": "Menu text"
},
"dta_regular_link": {
"message": "リンク先をTraitorousDownloading! で保存する",
"message": "リンク先をDownThemAll! で保存する",
"description": "Menu text"
},
"dta_regular_media": {
"message": "メディアをTraitorousDownloading! で保存する",
"message": "メディアをDownThemAll! で保存する",
"description": "Menu text"
},
"dta_regular_selection": {
"message": "選択項目をTraitorousDownloading! で保存する",
"message": "選択項目をDownThemAll! で保存する",
"description": "Menu text"
},
"dta_turbo": {
@ -321,7 +321,7 @@
},
"extensionDescription": {
"message": "ブラウザ用マスダウンローダー",
"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"
"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"
},
"fastfiltering": {
"message": "高速フィルタリング",
@ -450,7 +450,7 @@
}
},
"manager_title": {
"message": "TraitorousDownloading! マネージャ",
"message": "DownThemAll! マネージャ",
"description": "Window/tab title"
},
"mask": {
@ -486,7 +486,7 @@
"description": "Action for moving a download up"
},
"nagging_message": {
"message": "これまでTraitorousDownloadingで$DOWNLOADS$ダウンロードを追加しました! 通常のユーザーとして、さらなる開発を支援するために寄付を検討することができます。 皆様のご協力、心よりお待ち致しております。",
"message": "これまでDownThemAllで$DOWNLOADS$ダウンロードを追加しました! 通常のユーザーとして、さらなる開発を支援するために寄付を検討することができます。 皆様のご協力、心よりお待ち致しております。",
"description": "Donation nagging message; displayed as a notification bar in manager",
"placeholders": {
"downloads": {
@ -566,7 +566,7 @@
"description": "Menu text; Preferences"
},
"prefs_title": {
"message": "TraitorousDownloading! 設定",
"message": "DownThemAll! 設定",
"description": "Window/tab title; Preferences"
},
"pref_add_paused": {
@ -574,7 +574,7 @@
"description": "Preferences/General"
},
"pref_button_type": {
"message": "TraitorousDownloading! アイコンクリック時:",
"message": "DownThemAll! アイコンクリック時:",
"description": "label"
},
"pref_button_type_dta": {
@ -654,7 +654,7 @@
"description": "checkbox text"
},
"pref_text_links": {
"message": "Webサイトの文字列からリンクを抽出する (但し、遅い)",
"message": "Webサイトの文字列リンクを抽出する (但し、遅い)",
"description": "Preferences/General"
},
"pref_theme": {
@ -1026,7 +1026,7 @@
"description": "Menu text; select context"
},
"select_title": {
"message": "TraitorousDownloading! - ダウンロードの選択",
"message": "DownThemAll! - ダウンロードの選択",
"description": "Title of the select window"
},
"SERVER_BAD_CONTENT": {
@ -1070,7 +1070,7 @@
"description": "Header text; single window"
},
"single_title": {
"message": "TraitorousDownloading! - リンクを追加",
"message": "DownThemAll! - リンクを追加",
"description": "Title of single window"
},
"sizeB": {

View File

@ -232,27 +232,27 @@
"description": "Download (verb/action); e.g. in single and select buttons"
},
"dta_regular": {
"message": "TraitorousDownloading!",
"message": "DownThemAll!",
"description": "Regular dta action; Menu text"
},
"dta_regular_all": {
"message": "TraitorousDownloading! - 모든 탭",
"message": "DownThemAll! - 모든 탭",
"description": "Menu text"
},
"dta_regular_image": {
"message": "이미지를 TraitorousDownloading!로 저장",
"message": "이미지를 DownThemAll!로 저장",
"description": "Menu text"
},
"dta_regular_link": {
"message": "링크를 TraitorousDownloading!로 저장",
"message": "링크를 DownThemAll!로 저장",
"description": "Menu text"
},
"dta_regular_media": {
"message": "미디어를 TraitorousDownloading!로 저장",
"message": "미디어를 DownThemAll!로 저장",
"description": "Menu text"
},
"dta_regular_selection": {
"message": "선택영역을 TraitorousDownloading!로 저장",
"message": "선택영역을 DownThemAll!로 저장",
"description": "Menu text"
},
"dta_turbo": {
@ -321,7 +321,7 @@
},
"extensionDescription": {
"message": "브라우저용 대량 다운로더",
"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"
"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"
},
"fastfiltering": {
"message": "빠른 필터링",
@ -450,7 +450,7 @@
}
},
"manager_title": {
"message": "TraitorousDownloading! 관리자",
"message": "DownThemAll! 관리자",
"description": "Window/tab title"
},
"mask": {
@ -486,7 +486,7 @@
"description": "Action for moving a download up"
},
"nagging_message": {
"message": "지금까지 TraitorousDownloading!로 $DOWNLOADS$ 다운로드를 추가하셨습니다. 일반 사용자로서 추가 개발을 지원하기 위해 기부를 고려할 수 있습니다. 감사합니다!",
"message": "지금까지 DownThemAll!로 $DOWNLOADS$ 다운로드를 추가하셨습니다. 일반 사용자로서 추가 개발을 지원하기 위해 기부를 고려할 수 있습니다. 감사합니다!",
"description": "Donation nagging message; displayed as a notification bar in manager",
"placeholders": {
"downloads": {
@ -566,7 +566,7 @@
"description": "Menu text; Preferences"
},
"prefs_title": {
"message": "TraitorousDownloading! 설정",
"message": "DownThemAll! 설정",
"description": "Window/tab title; Preferences"
},
"pref_add_paused": {
@ -574,11 +574,11 @@
"description": "Preferences/General"
},
"pref_button_type": {
"message": "TraitorousDownloading! 버튼:",
"message": "DownThemAll! 버튼:",
"description": "label"
},
"pref_button_type_dta": {
"message": "TraitorousDownloading! 선택",
"message": "DownThemAll! 선택",
"description": "label"
},
"pref_button_type_manager": {
@ -1010,7 +1010,7 @@
"description": "Menu text; select context"
},
"select_title": {
"message": "TraitorousDownloading! - 다운로드 선택",
"message": "DownThemAll! - 다운로드 선택",
"description": "Title of the select window"
},
"SERVER_BAD_CONTENT": {
@ -1054,7 +1054,7 @@
"description": "Header text; single window"
},
"single_title": {
"message": "TraitorousDownloading! - 링크 추가",
"message": "DownThemAll! - 링크 추가",
"description": "Title of single window"
},
"sizeB": {

View File

@ -232,27 +232,27 @@
"description": "Download (verb/action); e.g. in single and select buttons"
},
"dta_regular": {
"message": "TraitorousDownloading!",
"message": "DownThemAll!",
"description": "Regular dta action; Menu text"
},
"dta_regular_all": {
"message": "TraitorousDownloading! - Visoms kortelėms",
"message": "DownThemAll! - Visoms kortelėms",
"description": "Menu text"
},
"dta_regular_image": {
"message": "Išsaugoti vaizdą su TraitorousDownloading!",
"message": "Išsaugoti vaizdą su DownThemAll!",
"description": "Menu text"
},
"dta_regular_link": {
"message": "Išsaugoti nuorodą su TraitorousDownloading!",
"message": "Išsaugoti nuorodą su DownThemAll!",
"description": "Menu text"
},
"dta_regular_media": {
"message": "Išsaugoti media su TraitorousDownloading!",
"message": "Išsaugoti media su DownThemAll!",
"description": "Menu text"
},
"dta_regular_selection": {
"message": "Išsaugoti pažymėtą su TraitorousDownloading!",
"message": "Išsaugoti pažymėtą su DownThemAll!",
"description": "Menu text"
},
"dta_turbo": {
@ -321,7 +321,7 @@
},
"extensionDescription": {
"message": "Masinio parsisiuntimo programa jūsų naršyklėje",
"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"
"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"
},
"fastfiltering": {
"message": "Greitas filtravimas",
@ -450,7 +450,7 @@
}
},
"manager_title": {
"message": "TraitorousDownloading! menedžeris",
"message": "DownThemAll! menedžeris",
"description": "Window/tab title"
},
"mask": {
@ -486,7 +486,7 @@
"description": "Action for moving a download up"
},
"nagging_message": {
"message": "Iki šiol, naudodami TraitorousDownloading!, pridėjote $DOWNLOADS$ parsisiuntimų! Kaip paprastas vartotojas, galbūt norėsite apsvarstyti galimybę paaukoti tolimesnei plėtrai. Ačiū!",
"message": "Iki šiol, naudodami DownThemAll!, 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",
"placeholders": {
"downloads": {
@ -566,7 +566,7 @@
"description": "Menu text; Preferences"
},
"prefs_title": {
"message": "TraitorousDownloading! nuostatos",
"message": "DownThemAll! nuostatos",
"description": "Window/tab title; Preferences"
},
"pref_add_paused": {
@ -574,11 +574,11 @@
"description": "Preferences/General"
},
"pref_button_type": {
"message": "TraitorousDownloading! mygtukas:",
"message": "DownThemAll! mygtukas:",
"description": "label"
},
"pref_button_type_dta": {
"message": "TraitorousDownloading! pasirinkimas",
"message": "DownThemAll! pasirinkimas",
"description": "label"
},
"pref_button_type_manager": {
@ -1026,7 +1026,7 @@
"description": "Menu text; select context"
},
"select_title": {
"message": "TraitorousDownloading! - Pasirinkite parsisiuntimus",
"message": "DownThemAll! - Pasirinkite parsisiuntimus",
"description": "Title of the select window"
},
"SERVER_BAD_CONTENT": {
@ -1070,7 +1070,7 @@
"description": "Header text; single window"
},
"single_title": {
"message": "TraitorousDownloading! - Pridėti nuorodą",
"message": "DownThemAll! - Pridėti nuorodą",
"description": "Title of single window"
},
"sizeB": {

View File

@ -232,27 +232,27 @@
"description": "Download (verb/action); e.g. in single and select buttons"
},
"dta_regular": {
"message": "TraitorousDownloading!",
"message": "DownThemAll!",
"description": "Regular dta action; Menu text"
},
"dta_regular_all": {
"message": "TraitorousDownloading! - Alle Tabbladen",
"message": "DownThemAll! - Alle Tabbladen",
"description": "Menu text"
},
"dta_regular_image": {
"message": "Afbeelding opslaan met TraitorousDownloading!",
"message": "Afbeelding opslaan met DownThemAll!",
"description": "Menu text"
},
"dta_regular_link": {
"message": "Link opslaan met TraitorousDownloading!",
"message": "Link opslaan met DownThemAll!",
"description": "Menu text"
},
"dta_regular_media": {
"message": "Media opslaan met TraitorousDownloading!",
"message": "Media opslaan met DownThemAll!",
"description": "Menu text"
},
"dta_regular_selection": {
"message": "Selectie opslaan met TraitorousDownloading!",
"message": "Selectie opslaan met DownThemAll!",
"description": "Menu text"
},
"dta_turbo": {
@ -321,7 +321,7 @@
},
"extensionDescription": {
"message": "De bulkdownloader voor uw browser",
"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"
"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"
},
"fastfiltering": {
"message": "Snel filteren",
@ -450,7 +450,7 @@
}
},
"manager_title": {
"message": "TraitorousDownloading! beheerder",
"message": "DownThemAll! beheerder",
"description": "Window/tab title"
},
"mask": {
@ -486,7 +486,7 @@
"description": "Action for moving a download up"
},
"nagging_message": {
"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!",
"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!",
"description": "Donation nagging message; displayed as a notification bar in manager",
"placeholders": {
"downloads": {
@ -566,7 +566,7 @@
"description": "Menu text; Preferences"
},
"prefs_title": {
"message": "TraitorousDownloading! voorkeuren",
"message": "DownThemAll! voorkeuren",
"description": "Window/tab title; Preferences"
},
"pref_add_paused": {
@ -574,11 +574,11 @@
"description": "Preferences/General"
},
"pref_button_type": {
"message": "TraitorousDownloading! knop:",
"message": "DownThemAll! knop:",
"description": "label"
},
"pref_button_type_dta": {
"message": "TraitorousDownloading! selectie",
"message": "DownThemAll! selectie",
"description": "label"
},
"pref_button_type_manager": {
@ -657,22 +657,6 @@
"message": "Probeer links te vinden in de tekst van de website (langzamer)",
"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": {
"message": "Gebruikersinterface",
"description": "Preferences/General; group text"
@ -1026,7 +1010,7 @@
"description": "Menu text; select context"
},
"select_title": {
"message": "TraitorousDownloading! - Selecteer uw Downloads",
"message": "DownThemAll! - Selecteer uw Downloads",
"description": "Title of the select window"
},
"SERVER_BAD_CONTENT": {
@ -1070,7 +1054,7 @@
"description": "Header text; single window"
},
"single_title": {
"message": "TraitorousDownloading! - Link toevoegen",
"message": "DownThemAll! - Link toevoegen",
"description": "Title of single window"
},
"sizeB": {

View File

@ -156,7 +156,7 @@
"description": "Filter label for the Archives filter"
},
"deffilter_aud": {
"message": "Dźwięk (mp3, flac, wav, …)",
"message": "Audio (mp3, flac, wav, …)",
"description": "Filter label for the Audio filter"
},
"deffilter_bin": {
@ -232,27 +232,27 @@
"description": "Download (verb/action); e.g. in single and select buttons"
},
"dta_regular": {
"message": "TraitorousDownloading!",
"message": "DownThemAll!",
"description": "Regular dta action; Menu text"
},
"dta_regular_all": {
"message": "TraitorousDownloading! - Wszystkie zakładki",
"message": "DownThemAll! - Wszystkie zakładki",
"description": "Menu text"
},
"dta_regular_image": {
"message": "Zapisz Obraz z TraitorousDownloading!",
"message": "Zapisz Obraz z DownThemAll!",
"description": "Menu text"
},
"dta_regular_link": {
"message": "Zapisz Link z TraitorousDownloading!",
"message": "Zapisz Link z DownThemAll!",
"description": "Menu text"
},
"dta_regular_media": {
"message": "Zapisz Multimedia z TraitorousDownloading!",
"message": "Zapisz Multimedia z DownThemAll!",
"description": "Menu text"
},
"dta_regular_selection": {
"message": "Zapisz wybór z TraitorousDownloading!",
"message": "Zapisz wybór z DownThemAll!",
"description": "Menu text"
},
"dta_turbo": {
@ -321,7 +321,7 @@
},
"extensionDescription": {
"message": "Narzędzie do zbiorowego pobierania dla Twojej przeglądarki",
"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"
"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"
},
"fastfiltering": {
"message": "Szybkie filtrowanie",
@ -450,7 +450,7 @@
}
},
"manager_title": {
"message": "Menedżer TraitorousDownloading!",
"message": "Menedżer DownThemAll!",
"description": "Window/tab title"
},
"mask": {
@ -486,7 +486,7 @@
"description": "Action for moving a download up"
},
"nagging_message": {
"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!",
"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!",
"description": "Donation nagging message; displayed as a notification bar in manager",
"placeholders": {
"downloads": {
@ -566,7 +566,7 @@
"description": "Menu text; Preferences"
},
"prefs_title": {
"message": "Ustawienia TraitorousDownloading!",
"message": "Ustawienia DownThemAll!",
"description": "Window/tab title; Preferences"
},
"pref_add_paused": {
@ -574,11 +574,11 @@
"description": "Preferences/General"
},
"pref_button_type": {
"message": "Przycisk TraitorousDownloading!:",
"message": "Przycisk DownThemAll!:",
"description": "label"
},
"pref_button_type_dta": {
"message": "Wybór TraitorousDownloading!:",
"message": "Wybór DownThemAll!:",
"description": "label"
},
"pref_button_type_manager": {
@ -657,22 +657,6 @@
"message": "Spróbuj znaleźć linki w treści strony internetowej (wolniejsze)",
"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": {
"message": "Interfejs Użytkownika",
"description": "Preferences/General; group text"
@ -1026,7 +1010,7 @@
"description": "Menu text; select context"
},
"select_title": {
"message": "TraitorousDownloading! - Wybierz swoje pobierania",
"message": "DownThemAll! - Wybierz swoje pobierania",
"description": "Title of the select window"
},
"SERVER_BAD_CONTENT": {
@ -1070,7 +1054,7 @@
"description": "Header text; single window"
},
"single_title": {
"message": "TraitorousDownloading! - Dodaj link",
"message": "DownThemAll! - Dodaj link",
"description": "Title of single window"
},
"sizeB": {

View File

@ -232,27 +232,27 @@
"description": "Download (verb/action); e.g. in single and select buttons"
},
"dta_regular": {
"message": "TraitorousDownloading!",
"message": "DownThemAll!",
"description": "Regular dta action; Menu text"
},
"dta_regular_all": {
"message": "TraitorousDownloading! - Todas as abas",
"message": "DownThemAll! - Todas as abas",
"description": "Menu text"
},
"dta_regular_image": {
"message": "Salvar Imagem com o TraitorousDownloading!",
"message": "Salvar Imagem com o DownThemAll!",
"description": "Menu text"
},
"dta_regular_link": {
"message": "Salvar Link com o TraitorousDownloading!",
"message": "Salvar Link com o DownThemAll!",
"description": "Menu text"
},
"dta_regular_media": {
"message": "Salvar Mídia com o TraitorousDownloading!",
"message": "Salvar Mídia com o DownThemAll!",
"description": "Menu text"
},
"dta_regular_selection": {
"message": "Salvar Seleção com o TraitorousDownloading!",
"message": "Salvar Seleção com o DownThemAll!",
"description": "Menu text"
},
"dta_turbo": {
@ -321,7 +321,7 @@
},
"extensionDescription": {
"message": "A ferramenta de download em massa para o seu navegador",
"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"
"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"
},
"fastfiltering": {
"message": "Filtragem rápida",
@ -450,7 +450,7 @@
}
},
"manager_title": {
"message": "Gerenciador do TraitorousDownloading!",
"message": "Gerenciador do DownThemAll!",
"description": "Window/tab title"
},
"mask": {
@ -486,7 +486,7 @@
"description": "Action for moving a download up"
},
"nagging_message": {
"message": "Você já adicionou $DOWNLOADS$ downloads com TraitorousDownloading! Como usuário regular, você pode considerar uma doação para apoiar desenvolvimento adicional. Obrigado!",
"message": "Você já adicionou $DOWNLOADS$ downloads com DownThemAll! 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",
"placeholders": {
"downloads": {
@ -566,7 +566,7 @@
"description": "Menu text; Preferences"
},
"prefs_title": {
"message": "Preferências do TraitorousDownloading!",
"message": "Preferências do DownThemAll!",
"description": "Window/tab title; Preferences"
},
"pref_add_paused": {
@ -574,11 +574,11 @@
"description": "Preferences/General"
},
"pref_button_type": {
"message": "Botão TraitorousDownloading!",
"message": "Botão DownThemAll!",
"description": "label"
},
"pref_button_type_dta": {
"message": "Seleção do TraitorousDownloading!",
"message": "Seleção do DownThemAll!",
"description": "label"
},
"pref_button_type_manager": {
@ -1026,7 +1026,7 @@
"description": "Menu text; select context"
},
"select_title": {
"message": "TraitorousDownloading! - Selecione seus Downloads",
"message": "DownThemAll! - Selecione seus Downloads",
"description": "Title of the select window"
},
"SERVER_BAD_CONTENT": {
@ -1070,7 +1070,7 @@
"description": "Header text; single window"
},
"single_title": {
"message": "TraitorousDownloading! - Adicone um link",
"message": "DownThemAll! - Adicone um link",
"description": "Title of single window"
},
"sizeB": {

View File

@ -232,27 +232,27 @@
"description": "Download (verb/action); e.g. in single and select buttons"
},
"dta_regular": {
"message": "TraitorousDownloading!",
"message": "DownThemAll!",
"description": "Regular dta action; Menu text"
},
"dta_regular_all": {
"message": "TraitorousDownloading! - Все вкладки",
"message": "DownThemAll! - Все вкладки",
"description": "Menu text"
},
"dta_regular_image": {
"message": "Закачать изображение через TraitorousDownloading!",
"message": "Закачать изображение через DownThemAll!",
"description": "Menu text"
},
"dta_regular_link": {
"message": "Закачать ссылку через TraitorousDownloading!",
"message": "Закачать ссылку через DownThemAll!",
"description": "Menu text"
},
"dta_regular_media": {
"message": "Закачать медиа через TraitorousDownloading!",
"message": "Закачать медиа через DownThemAll!",
"description": "Menu text"
},
"dta_regular_selection": {
"message": "Закачать выделенное через TraitorousDownloading!",
"message": "Закачать выделенное через DownThemAll!",
"description": "Menu text"
},
"dta_turbo": {
@ -321,7 +321,7 @@
},
"extensionDescription": {
"message": "Универсальная качалка для вашего браузера",
"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"
"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"
},
"fastfiltering": {
"message": "Быстрый фильтр",
@ -450,7 +450,7 @@
}
},
"manager_title": {
"message": "TraitorousDownloading! Менеджер",
"message": "DownThemAll! Менеджер",
"description": "Window/tab title"
},
"mask": {
@ -486,7 +486,7 @@
"description": "Action for moving a download up"
},
"nagging_message": {
"message": "Добавлено $DOWNLOADS$ закачек через TraitorousDownloading! на текущий момент! Как постоянный пользователь подумайте над тем чтобы поддержать дальнейшую разработку. Спасибо!",
"message": "Добавлено $DOWNLOADS$ закачек через DownThemAll! на текущий момент! Как постоянный пользователь подумайте над тем чтобы поддержать дальнейшую разработку. Спасибо!",
"description": "Donation nagging message; displayed as a notification bar in manager",
"placeholders": {
"downloads": {
@ -566,7 +566,7 @@
"description": "Menu text; Preferences"
},
"prefs_title": {
"message": "Настройки TraitorousDownloading!",
"message": "Настройки DownThemAll!",
"description": "Window/tab title; Preferences"
},
"pref_add_paused": {
@ -574,11 +574,11 @@
"description": "Preferences/General"
},
"pref_button_type": {
"message": "Кнопка TraitorousDownloading!",
"message": "Кнопка DownThemAll!",
"description": "label"
},
"pref_button_type_dta": {
"message": "TraitorousDownloading! выделенного",
"message": "DownThemAll! выделенного",
"description": "label"
},
"pref_button_type_manager": {
@ -657,22 +657,6 @@
"message": "Пытаться обнаружить ссылки в тексте на сайте",
"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": {
"message": "Интерфейс пользователя",
"description": "Preferences/General; group text"
@ -1026,7 +1010,7 @@
"description": "Menu text; select context"
},
"select_title": {
"message": "TraitorousDownloading! - Выбрать ваши закачки",
"message": "DownThemAll! - Выбрать ваши закачки",
"description": "Title of the select window"
},
"SERVER_BAD_CONTENT": {
@ -1070,7 +1054,7 @@
"description": "Header text; single window"
},
"single_title": {
"message": "TraitorousDownloading! - Добавить ссылку",
"message": "DownThemAll! - Добавить ссылку",
"description": "Title of single window"
},
"sizeB": {

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -232,27 +232,27 @@
"description": "Download (verb/action); e.g. in single and select buttons"
},
"dta_regular": {
"message": "TraitorousDownloading!",
"message": "DownThemAll!",
"description": "Regular dta action; Menu text"
},
"dta_regular_all": {
"message": "TraitorousDownloading! - 全部标签页",
"message": "DownThemAll! - 全部标签页",
"description": "Menu text"
},
"dta_regular_image": {
"message": "用 TraitorousDownloading! 保存图片",
"message": "用 DownThemAll! 保存图片",
"description": "Menu text"
},
"dta_regular_link": {
"message": "用 TraitorousDownloading! 保存链接",
"message": "用 DownThemAll! 保存链接",
"description": "Menu text"
},
"dta_regular_media": {
"message": "用 TraitorousDownloading! 保存媒体",
"message": "用 DownThemAll! 保存媒体",
"description": "Menu text"
},
"dta_regular_selection": {
"message": "用 TraitorousDownloading! 保存选中项",
"message": "用 DownThemAll! 保存选中项",
"description": "Menu text"
},
"dta_turbo": {
@ -321,7 +321,7 @@
},
"extensionDescription": {
"message": "适用您浏览器的批量下载工具",
"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"
"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"
},
"fastfiltering": {
"message": "快速筛选",
@ -450,7 +450,7 @@
}
},
"manager_title": {
"message": "TraitorousDownloading! 管理器",
"message": "DownThemAll! 管理器",
"description": "Window/tab title"
},
"mask": {
@ -486,7 +486,7 @@
"description": "Action for moving a download up"
},
"nagging_message": {
"message": "您使用 TraitorousDownloading! 至今已经添加了 $DOWNLOADS$ 个下载。作为一名普通用户,您可以考虑捐助来支持一下开发。多谢!",
"message": "您使用 DownThemAll! 至今已经添加了 $DOWNLOADS$ 个下载。作为一名普通用户,您可以考虑捐助来支持一下开发。多谢!",
"description": "Donation nagging message; displayed as a notification bar in manager",
"placeholders": {
"downloads": {
@ -566,7 +566,7 @@
"description": "Menu text; Preferences"
},
"prefs_title": {
"message": "TraitorousDownloading! 首选项",
"message": "DownThemAll! 首选项",
"description": "Window/tab title; Preferences"
},
"pref_add_paused": {
@ -574,11 +574,11 @@
"description": "Preferences/General"
},
"pref_button_type": {
"message": "TraitorousDownloading! 按钮:",
"message": "DownThemAll! 按钮:",
"description": "label"
},
"pref_button_type_dta": {
"message": "TraitorousDownloading! 选择框",
"message": "DownThemAll! 选择框",
"description": "label"
},
"pref_button_type_manager": {
@ -657,22 +657,6 @@
"message": "尝试在网站文本中寻找链接(较慢)",
"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": {
"message": "用户界面",
"description": "Preferences/General; group text"
@ -1026,7 +1010,7 @@
"description": "Menu text; select context"
},
"select_title": {
"message": "TraitorousDownloading! - 选择您要下载的内容",
"message": "DownThemAll! - 选择您要下载的内容",
"description": "Title of the select window"
},
"SERVER_BAD_CONTENT": {
@ -1070,7 +1054,7 @@
"description": "Header text; single window"
},
"single_title": {
"message": "TraitorousDownloading! - 添加链接",
"message": "DownThemAll! - 添加链接",
"description": "Title of single window"
},
"sizeB": {
@ -1262,7 +1246,7 @@
"description": "Tooltip text; manager/downloads"
},
"tooltip_eta": {
"message": "剩余时间",
"message": "重命名",
"description": "Tooltip text; manager/downloads; Time"
},
"tooltip_from": {

View File

@ -232,27 +232,27 @@
"description": "Download (verb/action); e.g. in single and select buttons"
},
"dta_regular": {
"message": "TraitorousDownloading!",
"message": "DownThemAll!",
"description": "Regular dta action; Menu text"
},
"dta_regular_all": {
"message": "TraitorousDownloading!- 全部分頁",
"message": "DownThemAll!- 全部分頁",
"description": "Menu text"
},
"dta_regular_image": {
"message": "以 TraitorousDownloading! 儲存圖片",
"message": "以 DownThemAll! 儲存圖片",
"description": "Menu text"
},
"dta_regular_link": {
"message": "以 TraitorousDownloading! 下載連結",
"message": "以 DownThemAll! 下載連結",
"description": "Menu text"
},
"dta_regular_media": {
"message": "以 TraitorousDownloading! 儲存媒體檔案",
"message": "以 DownThemAll! 儲存媒體檔案",
"description": "Menu text"
},
"dta_regular_selection": {
"message": "以 TraitorousDownloading! 儲存選取項目",
"message": "以 DownThemAll! 儲存選取項目",
"description": "Menu text"
},
"dta_turbo": {
@ -321,7 +321,7 @@
},
"extensionDescription": {
"message": "為你瀏覽器而生的大量下載工具",
"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"
"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"
},
"fastfiltering": {
"message": "快速篩選",
@ -450,7 +450,7 @@
}
},
"manager_title": {
"message": "TraitorousDownloading!下載管理",
"message": "DownThemAll!下載管理",
"description": "Window/tab title"
},
"mask": {
@ -486,7 +486,7 @@
"description": "Action for moving a download up"
},
"nagging_message": {
"message": "目前已透過TraitorousDownloading! 加入 $DOWNLOADS$ 個下載您可以贊助我們支持更進一步的開發謝謝!",
"message": "目前已透過DownThemAll! 加入 $DOWNLOADS$ 個下載您可以贊助我們支持更進一步的開發謝謝!",
"description": "Donation nagging message; displayed as a notification bar in manager",
"placeholders": {
"downloads": {
@ -566,7 +566,7 @@
"description": "Menu text; Preferences"
},
"prefs_title": {
"message": "TraitorousDownloading!偏好設定",
"message": "DownThemAll!偏好設定",
"description": "Window/tab title; Preferences"
},
"pref_add_paused": {
@ -574,11 +574,11 @@
"description": "Preferences/General"
},
"pref_button_type": {
"message": "TraitorousDownloading! 按鈕:",
"message": "DownThemAll! 按鈕:",
"description": "label"
},
"pref_button_type_dta": {
"message": "TraitorousDownloading! 選取",
"message": "DownThemAll! 選取",
"description": "label"
},
"pref_button_type_manager": {
@ -657,22 +657,6 @@
"message": "試著從網頁文字尋找連結〈較慢〉",
"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": {
"message": "操作介面",
"description": "Preferences/General; group text"
@ -1026,7 +1010,7 @@
"description": "Menu text; select context"
},
"select_title": {
"message": "TraitorousDownloading!- 選擇下載",
"message": "DownThemAll!- 選擇下載",
"description": "Title of the select window"
},
"SERVER_BAD_CONTENT": {
@ -1070,7 +1054,7 @@
"description": "Header text; single window"
},
"single_title": {
"message": "TraitorousDownloading!- 新增連結",
"message": "DownThemAll!- 新增連結",
"description": "Title of single window"
},
"sizeB": {

475
changelog/index.html Normal file
View File

@ -0,0 +1,475 @@
<!doctype html>
<html lang="en">
<!-- License: Creative Commons Attribution-ShareAlike 4.0 International License -->
<head>
<meta charset="utf-8">
<title>DownThemAll! Changes</title>
<style>
@font-face {
font-family: "Reenie Beanie";
font-style: normal;
font-weight: 400;
font-display: block;
src: local("Reenie Beanie"), local("ReenieBeanie"),
url(res/ReenieBeanie-Regular.woff2) format("woff2");
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA,
U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215,
U+FEFF, U+FFFD;
}
:root {
--content-width: 1000px;
}
html,
body {
margin: 0;
padding: 0;
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Ubuntu",
"Helvetica Neue", sans-serif;
font-size: 12pt;
color: rgb(20, 20, 20);
background: white;
width: 100%;
height: 100%;
}
body {
display: grid;
background: white repeat-x url(res/background-tile.png);
grid-template-columns: 1fr [content] auto 1fr;
grid-template-rows: auto 1fr auto;
grid-template-areas:
". header ."
". content ."
"footer footer footer";
}
a {
color: rgb(30, 30, 70);
}
li {
list-style-type: circle;
}
nav {
max-width: var(--content-width);
grid-area: header;
display: flex;
box-sizing: border-box;
padding-right: 120px;
padding-top: 1em;
padding-left: 32px;
align-content: center;
align-items: baseline;
background: no-repeat top right url(res/halo.svg);
background-size: 120px;
min-height: 100px;
text-shadow: rgba(255, 255, 255, 0.8) 1px 3px 0px;
font-family: "Reenie Beanie", cursive;
}
nav h1,
nav h2 {
margin: 0;
margin-right: 1ex;
display: inline-block;
}
nav h1 {
font-size: 400%;
}
nav h2 {
font-size: 250%;
}
article {
max-width: var(--content-width);
grid-area: content;
box-sizing: border-box;
padding: 1ex 32px;
background: white;
border-bottom: 0;
border-radius: 20px;
border-bottom-left-radius: 0;
border-bottom-right-radius: 0;
}
h3 em {
display: inline-block;
padding-left: 1em;
font-size: 80%;
}
#paypal {
margin: 1em;
display: grid;
grid-template-columns: auto auto auto auto auto;
grid-row-gap: 1em;
grid-column-gap: 1em;
justify-content: center;
justify-items: center;
}
footer {
display: grid;
grid-template-columns: auto 1fr auto;
grid-column-gap: 2em;
padding: 2em 2em 1em 2em;
background: transparent center top repeat-x url(res/footerbg.png);
font-size: x-small;
color: gray;
grid-area: footer;
}
footer p {
margin: 0.3ex 0;
}
#logo {
width: 48px;
align-self: center;
opacity: 0.7;
filter: grayscale(90%);
}
@media only screen and (max-width: 750px) {
nav {
flex-direction: column;
margin-bottom: 1em;
padding-right: 120px;
}
nav h1 {
font-size: 275%;
}
nav h2 {
font-size: 220%;
}
#paypal {
grid-template-columns: auto auto;
}
#homepage {
display: none;
}
}
</style>
</head>
<body>
<nav>
<h1>DownThemAll!</h1>
<h2>Changes</h2>
</nav>
<article>
<h3>DownThemAll needs your support!</h3>
<section id="paypal">
<a href="https://www.paypal.me/NilsMaier/10" title="Donate €10" target="_blank">
<svg viewBox="0 0 300 72" width=110>
<rect x="1.5" y="1.5" width="297" height="69" ry="34.093" fill="#ffc439" fill-rule="evenodd" stroke="#dadce0"
stroke-dashoffset="89.999" stroke-linejoin="round" stroke-width="3" style="paint-order:normal" />
<g transform="translate(28.855)">
<path
d="m42.414 58.373 0.83858-5.284-1.868-0.04295h-8.9197l6.1988-38.991c0.01924-0.1177 0.08177-0.22746 0.17317-0.3054 0.09139-0.07794 0.20844-0.12089 0.3303-0.12089h15.04c4.993 0 8.4387 1.0307 10.238 3.0651 0.84339 0.95437 1.3805 1.9517 1.6403 3.0492 0.27258 1.1516 0.27739 2.5275 0.01122 4.2056l-0.01924 0.12248v1.0753l0.84339 0.474c0.71031 0.37379 1.2747 0.80167 1.7076 1.2916 0.72153 0.81599 1.1881 1.8531 1.3853 3.0826 0.20363 1.2645 0.13629 2.7693-0.19722 4.4728-0.38482 1.9596-1.0069 3.6664-1.8471 5.0629-0.77284 1.2868-1.7573 2.3541-2.9262 3.1812-1.116 0.78576-2.442 1.3822-3.9412 1.764-1.4527 0.37538-3.109 0.56467-4.9257 0.56467h-1.1705c-0.83698 0-1.6499 0.29904-2.2881 0.83507-0.63976 0.54717-1.0631 1.2948-1.1929 2.1123l-0.08819 0.47559-1.4815 9.3131-0.06734 0.34198c-0.01764 0.10816-0.0481 0.16224-0.093 0.19883-0.04008 0.0334-0.09781 0.05567-0.15393 0.05567z"
fill="#253b80" />
<path
d="m67.719 24.195c-0.0449 0.28472-0.0962 0.5758-0.15393 0.87484-1.9834 10.102-8.769 13.592-17.435 13.592h-4.4126c-1.0598 0-1.9529 0.7635-2.1181 1.8006l-2.2592 14.214-0.63976 4.029c-0.10743 0.68078 0.4217 1.2948 1.1144 1.2948h7.8262c0.92677 0 1.714-0.66806 1.8599-1.5747l0.07696-0.39447 1.4735-9.2765 0.0946-0.509c0.14431-0.90983 0.93318-1.5779 1.8599-1.5779h1.1705c7.5825 0 13.518-3.054 15.253-11.891 0.72474-3.6918 0.34954-6.7744-1.5681-8.9424-0.58043-0.65374-1.3004-1.1961-2.1421-1.6383z"
fill="#179bd7" />
<path
d="m65.644 23.374c-0.30304-0.08748-0.61571-0.16702-0.93639-0.23859-0.32228-0.06999-0.65259-0.13202-0.99251-0.1861-1.1897-0.19087-2.4933-0.28154-3.8899-0.28154h-11.788c-0.29022 0-0.566 0.06522-0.81293 0.18292-0.54355 0.25927-0.94761 0.76986-1.0454 1.395l-2.5077 15.757-0.07215 0.45969c0.16515-1.0371 1.0582-1.8006 2.1181-1.8006h4.4126c8.6664 0 15.452-3.4914 17.435-13.592 0.05933-0.29904 0.10903-0.59012 0.15393-0.87484-0.50187-0.26404-1.0454-0.48991-1.6307-0.68237-0.14431-0.04772-0.29342-0.09385-0.44414-0.13838z"
fill="#222d65" />
<path
d="m46.179 24.246c0.09781-0.62511 0.50187-1.1357 1.0454-1.3934 0.24853-0.11771 0.52271-0.18292 0.81293-0.18292h11.788c1.3966 0 2.7001 0.09066 3.8899 0.28154 0.33992 0.05408 0.67022 0.11612 0.99251 0.1861 0.32068 0.07158 0.63334 0.15111 0.93639 0.23859 0.15072 0.04454 0.29984 0.09067 0.44575 0.13679 0.58524 0.19246 1.1288 0.41992 1.6307 0.68237 0.59005-3.7332-0.0048-6.275-2.0395-8.5766-2.2432-2.5338-6.2918-3.6186-11.472-3.6186h-15.04c-1.0582 0-1.961 0.7635-2.1245 1.8022l-6.2645 39.392c-0.12346 0.7794 0.48262 1.4825 1.2747 1.4825h9.2853l2.3314-14.673z"
fill="#253b80" />
</g>
<g transform="matrix(1.004 0 0 .996 4.7854 0)" fill="#009cde" stroke="#003087" stroke-width="1px"
aria-label="10">
<path
d="m173.05 47.333h7.9336v-22.517l-8.1436 1.6801v-6.1135l8.0969-1.6801h8.5403v28.631h7.9336v6.2069h-24.361z" />
<path
d="m225.67 36.086q0-6.5335-1.2367-9.1936-1.2134-2.6834-4.1068-2.6834t-4.1301 2.6834q-1.2367 2.6601-1.2367 9.1936 0 6.6035 1.2367 9.3103 1.2367 2.7067 4.1301 2.7067 2.8701 0 4.1068-2.7067t1.2367-9.3103zm8.9836 0.07q0 8.6569-3.7334 13.37-3.7334 4.6901-10.594 4.6901-6.8835 0-10.617-4.6901-3.7334-4.7135-3.7334-13.37 0-8.6803 3.7334-13.37 3.7334-4.7135 10.617-4.7135 6.8602 0 10.594 4.7135 3.7334 4.6901 3.7334 13.37z" />
</g>
<g transform="matrix(1.004 0 0 .996 4.7854 0)" fill="#003087" aria-label="€">
<path
d="m153.83 51.627q-2.2167 1.2834-4.6435 1.9367-2.4034 0.65335-5.0168 0.65335-6.1135 0-10.314-3.0334-4.1768-3.0568-5.9268-8.7736h-5.0635l2.0534-4.5501h2.2867q-0.0233-0.32668-0.0467-0.67669 0-0.37334 0-1.0267 0-0.67669 0-1.05 0.0233-0.37334 0.0467-0.72336h-4.3401l2.0534-4.5501h3.0101q1.7967-5.7402 5.9502-8.7503 4.1768-3.0101 10.29-3.0101 2.6134 0 5.0168 0.65335 2.4267 0.65335 4.6435 1.9367v7.2102q-1.8901-1.8201-4.0368-2.7301-2.1467-0.93336-4.4568-0.93336-2.9634 0-5.0635 1.4467-2.0767 1.4234-3.1268 4.1768h12.577l-2.0067 4.5501h-11.504q-0.0467 0.37334-0.07 0.79336 0 0.42001 0 1.26 0 0.30334 0 0.67669 0.0233 0.35001 0.0467 0.74669h10.01l-2.0767 4.5501h-6.9769q1.1667 2.8468 3.1968 4.2701 2.0534 1.4234 4.9935 1.4234 2.3101 0 4.4101-0.91003 2.1234-0.93336 4.0835-2.7768z"
fill="#003087" stroke-width="1px" />
</g>
</svg>
</a>
<a href="https://www.paypal.me/NilsMaier/15" title="Donate €15" target="_blank">
<svg viewBox="0 0 300 72" width="110">
<rect x="1.5" y="1.5" width="297" height="69" ry="34.093" fill="#ffc439" fill-rule="evenodd" stroke="#dadce0"
stroke-dashoffset="89.999" stroke-linejoin="round" stroke-width="3" style="paint-order:normal" />
<g transform="translate(28.855)">
<path
d="m42.414 58.373 0.83858-5.284-1.868-0.04295h-8.9197l6.1988-38.991c0.01924-0.1177 0.08177-0.22746 0.17317-0.3054 0.09139-0.07794 0.20844-0.12089 0.3303-0.12089h15.04c4.993 0 8.4387 1.0307 10.238 3.0651 0.84339 0.95437 1.3805 1.9517 1.6403 3.0492 0.27258 1.1516 0.27739 2.5275 0.01122 4.2056l-0.01924 0.12248v1.0753l0.84339 0.474c0.71031 0.37379 1.2747 0.80167 1.7076 1.2916 0.72153 0.81599 1.1881 1.8531 1.3853 3.0826 0.20363 1.2645 0.13629 2.7693-0.19722 4.4728-0.38482 1.9596-1.0069 3.6664-1.8471 5.0629-0.77284 1.2868-1.7573 2.3541-2.9262 3.1812-1.116 0.78576-2.442 1.3822-3.9412 1.764-1.4527 0.37538-3.109 0.56467-4.9257 0.56467h-1.1705c-0.83698 0-1.6499 0.29904-2.2881 0.83507-0.63976 0.54717-1.0631 1.2948-1.1929 2.1123l-0.08819 0.47559-1.4815 9.3131-0.06734 0.34198c-0.01764 0.10816-0.0481 0.16224-0.093 0.19883-0.04008 0.0334-0.09781 0.05567-0.15393 0.05567z"
fill="#253b80" />
<path
d="m67.719 24.195c-0.0449 0.28472-0.0962 0.5758-0.15393 0.87484-1.9834 10.102-8.769 13.592-17.435 13.592h-4.4126c-1.0598 0-1.9529 0.7635-2.1181 1.8006l-2.2592 14.214-0.63976 4.029c-0.10743 0.68078 0.4217 1.2948 1.1144 1.2948h7.8262c0.92677 0 1.714-0.66806 1.8599-1.5747l0.07696-0.39447 1.4735-9.2765 0.0946-0.509c0.14431-0.90983 0.93318-1.5779 1.8599-1.5779h1.1705c7.5825 0 13.518-3.054 15.253-11.891 0.72474-3.6918 0.34954-6.7744-1.5681-8.9424-0.58043-0.65374-1.3004-1.1961-2.1421-1.6383z"
fill="#179bd7" />
<path
d="m65.644 23.374c-0.30304-0.08748-0.61571-0.16702-0.93639-0.23859-0.32228-0.06999-0.65259-0.13202-0.99251-0.1861-1.1897-0.19087-2.4933-0.28154-3.8899-0.28154h-11.788c-0.29022 0-0.566 0.06522-0.81293 0.18292-0.54355 0.25927-0.94761 0.76986-1.0454 1.395l-2.5077 15.757-0.07215 0.45969c0.16515-1.0371 1.0582-1.8006 2.1181-1.8006h4.4126c8.6664 0 15.452-3.4914 17.435-13.592 0.05933-0.29904 0.10903-0.59012 0.15393-0.87484-0.50187-0.26404-1.0454-0.48991-1.6307-0.68237-0.14431-0.04772-0.29342-0.09385-0.44414-0.13838z"
fill="#222d65" />
<path
d="m46.179 24.246c0.09781-0.62511 0.50187-1.1357 1.0454-1.3934 0.24853-0.11771 0.52271-0.18292 0.81293-0.18292h11.788c1.3966 0 2.7001 0.09066 3.8899 0.28154 0.33992 0.05408 0.67022 0.11612 0.99251 0.1861 0.32068 0.07158 0.63334 0.15111 0.93639 0.23859 0.15072 0.04454 0.29984 0.09067 0.44575 0.13679 0.58524 0.19246 1.1288 0.41992 1.6307 0.68237 0.59005-3.7332-0.0048-6.275-2.0395-8.5766-2.2432-2.5338-6.2918-3.6186-11.472-3.6186h-15.04c-1.0582 0-1.961 0.7635-2.1245 1.8022l-6.2645 39.392c-0.12346 0.7794 0.48262 1.4825 1.2747 1.4825h9.2853l2.3314-14.673z"
fill="#253b80" />
</g>
<g transform="matrix(1.004 0 0 .996 4.7854 0)" fill="#009cde" opacity=".75" stroke="#003087"
stroke-width="1px" aria-label="15">
<path
d="m173.05 47.333h7.9336v-22.517l-8.1436 1.6801v-6.1135l8.0969-1.6801h8.5403v28.631h7.9336v6.2069h-24.361z" />
<path
d="m208.75 18.702h22.331v6.6035h-15.167v5.3902q1.0267-0.28001 2.0534-0.42001 1.05-0.16334 2.1701-0.16334 6.3702 0 9.917 3.1968 3.5468 3.1734 3.5468 8.8669 0 5.6468-3.8734 8.8436-3.8501 3.1968-10.71 3.1968-2.9634 0-5.8802-0.58335-2.8934-0.56002-5.7635-1.7267v-7.0702q2.8468 1.6334 5.3902 2.4501 2.5667 0.81669 4.8302 0.81669 3.2668 0 5.1335-1.5867 1.89-1.61 1.89-4.3401 0-2.7534-1.89-4.3401-1.8667-1.5867-5.1335-1.5867-1.9367 0-4.1301 0.51335-2.1934 0.49002-4.7135 1.54z" />
</g>
<g transform="matrix(1.004 0 0 .996 4.7854 0)" fill="#003087" aria-label="€">
<path
d="m153.83 51.627q-2.2167 1.2834-4.6435 1.9367-2.4034 0.65335-5.0168 0.65335-6.1135 0-10.314-3.0334-4.1768-3.0568-5.9268-8.7736h-5.0635l2.0534-4.5501h2.2867q-0.0233-0.32668-0.0467-0.67669 0-0.37334 0-1.0267 0-0.67669 0-1.05 0.0233-0.37334 0.0467-0.72336h-4.3401l2.0534-4.5501h3.0101q1.7967-5.7402 5.9502-8.7503 4.1768-3.0101 10.29-3.0101 2.6134 0 5.0168 0.65335 2.4267 0.65335 4.6435 1.9367v7.2102q-1.8901-1.8201-4.0368-2.7301-2.1467-0.93336-4.4568-0.93336-2.9634 0-5.0635 1.4467-2.0767 1.4234-3.1268 4.1768h12.577l-2.0067 4.5501h-11.504q-0.0467 0.37334-0.07 0.79336 0 0.42001 0 1.26 0 0.30334 0 0.67669 0.0233 0.35001 0.0467 0.74669h10.01l-2.0767 4.5501h-6.9769q1.1667 2.8468 3.1968 4.2701 2.0534 1.4234 4.9935 1.4234 2.3101 0 4.4101-0.91003 2.1234-0.93336 4.0835-2.7768z"
fill="#003087" stroke-width="1px" />
</g>
</svg>
</a>
<a href="https://www.paypal.me/NilsMaier/20" title="Donate €20" target="_blank">
<svg viewBox="0 0 300 72" width="110">
<rect x="1.5" y="1.5" width="297" height="69" ry="34.093" fill="#ffc439" fill-rule="evenodd" stroke="#dadce0"
stroke-dashoffset="89.999" stroke-linejoin="round" stroke-width="3" style="paint-order:normal" />
<g transform="translate(28.855)">
<path
d="m42.414 58.373 0.83858-5.284-1.868-0.04295h-8.9197l6.1988-38.991c0.01924-0.1177 0.08177-0.22746 0.17317-0.3054 0.09139-0.07794 0.20844-0.12089 0.3303-0.12089h15.04c4.993 0 8.4387 1.0307 10.238 3.0651 0.84339 0.95437 1.3805 1.9517 1.6403 3.0492 0.27258 1.1516 0.27739 2.5275 0.01122 4.2056l-0.01924 0.12248v1.0753l0.84339 0.474c0.71031 0.37379 1.2747 0.80167 1.7076 1.2916 0.72153 0.81599 1.1881 1.8531 1.3853 3.0826 0.20363 1.2645 0.13629 2.7693-0.19722 4.4728-0.38482 1.9596-1.0069 3.6664-1.8471 5.0629-0.77284 1.2868-1.7573 2.3541-2.9262 3.1812-1.116 0.78576-2.442 1.3822-3.9412 1.764-1.4527 0.37538-3.109 0.56467-4.9257 0.56467h-1.1705c-0.83698 0-1.6499 0.29904-2.2881 0.83507-0.63976 0.54717-1.0631 1.2948-1.1929 2.1123l-0.08819 0.47559-1.4815 9.3131-0.06734 0.34198c-0.01764 0.10816-0.0481 0.16224-0.093 0.19883-0.04008 0.0334-0.09781 0.05567-0.15393 0.05567z"
fill="#253b80" />
<path
d="m67.719 24.195c-0.0449 0.28472-0.0962 0.5758-0.15393 0.87484-1.9834 10.102-8.769 13.592-17.435 13.592h-4.4126c-1.0598 0-1.9529 0.7635-2.1181 1.8006l-2.2592 14.214-0.63976 4.029c-0.10743 0.68078 0.4217 1.2948 1.1144 1.2948h7.8262c0.92677 0 1.714-0.66806 1.8599-1.5747l0.07696-0.39447 1.4735-9.2765 0.0946-0.509c0.14431-0.90983 0.93318-1.5779 1.8599-1.5779h1.1705c7.5825 0 13.518-3.054 15.253-11.891 0.72474-3.6918 0.34954-6.7744-1.5681-8.9424-0.58043-0.65374-1.3004-1.1961-2.1421-1.6383z"
fill="#179bd7" />
<path
d="m65.644 23.374c-0.30304-0.08748-0.61571-0.16702-0.93639-0.23859-0.32228-0.06999-0.65259-0.13202-0.99251-0.1861-1.1897-0.19087-2.4933-0.28154-3.8899-0.28154h-11.788c-0.29022 0-0.566 0.06522-0.81293 0.18292-0.54355 0.25927-0.94761 0.76986-1.0454 1.395l-2.5077 15.757-0.07215 0.45969c0.16515-1.0371 1.0582-1.8006 2.1181-1.8006h4.4126c8.6664 0 15.452-3.4914 17.435-13.592 0.05933-0.29904 0.10903-0.59012 0.15393-0.87484-0.50187-0.26404-1.0454-0.48991-1.6307-0.68237-0.14431-0.04772-0.29342-0.09385-0.44414-0.13838z"
fill="#222d65" />
<path
d="m46.179 24.246c0.09781-0.62511 0.50187-1.1357 1.0454-1.3934 0.24853-0.11771 0.52271-0.18292 0.81293-0.18292h11.788c1.3966 0 2.7001 0.09066 3.8899 0.28154 0.33992 0.05408 0.67022 0.11612 0.99251 0.1861 0.32068 0.07158 0.63334 0.15111 0.93639 0.23859 0.15072 0.04454 0.29984 0.09067 0.44575 0.13679 0.58524 0.19246 1.1288 0.41992 1.6307 0.68237 0.59005-3.7332-0.0048-6.275-2.0395-8.5766-2.2432-2.5338-6.2918-3.6186-11.472-3.6186h-15.04c-1.0582 0-1.961 0.7635-2.1245 1.8022l-6.2645 39.392c-0.12346 0.7794 0.48262 1.4825 1.2747 1.4825h9.2853l2.3314-14.673z"
fill="#253b80" />
</g>
<g transform="matrix(1.004 0 0 .996 4.7854 0)" fill="#009cde" stroke="#003087" stroke-width="1px"
aria-label="20">
<path
d="m181.22 46.936h15.33v6.6035h-25.317v-6.6035l12.717-11.224q1.7034-1.54 2.5201-3.0101 0.81669-1.47 0.81669-3.0568 0-2.4501-1.6567-3.9435-1.6334-1.4934-4.3635-1.4934-2.1001 0-4.5968 0.91003-2.4968 0.88669-5.3435 2.6601v-7.6536q3.0334-1.0034 5.9968-1.5167 2.9634-0.53668 5.8102-0.53668 6.2535 0 9.707 2.7534 3.4768 2.7534 3.4768 7.6769 0 2.8468-1.47 5.3202-1.47 2.4501-6.1835 6.5802z" />
<path
d="m225.67 36.086q0-6.5335-1.2367-9.1936-1.2134-2.6834-4.1068-2.6834t-4.1301 2.6834q-1.2367 2.6601-1.2367 9.1936 0 6.6035 1.2367 9.3103 1.2367 2.7067 4.1301 2.7067 2.8701 0 4.1068-2.7067t1.2367-9.3103zm8.9836 0.07q0 8.6569-3.7334 13.37-3.7334 4.6901-10.594 4.6901-6.8835 0-10.617-4.6901-3.7334-4.7135-3.7334-13.37 0-8.6803 3.7334-13.37 3.7334-4.7135 10.617-4.7135 6.8602 0 10.594 4.7135 3.7334 4.6901 3.7334 13.37z" />
</g>
<g transform="matrix(1.004 0 0 .996 4.7854 0)" fill="#003087" aria-label="€">
<path
d="m153.83 51.627q-2.2167 1.2834-4.6435 1.9367-2.4034 0.65335-5.0168 0.65335-6.1135 0-10.314-3.0334-4.1768-3.0568-5.9268-8.7736h-5.0635l2.0534-4.5501h2.2867q-0.0233-0.32668-0.0467-0.67669 0-0.37334 0-1.0267 0-0.67669 0-1.05 0.0233-0.37334 0.0467-0.72336h-4.3401l2.0534-4.5501h3.0101q1.7967-5.7402 5.9502-8.7503 4.1768-3.0101 10.29-3.0101 2.6134 0 5.0168 0.65335 2.4267 0.65335 4.6435 1.9367v7.2102q-1.8901-1.8201-4.0368-2.7301-2.1467-0.93336-4.4568-0.93336-2.9634 0-5.0635 1.4467-2.0767 1.4234-3.1268 4.1768h12.577l-2.0067 4.5501h-11.504q-0.0467 0.37334-0.07 0.79336 0 0.42001 0 1.26 0 0.30334 0 0.67669 0.0233 0.35001 0.0467 0.74669h10.01l-2.0767 4.5501h-6.9769q1.1667 2.8468 3.1968 4.2701 2.0534 1.4234 4.9935 1.4234 2.3101 0 4.4101-0.91003 2.1234-0.93336 4.0835-2.7768z"
fill="#003087" stroke-width="1px" />
</g>
</svg>
</a>
<a href="https://www.paypal.me/NilsMaier/30" title="Donate €30" target="_blank">
<svg viewBox="0 0 300 72" width="110">
<rect x="1.5" y="1.5" width="297" height="69" ry="34.093" fill="#ffc439" fill-rule="evenodd" stroke="#dadce0"
stroke-dashoffset="89.999" stroke-linejoin="round" stroke-width="3" style="paint-order:normal" />
<g transform="translate(28.855)">
<path
d="m42.414 58.373 0.83858-5.284-1.868-0.04295h-8.9197l6.1988-38.991c0.01924-0.1177 0.08177-0.22746 0.17317-0.3054 0.09139-0.07794 0.20844-0.12089 0.3303-0.12089h15.04c4.993 0 8.4387 1.0307 10.238 3.0651 0.84339 0.95437 1.3805 1.9517 1.6403 3.0492 0.27258 1.1516 0.27739 2.5275 0.01122 4.2056l-0.01924 0.12248v1.0753l0.84339 0.474c0.71031 0.37379 1.2747 0.80167 1.7076 1.2916 0.72153 0.81599 1.1881 1.8531 1.3853 3.0826 0.20363 1.2645 0.13629 2.7693-0.19722 4.4728-0.38482 1.9596-1.0069 3.6664-1.8471 5.0629-0.77284 1.2868-1.7573 2.3541-2.9262 3.1812-1.116 0.78576-2.442 1.3822-3.9412 1.764-1.4527 0.37538-3.109 0.56467-4.9257 0.56467h-1.1705c-0.83698 0-1.6499 0.29904-2.2881 0.83507-0.63976 0.54717-1.0631 1.2948-1.1929 2.1123l-0.08819 0.47559-1.4815 9.3131-0.06734 0.34198c-0.01764 0.10816-0.0481 0.16224-0.093 0.19883-0.04008 0.0334-0.09781 0.05567-0.15393 0.05567z"
fill="#253b80" />
<path
d="m67.719 24.195c-0.0449 0.28472-0.0962 0.5758-0.15393 0.87484-1.9834 10.102-8.769 13.592-17.435 13.592h-4.4126c-1.0598 0-1.9529 0.7635-2.1181 1.8006l-2.2592 14.214-0.63976 4.029c-0.10743 0.68078 0.4217 1.2948 1.1144 1.2948h7.8262c0.92677 0 1.714-0.66806 1.8599-1.5747l0.07696-0.39447 1.4735-9.2765 0.0946-0.509c0.14431-0.90983 0.93318-1.5779 1.8599-1.5779h1.1705c7.5825 0 13.518-3.054 15.253-11.891 0.72474-3.6918 0.34954-6.7744-1.5681-8.9424-0.58043-0.65374-1.3004-1.1961-2.1421-1.6383z"
fill="#179bd7" />
<path
d="m65.644 23.374c-0.30304-0.08748-0.61571-0.16702-0.93639-0.23859-0.32228-0.06999-0.65259-0.13202-0.99251-0.1861-1.1897-0.19087-2.4933-0.28154-3.8899-0.28154h-11.788c-0.29022 0-0.566 0.06522-0.81293 0.18292-0.54355 0.25927-0.94761 0.76986-1.0454 1.395l-2.5077 15.757-0.07215 0.45969c0.16515-1.0371 1.0582-1.8006 2.1181-1.8006h4.4126c8.6664 0 15.452-3.4914 17.435-13.592 0.05933-0.29904 0.10903-0.59012 0.15393-0.87484-0.50187-0.26404-1.0454-0.48991-1.6307-0.68237-0.14431-0.04772-0.29342-0.09385-0.44414-0.13838z"
fill="#222d65" />
<path
d="m46.179 24.246c0.09781-0.62511 0.50187-1.1357 1.0454-1.3934 0.24853-0.11771 0.52271-0.18292 0.81293-0.18292h11.788c1.3966 0 2.7001 0.09066 3.8899 0.28154 0.33992 0.05408 0.67022 0.11612 0.99251 0.1861 0.32068 0.07158 0.63334 0.15111 0.93639 0.23859 0.15072 0.04454 0.29984 0.09067 0.44575 0.13679 0.58524 0.19246 1.1288 0.41992 1.6307 0.68237 0.59005-3.7332-0.0048-6.275-2.0395-8.5766-2.2432-2.5338-6.2918-3.6186-11.472-3.6186h-15.04c-1.0582 0-1.961 0.7635-2.1245 1.8022l-6.2645 39.392c-0.12346 0.7794 0.48262 1.4825 1.2747 1.4825h9.2853l2.3314-14.673z"
fill="#253b80" />
</g>
<g transform="matrix(1.004 0 0 .996 4.7854 0)" fill="#009cde" stroke="#003087" stroke-width="1px"
aria-label="30">
<path
d="m189.71 34.756q3.5234 0.91003 5.3435 3.1734 1.8434 2.2401 1.8434 5.7168 0 5.1802-3.9668 7.8869-3.9668 2.6834-11.574 2.6834-2.6834 0-5.3902-0.44335-2.6834-0.42001-5.3202-1.2834v-6.9302q2.5201 1.26 4.9935 1.9134 2.4967 0.63002 4.9002 0.63002 3.5701 0 5.4602-1.2367 1.9134-1.2367 1.9134-3.5468 0-2.3801-1.9601-3.5934-1.9367-1.2367-5.7402-1.2367h-3.5934v-5.7868h3.7801q3.3834 0 5.0402-1.05 1.6567-1.0734 1.6567-3.2434 0-2.0067-1.61-3.1034t-4.5501-1.0967q-2.1701 0-4.3868 0.49002t-4.4101 1.4467v-6.5802q2.6601-0.74669 5.2735-1.12 2.6134-0.37334 5.1335-0.37334 6.7902 0 10.15 2.2401 3.3834 2.2167 3.3834 6.6969 0 3.0568-1.61 5.0168-1.61 1.9367-4.7601 2.7301z" />
<path
d="m225.67 36.086q0-6.5335-1.2367-9.1936-1.2134-2.6834-4.1068-2.6834t-4.1301 2.6834q-1.2367 2.6601-1.2367 9.1936 0 6.6035 1.2367 9.3103 1.2367 2.7067 4.1301 2.7067 2.8701 0 4.1068-2.7067t1.2367-9.3103zm8.9836 0.07q0 8.6569-3.7334 13.37-3.7334 4.6901-10.594 4.6901-6.8835 0-10.617-4.6901-3.7334-4.7135-3.7334-13.37 0-8.6803 3.7334-13.37 3.7334-4.7135 10.617-4.7135 6.8602 0 10.594 4.7135 3.7334 4.6901 3.7334 13.37z" />
</g>
<g transform="matrix(1.004 0 0 .996 4.7854 0)" fill="#003087" aria-label="€">
<path
d="m153.83 51.627q-2.2167 1.2834-4.6435 1.9367-2.4034 0.65335-5.0168 0.65335-6.1135 0-10.314-3.0334-4.1768-3.0568-5.9268-8.7736h-5.0635l2.0534-4.5501h2.2867q-0.0233-0.32668-0.0467-0.67669 0-0.37334 0-1.0267 0-0.67669 0-1.05 0.0233-0.37334 0.0467-0.72336h-4.3401l2.0534-4.5501h3.0101q1.7967-5.7402 5.9502-8.7503 4.1768-3.0101 10.29-3.0101 2.6134 0 5.0168 0.65335 2.4267 0.65335 4.6435 1.9367v7.2102q-1.8901-1.8201-4.0368-2.7301-2.1467-0.93336-4.4568-0.93336-2.9634 0-5.0635 1.4467-2.0767 1.4234-3.1268 4.1768h12.577l-2.0067 4.5501h-11.504q-0.0467 0.37334-0.07 0.79336 0 0.42001 0 1.26 0 0.30334 0 0.67669 0.0233 0.35001 0.0467 0.74669h10.01l-2.0767 4.5501h-6.9769q1.1667 2.8468 3.1968 4.2701 2.0534 1.4234 4.9935 1.4234 2.3101 0 4.4101-0.91003 2.1234-0.93336 4.0835-2.7768z"
fill="#003087" stroke-width="1px" />
</g>
</svg>
</a>
<a id="ppanother" href="https://www.paypal.me/NilsMaier" title="Donate another amount" target="_blank">
<svg viewBox="0 0 300 72" width="110">
<rect x="1.5" y="1.5" width="297" height="69" ry="34.093" fill="#ffc439" fill-rule="evenodd" stroke="#dadce0"
stroke-dashoffset="89.999" stroke-linejoin="round" stroke-width="3" style="paint-order:normal" />
<g transform="translate(19.23)">
<path
d="m42.414 58.373 0.83858-5.284-1.868-0.04295h-8.9197l6.1988-38.991c0.01924-0.1177 0.08177-0.22746 0.17317-0.3054 0.09139-0.07794 0.20844-0.12089 0.3303-0.12089h15.04c4.993 0 8.4387 1.0307 10.238 3.0651 0.84339 0.95437 1.3805 1.9517 1.6403 3.0492 0.27258 1.1516 0.27739 2.5275 0.01122 4.2056l-0.01924 0.12248v1.0753l0.84339 0.474c0.71031 0.37379 1.2747 0.80167 1.7076 1.2916 0.72153 0.81599 1.1881 1.8531 1.3853 3.0826 0.20363 1.2645 0.13629 2.7693-0.19722 4.4728-0.38482 1.9596-1.0069 3.6664-1.8471 5.0629-0.77284 1.2868-1.7573 2.3541-2.9262 3.1812-1.116 0.78576-2.442 1.3822-3.9412 1.764-1.4527 0.37538-3.109 0.56467-4.9257 0.56467h-1.1705c-0.83698 0-1.6499 0.29904-2.2881 0.83507-0.63976 0.54717-1.0631 1.2948-1.1929 2.1123l-0.08819 0.47559-1.4815 9.3131-0.06734 0.34198c-0.01764 0.10816-0.0481 0.16224-0.093 0.19883-0.04008 0.0334-0.09781 0.05567-0.15393 0.05567z"
fill="#253b80" />
<path
d="m67.719 24.195c-0.0449 0.28472-0.0962 0.5758-0.15393 0.87484-1.9834 10.102-8.769 13.592-17.435 13.592h-4.4126c-1.0598 0-1.9529 0.7635-2.1181 1.8006l-2.2592 14.214-0.63976 4.029c-0.10743 0.68078 0.4217 1.2948 1.1144 1.2948h7.8262c0.92677 0 1.714-0.66806 1.8599-1.5747l0.07696-0.39447 1.4735-9.2765 0.0946-0.509c0.14431-0.90983 0.93318-1.5779 1.8599-1.5779h1.1705c7.5825 0 13.518-3.054 15.253-11.891 0.72474-3.6918 0.34954-6.7744-1.5681-8.9424-0.58043-0.65374-1.3004-1.1961-2.1421-1.6383z"
fill="#179bd7" />
<path
d="m65.644 23.374c-0.30304-0.08748-0.61571-0.16702-0.93639-0.23859-0.32228-0.06999-0.65259-0.13202-0.99251-0.1861-1.1897-0.19087-2.4933-0.28154-3.8899-0.28154h-11.788c-0.29022 0-0.566 0.06522-0.81293 0.18292-0.54355 0.25927-0.94761 0.76986-1.0454 1.395l-2.5077 15.757-0.07215 0.45969c0.16515-1.0371 1.0582-1.8006 2.1181-1.8006h4.4126c8.6664 0 15.452-3.4914 17.435-13.592 0.05933-0.29904 0.10903-0.59012 0.15393-0.87484-0.50187-0.26404-1.0454-0.48991-1.6307-0.68237-0.14431-0.04772-0.29342-0.09385-0.44414-0.13838z"
fill="#222d65" />
<path
d="m46.179 24.246c0.09781-0.62511 0.50187-1.1357 1.0454-1.3934 0.24853-0.11771 0.52271-0.18292 0.81293-0.18292h11.788c1.3966 0 2.7001 0.09066 3.8899 0.28154 0.33992 0.05408 0.67022 0.11612 0.99251 0.1861 0.32068 0.07158 0.63334 0.15111 0.93639 0.23859 0.15072 0.04454 0.29984 0.09067 0.44575 0.13679 0.58524 0.19246 1.1288 0.41992 1.6307 0.68237 0.59005-3.7332-0.0048-6.275-2.0395-8.5766-2.2432-2.5338-6.2918-3.6186-11.472-3.6186h-15.04c-1.0582 0-1.961 0.7635-2.1245 1.8022l-6.2645 39.392c-0.12346 0.7794 0.48262 1.4825 1.2747 1.4825h9.2853l2.3314-14.673z"
fill="#253b80" />
</g>
<g transform="translate(0 -.24886)" stroke-width="1.7342px">
<g transform="matrix(.57894 0 0 .57432 95.638 27.862)" fill="#009cde" stroke="#003087" aria-label="Amount">
<path
d="m62.511 47.193h-14.047l-2.2167 6.3469h-9.0303l12.904-34.838h10.71l12.904 34.838h-9.0303zm-11.807-6.4635h9.5436l-4.7601-13.86z" />
<path
d="m105.19 31.746q1.5867-2.4267 3.7568-3.6868 2.1934-1.2834 4.8068-1.2834 4.5035 0 6.8602 2.7768t2.3567 8.0736v15.914h-8.4002v-13.627q0.0233-0.30334 0.0233-0.63002 0.0233-0.32668 0.0233-0.93336 0-2.7768-0.8167-4.0135-0.81669-1.26-2.6367-1.26-2.3801 0-3.6868 1.9601-1.2834 1.9601-1.33 5.6702v12.834h-8.4002v-13.627q0-4.3401-0.74669-5.5768-0.74669-1.26-2.6601-1.26-2.4034 0-3.7101 1.9834-1.3067 1.9601-1.3067 5.6235v12.857h-8.4003v-26.134h8.4003v3.8268q1.54-2.2167 3.5234-3.3368 2.0067-1.12 4.4101-1.12 2.7067 0 4.7835 1.3067 2.0767 1.3067 3.1501 3.6634z" />
<path
d="m146.26 32.749q-2.7768 0-4.2468 2.0067-1.4467 1.9834-1.4467 5.7402t1.4467 5.7635q1.47 1.9834 4.2468 1.9834 2.7301 0 4.1768-1.9834 1.4467-2.0067 1.4467-5.7635t-1.4467-5.7402q-1.4467-2.0067-4.1768-2.0067zm0-5.9735q6.7435 0 10.524 3.6401 3.8034 3.6401 3.8034 10.08 0 6.4402-3.8034 10.08-3.7801 3.6401-10.524 3.6401-6.7669 0-10.594-3.6401-3.8034-3.6401-3.8034-10.08 0-6.4402 3.8034-10.08 3.8268-3.6401 10.594-3.6401z" />
<path
d="m169.41 43.366v-15.96h8.4002v2.6134q0 2.1234-0.0233 5.3435-0.0233 3.1968-0.0233 4.2701 0 3.1501 0.16334 4.5501 0.16334 1.3767 0.56002 2.0067 0.51335 0.81669 1.33 1.26 0.84002 0.44335 1.9134 0.44335 2.6134 0 4.1068-2.0067t1.4934-5.5768v-12.904h8.3536v26.134h-8.3536v-3.7801q-1.8901 2.2867-4.0134 3.3834-2.1001 1.0734-4.6435 1.0734-4.5268 0-6.9069-2.7768-2.3567-2.7768-2.3567-8.0736z" />
<path
d="m233.04 37.626v15.914h-8.4003v-12.18q0-3.3834-0.16333-4.6668-0.14001-1.2834-0.51335-1.8901-0.49002-0.81669-1.33-1.26-0.84003-0.46668-1.9134-0.46668-2.6134 0-4.1068 2.0301-1.4934 2.0067-1.4934 5.5768v12.857h-8.3536v-26.134h8.3536v3.8268q1.8901-2.2867 4.0135-3.3601 2.1234-1.0967 4.6901-1.0967 4.5268 0 6.8602 2.7768 2.3567 2.7768 2.3567 8.0736z" />
<path
d="m252.97 19.986v7.4202h8.6103v5.9735h-8.6103v11.084q0 1.8201 0.72335 2.4734 0.72336 0.63002 2.8701 0.63002h4.2935v5.9735h-7.1636q-4.9468 0-7.0236-2.0534-2.0534-2.0767-2.0534-7.0235v-11.084h-4.1535v-5.9735h4.1535v-7.4202z" />
</g>
<g transform="matrix(.57894 0 0 .57432 95.638 23.862)" fill="#003087" aria-label="Another">
<path
d="m57.459 11.049h-14.047l-2.2167 6.3469h-9.0303l12.904-34.838h10.71l12.904 34.838h-9.0303zm-11.807-6.4635h9.5436l-4.7601-13.86z" />
<path
d="m102.19 1.4817v15.914h-8.4003v-12.18q0-3.3834-0.16334-4.6668-0.14-1.2834-0.51335-1.8901-0.49002-0.81669-1.33-1.26-0.84002-0.46668-1.9134-0.46668-2.6134 0-4.1068 2.0301-1.4934 2.0067-1.4934 5.5768v12.857h-8.3536v-26.134h8.3536v3.8268q1.8901-2.2867 4.0135-3.3601 2.1234-1.0967 4.6901-1.0967 4.5268 0 6.8602 2.7768 2.3567 2.7768 2.3567 8.0736z" />
<path
d="m125.43-3.3951q-2.7768 0-4.2468 2.0067-1.4467 1.9834-1.4467 5.7402t1.4467 5.7635q1.47 1.9834 4.2468 1.9834 2.7301 0 4.1768-1.9834 1.4467-2.0067 1.4467-5.7635t-1.4467-5.7402q-1.4467-2.0067-4.1768-2.0067zm0-5.9735q6.7435 0 10.524 3.6401 3.8034 3.6401 3.8034 10.08 0 6.4402-3.8034 10.08-3.7801 3.6401-10.524 3.6401-6.7669 0-10.594-3.6401-3.8034-3.6401-3.8034-10.08 0-6.4402 3.8034-10.08 3.8268-3.6401 10.594-3.6401z" />
<path
d="m157.99-16.159v7.4202h8.6103v5.9735h-8.6103v11.084q0 1.8201 0.72336 2.4734 0.72336 0.63002 2.8701 0.63002h4.2935v5.9735h-7.1636q-4.9468 0-7.0236-2.0534-2.0534-2.0767-2.0534-7.0235v-11.084h-4.1535v-5.9735h4.1535v-7.4202z" />
<path
d="m201.02 1.4817v15.914h-8.4002v-12.134q0-3.4301-0.16334-4.7135-0.14001-1.2834-0.51335-1.8901-0.49002-0.81669-1.33-1.26-0.84003-0.46668-1.9134-0.46668-2.6134 0-4.1068 2.0301-1.4934 2.0067-1.4934 5.5768v12.857h-8.3536v-36.308h8.3536v14q1.89-2.2867 4.0134-3.3601 2.1234-1.0967 4.6901-1.0967 4.5268 0 6.8602 2.7768 2.3567 2.7768 2.3567 8.0736z" />
<path
d="m237.91 4.2585v2.3801h-19.531q0.30334 2.9401 2.1234 4.4101 1.8201 1.47 5.0868 1.47 2.6367 0 5.3902-0.77002 2.7768-0.79336 5.6935-2.3801v6.4402q-2.9634 1.12-5.9268 1.6801-2.9634 0.58335-5.9268 0.58335-7.0936 0-11.037-3.5934-3.9201-3.6168-3.9201-10.127 0-6.3935 3.8501-10.057 3.8734-3.6634 10.64-3.6634 6.1602 0 9.847 3.7101 3.7101 3.7101 3.7101 9.917zm-8.5869-2.7768q0-2.3801-1.4-3.8268-1.3767-1.47-3.6168-1.47-2.4267 0-3.9434 1.3767-1.5167 1.3534-1.8901 3.9201z" />
<path
d="m266.64-1.6217q-1.0967-0.51335-2.1934-0.74669-1.0734-0.25667-2.1701-0.25667-3.2201 0-4.9702 2.0767-1.7267 2.0534-1.7267 5.9035v12.04h-8.3536v-26.134h8.3536v4.2935q1.61-2.5667 3.6868-3.7334 2.1001-1.19 5.0168-1.19 0.42001 0 0.91002 0.046668 0.49002 0.023334 1.4234 0.14z" />
</g>
</g>
</svg>
</a>
</section>
<p>It requires <strong>a lot of time and some money</strong> to create the extension, keep up with browser
changes, read and answer emails, bug reports and feature requests, and actually publish the final versions.
<em>Any contribution is appreciated. Thank you!</em></p>
<h2>Major version changes</h2>
<h3>Version 4.2 <em>Grune 42, Year of the Sneezing Panda</em></h3>
<ul>
<li>Vastly improved name handling in Chrome. (<a
href="https://bugzilla.mozilla.org/show_bug.cgi?id=1245652">Missing in Firefox</a>)</li>
<li>Support <code>[a:z]</code> character batches</li>
<li>Dark theme support</li>
<li>Improved the gathering of images in websites</li>
</ul>
<h3>Version 4.1 <em>September 21, 2019</em></h3>
<ul>
<li>Subfolder dropdown. While it was previously possible to use masks for subfolders already, based on user
feedback having a dedicated subfolder selection dropdown is more convenient and easier to discover.</li>
<li>You can configure the browser button to more different actions now</li>
<li>Play sounds: When the queue finishes, play a sound (can be enabled/disabled in the preferences)</li>
<li>Delete files from within the manager</li>
<li>Manager can now configured to be opened in a popup window instead of a tab</li>
<li>Automatic retries (This feature relies on Firefox reporting errors correctly to extensions, which it
only started doing in Firefox 71, which is currently available as Nightly).</li>
</ul>
<h3>Version 4.0 <em>August 31, 2019</em></h3>
<p>DownThemAll! reborn, as a WebExtension</p>
</article>
<footer>
<svg id="logo" viewBox="0 0 16 16">
<defs>
<linearGradient id="b">
<stop stop-color="#116597" offset="0" />
<stop stop-color="#062638" offset="1" />
</linearGradient>
<linearGradient id="a">
<stop stop-color="#fffe99" offset="0" />
<stop stop-color="#e49218" offset=".2" />
<stop stop-color="#116597" offset="1" />
</linearGradient>
<radialGradient id="c" xlink:href="#a" gradientUnits="userSpaceOnUse" cy="17.413" cx="11.75"
gradientTransform="matrix(.41233 0 0 1.1548 3.24 -8.74)" r="10.752" />
<linearGradient id="h" y2="-.242" xlink:href="#a" gradientUnits="userSpaceOnUse" x2="7.763"
gradientTransform="translate(2.495 -6.342) scale(.6787)" y1="4.218" x1="8.101" />
<linearGradient id="i" y2="-.242" xlink:href="#a" gradientUnits="userSpaceOnUse" x2="7.763"
gradientTransform="translate(2.495 -1.882) scale(.6787)" y1="4.218" x1="8.101" />
<linearGradient id="g" y2="-.242" xlink:href="#b" gradientUnits="userSpaceOnUse" x2="7.763"
gradientTransform="translate(7.08 4.18) scale(.43866)" y1="4.218" x1="8.101" />
<linearGradient id="f" y2="-.242" xlink:href="#b" gradientUnits="userSpaceOnUse" x2="7.763"
gradientTransform="translate(7.657 1.298) scale(.43866)" y1="4.218" x1="8.101" />
<linearGradient id="e" y2="-.242" xlink:href="#b" gradientUnits="userSpaceOnUse" x2="7.763"
gradientTransform="translate(1.851 4.18) scale(.43866)" y1="4.218" x1="8.101" />
<linearGradient id="d" y2="-.242" xlink:href="#b" gradientUnits="userSpaceOnUse" x2="7.763"
gradientTransform="translate(1.851 1.298) scale(.43866)" y1="4.218" x1="8.101" />
</defs>
<g stroke="#072739">
<g stroke-width=".646">
<path
d="M4.561 7.134v1.515H1.996v.262l2.949 3.333 2.666 3.05h.99l2.686-3.05 2.848-3.252V8.65h-2.727V7.134H4.561z"
fill="url(#c)" />
<g stroke-linecap="round" stroke-dashoffset="10" fill-rule="evenodd">
<path fill="url(#d)" d="M4.562 1.346h1.649v1.649H4.562z" />
<path fill="url(#e)" d="M4.562 4.228h1.649v1.649H4.562z" />
<path fill="url(#f)" d="M10.368 1.346h1.649v1.649h-1.649z" />
<path fill="url(#g)" d="M9.792 4.228h1.649v1.649H9.792z" />
</g>
</g>
<g fill-rule="evenodd" stroke-linecap="round" stroke-dashoffset="10">
<path fill="url(#h)" d="M6.689-6.268H9.24v2.551H6.689z" transform="translate(2.874 4.614) scale(.64633)" />
<path fill="url(#i)" d="M6.689-1.808H9.24V.743H6.689z" transform="translate(2.874 4.614) scale(.64633)" />
</g>
</g>
</svg>
<section>
<p>Copyright © 2007-2018 Nils Maier, Stefano Verna, Federico Parodi</p>
<p>Copyright © 2007-2019 Nils Maier</p>
<p>The information on this website is licensed under the
<a href="https://creativecommons.org/licenses/by-sa/4.0/">
Creative Commons Attribution-ShareAlike 4.0 International License</a>.</p>
</section>
<a id="homepage" href="https://downthemall.org/">
<svg viewBox="0 0 250 32" height="20" xmlns="http://www.w3.org/2000/svg">
<g transform="matrix(1.1174 0 0 1.122 -217.76 -441.22)">
<path
d="m277.86 402.4c-2.106 0.594-3.9921 1.3387-5.0625 3.0371-1.8782 2.9802-1.8825 0.50072-5.0625 1.0117-0.075 4.312-1.6927 7.0814-1.0117 12.148 0.251 1.099-0.2614 1.8228 2.0234 2.0254 5.078-2.0169 2.6252-12.605 9.1113-13.162 0.661 5.076 1.325 12.532 3.0371 14.174h2.0254c2.0004 0 2.4284-0.24992 2.0254-4.0449-0.157-1.478-1.5594-2.1928-2.0234-4.0508-0.436-1.744-0.20767-2.7525-1.0137-5.0625 0.20397-2.5435-3.0757-5.9543-4.0488-6.0762z" />
<path
d="m205.98 396.32c0.71583-0.71583 3.037 0 3.037 0 3.312 2.743 2.107 7.979 3.037 12.148 0.97 4.354 2.863 8.229 3.037 12.149-3.865 0.827-3.919-2.155-5.062-4.05-3.517 0.195-3.843 3.58-7.086 4.05 0 0-3.0927 1.1003-6.074 0-2.2496-1.309-2.6451-6.2394-0.9158-9.8255 1.7293-3.5861 5.5833-5.828 10.027-5.3615 0 0-2.1472-6.9628 0-9.11zm-7.087 21.261c5.626-0.111 9.345-2.129 9.111-8.1-5.62-4-11.843 3.748-9.111 8.1z" />
<path
d="m262.67 400.37c3.124 1.378 4.2238 9.6188 3.037 14.174-0.21875 0.83965-3.6 4.9793-4.049 5.062-5.6104 1.0329-9.589-0.535-13.161-2.024-3.76 0.627-4.631 4.142-10.124 3.037-2.976-2.578-3.758-15.21 2.025-15.187 0.646 5.261-2.233 8.114 0 12.149 7.523 0.437 4.919-9.254 9.111-12.149 4.209 1.404 0.0379 4.9881 2.024 8.1 0.7405 1.1602 0.55971 3.037 2.025 3.037h5.062c2.561-0.813 3.5092-3.7334 4.049-6.074 1.0218-4.4307-3.744-7.344 1e-3 -10.125z" />
<path
d="m229.26 404.42c4.2274 1.6428 6.429 7.195 4.049 13.161-6.917 2.7019-16.888 6.2299-17.211-1.012-0.35916-8.0617 4.062-15.685 13.162-12.149zm-9.111 11.136c2.075 3.041 7.753 2.154 10.124 0 2.323-10.366-12.448-10.366-10.124 0z" />
<path
d="m415.54 393.28c1.635-0.285 1.742 0.957 3.037 1.012 0.117 7.88 0.244 15.768-6.074 17.211 0.518-6.569 1.518-12.656 3.037-18.223z" />
<path
d="m397.32 396.32c0.901 0.449 1.811 0.89 2.024 2.025 1.436 2.366 1.224 7.424 1.013 12.148-0.182 4.063 1.111 10.063-3.037 10.124-1.656-5.939-1.656-18.356 0-24.297z" />
<path
d="m405.42 396.32c0.901 0.449 1.811 0.89 2.024 2.025 1.436 2.366 1.225 7.424 1.013 12.148-0.182 4.063 1.112 10.063-3.037 10.124-1.656-5.939-1.656-18.356 0-24.297z" />
<path
d="m386.18 405.43c1.879 2.172 2.706 5.394 3.037 9.112 0.405 2.632 3.021 3.053 3.037 6.074-3.694 0.657-5.392-0.683-7.086-2.025-1.896 2.882-11.656 3.4133-12.148 0-1.2181-8.4422 3.734-13.813 13.16-13.161zm-10.123 11.136c5.229 3.119 8.32-1.521 8.123-7.087-3.941-4.338-8.175 1.277-8.123 7.087z" />
<path d="m412.5 414.54c2.928 0.446 4.614 2.134 5.062 5.062-3.131 3.21-8.628-1.578-5.062-5.062z" />
<g fill="#069">
<path
d="m344.67 399.36c-3.462 3.288-12.431 1.068-14.174 6.074-0.212 4.938 5.378 4.072 10.124 4.05-0.763 3.287-5.684 2.415-8.099 4.05 0.194 6.297 7.9627 1.1977 12.148 3.037 2.1858 0.96059-2.6665 2.6983-4.05 3.037-0.92 0.229-7.2519 3.9961-10.124 1.013-4.022-4.1774-6.0966-12.401-2.0268-19.74 2.1561-3.8884 7.9908-2.3919 12.151-3.5449 2.1724-1.0195 4.0825-0.57137 4.051 2.024z" />
<path
d="m368.97 398.35c0.91935 1.2579 1.638 4.258 2.024 7.086 0.632 4.615 1.344 11.963-3.037 12.149 0.605-6.006-1.776-9.022-1.012-15.187-2.943 2.12-2.8572 7.4034-6.074 9.112-5.4038 2.8702-7.236-2.214-10.124-4.05-0.162 4.899 0.612 10.735-4.05 11.136-0.788-6.862 1.383-10.766 1.013-17.21 6.881-1.144 5.642 5.832 10.124 7.086 2.854-2.881 4.6308-6.3006 7.086-10.123 0.7296-1.1359 3.2534-1.0889 4.05 1e-3z" />
<path
d="m299.12 404.42c2.5659-0.14763 2.6804 4.5418 3.037 7.087 0.319 2.835 0.61 6.509-1.012 8.099-3.139 1.088-1.619-3.049-2.025-5.062-0.701-3.477-2.194-6.897 0-10.124z" />
<path
d="m324 395.29c-4.1284 0.12154 0.92333 9.4224-3.6191 9.1289-3.094-0.731-3.6892 1.0347-6.0742 1.0117-5.024-0.414 3.2846-5.0625 3.2846-5.0625-1.3331-0.17112-4.8554 0.83219-4.9679-2.0635-1.1226-0.18087-1.4286 0.17857-3.0288 0.0563-0.30668 3.1413-2.5989 3.3131-5.6576 3.0448-6.3424-0.5564-15.93 1.6227-20.001 5.0366-0.88745 0.20112-1.9712 0.15704-2.4673-0.0332l0.44194 2.0606c8.225-2.236 14.819-5.3086 26.322-5.0625 0.802 5.947-2.2449 15.743 3.0371 17.211 4.327-0.057 0.29512-5.5363 2.0234-9.0879 1.899-3.9024 2.4597-3.319 5.0625-4.0723 5.9836-1.7317 0.3075 9.815 5.0625 10.123 3.109 0.858 1.9194-3.3815 2.0234-5.0625 0.3-4.805 0.0473-13.108-1.0117-17.211-0.15291-0.0158-0.29651-0.0215-0.42969-0.0176z" />
</g>
</g>
</svg>
</a>
</footer>
</body>
</html>

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

BIN
changelog/res/footerbg.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

55
changelog/res/halo.svg Normal file
View File

@ -0,0 +1,55 @@
<svg version="1.1" viewBox="0 0 200 180" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<defs>
<radialGradient id="d" cx="161.46" cy="-144.02" r="160.02" gradientTransform="matrix(1 0 0 .99838 0 -.23281)" gradientUnits="userSpaceOnUse">
<stop stop-color="#febb00" offset="0"/>
<stop stop-color="#ffd571" stop-opacity=".49804" offset=".64286"/>
<stop stop-color="#ffe5a7" stop-opacity="0" offset=".95153"/>
<stop stop-color="#ffe5a7" stop-opacity="0" offset="1"/>
</radialGradient>
<filter id="e" color-interpolation-filters="sRGB">
<feGaussianBlur stdDeviation="0.32807532"/>
</filter>
<radialGradient id="c" cx="161.46" cy="-144.02" r="160.02" gradientTransform="matrix(1 0 0 .99838 0 -.23281)" gradientUnits="userSpaceOnUse">
<stop stop-color="#ffd14e" offset="0"/>
<stop stop-color="#ffeeb5" stop-opacity=".49804" offset=".71429"/>
<stop stop-color="#ffeeb5" stop-opacity=".49804" offset="1"/>
</radialGradient>
<radialGradient id="b" cx="12.389" cy="11.882" r="8.199" gradientUnits="userSpaceOnUse">
<stop stop-color="#e69412" offset="0"/>
<stop stop-color="#f4c478" stop-opacity="0" offset="1"/>
</radialGradient>
<radialGradient id="a" cx="11.75" cy="17.413" r="10.752" gradientTransform="matrix(3.3776 0 0 9.4595 121.98 -293.39)" gradientUnits="userSpaceOnUse">
<stop stop-color="#fffe99" offset="0"/>
<stop stop-color="#f69706" offset=".2"/>
<stop stop-color="#136fa7" offset="1"/>
</radialGradient>
</defs>
<g transform="translate(-61.457 224.02)">
<g transform="matrix(.62494 0 0 .62494 60.557 -51.015)" fill="url(#d)" fill-rule="evenodd">
<path d="m161.46-144.02 72.75 144.62-46.61 15.146z"/>
<path d="m161.46-144.02 143.86 74.228-28.81 39.653z"/>
<path d="m161.46-144.02 160.02-24.507v49.014z"/>
<path d="m161.46-144.02 115.05-113.88 28.81 39.653z"/>
<path d="m161.46-144.02 26.14-159.76 46.615 15.146z"/>
<path d="m161.46-144.02-72.755-144.61 46.615-15.146z"/>
<path d="m161.46-144.02-143.86-74.228 28.81-39.653z"/>
<path d="m161.46-144.02-160.02 24.507-2.7e-6 -49.014z"/>
<path d="m161.46-144.02-115.05 113.89-28.81-39.653z"/>
<path d="m161.46-144.02-26.14 159.76-46.618-15.146z"/>
</g>
<g transform="matrix(.59435 -.19312 .19312 .59435 93.307 -24.24)" fill="url(#c)" fill-rule="evenodd" opacity=".88">
<path d="m161.46-144.02 72.75 144.62-46.61 15.146z"/>
<path d="m161.46-144.02 143.86 74.228-28.81 39.653z"/>
<path d="m161.46-144.02 160.02-24.507v49.014z"/>
<path d="m161.46-144.02 115.05-113.88 28.81 39.653z"/>
<path d="m161.46-144.02 26.14-159.76 46.615 15.146z"/>
<path d="m161.46-144.02-72.755-144.61 46.615-15.146z"/>
<path d="m161.46-144.02-143.86-74.228 28.81-39.653z"/>
<path d="m161.46-144.02-160.02 24.507-2.7e-6 -49.014z"/>
<path d="m161.46-144.02-115.05 113.89-28.81-39.653z"/>
<path d="m161.46-144.02-26.14 159.76-46.618-15.146z"/>
</g>
<path transform="matrix(7.0729 0 0 7.4575 73.647 -229.61)" d="m20.588 11.882a8.199 8.199 0 1 1-16.398 0 8.199 8.199 0 1 1 16.398 0z" fill="url(#b)" filter="url(#e)"/>
<path d="m133.31-207.91v55.137h-17.218c-6.602-0.97334-3.1317 2.1508-3.1317 2.1508l23.494 26.472 18.653 21.422c1.9951 2.9976 3.1147 2.8985 6.486 2.8985 3.5137 0.43957 4.2275-0.28033 6.4176-2.757l19.07-21.564 22.666-25.81c3.6888-3.9672-2.8847-2.8126-2.8847-2.8126h-18.954v-54.904c0.65539-9.337-1.0536-9.0538-8.6714-8.7929h-37.608c-7.6308-0.26075-8.3181 0.1211-8.3181 8.5607z" fill="url(#a)" stroke="#0a3b56" stroke-width="5.1532"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.6 KiB

View File

@ -15,7 +15,7 @@
"deffilter-aud": {
"label": "Audio",
"expr": "/\\.(?:mp3|wav|og(?:g|a)|flac|midi?|rm|aac|wma|mka|ape|opus)$/i",
"type": 3,
"type": 1,
"active": false,
"icon": "mp3"
},

File diff suppressed because one or more lines are too long

View File

@ -11,7 +11,7 @@ import { getManager } from "./manager/man";
import { select } from "./select";
import { single } from "./single";
import { Notification } from "./notifications";
import { MASK, FASTFILTER, SUBFOLDER, SERVER } from "./recentlist";
import { MASK, FASTFILTER, SUBFOLDER } from "./recentlist";
import { openManager } from "./windowutils";
import { _ } from "./i18n";
@ -20,9 +20,7 @@ const MAX_BATCH = 10000;
export interface QueueOptions {
mask?: string;
subfolder?: string;
server?: string;
paused?: boolean;
cookies?: boolean;
}
export const API = new class APIImpl {
@ -34,10 +32,8 @@ export const API = new class APIImpl {
await Promise.all([MASK.init(), SUBFOLDER.init()]);
const {mask = MASK.current} = options;
const {subfolder = SUBFOLDER.current} = options;
const {server = SERVER.current} = options;
const {paused = false} = options;
const {cookies = false} = options;
const defaults: any = {
_idx: 0,
get idx() {
@ -53,10 +49,8 @@ export const API = new class APIImpl {
postData: null,
mask,
subfolder,
server,
date: Date.now(),
paused,
cookies,
paused
};
let currentBatch = await Prefs.get("currentBatch", 0);
const initialBatch = currentBatch;
@ -86,7 +80,7 @@ export const API = new class APIImpl {
new Notification(null, _("queued-downloads", items.length));
}
}
if (false && await Prefs.get("open-manager-on-queue")) {
if (await Prefs.get("open-manager-on-queue")) {
await openManager(false);
}
}
@ -130,10 +124,6 @@ export const API = new class APIImpl {
await SUBFOLDER.init();
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") {
await Prefs.set("last-type", options.type);
}

View File

@ -27,7 +27,6 @@ import {
} from "./browser";
import { Bus } from "./bus";
import { filterInSitu } from "./util";
import { DB } from "./db";
const menus = typeof (_menus) !== "undefined" && _menus || _cmenus;
@ -107,19 +106,19 @@ class Handler {
async performSelection(options: SelectionOptions) {
try {
const tabOptions: any = {
const toptions: any = {
currentWindow: true,
discarded: false,
};
if (!CHROME) {
tabOptions.hidden = false;
toptions.hidden = false;
}
const selectedTabs = options.allTabs ?
await tabs.query(tabOptions) as any[] :
await tabs.query(toptions) as any[] :
[options.tab];
const textLinks = await Prefs.get("text-links", true);
const gatherOptions = {
const goptions = {
type: "DTA:gather",
selectionOnly: options.selectionOnly,
textLinks,
@ -128,7 +127,7 @@ class Handler {
};
const results = await Promise.all(selectedTabs.
map((tab: any) => runContentJob(tab, GATHER, gatherOptions)));
map((tab: any) => runContentJob(tab, GATHER, goptions)));
await this.processResults(options.turbo, results.flat());
}
@ -153,15 +152,10 @@ 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}`,
// });
if (reason === "install" || (reason === "update" && major !== prevMajor)) {
tabs.create({
url: `https://about.downthemall.org/changelog/?cur=${major}&prev=${prevMajor}`,
});
}
});
@ -171,7 +165,7 @@ locale.then(() => {
super();
this.onClicked = this.onClicked.bind(this);
const alls = new Map<string, string[]>();
const menuCreate = (options: any) => {
const mcreate = (options: any) => {
if (CHROME) {
delete options.icons;
options.contexts = options.contexts.
@ -185,7 +179,7 @@ locale.then(() => {
}
menus.create(options);
};
menuCreate({
mcreate({
id: "DTARegularLink",
contexts: ["link"],
icons: {
@ -194,7 +188,7 @@ locale.then(() => {
},
title: _("dta.regular.link"),
});
menuCreate({
mcreate({
id: "DTATurboLink",
contexts: ["link"],
icons: {
@ -203,7 +197,7 @@ locale.then(() => {
},
title: _("dta.turbo.link"),
});
menuCreate({
mcreate({
id: "DTARegularImage",
contexts: ["image"],
icons: {
@ -212,7 +206,7 @@ locale.then(() => {
},
title: _("dta.regular.image"),
});
menuCreate({
mcreate({
id: "DTATurboImage",
contexts: ["image"],
icons: {
@ -221,7 +215,7 @@ locale.then(() => {
},
title: _("dta.turbo.image"),
});
menuCreate({
mcreate({
id: "DTARegularMedia",
contexts: ["video", "audio"],
icons: {
@ -230,7 +224,7 @@ locale.then(() => {
},
title: _("dta.regular.media"),
});
menuCreate({
mcreate({
id: "DTATurboMedia",
contexts: ["video", "audio"],
icons: {
@ -239,7 +233,7 @@ locale.then(() => {
},
title: _("dta.turbo.media"),
});
menuCreate({
mcreate({
id: "DTARegularSelection",
contexts: ["selection"],
icons: {
@ -248,7 +242,7 @@ locale.then(() => {
},
title: _("dta.regular.selection"),
});
menuCreate({
mcreate({
id: "DTATurboSelection",
contexts: ["selection"],
icons: {
@ -257,7 +251,7 @@ locale.then(() => {
},
title: _("dta.turbo.selection"),
});
menuCreate({
mcreate({
id: "DTARegular",
contexts: ["all", "browser_action", "tools_menu"],
icons: {
@ -266,7 +260,7 @@ locale.then(() => {
},
title: _("dta.regular"),
});
menuCreate({
mcreate({
id: "DTATurbo",
contexts: ["all", "browser_action", "tools_menu"],
icons: {
@ -275,12 +269,12 @@ locale.then(() => {
},
title: _("dta.turbo"),
});
menuCreate({
mcreate({
id: "sep-1",
contexts: ["all", "browser_action", "tools_menu"],
type: "separator"
});
menuCreate({
mcreate({
id: "DTARegularAll",
contexts: ["all", "browser_action", "tools_menu"],
icons: {
@ -289,7 +283,7 @@ locale.then(() => {
},
title: _("dta-regular-all"),
});
menuCreate({
mcreate({
id: "DTATurboAll",
contexts: ["all", "browser_action", "tools_menu"],
icons: {
@ -301,12 +295,12 @@ locale.then(() => {
const sep2ctx = menus.ACTION_MENU_TOP_LEVEL_LIMIT === 6 ?
["all", "tools_menu"] :
["all", "browser_action", "tools_menu"];
menuCreate({
mcreate({
id: "sep-2",
contexts: sep2ctx,
type: "separator"
});
menuCreate({
mcreate({
id: "DTAAdd",
contexts: ["all", "browser_action", "tools_menu"],
icons: {
@ -317,12 +311,12 @@ locale.then(() => {
},
title: _("add-download"),
});
menuCreate({
mcreate({
id: "sep-3",
contexts: ["all", "browser_action", "tools_menu"],
type: "separator"
});
/* menuCreate({
mcreate({
id: "DTAManager",
contexts: ["all", "browser_action", "tools_menu"],
icons: {
@ -330,8 +324,8 @@ locale.then(() => {
32: "/style/button-manager@2x.png",
},
title: _("manager.short"),
});*/
menuCreate({
});
mcreate({
id: "DTAPrefs",
contexts: ["all", "browser_action", "tools_menu"],
icons: {
@ -567,6 +561,7 @@ locale.then(() => {
32: "/style/icon32.png",
48: "/style/icon48.png",
64: "/style/icon64.png",
96: "/style/icon96.png",
128: "/style/icon128.png",
256: "/style/icon256.png"
};
@ -663,13 +658,6 @@ locale.then(() => {
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 filters();
await getManager();

View File

@ -117,4 +117,3 @@ export const {windows} = polyfill;
export const {theme} = polyfill;
export const CHROME = navigator.appVersion.includes("Chrome/");
export const OPERA = navigator.appVersion.includes("OPR/");

132
lib/db.ts
View File

@ -1,25 +1,17 @@
"use strict";
// License: MIT
// eslint-disable-next-line no-unused-vars
import { BaseItem } from "./item";
// eslint-disable-next-line no-unused-vars
import { Download } from "./manager/download";
import { RUNNING, QUEUED, RETRYING } from "./manager/state";
import { storage } from "./browser";
import { sort } from "./sorting";
// License: MIT
const VERSION = 1;
const STORE = "queue";
interface Database {
init(): Promise<void>;
saveItems(items: Download[]): Promise<unknown>;
deleteItems(items: any[]): Promise<void>;
getAll(): Promise<BaseItem[]>;
}
export class IDB implements Database {
export const DB = new class DB {
private db?: IDBDatabase;
constructor() {
@ -114,7 +106,7 @@ export class IDB implements Database {
return await new Promise(this.saveItemsInternal.bind(this, items));
}
deleteItemsInternal(items: any[], resolve: () => void, reject: Function) {
deleteItemsInternal(items: any[], resolve: Function, reject: Function) {
if (!items || !items.length || !this.db) {
resolve();
return;
@ -147,120 +139,4 @@ export class IDB implements Database {
await this.init();
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();
}
}
}
}();

View File

@ -4,7 +4,7 @@
import {memoize} from "./memoize";
import langs from "../_locales/all.json";
import { sorted, naturalCaseCompare } from "./sorting";
import lf from "localforage";
export const ALL_LANGS = Object.freeze(new Map<string, string>(
sorted(Object.entries(langs), e => {
@ -40,11 +40,11 @@ class Entry {
this.message = entry.message.replace(/\$[A-Z0-9]+\$/g, (r: string) => {
hit = true;
const id = r.substr(1, r.length - 2).toLocaleLowerCase();
const placeholder = entry.placeholders[id];
if (!placeholder || !placeholder.content) {
const pholder = entry.placeholders[id];
if (!pholder || !pholder.content) {
throw new Error(`Invalid placeholder: ${id}`);
}
return `${placeholder.content}$`;
return `${pholder.content}$`;
});
if (!hit) {
throw new Error("Not entry-able");
@ -123,17 +123,14 @@ async function fetchLanguage(code: string) {
}
async function loadCached(): Promise<any> {
const cached = await lf.getItem<string>(CACHE_KEY);
if (!cached) {
return null;
function loadCached() {
if (document.location.pathname.includes("/windows/")) {
const cached = localStorage.getItem(CACHE_KEY);
if (cached) {
return JSON.parse(cached) as any[];
}
}
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;
return null;
}
async function loadRawLocales() {
@ -190,16 +187,16 @@ async function load(): Promise<Localization> {
}
CURRENT = currentLang;
// en is the base locale
let valid = await loadCached();
let valid = loadCached();
if (!valid) {
valid = await loadRawLocales();
await lf.setItem(CACHE_KEY, JSON.stringify(valid));
localStorage.setItem(CACHE_KEY, JSON.stringify(valid));
}
if (!valid.length) {
throw new Error("Could not load ANY of these locales");
throw new Error("Could not lood ANY of these locales");
}
const custom = await lf.getItem<string>(CUSTOM_KEY);
const custom = localStorage.getItem(CUSTOM_KEY);
if (custom) {
try {
valid.push(JSON.parse(custom));
@ -242,7 +239,7 @@ locale.then(l => {
/**
* Localize a message
* @param {string} id Identifier of the string to localize
* @param {string[]} [subst] Message substitutions
* @param {string[]} [subst] Message substituations
* @returns {string} Localized message
*/
export function _(id: string, ...subst: any[]) {
@ -305,11 +302,11 @@ export async function localize<T extends HTMLElement | DocumentFragment>(
return localize_(elem);
}
export async function saveCustomLocale(data?: string) {
export function saveCustomLocale(data?: string) {
if (!data) {
await lf.removeItem(CUSTOM_KEY);
localStorage.removeItem(CUSTOM_KEY);
return;
}
new Localization(JSON.parse(data));
await localStorage.setItem(CUSTOM_KEY, data);
localStorage.setItem(CUSTOM_KEY, data);
}

View File

@ -4,11 +4,9 @@
import { downloads, CHROME } from "./browser";
import { EventEmitter } from "../uikit/lib/events";
import { PromiseSerializer } from "./pserializer";
import lf from "localforage";
const VERSION = 1;
const STORE = "iconcache";
// eslint-disable-next-line no-magic-numbers
const CACHE_SIZES = CHROME ? [16, 32] : [16, 32, 64, 127];
@ -50,17 +48,37 @@ const SYNONYMS = Object.freeze(new Map<string, string>([
]));
export const IconCache = new class IconCache extends EventEmitter {
private db = lf.createInstance({name: STORE});
private db: Promise<IDBDatabase>;
private cache: Map<string, string>;
constructor() {
super();
this.db = this.init();
this.cache = new Map();
this.get = PromiseSerializer.wrapNew(8, this, this.get);
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) {
ext = ext.toLocaleLowerCase();
return SYNONYMS.get(ext) || ext;
@ -77,25 +95,36 @@ export const IconCache = new class IconCache extends EventEmitter {
if (rv) {
return rv;
}
const db = await this.db;
rv = this.cache.get(sext);
if (rv) {
return rv;
}
let result = await this.db.getItem<any>(sext);
if (!result) {
return this.cache.get(sext);
}
rv = this.cache.get(sext);
if (rv) {
return rv;
}
if (typeof result !== "string") {
result = URL.createObjectURL(result).toString();
}
this.cache.set(sext, result);
this.cache.set(ext, "");
return result;
return await new Promise<string | undefined>(resolve => {
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) {
resolve(undefined);
return;
}
if (typeof req.result !== "string") {
result = URL.createObjectURL(result).toString();
}
this.cache.set(sext, result);
this.cache.set(ext, "");
resolve(result);
};
});
}
async set(ext: string, manId: number) {
@ -116,9 +145,18 @@ export const IconCache = new class IconCache extends EventEmitter {
}
for (const {size, icon} of urls) {
this.cache.set(`${ext}-${size}`, URL.createObjectURL(icon));
await this.db.setItem(`${ext}-${size}`, icon);
}
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);
}
}();

View File

@ -81,14 +81,6 @@ function importMeta4(data: string) {
if (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);
}
catch (ex) {
@ -102,9 +94,9 @@ function parseKV(current: BaseItem, line: string) {
const [k, v] = line.split("=", 2);
switch (k.toLocaleLowerCase().trim()) {
case "referer": {
const refererUrls = getTextLinks(v);
if (refererUrls && refererUrls.length) {
current.referrer = refererUrls.pop();
const rurls = getTextLinks(v);
if (rurls && rurls.length) {
current.referrer = rurls.pop();
current.usableReferrer = decodeURIComponent(current.referrer || "");
}
break;
@ -116,7 +108,7 @@ export function importText(data: string) {
if (data.includes(NS_METALINK_RFC5854)) {
return importMeta4(data);
}
const splitter = /((?:.|\r)+)\n|(.+)$/g;
const splitter = /(.+)\n|(.+)$/g;
const spacer = /^\s+/;
let match;
let current: BaseItem | undefined = undefined;
@ -205,15 +197,15 @@ class MetalinkExporter {
const document = window.document.implementation.
createDocument(NS_METALINK_RFC5854, "metalink", null);
const root = document.documentElement;
root.setAttributeNS(NS_DTA, "generator", "TraitorousDownloading!");
root.setAttributeNS(NS_DTA, "generator", "DownThemAll!");
root.appendChild(document.createComment(
"metalink as exported by TraitorousDownloading!",
"metalink as exported by DownThemAll!",
));
for (const item of items) {
const anyItem = item as any;
const aitem = item as any;
const f = document.createElementNS(NS_METALINK_RFC5854, "file");
f.setAttribute("name", anyItem.currentName);
f.setAttribute("name", aitem.currentName);
if (item.batch) {
f.setAttributeNS(NS_DTA, "num", item.batch.toString());
}
@ -233,19 +225,13 @@ class MetalinkExporter {
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");
u.textContent = item.url;
f.appendChild(u);
if (anyItem.totalSize > 0) {
if (aitem.totalSize > 0) {
const s = document.createElementNS(NS_METALINK_RFC5854, "size");
s.textContent = anyItem.totalSize.toString();
s.textContent = aitem.totalSize.toString();
f.appendChild(s);
}
root.appendChild(f);

View File

@ -32,8 +32,7 @@ const OPTIONPROPS = Object.freeze([
"startDate",
"private",
"postData",
"paused",
"server", "cookies",
"paused"
]);
function maybeAssign(options: any, what: any) {

View File

@ -191,7 +191,6 @@ export class BaseDownload {
rv.destPath = dest.path;
rv.destFull = dest.full;
rv.currentName = this.browserName || rv.destName || rv.finalName;
rv.currentFull = `${dest.path}/${rv.currentName}`;
rv.error = this.error;
rv.ext = this.renamer.p_ext;
rv.retries = this.retries;

View File

@ -16,7 +16,7 @@ import {
DONE,
FORCABLE,
MISSING,
PAUSEABLE,
PAUSABLE,
PAUSED,
QUEUED,
RUNNING,
@ -235,7 +235,7 @@ export class Download extends BaseDownload {
}
async pause(retry?: boolean) {
if (!(PAUSEABLE & this.state)) {
if (!(PAUSABLE & this.state)) {
return;
}
@ -277,7 +277,7 @@ export class Download extends BaseDownload {
await downloads.cancel(id);
}
catch (ex) {
// ignored
// ingored
}
await new Promise(r => setTimeout(r, 1000));
try {
@ -285,7 +285,7 @@ export class Download extends BaseDownload {
}
catch (ex) {
console.error(id, ex.toString(), ex);
// ignored
// ingored
}
}
@ -399,7 +399,7 @@ export class Download extends BaseDownload {
}
}
updateFromSuggestion(state: any) {
updatefromSuggestion(state: any) {
const res: PrerollResults = {};
if (state.mime) {
res.mime = state.mime;

View File

@ -16,8 +16,7 @@ import { Download } from "./download";
import { ManagerPort } from "./port";
import { Scheduler } from "./scheduler";
import { Limits } from "./limits";
import { downloads, runtime, webRequest, CHROME, OPERA } from "../browser";
import { browser } from "webextension-polyfill-ts";
import { downloads, runtime, webRequest, CHROME } from "../browser";
const US = runtime.getURL("");
@ -62,9 +61,6 @@ export class Manager extends EventEmitter {
private deadlineTimer: number;
constructor() {
if (!document.location.href.includes("background")) {
throw new Error("Not on background");
}
super();
this.active = true;
this.shouldReload = false;
@ -92,11 +88,11 @@ export class Manager extends EventEmitter {
}
Bus.onPort("manager", (port: Port) => {
const managerPort = new ManagerPort(this, port);
const mport = new ManagerPort(this, port);
port.on("disconnect", () => {
this.ports.delete(managerPort);
this.ports.delete(mport);
});
this.ports.add(managerPort);
this.ports.add(mport);
return true;
});
Limits.on("changed", () => {
@ -127,7 +123,7 @@ export class Manager extends EventEmitter {
// Do not wait for the scheduler
this.resetScheduler();
this.emit("initialized");
this.emit("inited");
setTimeout(() => this.checkMissing(), MISSING_TIMEOUT);
runtime.onUpdateAvailable.addListener(() => {
if (this.running.size) {
@ -172,7 +168,7 @@ export class Manager extends EventEmitter {
return;
}
try {
download.updateFromSuggestion(state);
download.updatefromSuggestion(state);
}
finally {
const suggestion = {filename: download.dest.full};
@ -241,7 +237,7 @@ export class Manager extends EventEmitter {
if (this.notifiedFinished || this.running.size || this.retrying.size) {
return;
}
if (SOUNDS.value && !OPERA) {
if (SOUNDS.value) {
const audio = new Audio(runtime.getURL("/style/done.opus"));
audio.addEventListener("canplaythrough", () => audio.play());
audio.addEventListener("ended", () => document.body.removeChild(audio));
@ -262,61 +258,6 @@ export class Manager extends EventEmitter {
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[]) {
if (!items || !items.length) {
return;
@ -339,7 +280,6 @@ export class Manager extends EventEmitter {
this.save(items);
this.startNext();
}
*/
setDirty(item: Download) {
this.dirty.add(item);
@ -415,8 +355,8 @@ export class Manager extends EventEmitter {
this.startNext().catch(console.error);
}
else if (newState === RUNNING) {
// Usually we already added it. But if a user uses the built-in
// download manager to restart
// Usually we already added it. Buit if a user uses the built-in
// download manager to resart
// a download, we have not, so make sure it is added either way
this.running.add(download);
}
@ -474,18 +414,17 @@ export class Manager extends EventEmitter {
sorted(sids: number[]) {
try {
// Construct new items
const currentSids = new Map(this.sids);
const csids = new Map(this.sids);
let items = mapFilterInSitu(sids, sid => {
const item = currentSids.get(sid);
const item = csids.get(sid);
if (!item) {
return null;
}
currentSids.delete(sid);
csids.delete(sid);
return item;
}, e => !!e);
if (currentSids.size) {
items = items.concat(
sort(Array.from(currentSids.values()), i => i.position));
if (csids.size) {
items = items.concat(sort(Array.from(csids.values()), i => i.position));
}
this.items = items;
this.setPositions();

View File

@ -9,8 +9,6 @@ import { BaseDownload } from "./basedownload";
import { Manager } from "./man";
// eslint-disable-next-line no-unused-vars
import { Port } from "../bus";
// eslint-disable-next-line no-unused-vars
import { BaseItem } from "../item";
type SID = {sid: number};
type SIDS = {
@ -44,9 +42,6 @@ export class ManagerPort {
port.on("prefs", () => {
openPrefs();
});
port.on("import", ({items}: {items: BaseItem[]}) => {
API.regular(items, []);
});
port.on("all", () => this.sendAll());
port.on("removeSids", this.onMsgRemoveSids);
port.on("showSingle", async () => {

View File

@ -12,5 +12,5 @@ export const RETRYING = 1 << 7;
export const RESUMABLE = PAUSED | CANCELED | RETRYING;
export const FORCABLE = PAUSED | QUEUED | CANCELED | RETRYING;
export const PAUSEABLE = QUEUED | CANCELED | RUNNING | RETRYING;
export const PAUSABLE = QUEUED | CANCELED | RUNNING | RETRYING;
export const CANCELABLE = QUEUED | RUNNING | PAUSED | DONE | MISSING | RETRYING;

View File

@ -8,7 +8,7 @@ import {EventEmitter} from "./events";
const DEFAULTS = {
type: "basic",
iconUrl: extension.getURL("/style/icon64.png"),
title: "TraitorousDownloading!",
title: "DownThemAll!",
message: "message",
};
@ -25,7 +25,7 @@ export class Notification extends EventEmitter {
super();
this.generated = !id;
id = id || `TraitorousDownloading-notification${++gid}`;
id = id || `DownThemAll-notification${++gid}`;
if (typeof options === "string") {
options = {message: options};
}

View File

@ -99,5 +99,6 @@ export class PrefWatcher {
changed(prefs: any, key: string, value: any) {
this.value = value;
return true;
}
}

View File

@ -122,8 +122,3 @@ export const SUBFOLDER = new RecentList("subfolder", [
"downthemall",
]);
SUBFOLDER.init().catch(console.error);
export const SERVER = new RecentList("server", [
"",
]);
SERVER.init().catch(console.error);

View File

@ -9,12 +9,11 @@ import { donate, openPrefs, openUrls } from "./windowutils";
// eslint-disable-next-line no-unused-vars
import { filters, FAST, Filter } from "./filters";
import { WindowStateTracker } from "./windowstatetracker";
import { windows, CHROME } from "./browser";
import { windows } from "./browser";
// eslint-disable-next-line no-unused-vars
import { BaseItem } from "./item";
interface BaseMatchedItem extends BaseItem {
sidx?: number;
matched?: string | null;
prevMatched?: string | null;
}
@ -30,7 +29,6 @@ function computeSelection(
onlyFast: boolean): ItemDelta[] {
let ws = items.map((item, idx: number) => {
item.idx = item.idx || idx;
item.sidx = item.sidx || idx;
const {matched = null} = item;
item.prevMatched = matched;
item.matched = null;
@ -54,7 +52,7 @@ function computeSelection(
}
return items.filter(item => item.prevMatched !== item.matched).map(item => {
return {
idx: item.sidx as number,
idx: item.idx,
matched: item.matched
};
});
@ -100,11 +98,8 @@ export async function select(links: BaseItem[], media: BaseItem[]) {
type: "popup",
});
const window = await windows.create(windowOptions);
tracker.track(window.id);
tracker.track(window.id, null);
try {
if (!CHROME) {
windows.update(window.id, tracker.getOptions({}));
}
const port = await Promise.race<Port>([
new Promise<Port>(resolve => Bus.oncePort("select", port => {
resolve(port);

View File

@ -6,7 +6,7 @@ import { Bus, Port } from "./bus";
import { WindowStateTracker } from "./windowstatetracker";
import { Promised, timeout } from "./util";
import { donate } from "./windowutils";
import { windows, CHROME } from "./browser";
import { windows } from "./browser";
// eslint-disable-next-line no-unused-vars
import { BaseItem } from "./item";
@ -21,11 +21,8 @@ export async function single(item: BaseItem | null) {
type: "popup",
});
const window = await windows.create(windowOptions);
tracker.track(window.id);
tracker.track(window.id, null);
try {
if (!CHROME) {
windows.update(window.id, tracker.getOptions({}));
}
const port: Port = await Promise.race<Port>([
new Promise<Port>(resolve => Bus.oncePort("single", port => {
resolve(port);

View File

@ -3,8 +3,6 @@
import { Prefs } from "./prefs";
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"]));
@ -82,48 +80,34 @@ export class WindowStateTracker {
if (!this.windowId) {
return;
}
try {
const window = await windows.get(this.windowId);
if (!VALID_WINDOW_STATES.has(window.state)) {
return;
}
const previous = JSON.stringify(this);
this.width = window.width;
this.height = window.height;
this.left = window.left;
this.top = window.top;
this.state = window.state;
this.validate();
if (previous === JSON.stringify(this)) {
// Nothing changed
return;
}
await this.save();
const window = await windows.get(this.windowId);
if (!VALID_WINDOW_STATES.has(window.state)) {
return;
}
catch {
// ignored
const previous = JSON.stringify(this);
this.width = window.width;
this.height = window.height;
this.left = window.left;
this.top = window.top;
this.state = window.state;
this.validate();
if (previous === JSON.stringify(this)) {
// Nothing changed
return;
}
await this.save();
}
track(windowId: number, port?: Port) {
track(windowId: number, port: any) {
if (port) {
port.on("resized", this.update);
port.on("unload", e => this.finalize(e));
port.on("disconnect", this.finalize.bind(this));
}
this.windowId = windowId;
}
async finalize(state?: any) {
if (state) {
this.left = state.left;
this.top = state.top;
}
async finalize() {
await this.update();
this.windowId = 0;
if (state) {
await this.save();
}
}
async save() {

View File

@ -1,15 +1,11 @@
"use strict";
// License: MIT
import { windows, tabs, runtime, CHROME } from "../lib/browser";
import { windows, tabs, runtime } from "../lib/browser";
import { getManager } from "./manager/man";
import DEFAULT_ICONS from "../data/icons.json";
import { Prefs } from "./prefs";
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_LANG_URLS = Object.freeze(new Map([
@ -30,7 +26,7 @@ export async function mostRecentBrowser(incognito: boolean): Promise<any> {
}
catch {
try {
window = await windows.getLastFocused();
window = await windows.getlastFocused();
if (window.type !== "normal") {
throw new Error("not a normal window");
}
@ -118,37 +114,11 @@ export async function openManager(focus = true) {
await windows.update(tab.windowId, {focused: true});
return;
}
const tracker = new WindowStateTracker("manager", {
minWidth: 700,
minHeight: 500,
});
await tracker.init();
const windowOptions = tracker.getOptions({
const windowOptions = {
url,
type: "popup",
});
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);
}
};
await windows.create(windowOptions);
return;
}
if (focus) {

View File

@ -1,11 +1,11 @@
{
"manifest_version": 2,
"name": "TraitorousDownloading!",
"version": "4.2.6",
"name": "DownThemAll!",
"version": "4.2.1",
"description": "__MSG_extensionDescription__",
"homepage_url": "https://github.com/lordwelch/downthemall",
"author": "lordwelch",
"homepage_url": "https://downthemall.org/",
"author": "Nils Maier",
"default_locale": "en",
@ -16,6 +16,7 @@
"32": "style/icon32.png",
"48": "style/icon48.png",
"64": "style/icon64.png",
"96": "style/icon96.png",
"128": "style/icon128.png",
"256": "style/icon256.png"
},
@ -23,7 +24,6 @@
"permissions": [
"<all_urls>",
"contextMenus",
"cookies",
"downloads",
"downloads.open",
"downloads.shelf",
@ -54,10 +54,11 @@
"32": "style/icon32.png",
"48": "style/icon48.png",
"64": "style/icon64.png",
"96": "style/icon96.png",
"128": "style/icon128.png",
"256": "style/icon256.png"
},
"default_title": "TraitorousDownloading!"
"default_title": "DownThemAll!"
},
"options_ui": {
@ -67,7 +68,7 @@
"browser_specific_settings": {
"gecko": {
"id": "downloading@traitorousenterprises.net",
"id": "dtalite@downthemall.org",
"strict_min_version": "67.0"
}
}

View File

@ -1,14 +1,13 @@
{
"name": "tdl",
"name": "dtalite",
"version": "4.0.0",
"description": "TraitorousDownloading!",
"description": "DownThemAll! lite",
"main": "main.js",
"directories": {
"lib": "lib"
},
"scripts": {
"build": "util/build.py",
"build:cleanup": "rm -rf bundles",
"build:bundles": "webpack",
"build:regexps": "node util/makexregexps.js > data/xregexps.json",
"stats": "cloc --vcs=git --exclude-lang=Markdown,SVG",
@ -35,10 +34,8 @@
"dependencies": {
"@types/psl": "^1.1.0",
"@types/whatwg-mimetype": "^2.1.0",
"localforage": "^1.9.0",
"psl": "^1.4.0",
"webextension-polyfill": "^0.5.0",
"webextension-polyfill-ts": "^0.22.0",
"whatwg-mimetype": "^2.3.0"
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 747 B

After

Width:  |  Height:  |  Size: 763 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 711 B

After

Width:  |  Height:  |  Size: 725 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

After

Width:  |  Height:  |  Size: 1.6 KiB

View File

@ -46,11 +46,6 @@
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;
@ -611,11 +606,6 @@ ul.context-menu ul {
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);

Binary file not shown.

Before

Width:  |  Height:  |  Size: 130 KiB

After

Width:  |  Height:  |  Size: 164 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 8.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 810 B

After

Width:  |  Height:  |  Size: 673 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 34 KiB

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 KiB

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.2 KiB

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.6 KiB

After

Width:  |  Height:  |  Size: 3.8 KiB

BIN
style/icon96.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.3 KiB

View File

@ -64,7 +64,7 @@ p.example {
}
#options > #subfolderOptions,
#options > #maskOptions, #options > #serverOptions {
#options > #maskOptions {
display: grid;
grid-template-columns: 2fr auto auto;
}
@ -85,4 +85,4 @@ h3 {
#btnDownload {
font-weight: bold;
}
}

View File

@ -108,13 +108,8 @@ export class MenuItem extends MenuItemBase {
super(owner, id, text, options);
this.disabled = options.disabled === "true";
this.elem.setAttribute("aria-role", "menuitem");
this.clicked = this.clicked.bind(this);
this.elem.addEventListener("click", this.clicked);
this.elem.addEventListener("contextmenu", this.clicked);
}
clicked() {
this.owner.emit("clicked", this.id, this.autoHide);
this.elem.addEventListener(
"click", () => this.owner.emit("clicked", this.id, this.autoHide));
}
get disabled() {

View File

@ -104,7 +104,7 @@ export class EventEmitter {
for (const e of Array.from(handlers)) {
try {
// eslint-disable-next-line prefer-spread
handled = !!e.apply(null, args) || handled;
handled = handled || !!e.apply(null, args);
}
catch (ex) {
console.error(`Event handler ${e} for ${event} failed`, ex.toString(), ex.stack, ex);

View File

@ -45,10 +45,10 @@ export class TableEvents extends BaseTable {
"scroll", debounce(this.scrolled.bind(this), SCROLL_DEBOUNCE), {
passive: true
});
body.addEventListener("contextmenu", this.contextmenu.bind(this), true);
table.addEventListener("keypress", 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));
}

View File

@ -20,19 +20,16 @@ FILES = [
"LICENSE.*",
]
RELEASE_ID = "downloading@traitorousenterprises.net"
RELEASE_ID = "{DDC359D1-844A-42a7-9AA1-88A850A938A8}"
UNCOMPRESSABLE = set((".png", ".jpg", ".zip", ".woff2"))
LICENSED = set((".css", ".html", ".js", "*.ts"))
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_CHROME = set(("menus", "sessions", "theme"))
SCRIPTS = [
"yarn build:cleanup",
"yarn build:regexps",
"yarn build:bundles",
]
@ -48,17 +45,17 @@ def check_licenses():
raise Exception(f"No license in {file}")
def files(additional_ignored):
def files():
p = Path("")
for pattern in FILES:
for file in sorted(p.glob(pattern)):
if file.name in IGNORED or file.name in additional_ignored or not file.is_file():
if file.name in IGNORED or not file.is_file():
continue
yield file
def build(out, manifest, additional_ignored=set()):
with ZipFile(out, "w", compression=ZIP_DEFLATED, allowZip64=False) as zp:
for file in files(additional_ignored):
def build(out, manifest):
with ZipFile(out, "w", compression=ZIP_DEFLATED, allowZip64=False, compresslevel=2) as zp:
for file in files():
if str(file) == "manifest.json":
buf = manifest
else:
@ -71,7 +68,7 @@ def build(out, manifest, additional_ignored=set()):
if file.suffix in UNCOMPRESSABLE:
zp.writestr(zinfo, buf, compress_type=ZIP_STORED)
else:
zp.writestr(zinfo, buf, compress_type=ZIP_DEFLATED)
zp.writestr(zinfo, buf, compress_type=ZIP_DEFLATED, compresslevel=2)
print(file)
@ -88,14 +85,14 @@ def build_firefox(args):
if args.mode != "release":
infos["version_name"] = f"{version}-{args.mode}"
infos["browser_specific_settings"]["gecko"]["id"] = f"{args.mode}@traitorousenterprises.net"
infos["browser_specific_settings"]["gecko"]["id"] = f"{args.mode}@downthemall.org"
infos["short_name"] = infos.get("name")
infos["name"] = f"{infos.get('name')} {args.mode}"
else:
infos["browser_specific_settings"]["gecko"]["id"] = RELEASE_ID
infos["permissions"] = [p for p in infos.get("permissions") if not p in PERM_IGNORED_FX]
out = Path("web-ext-artifacts") / f"tdl-{version}-{args.mode}-fx.zip"
out = Path("web-ext-artifacts") / f"dta-{version}-{args.mode}-fx.zip"
if not out.parent.exists():
out.parent.mkdir()
if out.exists():
@ -103,8 +100,8 @@ def build_firefox(args):
print("Output", out)
build(out, json.dumps(infos, indent=2).encode("utf-8"))
def build_chromium(args, pkg, additional_ignored=set()):
def build_chrome(args):
now = datetime.now().strftime("%Y%m%d%H%M%S")
with open("manifest.json") as manip:
infos = json.load(manip, object_pairs_hook=OrderedDict)
@ -120,15 +117,15 @@ def build_chromium(args, pkg, additional_ignored=set()):
infos["version_name"] = f"{version}-{args.mode}"
infos["short_name"] = infos.get("name")
infos["name"] = f"{infos.get('name')} {args.mode}"
infos["permissions"] = [p for p in infos.get("permissions") if not p in PERM_IGNORED_CHROME]
out = Path("web-ext-artifacts") / f"tdl-{version}-{args.mode}-{pkg}.zip"
out = Path("web-ext-artifacts") / f"dta-{version}-{args.mode}-crx.zip"
if not out.parent.exists():
out.parent.mkdir()
if out.exists():
out.unlink()
print("Output", out)
build(out, json.dumps(infos, indent=2).encode("utf-8"), additional_ignored=additional_ignored)
build(out, json.dumps(infos, indent=2).encode("utf-8"))
def main():
from argparse import ArgumentParser
@ -143,9 +140,8 @@ def main():
else:
run([script], shell=True)
build_firefox(args)
build_chromium(args, "crx")
build_chromium(args, "opr", IGNORED_OPERA)
build_chrome(args)
print("DONE.")
if __name__ == "__main__":
main()
main()

View File

@ -6,7 +6,7 @@ langs = sorted(Path("_locales").glob("**/messages.json"), key=lambda p: p.parent
all = {}
for m in langs:
loc = m.parent.name
with m.open("r", encoding="utf-8") as mp:
with m.open("r") as mp:
lang = json.load(mp).get("language").get("message")
if not lang:
raise Exception(f"{m}: no language")

View File

@ -3,7 +3,7 @@
<!-- License: gpl-v2 -->
<head>
<meta charset="utf-8">
<title data-i18n="manager.title">TraitorousDownloading!</title>
<title data-i18n="manager.title">DownThemAll!</title>
<style>
@import "/uikit/css/virtualtable.css";
@import "/uikit/css/modal.css";
@ -13,8 +13,8 @@
<link rel="icon" href="/style/icon32.png">
<link rel="icon" sizes="16x16" href="/style/icon16.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="96x96" href="/style/icon96.png">
<link rel="icon" sizes="128x128" href="/style/icon128.png">
<link rel="icon" sizes="256x256" href="/style/icon256.png">
<script defer src="/bundles/common.js"></script>

View File

@ -131,6 +131,7 @@ addEventListener("DOMContentLoaded", function dom() {
addEventListener("contextmenu", event => {
event.preventDefault();
event.stopPropagation();
return false;
});

View File

@ -4,7 +4,6 @@
import { EventEmitter } from "../../lib/events";
// eslint-disable-next-line no-unused-vars
import { runtime, RawPort } from "../../lib/browser";
import { WindowState } from "../windowstate";
const PORT = new class Port extends EventEmitter {
port: RawPort | null;
@ -15,17 +14,6 @@ const PORT = new class Port extends EventEmitter {
if (!this.port) {
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) => {
if (typeof msg === "string") {
this.emit(msg);

View File

@ -41,6 +41,7 @@ import { IconCache } from "../../lib/iconcache";
import * as imex from "../../lib/imex";
// eslint-disable-next-line no-unused-vars
import { BaseItem } from "../../lib/item";
import { API } from "../../lib/api";
const TREE_CONFIG_VERSION = 2;
const RUNNING_TIMEOUT = 1000;
@ -121,8 +122,6 @@ export class DownloadItem extends EventEmitter {
public currentName: string;
public currentFull: string;
public ext?: string;
public position: number;
@ -570,7 +569,9 @@ export class DownloadTable extends VirtualTable {
ctx.on("dismissed", () => this.table.focus());
this.on("contextmenu", (tree, event) => {
this.showContextMenu(event);
if (!this.selection.empty) {
this.showContextMenu(event);
}
return true;
});
@ -790,7 +791,7 @@ export class DownloadTable extends VirtualTable {
const items = this.getSelectedItems();
const states = items.reduce((p, c) => p |= c.state, 0);
if (!(states & DownloadState.PAUSEABLE)) {
if (!(states & DownloadState.PAUSABLE)) {
this.pauseAction.disabled = true;
}
@ -828,7 +829,7 @@ export class DownloadTable extends VirtualTable {
}
pauseDownloads() {
const sids = this.getSelectedSids(DownloadState.PAUSEABLE);
const sids = this.getSelectedSids(DownloadState.PAUSABLE);
if (!sids.length) {
return;
}
@ -1203,7 +1204,7 @@ export class DownloadTable extends VirtualTable {
if (!items || !items.length) {
return;
}
PORT.post("import", {items});
API.regular(items, []);
};
reader.readAsText(picker.files[0], "utf-8");
};

View File

@ -182,7 +182,7 @@ export class Tooltip {
}
const icon = item.largeIcon;
this.icon.className = icon;
this.name.textContent = item.currentFull;
this.name.textContent = item.destFull;
this.from.textContent = item.usable;
this.size.textContent = item.fmtSize;
this.date.textContent = new Date(item.startDate).toLocaleString();

View File

@ -100,10 +100,10 @@
<li class="sep">
<hr>
</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">
<span data-i18n="manager.short"></span>
</li> -->
</li>
<li id="prefs" data-action="open-prefs">
<span class="icon icon-settings"></span>
<span data-i18n="prefs.short">Preferences</span>
@ -111,4 +111,4 @@
</ul>
</body>
</html>
</html>

View File

@ -16,12 +16,12 @@
}
</style>
<title data-i18n="prefs.title">TraitorousDownloading! - Preferences</title>
<title data-i18n="prefs.title">DownThemAll! - Preferences</title>
<link rel="icon" href="/style/icon32.png">
<link rel="icon" sizes="16x16" href="/style/icon16.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="96x96" href="/style/icon96.png">
<link rel="icon" sizes="128x128" href="/style/icon128.png">
<link rel="icon" sizes="256x256" href="/style/icon256.png">
<script defer src="/bundles/common.js"></script>
@ -49,7 +49,7 @@
<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="turbo"> <span data-i18n="pref-button-type-turbo"></span></label>
<label style="display: none;"><input type="radio" name="pref-button-type" value="manager"> <span data-i18n="pref-button-type-manager"></span></label>
<label><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">
@ -59,7 +59,7 @@
</div>
</div>
<hr>
<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-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-sounds"> <span data-i18n="pref-sounds"></span></label>
<label><input type="checkbox" id="pref-hide-context"> <span data-i18n="pref-hide-context"></span></label>
@ -68,16 +68,15 @@
<button id="reset-layout" data-i18n="reset-layouts"></button>
</div>
</fieldset>
<fieldset style="display: none;">
<fieldset>
<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-show-urls"> <span data-i18n="pref-show-urls"></span></label>
</fieldset>
<fieldset>
<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 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-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-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>

View File

@ -19,7 +19,7 @@ import { iconForPath, visible } from "../lib/windowutils";
import { VirtualTable } from "../uikit/lib/table";
import { Icons } from "./icons";
import { $ } from "./winutil";
import { runtime, storage, OPERA } from "../lib/browser";
import { runtime, storage } from "../lib/browser";
import "./theme";
const ICON_BASE_SIZE = 16;
@ -558,17 +558,9 @@ addEventListener("DOMContentLoaded", async () => {
new BoolPref("pref-manager-in-popup", "manager-in-popup");
new BoolPref("pref-queue-notification", "queue-notification");
new BoolPref("pref-finish-notification", "finish-notification");
// 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-sounds", "sounds");
new BoolPref("pref-hide-context", "hide-context");
new BoolPref("pref-tooltip", "tooltip");
new BoolPref("pref-cookies", "cookies");
new BoolPref("pref-open-manager-on-queue", "open-manager-on-queue");
new BoolPref("pref-text-links", "text-links");
new BoolPref("pref-add-paused", "add-paused");
@ -642,11 +634,10 @@ addEventListener("DOMContentLoaded", async () => {
$<HTMLInputElement>("#loadCustomLocale").addEventListener("click", () => {
customLocale.click();
});
$<HTMLInputElement>("#clearCustomLocale").
addEventListener("click", async () => {
await saveCustomLocale(undefined);
runtime.reload();
});
$<HTMLInputElement>("#clearCustomLocale").addEventListener("click", () => {
saveCustomLocale(undefined);
runtime.reload();
});
customLocale.addEventListener("change", async () => {
if (!customLocale.files || !customLocale.files.length) {
return;
@ -664,9 +655,8 @@ addEventListener("DOMContentLoaded", async () => {
reader.onerror = reject;
reader.readAsText(file);
});
await saveCustomLocale(text);
if (confirm("Imported your file.\nWant to reload the extension now?")) {
saveCustomLocale(text);
if (confirm("Imported your file.\nWant to relaod the extension now?")) {
runtime.reload();
}
}

View File

@ -4,7 +4,7 @@
<head>
<meta charset="utf-8">
<title data-i18n="select.title">TraitorousDownloading! - Select your links</title>
<title data-i18n="select.title">DownThemAll! - Select your links</title>
<style>
@import "/uikit/css/virtualtable.css";
@import "/uikit/css/modal.css";
@ -14,8 +14,8 @@
<link rel="icon" href="/style/icon32.png">
<link rel="icon" sizes="16x16" href="/style/icon16.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="96x96" href="/style/icon96.png">
<link rel="icon" sizes="128x128" href="/style/icon128.png">
<link rel="icon" sizes="256x256" href="/style/icon256.png">
<script defer src="/bundles/common.js"></script>
@ -75,17 +75,6 @@
<input type="checkbox" id="maskOnceCheck">
<span data-i18n="useonlyonce">Use only once</span>
</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 id="notification"></section>
<section id="buttons">

View File

@ -7,7 +7,7 @@ import { ContextMenu } from "./contextmenu";
import { iconForPath } from "../lib/windowutils";
import { _, localize } from "../lib/i18n";
import { Prefs } from "../lib/prefs";
import { MASK, FASTFILTER, SUBFOLDER, SERVER } from "../lib/recentlist";
import { MASK, FASTFILTER, SUBFOLDER } from "../lib/recentlist";
import { WindowState } from "./windowstate";
import { Dropdown } from "./dropdown";
import { Keys } from "./keys";
@ -43,7 +43,6 @@ const NUM_FILTER_CLASSES = 8;
let Table: SelectionTable;
let Mask: Dropdown;
let OServer: Dropdown;
let FastFilter: Dropdown;
let Subfolder: Dropdown;
@ -51,7 +50,6 @@ let Subfolder: Dropdown;
type DELTAS = {deltaLinks: ItemDelta[]; deltaMedia: ItemDelta[]};
interface BaseMatchedItem extends BaseItem {
backIdx: number;
matched?: string | null;
rowid: number;
}
@ -140,8 +138,7 @@ class ItemCollection {
constructor(items: BaseMatchedItem[]) {
this.items = items;
this.assignRows();
this.items.forEach((item, idx) => item.backIdx = idx);
this.indexes = new Map(items.map((i, idx) => [idx, i]));
this.indexes = new Map(items.map(i => [i.idx, i]));
}
assignRows() {
@ -162,11 +159,11 @@ class ItemCollection {
return rv;
}
get checkedBackIndexes() {
get checkedIndexes() {
const rv: number[] = [];
this.items.forEach(function(item) {
this.items.forEach(function (item) {
if (item.matched && item.matched !== "unmanual") {
rv.push(item.backIdx);
rv.push(item.idx);
}
});
return rv;
@ -434,12 +431,6 @@ class SelectionTable extends VirtualTable {
return true;
});
Prefs.get("cookies").then(checked=>{
if ($<HTMLInputElement>("#cookiesCheck").checked != !!checked) {
$<HTMLInputElement>("#cookiesCheck").click();
}
});
this.init();
this.switchTab(type);
}
@ -685,14 +676,10 @@ async function download(paused = false) {
if (!mask) {
throw new Error("error.invalidMask");
}
const server = OServer.value;
if (!server) {
throw new Error("error.invalidServer");
}
const subfolder = Subfolder.value;
validateSubfolder(subfolder);
const items = Table.items.checkedBackIndexes;
const items = Table.items.checkedIndexes;
if (!items.length) {
throw new Error("error.noItemsSelected");
}
@ -727,9 +714,6 @@ async function download(paused = false) {
fastOnce: $<HTMLInputElement>("#fastOnceCheck").checked,
subfolder,
subfolderOnce: $<HTMLInputElement>("#subfolderOnceCheck").checked,
server,
serverOnce: $<HTMLInputElement>("#serverOnceCheck").checked,
cookies: $<HTMLInputElement>("#cookiesCheck").checked,
}
});
}
@ -805,9 +789,7 @@ function cancel() {
}
async function init() {
await Promise.all([MASK.init(), FASTFILTER.init(), SUBFOLDER.init(), SERVER.init()]);
OServer = new Dropdown("#server", SERVER.values);
OServer.on("changed", clearErrors);
await Promise.all([MASK.init(), FASTFILTER.init(), SUBFOLDER.init()]);
Mask = new Dropdown("#mask", MASK.values);
Mask.on("changed", clearErrors);
FastFilter = new Dropdown("#fast", FASTFILTER.values);
@ -906,6 +888,7 @@ addEventListener("DOMContentLoaded", function dom() {
addEventListener("contextmenu", event => {
event.preventDefault();
event.stopPropagation();
return false;
});
@ -915,3 +898,4 @@ addEventListener("beforeunload", function() {
});
new WindowState(PORT);

View File

@ -4,7 +4,7 @@
<head>
<meta charset="utf-8">
<title data-i18n="single.title">TraitorousDownloading! - Add a Link</title>
<title data-i18n="single.title">DownThemAll! - Add a Link</title>
<style>
@import "/uikit/css/modal.css";
@import "/style/single.css";
@ -13,8 +13,8 @@
<link rel="icon" href="/style/icon32.png">
<link rel="icon" sizes="16x16" href="/style/icon16.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="96x96" href="/style/icon96.png">
<link rel="icon" sizes="128x128" href="/style/icon128.png">
<link rel="icon" sizes="256x256" href="/style/icon256.png">
<script defer src="/bundles/common.js"></script>
@ -32,12 +32,12 @@
<input type="text" id="URL">
<h2 data-i18n="custom-filename">Custom Filename</h2>
<input type="text" id="filename">
<h3 data-i18n="referrer">Referring page (Not implemented)</h3>
<h3 data-i18n="referrer">Referring page</h3>
<input type="text" id="referrer">
<h3 data-i18n="title" style="display: none;">Title</h3>
<input type="text" id="title" style="display: none;">
<h3 data-i18n="description" style="display: none;">Description</h3>
<input type="text" id="description" style="display: none;">
<h3 data-i18n="title">Title</h3>
<input type="text" id="title">
<h3 data-i18n="description">Description</h3>
<input type="text" id="description">
<h3 data-i18n="mask">Mask</h3>
<div id="maskOptions">
<input type="text" id="mask">
@ -47,18 +47,6 @@
<span data-i18n="useonlyonce">Use only once</span>
</label>
</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>
<div id="subfolderOptions">
<input type="text" id="subfolder" data-i18n="placeholder=subfolder.placeholder">

View File

@ -4,10 +4,9 @@
import ModalDialog from "../uikit/lib/modal";
import { _, localize } from "../lib/i18n";
import { Prefs } from "../lib/prefs";
// eslint-disable-next-line no-unused-vars
import { Item, BaseItem } from "../lib/item";
import { MASK, SUBFOLDER, SERVER } from "../lib/recentlist";
import { MASK, SUBFOLDER } from "../lib/recentlist";
import { BatchGenerator } from "../lib/batches";
import { WindowState } from "./windowstate";
import { Dropdown } from "./dropdown";
@ -23,7 +22,6 @@ const PORT = runtime.connect(null, { name: "single" });
let ITEM: BaseItem;
let Mask: Dropdown;
let Subfolder: Dropdown;
let OServer: Dropdown;
class BatchModalDialog extends ModalDialog {
private readonly gen: BatchGenerator;
@ -133,11 +131,6 @@ async function downloadInternal(paused: boolean) {
return displayError("error.invalidMask");
}
const server = OServer.value;
if (!server) {
throw new Error("error.invalidServer");
}
const subfolder = Subfolder.value.trim();
validateSubFolder(subfolder);
@ -206,9 +199,6 @@ async function downloadInternal(paused: boolean) {
maskOnce: $<HTMLInputElement>("#maskOnceCheck").checked,
subfolder,
subfolderOnce: $<HTMLInputElement>("#subfolderOnceCheck").checked,
server,
serverOnce: $<HTMLInputElement>("#serverOnceCheck").checked,
cookies: $<HTMLInputElement>("#cookiesCheck").checked,
}
});
return null;
@ -225,15 +215,9 @@ function cancel() {
async function init() {
await localize(document.documentElement);
await Promise.all([MASK.init(), SUBFOLDER.init(), SERVER.init()]);
await Promise.all([MASK.init(), SUBFOLDER.init()]);
Mask = new Dropdown("#mask", MASK.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() {

View File

@ -2,7 +2,7 @@
// License: MIT
export function $<T extends HTMLElement>(
q: string, el?: HTMLElement | DocumentFragment | Document): T {
q: string, el?: HTMLElement | DocumentFragment): T {
if (!el) {
el = document;
}

1965
yarn.lock

File diff suppressed because it is too large Load Diff