Compare commits

..

No commits in common. "37e40883e1964893cccd5465ffbaf58b6dd1d339" and "d63324160a4257a1d196b9f4e13a3bf24048bfc6" have entirely different histories.

13 changed files with 328 additions and 679 deletions

5
debian/copyright vendored
View File

@ -38,11 +38,6 @@ Copyright: Marie Van den Broeck (https://thenounproject.com/marie49/)
Comment: https://thenounproject.com/icon/162372/
License: CC-BY-SA-3.0
Files: static/themes/default/js/color-modes.js
Copyright: 2011-2025 The Bootstrap Authors
Comment: https://getbootstrap.com/docs/5.3/customize/color-modes/
License: CC-BY-3.0
Files: plinth/modules/bepasty/static/icons/bepasty.svg
Copyright: (c) 2014 by the Bepasty Team, see the AUTHORS file.
Comment: https://github.com/bepasty/bepasty-server/blob/master/src/bepasty/static/app/bepasty.svg

File diff suppressed because it is too large Load Diff

View File

@ -8,7 +8,7 @@ msgstr ""
"Project-Id-Version: FreedomBox UI\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-11-25 01:21+0000\n"
"PO-Revision-Date: 2025-12-02 12:00+0000\n"
"PO-Revision-Date: 2025-10-30 04:24+0000\n"
"Last-Translator: Coucouf <coucouf@coucouf.fr>\n"
"Language-Team: French <https://hosted.weblate.org/projects/freedombox/"
"freedombox/fr/>\n"
@ -17,7 +17,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n > 1;\n"
"X-Generator: Weblate 5.15-dev\n"
"X-Generator: Weblate 5.14.1-dev\n"
#: plinth/config.py:103
#, python-brace-format
@ -4460,7 +4460,11 @@ msgstr ""
"moins un domaine pour pouvoir utiliser Matrix Synapse."
#: plinth/modules/matrixsynapse/templates/matrix-synapse.html:20
#, python-format
#, fuzzy, python-format
#| msgid ""
#| "The Matrix server domain is set to <em>%(domain_name)s</em>. User IDs "
#| "will look like <em>@username:%(domain_name)s</em>. Changing the domain "
#| "name after the initial setup is currently not supported."
msgid ""
"The Matrix server domain is set to <em>%(domain_name)s</em>. User IDs will "
"look like <em>@username:%(domain_name)s</em>. Changing the domain name "
@ -4468,9 +4472,8 @@ msgid ""
msgstr ""
"Votre serveur Matrix utilise le domaine <em>%(domain_name)s</em>. Les "
"identifiants utilisateur seront du type <em>@identifiant:%(domain_name)s</"
"em>. Le changement du nom de domaine nécéssite la désinstallation et "
"réinstallation de lappli ce qui entraînera la suppression de lensemble des "
"données de cette appli."
"em>. Le changement du nom de domaine après linstallation initiale nest "
"actuellement pas pris en charge."
#: plinth/modules/matrixsynapse/templates/matrix-synapse.html:28
msgid ""
@ -4513,8 +4516,10 @@ msgid "Unlimited"
msgstr "Illimité"
#: plinth/modules/matrixsynapse/templates/matrix-synapse.html:78
#, fuzzy
#| msgid "Feed generator"
msgid "Federation"
msgstr "Fédération"
msgstr "Générateur de fils"
#: plinth/modules/matrixsynapse/templates/matrix-synapse.html:81
#, python-format
@ -4525,12 +4530,6 @@ msgid ""
"hosted here. If you face problems with federation, try the <a "
"href=\"%(tester_url)s#%(domain_name)s\"> federation tester tool</a>."
msgstr ""
"Matrix Synapse est configuré pour communiquer avec dautres serveurs sur "
"Internet. Ceci permet aux utilisateurices de la %(box_name)s de participer à "
"des salons hébergés ailleurs et à des utilisateurices dautres serveurs de "
"participer aux salons hébergés ici. En cas de problème avec la fédération, "
"vous pouvez utiliser l<a href=\"%(tester_url)s#%(domain_name)s\">outil de "
"test de fédération</a>."
#: plinth/modules/matrixsynapse/templates/matrix-synapse.html:99
#, python-format
@ -7454,16 +7453,20 @@ msgstr ""
"dactualités."
#: plinth/modules/rssbridge/__init__.py:28
#, python-brace-format
#, fuzzy, python-brace-format
#| msgid ""
#| "You can use RSS-Bridge with <a href=\"{miniflux_url}\">Miniflux</a> or <a "
#| "href=\"{ttrss_url}\">Tiny Tiny RSS</a> to follow various websites. When "
#| "adding a feed, enable authentication and use your {box_name} credentials."
msgid ""
"You can use RSS-Bridge with <a href=\"{miniflux_url}\">Miniflux</a> or <a "
"href=\"{nextcloud_url}\">Nextcloud News</a> to follow various websites. When "
"adding a feed, enable authentication and use your {box_name} credentials."
msgstr ""
"Vous pouvez utiliser RSS-Bridge avec <a href=\"{miniflux_url}\">Miniflux</a> "
"ou bien <a href=\"{nextcloud_url}\">Nextcloud News</a> pour suivre "
"différents sites Internet. Lors de lajout dun fil, activez "
"lauthentification et utilisez vos identifiants {box_name}."
"ou bien <a href=\"{ttrss_url}\">Tiny Tiny RSS</a> pour suivre différents "
"sites Internet. Lors de lajout dun fil, activez lauthentification et "
"utilisez les identifiants de {box_name}."
#: plinth/modules/rssbridge/__init__.py:49
msgid "Read and subscribe to news feeds"

View File

@ -8,8 +8,8 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-11-25 01:21+0000\n"
"PO-Revision-Date: 2025-12-02 12:00+0000\n"
"Last-Translator: OwlGale <owlgale@users.noreply.hosted.weblate.org>\n"
"PO-Revision-Date: 2025-11-21 02:51+0000\n"
"Last-Translator: Roman Akimov <zoompyc@gmail.com>\n"
"Language-Team: Russian <https://hosted.weblate.org/projects/freedombox/"
"freedombox/ru/>\n"
"Language: ru\n"
@ -107,7 +107,7 @@ msgstr "Использовать языковые настройки брауз
#: plinth/menu.py:116 plinth/templates/base.html:120
msgid "Home"
msgstr "Главная"
msgstr "Домой"
#: plinth/menu.py:117 plinth/templates/base.html:129
msgid "Apps"
@ -1237,7 +1237,7 @@ msgstr "Библиотека"
#: plinth/modules/calibre/manifest.py:21
msgid "Ebook reader"
msgstr "Читалка"
msgstr "Читалка для электронных книг"
#: plinth/modules/calibre/templates/calibre-delete-library.html:11
#, python-format
@ -1632,12 +1632,12 @@ msgstr "BitTorrent клиент, написанный на Python/pygtk"
#: plinth/modules/deluge/manifest.py:21
#: plinth/modules/transmission/manifest.py:39
msgid "BitTorrent"
msgstr "BitTorrent"
msgstr "БитТоррент"
#: plinth/modules/deluge/manifest.py:21 plinth/modules/roundcube/manifest.py:23
#: plinth/modules/transmission/manifest.py:39
msgid "Web client"
msgstr "Веб-клиент"
msgstr "Веб клиент"
#: plinth/modules/deluge/manifest.py:21 plinth/modules/syncthing/manifest.py:58
#: plinth/modules/transmission/manifest.py:39
@ -2465,7 +2465,7 @@ msgstr "FairEmail"
#: plinth/modules/email/manifest.py:82
msgid "Email server"
msgstr "Почтовый сервер"
msgstr "Сервер Электронной почты"
#: plinth/modules/email/manifest.py:82
msgid "IMAP"
@ -2473,7 +2473,7 @@ msgstr "IMAP"
#: plinth/modules/email/manifest.py:82
msgid "Spam control"
msgstr "Защита от спама"
msgstr "Контроль спама"
#: plinth/modules/email/templates/email-aliases.html:13
#: plinth/modules/email/templates/email.html:15
@ -2635,16 +2635,16 @@ msgstr ""
#: plinth/modules/ikiwiki/__init__.py:79
#: plinth/modules/tiddlywiki/__init__.py:61
msgid "View and edit wiki applications"
msgstr "Просмотр и редактирование вики приложений"
msgstr "Просмотр и редактирование приложений Wiki"
#: plinth/modules/featherwiki/__init__.py:59
#: plinth/modules/featherwiki/manifest.py:9
msgid "Feather Wiki"
msgstr "Feather Wiki"
msgstr "Перо Вики"
#: plinth/modules/featherwiki/forms.py:13 plinth/modules/tiddlywiki/forms.py:13
msgid "Wiki files cannot be named \"index.html\"."
msgstr "Вики файлы не могут называться \"index.html\"."
msgstr "Wiki-файлы не могут называться \"index.html\"."
#: plinth/modules/featherwiki/forms.py:20 plinth/modules/tiddlywiki/forms.py:20
msgid "Name of the wiki file, with file extension \".html\""
@ -2684,13 +2684,13 @@ msgstr "Загрузите существующий файл Feather Wiki с э
#: plinth/modules/mediawiki/manifest.py:25
#: plinth/modules/tiddlywiki/manifest.py:19
msgid "Wiki"
msgstr "Вики"
msgstr "Wiki"
#: plinth/modules/featherwiki/manifest.py:18
#: plinth/modules/infinoted/manifest.py:46
#: plinth/modules/tiddlywiki/manifest.py:20
msgid "Note taking"
msgstr "Заметки"
msgstr "Взятие на заметку"
#: plinth/modules/featherwiki/manifest.py:18
#: plinth/modules/ikiwiki/manifest.py:15
@ -2703,13 +2703,13 @@ msgstr "Веб-сайт"
#: plinth/modules/featherwiki/manifest.py:18
#: plinth/modules/tiddlywiki/manifest.py:25
msgid "Quine"
msgstr "Куайн"
msgstr "Quine"
#: plinth/modules/featherwiki/manifest.py:18
#: plinth/modules/nextcloud/manifest.py:56
#: plinth/modules/tiddlywiki/manifest.py:26
msgid "Non-Debian"
msgstr "Не Debian"
msgstr "Не-Debian"
#: plinth/modules/featherwiki/templates/featherwiki_configure.html:12
#: plinth/modules/tiddlywiki/templates/tiddlywiki_configure.html:12
@ -2781,7 +2781,7 @@ msgstr "Скачать"
#: plinth/modules/featherwiki/views.py:20 plinth/modules/tiddlywiki/views.py:20
msgid "A wiki file with the given name already exists."
msgstr "Вики файл с указанным именем уже существует."
msgstr "Файл wiki с указанным именем уже существует."
#: plinth/modules/featherwiki/views.py:54 plinth/modules/tiddlywiki/views.py:54
msgid "Wiki created."
@ -2816,7 +2816,7 @@ msgstr "Добавлен вики-файл."
#: plinth/modules/featherwiki/views.py:119
#: plinth/modules/tiddlywiki/views.py:120
msgid "Failed to add wiki file."
msgstr "Не удалось добавить вики файл."
msgstr "Не удалось добавить файл wiki."
#: plinth/modules/featherwiki/views.py:138
#: plinth/modules/tiddlywiki/views.py:139
@ -3248,7 +3248,7 @@ msgstr "GNOME"
#: plinth/modules/gnome/manifest.py:9 plinth/templates/clients.html:42
msgid "Desktop"
msgstr "Рабочий стол"
msgstr "Десктоп"
#: plinth/modules/gnome/manifest.py:10
msgid "Browser"
@ -3260,7 +3260,7 @@ msgstr "Офисный пакет"
#: plinth/modules/gnome/manifest.py:12
msgid "Software store"
msgstr "Магазин приложений"
msgstr "Магазин программного обеспечения"
#: plinth/modules/gnome/manifest.py:13
msgid "GUI"
@ -3288,7 +3288,7 @@ msgstr "Руководство"
#: plinth/modules/help/views.py:91 plinth/templates/help-menu.html:27
#: plinth/templates/help-menu.html:28
msgid "Get Support"
msgstr "Получить помощь"
msgstr "Получить поддержку"
#: plinth/modules/help/__init__.py:45
#: plinth/modules/help/templates/help_feedback.html:9
@ -3303,7 +3303,7 @@ msgstr "Отправить отзыв"
#: plinth/modules/help/views.py:74 plinth/templates/help-menu.html:39
#: plinth/templates/help-menu.html:40
msgid "Contribute"
msgstr "Помочь проекту"
msgstr "Помощь проекту"
#: plinth/modules/help/__init__.py:53 plinth/templates/base.html:216
#: plinth/templates/base.html:219 plinth/templates/help-menu.html:46
@ -3327,13 +3327,13 @@ msgstr "Вы используете %(os_release)s и %(box_name)s версии
msgid ""
"There is a new %(box_name)s version <a href=\"%(upgrades_url)s\">available</"
"a>."
msgstr "Доступна <a href=\"%(upgrades_url)s\">новая версия</a> %(box_name)s."
msgstr "<a href=\"%(upgrades_url)s\">Доступна новая версия</a> %(box_name)s."
#: plinth/modules/help/templates/help_about.html:40
#: plinth/modules/upgrades/templates/upgrades_configure.html:42
#, python-format
msgid "%(box_name)s is up to date."
msgstr "Установлены все последние обновления %(box_name)s."
msgstr "%(box_name)s в актуальном состоянии."
#: plinth/modules/help/templates/help_about.html:49
#, python-format
@ -3346,14 +3346,14 @@ msgid ""
"and a Tor relay, on a device that can replace your Wi-Fi router, so that "
"your data stays with you."
msgstr ""
"%(box_name)s это общественный проект для разработки, проектирования и "
"продвижения персональных серверов работающих на свободном программном "
"обеспечении для частных, личных коммуникаций. Это сетевое устройство "
"предназначено для взаимодействия с остальной частью Интернета при условии "
"обеспечения конфиденциальности и безопасности данных. Оно позволяет "
"размещать такие веб-приложения, как блог, вики, веб-сайт, социальную сеть, "
"электронную почту, веб-прокси и узел сети Tor, на устройстве, которое может "
"заменить ваш Wi-Fi роутер, чтобы ваши данные оставались с вами."
"%(box_name)s - это проект сообщества для разработки, дизайна и поощрения "
"личных серверов под управлением свободного программного обеспечения для "
"частных, личных сообщений. Это сетевое устройство, предназначенное разрешить "
"взаимодействие с остальной частью Интернета в условиях защиты "
"конфиденциальности и безопасности данных. Он содержит различные приложения, "
"такие как блог, вики, веб-сайт, социальную сеть, электронную почту, Web-"
"прокси и сервер Tor, на устройстве, которое может заменить ваш маршрутизатор "
"Wi-Fi, так что ваши данные остаются с вами."
#: plinth/modules/help/templates/help_about.html:62
msgid ""
@ -3364,13 +3364,12 @@ msgid ""
"giving back power to the users over their networks and machines, we are "
"returning the Internet to its intended peer-to-peer architecture."
msgstr ""
"Мы живем в мире, где использование сети определяется теми, кто зачастую не "
"действует в наших интересах. Разрабатывая программное обеспечение, которое "
"не полагается на централизованный сервис, мы можем вернуть контроль и "
"конфиденциальность. Сохраняя наши данные у себя дома, мы повышаем правовую "
"защищенность над ними. Давая пользователям власть над их сетями и "
"устройствами, мы возвращаем Интернет к его одноранговой архитектуре, каким "
"он был задуман."
"Мы живем в мире, сетями владеют те, с кем у нас не всегда общие интересы. "
"Путем создания программного обеспечения, которое не полагается на "
"центральную службу, мы можем восстановить контроль и конфиденциальность. "
"Сохраняя наши данные в наших домах, мы получаем полезную правовую защиту над "
"ними. Давая обратно власть пользователям в их сети и машины, мы возвращаемся "
его предполагаемую архитектуру Интернета peer-to-peer."
#: plinth/modules/help/templates/help_about.html:75
#, python-format
@ -3380,7 +3379,7 @@ msgid ""
"package."
msgstr ""
"Существует ряд проектов, которые работают в сторону реализации будущего "
"распределенных сервисов, %(box_name)s стремится объединить их."
"распределенных служб, %(box_name)s стремится объединить их в удобном пакете."
#: plinth/modules/help/templates/help_about.html:83
#, python-format
@ -3393,17 +3392,16 @@ msgid ""
"running \"apt source <i>package_name</i>\" in a terminal (using Cockpit or "
"SSH)."
msgstr ""
"%(box_name)s является свободным программным обеспечением и распространяется "
"по лицензии GNU Affero General Public License. Исходный код доступен онлайн "
"в <a href=\"https://salsa.debian.org/freedombox-team/freedombox\"> "
"репозитории %(box_name)s </a>. Кроме того, исходный код пакетов Debian "
"можно получить с сайта <a href=\"https://sources.debian.org/\">Debian "
"Sources</a> или выполнив команду \"apt source <i>название_пакета</i>\" в "
"терминале (с помощью Cockpit или SSH)."
"%(box_name)s - это свободное ПО, лицензированное по лицензии GNU Affero "
"General Public License. <a href=\"http://salsa.debian.org/freedombox-team/"
"freedombox\"> %(box_name)s репозиторий</a>. Кроме того, исходный код любого "
"пакета Debian может быть получен из <a href=\"https://sources.debian.org/"
"\">Debian Sources</a> site, или путем запуска \"apt source <i>package_name</"
"i>\" в терминале (с использованием Cockpit или SSH)."
#: plinth/modules/help/templates/help_about.html:97
msgid "Learn"
msgstr "Освоить"
msgstr "Узнать"
#: plinth/modules/help/templates/help_about.html:116
#: plinth/templates/toolbar.html:19
@ -3412,7 +3410,7 @@ msgstr "Пожертвовать"
#: plinth/modules/help/templates/help_about.html:119
msgid "Join project"
msgstr "Присоединиться к проекту"
msgstr "Присоединяйтесь к проекту"
#: plinth/modules/help/templates/help_about.html:123
msgid "Translate"
@ -3710,11 +3708,11 @@ msgstr "Home Assistant"
#: plinth/modules/homeassistant/manifest.py:62
msgid "Home Automation"
msgstr "Умный дом"
msgstr "Домашняя автоматизация"
#: plinth/modules/homeassistant/manifest.py:63
msgid "IoT"
msgstr "Интернет вещей"
msgstr "IoT"
#: plinth/modules/homeassistant/manifest.py:64
#: plinth/modules/networks/manifest.py:8
@ -3735,7 +3733,7 @@ msgstr "Z-Wave"
#: plinth/modules/homeassistant/manifest.py:67
msgid "Thread"
msgstr "Thread"
msgstr "Тред"
#: plinth/modules/homeassistant/templates/homeassistant.html:17
msgid ""
@ -3786,9 +3784,9 @@ msgid ""
"<i>edit</i> existing ones. In the <a href=\"{users_url}\">User "
"Configuration</a> you can change these permissions or add new users."
msgstr ""
"Только пользователи {box_name} группы <b>администраторов</b> могут <i>"
"создавать</i> и <i>управлять</i> блогами и вики, но любой пользователь "
"группы <b>wiki</b> может <i>редактировать</i> существующие. На странице <a "
"Только пользователи {box_name} группы <b>администраторов</b> могут "
"<i>создавать</i> и <i>управлять</i> блогами и вики, но любой пользователь "
"группы <b>wiki</b> могжет <i>редактировать</i> существующие. На странице <a "
"href=\"{users_url}\">Конфигурация пользователей</a> вы можете изменить "
"разрешения или добавить новых пользователей."
@ -3979,7 +3977,7 @@ msgstr "JSXC"
#: plinth/modules/jsxc/manifest.py:16
msgid "Web chat"
msgstr "Веб-чат"
msgstr "Веб чат"
#: plinth/modules/jsxc/manifest.py:16 plinth/modules/quassel/manifest.py:54
msgid "Client"
@ -3991,10 +3989,10 @@ msgid ""
"Wikipedia available without using the internet, but it is potentially "
"suitable for all HTML content. Kiwix packages are in the ZIM file format."
msgstr ""
"Kiwix является офлайн читалкой для веб-контента. Это программа "
"предназначенная для того, чтобы сделать Википедию доступной автономно без "
"Интернета, но потенциально подходит для любого HTML-контента. Пакеты Kiwix "
"представляют собой файлы в формате ZIM."
"Kiwix является офлайн-читателкой для веб-контента. Это программа "
"предназначенная для того,чтобы сделать Википедию доступной автономно без "
"Интернета, но оно потенциально подходит для всего HTML-контента. Пакеты "
"Kiwix находятся в формате ZIM."
#: plinth/modules/kiwix/__init__.py:25
msgid ""
@ -4055,7 +4053,7 @@ msgstr ""
#: plinth/modules/kiwix/manifest.py:24
msgid "Offline reader"
msgstr "Оффлайн читалка"
msgstr "Автономный читатель"
#: plinth/modules/kiwix/manifest.py:25
msgid "Archival"
@ -4066,7 +4064,7 @@ msgstr "Архив"
#: plinth/modules/shadowsocksserver/manifest.py:18
#: plinth/modules/tor/manifest.py:60 plinth/modules/torproxy/manifest.py:57
msgid "Censorship resistance"
msgstr "Сопротивление цензуре"
msgstr "Противодействие цензуре"
#: plinth/modules/kiwix/manifest.py:27
msgid "Wikipedia"
@ -4358,11 +4356,11 @@ msgstr "FluffyChat"
#: plinth/modules/matrixsynapse/manifest.py:101
#: plinth/modules/quassel/manifest.py:54
msgid "Chat room"
msgstr "Чат"
msgstr "Чат комната"
#: plinth/modules/matrixsynapse/manifest.py:105
msgid "Matrix server"
msgstr "Cервер Matrix"
msgstr "Matrix сервер"
#: plinth/modules/matrixsynapse/templates/matrix-synapse-pre-setup.html:18
msgid ""
@ -4514,7 +4512,7 @@ msgid ""
"Anyone with a link to this wiki can read it. Only users that are logged in "
"can make changes to the content."
msgstr ""
"Кто угодно, имея ссылку на вики, может читать её. Только зарегистрированные "
"Кто угодно, имея ссылку на wiki, может читать её. Только зарегистрированные "
"пользователи могут вносить изменения."
#: plinth/modules/mediawiki/__init__.py:51
@ -4544,7 +4542,7 @@ msgid ""
"feeds and emails. Examples: \"myfreedombox.example.org\" or "
"\"example.onion\"."
msgstr ""
"Использовалось MediaWiki для создания ссылок на вики страницы, например "
"Использовалось MediaWiki для создания ссылок на wiki страницы, например "
"внизу веб-страниц, в RSS-потоках или в электронных письмах. Например: "
"\"myfreedombox.example.org\" или \"example.onion\"."
@ -4711,7 +4709,7 @@ msgstr "Игровой сервер"
#: plinth/modules/minetest/manifest.py:49
msgid "Block sandbox"
msgstr "Песочница"
msgstr "Блокировать песочницу"
#: plinth/modules/minetest/manifest.py:49
msgid "Platform"
@ -4774,7 +4772,7 @@ msgstr "totem"
#: plinth/modules/minidlna/manifest.py:116
msgid "Media server"
msgstr "Медиасервер"
msgstr "Медиа сервер"
#: plinth/modules/minidlna/manifest.py:116
msgid "Television"
@ -4879,7 +4877,7 @@ msgstr "RSS Охранник"
#: plinth/modules/miniflux/manifest.py:138
msgid "Feed reader"
msgstr "Ленты новостей"
msgstr "Устройство для чтения фидов"
#: plinth/modules/miniflux/manifest.py:138
msgid "News aggregation"
@ -5229,7 +5227,7 @@ msgstr ""
#: plinth/modules/names/templates/names.html:152 plinth/templates/setup.html:87
msgid "Install"
msgstr "Установить"
msgstr "Установка"
#: plinth/modules/names/templates/names.html:162
msgid "Error retrieving status:"
@ -7250,10 +7248,10 @@ msgid ""
"from an email client, including MIME support, address book, folder "
"manipulation, message searching and spell checking."
msgstr ""
"Веб-почта Roundcube это браузерный многоязычный IMAP клиент с "
"пользовательским интерфейсом. Он предоставляет полную функциональность, "
"которую вы ожидаете от почтового клиента, включая поддержку MIME, адресной "
"книги, управления папками, поиска сообщений и проверки орфографии."
"Roundcube webmail это основанный на браузере многоязычный IMAP клиент с "
"пользовательским интерфейсом. Это предоставляет полную функциональность, "
"которую вы ожидаете от почтового клиента, включая поддержку MIME, адресную "
"книгу, управление папками, поиск сообщений и проверку орфографии."
#: plinth/modules/roundcube/__init__.py:24
msgid ""
@ -7305,7 +7303,7 @@ msgstr ""
#: plinth/modules/roundcube/manifest.py:23
msgid "Email"
msgstr "Электронная почта"
msgstr "Email"
#: plinth/modules/rssbridge/__init__.py:21
msgid ""
@ -7321,8 +7319,9 @@ msgid ""
"When enabled, RSS-Bridge can be accessed by <a href=\"{users_url}\">any "
"user</a> belonging to the feed-reader group."
msgstr ""
"Когда эта функция включена, доступ к RSS-Bridge может получить <a href="
"\"{users_url}\">любой пользователь</a>, входящий в группу читателей фидов."
"Когда эта функция включена, доступ к RSS-мостику может получить <a "
"href=\"{users_url}\">любой пользователь</a>, входящий в группу читателей "
"фидов."
#: plinth/modules/rssbridge/__init__.py:28
#, python-brace-format
@ -7331,10 +7330,10 @@ msgid ""
"href=\"{nextcloud_url}\">Nextcloud News</a> to follow various websites. When "
"adding a feed, enable authentication and use your {box_name} credentials."
msgstr ""
"Вы можете использовать RSS-Bridge с <a href=\"{miniflux_url}\">Miniflux</a> "
"или <a href=\"{nextcloud_url}\">Nextcloud News</a>, чтобы следить за "
"различными веб-сайтами. При добавлении фида включите аутентификацию и "
"используйте свои учетные данные от {box_name}."
"Вы можете использовать RSS-мост с <a href=\"{miniflux_url}\">Miniflux</a> or "
"<a href=\"{nextcloud_url}\">Nextcloud News</a> следить за различными веб-"
"сайтами. При добавлении фида включите аутентификацию и используйте свои "
"учетные данные от {box_name}."
#: plinth/modules/rssbridge/__init__.py:49
msgid "Read and subscribe to news feeds"
@ -7343,7 +7342,7 @@ msgstr "Чтение и подписка на ленты новостей"
#: plinth/modules/rssbridge/__init__.py:52
#: plinth/modules/rssbridge/manifest.py:7
msgid "RSS-Bridge"
msgstr "RSS-Bridge"
msgstr "RSS-мост"
#: plinth/modules/rssbridge/forms.py:12 plinth/modules/searx/forms.py:17
msgid "Allow Public Access"
@ -7355,7 +7354,7 @@ msgstr "Разрешите использовать это приложение
#: plinth/modules/rssbridge/manifest.py:16
msgid "Feed generator"
msgstr "Генератор лент новостей"
msgstr "Генератор питания"
#: plinth/modules/rssbridge/manifest.py:16
msgid "News"
@ -7436,11 +7435,11 @@ msgstr "Сетевой диск"
#: plinth/modules/samba/manifest.py:84
msgid "Media storage"
msgstr "Хранилище медиафайлов"
msgstr "Хранение носителей"
#: plinth/modules/samba/manifest.py:85
msgid "Backup storage"
msgstr "Резервное хранилище"
msgstr "Резервное хранение"
#: plinth/modules/samba/templates/samba.html:20
msgid "Shares"
@ -7581,7 +7580,7 @@ msgstr "Строгий"
#: plinth/modules/searx/manifest.py:17
msgid "Web search"
msgstr "Веб-поиск"
msgstr "Веб поиск"
#: plinth/modules/searx/manifest.py:17
msgid "Metasearch Engine"
@ -7736,7 +7735,7 @@ msgstr ""
#: plinth/modules/shaarli/__init__.py:36 plinth/modules/shaarli/manifest.py:25
msgid "Shaarli"
msgstr "Shaarli"
msgstr "Shаarli"
#: plinth/modules/shaarli/manifest.py:12
msgid "Shaarlier"
@ -7800,7 +7799,7 @@ msgstr ""
#: plinth/modules/shadowsocks/__init__.py:50
msgid "Shadowsocks Client"
msgstr "Shadowsocks Клиент"
msgstr "Клиент Shadowsocks"
#: plinth/modules/shadowsocks/forms.py:25
msgid "Server hostname or IP address"
@ -7847,7 +7846,7 @@ msgstr ""
#: plinth/modules/shadowsocksserver/__init__.py:47
msgid "Shadowsocks Server"
msgstr "Shadowsocks Сервер"
msgstr "Сервер Shadowsocks"
#: plinth/modules/shadowsocksserver/forms.py:10
#: plinth/modules/shadowsocksserver/forms.py:11
@ -7866,7 +7865,7 @@ msgstr "Метод шифрования. Клиенты должны испол
#: plinth/modules/shadowsocksserver/manifest.py:20
msgid "Exit point"
msgstr "Точка выхода"
msgstr "Место выхода"
#: plinth/modules/sharing/__init__.py:17
#, python-brace-format
@ -7927,7 +7926,7 @@ msgstr ""
#: plinth/modules/sharing/manifest.py:19 plinth/modules/zoph/manifest.py:26
msgid "Web sharing"
msgstr "Обмен в Интернете"
msgstr "Совместное использование веб-страниц"
#: plinth/modules/sharing/templates/sharing.html:18
#: plinth/modules/sharing/templates/sharing.html:21
@ -8264,7 +8263,7 @@ msgstr "Коннектор Thunderbird + SOGo"
#: plinth/modules/sogo/manifest.py:71
msgid "Webmail"
msgstr "Веб-почта"
msgstr "Webmail"
#: plinth/modules/sogo/manifest.py:74
msgid "Address book"
@ -8277,14 +8276,14 @@ msgid ""
"administration tasks, copy files or run other services using such "
"connections."
msgstr ""
"SSH-сервер использует протокол безопасной оболочки на прием подключений с "
"удаленных компьютеров. Уполномоченный удаленный компьютер может выполнять "
"задачи администрирования, копировать файлы или запускать другие службы с "
"использованием таких соединений."
"Secure Shell сервер использует протокол безопасной оболочки на прием "
"подключений с удаленных компьютеров. Уполномоченный удаленный компьютер "
"может выполнять задачи администрирования, копировать файлы или запускать "
"другие службы с использованием таких соединений."
#: plinth/modules/ssh/__init__.py:42
msgid "Secure Shell Server"
msgstr "SSH-сервер"
msgstr "Сервер защищенной оболочки"
#: plinth/modules/ssh/__init__.py:75
msgid "Remotely login using Secure Shell (SSH)"
@ -8366,7 +8365,7 @@ msgstr "Перейдите к входу в систему"
#: plinth/modules/sso/templates/login.html:23
msgid "Login"
msgstr "Войти"
msgstr "Логин"
#: plinth/modules/sso/views.py:86
msgid "Logged out successfully."
@ -8753,7 +8752,7 @@ msgstr "Цифровой сад"
#: plinth/modules/tiddlywiki/manifest.py:24
msgid "Zettelkasten"
msgstr "Цеттелькастен"
msgstr "Шкафы для застройки"
#: plinth/modules/tiddlywiki/templates/tiddlywiki_delete.html:18
msgid ""
@ -8921,15 +8920,15 @@ msgstr "Orbot: Прокси с Tor"
#: plinth/modules/tor/manifest.py:57
msgid "Onion services"
msgstr "Onion-сервисы"
msgstr "Луковые сервисы"
#: plinth/modules/tor/manifest.py:58
msgid "Relay"
msgstr "Сетевой узел"
msgstr "Ретранслятор"
#: plinth/modules/tor/manifest.py:59 plinth/modules/torproxy/manifest.py:56
msgid "Anonymity network"
msgstr "Анонимная сеть"
msgstr "Сеть анонимности"
#: plinth/modules/tor/templates/tor.html:23
msgid "Onion Service"
@ -9086,7 +9085,7 @@ msgstr ""
#: plinth/modules/upgrades/__init__.py:146
#: plinth/modules/upgrades/__init__.py:309
msgid "Software Update"
msgstr "Обновление ПО"
msgstr "Обновление программного обеспечения"
#: plinth/modules/upgrades/__init__.py:131
msgid "FreedomBox Updated"
@ -9283,7 +9282,7 @@ msgstr "Перейти к обновлению дистрибутива"
#: plinth/templates/notifications.html:58
#: plinth/templates/operation-notification.html:23
msgid "Dismiss"
msgstr "Закрыть"
msgstr "Отклонить"
#: plinth/modules/upgrades/templates/upgrades-dist-upgrade.html:15
#, python-format
@ -9586,8 +9585,8 @@ msgstr "Имя пользователя уже занято."
msgid ""
"Optional. Used to send emails to reset password and important notifications."
msgstr ""
"Необязательное поле. Используется для отправки электронных писем для сброса "
"пароля и важных уведомлений."
"Необязательно. Используется для отправки электронных писем для сброса пароля "
"и важных уведомлений."
#: plinth/modules/users/forms.py:107
msgid ""
@ -9611,8 +9610,7 @@ msgstr "Введите действительное имя пользовате
msgid ""
"Required. 150 characters or fewer. English letters, digits and @/./-/_ only."
msgstr ""
"Поле обязательно для заполнения. 150 символов или меньше. Только английские "
"буквы, цифры и @/./-/_."
"Требуется. 150 символов или меньше. Только английские буквы, цифры и @/./-/_."
#: plinth/modules/users/forms.py:141
msgid "Authorization Password"
@ -9798,8 +9796,8 @@ msgid ""
"Use the <a href='%(change_password_url)s'>change password form </a> to "
"change the password."
msgstr ""
"Для смены пароля используйте форму <a href=\"%(change_password_url)s\""
">изменить пароль</a>."
"Для смены пароля используйте форму <a "
"href=\"%(change_password_url)s\">изменить пароль </a>."
#: plinth/modules/users/templates/users_update.html:37
#: plinth/templates/language-selection.html:17
@ -10556,7 +10554,7 @@ msgstr ""
#: plinth/templates/base.html:117
msgid " Home"
msgstr " Главная"
msgstr " Домой"
#: plinth/templates/base.html:125
msgid " Apps"
@ -10689,7 +10687,7 @@ msgstr "Уведомления"
#: plinth/templates/notifications.html:18
#, python-format
msgid "%(time_since)s ago"
msgstr "%(time_since)s назад"
msgstr "%(time_since)s тому назад"
#: plinth/templates/port-forwarding-info.html:8
msgid "Port Forwarding"
@ -10822,7 +10820,7 @@ msgstr ""
#: plinth/views.py:89
msgid "Here"
msgstr "Здесь"
msgstr "Вот здесь"
#: plinth/views.py:431
msgid "Setting unchanged"

View File

@ -8,7 +8,7 @@ from plinth.tests import functional
pytestmark = [pytest.mark.apps, pytest.mark.homeassistant]
class TestHomeAssistantApp(functional.BaseAppTests):
class TestHomeAssitantApp(functional.BaseAppTests):
"""Basic tests for Home Assistant app."""
app_name = 'homeassistant'
has_service = True

View File

@ -104,10 +104,10 @@
<h3>{% trans "Manual Update" %}</h3>
{% if is_busy %}
<div class="btn-toolbar">
<button type="button" class="btn btn-default" disabled="disabled">
<span class="spinner-border spinner-border-sm" aria-hidden="true">
</span>
<span role="status">{% trans "Updating..." %}</span>
<button type="button" disabled="disabled"
class="running-status-parent btn btn-default" >
<span class="running-status loading"></span>
{% trans "Updating..." %}
</button>
</div>
{% else %}

View File

@ -43,11 +43,10 @@
</section>
{% if app_info.tags %}
<div class="app-tags d-flex align-items-center flex-wrap">
<div class="app-tags">
{% for tag in app_info.tags %}
{% if not forloop.first %}•{% endif %}
<a href="{{ active_section_url }}?tag={{ tag|urlencode }}"
class="btn btn-default rounded-pill tag">
class="btn btn-light rounded-pill tag">
{% trans tag %}
</a>
{% endfor %}

View File

@ -58,9 +58,6 @@
<link rel="stylesheet" href="{% static user_css %}"/>
{% endif %}
<!-- This script is not loaded in defer mode because it needs to run before
page is rendered -->
<script type="text/javascript" src="{% static 'theme/js/color-modes.js' %}"></script>
<!-- Local link to system Bootstrap JS -->
<script type="text/javascript" src="{% static '/javascript/popperjs2/popper.min.js' %}" defer></script>
<script type="text/javascript" src="{% static '/javascript/bootstrap5/js/bootstrap.bundle.min.js' %}" defer></script>
@ -151,8 +148,6 @@
{% include "notifications-dropdown.html" %}
{% include "theme-menu.html" %}
{% include "help-menu.html" %}
<li id="id_user_menu" class="nav-item dropdown">

View File

@ -8,12 +8,12 @@
<div class="container">
<div class="dropdown searchable-dropdown">
<div class="tag-input">
<div id="selected-tags" class="d-flex align-items-center flex-wrap">
<div id="selected-tags">
{% for tag in tags %}
<span class="btn btn-default rounded-pill tag d-flex align-items-center"
<span class="btn btn-light rounded-pill tag"
data-tag="{{ tag }}">
{% trans tag %}
<button class="btn btn-sm btn-default remove-tag">
<button class="btn btn-sm btn-light remove-tag">
<i class="fa fa-times"></i>
</button>
</span>

View File

@ -1,46 +0,0 @@
{% comment %}
# SPDX-License-Identifier: AGPL-3.0-or-later
{% endcomment %}
{% load i18n %}
<li id="id_theme_menu" class="dropdown nav-item">
<a href="#" title="{% trans "Toggle theme (auto)" %}"
class="nav-link dropdown-toggle" data-bs-toggle="dropdown"
role="button" aria-expanded="false" aria-haspopup="true"
id="id_theme_menu_link">
<span class="fa fa-adjust nav-icon" id="id_active_theme_icon"></span>
<span class="nav-text d-md-none" id="id_toggle_theme_text">
{% trans "Toggle theme" %}
</span>
</a>
<ul class="dropdown-menu" role="menu" aria-labelledby="id_theme_menu_link">
<li>
<button type="button" class="dropdown-item d-flex align-items-center"
data-bs-theme-value="light" data-bs-icon-value="fa-sun"
aria-pressed="false">
<span class="fa fa-sun nav-icon me-2"></span>
{% trans "Light" %}
<span class="fa fa-check nav-icon ms-auto d-none"></span>
</button>
</li>
<li>
<button type="button" class="dropdown-item d-flex align-items-center"
data-bs-theme-value="dark" data-bs-icon-value="fa-moon"
aria-pressed="false">
<span class="fa fa-moon nav-icon me-2"></span>
{% trans "Dark" %}
<span class="fa fa-check nav-icon ms-auto d-none"></span>
</button>
</li>
<li>
<button type="button" class="dropdown-item d-flex align-items-center"
data-bs-theme-value="auto" data-bs-icon-value="fa-adjust"
aria-pressed="true">
<span class="fa fa-adjust nav-icon me-2"></span>
{% trans "Auto" %}
<span class="fa fa-check nav-icon ms-auto d-none"></span>
</button>
</li>
</ul>
</li>

View File

@ -6,13 +6,14 @@
--neutral-light-color: #f5f5f5; /* Light grey */
--freedombox-blue-color: #4989D4; /* Blue */
--progress-color: #3498db; /* Blue */
--freedombox-form-disabled-bg-color: #e9ecef; /* Grey */
--freedombox-navbar-color: white;
--freedombox-navbar-shadow-color: rgba(0, 0, 0, 0.25);
--freedombox-toggle-button-bg: #ccc;
}
[data-bs-theme="dark"] {
--freedombox-toggle-button-bg: #888;
/* Missing variables in Bootstrap 5.2 copied from Bootstrap 5.3 */
--bs-secondary-bg: #e9ecef;
--bs-form-invalid-color: #dc3545;
--bs-form-invalid-border-color: #dc3545;
--bs-secondary-border-subtle: #c4c8cb;
}
/*
@ -49,20 +50,20 @@ h6:not(:first-child) {
/* Default style removed in bootstrap 4 */
.btn-default {
--bs-btn-color: var(--bs-body-color);
--bs-btn-bg: var(--bs-body-bg);
--bs-btn-border-color: var(--bs-tertiary-color);
--bs-btn-hover-color: var(--bs-body-color);
--bs-btn-hover-bg: var(--bs-secondary-bg);
--bs-btn-hover-border-color: var(--bs-tertiary-color);
--bs-btn-color: #333;
--bs-btn-bg: #fff;
--bs-btn-border-color: #ccc;
--bs-btn-hover-color: #333;
--bs-btn-hover-bg: #e6e6e6;
--bs-btn-hover-border-color: #adadad;
--bs-btn-focus-shadow-rgb: 192, 192, 192;
--bs-btn-active-color: var(--bs-body-color);
--bs-btn-active-bg: var(--bs-secondary-bg);
--bs-btn-active-border-color: var(--bs-tertiary-color);
--bs-btn-active-shadow: inset 0 3px 5px var(--bs-border-color-translucent);
--bs-btn-disabled-color: var(--bs-body-color);
--bs-btn-disabled-bg: var(--bs-secondary-bg);
--bs-btn-disabled-border-color: var(--bs-tertiary-color);
--bs-btn-active-color: #333;
--bs-btn-active-bg: #e6e6e6;
--bs-btn-active-border-color: #adadad;
--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
--bs-btn-disabled-color: #333;
--bs-btn-disabled-bg: #e6e6e6;
--bs-btn-disabled-border-color: #adadad;
}
/* Help block removed from bootstrap 4, needs updated django-bootstrap-from */
@ -70,7 +71,7 @@ h6:not(:first-child) {
display: block;
margin-top: 0.3125rem;
margin-bottom: 0.625rem;
color: var(--bs-secondary-color);
color: var(--bs-secondary);
}
/* .close was renamed to .alert-dismissable.btn-close in Bootstrap 5, needs
@ -98,7 +99,7 @@ form .alert .close {
/* Disabled form elements show as gray, removed in Bootstrap 5 */
.form-control:disabled, .form-control[readonly] {
background-color: var(--bs-secondary-bg);
background-color: var(--freedombox-form-disabled-bg-color);
opacity: 1;
}
@ -227,6 +228,28 @@ body {
vertical-align: middle;
}
.running-status-parent {
display: inline-block;
}
.running-status {
border-radius: 50%;
border: 1px solid black;
width: 0.5rem;
height: 0.5rem;
display: inline-block;
}
.running-status.loading {
border: 0.25rem solid var(--neutral-light-color);
border-top: 0.25rem solid var(--progress-color);
border-radius: 50%;
width: 1rem;
height: 1rem;
display: inline-block;
animation: spin 1s linear infinite;
}
@keyframes spin {
0% {
transform: rotate(0deg);
@ -291,21 +314,16 @@ html {
/* Tags */
.tag {
--bs-btn-padding-y: 0.25rem; /* Make the badge shorter */
border-style: none;
}
#selected-tags .tag {
border-style: solid;
}
/* Tag Input Container */
.tag-input {
display: flex;
align-items: center;
border: 1px solid var(--bs-border-color);
border: 1px solid #ced4da;
border-radius: .25rem;
padding: .375rem .75rem;
background-color: var(--bs-body-bg);
background-color: #fff;
margin-bottom: 2rem;
}
@ -454,7 +472,7 @@ footer {
*/
.main-header {
background: var(--freedombox-blue-color);
box-shadow: 0 0.25rem 0.375rem 0 var(--freedombox-navbar-shadow-color);
box-shadow: 0 0.25rem 0.375rem 0 rgba(0, 0, 0, 0.25);
border: none;
}
@ -504,10 +522,6 @@ footer {
border-bottom: var(--freedombox-navbar-color) 3px solid;
}
.main-header .dropdown-menu .active .fa-check {
display: block !important;
}
/* Breadcrumbs */
.breadcrumb-item {
--bs-breadcrumb-divider: ">";
@ -570,7 +584,7 @@ footer {
.card-tags {
font-weight: 400;
color: var(--bs-secondary-color);
color: var(--bs-secondary);
font-size: 0.875rem;
/* Show ellipsis after 3 lines. */
@ -697,9 +711,9 @@ footer {
border-radius: 0.8125rem;
width: 3.125rem;
height: 1.625rem;
background: var(--freedombox-toggle-button-bg);
--bs-btn-hover-bg: var(--freedombox-toggle-button-bg);
--bs-btn-disabled-bg: var(--freedombox-toggle-button-bg);;
background: #ccc;
--bs-btn-hover-bg: #ccc;
--bs-btn-disabled-bg: #ccc;
--bs-btn-disabled-border-color: transparent;
position: relative;
}
@ -710,7 +724,7 @@ footer {
height: 1.5rem;
width: 1.5rem;
border-radius: 100%;
background: var(--bs-body-bg);
background: #fff;
position: absolute;
top: 50%;
left: 0%;
@ -730,8 +744,8 @@ footer {
.toggle-button.running-status-button::before {
top: 0;
border: 0.25rem solid var(--bs-body-bg);
border-top-color: var(--freedombox-blue-color);
border: 0.25rem solid var(--neutral-light-color);
border-top: 0.25rem solid var(--progress-color);
animation: spin 1s linear infinite;
}
@ -744,8 +758,8 @@ footer {
*/
.running-status-button-before {
display: inline-block;
border: 0.25rem solid var(--bs-btn-color);
border-top-color: transparent;
border: 0.25rem solid var(--neutral-light-color);
border-top: 0.25rem solid var(--progress-color);
border-radius: 50%;
width: 1rem;
height: 1rem;
@ -753,8 +767,6 @@ footer {
margin-left: 0.625rem;
margin-bottom: -0.25rem;
margin-right: -1.625rem;
position: relative;
z-index: 10;
}
.running-status-button:disabled {
@ -770,7 +782,7 @@ input[type='submit'].running-status-button {
*/
.select-all-label {
border: 1px solid var(--bs-secondary-border-subtle);
background-color: var(--bs-tertiary-bg);
background-color: var(--neutral-light-color);
border-radius: 0.25rem;
padding: 0.5rem 1rem 0.25rem;
margin-left: -1rem;

View File

@ -1,96 +0,0 @@
// SPDX-License-Identifier: CC-BY-3.0
/*
This file is part of FreedomBox. Color mode toggler for Bootstrap's docs
(https://getbootstrap.com/). Copyright 2011-2025 The Bootstrap Authors.
@licstart The following is the entire license notice for the
JavaScript code in this page.
Licensed under the Creative Commons Attribution 3.0 Unported License.
@licend The above is the entire license notice
for the JavaScript code in this page.
*/
(() => {
'use strict';
const getStoredTheme = () => localStorage.getItem('theme');
const setStoredTheme = theme => localStorage.setItem('theme', theme);
const getBrowserTheme = () => {
return window.matchMedia('(prefers-color-scheme: dark)')
.matches ? 'dark' : 'light';
};
const getPreferredTheme = () => {
const storedTheme = getStoredTheme();
if (storedTheme) {
return storedTheme;
}
return getBrowserTheme();
};
const setTheme = (theme) => {
if (theme === 'auto') {
theme = getBrowserTheme();
}
document.documentElement.setAttribute('data-bs-theme', theme);
};
setTheme(getPreferredTheme());
const showActiveTheme = (theme, focus = false) => {
const themeSwitcher = document.querySelector('#id_theme_menu_link');
if (!themeSwitcher) {
return;
}
const themeSwitcherText = document.querySelector('#id_toggle_theme_text');
const activeThemeIcon = document.querySelector('#id_active_theme_icon');
const btnToActive = document.querySelector(`[data-bs-theme-value="${theme}"]`);
const iconOfActiveBtn = btnToActive.dataset.bsIconValue;
document.querySelectorAll('[data-bs-theme-value]').forEach(element => {
element.classList.remove('active');
element.setAttribute('aria-pressed', 'false');
const iconOfBtn = element.dataset.bsIconValue;
if (activeThemeIcon.classList.contains(iconOfBtn)) {
activeThemeIcon.classList.remove(iconOfBtn);
}
});
btnToActive.classList.add('active');
btnToActive.setAttribute('aria-pressed', 'true');
activeThemeIcon.classList.add(iconOfActiveBtn);
const themeSwitcherLabel = `${themeSwitcherText.textContent} (${btnToActive.dataset.bsThemeValue})`;
themeSwitcher.setAttribute('title', themeSwitcherLabel);
if (focus) {
themeSwitcher.focus();
};
};
window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', () => {
const storedTheme = getStoredTheme();
if (storedTheme !== 'light' && storedTheme !== 'dark') {
setTheme(getPreferredTheme());
}
});
window.addEventListener('DOMContentLoaded', () => {
showActiveTheme(getPreferredTheme());
document.querySelectorAll('[data-bs-theme-value]')
.forEach(toggle => {
toggle.addEventListener('click', () => {
const theme = toggle.getAttribute('data-bs-theme-value');
setStoredTheme(theme);
setTheme(theme);
showActiveTheme(theme, true);
});
});
});
})();

View File

@ -85,11 +85,6 @@ function onSubmitAddProgress(event) {
// For push buttons
const beforeElement = document.createElement('div');
beforeElement.classList.add('running-status-button-before');
button.classList.forEach(className => {
if (className.startsWith('btn-')) {
beforeElement.classList.add(className);
}
});
button.parentNode.insertBefore(beforeElement, button);
} else if (button.tagName == "BUTTON") {
// For toggle buttons