45 Commits

Author SHA1 Message Date
82e7361567 Version 4.2.6 2019-11-26 13:13:09 +01:00
5c84493a0f build: cleanup stale bundles 2019-11-26 13:05:16 +01:00
83cb8e32f1 Update Readme.md 2019-11-25 19:14:51 +01:00
c49af54532 Remove compresslevel from build.py
Makes python3.6 choke
2019-11-25 19:08:33 +01:00
eee8c4ea1a Version 4.2.5 2019-11-21 15:07:36 +01:00
858b8f277e Update dev dependencies 2019-11-21 13:25:20 +01:00
6841fdcfc8 New icon 2019-11-21 13:25:20 +01:00
1e8e7ad6ec Use correct grouping 2019-11-21 13:21:02 +01:00
6ed84b9560 Move landing pages into own repo 2019-11-21 12:03:29 +01:00
f739cb789c Adjust some darkmode colors 2019-11-21 11:40:39 +01:00
0d470a7ce0 Handle CRLF in imports
Closes #186
2019-11-21 11:40:39 +01:00
9ec1d46787 Update of Danish translation (#185) 2019-11-21 11:21:47 +01:00
ba283e9221 Version 4.2.4 2019-10-28 11:28:16 +01:00
e549886532 Do not mess up queue when sorting in select
Closes #181
2019-10-28 11:13:19 +01:00
d3b7032229 Version 4.2.3 2019-10-13 13:44:38 +02:00
5586bcb671 Update changelog 2019-10-13 13:44:05 +02:00
bd72c417d2 Remove sounds on Opera
See #125
2019-10-13 13:44:05 +02:00
52643e0bec Update feature_request.md 2019-10-11 17:38:14 +02:00
af59fb60ff Improve bug report template. 2019-10-11 17:37:04 +02:00
ac2bc8cdfd Add privacy notice 2019-10-11 17:26:17 +02:00
c5309a8923 Always import links in the right context
Closes #163
2019-10-11 15:47:16 +02:00
1370723e6d Push raw indexes 2019-10-11 15:47:16 +02:00
4ba827fc15 Make sure we're on background 2019-10-11 15:47:16 +02:00
b2e20b9875 Update zh_CN translation (#161) 2019-10-11 13:39:36 +02:00
ef9cff003d Update ru translation
Closes #160
2019-10-11 13:37:21 +02:00
74b3ce7eb1 Dark mode: improve display of disabled menu items 2019-10-11 13:28:41 +02:00
6528e2118e Show context when no selection
Closes #162
2019-10-11 13:28:18 +02:00
c901438216 Link landing from changelog 2019-10-09 20:56:02 +02:00
7a0718d9cc Version 4.2.2 2019-10-09 19:13:13 +02:00
a7cc3c7fff Fix landing title 2019-10-09 18:59:45 +02:00
9d313f319d Use the correct full path in tooltips 2019-10-09 18:32:22 +02:00
856044c88c Open landing page on installs 2019-10-09 18:26:36 +02:00
de1b13a50f Add landing page 2019-10-09 18:10:40 +02:00
a981b7b8c7 Update nl locale
Closes #157
2019-10-08 22:24:32 +02:00
abe9d82d03 Always notify all observers 2019-10-08 22:24:32 +02:00
49a3f08a9a Update Arabic translation (#158) 2019-10-08 15:12:38 +02:00
afaa75fcdc Update Bulgarian localization (#156) 2019-10-08 15:12:14 +02:00
a5c749412a Work around Firefox window.create({left, top}) issues 2019-10-07 14:55:01 +02:00
e64da40355 Track window state of manager windows
Closes #154
2019-10-07 14:55:00 +02:00
05e7283f9f Update messages.json (#155) 2019-10-07 14:27:19 +02:00
bea8e230fb Update pl translation
Closes #151
2019-10-06 23:04:53 +02:00
23c1ece807 4 more French strings (#152) 2019-10-06 23:02:11 +02:00
539d340f1a Make prefwatcher not stop event chain
See #148
2019-10-06 22:33:23 +02:00
876486bbf5 Update hungarian translation (#149) 2019-10-06 19:34:58 +02:00
9179851c85 Update zh_TW translation (#147) 2019-10-06 08:44:31 +02:00
55 changed files with 704 additions and 868 deletions

View File

@ -1,6 +1,6 @@
---
name: Bug report
about: Create a report to help us improve
about: Create a report to help us improve DownThemAll!
title: ''
labels: ''
assignees: ''
@ -8,9 +8,9 @@ assignees: ''
---
**Desktop (please complete the following information):**
- OS: [e.g. iOS]
- Browser [e.g. chrome, safari]
- Version [e.g. 22]
- 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]
**Describe the bug**
A clear and concise description of what the bug is.

View File

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

View File

@ -1,5 +1,5 @@
![DownThemAll!](https://raw.githubusercontent.com/downthemall/downthemall/master/style/icon96.png)
![DownThemAll!](https://raw.githubusercontent.com/downthemall/downthemall/master/style/icon128.png)
# DownThemAll! WE
@ -31,28 +31,59 @@ If you would like to help out translating DTA, please see our [translation guide
## Development
### Requirements
You will want to `yarn` the development dependencies such as webpack first.
- [node](https://nodejs.org/en/)
- [yarn](https://yarnpkg.com/)
- [python3](https://www.python.org/) >= 3.6 (to build zips)
- [web-ext](https://www.npmjs.com/package/web-ext) (for development ease)
Afterwards, you will want to run`yarn watch`.
### Setup
You will want to run `yarn` to install the development dependencies such as webpack first.
### Making changes
Just use your favorite text editor to edit the files.
You will want to run`yarn watch`.
This will run the webpack bundler in watch mode, transpiling the TypeScript to Javascript and updating bundles as you change the source.
Please note: You have to run `yarn watch` (at least once) as it builds the actual script bundles.
Please note: You have to run `yarn watch` or `yarn build` (at least once) as it builds the actual script bundles.
### Firefox
### Running in Firefox
I recommend you install the [`web-ext`](https://www.npmjs.com/package/web-ext) tools from mozilla. It is not listed as a dependency by design at it causes problems with dependency resolution in yarn right now if installed in the same location as the rest of the dependencies.
If you did, then running `yarn webext` (additionally to `yarn watch`) will run the WebExtension in a development profile. This will use the directory `../dtalite.p` to keep a development profile. You might need to create this directory before you use this command. Furthermore `yarn webext` will watch for changes to the sources and automatically reload the extension.
Alternative, you can also `yarn build`, which then builds an *unsigned* zip that you can then install permanently in a browser that does not enforce signing (i.e. Nightly or the Unbranded Firefox with the right about:config preferences).
Alternatively, you can also `yarn build`, which then builds an *unsigned* zip that you can then install permanently in a browser that does not enforce signing (i.e. Nightly or the Unbranded Firefox with the right about:config preferences).
### Chrome
### Running in Chrome/Chromium/etc
You have to build the bundles first, of course.
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

@ -657,6 +657,22 @@
"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"

View File

@ -642,7 +642,7 @@
"description": "pref text"
},
"pref_retry_time": {
"message": "Опит на всеки (в минути)",
"message": "Нов опит на всеки (в минути)",
"description": "pref text"
},
"pref_show_urls": {
@ -657,6 +657,22 @@
"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"

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 ændre denne indstillinger under Indstillinger senere",
"message": "Du kan altid ændre dette valg under indstillinger",
"description": "Checkbox label text for decision confirmations"
},
"check_selected_items": {
@ -657,6 +657,22 @@
"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"
@ -716,7 +732,7 @@
"description": "Action for removing complete downloads"
},
"remove_complete_downloads_question": {
"message": "Vil du rydde alle færdiggjorte downloads?",
"message": "Vil du rydde op i alle færdiggjorte downloads?",
"description": "Messagebox text"
},
"remove_complete_filter_downloads_question": {
@ -770,7 +786,7 @@
"description": "Menu text"
},
"remove_downloads_title": {
"message": "Er du sikker på, du vil rydde downloads?",
"message": "Er du sikker på, du vil rydde op i downloads?",
"description": "Messagebox title; manager"
},
"remove_download_question": {
@ -800,7 +816,7 @@
"description": "Menu text"
},
"remove_missing_downloads_question": {
"message": "Vil du rydde alle manglende downloads?",
"message": "Vil du rydde op i alle manglende downloads?",
"description": "Messagebox text"
},
"remove_paused_downloads": {

View File

@ -657,6 +657,22 @@
"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"

View File

@ -657,6 +657,22 @@
"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"

View File

@ -654,7 +654,7 @@
"description": "checkbox text"
},
"pref_text_links": {
"message": "Webサイトの文字列リンクを抽出する (但し、遅い)",
"message": "Webサイトの文字列からリンクを抽出する (但し、遅い)",
"description": "Preferences/General"
},
"pref_theme": {

View File

@ -657,6 +657,22 @@
"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"

View File

@ -156,7 +156,7 @@
"description": "Filter label for the Archives filter"
},
"deffilter_aud": {
"message": "Audio (mp3, flac, wav, …)",
"message": "Dźwięk (mp3, flac, wav, …)",
"description": "Filter label for the Audio filter"
},
"deffilter_bin": {
@ -657,6 +657,22 @@
"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"

View File

@ -657,6 +657,22 @@
"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"

View File

@ -657,6 +657,22 @@
"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"

View File

@ -657,6 +657,22 @@
"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"

View File

@ -1,475 +0,0 @@
<!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.

Before

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

View File

@ -1,55 +0,0 @@
<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>

Before

Width:  |  Height:  |  Size: 3.6 KiB

View File

@ -152,11 +152,16 @@ runtime.onInstalled.addListener(({reason, previousVersion}: OnInstalled) => {
const {version} = runtime.getManifest();
const major = getMajor(version);
const prevMajor = getMajor(previousVersion);
if (reason === "install" || (reason === "update" && major !== prevMajor)) {
if (reason === "update" && major !== prevMajor) {
tabs.create({
url: `https://about.downthemall.org/changelog/?cur=${major}&prev=${prevMajor}`,
});
}
else if (reason === "install") {
tabs.create({
url: `https://about.downthemall.org/4.0/?cur=${major}`,
});
}
});
locale.then(() => {
@ -561,7 +566,6 @@ 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"
};

View File

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

View File

@ -108,7 +108,7 @@ export function importText(data: string) {
if (data.includes(NS_METALINK_RFC5854)) {
return importMeta4(data);
}
const splitter = /(.+)\n|(.+)$/g;
const splitter = /((?:.|\r)+)\n|(.+)$/g;
const spacer = /^\s+/;
let match;
let current: BaseItem | undefined = undefined;

View File

@ -191,6 +191,7 @@ 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 { Download } from "./download";
import { ManagerPort } from "./port";
import { Scheduler } from "./scheduler";
import { Limits } from "./limits";
import { downloads, runtime, webRequest, CHROME } from "../browser";
import { downloads, runtime, webRequest, CHROME, OPERA } from "../browser";
const US = runtime.getURL("");
@ -61,6 +61,9 @@ 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;
@ -237,7 +240,7 @@ export class Manager extends EventEmitter {
if (this.notifiedFinished || this.running.size || this.retrying.size) {
return;
}
if (SOUNDS.value) {
if (SOUNDS.value && !OPERA) {
const audio = new Audio(runtime.getURL("/style/done.opus"));
audio.addEventListener("canplaythrough", () => audio.play());
audio.addEventListener("ended", () => document.body.removeChild(audio));

View File

@ -9,6 +9,8 @@ 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 = {
@ -42,6 +44,9 @@ 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

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

View File

@ -9,11 +9,12 @@ 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 } from "./browser";
import { windows, CHROME } 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;
}
@ -29,6 +30,7 @@ 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;
@ -52,7 +54,7 @@ function computeSelection(
}
return items.filter(item => item.prevMatched !== item.matched).map(item => {
return {
idx: item.idx,
idx: item.sidx as number,
matched: item.matched
};
});
@ -98,8 +100,11 @@ export async function select(links: BaseItem[], media: BaseItem[]) {
type: "popup",
});
const window = await windows.create(windowOptions);
tracker.track(window.id, null);
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("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 } from "./browser";
import { windows, CHROME } from "./browser";
// eslint-disable-next-line no-unused-vars
import { BaseItem } from "./item";
@ -21,8 +21,11 @@ export async function single(item: BaseItem | null) {
type: "popup",
});
const window = await windows.create(windowOptions);
tracker.track(window.id, null);
tracker.track(window.id);
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,6 +3,8 @@
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"]));
@ -80,6 +82,7 @@ export class WindowStateTracker {
if (!this.windowId) {
return;
}
try {
const window = await windows.get(this.windowId);
if (!VALID_WINDOW_STATES.has(window.state)) {
return;
@ -97,17 +100,30 @@ export class WindowStateTracker {
}
await this.save();
}
catch {
// ignored
}
}
track(windowId: number, port: any) {
track(windowId: number, port?: Port) {
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() {
async finalize(state?: any) {
if (state) {
this.left = state.left;
this.top = state.top;
}
await this.update();
this.windowId = 0;
if (state) {
await this.save();
}
}
async save() {

View File

@ -1,11 +1,15 @@
"use strict";
// License: MIT
import { windows, tabs, runtime } from "../lib/browser";
import { windows, tabs, runtime, CHROME } 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([
@ -114,11 +118,37 @@ export async function openManager(focus = true) {
await windows.update(tab.windowId, {focused: true});
return;
}
const windowOptions = {
const tracker = new WindowStateTracker("manager", {
minWidth: 700,
minHeight: 500,
});
await tracker.init();
const windowOptions = tracker.getOptions({
url,
type: "popup",
};
await windows.create(windowOptions);
});
const window = await windows.create(windowOptions);
tracker.track(window.id);
try {
if (!CHROME) {
windows.update(window.id, tracker.getOptions({}));
}
const port = await Promise.race<Port>([
new Promise<Port>(resolve => Bus.oncePort("manager", port => {
resolve(port);
return true;
})),
timeout<Port>(5 * 1000)]);
if (!port.isSelf) {
throw Error("Invalid sender connected");
}
tracker.track(window.id, port);
}
catch (ex) {
console.error("couldn't track manager", ex);
}
return;
}
if (focus) {

View File

@ -1,7 +1,7 @@
{
"manifest_version": 2,
"name": "DownThemAll!",
"version": "4.2.1",
"version": "4.2.6",
"description": "__MSG_extensionDescription__",
"homepage_url": "https://downthemall.org/",
@ -16,7 +16,6 @@
"32": "style/icon32.png",
"48": "style/icon48.png",
"64": "style/icon64.png",
"96": "style/icon96.png",
"128": "style/icon128.png",
"256": "style/icon256.png"
},
@ -54,7 +53,6 @@
"32": "style/icon32.png",
"48": "style/icon48.png",
"64": "style/icon64.png",
"96": "style/icon96.png",
"128": "style/icon128.png",
"256": "style/icon256.png"
},

View File

@ -8,6 +8,7 @@
},
"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",

View File

@ -46,6 +46,11 @@
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;
@ -606,6 +611,11 @@ 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: 164 KiB

After

Width:  |  Height:  |  Size: 75 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.6 KiB

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 673 B

After

Width:  |  Height:  |  Size: 785 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.8 KiB

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.8 KiB

After

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.3 KiB

View File

@ -104,7 +104,7 @@ export class EventEmitter {
for (const e of Array.from(handlers)) {
try {
// eslint-disable-next-line prefer-spread
handled = handled || !!e.apply(null, args);
handled = !!e.apply(null, args) || handled;
}
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

@ -25,11 +25,14 @@ 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",
]
@ -45,17 +48,17 @@ def check_licenses():
raise Exception(f"No license in {file}")
def files():
def files(additional_ignored):
p = Path("")
for pattern in FILES:
for file in sorted(p.glob(pattern)):
if file.name in IGNORED or not file.is_file():
if file.name in IGNORED or file.name in additional_ignored or not file.is_file():
continue
yield file
def build(out, manifest):
with ZipFile(out, "w", compression=ZIP_DEFLATED, allowZip64=False, compresslevel=2) as zp:
for file in files():
def build(out, manifest, additional_ignored=set()):
with ZipFile(out, "w", compression=ZIP_DEFLATED, allowZip64=False) as zp:
for file in files(additional_ignored):
if str(file) == "manifest.json":
buf = manifest
else:
@ -68,7 +71,7 @@ def build(out, manifest):
if file.suffix in UNCOMPRESSABLE:
zp.writestr(zinfo, buf, compress_type=ZIP_STORED)
else:
zp.writestr(zinfo, buf, compress_type=ZIP_DEFLATED, compresslevel=2)
zp.writestr(zinfo, buf, compress_type=ZIP_DEFLATED)
print(file)
@ -101,7 +104,7 @@ def build_firefox(args):
build(out, json.dumps(infos, indent=2).encode("utf-8"))
def build_chrome(args):
def build_chromium(args, pkg, additional_ignored=set()):
now = datetime.now().strftime("%Y%m%d%H%M%S")
with open("manifest.json") as manip:
infos = json.load(manip, object_pairs_hook=OrderedDict)
@ -119,13 +122,13 @@ def build_chrome(args):
infos["name"] = f"{infos.get('name')} {args.mode}"
infos["permissions"] = [p for p in infos.get("permissions") if not p in PERM_IGNORED_CHROME]
out = Path("web-ext-artifacts") / f"dta-{version}-{args.mode}-crx.zip"
out = Path("web-ext-artifacts") / f"dta-{version}-{args.mode}-{pkg}.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"))
build(out, json.dumps(infos, indent=2).encode("utf-8"), additional_ignored=additional_ignored)
def main():
from argparse import ArgumentParser
@ -140,7 +143,8 @@ def main():
else:
run([script], shell=True)
build_firefox(args)
build_chrome(args)
build_chromium(args, "crx")
build_chromium(args, "opr", IGNORED_OPERA)
print("DONE.")
if __name__ == "__main__":

View File

@ -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

@ -4,6 +4,7 @@
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;
@ -14,6 +15,17 @@ 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,7 +41,6 @@ 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;
@ -122,6 +121,8 @@ export class DownloadItem extends EventEmitter {
public currentName: string;
public currentFull: string;
public ext?: string;
public position: number;
@ -569,9 +570,7 @@ export class DownloadTable extends VirtualTable {
ctx.on("dismissed", () => this.table.focus());
this.on("contextmenu", (tree, event) => {
if (!this.selection.empty) {
this.showContextMenu(event);
}
return true;
});
@ -1204,7 +1203,7 @@ export class DownloadTable extends VirtualTable {
if (!items || !items.length) {
return;
}
API.regular(items, []);
PORT.post("import", {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.destFull;
this.name.textContent = item.currentFull;
this.from.textContent = item.usable;
this.size.textContent = item.fmtSize;
this.date.textContent = new Date(item.startDate).toLocaleString();

View File

@ -20,8 +20,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

@ -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 } from "../lib/browser";
import { runtime, storage, OPERA } from "../lib/browser";
import "./theme";
const ICON_BASE_SIZE = 16;
@ -558,7 +558,14 @@ 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");
new BoolPref("pref-sounds", "sounds");
// XXX: #125
const sounds = new BoolPref("pref-sounds", "sounds");
if (OPERA) {
const sp = sounds.elem.parentElement;
if (sp) {
sp.style.display = "none";
}
}
new BoolPref("pref-hide-context", "hide-context");
new BoolPref("pref-tooltip", "tooltip");
new BoolPref("pref-open-manager-on-queue", "open-manager-on-queue");

View File

@ -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>

View File

@ -50,6 +50,7 @@ let Subfolder: Dropdown;
type DELTAS = {deltaLinks: ItemDelta[]; deltaMedia: ItemDelta[]};
interface BaseMatchedItem extends BaseItem {
backIdx: number;
matched?: string | null;
rowid: number;
}
@ -138,7 +139,8 @@ class ItemCollection {
constructor(items: BaseMatchedItem[]) {
this.items = items;
this.assignRows();
this.indexes = new Map(items.map(i => [i.idx, i]));
this.items.forEach((item, idx) => item.backIdx = idx);
this.indexes = new Map(items.map((i, idx) => [idx, i]));
}
assignRows() {
@ -159,11 +161,11 @@ class ItemCollection {
return rv;
}
get checkedIndexes() {
get checkedBackIndexes() {
const rv: number[] = [];
this.items.forEach(function (item) {
this.items.forEach(function(item) {
if (item.matched && item.matched !== "unmanual") {
rv.push(item.idx);
rv.push(item.backIdx);
}
});
return rv;
@ -679,7 +681,7 @@ async function download(paused = false) {
const subfolder = Subfolder.value;
validateSubfolder(subfolder);
const items = Table.items.checkedIndexes;
const items = Table.items.checkedBackIndexes;
if (!items.length) {
throw new Error("error.noItemsSelected");
}
@ -898,4 +900,3 @@ addEventListener("beforeunload", function() {
});
new WindowState(PORT);

View File

@ -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>

580
yarn.lock

File diff suppressed because it is too large Load Diff