From 0285dc8970246c95c2e588acd25ea2940899a5fd Mon Sep 17 00:00:00 2001 From: Inverle Date: Tue, 29 Sep 2026 16:18:01 +0200 Subject: [PATCH] Check SVG optimization in the tests CI workflow with SVGO (#9361) * Check SVG optimization in the tests CI workflow with SVGO Previously it was only recommended by the documentation that SVG images should be optimized using [SVGOMG](https://github.com/jakearchibald/svgomg), the web GUI version of https://github.com/svg/svgo (CLI) Now all SVG images are optimized, and optimization is mandatory enforced by the tests CI workflow. \+ SVGs are sanitized of potentially malicious JS code using the https://svgo.dev/docs/plugins/removeScripts/ plugin * Output prettified SVGs instead and remove unchanged files from stdout Co-authored-by: Alexandre Alapetite * Use `removeScripts` SVGO plugin to reduce risk of malicious SVGs * Move the CLI options to the JS config instead * Disable `removeComments` plugin included in the default preset * editorconfig, and easier config --------- Co-authored-by: Alexandre Alapetite --- .editorconfig | 2 +- .github/workflows/tests.yml | 3 + AGENTS.md | 2 +- Makefile | 7 + docs/_includes/copy_icon.svg | 4 + docs/_includes/hamburger_icon.svg | 3 + docs/_includes/lang_dropdown.html | 5 +- docs/_includes/language_icon.svg | 4 + docs/_layouts/default.html | 8 +- docs/assets/js/docs.js | 8 +- docs/en/contributing.md | 2 +- docs/img/FreshRSS-logo-font.svg | 20 +- docs/img/FreshRSS-logo.svg | 32 ++- .../Alternative-Dark/icons/disabled-light.svg | 2 +- p/themes/Alternative-Dark/icons/icon.svg | 22 +- p/themes/Ansum/icons/configure.svg | 63 +----- p/themes/Ansum/icons/down.svg | 63 +----- p/themes/Ansum/icons/icon.svg | 80 +------- p/themes/Ansum/icons/link.svg | 8 +- p/themes/Ansum/icons/more.svg | 60 +----- p/themes/Ansum/icons/non-starred.svg | 61 +----- p/themes/Ansum/icons/read.svg | 60 +----- p/themes/Ansum/icons/refresh.svg | 60 +----- p/themes/Ansum/icons/rss.svg | 61 +----- p/themes/Ansum/icons/starred.svg | 8 +- p/themes/Ansum/icons/tick-color.svg | 58 +----- p/themes/Ansum/icons/tick.svg | 8 +- p/themes/Ansum/icons/unread.svg | 2 +- p/themes/Ansum/icons/up.svg | 2 +- p/themes/Ansum/icons/view-global.svg | 60 +----- p/themes/Ansum/icons/view-list.svg | 61 +----- p/themes/Ansum/icons/view-reader.svg | 60 +----- p/themes/Dark/icons/icon.svg | 13 +- p/themes/Mapco/icons/configure.svg | 2 +- p/themes/Mapco/icons/down.svg | 31 +-- p/themes/Mapco/icons/icon.svg | 10 +- p/themes/Mapco/icons/link.svg | 2 +- p/themes/Mapco/icons/more.svg | 2 +- p/themes/Mapco/icons/non-starred.svg | 2 +- p/themes/Mapco/icons/read.svg | 2 +- p/themes/Mapco/icons/refresh.svg | 2 +- p/themes/Mapco/icons/rss.svg | 2 +- p/themes/Mapco/icons/search.svg | 2 +- p/themes/Mapco/icons/starred.svg | 2 +- p/themes/Mapco/icons/tick-color.svg | 2 +- p/themes/Mapco/icons/unread.svg | 2 +- p/themes/Mapco/icons/up.svg | 2 +- p/themes/Mapco/icons/view-global.svg | 2 +- p/themes/Mapco/icons/view-normal.svg | 2 +- p/themes/Mapco/icons/view-reader.svg | 2 +- p/themes/Nord/icons/link.svg | 4 +- p/themes/Nord/icons/starred.svg | 4 +- p/themes/Nord/icons/unread.svg | 7 +- p/themes/Pafat/icons/all.svg | 4 +- p/themes/Pafat/icons/down.svg | 8 +- p/themes/Pafat/icons/icon.svg | 13 +- p/themes/Pafat/icons/link.svg | 14 +- p/themes/Pafat/icons/login.svg | 12 +- p/themes/Pafat/icons/logout.svg | 12 +- p/themes/Pafat/icons/next.svg | 8 +- p/themes/Pafat/icons/non-starred.svg | 8 +- p/themes/Pafat/icons/prev.svg | 8 +- p/themes/Pafat/icons/read.svg | 8 +- p/themes/Pafat/icons/share.svg | 16 +- p/themes/Pafat/icons/starred.svg | 8 +- p/themes/Pafat/icons/tag.svg | 8 +- p/themes/Pafat/icons/unread.svg | 12 +- p/themes/Pafat/icons/up.svg | 8 +- p/themes/Swage/icons/add.svg | 8 +- p/themes/Swage/icons/all.svg | 8 +- p/themes/Swage/icons/bookmark-add.svg | 13 +- p/themes/Swage/icons/bookmark-tag.svg | 4 +- p/themes/Swage/icons/category.svg | 13 +- p/themes/Swage/icons/configure.svg | 14 +- p/themes/Swage/icons/disabled-light.svg | 4 +- p/themes/Swage/icons/down.svg | 7 +- p/themes/Swage/icons/error.svg | 6 +- p/themes/Swage/icons/icon.svg | 22 +- p/themes/Swage/icons/next.svg | 6 +- p/themes/Swage/icons/non-starred.svg | 7 +- p/themes/Swage/icons/prev.svg | 7 +- p/themes/Swage/icons/read.svg | 4 +- p/themes/Swage/icons/refresh.svg | 6 +- p/themes/Swage/icons/rss.svg | 12 +- p/themes/Swage/icons/sort-down.svg | 4 +- p/themes/Swage/icons/sort-up.svg | 4 +- p/themes/Swage/icons/starred.svg | 7 +- p/themes/Swage/icons/unread.svg | 7 +- p/themes/Swage/icons/up.svg | 7 +- p/themes/Swage/icons/view-global.svg | 7 +- p/themes/Swage/icons/view-normal.svg | 9 +- p/themes/Swage/icons/view-reader.svg | 4 +- p/themes/icons/FreshRSS-logo.svg | 32 ++- p/themes/icons/add.svg | 2 +- p/themes/icons/all.svg | 2 +- p/themes/icons/bookmark-add.svg | 6 +- p/themes/icons/bookmark-tag.svg | 4 +- p/themes/icons/category.svg | 10 +- p/themes/icons/close.svg | 2 +- p/themes/icons/configure.svg | 8 +- p/themes/icons/debug.svg | 2 +- p/themes/icons/disabled.svg | 4 +- p/themes/icons/down.svg | 2 +- p/themes/icons/enabled.svg | 4 +- p/themes/icons/error.svg | 6 +- p/themes/icons/favicon.svg | 15 +- p/themes/icons/help.svg | 10 +- p/themes/icons/icon.svg | 13 +- p/themes/icons/important.svg | 19 +- p/themes/icons/key.svg | 8 +- p/themes/icons/label.svg | 2 +- p/themes/icons/link.svg | 10 +- p/themes/icons/login.svg | 8 +- p/themes/icons/logout.svg | 8 +- p/themes/icons/look.svg | 4 +- p/themes/icons/next.svg | 2 +- p/themes/icons/non-starred.svg | 2 +- p/themes/icons/notice.svg | 8 +- p/themes/icons/opml-dyn.svg | 10 +- p/themes/icons/opml.svg | 8 +- p/themes/icons/prev.svg | 2 +- p/themes/icons/read.svg | 2 +- p/themes/icons/refresh.svg | 8 +- p/themes/icons/rss.svg | 12 +- p/themes/icons/search.svg | 12 +- p/themes/icons/share.svg | 8 +- p/themes/icons/sort-down.svg | 4 +- p/themes/icons/sort-up.svg | 4 +- p/themes/icons/spinner.svg | 7 +- p/themes/icons/starred.svg | 8 +- p/themes/icons/stats.svg | 8 +- p/themes/icons/tag.svg | 2 +- p/themes/icons/unread.svg | 12 +- p/themes/icons/up.svg | 2 +- p/themes/icons/view-global.svg | 14 +- p/themes/icons/view-normal.svg | 4 +- p/themes/icons/view-reader.svg | 12 +- p/themes/icons/warning.svg | 8 +- package-lock.json | 194 +++++++++++++++++- package.json | 8 +- svgo.config.mjs | 23 +++ 141 files changed, 663 insertions(+), 1237 deletions(-) create mode 100644 docs/_includes/copy_icon.svg create mode 100644 docs/_includes/hamburger_icon.svg create mode 100644 docs/_includes/language_icon.svg create mode 100644 svgo.config.mjs diff --git a/.editorconfig b/.editorconfig index 761ad915b..48e59bb40 100644 --- a/.editorconfig +++ b/.editorconfig @@ -12,7 +12,7 @@ indent_style = tab [*.{html,php,phtml}] indent_style = tab -[*.js] +[*.{js,mjs}] indent_style = tab [*.{json,jsonc}] diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index bf57785a8..a974f27d4 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -85,6 +85,9 @@ jobs: - name: Check Right-to-left CSS run: npm run --silent rtlcss && git diff --exit-code + - name: Optimize SVG image files + run: npm run --silent svgo && git diff --exit-code + # Shell tests - name: Use shell cache diff --git a/AGENTS.md b/AGENTS.md index 5818626ae..ffaed436a 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -75,7 +75,7 @@ FreshRSS_Factory::createEntryDao(); # Runs all tests: PHPUnit, PHPCS, PHPStan, typos make test-all -# Auto-fix all trivial issues: whitespace, RTL CSS, translations +# Auto-fix all trivial issues: whitespace, RTL CSS, translations, SVG image optimization make fix-all # See a list of commands: diff --git a/Makefile b/Makefile index 06a5b8a32..c2bd348c0 100644 --- a/Makefile +++ b/Makefile @@ -107,6 +107,9 @@ node_modules/.bin/eslint: node_modules/.bin/rtlcss: npm install +node_modules/.bin/svgo: + npm install + # TODO: Add composer install .PHONY: composer-test composer-test: bin/phpstan bin/composer @@ -247,6 +250,10 @@ refresh: ## Refresh feeds by fetching new messages rtl: node_modules/.bin/rtlcss ## Generate RTL CSS files npm run-script rtlcss +.PHONY: svgo +svgo: node_modules/.bin/svgo ## Optimize SVG image files + npm run-script svgo + ##@ Help .PHONY: help help: ## Display this help diff --git a/docs/_includes/copy_icon.svg b/docs/_includes/copy_icon.svg new file mode 100644 index 000000000..ec934bd9b --- /dev/null +++ b/docs/_includes/copy_icon.svg @@ -0,0 +1,4 @@ + + + + diff --git a/docs/_includes/hamburger_icon.svg b/docs/_includes/hamburger_icon.svg new file mode 100644 index 000000000..9355ec187 --- /dev/null +++ b/docs/_includes/hamburger_icon.svg @@ -0,0 +1,3 @@ + + + diff --git a/docs/_includes/lang_dropdown.html b/docs/_includes/lang_dropdown.html index 81dc62508..eed693a91 100644 --- a/docs/_includes/lang_dropdown.html +++ b/docs/_includes/lang_dropdown.html @@ -1,9 +1,6 @@
- - - - + {% include language_icon.svg %} + +
{% include anchor_headings.html html=content anchorBody="#" generateId=true %}
diff --git a/docs/assets/js/docs.js b/docs/assets/js/docs.js index c14fce920..9e204303c 100644 --- a/docs/assets/js/docs.js +++ b/docs/assets/js/docs.js @@ -27,17 +27,13 @@ document.addEventListener('DOMContentLoaded', () => { sessionStorage.removeItem('sidebar_scrollTop'); } + const copyIconSvg = document.querySelector('template#copy-svg-icon').innerHTML; for (const el of document.querySelectorAll('div.highlight')) { - /* eslint-disable @stylistic/max-len */ el.insertAdjacentHTML('afterbegin', ` `); - /* eslint-enable @stylistic/max-len */ const copyBtn = el.querySelector('button.copy'); copyBtn.addEventListener('click', () => { const snippet = el.querySelector('code').innerText; diff --git a/docs/en/contributing.md b/docs/en/contributing.md index f8a4711a3..e18966140 100644 --- a/docs/en/contributing.md +++ b/docs/en/contributing.md @@ -69,7 +69,7 @@ This checklist is designed to ensure high-quality system themes while minimizing * Include _frss.css in the "files" section of [`metadata.json`](./developers/04_Frontend/02_Design.md). * Theme-specific icons reside in the `icons` directory. * Icons should be provided as `svg` files. - * Ensure clean code without any unnecessary fragments; utilize tools like [SVGOMG](https://jakearchibald.github.io/svgomg/) for cleaning. + * Ensure clean code without any unnecessary fragments. SVG files should be optimized using `make svgo`. * The default color for icons is `#666666`; employ CSS filters for recoloring. * Utilize CSS variables for colors to facilitate easy color adjustments with [CustomCSS extension](https://github.com/FreshRSS/Extensions). * Implement a dark mode that aligns with the `.darkMode` CSS class. diff --git a/docs/img/FreshRSS-logo-font.svg b/docs/img/FreshRSS-logo-font.svg index 134adfdfc..6b7b5a39f 100644 --- a/docs/img/FreshRSS-logo-font.svg +++ b/docs/img/FreshRSS-logo-font.svg @@ -1,16 +1,12 @@ - + Logo FreshRSS - - - - - + + + + + - - + - FreshRSS + FreshRSS - diff --git a/docs/img/FreshRSS-logo.svg b/docs/img/FreshRSS-logo.svg index 4eb268c8a..4855d4c03 100644 --- a/docs/img/FreshRSS-logo.svg +++ b/docs/img/FreshRSS-logo.svg @@ -1,25 +1,17 @@ - + Logo FreshRSS - - - - - + + + + + - - + - - FreshRSS - - - - - - - - + + + FreshRSS + + - diff --git a/p/themes/Alternative-Dark/icons/disabled-light.svg b/p/themes/Alternative-Dark/icons/disabled-light.svg index 8542db156..1d5ab0a68 100644 --- a/p/themes/Alternative-Dark/icons/disabled-light.svg +++ b/p/themes/Alternative-Dark/icons/disabled-light.svg @@ -1,3 +1,3 @@ - + diff --git a/p/themes/Alternative-Dark/icons/icon.svg b/p/themes/Alternative-Dark/icons/icon.svg index c6bbd08bd..3b84dc940 100644 --- a/p/themes/Alternative-Dark/icons/icon.svg +++ b/p/themes/Alternative-Dark/icons/icon.svg @@ -1,14 +1,10 @@ - - - -Logo FreshRSS - - - - - + + + Logo FreshRSS + + + + diff --git a/p/themes/Ansum/icons/configure.svg b/p/themes/Ansum/icons/configure.svg index 04145eba5..930645ff7 100644 --- a/p/themes/Ansum/icons/configure.svg +++ b/p/themes/Ansum/icons/configure.svg @@ -1,62 +1,3 @@ - - - - - - image/svg+xml - - - - - - - - - + + diff --git a/p/themes/Ansum/icons/down.svg b/p/themes/Ansum/icons/down.svg index ee1fc8072..775a3b766 100644 --- a/p/themes/Ansum/icons/down.svg +++ b/p/themes/Ansum/icons/down.svg @@ -1,62 +1,3 @@ - - - - - - image/svg+xml - - - - - - - - - + + diff --git a/p/themes/Ansum/icons/icon.svg b/p/themes/Ansum/icons/icon.svg index 7900c0a79..20c96f654 100644 --- a/p/themes/Ansum/icons/icon.svg +++ b/p/themes/Ansum/icons/icon.svg @@ -1,75 +1,7 @@ - - - - - - image/svg+xml - - - - - - - - - - - + + + + + + diff --git a/p/themes/Ansum/icons/link.svg b/p/themes/Ansum/icons/link.svg index 44ee847b0..747512e5e 100644 --- a/p/themes/Ansum/icons/link.svg +++ b/p/themes/Ansum/icons/link.svg @@ -1,5 +1,3 @@ - - - - - \ No newline at end of file + + + diff --git a/p/themes/Ansum/icons/more.svg b/p/themes/Ansum/icons/more.svg index 6e505e71b..3b4a4cee4 100644 --- a/p/themes/Ansum/icons/more.svg +++ b/p/themes/Ansum/icons/more.svg @@ -1,59 +1,3 @@ - - - - - - image/svg+xml - - - - - - - - - - + + diff --git a/p/themes/Ansum/icons/non-starred.svg b/p/themes/Ansum/icons/non-starred.svg index 9d49930c0..a6e86a79d 100644 --- a/p/themes/Ansum/icons/non-starred.svg +++ b/p/themes/Ansum/icons/non-starred.svg @@ -1,60 +1,3 @@ - - - - - - image/svg+xml - - - - - - - - - - + + diff --git a/p/themes/Ansum/icons/read.svg b/p/themes/Ansum/icons/read.svg index d583cce03..b39fe1731 100644 --- a/p/themes/Ansum/icons/read.svg +++ b/p/themes/Ansum/icons/read.svg @@ -1,59 +1,3 @@ - - - - - - image/svg+xml - - - - - - - - - - + + diff --git a/p/themes/Ansum/icons/refresh.svg b/p/themes/Ansum/icons/refresh.svg index f23fbf4a2..553cc718e 100644 --- a/p/themes/Ansum/icons/refresh.svg +++ b/p/themes/Ansum/icons/refresh.svg @@ -1,59 +1,3 @@ - - - - - - image/svg+xml - - - - - - - - - - + + diff --git a/p/themes/Ansum/icons/rss.svg b/p/themes/Ansum/icons/rss.svg index 7044bbaa4..6e044bd1d 100644 --- a/p/themes/Ansum/icons/rss.svg +++ b/p/themes/Ansum/icons/rss.svg @@ -1,60 +1,3 @@ - - - - - - image/svg+xml - - - - - - - - - - + + diff --git a/p/themes/Ansum/icons/starred.svg b/p/themes/Ansum/icons/starred.svg index 3b0bf8cb8..bbc4e540e 100644 --- a/p/themes/Ansum/icons/starred.svg +++ b/p/themes/Ansum/icons/starred.svg @@ -1,5 +1,3 @@ - - - - - \ No newline at end of file + + + diff --git a/p/themes/Ansum/icons/tick-color.svg b/p/themes/Ansum/icons/tick-color.svg index fe0c28a84..c717b2fdc 100644 --- a/p/themes/Ansum/icons/tick-color.svg +++ b/p/themes/Ansum/icons/tick-color.svg @@ -1,57 +1,3 @@ - - - - - - image/svg+xml - - - - - - - - - + + diff --git a/p/themes/Ansum/icons/tick.svg b/p/themes/Ansum/icons/tick.svg index 9c436e7a0..a922f30b3 100644 --- a/p/themes/Ansum/icons/tick.svg +++ b/p/themes/Ansum/icons/tick.svg @@ -1,5 +1,3 @@ - - - - - \ No newline at end of file + + + diff --git a/p/themes/Ansum/icons/unread.svg b/p/themes/Ansum/icons/unread.svg index 6cdd8c383..563741ac7 100644 --- a/p/themes/Ansum/icons/unread.svg +++ b/p/themes/Ansum/icons/unread.svg @@ -1,3 +1,3 @@ - + diff --git a/p/themes/Ansum/icons/up.svg b/p/themes/Ansum/icons/up.svg index 631ef9fdb..8af69abee 100644 --- a/p/themes/Ansum/icons/up.svg +++ b/p/themes/Ansum/icons/up.svg @@ -1,3 +1,3 @@ - + diff --git a/p/themes/Ansum/icons/view-global.svg b/p/themes/Ansum/icons/view-global.svg index 08632a190..ef1e43ccc 100644 --- a/p/themes/Ansum/icons/view-global.svg +++ b/p/themes/Ansum/icons/view-global.svg @@ -1,59 +1,3 @@ - - - - - - image/svg+xml - - - - - - - - - - + + diff --git a/p/themes/Ansum/icons/view-list.svg b/p/themes/Ansum/icons/view-list.svg index bcea01055..8355a1839 100644 --- a/p/themes/Ansum/icons/view-list.svg +++ b/p/themes/Ansum/icons/view-list.svg @@ -1,60 +1,3 @@ - - - - - - image/svg+xml - - - - - - - - - - + + diff --git a/p/themes/Ansum/icons/view-reader.svg b/p/themes/Ansum/icons/view-reader.svg index 7471037d9..4adf7b73f 100644 --- a/p/themes/Ansum/icons/view-reader.svg +++ b/p/themes/Ansum/icons/view-reader.svg @@ -1,59 +1,3 @@ - - - - - - image/svg+xml - - - - - - - - - - + + diff --git a/p/themes/Dark/icons/icon.svg b/p/themes/Dark/icons/icon.svg index 4eb53dda9..5c5f5b095 100644 --- a/p/themes/Dark/icons/icon.svg +++ b/p/themes/Dark/icons/icon.svg @@ -1,12 +1,11 @@ Logo FreshRSS - - - - - + + + + + - - + diff --git a/p/themes/Mapco/icons/configure.svg b/p/themes/Mapco/icons/configure.svg index 5ffe55442..10371627a 100644 --- a/p/themes/Mapco/icons/configure.svg +++ b/p/themes/Mapco/icons/configure.svg @@ -1,3 +1,3 @@ - + diff --git a/p/themes/Mapco/icons/down.svg b/p/themes/Mapco/icons/down.svg index f9e06de8a..7b27b1099 100644 --- a/p/themes/Mapco/icons/down.svg +++ b/p/themes/Mapco/icons/down.svg @@ -1,30 +1,3 @@ - - - - - + + diff --git a/p/themes/Mapco/icons/icon.svg b/p/themes/Mapco/icons/icon.svg index 8ba9478e7..ca1e72f37 100644 --- a/p/themes/Mapco/icons/icon.svg +++ b/p/themes/Mapco/icons/icon.svg @@ -1,7 +1,7 @@ - - - - - + + + + + diff --git a/p/themes/Mapco/icons/link.svg b/p/themes/Mapco/icons/link.svg index 6bcfc1eb9..7f1554f3b 100644 --- a/p/themes/Mapco/icons/link.svg +++ b/p/themes/Mapco/icons/link.svg @@ -1,3 +1,3 @@ - + diff --git a/p/themes/Mapco/icons/more.svg b/p/themes/Mapco/icons/more.svg index 71535325a..9fb4bb756 100644 --- a/p/themes/Mapco/icons/more.svg +++ b/p/themes/Mapco/icons/more.svg @@ -1,3 +1,3 @@ - + diff --git a/p/themes/Mapco/icons/non-starred.svg b/p/themes/Mapco/icons/non-starred.svg index 57405ef45..ea7362fea 100644 --- a/p/themes/Mapco/icons/non-starred.svg +++ b/p/themes/Mapco/icons/non-starred.svg @@ -1,3 +1,3 @@ - + diff --git a/p/themes/Mapco/icons/read.svg b/p/themes/Mapco/icons/read.svg index 91b0a8d17..e6358d978 100644 --- a/p/themes/Mapco/icons/read.svg +++ b/p/themes/Mapco/icons/read.svg @@ -1,3 +1,3 @@ - + diff --git a/p/themes/Mapco/icons/refresh.svg b/p/themes/Mapco/icons/refresh.svg index 495432162..e2587e120 100644 --- a/p/themes/Mapco/icons/refresh.svg +++ b/p/themes/Mapco/icons/refresh.svg @@ -1,3 +1,3 @@ - + diff --git a/p/themes/Mapco/icons/rss.svg b/p/themes/Mapco/icons/rss.svg index cf3c34814..4e786b858 100644 --- a/p/themes/Mapco/icons/rss.svg +++ b/p/themes/Mapco/icons/rss.svg @@ -1,3 +1,3 @@ - + diff --git a/p/themes/Mapco/icons/search.svg b/p/themes/Mapco/icons/search.svg index 690c74942..afd8f2131 100644 --- a/p/themes/Mapco/icons/search.svg +++ b/p/themes/Mapco/icons/search.svg @@ -1,3 +1,3 @@ - + diff --git a/p/themes/Mapco/icons/starred.svg b/p/themes/Mapco/icons/starred.svg index 998164e85..a860c9837 100644 --- a/p/themes/Mapco/icons/starred.svg +++ b/p/themes/Mapco/icons/starred.svg @@ -1,3 +1,3 @@ - + diff --git a/p/themes/Mapco/icons/tick-color.svg b/p/themes/Mapco/icons/tick-color.svg index da7d176aa..4ceeac65d 100644 --- a/p/themes/Mapco/icons/tick-color.svg +++ b/p/themes/Mapco/icons/tick-color.svg @@ -1,3 +1,3 @@ - + diff --git a/p/themes/Mapco/icons/unread.svg b/p/themes/Mapco/icons/unread.svg index 6cdd8c383..563741ac7 100644 --- a/p/themes/Mapco/icons/unread.svg +++ b/p/themes/Mapco/icons/unread.svg @@ -1,3 +1,3 @@ - + diff --git a/p/themes/Mapco/icons/up.svg b/p/themes/Mapco/icons/up.svg index b5baff62f..75e560b11 100644 --- a/p/themes/Mapco/icons/up.svg +++ b/p/themes/Mapco/icons/up.svg @@ -1,3 +1,3 @@ - + diff --git a/p/themes/Mapco/icons/view-global.svg b/p/themes/Mapco/icons/view-global.svg index ff9673422..a3f21fb3c 100644 --- a/p/themes/Mapco/icons/view-global.svg +++ b/p/themes/Mapco/icons/view-global.svg @@ -1,3 +1,3 @@ - + diff --git a/p/themes/Mapco/icons/view-normal.svg b/p/themes/Mapco/icons/view-normal.svg index 5b206352b..d8cda304e 100644 --- a/p/themes/Mapco/icons/view-normal.svg +++ b/p/themes/Mapco/icons/view-normal.svg @@ -1,3 +1,3 @@ - + diff --git a/p/themes/Mapco/icons/view-reader.svg b/p/themes/Mapco/icons/view-reader.svg index 30229af23..f03b680e6 100644 --- a/p/themes/Mapco/icons/view-reader.svg +++ b/p/themes/Mapco/icons/view-reader.svg @@ -1,3 +1,3 @@ - + diff --git a/p/themes/Nord/icons/link.svg b/p/themes/Nord/icons/link.svg index 8f12a37d9..6a74f0fc8 100644 --- a/p/themes/Nord/icons/link.svg +++ b/p/themes/Nord/icons/link.svg @@ -1 +1,3 @@ - \ No newline at end of file + + + diff --git a/p/themes/Nord/icons/starred.svg b/p/themes/Nord/icons/starred.svg index f9041c2c0..968aa87e2 100644 --- a/p/themes/Nord/icons/starred.svg +++ b/p/themes/Nord/icons/starred.svg @@ -1 +1,3 @@ - \ No newline at end of file + + + diff --git a/p/themes/Nord/icons/unread.svg b/p/themes/Nord/icons/unread.svg index 4f5f95828..d804e8d38 100644 --- a/p/themes/Nord/icons/unread.svg +++ b/p/themes/Nord/icons/unread.svg @@ -1 +1,6 @@ - \ No newline at end of file + + + + + + diff --git a/p/themes/Pafat/icons/all.svg b/p/themes/Pafat/icons/all.svg index 1c7ba3ffe..d80798c10 100644 --- a/p/themes/Pafat/icons/all.svg +++ b/p/themes/Pafat/icons/all.svg @@ -1,5 +1,3 @@ - - - + diff --git a/p/themes/Pafat/icons/down.svg b/p/themes/Pafat/icons/down.svg index 050d6b969..e6cf0faca 100644 --- a/p/themes/Pafat/icons/down.svg +++ b/p/themes/Pafat/icons/down.svg @@ -1,5 +1,3 @@ - - - - - \ No newline at end of file + + + diff --git a/p/themes/Pafat/icons/icon.svg b/p/themes/Pafat/icons/icon.svg index b489e18da..0e4055527 100644 --- a/p/themes/Pafat/icons/icon.svg +++ b/p/themes/Pafat/icons/icon.svg @@ -1,12 +1,11 @@ Logo FreshRSS - - - - - + + + + + - - + diff --git a/p/themes/Pafat/icons/link.svg b/p/themes/Pafat/icons/link.svg index cc30f9f8b..fddb08b4f 100644 --- a/p/themes/Pafat/icons/link.svg +++ b/p/themes/Pafat/icons/link.svg @@ -1,7 +1,7 @@ - - - - - - - \ No newline at end of file + + + + + + + diff --git a/p/themes/Pafat/icons/login.svg b/p/themes/Pafat/icons/login.svg index cf2b347ad..45c5dc66a 100644 --- a/p/themes/Pafat/icons/login.svg +++ b/p/themes/Pafat/icons/login.svg @@ -1,6 +1,6 @@ - - - - - - \ No newline at end of file + + + + + + diff --git a/p/themes/Pafat/icons/logout.svg b/p/themes/Pafat/icons/logout.svg index ac2d180d8..0aa3e420b 100644 --- a/p/themes/Pafat/icons/logout.svg +++ b/p/themes/Pafat/icons/logout.svg @@ -1,6 +1,6 @@ - - - - - - \ No newline at end of file + + + + + + diff --git a/p/themes/Pafat/icons/next.svg b/p/themes/Pafat/icons/next.svg index 59d512450..fe69227ef 100644 --- a/p/themes/Pafat/icons/next.svg +++ b/p/themes/Pafat/icons/next.svg @@ -1,5 +1,3 @@ - - - - - \ No newline at end of file + + + diff --git a/p/themes/Pafat/icons/non-starred.svg b/p/themes/Pafat/icons/non-starred.svg index e019daffd..aa20f85db 100644 --- a/p/themes/Pafat/icons/non-starred.svg +++ b/p/themes/Pafat/icons/non-starred.svg @@ -1,5 +1,3 @@ - - - - - \ No newline at end of file + + + diff --git a/p/themes/Pafat/icons/prev.svg b/p/themes/Pafat/icons/prev.svg index 000ecb10d..c8675aae6 100644 --- a/p/themes/Pafat/icons/prev.svg +++ b/p/themes/Pafat/icons/prev.svg @@ -1,5 +1,3 @@ - - - - - \ No newline at end of file + + + diff --git a/p/themes/Pafat/icons/read.svg b/p/themes/Pafat/icons/read.svg index f3ce7532d..b039bddeb 100644 --- a/p/themes/Pafat/icons/read.svg +++ b/p/themes/Pafat/icons/read.svg @@ -1,5 +1,3 @@ - - - - - \ No newline at end of file + + + diff --git a/p/themes/Pafat/icons/share.svg b/p/themes/Pafat/icons/share.svg index 5010082cb..36557822c 100644 --- a/p/themes/Pafat/icons/share.svg +++ b/p/themes/Pafat/icons/share.svg @@ -1,8 +1,8 @@ - - - - - - - - \ No newline at end of file + + + + + + + + diff --git a/p/themes/Pafat/icons/starred.svg b/p/themes/Pafat/icons/starred.svg index b9ab2f9f7..3e16c53ba 100644 --- a/p/themes/Pafat/icons/starred.svg +++ b/p/themes/Pafat/icons/starred.svg @@ -1,5 +1,3 @@ - - - - - \ No newline at end of file + + + diff --git a/p/themes/Pafat/icons/tag.svg b/p/themes/Pafat/icons/tag.svg index 9908d4665..3d0871a0f 100644 --- a/p/themes/Pafat/icons/tag.svg +++ b/p/themes/Pafat/icons/tag.svg @@ -1,5 +1,3 @@ - - - - - \ No newline at end of file + + + diff --git a/p/themes/Pafat/icons/unread.svg b/p/themes/Pafat/icons/unread.svg index 77ce9c8b4..165f2775e 100644 --- a/p/themes/Pafat/icons/unread.svg +++ b/p/themes/Pafat/icons/unread.svg @@ -1,6 +1,6 @@ - - - - - - \ No newline at end of file + + + + + + diff --git a/p/themes/Pafat/icons/up.svg b/p/themes/Pafat/icons/up.svg index bd9be09e9..6a53dfffe 100644 --- a/p/themes/Pafat/icons/up.svg +++ b/p/themes/Pafat/icons/up.svg @@ -1,5 +1,3 @@ - - - - - \ No newline at end of file + + + diff --git a/p/themes/Swage/icons/add.svg b/p/themes/Swage/icons/add.svg index 49ca39bb4..513898c31 100644 --- a/p/themes/Swage/icons/add.svg +++ b/p/themes/Swage/icons/add.svg @@ -1,7 +1,3 @@ - - - - - - + + diff --git a/p/themes/Swage/icons/all.svg b/p/themes/Swage/icons/all.svg index df7d903b1..0a7ef6926 100644 --- a/p/themes/Swage/icons/all.svg +++ b/p/themes/Swage/icons/all.svg @@ -1,7 +1,3 @@ - - - - - - + + diff --git a/p/themes/Swage/icons/bookmark-add.svg b/p/themes/Swage/icons/bookmark-add.svg index 8100c3fe1..13469b101 100644 --- a/p/themes/Swage/icons/bookmark-add.svg +++ b/p/themes/Swage/icons/bookmark-add.svg @@ -1,8 +1,7 @@ - - - diff --git a/p/themes/Swage/icons/bookmark-tag.svg b/p/themes/Swage/icons/bookmark-tag.svg index 3632d0fd4..4edc232f3 100644 --- a/p/themes/Swage/icons/bookmark-tag.svg +++ b/p/themes/Swage/icons/bookmark-tag.svg @@ -1,3 +1,3 @@ - - \ No newline at end of file + + diff --git a/p/themes/Swage/icons/category.svg b/p/themes/Swage/icons/category.svg index f0b57d5a1..fde2c1dc6 100644 --- a/p/themes/Swage/icons/category.svg +++ b/p/themes/Swage/icons/category.svg @@ -1,12 +1,3 @@ - - - - - - - - - + + - diff --git a/p/themes/Swage/icons/configure.svg b/p/themes/Swage/icons/configure.svg index a1a87180e..dcd31c093 100644 --- a/p/themes/Swage/icons/configure.svg +++ b/p/themes/Swage/icons/configure.svg @@ -1,12 +1,4 @@ - - - - - + + + - diff --git a/p/themes/Swage/icons/disabled-light.svg b/p/themes/Swage/icons/disabled-light.svg index c46f71801..1d5ab0a68 100644 --- a/p/themes/Swage/icons/disabled-light.svg +++ b/p/themes/Swage/icons/disabled-light.svg @@ -1,3 +1,3 @@ - - + + diff --git a/p/themes/Swage/icons/down.svg b/p/themes/Swage/icons/down.svg index 6450ee37e..0c4dd5ef8 100644 --- a/p/themes/Swage/icons/down.svg +++ b/p/themes/Swage/icons/down.svg @@ -1,6 +1,3 @@ - - - - + + - diff --git a/p/themes/Swage/icons/error.svg b/p/themes/Swage/icons/error.svg index 840c8c57b..b774705bc 100644 --- a/p/themes/Swage/icons/error.svg +++ b/p/themes/Swage/icons/error.svg @@ -1,5 +1,3 @@ - - - - + + diff --git a/p/themes/Swage/icons/icon.svg b/p/themes/Swage/icons/icon.svg index c6bbd08bd..3b84dc940 100644 --- a/p/themes/Swage/icons/icon.svg +++ b/p/themes/Swage/icons/icon.svg @@ -1,14 +1,10 @@ - - - -Logo FreshRSS - - - - - + + + Logo FreshRSS + + + + diff --git a/p/themes/Swage/icons/next.svg b/p/themes/Swage/icons/next.svg index 056e70f3c..38fc4483f 100644 --- a/p/themes/Swage/icons/next.svg +++ b/p/themes/Swage/icons/next.svg @@ -1,5 +1,3 @@ - - - - + + diff --git a/p/themes/Swage/icons/non-starred.svg b/p/themes/Swage/icons/non-starred.svg index 714697060..711ca8962 100644 --- a/p/themes/Swage/icons/non-starred.svg +++ b/p/themes/Swage/icons/non-starred.svg @@ -1,6 +1,3 @@ - - - - + + - diff --git a/p/themes/Swage/icons/prev.svg b/p/themes/Swage/icons/prev.svg index 2f6ed886c..7e6c1cb66 100644 --- a/p/themes/Swage/icons/prev.svg +++ b/p/themes/Swage/icons/prev.svg @@ -1,6 +1,3 @@ - - - - + + - diff --git a/p/themes/Swage/icons/read.svg b/p/themes/Swage/icons/read.svg index 4ab272b39..94d8b96b2 100644 --- a/p/themes/Swage/icons/read.svg +++ b/p/themes/Swage/icons/read.svg @@ -1 +1,3 @@ - \ No newline at end of file + + + diff --git a/p/themes/Swage/icons/refresh.svg b/p/themes/Swage/icons/refresh.svg index 1c211abf6..11b209627 100644 --- a/p/themes/Swage/icons/refresh.svg +++ b/p/themes/Swage/icons/refresh.svg @@ -1,5 +1,3 @@ - - - - + + diff --git a/p/themes/Swage/icons/rss.svg b/p/themes/Swage/icons/rss.svg index 0be960048..2f001d1a4 100644 --- a/p/themes/Swage/icons/rss.svg +++ b/p/themes/Swage/icons/rss.svg @@ -1,7 +1,7 @@ - - - - - + + + + - diff --git a/p/themes/Swage/icons/sort-down.svg b/p/themes/Swage/icons/sort-down.svg index d7ce416cf..4558c2dd6 100644 --- a/p/themes/Swage/icons/sort-down.svg +++ b/p/themes/Swage/icons/sort-down.svg @@ -1,3 +1,3 @@ - - \ No newline at end of file + + diff --git a/p/themes/Swage/icons/sort-up.svg b/p/themes/Swage/icons/sort-up.svg index 6449eff7c..20509f467 100644 --- a/p/themes/Swage/icons/sort-up.svg +++ b/p/themes/Swage/icons/sort-up.svg @@ -1,3 +1,3 @@ - - \ No newline at end of file + + diff --git a/p/themes/Swage/icons/starred.svg b/p/themes/Swage/icons/starred.svg index 09bf263fd..5528278c1 100644 --- a/p/themes/Swage/icons/starred.svg +++ b/p/themes/Swage/icons/starred.svg @@ -1,6 +1,3 @@ - - - - + + - diff --git a/p/themes/Swage/icons/unread.svg b/p/themes/Swage/icons/unread.svg index 28c654176..4d31e0a1a 100644 --- a/p/themes/Swage/icons/unread.svg +++ b/p/themes/Swage/icons/unread.svg @@ -1,6 +1,3 @@ - - - - + + - diff --git a/p/themes/Swage/icons/up.svg b/p/themes/Swage/icons/up.svg index 2b89c550c..8593713f8 100644 --- a/p/themes/Swage/icons/up.svg +++ b/p/themes/Swage/icons/up.svg @@ -1,6 +1,3 @@ - - - - + + - diff --git a/p/themes/Swage/icons/view-global.svg b/p/themes/Swage/icons/view-global.svg index c289498e6..c8c15355b 100644 --- a/p/themes/Swage/icons/view-global.svg +++ b/p/themes/Swage/icons/view-global.svg @@ -1,6 +1,3 @@ - - - - + + - diff --git a/p/themes/Swage/icons/view-normal.svg b/p/themes/Swage/icons/view-normal.svg index 9135c070f..affc667f9 100644 --- a/p/themes/Swage/icons/view-normal.svg +++ b/p/themes/Swage/icons/view-normal.svg @@ -1,8 +1,3 @@ - - - - - - + + - diff --git a/p/themes/Swage/icons/view-reader.svg b/p/themes/Swage/icons/view-reader.svg index afb82adf7..e7eb9e091 100644 --- a/p/themes/Swage/icons/view-reader.svg +++ b/p/themes/Swage/icons/view-reader.svg @@ -1 +1,3 @@ - \ No newline at end of file + + + diff --git a/p/themes/icons/FreshRSS-logo.svg b/p/themes/icons/FreshRSS-logo.svg index 4eb268c8a..4855d4c03 100644 --- a/p/themes/icons/FreshRSS-logo.svg +++ b/p/themes/icons/FreshRSS-logo.svg @@ -1,25 +1,17 @@ - + Logo FreshRSS - - - - - + + + + + - - + - - FreshRSS - - - - - - - - + + + FreshRSS + + - diff --git a/p/themes/icons/add.svg b/p/themes/icons/add.svg index bcb3e866f..4d41229dc 100644 --- a/p/themes/icons/add.svg +++ b/p/themes/icons/add.svg @@ -1,3 +1,3 @@ - + diff --git a/p/themes/icons/all.svg b/p/themes/icons/all.svg index 00c63170d..8cc3d937a 100644 --- a/p/themes/icons/all.svg +++ b/p/themes/icons/all.svg @@ -1,3 +1,3 @@ - + diff --git a/p/themes/icons/bookmark-add.svg b/p/themes/icons/bookmark-add.svg index 5c0c5e7fb..52b7f9f20 100644 --- a/p/themes/icons/bookmark-add.svg +++ b/p/themes/icons/bookmark-add.svg @@ -1,6 +1,6 @@ - - + + - \ No newline at end of file + diff --git a/p/themes/icons/bookmark-tag.svg b/p/themes/icons/bookmark-tag.svg index b5f084a0c..8d5b66b9f 100644 --- a/p/themes/icons/bookmark-tag.svg +++ b/p/themes/icons/bookmark-tag.svg @@ -1,3 +1,3 @@ - - \ No newline at end of file + + diff --git a/p/themes/icons/category.svg b/p/themes/icons/category.svg index b5470d84a..a419cdbc0 100644 --- a/p/themes/icons/category.svg +++ b/p/themes/icons/category.svg @@ -1,7 +1,3 @@ - - - - - - - \ No newline at end of file + + + diff --git a/p/themes/icons/close.svg b/p/themes/icons/close.svg index 87537c191..ef68f7b34 100644 --- a/p/themes/icons/close.svg +++ b/p/themes/icons/close.svg @@ -1,3 +1,3 @@ - + diff --git a/p/themes/icons/configure.svg b/p/themes/icons/configure.svg index 2957a7abe..041a0da09 100644 --- a/p/themes/icons/configure.svg +++ b/p/themes/icons/configure.svg @@ -1,5 +1,3 @@ - - - - - \ No newline at end of file + + + diff --git a/p/themes/icons/debug.svg b/p/themes/icons/debug.svg index e37b1fcb7..1492d1bfb 100644 --- a/p/themes/icons/debug.svg +++ b/p/themes/icons/debug.svg @@ -1,3 +1,3 @@ - + diff --git a/p/themes/icons/disabled.svg b/p/themes/icons/disabled.svg index cc16ff83d..ef68f7b34 100644 --- a/p/themes/icons/disabled.svg +++ b/p/themes/icons/disabled.svg @@ -1,3 +1,3 @@ - - + + diff --git a/p/themes/icons/down.svg b/p/themes/icons/down.svg index 600ccb961..b72a76195 100644 --- a/p/themes/icons/down.svg +++ b/p/themes/icons/down.svg @@ -1,3 +1,3 @@ - + diff --git a/p/themes/icons/enabled.svg b/p/themes/icons/enabled.svg index dbdcfdbc6..c905778a9 100644 --- a/p/themes/icons/enabled.svg +++ b/p/themes/icons/enabled.svg @@ -1,3 +1,3 @@ - - + + diff --git a/p/themes/icons/error.svg b/p/themes/icons/error.svg index 6b5976090..c31a835b3 100644 --- a/p/themes/icons/error.svg +++ b/p/themes/icons/error.svg @@ -1,4 +1,4 @@ - - - + + + diff --git a/p/themes/icons/favicon.svg b/p/themes/icons/favicon.svg index a252050b9..7cef784ab 100644 --- a/p/themes/icons/favicon.svg +++ b/p/themes/icons/favicon.svg @@ -1,13 +1,12 @@ Logo FreshRSS - - - - - - + + + + + + - - + diff --git a/p/themes/icons/help.svg b/p/themes/icons/help.svg index e5f918f57..99cb15351 100644 --- a/p/themes/icons/help.svg +++ b/p/themes/icons/help.svg @@ -1,7 +1,7 @@ - - - - - + + + + + diff --git a/p/themes/icons/icon.svg b/p/themes/icons/icon.svg index caa987dac..0b36def91 100644 --- a/p/themes/icons/icon.svg +++ b/p/themes/icons/icon.svg @@ -1,12 +1,11 @@ Logo FreshRSS - - - - - + + + + + - - + diff --git a/p/themes/icons/important.svg b/p/themes/icons/important.svg index 6c354bef1..9ab7feec0 100644 --- a/p/themes/icons/important.svg +++ b/p/themes/icons/important.svg @@ -1,16 +1,3 @@ - - + + + diff --git a/p/themes/icons/key.svg b/p/themes/icons/key.svg index e51961e49..1e4f11b0c 100644 --- a/p/themes/icons/key.svg +++ b/p/themes/icons/key.svg @@ -1 +1,7 @@ - \ No newline at end of file + + + + + + + diff --git a/p/themes/icons/label.svg b/p/themes/icons/label.svg index fcb878c5b..f7361deb3 100644 --- a/p/themes/icons/label.svg +++ b/p/themes/icons/label.svg @@ -1,3 +1,3 @@ - + diff --git a/p/themes/icons/link.svg b/p/themes/icons/link.svg index 6419547c0..d8539dd2a 100644 --- a/p/themes/icons/link.svg +++ b/p/themes/icons/link.svg @@ -1,7 +1,7 @@ - - - - - + + + + + diff --git a/p/themes/icons/login.svg b/p/themes/icons/login.svg index a3e3f3377..64abbc0ac 100644 --- a/p/themes/icons/login.svg +++ b/p/themes/icons/login.svg @@ -1,6 +1,6 @@ - - - - + + + + diff --git a/p/themes/icons/logout.svg b/p/themes/icons/logout.svg index e690e1d33..6d3570dcf 100644 --- a/p/themes/icons/logout.svg +++ b/p/themes/icons/logout.svg @@ -1,6 +1,6 @@ - - - - + + + + diff --git a/p/themes/icons/look.svg b/p/themes/icons/look.svg index 79464d3ab..1e27b9097 100644 --- a/p/themes/icons/look.svg +++ b/p/themes/icons/look.svg @@ -1,4 +1,4 @@ - - + + diff --git a/p/themes/icons/next.svg b/p/themes/icons/next.svg index 39ff760b2..5add044fe 100644 --- a/p/themes/icons/next.svg +++ b/p/themes/icons/next.svg @@ -1,3 +1,3 @@ - + diff --git a/p/themes/icons/non-starred.svg b/p/themes/icons/non-starred.svg index 656f17427..396f849e1 100644 --- a/p/themes/icons/non-starred.svg +++ b/p/themes/icons/non-starred.svg @@ -1,3 +1,3 @@ - + diff --git a/p/themes/icons/notice.svg b/p/themes/icons/notice.svg index e21ee13b4..81bc0c376 100644 --- a/p/themes/icons/notice.svg +++ b/p/themes/icons/notice.svg @@ -1,5 +1,5 @@ - - - - + + + + diff --git a/p/themes/icons/opml-dyn.svg b/p/themes/icons/opml-dyn.svg index 4c0711367..e7ef68bc7 100644 --- a/p/themes/icons/opml-dyn.svg +++ b/p/themes/icons/opml-dyn.svg @@ -1,8 +1,8 @@ - + - - - - + + + + diff --git a/p/themes/icons/opml.svg b/p/themes/icons/opml.svg index b3e8a830c..df1dd1488 100644 --- a/p/themes/icons/opml.svg +++ b/p/themes/icons/opml.svg @@ -1,7 +1,7 @@ - + - - - + + + diff --git a/p/themes/icons/prev.svg b/p/themes/icons/prev.svg index 3c2106449..90ee0a250 100644 --- a/p/themes/icons/prev.svg +++ b/p/themes/icons/prev.svg @@ -1,3 +1,3 @@ - + diff --git a/p/themes/icons/read.svg b/p/themes/icons/read.svg index d3bf517c1..7b15df695 100644 --- a/p/themes/icons/read.svg +++ b/p/themes/icons/read.svg @@ -1,3 +1,3 @@ - + diff --git a/p/themes/icons/refresh.svg b/p/themes/icons/refresh.svg index 62fe56c1e..41f1974d0 100644 --- a/p/themes/icons/refresh.svg +++ b/p/themes/icons/refresh.svg @@ -1,5 +1,3 @@ - - - - - \ No newline at end of file + + + diff --git a/p/themes/icons/rss.svg b/p/themes/icons/rss.svg index 2a8713be3..6924b801f 100644 --- a/p/themes/icons/rss.svg +++ b/p/themes/icons/rss.svg @@ -1,6 +1,6 @@ - - - - - - \ No newline at end of file + + + + + + diff --git a/p/themes/icons/search.svg b/p/themes/icons/search.svg index 35a28dfca..6c5e48b64 100644 --- a/p/themes/icons/search.svg +++ b/p/themes/icons/search.svg @@ -1,6 +1,6 @@ - - - - - - \ No newline at end of file + + + + + + diff --git a/p/themes/icons/share.svg b/p/themes/icons/share.svg index a17fceda6..96a9ee5df 100644 --- a/p/themes/icons/share.svg +++ b/p/themes/icons/share.svg @@ -1,6 +1,6 @@ - - - - + + + + diff --git a/p/themes/icons/sort-down.svg b/p/themes/icons/sort-down.svg index 4471ca605..09fe8a282 100644 --- a/p/themes/icons/sort-down.svg +++ b/p/themes/icons/sort-down.svg @@ -1,3 +1,3 @@ - - \ No newline at end of file + + diff --git a/p/themes/icons/sort-up.svg b/p/themes/icons/sort-up.svg index 59ae7d0b4..48a5c618a 100644 --- a/p/themes/icons/sort-up.svg +++ b/p/themes/icons/sort-up.svg @@ -1,3 +1,3 @@ - - \ No newline at end of file + + diff --git a/p/themes/icons/spinner.svg b/p/themes/icons/spinner.svg index 772d0c39f..0c23f7da4 100644 --- a/p/themes/icons/spinner.svg +++ b/p/themes/icons/spinner.svg @@ -1 +1,6 @@ - \ No newline at end of file + + + + diff --git a/p/themes/icons/starred.svg b/p/themes/icons/starred.svg index 63a44908f..de2ed68ac 100644 --- a/p/themes/icons/starred.svg +++ b/p/themes/icons/starred.svg @@ -1,5 +1,3 @@ - - - - - \ No newline at end of file + + + diff --git a/p/themes/icons/stats.svg b/p/themes/icons/stats.svg index abb41d084..5583303c7 100644 --- a/p/themes/icons/stats.svg +++ b/p/themes/icons/stats.svg @@ -1,6 +1,6 @@ - - - - + + + + diff --git a/p/themes/icons/tag.svg b/p/themes/icons/tag.svg index f5afe9de0..3d0871a0f 100644 --- a/p/themes/icons/tag.svg +++ b/p/themes/icons/tag.svg @@ -1,3 +1,3 @@ - + diff --git a/p/themes/icons/unread.svg b/p/themes/icons/unread.svg index dc1cc609c..d975e7bec 100644 --- a/p/themes/icons/unread.svg +++ b/p/themes/icons/unread.svg @@ -1,6 +1,6 @@ - - - - - - \ No newline at end of file + + + + + + diff --git a/p/themes/icons/up.svg b/p/themes/icons/up.svg index dbae173d9..3b929a9dc 100644 --- a/p/themes/icons/up.svg +++ b/p/themes/icons/up.svg @@ -1,3 +1,3 @@ - + diff --git a/p/themes/icons/view-global.svg b/p/themes/icons/view-global.svg index d81e79790..7c5c3fb97 100644 --- a/p/themes/icons/view-global.svg +++ b/p/themes/icons/view-global.svg @@ -1 +1,13 @@ - \ No newline at end of file + + + + + + + + + + + + + diff --git a/p/themes/icons/view-normal.svg b/p/themes/icons/view-normal.svg index c35b101df..a75666a9c 100644 --- a/p/themes/icons/view-normal.svg +++ b/p/themes/icons/view-normal.svg @@ -1 +1,3 @@ - \ No newline at end of file + + + diff --git a/p/themes/icons/view-reader.svg b/p/themes/icons/view-reader.svg index 3243aed6e..ec2dc4e8b 100644 --- a/p/themes/icons/view-reader.svg +++ b/p/themes/icons/view-reader.svg @@ -1 +1,11 @@ - \ No newline at end of file + + + + + + + + + + + diff --git a/p/themes/icons/warning.svg b/p/themes/icons/warning.svg index 4f4ecdc9a..5101b1ce9 100644 --- a/p/themes/icons/warning.svg +++ b/p/themes/icons/warning.svg @@ -1,5 +1,5 @@ - - - - + + + + diff --git a/package-lock.json b/package-lock.json index f5a92065f..7b006e92b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -16,7 +16,8 @@ "rtlcss": "^4.3.0", "stylelint": "^17.15.0", "stylelint-config-recommended": "^18.0.0", - "stylelint-order": "^8.1.1" + "stylelint-order": "^8.1.1", + "svgo": "^4.1.0" }, "engines": { "node": ">=20" @@ -975,6 +976,13 @@ "node": "18 || 20 || >=22" } }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true, + "license": "ISC" + }, "node_modules/brace-expansion": { "version": "5.0.9", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.9.tgz", @@ -1170,6 +1178,23 @@ "node": ">=12" } }, + "node_modules/css-select": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-6.0.0.tgz", + "integrity": "sha512-rZZVSLle8v0+EY8QAkDWrKhpgt6SA5OtHsgBnsj6ZaLb5dmDVOWUDtQitd9ydxxvEjhewNudS6eTVU7uOyzvXw==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^7.0.0", + "domhandler": "^5.0.3", + "domutils": "^3.2.2", + "nth-check": "^2.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, "node_modules/css-tree": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-3.2.1.tgz", @@ -1184,6 +1209,19 @@ "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" } }, + "node_modules/css-what": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-7.0.0.tgz", + "integrity": "sha512-wD5oz5xibMOPHzy13CyGmogB3phdvcDaB5t0W/Nr5Z2O/agcB8YwOz6e2Lsp10pNDzBoDO9nVa3RGs/2BttpHQ==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, "node_modules/cssesc": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", @@ -1197,6 +1235,42 @@ "node": ">=4" } }, + "node_modules/csso": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz", + "integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "css-tree": "~2.2.0" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/csso/node_modules/css-tree": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz", + "integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==", + "dev": true, + "license": "MIT", + "dependencies": { + "mdn-data": "2.0.28", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/csso/node_modules/mdn-data": { + "version": "2.0.28", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz", + "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==", + "dev": true, + "license": "CC0-1.0" + }, "node_modules/debug": { "version": "4.4.3", "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", @@ -1260,6 +1334,65 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "dev": true, + "license": "MIT", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "BSD-2-Clause" + }, + "node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", + "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, "node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", @@ -3144,6 +3277,19 @@ "node": ">=0.10.0" } }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, "node_modules/optionator": { "version": "0.9.4", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", @@ -3539,6 +3685,16 @@ "queue-microtask": "^1.2.2" } }, + "node_modules/sax": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.6.1.tgz", + "integrity": "sha512-42tBVwLWnaQvW5zc4HbZrTuWccECCZfBi92FDuwtqxasH+JbPB3/FOKb1m222K42R4WxuxzzMsTswfzgtSu64Q==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=11.0.0" + } + }, "node_modules/semver": { "version": "7.8.5", "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", @@ -3880,6 +4036,42 @@ "integrity": "sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==", "dev": true }, + "node_modules/svgo": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-4.1.0.tgz", + "integrity": "sha512-bkxnTg1kSU0guhIBmibA6UUhrQmPVA1XsQLN+ylCd+UWzbnLkySOcXpyk1mrl05f+pcaCx2eHb+sp6BgMZWX+Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "commander": "^11.1.0", + "css-select": "^6.0.0", + "css-tree": "^3.0.1", + "css-what": "^7.0.0", + "csso": "^5.0.5", + "picocolors": "^1.1.1", + "sax": "1.6.1" + }, + "bin": { + "svgo": "bin/svgo.js" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/svgo" + } + }, + "node_modules/svgo/node_modules/commander": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz", + "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16" + } + }, "node_modules/table": { "version": "6.9.0", "resolved": "https://registry.npmjs.org/table/-/table-6.9.0.tgz", diff --git a/package.json b/package.json index 6dfb7bb00..31f2af7ae 100644 --- a/package.json +++ b/package.json @@ -28,14 +28,16 @@ "markdownlint": "markdownlint-cli2", "markdownlint_fix": "markdownlint-cli2 --fix", "rtlcss": "rtlcss -d p/themes/ && find p/themes/ -type f -name '*.rtl.rtl.css' -delete", + "svgo": "find p/ docs/ -name '*.svg' -exec svgo {} + | awk '/:$/{name=$0;next} /KiB/ && !/ - 0% /{print name; print}'", "stylelint": "stylelint '**/*.css'", "stylelint_fix": "stylelint --fix '**/*.css'", "test": "npm run eslint && npm run stylelint && npm run markdownlint", - "fix": "npm run eslint_fix && npm run stylelint_fix && npm run rtlcss && npm run markdownlint_fix" + "fix": "npm run eslint_fix && npm run stylelint_fix && npm run rtlcss && npm run markdownlint_fix && npm run svgo" }, "devDependencies": { - "eslint": "^10.10.0", "@eslint/js": "^10.0.1", + "@stylistic/stylelint-plugin": "^5.3.0", + "eslint": "^10.10.0", "globals": "^17.12.0", "markdownlint-cli2": "^0.23.2", "neostandard": "^0.14.0-next.1", @@ -43,7 +45,7 @@ "stylelint": "^17.15.0", "stylelint-config-recommended": "^18.0.0", "stylelint-order": "^8.1.1", - "@stylistic/stylelint-plugin": "^5.3.0" + "svgo": "^4.1.0" }, "rtlcssConfig": { "options": { diff --git a/svgo.config.mjs b/svgo.config.mjs new file mode 100644 index 000000000..c753c83b3 --- /dev/null +++ b/svgo.config.mjs @@ -0,0 +1,23 @@ +export default { + js2svg: { + indent: '\t', + pretty: true, + eol: 'lf', + finalNewline: true, + }, + multipass: true, + plugins: [ // https://svgo.dev/docs/plugins/ + { + name: 'preset-default', // Built-in plugins enabled by default: https://svgo.dev/docs/preset-default/#plugins-list + params: { + overrides: { + // Disable selected plugins from the default preset + removeComments: false, + }, + }, + }, + + // Extra plugins + 'removeScripts', + ], +};