From b4563373b02f111ddf0e8212d1c4bd0b10cb9746 Mon Sep 17 00:00:00 2001 From: Natalie Stroud Date: Sat, 23 Oct 2021 19:05:21 -0400 Subject: [PATCH 0001/2479] Added my information to the CREDITS.md page (#3923) Co-authored-by: Natalie Stroud --- CREDITS.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CREDITS.md b/CREDITS.md index 271f2d1df7f..1970f303e0d 100644 --- a/CREDITS.md +++ b/CREDITS.md @@ -89,6 +89,7 @@ People are sorted by name so please keep this order. * [Mike Vanbuskirk](https://github.com/codevbus): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:codevbus) [Web](http://mikevanbuskirk.io/) * [MSZ](https://github.com/mszkb): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:mszkb) * [Myuki](https://github.com/Myuki): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:Myuki) +* [Natalie Stroud](https://github.com/natastro): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:natastro) * [Nick Cross](https://github.com/rnc): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:rnc) * [Nico B](https://github.com/youknow0): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:youknow0) * [Nicola Spanti](https://github.com/RyDroid): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:RyDroid), [Web](http://www.nicola-spanti.info/) From cc9b2c0a748a7cb8d961505386e5a8e6f2597718 Mon Sep 17 00:00:00 2001 From: maTh Date: Sun, 24 Oct 2021 10:56:27 +0200 Subject: [PATCH 0002/2479] clipboard translated (#3925) --- app/i18n/pt-br/gen.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/i18n/pt-br/gen.php b/app/i18n/pt-br/gen.php index faacd2f404e..c22530a41a3 100644 --- a/app/i18n/pt-br/gen.php +++ b/app/i18n/pt-br/gen.php @@ -185,7 +185,7 @@ 'share' => array( 'Known' => 'Sites no Known', 'blogotext' => 'Blogotext', - 'clipboard' => 'Clipboard', // TODO - Translation + 'clipboard' => 'Área de transferência', 'diaspora' => 'Diaspora*', 'email' => 'E-mail', 'facebook' => 'Facebook', From b39c187a783c4c4bcb04d552a786cd57c69cfb47 Mon Sep 17 00:00:00 2001 From: nanhualyq Date: Sun, 24 Oct 2021 17:17:20 +0800 Subject: [PATCH 0003/2479] Update i18n/zh-cn (#3926) --- app/i18n/zh-cn/sub.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/i18n/zh-cn/sub.php b/app/i18n/zh-cn/sub.php index e8e59bdc5cc..e67daff216f 100644 --- a/app/i18n/zh-cn/sub.php +++ b/app/i18n/zh-cn/sub.php @@ -12,7 +12,7 @@ ), 'category' => array( '_' => '分类', - 'add' => 'Add a category', // TODO - Translation + 'add' => '添加分类', 'archiving' => '归档', 'empty' => '空分类', 'information' => '信息', From f1e4b980fb855cd3d6e8180f846e1ba0e6677e5e Mon Sep 17 00:00:00 2001 From: Frans de Jonge Date: Sun, 24 Oct 2021 11:37:54 +0200 Subject: [PATCH 0004/2479] [i18n] Add Dutch translation for new strings (#3928) References #3898. --- app/i18n/nl/conf.php | 4 ++-- app/i18n/nl/gen.php | 2 +- cli/i18n/ignore/nl.php | 1 + 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/app/i18n/nl/conf.php b/app/i18n/nl/conf.php index 0c658f27330..dbf0282b451 100644 --- a/app/i18n/nl/conf.php +++ b/app/i18n/nl/conf.php @@ -128,11 +128,11 @@ 'read' => array( 'article_open_on_website' => 'als het artikel wordt geopend op de originele website', 'article_viewed' => 'als het artikel wordt bekeken', - 'keep_max_n_unread' => 'Max number of articles to keep unread', // TODO - Translation + 'keep_max_n_unread' => 'Max aantal artikelen ongelezen houden', 'scroll' => 'tijdens het scrollen', 'upon_reception' => 'bij ontvangst van het artikel', 'when' => 'Markeer artikel als gelezen…', - 'when_same_title' => 'if an identical title already exists in the top n newest articles', // TODO - Translation + 'when_same_title' => 'als een zelfde titel al voorkomt in de top n nieuwste artikelen', ), 'show' => array( '_' => 'Artikelen om te tonen', diff --git a/app/i18n/nl/gen.php b/app/i18n/nl/gen.php index 1dc77c9433d..193ff6718dd 100644 --- a/app/i18n/nl/gen.php +++ b/app/i18n/nl/gen.php @@ -146,7 +146,7 @@ ), 'menu' => array( 'about' => 'Over', - 'account' => 'Account', // TODO - Translation + 'account' => 'Account', 'admin' => 'Administratie', 'archiving' => 'Archiveren', 'authentication' => 'Authenticatie', diff --git a/cli/i18n/ignore/nl.php b/cli/i18n/ignore/nl.php index 43b92d5876c..f2ae47c3941 100644 --- a/cli/i18n/ignore/nl.php +++ b/cli/i18n/ignore/nl.php @@ -40,6 +40,7 @@ 'gen.lang.sk', 'gen.lang.tr', 'gen.lang.zh-cn', + 'gen.menu.account', 'gen.share.blogotext', 'gen.share.diaspora', 'gen.share.email', From c5ab4cea4a773b2d61e2413a955785431517c3ce Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Sun, 24 Oct 2021 17:23:04 +0200 Subject: [PATCH 0005/2479] Fix getNonStandardShortcuts (#3924) #fix https://github.com/FreshRSS/FreshRSS/issues/3922 Quick fix. The `getNonStandardShortcuts()` could probably be re-written. --- lib/lib_rss.php | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/lib/lib_rss.php b/lib/lib_rss.php index 60257625620..4b2e2bc3dfe 100644 --- a/lib/lib_rss.php +++ b/lib/lib_rss.php @@ -538,10 +538,8 @@ function getNonStandardShortcuts($shortcuts) { $standard = strtolower(implode(' ', SHORTCUT_KEYS)); $nonStandard = array_filter($shortcuts, function ($shortcut) use ($standard) { - if (false !== strpos($shortcut, ' ')) { - return true; - } - return !preg_match("/${shortcut}/i", $standard); + $shortcut = trim($shortcut); + return $shortcut !== '' & stripos($standard, $shortcut) === false; }); return $nonStandard; From 07e00c7681e5fd9e680cba75125b166b96a96198 Mon Sep 17 00:00:00 2001 From: Chris Francy Date: Sun, 24 Oct 2021 08:25:03 -0700 Subject: [PATCH 0006/2479] Docker: don't add crontab unless needed. (#3927) Adding the crontab as part of the image build makes it more complicated to add custom entries to the crontab. Adjusting the image and entrypoint to make it so that the crontab is only added when CRON_MIN is set simplifies having a custom crontab. --- CHANGELOG.md | 1 + CREDITS.md | 1 + Docker/Dockerfile | 2 +- Docker/Dockerfile-Alpine | 2 +- Docker/Dockerfile-Newest | 2 +- Docker/Dockerfile-Oldest | 2 +- Docker/Dockerfile-QEMU-ARM | 2 +- Docker/README.md | 15 +++++++++++++++ Docker/entrypoint.sh | 3 ++- 9 files changed, 24 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 071cb8b2c13..740b801b1a9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -21,6 +21,7 @@ * Docker: development image `:oldest` is now based on `alpine:3.5` with PHP 7.0.33 and Apache 2.4.35 [#3666](https://github.com/FreshRSS/FreshRSS/pull/3666) * Docker: default image updated to Debian 11 Bullseye with PHP 7.4.21 and Apache 2.4.48 [#3782](https://github.com/FreshRSS/FreshRSS/pull/3782) * Docker: alternative image updated to Alpine 3.14 with PHP 8.0.10 and Apache 2.4.48 [#3715](https://github.com/FreshRSS/FreshRSS/pull/3715) + * Docker: only add the crontab when CRON_MIN is set. * Images on Docker Hub are automatically scanned for software vulnerabilities * UI * New thumbnail and/or summary options for the normal view [#3805](https://github.com/FreshRSS/FreshRSS/pull/3805) diff --git a/CREDITS.md b/CREDITS.md index 1970f303e0d..7ac366b916c 100644 --- a/CREDITS.md +++ b/CREDITS.md @@ -150,3 +150,4 @@ People are sorted by name so please keep this order. * [wtoscer](https://github.com/wtoscer): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:wtoscer) * [Yamakuni](https://github.com/Yamakuni): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:Yamakuni), [Web](https://ofanch.me/) * [yzqzss|一座桥在水上](https://github.com/yzqzss): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:yzqzss), [Web](https://blog.othing.xyz/) +* [Zoredache](https://github.com/zoredache): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:zoredache) diff --git a/Docker/Dockerfile b/Docker/Dockerfile index 3dd81f926c2..c86298b200b 100644 --- a/Docker/Dockerfile +++ b/Docker/Dockerfile @@ -45,7 +45,7 @@ RUN sed -r -i "/^\s*(CustomLog|ErrorLog|Listen) /s/^/#/" /etc/apache2/apache2.co touch /var/www/FreshRSS/Docker/env.txt && \ echo "7,37 * * * * . /var/www/FreshRSS/Docker/env.txt; \ su www-data -s /bin/sh -c 'php /var/www/FreshRSS/app/actualize_script.php' \ - 2>> /proc/1/fd/2 > /tmp/FreshRSS.log" | crontab - + 2>> /proc/1/fd/2 > /tmp/FreshRSS.log" > /var/www/FreshRSS/Docker/crontab.default ENV COPY_LOG_TO_SYSLOG On ENV COPY_SYSLOG_TO_STDERR On diff --git a/Docker/Dockerfile-Alpine b/Docker/Dockerfile-Alpine index 95ab0c540e8..3cbe3edf434 100644 --- a/Docker/Dockerfile-Alpine +++ b/Docker/Dockerfile-Alpine @@ -42,7 +42,7 @@ RUN rm -f /etc/apache2/conf.d/languages.conf /etc/apache2/conf.d/info.conf \ touch /var/www/FreshRSS/Docker/env.txt && \ echo "27,57 * * * * . /var/www/FreshRSS/Docker/env.txt; \ su apache -s /bin/sh -c 'php /var/www/FreshRSS/app/actualize_script.php' \ - 2>> /proc/1/fd/2 > /tmp/FreshRSS.log" | crontab - + 2>> /proc/1/fd/2 > /tmp/FreshRSS.log" > /var/www/FreshRSS/Docker/crontab.default ENV COPY_LOG_TO_SYSLOG On ENV COPY_SYSLOG_TO_STDERR On diff --git a/Docker/Dockerfile-Newest b/Docker/Dockerfile-Newest index 55fa0db78ed..892c69a6f1b 100644 --- a/Docker/Dockerfile-Newest +++ b/Docker/Dockerfile-Newest @@ -42,7 +42,7 @@ RUN rm -f /etc/apache2/conf.d/languages.conf /etc/apache2/conf.d/info.conf \ touch /var/www/FreshRSS/Docker/env.txt && \ echo "27,57 * * * * . /var/www/FreshRSS/Docker/env.txt; \ su apache -s /bin/sh -c 'php /var/www/FreshRSS/app/actualize_script.php' \ - 2>> /proc/1/fd/2 > /tmp/FreshRSS.log" | crontab - + 2>> /proc/1/fd/2 > /tmp/FreshRSS.log" > /var/www/FreshRSS/Docker/crontab.default ENV COPY_LOG_TO_SYSLOG On ENV COPY_SYSLOG_TO_STDERR On diff --git a/Docker/Dockerfile-Oldest b/Docker/Dockerfile-Oldest index b54d8bbe7d5..9762653bea7 100644 --- a/Docker/Dockerfile-Oldest +++ b/Docker/Dockerfile-Oldest @@ -42,7 +42,7 @@ RUN rm -f /etc/apache2/conf.d/languages.conf /etc/apache2/conf.d/info.conf \ touch /var/www/FreshRSS/Docker/env.txt && \ echo "27,57 * * * * . /var/www/FreshRSS/Docker/env.txt; \ su apache -s /bin/sh -c 'php /var/www/FreshRSS/app/actualize_script.php' \ - 2>> /proc/1/fd/2 > /tmp/FreshRSS.log" | crontab - + 2>> /proc/1/fd/2 > /tmp/FreshRSS.log" > /var/www/FreshRSS/Docker/crontab.default ENV COPY_LOG_TO_SYSLOG On ENV COPY_SYSLOG_TO_STDERR On diff --git a/Docker/Dockerfile-QEMU-ARM b/Docker/Dockerfile-QEMU-ARM index 68595f66c89..53cc73723e7 100644 --- a/Docker/Dockerfile-QEMU-ARM +++ b/Docker/Dockerfile-QEMU-ARM @@ -51,7 +51,7 @@ RUN sed -r -i "/^\s*(CustomLog|ErrorLog|Listen) /s/^/#/" /etc/apache2/apache2.co touch /var/www/FreshRSS/Docker/env.txt && \ echo "17,47 * * * * . /var/www/FreshRSS/Docker/env.txt; \ su www-data -s /bin/sh -c 'php /var/www/FreshRSS/app/actualize_script.php' \ - 2>> /proc/1/fd/2 > /tmp/FreshRSS.log" | crontab - + 2>> /proc/1/fd/2 > /tmp/FreshRSS.log" > /var/www/FreshRSS/Docker/crontab.default # Seems needed for arm32v7/ubuntu on Docker Hub RUN update-ca-certificates -f diff --git a/Docker/README.md b/Docker/README.md index 0f3591ba89f..c5a6792e356 100644 --- a/Docker/README.md +++ b/Docker/README.md @@ -248,6 +248,21 @@ docker run -d --restart unless-stopped --log-opt max-size=10m \ cron -f ``` +#### For the Debian image (default) using a custom cron.d fragment + +This method gives you the most flexibility most flexiblity to +execute various freshrss cli commands. + +```sh +docker run -d --restart unless-stopped --log-opt max-size=10m \ + -v freshrss-data:/var/www/FreshRSS/data \ + -v freshrss-extensions:/var/www/FreshRSS/extensions \ + -v ./freshrss_crontab:/etc/cron.d/freshrss \ + --net freshrss-network \ + --name freshrss_cron freshrss/freshrss \ + cron -f +``` + #### For the Alpine image ```sh diff --git a/Docker/entrypoint.sh b/Docker/entrypoint.sh index 7043cf1537f..d6cc345061d 100755 --- a/Docker/entrypoint.sh +++ b/Docker/entrypoint.sh @@ -20,7 +20,8 @@ if [ -n "$CRON_MIN" ]; then echo "export COPY_SYSLOG_TO_STDERR=$COPY_SYSLOG_TO_STDERR" echo "export FRESHRSS_ENV=$FRESHRSS_ENV" ) >/var/www/FreshRSS/Docker/env.txt - crontab -l | sed -r "\\#FreshRSS#s#^[^ ]+ #$CRON_MIN #" | crontab - + sed Date: Sun, 24 Oct 2021 17:25:41 +0200 Subject: [PATCH 0007/2479] GitHub Actions CI optimisation (#3929) Efforts to reduce the resources used by CI: * Only one git checkout * Exclusion of irrelevant directories for several commands * Fix some rtlcss warnings * Move some commands from tests.yml to composer.json to make them reusasble * Initial efforts to take avantage of all that from `make` (help welcome) --- .eslintignore | 1 + .github/workflows/tests.yml | 34 +++++++++++++++++----------------- .jshintignore | 3 ++- .markdownlintignore | 2 ++ .stylelintignore | 3 +++ Makefile | 33 ++++++++++++++++++++++++++++++++- composer.json | 8 +++++++- package.json | 5 +++-- 8 files changed, 67 insertions(+), 22 deletions(-) diff --git a/.eslintignore b/.eslintignore index 4af5f2ccfce..a3264ebd0e5 100644 --- a/.eslintignore +++ b/.eslintignore @@ -1,3 +1,4 @@ *.min.js node_modules/ p/scripts/vendor/ +vendor/ diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index daa91465d74..25295ebd143 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -8,21 +8,24 @@ on: jobs: - composer: + tests: # https://github.com/actions/virtual-environments runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - name: Git checkout source code + uses: actions/checkout@v2 + + # Composer tests - name: Check PHP syntax - run: find . -name '*.php' -print0 | xargs -0 -n1 -P4 php -l 1>/dev/null + run: composer run-script php-lint - name: Check PHTML syntax - run: find . -name '*.phtml' -print0 | xargs -0 -n1 -P4 php -l 1>/dev/null + run: composer run-script phtml-lint - name: Check translations syntax - run: cli/manipulate.translation.php -a format && git diff --exit-code + run: composer run-script translations && git diff --exit-code - name: Use Composer cache id: composer-cache @@ -33,17 +36,17 @@ jobs: restore-keys: | ${{ runner.os }}-php- - - run: composer install --prefer-dist --no-progress + - name: Run Composer install + run: composer install --prefer-dist --no-progress if: steps.composer-cache.outputs.cache-hit != 'true' - - name: Run PHP tests - run: composer run-script test + - name: Run PHP unit tests + run: composer run-script phpunit + - name: PHP_CodeSniffer + run: composer run-script phpcs - npm: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2 + # NPM tests - name: Uses Node.js uses: actions/setup-node@v2 @@ -66,11 +69,7 @@ jobs: - name: Check CSS syntax run: npm run stylelint - - shell: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2 + # Shell tests - name: Use shell cache id: shell-cache @@ -83,6 +82,7 @@ jobs: run: mkdir -p bin/ && echo "${PWD}/bin" >> $GITHUB_PATH - name: Setup Go + if: steps.shell-cache.outputs.cache-hit != 'true' # Multiple Go versions are pre-installed but the default 1.15 is too old # https://github.com/actions/setup-go uses: actions/setup-go@v2 diff --git a/.jshintignore b/.jshintignore index b8a497857c2..21b0fd2eb77 100644 --- a/.jshintignore +++ b/.jshintignore @@ -1,3 +1,4 @@ -node_modules +node_modules/ p/scripts/bcrypt.min.js p/scripts/vendor/ +vendor/ diff --git a/.markdownlintignore b/.markdownlintignore index c2658d7d1b3..771399b607f 100644 --- a/.markdownlintignore +++ b/.markdownlintignore @@ -1 +1,3 @@ node_modules/ +p/scripts/vendor/ +vendor/ diff --git a/.stylelintignore b/.stylelintignore index 402ba0702a9..56613503b2a 100644 --- a/.stylelintignore +++ b/.stylelintignore @@ -1,3 +1,6 @@ +node_modules/ +p/scripts/vendor/ +vendor/ # ignore SASS-generated CSS p/themes/Ansum/*.css p/themes/Mapco/*.css diff --git a/Makefile b/Makefile index 72352ff429a..adf30cad158 100644 --- a/Makefile +++ b/Makefile @@ -159,7 +159,7 @@ endif ########### .PHONY: rtl rtl: ## Generate RTL CSS files - rtlcss -d p/themes && find . -type f -name '*.rtl.rtl.css' -delete + rtlcss -d p/themes/ && find p/themes/ -type f -name '*.rtl.rtl.css' -delete .PHONY: pot pot: ## Generate POT templates for docs @@ -169,6 +169,37 @@ pot: ## Generate POT templates for docs refresh: ## Refresh feeds by fetching new messages @$(PHP) ./app/actualize_script.php +############################### +## New commands aligned on CI # +## Work in progress # +############################### + +# TODO: Add composer install +.PHONY: composer-test +composer-test: + composer run-script test + +.PHONY: composer-fix +composer-fix: + composer run-script fix + +# TODO: Add npm install +.PHONY: npm-test +npm-test: + npm test + +.PHONY: npm-fix +npm-fix: + npm run fix + +# TODO: Add shellcheck, shfmt, hadolint +.PHONY: test-all +test-all: composer-test npm-test + +.PHONY: fix-all +fix-all: composer-fix npm-fix + + ########## ## HELP ## ########## diff --git a/composer.json b/composer.json index c39915caf3e..5590b24cfa9 100644 --- a/composer.json +++ b/composer.json @@ -24,14 +24,20 @@ "squizlabs/php_codesniffer": "^3.6" }, "scripts": { - "phpcs": "phpcs . -p -s", + "php-lint": "find . -type d -name 'vendor' -prune -o -name '*.php' -print0 | xargs -0 -n1 -P4 php -l 1>/dev/null", + "phtml-lint": "find . -type d -name 'vendor' -prune -o -name '*.phtml' -print0 | xargs -0 -n1 -P4 php -l 1>/dev/null", + "phpcs": "phpcs . -s", "phpcbf": "phpcbf . -p -s", "phpunit": "phpunit --bootstrap ./tests/bootstrap.php --verbose ./tests", + "translations": "cli/manipulate.translation.php -a format", "test": [ + "@php-lint", + "@phtml-lint", "@phpunit", "@phpcs" ], "fix": [ + "@translations", "@phpcbf" ] } diff --git a/package.json b/package.json index 8a25eb27832..35884d90010 100644 --- a/package.json +++ b/package.json @@ -23,7 +23,7 @@ "eslint_fix": "eslint --fix --ext .js .", "markdownlint": "markdownlint '**/*.md'", "markdownlint_fix": "markdownlint --fix '**/*.md'", - "rtlcss": "rtlcss -d p/themes && find . -type f -name '*.rtl.rtl.css' -delete", + "rtlcss": "rtlcss -d p/themes/ && find p/themes/ -type f -name '*.rtl.rtl.css' -delete", "stylelint": "stylelint '**/*.css' && stylelint --syntax scss '**/*.scss'", "stylelint_fix": "stylelint --fix '**/*.css' && stylelint --fix --syntax scss '**/*.scss'", "test": "npm run eslint && npm run stylelint && npm run markdownlint", @@ -41,5 +41,6 @@ "stylelint-config-recommended-scss": "^4.3.0", "stylelint-order": "^4.1.0", "stylelint-scss": "^3.21.0" - } + }, + "rtlcssConfig": {} } From d3be01a1da42ff7e4f8178e0e07746c3c795c5d9 Mon Sep 17 00:00:00 2001 From: proletarius101 <54175165+proletarius101@users.noreply.github.com> Date: Sun, 24 Oct 2021 23:28:40 +0800 Subject: [PATCH 0008/2479] Add pwa (#3890) * Don't use Chrome or indeed Firefox on Android Would close #1963. But I will not finish this PR because the idea that every single website on the internet should have to do this is absolutely ridiculous. * add pwa manifest Add a pwa manifest as defined in https://developer.mozilla.org/en-US/docs/Web/Progressive_web_apps/Installable_PWAs - creates shortcuts without the browser frame - has a splash screen - has an independent view stack than the browser one * update manifest as per pwabuilder.com * add 32x32 and 48x48 icon config * enhance manifest spec compliance * change as per suggestions * Update app/layout/layout.phtml Co-authored-by: Alexandre Alapetite * fix mobile icon padding * remove screen auto rotation * change theme color to white * Move meta (Should not be in the referrer condition) * JSON HTTP cache Co-authored-by: Frans de Jonge Co-authored-by: Alexandre Alapetite --- app/layout/layout.phtml | 2 ++ p/themes/.htaccess | 1 + p/themes/icons/favicon-512-padding.png | Bin 0 -> 24036 bytes p/themes/icons/favicon-96-padding.png | Bin 0 -> 3295 bytes p/themes/manifest.json | 31 +++++++++++++++++++++++++ 5 files changed, 34 insertions(+) create mode 100644 p/themes/icons/favicon-512-padding.png create mode 100644 p/themes/icons/favicon-96-padding.png create mode 100644 p/themes/manifest.json diff --git a/app/layout/layout.phtml b/app/layout/layout.phtml index 791bfb149b8..c5c1d22fff8 100644 --- a/app/layout/layout.phtml +++ b/app/layout/layout.phtml @@ -13,6 +13,7 @@ if (_t('gen.dir') === 'rtl') { renderHelper('javascript_vars'); ?> + @@ -20,6 +21,7 @@ if (_t('gen.dir') === 'rtl') { + allow_referrer) { ?> diff --git a/p/themes/.htaccess b/p/themes/.htaccess index bde718537b8..706a7b88e8b 100644 --- a/p/themes/.htaccess +++ b/p/themes/.htaccess @@ -8,6 +8,7 @@ ExpiresActive on ExpiresByType application/font-woff "access plus 1 month" + ExpiresByType application/json "access plus 1 month" ExpiresByType image/gif "access plus 1 month" ExpiresByType image/png "access plus 1 month" ExpiresByType image/svg+xml "access plus 1 month" diff --git a/p/themes/icons/favicon-512-padding.png b/p/themes/icons/favicon-512-padding.png new file mode 100644 index 0000000000000000000000000000000000000000..6ea5950440f641d1a1bef963f7e6d8c42d5a4cb3 GIT binary patch literal 24036 zcmeFZWm8f} z|5tck{HmyefjM*b>D|41_3G7pRa240#vsQ4fk4>ua?&3`AVlCtM9>RV;MlWxUET-!U2tV3H(!Ma0dW!Ef zMUoKz@PUm6c*Qnf4Y{t1di?=U0ueprO2&81f^T8f@6Kcb9rG3a!tKiKXj+=vX>(;e z?@nf#b>PJD_>+oHc4~Kbw?uV32>rib$dTe$DB`(~W8;bc{S`zCf(SthLY9O4`$Ck1 zAksoqtW)Iw^AdOkG5_CB|M$25v&(|2FN{8dUVq7mhnK)aW+~y}38G2s}5Jk0uqafabPXLRaid`lzjGenX3G>~ zK#Lk-dGY$1E{7>70WTNy5}l_*3h@)3%_(r($Nn49nfhzr=L1nJ!cSj7{FCFy-@HdT zN4oO9lJR@FHqc?|0-0o)NgQEaRO9bUHN+UI0GmU8-h&YxovLS5SWokBX$0rIG1s5Y zG6Qag>ccH;}h_cAqadonVt&HXBV-tfl66Bb$aC5 zy%(_E|Bx3g~aRfX{le%Jjy!`_T@e2Rp+aabW4UZL7#C1)xb&<;p z^>1k}gKqDb(UF5eDB@g?qsCzp>oAdkv_}V%Rowg$nN`FW1E+G?E)D36mK%9w0_(%# z^xLrVHFPx)Y^CRTtr~e7WMU~rTAI=N>NTxgUll8;_~J)I5TEKucX%?%mIHCKge%X3 z0-_VGI6{{MzAobIm zYvYS;&A(n7Y8s7hI%4|_gNUYsx7@PDn@^Y+E|(~UDqrYG2wq?S=E(IHTz@(~ChPjq z&#_0?*}H5lAOk^MuTKCxG~#xYwQFF4wY&F=1r9#JnF!#VYpwkARNtK2!pU2*zKXpF zzkhwri_%5$bx0s+#CmTde=pkA468aGV)E}XXX_B4DZQ&z?u^fskR<+qTNaSY#9m^g zp<#Q$OK5h+go`v{2OZ!&LMf=NQsESF0gF|iPtbWIxcpQR@Th;*FW}M{swrILDZh@Jfh{RqRFOgN!oYL{)=)z zILNew%7iM4-@v?RPNcOURTrTnhZYm+py=pq3;M_3OZ}UMMQ^Cd#5*jJfe)u!7N>j7 zK#SmaGvjHds?3Cn8cf{A^ijLmFB{Qx`~B9I+1W;6zVqCUWjt0W8@(w7aLtmij9*qy zz`MIfPnTw~#SOr7*d z(cLXB5rG^NkjK+9Lk-phNu09Mwu}qQzakS6*q-eED5-l zDW35h+kCz3bLSmB{s~p`_MldV4={I=e3D1A%DT8w3io;AEthZ3kuw>(8p_Aw@x*fJ zz2S9-lxVHLsH}`ZHo%*u72~0-uhiy%zXE*subGCq~c#eZg@DVe; zJ}v@;(iKsC&Y*=X=!ce>^z?Apv|JT=et!KCDk8E=6MWuR!G-5FjU|k!Zkb|gX1*S7-byC&Q-rH3% z{L6mJ{kM>cL=XrAgoEUOjKk+)Zl@*G;*0ic0qj#(^y`C&fS};;?*O(5rvDfH{ng zg@t9dlz?+=$-FjKll%l*o-rp3^t45+)!2Lm-`#s1E())!$DcT{|2-_iKCiaW&rQq3 z|A=HwylJhYEK}RJIWb{AuNsgKI!ofiK8`x38A${OP^1JWZJL{8?blgMsmenp_8vaT zTIfJ&pX(|RM!a}GU3X~P3(thzH>`eIyL>>Z>o3^IzE$eYD7JiPFFVeW0oF#o@z8#N zbX~i>7TXad(dl*l?I}sVgH{CL?%2p4iW_-1H?Zr2NRZ~( zIQoNWHrauEg1;sr07QQ*)*Slak1DAcqslou*U-$XSwE&hv-QnLLt#(1P~SoOS8Bj+ zAnrKUXPunT^rk;m{KOm#6k`gg-#T!wM^nd=o9U8u%KrL0I$re5enAI#v;U4tK-TAj z!=9EW2b+`AY3mR)cBbBbGk2BOGS*D4K5Iy;8}DD4t#=d8dV2?C5sv+tu(Wq1cy?ZS zpUIPbj`(9_layWh z`{&pWpDS4_bwz8MQ@?wzXV{dw2^#hN4Kbn1NN6ElaBrg=WC+5Kn)izKhY3SW6;0G} z-Egni8`jCV6-=d^z=m>+&Vch5$xz!H%N#MEZX5sGfSrzG3ZcSmkPc{u`^FM81E*f% z^zNagm$qMTmvc--+EM>YP74XF%oIu;7 zi17Zyrwab5;~bH{y|8(mgo2spO zZU(^c-%PKa3MZiUt{;2u3%~6!m`h5$OCWx&vN=aur42tgikzyjKEda(3Y7->ju92*ImP~M+>DvRT+Ym2P1N_=Ta-M5ve2C zn$nY#yN=Smn$`eaDT~gTC{xzEjl?u7#?Mf!W86f&9Kx2zn>? zyM$;pzc0#yqnNDB?i}2NKlRHT1Lu@!@tSbW{Z6UpamC410XuO_0b~Csv%q)#&dnw$ z#%psd)<}V8SFb2-f8F+vzzsA*Ou*iy(11Ri*k~Yu3^v_8v+Lok_&1F$1`aa?3T%@` z?i~c$W!XSBv|?6Z7l2W_cVt~Z-_ES! zJnp2exApwQcL!M8-0z^56-oH8rA2-J^B?VhWjg%V(^+7D63qltkd0*_0N1hUfqb~+ zcmCT^sHaGw=zZEF;ikW{(W~DsER!cd*)YlHeC!8hT?>B>e1s2m${$+Y1x`b~UWvTL zAsccTl#7&=QJ{R61w9{>i-j8PwZ>QuR@x1mDp8+UO;HSRjwku_qzGfoIim+ zOur^ep0iQ=z#I2M&(RjKC|05ScNQjvn&}CMvv2ED&VkcMMu=IaU;D+iVcf zeVb7yKD= zxWxwJL5HYC?e?TF8~_lnjZ@|XDO&GrOmVxazZD$QPLVXT^1r}sJTOXyBnX z?>)9tT5?Pj>xJ{`H#Ulu=!qvw+*6;;T%HE-_OaRHW3WbfO-fjcA_TF^DEse>XKn{@ zel6hdGjTAY)(sTp^K)BZo4oziP*3XNaKX|!Cs6NX_EsK5Ibr=#9V0o}dNYr#+55K5 zpKvm3st7H+s{gukDJZ)`g7vuLA#3YARIy+G6Kjln3b5!_;fkLXHTk%#x9^2+yOcRy z`<%v8-xFEPzr7oIx*rbX(B$=$s?(5FC?fG|y$ zC0e9YoThj)wsxzk8a=Rip_C7e8j>r|L&tGmDq3cDwuKw|oJB0E7H8pY~L z{Jbr#Q=f^T=R8M#T*U`(7;A@SMW}WbzHh;~bg%-O9&>R z$MU<`pcIYAcjrq)d>ig`16Dx6**Tt*9%GkGw1tF;ng1Z64!har>vYcr@*n>CP(2iPw0zR8~?tq%W+Wg%qK_u>mujd<;&+N4d8J zU*kkH{i&LwxxINw8t39ln5z56(Ij*%d{O!RiB^Wi(Mcia7|)^%`5q3ib6))9Mk5V} zILDQ5AChE0$qX)B@>N`2;hH%qGu{04%rh~&zAuLp{96Kie1v%(#gZM zL|~SNMM?|<@(Q(3;42K)%+NH}C3FgXJ|}r}s95+M3Wf#AH*K^f%7qiAjs-~^JZ|2UkK4ztY%*faTqG`m~V=b2d;g?AjHiV>MWq2c@ znD=hAJY)MfNps*sm8zEMD*vVSZgi+s+9x7VvH%-_o5|wRrbP;OJ&*zWf2o)Br_L?T zLj5-zS@oqeGNg}pQq6`Ih)=K5TAkdD^4p~D(0eI#QE9ZAdFX&h767GwPjM6Ea{ z*s{V&Y%0h|c5LOACL_Z_^MX_$tG&2kI&we45htA%9kjuy4i#-HczJ6iFr*xJJUt91fEj);n(?Ic@mQIZ6T)8vBA(zY5Y9S1rDxiublix^E4Ufn)g4uQkF4d{)r zM`$r2ulo72P0U7Kp-#Ca#n00OTbTvy^5``iUNYTDh8JKuO$^9fYHBS*b#W2l-b&pnx`2azLe3Ux zN0$LY(Vb<%jT$KWTjnPy)z72fMLoL=_X*!RtW^f3!*4I6wZdeyE+?YY-&eI1m#|IR>7e>ncR8~=OF)pWudqoU3`O9Kl z5!Yx-hgdM?$*MjjPNv#fLQOL3yB;tE{fU zJF0Wa1EJhk%ATaltqAaiMgF!LYEc(}I23+pUZ8FmEL#4D(0J8xkCHTg17~jwcP2q1 zA)G88Di}$B;qy7CSsl-VOTZ`tKn{M}KvWg6|M)Yab%KWvWclRz&f9jv^Ml53VYmsZ ztn#(+38x8ID$Rc3}9 zP0S^|zO^1Hbv|+Ol(wqgEFRcl_%xfc`%27cO~Rzl=*r_7I3-%#EwW zAzd5IyAQV6#kYj%7%E|HZkc6vDY{ZfJ+rN4b#`7@-#vKclu8?Ti7mF=Pp+;&m+3!4 zsUgTpiJSsK940HvDn7H{O#=43{m&C?^bH>-O`u(z*=18xHznllH_HUeVB#bcvYl^S zF+V^r2*1h4@p#<`yzN0lMT>dMD#jiXN_e%6y=FB1)nWFezxr$uZ^3a$0f3hZ!nMYC zi9;)6Q}dJImO|-go7q--R-qx8$z2K(>^aRgSf@S{$m}a7XS4P3bz((C_}^4l-eK;k zjKAxnU&Lnw+=WXb?J70XvC5X0NkLcAu)Ge+8D7}N;b$lG>LFi(g+Te-BPqaDSn}NW zHJdg-l`M=imIDEDjkZWBHq(f*H@uUw%1h$aZr-*hr5ZB7bh@-%zL@%vBQ-e~yyhCl zvim2N>z@yy4}TjdP4}(7fe0L$G-*bw1RJJYvA zBy5=X(Z>Tjdw$u}{v!q7-P47XhRgNlYrZn9vdaH}TiDWSb@uh)tE@e`w!{3j#UG&R z(R`o^lhh~{K!aOsk|L~oe71pl;7Hup3|_P=-Jp=Y+H=;*D^i6`){4yk3GJ*Z>mkfI z%KDBt{d)1kQs<9b`1KG5!2Zrv9R9A{6A@eZ(pg!8{opf;tHPnsebYLjxq@}%l>h{5 z6qlBc+r;Oe(mqy%@wg#Gb~9f%=i7opU5N;@JJY+aA)hU1(~XqSqLwZ z-a2TO7Vpa0gY|Awjy^Y}WNN0tlGMo0Lf))Bc@@$j^J*`GL+hC7LV(oQjT|Rs3WlXD zov&Zmng`N9yFOvH`8jsHz4;TbK?tnY!d*_L6(BZbbTiUlhBFXyi--hp1jTJ1CY^i@ zxR{Dneq>ni{lY-@7NTO-8<#B*ZNgF2zldb@p&|O)-0|Db-kTbAYVjLJrkSPvj+s8U z`jocs%?)+{{#V%7?L)yntPS-ady^}>Sn%0z)jC?`(tSvOld61mE;3!)51KWy`aGXW zPh@>C68rL?Y5M$eB1LN}Xh$plgu`GY?`xX(VKTQcb~wAio5p94xVMAunP0hzE=d5h zmj%Pj2^qU97rWzhRP!#sdNg(&-!tmm4r6MlCGQ3JBl8{e6~V~EN1^rJ8;3n2_ ztI3cqINE$q&XGYe!Py<4<4gMbHUZnC=@>1ehe!3m?Lgi|*XzN*f~EVr=O3o;8lab_ zgGRDKv@URE=B>-5w<|rt;0DxtmLY}Sf;^(F;G0ygqTe+VlDJ@?6!tb#l;V%0xE@8C zQvzBEM1EG&Xf*R-Yi-WGbvG(=@fPUc?1R{L0WO(qj_>75wJ9P)~Y}DqB+NaY{Idq>(A*sI9OTR245UL+c+=!Hyig(L*W_0rN%e@UFkENR@ z%N+2>PZ)`JBPs`~GvjnwO(#x%XMY6UUaw=%ZCn;vY^6>3dQq>R%Hpmog8Ar_&gNDH zs2e{IXYyy7z~DgecIS(qwkZx8tb9NAly*Ym^|~8&kcV7uI{gWvl9s>0J6cZp>|Fl^L0kvWK8F zM0ge}aOb@rM#hMfA-*JyV4C{Cu=_NkX!?#u?*o9t*<(J-AS8APPJ?`G_-|P`V3X>bA%R_452MgPJRzt zP67B2SRJpN?~a8ZpMayO+y4%iZ)@Y)Bm0*}i_Gamj_We4Xmar+7oiFt_)z=zax-;3 z%J+4?KExM|MTKabC)|AJQOkkx26${Y_^Ez-5?+-$WsLY_(KMG+B*&PUvUaikfaAU^D1RHR@gO$}CMM?%%^T4PXXV5L& zo%Oj%0WJ?q!p}5G4$?A7KSEyy0C}-UO`<*0@#A6|^RUGzmTD%o3>^{Zlla9UzD6>9 zFIM@MzIrU^p2J?yLZ+aHFyMFxL9VJ_M{TKjx7z_Wi^09Qm9vjj^?K*YUXQr)X$*4I9v z6K?<-Fc;5}UTdTTZr#9RtNI{RM~}TFEcdCky#=Y&c689yyDjHpN^<-&m;{cW3Z5gE zD@UImuHTFO{iLI;?f6#*;4(Sw#__wBK*KAP>PP_TwDIw_8hr#_@`Hcx(8SO_x+NA7 z=sfpC8jbDG`STp~s$Bf){MbmL?z2$ANuDAmE-5eel*V0MV0faOlsqn~^fdKG^RuYM zr~`;Dkcg5Fu)%rXeQ?EpYybzEflT>Xhi1RE2fhYi_4NsE4wShMl#g<@bA>2t!5SvE#=Z$`@efwCe9rj}DH9GAA z>ikm-kO@zfztluf;pdV9>vV1ap4*t=>FwK9_@fIMvzfOEQXoMa_lC|$+e%uu35KbtA&>mw42|k^pVIy^+rKNq#v>wF_wU>(;dT@Ka_# zcj|;wi<}TqU`BOi!I$HfXjV!8))|Y?2f5Ol#tvUx{gr9EGj3<4T}D+q*f={X0=>xj zp2(!E`+R$NnDhA+xLyBR?VYo32`h5t{hjus%4PA!me8hF#QK4WacBj36|&$G$V3bi zg=`ts*^)M{ng9cW|HbWyhcFq=L|SC}F=4R>%x)Cm?I_EQ`h$;UD1L3b7oLYs7Ed_O z*3F={G86N`#Kd}Z4Acy%du$LG?onO4ddPxxPlwkFKBMWV{AL>GoV1ntLs1O+BaEmN z@dWL==tQPnFjy){yRjSdBR=_)iZdOrLC^#Tninu9FLJ5<;Hb#6GF(+H+c^9s&?t89 z%)o}G3IZMuL+FHXeLcQW`@PDxZ_VQx(5SN%%J{S7B$IvfRzRLV|Gn}L9ld%7RW@d>;7Hs_D9Ze%ABQzkXY(~GRlEgZ|%?I3T}z-eY2D^6xLUn za5uTZtL7m-uIwI{S(vm3KedPn8xTan=eqt+Mq64Q3D-CPO(4F7HyOaR8npvnxSh*_ zSPb?t=zUG)=H-_Uq~ESxZkyMh4O-#J0@{*0{=dI}FK##uyt<+iiYJSVlh8M#bp1$} z>HVVi!@C+Fi}tG`gkUP1%%_s`ni6$hLqf;e8r#ziwED@&j~<)MD= z94(p$aTe()R$$Ba+rXX6kWz7-N?A*qq7XW56UGA3U$8jhAXBV5lyUf~OMWHyj;de#g-P?zB*HZqwvc zG9_Aj@eiB+c`ryVbf0N5B^Y(M17G}WT)u24vz|l7@R|9NcI3z0^Eaequ%QPL*vKGi zfX^rCR2y*?z_y~Rjk$kPtXVoPCZ3vl;z1JN7DvI#RFhnL-G4i@T|CicP_)N3|7Ogr{jT2%i!(6;0{^>W9<+Qfh`awiLOIg=mhja*(jah z#o&dB&ZC4U*ySO)7KdA*v0i0zkDaSy*G=u&X}$Mnr>GmppX0b^PxPn39`@!_?m^KCl(H3GoM&ozh^+1hbq{U zcRXh^ZkEn6_M_Tc6bRza9N=Zo zCZIE3yFurm-=5#ga6f{YBDvd!-Jx(*76l2PA1&Kr6-H0qp0eiNTtuQg)=Gj3wS>eC zxs|p_DtWR?BSNdjVN0A8qz*j#tMEzg@bjC-kyz}*iUQ?kj+^eGWjGKDR={>v|U^l#Z~kW7Tl!yWsxo0W~~_9JOaK(T8b9h zCOwJ!N=fhynU5EhINf8wmMJ%J+!bi5!hq)L_q4M)o_g;I)duD=a8o3MsO(YP1oi3L z=gtv;bTmX2H1xQ@G*)pvdgJo;ZIg`^j+wdHx3p?AuR1~p73(yu^w=rNR?(*siOyU2 zm8D(EWB6sGJ^JIu;=x}kyl)1iInUFl8!g3Ga8`xs>hsvU;l=n63%wlON*=BSx5n}Q zk2%Y))pwawfcS7G+jpKlz=_GoNMD!k)zG4^{UOaiqt_PUvhE3&Ch9mEFi@K-)!}bm zsUkc|aw7w`ehTxLL-APqP8y4LDlmdRU0ynRH%wkG_7mFH^Iztn=QKFK)IYz}7z3nb zp{icR#-O0&Y1H@i+_?NS^6!6uQGr+URWwjUB$b_#7A|!p^#rD@Hp&}_(=z_S_5`*u+BxFrs1A<9*JI9xWco(fmkL}c?eKj56o?c)3oHg{e{ z7*tjqAmtHt9fj|IpIXh>8B&YYu_2+59ai=YwI8Hw2Oz}KuRt@37TpdFMej^tSusIr zkKut~(#UczbTbgqV(zanH0_i~*;u_;9W}hvPH$P`HivVZJhtYRBMwtV7^#jNbNKSS z?xqHTwnB9DQpDO+7D&$3X<(pq0iN>E8|OGh@k1q9jv+V;`@_xSM5}c>H04Qk2Xg@j z2HmqVaARE05?lNNP#v>^zgob)l}YXD9}?_Z7jnFfKg@obWkK^gf*KI~t@9tG0*dNW zXRNa1=O78;j)ja6b|!8)71OfEUWOkrJCXV0uMYwlPO1(*-~@Br-3zW!!!T1iDX|O# zmnc~s(H>!);Xq6C${77|OtxsVv@Y^@AH}&_QYVbSlX{Z0tL!dZF#$jKY8qc?a0fs# zhN!+Rhwf{jmpM7n2l+E6@Da{fD%tC&i-@Qgm)De~`Wwz}Kijs#GXlJ3oeKQ7BiGl& z-ntc3`Q2n&oPBcu84aZr=V7RW?SVhkX)u@nhB+(C7}K9E;t%}Uox40G|Z z%6U#9gaeePL>jJrC9K52iVV!XJ`O$|IKhQZhv`+G|7BTbTGLzz<381`r~oIbUkE|9 zNYCU92Cy7bfqM+t^UsG3%LM3vI7R4G^_(pAu1YF=p>Pu}b~M+P%geHMr(; z!X+pJYG_*fKR7i-=3+n(H}h?_}Q{{%#(x!E<-l0Y{$d#w<9Rc#1QvV)XHjw3;8p_~u!B9gB+ zUgLao8MfI8p6vhfUn=pWryz89=cm(jT~_fu?Rv^{2dS5sFRi{bT_F5mV)XYN$%jiy z7g=oY1jH^nCQ8TSe!-Zpyd>W&#VdzOm|Ji`B$gpuok}Y=GQUQ>_rzSk6b+!_NfdLJ z6%PkP2++hg5%%ARwYU;gigilsTn5Rk1`PZsC`51LZ>R_MqE$Z;#P~VwDO?S4-a^36mo{wX-#Sq z4&GJ?H6n{OD;UkR+T=dF%&ND+i|+~cehR-}X7wGKV~;{r)r1-gbCbpe)V?kigt>YH z$>R4G(X|GvCttpV21(a;2!A1hwmS`|&Dj@6@_cs%4m~ClA6K5R!=|FR?wZvN$~*z^ z7fYhl?p;Gm2}Qo6j|2r3uyL4T&5{P%6OmKz?c0KN5ZYfF5`m1>P^;}_3H4j6r+ z#|FPH0z%F=b_RP0;5^1@m$^eL2QKbm>z_WuhY4I3b&r?UX}U18Ey@1L&2?>O}h8i z)P9Y#)++a*QFjj=u!%4^fnYF5nML7)&yRFgh)4jE_l0G^D~K{Sh(3*`?)|Rzt&OhV zl+rYA3V9j_>~H63H$Xl9Aw*@elV+4pW7GPk`s6~|QG5_@?x`S5{t`}$y#^{yPo%yxqrOrDLyq7XBX3tyeja%Ma8!hWC6}@TvQn^DCoK3 zt=4HCdfK2Ck%56VUT!Z;x6QJ}=M|(G4t>V`Ua|+WKoQqQbSL`W4WV983m*y0b@JO< zZycBWT$%oDK+xaP_TPEqEpsb+w~$o(jVf=7Y?Ggd$l7Amx&PS<9zHy?49a)%kuZQ% z(HQE*s%DBU2Fyc}8n=&~_D4)=4#rVZOZNSP2~3l<6%f{gwg3mMu@CPEcHL7Qk}1to z@6g?|P0$+aXZ_-Pkjsr}K5|2s#g0}hF*CTS}@CB>IBEEEWuv7-&NCvxTf9m4Rt zX10_v=6@>AiWZ{}vps)Vy46U?V2Yb{;MHI!u@b27eDyk;|2j8mY`2Jx64&^}f>(Ke zn1To*%#Adrn{O>YY-pp1I=aI$ly{Zjp?l_1WHFc7CKXW}VTQ1*+~K5exZM|L_$xag z9eB;lC?l`hsN-d-qa2>t5?-cROEHWfJ01C-)0FKLKi&@FO7-Vg?e@_T?WYcpZ%5-) zp*e;;dh*i*{esu`mM>@A0O;1{DY)9&)mE0HU}{$moJL46K#Q(h*Vz}GygDx}X~@Qr z{^K-vIl1R#UZ>a^{TDs!tvmst?#^@hbcM{;*+fTzy}2!cy}cr++!MpMyO> z1K9L*oO2A*_g5;Z(di*Pk-7LvoP=0!g#TmwRwAEcM=lay5e9!QJpM~s)2R~2 z{4OTc;3j%R@pp$)_Kvnk~_n);Q3^BZY_se(%+ zg;uk^><~L=ZmE16vuiyas+N`Qm(-)cIwUb8?ZVKRHkSk4ryZZ+MbWLB*+oa#vg^i6 z|D`UeoMBVDQefW+y?KvJ{-M5yznTcSmw5JpzArEb%7lg?v}MtX}ezDw&eV zTn71sAkuPGTFJJ*?qUbs%4f8o{JX%#>a_*2xR#HnAEAEhwX}d{T9*PDsx-G_2Nbz zNk&B~OJI&gj^CcRu(=NRU989V%i>*Ho&v_8v`W#mc@7lFSK}Yb+Jx~Y*?KwNtB0bg zR{lV$kem|B(5A-~Z!Ai>NPMA4U{=BmO!jzxip!>#oyuuc8j&zVM1f$eQJVmn!uEH$ zSUj>f@gI@K3||yAUl^>&_sUKojj5!XfuSMNwV)ZTjE8|M>Dds-=Pot2?@~+GE$x6V zOM`E$Cx!C*R_Dssha3_6Uoj0Yy;hnTU_)9-(cFzrrg-qha%k?dKvHe|4;!s*HFLhd zG&4zEN|XTyWIp|OOL2gd05(~6oaBiJHa0?P#u+3K2@*5nTWLnM(J!$(>Wd;z8CrYK zLy>r*@nJHpi%pal6_{2i%QGmy{I5=*J{JO-Kxjgnoq2)-G}F9x1=CQ@~c=4DHndQZG+@Q&EbDl>h!r0UBM$|=Nl%D zI+}i5r2%K@EP&jpCLwDUfV?cCB&5ub-`ET&YWsfVThRAy0WAyw$QlBPCCE)c=$JTY zJR4zq`AQg=A!xIm(m4Uz8F?EWg>t-SqTZ@&plttU2@0p?XQnxj)_1tQgS2&3HVjpu z1YKA7t%lZ|F4P4;5&V>L;;#@^QC|ueYN)~$D45456!kmw@QE-k%@G z_9qB&4D)G4W-u#Xt{f48I^0-K8h8-&&ADIA>}y(!y(X_1K0h(^=7gG77i;f_!=dZ<44qu+-&S*3g0R_c#tI--kGjMGNZoN4;pqTfObZqd0WM=wN%%Y&BO%D+$Ofbyq zE~*Pi9Py7JwjRQH|2;&xN3h07_M(dYEDT-mn)+_Io&Bf7Y+ZXdt@vuJFHi~k)YXFs zVVhEZ=k)_PfVs|$;J+EnU2cU2aN)WAOvdvo(f6JrUfYFBZ*V~hPl8(%+XeKdE&^2` zU!FD=P}}P)ZlfyMHaJ1QAAXn*G9WA zczz(8&kTCp*SZ<9K{UDB3tT=w6U}$HT5S3sf3)XOhu_HLLIn)1$UbHpaQ+kpdH)OU z+oM)QelL4L8Ow8wT!SskCSO3fNY@KzLO?-&NwLoJvuN#(ruG*ACH0=6Noqdnk${0+ zo78ax4&PX-4oh0S1D>-l2eFHF%03)9mX7w|ONxJh(K^ty?0{b^?dqN@n%owflZgV0 z=2)AJ?#Bs0qvXs^i)zv}Mz}gmVL*ZC6fEGNXNrsCAZ2?^_|DWHK7^J{v-ljK!=TpI z6ahO>Z&6@JKY;^MR4lv=K2Q@`g2Kw3g*)_2?rnk32((cLc~4}rCw7$~(<`ipt}Xmz zFU{o8k$btsBo=^bF*KKaG1?&W>vn%Ao+&!=on&ei7gBBk{QLW^76m{BP4X5qw;09( z67C!8ms^iP-nQy0ymi2cei1(e2iToxv2$=+G0tDFPg_5DD|)g$=)l|OAr^mMRk#9-IwP*!)-d#w@;WdH);n{Oe$MI5dkn1`WcTT0z zY65H%t;y?dE@fHv_f=93_3z*3WW)CHQP`^XC0^q|rMRawE+g|XvvL<{fdfUHc4b^8 zLqXgT&G4g#fjbC9754A{0z7r`t`*`Ymj!m-pJ}qHJmm260^%o`;Ql|IW)uH<u6!bxZFXmG} z{0S=$>;Y)g5;QxUeat8!i?x|eO(jiA8u&keFw4h9Nni;Fj~Ccm(3cr(s981b5Nm*R zPsP(|un=9v&njhawkFE#qEF9=FEP({6bJOY{y;6%bWR;4D*83frFj3-Y>R9;Yl=Au z(CuiIUurS~(K_r)Amql07%&D!pbvUPbsdv{6-D-B@hU(AE5JpSQNDg-Yes_D58@W1%3y1#orggMA1GI`;lzq(v?ws(EH&ZCn-f)u(y4+Fw`WuJ;H*F}%` z9ouML?Q{PWSb=$5k6bk(N=z&nn%=px&uB~PP|~VU~Sv{NtBEGrWkY|5eL|`l!KPVO zJ9rk2&4Uxp#MG-t#V{38Lr{TD1ezq+egKBDwF!UP9siKjiEjbm1-Oo$lJ4`~ z6ZktdPL(4D2^npin-h%HdZqb1N+9$DOa6)s$<%|gX%m|Vl%1;>u8*{ zxWFp#3FkGIzE)`6e_YQVH66NVntQ870<=wKt(iXEyu6l_Wsnt{QT~5#$LH5w3yldM zZMxvI@CNYtZj1&E;aZ3mE(cupz2SEeC4^ioc2-6N0#Pu$8$Nmx6-`8Xt!D_ z{>RAjd~47IfN!CYj+suwXPv{%2*7v|FGy*CORCc#(&GMs)`a({u^%Mf7kbyzcU;;4 zF*2EQr|KQ|ADzIVj-b+c#gHeE;E$;mWf1At-vkvm@aB~@uFVSOSFizt4N)W9-@^@0 zXk8VEo5-z&wQdxMVUH zI+k8X>3X+TPJ@R5s(X~M0|v>7@Vs4Axq;aW;u%V#?};IwU3^F+G0dNF^?p7auGQ>- zv!CM}dz&73|II+?QJ}{|J|Xkc*bY4Vx}DzB#1)&lllSj3vM^aG{F35;vwC?*V*`V( zAyK$VAoO`@@zcAJ05G9qp#BR?CJS$~#s7r$)Rw$Kv8{A6d?F(;RL#F!TWB6;_YcF7 z0}Jw(H+|~XrnEigZE&(qw#*ejuNOP;4=|`oI#BcabPQgh_BMYY0`1;~kR*W6rRCTE zQ`${Ge7$uyI(xHSHDCRs7W+G@h2ZuD_*<}kHvrc#a%&X;w-G@G0A{somB3Jdip(nj zNh=Q5#b*;0Q+~A5>2$kx!t>ptrtj@rSJrTQ`C!sKKxYTEC*B$Rrvp)?hDfmWT-eUO ze=tY7!$J8z2~&fsMDD3xtfuc9H=c2&cgPl!s2ebN1(HPsY;=tr`~KFnK4>FA75PZ3 z4g9&W&a3OI@BB)!2_AcPYG|frJxgo_O)t41z_=m^X3!%LILATI5gdOXDBCiR3tZ)(G!rD5v-~ zt%XC`vjN_J5%n|%4a%e(287l(D}WI}5#9Y}u=p8=^8LELLDP%&n>nvfmp>Yu z$29H@Kga{yUlQm3^B19LWhP?Rz_{g{T$d{HHb<-fA@on?7zaU-G4x@CXOOrxBgT~8 z2M3rxikVN9i#XTg1az(5@)-{Qwoxg!qLoG{&VAiEsagF=WtN5W_Ngx{rEIZgF8hWaf~V&G&kDfBuH=Pq)V&4|_azUDx}4UDxY+yg)Xq#fNw|5*~j~YYV?+G#v|L0m(uHomM!$gs?IW=u0t+aMC!S9-7OX; zZGbk=3#;7^m=9Fo&-#soYtJzsQclk}Y0Y04_I5GGed$t66a2x=J;|_gkB{%t1q-Z| z9AE~PxCv7c{?E(g%R6<+j}*>)Yi7MB zWAEcYAT~3=8uTs4pMA>yw9;&}+#j}ciY6dGVwEEKHyZS`{+=Iv9mJotKnzaK;5)UL z0Vz9njVwaqZwJKxu~J3o9&>@k<4=19vLtRKC&;c$-zo8WOzt*;_)4f%h#g_R7ybC! zHgioIU`gk^1WrJ-b7a~XOD`{n?~49F6e!@lOig45wAx-&{ftWm*sozWN>1Sdg_l}3 zg4sp?pdDpU-y>J0q>3aGKs~`5Q;uuQN)tROz)Na_X&q|8+MjY}{U&Di$+NeGL8(9Q zE7m5O{_(9a&|PXzGJ#ITq8#1SEnfo`h*6hSk;H|_-b&y5A-$i@SIC2i-r*>Nkqb49 zQTBQFqs@GQWCEDpB0KOEo@b3fKXxD_tjxci7vI%9Vqzul7g?_mWq{$xz?dDM*_+j} zzkb`E>Lhy7qp|^}QGcMosS$>VSgpHTqu>gdE@meq#fGfaOYUVV<-WeQ)f0o+dh4p7 zROrdDW?zXZ#w2H3(q61=kGUhn2+%-5z_qpGewg-Pi37qgED>!%#%8ApR)#2I-%(I8 zT@m({HFYM{Bh*FiMpoebP!e9EogN553X!k1;aiZk9x)_B%m6FLXeH8nU4yf%uo}6Z zi0`bw&QGel_UWGWqZeg<_yB`AhY^wU=Oh&&5Y7)1X2)C*50zs5{fa`OByZ_(!;CCv zqq6Rmg@feyy^^V4Yx9bg6;3e}+p>}lSQ1?PKw<#d(&pHh0ha0S<$G`DYO4ozgyOQW z7oFQ(9fCJjiT)&}bzWc~8V!@W)zNcVFv-Tbr@z{rBcIjao~f$5KRBFrFQBFurwZj# z(ruH@Uqe}ZyaPLXNoQIcoMAUmuW*j>ArJ&oD1Jg#P|s{WIkYm|B0L3BMw%JASas=_ z5tp{Y3}duk>n8_+NfhQ6r~H-8^_~z%|1@-GXss;=hl=Q|^x%@*Sr6223I=yzbBg8# zI`Fqp^Uu01c@XSHKBC3d<8E*!m$RvCu+dSz<&+aJD1y}wlk>D;@Je$94g*+pDizE? z_3Jai0M9_3qAiL-_tTOfw;NB>c)?(_#3?X zxIgbg(?D(XlHXV0yDa5l!2Y3YL@U!zz^$IM#vP)Q?7=!-|H9B)4=!=n))z;qaOajk zzafl16v~@ehQxytwA5_dJ*CR21-9R#tJ?b~D+;VJMQXb5xhn#a!Hi=WT2ClXXnMfEki0OErDAgwTUsES1C z;%Eq-CylV(1S>OKQMh&ssK1`>p^zDRzQs<7mi(>*YO-yoN56%<>`{rV78dO(%bn5x$TE!_2GF>Ei^u86EQ|~Trp9EBmCm_RdgHqJ zvE||SLYsh|`kJT}Eb+?{(LEx%&H?Uog%zZS+KN*|!s#rPzkjUZmHj8{hhlC^#Ar=5 zUM~r_^L_77YiWw7p(YE?{n0i;0jFEMXb`s_aY|{f21Xy-J5NgrefWoMNbS+T{3v08 zo;JNp^c35jT;DR{iM9G5kc*S;2)%@q)8je76;&~#E^DK*3?)-zil}T~*dDhtv(+5A z_cY0ExyK59CoArFg#%dV*{k?z99$L!3ggn>+(;1P{RsunLhENq1{*E%vip{sPZhAV zB5sJi)+iu+ylxYq;Ka*9uIa$Wj(G=@bvDR`8vXH(6C%$S9LcajQChuP!qT%~oS~t!LujbWVm4dq-^#}A z>IV_Cm`AoSa9JqXb^OLElkUU2D`x(2r{RHW1h1<(t3m&xL64FuD6EQ3%ahh0#4g=G z2TJ*1Z3q-HmwFdLy4W>Vu20hG;l>nnWR7dyCw@o+1Plh957mkS{O=iHri6FeN zLu8`6aWH=`&enww9=>%eS5_|j9ee-o8esHLRPu4=I?DoZvfOvStDM6FPVk#)hSPd* zS(yqIn3I6r?n1j_$bS`+x8@grzWX0 zCTS4~N}~12-_h4SOgmQC?e&RX^HpKf?0a$OeW!Yw<#M%%FSl2yXgI@t*b6~cD0^q0 zQiQf6Q$$PG%gl(M=YPYds&FRwMw+bP!3P_leLf)jel7*yTU@)oZRH(u}r zZ3)=fVPDbX>)7!}li#rC$v+B;x%|U}0M0Xuboa&mkDvosdc3h*G62H`&OgDG^107V zf99g|hH@lCOOR350Y=@Cr;NO?Dy1DGTz(gQ>{SpTj=+CVkVXAVesU4weIwiPd=gZn z`=f6UUi1`~NBA59w~q|x@+2o-DKw1n&tdi;&~4r}0&Ez2I%Smhd&f8aB?F=4UrLV0oG|+f)uHu%)CAGy(#d&%l7?U$rX~Q-f z0x0#l%Vx)MaCA3`QLomN4sp@7=WbQ^`7uU7OVR?Yr&6Pw0i zm-KsDm+TJhX?7VaBiJ98A67614Pn--6Z&wX(&Xe%7N)>FPJQ_>GZ+y#q-s#PN zePB5ZJ797K*tXcFya&MD+^W<4u4f|tV-AfI(@2ySk}n%r?10xezs=N4J7Uj#FGT}H z81%Z=4GbzprXBEO^9p@uXO5SK2jJiqV92MonNiS?`ijj?NizTB z7UByJb)+YDNP9J^gL`gn)4&PzBN~aWFTxRB4INuSaHrt&f#W*>fsYTZB#3}Q{z>wS zV`1_w9A63b7akZcQ8cpC*w5-lu~}?>6cGem32(jwkvXYnY`iCRwbo`=RQt(>c>cnX zl!nabRu(%_?zU`eCx3BT&omv2YXT5PwPGcfHn@h+NW+cV>K`v08Xl5eDK)|*uHWS7 zEbPB}@b6Xfj)S&_3c~$Y8GHqZ*K%J9*xt>_fZoS(Eg^4CPxDMQ!KR z-SV6Cl0GE_UloB&No-m)gPM$#l7i=rfh2qp|J$GhS+V$5l3BOEu4@N{SUbkz@@x*Q zwpASfNs;$8GpeX`Ds_gt{9WNTr9tYXaOb-DBHwfXTQDcxJup3-8mHT6aodBSQo4sp zltsltf*CRrnt_zl0oc2RN~VbIG&G#KC}*dDnldO~bFN0anqI9%0&Pm77QTMSXrv*v z20R_Ms>>*sUMUob7xBgO{Zy7~gB>)tWF*1`j2Jfo0U{16<*e1~cd1YSAivSX76FH9 zFpCyICM4Ht`=*vW9AEvkGybePbjY;uiay}~&>oJV(PqF|ms!|om^h>uXz&Gyu*?-S z3kPRGJX6!21Jf+vPt`3V|B`1%qt&3um=bB!0MAne{eS;u+bfZ&Amg>48+Lb!SEUBf z0-tZTTRAqmgI{N@$%MpbpRj2e=Qt64j)pM7sK1izr~YyZ0A=V^HCs|AFz8L%`ef%y!cr*I-}OO+e2#E7R+3HHW$nuMpgT!7-rN=O9P$EtByK(RoOmmqEVQ2$Ol#c?^@iXM zcVfLPQMo_{c)Qn2^;!YdQVo-?>D!rDTeg)KrCr$~d*xz^%rqlvC_CXVFTZv^6CeLXEEFb^02045!64a0wG{Xbl${m1jEJ`ev1 z=%t~S8c@=AeGLE@({wacpS(tGSz1Spe_q}O6RP6q;bh4r{a|GFWyK|Pawz07hEE?$q%b_BqZr6nx1BoLo zU~Jo|DM%lr|BM=3Q<@191;8$_-^(K$1S&!qExQ}a^8c{jdeTrRhpiLSVSU@EMbqil zaF4r4+Pi9%=iuVugJrr0K<-@q=)ET&po631)Gj^}3Jre-T&}7=t6tb^GWg>p6VAv4 zv(pCHvT@~#_jw*a*F@(^b-n6k9N-OR#x5Va$y9o0^$p>lJt`>VaRsr6W+br%g$*-4 zl@?)p`JG2&<9ZiWFfBH}+AZ;Cbyj^H1C}CO#16P}oNA}Dw!HP1;Vj^#GwjDG+mCbQey431DY1|c0mF1Gp*`yg12ZEFhp(q-usqT9 z3>_17LtbG>0V?f}=XyEmneCD0#WXzgmp7%L`cuey|ov z3}{{pKZTA7njouJsA*wNmUJa1@}FYRs-TRa1*T`Kul5v-Q^d^6H(oO-_kUJ5 zdmCm%a~`n9)!3}4BYPWK><9x29V_Q;@ZZ+33E9C?PPqXv+A~VS$?+-$Q-EnYdH=*t zLTC3)U?VfIb0^i|BAtfg8YHW|QVLB9dZ+du(#JyQ>d5qDn*hK}FY1n_%~JGJMJ1O@6;1HT zd-M9re%VM#{M_y-vIFkeM1>mz2;;`XHul~MQqtNUCLGgl>S)~$i>;9$Yx6;O&e*ou z0EJ|;qqv!7T%c8nw zff0DvtF>ftR8`)qE$#8tcGuXy@7_!3zMnQv=ED}(Y+q(`x&J-n{?X9I;>e?PikBPL z0mx$Rw#G)7^=B2)55((Hi0ZSLQ09z#7}lwNKHfFIKv3zlWoI$D!jgt`&JtAPr<f#Q&r&C}D4p@kXwQe9`)2ceS{YqfJb12Z zNzw*)rlk~+GcW!It2O%MMxM-^Z!(${xtf9a(}PxNwQgSVQMR4E2K89-=*#q#fcU)( z`FJlYSl+i?B)=0$4pEnQuKjT?d&!Ra>(pqB?KhdpB<6;?loChv@%<{ zrb*o08g=jUHEFcrc9>Ci-s;GbbovT2Lvw`>rvBq6*wi3ptnWU3~!2jw^CX_r742h>12QK(uUn7(d(P>SE#?@`>VzrCeALt zJub1G3^+&s-Mw_H*=(oofgl5*6-jbLmnFp}Gmfvw=eaiccXwzzQXk)tb_z~x@tB17 zwI>T)iHZ4|waKW;5{{1PSMDaR4_oQA84d3kjl1&^JN6;_cZGZMh0piJMW$ao)8qu0 zQ5X%nTT@!}27_5g>XAzae6{{j?r*;1T~zhn#Va=Kr>~NH{8LQY!t@$Pea$^zRE9$e zUSoXOP$-3E)T>XHg`JT#I}Wo4D*WnM=+2B*(AN}Srd8Wt7YyHdS)JPt7zWwW7P|8AQAav z;!(`aAi}tvm>RKw1+E+BJ|GcWt02^{$G1bWz42X+_cK>h=35r%m)!Rk9<-)zWZjh< z-U6H0b}q{;Vkb~LK@eMNq6hHEmgcrug{t#_sZl2}nO4Vad9eL6UNy!2iGTGjW9^Pn zwUd2+vMEeV@|$zMa6>0*ah@%+i$M1;z8<t; zD$4TUSdoMhoYX34H<=spyR$gD_Mn#aCKtp;sI%arq)RLX5MPn|LFJf9}45Q!F!)(&T2*-@TS#bR$ zEz^bF2Nl$On6K;OLONbD_IhRafG_i`YC-u$IqkJbx5wXBfHJ-^D2Us$u!rktuq!=H zWyaCLr2fZDJyqmm>bV|R5pf_uub(Yim7t&Vd0>mD9a3OlB##z$GB81;p z*qD5_6sicQNv#IZbntqm%BFu3l1MB@q@3i(vBp_GqOsAYf~An%(x7!w*ZP!w_!GvLO4IR;&uO?%ggbw+UGD)mH0e4meyLS~$>Vt4Eb>~2ydT_&zgL*J_kj4YN7taMdo`awx)&pR)^7!b-)5i8-&8); zz{%NlQNcQR(o%(j^(39)baG_1yLu&>-I#-ixQBuO;pdV5XO$Fzp^ICGG4xsCsh@FO zGj|$hKg{m~wK*BMby@Z?g%&VWN}0V|D$_wF>cIUM0GndAJkO7IE}u;0rblasQ!<=6 zjg*xjdjLxw5>e{>MLObv)@@(Eeu$?7>;fxH(k6otZ29d;0pXF>(-Y`kq(Y@gm%x#O zXNO5pe<^@4yCaHg&Td1na2f$haSUT<1P&#sghKFbCzE}FsVsrhBsfLQ5E*Z(Xi09M1KwiwSmPHkaN5470G@_q+&IJtl z5}R5|l~n@Z-x>XH#XqG6%axV@902|S!DD|N{QtDLuou+iAbzNdw}!yK#{%fU^)yP< Hta1MZVDB_I literal 0 HcmV?d00001 diff --git a/p/themes/manifest.json b/p/themes/manifest.json new file mode 100644 index 00000000000..377383baaf5 --- /dev/null +++ b/p/themes/manifest.json @@ -0,0 +1,31 @@ +{ + "name": "FreshRSS feed aggregator", + "short_name": "FreshRSS", + "start_url": "../i/", + "scope": "../", + "icons": [ + { + "src": "icons/favicon.svg", + "type": "image/svg+xml", + "sizes": "150x150", + "purpose": "any" + }, + { + "src": "icons/favicon-96-padding.png", + "type": "image/png", + "sizes": "96x96", + "purpose": "maskable" + }, + { + "src": "icons/favicon-512-padding.png", + "type": "image/png", + "sizes": "512x512", + "purpose": "maskable" + } + ], + "categories": ["news"], + "display": "standalone", + "background_color": "#fff", + "theme_color": "#ffffff", + "description": "FreshRSS is a self-hosted RSS feed aggregator." +} From 88e47dba80fdca9ad77bac3e1b1e9694c750287c Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Sun, 24 Oct 2021 18:23:50 +0200 Subject: [PATCH 0009/2479] Hot fix broken links documentation Bug from https://github.com/FreshRSS/FreshRSS/pull/3905 --- docs/en/users/06_Mobile_access.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/en/users/06_Mobile_access.md b/docs/en/users/06_Mobile_access.md index 9974fb2bbbf..91271e77131 100644 --- a/docs/en/users/06_Mobile_access.md +++ b/docs/en/users/06_Mobile_access.md @@ -7,8 +7,8 @@ This page assumes you have completed the [server setup](../admins/03_Installatio * Every user must define an API password. * The reason for an API-specific password is that it may be used in less safe situations than the main password, and does not grant access to as many things. -See the [page about the Google Reader compatible API](../developers/06_GoogleReader_API.md.md) for more details. -See the [page about the Fever compatible API](../developers/06_Fever_API.md.md) for more details. +See the [page about the Google Reader compatible API](../developers/06_GoogleReader_API.md) for more details. +See the [page about the Fever compatible API](../developers/06_Fever_API.md) for more details. # Testing From d924fc5fbbe6b93d7a42aa8c77af59cb2ffb00db Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Sun, 24 Oct 2021 19:39:35 +0200 Subject: [PATCH 0010/2479] Fix cron regression (#3933) #fix https://github.com/FreshRSS/FreshRSS/pull/3927/files#r735146297 The path `/var/www/FreshRSS/` might be a Docker volume, breaking files created there during Docker build --- Docker/Dockerfile | 2 +- Docker/Dockerfile-Alpine | 2 +- Docker/Dockerfile-Newest | 2 +- Docker/Dockerfile-Oldest | 2 +- Docker/Dockerfile-QEMU-ARM | 2 +- Docker/entrypoint.sh | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/Docker/Dockerfile b/Docker/Dockerfile index c86298b200b..a08740449ea 100644 --- a/Docker/Dockerfile +++ b/Docker/Dockerfile @@ -45,7 +45,7 @@ RUN sed -r -i "/^\s*(CustomLog|ErrorLog|Listen) /s/^/#/" /etc/apache2/apache2.co touch /var/www/FreshRSS/Docker/env.txt && \ echo "7,37 * * * * . /var/www/FreshRSS/Docker/env.txt; \ su www-data -s /bin/sh -c 'php /var/www/FreshRSS/app/actualize_script.php' \ - 2>> /proc/1/fd/2 > /tmp/FreshRSS.log" > /var/www/FreshRSS/Docker/crontab.default + 2>> /proc/1/fd/2 > /tmp/FreshRSS.log" > /etc/crontab.freshrss.default ENV COPY_LOG_TO_SYSLOG On ENV COPY_SYSLOG_TO_STDERR On diff --git a/Docker/Dockerfile-Alpine b/Docker/Dockerfile-Alpine index 3cbe3edf434..8a14f32dbb0 100644 --- a/Docker/Dockerfile-Alpine +++ b/Docker/Dockerfile-Alpine @@ -42,7 +42,7 @@ RUN rm -f /etc/apache2/conf.d/languages.conf /etc/apache2/conf.d/info.conf \ touch /var/www/FreshRSS/Docker/env.txt && \ echo "27,57 * * * * . /var/www/FreshRSS/Docker/env.txt; \ su apache -s /bin/sh -c 'php /var/www/FreshRSS/app/actualize_script.php' \ - 2>> /proc/1/fd/2 > /tmp/FreshRSS.log" > /var/www/FreshRSS/Docker/crontab.default + 2>> /proc/1/fd/2 > /tmp/FreshRSS.log" > /etc/crontab.freshrss.default ENV COPY_LOG_TO_SYSLOG On ENV COPY_SYSLOG_TO_STDERR On diff --git a/Docker/Dockerfile-Newest b/Docker/Dockerfile-Newest index 892c69a6f1b..80ba98566ca 100644 --- a/Docker/Dockerfile-Newest +++ b/Docker/Dockerfile-Newest @@ -42,7 +42,7 @@ RUN rm -f /etc/apache2/conf.d/languages.conf /etc/apache2/conf.d/info.conf \ touch /var/www/FreshRSS/Docker/env.txt && \ echo "27,57 * * * * . /var/www/FreshRSS/Docker/env.txt; \ su apache -s /bin/sh -c 'php /var/www/FreshRSS/app/actualize_script.php' \ - 2>> /proc/1/fd/2 > /tmp/FreshRSS.log" > /var/www/FreshRSS/Docker/crontab.default + 2>> /proc/1/fd/2 > /tmp/FreshRSS.log" > /etc/crontab.freshrss.default ENV COPY_LOG_TO_SYSLOG On ENV COPY_SYSLOG_TO_STDERR On diff --git a/Docker/Dockerfile-Oldest b/Docker/Dockerfile-Oldest index 9762653bea7..e0d9b5e2350 100644 --- a/Docker/Dockerfile-Oldest +++ b/Docker/Dockerfile-Oldest @@ -42,7 +42,7 @@ RUN rm -f /etc/apache2/conf.d/languages.conf /etc/apache2/conf.d/info.conf \ touch /var/www/FreshRSS/Docker/env.txt && \ echo "27,57 * * * * . /var/www/FreshRSS/Docker/env.txt; \ su apache -s /bin/sh -c 'php /var/www/FreshRSS/app/actualize_script.php' \ - 2>> /proc/1/fd/2 > /tmp/FreshRSS.log" > /var/www/FreshRSS/Docker/crontab.default + 2>> /proc/1/fd/2 > /tmp/FreshRSS.log" > /etc/crontab.freshrss.default ENV COPY_LOG_TO_SYSLOG On ENV COPY_SYSLOG_TO_STDERR On diff --git a/Docker/Dockerfile-QEMU-ARM b/Docker/Dockerfile-QEMU-ARM index 53cc73723e7..1f36d6972d6 100644 --- a/Docker/Dockerfile-QEMU-ARM +++ b/Docker/Dockerfile-QEMU-ARM @@ -51,7 +51,7 @@ RUN sed -r -i "/^\s*(CustomLog|ErrorLog|Listen) /s/^/#/" /etc/apache2/apache2.co touch /var/www/FreshRSS/Docker/env.txt && \ echo "17,47 * * * * . /var/www/FreshRSS/Docker/env.txt; \ su www-data -s /bin/sh -c 'php /var/www/FreshRSS/app/actualize_script.php' \ - 2>> /proc/1/fd/2 > /tmp/FreshRSS.log" > /var/www/FreshRSS/Docker/crontab.default + 2>> /proc/1/fd/2 > /tmp/FreshRSS.log" > /etc/crontab.freshrss.default # Seems needed for arm32v7/ubuntu on Docker Hub RUN update-ca-certificates -f diff --git a/Docker/entrypoint.sh b/Docker/entrypoint.sh index d6cc345061d..e48a5e58f1d 100755 --- a/Docker/entrypoint.sh +++ b/Docker/entrypoint.sh @@ -20,7 +20,7 @@ if [ -n "$CRON_MIN" ]; then echo "export COPY_SYSLOG_TO_STDERR=$COPY_SYSLOG_TO_STDERR" echo "export FRESHRSS_ENV=$FRESHRSS_ENV" ) >/var/www/FreshRSS/Docker/env.txt - sed Date: Sun, 24 Oct 2021 21:22:58 +0200 Subject: [PATCH 0011/2479] Newsflash doc (#3931) * [credit] add stunkymonkey * [doc] update Newsflash in README * Update README.fr.md Co-authored-by: Alexandre Alapetite --- CREDITS.md | 1 + README.fr.md | 4 ++-- README.md | 3 ++- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/CREDITS.md b/CREDITS.md index 7ac366b916c..264755c62a9 100644 --- a/CREDITS.md +++ b/CREDITS.md @@ -131,6 +131,7 @@ People are sorted by name so please keep this order. * [skrlet13](https://github.com/skrlet13): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:skrlet13), [Web](https://www.skrlet13.cl/) * [Sp3r4z](https://github.com/Sp3r4z): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:Sp3r4z) * [Strubbl](https://github.com/Strubbl): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:Strubbl) +* [Stunkymonkey](https://github.com/Stunkymonkey): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:Stunkymonkey) * [stysebae](https://github.com/stysebae): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:stysebae) * [subic](https://github.com/subic): [contributions](https://github.com/FreshRSS/documentation/pulls?q=is:pr+author:subic) * [Tets42](https://github.com/Tets42): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:Tets42) diff --git a/README.fr.md b/README.fr.md index 50f998ed2b6..6fefffdf032 100644 --- a/README.fr.md +++ b/README.fr.md @@ -233,8 +233,8 @@ et [l’API Fever](https://freshrss.github.io/FreshRSS/fr/users/06_Fever_API.htm | [ChristopheHenry](https://git.feneas.org/christophehenry/freshrss-android) | Android | [✔️](https://git.feneas.org/christophehenry/freshrss-android) | En développement | GReader | ✔️ | ⭐⭐ | ➖ | ✔️ | ✔️ | ➖ | ➖ | ➖ | | [Fluent Reader](https://hyliu.me/fluent-reader/) | Windows, Linux, MacOS| [✔️](https://github.com/yang991178/fluent-reader) | ✔️✔️ | Fever | ✔️ | ⭐ | ➖ | ✔️ | ✔️ | ➖ | ➖ | ➖ | | [FeedReader](https://jangernert.github.io/FeedReader/) | GNU/Linux | [✔️](https://jangernert.github.io/FeedReader/) | ✔️ | GReader | ✔️ | ⭐⭐ | ➖ | ✔️ | ✔️ | ➖ | ✔️ | ✔️ | -| [NewsFlash](https://gitlab.com/news-flash/news_flash_gtk) | GNU/Linux | [✔️](https://gitlab.com/news-flash/news_flash_gtk) | En développement | Fever, GReader | ➖ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | -| [Newsboat 2.24+](https://newsboat.org/) | GNU/Linux, MacOS, FreeBSD | [✔️](https://github.com/newsboat/newsboat/) | ✔️✔️ | GReader | ➖ | ⭐ | ➖ | ✔️ | ✔️ | ➖ | ✔️ | ➖ | +| [NewsFlash](https://gitlab.com/news-flash/news_flash_gtk) | GNU/Linux | [✔️](https://gitlab.com/news-flash/news_flash_gtk) | ✔️✔️ | Fever | ➖ | ⭐⭐ | ✔️ | ✔️ | ✔️ | ➖ | ➖ | ➖ | +| [NewsFlash](https://gitlab.com/news-flash/news_flash_gtk) | GNU/Linux | [✔️](https://gitlab.com/news-flash/news_flash_gtk) | En développement | GReader | ➖ | ❔ | ❔ | ❔ | ❔ | ❔ | ➖ | ❔ || [Newsboat 2.24+](https://newsboat.org/) | GNU/Linux, MacOS, FreeBSD | [✔️](https://github.com/newsboat/newsboat/) | ✔️✔️ | GReader | ➖ | ⭐ | ➖ | ✔️ | ✔️ | ➖ | ✔️ | ➖ | | [Vienna RSS](http://www.vienna-rss.com/) | MacOS | [✔️](https://github.com/ViennaRSS/vienna-rss) | ✔️✔️ | GReader | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | | [Reeder](https://www.reederapp.com/) | iOS, MacOS | ➖ | ✔️✔️ | GReader, Fever | ✔️ | ⭐⭐⭐ | ➖ | ✔️ | ✔️ | ➖ | ➖ | ✔️ | | [Unread](https://apps.apple.com/app/unread-2/id1363637349) | iOS | ➖ | ✔️✔️ | Fever | ✔️ | ❔ | ❔ | ❔ | ✔️ | ➖ | ➖ | ➖ | diff --git a/README.md b/README.md index 7309b60cc07..5c754021292 100644 --- a/README.md +++ b/README.md @@ -119,7 +119,8 @@ and [Fever API](https://freshrss.github.io/FreshRSS/en/users/06_Fever_API.html) | [ChristopheHenry](https://git.feneas.org/christophehenry/freshrss-android) | Android | [✔️](https://git.feneas.org/christophehenry/freshrss-android) | Work in progress | GReader | ✔️ | ⭐⭐ | ➖ | ✔️ | ✔️ | ➖ | ➖ | ➖ | | [Fluent Reader](https://hyliu.me/fluent-reader/) | Windows, Linux, MacOS| [✔️](https://github.com/yang991178/fluent-reader) | ✔️✔️ | Fever | ✔️ | ⭐ | ➖ | ✔️ | ✔️ | ➖ | ➖ | ➖ | | [FeedReader](https://jangernert.github.io/FeedReader/) | GNU/Linux | [✔️](https://jangernert.github.io/FeedReader/) | ✔️ | GReader | ✔️ | ⭐⭐ | ➖ | ✔️ | ✔️ | ➖ | ✔️ | ✔️ | -| [NewsFlash](https://gitlab.com/news-flash/news_flash_gtk) | GNU/Linux | [✔️](https://gitlab.com/news-flash/news_flash_gtk) | Work in progress | Fever, GReader | ➖ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | +| [NewsFlash](https://gitlab.com/news-flash/news_flash_gtk) | GNU/Linux | [✔️](https://gitlab.com/news-flash/news_flash_gtk) | ✔️✔️ | Fever | ➖ | ⭐⭐ | ✔️ | ✔️ | ✔️ | ➖ | ➖ | ➖ | +| [NewsFlash](https://gitlab.com/news-flash/news_flash_gtk) | GNU/Linux | [✔️](https://gitlab.com/news-flash/news_flash_gtk) | Work in Progress | GReader | ➖ | ❔ | ❔ | ❔ | ❔ | ❔ | ➖ | ❔ | | [Newsboat 2.24+](https://newsboat.org/) | GNU/Linux, MacOS, FreeBSD | [✔️](https://github.com/newsboat/newsboat/) | ✔️✔️ | GReader | ➖ | ⭐ | ➖ | ✔️ | ✔️ | ➖ | ✔️ | ➖ | | [Vienna RSS](http://www.vienna-rss.com/) | MacOS | [✔️](https://github.com/ViennaRSS/vienna-rss) | ✔️✔️ | GReader | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | | [Reeder](https://www.reederapp.com/)* | iOS, MacOS | ➖ | ✔️✔️ | GReader, Fever | ✔️ | ⭐⭐⭐ | ➖ | ✔️ | ✔️ | ➖ | ➖ | ✔️ | From 670f4c45ab7d94df18cfad33ba1b9231b3629887 Mon Sep 17 00:00:00 2001 From: Mejans <61360811+Mejans@users.noreply.github.com> Date: Mon, 25 Oct 2021 20:25:45 +0200 Subject: [PATCH 0012/2479] Update Occitan locale (#3935) * Update conf.php * Update gen.php * Update install.php * Update sub.php --- app/i18n/oc/conf.php | 24 ++++++++++++------------ app/i18n/oc/gen.php | 2 +- app/i18n/oc/install.php | 2 +- app/i18n/oc/sub.php | 8 ++++---- 4 files changed, 18 insertions(+), 18 deletions(-) diff --git a/app/i18n/oc/conf.php b/app/i18n/oc/conf.php index 26de6449506..98e9b50b4fb 100644 --- a/app/i18n/oc/conf.php +++ b/app/i18n/oc/conf.php @@ -29,7 +29,7 @@ 'publication_date' => 'Data de publicacion', 'related_tags' => 'Etiquetas ligadas', 'sharing' => 'Partatge', - 'summary' => 'Summary', // TODO - Translation + 'summary' => 'Resumit', 'top_line' => 'Linha amont', ), 'language' => 'Lenga', @@ -39,13 +39,13 @@ ), 'show_nav_buttons' => 'Mostrar los botons de navigacion', 'theme' => 'Tèma', - 'theme_not_available' => 'The “%s” theme is not available anymore. Please choose another theme.', // TODO - Translation + 'theme_not_available' => 'Lo tèma « %s » es pas pus disponible. Causissètz un autre tèma.', 'thumbnail' => array( - 'label' => 'Thumbnail', // TODO - Translation - 'landscape' => 'Landscape', // TODO - Translation - 'none' => 'None', // TODO - Translation - 'portrait' => 'Portrait', // TODO - Translation - 'square' => 'Square', // TODO - Translation + 'label' => 'Vinheta', + 'landscape' => 'Païsatge', + 'none' => 'Cap', + 'portrait' => 'Retrach', + 'square' => 'Carrat', ), 'title' => 'Afichatge', 'width' => array( @@ -128,11 +128,11 @@ 'read' => array( 'article_open_on_website' => 'quand l’article es dobèrt sul site d’origina', 'article_viewed' => 'quand l’article es mostrat', - 'keep_max_n_unread' => 'Max number of articles to keep unread', // TODO - Translation + 'keep_max_n_unread' => 'Nombre max d’articles a gardar pas legits', 'scroll' => 'en davalar la pagina', 'upon_reception' => 'en recebre un article novèl', 'when' => 'Marcar un article coma legit…', - 'when_same_title' => 'if an identical title already exists in the top n newest articles', // TODO - Translation + 'when_same_title' => 'se un títol identic existís ja demest lo n articles mai recents', ), 'show' => array( '_' => 'Articles de mostrar', @@ -198,13 +198,13 @@ 'navigation_help' => 'Amb lo modificador ⇧ Shift, los acorchis de navigacion s’aplican als fluxes.
Amb lo modificador Alt ⎇, los acorchis de navigacion s’aplican a las categorias.', 'navigation_no_mod_help' => 'Los acorchis clavièrs de navigacion son pas compatibles amb los modificadors.', 'next_article' => 'Passar a l’article seguent', - 'next_unread_article' => 'Open the next unread article', // TODO - Translation - 'non_standard' => 'Some keys (%s) may not work as shortcuts.', // TODO - Translation + 'next_unread_article' => 'Dobrir l’article pas legit seguent', + 'non_standard' => 'D’unas claus (%s) poirián pas foncionar coma acorchi clavièr.', 'normal_view' => 'Passar a la vista normala', 'other_action' => 'Autras accions', 'previous_article' => 'Passar a l’article precedent', 'reading_view' => 'Passar a la vista lectura', - 'rss_view' => 'Open as RSS feed', // TODO - Translation + 'rss_view' => 'Dobrir coma flux RSS', 'see_on_website' => 'Veire al site d’origina', 'shift_for_all_read' => '+ Alt ⎇ per marcar l’article precedent coma legit
+ ⇧ Shift per marcar los articles coma legits', 'skip_next_article' => 'Centrar sul seguent sens lo dobrir', diff --git a/app/i18n/oc/gen.php b/app/i18n/oc/gen.php index 55cc34ea5ce..34072af133c 100644 --- a/app/i18n/oc/gen.php +++ b/app/i18n/oc/gen.php @@ -146,7 +146,7 @@ ), 'menu' => array( 'about' => 'A prepaus', - 'account' => 'Account', // TODO - Translation + 'account' => 'Compte', 'admin' => 'Administracion', 'archiving' => 'Archivar', 'authentication' => 'Autentificacion', diff --git a/app/i18n/oc/install.php b/app/i18n/oc/install.php index 1e5dc42f5a8..b5aa605148c 100644 --- a/app/i18n/oc/install.php +++ b/app/i18n/oc/install.php @@ -111,7 +111,7 @@ 'choose' => 'Causissètz la lenga per FreshRSS', 'defined' => 'La lenga es corrèctament definida.', ), - 'missing_applied_migrations' => 'Something went wrong; you should create an empty file %s manually.', // TODO - Translation + 'missing_applied_migrations' => 'Quicòm a trucat ; devètz crear un fichièr %s void manualament.', 'ok' => 'L’installacion s’es corrèctament passada.', 'session' => array( 'nok' => 'Sembla que lo servidor web siá pas corrèctament configurat pels cookies per las sessions PHP !', diff --git a/app/i18n/oc/sub.php b/app/i18n/oc/sub.php index dc058cbfb55..50b605b2502 100644 --- a/app/i18n/oc/sub.php +++ b/app/i18n/oc/sub.php @@ -89,11 +89,11 @@ 'title_add' => 'Ajustar un flux RSS', 'ttl' => 'Actualizar pas automaticament mai sovent que', 'url' => 'Flux URL', - 'useragent' => 'Set the user agent for fetching this feed', // TODO - Translation - 'useragent_help' => 'Example: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:86.0)', // TODO - Translation + 'useragent' => 'Definir un user agent per recuperar aqueste flux', + 'useragent_help' => 'Exemple : Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:86.0)', 'validator' => 'Verificar la validitat del flux', 'website' => 'URL del site', - 'websub' => 'Notificaciones instantáneas amb WebSub', + 'websub' => 'Notificacions instantanèas amb WebSub', ), 'import_export' => array( 'export' => 'Exportar', @@ -132,7 +132,7 @@ 'add_label' => 'Ajustar una etiqueta', 'delete_label' => 'Suprimir una etiqueta', 'feed_management' => 'Gestion dels fluxes RSS', - 'rename_label' => 'Rennomenar una etiqueta', + 'rename_label' => 'Renomenar una etiqueta', 'subscription_tools' => 'Aisinas d’abonament', ), ); From 6660a2dded3995499e466e92e3dd0f503eb3db49 Mon Sep 17 00:00:00 2001 From: Kaibin Yang Date: Tue, 26 Oct 2021 02:26:09 +0800 Subject: [PATCH 0013/2479] Add a reminder for NGINX installations (#3741) (#3934) Update docs/en/admins/03_Installation.md --- docs/en/admins/03_Installation.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/en/admins/03_Installation.md b/docs/en/admins/03_Installation.md index 5ef5c62cde6..e9620091108 100644 --- a/docs/en/admins/03_Installation.md +++ b/docs/en/admins/03_Installation.md @@ -4,7 +4,7 @@ These instructions are intended as general guidelines for installing FreshRSS. Y Before you begin, make sure that you've read the [prerequisites](02_Prerequisites.md) for running FreshRSS. As shorthand, `.` refers to the directory to which your FreshRSS installation lives. -1. If the computer you're running on is not currently running a web server, you'll first need to install and configure a web server, a version of PHP, and an appropriate database, as listed in the prerequisites. [Example Apache and Nginx configuration files can be found here](10_ServerConfig.md). +1. If the computer you're running on is not currently running a web server, you'll first need to install and configure a web server, a version of PHP, and an appropriate database, as listed in the prerequisites. Specially, if you are using NGINX, please keep in mind that FreshRSS needs some specified variables to run properly. So make sure you've checked our configuration file. [Example Apache and Nginx configuration files can be found here](10_ServerConfig.md). 2. Download your chosen version of FreshRSS, or fetch it via git. It's advisable that you put FreshRSS in `/usr/share/`, and symlink the `./p/` folder to the root of your web server.[^1] From 33cac3e6954d13ee95f09f69f89d99e8370daed8 Mon Sep 17 00:00:00 2001 From: maTh Date: Mon, 25 Oct 2021 20:27:42 +0200 Subject: [PATCH 0014/2479] Update manipulate.translation.php (#3936) --- cli/manipulate.translation.php | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/cli/manipulate.translation.php b/cli/manipulate.translation.php index 58cf66e7df8..1e9de4385f3 100755 --- a/cli/manipulate.translation.php +++ b/cli/manipulate.translation.php @@ -119,36 +119,36 @@ function help() { -r revert the action (only for ignore action) -o=LANG select the origin language (only for add language action) -EXEMPLE -Exemple 1: add a language. It adds a new language by duplicating the referential. +EXAMPLES +Example 1: add a language. It adds a new language by duplicating the referential. php %1\$s -a add -l my_lang php %1\$s -a add -l my_lang -o ref_lang -Exemple 2: add a new key. It adds the key for all supported languages. +Example 2: add a new key. It adds the key for all supported languages. php %1\$s -a add -k my_key -v my_value -Exemple 3: add a new value. It adds a new value for the selected key in the selected language. +Example 3: add a new value. It adds a new value for the selected key in the selected language. php %1\$s -a add -k my_key -v my_value -l my_lang -Exemple 4: delete a key. It deletes the selected key from all supported languages. +Example 4: delete a key. It deletes the selected key from all supported languages. php %1\$s -a delete -k my_key -Exemple 5: format i18n files. +Example 5: format i18n files. php %1\$s -a format -Exemple 6: ignore a key. It adds the key in the ignore file to mark it as translated. +Example 6: ignore a key. It adds the key in the ignore file to mark it as translated. php %1\$s -a ignore -k my_key -l my_lang -Exemple 7: revert ignore a key. It removes the key from the ignore file. +Example 7: revert ignore a key. It removes the key from the ignore file. php %1\$s -a ignore -r -k my_key -l my_lang -Exemple 8: ignore all unmodified keys. It adds all modified keys in the ignore file to mark it as translated. +Example 8: ignore all unmodified keys. It adds all modified keys in the ignore file to mark it as translated. php %1\$s -a ignore_unmodified -l my_lang -Exemple 9: revert ignore of all unmodified keys. It removes the unmodified keys from the ignore file. Warning, this will also revert keys added individually. +Example 9: revert ignore of all unmodified keys. It removes the unmodified keys from the ignore file. Warning, this will also revert keys added individually. php %1\$s -a ignore_unmodified -r -l my_lang -Exemple 10: check if a key exist. +Example 10: check if a key exist. php %1\$s -a exist -k my_key\n\n HELP; From ff877e603f7ecdf926e38a920ee465c55e83ead0 Mon Sep 17 00:00:00 2001 From: maTh Date: Mon, 25 Oct 2021 20:29:49 +0200 Subject: [PATCH 0015/2479] Cli: readme: added infos about manipulate.translation.php (#3937) * added: ./cli/manipulate.translation.php + divided in sub sections * headline structure * blank lines added --- cli/README.md | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/cli/README.md b/cli/README.md index ea60fe85143..1f5c3a549fe 100644 --- a/cli/README.md +++ b/cli/README.md @@ -28,6 +28,7 @@ sudo chmod -R g+w ./data/ Options in parenthesis are optional. +### System ```sh cd /usr/share/FreshRSS @@ -46,6 +47,12 @@ cd /usr/share/FreshRSS ./cli/reconfigure.php # Same parameters as for do-install.php. Used to update an existing installation. +``` + +### User + +```sh +cd /usr/share/FreshRSS ./cli/create-user.php --user username [ --password 'password' --api_password 'api_password' --language en --email user@example.net --token 'longRandomString' --no_default_feeds --purge_after_months 3 --feed_min_articles_default 50 --feed_ttl_default 3600 --since_hours_posts_per_rss 168 --max_posts_per_rss 400 ] # --language can be: 'en' (default), 'fr', or one of the [supported languages](../app/i18n/) @@ -84,12 +91,34 @@ cd /usr/share/FreshRSS ./cli/export-opml-for-user.php --user username > /path/to/file.opml.xml ./cli/export-zip-for-user.php --user username [ --max-feed-entries 100 ] > /path/to/file.zip +``` + +### Database + +```sh +cd /usr/share/FreshRSS ./cli/db-optimize.php --user username # Optimize database (reduces the size) for a given user (perform `OPTIMIZE TABLE` in MySQL, `VACUUM` in SQLite) ``` -### Note about cron +### Translation + +```sh +cd /usr/share/FreshRSS + +./cli/manipulate.translation.php --a [-h --a --k --v --l --o] +# manipulate the i18n language files +# -h is to use a human-readable format +# --a selects the action to perform. (can be: add, delete, exist, format, and ignore. +# --k selects the key to work on. +# --v selects the value to set. +# --l selects the language to work on. +# --r revert the action (only for ignore action) +# --o selects the origin language (only for add language action) +``` + +## Note about cron Some commands display information on standard error; cron will send an email with this information every time the command will be executed (exited zero or non-zero). From f3bfe17a39eb797c7e0219606061001535258ea4 Mon Sep 17 00:00:00 2001 From: Gianni Scolaro <40976911+giannidsp@users.noreply.github.com> Date: Mon, 25 Oct 2021 17:38:04 -0400 Subject: [PATCH 0016/2479] Update Italian Translation (#3939) * Update Italian Translation * Update app/i18n/it/admin.php Co-authored-by: Alexandre Alapetite --- app/i18n/it/admin.php | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/app/i18n/it/admin.php b/app/i18n/it/admin.php index 9942c867f49..bf299968646 100644 --- a/app/i18n/it/admin.php +++ b/app/i18n/it/admin.php @@ -66,8 +66,8 @@ 'ok' => 'Estensione JSON presente.', ), 'mbstring' => array( - 'nok' => 'Cannot find the recommended mbstring library for Unicode.', // TODO - Translation - 'ok' => 'You have the recommended mbstring library for Unicode.', // TODO - Translation + 'nok' => 'Non è possibile trovare la libreria mbstring raccomandata per Unicode.', + 'ok' => 'Ha la libreria mbstring raccomandata per Unicode.', ), 'pcre' => array( 'nok' => 'Manca una libreria richiesta per le regular expressions (php-pcre).', @@ -101,23 +101,23 @@ ), ), 'extensions' => array( - 'author' => 'Author', // TODO - Translation - 'community' => 'Available community extensions', // TODO - Translation - 'description' => 'Description', // TODO - Translation + 'author' => 'Autore', + 'community' => 'Estensioni della community disponibili', + 'description' => 'Descrizione', 'disabled' => 'Disabilitata', 'empty_list' => 'Non ci sono estensioni installate', 'enabled' => 'Abilitata', - 'latest' => 'Installed', // TODO - Translation - 'name' => 'Name', // TODO - Translation + 'latest' => 'Installato', + 'name' => 'Nome', 'no_configure_view' => 'Questa estensioni non può essere configurata.', 'system' => array( '_' => 'Estensioni di sistema', 'no_rights' => 'Estensione di sistema (non hai i permessi su questo tipo)', ), 'title' => 'Estensioni', - 'update' => 'Update available', // TODO - Translation + 'update' => 'Aggiornamento disponibile', 'user' => 'Estensioni utente', - 'version' => 'Version', // TODO - Translation + 'version' => 'Versione', ), 'stats' => array( '_' => 'Statistiche', @@ -172,17 +172,17 @@ 'title' => 'Aggiorna sistema', ), 'user' => array( - 'admin' => 'Administrator', // TODO - Translation - 'article_count' => 'Articles', // TODO - Translation + 'admin' => 'Amministratore', + 'article_count' => 'Articoli', 'back_to_manage' => '← Return to user list', // TODO - Translation 'create' => 'Crea nuovo utente', 'database_size' => 'Database size', // TODO - Translation - 'email' => 'Email address', // TODO - Translation + 'email' => 'Indirizzo e-mail', 'enabled' => 'Enabled', // TODO - Translation 'feed_count' => 'Feeds', // TODO - Translation 'is_admin' => 'Is admin', // TODO - Translation 'language' => 'Lingua', - 'last_user_activity' => 'Last user activity', // TODO - Translation + 'last_user_activity' => 'Ultime attività degli utenti', 'list' => 'User list', // TODO - Translation 'number' => ' %d profilo utente creato', 'numbers' => 'Sono presenti %d profili utente', From 9e9a6c3838f13d04c5ca126c4379978fe8f2fa95 Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Mon, 25 Oct 2021 23:41:13 +0200 Subject: [PATCH 0017/2479] GitHub Actions cleaner error output (#3938) Silence irrelevant NPM errors when a test fails. See e.g. https://github.com/FreshRSS/FreshRSS/runs/3999501244?check_suite_focus=true ```text npm ERR! code ELIFECYCLE npm ERR! errno 1 npm ERR! freshrss@ markdownlint: `markdownlint '**/*.md'` npm ERR! Exit status 1 npm ERR! npm ERR! Failed at the freshrss@ markdownlint script. npm ERR! This is probably not a problem with npm. There is likely additional logging output above. npm ERR! A complete log of this run can be found in: npm ERR! /home/runner/.npm/_logs/2021-10-25T16_15_34_166Z-debug.log ``` --- .github/workflows/tests.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 25295ebd143..9b5e9d03ca2 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -58,16 +58,16 @@ jobs: - run: npm install - name: Check JavaScript syntax - run: npm run eslint + run: npm run --silent eslint - name: Check Markdown syntax - run: npm run markdownlint + run: npm run --silent markdownlint - name: Check Right-to-left CSS - run: npm run rtlcss && git diff --exit-code + run: npm run --silent rtlcss && git diff --exit-code - name: Check CSS syntax - run: npm run stylelint + run: npm run --silent stylelint # Shell tests From 6fce5aa77cc9af1f4aee516da7bfaa3c6a53e068 Mon Sep 17 00:00:00 2001 From: Kaibin Yang Date: Wed, 27 Oct 2021 06:24:46 +0800 Subject: [PATCH 0018/2479] Add a reminder for first-time contributors (#3940) > > * Update CONTRIBUTING.md CREDITS.md > > * If there is a file for contributors, why not telling them when they check the guidelines? --- CONTRIBUTING.md | 2 +- CREDITS.md | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 2541eb992b6..b2736b037f8 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -31,7 +31,7 @@ Did you want to fix a bug? To keep a great coordination between collaborators, y 1. Be sure the bug is associated to a ticket and say you work on it. 2. [Fork this project repository](https://help.github.com/articles/fork-a-repo/). 3. [Create a new branch](https://help.github.com/articles/creating-and-deleting-branches-within-your-repository/). The name of the branch must be explicit and being prefixed by the related ticket id. For instance, `783-contributing-file` to fix [ticket #783](https://github.com/FreshRSS/FreshRSS/issues/783). -4. Make your changes to your fork and [send a pull request](https://help.github.com/articles/using-pull-requests/) on the **edge branch**. +4. Make your changes to your fork and [send a pull request](https://help.github.com/articles/using-pull-requests/) on the **edge branch**. Don't forget to add your name to CREDITS.md if you're contributing to FreshRSS for the very first time. If you have to write code, please follow [our coding style recommendations](https://freshrss.github.io/FreshRSS/en/developers/01_First_steps.html). diff --git a/CREDITS.md b/CREDITS.md index 264755c62a9..68f15652aca 100644 --- a/CREDITS.md +++ b/CREDITS.md @@ -64,6 +64,7 @@ People are sorted by name so please keep this order. * [Jules Bertholet](https://github.com/Jules-Bertholet): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:Jules-Bertholet) * [Julien Reichardt](https://github.com/j8r): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:j8r), [Web](https://blog.jrei.ch/) * [Julien-Pierre Avérous](https://github.com/javerous): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:javerous), [Web](https://www.sourcemac.com/) +* [Kaibin Yang](https://github.com/SkyYkb): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:SkyYkb), [Web](https://kaibinyang.com/) * [Kevin Papst](https://github.com/kevinpapst): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:kevinpapst), [Web](http://www.kevinpapst.de/) * [Kiblyn11](https://github.com/Kiblyn11): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:Kiblyn11) * [kinoushe](https://github.com/kinoushe): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:kinoushe) From f0fa3f32021525325a5f7c658d7e787dea2fc799 Mon Sep 17 00:00:00 2001 From: maTh Date: Thu, 28 Oct 2021 01:24:44 +0200 Subject: [PATCH 0019/2479] New shortcut: actualize feeds (#3900) * configs * i18n * improved * Update app/i18n/fr/conf.php Co-authored-by: Alexandre Alapetite * Update p/scripts/main.js Co-authored-by: Alexandre Alapetite * Update main.js * Update conf.php * make fix-all * i18n * i18n * i18n: delete conf.shortcut.actualize * Update app/views/configure/shortcut.phtml --- app/i18n/de/gen.php | 2 +- app/i18n/en-us/gen.php | 2 +- app/i18n/en/gen.php | 2 +- app/i18n/es/gen.php | 2 +- app/i18n/fr/gen.php | 2 +- app/i18n/it/gen.php | 2 +- app/i18n/ja/gen.php | 2 +- app/i18n/nl/gen.php | 2 +- app/i18n/oc/gen.php | 2 +- app/i18n/pl/gen.php | 2 +- app/i18n/pt-br/gen.php | 2 +- app/i18n/ru/gen.php | 2 +- app/i18n/sk/gen.php | 2 +- app/i18n/tr/gen.php | 2 +- app/i18n/zh-cn/gen.php | 2 +- app/views/configure/shortcut.phtml | 8 ++++++++ app/views/helpers/javascript_vars.phtml | 1 + config-user.default.php | 1 + 18 files changed, 25 insertions(+), 15 deletions(-) diff --git a/app/i18n/de/gen.php b/app/i18n/de/gen.php index 19f76cb226f..5b58ceb1d01 100644 --- a/app/i18n/de/gen.php +++ b/app/i18n/de/gen.php @@ -2,7 +2,7 @@ return array( 'action' => array( - 'actualize' => 'Aktualisieren', + 'actualize' => 'Feeds aktualisieren', 'add' => 'Hinzufügen', 'back' => '← Zurück', 'back_to_rss_feeds' => '← Zurück zu Ihren RSS-Feeds gehen', diff --git a/app/i18n/en-us/gen.php b/app/i18n/en-us/gen.php index ccb232ae42c..5d014f1c204 100644 --- a/app/i18n/en-us/gen.php +++ b/app/i18n/en-us/gen.php @@ -2,7 +2,7 @@ return array( 'action' => array( - 'actualize' => 'Update', + 'actualize' => 'Update feeds', 'add' => 'Add', 'back' => '← Go back', 'back_to_rss_feeds' => '← Go back to your RSS feeds', diff --git a/app/i18n/en/gen.php b/app/i18n/en/gen.php index 43d0f17bc9f..cabf2599260 100644 --- a/app/i18n/en/gen.php +++ b/app/i18n/en/gen.php @@ -2,7 +2,7 @@ return array( 'action' => array( - 'actualize' => 'Update', + 'actualize' => 'Update feeds', 'add' => 'Add', 'back' => '← Go back', 'back_to_rss_feeds' => '← Go back to your RSS feeds', diff --git a/app/i18n/es/gen.php b/app/i18n/es/gen.php index ff509e268b8..89c4547a6d3 100755 --- a/app/i18n/es/gen.php +++ b/app/i18n/es/gen.php @@ -2,7 +2,7 @@ return array( 'action' => array( - 'actualize' => 'Actualizar', + 'actualize' => 'Actualizar fuentes', 'add' => 'Añadir', 'back' => '← Volver', 'back_to_rss_feeds' => '← regresar a tus fuentes RSS', diff --git a/app/i18n/fr/gen.php b/app/i18n/fr/gen.php index 164ad60c7a3..5b37c5c5391 100644 --- a/app/i18n/fr/gen.php +++ b/app/i18n/fr/gen.php @@ -2,7 +2,7 @@ return array( 'action' => array( - 'actualize' => 'Actualiser', + 'actualize' => 'Actualiser flux', 'add' => 'Ajouter', 'back' => '← Retour', 'back_to_rss_feeds' => '← Retour à vos flux RSS', diff --git a/app/i18n/it/gen.php b/app/i18n/it/gen.php index da7046cdeb4..03875d4fd79 100644 --- a/app/i18n/it/gen.php +++ b/app/i18n/it/gen.php @@ -2,7 +2,7 @@ return array( 'action' => array( - 'actualize' => 'Aggiorna', + 'actualize' => 'Aggiorna feeds', 'add' => 'Add', // TODO - Translation 'back' => '← Go back', // TODO - Translation 'back_to_rss_feeds' => '← Indietro', diff --git a/app/i18n/ja/gen.php b/app/i18n/ja/gen.php index 65ab2790000..67bfa11a959 100644 --- a/app/i18n/ja/gen.php +++ b/app/i18n/ja/gen.php @@ -2,7 +2,7 @@ return array( 'action' => array( - 'actualize' => '更新', + 'actualize' => 'フィードを更新する', 'add' => '追加', 'back' => '← 戻る', 'back_to_rss_feeds' => '← RSSフィードに戻る', diff --git a/app/i18n/nl/gen.php b/app/i18n/nl/gen.php index 193ff6718dd..8efba05d541 100644 --- a/app/i18n/nl/gen.php +++ b/app/i18n/nl/gen.php @@ -2,7 +2,7 @@ return array( 'action' => array( - 'actualize' => 'Actualiseren', + 'actualize' => 'Feeds actualiseren', 'add' => 'Toevoegen', 'back' => '← Terug', 'back_to_rss_feeds' => '← Ga terug naar je RSS feeds', diff --git a/app/i18n/oc/gen.php b/app/i18n/oc/gen.php index 34072af133c..2ade5386f5f 100644 --- a/app/i18n/oc/gen.php +++ b/app/i18n/oc/gen.php @@ -2,7 +2,7 @@ return array( 'action' => array( - 'actualize' => 'Actualizar', + 'actualize' => 'Actualizar flux', 'add' => 'Ajustar', 'back' => '← Tornar', 'back_to_rss_feeds' => '← Tornar a vòstres fluxes RSS', diff --git a/app/i18n/pl/gen.php b/app/i18n/pl/gen.php index ac5bac35740..62205e98828 100644 --- a/app/i18n/pl/gen.php +++ b/app/i18n/pl/gen.php @@ -2,7 +2,7 @@ return array( 'action' => array( - 'actualize' => 'Aktualizuj', + 'actualize' => 'Aktualizuj kanałów', 'add' => 'Dodaj', 'back' => '← Go back', // TODO - Translation 'back_to_rss_feeds' => '← Wróć do subskrybowanych kanałów RSS', diff --git a/app/i18n/pt-br/gen.php b/app/i18n/pt-br/gen.php index c22530a41a3..4298dc589f9 100644 --- a/app/i18n/pt-br/gen.php +++ b/app/i18n/pt-br/gen.php @@ -2,7 +2,7 @@ return array( 'action' => array( - 'actualize' => 'Atualizar', + 'actualize' => 'Atualizar feeds', 'add' => 'Adicionar', 'back' => '← Voltar', 'back_to_rss_feeds' => '← Volte para o seu feeds RSS', diff --git a/app/i18n/ru/gen.php b/app/i18n/ru/gen.php index be9db39be7d..1802d14334b 100644 --- a/app/i18n/ru/gen.php +++ b/app/i18n/ru/gen.php @@ -2,7 +2,7 @@ return array( 'action' => array( - 'actualize' => 'Актуализировать', + 'actualize' => 'Актуализировать ленту', 'add' => 'Добавить', 'back' => '← Вернуться', 'back_to_rss_feeds' => '← Вернуться к вашим RSS-лентам', diff --git a/app/i18n/sk/gen.php b/app/i18n/sk/gen.php index 69635cbafa0..3517629fae2 100644 --- a/app/i18n/sk/gen.php +++ b/app/i18n/sk/gen.php @@ -2,7 +2,7 @@ return array( 'action' => array( - 'actualize' => 'Aktualizovať', + 'actualize' => 'Aktualizovať kanály', 'add' => 'Add', // TODO - Translation 'back' => '← Go back', // TODO - Translation 'back_to_rss_feeds' => '← Späť na vaše RSS kanály', diff --git a/app/i18n/tr/gen.php b/app/i18n/tr/gen.php index a3cf5bd2ad8..cc00dc63c80 100644 --- a/app/i18n/tr/gen.php +++ b/app/i18n/tr/gen.php @@ -2,7 +2,7 @@ return array( 'action' => array( - 'actualize' => 'Yenile', + 'actualize' => 'Yenile akışlarınız', 'add' => 'Ekle', 'back' => '← Geri dön', 'back_to_rss_feeds' => '← RSS akışlarınız için geri gidin', diff --git a/app/i18n/zh-cn/gen.php b/app/i18n/zh-cn/gen.php index 1a93c966d60..355860c56e9 100644 --- a/app/i18n/zh-cn/gen.php +++ b/app/i18n/zh-cn/gen.php @@ -2,7 +2,7 @@ return array( 'action' => array( - 'actualize' => '获取', + 'actualize' => '更新提要', 'add' => '添加', 'back' => '← 返回', 'back_to_rss_feeds' => '← 返回订阅源', diff --git a/app/views/configure/shortcut.phtml b/app/views/configure/shortcut.phtml index ff94fcf565a..b04689d2a92 100644 --- a/app/views/configure/shortcut.phtml +++ b/app/views/configure/shortcut.phtml @@ -185,6 +185,14 @@
+
+ +
+ +
+
+
diff --git a/app/views/helpers/javascript_vars.phtml b/app/views/helpers/javascript_vars.phtml index 232068da1f9..256b6bf5f21 100644 --- a/app/views/helpers/javascript_vars.phtml +++ b/app/views/helpers/javascript_vars.phtml @@ -23,6 +23,7 @@ echo htmlspecialchars(json_encode(array( 'csrf' => FreshRSS_Auth::csrfToken(), ), 'shortcuts' => array( + 'actualize' => @$s['actualize'], 'mark_read' => @$s['mark_read'], 'mark_favorite' => @$s['mark_favorite'], 'go_website' => @$s['go_website'], diff --git a/config-user.default.php b/config-user.default.php index 8981bbc1a93..d8ef7d10d55 100644 --- a/config-user.default.php +++ b/config-user.default.php @@ -58,6 +58,7 @@ 'theme' => 'Origine', 'content_width' => 'thin', 'shortcuts' => array ( + 'actualize' => 'q', 'mark_read' => 'r', 'mark_favorite' => 'f', 'go_website' => 'space', From 8161ab675a61abe7a25ba24a349a31ec2a3e49d1 Mon Sep 17 00:00:00 2001 From: nanhualyq Date: Sat, 30 Oct 2021 16:28:00 +0800 Subject: [PATCH 0020/2479] Update i18n/zh-cn (#3947) * Update i18n/zh-cn * Update gen.php * Update conf.php --- app/i18n/zh-cn/conf.php | 8 ++++---- app/i18n/zh-cn/gen.php | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/app/i18n/zh-cn/conf.php b/app/i18n/zh-cn/conf.php index a45a96b733a..ca2446bd69f 100644 --- a/app/i18n/zh-cn/conf.php +++ b/app/i18n/zh-cn/conf.php @@ -29,7 +29,7 @@ 'publication_date' => '更新日期', 'related_tags' => '相关标签', 'sharing' => '分享', - 'summary' => 'Summary', // TODO - Translation + 'summary' => '摘要', 'top_line' => '顶栏', ), 'language' => '语言', @@ -39,7 +39,7 @@ ), 'show_nav_buttons' => '显示导航按钮', 'theme' => '主题', - 'theme_not_available' => 'The “%s” theme is not available anymore. Please choose another theme.', // TODO - Translation + 'theme_not_available' => '“%s” 主题不再可用,请选择其他主题。', 'thumbnail' => array( 'label' => 'Thumbnail', // TODO - Translation 'landscape' => 'Landscape', // TODO - Translation @@ -128,7 +128,7 @@ 'read' => array( 'article_open_on_website' => '在打开原文章后', 'article_viewed' => '在文章被浏览后', - 'keep_max_n_unread' => 'Max number of articles to keep unread', // TODO - Translation + 'keep_max_n_unread' => '在超过N条后', 'scroll' => '在滚动浏览后', 'upon_reception' => '在接收文章后', 'when' => '何时将文章标记为已读', @@ -198,7 +198,7 @@ 'navigation_help' => '组合 ⇧ Shift 键,浏览快捷键将生效于订阅源。
组合 Alt ⎇ 键,浏览快捷键将生效于分类。', 'navigation_no_mod_help' => '以下快捷键不支持组合键(Shift 或 Alt)', 'next_article' => '打开下一篇文章', - 'next_unread_article' => 'Open the next unread article', // TODO - Translation + 'next_unread_article' => '打开下一篇未读文章', 'non_standard' => '这些键 (%s) 可能不能作为快捷键', 'normal_view' => '切换到普通视图', 'other_action' => '其他操作', diff --git a/app/i18n/zh-cn/gen.php b/app/i18n/zh-cn/gen.php index 355860c56e9..210d3f72b46 100644 --- a/app/i18n/zh-cn/gen.php +++ b/app/i18n/zh-cn/gen.php @@ -146,7 +146,7 @@ ), 'menu' => array( 'about' => '关于', - 'account' => 'Account', // TODO - Translation + 'account' => '账户', 'admin' => '管理', 'archiving' => '归档', 'authentication' => '认证', From 9326e419e3b90b2db4b6a8531503b710605ac6d4 Mon Sep 17 00:00:00 2001 From: maTh Date: Sat, 30 Oct 2021 18:45:05 +0200 Subject: [PATCH 0021/2479] fix typo (#3949) --- p/scripts/category.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/p/scripts/category.js b/p/scripts/category.js index e75c04571a0..cb8616b9722 100644 --- a/p/scripts/category.js +++ b/p/scripts/category.js @@ -74,7 +74,7 @@ function init_draggable() { } }; - dropSection.onddragleave = function (ev) { + dropSection.ondragleave = function (ev) { const li = ev.target.closest ? ev.target.closest(dropzone) : null; if (li) { const scroll_top = document.documentElement.scrollTop; From 530aa0bb3a445d445acb718628732ebea11fb914 Mon Sep 17 00:00:00 2001 From: maTh Date: Tue, 2 Nov 2021 23:45:38 +0100 Subject: [PATCH 0022/2479] fix main.js (#3956) --- p/scripts/main.js | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/p/scripts/main.js b/p/scripts/main.js index e52b945a1d6..872edcf5246 100644 --- a/p/scripts/main.js +++ b/p/scripts/main.js @@ -857,6 +857,13 @@ function init_shortcuts() { return false; } } + if (k === s.actualize) { + const btn = document.getElementById('actualize'); + if (btn) { + btn.click(); + } + return false; + } if (k === s.next_entry) { if (ev.altKey) { next_category(); From 0d31f89dd8519325ef8ed6efbe77eed4c452f62c Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Tue, 2 Nov 2021 23:46:26 +0100 Subject: [PATCH 0023/2479] Remove remains of Travis (#3941) * Remove remains of Travis Follow-up of https://github.com/FreshRSS/FreshRSS/pull/3920 * Update docs/en/developers/03_Running_tests.md Co-authored-by: Frans de Jonge * Apply suggestions from code review Co-authored-by: Frans de Jonge Co-authored-by: Alexis Degrugillier --- README.fr.md | 1 - README.md | 4 ---- docs/en/developers/03_Running_tests.md | 8 +++++--- docs/fr/developers/03_Running_tests.md | 12 +++++------- 4 files changed, 10 insertions(+), 15 deletions(-) diff --git a/README.fr.md b/README.fr.md index 6fefffdf032..1ffe67af69d 100644 --- a/README.fr.md +++ b/README.fr.md @@ -1,4 +1,3 @@ -[![Statut de la compilation](https://travis-ci.org/FreshRSS/FreshRSS.svg)](https://travis-ci.org/FreshRSS/FreshRSS) [![Dons Liberapay](https://img.shields.io/liberapay/receives/FreshRSS.svg?logo=liberapay)](https://liberapay.com/FreshRSS/donate) * Lire ce document sur [github.com/FreshRSS/FreshRSS/](https://github.com/FreshRSS/FreshRSS/blob/edge/README.md) pour avoir les images et liens corrects. diff --git a/README.md b/README.md index 5c754021292..ed66bb79b21 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,3 @@ -[![Build Status][travis-badge]][travis-link] [![Liberapay donations](https://img.shields.io/liberapay/receives/FreshRSS.svg?logo=liberapay)](https://liberapay.com/FreshRSS/donate) * Read this document on [github.com/FreshRSS/FreshRSS/](https://github.com/FreshRSS/FreshRSS/blob/edge/README.md) to get the correct links and pictures. @@ -144,6 +143,3 @@ and [Fever API](https://freshrss.github.io/FreshRSS/en/users/06_Fever_API.html) * [bcrypt.js](https://github.com/dcodeIO/bcrypt.js) * [phpQuery](https://github.com/phpquery/phpquery) - -[travis-badge]:https://travis-ci.org/FreshRSS/FreshRSS.svg?branch=edge -[travis-link]:https://travis-ci.org/FreshRSS/FreshRSS diff --git a/docs/en/developers/03_Running_tests.md b/docs/en/developers/03_Running_tests.md index 24d80fe9a8a..b20f389851e 100644 --- a/docs/en/developers/03_Running_tests.md +++ b/docs/en/developers/03_Running_tests.md @@ -27,8 +27,10 @@ make lint-fix # or, to fix the errors detected by the linter Similarly to PHPUnit, it downloads a [PHP\_CodeSniffer](https://github.com/squizlabs/PHP_CodeSniffer) binary (i.e. `phpcs` or `phpcbf` depending on the command) and verifies its checksum. -## Travis +## GitHub Actions for Continuous Integration -Tests are automatically run when you open a pull request on GitHub. It is done with [Travis CI](https://travis-ci.org/FreshRSS/FreshRSS/). This is done to ensure there is no regressions in your code. We cannot merge a PR if the tests fail so we'll ask you to fix bugs before to review your code. +Tests are automatically run when you open a pull request on GitHub. +They are performed with [GitHub Actions](https://github.com/FreshRSS/FreshRSS/actions). +This ensures your code will not introduce some kind of regression. We will not merge a PR if tests fail so we will ask you to fix any bugs before reviewing your code. -If you're interested in, you can take a look at [the configuration file](https://github.com/FreshRSS/FreshRSS/blob/edge/.travis.yml). +If you are interested, you can take a look at [the configuration file](https://github.com/FreshRSS/FreshRSS/blob/edge/.github/workflows/tests.yml). diff --git a/docs/fr/developers/03_Running_tests.md b/docs/fr/developers/03_Running_tests.md index 90a4b72ef2d..6b465008a29 100644 --- a/docs/fr/developers/03_Running_tests.md +++ b/docs/fr/developers/03_Running_tests.md @@ -24,12 +24,10 @@ you can run the command directly with: NO_DOCKER=true make test ``` -## Travis +## Intégration continue avec GitHub Actions -Tests are automatically run when you open a pull request on GitHub. It is -done with [Travis CI](https://travis-ci.org/FreshRSS/FreshRSS/). This is -done to ensure there is no regressions in your code. We cannot merge a PR if -the tests fail so we'll ask you to fix bugs before to review your code. +Les tests sont lancés automatiquement dès que vous ouvrez une « pull request » sur GitHub. +Ceux-ci sont lancés grace aux « [GitHub Actions](https://github.com/FreshRSS/FreshRSS/actions) ». +Cette action est nécessaire pour s'assurer qu'aucune régression ne soit introduite dans le code. Nous n'accepterons aucune PR si les tests ne sont pas valides, nous vous demanderons donc de corriger tout ce qui doit l'être avant de commencer à relire votre code. -If you're interested in, you can take a look at [the configuration -file](https://github.com/FreshRSS/FreshRSS/blob/edge/.travis.yml). +Si cela vous intéresse, vous pouvez étudier [le fichier de configuration](https://github.com/FreshRSS/FreshRSS/blob/edge/.github/workflows/tests.yml). From 387343a0e176062701d98b69fc1c44cff01e2e99 Mon Sep 17 00:00:00 2001 From: maTh Date: Thu, 4 Nov 2021 22:22:39 +0100 Subject: [PATCH 0024/2479] fixed: Shortcuts in "Anonym. Mode" broken (#3897) (#3945) * fix * improved delayClick() * Do not send empty mark as read request Co-authored-by: Alexandre Alapetite --- p/scripts/main.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/p/scripts/main.js b/p/scripts/main.js index 872edcf5246..faf8650fd24 100644 --- a/p/scripts/main.js +++ b/p/scripts/main.js @@ -201,6 +201,12 @@ const pending_entries = {}; let mark_read_queue = []; function send_mark_read_queue(queue, asRead, callback) { + if (!queue || queue.length === 0) { + if (callback) { + callback(); + } + return; + } const req = new XMLHttpRequest(); req.open('POST', '.?c=entry&a=read' + (asRead ? '' : '&is_read=0'), true); req.responseType = 'json'; From 9eb08d6a61412d944dce06578e6c87f468a70cfa Mon Sep 17 00:00:00 2001 From: nanhualyq Date: Mon, 8 Nov 2021 03:55:49 +0800 Subject: [PATCH 0025/2479] Update i18n/zh-cn (#3963) * Update i18n/zh-cn * Update gen.php * Update conf.php * Update conf.php * Update conf.php --- app/i18n/zh-cn/conf.php | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/app/i18n/zh-cn/conf.php b/app/i18n/zh-cn/conf.php index ca2446bd69f..4943f3d6fc6 100644 --- a/app/i18n/zh-cn/conf.php +++ b/app/i18n/zh-cn/conf.php @@ -41,11 +41,11 @@ 'theme' => '主题', 'theme_not_available' => '“%s” 主题不再可用,请选择其他主题。', 'thumbnail' => array( - 'label' => 'Thumbnail', // TODO - Translation - 'landscape' => 'Landscape', // TODO - Translation - 'none' => 'None', // TODO - Translation - 'portrait' => 'Portrait', // TODO - Translation - 'square' => 'Square', // TODO - Translation + 'label' => '缩略图', + 'landscape' => '风景', + 'none' => '无', + 'portrait' => '肖像', + 'square' => '方块', ), 'title' => '显示', 'width' => array( @@ -128,11 +128,11 @@ 'read' => array( 'article_open_on_website' => '在打开原文章后', 'article_viewed' => '在文章被浏览后', - 'keep_max_n_unread' => '在超过N条后', + 'keep_max_n_unread' => '未读最多保留 n 条', 'scroll' => '在滚动浏览后', 'upon_reception' => '在接收文章后', 'when' => '何时将文章标记为已读', - 'when_same_title' => 'if an identical title already exists in the top n newest articles', // TODO - Translation + 'when_same_title' => '已存在 n 条相同标题文章', ), 'show' => array( '_' => '文章显示', @@ -204,7 +204,7 @@ 'other_action' => '其他操作', 'previous_article' => '打开上一篇文章', 'reading_view' => '切换到阅读视图', - 'rss_view' => 'Open as RSS feed', // TODO - Translation + 'rss_view' => '切换到 RSS 视图', 'see_on_website' => '在原网站中查看', 'shift_for_all_read' => '组合 Alt ⎇键 将上方的文章标记为已读
组合 ⇧ Shift按键 可以将全部文章设为已读', 'skip_next_article' => '跳转到下一篇文章而不打开', From 181a54289ad4b2e05003ceb9b3f71f2adef4143d Mon Sep 17 00:00:00 2001 From: maTh Date: Mon, 8 Nov 2021 22:37:29 +0100 Subject: [PATCH 0026/2479] Update details.phtml (#3966) --- app/views/user/details.phtml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/user/details.phtml b/app/views/user/details.phtml index 6d55bb811d7..e6271704c4d 100644 --- a/app/views/user/details.phtml +++ b/app/views/user/details.phtml @@ -59,7 +59,7 @@

From 26afec23794c251ff86b3ff51140c4bc992e1d89 Mon Sep 17 00:00:00 2001 From: maTh Date: Thu, 11 Nov 2021 19:57:05 +0100 Subject: [PATCH 0027/2479] Fix label management (#3959) * disable inputs * fix create empty tags * Update app/Controllers/tagController.php Co-authored-by: Alexandre Alapetite * Update app/views/tag/index.phtml Co-authored-by: Alexandre Alapetite * Small additional checks Co-authored-by: Alexandre Alapetite --- app/Controllers/tagController.php | 14 ++++++++++---- app/views/tag/index.phtml | 17 +++++++++++++---- 2 files changed, 23 insertions(+), 8 deletions(-) diff --git a/app/Controllers/tagController.php b/app/Controllers/tagController.php index 4f3fe9bf94d..0a57c0df267 100644 --- a/app/Controllers/tagController.php +++ b/app/Controllers/tagController.php @@ -90,7 +90,7 @@ public function addAction() { $name = Minz_Request::param('name'); $tagDAO = FreshRSS_Factory::createTagDao(); - if (null === $tagDAO->searchByName($name)) { + if (strlen($name) > 0 && null === $tagDAO->searchByName($name)) { $tagDAO->addTag(['name' => $name]); Minz_Request::good(_t('feedback.tag.created', $name), ['c' => 'tag', 'a' => 'index'], true); } @@ -106,13 +106,19 @@ public function renameAction() { $targetName = Minz_Request::param('name'); $sourceId = Minz_Request::param('id_tag'); - $tagDAO = FreshRSS_Factory::createTagDao(); + if ($targetName == '' || $sourceId == '') { + return Minz_Error::error(400); + } - $sourceName = $tagDAO->searchById($sourceId)->name(); + $tagDAO = FreshRSS_Factory::createTagDao(); + $sourceTag = $tagDAO->searchById($sourceId); + $sourceName = $sourceTag == null ? null : $sourceTag->name(); $targetTag = $tagDAO->searchByName($targetName); - if (null === $targetTag) { + if ($targetTag == null) { + // There is no existing tag with the same target name $tagDAO->updateTag($sourceId, ['name' => $targetName]); } else { + // There is an existing tag with the same target name $tagDAO->updateEntryTag($sourceId, $targetTag->id()); $tagDAO->deleteTag($sourceId); } diff --git a/app/views/tag/index.phtml b/app/views/tag/index.phtml index 55db61b6779..eb6eefdb11a 100644 --- a/app/views/tag/index.phtml +++ b/app/views/tag/index.phtml @@ -13,7 +13,7 @@
- +
@@ -25,12 +25,17 @@

+ tags) < 1) { + $disabled = ' disabled="disabled"'; + } ?>
- > tags as $tag): ?> @@ -40,13 +45,15 @@
- + />
+ +
@@ -57,7 +64,7 @@
- > tags as $tag): ?> @@ -67,7 +74,9 @@
+ +
From 079b7b961f0eb152debc2e8df3ff99d6e59fe070 Mon Sep 17 00:00:00 2001 From: maTh Date: Thu, 11 Nov 2021 20:01:28 +0100 Subject: [PATCH 0028/2479] Improve install routine: database password input with "show password" button (#3962) * wip * CSS better btn * CSS: RTL * button is better than a * improved CSS for button --- app/install.php | 19 +++++++++++-------- p/themes/Origine/origine.css | 13 ++++++++++--- p/themes/Origine/origine.rtl.css | 13 ++++++++++--- 3 files changed, 31 insertions(+), 14 deletions(-) diff --git a/app/install.php b/app/install.php index e42e789f542..cd2845fd27e 100644 --- a/app/install.php +++ b/app/install.php @@ -503,8 +503,11 @@ function printStep2() {
- +
+ + +
@@ -512,7 +515,7 @@ function printStep2() {
+ isset($_SESSION['bd_base']) ? $_SESSION['bd_base'] : '' ?>" tabindex="6" />
@@ -520,17 +523,17 @@ function printStep2() {
+ isset($_SESSION['bd_prefix']) ? $_SESSION['bd_prefix'] : $system_default_config->db['prefix'] ?>" tabindex="7" />
- - + + - +
@@ -585,7 +588,7 @@ function no_auth($auth_type) {
tabindex="5" /> - +

diff --git a/p/themes/Origine/origine.css b/p/themes/Origine/origine.css index 1021f47c6e7..31b9cc4fd29 100644 --- a/p/themes/Origine/origine.css +++ b/p/themes/Origine/origine.css @@ -47,10 +47,11 @@ option { padding: 0 .5em; } -input:focus, select:focus, textarea:focus { +input:focus, select:focus, textarea:focus, input[type="password"]:focus + .toggle-password { color: #0062be; border-color: #3bf; box-shadow: 0 2px 2px #ddf inset; + outline: none; } input:invalid, select:invalid { @@ -114,11 +115,17 @@ form th { padding: 0; } -.form-group .group-controls input, -.form-group .group-controls select { +.form-group .group-controls > input, +.form-group .group-controls > select, +.form-group .group-controls .stick { margin: -5px 0; } +.form-group .group-controls .stick .btn { + padding-top: 2px; + padding-bottom: 2px; +} + /*=== Buttons */ .stick { vertical-align: middle; diff --git a/p/themes/Origine/origine.rtl.css b/p/themes/Origine/origine.rtl.css index 7649c8ed422..da0837a27ee 100644 --- a/p/themes/Origine/origine.rtl.css +++ b/p/themes/Origine/origine.rtl.css @@ -47,10 +47,11 @@ option { padding: 0 .5em; } -input:focus, select:focus, textarea:focus { +input:focus, select:focus, textarea:focus, input[type="password"]:focus + .toggle-password { color: #0062be; border-color: #3bf; box-shadow: 0 2px 2px #ddf inset; + outline: none; } input:invalid, select:invalid { @@ -114,11 +115,17 @@ form th { padding: 0; } -.form-group .group-controls input, -.form-group .group-controls select { +.form-group .group-controls > input, +.form-group .group-controls > select, +.form-group .group-controls .stick { margin: -5px 0; } +.form-group .group-controls .stick .btn { + padding-top: 2px; + padding-bottom: 2px; +} + /*=== Buttons */ .stick { vertical-align: middle; From a29894610ba5021a998389e2d72b0756b564574a Mon Sep 17 00:00:00 2001 From: maTh Date: Thu, 11 Nov 2021 20:07:10 +0100 Subject: [PATCH 0029/2479] a to button (#3969) --- app/views/auth/formLogin.phtml | 2 +- app/views/auth/register.phtml | 2 +- app/views/feed/add.phtml | 2 +- app/views/helpers/feed/update.phtml | 2 +- app/views/subscription/add.phtml | 2 +- app/views/user/manage.phtml | 2 +- app/views/user/profile.phtml | 7 +++++-- 7 files changed, 11 insertions(+), 8 deletions(-) diff --git a/app/views/auth/formLogin.phtml b/app/views/auth/formLogin.phtml index 0f3910a3c91..05a73f39e9d 100644 --- a/app/views/auth/formLogin.phtml +++ b/app/views/auth/formLogin.phtml @@ -18,7 +18,7 @@
- +
diff --git a/app/views/auth/register.phtml b/app/views/auth/register.phtml index 96794d8b2ed..3300896e600 100644 --- a/app/views/auth/register.phtml +++ b/app/views/auth/register.phtml @@ -34,7 +34,7 @@
- +

diff --git a/app/views/feed/add.phtml b/app/views/feed/add.phtml index a585fcedcfe..2c9c13345a7 100644 --- a/app/views/feed/add.phtml +++ b/app/views/feed/add.phtml @@ -76,7 +76,7 @@
- +
diff --git a/app/views/helpers/feed/update.phtml b/app/views/helpers/feed/update.phtml index 50a9ac9ccba..703de3202da 100644 --- a/app/views/helpers/feed/update.phtml +++ b/app/views/helpers/feed/update.phtml @@ -143,7 +143,7 @@
- +
diff --git a/app/views/subscription/add.phtml b/app/views/subscription/add.phtml index 72abbeb3052..04add0b4f77 100644 --- a/app/views/subscription/add.phtml +++ b/app/views/subscription/add.phtml @@ -65,7 +65,7 @@
- +
diff --git a/app/views/user/manage.phtml b/app/views/user/manage.phtml index 0c796b63f54..3da4cf2998b 100644 --- a/app/views/user/manage.phtml +++ b/app/views/user/manage.phtml @@ -60,7 +60,7 @@
- +

diff --git a/app/views/user/profile.phtml b/app/views/user/profile.phtml index 7a4beb679aa..a7f38e69db6 100644 --- a/app/views/user/profile.phtml +++ b/app/views/user/profile.phtml @@ -44,7 +44,7 @@
/> - +

@@ -84,7 +84,7 @@
/> - +

@@ -109,7 +109,10 @@
+
+ +

From 1ae5a5af147bca616497a53e94805362add21807 Mon Sep 17 00:00:00 2001 From: maTh Date: Fri, 12 Nov 2021 08:57:36 +0100 Subject: [PATCH 0030/2479] Improve mobile view: access to the config menu (#3881) * wip * improve the header * Fix theme "Adark" * fixed theme: Ansum * Fixed theme: BlueLagoon * fixed Ansum after PR comment of Frenzie * Fixed theme: Dark * fixed theme: Flat * fixed theme: Mapco * fixed theme: Origine compact * fixed theme: Pafat * fixed theme: Screwdriver * fixed theme: Swage * hide the close button in wide view * fixed base/template RTL * fixed SCSS of theme Swage * stylelint fix * fixed theme Swage * make fix-all Co-authored-by: Alexandre Alapetite --- app/layout/header.phtml | 17 +----- p/themes/Alternative-Dark/adark.css | 3 +- p/themes/Alternative-Dark/adark.rtl.css | 3 +- p/themes/Ansum/_mobile.scss | 15 ++--- p/themes/Ansum/ansum.css | 12 ++-- p/themes/Ansum/ansum.rtl.css | 12 ++-- p/themes/BlueLagoon/BlueLagoon.css | 16 ++---- p/themes/BlueLagoon/BlueLagoon.rtl.css | 16 ++---- p/themes/Dark/dark.css | 8 +-- p/themes/Dark/dark.rtl.css | 8 +-- p/themes/Flat/flat.css | 4 +- p/themes/Flat/flat.rtl.css | 4 +- p/themes/Mapco/_mobile.scss | 14 ++--- p/themes/Mapco/mapco.css | 14 ++--- p/themes/Mapco/mapco.rtl.css | 14 ++--- p/themes/Origine-compact/origine-compact.css | 3 +- .../Origine-compact/origine-compact.rtl.css | 3 +- p/themes/Origine/origine.css | 8 +-- p/themes/Origine/origine.rtl.css | 8 +-- p/themes/Pafat/pafat.css | 4 +- p/themes/Pafat/pafat.rtl.css | 4 +- p/themes/Screwdriver/screwdriver.css | 7 +-- p/themes/Screwdriver/screwdriver.rtl.css | 7 +-- p/themes/Swage/swage.css | 45 ++++++++------- p/themes/Swage/swage.rtl.css | 43 +++++++++------ p/themes/Swage/swage.scss | 55 ++++++++++++------- p/themes/base-theme/template.css | 51 ++++++++++++++--- p/themes/base-theme/template.rtl.css | 51 ++++++++++++++--- 28 files changed, 250 insertions(+), 199 deletions(-) diff --git a/app/layout/header.phtml b/app/layout/header.phtml index 2c92b9a5ccb..e872a5918ef 100644 --- a/app/layout/header.phtml +++ b/app/layout/header.phtml @@ -1,17 +1,3 @@ - -
@@ -52,7 +38,8 @@ if (FreshRSS_Auth::accessNeedsAction()) { +

@@ -39,4 +39,4 @@

-
+ diff --git a/app/views/auth/index.phtml b/app/views/auth/index.phtml index 0c7b0a816ce..9c9cd1eaacc 100644 --- a/app/views/auth/index.phtml +++ b/app/views/auth/index.phtml @@ -1,6 +1,6 @@ partial('aside_configure'); ?> -
+
@@ -77,4 +77,4 @@
- + diff --git a/app/views/auth/register.phtml b/app/views/auth/register.phtml index 3300896e600..7eb2af12f7d 100644 --- a/app/views/auth/register.phtml +++ b/app/views/auth/register.phtml @@ -1,4 +1,4 @@ -
+

@@ -66,4 +66,4 @@

-
+ diff --git a/app/views/configure/archiving.phtml b/app/views/configure/archiving.phtml index 88b980cd475..fd56c8dde42 100644 --- a/app/views/configure/archiving.phtml +++ b/app/views/configure/archiving.phtml @@ -1,6 +1,6 @@ partial('aside_configure'); ?> -
+
@@ -162,4 +162,4 @@
- + diff --git a/app/views/configure/display.phtml b/app/views/configure/display.phtml index 1ce4be5cddf..96f93a27f4c 100644 --- a/app/views/configure/display.phtml +++ b/app/views/configure/display.phtml @@ -1,6 +1,6 @@ partial('aside_configure'); ?> -
+
@@ -209,4 +209,4 @@
- + diff --git a/app/views/configure/integration.phtml b/app/views/configure/integration.phtml index 02a0b6f3219..9bd7257ee2a 100644 --- a/app/views/configure/integration.phtml +++ b/app/views/configure/integration.phtml @@ -1,6 +1,6 @@ partial('aside_configure'); ?> -
+
@@ -77,4 +77,4 @@
- + diff --git a/app/views/configure/queries.phtml b/app/views/configure/queries.phtml index 2939e068b39..6de60663940 100644 --- a/app/views/configure/queries.phtml +++ b/app/views/configure/queries.phtml @@ -1,6 +1,6 @@ partial('aside_configure'); ?> -
+
@@ -56,16 +56,17 @@
- -displaySlider ? ' class="active"' : ''; ?> -> - - -
> -query)) { - $this->renderHelper('configure/query'); - } -?> -
+ displaySlider ? ' class="active"' : ''; ?> + > + + +
> + query)) { + $this->renderHelper('configure/query'); + } + ?> +
+ + diff --git a/app/views/configure/reading.phtml b/app/views/configure/reading.phtml index e19a14067c0..da4e104a485 100644 --- a/app/views/configure/reading.phtml +++ b/app/views/configure/reading.phtml @@ -1,6 +1,6 @@ partial('aside_configure'); ?> -
+
@@ -256,4 +256,4 @@
- + diff --git a/app/views/configure/shortcut.phtml b/app/views/configure/shortcut.phtml index b04689d2a92..ee671740e01 100644 --- a/app/views/configure/shortcut.phtml +++ b/app/views/configure/shortcut.phtml @@ -1,6 +1,6 @@ partial('aside_configure'); ?> -
+
@@ -243,4 +243,4 @@
- + diff --git a/app/views/configure/system.phtml b/app/views/configure/system.phtml index 251ffa03ad6..fa9e11ce2b7 100644 --- a/app/views/configure/system.phtml +++ b/app/views/configure/system.phtml @@ -1,6 +1,6 @@ partial('aside_configure'); ?> -
+
@@ -92,4 +92,4 @@
- + diff --git a/app/views/error/index.phtml b/app/views/error/index.phtml index 7ef2219dc45..98473cc83ae 100644 --- a/app/views/error/index.phtml +++ b/app/views/error/index.phtml @@ -1,4 +1,4 @@ -
+

code ?>

@@ -12,4 +12,4 @@

-
+ diff --git a/app/views/extension/index.phtml b/app/views/extension/index.phtml index cd5ccec48e5..b9ae7a92c12 100644 --- a/app/views/extension/index.phtml +++ b/app/views/extension/index.phtml @@ -1,6 +1,6 @@ partial('aside_configure'); ?> -
+
@@ -66,14 +66,17 @@
- -extension) ? ' class="active"' : ''; ?> -> -
> -extension)) { - $this->renderHelper('extension/configure'); - } -?> -
+ extension) ? ' class="active"' : ''; ?> + > + + +
> + extension)) { + $this->renderHelper('extension/configure'); + } + ?> +
+ + diff --git a/app/views/feed/add.phtml b/app/views/feed/add.phtml index 2c9c13345a7..55cfe084560 100644 --- a/app/views/feed/add.phtml +++ b/app/views/feed/add.phtml @@ -1,5 +1,5 @@ feed) { ?> -
+

load_ok) { ?> @@ -88,5 +88,5 @@
- + diff --git a/app/views/importExport/index.phtml b/app/views/importExport/index.phtml index 9e852996f52..69e10ea272b 100644 --- a/app/views/importExport/index.phtml +++ b/app/views/importExport/index.phtml @@ -1,6 +1,6 @@ partial('aside_subscription'); ?> -
+
@@ -69,4 +69,4 @@
- + diff --git a/app/views/index/about.phtml b/app/views/index/about.phtml index fedf6ff0be3..cd8cfcade94 100644 --- a/app/views/index/about.phtml +++ b/app/views/index/about.phtml @@ -2,7 +2,7 @@ partial('aside_configure'); ?> -
+
+
diff --git a/app/views/index/logs.phtml b/app/views/index/logs.phtml index c2b940e5ce9..bcdc5b07398 100644 --- a/app/views/index/logs.phtml +++ b/app/views/index/logs.phtml @@ -1,4 +1,4 @@ -
+
@@ -27,4 +27,4 @@

-
+ diff --git a/app/views/index/tos.phtml b/app/views/index/tos.phtml index 38dd0add637..f8240ed29f7 100644 --- a/app/views/index/tos.phtml +++ b/app/views/index/tos.phtml @@ -1,4 +1,4 @@ -
+
can_register) { ?> @@ -10,4 +10,4 @@ terms_of_service ?> -
+ diff --git a/app/views/stats/idle.phtml b/app/views/stats/idle.phtml index a8dea1a6f3c..8efaef5e958 100644 --- a/app/views/stats/idle.phtml +++ b/app/views/stats/idle.phtml @@ -1,6 +1,6 @@ partial('aside_subscription'); ?> -
+
@@ -50,4 +50,4 @@

-
+ diff --git a/app/views/stats/index.phtml b/app/views/stats/index.phtml index dff20041d34..26e3f0dbcf1 100644 --- a/app/views/stats/index.phtml +++ b/app/views/stats/index.phtml @@ -1,6 +1,6 @@ partial('aside_subscription'); ?> -
+
@@ -118,6 +118,6 @@
- + diff --git a/app/views/stats/repartition.phtml b/app/views/stats/repartition.phtml index 2cf65b3fb58..86cc1b6bc8a 100644 --- a/app/views/stats/repartition.phtml +++ b/app/views/stats/repartition.phtml @@ -1,6 +1,6 @@ partial('aside_subscription'); ?> -
+
@@ -102,6 +102,6 @@
- + diff --git a/app/views/subscription/add.phtml b/app/views/subscription/add.phtml index 04add0b4f77..5eff9c5d130 100644 --- a/app/views/subscription/add.phtml +++ b/app/views/subscription/add.phtml @@ -1,6 +1,6 @@ partial('aside_subscription'); ?> -
+
@@ -123,4 +123,4 @@
- + diff --git a/app/views/subscription/bookmarklet.phtml b/app/views/subscription/bookmarklet.phtml index 8d00a29b5e9..90c349c0b1f 100644 --- a/app/views/subscription/bookmarklet.phtml +++ b/app/views/subscription/bookmarklet.phtml @@ -1,6 +1,6 @@ partial('aside_subscription'); ?> -
+
@@ -15,4 +15,4 @@

'feed', 'a' => 'add'), 'html', true) ?>&url_rss=%s -
\ No newline at end of file + diff --git a/app/views/subscription/index.phtml b/app/views/subscription/index.phtml index fe28ae45d07..a8bc9ae270d 100644 --- a/app/views/subscription/index.phtml +++ b/app/views/subscription/index.phtml @@ -1,6 +1,6 @@ partial('aside_subscription'); ?> -
+
@@ -73,18 +73,18 @@
- + displaySlider ? ' class="active"' : ''; ?> + > + + +
> + feed)) { + $this->renderHelper('feed/update'); + } elseif (isset($this->category)) { + $this->renderHelper('category/update'); + } + ?> +
-displaySlider ? ' class="active"' : ''; ?> -> - - -
> -feed)) { - $this->renderHelper('feed/update'); - } elseif (isset($this->category)) { - $this->renderHelper('category/update'); - } -?> -
+ diff --git a/app/views/tag/index.phtml b/app/views/tag/index.phtml index eb6eefdb11a..e538f96e26a 100644 --- a/app/views/tag/index.phtml +++ b/app/views/tag/index.phtml @@ -1,6 +1,6 @@ partial('aside_subscription'); ?> -
+
@@ -80,4 +80,4 @@
- + diff --git a/app/views/update/apply.phtml b/app/views/update/apply.phtml index b52a31c5b51..b96b3f07f07 100644 --- a/app/views/update/apply.phtml +++ b/app/views/update/apply.phtml @@ -1,6 +1,6 @@ partial('aside_configure'); ?> -
+
@@ -8,4 +8,4 @@

-
+ diff --git a/app/views/update/checkInstall.phtml b/app/views/update/checkInstall.phtml index 8bca4cace3b..0e324de4a97 100644 --- a/app/views/update/checkInstall.phtml +++ b/app/views/update/checkInstall.phtml @@ -1,6 +1,6 @@ partial('aside_configure'); ?> -
+
@@ -38,4 +38,4 @@ */ ?> -
+ diff --git a/app/views/update/index.phtml b/app/views/update/index.phtml index 1d5c2f5cb9a..359e35bea19 100644 --- a/app/views/update/index.phtml +++ b/app/views/update/index.phtml @@ -1,6 +1,6 @@ partial('aside_configure'); ?> -
+
@@ -47,4 +47,4 @@ update_to_apply) { ?> -
+ diff --git a/app/views/user/details.phtml b/app/views/user/details.phtml index e6271704c4d..6de1a6097bc 100644 --- a/app/views/user/details.phtml +++ b/app/views/user/details.phtml @@ -4,7 +4,7 @@ details['is_admin']; ?> details['enabled']; ?> -
+

username ?>

@@ -84,4 +84,4 @@
-
+ diff --git a/app/views/user/manage.phtml b/app/views/user/manage.phtml index 3da4cf2998b..ae66e4b2f0d 100644 --- a/app/views/user/manage.phtml +++ b/app/views/user/manage.phtml @@ -1,6 +1,6 @@ partial('aside_configure'); ?> -
+
@@ -108,4 +108,4 @@
- + diff --git a/app/views/user/profile.phtml b/app/views/user/profile.phtml index a7f38e69db6..39b138c78b5 100644 --- a/app/views/user/profile.phtml +++ b/app/views/user/profile.phtml @@ -4,7 +4,7 @@ } ?> -
+
@@ -133,4 +133,4 @@
- + diff --git a/app/views/user/validateEmail.phtml b/app/views/user/validateEmail.phtml index e525b1b6b6d..31c19f73889 100644 --- a/app/views/user/validateEmail.phtml +++ b/app/views/user/validateEmail.phtml @@ -1,4 +1,4 @@ -
+

title) ?>

@@ -19,4 +19,4 @@

-
+ From ba48733f17006b5e07625a22811594e62033fcc8 Mon Sep 17 00:00:00 2001 From: Frans de Jonge Date: Fri, 3 Dec 2021 00:58:40 +0100 Subject: [PATCH 0053/2479] Add preventDefault to keydown event handler (#4013) * Add preventDefault to keydown event handler Fixes #3946. * review * silence technically correct but missing the picture check Co-authored-by: Frans de Jonge --- p/scripts/main.js | 63 +++++++++++++++++++++++++++-------------------- 1 file changed, 36 insertions(+), 27 deletions(-) diff --git a/p/scripts/main.js b/p/scripts/main.js index f7a4d17f337..16ae7d0f060 100644 --- a/p/scripts/main.js +++ b/p/scripts/main.js @@ -841,7 +841,7 @@ function init_shortcuts() { document.addEventListener('keydown', ev => { if (ev.target.closest('input, textarea') || ev.ctrlKey || ev.metaKey || (ev.altKey && ev.shiftKey)) { - return true; + return; } const s = context.shortcuts; @@ -860,7 +860,8 @@ function init_shortcuts() { } else { auto_share(n); } - return false; + ev.preventDefault(); + return; } } if (k === s.actualize) { @@ -868,7 +869,8 @@ function init_shortcuts() { if (btn) { btn.click(); } - return false; + ev.preventDefault(); + return; } if (k === s.next_entry) { if (ev.altKey) { @@ -878,7 +880,8 @@ function init_shortcuts() { } else { next_entry(false); } - return false; + ev.preventDefault(); + return; } if (k === s.next_unread_entry) { if (ev.altKey) { @@ -888,7 +891,8 @@ function init_shortcuts() { } else { next_unread_entry(false); } - return false; + ev.preventDefault(); + return; } if (k === s.prev_entry) { if (ev.altKey) { @@ -898,7 +902,8 @@ function init_shortcuts() { } else { prev_entry(false); } - return false; + ev.preventDefault(); + return; } if (k === s.mark_read) { if (ev.altKey) { @@ -908,7 +913,8 @@ function init_shortcuts() { } else { // Toggle the read state mark_read(document.querySelector('.flux.current'), false, false); } - return false; + ev.preventDefault(); + return; } if (k === s.first_entry) { if (ev.altKey) { @@ -922,7 +928,8 @@ function init_shortcuts() { toggleContent(first, old_active, false); } } - return false; + ev.preventDefault(); + return; } if (k === s.last_entry) { if (ev.altKey) { @@ -936,15 +943,17 @@ function init_shortcuts() { toggleContent(last, old_active, false); } } - return false; + ev.preventDefault(); + return; } if (ev.altKey || ev.shiftKey) { - return true; + return; } if (k === s.mark_favorite) { // Toggle the favorite state mark_favorite(document.querySelector('.flux.current')); - return false; + ev.preventDefault(); + return; } if (k === s.go_website) { if (context.auto_mark_site) { @@ -955,23 +964,23 @@ function init_shortcuts() { newWindow.opener = null; newWindow.location = document.querySelector('.flux.current a.go_website').href; } - return false; + ev.preventDefault(); + return; } - if (k === s.skip_next_entry) { next_entry(true); return false; } - if (k === s.skip_prev_entry) { prev_entry(true); return false; } - if (k === s.collapse_entry) { collapse_entry(); return false; } - if (k === s.auto_share) { auto_share(); return false; } - if (k === s.user_filter) { user_filter(); return false; } - if (k === s.load_more) { load_more_posts(); return false; } - if (k === s.close_dropdown) { location.hash = null; return false; } - if (k === s.help) { window.open(context.urls.help); return false; } - if (k === s.focus_search) { document.getElementById('search').focus(); return false; } - if (k === s.normal_view) { delayedClick(document.querySelector('#nav_menu_views .view-normal')); return false; } - if (k === s.reading_view) { delayedClick(document.querySelector('#nav_menu_views .view-reader')); return false; } - if (k === s.global_view) { delayedClick(document.querySelector('#nav_menu_views .view-global')); return false; } - if (k === s.rss_view) { delayedClick(document.querySelector('#nav_menu_views .view-rss')); return false; } - if (k === s.toggle_media) { toggle_media(); return false; } - return true; + if (k === s.skip_next_entry) { next_entry(true); ev.preventDefault(); return; } + if (k === s.skip_prev_entry) { prev_entry(true); ev.preventDefault(); return; } + if (k === s.collapse_entry) { collapse_entry(); ev.preventDefault(); return; } + if (k === s.auto_share) { auto_share(); ev.preventDefault(); return; } + if (k === s.user_filter) { user_filter(); ev.preventDefault(); return; } + if (k === s.load_more) { load_more_posts(); ev.preventDefault(); return; } + if (k === s.close_dropdown) { location.hash = null; ev.preventDefault(); return; } + if (k === s.help) { window.open(context.urls.help); ev.preventDefault(); return; } + if (k === s.focus_search) { document.getElementById('search').focus(); ev.preventDefault(); return; } + if (k === s.normal_view) { delayedClick(document.querySelector('#nav_menu_views .view-normal')); ev.preventDefault(); return; } + if (k === s.reading_view) { delayedClick(document.querySelector('#nav_menu_views .view-reader')); ev.preventDefault(); return; } + if (k === s.global_view) { delayedClick(document.querySelector('#nav_menu_views .view-global')); ev.preventDefault(); return; } + if (k === s.rss_view) { delayedClick(document.querySelector('#nav_menu_views .view-rss')); ev.preventDefault(); return; } + if (k === s.toggle_media) { toggle_media(); ev.preventDefault(); } }); } From c2249a9afda0a1c496de35fce360fc54c5674c95 Mon Sep 17 00:00:00 2001 From: Bartosz Taudul Date: Sun, 5 Dec 2021 17:04:43 +0100 Subject: [PATCH 0054/2479] Update polish translation. (#4027) --- app/i18n/pl/admin.php | 8 +-- app/i18n/pl/conf.php | 42 +++++++------- app/i18n/pl/feedback.php | 122 +++++++++++++++++++-------------------- app/i18n/pl/gen.php | 30 +++++----- app/i18n/pl/index.php | 4 +- app/i18n/pl/sub.php | 32 +++++----- app/i18n/pl/user.php | 36 ++++++------ 7 files changed, 137 insertions(+), 137 deletions(-) diff --git a/app/i18n/pl/admin.php b/app/i18n/pl/admin.php index 340c0a944d0..c37064a9fc0 100644 --- a/app/i18n/pl/admin.php +++ b/app/i18n/pl/admin.php @@ -104,9 +104,9 @@ 'author' => 'Autor', 'community' => 'Rozszerzenia stworzone przez społeczność', 'description' => 'Opis', - 'disabled' => 'Disabled', // TODO - Translation - 'empty_list' => 'There are no installed extensions', // TODO - Translation - 'enabled' => 'Enabled', // TODO - Translation + 'disabled' => 'Wyłączone', + 'empty_list' => 'Brak zainstalowanych rozszerzeń', + 'enabled' => 'Włączone', 'latest' => 'Zainstalowane', 'name' => 'Nazwa', 'no_configure_view' => 'To rozszerzenie nie jest konfigurowalne.', @@ -115,7 +115,7 @@ 'no_rights' => 'Rozszerzenie systemowe (brak uprawnień)', ), 'title' => 'Rozszerzenia', - 'update' => 'Update available', // TODO - Translation + 'update' => 'Dostępna jest aktualizacja', 'user' => 'Rozszerzenia użytkownika', 'version' => 'Wersja', ), diff --git a/app/i18n/pl/conf.php b/app/i18n/pl/conf.php index e9ed6ced895..328e486d2fb 100644 --- a/app/i18n/pl/conf.php +++ b/app/i18n/pl/conf.php @@ -29,7 +29,7 @@ 'publication_date' => 'Data publikacji', 'related_tags' => 'Tagi', 'sharing' => 'Podaj dalej', - 'summary' => 'Summary', // TODO - Translation + 'summary' => 'Skrót wiadomości', 'top_line' => 'Górny margines', ), 'language' => 'Język', @@ -39,13 +39,13 @@ ), 'show_nav_buttons' => 'Pokaż przyciski nawigacyjne', 'theme' => 'Motyw', - 'theme_not_available' => 'The “%s” theme is not available anymore. Please choose another theme.', // TODO - Translation + 'theme_not_available' => 'Motyw “%s” nie jest już dostępny. Wybierz inny motyw.', 'thumbnail' => array( - 'label' => 'Thumbnail', // TODO - Translation - 'landscape' => 'Landscape', // TODO - Translation - 'none' => 'None', // TODO - Translation - 'portrait' => 'Portrait', // TODO - Translation - 'square' => 'Square', // TODO - Translation + 'label' => 'Miniaturka', + 'landscape' => 'Pejzaż', + 'none' => 'Brak', + 'portrait' => 'Portret', + 'square' => 'Kwadrat', ), 'title' => 'Wyświetlanie', 'width' => array( @@ -74,19 +74,19 @@ 'deprecated' => 'To zapytanie nie jest już poprawne. Kategoria lub kanał do którego się odnosi już nie istnieje.', 'filter' => array( '_' => 'Zastosowane filtry:', - 'categories' => 'Display by category', // TODO - Translation - 'feeds' => 'Display by feed', // TODO - Translation - 'order' => 'Sort by date', // TODO - Translation - 'search' => 'Expression', // TODO - Translation - 'state' => 'State', // TODO - Translation - 'tags' => 'Display by tag', // TODO - Translation - 'type' => 'Type', // TODO - Translation + 'categories' => 'Według kategorii', + 'feeds' => 'Według kanału', + 'order' => 'Sortowanie wg daty', + 'search' => 'Wyrażenie', + 'state' => 'Stan', + 'tags' => 'Według tagu', + 'type' => 'Rodzaj', ), 'get_all' => 'Wyświetlenie wszystkich wiadomości', 'get_category' => 'Wyświetlenie kategorii "%s"', 'get_favorite' => 'Wyświetlenie ulubionych wiadomości', 'get_feed' => 'Wyświetlenie kanału "%s"', - 'name' => 'Name', // TODO - Translation + 'name' => 'Nazwa', 'no_filter' => 'Brak filtrów', 'number' => 'Zapytanie nr %d', 'order_asc' => 'Wyświetl najpierw najstarsze wiadomości', @@ -128,11 +128,11 @@ 'read' => array( 'article_open_on_website' => 'gdy wiadomość jest otworzona na pierwotnej stronie', 'article_viewed' => 'gdy wiadomość jest otworzona', - 'keep_max_n_unread' => 'Max number of articles to keep unread', // TODO - Translation + 'keep_max_n_unread' => 'Maksymalna liczba nieprzeczytanych wiadomości', 'scroll' => 'podczas przewijania', 'upon_reception' => 'po otrzymaniu wiadomości', 'when' => 'Oznacz wiadomość jako przeczytaną…', - 'when_same_title' => 'if an identical title already exists in the top n newest articles', // TODO - Translation + 'when_same_title' => 'gdy identyczny tytuł już istnieje w n najnowszych wiadomościach', ), 'show' => array( '_' => 'Wiadomości do wyświetlenia', @@ -141,10 +141,10 @@ 'all_articles' => 'Wszystkie wiadomości', 'all_categories' => 'Wszystkie', 'no_category' => 'Żadna', - 'remember_categories' => 'Remember open categories', // TODO - Translation + 'remember_categories' => 'Pamiętaj otwarte kategorie', 'unread' => 'Tylko nieprzeczytane', ), - 'show_fav_unread_help' => 'Applies also on labels', // TODO - Translation + 'show_fav_unread_help' => 'Stosuje się również do etykiet', 'sides_close_article' => 'Kliknięcie poza zawartością wiadomości zamyka widok wiadomości', 'sort' => array( '_' => 'Porządek sortowania', @@ -198,8 +198,8 @@ 'navigation_help' => 'Z wykorzystaniem modyfikatora ⇧ Shift skróty nawigacyjne stosowane są dla kanałów.
Z wykorzystaniem modyfikatora Alt ⎇ skróty nawigacyjne stosowane są dla kategorii.', 'navigation_no_mod_help' => 'Pozostałe skróty nawigacyjne nie wspierają modyfikatorów.', 'next_article' => 'Otworzenie następnej wiadomości', - 'next_unread_article' => 'Open the next unread article', // TODO - Translation - 'non_standard' => 'Some keys (%s) may not work as shortcuts.', // TODO - Translation + 'next_unread_article' => 'Otwórz następną nieprzeczytaną wiadomość', + 'non_standard' => 'Niektóre klawisze (%s) mogą nie działać jako skróty.', 'normal_view' => 'Przełączenie na widok normalny', 'other_action' => 'Inne akcje', 'previous_article' => 'Otworzenie poprzedniej wiadomości', diff --git a/app/i18n/pl/feedback.php b/app/i18n/pl/feedback.php index fdddb6517a7..c354d6d98af 100644 --- a/app/i18n/pl/feedback.php +++ b/app/i18n/pl/feedback.php @@ -3,15 +3,15 @@ return array( 'access' => array( 'denied' => 'Nie masz uprawnień dostępu do tej strony', - 'not_found' => 'You are looking for a page that doesn’t exist', // TODO - Translation + 'not_found' => 'Strona którą chcesz otworzyć nie istnieje', ), 'admin' => array( 'optimization_complete' => 'Optymizacja ukończona', ), 'api' => array( 'password' => array( - 'failed' => 'Your password cannot be modified', // TODO - Translation - 'updated' => 'Your password has been modified', // TODO - Translation + 'failed' => 'Nie można zmienić hasła', + 'updated' => 'Hasło zostało zmienione', ), ), 'auth' => array( @@ -24,38 +24,38 @@ ), ), 'conf' => array( - 'error' => 'An error occurred while saving configuration', // TODO - Translation - 'query_created' => 'Query "%s" has been created.', // TODO - Translation - 'shortcuts_updated' => 'Shortcuts have been updated', // TODO - Translation + 'error' => 'Podczas zapisywania konfiguracji wystąpił błąd', + 'query_created' => 'Zapytanie "%s" zostało utworzone.', + 'shortcuts_updated' => 'Skróty zostały zaktualizowane', 'updated' => 'Ustawienia zostały zaktualizowane', ), 'extensions' => array( - 'already_enabled' => '%s is already enabled', // TODO - Translation - 'cannot_remove' => '%s cannot be removed', // TODO - Translation + 'already_enabled' => 'Rozszerzenie %s jest już włączone', + 'cannot_remove' => 'Rozszerzenie %s nie może zostać usunięte', 'disable' => array( - 'ko' => '%s cannot be disabled. Check FreshRSS logs for details.', // TODO - Translation - 'ok' => '%s is now disabled', // TODO - Translation + 'ko' => 'Rozszerzenie %s nie może zostać wyłączone. Sprawdź dziennik w celu uzyskania szczegółowych informacji.', + 'ok' => 'Rozszerzenie %s zostało wyłączone', ), 'enable' => array( - 'ko' => '%s cannot be enabled. Check FreshRSS logs for details.', // TODO - Translation - 'ok' => '%s is now enabled', // TODO - Translation + 'ko' => 'Rozszerzenie %s nie może zostać włączone. Sprawdź dziennik w celu uzyskania szczegółowych informacji.', + 'ok' => 'Rozszerzenie %s zostało włączone', ), - 'no_access' => 'You have no access on %s', // TODO - Translation - 'not_enabled' => '%s is not enabled', // TODO - Translation - 'not_found' => '%s does not exist', // TODO - Translation - 'removed' => '%s removed', // TODO - Translation + 'no_access' => 'Brak dostępu do %s', + 'not_enabled' => 'Rozszerzenie %s nie jest włączone', + 'not_found' => 'Rozszerzenie %s nie istnieje', + 'removed' => 'Rozszerzenie %s zostało usunięte', ), 'import_export' => array( - 'export_no_zip_extension' => 'The ZIP extension is not present on your server. Please try to export files one by one.', // TODO - Translation - 'feeds_imported' => 'Your feeds have been imported and will now be updated', // TODO - Translation - 'feeds_imported_with_errors' => 'Your feeds have been imported, but some errors occurred', // TODO - Translation - 'file_cannot_be_uploaded' => 'File cannot be uploaded!', // TODO - Translation - 'no_zip_extension' => 'The ZIP extension is not present on your server.', // TODO - Translation - 'zip_error' => 'An error occurred during ZIP import.', // TODO - Translation + 'export_no_zip_extension' => 'Rozszerzenie ZIP nie jest dostępne na serwerze. Spróbuj eksportować pliki pojedynczo.', + 'feeds_imported' => 'Kanały zostały zaimportowane i zostaną teraz zaktualizowane', + 'feeds_imported_with_errors' => 'Kanały zostały zaimportowane, jednakże wystąpiło kilka błędów', + 'file_cannot_be_uploaded' => 'Plik nie może zostać wgrany!', + 'no_zip_extension' => 'Rozszerzenie ZIP nie jest dostępne na serwerze.', + 'zip_error' => 'Wystąpił błąd podczas importu pliku ZIP.', ), 'profile' => array( - 'error' => 'Your profile cannot be modified', // TODO - Translation - 'updated' => 'Your profile has been modified', // TODO - Translation + 'error' => 'Nie można modyfikować profilu', + 'updated' => 'Profil został zmodyfikowany', ), 'sub' => array( 'actualize' => 'Aktualizacja', @@ -64,35 +64,35 @@ 'marked_unread' => 'Wiadomości zostały oznaczone jako nieprzeczytane.', ), 'category' => array( - 'created' => 'Category %s has been created.', // TODO - Translation - 'deleted' => 'Category has been deleted.', // TODO - Translation - 'emptied' => 'Category has been emptied', // TODO - Translation - 'error' => 'Category cannot be updated', // TODO - Translation - 'name_exists' => 'Category name already exists.', // TODO - Translation - 'no_id' => 'You must specify the id of the category.', // TODO - Translation - 'no_name' => 'Category name cannot be empty.', // TODO - Translation - 'not_delete_default' => 'You cannot delete the default category!', // TODO - Translation - 'not_exist' => 'The category does not exist!', // TODO - Translation - 'over_max' => 'You have reached your limit of categories (%d)', // TODO - Translation - 'updated' => 'Category has been updated.', // TODO - Translation + 'created' => 'Stworzono kategorię %s.', + 'deleted' => 'Usunięto kategorię.', + 'emptied' => 'Kategoria jest pusta', + 'error' => 'Nie można zaktualizować kategorii', + 'name_exists' => 'Nazwa kategorii już istnieje.', + 'no_id' => 'Należy podać identyfikator kategorii.', + 'no_name' => 'Nazwa kategorii nie może być pusta.', + 'not_delete_default' => 'Nie wolno usunąć domyślnej kategorii!', + 'not_exist' => 'Kategoria nie istnieje!', + 'over_max' => 'Osiągnięto ustawiony limit kategorii (%d)', + 'updated' => 'Zaktualizowano kategorię.', ), 'feed' => array( - 'actualized' => '%s has been updated', // TODO - Translation - 'actualizeds' => 'RSS feeds have been updated', // TODO - Translation - 'added' => 'RSS feed %s has been added', // TODO - Translation - 'already_subscribed' => 'You have already subscribed to %s', // TODO - Translation - 'cache_cleared' => '%s cache has been cleared', // TODO - Translation - 'deleted' => 'Feed has been deleted', // TODO - Translation - 'error' => 'Feed cannot be updated', // TODO - Translation - 'internal_problem' => 'The newsfeed could not be added. Check FreshRSS logs for details. You can try force adding by appending #force_feed to the URL.', // TODO - Translation - 'invalid_url' => 'URL %s is invalid', // TODO - Translation - 'n_actualized' => '%d feeds have been updated', // TODO - Translation - 'n_entries_deleted' => '%d articles have been deleted', // TODO - Translation - 'no_refresh' => 'There are no feeds to refresh', // TODO - Translation - 'not_added' => '%s could not be added', // TODO - Translation - 'not_found' => 'Feed cannot be found', // TODO - Translation - 'over_max' => 'You have reached your limit of feeds (%d)', // TODO - Translation - 'reloaded' => '%s has been reloaded', // TODO - Translation + 'actualized' => 'Zaktualizowano kanał %s', + 'actualizeds' => 'Kanały RSS zostały zaktualizowane', + 'added' => 'Kanał RSS %s został dodany', + 'already_subscribed' => 'Kanał %s znajduje się już na liście subskrybowanych kanałów', + 'cache_cleared' => 'Cache kanału %s zostało wyczyszczone', + 'deleted' => 'Kanał został usunięty', + 'error' => 'Nie można zaktualizować kanału', + 'internal_problem' => 'Wystąpił błąd podczas dodawania kanału. Sprawdź dziennik w celu uzyskania szczegółowych informacji. Można spróbować wymusić dodanie kanału przez dodanie #force_feed na końcu adresu URL.', + 'invalid_url' => 'Adres URL %s nie jest prawidłowy', + 'n_actualized' => 'Liczba zaktualizowanych kanałów: %d', + 'n_entries_deleted' => 'Liczba usuniętych wiadomości: %d', + 'no_refresh' => 'Brak kanałó do odświeżenia', + 'not_added' => 'Kanał %s nie mógł zostać dodany', + 'not_found' => 'Kanał nie może zostać znaleziony', + 'over_max' => 'Osiągnięto ustawiony limit kanałów (%d)', + 'reloaded' => 'Kanał %s został przeładowany', 'selector_preview' => array( 'http_error' => 'Nie udało się załadować zawartości strony.', 'no_entries' => 'Nie ma wiadomości na tym kanale. Potrzeba przynajmniej jednej wiadomości aby podgląd był dostępny.', @@ -102,12 +102,12 @@ ), 'updated' => 'Ustawienia kanału zostały zaktualizowane', ), - 'purge_completed' => 'Purge completed (%d articles deleted)', // TODO - Translation + 'purge_completed' => 'Oczyszczanie ukończone (liczba skasowanych wiadomości: %d)', ), 'tag' => array( - 'created' => 'Tag "%s" has been created.', // TODO - Translation - 'name_exists' => 'Tag name already exists.', // TODO - Translation - 'renamed' => 'Tag "%s" has been renamed to "%s".', // TODO - Translation + 'created' => 'Etykieta "%s" została stworzona.', + 'name_exists' => 'Etykieta o podanej nazwie już istnieje.', + 'renamed' => 'Etykieta "%s" została zmieniona na "%s".', ), 'update' => array( 'can_apply' => 'FreshRSS zostanie zaktualizowany do wersji %s.', @@ -119,16 +119,16 @@ ), 'user' => array( 'created' => array( - '_' => 'User %s has been created', // TODO - Translation - 'error' => 'User %s cannot be created', // TODO - Translation + '_' => 'Stworzono konto użytkownika %s', + 'error' => 'Konto użytkownika %s nie może zostać stworzone', ), 'deleted' => array( - '_' => 'User %s has been deleted', // TODO - Translation - 'error' => 'User %s cannot be deleted', // TODO - Translation + '_' => 'Konto użytkownika %s zostało usunięte', + 'error' => 'Nie można usunąć konta użytkownika %s', ), 'updated' => array( - '_' => 'User %s has been updated', // TODO - Translation - 'error' => 'User %s has not been updated', // TODO - Translation + '_' => 'Konto użytkownika %s zostało zaktualizowane', + 'error' => 'Konto użytkownika %s nie zostało zaktualizowane', ), ), ); diff --git a/app/i18n/pl/gen.php b/app/i18n/pl/gen.php index 62205e98828..136b8f14c0f 100644 --- a/app/i18n/pl/gen.php +++ b/app/i18n/pl/gen.php @@ -4,7 +4,7 @@ 'action' => array( 'actualize' => 'Aktualizuj kanałów', 'add' => 'Dodaj', - 'back' => '← Go back', // TODO - Translation + 'back' => '← Wróć', 'back_to_rss_feeds' => '← Wróć do subskrybowanych kanałów RSS', 'cancel' => 'Anuluj', 'create' => 'Stwórz', @@ -29,7 +29,7 @@ 'update' => 'Aktualizuj', ), 'auth' => array( - 'accept_tos' => 'I accept the Terms of Service.', // TODO - Translation + 'accept_tos' => 'Akceptuję Warunki użytkowania.', 'email' => 'Adres e-mail', 'keep_logged_in' => 'Nie pytaj ponownie o logowanie (przez %s dni)', 'login' => 'Logowanie', @@ -39,13 +39,13 @@ 'format' => 'Przynajmniej 7 znaków', ), 'registration' => array( - '_' => 'New account', // TODO - Translation - 'ask' => 'Create an account?', // TODO - Translation - 'title' => 'Account creation', // TODO - Translation + '_' => 'Nowe konto', + 'ask' => 'Stworzyć nowe konto?', + 'title' => 'Tworzenie konta', ), 'username' => array( '_' => 'Nazwa użytkownika', - 'format' => 'Maximum 16 alphanumeric characters', // TODO - Translation + 'format' => 'Nie więcej niż 16 znaków alfanumerycznych', ), ), 'date' => array( @@ -92,7 +92,7 @@ 'may' => 'Maj', 'may_' => 'Maj', 'mon' => 'Pon.', - 'month' => 'months', // TODO - Translation + 'month' => 'miesięcy', 'nov' => 'Lis.', 'november' => 'Listopad', 'oct' => 'Paź', @@ -115,10 +115,10 @@ 'js' => array( 'category_empty' => 'Pusta kategoria', 'confirm_action' => 'Czy jesteś pewien, że chcesz przeprowadzić daną operację? Nie można cofnąć jej rezultatów!', - 'confirm_action_feed_cat' => 'Are you sure you want to perform this action? You will lose related favourites and user queries. It cannot be cancelled!', // TODO - Translation + 'confirm_action_feed_cat' => 'czy jesteś pewien, że chcesz przeprowadzić daną operację? Stracisz powiązane zapytania i ulubione wiadomości. Tych zmian nie można wycofać!', 'feedback' => array( 'body_new_articles' => 'Na FreshRSS znajduje się %%d wiadomości do przeczytania.', - 'request_failed' => 'A request has failed, it may have been caused by internet connection problems.', // TODO - Translation + 'request_failed' => 'Zapytanie nie powiodło się. Może to być spowodowane problemami z łącznością z internetem.', 'title_new_articles' => 'FreshRSS: nowe wiadomości!', ), 'new_article' => 'Dostępne są nowe wiadomości. Kliknij, aby odświeżyć stronę.', @@ -146,7 +146,7 @@ ), 'menu' => array( 'about' => 'O serwisie', - 'account' => 'Account', // TODO - Translation + 'account' => 'Konto', 'admin' => 'Administracja', 'archiving' => 'Archiwizacja', 'authentication' => 'Uwierzytelnianie', @@ -167,13 +167,13 @@ 'user_profile' => 'Profil', ), 'pagination' => array( - 'first' => 'First', // TODO - Translation - 'last' => 'Last', // TODO - Translation + 'first' => 'Początek', + 'last' => 'Koniec', 'load_more' => 'Załaduj więcej wiadomości', 'mark_all_read' => 'Oznacz wszystkie jako przeczytane', - 'next' => 'Next', // TODO - Translation + 'next' => 'Następne', 'nothing_to_load' => 'Koniec listy wiadomości', - 'previous' => 'Previous', // TODO - Translation + 'previous' => 'Poprzednie', ), 'period' => array( 'days' => 'dni', @@ -185,7 +185,7 @@ 'share' => array( 'Known' => 'Strony bazujące na usłudze Known', 'blogotext' => 'Blogotext', - 'clipboard' => 'Clipboard', // TODO - Translation + 'clipboard' => 'Schowek', 'diaspora' => 'Diaspora*', 'email' => 'E-mail', 'facebook' => 'Facebook', diff --git a/app/i18n/pl/index.php b/app/i18n/pl/index.php index 809ea15f5b0..0562c862794 100644 --- a/app/i18n/pl/index.php +++ b/app/i18n/pl/index.php @@ -32,7 +32,7 @@ 'about' => 'O serwisie FreshRSS', 'before_one_day' => 'Starsze niż dzień', 'before_one_week' => 'Starsze niż tydzień', - 'bookmark_query' => 'Bookmark current query', // TODO - Translation + 'bookmark_query' => 'Zapisz bieżące zapytanie', 'favorites' => 'Ulubione (%s)', 'global_view' => 'Widok globalny', 'main_stream' => 'Kanał główny', @@ -48,7 +48,7 @@ 'read' => 'Pokaż przeczytane', 'reader_view' => 'Widok czytania', 'rss_view' => 'Kanał RSS', - 'search_short' => 'Search', // TODO - Translation + 'search_short' => 'Szukaj', 'starred' => 'Pokaż ulubione', 'stats' => 'Statystyki', 'subscription' => 'Zarządzanie subskrypcjami', diff --git a/app/i18n/pl/sub.php b/app/i18n/pl/sub.php index 998dc7b4fd5..2683499e2de 100644 --- a/app/i18n/pl/sub.php +++ b/app/i18n/pl/sub.php @@ -27,19 +27,19 @@ 'auth' => array( 'configuration' => 'Uwierzytelnianie', 'help' => 'Pozwala na dostęp do kanałów chronionych hasłem HTTP', - 'http' => 'HTTP Authentication', // TODO - Translation + 'http' => 'Uwierzytelnienie HTTP', 'password' => 'Hasło HTTP', 'username' => 'Użytkownik HTTP', ), 'clear_cache' => 'Zawsze czyść pamięć podręczną', 'content_action' => array( - '_' => 'Content action when fetching the article content', // TODO - Translation - 'append' => 'Add after existing content', // TODO - Translation - 'prepend' => 'Add before existing content', // TODO - Translation - 'replace' => 'Replace existing content', // TODO - Translation + '_' => 'Sposób zachowania zawartości pobranej z pierwotnej strony', + 'append' => 'Umieść za treścią z kanału', + 'prepend' => 'Umieść przed treścią z kanału', + 'replace' => 'Zastąp treść z kanału', ), - 'css_cookie' => 'Use Cookies when fetching the article content', // TODO - Translation - 'css_cookie_help' => 'Example: foo=bar; gdpr_consent=true; cookie=value', // TODO - Translation + 'css_cookie' => 'Użyj plików cookie podczas pobierania wiadomości', + 'css_cookie_help' => 'Przykład: foo=bar; gdpr_consent=true; cookie=value', 'css_help' => 'Pozwala na ograniczenie zawartości kanałów (uwaga, wymaga więcej czasu!)', 'css_path' => 'Selektor CSS dla wiadomości na pierwotnej stronie', 'description' => 'Opis', @@ -60,7 +60,7 @@ ), 'moved_category_deleted' => 'Po usunięciu kategorii znajdujące się w niej kanały zostaną automatycznie przeniesione do %s.', 'mute' => 'wycisz', - 'no_selected' => 'No feed selected.', // TODO - Translation + 'no_selected' => 'Brak kanałów.', 'number_entries' => '%d wiadomości', 'priority' => array( '_' => 'Widoczność', @@ -68,8 +68,8 @@ 'main_stream' => 'Pokaż w kanale głównym', 'normal' => 'Pokaż w kategorii kanału', ), - 'proxy' => 'Set a proxy for fetching this feed', // TODO - Translation - 'proxy_help' => 'Select a protocol (e.g: SOCKS5) and enter the proxy address (e.g: 127.0.0.1:1080)', // TODO - Translation + 'proxy' => 'Użyj mechanizmu proxy podczas pobierania kanału', + 'proxy_help' => 'Wybierz protokół (np. SOCKS5) i podaj adres serwera proxy (np. 127.0.0.1:1080)', 'selector_preview' => array( 'show_raw' => 'Pokaż źródło', 'show_rendered' => 'Pokaż zawartość', @@ -89,22 +89,22 @@ 'title_add' => 'Dodaj kanał', 'ttl' => 'Nie odświeżaj automatycznie częściej niż', 'url' => 'Adres kanału', - 'useragent' => 'Set the user agent for fetching this feed', // TODO - Translation - 'useragent_help' => 'Example: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:86.0)', // TODO - Translation + 'useragent' => 'Ciąg user agent używany podczas pobierania kanału', + 'useragent_help' => 'Przykład: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:86.0)', 'validator' => 'Sprawdź poprawność kanału', 'website' => 'Adres strony', - 'websub' => 'Instant notification with WebSub', // TODO - Translation + 'websub' => 'Natychmiastowe powiadomienia protokołu WebSub', ), 'import_export' => array( 'export' => 'Eksport', 'export_labelled' => 'Eksportuj wiadomości z etykietami', 'export_opml' => 'Eksportuj listę kanałów (format OPML)', 'export_starred' => 'Eksportuj ulubione wiadomości', - 'feed_list' => 'List of %s articles', // TODO - Translation + 'feed_list' => 'Lista wiadomości z kanału %s', 'file_to_import' => 'Plik do zaimportowania
(formaty OPML, JSON lub ZIP)', 'file_to_import_no_zip' => 'Plik do zaimportowania
(OPML lub JSON)', 'import' => 'Import', - 'starred_list' => 'List of favourite articles', // TODO - Translation + 'starred_list' => 'Lista ulubionych wiadomości', 'title' => 'Import / eksport', ), 'menu' => array( @@ -131,7 +131,7 @@ 'add_feed' => 'Dodaj kanał', 'add_label' => 'Dodaj etykietę', 'delete_label' => 'Usuń etykietę', - 'feed_management' => 'RSS feeds management', // TODO - Translation + 'feed_management' => 'Zarządzanie kanałami RSS', 'rename_label' => 'Zmień nazwę etykiety', 'subscription_tools' => 'Narzędzia subskrypcji', ), diff --git a/app/i18n/pl/user.php b/app/i18n/pl/user.php index b4e25136077..dfda5570bbf 100644 --- a/app/i18n/pl/user.php +++ b/app/i18n/pl/user.php @@ -7,38 +7,38 @@ 'required' => 'Wymagane jest podanie adresu e-mail.', ), 'validation' => array( - 'change_email' => 'You can change your email address on the profile page.', // TODO - Translation - 'email_sent_to' => 'We sent you an email at %s. Please follow its instructions to validate your address.', // TODO - Translation + 'change_email' => 'Możesz zmienić używany adres e-mail w ustawieniach swojego profilu.', + 'email_sent_to' => 'Na adres e-mail %s została wysłana wiadomość zawierająca instrukcję weryfikacji. Prosimy się z nią zapoznać.', 'feedback' => array( - 'email_failed' => 'We couldn’t send you an email because of a server configuration error.', // TODO - Translation - 'email_sent' => 'An email has been sent to your address.', // TODO - Translation - 'error' => 'Email address validation failed.', // TODO - Translation - 'ok' => 'This email address has been validated.', // TODO - Translation - 'unnecessary' => 'This email address was already validated.', // TODO - Translation - 'wrong_token' => 'This email address failed to be validated due to a wrong token.', // TODO - Translation + 'email_failed' => 'Nie udało się wysłać wiadomości e-mail z powodu błędu konfiguracji serwera.', + 'email_sent' => 'Wiadomośc e-mail została wysłana na podany adres.', + 'error' => 'Weryfikacja adresu poczty e-mail nie powiodła się.', + 'ok' => 'Adres poczty e-mail został potwierdzony.', + 'unnecessary' => 'Podany adres poczty e-mail został już wcześniej potwierdzony.', + 'wrong_token' => 'Nie udało się zweryfikować adresu poczty e-mail z powodu niewłaściwego tokena.', ), - 'need_to' => 'You need to validate your email address before being able to use %s.', // TODO - Translation - 'resend_email' => 'Resend the email', // TODO - Translation - 'title' => 'Email address validation', // TODO - Translation + 'need_to' => 'Musisz zweryfikować swój adres e-mail zanim będziesz mógł zacząć używać serwis %s.', + 'resend_email' => 'Wyślij ponownie wiadomość e-mail', + 'title' => 'Potwierdzenie adresu e-mail', ), ), 'mailer' => array( 'email_need_validation' => array( - 'body' => 'You’ve just registered on %s, but you still need to validate your email address. For that, just follow the link:', // TODO - Translation - 'title' => 'You need to validate your account', // TODO - Translation - 'welcome' => 'Welcome %s,', // TODO - Translation + 'body' => 'Właśnie zarejestrowałeś się w serwisie %s. Aby uzyskać pełen dostęp musisz jeszcze potwierdzić ważność swojego adresu e-mail. Możesz to zrobić klikając na niniejszy odnośnik:', + 'title' => 'Musisz zweryfikować swoje konto', + 'welcome' => 'Cześć, %s,', ), ), 'password' => array( - 'invalid' => 'The password is invalid.', // TODO - Translation + 'invalid' => 'Hasło nie jest prawidłowe.', ), 'tos' => array( 'feedback' => array( - 'invalid' => 'You must accept the Terms of Service to be able to register.', // TODO - Translation + 'invalid' => 'Aby się zarejestrować, należy zgodzić się na Warunki użytkowania.', ), ), 'username' => array( - 'invalid' => 'This username is invalid.', // TODO - Translation - 'taken' => 'This username, %s, is taken.', // TODO - Translation + 'invalid' => 'Ta nazwa użytkownika nie jest prawidłowa.', + 'taken' => 'Użytkownik %s już istnieje.', ), ); From 19c2cb7f05f1baabe26fc58156e1fd0a283648fb Mon Sep 17 00:00:00 2001 From: 312k <55316963+312k@users.noreply.github.com> Date: Mon, 6 Dec 2021 01:05:49 +0900 Subject: [PATCH 0055/2479] Updated japanese translation on 3898 (#4026) --- app/i18n/ja/admin.php | 2 +- app/i18n/ja/conf.php | 10 +++++----- app/i18n/ja/gen.php | 12 ++++++------ app/i18n/ja/install.php | 14 +++++++------- app/i18n/ja/sub.php | 2 +- 5 files changed, 20 insertions(+), 20 deletions(-) diff --git a/app/i18n/ja/admin.php b/app/i18n/ja/admin.php index 6f66db237a5..5baeeba87b3 100644 --- a/app/i18n/ja/admin.php +++ b/app/i18n/ja/admin.php @@ -2,7 +2,7 @@ return array( 'auth' => array( - 'allow_anonymous' => '標準ユーザーの記事が匿名のユーザーでも読めるようにします。 (%s)', + 'allow_anonymous' => '標準のユーザーの記事が匿名のユーザーでも読めるようにします。 (%s)', 'allow_anonymous_refresh' => '匿名ユーザーが記事を更新できるようにします。', 'api_enabled' => 'APIからのアクセスを許可する (モバイルアプリが必要です)', 'form' => 'ウェブフォーム (JavaScriptが必要です)', diff --git a/app/i18n/ja/conf.php b/app/i18n/ja/conf.php index f1a476dcdab..5dc9a4eb86b 100644 --- a/app/i18n/ja/conf.php +++ b/app/i18n/ja/conf.php @@ -39,7 +39,7 @@ ), 'show_nav_buttons' => 'ナビゲーションボタンを表示する', 'theme' => 'テーマ', - 'theme_not_available' => 'The “%s” theme is not available anymore. Please choose another theme.', // TODO - Translation + 'theme_not_available' => '“%s”テーマはご利用いただけません。他のテーマをお選びください。', 'thumbnail' => array( 'label' => 'サムネイル', 'landscape' => 'ランドスケープ', @@ -128,11 +128,11 @@ 'read' => array( 'article_open_on_website' => '記事を元のwebサイトで開いたとき', 'article_viewed' => '記事を読んだとき', - 'keep_max_n_unread' => 'Max number of articles to keep unread', // TODO - Translation + 'keep_max_n_unread' => '未読の記事として残す最大数', 'scroll' => 'スクロールしているとき', 'upon_reception' => '記事を受け取ったとき', 'when' => '記事を既読にする…', - 'when_same_title' => 'if an identical title already exists in the top n newest articles', // TODO - Translation + 'when_same_title' => '同一タイトルの新しい記事があるときには、上部へ表示する', ), 'show' => array( '_' => '記事を表示する', @@ -198,13 +198,13 @@ 'navigation_help' => '⇧ Shiftキーを使うと, フィードにショートカットナビが表示されます。
Alt ⎇ キーを使うと、カテゴリにショートカットナビが表示されます。', 'navigation_no_mod_help' => '次のショートカットナビは、キーボードショートカットには対応していません。', 'next_article' => '次の記事を開く', - 'next_unread_article' => 'Open the next unread article', // TODO - Translation + 'next_unread_article' => '次に未読の記事を開く', 'non_standard' => '(%s)のキーはショートカットにはなりません。', 'normal_view' => 'ノーマルビューに切り替える', 'other_action' => 'ほかのアクション', 'previous_article' => '前の記事を表示する', 'reading_view' => 'リーディングビューに切り替える', - 'rss_view' => 'Open as RSS feed', // TODO - Translation + 'rss_view' => 'RSSフィードとして開く', 'see_on_website' => '元のwebサイトを開く', 'shift_for_all_read' => '+ Alt ⎇で前の記事を既読にし、
+ ⇧ Shiftですべての記事を既読にします。', 'skip_next_article' => '次を開かないで飛ばす', diff --git a/app/i18n/ja/gen.php b/app/i18n/ja/gen.php index 67bfa11a959..472204593da 100644 --- a/app/i18n/ja/gen.php +++ b/app/i18n/ja/gen.php @@ -31,7 +31,7 @@ 'auth' => array( 'accept_tos' => '私は Terms of Serviceを承認します。', 'email' => 'Eメールアドレス', - 'keep_logged_in' => 'ログインを保持する (%s)日後に失効', + 'keep_logged_in' => 'ログインを保持する %s日後にログアウトする', 'login' => 'ログイン', 'logout' => 'ログアウト', 'password' => array( @@ -146,7 +146,7 @@ ), 'menu' => array( 'about' => 'FreshRSSについて', - 'account' => 'Account', // TODO - Translation + 'account' => 'アカウント', 'admin' => '管理者', 'archiving' => 'アーカイブ', 'authentication' => '認証', @@ -211,10 +211,10 @@ 'by_default' => 'デフォルト', 'damn' => '終了!', 'default_category' => 'カテゴリーに登録されていない', - 'no' => 'いいえ', + 'no' => 'NO', 'not_applicable' => '利用不可能', - 'ok' => 'はい!', - 'or' => 'あるいは', - 'yes' => 'はい', + 'ok' => 'OK!', + 'or' => 'または', + 'yes' => 'OK', ), ); diff --git a/app/i18n/ja/install.php b/app/i18n/ja/install.php index 09a61490f1b..ae57d3601bd 100644 --- a/app/i18n/ja/install.php +++ b/app/i18n/ja/install.php @@ -2,7 +2,7 @@ return array( 'action' => array( - 'finish' => 'インストールが完了しました', + 'finish' => 'インストール作業を終わりにする', 'fix_errors_before' => '次のステップへ移る前にエラーを修正してください。', 'keep_install' => '前の設定を保持する', 'next_step' => '次のステップへ進む', @@ -30,8 +30,8 @@ 'username' => 'データベースのユーザー名', ), 'check' => array( - '_' => '確かめる', - 'already_installed' => 'FreshRSS が、インストールされていることを確認できました!', + '_' => '環境確認', + 'already_installed' => 'FreshRSS が、すでにインストールされています!', 'cache' => array( 'nok' => ' %1$s ディレクトリ %2$s ユーザーのアクセス権限を確認してください。HTTPサーバーを書き込むには権限が必要です。', 'ok' => 'キャッシュディレクトリの権限は正しく設定されています。', @@ -78,7 +78,7 @@ ), 'php' => array( 'nok' => 'あなたのPHPのバージョンは %s ですが、FreshRSSが動作する最低限のバージョンは %s です。', - 'ok' => 'あなたのPHPのバージョンは, %s, でFreshRSSと互換性があるバージョンです。', + 'ok' => 'あなたのPHPのバージョンは、 %s でFreshRSSと互換性があるバージョンです。', ), 'reload' => '再度確かめる', 'tmp' => array( @@ -100,7 +100,7 @@ 'ok' => '一般設定は保存されました。', ), 'congratulations' => 'おめでとうございます!', - 'default_user' => 'デフォルトのユーザーのユーザー名 (最大16文字の英数字)', + 'default_user' => 'デフォルトのユーザー名 (最大16文字の英数字)', 'fix_errors_before' => 'エラーを次のステップへ移る前に修正してください。', 'javascript_is_better' => 'FreshRSS はJavascriptが有効だとより快適にご利用いただけます。', 'js' => array( @@ -112,12 +112,12 @@ 'defined' => '言語の設定ができました。', ), 'missing_applied_migrations' => '何かが誤っています; 空のファイルを手動で作ることができます %s', - 'ok' => 'インストールプロセスは成功しました。', + 'ok' => 'インストール作業は成功しました。', 'session' => array( 'nok' => 'webサーバーは、不正な設定がされておりPHPセッションが必要とされているクッキーの設定が誤っています!', ), 'step' => 'ステップ %d', 'steps' => 'ステップ', - 'this_is_the_end' => 'これにて終了', + 'this_is_the_end' => '終了', 'title' => 'インストール · FreshRSS', ); diff --git a/app/i18n/ja/sub.php b/app/i18n/ja/sub.php index 2dfbf357239..c65753f3f4b 100644 --- a/app/i18n/ja/sub.php +++ b/app/i18n/ja/sub.php @@ -12,7 +12,7 @@ ), 'category' => array( '_' => 'カテゴリ', - 'add' => 'Add a category', // TODO - Translation + 'add' => 'カテゴリを追加する', 'archiving' => 'アーカイブ', 'empty' => 'からのカテゴリ', 'information' => 'インフォメーション', From eb5b8054c572ead4a03df03ae9efd382c5d9a02f Mon Sep 17 00:00:00 2001 From: Bartosz Taudul Date: Sun, 5 Dec 2021 18:04:54 +0100 Subject: [PATCH 0056/2479] Add wolfpld to CREDITS. (#4028) --- CREDITS.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CREDITS.md b/CREDITS.md index 68f15652aca..5f0928c1a2d 100644 --- a/CREDITS.md +++ b/CREDITS.md @@ -20,6 +20,7 @@ People are sorted by name so please keep this order. * [Anton Smirnov](https://github.com/arokettu): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:arokettu), [Web](https://sandfox.me/) * [ArthurHoaro](https://github.com/ArthurHoaro): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:ArthurHoaro) * [ASMfreaK](https://github.com/ASMfreaK): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:ASMfreaK) +* [Bartosz Taudul](https://github.com/wolfpld): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:wolfpld), [Web](https://wolf.nereid.pl/) * [Benjamin Bouvier](https://github.com/bnjbvr): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:bnjbvr), [Web](https://benj.me/) * [bpatath](https://github.com/bpatath): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:bpatath) * [Brewal Bouvet](https://github.com/Jucgshu): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:Jucgshu), [Web](https://dizolo.eu/) From 5050b20ccaff8af68cad9ce27d3e47ad45b686df Mon Sep 17 00:00:00 2001 From: maTh Date: Sun, 5 Dec 2021 21:36:16 +0100 Subject: [PATCH 0057/2479] Fix: search in mobile view (#4025) * bring back the search in the nav bar * fix the search input height * line-heigt improved --- p/themes/Origine/origine.css | 1 + p/themes/Origine/origine.rtl.css | 1 + p/themes/Pafat/pafat.css | 1 + p/themes/Pafat/pafat.rtl.css | 1 + p/themes/base-theme/template.css | 2 +- p/themes/base-theme/template.rtl.css | 2 +- 6 files changed, 6 insertions(+), 2 deletions(-) diff --git a/p/themes/Origine/origine.css b/p/themes/Origine/origine.css index 3c0a43eabcf..7dfd5216bdc 100644 --- a/p/themes/Origine/origine.css +++ b/p/themes/Origine/origine.css @@ -1186,6 +1186,7 @@ a.btn { padding: 3px 5px; max-width: 97%; width: 90px; + line-height: 2; } .nav_menu .search input:focus { diff --git a/p/themes/Origine/origine.rtl.css b/p/themes/Origine/origine.rtl.css index de24dbd87d5..048c1c2313a 100644 --- a/p/themes/Origine/origine.rtl.css +++ b/p/themes/Origine/origine.rtl.css @@ -1186,6 +1186,7 @@ a.btn { padding: 3px 5px; max-width: 97%; width: 90px; + line-height: 2; } .nav_menu .search input:focus { diff --git a/p/themes/Pafat/pafat.css b/p/themes/Pafat/pafat.css index 4e69ce75ca0..a5428b21657 100644 --- a/p/themes/Pafat/pafat.css +++ b/p/themes/Pafat/pafat.css @@ -1169,6 +1169,7 @@ a.signin { .nav_menu .search input { max-width: 97%; width: 90px; + line-height: 2; } .nav_menu .search input:focus { diff --git a/p/themes/Pafat/pafat.rtl.css b/p/themes/Pafat/pafat.rtl.css index 92f12077a8d..913a6512c6d 100644 --- a/p/themes/Pafat/pafat.rtl.css +++ b/p/themes/Pafat/pafat.rtl.css @@ -1169,6 +1169,7 @@ a.signin { .nav_menu .search input { max-width: 97%; width: 90px; + line-height: 2; } .nav_menu .search input:focus { diff --git a/p/themes/base-theme/template.css b/p/themes/base-theme/template.css index 2a48abe6dc6..421660433e1 100644 --- a/p/themes/base-theme/template.css +++ b/p/themes/base-theme/template.css @@ -1366,7 +1366,7 @@ input:checked + .slide-container .properties { } - .item.search form { + header .item.search form { display: none; } diff --git a/p/themes/base-theme/template.rtl.css b/p/themes/base-theme/template.rtl.css index 6eb52db322e..19c27ddd7fe 100644 --- a/p/themes/base-theme/template.rtl.css +++ b/p/themes/base-theme/template.rtl.css @@ -1366,7 +1366,7 @@ input:checked + .slide-container .properties { } - .item.search form { + header .item.search form { display: none; } From 754a7b27b605aec221b23a57afe1896b707a29d2 Mon Sep 17 00:00:00 2001 From: maTh Date: Sun, 5 Dec 2021 21:42:06 +0100 Subject: [PATCH 0058/2479] Fix reader view header (#4015) * fix the hyperlink underline * add mouse title * improve German mouse titles * fixed whitespaces * use the same title in config/display like in normal/reader view * i18n German: Discard change for this String * delete unused gen.action.mark_favorite --- app/i18n/cz/gen.php | 1 - app/i18n/de/conf.php | 4 ++-- app/i18n/de/gen.php | 1 - app/i18n/en-us/gen.php | 1 - app/i18n/en/gen.php | 1 - app/i18n/es/gen.php | 1 - app/i18n/fr/gen.php | 1 - app/i18n/he/gen.php | 1 - app/i18n/it/gen.php | 1 - app/i18n/ja/gen.php | 1 - app/i18n/ko/gen.php | 1 - app/i18n/nl/gen.php | 1 - app/i18n/oc/gen.php | 1 - app/i18n/pl/gen.php | 1 - app/i18n/pt-br/gen.php | 1 - app/i18n/ru/gen.php | 1 - app/i18n/sk/gen.php | 1 - app/i18n/tr/gen.php | 1 - app/i18n/zh-cn/gen.php | 1 - app/views/configure/display.phtml | 4 ++-- app/views/index/reader.phtml | 18 +++++++----------- 21 files changed, 11 insertions(+), 33 deletions(-) diff --git a/app/i18n/cz/gen.php b/app/i18n/cz/gen.php index 674759052db..a0d865e50a4 100644 --- a/app/i18n/cz/gen.php +++ b/app/i18n/cz/gen.php @@ -17,7 +17,6 @@ 'import' => 'Import', // TODO - Translation 'load_default_shortcuts' => 'Load default shortcuts', // TODO - Translation 'manage' => 'Spravovat', - 'mark_favorite' => 'Označit jako oblíbené', 'mark_read' => 'Označit jako přečtené', 'promote' => 'Promote', // TODO - Translation 'purge' => 'Purge', // TODO - Translation diff --git a/app/i18n/de/conf.php b/app/i18n/de/conf.php index 1aed5aa4c87..29057a15069 100644 --- a/app/i18n/de/conf.php +++ b/app/i18n/de/conf.php @@ -192,8 +192,8 @@ 'javascript' => 'JavaScript muss aktiviert sein, um Tastaturkürzel benutzen zu können', 'last_article' => 'Zum letzten Artikel springen', 'load_more' => 'Weitere Artikel laden', - 'mark_favorite' => 'Als Favorit markieren', - 'mark_read' => 'Als gelesen markieren', + 'mark_favorite' => 'Als Favorit auswählen/entfernen', + 'mark_read' => 'Als (un-)gelesen markieren', 'navigation' => 'Navigation', 'navigation_help' => 'Mit der ⇧ Umschalttaste finden die Tastenkombination auf Feeds Anwendung.
Mit der Alt ⎇-Taste finden die Tastenkombination auf Kategorien Anwendung.', 'navigation_no_mod_help' => 'Die folgenden Navigationsverknüpfungen unterstützen keine Modifikatoren.', diff --git a/app/i18n/de/gen.php b/app/i18n/de/gen.php index 5b58ceb1d01..a2fe8588208 100644 --- a/app/i18n/de/gen.php +++ b/app/i18n/de/gen.php @@ -17,7 +17,6 @@ 'import' => 'Importieren', 'load_default_shortcuts' => 'Standard-Kürzel laden', 'manage' => 'Verwalten', - 'mark_favorite' => 'Als Favorit markieren', 'mark_read' => 'Als gelesen markieren', 'promote' => 'Hochstufen', 'purge' => 'Bereinigen', diff --git a/app/i18n/en-us/gen.php b/app/i18n/en-us/gen.php index 5d014f1c204..2aec26d580f 100644 --- a/app/i18n/en-us/gen.php +++ b/app/i18n/en-us/gen.php @@ -17,7 +17,6 @@ 'import' => 'Import', 'load_default_shortcuts' => 'Load default shortcuts', 'manage' => 'Manage', - 'mark_favorite' => 'Mark as favorite', 'mark_read' => 'Mark as read', 'promote' => 'Promote', 'purge' => 'Purge', diff --git a/app/i18n/en/gen.php b/app/i18n/en/gen.php index cabf2599260..cec3897987f 100644 --- a/app/i18n/en/gen.php +++ b/app/i18n/en/gen.php @@ -17,7 +17,6 @@ 'import' => 'Import', 'load_default_shortcuts' => 'Load default shortcuts', 'manage' => 'Manage', - 'mark_favorite' => 'Mark as favourite', 'mark_read' => 'Mark as read', 'promote' => 'Promote', 'purge' => 'Purge', diff --git a/app/i18n/es/gen.php b/app/i18n/es/gen.php index 89c4547a6d3..90b5da60317 100755 --- a/app/i18n/es/gen.php +++ b/app/i18n/es/gen.php @@ -17,7 +17,6 @@ 'import' => 'Importar', 'load_default_shortcuts' => 'Cargar accesos directos predeterminados', 'manage' => 'Administrar', - 'mark_favorite' => 'Marcar como favorita', 'mark_read' => 'Marcar como leído', 'promote' => 'Promover', 'purge' => 'Eliminar', diff --git a/app/i18n/fr/gen.php b/app/i18n/fr/gen.php index 5b37c5c5391..9471d8639bc 100644 --- a/app/i18n/fr/gen.php +++ b/app/i18n/fr/gen.php @@ -17,7 +17,6 @@ 'import' => 'Importer', 'load_default_shortcuts' => 'Utiliser les raccourcis par défaut', 'manage' => 'Gérer', - 'mark_favorite' => 'Mettre en favori', 'mark_read' => 'Marquer comme lu', 'promote' => 'Promouvoir', 'purge' => 'Purger', diff --git a/app/i18n/he/gen.php b/app/i18n/he/gen.php index 2899df4dea1..44e708edaff 100644 --- a/app/i18n/he/gen.php +++ b/app/i18n/he/gen.php @@ -17,7 +17,6 @@ 'import' => 'ייבוא', 'load_default_shortcuts' => 'Load default shortcuts', // TODO - Translation 'manage' => 'ניהול', - 'mark_favorite' => 'סימון כמועדף', 'mark_read' => 'סימון כנקרא', 'promote' => 'Promote', // TODO - Translation 'purge' => 'Purge', // TODO - Translation diff --git a/app/i18n/it/gen.php b/app/i18n/it/gen.php index 03875d4fd79..e2879cdfd35 100644 --- a/app/i18n/it/gen.php +++ b/app/i18n/it/gen.php @@ -17,7 +17,6 @@ 'import' => 'Importa', 'load_default_shortcuts' => 'Load default shortcuts', // TODO - Translation 'manage' => 'Gestisci', - 'mark_favorite' => 'Segna come preferito', 'mark_read' => 'Segna come letto', 'promote' => 'Promote', // TODO - Translation 'purge' => 'Purge', // TODO - Translation diff --git a/app/i18n/ja/gen.php b/app/i18n/ja/gen.php index 472204593da..26ae9690784 100644 --- a/app/i18n/ja/gen.php +++ b/app/i18n/ja/gen.php @@ -17,7 +17,6 @@ 'import' => 'インポート', 'load_default_shortcuts' => 'デフォルトのショートカットを読み込む', 'manage' => '管理', - 'mark_favorite' => 'お気に入りとする', 'mark_read' => '既読にする', 'promote' => 'プロモート', 'purge' => '不要なデータの削除', diff --git a/app/i18n/ko/gen.php b/app/i18n/ko/gen.php index 6794f46e1a0..c810574ff8f 100644 --- a/app/i18n/ko/gen.php +++ b/app/i18n/ko/gen.php @@ -17,7 +17,6 @@ 'import' => '불러오기', 'load_default_shortcuts' => '기본 단축키 불러오기', 'manage' => '관리', - 'mark_favorite' => '즐겨찾기에 등록', 'mark_read' => '읽음으로 표시', 'promote' => '목록 수준 올리기', 'purge' => '제거', diff --git a/app/i18n/nl/gen.php b/app/i18n/nl/gen.php index 8efba05d541..c3da75cabf7 100644 --- a/app/i18n/nl/gen.php +++ b/app/i18n/nl/gen.php @@ -17,7 +17,6 @@ 'import' => 'Importeren', 'load_default_shortcuts' => 'Standaardshortcuts laden', 'manage' => 'Beheren', - 'mark_favorite' => 'Markeer als favoriet', 'mark_read' => 'Markeer als gelezen', 'promote' => 'Bevorderen', 'purge' => 'Zuiveren', diff --git a/app/i18n/oc/gen.php b/app/i18n/oc/gen.php index 2ade5386f5f..28c396fa9e2 100644 --- a/app/i18n/oc/gen.php +++ b/app/i18n/oc/gen.php @@ -17,7 +17,6 @@ 'import' => 'Importar', 'load_default_shortcuts' => 'Cargar los acorchis per defaut', 'manage' => 'Gerir', - 'mark_favorite' => 'Ajustar als favorits', 'mark_read' => 'Marcar coma legit', 'promote' => 'Promòure', 'purge' => 'Purgar', diff --git a/app/i18n/pl/gen.php b/app/i18n/pl/gen.php index 136b8f14c0f..c9464c4f5aa 100644 --- a/app/i18n/pl/gen.php +++ b/app/i18n/pl/gen.php @@ -17,7 +17,6 @@ 'import' => 'Importuj', 'load_default_shortcuts' => 'Ustaw domyślne skróty', 'manage' => 'Ustawienia', - 'mark_favorite' => 'Oznacz jako ulubione', 'mark_read' => 'Oznacz jako przeczytane', 'promote' => 'Awansuj', 'purge' => 'Oczyść', diff --git a/app/i18n/pt-br/gen.php b/app/i18n/pt-br/gen.php index 4298dc589f9..1a06d704660 100644 --- a/app/i18n/pt-br/gen.php +++ b/app/i18n/pt-br/gen.php @@ -17,7 +17,6 @@ 'import' => 'Importar', 'load_default_shortcuts' => 'Carregar mais atalhos', 'manage' => 'Gerenciar', - 'mark_favorite' => 'Marcar como favorito', 'mark_read' => 'Marcar como lido', 'promote' => 'Promover', 'purge' => 'Limpar', diff --git a/app/i18n/ru/gen.php b/app/i18n/ru/gen.php index 1802d14334b..783360e0510 100644 --- a/app/i18n/ru/gen.php +++ b/app/i18n/ru/gen.php @@ -17,7 +17,6 @@ 'import' => 'Импортировать', 'load_default_shortcuts' => 'Загрузить горячие клавиши по умолчанию', 'manage' => 'Настроить', - 'mark_favorite' => 'Отметить избранным', 'mark_read' => 'Отметить прочитанным', 'promote' => 'Продвинуть', 'purge' => 'Запустить очистку', diff --git a/app/i18n/sk/gen.php b/app/i18n/sk/gen.php index 3517629fae2..89436be980e 100644 --- a/app/i18n/sk/gen.php +++ b/app/i18n/sk/gen.php @@ -17,7 +17,6 @@ 'import' => 'Importovať', 'load_default_shortcuts' => 'Load default shortcuts', // TODO - Translation 'manage' => 'Spravovať', - 'mark_favorite' => 'Označiť ako obľúbené', 'mark_read' => 'Označiť ako prečítané', 'promote' => 'Promote', // TODO - Translation 'purge' => 'Purge', // TODO - Translation diff --git a/app/i18n/tr/gen.php b/app/i18n/tr/gen.php index cc00dc63c80..448078d5708 100644 --- a/app/i18n/tr/gen.php +++ b/app/i18n/tr/gen.php @@ -17,7 +17,6 @@ 'import' => 'İçe Aktar', 'load_default_shortcuts' => 'Öntanımlı kısayolları yükle', 'manage' => 'Yönet', - 'mark_favorite' => 'Favoriye ekle', 'mark_read' => 'Okundu olarak işaretle', 'promote' => 'Yöneticilik ata', 'purge' => 'Temizle', diff --git a/app/i18n/zh-cn/gen.php b/app/i18n/zh-cn/gen.php index 210d3f72b46..9643d2e965b 100644 --- a/app/i18n/zh-cn/gen.php +++ b/app/i18n/zh-cn/gen.php @@ -17,7 +17,6 @@ 'import' => '导入', 'load_default_shortcuts' => '重置快捷键', 'manage' => '管理', - 'mark_favorite' => '标记收藏', 'mark_read' => '标记已读', 'promote' => '设为管理员', 'purge' => '清理', diff --git a/app/views/configure/display.phtml b/app/views/configure/display.phtml index 96f93a27f4c..dfb3778931f 100644 --- a/app/views/configure/display.phtml +++ b/app/views/configure/display.phtml @@ -122,8 +122,8 @@   - - + + diff --git a/app/views/index/reader.phtml b/app/views/index/reader.phtml index f58839d8f1c..0e9fb4b3e9e 100644 --- a/app/views/index/reader.phtml +++ b/app/views/index/reader.phtml @@ -38,18 +38,14 @@ $content_width = FreshRSS_Context::$user_conf->content_width; } ?> - - isRead() ? 'read' : 'unread') ?> - - - isFavorite() ? 'starred' : 'non-starred') ?> - + isRead() ? 'read' : 'unread') ?> + isFavorite() ? 'starred' : 'non-starred') ?> - - show_favicons): ?> - ✇ - - name() ?> + show_favicons): + ?>✇name() ?>

title() ?>

From e56157dcee8f3abfe9b0f514b39760096779def1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tibor=20Rep=C4=8Dek?= Date: Mon, 6 Dec 2021 19:19:46 +0100 Subject: [PATCH 0059/2479] Updated translation (#4030) I translated strings with "TODO - Translate" comment. ;) --- app/i18n/sk/conf.php | 78 ++++++++++++++++++++++---------------------- 1 file changed, 39 insertions(+), 39 deletions(-) diff --git a/app/i18n/sk/conf.php b/app/i18n/sk/conf.php index fdc5a48ddfe..84e200ce70f 100644 --- a/app/i18n/sk/conf.php +++ b/app/i18n/sk/conf.php @@ -3,19 +3,19 @@ return array( 'archiving' => array( '_' => 'Archivovanie', - 'exception' => 'Purge exception', // TODO - Translation + 'exception' => 'Výnimka mazania', 'help' => 'Viac možností nájdete v nastaveniach kanála', - 'keep_favourites' => 'Never delete favourites', // TODO - Translation - 'keep_labels' => 'Never delete labels', // TODO - Translation - 'keep_max' => 'Maximum number of articles to keep', // TODO - Translation + 'keep_favourites' => 'Nikdy nemazať obľúbené', + 'keep_labels' => 'Nikdy nemazať štítky', + 'keep_max' => 'Maximálny počet článkov na zachovanie', 'keep_min_by_feed' => 'Minimálny počet článkov kanála na zachovanie', - 'keep_period' => 'Maximum age of articles to keep', // TODO - Translation - 'keep_unreads' => 'Never delete unread articles', // TODO - Translation - 'maintenance' => 'Maintenance', // TODO - Translation + 'keep_period' => 'Maximálny vek článkov na zachovanie', + 'keep_unreads' => 'Nikdy nemazať neprečítané články', + 'maintenance' => 'Údržba', 'optimize' => 'Optimalizovať databázu', 'optimize_help' => 'Občas vykonajte na zmenšenie veľkosti databázy', - 'policy' => 'Purge policy', // TODO - Translation - 'policy_warning' => 'If no purge policy is selected, every article will be kept.', // TODO - Translation + 'policy' => 'Politika mazania', + 'policy_warning' => 'Ak nie je vybrané politika mazania, bude zachovaný každý článok.', 'purge_now' => 'Vyčistiť teraz', 'title' => 'Archivovanie', 'ttl' => 'Neaktualizovať častejšie ako', @@ -29,7 +29,7 @@ 'publication_date' => 'Dátum zverejnenia', 'related_tags' => 'Značky článku', 'sharing' => 'Zdieľanie', - 'summary' => 'Summary', // TODO - Translation + 'summary' => 'Zhrnutie', 'top_line' => 'Horný riadok', ), 'language' => 'Jazyk', @@ -39,13 +39,13 @@ ), 'show_nav_buttons' => 'Zobraziť tlačidlá oznámenia', 'theme' => 'Vzhľad', - 'theme_not_available' => 'The “%s” theme is not available anymore. Please choose another theme.', // TODO - Translation + 'theme_not_available' => 'Vzhľad “%s” už nie je dostupný. Prosím, vyberte si iný vzhľad.', 'thumbnail' => array( - 'label' => 'Thumbnail', // TODO - Translation - 'landscape' => 'Landscape', // TODO - Translation - 'none' => 'None', // TODO - Translation - 'portrait' => 'Portrait', // TODO - Translation - 'square' => 'Square', // TODO - Translation + 'label' => 'Miniatúra', + 'landscape' => 'Naležato', + 'none' => 'Žiadny', + 'portrait' => 'Nastojato', + 'square' => 'Štvorec', ), 'title' => 'Zobraziť', 'width' => array( @@ -58,12 +58,12 @@ ), 'profile' => array( '_' => 'Správca profilu', - 'api' => 'API management', // TODO - Translation + 'api' => 'Správa API', 'delete' => array( '_' => 'Vymazanie účtu', 'warn' => 'Váš účet a všetky údaje v ňom budú vymazané.', ), - 'email' => 'Email address', // TODO - Translation + 'email' => 'E-mailová adresa', 'password_api' => 'Heslo API
(pre mobilné aplikácie)', 'password_form' => 'Heslo
(pre spôsob prihlásenia cez webový formulár)', 'password_format' => 'Najmenej 7 znakov', @@ -74,19 +74,19 @@ 'deprecated' => 'Tento dopyt už nie je platný. Kategória alebo kanál boli vymazané.', 'filter' => array( '_' => 'Použitý filter:', - 'categories' => 'Display by category', // TODO - Translation - 'feeds' => 'Display by feed', // TODO - Translation - 'order' => 'Sort by date', // TODO - Translation - 'search' => 'Expression', // TODO - Translation - 'state' => 'State', // TODO - Translation - 'tags' => 'Display by tag', // TODO - Translation - 'type' => 'Type', // TODO - Translation + 'categories' => 'Zobraziť podľa kategórie', + 'feeds' => 'Zobraziť podľa kanála', + 'order' => 'Zobraziť podľa dátumu', + 'search' => 'Výraz', + 'state' => 'Štát', + 'tags' => 'Zobraziť podľa štítku', + 'type' => 'Typ', ), 'get_all' => 'Zobraziť všetky články', 'get_category' => 'Zobraziť kategóriu "%s"', 'get_favorite' => 'Zobraziť obľúbené články', 'get_feed' => 'Zobraziť kanál "%s"', - 'name' => 'Name', // TODO - Translation + 'name' => 'Meno', 'no_filter' => 'Žiadny filter', 'number' => 'Dopyt číslo %d', 'order_asc' => 'Zobraziť staršie články hore', @@ -113,13 +113,13 @@ 'reading' => array( '_' => 'Čítanie', 'after_onread' => 'Po “Označiť všetko ako prečítané”,', - 'always_show_favorites' => 'Show all articles in favourites by default', // TODO - Translation + 'always_show_favorites' => 'Automaticky zobraziť všetky články v obľúbených', 'articles_per_page' => 'Počet článkov na jednu stranu', 'auto_load_more' => 'Načítať ďalšie články dolu na stránke', 'auto_remove_article' => 'Skryť články po prečítaní', 'confirm_enabled' => 'Zobraziť potvrdzovací dialóg po kliknutí na “Označiť všetko ako prečítané”', 'display_articles_unfolded' => 'Zobraziť články otvorené', - 'display_categories_unfolded' => 'Categories to unfold', // TODO - Translation + 'display_categories_unfolded' => 'Kategórie na rozbalenie', 'hide_read_feeds' => 'Skryť kategórie a kanály s nulovým počtom neprečítaných článkov (nefunguje s nastaveným “Zobraziť všetky články”)', 'img_with_lazyload' => 'Pre načítanie obrázkov použiť "lazy load"', 'jump_next' => 'skočiť na ďalší neprečítaný (kanál ale kategóriu)', @@ -128,23 +128,23 @@ 'read' => array( 'article_open_on_website' => 'keď je článok otvorený na svojej webovej stránke', 'article_viewed' => 'keď je článok zobrazený', - 'keep_max_n_unread' => 'Max number of articles to keep unread', // TODO - Translation + 'keep_max_n_unread' => 'Maximálny počet článkov ponechať ako neprečítané', 'scroll' => 'počas skrolovania', 'upon_reception' => 'po načítaní článku', 'when' => 'Označiť článok ako prečítaný…', - 'when_same_title' => 'if an identical title already exists in the top n newest articles', // TODO - Translation + 'when_same_title' => 'ak rovnaký nadpis už existuje v TOP n najnovších článkoch', ), 'show' => array( '_' => 'Článkov na zobrazenie', - 'active_category' => 'Active category', // TODO - Translation + 'active_category' => 'Aktívna kategória', 'adaptive' => 'Vyberte zobrazenie', 'all_articles' => 'Zobraziť všetky články', - 'all_categories' => 'All categories', // TODO - Translation - 'no_category' => 'No category', // TODO - Translation - 'remember_categories' => 'Remember open categories', // TODO - Translation + 'all_categories' => 'Všetky kategórie', + 'no_category' => 'Bez kategŕie', + 'remember_categories' => 'Zapamätať otvorené kategórie', 'unread' => 'Zobraziť iba neprečítané', ), - 'show_fav_unread_help' => 'Applies also on labels', // TODO - Translation + 'show_fav_unread_help' => 'Týka sa aj štítkov', 'sides_close_article' => 'Po kliknutí mimo textu článku sa článok zatvorí', 'sort' => array( '_' => 'Poradie', @@ -198,19 +198,19 @@ 'navigation_help' => 'Po stlačení skratky s klávesou ⇧ Shift, sa skratky navigácie vzťahujú na kanály.
Po stlačení skratky s klávesou Alt ⎇, sa skratky navigácie vzťahujú na kategórie.', 'navigation_no_mod_help' => 'Tieto skratky navigácie nepodporujú klávesy "Shift" a "Alt".', 'next_article' => 'Otvorí ďalší článok', - 'next_unread_article' => 'Open the next unread article', // TODO - Translation - 'non_standard' => 'Some keys (%s) may not work as shortcuts.', // TODO - Translation + 'next_unread_article' => 'Otvoriť ďalší neprečítaný článok', + 'non_standard' => 'Niektoré klávesy (%s) nemusia fungovať ako klávesové skratky.', 'normal_view' => 'Prepne do základného zobrazenia', 'other_action' => 'Ostatné akcie', 'previous_article' => 'Otvorí predošlý článok', 'reading_view' => 'Prepne do zobrazenia na čítanie', 'rss_view' => 'Otvoriť ako kanál RSS', 'see_on_website' => 'Zobrazí na webovej stránke', - 'shift_for_all_read' => '+ Alt ⎇ to mark previous articles as read
+ ⇧ Shift to mark all articles as read', // TODO - Translation + 'shift_for_all_read' => '+ Alt ⎇ na označené predošlých článkov ako prečítané
+ ⇧ Shift na označenie všetkých článkov ako prečítané', 'skip_next_article' => 'Prejde na ďalší bez otvorenia', 'skip_previous_article' => 'Prejde na predošlý bez otvorenia', 'title' => 'Skratky', - 'toggle_media' => 'Play/pause media', // TODO - Translation + 'toggle_media' => 'Spustiť/zastaviť médium', 'user_filter' => 'Použiť používateľské filtre', 'user_filter_help' => 'Ak je nastavený iba jeden spôsob zdieľania, použije sa. Inak si spôsoby zdieľania vyberá používateľ podľa čísla.', 'views' => 'Zobrazenia', From 9a7c760ec1514f4ff004aadc426700e39df34de9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tibor=20Rep=C4=8Dek?= Date: Mon, 6 Dec 2021 19:20:09 +0100 Subject: [PATCH 0060/2479] Updated translation (#4031) I translated strings with "TODO - Translation" comment. ;) --- app/i18n/sk/feedback.php | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/app/i18n/sk/feedback.php b/app/i18n/sk/feedback.php index 6eeaa929ece..805d3e1811d 100644 --- a/app/i18n/sk/feedback.php +++ b/app/i18n/sk/feedback.php @@ -10,8 +10,8 @@ ), 'api' => array( 'password' => array( - 'failed' => 'Your password cannot be modified', // TODO - Translation - 'updated' => 'Your password has been modified', // TODO - Translation + 'failed' => 'Vaše heslo sa nepodarilo zmeniť', + 'updated' => 'Vaše heslo bolo zmenené', ), ), 'auth' => array( @@ -31,7 +31,7 @@ ), 'extensions' => array( 'already_enabled' => '%s už je povolené', - 'cannot_remove' => '%s cannot be removed', // TODO - Translation + 'cannot_remove' => '%s sa nepodarilo odstrániť', 'disable' => array( 'ko' => '%s sa nepodarilo nainštalovať. Prečítajte si záznamy FreshRSS, ak chcete poznať podrobnosti.', 'ok' => '%s je teraz zakázaný', @@ -43,7 +43,7 @@ 'no_access' => 'Nemáte prístup k %s', 'not_enabled' => '%s nie je povolený', 'not_found' => '%s neexistuje', - 'removed' => '%s removed', // TODO - Translation + 'removed' => '%s odstránené', ), 'import_export' => array( 'export_no_zip_extension' => 'ZIP rozšírenie sa na vašom serveri nenachádza. Prosím, skúste exportovať súbory pojednom.', @@ -81,7 +81,7 @@ 'actualizeds' => 'RSS kanál bol aktualizovaný', 'added' => 'RSS kanál %s bol pridaný', 'already_subscribed' => 'Tento RSS kanál už odoberáte: %s', - 'cache_cleared' => '%s cache has been cleared', // TODO - Translation + 'cache_cleared' => '%s vyrovnávacia pamäť bola vymazaná', 'deleted' => 'Kanál bol vymazaný', 'error' => 'Kanál sa nepodarilo aktualizovať', 'internal_problem' => 'Kanál sa nepodarilo pridať. Prečítajte si záznamy FreshRSS, ak chcete poznať podrobnosti. Skúste pridať kanál pomocou #force_feed v odkaze (URL).', @@ -90,24 +90,24 @@ 'n_entries_deleted' => 'Počet vymazaných článkov: %d', 'no_refresh' => 'Žiadny kanál sa neaktualizoval…', 'not_added' => 'Kanál %s sa nepodarilo pridať', - 'not_found' => 'Feed cannot be found', // TODO - Translation + 'not_found' => 'Kanál sa nepodarilo nájsť', 'over_max' => 'Dosiahli ste limit počtu kanálov (%d)', - 'reloaded' => '%s has been reloaded', // TODO - Translation + 'reloaded' => '%s bol obnovený', 'selector_preview' => array( - 'http_error' => 'Failed to load website content.', // TODO - Translation - 'no_entries' => 'There are no articles in this feed. You need at least one article to create a preview.', // TODO - Translation - 'no_feed' => 'Internal error (feed cannot be found).', // TODO - Translation - 'no_result' => 'The selector didn\'t match anything. As a fallback the original feed text will be displayed instead.', // TODO - Translation - 'selector_empty' => 'The selector is empty. You need to define one to create a preview.', // TODO - Translation + 'http_error' => 'Nepodarilo sa načítať obsah stránky.', + 'no_entries' => 'V tomto kanáli nie sú články. Na vytvorenie náhľadu je potrebný aspoň jeden článok.', + 'no_feed' => 'Vnútorná chyba (kanál sa nepodarilo nájsť).', + 'no_result' => 'Selektor nič neoznačil. Bude sa zobrazovať pôvodný text kanála.', + 'selector_empty' => 'Selektor je prázdny. Na vytvorenie náhľadu je potrebné definovať selektor.', ), 'updated' => 'Kanál bol aktualizovaný', ), 'purge_completed' => 'Čistenie ukončené. Počet vymazaných článkov: %d', ), 'tag' => array( - 'created' => 'Tag "%s" has been created.', // TODO - Translation - 'name_exists' => 'Tag name already exists.', // TODO - Translation - 'renamed' => 'Tag "%s" has been renamed to "%s".', // TODO - Translation + 'created' => 'Štítok "%s" bol vytvorený.', + 'name_exists' => 'Názov štítku už existuje.', + 'renamed' => 'Štítok "%s" bol premenovaný na "%s".', ), 'update' => array( 'can_apply' => 'FreshRSS sa teraz aktualizuje na verziu %s.', From 62b79272d8a10eb47e39e3508524b2a12bea8a01 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tibor=20Rep=C4=8Dek?= Date: Mon, 6 Dec 2021 19:20:24 +0100 Subject: [PATCH 0061/2479] Updated translation (#4032) I translated string with "TODO - Translation" comment. ;) --- app/i18n/sk/gen.php | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/app/i18n/sk/gen.php b/app/i18n/sk/gen.php index 89436be980e..d455c67edc1 100644 --- a/app/i18n/sk/gen.php +++ b/app/i18n/sk/gen.php @@ -3,32 +3,32 @@ return array( 'action' => array( 'actualize' => 'Aktualizovať kanály', - 'add' => 'Add', // TODO - Translation - 'back' => '← Go back', // TODO - Translation + 'add' => 'Pridať', + 'back' => '← Späť', 'back_to_rss_feeds' => '← Späť na vaše RSS kanály', 'cancel' => 'Zrušiť', 'create' => 'Vytvoriť', - 'demote' => 'Demote', // TODO - Translation + 'demote' => 'Degradovať', 'disable' => 'Zakázať', 'empty' => 'Vyprázdniť', 'enable' => 'Povoliť', 'export' => 'Exportovať', 'filter' => 'Filtrovať', 'import' => 'Importovať', - 'load_default_shortcuts' => 'Load default shortcuts', // TODO - Translation + 'load_default_shortcuts' => 'Načítať prednastavené klávesové skratky', 'manage' => 'Spravovať', 'mark_read' => 'Označiť ako prečítané', - 'promote' => 'Promote', // TODO - Translation - 'purge' => 'Purge', // TODO - Translation + 'promote' => 'Podporiť', + 'purge' => 'Vymazať', 'remove' => 'Odstrániť', - 'rename' => 'Rename', // TODO - Translation + 'rename' => 'Premenovať', 'see_website' => 'Zobraziť webovú stránku', 'submit' => 'Poslať', 'truncate' => 'Vymazať všetky články', 'update' => 'Aktualizovať', ), 'auth' => array( - 'accept_tos' => 'I accept the Terms of Service.', // TODO - Translation + 'accept_tos' => 'Prijímam Podmienky služby.', 'email' => 'E-mailová adresa', 'keep_logged_in' => 'Zostať prihlásený (počet dní: %s)', 'login' => 'Prihlásiť', @@ -78,10 +78,10 @@ 'july' => 'Júl', 'jun' => 'Jún', 'june' => 'Jún', - 'last_2_year' => 'Last two years', // TODO - Translation + 'last_2_year' => 'Posledné 2 roky', 'last_3_month' => 'Posledné 3 mesiace', - 'last_3_year' => 'Last three years', // TODO - Translation - 'last_5_year' => 'Last five years', // TODO - Translation + 'last_3_year' => 'Posledné 3 roky', + 'last_5_year' => 'Posledných 5 rokov', 'last_6_month' => 'Posledných 6 mesiacov', 'last_month' => 'Posledný mesiac', 'last_week' => 'Posledný týždeň', @@ -145,7 +145,7 @@ ), 'menu' => array( 'about' => 'O FreshRSS', - 'account' => 'Account', // TODO - Translation + 'account' => 'Konto', 'admin' => 'Administrácia', 'archiving' => 'Archivácia', 'authentication' => 'Prihlásenie', @@ -175,16 +175,16 @@ 'previous' => 'Predošlý', ), 'period' => array( - 'days' => 'days', // TODO - Translation - 'hours' => 'hours', // TODO - Translation - 'months' => 'months', // TODO - Translation - 'weeks' => 'weeks', // TODO - Translation - 'years' => 'years', // TODO - Translation + 'days' => 'dni', + 'hours' => 'hodiny', + 'months' => 'mesiace', + 'weeks' => 'týždne', + 'years' => 'roky', ), 'share' => array( 'Known' => 'Stránky založené na Known', 'blogotext' => 'Blogotext', - 'clipboard' => 'Clipboard', // TODO - Translation + 'clipboard' => 'Schránka', 'diaspora' => 'Diaspora*', 'email' => 'E-mail', 'facebook' => 'Facebook', From ba4a41c417c13c27822727879c44d3e14a130ef2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tibor=20Rep=C4=8Dek?= Date: Mon, 6 Dec 2021 19:20:40 +0100 Subject: [PATCH 0062/2479] Updated translation (#4033) I translated strings with "TODO - Translation" comments. ;) --- app/i18n/sk/index.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/i18n/sk/index.php b/app/i18n/sk/index.php index 05101e335e3..28fbe577157 100644 --- a/app/i18n/sk/index.php +++ b/app/i18n/sk/index.php @@ -32,7 +32,7 @@ 'about' => 'O FreshRSS', 'before_one_day' => 'Pred 1 dňom', 'before_one_week' => 'Pred 1 týždňom', - 'bookmark_query' => 'Bookmark current query', // TODO - Translation + 'bookmark_query' => 'Pridať aktuálny dopyt do obľúbených', 'favorites' => 'Obľúbené (%s)', 'global_view' => 'Prehľad', 'main_stream' => 'Všetky kanály', @@ -60,6 +60,6 @@ 'related' => 'Značky článku', ), 'tos' => array( - 'title' => 'Terms of Service', // TODO - Translation + 'title' => 'Podmienky služby', ), ); From 8c3f205e91bed0cbc952ef09c5aa370909c64401 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tibor=20Rep=C4=8Dek?= Date: Mon, 6 Dec 2021 19:20:58 +0100 Subject: [PATCH 0063/2479] Updated translation (#4034) I translated strings with "TODO - Translation" comment. ;) --- app/i18n/sk/install.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/app/i18n/sk/install.php b/app/i18n/sk/install.php index 1667fa52869..1784682f136 100644 --- a/app/i18n/sk/install.php +++ b/app/i18n/sk/install.php @@ -83,9 +83,9 @@ 'reload' => 'Tekrar kontrol et', 'tmp' => array( 'nok' => 'Skontrolujte oprávnenia prístupu do priečinku %s. HTTP server musí mať právo doň zapisovať.', - 'ok' => 'Permissions on the temp directory are good.', // TODO - Translation + 'ok' => 'Oprávnenia pre dočasný priečinok sú OK.', ), - 'unknown_process_username' => 'unknown', // TODO - Translation + 'unknown_process_username' => 'neznámy', 'users' => array( 'nok' => 'Skontrolujte oprávnenia prístupu do priečinku %s. HTTP server musí mať právo doň zapisovať.', 'ok' => 'Oprávnenia prístupu do priečinku používateľov sú OK.', @@ -111,10 +111,10 @@ 'choose' => 'Vyberte jazyk pre FreshRSS', 'defined' => 'Jazyk bol nastavený.', ), - 'missing_applied_migrations' => 'Something went wrong; you should create an empty file %s manually.', // TODO - Translation + 'missing_applied_migrations' => 'Niečo sa nepodarilo. Ručne vytvorte prázdny súbor %s.', 'ok' => 'Inštalácia bola úspešná.', 'session' => array( - 'nok' => 'The web server seems to be incorrectly configured for cookies required for PHP sessions!', // TODO - Translation + 'nok' => 'Webový server pravdepodobne nie je správne nastavený na použitie cookies pre relácie PHP!', ), 'step' => 'krok %d', 'steps' => 'Kroky', From be77c466af4302a9b22692103322b140b3db558f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tibor=20Rep=C4=8Dek?= Date: Mon, 6 Dec 2021 19:21:34 +0100 Subject: [PATCH 0064/2479] Updated translation (#4035) I translated strings with "TODO - Translation" comment. ;) --- app/i18n/sk/sub.php | 62 ++++++++++++++++++++++----------------------- 1 file changed, 31 insertions(+), 31 deletions(-) diff --git a/app/i18n/sk/sub.php b/app/i18n/sk/sub.php index ee0da58988c..8c3e6b9e01a 100644 --- a/app/i18n/sk/sub.php +++ b/app/i18n/sk/sub.php @@ -13,11 +13,11 @@ 'category' => array( '_' => 'Kategória', 'add' => 'Pridať kategória', - 'archiving' => 'Archiving', // TODO - Translation + 'archiving' => 'Archív', 'empty' => 'Prázdna kategória', 'information' => 'Informácia', - 'position' => 'Display position', // TODO - Translation - 'position_help' => 'To control category sort order', // TODO - Translation + 'position' => 'Zobrazť pozíciu', + 'position_help' => 'Na kontrolu zoradenia kategórií', 'title' => 'Názov', ), 'feed' => array( @@ -33,13 +33,13 @@ ), 'clear_cache' => 'Vždy vymazať vyrovnávaciu pamäť', 'content_action' => array( - '_' => 'Content action when fetching the article content', // TODO - Translation - 'append' => 'Add after existing content', // TODO - Translation - 'prepend' => 'Add before existing content', // TODO - Translation - 'replace' => 'Replace existing content', // TODO - Translation + '_' => 'Akcia obsahu pri sťahovaní obsahu článku', + 'append' => 'Pridať za existujúci obsah', + 'prepend' => 'Pridať pred existujúci obsah', + 'replace' => 'Nahradiť existujúci obsh', ), - 'css_cookie' => 'Use Cookies when fetching the article content', // TODO - Translation - 'css_cookie_help' => 'Example: foo=bar; gdpr_consent=true; cookie=value', // TODO - Translation + 'css_cookie' => 'Pri sťahovaní obsahu článku použiť cookies', + 'css_cookie_help' => 'Príklad: foo=bar; gdpr_consent=true; cookie=value', 'css_help' => 'Stiahnuť skrátenú verziu RSS kanála (pozor, vyžaduje viac času!)', 'css_path' => 'Pôvodný CSS súbor článku z webovej stránky', 'description' => 'Popis', @@ -52,11 +52,11 @@ 'information' => 'Informácia', 'keep_min' => 'Minimálny počet článkov na uchovanie', 'maintenance' => array( - 'clear_cache' => 'Clear cache', // TODO - Translation - 'clear_cache_help' => 'Clear the cache for this feed.', // TODO - Translation - 'reload_articles' => 'Reload articles', // TODO - Translation - 'reload_articles_help' => 'Reload articles and fetch complete content if a selector is defined.', // TODO - Translation - 'title' => 'Maintenance', // TODO - Translation + 'clear_cache' => 'Vymazať vyrovnáciu pamäť', + 'clear_cache_help' => 'Vymazať vyrovnáciu pamäť pre tento kanál.', + 'reload_articles' => 'Obnoviť články', + 'reload_articles_help' => 'Obnoviť články a stiahnuť kompletný obsah, ak je definovaný selektor.', + 'title' => 'Údržba', ), 'moved_category_deleted' => 'Keď vymažete kategóriu, jej kanály sa automaticky zaradia pod %s.', 'mute' => 'stíšiť', @@ -68,11 +68,11 @@ 'main_stream' => 'Zobraziť v prehľade kanálov', 'normal' => 'Zobraziť vo svojej kategórii', ), - 'proxy' => 'Set a proxy for fetching this feed', // TODO - Translation - 'proxy_help' => 'Select a protocol (e.g: SOCKS5) and enter the proxy address (e.g: 127.0.0.1:1080)', // TODO - Translation + 'proxy' => 'Na sťahovanie tohto kanálu nastaviť proxy', + 'proxy_help' => 'Vyberte protokol (napr.: SOCKS5) a zadajte adresu proxy servera (napr.: 127.0.0.1:1080)', 'selector_preview' => array( - 'show_raw' => 'Show source code', // TODO - Translation - 'show_rendered' => 'Show content', // TODO - Translation + 'show_raw' => 'Zobraziť zdrojový kód', + 'show_rendered' => 'Zobraziť obsah', ), 'show' => array( 'all' => 'Zobraziť všetky kanály', @@ -89,8 +89,8 @@ 'title_add' => 'Pridať kanál RSS', 'ttl' => 'Automaticky neaktualizovať častejšie ako', 'url' => 'Odkaz kanála', - 'useragent' => 'Set the user agent for fetching this feed', // TODO - Translation - 'useragent_help' => 'Example: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:86.0)', // TODO - Translation + 'useragent' => 'Nastaviť používateľského agenta na sťahovanie tohto kanála', + 'useragent_help' => 'Príklad: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:86.0)', 'validator' => 'Skontrolovať platnosť kanála', 'website' => 'Odkaz webovej stránky', 'websub' => 'Okamžité oznámenia cez WebSub', @@ -108,9 +108,9 @@ 'title' => 'Import / export', ), 'menu' => array( - 'add' => 'Add a feed or category', // TODO - Translation + 'add' => 'Pridať kanál alebo kategóriu', 'import_export' => 'Import / export', - 'label_management' => 'Label management', // TODO - Translation + 'label_management' => 'Správca štítkov', 'stats' => array( 'idle' => 'Neaktívne kanály', 'main' => 'Hlavné štatistiky', @@ -120,19 +120,19 @@ 'subscription_tools' => 'Nástroje na odoberanie kanálov', ), 'tag' => array( - 'name' => 'Name', // TODO - Translation - 'new_name' => 'New name', // TODO - Translation - 'old_name' => 'Old name', // TODO - Translation + 'name' => 'Názov', + 'new_name' => 'Nový názov', + 'old_name' => 'Starý názov', ), 'title' => array( '_' => 'Správa odoberaných kanálov', - 'add' => 'Add a feed or category', // TODO - Translation - 'add_category' => 'Add a category', // TODO - Translation - 'add_feed' => 'Add a feed', // TODO - Translation - 'add_label' => 'Add a label', // TODO - Translation - 'delete_label' => 'Delete a label', // TODO - Translation + 'add' => 'Pridať kanál alebo kategóriu', + 'add_category' => 'Pridať kategóriu', + 'add_feed' => 'Pridať kanál', + 'add_label' => 'Pridať štítok', + 'delete_label' => 'Zmazať štítok', 'feed_management' => 'Správa RSS kanálov', - 'rename_label' => 'Rename a label', // TODO - Translation + 'rename_label' => 'Premenovať štítok', 'subscription_tools' => 'Nástroje na odoberanie kanálov', ), ); From 482b17789bff50e02834672ead4727a39c759d13 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tibor=20Rep=C4=8Dek?= Date: Mon, 6 Dec 2021 19:22:19 +0100 Subject: [PATCH 0065/2479] Updated translation (#4036) I translated strings with "TODO - Translation" comment. ;) --- app/i18n/sk/user.php | 40 ++++++++++++++++++++-------------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/app/i18n/sk/user.php b/app/i18n/sk/user.php index 1d93a9f9a57..b0065f7bd25 100644 --- a/app/i18n/sk/user.php +++ b/app/i18n/sk/user.php @@ -3,42 +3,42 @@ return array( 'email' => array( 'feedback' => array( - 'invalid' => 'This email address is invalid.', // TODO - Translation - 'required' => 'An email address is required.', // TODO - Translation + 'invalid' => 'Neplatná e-mailová adresa.', + 'required' => 'E-mailová adresa je povinná.', ), 'validation' => array( - 'change_email' => 'You can change your email address on the profile page.', // TODO - Translation - 'email_sent_to' => 'We sent you an email at %s. Please follow its instructions to validate your address.', // TODO - Translation + 'change_email' => 'E-mailovú adresu môžete zmeniť na stránke profilu.', + 'email_sent_to' => 'Poslali sme Vám e-mail na adresu %s. Prosím, overete Vašu e-mailovú adresu podľa pokynov v e-maile.', 'feedback' => array( - 'email_failed' => 'We couldn’t send you an email because of a server configuration error.', // TODO - Translation - 'email_sent' => 'An email has been sent to your address.', // TODO - Translation - 'error' => 'Email address validation failed.', // TODO - Translation - 'ok' => 'This email address has been validated.', // TODO - Translation - 'unnecessary' => 'This email address was already validated.', // TODO - Translation - 'wrong_token' => 'This email address failed to be validated due to a wrong token.', // TODO - Translation + 'email_failed' => 'E-mail sa nepodarilo odoslať. Server je chybne nastavený.', + 'email_sent' => 'Práve vám bol odoslaný e-mail na vašeu adresu.', + 'error' => 'Nepodarilo sa overiť Vašu e-mailovú adresu.', + 'ok' => 'E-mailová adresa úspešne overená.', + 'unnecessary' => 'Táto e-mailová adresa už bola overená.', + 'wrong_token' => 'Túto e-mailovú adresu sa nepodarilo overiť. Neplatný token.', ), - 'need_to' => 'You need to validate your email address before being able to use %s.', // TODO - Translation - 'resend_email' => 'Resend the email', // TODO - Translation - 'title' => 'Email address validation', // TODO - Translation + 'need_to' => 'Aby ste mohli používať %s, musíte najskôr overiť Vašu e-mailovú adresu', + 'resend_email' => 'Znovu poslať e-mail', + 'title' => 'Overenie e-mailovej adresy', ), ), 'mailer' => array( 'email_need_validation' => array( - 'body' => 'You’ve just registered on %s, but you still need to validate your email address. For that, just follow the link:', // TODO - Translation - 'title' => 'You need to validate your account', // TODO - Translation - 'welcome' => 'Welcome %s,', // TODO - Translation + 'body' => 'Práve ste sa zaregistrovali na %s, ale stále ešte musíte overiť Vašu e-mailovú adresu. Kliknite na odkaz::', + 'title' => 'Overte si Vaše konto', + 'welcome' => 'Vitajte %s,', ), ), 'password' => array( - 'invalid' => 'The password is invalid.', // TODO - Translation + 'invalid' => 'Neplatné heslo.', ), 'tos' => array( 'feedback' => array( - 'invalid' => 'You must accept the Terms of Service to be able to register.', // TODO - Translation + 'invalid' => 'Aby ste sa mohli zaregistrovať, musíte najskôr súhlasiť s podmienkami služby.', ), ), 'username' => array( - 'invalid' => 'This username is invalid.', // TODO - Translation - 'taken' => 'This username, %s, is taken.', // TODO - Translation + 'invalid' => 'Toto používateľské meno je neplatné.', + 'taken' => 'Používateľské meno %s sa už používa.', ), ); From f62633172cf64a795357913062f070f710ab9908 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tibor=20Rep=C4=8Dek?= Date: Tue, 7 Dec 2021 23:16:33 +0100 Subject: [PATCH 0066/2479] Updated translation (#4038) I translated strings with "TODO - Translation" comment. ;) --- app/i18n/sk/admin.php | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/app/i18n/sk/admin.php b/app/i18n/sk/admin.php index 9af3507baa3..37a08ac7e78 100644 --- a/app/i18n/sk/admin.php +++ b/app/i18n/sk/admin.php @@ -153,7 +153,7 @@ 'help' => 'v sekundách', 'number' => 'Dobra, počas ktorej ste prihlásený', ), - 'force_email_validation' => 'Force email address validation', // TODO - Translation + 'force_email_validation' => 'Vynútiť overenie e-mailovej adresy', 'instance-name' => 'Názov inštancie', 'max-categories' => 'Limit počtu kategórií pre používateľa', 'max-feeds' => 'Limit počtu kanálov pre používateľov', @@ -172,18 +172,18 @@ 'title' => 'Aktualizácia systému', ), 'user' => array( - 'admin' => 'Administrator', // TODO - Translation - 'article_count' => 'Articles', // TODO - Translation - 'back_to_manage' => '← Return to user list', // TODO - Translation + 'admin' => 'Administrátor', + 'article_count' => 'Články', + 'back_to_manage' => '← Späť na zoznam používateľov', 'create' => 'Vytvoriť nového používateľa', - 'database_size' => 'Database size', // TODO - Translation - 'email' => 'Email address', // TODO - Translation - 'enabled' => 'Enabled', // TODO - Translation - 'feed_count' => 'Feeds', // TODO - Translation - 'is_admin' => 'Is admin', // TODO - Translation + 'database_size' => 'Veľkosť databázy', + 'email' => 'E-mailová adresa', + 'enabled' => 'Povolené', + 'feed_count' => 'Kanály', + 'is_admin' => 'Je admin', 'language' => 'Jazyk', - 'last_user_activity' => 'Last user activity', // TODO - Translation - 'list' => 'User list', // TODO - Translation + 'last_user_activity' => 'Posledná aktivita používateľa', + 'list' => 'Zoznam používateľov', 'number' => 'Je vytvorený používateľ: %d', 'numbers' => 'Je vytvorených používateľov: %d', 'password_form' => 'Heslo
(pre spôsob prihlásenia cez webový formulár)', From c25dace809c9547d78a2840081612641191e025f Mon Sep 17 00:00:00 2001 From: maTh Date: Tue, 7 Dec 2021 23:17:34 +0100 Subject: [PATCH 0067/2479] fix CSS (#4041) --- p/themes/Swage/swage.css | 2 +- p/themes/Swage/swage.rtl.css | 2 +- p/themes/Swage/swage.scss | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/p/themes/Swage/swage.css b/p/themes/Swage/swage.css index 993b610db3a..5e45997b238 100644 --- a/p/themes/Swage/swage.css +++ b/p/themes/Swage/swage.css @@ -71,7 +71,7 @@ img.icon:hover { background: none; } -div#stream { +main#stream { margin-top: 35px; } diff --git a/p/themes/Swage/swage.rtl.css b/p/themes/Swage/swage.rtl.css index ed1e1b01847..b55da26321a 100644 --- a/p/themes/Swage/swage.rtl.css +++ b/p/themes/Swage/swage.rtl.css @@ -71,7 +71,7 @@ img.icon:hover { background: none; } -div#stream { +main#stream { margin-top: 35px; } diff --git a/p/themes/Swage/swage.scss b/p/themes/Swage/swage.scss index 82f88b7181e..ded23b381e0 100644 --- a/p/themes/Swage/swage.scss +++ b/p/themes/Swage/swage.scss @@ -89,7 +89,7 @@ img { } } -div#stream { +main#stream { margin-top: 35px; } From 1d624d041fb12162eaae3a428e8eca57dc91d50a Mon Sep 17 00:00:00 2001 From: maTh Date: Tue, 7 Dec 2021 23:19:58 +0100 Subject: [PATCH 0068/2479] Fix: global view does not show "no articles to show" alert (#4042) * fix * phpcs fixed * fix JS --- app/views/index/global.phtml | 12 +++++++++++- p/scripts/main.js | 7 +++++++ p/themes/base-theme/template.css | 4 ++++ p/themes/base-theme/template.rtl.css | 4 ++++ 4 files changed, 26 insertions(+), 1 deletion(-) diff --git a/app/views/index/global.phtml b/app/views/index/global.phtml index 5b7e886e8b5..306c6604bdc 100644 --- a/app/views/index/global.phtml +++ b/app/views/index/global.phtml @@ -20,11 +20,14 @@ 'params' => $params, ); + $unreadArticles = 0; + foreach ($this->categories as $cat) { $feeds = $cat->feeds(); $url_base['params']['get'] = 'c_' . $cat->id(); if (!empty($feeds)) { + $unreadArticles += $cat->nbNotRead(); ?>
+ + if ($unreadArticles < 1) { + ?> + +
diff --git a/p/scripts/main.js b/p/scripts/main.js index 16ae7d0f060..3093d1da8fd 100644 --- a/p/scripts/main.js +++ b/p/scripts/main.js @@ -1481,9 +1481,11 @@ function refreshUnreads() { } const isAll = document.querySelector('.category.all.active'); let new_articles = false; + let nbUnreadFeeds = 0; Object.keys(json.feeds).forEach(function (feed_id) { const nbUnreads = json.feeds[feed_id]; + nbUnreadFeeds += nbUnreads; feed_id = 'f_' + feed_id; const elem = document.getElementById(feed_id); const feed_unreads = elem ? str2int(elem.getAttribute('data-unread')) : 0; @@ -1497,6 +1499,11 @@ function refreshUnreads() { } }); + const noArticlesToShow_div = document.getElementById('noArticlesToShow'); + if (nbUnreadFeeds > 0 && noArticlesToShow_div) { + noArticlesToShow_div.classList.add('hide'); + } + let nbUnreadTags = 0; Object.keys(json.tags).forEach(function (tag_id) { diff --git a/p/themes/base-theme/template.css b/p/themes/base-theme/template.css index 421660433e1..3ac7eea2815 100644 --- a/p/themes/base-theme/template.css +++ b/p/themes/base-theme/template.css @@ -434,6 +434,10 @@ a.btn { margin: 5px 20px; } +.alert.hide { + display: none; +} + /*=== Icons */ .icon { display: inline-block; diff --git a/p/themes/base-theme/template.rtl.css b/p/themes/base-theme/template.rtl.css index 19c27ddd7fe..fd5436ec2b6 100644 --- a/p/themes/base-theme/template.rtl.css +++ b/p/themes/base-theme/template.rtl.css @@ -434,6 +434,10 @@ a.btn { margin: 5px 20px; } +.alert.hide { + display: none; +} + /*=== Icons */ .icon { display: inline-block; From 343c7bf3cb6f3c634801d29f1e779b1cb805b638 Mon Sep 17 00:00:00 2001 From: maTh Date: Tue, 7 Dec 2021 23:20:58 +0100 Subject: [PATCH 0069/2479] fix normal and reader view (#4040) --- app/views/index/normal.phtml | 4 +++- app/views/index/reader.phtml | 2 ++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/app/views/index/normal.phtml b/app/views/index/normal.phtml index 045020ab7b2..4adc7047ed0 100644 --- a/app/views/index/normal.phtml +++ b/app/views/index/normal.phtml @@ -120,7 +120,9 @@ $today = @strtotime('today');

-

+ +

+
diff --git a/app/views/index/reader.phtml b/app/views/index/reader.phtml index 0e9fb4b3e9e..6b68ea08fa1 100644 --- a/app/views/index/reader.phtml +++ b/app/views/index/reader.phtml @@ -84,7 +84,9 @@ $content_width = FreshRSS_Context::$user_conf->content_width;

+

+
From 6b046873daf9822380e6f5c1b54a7a27f85cb38d Mon Sep 17 00:00:00 2001 From: maTh Date: Thu, 9 Dec 2021 08:57:21 +0100 Subject: [PATCH 0070/2479] fix global view template (#4043) --- app/views/index/global.phtml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/views/index/global.phtml b/app/views/index/global.phtml index 306c6604bdc..ce1132df5ed 100644 --- a/app/views/index/global.phtml +++ b/app/views/index/global.phtml @@ -57,7 +57,9 @@ ?>

+

+
From f0ca1288d20828f8b88a9d7f60f66b4b3a74f24b Mon Sep 17 00:00:00 2001 From: happymacarts Date: Fri, 10 Dec 2021 02:48:50 -0800 Subject: [PATCH 0071/2479] Update 02_First_steps.md (#4049) spelling correction of "available" --- docs/en/users/02_First_steps.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/en/users/02_First_steps.md b/docs/en/users/02_First_steps.md index 5490147d8e4..b7d441ca899 100644 --- a/docs/en/users/02_First_steps.md +++ b/docs/en/users/02_First_steps.md @@ -8,7 +8,7 @@ This section will guide you to the pages you need to get started. The order is t 2. [Import an OPML or JSON file](04_Subscriptions.md#import-and-export) 3. [Use the bookmarklet](04_Subscriptions.md#use-bookmarklet) -Once you have added your feeds to FreshRSS, it is time to read them. There are three availalbe reading modes: +Once you have added your feeds to FreshRSS, it is time to read them. There are three available reading modes: 1. [The normal view](03_Main_view.md#normal-view) enables you to quickly read new articles 2. [The global view](03_Main_view.md#global-view) shows you an overview of the status of your feeds in one glance From 1ac3effce53e39d89272dfc95b0c68fcaa122dfb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Felix=20B=C3=BChler?= Date: Sun, 12 Dec 2021 13:03:18 +0100 Subject: [PATCH 0072/2479] fever: fix warning of unset array key (#4056) --- p/api/fever.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/p/api/fever.php b/p/api/fever.php index 8d1ba169f47..1bc5aa8dfff 100644 --- a/p/api/fever.php +++ b/p/api/fever.php @@ -508,7 +508,7 @@ protected function getItems() } } elseif (isset($_REQUEST['with_ids'])) { $entry_ids = explode(',', $_REQUEST['with_ids']); - } else { + } elseif (isset($_REQUEST['since_id'])) { // use the since_id argument to request the next $item_limit items $since_id = '' . $_REQUEST['since_id']; if (!ctype_digit($since_id)) { From 816f4178dc2852f47c0d5d81cd8c665d7e48c731 Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Mon, 20 Dec 2021 20:46:41 +0100 Subject: [PATCH 0073/2479] Docker fix missing .htaccess (#4074) Related to https://github.com/FreshRSS/FreshRSS/issues/4073 In our Docker configuration, `.htaccess` files are included only once at startup. The one for themes was missing. --- Docker/FreshRSS.Apache.conf | 4 ++++ p/.htaccess | 3 --- p/themes/.htaccess | 1 + 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/Docker/FreshRSS.Apache.conf b/Docker/FreshRSS.Apache.conf index 050ea48050a..c7a0080ac8e 100644 --- a/Docker/FreshRSS.Apache.conf +++ b/Docker/FreshRSS.Apache.conf @@ -29,3 +29,7 @@ ServerTokens OS IncludeOptional /var/www/FreshRSS/p/i/.htaccess + + + Include /var/www/FreshRSS/p/themes/.htaccess + diff --git a/p/.htaccess b/p/.htaccess index 909fb6cdc7a..55264a4f481 100644 --- a/p/.htaccess +++ b/p/.htaccess @@ -7,10 +7,7 @@ AddDefaultCharset UTF-8 AddType application/json .map - AddType application/font-woff .woff - AddType application/font-woff2 .woff2 - AddCharset UTF-8 .css AddCharset UTF-8 .html AddCharset UTF-8 .js diff --git a/p/themes/.htaccess b/p/themes/.htaccess index 706a7b88e8b..796c55ae0ee 100644 --- a/p/themes/.htaccess +++ b/p/themes/.htaccess @@ -1,5 +1,6 @@ AddType application/font-woff .woff + AddType application/font-woff2 .woff2 AddCharset UTF-8 .css AddCharset UTF-8 .svg From ed8703e674770c092b9d9291c560df5c14e84a45 Mon Sep 17 00:00:00 2001 From: maTh Date: Mon, 20 Dec 2021 20:48:01 +0100 Subject: [PATCH 0074/2479] Improved: Manual: username+pw for demo login (#4072) * added: username+pw for demo login * fix white spaces --- docs/en/index.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/docs/en/index.md b/docs/en/index.md index f485ab210c9..8685d0b596e 100644 --- a/docs/en/index.md +++ b/docs/en/index.md @@ -33,6 +33,11 @@ This documentation is split into different sections: The official demo of FreshRSS is available under [https://demo.freshrss.org/](https://demo.freshrss.org/). +Login credentials: + +* Username: demo +* Password: demodemo + Another chance to try out, but not official supported by FreshRSS: The application is listed on Softaculous [https://www.softaculous.com/apps/rss/FreshRSS](https://www.softaculous.com/apps/rss/FreshRSS). ## Licence From 46cb8644c4d70644a283b9e8efa3e25fdc8d3d41 Mon Sep 17 00:00:00 2001 From: maTh Date: Tue, 21 Dec 2021 23:43:59 +0100 Subject: [PATCH 0075/2479] Fix: Compressed & Cached JS files (#4075) * Update .htaccess * Explicit MIME type for .js https://developer.mozilla.org/en-US/docs/Learn/Server-side/Configuring_server_MIME_types https://www.iana.org/assignments/media-types/media-types.xhtml Co-authored-by: Alexandre Alapetite --- p/.htaccess | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/p/.htaccess b/p/.htaccess index 55264a4f481..f2f2ad90104 100644 --- a/p/.htaccess +++ b/p/.htaccess @@ -6,6 +6,7 @@ FileETag None AddDefaultCharset UTF-8 + AddType application/javascript .js AddType application/json .map AddCharset UTF-8 .html @@ -13,18 +14,18 @@ AddDefaultCharset UTF-8 - AddOutputFilterByType DEFLATE application/javascript application/json application/xhtml+xml image/svg+xml text/css text/html text/javascript + AddOutputFilterByType DEFLATE application/javascript application/json application/xhtml+xml image/svg+xml text/css text/html ExpiresActive on + ExpiresDefault "access plus 1 month" ExpiresByType application/font-woff "access plus 1 month" ExpiresByType application/font-woff2 "access plus 1 month" ExpiresByType application/javascript "access plus 1 month" ExpiresByType application/xhtml+xml "access plus 1 month" ExpiresByType image/x-icon "access plus 1 month" ExpiresByType text/html "access plus 1 month" - ExpiresByType text/javascript "access plus 1 month" ExpiresActive Off From 7a81865e4163936ebd6416ba19a33b75a8532965 Mon Sep 17 00:00:00 2001 From: maTh Date: Tue, 21 Dec 2021 23:44:53 +0100 Subject: [PATCH 0076/2479] Update UserMailer.php (#4076) --- app/Mailers/UserMailer.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/Mailers/UserMailer.php b/app/Mailers/UserMailer.php index 28b8bddf1c2..f1618303abc 100644 --- a/app/Mailers/UserMailer.php +++ b/app/Mailers/UserMailer.php @@ -5,6 +5,8 @@ */ class FreshRSS_User_Mailer extends Minz_Mailer { public function send_email_need_validation($username, $user_config) { + Minz_Translate::reset($user_config->language); + $this->view->_path('user_mailer/email_need_validation.txt.php'); $this->view->username = $username; From 33402355405ce778c1bea1d10c3ca2e9070d6947 Mon Sep 17 00:00:00 2001 From: 4xfu <33265329+4xfu@users.noreply.github.com> Date: Thu, 23 Dec 2021 12:26:34 +0100 Subject: [PATCH 0077/2479] Correct cron example (#4079) The old example was inaccurate. crontab on Debian does not support a user name, but files in /etc/cron.d and /etc/crontab do (see https://manpages.debian.org/bullseye/cron/crontab.5.en.html) According to https://manpages.debian.org/bullseye/cron/cron.8.en.html : In general, the system administrator should not use /etc/cron.d/, but use the standard system crontab /etc/crontab so I propose to append the line to this file --- docs/en/admins/08_FeedUpdates.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/en/admins/08_FeedUpdates.md b/docs/en/admins/08_FeedUpdates.md index a2e8e7ce659..e1a02af319e 100644 --- a/docs/en/admins/08_FeedUpdates.md +++ b/docs/en/admins/08_FeedUpdates.md @@ -18,7 +18,7 @@ It's advisable that you run the Cron job as your Web server user (often `www-dat To run the updater script every hour, and 10 minutes past the hour: -Run `sudo crontab -e` and copy the following line into the crontab: +Edit `/etc/crontab` and append the following line: ```text 10 * * * * www-data php -f /usr/share/FreshRSS/app/actualize_script.php > /tmp/FreshRSS.log 2>&1 ``` From 20c8382c250bc21cb16f04beded665bf137b6bf0 Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Fri, 24 Dec 2021 18:44:34 +0100 Subject: [PATCH 0078/2479] Fix invalid user (#4081) #fix https://github.com/FreshRSS/FreshRSS/issues/4080 Initialise the default user to be able to display the error page --- app/Controllers/authController.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/Controllers/authController.php b/app/Controllers/authController.php index 3202b59f200..e48bf39e8a7 100644 --- a/app/Controllers/authController.php +++ b/app/Controllers/authController.php @@ -125,7 +125,8 @@ public function formLoginAction() { FreshRSS_Context::initUser($username); if (FreshRSS_Context::$user_conf == null) { - //We do not test here whether the user exists, so most likely an internal error. + // Initialise the default user to be able to display the error page + FreshRSS_Context::initUser(FreshRSS_Context::$system_conf->default_user); Minz_Error::error(403, array(_t('feedback.auth.login.invalid')), false); return; } From 078dc65cbc21012eb9cfd2a14398f9ee3f26fcb7 Mon Sep 17 00:00:00 2001 From: maTh Date: Sun, 26 Dec 2021 12:47:17 +0100 Subject: [PATCH 0079/2479] Improved manual: User Management/User registration (#4083) * Draft 1 of Default User page * Draft1 of User Management page * Update 01_Index.md * Update 12_User_management.md * fix failing pipeline * Apply suggestions from code review Co-authored-by: Frans de Jonge Co-authored-by: Frans de Jonge --- docs/en/admins/01_Index.md | 1 + docs/en/admins/12_User_management.md | 35 ++++++++++++++++++++++++++++ docs/en/admins/13_Default_user.md | 24 +++++++++++++++++++ 3 files changed, 60 insertions(+) create mode 100644 docs/en/admins/12_User_management.md create mode 100644 docs/en/admins/13_Default_user.md diff --git a/docs/en/admins/01_Index.md b/docs/en/admins/01_Index.md index c4f3cee7fe7..9842cba8f1b 100644 --- a/docs/en/admins/01_Index.md +++ b/docs/en/admins/01_Index.md @@ -8,6 +8,7 @@ Learn how to install, update, and backup FreshRSS, as well as how to use the com ## Tutorials and Examples +* [User management](12_User_management.md) * [Backing up FreshRSS](05_Backup.md) * [Installing themes](11_Themes.md) * [Installation on Debian 9/Ubuntu 16.04](06_LinuxInstall.md) diff --git a/docs/en/admins/12_User_management.md b/docs/en/admins/12_User_management.md new file mode 100644 index 00000000000..e2c19b467c2 --- /dev/null +++ b/docs/en/admins/12_User_management.md @@ -0,0 +1,35 @@ +# User Management + +## User list + +Settings page: `Administation` -> `Manage Users`. + +The [default user](13_Default_user.md) is marked with italic letters. + +## Create new user + +Settings page: `Administation` → `Manage Users`. + +For a new user the following information is necessary: +* language +* username +* is it an administrator account? +* password + +If in the `System configuration` the `Force email address validation` is enabled, then the email address input is shown and mandatory. + +## User registration form + +New users could use the self registration form in the frontend. + +The user registration form is available via the login form, when the maximum number of accounts is smaller than the number of created accounts (Set up in `Administration` → `System configuration`). If the maximum number of accounts is 0, than there is no limit on the number of user accounts. + +If in the `System configuration` the `Force email addres validation` is enabled, than the email address input is shown and mandatory. + +It is optional to have a `Terms of Service` (`ToS`). If ToS is enabled, then it is mandatory to check it for registration. + +### Enable Terms of Service (ToS) + +Create a file `tos.html` in `./data`. + +Example of TOS: see `./data/tos.example.html` diff --git a/docs/en/admins/13_Default_user.md b/docs/en/admins/13_Default_user.md new file mode 100644 index 00000000000..946d5381474 --- /dev/null +++ b/docs/en/admins/13_Default_user.md @@ -0,0 +1,24 @@ +# Default User + +Currently, we have one `main user`, also called `default user`, or `admin`. All the others are `regular users`. + +The default user is the first created user within the install routine. + +## Manage + +The default user is always an administrator. + +It is impossible to demote or disable the user. + +## Anonymous reading mode + +The default user is used for the anonymous reading. + +How to enable the anonymous reading mode: +* go to settings `Administration` → `Authentication` +* enable the checkbox of `Allow anonymous reading of the default user's articles` +* when no user is logged in then the feeds of the default user is shown + +## Change the default user + +There is no UI for changing the default user, but a CLI (`./cli/reconfigure.php --default_user YourNewAdmin`) is provided. It can also be changed manually by editing the text file `./FreshRSS/data/config.php` and changing `'default_user' => 'alice'`, to the desired user. From 9e901d0eed45907b494e1f36d409293cb6ddf0bc Mon Sep 17 00:00:00 2001 From: Virgil Chen <26373319+VirgilChen97@users.noreply.github.com> Date: Mon, 27 Dec 2021 19:24:58 +0800 Subject: [PATCH 0080/2479] fix: incorrect translations (#4084) --- app/i18n/zh-cn/sub.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/i18n/zh-cn/sub.php b/app/i18n/zh-cn/sub.php index e67daff216f..be736a94402 100644 --- a/app/i18n/zh-cn/sub.php +++ b/app/i18n/zh-cn/sub.php @@ -68,7 +68,7 @@ 'main_stream' => '在首页中显示', 'normal' => '在分类中显示', ), - 'proxy' => '获取原文时的代理', + 'proxy' => '获取订阅源时的代理', 'proxy_help' => '选择协议(例:SOCKS5)和代理地址(例:127.0.0.1:1080)', 'selector_preview' => array( 'show_raw' => '显示源码', From 25954de759585311dd33efcb334c5ddb18052c9a Mon Sep 17 00:00:00 2001 From: maTh Date: Tue, 28 Dec 2021 11:52:03 +0100 Subject: [PATCH 0081/2479] Fix: loading wheel (#4082) * fix anoym. user * fix global view * Update app/views/helpers/pagination.phtml Co-authored-by: Frans de Jonge * Update global_view.js Co-authored-by: Frans de Jonge --- app/views/helpers/pagination.phtml | 4 ++++ p/scripts/global_view.js | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/app/views/helpers/pagination.phtml b/app/views/helpers/pagination.phtml index 86b1997e96a..cefa835bd8d 100755 --- a/app/views/helpers/pagination.phtml +++ b/app/views/helpers/pagination.phtml @@ -22,6 +22,8 @@ $hasAccess = FreshRSS_Auth::hasAccess(); if ($url_mark_read && $hasAccess) { ?>
+ +
  • @@ -48,4 +50,6 @@ if ($url_mark_read && $hasAccess) { ?>
+ +
diff --git a/p/scripts/global_view.js b/p/scripts/global_view.js index e3a07382a53..99dc1d87e48 100644 --- a/p/scripts/global_view.js +++ b/p/scripts/global_view.js @@ -19,7 +19,7 @@ function load_panel(link) { return; } const html = this.response; - const foreign = html.querySelectorAll('.nav_menu, #stream .day, #stream .flux, #stream .pagination, #stream.prompt'); + const foreign = html.querySelectorAll('.nav_menu, #stream .day, #stream .flux, #mark-read-pagination, #stream.prompt'); const panel = document.getElementById('panel'); foreign.forEach(function (el) { panel.appendChild(document.adoptNode(el)); From 2c6df2889631af8b8af14711b577a4910208d1a9 Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Tue, 28 Dec 2021 17:00:44 +0100 Subject: [PATCH 0082/2479] Partial changelog --- CHANGELOG.md | 42 +++++++++++++++++++++++++++++++++--------- 1 file changed, 33 insertions(+), 9 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8efa8023a68..d45265d74c5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,6 @@ # FreshRSS changelog -## 2021-XX-XX FreshRSS 1.19.0-dev +## 2021-12-XX FreshRSS 1.19.0-dev * Features * New setting to automatically mark as read a new article if there is already one with the same title in the same feed [#3303](https://github.com/FreshRSS/FreshRSS/pull/3303) @@ -11,48 +11,72 @@ * Bug fixing * Fix marking as read a label with SQLite and PostgreSQL [#3711](https://github.com/FreshRSS/FreshRSS/pull/3711) * Better fallback for feeds without title [#3787](https://github.com/FreshRSS/FreshRSS/pull/3787) + * Fix auto-load articles in anonymous mode and global view [#4082](https://github.com/FreshRSS/FreshRSS/pull/4082) + * Fix several typos found by PHPstan, including one affecting the cache of *keep max unread articles* [#4019](https://github.com/FreshRSS/FreshRSS/pull/4019) + * Fix warning in Fever API [#4056](https://github.com/FreshRSS/FreshRSS/pull/4056) + * Show *no articles* alert-box also in global view [#4042](https://github.com/FreshRSS/FreshRSS/pull/4042), [#3099](https://github.com/FreshRSS/FreshRSS/pull/3999) + * Fix JavaScript warnings for non-validated users [#3980](https://github.com/FreshRSS/FreshRSS/pull/3980) + * Fix show password in settings [#3966](https://github.com/FreshRSS/FreshRSS/pull/3966) * Security - * Better error handling when a user does not exist (especially for API) [#3751](https://github.com/FreshRSS/FreshRSS/pull/3751) + * Better error handling when a user does not exist (especially for API) [#3751](https://github.com/FreshRSS/FreshRSS/pull/3751), [#4084](https://github.com/FreshRSS/FreshRSS/pull/4084) + * Do not show *Add new feed* for anonymous users [#4040](https://github.com/FreshRSS/FreshRSS/pull/4040) + * Do not show back link on error pages if the user does not have access [#3765](https://github.com/FreshRSS/FreshRSS/pull/3765) + * Only show *Back to RSS feeds* when logged-in [#3790](https://github.com/FreshRSS/FreshRSS/pull/3790) * Compatibility * Require PHP 7.0+ (drop support for PHP 5.x) [#3666](https://github.com/FreshRSS/FreshRSS/pull/3666) * Drop support for Microsoft Internet Explorer (IE11) [#3666](https://github.com/FreshRSS/FreshRSS/pull/3666) + * Fix some warnings with PHP 8.1+ [#4012](https://github.com/FreshRSS/FreshRSS/pull/4012), [#4018](https://github.com/FreshRSS/FreshRSS/pull/4018) * Fix back-compatibility with Git 2.21- for automatic updates [#3669](https://github.com/FreshRSS/FreshRSS/pull/3669) + * Fix JavaScript caching and compression for some Apache platforms [#4075](https://github.com/FreshRSS/FreshRSS/pull/4075) * Deployment * Docker: development image `:oldest` is now based on `alpine:3.5` with PHP 7.0.33 and Apache 2.4.35 [#3666](https://github.com/FreshRSS/FreshRSS/pull/3666) - * Docker: default image updated to Debian 11 Bullseye with PHP 7.4.21 and Apache 2.4.48 [#3782](https://github.com/FreshRSS/FreshRSS/pull/3782) + * Docker: default image updated to Debian 11 Bullseye with PHP 7.4.25 and Apache 2.4.51 [#3782](https://github.com/FreshRSS/FreshRSS/pull/3782) * Docker: alternative image updated to Alpine 3.15 with PHP 8.0.13 and Apache 2.4.51 [#3996](https://github.com/FreshRSS/FreshRSS/pull/3996) + * Docker: fix inclusion of `.htaccess` for `./p/themes/` folder [#4074](https://github.com/FreshRSS/FreshRSS/pull/4074) * Docker: only add the crontab when `CRON_MIN` is set [#3927](https://github.com/FreshRSS/FreshRSS/pull/3927) + * Docker: move logic to disable FreshRSS updates [#3973](https://github.com/FreshRSS/FreshRSS/pull/3973) * Images on Docker Hub are automatically scanned for software vulnerabilities * UI * New thumbnail and/or summary options for the normal view [#3805](https://github.com/FreshRSS/FreshRSS/pull/3805) + * Remember article filters when changing views (category / feed) [#3986](https://github.com/FreshRSS/FreshRSS/pull/3986) + * Mobile view can access the configuration menu [#3881](https://github.com/FreshRSS/FreshRSS/pull/3881) + * Improve layout of settings on small screen [#3818](https://github.com/FreshRSS/FreshRSS/pull/3818), [#3819](https://github.com/FreshRSS/FreshRSS/pull/3819) * Use HTML5 tags with better semantics and structure [#3651](https://github.com/FreshRSS/FreshRSS/pull/3651), [#3676](https://github.com/FreshRSS/FreshRSS/pull/3676), [#3713](https://github.com/FreshRSS/FreshRSS/pull/3713), [#3747](https://github.com/FreshRSS/FreshRSS/pull/3747), [#3830](https://github.com/FreshRSS/FreshRSS/pull/3830), [#3851](https://github.com/FreshRSS/FreshRSS/pull/3851) * Allow JavaScript in themes [#3739](https://github.com/FreshRSS/FreshRSS/pull/3739) - * Improve layout of settings on small screen [#3818](https://github.com/FreshRSS/FreshRSS/pull/3818), [#3819](https://github.com/FreshRSS/FreshRSS/pull/3819) * Improve layout of statistics [#3797](https://github.com/FreshRSS/FreshRSS/pull/3797), [#3799](https://github.com/FreshRSS/FreshRSS/pull/3799) * Updated Flotr2 library [#3800](https://github.com/FreshRSS/FreshRSS/pull/3800) * Remove jQuery fully [#3847](https://github.com/FreshRSS/FreshRSS/pull/3847) + * Improve label management [#3959](https://github.com/FreshRSS/FreshRSS/pull/3959) * Update layout of user queries [#3827](https://github.com/FreshRSS/FreshRSS/pull/3827) * Improve style of install procedure [#3721](https://github.com/FreshRSS/FreshRSS/pull/3721) * Add retry button when checking requirements during install [#3771](https://github.com/FreshRSS/FreshRSS/pull/3771) * Improve notification icon [#3678](https://github.com/FreshRSS/FreshRSS/pull/3678) - * Only show *Back to RSS feeds* when logged-in [#3790](https://github.com/FreshRSS/FreshRSS/pull/3790) * Add CSS class to back links [#3761](https://github.com/FreshRSS/FreshRSS/pull/3761) - * Misc. minor UI and style improvements [#3792](https://github.com/FreshRSS/FreshRSS/pull/3792), [#3795](https://github.com/FreshRSS/FreshRSS/pull/3795), [#3801](https://github.com/FreshRSS/FreshRSS/pull/3801), [#3802](https://github.com/FreshRSS/FreshRSS/pull/3802), [#3817](https://github.com/FreshRSS/FreshRSS/pull/3817), [#3821](https://github.com/FreshRSS/FreshRSS/pull/3821), [#3824](https://github.com/FreshRSS/FreshRSS/pull/3824), [#3831](https://github.com/FreshRSS/FreshRSS/pull/3831), [#3832](https://github.com/FreshRSS/FreshRSS/pull/3832) + * Better support for `400` and `405` HTTP error codes [#3981](https://github.com/FreshRSS/FreshRSS/pull/3981) + * Many minor UI and style improvements [#3792](https://github.com/FreshRSS/FreshRSS/pull/3792), [#3795](https://github.com/FreshRSS/FreshRSS/pull/3795), [#3801](https://github.com/FreshRSS/FreshRSS/pull/3801), [#3802](https://github.com/FreshRSS/FreshRSS/pull/3802), [#3817](https://github.com/FreshRSS/FreshRSS/pull/3817), [#3821](https://github.com/FreshRSS/FreshRSS/pull/3821), [#3824](https://github.com/FreshRSS/FreshRSS/pull/3824), [#3831](https://github.com/FreshRSS/FreshRSS/pull/3831), [#3832](https://github.com/FreshRSS/FreshRSS/pull/3832), [#3969](https://github.com/FreshRSS/FreshRSS/pull/3969), [#3989](https://github.com/FreshRSS/FreshRSS/pull/3989), [#3990](https://github.com/FreshRSS/FreshRSS/pull/3990), [#4005](https://github.com/FreshRSS/FreshRSS/pull/4005), [#4015](https://github.com/FreshRSS/FreshRSS/pull/4015) * Themes + * Show search box for all themes in mobile view [#4025](https://github.com/FreshRSS/FreshRSS/pull/4025) * Fix *alternative-dark* theme to avoid bright elements [#3774](https://github.com/FreshRSS/FreshRSS/pull/3774), [#3806](https://github.com/FreshRSS/FreshRSS/pull/3806) * Improve the contrast of message boxes for the *Origine* theme [#3725](https://github.com/FreshRSS/FreshRSS/pull/3725) * Uniformize the size of `input`and `select` elements for the *Origine* theme [#3727](https://github.com/FreshRSS/FreshRSS/pull/3727) * Fix style of banner text for the *Origine* theme [#3731](https://github.com/FreshRSS/FreshRSS/pull/3731) * i18n - * Fix bug in French and German translations of new/old tags [#3703](https://github.com/FreshRSS/FreshRSS/pull/3703), [#3668](https://github.com/FreshRSS/FreshRSS/pull/3668) + * Fix language of e-mail notifications [#4076](https://github.com/FreshRSS/FreshRSS/pull/4076) * Lint i18n [#3841](https://github.com/FreshRSS/FreshRSS/pull/3841) + * Fix bug in French and German translations of new/old tags [#3703](https://github.com/FreshRSS/FreshRSS/pull/3703), [#3668](https://github.com/FreshRSS/FreshRSS/pull/3668) * Add Japanese [#3828](https://github.com/FreshRSS/FreshRSS/pull/3828), [#3834](https://github.com/FreshRSS/FreshRSS/pull/3834) + * Improve Chineese [#3963](https://github.com/FreshRSS/FreshRSS/pull/3963), [#4084](https://github.com/FreshRSS/FreshRSS/pull/4084) * Improve Dutch [#3844](https://github.com/FreshRSS/FreshRSS/pull/3844) - * Improve German [#3720](https://github.com/FreshRSS/FreshRSS/pull/3720), [#3846](https://github.com/FreshRSS/FreshRSS/pull/3846) + * Improve German [#3720](https://github.com/FreshRSS/FreshRSS/pull/3720), [#3846](https://github.com/FreshRSS/FreshRSS/pull/3846), [#4008](https://github.com/FreshRSS/FreshRSS/pull/4008) + * Improve Polish [#4027](https://github.com/FreshRSS/FreshRSS/pull/4027) + * Improve Slovak [#4036](https://github.com/FreshRSS/FreshRSS/pull/4036) * Extensions * Add system configuration for extension [#3626](https://github.com/FreshRSS/FreshRSS/pull/3626) +* SimplePie + * Merge from upstream, help with PHP 8.1+ [#4011](https://github.com/FreshRSS/FreshRSS/pull/4011) * Misc. - * Do not show back link on error pages if the user does not have access [#3765](https://github.com/FreshRSS/FreshRSS/pull/3765) + * Simplify Minz code with PHP 7 `??` operator [#4020](https://github.com/FreshRSS/FreshRSS/pull/4020) + * Upgrade PHPMailer to 6.5.1 [#3977](https://github.com/FreshRSS/FreshRSS/pull/3977) * Added Raindrop.io as sharing option [#3717](https://github.com/FreshRSS/FreshRSS/pull/3717) * Delete outdated information regarding Firefox feed reader list [#3822](https://github.com/FreshRSS/FreshRSS/pull/3822) From dae64c237497cdba42def43760c9a88158185471 Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Wed, 29 Dec 2021 13:18:57 +0100 Subject: [PATCH 0083/2479] Changelog 1.19.0 --- CHANGELOG.md | 43 +++++++++++++++++++++++++++++++++---------- 1 file changed, 33 insertions(+), 10 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d45265d74c5..1cabcdf98fb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,25 +3,33 @@ ## 2021-12-XX FreshRSS 1.19.0-dev * Features + * New thumbnail and/or summary options for the normal view [#3805](https://github.com/FreshRSS/FreshRSS/pull/3805) * New setting to automatically mark as read a new article if there is already one with the same title in the same feed [#3303](https://github.com/FreshRSS/FreshRSS/pull/3303) * New setting to keep only a maximum number of unread articles in a given feed [#3303](https://github.com/FreshRSS/FreshRSS/pull/3303) * New search operator based on custom labels, or not [#3709](https://github.com/FreshRSS/FreshRSS/pull/3709) * Search articles with label IDs: `L:12,13,14` or label names: `label:something` or `labels:"my label,my other label,🧪"` * Search articles with any label: `L:*` or no label: `!L:*` + * Add support for installable progressive web app (PWA) [#3890](https://github.com/FreshRSS/FreshRSS/pull/3890) * Bug fixing * Fix marking as read a label with SQLite and PostgreSQL [#3711](https://github.com/FreshRSS/FreshRSS/pull/3711) * Better fallback for feeds without title [#3787](https://github.com/FreshRSS/FreshRSS/pull/3787) * Fix auto-load articles in anonymous mode and global view [#4082](https://github.com/FreshRSS/FreshRSS/pull/4082) - * Fix several typos found by PHPstan, including one affecting the cache of *keep max unread articles* [#4019](https://github.com/FreshRSS/FreshRSS/pull/4019) + * Fix several typos found by PHPStan, including one affecting the cache of *keep max unread articles* [#4019](https://github.com/FreshRSS/FreshRSS/pull/4019) * Fix warning in Fever API [#4056](https://github.com/FreshRSS/FreshRSS/pull/4056) * Show *no articles* alert-box also in global view [#4042](https://github.com/FreshRSS/FreshRSS/pull/4042), [#3099](https://github.com/FreshRSS/FreshRSS/pull/3999) - * Fix JavaScript warnings for non-validated users [#3980](https://github.com/FreshRSS/FreshRSS/pull/3980) + * Fix theme selection when a theme has been deleted [#3874](https://github.com/FreshRSS/FreshRSS/pull/3874) + * Fix keyboard shortcuts in anonymous mode [#3945](https://github.com/FreshRSS/FreshRSS/pull/3945) * Fix show password in settings [#3966](https://github.com/FreshRSS/FreshRSS/pull/3966) + * Fix JavaScript warnings for non-validated users [#3980](https://github.com/FreshRSS/FreshRSS/pull/3980) + * Fix drag & drop layout for subscriptions [#3949](https://github.com/FreshRSS/FreshRSS/pull/3949) * Security * Better error handling when a user does not exist (especially for API) [#3751](https://github.com/FreshRSS/FreshRSS/pull/3751), [#4084](https://github.com/FreshRSS/FreshRSS/pull/4084) * Do not show *Add new feed* for anonymous users [#4040](https://github.com/FreshRSS/FreshRSS/pull/4040) + * Do not show *Mark as read / unread / favourite* for anonymous users [#3871](https://github.com/FreshRSS/FreshRSS/pull/3871), [#3876](https://github.com/FreshRSS/FreshRSS/pull/3876) * Do not show back link on error pages if the user does not have access [#3765](https://github.com/FreshRSS/FreshRSS/pull/3765) * Only show *Back to RSS feeds* when logged-in [#3790](https://github.com/FreshRSS/FreshRSS/pull/3790) + * Fix for special characters in keyboard shortcuts [#3922](https://github.com/FreshRSS/FreshRSS/issues/3922) + * Remove old workarounds with white space to prevent password autocompletion [#3814](https://github.com/FreshRSS/FreshRSS/pull/3814) * Compatibility * Require PHP 7.0+ (drop support for PHP 5.x) [#3666](https://github.com/FreshRSS/FreshRSS/pull/3666) * Drop support for Microsoft Internet Explorer (IE11) [#3666](https://github.com/FreshRSS/FreshRSS/pull/3666) @@ -35,16 +43,20 @@ * Docker: fix inclusion of `.htaccess` for `./p/themes/` folder [#4074](https://github.com/FreshRSS/FreshRSS/pull/4074) * Docker: only add the crontab when `CRON_MIN` is set [#3927](https://github.com/FreshRSS/FreshRSS/pull/3927) * Docker: move logic to disable FreshRSS updates [#3973](https://github.com/FreshRSS/FreshRSS/pull/3973) + * Docker: allow mounting a volume for the cron file [#3927](https://github.com/FreshRSS/FreshRSS/pull/3927) * Images on Docker Hub are automatically scanned for software vulnerabilities * UI - * New thumbnail and/or summary options for the normal view [#3805](https://github.com/FreshRSS/FreshRSS/pull/3805) * Remember article filters when changing views (category / feed) [#3986](https://github.com/FreshRSS/FreshRSS/pull/3986) - * Mobile view can access the configuration menu [#3881](https://github.com/FreshRSS/FreshRSS/pull/3881) + * Mobile view can access the configuration menu [#3879](https://github.com/FreshRSS/FreshRSS/pull/3879), [#3881](https://github.com/FreshRSS/FreshRSS/pull/3881) * Improve layout of settings on small screen [#3818](https://github.com/FreshRSS/FreshRSS/pull/3818), [#3819](https://github.com/FreshRSS/FreshRSS/pull/3819) + * New shortcut to jump to next unread article [#3891](https://github.com/FreshRSS/FreshRSS/pull/3891) + * New shortcut to actualise feeds [#3900](https://github.com/FreshRSS/FreshRSS/pull/3900) + * Implement Escape shortcut to close panels [#3901](https://github.com/FreshRSS/FreshRSS/pull/3901) + * Improve layout of subscription management page [#3893](https://github.com/FreshRSS/FreshRSS/pull/3893) * Use HTML5 tags with better semantics and structure [#3651](https://github.com/FreshRSS/FreshRSS/pull/3651), [#3676](https://github.com/FreshRSS/FreshRSS/pull/3676), [#3713](https://github.com/FreshRSS/FreshRSS/pull/3713), [#3747](https://github.com/FreshRSS/FreshRSS/pull/3747), [#3830](https://github.com/FreshRSS/FreshRSS/pull/3830), [#3851](https://github.com/FreshRSS/FreshRSS/pull/3851) * Allow JavaScript in themes [#3739](https://github.com/FreshRSS/FreshRSS/pull/3739) - * Improve layout of statistics [#3797](https://github.com/FreshRSS/FreshRSS/pull/3797), [#3799](https://github.com/FreshRSS/FreshRSS/pull/3799) - * Updated Flotr2 library [#3800](https://github.com/FreshRSS/FreshRSS/pull/3800) + * Improve layout of statistics [#3797](https://github.com/FreshRSS/FreshRSS/pull/3797), [#3799](https://github.com/FreshRSS/FreshRSS/pull/3799), [#3803](https://github.com/FreshRSS/FreshRSS/pull/3803) + * Replace flotr2 with chart.js library [#3858](https://github.com/FreshRSS/FreshRSS/pull/3858) * Remove jQuery fully [#3847](https://github.com/FreshRSS/FreshRSS/pull/3847) * Improve label management [#3959](https://github.com/FreshRSS/FreshRSS/pull/3959) * Update layout of user queries [#3827](https://github.com/FreshRSS/FreshRSS/pull/3827) @@ -53,7 +65,7 @@ * Improve notification icon [#3678](https://github.com/FreshRSS/FreshRSS/pull/3678) * Add CSS class to back links [#3761](https://github.com/FreshRSS/FreshRSS/pull/3761) * Better support for `400` and `405` HTTP error codes [#3981](https://github.com/FreshRSS/FreshRSS/pull/3981) - * Many minor UI and style improvements [#3792](https://github.com/FreshRSS/FreshRSS/pull/3792), [#3795](https://github.com/FreshRSS/FreshRSS/pull/3795), [#3801](https://github.com/FreshRSS/FreshRSS/pull/3801), [#3802](https://github.com/FreshRSS/FreshRSS/pull/3802), [#3817](https://github.com/FreshRSS/FreshRSS/pull/3817), [#3821](https://github.com/FreshRSS/FreshRSS/pull/3821), [#3824](https://github.com/FreshRSS/FreshRSS/pull/3824), [#3831](https://github.com/FreshRSS/FreshRSS/pull/3831), [#3832](https://github.com/FreshRSS/FreshRSS/pull/3832), [#3969](https://github.com/FreshRSS/FreshRSS/pull/3969), [#3989](https://github.com/FreshRSS/FreshRSS/pull/3989), [#3990](https://github.com/FreshRSS/FreshRSS/pull/3990), [#4005](https://github.com/FreshRSS/FreshRSS/pull/4005), [#4015](https://github.com/FreshRSS/FreshRSS/pull/4015) + * Many minor UI and style improvements [#3792](https://github.com/FreshRSS/FreshRSS/pull/3792), [#3795](https://github.com/FreshRSS/FreshRSS/pull/3795), [#3801](https://github.com/FreshRSS/FreshRSS/pull/3801), [#3802](https://github.com/FreshRSS/FreshRSS/pull/3802), [#3817](https://github.com/FreshRSS/FreshRSS/pull/3817), [#3821](https://github.com/FreshRSS/FreshRSS/pull/3821), [#3824](https://github.com/FreshRSS/FreshRSS/pull/3824), [#3831](https://github.com/FreshRSS/FreshRSS/pull/3831), [#3832](https://github.com/FreshRSS/FreshRSS/pull/3832), [#3877](https://github.com/FreshRSS/FreshRSS/pull/3877), [#3880](https://github.com/FreshRSS/FreshRSS/pull/3880), [#3969](https://github.com/FreshRSS/FreshRSS/pull/3969), [#3989](https://github.com/FreshRSS/FreshRSS/pull/3989), [#3990](https://github.com/FreshRSS/FreshRSS/pull/3990), [#4005](https://github.com/FreshRSS/FreshRSS/pull/4005), [#4015](https://github.com/FreshRSS/FreshRSS/pull/4015) * Themes * Show search box for all themes in mobile view [#4025](https://github.com/FreshRSS/FreshRSS/pull/4025) * Fix *alternative-dark* theme to avoid bright elements [#3774](https://github.com/FreshRSS/FreshRSS/pull/3774), [#3806](https://github.com/FreshRSS/FreshRSS/pull/3806) @@ -64,17 +76,28 @@ * Fix language of e-mail notifications [#4076](https://github.com/FreshRSS/FreshRSS/pull/4076) * Lint i18n [#3841](https://github.com/FreshRSS/FreshRSS/pull/3841) * Fix bug in French and German translations of new/old tags [#3703](https://github.com/FreshRSS/FreshRSS/pull/3703), [#3668](https://github.com/FreshRSS/FreshRSS/pull/3668) + * Fix name of keyboard shortcut to open in new tab [#3899](https://github.com/FreshRSS/FreshRSS/pull/3899) * Add Japanese [#3828](https://github.com/FreshRSS/FreshRSS/pull/3828), [#3834](https://github.com/FreshRSS/FreshRSS/pull/3834) - * Improve Chineese [#3963](https://github.com/FreshRSS/FreshRSS/pull/3963), [#4084](https://github.com/FreshRSS/FreshRSS/pull/4084) - * Improve Dutch [#3844](https://github.com/FreshRSS/FreshRSS/pull/3844) - * Improve German [#3720](https://github.com/FreshRSS/FreshRSS/pull/3720), [#3846](https://github.com/FreshRSS/FreshRSS/pull/3846), [#4008](https://github.com/FreshRSS/FreshRSS/pull/4008) + * Improve Chineese [#3926](https://github.com/FreshRSS/FreshRSS/pull/3926), [#3947](https://github.com/FreshRSS/FreshRSS/pull/3947), [#3963](https://github.com/FreshRSS/FreshRSS/pull/3963), [#4084](https://github.com/FreshRSS/FreshRSS/pull/4084) + * Improve Dutch [#3844](https://github.com/FreshRSS/FreshRSS/pull/3844), [#3928](https://github.com/FreshRSS/FreshRSS/pull/3928) + * Improve German [#3720](https://github.com/FreshRSS/FreshRSS/pull/3720), [#3846](https://github.com/FreshRSS/FreshRSS/pull/3846), [#3913](https://github.com/FreshRSS/FreshRSS/pull/3913), [#4008](https://github.com/FreshRSS/FreshRSS/pull/4008) + * Improve Italian [#3939](https://github.com/FreshRSS/FreshRSS/pull/3939) + * Improve Korean [#3914](https://github.com/FreshRSS/FreshRSS/pull/3914) + * Improve Occitan [#3935](https://github.com/FreshRSS/FreshRSS/pull/3935) * Improve Polish [#4027](https://github.com/FreshRSS/FreshRSS/pull/4027) + * Improve Portuguese [#3908](https://github.com/FreshRSS/FreshRSS/pull/3908), [#3925](https://github.com/FreshRSS/FreshRSS/pull/3925) + * Improve Russian [#3907](https://github.com/FreshRSS/FreshRSS/pull/3907) * Improve Slovak [#4036](https://github.com/FreshRSS/FreshRSS/pull/4036) + * Improve Spanish [#3916](https://github.com/FreshRSS/FreshRSS/pull/3916) * Extensions * Add system configuration for extension [#3626](https://github.com/FreshRSS/FreshRSS/pull/3626) * SimplePie * Merge from upstream, help with PHP 8.1+ [#4011](https://github.com/FreshRSS/FreshRSS/pull/4011) + * Fallback to file extensions for enclosures not providing a media type [#3861](https://github.com/FreshRSS/FreshRSS/pull/3861) * Misc. + * Implement GitHub Actions for continuous integration / automated testing [3920](https://github.com/FreshRSS/FreshRSS/pull/3920) + * Use ESLint instead of JSHint [#3906](https://github.com/FreshRSS/FreshRSS/pull/3906) + * Improve `.editorconfig` and `.stylelintrc` [#3895](https://github.com/FreshRSS/FreshRSS/pull/3895), [#3912](https://github.com/FreshRSS/FreshRSS/pull/3912) * Simplify Minz code with PHP 7 `??` operator [#4020](https://github.com/FreshRSS/FreshRSS/pull/4020) * Upgrade PHPMailer to 6.5.1 [#3977](https://github.com/FreshRSS/FreshRSS/pull/3977) * Added Raindrop.io as sharing option [#3717](https://github.com/FreshRSS/FreshRSS/pull/3717) From dd4a15542f22f6afc4f09b734839de5d091bd4a9 Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Wed, 29 Dec 2021 14:06:10 +0100 Subject: [PATCH 0084/2479] Update credits --- CREDITS.md | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/CREDITS.md b/CREDITS.md index 5f0928c1a2d..6f14238b766 100644 --- a/CREDITS.md +++ b/CREDITS.md @@ -9,6 +9,7 @@ People are sorted by name so please keep this order. --- * [312k](https://github.com/312k): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:312k) +* [4xfu](https://github.com/4xfu): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:4xfu) * [Adrien Dorsaz](https://github.com/Trim): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:Trim), [Web](https://adorsaz.ch/) * [Alexander Steinhöfer](https://github.com/lx-s): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:lx-s), [Web](https://lx-s.de/) * [Alexandre Alapetite](https://github.com/Alkarex): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:Alkarex), [Web](https://alexandre.alapetite.fr/) @@ -25,8 +26,10 @@ People are sorted by name so please keep this order. * [bpatath](https://github.com/bpatath): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:bpatath) * [Brewal Bouvet](https://github.com/Jucgshu): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:Jucgshu), [Web](https://dizolo.eu/) * [Brooke.](https://github.com/BrookeDot): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:BrookeDot), [Web](https://brooke.codes/) +* [caminsha](https://github.com/caminsha): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:caminsha) * [Cem KOÇ](https://github.com/hckweb): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:hckweb) * [chemical1979](https://github.com/chemical1979): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:chemical1979) +* [Chris Francy](https://github.com/zoredache): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:zoredache) * [Clemens Neubauer](https://github.com/cn-tools): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:cn-tools), [Web](http://cn-tools.eu/) * [Corentin Garcia](https://github.com/corenting): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:corenting), [Web](http://corenting.fr/) * [Craig Andrews](https://github.com/candrews): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:candrews), [Web](http://candrews.integralblue.com/) @@ -35,6 +38,7 @@ People are sorted by name so please keep this order. * [Damien Leroy](https://github.com/ShiiFu): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:ShiiFu) * [Damstre](https://github.com/Damstre): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:Damstre) * [danc](https://github.com/danc): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:danc), [Web](http://tintouli.free.fr/) +* [Daniel Lo Nigro](https://github.com/Daniel15): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:Daniel15), [Web](https://d.sb/) * [David Souza](https://github.com/araujo0205): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:araujo0205), [Web](http://davidsouza.tech/) * [Django Janny](https://github.com/keltroth): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:keltroth) * [dswd](https://github.com/dswd): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:dswd) @@ -47,15 +51,19 @@ People are sorted by name so please keep this order. * [flo0627](https://github.com/flo0627): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:flo0627) * [Frans de Jonge](https://github.com/Frenzie): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:Frenzie), [Web](http://fransdejonge.com/) * [Gaurav Thakur](https://github.com/notfoss): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:notfoss), [Web](https://blog.notfoss.com/) +* [Gianni Scolaro](https://github.com/giannidsp): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:giannidsp) * [Gregor Nathanael Meyer](https://github.com/spackmat): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:spackmat), [Web](https://der-meyer.de) * [gsongsong](https://github.com/gsongsong): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:gsongsong) * [Guillaume Fillon](https://github.com/kokaz): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:kokaz), [Web](http://www.guillaume-fillon.com/) * [Guillaume Hayot](https://github.com/postblue): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:postblue), [Web](https://postblue.info/) * [Guillaume Pugnet](https://github.com/GuillaumePugnet): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:GuillaumePugnet) +* [happymacarts](https://github.com/happymacarts): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:happymacarts) * [hesch](https://github.com/hesch): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:hesch) * [hoilc](https://github.com/hoilc): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:hoilc) * [ibiruai](https://github.com/ibiruai): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:ibiruai) +* [id-konstantin-stepanov](https://github.com/id-konstantin-stepanov): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:id-konstantin-stepanov) * [Jake Mannens](https://github.com/jakem72360): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:jakem72360) +* [Jamie Slome](https://github.com/JamieSlome): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:JamieSlome), [Web](https://418sec.com/) * [Jan van den Berg](https://github.com/jan-vandenberg): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:jan-vandenberg), [Web](https://j11g.com/) * [Jaussoin Timothée](https://github.com/edhelas): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:edhelas), [Web](http://edhelas.movim.eu/) * [Jeremy](https://github.com/Germs2004): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:Germs2004) @@ -91,6 +99,8 @@ People are sorted by name so please keep this order. * [Mike Vanbuskirk](https://github.com/codevbus): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:codevbus) [Web](http://mikevanbuskirk.io/) * [MSZ](https://github.com/mszkb): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:mszkb) * [Myuki](https://github.com/Myuki): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:Myuki) +* [Nainor](https://github.com/Nainor): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:Nainor) +* [nanhualyq](https://github.com/nanhualyq): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:nanhualyq) * [Natalie Stroud](https://github.com/natastro): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:natastro) * [Nick Cross](https://github.com/rnc): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:rnc) * [Nico B](https://github.com/youknow0): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:youknow0) @@ -102,6 +112,7 @@ People are sorted by name so please keep this order. * [OctopusET](https://github.com/OctopusET): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:OctopusET) * [Offerel](https://github.com/Offerel): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:Offerel) * [Olivier Dossmann](https://github.com/blankoworld): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:blankoworld), [Web](https://olivier.dossmann.net) +* [ORelio](https://github.com/ORelio): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:ORelio), [Web](https://microzoom.fr/) * [Pablo Caro](https://github.com/pcaro90): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:pcaro90), [Web](https://pcaro.es/) * [PAHXO](https://github.com/PAHXO): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:PAHXO) * [Patrick Crandol](https://github.com/pattems): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:pattems) @@ -112,6 +123,7 @@ People are sorted by name so please keep this order. * [Pim Snel](https://github.com/mipmip): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is%3Apr+author%3Amipmip), [Web](https://www.pimsnel.com) * [plopoyop](https://github.com/plopoyop): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:plopoyop) * [Pofilo](https://github.com/Pofilo): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:Pofilo), [Web](https://www.pofilo.fr/) +* [Poorchop](https://github.com/Poorchop): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:Poorchop) * [Prashant Tholia](https://github.com/prashanttholia): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:prashanttholia) * [primaeval](https://github.com/primaeval): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:primaeval) * [printfuck](https://github.com/printfuck): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:printfuck), [Web](https://eris.cc) @@ -120,6 +132,7 @@ People are sorted by name so please keep this order. * [Quent-in](https://github.com/Quent-in): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:Quent-in) * [Quentin Dufour](https://github.com/superboum): [contributions](https://github.com/FreshRSS/documentation/pulls?q=is:pr+author:superboum), [Web](http://quentin.dufour.io/) * [Quentin Pagès](https://github.com/Quenty31): [contributions](https://github.com/FreshRSS/documentation/pulls?q=is:pr+author:Quenty31) +* [Raineer](https://github.com/Raineer): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:Raineer) * [Ramón Cutanda](https://github.com/rcutanda): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:rcutanda) * [Rezad](https://github.com/rezad1393): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:rezad1393) * [Robert Kaussow](https://github.com/xoxys): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:xoxys), [Web](https://geeklabor.de/) @@ -149,8 +162,9 @@ People are sorted by name so please keep this order. * [Twilek-de](https://github.com/Twilek-de): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:Twilek-de) * [Uncovery](https://github.com/uncovery): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:uncovery) * [upskaling](https://github.com/upskaling): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:upskaling) +* [Virgil Chen](https://github.com/VirgilChen97): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:VirgilChen97) * [Wanabo](https://github.com/Wanabo): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:Wanabo) * [wtoscer](https://github.com/wtoscer): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:wtoscer) +* [xnaas](https://github.com/xnaas): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:xnaas), [Web](https://xnaas.info/) * [Yamakuni](https://github.com/Yamakuni): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:Yamakuni), [Web](https://ofanch.me/) * [yzqzss|一座桥在水上](https://github.com/yzqzss): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:yzqzss), [Web](https://blog.othing.xyz/) -* [Zoredache](https://github.com/zoredache): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:zoredache) From 01d8afa942bbe7089fb3fdae79b2d197ae0c9040 Mon Sep 17 00:00:00 2001 From: maTh Date: Wed, 29 Dec 2021 19:27:37 +0100 Subject: [PATCH 0085/2479] Update CREDITS.md (#4094) --- CREDITS.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CREDITS.md b/CREDITS.md index 6f14238b766..136e236a5f0 100644 --- a/CREDITS.md +++ b/CREDITS.md @@ -92,7 +92,7 @@ People are sorted by name so please keep this order. * [Marcus Rohrmoser](https://github.com/mro): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:mro), [Web](http://mro.name/~me) * [Marien Fressinaud](https://github.com/marienfressinaud): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:marienfressinaud), [Web](https://marienfressinaud.fr/) * [Martin](https://github.com/C0rn3j): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:C0rn3j), [Web](https://rys.pw/) -* [mathContao](https://github.com/mathContao): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:mathContao) +* [math-GH](https://github.com/math-GH): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:math-GH) * [Maurice Schleußinger](https://github.com/maurice-schleussinger): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:maurice-schleussinger) * [Mejans](https://github.com/Mejans): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:Mejans) * [Melvyn Laïly](https://github.com/yaurthek): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:yaurthek), [Web](http://x2a.yt/) From 890405b2a0acf2413f2ca665a02c3ad8d33a4d3e Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Fri, 31 Dec 2021 12:49:43 +0100 Subject: [PATCH 0086/2479] Release FreshRSS 1.19.0 https://github.com/FreshRSS/FreshRSS/issues/4093 --- CHANGELOG.md | 2 +- constants.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1cabcdf98fb..095a897f3c4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,6 @@ # FreshRSS changelog -## 2021-12-XX FreshRSS 1.19.0-dev +## 2021-12-31 FreshRSS 1.19.0 * Features * New thumbnail and/or summary options for the normal view [#3805](https://github.com/FreshRSS/FreshRSS/pull/3805) diff --git a/constants.php b/constants.php index d4435570ad3..752d989d31d 100644 --- a/constants.php +++ b/constants.php @@ -3,7 +3,7 @@ // define('FRESHRSS_MIN_PHP_VERSION', '7.0.0'); -define('FRESHRSS_VERSION', '1.19.0-dev'); +define('FRESHRSS_VERSION', '1.19.0'); define('FRESHRSS_WEBSITE', 'https://freshrss.org'); define('FRESHRSS_WIKI', 'https://freshrss.github.io/FreshRSS/'); From afb3035bc6a50b8f6334f2729e3a7f568b429022 Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Fri, 31 Dec 2021 13:08:49 +0100 Subject: [PATCH 0087/2479] Start 1.19.1-dev --- CHANGELOG.md | 4 ++++ constants.php | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 095a897f3c4..ea17aac9c06 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # FreshRSS changelog + +## 2022-0X-XX FreshRSS 1.19.1-dev + + ## 2021-12-31 FreshRSS 1.19.0 * Features diff --git a/constants.php b/constants.php index 752d989d31d..1dbf2dff9be 100644 --- a/constants.php +++ b/constants.php @@ -3,7 +3,7 @@ // define('FRESHRSS_MIN_PHP_VERSION', '7.0.0'); -define('FRESHRSS_VERSION', '1.19.0'); +define('FRESHRSS_VERSION', '1.19.1-dev'); define('FRESHRSS_WEBSITE', 'https://freshrss.org'); define('FRESHRSS_WIKI', 'https://freshrss.github.io/FreshRSS/'); From fb15a2d8048ff66db5cb73b0dfb3a5b6a052e1db Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Fri, 31 Dec 2021 13:10:41 +0100 Subject: [PATCH 0088/2479] Search on article IDs (#4058) * Search on article IDs Partial implementation of https://github.com/FreshRSS/FreshRSS/issues/4053 --- app/Models/EntryDAO.php | 23 ++++++++++++++++ app/Models/Search.php | 49 +++++++++++++++++++++++++++++++++++ docs/en/users/03_Main_view.md | 1 + docs/fr/users/03_Main_view.md | 1 + 4 files changed, 74 insertions(+) diff --git a/app/Models/EntryDAO.php b/app/Models/EntryDAO.php index 86f3ac0405f..7c133a2f412 100644 --- a/app/Models/EntryDAO.php +++ b/app/Models/EntryDAO.php @@ -732,6 +732,29 @@ protected function sqlListEntriesWhere($alias = '', $filters = null, $state = Fr } $sub_search = ''; + if ($filter->getEntryIds()) { + foreach ($filter->getEntryIds() as $entry_ids) { + $sub_search .= 'AND ' . $alias . 'id IN ('; + foreach ($entry_ids as $entry_id) { + $sub_search .= '?,'; + $values[] = $entry_id; + } + $sub_search = rtrim($sub_search, ','); + $sub_search .= ') '; + } + } + if ($filter->getNotEntryIds()) { + foreach ($filter->getNotEntryIds() as $entry_ids) { + $sub_search .= 'AND ' . $alias . 'id NOT IN ('; + foreach ($entry_ids as $entry_id) { + $sub_search .= '?,'; + $values[] = $entry_id; + } + $sub_search = rtrim($sub_search, ','); + $sub_search .= ') '; + } + } + if ($filter->getMinDate()) { $sub_search .= 'AND ' . $alias . 'id >= ? '; $values[] = "{$filter->getMinDate()}000000"; diff --git a/app/Models/Search.php b/app/Models/Search.php index 20c4f540a58..47aaa607840 100644 --- a/app/Models/Search.php +++ b/app/Models/Search.php @@ -14,6 +14,7 @@ class FreshRSS_Search { private $raw_input = ''; // The following properties are extracted from the raw input + private $entry_ids; private $feed_ids; private $label_ids; private $label_names; @@ -27,6 +28,7 @@ class FreshRSS_Search { private $tags; private $search; + private $not_entry_ids; private $not_feed_ids; private $not_label_ids; private $not_label_names; @@ -48,6 +50,7 @@ public function __construct($input) { $input = preg_replace('/:"(.*?)"/', ':"\1"', $input); + $input = $this->parseNotEntryIds($input); $input = $this->parseNotFeedIds($input); $input = $this->parseNotLabelIds($input); $input = $this->parseNotLabelNames($input); @@ -60,6 +63,7 @@ public function __construct($input) { $input = $this->parseNotInurlSearch($input); $input = $this->parseNotTagsSearch($input); + $input = $this->parseEntryIds($input); $input = $this->parseFeedIds($input); $input = $this->parseLabelIds($input); $input = $this->parseLabelNames($input); @@ -84,6 +88,13 @@ public function getRawInput() { return $this->raw_input; } + public function getEntryIds() { + return $this->entry_ids; + } + public function getNotEntryIds() { + return $this->not_entry_ids; + } + public function getFeedIds() { return $this->feed_ids; } @@ -188,6 +199,44 @@ private static function decodeSpaces($value) { return $value; } + /** + * Parse the search string to find entry (article) IDs. + * + * @param string $input + * @return string + */ + private function parseEntryIds($input) { + if (preg_match_all('/\be:(?P[0-9,]*)/', $input, $matches)) { + $input = str_replace($matches[0], '', $input); + $ids_lists = $matches['search']; + $this->entry_ids = []; + foreach ($ids_lists as $ids_list) { + $entry_ids = explode(',', $ids_list); + $entry_ids = self::removeEmptyValues($entry_ids); + if (!empty($entry_ids)) { + $this->entry_ids[] = $entry_ids; + } + } + } + return $input; + } + + private function parseNotEntryIds($input) { + if (preg_match_all('/[!-]e:(?P[0-9,]*)/', $input, $matches)) { + $input = str_replace($matches[0], '', $input); + $ids_lists = $matches['search']; + $this->not_entry_ids = []; + foreach ($ids_lists as $ids_list) { + $entry_ids = explode(',', $ids_list); + $entry_ids = self::removeEmptyValues($entry_ids); + if (!empty($entry_ids)) { + $this->not_entry_ids[] = $entry_ids; + } + } + } + return $input; + } + /** * Parse the search string to find feed IDs. * diff --git a/docs/en/users/03_Main_view.md b/docs/en/users/03_Main_view.md index dcf59987851..8e756320029 100644 --- a/docs/en/users/03_Main_view.md +++ b/docs/en/users/03_Main_view.md @@ -227,6 +227,7 @@ You can use the search field to further refine results: * by custom label ID `L:12` or multiple label IDs: `L:12,13,14` or with any label: `L:*` * by custom label name `label:label`, `label:"my label"` or any label name from a list (*or*): `labels:"my label,my other label"` * by several label names (*and*): `label:"my label" label:"my other label"` +* by entry (article) ID: `e:1639310674957894` or multiple entry IDs (*or*): `e:1639310674957894,1639310674957893` Be careful not to enter a space between the operator and the search value. diff --git a/docs/fr/users/03_Main_view.md b/docs/fr/users/03_Main_view.md index 96e82a6b16f..4934301af14 100644 --- a/docs/fr/users/03_Main_view.md +++ b/docs/fr/users/03_Main_view.md @@ -251,6 +251,7 @@ Il est possible d’utiliser le champ de recherche pour raffiner les résultats * par ID d’étiquette : `L:12` ou de plusieurs étiquettes : `L:12,13,14` ou avec n’importe quelle étiquette : `L:*` * par nom d’étiquette : `label:étiquette`, `label:"mon étiquette"` ou d’une étiquette parmis une liste (*ou*) : `labels:"mon étiquette,mon autre étiquette"` * par plusieurs noms d’étiquettes (*et*) : `label:"mon étiquette" label:"mon autre étiquette"` +* par ID d’article (entrée) : `e:1639310674957894` ou de plusieurs articles (*ou*): `e:1639310674957894,1639310674957893` Attention à ne pas introduire d’espace entre l’opérateur et la valeur recherchée. From 8fc43d5a5676479f60901e6e0360b7caf3d0351a Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Fri, 31 Dec 2021 13:12:42 +0100 Subject: [PATCH 0089/2479] Fix extensions_enabled (#4090) #fix https://github.com/FreshRSS/FreshRSS/issues/4088 --- lib/Minz/Configuration.php | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/lib/Minz/Configuration.php b/lib/Minz/Configuration.php index 0e74d43519b..b57ca6c0d46 100644 --- a/lib/Minz/Configuration.php +++ b/lib/Minz/Configuration.php @@ -81,6 +81,11 @@ public static function get($namespace) { */ private $configuration_setter = null; + /** + * List of enabled extensions. + */ + private $extensions_enabled = []; + public function removeExtension($ext_name) { unset(self::$extensions_enabled[$ext_name]); $legacyKey = array_search($ext_name, self::$extensions_enabled, true); From f13ef3b102e2724367572f37a1fc57400b443280 Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Fri, 31 Dec 2021 13:13:03 +0100 Subject: [PATCH 0090/2479] Fix article filter (#4092) #fix https://github.com/FreshRSS/FreshRSS/issues/4057 Several search filters where missing for the automatic article actions --- app/Models/Entry.php | 44 +++++++++++++++++++++++++++++++------------- 1 file changed, 31 insertions(+), 13 deletions(-) diff --git a/app/Models/Entry.php b/app/Models/Entry.php index f75c0d704fe..d3aa133274e 100644 --- a/app/Models/Entry.php +++ b/app/Models/Entry.php @@ -260,27 +260,35 @@ public function matches($booleanSearch) { } foreach ($booleanSearch->searches() as $filter) { $ok = true; + if ($ok && $filter->getMinDate()) { + $ok &= strnatcmp($this->id, $filter->getMinDate() . '000000') >= 0; + } + if ($ok && $filter->getNotMinDate()) { + $ok &= strnatcmp($this->id, $filter->getNotMinDate() . '000000') < 0; + } + if ($ok && $filter->getMaxDate()) { + $ok &= strnatcmp($this->id, $filter->getMaxDate() . '000000') <= 0; + } + if ($ok && $filter->getNotMaxDate()) { + $ok &= strnatcmp($this->id, $filter->getNotMaxDate() . '000000') > 0; + } if ($ok && $filter->getMinPubdate()) { $ok &= $this->date >= $filter->getMinPubdate(); } + if ($ok && $filter->getNotMinPubdate()) { + $ok &= $this->date < $filter->getNotMinPubdate(); + } if ($ok && $filter->getMaxPubdate()) { $ok &= $this->date <= $filter->getMaxPubdate(); } - if ($ok && $filter->getMinDate()) { - $ok &= strnatcmp($this->id, $filter->getMinDate() . '000000') >= 0; - } - if ($ok && $filter->getMaxDate()) { - $ok &= strnatcmp($this->id, $filter->getMaxDate() . '000000') <= 0; + if ($ok && $filter->getNotMaxPubdate()) { + $ok &= $this->date > $filter->getNotMaxPubdate(); } - if ($ok && $filter->getInurl()) { - foreach ($filter->getInurl() as $url) { - $ok &= stripos($this->link, $url) !== false; - } + if ($ok && $filter->getFeedIds()) { + $ok &= in_array($this->feedId, $filter->getFeedIds()); } - if ($ok && $filter->getNotInurl()) { - foreach ($filter->getNotInurl() as $url) { - $ok &= stripos($this->link, $url) === false; - } + if ($ok && $filter->getNotFeedIds()) { + $ok &= !in_array($this->feedId, $filter->getFeedIds()); } if ($ok && $filter->getAuthor()) { foreach ($filter->getAuthor() as $author) { @@ -324,6 +332,16 @@ public function matches($booleanSearch) { $ok &= !$found; } } + if ($ok && $filter->getInurl()) { + foreach ($filter->getInurl() as $url) { + $ok &= stripos($this->link, $url) !== false; + } + } + if ($ok && $filter->getNotInurl()) { + foreach ($filter->getNotInurl() as $url) { + $ok &= stripos($this->link, $url) === false; + } + } if ($ok && $filter->getSearch()) { foreach ($filter->getSearch() as $needle) { $ok &= (stripos($this->title, $needle) !== false || stripos($this->content, $needle) !== false); From f905ad772ef577879c5abb3a2e1e137986b45eee Mon Sep 17 00:00:00 2001 From: Offerel <14041522+Offerel@users.noreply.github.com> Date: Fri, 31 Dec 2021 13:14:15 +0100 Subject: [PATCH 0091/2479] Check data URI (#4098) * Check data URI --- p/scripts/main.js | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/p/scripts/main.js b/p/scripts/main.js index 3093d1da8fd..21420872f80 100644 --- a/p/scripts/main.js +++ b/p/scripts/main.js @@ -1661,8 +1661,11 @@ function faviconNbUnread(n) { ctx.fillText(text, 0, canvas.height - 1); } link.href = canvas.toDataURL('image/png'); - document.querySelector('link[rel~=icon]').remove(); - document.head.appendChild(link); + // Check if data URI has generated a real favicon and if not, fallback to standard icon + if (link.href.length > 180) { + document.querySelector('link[rel~=icon]').remove(); + document.head.appendChild(link); + } }; img.src = '../favicon.ico'; } From 9fc98317f9f896ab74b034fa74357cd61157e36b Mon Sep 17 00:00:00 2001 From: maTh Date: Fri, 31 Dec 2021 13:15:19 +0100 Subject: [PATCH 0092/2479] Fix: Thumbnails alt text overflow (#4085) * CSS fix * Fix RTL CSS * fix CSS (order) --- p/themes/base-theme/template.css | 3 +++ p/themes/base-theme/template.rtl.css | 3 +++ 2 files changed, 6 insertions(+) diff --git a/p/themes/base-theme/template.css b/p/themes/base-theme/template.css index 3ac7eea2815..aff353cf6b1 100644 --- a/p/themes/base-theme/template.css +++ b/p/themes/base-theme/template.css @@ -803,8 +803,11 @@ input[type="search"] { } .flux .item.thumbnail img { + background: repeating-linear-gradient( -45deg, #ddd, #ddd 5px, transparent 5px, transparent 10px ); + display: inline-block; width: 100%; height: 100%; + overflow: hidden; object-fit: cover; } diff --git a/p/themes/base-theme/template.rtl.css b/p/themes/base-theme/template.rtl.css index fd5436ec2b6..b009d0991d2 100644 --- a/p/themes/base-theme/template.rtl.css +++ b/p/themes/base-theme/template.rtl.css @@ -803,8 +803,11 @@ input[type="search"] { } .flux .item.thumbnail img { + background: repeating-linear-gradient( 45deg, #ddd, #ddd 5px, transparent 5px, transparent 10px ); + display: inline-block; width: 100%; height: 100%; + overflow: hidden; object-fit: cover; } From dc70b74ef46b079cc7ec8a1112519cabb7601b0e Mon Sep 17 00:00:00 2001 From: maTh Date: Fri, 31 Dec 2021 13:15:55 +0100 Subject: [PATCH 0093/2479] CSS (#4067) --- p/themes/base-theme/template.css | 1 + p/themes/base-theme/template.rtl.css | 1 + 2 files changed, 2 insertions(+) diff --git a/p/themes/base-theme/template.css b/p/themes/base-theme/template.css index aff353cf6b1..d6c7f33377c 100644 --- a/p/themes/base-theme/template.css +++ b/p/themes/base-theme/template.css @@ -1383,6 +1383,7 @@ input:checked + .slide-container .properties { .form-group .group-name { float: none; + width: auto; } .form-group .group-controls { diff --git a/p/themes/base-theme/template.rtl.css b/p/themes/base-theme/template.rtl.css index b009d0991d2..9d2c4a6c66c 100644 --- a/p/themes/base-theme/template.rtl.css +++ b/p/themes/base-theme/template.rtl.css @@ -1383,6 +1383,7 @@ input:checked + .slide-container .properties { .form-group .group-name { float: none; + width: auto; } .form-group .group-controls { From f27b25d9a685bd8cab48540c067685160535f438 Mon Sep 17 00:00:00 2001 From: maTh Date: Fri, 31 Dec 2021 13:16:35 +0100 Subject: [PATCH 0094/2479] fix (#4065) --- app/layout/aside_feed.phtml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/layout/aside_feed.phtml b/app/layout/aside_feed.phtml index 49cfc617a7b..cb4b7b80e16 100644 --- a/app/layout/aside_feed.phtml +++ b/app/layout/aside_feed.phtml @@ -49,7 +49,7 @@ $t_active = FreshRSS_Context::isCurrentGet('T'); $t_show = ($t_active && in_array(FreshRSS_Context::$user_conf->display_categories, [ 'active', 'remember' ])) || FreshRSS_Context::$user_conf->display_categories === 'all'; ?> -
  • +
  • From 5cac8cce7426bf8fe654bb4bebe586ffc661f68f Mon Sep 17 00:00:00 2001 From: maTh Date: Fri, 31 Dec 2021 13:17:38 +0100 Subject: [PATCH 0095/2479] Improve: Aside slider: close slider when click on the outside of slider (#4061) * CSS + PHTML * give some grey background * fixed whitespace * fixed RTL * close area just for mobile view --- app/layout/aside_configure.phtml | 2 ++ app/layout/aside_feed.phtml | 3 ++- app/layout/aside_subscription.phtml | 1 + p/themes/base-theme/template.css | 17 +++++++++++++++++ p/themes/base-theme/template.rtl.css | 17 +++++++++++++++++ 5 files changed, 39 insertions(+), 1 deletion(-) diff --git a/app/layout/aside_configure.phtml b/app/layout/aside_configure.phtml index c790d0521c1..f71419dc14e 100644 --- a/app/layout/aside_configure.phtml +++ b/app/layout/aside_configure.phtml @@ -1,5 +1,6 @@ + diff --git a/app/layout/aside_feed.phtml b/app/layout/aside_feed.phtml index cb4b7b80e16..63dc28bd1de 100644 --- a/app/layout/aside_feed.phtml +++ b/app/layout/aside_feed.phtml @@ -14,7 +14,7 @@ $state_filter_cat = '&state=' . $state_filter_cat; } ?> - + diff --git a/p/themes/base-theme/template.css b/p/themes/base-theme/template.css index d6c7f33377c..5238ebbdb84 100644 --- a/p/themes/base-theme/template.css +++ b/p/themes/base-theme/template.css @@ -664,6 +664,10 @@ input[type="search"] { vertical-align: top; } +.aside + .close-aside { + display: none; +} + /*=== Aside main page */ .aside_feed .category .title { width: calc(100% - 35px); @@ -1431,6 +1435,19 @@ input:checked + .slide-container .properties { display: inline-block; } + .aside:target + .close-aside { + background: rgba(0, 0, 0, 0.2); + display: block; + font-size: 0; + position: fixed; + top: 0; + bottom: 0; + left: 0; + right: 0; + cursor: pointer; + z-index: 99; + } + .nav_mobile { display: block; } diff --git a/p/themes/base-theme/template.rtl.css b/p/themes/base-theme/template.rtl.css index 9d2c4a6c66c..6770a248cfa 100644 --- a/p/themes/base-theme/template.rtl.css +++ b/p/themes/base-theme/template.rtl.css @@ -664,6 +664,10 @@ input[type="search"] { vertical-align: top; } +.aside + .close-aside { + display: none; +} + /*=== Aside main page */ .aside_feed .category .title { width: calc(100% - 35px); @@ -1431,6 +1435,19 @@ input:checked + .slide-container .properties { display: inline-block; } + .aside:target + .close-aside { + background: rgba(0, 0, 0, 0.2); + display: block; + font-size: 0; + position: fixed; + top: 0; + bottom: 0; + right: 0; + left: 0; + cursor: pointer; + z-index: 99; + } + .nav_mobile { display: block; } From a29f161e44aeeaa96f59ba9d97357b6e7657a508 Mon Sep 17 00:00:00 2001 From: maTh Date: Fri, 31 Dec 2021 13:19:16 +0100 Subject: [PATCH 0096/2479] fixed: Left navigation with long category names (#4055) * fixed CSS * fixed themes Ansum and Mapco * fixed syntax --- p/themes/Ansum/_sidebar.scss | 6 +++++- p/themes/Ansum/ansum.css | 6 +++++- p/themes/Ansum/ansum.rtl.css | 6 +++++- p/themes/Mapco/_sidebar.scss | 6 +++++- p/themes/Mapco/mapco.css | 6 +++++- p/themes/Mapco/mapco.rtl.css | 6 +++++- p/themes/base-theme/template.css | 14 +++++++------- p/themes/base-theme/template.rtl.css | 14 +++++++------- 8 files changed, 44 insertions(+), 20 deletions(-) diff --git a/p/themes/Ansum/_sidebar.scss b/p/themes/Ansum/_sidebar.scss index 72d179d47c4..d9a1d032f55 100644 --- a/p/themes/Ansum/_sidebar.scss +++ b/p/themes/Ansum/_sidebar.scss @@ -264,8 +264,12 @@ } /*=== Aside main page (categories) */ +.aside_feed .tree-folder-title > .title:not([data-unread="0"]) { + width: calc(100% - 35px - 35px); +} + .aside_feed .tree-folder-title > .title:not([data-unread="0"])::after { - margin: -0.5rem 1rem 0 0; + margin: -0.25rem 1rem 0 0; padding: 0 0.75rem; background: $sid-pills; border-radius: 12px; diff --git a/p/themes/Ansum/ansum.css b/p/themes/Ansum/ansum.css index 75c1d8960f4..8f41f9b780c 100644 --- a/p/themes/Ansum/ansum.css +++ b/p/themes/Ansum/ansum.css @@ -741,8 +741,12 @@ form th { } /*=== Aside main page (categories) */ +.aside_feed .tree-folder-title > .title:not([data-unread="0"]) { + width: calc(100% - 35px - 35px); +} + .aside_feed .tree-folder-title > .title:not([data-unread="0"])::after { - margin: -0.5rem 1rem 0 0; + margin: -0.25rem 1rem 0 0; padding: 0 0.75rem; background: rgba(35, 35, 0, 0.15); border-radius: 12px; diff --git a/p/themes/Ansum/ansum.rtl.css b/p/themes/Ansum/ansum.rtl.css index b718a921821..0142968ce45 100644 --- a/p/themes/Ansum/ansum.rtl.css +++ b/p/themes/Ansum/ansum.rtl.css @@ -741,8 +741,12 @@ form th { } /*=== Aside main page (categories) */ +.aside_feed .tree-folder-title > .title:not([data-unread="0"]) { + width: calc(100% - 35px - 35px); +} + .aside_feed .tree-folder-title > .title:not([data-unread="0"])::after { - margin: -0.5rem 0 0 1rem; + margin: -0.25rem 0 0 1rem; padding: 0 0.75rem; background: rgba(35, 35, 0, 0.15); border-radius: 12px; diff --git a/p/themes/Mapco/_sidebar.scss b/p/themes/Mapco/_sidebar.scss index eeade7a7a17..223deed392c 100644 --- a/p/themes/Mapco/_sidebar.scss +++ b/p/themes/Mapco/_sidebar.scss @@ -262,8 +262,12 @@ } /*=== Aside main page (categories) */ +.aside_feed .tree-folder-title > .title:not([data-unread="0"]) { + width: calc(100% - 35px - 35px); +} + .aside_feed .tree-folder-title > .title:not([data-unread="0"])::after { - margin: -0.5rem 1rem 0 0; + margin: -0.25rem 1rem 0 0; padding: 0 0.75rem; background: $sid-pills; border-radius: 12px; diff --git a/p/themes/Mapco/mapco.css b/p/themes/Mapco/mapco.css index 3201e285566..8edaf81c4be 100644 --- a/p/themes/Mapco/mapco.css +++ b/p/themes/Mapco/mapco.css @@ -744,8 +744,12 @@ form th { } /*=== Aside main page (categories) */ +.aside_feed .tree-folder-title > .title:not([data-unread="0"]) { + width: calc(100% - 35px - 35px); +} + .aside_feed .tree-folder-title > .title:not([data-unread="0"])::after { - margin: -0.5rem 1rem 0 0; + margin: -0.25rem 1rem 0 0; padding: 0 0.75rem; background: rgba(0, 0, 0, 0.25); border-radius: 12px; diff --git a/p/themes/Mapco/mapco.rtl.css b/p/themes/Mapco/mapco.rtl.css index 615d425b1fb..8687662364e 100644 --- a/p/themes/Mapco/mapco.rtl.css +++ b/p/themes/Mapco/mapco.rtl.css @@ -744,8 +744,12 @@ form th { } /*=== Aside main page (categories) */ +.aside_feed .tree-folder-title > .title:not([data-unread="0"]) { + width: calc(100% - 35px - 35px); +} + .aside_feed .tree-folder-title > .title:not([data-unread="0"])::after { - margin: -0.5rem 0 0 1rem; + margin: -0.25rem 0 0 1rem; padding: 0 0.75rem; background: rgba(0, 0, 0, 0.25); border-radius: 12px; diff --git a/p/themes/base-theme/template.css b/p/themes/base-theme/template.css index 5238ebbdb84..42d023375cc 100644 --- a/p/themes/base-theme/template.css +++ b/p/themes/base-theme/template.css @@ -577,17 +577,13 @@ a.btn { transition: max-height .3s linear; } -.tree-folder-title { - display: block; - overflow: hidden; - white-space: nowrap; - text-overflow: ellipsis; -} - .tree-folder-title .title { display: inline-block; width: 100%; vertical-align: middle; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; } .tree-folder-items > .item { @@ -673,6 +669,10 @@ input[type="search"] { width: calc(100% - 35px); } +.aside_feed .category .title:not([data-unread="0"]) { + width: calc(100% - 35px - 20px); +} + .aside_feed .tree-folder-title .icon { padding: 5px; } diff --git a/p/themes/base-theme/template.rtl.css b/p/themes/base-theme/template.rtl.css index 6770a248cfa..22851985ab8 100644 --- a/p/themes/base-theme/template.rtl.css +++ b/p/themes/base-theme/template.rtl.css @@ -577,17 +577,13 @@ a.btn { transition: max-height .3s linear; } -.tree-folder-title { - display: block; - overflow: hidden; - white-space: nowrap; - text-overflow: ellipsis; -} - .tree-folder-title .title { display: inline-block; width: 100%; vertical-align: middle; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; } .tree-folder-items > .item { @@ -673,6 +669,10 @@ input[type="search"] { width: calc(100% - 35px); } +.aside_feed .category .title:not([data-unread="0"]) { + width: calc(100% - 35px - 20px); +} + .aside_feed .tree-folder-title .icon { padding: 5px; } From 0e683ee5d223a32dbe9a2d63d583a95d248bfc94 Mon Sep 17 00:00:00 2001 From: maTh Date: Fri, 31 Dec 2021 13:20:20 +0100 Subject: [PATCH 0097/2479] fixed themes Origine and Origine compact (#4059) Co-authored-by: Alexandre Alapetite --- p/themes/Origine-compact/origine-compact.css | 11 +++-------- p/themes/Origine-compact/origine-compact.rtl.css | 11 +++-------- p/themes/Origine/origine.css | 11 +++-------- p/themes/Origine/origine.rtl.css | 11 +++-------- 4 files changed, 12 insertions(+), 32 deletions(-) diff --git a/p/themes/Origine-compact/origine-compact.css b/p/themes/Origine-compact/origine-compact.css index c56ab41811d..b035b0b3dc5 100644 --- a/p/themes/Origine-compact/origine-compact.css +++ b/p/themes/Origine-compact/origine-compact.css @@ -1065,18 +1065,13 @@ a.btn, /*=== GLOBAL VIEW */ /*================*/ -.box.category .box-title .title { - font-weight: normal; - text-decoration: none; - text-align: left; -} - .box.category:not([data-unread="0"]) .box-title { background: #0084cc; } -.box.category:not([data-unread="0"]) .box-title:active { - background: #3498db; +.box.category .box-title .title { + display: block; + font-weight: normal; } .box.category:not([data-unread="0"]) .box-title .title { diff --git a/p/themes/Origine-compact/origine-compact.rtl.css b/p/themes/Origine-compact/origine-compact.rtl.css index 3cad54d2893..a7cc0998c47 100644 --- a/p/themes/Origine-compact/origine-compact.rtl.css +++ b/p/themes/Origine-compact/origine-compact.rtl.css @@ -1065,18 +1065,13 @@ a.btn, /*=== GLOBAL VIEW */ /*================*/ -.box.category .box-title .title { - font-weight: normal; - text-decoration: none; - text-align: right; -} - .box.category:not([data-unread="0"]) .box-title { background: #0084cc; } -.box.category:not([data-unread="0"]) .box-title:active { - background: #3498db; +.box.category .box-title .title { + display: block; + font-weight: normal; } .box.category:not([data-unread="0"]) .box-title .title { diff --git a/p/themes/Origine/origine.css b/p/themes/Origine/origine.css index 7dfd5216bdc..e13b689153c 100644 --- a/p/themes/Origine/origine.css +++ b/p/themes/Origine/origine.css @@ -999,18 +999,13 @@ a.btn { /*=== GLOBAL VIEW */ /*================*/ -.box.category .box-title .title { - font-weight: normal; - text-decoration: none; - text-align: left; -} - .box.category:not([data-unread="0"]) .box-title { background: #0084cc; } -.box.category:not([data-unread="0"]) .box-title:active { - background: #3498db; +.box.category .box-title .title { + display: block; + font-weight: normal; } .box.category:not([data-unread="0"]) .box-title .title { diff --git a/p/themes/Origine/origine.rtl.css b/p/themes/Origine/origine.rtl.css index 048c1c2313a..9c71eed3b50 100644 --- a/p/themes/Origine/origine.rtl.css +++ b/p/themes/Origine/origine.rtl.css @@ -999,18 +999,13 @@ a.btn { /*=== GLOBAL VIEW */ /*================*/ -.box.category .box-title .title { - font-weight: normal; - text-decoration: none; - text-align: right; -} - .box.category:not([data-unread="0"]) .box-title { background: #0084cc; } -.box.category:not([data-unread="0"]) .box-title:active { - background: #3498db; +.box.category .box-title .title { + display: block; + font-weight: normal; } .box.category:not([data-unread="0"]) .box-title .title { From 09c84fb3bc44bf8e45619c27acc15b967aea14ce Mon Sep 17 00:00:00 2001 From: maTh Date: Fri, 31 Dec 2021 13:50:32 +0100 Subject: [PATCH 0098/2479] Improved: install.php code quality (#4099) * delete unused $user_default_config * move inner named function * moved $auth_type * improve readability * phpcs fixes --- app/install.php | 21 +++++++++------------ 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/app/install.php b/app/install.php index 402de91a327..295be8b76e3 100644 --- a/app/install.php +++ b/app/install.php @@ -183,7 +183,6 @@ function saveStep2() { } function saveStep3() { - $user_default_config = Minz_Configuration::get('default_user'); if (!empty($_POST)) { $system_default_config = Minz_Configuration::get('default_system'); Minz_Session::_params([ @@ -447,8 +446,8 @@ function printStep1() { function printStep2() { $system_default_config = Minz_Configuration::get('default_system'); -?> - + $s2 = checkStep2(); + if ($s2['all'] == 'ok') { ?>

    - + $auth_type = isset($_SESSION['auth_type']) ? $_SESSION['auth_type'] : ''; + $s3 = checkStep3(); + if ($s3['all'] == 'ok') { ?>

    @@ -566,12 +569,6 @@ function printStep3() {
    diff --git a/app/views/configure/display.phtml b/app/views/configure/display.phtml index dfb3778931f..e3e18f5a0d2 100644 --- a/app/views/configure/display.phtml +++ b/app/views/configure/display.phtml @@ -1,4 +1,7 @@ -partial('aside_configure'); ?> +partial('aside_configure'); +?>

    - +
    diff --git a/app/views/configure/integration.phtml b/app/views/configure/integration.phtml index 9bd7257ee2a..c8d299f4411 100644 --- a/app/views/configure/integration.phtml +++ b/app/views/configure/integration.phtml @@ -1,4 +1,7 @@ -partial('aside_configure'); ?> +partial('aside_configure'); +?>
    ' class="draggableList"> - + sharing as $key => $share_options) { $share = FreshRSS_Share::get($share_options['type']); diff --git a/app/views/configure/queries.phtml b/app/views/configure/queries.phtml index 6de60663940..3f15f299bfa 100644 --- a/app/views/configure/queries.phtml +++ b/app/views/configure/queries.phtml @@ -1,4 +1,7 @@ -partial('aside_configure'); ?> +partial('aside_configure'); +?>
  • -
    -
    - +
    + +
    +
    + +
    -
    -
    -
    - +
    +
    + +
    -
    -
    -
    - +
    + +
    + +
    -
    -
    -
    - +
    +
    + +
    -
    -
    -
    - +
    + +
    + +
    -
    -
    - -
    - - - +
    + +
    + +
    +
    + +
    + +
    + +
    +
    - +
    + +
    + +
    +
    - +
    +
    + +
    +
    - +
    +
    + +
    -
    + -
    - -
    - +
    + +
    +
    + +
    -
    +
    From b127777887969617ed8358912876af962edde139 Mon Sep 17 00:00:00 2001 From: maTh Date: Fri, 4 Feb 2022 15:47:54 +0100 Subject: [PATCH 0151/2479] class constant (#4194) --- app/Controllers/updateController.php | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/app/Controllers/updateController.php b/app/Controllers/updateController.php index a4a7fd086ae..98e06bf1087 100644 --- a/app/Controllers/updateController.php +++ b/app/Controllers/updateController.php @@ -2,6 +2,8 @@ class FreshRSS_update_Controller extends FreshRSS_ActionController { + const LASTUPDATEFILE = 'last_update.txt'; + public static function isGit() { return is_dir(FRESHRSS_PATH . '/.git/'); } @@ -101,7 +103,7 @@ public function firstAction() { $this->view->update_to_apply = false; $this->view->last_update_time = 'unknown'; - $timestamp = @filemtime(join_path(DATA_PATH, 'last_update.txt')); + $timestamp = @filemtime(join_path(DATA_PATH, self::LASTUPDATEFILE)); if ($timestamp !== false) { $this->view->last_update_time = timestamptodate($timestamp); } @@ -112,7 +114,7 @@ public function indexAction() { if (file_exists(UPDATE_FILENAME)) { // There is an update file to apply! - $version = @file_get_contents(join_path(DATA_PATH, 'last_update.txt')); + $version = @file_get_contents(join_path(DATA_PATH, self::LASTUPDATEFILE)); if ($version == '') { $version = 'unknown'; } @@ -157,7 +159,7 @@ public function checkAction() { 'title' => _t('gen.short.damn'), 'body' => _t('feedback.update.none') ); - @touch(join_path(DATA_PATH, 'last_update.txt')); + @touch(join_path(DATA_PATH, self::LASTUPDATEFILE)); return; } } else { @@ -193,7 +195,7 @@ public function checkAction() { 'title' => _t('gen.short.damn'), 'body' => _t('feedback.update.none') ); - @touch(join_path(DATA_PATH, 'last_update.txt')); + @touch(join_path(DATA_PATH, self::LASTUPDATEFILE)); return; } @@ -203,7 +205,7 @@ public function checkAction() { } if (file_put_contents(UPDATE_FILENAME, $script) !== false) { - @file_put_contents(join_path(DATA_PATH, 'last_update.txt'), $version); + @file_put_contents(join_path(DATA_PATH, self::LASTUPDATEFILE), $version); Minz_Request::forward(array('c' => 'update'), true); } else { $this->view->message = array( @@ -232,7 +234,7 @@ public function applyAction() { if ($res === true) { @unlink(UPDATE_FILENAME); - @file_put_contents(join_path(DATA_PATH, 'last_update.txt'), ''); + @file_put_contents(join_path(DATA_PATH, self::LASTUPDATEFILE), ''); Minz_Request::good(_t('feedback.update.finished')); } else { Minz_Request::bad(_t('feedback.update.error', $res), [ 'c' => 'update', 'a' => 'index' ]); From 827cec6d13bd5a6068da0892c7709032e1f6314d Mon Sep 17 00:00:00 2001 From: maTh Date: Fri, 4 Feb 2022 15:54:31 +0100 Subject: [PATCH 0152/2479] Improved: Browser notification: unread message (#4193) * notification * i18n (english string) * i18n: en-us + de * Update gen.php * i18n: PL + RU * Update app/i18n/fr/gen.php Co-authored-by: Alexandre Alapetite --- app/i18n/cz/gen.php | 1 + app/i18n/de/gen.php | 1 + app/i18n/en-us/gen.php | 1 + app/i18n/en/gen.php | 1 + app/i18n/es/gen.php | 1 + app/i18n/fr/gen.php | 1 + app/i18n/he/gen.php | 1 + app/i18n/it/gen.php | 1 + app/i18n/ja/gen.php | 1 + app/i18n/ko/gen.php | 1 + app/i18n/nl/gen.php | 1 + app/i18n/oc/gen.php | 1 + app/i18n/pl/gen.php | 1 + app/i18n/pt-br/gen.php | 1 + app/i18n/ru/gen.php | 1 + app/i18n/sk/gen.php | 1 + app/i18n/tr/gen.php | 1 + app/i18n/zh-cn/gen.php | 1 + app/views/helpers/javascript_vars.phtml | 3 ++- p/scripts/main.js | 10 ++++++---- 20 files changed, 26 insertions(+), 5 deletions(-) diff --git a/app/i18n/cz/gen.php b/app/i18n/cz/gen.php index 0aaef5d0889..c4b9a22a469 100644 --- a/app/i18n/cz/gen.php +++ b/app/i18n/cz/gen.php @@ -127,6 +127,7 @@ 'confirm_action_feed_cat' => 'Opravdu chcete provést tuto akci? Přijdete o související oblíbené položky a uživatelské dotazy. Toto nelze zrušit!', 'feedback' => array( 'body_new_articles' => 'Ve FreshRSS je %%d nových článků k přečtení.', + 'body_unread_articles' => '(unread: %%d)', // TODO 'request_failed' => 'Požadavek selhal, to může být způsobeno problémy s připojení k internetu.', 'title_new_articles' => 'FreshRSS: nové články!', ), diff --git a/app/i18n/de/gen.php b/app/i18n/de/gen.php index ce97d15f729..2023ce93d30 100644 --- a/app/i18n/de/gen.php +++ b/app/i18n/de/gen.php @@ -127,6 +127,7 @@ 'confirm_action_feed_cat' => 'Sind Sie sicher, dass Sie diese Aktion durchführen wollen? Sie werden zugehörige Favoriten und Benutzerabfragen verlieren. Dies kann nicht abgebrochen werden!', 'feedback' => array( 'body_new_articles' => 'Es gibt %%d neue Artikel zum Lesen auf FreshRSS.', + 'body_unread_articles' => '(Ungelesen: %%d)', 'request_failed' => 'Eine Anfrage ist fehlgeschlagen, dies könnte durch Probleme mit der Internetverbindung verursacht worden sein.', 'title_new_articles' => 'FreshRSS: neue Artikel!', ), diff --git a/app/i18n/en-us/gen.php b/app/i18n/en-us/gen.php index c767f94c6b0..6a7a26e8183 100644 --- a/app/i18n/en-us/gen.php +++ b/app/i18n/en-us/gen.php @@ -127,6 +127,7 @@ 'confirm_action_feed_cat' => 'Are you sure you want to perform this action? You will lose related favorites and user queries. It cannot be canceled!', 'feedback' => array( 'body_new_articles' => 'There are %%d new articles to read on FreshRSS.', // IGNORE + 'body_unread_articles' => '(unread: %%d)', // IGNORE 'request_failed' => 'A request has failed, it may have been caused by internet connection problems.', // IGNORE 'title_new_articles' => 'FreshRSS: new articles!', // IGNORE ), diff --git a/app/i18n/en/gen.php b/app/i18n/en/gen.php index 6d5fd58a888..4343f1485a0 100644 --- a/app/i18n/en/gen.php +++ b/app/i18n/en/gen.php @@ -127,6 +127,7 @@ 'confirm_action_feed_cat' => 'Are you sure you want to perform this action? You will lose related favourites and user queries. It cannot be cancelled!', 'feedback' => array( 'body_new_articles' => 'There are %%d new articles to read on FreshRSS.', + 'body_unread_articles' => '(unread: %%d)', // TODO 'request_failed' => 'A request has failed, it may have been caused by internet connection problems.', 'title_new_articles' => 'FreshRSS: new articles!', ), diff --git a/app/i18n/es/gen.php b/app/i18n/es/gen.php index 7d2df254a6a..2f2adad4911 100755 --- a/app/i18n/es/gen.php +++ b/app/i18n/es/gen.php @@ -127,6 +127,7 @@ 'confirm_action_feed_cat' => '¿Seguro que quieres hacerlo? Perderás todos los favoritos relacionados y las peticiones de usuario. ¡Y no hay marcha atrás!', 'feedback' => array( 'body_new_articles' => 'Hay %%d nuevos artículos para leer en FreshRSS.', + 'body_unread_articles' => '(unread: %%d)', // TODO 'request_failed' => 'La petición ha fallado. Puede ser debido a problemas de conexión a internet.', 'title_new_articles' => 'FreshRSS: ¡Nuevos artículos!', ), diff --git a/app/i18n/fr/gen.php b/app/i18n/fr/gen.php index cf11cba84de..04c5b0a76c9 100644 --- a/app/i18n/fr/gen.php +++ b/app/i18n/fr/gen.php @@ -127,6 +127,7 @@ 'confirm_action_feed_cat' => 'Êtes-vous sûr(e) de vouloir continuer ? Vous perdrez les favoris et les filtres associés. Cette action ne peut être annulée !', 'feedback' => array( 'body_new_articles' => 'Il y a %%d nouveaux articles à lire sur FreshRSS.', + 'body_unread_articles' => '(non lus : %%d)', 'request_failed' => 'Une requête a échoué, cela peut être dû à des problèmes de connexion à Internet.', 'title_new_articles' => 'FreshRSS : nouveaux articles !', ), diff --git a/app/i18n/he/gen.php b/app/i18n/he/gen.php index 9aa22a48f1f..f24c51f0049 100644 --- a/app/i18n/he/gen.php +++ b/app/i18n/he/gen.php @@ -127,6 +127,7 @@ 'confirm_action_feed_cat' => 'האם אתם בטוחים שברצוניכם לבצע פעולה זו? מועדפים ושאילתות עשויות לאבוד. אין אפשרות לבטל אותה!', 'feedback' => array( 'body_new_articles' => 'ישנם \\d מאמרים חדשים לקרוא ב FreshRSS.', + 'body_unread_articles' => '(unread: %%d)', // TODO 'request_failed' => 'A request has failed, it may have been caused by internet connection problems.', // TODO 'title_new_articles' => 'FreshRSS: מאמרים חדשים!', ), diff --git a/app/i18n/it/gen.php b/app/i18n/it/gen.php index 53620d20738..d6361c45df7 100644 --- a/app/i18n/it/gen.php +++ b/app/i18n/it/gen.php @@ -127,6 +127,7 @@ 'confirm_action_feed_cat' => 'Sei sicuro di voler continuare? Verranno persi i preferiti e le ricerche utente correlate!', 'feedback' => array( 'body_new_articles' => 'Ci sono %%d nuovi articoli da leggere.', + 'body_unread_articles' => '(unread: %%d)', // TODO 'request_failed' => 'Richiesta fallita, probabilmente a causa di problemi di connessione', 'title_new_articles' => 'Feed RSS Reader: nuovi articoli!', ), diff --git a/app/i18n/ja/gen.php b/app/i18n/ja/gen.php index 8dd82d59a1e..fac7c3ad2de 100644 --- a/app/i18n/ja/gen.php +++ b/app/i18n/ja/gen.php @@ -127,6 +127,7 @@ 'confirm_action_feed_cat' => '本当に実行してもいいですか? あなたは関連するお気に入りとユーザークエリを失います。キャンセルできません!', 'feedback' => array( 'body_new_articles' => '%%d の新規記事がFreshRSSにはあります。', + 'body_unread_articles' => '(unread: %%d)', // TODO 'request_failed' => 'おそらくインターネット接続に問題があるため、リクエストは失敗しました。', 'title_new_articles' => 'FreshRSS: 新規記事!', ), diff --git a/app/i18n/ko/gen.php b/app/i18n/ko/gen.php index c3f0c5fa1aa..1599f602d84 100644 --- a/app/i18n/ko/gen.php +++ b/app/i18n/ko/gen.php @@ -127,6 +127,7 @@ 'confirm_action_feed_cat' => '정말 이 작업을 수행하시겠습니까? 관련된 즐겨찾기와 사용자 쿼리가 삭제됩니다. 이 작업은 되돌릴 수 없습니다!!', 'feedback' => array( 'body_new_articles' => '%%d 개의 새 글이 FreshRSS에 있습니다.', + 'body_unread_articles' => '(unread: %%d)', // TODO 'request_failed' => '요청한 작업을 수행할 수 없습니다. 인터넷 연결에 문제가 발생한 것 같습니다.', 'title_new_articles' => 'FreshRSS: 새 글이 있습니다!', ), diff --git a/app/i18n/nl/gen.php b/app/i18n/nl/gen.php index d535a8ffe2b..2f20a0cd011 100644 --- a/app/i18n/nl/gen.php +++ b/app/i18n/nl/gen.php @@ -127,6 +127,7 @@ 'confirm_action_feed_cat' => 'Weet u zeker dat u dit wilt doen? U verliest alle gereleteerde favorieten en gebruikers informatie. Het kan niet ongedaan worden gemaakt!', 'feedback' => array( 'body_new_articles' => 'Er zijn %%d nieuwe artikelen om te lezen op FreshRSS.', + 'body_unread_articles' => '(unread: %%d)', // TODO 'request_failed' => 'Een opdracht is mislukt, mogelijk door Internet verbindings problemen.', 'title_new_articles' => 'FreshRSS: nieuwe artikelen!', ), diff --git a/app/i18n/oc/gen.php b/app/i18n/oc/gen.php index 19ffffd49be..edd7b385023 100644 --- a/app/i18n/oc/gen.php +++ b/app/i18n/oc/gen.php @@ -127,6 +127,7 @@ 'confirm_action_feed_cat' => 'Volètz vertadièrament contunhar ? Perdretz los favorits e filtres ligats. Aquesta accion se pòt pas anullar !', 'feedback' => array( 'body_new_articles' => 'I a %%d nòus articles per legir sus FreshRSS.', + 'body_unread_articles' => '(unread: %%d)', // TODO 'request_failed' => 'Una requèsta a fach meuca, aquò pòt venir d’un problèma de connexion Internet.', 'title_new_articles' => 'FreshRSS : nòus articles !', ), diff --git a/app/i18n/pl/gen.php b/app/i18n/pl/gen.php index ef6c772ea4c..e6dd0cbaa83 100644 --- a/app/i18n/pl/gen.php +++ b/app/i18n/pl/gen.php @@ -127,6 +127,7 @@ 'confirm_action_feed_cat' => 'czy jesteś pewien, że chcesz przeprowadzić daną operację? Stracisz powiązane zapytania i ulubione wiadomości. Tych zmian nie można wycofać!', 'feedback' => array( 'body_new_articles' => 'Na FreshRSS znajduje się %%d wiadomości do przeczytania.', + 'body_unread_articles' => '(Nieprzeczytane: %%d)', 'request_failed' => 'Zapytanie nie powiodło się. Może to być spowodowane problemami z łącznością z internetem.', 'title_new_articles' => 'FreshRSS: nowe wiadomości!', ), diff --git a/app/i18n/pt-br/gen.php b/app/i18n/pt-br/gen.php index c48e6dc3e78..cc3b6df0f39 100644 --- a/app/i18n/pt-br/gen.php +++ b/app/i18n/pt-br/gen.php @@ -127,6 +127,7 @@ 'confirm_action_feed_cat' => 'Você tem certeza que deseja efetuar esta ação ? Você irá perder favoritos e queries de usuários. Não poderá ser cancelado!', 'feedback' => array( 'body_new_articles' => 'Há %%d novos artigos para ler no FreshRSS.', + 'body_unread_articles' => '(unread: %%d)', // TODO 'request_failed' => 'Uma solicitação falhou, isto pode ter sido causado por problemas de conexão com a internet.', 'title_new_articles' => 'FreshRSS: novos artigos!', ), diff --git a/app/i18n/ru/gen.php b/app/i18n/ru/gen.php index b477f3d4faf..fdf430ac1ec 100644 --- a/app/i18n/ru/gen.php +++ b/app/i18n/ru/gen.php @@ -127,6 +127,7 @@ 'confirm_action_feed_cat' => 'Вы уверены, что хотите выполнить это действие? Вы потеряете связанные избранные статьи и пользовательские запросы. Это нельзя отменить!', 'feedback' => array( 'body_new_articles' => '%%d новых статей в FreshRSS.', + 'body_unread_articles' => '(Непрочитанные: %%d)', 'request_failed' => 'Запрос не удался. Возможно, это вызвано проблемами с подключением к Интернет.', 'title_new_articles' => 'FreshRSS: новые статьи!', ), diff --git a/app/i18n/sk/gen.php b/app/i18n/sk/gen.php index d12b597861e..6ffda225178 100644 --- a/app/i18n/sk/gen.php +++ b/app/i18n/sk/gen.php @@ -127,6 +127,7 @@ 'confirm_action_feed_cat' => 'Určite chcete vykonať túto akciu? Prídete o súvisiace obľúbené a používateľské dopyty. Zmeny budú nezvratné!', 'feedback' => array( 'body_new_articles' => 'Počet nových článkov v čítačke FreshRSS: %%d', + 'body_unread_articles' => '(unread: %%d)', // TODO 'request_failed' => 'Nepodarilo sa spracovať váš dopyt, pravdepodobne kvôli problému s pripojením do internetu.', 'title_new_articles' => 'FreshRSS: nové články!', ), diff --git a/app/i18n/tr/gen.php b/app/i18n/tr/gen.php index abf66f076d7..b920c84fb2b 100644 --- a/app/i18n/tr/gen.php +++ b/app/i18n/tr/gen.php @@ -127,6 +127,7 @@ 'confirm_action_feed_cat' => 'Bunu yapmak istediğinize emin misiniz ? Favorileriniz ve sorgularınız silinecek. Daha sonra iptal edilemez!', 'feedback' => array( 'body_new_articles' => 'FreshRSS de okunmaz üzere %%d yeni makale mevcut.', + 'body_unread_articles' => '(unread: %%d)', // TODO 'request_failed' => 'Hata. İnternet bağlantınızı kontrol edin.', 'title_new_articles' => 'FreshRSS: yeni makaleler!', ), diff --git a/app/i18n/zh-cn/gen.php b/app/i18n/zh-cn/gen.php index 445e0aa9405..ae4f330fd5e 100644 --- a/app/i18n/zh-cn/gen.php +++ b/app/i18n/zh-cn/gen.php @@ -127,6 +127,7 @@ 'confirm_action_feed_cat' => '你确定要执行此操作吗?你将丢失相关的收藏和自定义查询。这将不可撤销!', 'feedback' => array( 'body_new_articles' => 'FreshRSS 中有 %%d 篇文章等待阅读。', + 'body_unread_articles' => '(unread: %%d)', // TODO 'request_failed' => '请求失败,这可能是因为网络连接问题。', 'title_new_articles' => 'FreshRSS: 新文章!', ), diff --git a/app/views/helpers/javascript_vars.phtml b/app/views/helpers/javascript_vars.phtml index 3860c620441..5d78890f3b2 100644 --- a/app/views/helpers/javascript_vars.phtml +++ b/app/views/helpers/javascript_vars.phtml @@ -57,7 +57,8 @@ echo htmlspecialchars(json_encode(array( 'i18n' => array( 'confirmation_default' => _t('gen.js.confirm_action'), 'notif_title_articles' => _t('gen.js.feedback.title_new_articles'), - 'notif_body_articles' => _t('gen.js.feedback.body_new_articles'), + 'notif_body_new_articles' => _t('gen.js.feedback.body_new_articles'), + 'notif_body_unread_articles' => _t('gen.js.feedback.body_unread_articles'), 'notif_request_failed' => _t('gen.js.feedback.request_failed'), 'category_empty' => _t('gen.js.category_empty'), 'language' => FreshRSS_Context::$user_conf->language, diff --git a/p/scripts/main.js b/p/scripts/main.js index e4642dbcb12..cdf3a1324c5 100644 --- a/p/scripts/main.js +++ b/p/scripts/main.js @@ -1435,14 +1435,14 @@ function notifs_html5_ask_permission() { }); } -function notifs_html5_show(nb) { +function notifs_html5_show(nb, nb_new) { if (notifs_html5_permission !== 'granted') { return; } const notification = new window.Notification(context.i18n.notif_title_articles, { icon: '../themes/icons/favicon-256-padding.png', - body: context.i18n.notif_body_articles.replace('%d', nb), + body: context.i18n.notif_body_new_articles.replace('%d', nb_new) + ' ' + context.i18n.notif_body_unread_articles.replace('%d', nb), tag: 'freshRssNewArticles', }); @@ -1482,6 +1482,8 @@ function refreshUnreads() { const isAll = document.querySelector('.category.all.active'); let new_articles = false; let nbUnreadFeeds = 0; + const title = document.querySelector('.category.all .title'); + const nb_unreads_before = title ? str2int(title.getAttribute('data-unread')) : 0; Object.keys(json.feeds).forEach(function (feed_id) { const nbUnreads = json.feeds[feed_id]; @@ -1522,12 +1524,12 @@ function refreshUnreads() { tags.querySelector('.title').setAttribute('data-unread', numberFormat(nbUnreadTags)); } - const title = document.querySelector('.category.all .title'); const nb_unreads = title ? str2int(title.getAttribute('data-unread')) : 0; if (nb_unreads > 0 && new_articles) { faviconNbUnread(nb_unreads); - notifs_html5_show(nb_unreads); + const nb_new = nb_unreads - nb_unreads_before; + notifs_html5_show(nb_unreads, nb_new); } }; req.send(); From f8cad8c9595177239f557649306e38d1a540f47c Mon Sep 17 00:00:00 2001 From: maTh Date: Fri, 4 Feb 2022 16:27:42 +0100 Subject: [PATCH 0153/2479] Improve showing notification banner (#4023) * bad notification show double time of good notification * stop timer, when mouse is over the notification * after leaving the mouse hover close the notification in 1 second * onlick to eddEventListener * code fix * fixed code * more code fixes * set default in template.css * theme alternative dark * theme ansum * theme Blue lagoon * theme dark * theme flat * theme Origine compact * theme Origine * theme Pafat * theme Screwdriver * theme Swage * fixed RTL error * fix css code * mouseleave = 3sec. --- p/scripts/main.js | 28 +++++++++++++++---- p/themes/Alternative-Dark/adark.css | 6 ++-- p/themes/Alternative-Dark/adark.rtl.css | 6 ++-- p/themes/Ansum/_layout.scss | 5 +++- p/themes/Ansum/ansum.css | 4 ++- p/themes/Ansum/ansum.rtl.css | 4 ++- p/themes/BlueLagoon/BlueLagoon.css | 10 +++++-- p/themes/BlueLagoon/BlueLagoon.rtl.css | 10 +++++-- p/themes/Dark/dark.css | 2 -- p/themes/Dark/dark.rtl.css | 2 -- p/themes/Flat/flat.css | 6 ++-- p/themes/Flat/flat.rtl.css | 6 ++-- p/themes/Origine-compact/origine-compact.css | 2 -- .../Origine-compact/origine-compact.rtl.css | 2 -- p/themes/Origine/origine.css | 2 -- p/themes/Origine/origine.rtl.css | 2 -- p/themes/Pafat/pafat.css | 2 -- p/themes/Pafat/pafat.rtl.css | 2 -- p/themes/Screwdriver/screwdriver.css | 2 -- p/themes/Screwdriver/screwdriver.rtl.css | 2 -- p/themes/Swage/swage.css | 3 +- p/themes/Swage/swage.rtl.css | 3 +- p/themes/Swage/swage.scss | 2 +- p/themes/base-theme/template.css | 10 +++++++ p/themes/base-theme/template.rtl.css | 10 +++++++ 25 files changed, 88 insertions(+), 45 deletions(-) diff --git a/p/scripts/main.js b/p/scripts/main.js index cdf3a1324c5..af34368b47b 100644 --- a/p/scripts/main.js +++ b/p/scripts/main.js @@ -1327,8 +1327,12 @@ function openNotification(msg, status) { notification.querySelector('.msg').innerHTML = msg; notification.className = 'notification'; notification.classList.add(status); - - notification_interval = setTimeout(closeNotification, 4000); + if (status == 'good') { + notification_interval = setTimeout(closeNotification, 4000); + } else { + // no status or f.e. status = 'bad', give some more time to read + notification_interval = setTimeout(closeNotification, 8000); + } } function closeNotification() { @@ -1340,14 +1344,28 @@ function closeNotification() { function init_notifications() { notification = document.getElementById('notification'); - notification.querySelector('a.close').onclick = function () { + notification.querySelector('a.close').addEventListener('click', function (ev) { closeNotification(); + ev.preventDefault(); return false; - }; + }); + + notification.addEventListener('mouseenter', function () { + clearInterval(notification_interval); + }); + + notification.addEventListener('mouseleave', function () { + notification_interval = setTimeout(closeNotification, 3000); + }); if (notification.querySelector('.msg').innerHTML.length > 0) { notification_working = true; - notification_interval = setTimeout(closeNotification, 4000); + if (notification.classList.contains('good')) { + notification_interval = setTimeout(closeNotification, 4000); + } else { + // no status or f.e. status = 'bad', give some more time to read + notification_interval = setTimeout(closeNotification, 8000); + } } } // diff --git a/p/themes/Alternative-Dark/adark.css b/p/themes/Alternative-Dark/adark.css index eab1b1786ef..11e6c6ab5a6 100644 --- a/p/themes/Alternative-Dark/adark.css +++ b/p/themes/Alternative-Dark/adark.css @@ -865,13 +865,11 @@ a.btn { /*=== Notification and actualize notification */ .notification { - padding: 0 0 0 5px; font-size: 0.9em; border: 1px solid #eeb; border-radius: 3px; text-align: center; font-weight: bold; - line-height: 3em; z-index: 10; vertical-align: middle; } @@ -888,6 +886,10 @@ a.btn { border: 1px solid #ecc; } +.notification a { + color: #0062be; +} + .notification a.close { padding: 0 15px; line-height: 3em; diff --git a/p/themes/Alternative-Dark/adark.rtl.css b/p/themes/Alternative-Dark/adark.rtl.css index 79dcae99282..c521b3170ce 100644 --- a/p/themes/Alternative-Dark/adark.rtl.css +++ b/p/themes/Alternative-Dark/adark.rtl.css @@ -865,13 +865,11 @@ a.btn { /*=== Notification and actualize notification */ .notification { - padding: 0 5px 0 0; font-size: 0.9em; border: 1px solid #eeb; border-radius: 3px; text-align: center; font-weight: bold; - line-height: 3em; z-index: 10; vertical-align: middle; } @@ -888,6 +886,10 @@ a.btn { border: 1px solid #ecc; } +.notification a { + color: #0062be; +} + .notification a.close { padding: 0 15px; line-height: 3em; diff --git a/p/themes/Ansum/_layout.scss b/p/themes/Ansum/_layout.scss index 0411a123642..2ef77113f25 100644 --- a/p/themes/Ansum/_layout.scss +++ b/p/themes/Ansum/_layout.scss @@ -411,10 +411,13 @@ left: 0; right: 0; text-align: center; - line-height: 3em; z-index: 10; vertical-align: middle; + a { + color: #000; + } + .msg { display: inline-block; font-size: 1rem; diff --git a/p/themes/Ansum/ansum.css b/p/themes/Ansum/ansum.css index 3a61c3be4ff..2e53f7534af 100644 --- a/p/themes/Ansum/ansum.css +++ b/p/themes/Ansum/ansum.css @@ -1091,10 +1091,12 @@ form th { left: 0; right: 0; text-align: center; - line-height: 3em; z-index: 10; vertical-align: middle; } +.notification a { + color: #000; +} .notification .msg { display: inline-block; font-size: 1rem; diff --git a/p/themes/Ansum/ansum.rtl.css b/p/themes/Ansum/ansum.rtl.css index 99084745863..12e823cd099 100644 --- a/p/themes/Ansum/ansum.rtl.css +++ b/p/themes/Ansum/ansum.rtl.css @@ -1091,10 +1091,12 @@ form th { right: 0; left: 0; text-align: center; - line-height: 3em; z-index: 10; vertical-align: middle; } +.notification a { + color: #000; +} .notification .msg { display: inline-block; font-size: 1rem; diff --git a/p/themes/BlueLagoon/BlueLagoon.css b/p/themes/BlueLagoon/BlueLagoon.css index d12559b978b..bc3ab7fbbc5 100644 --- a/p/themes/BlueLagoon/BlueLagoon.css +++ b/p/themes/BlueLagoon/BlueLagoon.css @@ -1021,7 +1021,6 @@ a.btn { /*=== Notification and actualize notification */ .notification { - padding: 0 0 0 5px; background: #222; color: #fff; font-size: 0.9em; @@ -1030,7 +1029,6 @@ a.btn { box-shadow: 0px 0px 4px rgba(0,0,0,0.45), 0 -1px rgba(255,255,255,0.08) inset, 0 2px 2px #171717 inset; text-align: center; font-weight: bold; - line-height: 3em; position: absolute; top: 0; z-index: 10; @@ -1051,6 +1049,14 @@ a.btn { line-height: 3em; } +.notification a.close:hover { + background: rgba(255,255,255,0.2); +} + +.notification a.close:hover .icon { + filter: brightness(2); +} + .notification#actualizeProgress { line-height: 2em; } diff --git a/p/themes/BlueLagoon/BlueLagoon.rtl.css b/p/themes/BlueLagoon/BlueLagoon.rtl.css index dfbc3cc848e..cc28c5619ee 100644 --- a/p/themes/BlueLagoon/BlueLagoon.rtl.css +++ b/p/themes/BlueLagoon/BlueLagoon.rtl.css @@ -1021,7 +1021,6 @@ a.btn { /*=== Notification and actualize notification */ .notification { - padding: 0 5px 0 0; background: #222; color: #fff; font-size: 0.9em; @@ -1030,7 +1029,6 @@ a.btn { box-shadow: 0px 0px 4px rgba(0,0,0,0.45), 0 -1px rgba(255,255,255,0.08) inset, 0 2px 2px #171717 inset; text-align: center; font-weight: bold; - line-height: 3em; position: absolute; top: 0; z-index: 10; @@ -1051,6 +1049,14 @@ a.btn { line-height: 3em; } +.notification a.close:hover { + background: rgba(255,255,255,0.2); +} + +.notification a.close:hover .icon { + filter: brightness(2); +} + .notification#actualizeProgress { line-height: 2em; } diff --git a/p/themes/Dark/dark.css b/p/themes/Dark/dark.css index 4753fc053bb..f9b5f69e12d 100644 --- a/p/themes/Dark/dark.css +++ b/p/themes/Dark/dark.css @@ -887,7 +887,6 @@ a.btn { /*=== Notification and actualize notification */ .notification { - padding: 0 0 0 5px; background: #111; color: #c95; font-size: 0.9em; @@ -896,7 +895,6 @@ a.btn { box-shadow: 0 0 5px #666; text-align: center; font-weight: bold; - line-height: 3em; z-index: 10; vertical-align: middle; } diff --git a/p/themes/Dark/dark.rtl.css b/p/themes/Dark/dark.rtl.css index 77482e8f63b..ab5751ce898 100644 --- a/p/themes/Dark/dark.rtl.css +++ b/p/themes/Dark/dark.rtl.css @@ -887,7 +887,6 @@ a.btn { /*=== Notification and actualize notification */ .notification { - padding: 0 5px 0 0; background: #111; color: #c95; font-size: 0.9em; @@ -896,7 +895,6 @@ a.btn { box-shadow: 0 0 5px #666; text-align: center; font-weight: bold; - line-height: 3em; z-index: 10; vertical-align: middle; } diff --git a/p/themes/Flat/flat.css b/p/themes/Flat/flat.css index 7616fa1801d..1d069a01d12 100644 --- a/p/themes/Flat/flat.css +++ b/p/themes/Flat/flat.css @@ -900,7 +900,6 @@ a.btn { /*=== Notification and actualize notification */ .notification { - padding: 0 0 0 5px; background: #ddd; color: #666; font-size: 0.9em; @@ -908,7 +907,6 @@ a.btn { border-radius: 3px; text-align: center; font-weight: bold; - line-height: 3em; z-index: 10; vertical-align: middle; } @@ -923,6 +921,10 @@ a.btn { color: #fff; } +.notification a { + color: #000; +} + .notification a.close { padding: 0 15px; line-height: 3em; diff --git a/p/themes/Flat/flat.rtl.css b/p/themes/Flat/flat.rtl.css index 63d0b3657ce..852fa1b9a36 100644 --- a/p/themes/Flat/flat.rtl.css +++ b/p/themes/Flat/flat.rtl.css @@ -900,7 +900,6 @@ a.btn { /*=== Notification and actualize notification */ .notification { - padding: 0 5px 0 0; background: #ddd; color: #666; font-size: 0.9em; @@ -908,7 +907,6 @@ a.btn { border-radius: 3px; text-align: center; font-weight: bold; - line-height: 3em; z-index: 10; vertical-align: middle; } @@ -923,6 +921,10 @@ a.btn { color: #fff; } +.notification a { + color: #000; +} + .notification a.close { padding: 0 15px; line-height: 3em; diff --git a/p/themes/Origine-compact/origine-compact.css b/p/themes/Origine-compact/origine-compact.css index d2a1b15f8e0..843d981771b 100644 --- a/p/themes/Origine-compact/origine-compact.css +++ b/p/themes/Origine-compact/origine-compact.css @@ -978,14 +978,12 @@ a.btn, /*=== Notification and actualize notification */ .notification { - padding: 0 0 0 5px; font-size: 0.9em; border: 1px solid #eeb; border-radius: 3px; box-shadow: 0 0 5px #ddd; text-align: center; font-weight: bold; - line-height: 3em; z-index: 10; vertical-align: middle; } diff --git a/p/themes/Origine-compact/origine-compact.rtl.css b/p/themes/Origine-compact/origine-compact.rtl.css index 552abc28b92..d74434d8d56 100644 --- a/p/themes/Origine-compact/origine-compact.rtl.css +++ b/p/themes/Origine-compact/origine-compact.rtl.css @@ -978,14 +978,12 @@ a.btn, /*=== Notification and actualize notification */ .notification { - padding: 0 5px 0 0; font-size: 0.9em; border: 1px solid #eeb; border-radius: 3px; box-shadow: 0 0 5px #ddd; text-align: center; font-weight: bold; - line-height: 3em; z-index: 10; vertical-align: middle; } diff --git a/p/themes/Origine/origine.css b/p/themes/Origine/origine.css index 4ec39cecd1c..f651c52c202 100644 --- a/p/themes/Origine/origine.css +++ b/p/themes/Origine/origine.css @@ -906,14 +906,12 @@ a.btn { /*=== Notification and actualize notification */ .notification { - padding: 0 0 0 5px; font-size: 0.9em; border: 1px solid #eeb; border-radius: 3px; box-shadow: 0 0 5px #ddd; text-align: center; font-weight: bold; - line-height: 3em; z-index: 10; vertical-align: middle; } diff --git a/p/themes/Origine/origine.rtl.css b/p/themes/Origine/origine.rtl.css index f081e535b1f..0ee8f79d4c4 100644 --- a/p/themes/Origine/origine.rtl.css +++ b/p/themes/Origine/origine.rtl.css @@ -906,14 +906,12 @@ a.btn { /*=== Notification and actualize notification */ .notification { - padding: 0 5px 0 0; font-size: 0.9em; border: 1px solid #eeb; border-radius: 3px; box-shadow: 0 0 5px #ddd; text-align: center; font-weight: bold; - line-height: 3em; z-index: 10; vertical-align: middle; } diff --git a/p/themes/Pafat/pafat.css b/p/themes/Pafat/pafat.css index e1c55e4581e..01f9459904b 100644 --- a/p/themes/Pafat/pafat.css +++ b/p/themes/Pafat/pafat.css @@ -895,14 +895,12 @@ a.signin { /*=== Notification and actualize notification */ .notification { - padding: 0 0 0 5px; font-size: 0.9em; border: 1px solid #eeb; border-radius: 3px; box-shadow: 0 0 5px #ddd; text-align: center; font-weight: bold; - line-height: 3em; z-index: 10; vertical-align: middle; } diff --git a/p/themes/Pafat/pafat.rtl.css b/p/themes/Pafat/pafat.rtl.css index 7716c2115e5..552dfc452c3 100644 --- a/p/themes/Pafat/pafat.rtl.css +++ b/p/themes/Pafat/pafat.rtl.css @@ -895,14 +895,12 @@ a.signin { /*=== Notification and actualize notification */ .notification { - padding: 0 5px 0 0; font-size: 0.9em; border: 1px solid #eeb; border-radius: 3px; box-shadow: 0 0 5px #ddd; text-align: center; font-weight: bold; - line-height: 3em; z-index: 10; vertical-align: middle; } diff --git a/p/themes/Screwdriver/screwdriver.css b/p/themes/Screwdriver/screwdriver.css index 6f29c15626b..a943642c8b0 100644 --- a/p/themes/Screwdriver/screwdriver.css +++ b/p/themes/Screwdriver/screwdriver.css @@ -990,7 +990,6 @@ a.btn { /*=== Notification and actualize notification */ .notification { - padding: 0 0 0 5px; background: #222; color: #fff; font-size: 0.9em; @@ -999,7 +998,6 @@ a.btn { box-shadow: 0px 0px 4px rgba(0,0,0,0.45), 0 -1px rgba(255,255,255,0.08) inset, 0 2px 2px #171717 inset; text-align: center; font-weight: bold; - line-height: 3em; position: absolute; top: 0; z-index: 10; diff --git a/p/themes/Screwdriver/screwdriver.rtl.css b/p/themes/Screwdriver/screwdriver.rtl.css index 7dd1bc7173d..51be738dedd 100644 --- a/p/themes/Screwdriver/screwdriver.rtl.css +++ b/p/themes/Screwdriver/screwdriver.rtl.css @@ -990,7 +990,6 @@ a.btn { /*=== Notification and actualize notification */ .notification { - padding: 0 5px 0 0; background: #222; color: #fff; font-size: 0.9em; @@ -999,7 +998,6 @@ a.btn { box-shadow: 0px 0px 4px rgba(0,0,0,0.45), 0 -1px rgba(255,255,255,0.08) inset, 0 2px 2px #171717 inset; text-align: center; font-weight: bold; - line-height: 3em; position: absolute; top: 0; z-index: 10; diff --git a/p/themes/Swage/swage.css b/p/themes/Swage/swage.css index 78937cd3a3d..14d2eccff78 100644 --- a/p/themes/Swage/swage.css +++ b/p/themes/Swage/swage.css @@ -781,8 +781,7 @@ form th { left: 0; top: auto; } -.notification.good, -.notification .bad { +.notification.good, .notification.bad { color: #fcfcfc; } .notification.good { diff --git a/p/themes/Swage/swage.rtl.css b/p/themes/Swage/swage.rtl.css index 71785ff65c0..9c8b01840ba 100644 --- a/p/themes/Swage/swage.rtl.css +++ b/p/themes/Swage/swage.rtl.css @@ -781,8 +781,7 @@ form th { right: 0; top: auto; } -.notification.good, -.notification .bad { +.notification.good, .notification.bad { color: #fcfcfc; } .notification.good { diff --git a/p/themes/Swage/swage.scss b/p/themes/Swage/swage.scss index 0ce67a5ba4b..9932f94d0a9 100644 --- a/p/themes/Swage/swage.scss +++ b/p/themes/Swage/swage.scss @@ -985,7 +985,7 @@ form { @extend %aside-width; &.good, - .bad { + &.bad { color: $color_light; } diff --git a/p/themes/base-theme/template.css b/p/themes/base-theme/template.css index 63d7a3b41c5..9884fdcbdfe 100644 --- a/p/themes/base-theme/template.css +++ b/p/themes/base-theme/template.css @@ -917,6 +917,7 @@ br { /*=== Notification and actualize notification */ .notification { + padding: 10px 50px 10px 10px; position: absolute; top: 1em; left: 25%; right: 25%; @@ -924,6 +925,7 @@ br { background: #fff; border: 1px solid #aaa; opacity: 1; + line-height: 2; visibility: visible; transition: visibility 0s, opacity .3s linear; } @@ -940,6 +942,14 @@ br { display: inline-block; } +.notification a.close:hover { + background: rgba(10,10,10,0.05); +} + +.notification a.close:hover .icon { + filter: brightness(2); +} + #actualizeProgress { position: fixed; } diff --git a/p/themes/base-theme/template.rtl.css b/p/themes/base-theme/template.rtl.css index e5bc469702d..07cc25e83d5 100644 --- a/p/themes/base-theme/template.rtl.css +++ b/p/themes/base-theme/template.rtl.css @@ -917,6 +917,7 @@ br { /*=== Notification and actualize notification */ .notification { + padding: 10px 10px 10px 50px; position: absolute; top: 1em; right: 25%; left: 25%; @@ -924,6 +925,7 @@ br { background: #fff; border: 1px solid #aaa; opacity: 1; + line-height: 2; visibility: visible; transition: visibility 0s, opacity .3s linear; } @@ -940,6 +942,14 @@ br { display: inline-block; } +.notification a.close:hover { + background: rgba(10,10,10,0.05); +} + +.notification a.close:hover .icon { + filter: brightness(2); +} + #actualizeProgress { position: fixed; } From 3938492b8a01967ca72c9d877f499ac8069bb701 Mon Sep 17 00:00:00 2001 From: maTh Date: Fri, 4 Feb 2022 16:32:02 +0100 Subject: [PATCH 0154/2479] Normal view: improve feed filter link (#4006) * padding+greyscal favicon while hovering+underline * improve underline + improve mouse title * fixed RTL * CSS for more places of feed filter * add title in content feed filter --- app/views/helpers/index/normal/entry_header.phtml | 7 ++++--- app/views/index/normal.phtml | 2 +- p/themes/base-theme/template.css | 7 ++++++- p/themes/base-theme/template.rtl.css | 7 ++++++- 4 files changed, 17 insertions(+), 6 deletions(-) diff --git a/app/views/helpers/index/normal/entry_header.phtml b/app/views/helpers/index/normal/entry_header.phtml index 79e6e42156e..6968bae8562 100644 --- a/app/views/helpers/index/normal/entry_header.phtml +++ b/app/views/helpers/index/normal/entry_header.phtml @@ -31,9 +31,10 @@ ?>
  • - show_favicons): ?>✇ - feed->name() ?> + ?>
  • + + show_favicons): ?>✇feed->name() ?> +
  • ">

    entry->title() ?>

    -
    +
    show_favicons): ?> ✇ diff --git a/p/themes/base-theme/template.css b/p/themes/base-theme/template.css index 9884fdcbdfe..c6008e1bcbd 100644 --- a/p/themes/base-theme/template.css +++ b/p/themes/base-theme/template.css @@ -764,6 +764,12 @@ input[type="search"] { .flux .item.website { width: 200px; + padding-right: 10px; +} + +.website a:hover .favicon, +a.website:hover .favicon { + filter: grayscale(100%); } .flux.not_read .item.title, @@ -855,7 +861,6 @@ input[type="search"] { .flux .item > a { display: block; - text-decoration: none; white-space: nowrap; text-overflow: ellipsis; overflow: hidden; diff --git a/p/themes/base-theme/template.rtl.css b/p/themes/base-theme/template.rtl.css index 07cc25e83d5..a8a817a71ce 100644 --- a/p/themes/base-theme/template.rtl.css +++ b/p/themes/base-theme/template.rtl.css @@ -764,6 +764,12 @@ input[type="search"] { .flux .item.website { width: 200px; + padding-left: 10px; +} + +.website a:hover .favicon, +a.website:hover .favicon { + filter: grayscale(100%); } .flux.not_read .item.title, @@ -855,7 +861,6 @@ input[type="search"] { .flux .item > a { display: block; - text-decoration: none; white-space: nowrap; text-overflow: ellipsis; overflow: hidden; From dc27baa7d67f4bc601ced80229844a88a7ca23d4 Mon Sep 17 00:00:00 2001 From: maTh Date: Sat, 5 Feb 2022 00:02:06 +0100 Subject: [PATCH 0155/2479] Improved: unread articles counter (#4166) * Update template.css * CSS base template * CSS themes * white spaces fixed * Update ansum.rtl.css * fix themes * fix css * fix scss * theme swage * Theme Screwdriver * theme BlueLagoon fine tuning * theme Parfat tuneing * Fix merge bugs Co-authored-by: Alexandre Alapetite --- p/themes/Alternative-Dark/adark.css | 12 +++--- p/themes/Alternative-Dark/adark.rtl.css | 12 +++--- p/themes/Ansum/_sidebar.scss | 30 ++++---------- p/themes/Ansum/ansum.css | 29 ++++---------- p/themes/Ansum/ansum.css.map | 2 +- p/themes/Ansum/ansum.rtl.css | 29 ++++---------- p/themes/BlueLagoon/BlueLagoon.css | 30 +++++++++----- p/themes/BlueLagoon/BlueLagoon.rtl.css | 30 +++++++++----- p/themes/Dark/dark.css | 20 ++++++---- p/themes/Dark/dark.rtl.css | 20 ++++++---- p/themes/Flat/flat.css | 14 +++---- p/themes/Flat/flat.rtl.css | 14 +++---- p/themes/Mapco/_sidebar.scss | 30 ++++---------- p/themes/Mapco/mapco.css | 29 ++++---------- p/themes/Mapco/mapco.css.map | 2 +- p/themes/Mapco/mapco.rtl.css | 29 ++++---------- p/themes/Origine-compact/origine-compact.css | 18 +++++---- .../Origine-compact/origine-compact.rtl.css | 18 +++++---- p/themes/Origine/origine.css | 16 ++++---- p/themes/Origine/origine.rtl.css | 16 ++++---- p/themes/Pafat/pafat.css | 24 +++++++++--- p/themes/Pafat/pafat.rtl.css | 24 +++++++++--- p/themes/Screwdriver/screwdriver.css | 14 ++++--- p/themes/Screwdriver/screwdriver.rtl.css | 14 ++++--- p/themes/Swage/swage.css | 15 ++++--- p/themes/Swage/swage.css.map | 2 +- p/themes/Swage/swage.rtl.css | 15 ++++--- p/themes/Swage/swage.scss | 16 ++++---- p/themes/base-theme/template.css | 39 +++++++++++++++---- p/themes/base-theme/template.rtl.css | 39 +++++++++++++++---- 30 files changed, 317 insertions(+), 285 deletions(-) diff --git a/p/themes/Alternative-Dark/adark.css b/p/themes/Alternative-Dark/adark.css index 11e6c6ab5a6..ad66acb3cc1 100644 --- a/p/themes/Alternative-Dark/adark.css +++ b/p/themes/Alternative-Dark/adark.css @@ -577,15 +577,17 @@ a.btn { /*=== Aside main page (categories) */ .aside_feed .category .title:not([data-unread="0"])::after { - margin: 10px 0; padding: 0 10px; - background: inherit; - font-size: 0.9rem; - position: absolute; - right: 0; line-height: 1.5rem; } +.aside.aside_feed .category .title:not([data-unread="0"])::after, +.aside.aside_feed .feed .item-title:not([data-unread="0"])::after { + background-color: #171717; + color: #999; + border-color: #999; +} + /*=== Aside main page (feeds) */ .feed.item.empty.active { background: #e67e22; diff --git a/p/themes/Alternative-Dark/adark.rtl.css b/p/themes/Alternative-Dark/adark.rtl.css index c521b3170ce..8d8fa50fdcf 100644 --- a/p/themes/Alternative-Dark/adark.rtl.css +++ b/p/themes/Alternative-Dark/adark.rtl.css @@ -577,15 +577,17 @@ a.btn { /*=== Aside main page (categories) */ .aside_feed .category .title:not([data-unread="0"])::after { - margin: 10px 0; padding: 0 10px; - background: inherit; - font-size: 0.9rem; - position: absolute; - left: 0; line-height: 1.5rem; } +.aside.aside_feed .category .title:not([data-unread="0"])::after, +.aside.aside_feed .feed .item-title:not([data-unread="0"])::after { + background-color: #171717; + color: #999; + border-color: #999; +} + /*=== Aside main page (feeds) */ .feed.item.empty.active { background: #e67e22; diff --git a/p/themes/Ansum/_sidebar.scss b/p/themes/Ansum/_sidebar.scss index 0efbdaf4b19..4f5f1424acc 100644 --- a/p/themes/Ansum/_sidebar.scss +++ b/p/themes/Ansum/_sidebar.scss @@ -79,19 +79,6 @@ color: variables.$sid-font-color; } } - - .feed .item-title:not([data-unread="0"])::before { - margin: 11px 6px 0 4px; - padding: 3px 4px; - background: variables.$sid-pills; - display: block; - float: left; - font-size: 0.75rem; - border-radius: 12px; - content: attr(data-unread); - text-align: center; - line-height: 0.75rem; - } } } } @@ -274,15 +261,14 @@ width: calc(100% - 35px - 35px); } -.aside_feed .tree-folder-title > .title:not([data-unread="0"])::after { - margin: -0.25rem 1rem 0 0; - padding: 0 0.75rem; - background: variables.$sid-pills; - border-radius: 12px; - position: absolute; - right: 0; - line-height: 1.5rem; - text-align: center; +.aside.aside_feed .category .title:not([data-unread="0"])::after { + margin: 1.5em 0 0 0; + background-color: variables.$sid-pills; +} + +.aside.aside_feed .feed .item-title:not([data-unread="0"])::after { + margin: 0.5em 0 0 0; + background-color: variables.$sid-pills; } .feed.item.empty.active { diff --git a/p/themes/Ansum/ansum.css b/p/themes/Ansum/ansum.css index 2e53f7534af..72995548b30 100644 --- a/p/themes/Ansum/ansum.css +++ b/p/themes/Ansum/ansum.css @@ -583,18 +583,6 @@ form th { text-decoration: none; color: #363330; } -.tree .tree-folder .tree-folder-items .feed .item-title:not([data-unread="0"])::before { - margin: 11px 6px 0 4px; - padding: 3px 4px; - background: rgba(35, 35, 0, 0.15); - display: block; - float: left; - font-size: 0.75rem; - border-radius: 12px; - content: attr(data-unread); - text-align: center; - line-height: 0.75rem; -} /*=== Buttons */ .stick { @@ -726,15 +714,14 @@ form th { width: calc(100% - 35px - 35px); } -.aside_feed .tree-folder-title > .title:not([data-unread="0"])::after { - margin: -0.25rem 1rem 0 0; - padding: 0 0.75rem; - background: rgba(35, 35, 0, 0.15); - border-radius: 12px; - position: absolute; - right: 0; - line-height: 1.5rem; - text-align: center; +.aside.aside_feed .category .title:not([data-unread="0"])::after { + margin: 1.5em 0 0 0; + background-color: rgba(35, 35, 0, 0.15); +} + +.aside.aside_feed .feed .item-title:not([data-unread="0"])::after { + margin: 0.5em 0 0 0; + background-color: rgba(35, 35, 0, 0.15); } .feed.item.empty.active { diff --git a/p/themes/Ansum/ansum.css.map b/p/themes/Ansum/ansum.css.map index 4b9c8e26242..81f91753f60 100644 --- a/p/themes/Ansum/ansum.css.map +++ b/p/themes/Ansum/ansum.css.map @@ -1 +1 @@ -{"version":3,"sourceRoot":"","sources":["_fonts.scss","_mixins.scss","_forms.scss","_variables.scss","_tables.scss","_components.scss","_divers.scss","_sidebar.scss","_layout.scss","_list-view.scss","_global-view.scss","_reader-view.scss","_configuration.scss","_logs.scss","_stats.scss","_mobile.scss","ansum.scss"],"names":[],"mappings":"AAAA;EACC;EACA;EACA;EACA;EACA;;AAGD;EACC;EACA;EACA;EACA;EACA;;AAGD;EACC;EACA;EACA;EACA;EACA;;AAGD;EACC;EACA;EACA;EACA;EACA;;AAGD;EACC;EACA;EACA;EACA;EACA;;AAGD;EACC;EACA;EACA;EACA;EACA;;AAGD;EACC;EACA;EACA;EACA;EACA;;AAGD;EACC;EACA;EACA;EACA;EACA;;AC5DD;AAEA;ACCA;AACA;EACC;EACA;EACA,YCac;EDZd;EACA,OCMW;EDLX;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EDXA;;ACeA;EACC,YCvBW;EDwBX,OCdM;;ADiBN;EAEC,YC5Bc;;ADiChB;EACC,YCRS;EDST;;AAEA;EAEC,YCXU;;ADeZ;EACC;;;AAIF;EACC;EACA;;;AAGD;AACA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGD;EACC;EACA;EACA;EACA,OCxDW;;;AD2DZ;EACC;EACA;EACA;;;AAGD;EACC;EACA,YCxEO;EDyEP,OCpEW;EDqEX;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGD;EACC;;;AAGD;EACC,OC1FiB;ED2FjB,cCnGY;;;ADsGb;EACC,OC5EU;ED6EV,cC7EU;ED8EV;;;AAGD;EACC,YC1FY;;;AD6Fb;EACC;;;AAID;EACC;EACA;;AAEA;EACC;EACA;EACA;;AAUD;EACC;EACA;;AAGD;EACC;EACA;;AAGD;EACC;;AAGD;EACC;EACA;;AAID;EACC;;;AE1JF;AACA;EACC;;;AAGD;EACC;EACA;;;AAGD;EACC,YDQc;;;ACLf;AAAA;EAEC;EACA;;;ACbD;AACA;AACA;AAGA;AACA;EACC;EACA;;AAEA;EACC;;AAEA;EACC;;;AAMH;AACA;EACC;EACA;EACA,YFTc;EEUd;EACA;EACA;EACA;EACA;;AAEA;EACC;EACA;;AAGD;EAEC;EACA;EACA;EACA,OF/BU;EEgCV;EACA;;AAKD;EJ9CA;;AIkDC;EACC;EACA,OFnDe;EEoDf;EACA;;AAGD;EACC,YFjEU;EEkEV,OFxDK;;AE0DL;EACC;EACA,OF5DI;;AE+DL;EACC;;AAKD;EACC;EACA;;AAMF;EACC;EACA;EACA;;AAIF;EACC;EACA;;;AAQD;EACC;;AAEA;AAAA;EAEC,OFrGe;;AEuGf;AAAA;EACC,OFtGI;;AE0GN;EACC,YFrHU;;;AE6Hb;AACA;EACC;EAEA;EACA,YF9Gc;EE+Gd,OFpHW;EEqHX;EACA;EACA;EACA;;;AAGD;EACC;;;AAGD;EACC;EACA;;;AAGD;EACC,YFpHe;EEqHf,OFpHc;EEqHd;;;AAGD;EACC,YFtHe;EEuHf,OFtHc;EEuHd;;;AAGD;EACC,YFpIa;EEqIb,OFpIY;EEqIZ;;;AAGD;AACA;EACC,YFpJY;EEqJZ,OFhKiB;EEiKjB;EACA;;AAGC;EACC,YFjIM;EEkIN,OF5JU;EE6JV;EACA;;AAGD;EACC;EACA,OF9Ke;EE+Kf;EACA;EACA;;AAEA;EACC,YFpLc;EEqLd,OF1KS;;AE+KZ;AAAA;EAEC;EACA;;;AAIF;EACC;EACA;;;AAID;AACA;EACC,YFvMO;EEyMP;EACA;EACA;;AAEA;EACC;EACA;EACA,YFvMW;EEwMX,OFnNgB;EEqNhB;;AAGC;EACC;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACC;EACA;EACA;;AAGD;EACC;;AAMF;EACC;;AAGD;EACC;;AAEA;EACC;EAEA;EACA;EACA;EACA;;AAEA;EACC;;AAMJ;EACC;;AAIF;EAEC;;AAEA;EACC;EACA,OF/Qe;EEgRf;EACA;EACA;;AAEA;EACC;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACC;EACA;EACA;;AAGD;EAEC;;AAMH;EACC;;;AAKH;AACA;EACC;EACA;EACA,YF/TkB;EEgUlB,OFlUY;EFOZ;;AI+TA;EACC,YFvUW;EEwUX;;AAEA;EACC;;AAIF;EACC;EACA;EACA;EACA;EACA;EACA;EACA;;;AAKF;EACC,YF/SQ;;AEkTP;EACC;;AAEA;EACC;;AAGD;EACC,OF7VI;;AEkWP;EACC,OFnWM;;AEuWN;EACC;;AAEA;EACC,OFpWU;EEqWV;;AAKD;EACC,YFvXgB;;AEyXhB;EACC,YF3WU;EE4WV,OFxXa;;;AGTlB;AACA;AACA;AAAA;EAEC;;;AAGD;EACC;;;AAGD;EACC;;;ACND;AACA;EACC;;AAEA;EACC;EACA;;AAGD;EACC;EACA;;AAEA;EACC;EACA,YJyBM;EIxBN;EACA;EACA;EACA;EACA;;AAEA;EACC;EACA,OJea;;AIbb;EACC;;AAMF;EACC,YJMK;EILL;;AAIF;EACC,YJCU;;AICV;EACC;EACA;EACA;EACA;EN5CH;;AMgDG;EACC,YJxDQ;;AI0DR;EACC,OJnDY;;AIqDZ;EACC,OJlBU;;AIsBZ;EACC,OJjBY;;AIqBd;EACC,YJzBS;;AI4BV;EACC;EACA,OJjCY;;AIqCd;EACC;EACA;EACA,YJjCQ;EIkCR;EACA;EACA;EACA;EACA;EACA;EACA;;;AAMJ;AACA;EACC;EACA;;AAEA;EACC;;AAGD;AAAA;EAEC;;AAGD;EACC;;AAGD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EASC;;;AAKF;EACC,YJrFQ;;AIwFR;EACC;EACA;EACA,YJ3FO;EI4FP;;AAGD;EACC;;;AAMF;AAIA;AAEC;AAAA;EAEC;EACA;EACA;;AAGD;EACC,YJpHO;EFtCR;;AM8JC;EACC;EACA,OJ3Hc;;AI+Hd;EACC,OJjJO;;AIqJT;EACC,YJlIW;EImIX,OJtIc;;AIyIb;EACC,YJtLQ;EIuLR,OJ3IY;;AIgJb;EACC,YJ9JQ;EI+JR,OJlJY;;AIsJd;EACC,OJvJa;EIwJb;;AAIF;EACC,YJzMU;EI0MV,OJhMK;;AImMJ;EACC,YJ9MQ;EI+MR,OJrMG;;AI0MJ;EACC,YJtLQ;EIuLR,OJ5MG;;AIgNL;EACC,OJjNI;EIkNJ;;AAOF;EACC,OJrMU;;AIyMZ;EACC;EACA,YJtNa;EIuNb,OJ3NiB;;AI8NlB;EACC;EACA;EACA,OJlOU;EImOV;EACA;EACA;;AAGD;EACC;EACA;;AAGD;EACC;EACA;EAEA,OJtPM;;AIwPN;EACC,OJzPK;;AI4PN;EACC;EACA;EACA;;;AAKH;AACA;EACC;;;AAGD;EACC;EACA;EACA,YJnOW;EIoOX;EACA;EACA;EACA;EACA;;;AAGD;EACC,YJhRW;;;AImRZ;EACC,YJpRW;;;AIuRZ;AAAA;EAEC,OJzRW;;;AI4RZ;AAAA;EAEC,OJ9RW;;;AIiSZ;AAAA;AAAA;AAAA;EAIC,OJ1SO;;;AI6SR;EACC;;;AAGD;AAAA;AAAA;EAGC;;;AAGD;EACC,mBJrRQ;;;AK1CT;AACA;AACA;AACA;EACC;EACA,YLqCQ;EKpCR;EACA;EACA;;AAEA;EACC;;AAKA;EACC;EACA;;AAGC;EACC;EACA;;AAQF;EACC;EACA,OLQa;EKPb;EACA;EACA,kBLOS;EFvCZ;;AOoCG;EACC,kBLGS;;AKAV;EACC;EACA,OLlCO;EKoCP,kBLzCG;;AK6CL;EAGC;EACA;EAEA,kBL7DS;EK8DT;EACA;EACA;EAEA;EACA;;AAXA;EAAK;;AAaL;EACC,kBLrEY;;AK0Ef;EACC;EACA;EACA;EACA;EACA;;AAEA;EAGC;EAGA;EACA;EACA;EACA;;AARA;EAAK;;AAuBT;AACA;EACC;;;AAMD;AACA;EACC;;;AAGD;EACC;;;AAGD;EACC;EACA;;;AAGD;EACC;EACA;;;AAGD;EACC;;;AAGD;AACA;EACC,YL3IY;EK4IZ;EACA;;;AAGD;EACC,YLhJgB;;;AKmJjB;EACC;EACA;EACA,OL7IO;;;AKgJR;EACC;;;AAGD;AACA;EACC;EACA,OLxJkB;EKyJlB;EACA;EACA;EACA;EACA;;AAEA;EACC;EAEA,OLnKgB;EKoKhB;EACA;EACA;EAGA;;;AAIF;AACA;EACC;EACA;;AAEA;EACC;EACA;EACA,kBLzKa;EK0Kb;EACA;;AAEA;EACC,kBL/KU;;AKmLZ;EACC,YLnLa;;AKqLb;EACC;EACA;EACA,kBLxLY;EKyLZ;EACA;EPvMF;;AO2ME;EACC,kBLjMgB;;AKoMjB;EACC,kBLvNS;;AK0NV;EAAU;;AAIV;EACC;;AAGD;EACC;;AAGD;EACC;;AAGD;EACC;;AAGD;EACC;;AAGD;EACC;;AAGD;EACC;;AAGD;EACC;;AAID;EACC;EAEA,OL1Pc;EK2Pd,kBL/OW;EFbd;;AOgQG;EACC,kBLtPe;;AK2PjB;EACC;;AAGD;EACC;;AAGD;EACC;;AAGD;EACC;;AAGD;EACC;;AAGD;EACC;;AAGD;EACC;;AAMD;EACC;EACA;;;AAOJ;EACC;EACA;;;AAID;AACA;EACC;EAEA;EACA;;AAGC;EACC,OL5Te;EK6Tf;EACA;;AAEA;EACC,OLzUS;EK0UT;;AAKH;EACC,OLvUiB;EKwUjB;;AAGD;EACC;EACA;;AAGD;EACC;EACA,YLzUkB;EK0UlB;EACA;EACA;;AAGD;EACC;EACA;EACA;EACA,YLhWkB;EKiWlB,OL5VM;EK6VN;EACA;;AAEA;EACC;EACA,OLlWK;EKmWL;;AAIF;EACC;EACA,YL/Va;EKgWb;EACA;;AAID;EACC;EACA;EACA,YLxWa;EKyWb;EACA,OLtXgB;EKuXhB;EACA;;AAEA;EACC;;;AAOH;AACA;EAEC;EACA,YL5XmB;EK6XnB;EACA;EACA,OLlYW;EKoYX;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACC;EACA;;AAGD;EACC,YLnYW;EKoYX,OL7ZM;;AKgaP;EACC,YLhZS;EKiZT,OLlaM;;AKqaP;EACC;EACA;EACA;;AAGD;EACC,YLjZa;;AKoZd;EACC,YL7ZW;;AKgaZ;EACC;;AAEA;EACC;;;AAMH;AACA;EACC;EACA;EACA;EACA;EACA,YLhaQ;;;AMxCT;AACA;EAEC,YNEO;EFHP;;AQKA;EACC,YNOa;;AMLb;EACC,YNIY;;AMEd;EACC,YNbM;EMcN,mBNxBW;;AM2BZ;EACC,YNLU;;AMOV;EACC,YNRS;;AMcT;EACC,ONhBgB;;AMqBjB;EACC,ONtBgB;;AM0BlB;EACC;;AAIF;EACC,mBNdO;EFjCR;;AQoDA;EACC,YNnBU;;AMqBV;EACC,YNtBS;;AM2BV;EACC,ON7De;EM8Df;;AAGD;EACC;;AAIF;EACC;EACA;;AAGD;EACC;EACA;;;AAIF;EACC;EACA;EACA;;AAEA;EACC;;;AC9FF;AACA;AAWE;EACC;;AAID;EACC;EACA;;AAEA;EACC,OPRQ;EOSR;EACA;EACA;EACA;EACA;EACA;;AAEA;EACC;EACA;EACA,YPfQ;EOgBR;EACA;EACA;EACA;EACA;EACA;;AAGD;EACC,OP5CQ;;AOiDX;EACC;;AAEA;EACC;EAEA;;AAEA;EACC,OPlDa;EOmDb;;AAEA;EACC,OP9DO;EO+DP;;;AAUN;EACC;;;AAGD;EACC;EACA;EACA;EACA;EACA;;;ACjFD;AACA;AACA;EACC;EACA,YRcY;EQbZ,OREiB;EQDjB;;;AAGD;EACC;EACA,ORIkB;EQHlB;;;ACZD;AACA;EACC;EACA;;AAEA;EACC;;AAGA;EACC;;AAmBF;EACC;;AAGD;EAEC,OT5BgB;ES6BhB;EACA;EACA;EACA;;AAGD;EACC;EACA;EACA,YT1Ba;ES2Bb;EAEA,OTlCU;ESmCV;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;;AAEA;EACC,YT7DU;ES8DV;EACA;EACA;;;AAQH;EACC;EACA;;;AAIA;EACC;EACA;EACA;EACA;;AAEA;EACC;EACA;;;ACrFH;AACA;AACA;EACC;EACA;;;AAGD;EACC;EACA;EACA,YVSc;EURd,OVGW;EUFX;EACA;;;AAGD;EACC;EACA;EACA;;;AAGD;EACC,YVGU;EUFV;;;AAGD;EACC,YVEY;;;AUCb;EACC,YVdY;;;AUiBb;EACC,YVhCmB;EUiCnB,OV5BO;;;AWTR;AACA;AACA;EACC;;;AAGD;AAAA;AAAA;EAGC;;;AAGD;AAAA;EAEC;;;AAGD;EACC;;;AAGD;EACC;EACA;EACA;;;AAGD;EACC;;;AC1BD;AACA;AAEA;EAME;IACC;;EAEA;IACC;;EAGD;IACC;IACA;IAEA;IACA;IACA;IACA,OZkBa;IFrChB;;EcuBG;IAEC;IACA;IACA,OZxBG;;;EYgCP;IACC;;;EAGD;IdvCA;;Ec2CC;IACC;;EAGD;IACC;;;EAIF;AAAA;AAAA;AAAA;IAIC,YZ9De;IY+Df;IACA;IACA;IACA;IACA;;;EAGD;IACC;;EAGC;IACC;;EAEA;IACC;;EAGD;IACC;;EAGD;IACC;IACA;;EAEA;IACC;;EAKF;IACC;IACA;;;EAMJ;IACC;IACA;;;EAIA;IACC;IACA;;EAGD;IACC;;EAEA;IACC;IACA;;EAEA;IACC;;EAKH;IACC;IACA;;EAEA;IAEC;IACA;;EAEA;IACC;;;EAQF;IACC;;;EAMF;IACC,kBZtIY;IYuIZ;IACA;IACA;IACA;;EAKC;IACC;;EAGD;IACC;;;EAMJ;IACC;IACA;;EAEA;IACC;IAEA;IACA;IACA;IACA;;;EAKF;IACC;;;EAGD;IACC;;;EAGD;IACC;;EAEA;IACC;IACA;IACA;;EAGD;IACC;;EAGD;IACC;;;AClLH;AACA;AACA;EACC,YbjBY;EakBZ;EACA;EACA;;;AAGD;AACA;EACC;EACA,Ob7CY","file":"ansum.css"} \ No newline at end of file +{"version":3,"sourceRoot":"","sources":["_fonts.scss","_mixins.scss","_forms.scss","_variables.scss","_tables.scss","_components.scss","_divers.scss","_sidebar.scss","_layout.scss","_list-view.scss","_global-view.scss","_reader-view.scss","_configuration.scss","_logs.scss","_stats.scss","_mobile.scss","ansum.scss"],"names":[],"mappings":"AAAA;EACC;EACA;EACA;EACA;EACA;;AAGD;EACC;EACA;EACA;EACA;EACA;;AAGD;EACC;EACA;EACA;EACA;EACA;;AAGD;EACC;EACA;EACA;EACA;EACA;;AAGD;EACC;EACA;EACA;EACA;EACA;;AAGD;EACC;EACA;EACA;EACA;EACA;;AAGD;EACC;EACA;EACA;EACA;EACA;;AAGD;EACC;EACA;EACA;EACA;EACA;;AC5DD;AAEA;ACCA;AACA;EACC;EACA;EACA,YCac;EDZd;EACA,OCMW;EDLX;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EDXA;;ACeA;EACC,YCvBW;EDwBX,OCdM;;ADiBN;EAEC,YC5Bc;;ADiChB;EACC,YCRS;EDST;;AAEA;EAEC,YCXU;;ADeZ;EACC;;;AAIF;EACC;EACA;;;AAGD;AACA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGD;EACC;EACA;EACA;EACA,OCxDW;;;AD2DZ;EACC;EACA;EACA;;;AAGD;EACC;EACA,YCxEO;EDyEP,OCpEW;EDqEX;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGD;EACC;;;AAGD;EACC,OC1FiB;ED2FjB,cCnGY;;;ADsGb;EACC,OC5EU;ED6EV,cC7EU;ED8EV;;;AAGD;EACC,YC1FY;;;AD6Fb;EACC;;;AAID;EACC;EACA;;AAEA;EACC;EACA;EACA;;AAUD;EACC;EACA;;AAGD;EACC;EACA;;AAGD;EACC;;AAGD;EACC;EACA;;AAID;EACC;;;AE1JF;AACA;EACC;;;AAGD;EACC;EACA;;;AAGD;EACC,YDQc;;;ACLf;AAAA;EAEC;EACA;;;ACbD;AACA;AACA;AAGA;AACA;EACC;EACA;;AAEA;EACC;;AAEA;EACC;;;AAMH;AACA;EACC;EACA;EACA,YFTc;EEUd;EACA;EACA;EACA;EACA;;AAEA;EACC;EACA;;AAGD;EAEC;EACA;EACA;EACA,OF/BU;EEgCV;EACA;;AAKD;EJ9CA;;AIkDC;EACC;EACA,OFnDe;EEoDf;EACA;;AAGD;EACC,YFjEU;EEkEV,OFxDK;;AE0DL;EACC;EACA,OF5DI;;AE+DL;EACC;;AAKD;EACC;EACA;;AAMF;EACC;EACA;EACA;;AAIF;EACC;EACA;;;AAQD;EACC;;AAEA;AAAA;EAEC,OFrGe;;AEuGf;AAAA;EACC,OFtGI;;AE0GN;EACC,YFrHU;;;AE6Hb;AACA;EACC;EAEA;EACA,YF9Gc;EE+Gd,OFpHW;EEqHX;EACA;EACA;EACA;;;AAGD;EACC;;;AAGD;EACC;EACA;;;AAGD;EACC,YFpHe;EEqHf,OFpHc;EEqHd;;;AAGD;EACC,YFtHe;EEuHf,OFtHc;EEuHd;;;AAGD;EACC,YFpIa;EEqIb,OFpIY;EEqIZ;;;AAGD;AACA;EACC,YFpJY;EEqJZ,OFhKiB;EEiKjB;EACA;;AAGC;EACC,YFjIM;EEkIN,OF5JU;EE6JV;EACA;;AAGD;EACC;EACA,OF9Ke;EE+Kf;EACA;EACA;;AAEA;EACC,YFpLc;EEqLd,OF1KS;;AE+KZ;AAAA;EAEC;EACA;;;AAIF;EACC;EACA;;;AAID;AACA;EACC,YFvMO;EEyMP;EACA;EACA;;AAEA;EACC;EACA;EACA,YFvMW;EEwMX,OFnNgB;EEqNhB;;AAGC;EACC;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACC;EACA;EACA;;AAGD;EACC;;AAMF;EACC;;AAGD;EACC;;AAEA;EACC;EAEA;EACA;EACA;EACA;;AAEA;EACC;;AAMJ;EACC;;AAIF;EAEC;;AAEA;EACC;EACA,OF/Qe;EEgRf;EACA;EACA;;AAEA;EACC;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACC;EACA;EACA;;AAGD;EAEC;;AAMH;EACC;;;AAKH;AACA;EACC;EACA;EACA,YF/TkB;EEgUlB,OFlUY;EFOZ;;AI+TA;EACC,YFvUW;EEwUX;;AAEA;EACC;;AAIF;EACC;EACA;EACA;EACA;EACA;EACA;EACA;;;AAKF;EACC,YF/SQ;;AEkTP;EACC;;AAEA;EACC;;AAGD;EACC,OF7VI;;AEkWP;EACC,OFnWM;;AEuWN;EACC;;AAEA;EACC,OFpWU;EEqWV;;AAKD;EACC,YFvXgB;;AEyXhB;EACC,YF3WU;EE4WV,OFxXa;;;AGTlB;AACA;AACA;AAAA;EAEC;;;AAGD;EACC;;;AAGD;EACC;;;ACND;AACA;EACC;;AAEA;EACC;EACA;;AAGD;EACC;EACA;;AAEA;EACC;EACA,YJyBM;EIxBN;EACA;EACA;EACA;EACA;;AAEA;EACC;EACA,OJea;;AIbb;EACC;;AAMF;EACC,YJMK;EILL;;AAIF;EACC,YJCU;;AICV;EACC;EACA;EACA;EACA;EN5CH;;AMgDG;EACC,YJxDQ;;AI0DR;EACC,OJnDY;;AIqDZ;EACC,OJlBU;;AIsBZ;EACC,OJhBY;;AIoBd;EACC,YJzBS;;AI4BV;EACC;EACA,OJjCY;;;AIwCjB;AACA;EACC;EACA;;AAEA;EACC;;AAGD;AAAA;EAEC;;AAGD;EACC;;AAGD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EASC;;;AAKF;EACC,YJxEQ;;AI2ER;EACC;EACA;EACA,YJ9EO;EI+EP;;AAGD;EACC;;;AAMF;AAIA;AAEC;AAAA;EAEC;EACA;EACA;;AAGD;EACC,YJvGO;EFtCR;;AMiJC;EACC;EACA,OJ9Gc;;AIkHd;EACC,OJpIO;;AIwIT;EACC,YJrHW;EIsHX,OJzHc;;AI4Hb;EACC,YJzKQ;EI0KR,OJ9HY;;AImIb;EACC,YJjJQ;EIkJR,OJrIY;;AIyId;EACC,OJ1Ia;EI2Ib;;AAIF;EACC,YJ5LU;EI6LV,OJnLK;;AIsLJ;EACC,YJjMQ;EIkMR,OJxLG;;AI6LJ;EACC,YJzKQ;EI0KR,OJ/LG;;AImML;EACC,OJpMI;EIqMJ;;AAOF;EACC,OJxLU;;AI4LZ;EACC;EACA,YJzMa;EI0Mb,OJ9MiB;;AIiNlB;EACC;EACA;EACA,OJrNU;EIsNV;EACA;EACA;;AAGD;EACC;EACA;;AAGD;EACC;EACA;EAEA,OJzOM;;AI2ON;EACC,OJ5OK;;AI+ON;EACC;EACA;EACA;;;AAKH;AACA;EACC;;;AAGD;EACC;EACA,kBJpNW;;;AIuNZ;EACC;EACA,kBJzNW;;;AI4NZ;EACC,YJlQW;;;AIqQZ;EACC,YJtQW;;;AIyQZ;AAAA;EAEC,OJ3QW;;;AI8QZ;AAAA;EAEC,OJhRW;;;AImRZ;AAAA;AAAA;AAAA;EAIC,OJ5RO;;;AI+RR;EACC;;;AAGD;AAAA;AAAA;EAGC;;;AAGD;EACC,mBJvQQ;;;AK1CT;AACA;AACA;AACA;EACC;EACA,YLqCQ;EKpCR;EACA;EACA;;AAEA;EACC;;AAKA;EACC;EACA;;AAGC;EACC;EACA;;AAQF;EACC;EACA,OLQa;EKPb;EACA;EACA,kBLOS;EFvCZ;;AOoCG;EACC,kBLGS;;AKAV;EACC;EACA,OLlCO;EKoCP,kBLzCG;;AK6CL;EAGC;EACA;EAEA,kBL7DS;EK8DT;EACA;EACA;EAEA;EACA;;AAXA;EAAK;;AAaL;EACC,kBLrEY;;AK0Ef;EACC;EACA;EACA;EACA;EACA;;AAEA;EAGC;EAGA;EACA;EACA;EACA;;AARA;EAAK;;AAuBT;AACA;EACC;;;AAMD;AACA;EACC;;;AAGD;EACC;;;AAGD;EACC;EACA;;;AAGD;EACC;EACA;;;AAGD;EACC;;;AAGD;AACA;EACC,YL3IY;EK4IZ;EACA;;;AAGD;EACC,YLhJgB;;;AKmJjB;EACC;EACA;EACA,OL7IO;;;AKgJR;EACC;;;AAGD;AACA;EACC;EACA,OLxJkB;EKyJlB;EACA;EACA;EACA;EACA;;AAEA;EACC;EAEA,OLnKgB;EKoKhB;EACA;EACA;EAGA;;;AAIF;AACA;EACC;EACA;;AAEA;EACC;EACA;EACA,kBLzKa;EK0Kb;EACA;;AAEA;EACC,kBL/KU;;AKmLZ;EACC,YLnLa;;AKqLb;EACC;EACA;EACA,kBLxLY;EKyLZ;EACA;EPvMF;;AO2ME;EACC,kBLjMgB;;AKoMjB;EACC,kBLvNS;;AK0NV;EAAU;;AAIV;EACC;;AAGD;EACC;;AAGD;EACC;;AAGD;EACC;;AAGD;EACC;;AAGD;EACC;;AAGD;EACC;;AAGD;EACC;;AAID;EACC;EAEA,OL1Pc;EK2Pd,kBL/OW;EFbd;;AOgQG;EACC,kBLtPe;;AK2PjB;EACC;;AAGD;EACC;;AAGD;EACC;;AAGD;EACC;;AAGD;EACC;;AAGD;EACC;;AAGD;EACC;;AAMD;EACC;EACA;;;AAOJ;EACC;EACA;;;AAID;AACA;EACC;EAEA;EACA;;AAGC;EACC,OL5Te;EK6Tf;EACA;;AAEA;EACC,OLzUS;EK0UT;;AAKH;EACC,OLvUiB;EKwUjB;;AAGD;EACC;EACA;;AAGD;EACC;EACA,YLzUkB;EK0UlB;EACA;EACA;;AAGD;EACC;EACA;EACA;EACA,YLhWkB;EKiWlB,OL5VM;EK6VN;EACA;;AAEA;EACC;EACA,OLlWK;EKmWL;;AAIF;EACC;EACA,YL/Va;EKgWb;EACA;;AAID;EACC;EACA;EACA,YLxWa;EKyWb;EACA,OLtXgB;EKuXhB;EACA;;AAEA;EACC;;;AAOH;AACA;EAEC;EACA,YL5XmB;EK6XnB;EACA;EACA,OLlYW;EKoYX;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACC;;AAGD;EACC;EACA;;AAGD;EACC,YLtYW;EKuYX,OLhaM;;AKmaP;EACC,YLnZS;EKoZT,OLraM;;AKwaP;EACC;EACA;EACA;;AAGD;EACC,YLpZa;;AKuZd;EACC,YLhaW;;AKmaZ;EACC;;AAEA;EACC;;;AAMH;AACA;EACC;EACA;EACA;EACA;EACA,YLnaQ;;;AMxCT;AACA;EAEC,YNEO;EFHP;;AQKA;EACC,YNOa;;AMLb;EACC,YNIY;;AMEd;EACC,YNbM;EMcN,mBNxBW;;AM2BZ;EACC,YNLU;;AMOV;EACC,YNRS;;AMcT;EACC,ONhBgB;;AMqBjB;EACC,ONtBgB;;AM0BlB;EACC;;AAIF;EACC,mBNdO;EFjCR;;AQoDA;EACC,YNnBU;;AMqBV;EACC,YNtBS;;AM2BV;EACC,ON7De;EM8Df;;AAGD;EACC;;AAIF;EACC;EACA;;AAGD;EACC;EACA;;;AAIF;EACC;EACA;EACA;;AAEA;EACC;;;AC9FF;AACA;AAWE;EACC;;AAID;EACC;EACA;;AAEA;EACC,OPRQ;EOSR;EACA;EACA;EACA;EACA;EACA;;AAEA;EACC;EACA;EACA,YPfQ;EOgBR;EACA;EACA;EACA;EACA;EACA;;AAGD;EACC,OP5CQ;;AOiDX;EACC;;AAEA;EACC;EAEA;;AAEA;EACC,OPlDa;EOmDb;;AAEA;EACC,OP9DO;EO+DP;;;AAUN;EACC;;;AAGD;EACC;EACA;EACA;EACA;EACA;;;ACjFD;AACA;AACA;EACC;EACA,YRcY;EQbZ,OREiB;EQDjB;;;AAGD;EACC;EACA,ORIkB;EQHlB;;;ACZD;AACA;EACC;EACA;;AAEA;EACC;;AAGA;EACC;;AAmBF;EACC;;AAGD;EAEC,OT5BgB;ES6BhB;EACA;EACA;EACA;;AAGD;EACC;EACA;EACA,YT1Ba;ES2Bb;EAEA,OTlCU;ESmCV;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;;AAEA;EACC,YT7DU;ES8DV;EACA;EACA;;;AAQH;EACC;EACA;;;AAIA;EACC;EACA;EACA;EACA;;AAEA;EACC;EACA;;;ACrFH;AACA;AACA;EACC;EACA;;;AAGD;EACC;EACA;EACA,YVSc;EURd,OVGW;EUFX;EACA;;;AAGD;EACC;EACA;EACA;;;AAGD;EACC,YVGU;EUFV;;;AAGD;EACC,YVEY;;;AUCb;EACC,YVdY;;;AUiBb;EACC,YVhCmB;EUiCnB,OV5BO;;;AWTR;AACA;AACA;EACC;;;AAGD;AAAA;AAAA;EAGC;;;AAGD;AAAA;EAEC;;;AAGD;EACC;;;AAGD;EACC;EACA;EACA;;;AAGD;EACC;;;AC1BD;AACA;AAEA;EAME;IACC;;EAEA;IACC;;EAGD;IACC;IACA;IAEA;IACA;IACA;IACA,OZkBa;IFrChB;;EcuBG;IAEC;IACA;IACA,OZxBG;;;EYgCP;IACC;;;EAGD;IdvCA;;Ec2CC;IACC;;EAGD;IACC;;;EAIF;AAAA;AAAA;AAAA;IAIC,YZ9De;IY+Df;IACA;IACA;IACA;IACA;;;EAGD;IACC;;EAGC;IACC;;EAEA;IACC;;EAGD;IACC;;EAGD;IACC;IACA;;EAEA;IACC;;EAKF;IACC;IACA;;;EAMJ;IACC;IACA;;;EAIA;IACC;IACA;;EAGD;IACC;;EAEA;IACC;IACA;;EAEA;IACC;;EAKH;IACC;IACA;;EAEA;IAEC;IACA;;EAEA;IACC;;;EAQF;IACC;;;EAMF;IACC,kBZtIY;IYuIZ;IACA;IACA;IACA;;EAKC;IACC;;EAGD;IACC;;;EAMJ;IACC;IACA;;EAEA;IACC;IAEA;IACA;IACA;IACA;;;EAKF;IACC;;;EAGD;IACC;;;EAGD;IACC;;EAEA;IACC;IACA;IACA;;EAGD;IACC;;EAGD;IACC;;;AClLH;AACA;AACA;EACC,YbjBY;EakBZ;EACA;EACA;;;AAGD;AACA;EACC;EACA,Ob7CY","file":"ansum.css"} \ No newline at end of file diff --git a/p/themes/Ansum/ansum.rtl.css b/p/themes/Ansum/ansum.rtl.css index 12e823cd099..405a37b9b13 100644 --- a/p/themes/Ansum/ansum.rtl.css +++ b/p/themes/Ansum/ansum.rtl.css @@ -583,18 +583,6 @@ form th { text-decoration: none; color: #363330; } -.tree .tree-folder .tree-folder-items .feed .item-title:not([data-unread="0"])::before { - margin: 11px 4px 0 6px; - padding: 3px 4px; - background: rgba(35, 35, 0, 0.15); - display: block; - float: right; - font-size: 0.75rem; - border-radius: 12px; - content: attr(data-unread); - text-align: center; - line-height: 0.75rem; -} /*=== Buttons */ .stick { @@ -726,15 +714,14 @@ form th { width: calc(100% - 35px - 35px); } -.aside_feed .tree-folder-title > .title:not([data-unread="0"])::after { - margin: -0.25rem 0 0 1rem; - padding: 0 0.75rem; - background: rgba(35, 35, 0, 0.15); - border-radius: 12px; - position: absolute; - left: 0; - line-height: 1.5rem; - text-align: center; +.aside.aside_feed .category .title:not([data-unread="0"])::after { + margin: 1.5em 0 0 0; + background-color: rgba(35, 35, 0, 0.15); +} + +.aside.aside_feed .feed .item-title:not([data-unread="0"])::after { + margin: 0.5em 0 0 0; + background-color: rgba(35, 35, 0, 0.15); } .feed.item.empty.active { diff --git a/p/themes/BlueLagoon/BlueLagoon.css b/p/themes/BlueLagoon/BlueLagoon.css index bc3ab7fbbc5..7f1841b145b 100644 --- a/p/themes/BlueLagoon/BlueLagoon.css +++ b/p/themes/BlueLagoon/BlueLagoon.css @@ -602,7 +602,7 @@ a.btn { } .tree-folder-items > .item.active { - margin: 0px 8px; + margin: 0px 5px; background: linear-gradient(180deg, #222 0%, #171717 100%) #171717; background: -webkit-linear-gradient(top, #222 0%, #171717 100%); border-radius: 4px; @@ -702,18 +702,30 @@ a.btn { } /*=== Aside main page (categories) */ -.aside_feed .tree-folder-title > .title:not([data-unread="0"])::after { - position: absolute; - right: 3px; - padding: 1px 5px; - color: #fff; - text-shadow: 0 1px rgba(255,255,255,0.08); -} - .aside_feed .btn-important { border: none; } +.aside.aside_feed .tree-folder-items .item.feed.active { + padding: 0 10px; +} + +.aside.aside_feed .category .title:not([data-unread="0"])::after { + background-color: #171717; + color: #ccc; + border-color: #999; +} + +.aside.aside_feed .feed .item-title:not([data-unread="0"])::after { + background-color: #222; + color: #ccc; + border-color: #999; +} + +.aside.aside_feed .feed.active .item-title:not([data-unread="0"])::after { + right: 5px; +} + /*=== Aside main page (feeds) */ .feed.item.empty, .feed.item.empty > a { diff --git a/p/themes/BlueLagoon/BlueLagoon.rtl.css b/p/themes/BlueLagoon/BlueLagoon.rtl.css index cc28c5619ee..6034cbf37cb 100644 --- a/p/themes/BlueLagoon/BlueLagoon.rtl.css +++ b/p/themes/BlueLagoon/BlueLagoon.rtl.css @@ -602,7 +602,7 @@ a.btn { } .tree-folder-items > .item.active { - margin: 0px 8px; + margin: 0px 5px; background: linear-gradient(-180deg, #222 0%, #171717 100%) #171717; background: -webkit-linear-gradient(top, #222 0%, #171717 100%); border-radius: 4px; @@ -702,18 +702,30 @@ a.btn { } /*=== Aside main page (categories) */ -.aside_feed .tree-folder-title > .title:not([data-unread="0"])::after { - position: absolute; - left: 3px; - padding: 1px 5px; - color: #fff; - text-shadow: 0 1px rgba(255,255,255,0.08); -} - .aside_feed .btn-important { border: none; } +.aside.aside_feed .tree-folder-items .item.feed.active { + padding: 0 10px; +} + +.aside.aside_feed .category .title:not([data-unread="0"])::after { + background-color: #171717; + color: #ccc; + border-color: #999; +} + +.aside.aside_feed .feed .item-title:not([data-unread="0"])::after { + background-color: #222; + color: #ccc; + border-color: #999; +} + +.aside.aside_feed .feed.active .item-title:not([data-unread="0"])::after { + left: 5px; +} + /*=== Aside main page (feeds) */ .feed.item.empty, .feed.item.empty > a { diff --git a/p/themes/Dark/dark.css b/p/themes/Dark/dark.css index f9b5f69e12d..0025bd3e713 100644 --- a/p/themes/Dark/dark.css +++ b/p/themes/Dark/dark.css @@ -616,14 +616,18 @@ a.btn { } /*=== Aside main page (categories) */ -.aside_feed .tree-folder-title > .title:not([data-unread="0"])::after { - margin: 10px 0; - padding: 0 10px; - background: inherit; - font-size: 0.9rem; - position: absolute; - right: 0; - line-height: 1.5rem; +.aside.aside_feed .category .title:not([data-unread="0"])::after { + background-color: #171717; +} + +.aside.aside_feed .feed .item-title:not([data-unread="0"])::after { + background-color: #222; + color: #888; +} + +.aside.aside_feed .feed.active .item-title:not([data-unread="0"])::after { + border-color: #888; + color: #888; } /*=== Aside main page (feeds) */ diff --git a/p/themes/Dark/dark.rtl.css b/p/themes/Dark/dark.rtl.css index ab5751ce898..2f989cb4eb1 100644 --- a/p/themes/Dark/dark.rtl.css +++ b/p/themes/Dark/dark.rtl.css @@ -616,14 +616,18 @@ a.btn { } /*=== Aside main page (categories) */ -.aside_feed .tree-folder-title > .title:not([data-unread="0"])::after { - margin: 10px 0; - padding: 0 10px; - background: inherit; - font-size: 0.9rem; - position: absolute; - left: 0; - line-height: 1.5rem; +.aside.aside_feed .category .title:not([data-unread="0"])::after { + background-color: #171717; +} + +.aside.aside_feed .feed .item-title:not([data-unread="0"])::after { + background-color: #222; + color: #888; +} + +.aside.aside_feed .feed.active .item-title:not([data-unread="0"])::after { + border-color: #888; + color: #888; } /*=== Aside main page (feeds) */ diff --git a/p/themes/Flat/flat.css b/p/themes/Flat/flat.css index 1d069a01d12..b884a36215f 100644 --- a/p/themes/Flat/flat.css +++ b/p/themes/Flat/flat.css @@ -624,14 +624,12 @@ a.btn { } /*=== Aside main page (categories) */ -.aside_feed .tree-folder-title > .title:not([data-unread="0"])::after { - margin: 10px 0; - padding: 0 10px; - background: inherit; - font-size: 0.9rem; - position: absolute; - right: 0; - line-height: 1.5rem; +.aside.aside_feed .category .title:not([data-unread="0"])::after { + background-color: #2c3e50; +} + +.aside.aside_feed .feed .item-title:not([data-unread="0"])::after { + background-color: #34495e; } /*=== Aside main page (feeds) */ diff --git a/p/themes/Flat/flat.rtl.css b/p/themes/Flat/flat.rtl.css index 852fa1b9a36..6c5ce024b57 100644 --- a/p/themes/Flat/flat.rtl.css +++ b/p/themes/Flat/flat.rtl.css @@ -624,14 +624,12 @@ a.btn { } /*=== Aside main page (categories) */ -.aside_feed .tree-folder-title > .title:not([data-unread="0"])::after { - margin: 10px 0; - padding: 0 10px; - background: inherit; - font-size: 0.9rem; - position: absolute; - left: 0; - line-height: 1.5rem; +.aside.aside_feed .category .title:not([data-unread="0"])::after { + background-color: #2c3e50; +} + +.aside.aside_feed .feed .item-title:not([data-unread="0"])::after { + background-color: #34495e; } /*=== Aside main page (feeds) */ diff --git a/p/themes/Mapco/_sidebar.scss b/p/themes/Mapco/_sidebar.scss index 0e749b603e1..c4a3003c200 100644 --- a/p/themes/Mapco/_sidebar.scss +++ b/p/themes/Mapco/_sidebar.scss @@ -79,19 +79,6 @@ color: variables.$sid-font-color; } } - - .feed .item-title:not([data-unread="0"])::before { - margin: 11px 6px 0 4px; - padding: 3px 4px; - background: variables.$sid-pills; - display: block; - float: left; - font-size: 0.75rem; - border-radius: 12px; - content: attr(data-unread); - text-align: center; - line-height: 0.75rem; - } } } } @@ -272,15 +259,14 @@ width: calc(100% - 35px - 35px); } -.aside_feed .tree-folder-title > .title:not([data-unread="0"])::after { - margin: -0.25rem 1rem 0 0; - padding: 0 0.75rem; - background: variables.$sid-pills; - border-radius: 12px; - position: absolute; - right: 0; - line-height: 1.5rem; - text-align: center; +.aside.aside_feed .category .title:not([data-unread="0"])::after { + margin: 1.5em 0 0 0; + background-color: variables.$sid-pills; +} + +.aside.aside_feed .feed .item-title:not([data-unread="0"])::after { + margin: 0.5em 0 0 0; + background-color: variables.$sid-pills; } .feed.item.empty.active { diff --git a/p/themes/Mapco/mapco.css b/p/themes/Mapco/mapco.css index 9d4a5d81346..76fd4dc46bc 100644 --- a/p/themes/Mapco/mapco.css +++ b/p/themes/Mapco/mapco.css @@ -579,18 +579,6 @@ form th { text-decoration: none; color: #ffffff; } -.tree .tree-folder .tree-folder-items .feed .item-title:not([data-unread="0"])::before { - margin: 11px 6px 0 4px; - padding: 3px 4px; - background: rgba(0, 0, 0, 0.25); - display: block; - float: left; - font-size: 0.75rem; - border-radius: 12px; - content: attr(data-unread); - text-align: center; - line-height: 0.75rem; -} /*=== Buttons */ .stick { @@ -721,15 +709,14 @@ form th { width: calc(100% - 35px - 35px); } -.aside_feed .tree-folder-title > .title:not([data-unread="0"])::after { - margin: -0.25rem 1rem 0 0; - padding: 0 0.75rem; - background: rgba(0, 0, 0, 0.25); - border-radius: 12px; - position: absolute; - right: 0; - line-height: 1.5rem; - text-align: center; +.aside.aside_feed .category .title:not([data-unread="0"])::after { + margin: 1.5em 0 0 0; + background-color: rgba(0, 0, 0, 0.25); +} + +.aside.aside_feed .feed .item-title:not([data-unread="0"])::after { + margin: 0.5em 0 0 0; + background-color: rgba(0, 0, 0, 0.25); } .feed.item.empty.active { diff --git a/p/themes/Mapco/mapco.css.map b/p/themes/Mapco/mapco.css.map index b88820ec7ef..d57883b2af2 100644 --- a/p/themes/Mapco/mapco.css.map +++ b/p/themes/Mapco/mapco.css.map @@ -1 +1 @@ -{"version":3,"sourceRoot":"","sources":["_fonts.scss","_mixins.scss","_forms.scss","_variables.scss","_tables.scss","_components.scss","_divers.scss","_sidebar.scss","_layout.scss","_list-view.scss","_global-view.scss","_reader-view.scss","_configuration.scss","_logs.scss","_stats.scss","_mobile.scss","mapco.scss"],"names":[],"mappings":"AAAA;EACC;EACA;EACA;EACA;EACA;;AAGD;EACC;EACA;EACA;EACA;EACA;;AAGD;EACC;EACA;EACA;EACA;EACA;;AAGD;EACC;EACA;EACA;EACA;EACA;;AAGD;EACC;EACA;EACA;EACA;EACA;;AAGD;EACC;EACA;EACA;EACA;EACA;;AAGD;EACC;EACA;EACA;EACA;EACA;;AAGD;EACC;EACA;EACA;EACA;EACA;;AC5DD;AAEA;ACCA;AACA;EACC;EACA;EACA,YCac;EDZd;EACA,OCMW;EDLX;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EDXA;;ACeA;EACC,YCvBW;EDwBX,OCdM;;ADiBN;EAEC,YC5Bc;;ADiChB;EACC,YCRS;EDST;;AAEA;EAEC,YCXU;;ADeZ;EACC;;;AAIF;EACC;EACA;;;AAGD;AACA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGD;EACC;EACA;EACA;EACA,OCxDW;;;AD2DZ;EACC;EACA;EACA;;;AAGD;EACC;EACA,YCxEO;EDyEP,OCpEW;EDqEX;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGD;EACC;;;AAGD;EACC,OC1FiB;ED2FjB,cCnGY;;;ADsGb;EACC,OC5EU;ED6EV,cC7EU;ED8EV;;;AAGD;EACC,YC1FY;;;AD6Fb;EACC;;;AAID;EACC;EACA;;AAEA;EACC;EACA;EACA;;AAUD;EACC;EACA;;AAGD;EACC;EACA;;AAGD;EACC;;AAGD;EACC;EACA;;AAID;EACC;;;AE1JF;AACA;EACC;;;AAGD;EACC;EACA;;;AAGD;EACC,YDQc;;;ACLf;AAAA;EAEC;EACA;;;ACbD;AACA;AACA;AAGA;AACA;EACC;EACA;;AAEA;EACC;;AAEA;EACC;;;AAMH;AACA;EACC;EACA;EACA,YFTc;EEUd;EACA;EACA;EACA;EACA;;AAEA;EACC;EACA;;AAGD;EAEC;EACA;EACA;EACA,OF/BU;EEgCV;EACA;;AAID;EJ7CA;;AIiDC;EACC;EACA,OFlDe;EEmDf;EACA;;AAGD;EACC,YFhEU;EEiEV,OFvDK;;AEyDL;EACC;EACA,OF3DI;;AEgEL;EACC;EACA;;AAMF;EACC;EACA;EACA;;AAIF;EACC;EACA;;;AAQD;EACC;;AAEA;AAAA;EAEC,OFhGe;;AEkGf;AAAA;EACC,OFjGI;;AEqGN;EACC,YFhHU;;;AEwHb;AACA;EACC;EAEA;EACA,YFzGc;EE0Gd,OF/GW;EEgHX;EACA;EACA;EACA;;;AAGD;EACC;;;AAGD;EACC;EACA;;;AAGD;EACC,YF/Ge;EEgHf,OF/Gc;EEgHd;;;AAGD;EACC,YFjHe;EEkHf,OFjHc;EEkHd;;;AAGD;EACC,YF/Ha;EEgIb,OF/HY;EEgIZ;;;AAGD;AACA;EACC,YF/IY;EEgJZ,OF3JiB;EE4JjB;EACA;;AAGC;EACC,YF5HM;EE6HN,OFvJU;EEwJV;EACA;;AAGD;EACC;EACA,OFzKe;EE0Kf;EACA;EACA;;AAEA;EACC,YF/Kc;EEgLd,OFrKS;;AE0KZ;AAAA;EAEC;EACA;;;AAIF;EACC;EACA;;;AAID;AACA;EACC,YFlMO;EEoMP;EACA;EAEA;;AAEA;EACC;EACA;EACA,YFnMW;EEoMX,OF/MgB;EEiNhB;;AAEA;EACC;;AAIA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACC;EACA;EACA;;AAGD;EACC;;AAOF;EACC;;AAGD;EACC;;AAEA;EACC;EAEA;EACA;EACA;EACA;;AAEA;EACC;;AAOL;EAEC;;AAEA;EACC;EACA,OF5Qe;EE6Qf;EACA;EACA;;AAEA;EACC;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACC;EACA;EACA;;AAGD;EAEC;;AAMH;EACC;;;AAKH;AACA;EACC;EACA;EACA,YF5TkB;EE6TlB,OF/TY;EFOZ;;AI4TA;EACC,YFpUW;EEqUX;;AAEA;EACC;;AAIF;EACC;EACA;EACA;EACA;EACA;EACA;EACA;;;AAKF;EACC,YF5SQ;;AE+SP;EACC;;AAEA;EACC;;AAGD;EACC,OF1VI;;AE+VP;EACC,OFhWM;;AEoWN;EACC;;AAEA;EACC,OFjWU;EEkWV;;AAKD;EACC,YFpXgB;;AEsXhB;EACC,YFxWU;EEyWV,OFrXa;;;AGTlB;AACA;AACA;AAAA;EAEC;;;AAGD;EACC;;;AAGD;EACC;;;ACND;AACA;EACC;;AAEA;EACC;EACA;;AAID;EACC;;AAEA;EACC;EACA,YJyBM;EIxBN;EACA;EACA;EACA;EACA;;AAEA;EACC;EACA,OJea;;AIbb;EACC;;AAMF;EACC,YJMK;EILL;;AAIF;EACC,YJCU;;AICV;EACC;EACA;EACA;EACA;EN5CH;;AMgDG;EACC,YJxDQ;;AI0DR;EACC,OJnDY;;AIqDZ;EACC,OJlBU;;AIsBZ;EACC,OJjBY;;AIqBd;EACC,YJzBS;;AI4BV;EACC;EACA,OJjCY;;AIqCd;EACC;EACA;EACA,YJjCQ;EIkCR;EACA;EACA;EACA;EACA;EACA;EACA;;;AAMJ;AACA;EACC;EACA;;AAEA;EACC;;AAGD;AAAA;EAEC;;AAGD;EACC;;AAGD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EASC;;;AAKF;EACC,YJrFQ;;AIuFR;EACC;EACA;EACA,YJ1FO;;AI6FR;EACC;;;AAMF;AAIA;AAEC;AAAA;EAEC;EACA;EACA;;AAGD;EACC,YJlHO;EFtCR;;AM4JC;EACC;EACA,OJzHc;;AI6Hd;EACC,OJ/IO;;AImJT;EACC,YJhIW;EIiIX,OJpIc;;AIuIb;EACC,YJpLQ;EIqLR,OJzIY;;AI8Ib;EACC,YJ5JQ;EI6JR,OJhJY;;AIoJd;EACC,OJrJa;EIsJb;;AAIF;EACC,YJvMU;EIwMV,OJ9LK;;AIiMJ;EACC,YJ5MQ;EI6MR,OJnMG;;AIwMJ;EACC,YJpLQ;EIqLR,OJ1MG;;AI8ML;EACC,OJ/MI;EIgNJ;;AAOF;EACC,OJnMU;;AIuMZ;EACC;EACA,YJpNa;EIqNb,OJzNiB;;AI4NlB;EACC;EACA;EACA,OJhOU;EIiOV;EACA;EACA;;AAGD;EACC;EACA;;AAGD;EACC;EACA;EAEA,OJpPM;;AIsPN;EACC,OJvPK;;AI0PN;EACC;EACA;EACA;;;AAKH;AACA;EACC;;;AAGD;EACC;EACA;EACA,YJjOW;EIkOX;EACA;EACA;EACA;EACA;;;AAGD;EACC,YJ9QW;;;AIiRZ;EACC,YJlRW;;;AIqRZ;AAAA;EAEC,OJvRW;;;AI0RZ;AAAA;EAEC,OJ5RW;;;AI+RZ;AAAA;AAAA;AAAA;EAIC,OJxSO;;;AI2SR;EACC;;;AAGD;AAAA;AAAA;EAGC;;;AAGD;EACC,mBJnRQ;;;AK1CT;AACA;AACA;AACA;EACC;EACA,YLqCQ;EKpCR;EACA;EACA;;AAEA;EACC;EACA;;AAGD;EACC;;AAKA;EACC;EAEA;;AAGC;EACC;;AAQF;EACC;EACA,OLGa;EKFb;EACA;EACA,kBLES;EFvCZ;;AOyCG;EACC,kBLFS;;AKKV;EACC;EACA,OLvCO;EKyCP,kBL9CG;;AKkDL;EAGC;EACA;EAEA,kBLlES;EKmET;EACA;EACA;EAEA;EACA;;AAXA;EAAK;;AAaL;EACC,kBL1EY;;AK+Ef;EACC;EACA;EACA;EACA;EACA;;AAEA;EAGC;EAGA;EACA;EACA;EACA;;AARA;EAAK;;AAqBT;AACA;EACC;;;AAMD;AACA;EACC;;;AAGD;EACC;;;AAGD;EACC;EACA;;;AAGD;EACC;EACA;;;AAGD;EACC;;;AAGD;AACA;EACC,YL9IY;EK+IZ;EACA;;;AAGD;EACC,YLnJgB;;;AKsJjB;EACC;EACA;EACA,OLhJO;;;AKmJR;EACC;;;AAGD;AACA;EACC;EACA,OL3JkB;EK4JlB;EACA;EACA;EACA;EACA;;AAEA;EACC;EAEA,OLtKgB;EKuKhB;EACA;EACA;EAGA;;;AAIF;AACA;EACC;EACA;;AAEA;EACC;EACA;EACA,kBL5Ka;EK6Kb;EACA;;AAEA;EACC,kBLlLU;;AKsLZ;EACC,YLtLa;;AKwLb;EACC;EACA;EACA,kBL3LY;EK4LZ;EACA;EP1MF;;AO8ME;EACC,kBLpMgB;;AKuMjB;EACC,kBL1NS;;AK6NV;EAAU;;AAIV;EACC;;AAGD;EACC;;AAGD;EACC;;AAGD;EACC;;AAGD;EACC;;AAGD;EACC;;AAGD;EACC;;AAGD;EACC;;AAID;EACC;EAEA,OL7Pc;EK8Pd,kBLlPW;EFbd;;AOmQG;EACC,kBLzPe;;AK8PjB;EACC;;AAGD;EACC;;AAGD;EACC;;AAGD;EACC;;AAGD;EACC;;AAGD;EACC;;AAGD;EACC;;AAMD;EACC;EACA;;;AAOJ;EACC;EACA,kBL1SkB;EK2SlB;;;AAID;AACA;EACC;EAEA;EACA;;AAGC;EACC,OLhUe;EKiUf;EACA;;AAEA;EACC,OL7US;EK8UT;;AAKH;EACC,OL3UiB;EK4UjB;;AAGD;EACC;EACA;;AAGD;EACC;EACA,YL7UkB;EK8UlB;EACA;EACA;;AAGD;EACC;EACA;EACA;EACA,YLpWkB;EKqWlB,OLhWM;EKiWN;EACA;;AAEA;EACC;EACA,OLtWK;EKuWL;;AAIF;EACC;EACA,YLnWa;EKoWb;EACA;;AAID;EACC;EACA;EACA,YL5Wa;EK6Wb;EACA,OL1XgB;EK2XhB;EACA;;AAEA;EACC;;;AAOH;AACA;EAEC;EACA,YLhYmB;EKiYnB;EACA;EACA,OLtYW;EKwYX;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACC;EACA;;AAGD;EACC,YLvYW;EKwYX,OLjaM;;AKoaP;EACC,YLpZS;EKqZT,OLtaM;;AKyaP;EACC;EACA;EACA;;AAGD;EACC,YLrZa;;AKwZd;EACC,YLjaW;;AKoaZ;EACC;;AAEA;EACC;;;AAMH;AACA;EACC;EACA;EACA;EACA;EACA,YLpaQ;;;AMxCT;AACA;EAEC,YNEO;EFHP;;AQKA;EACC,YNOa;;AMLb;EACC,YNIY;;AMEd;EACC,YNHa;EMIb,mBNxBW;;AM2BZ;EACC,YNLU;;AMOV;EACC,YNRS;;AMcT;EACC,ONtCS;;AM4CV;EACC,ON7CS;;AMiDX;EACC;;AAIF;EACC,mBNfO;EFjCR;;AQqDA;EACC,YNpBU;;AMsBV;EACC,YNvBS;;AM4BV;EACC,ON9De;EM+Df;;AAGD;EACC;;AAIF;EACC;EACA;;AAGD;EACC;EACA;;;AAIF;EACC;EACA;EACA;;AAEA;EACC;;;AC/FF;AACA;AAWE;EACC;;AAID;EACC;EACA;;AAEA;EACC,OPRQ;EOSR;EACA;EACA;EACA;EACA;EACA;;AAEA;EACC;EACA;EACA,YPfQ;EOgBR;EACA;EACA;EACA;EACA;EACA;;AAGD;EACC,OP5CQ;;AOiDX;EACC;;AAEA;EACC;EAEA;;AAEA;EACC,OPlDa;EOmDb;;AAEA;EACC,OP9DO;EO+DP;;;AAUN;EACC;;;AAGD;EACC;EACA;EACA;EACA;EACA;;;ACjFD;AACA;AACA;EACC;EACA,YRcY;EQbZ,OREiB;EQDjB;;;AAGD;EACC;EACA,ORIkB;EQHlB;;;ACZD;AACA;EACC;EACA;;AAEA;EACC;;AAGA;EACC;;AAmBF;EACC;;AAGD;EAEC,OT5BgB;ES6BhB;EACA;EACA;EACA;;AAGD;EACC;EACA;EACA,YT1Ba;ES2Bb;EAEA,OTlCU;ESmCV;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;;AAEA;EACC,YT7DU;ES8DV;EACA;EACA;;;AAQH;EACC;EACA;;;AAIA;EACC;EACA;EACA;EACA;;AAEA;EACC;EACA;;;ACrFH;AACA;AACA;EACC;EACA;;;AAGD;EACC;EACA;EACA,YVSc;EURd,OVGW;EUFX;EACA;;;AAGD;EACC;EACA;EACA;;;AAGD;EACC,YVGU;EUFV;;;AAGD;EACC,YVEY;;;AUCb;EACC,YVdY;;;AUiBb;EACC,YVhCmB;EUiCnB,OV5BO;;;AWTR;AACA;AACA;EACC;;;AAGD;AAAA;AAAA;EAGC;;;AAGD;AAAA;EAEC;;;AAGD;EACC;;;AAGD;EACC;EACA;EACA;;;AAGD;EACC;;;AC1BD;AACA;AAEA;EAME;IACC;;EAEA;IACC;;EAGD;IACC;IACA;IAEA;IACA;IACA;IACA,OZkBa;IFrChB;;EcuBG;IAEC;IACA;;;EAQJ;IACC;;;EAGD;IdtCA;;Ec0CC;IACC;;EAGD;IACC;;;EAIF;AAAA;AAAA;AAAA;IAIC,YZ7De;IY8Df;IACA;IACA;IACA;IACA;;;EAGD;IACC;;EAGC;IACC;;EAEA;IACC;;EAGD;IACC;;EAGD;IACC;IACA;;EAEA;IACC;;EAKF;IACC;IACA;;;EAOJ;IACC;IACA;;;EAIA;IACC;IACA;;EAGD;IACC;;EAEA;IACC;IACA;;EAEA;IACC;;EAKH;IACC;IACA;;EAEA;IAEC;IACA;;EAEA;IACC;;;EAQF;IACC;;;EAMF;IACC,kBZtIY;IYuIZ;IACA;IACA;IACA;;EAKC;IACC;;EAGD;IACC;;;EAMJ;IACC;IACA;;EAEA;IACC;IAEA;IACA;IACA;IACA;;;EAKF;IACC;;;EAGD;IACC;;;EAGD;IACC;;EAEA;IACC;IACA;IACA;;EAGD;IACC;;EAGD;IACC;;;AClLH;AACA;AACA;EACC,YbjBY;EakBZ;EACA;EACA;;;AAGD;AACA;EACC;EACA,Ob7CY","file":"mapco.css"} \ No newline at end of file +{"version":3,"sourceRoot":"","sources":["_fonts.scss","_mixins.scss","_forms.scss","_variables.scss","_tables.scss","_components.scss","_divers.scss","_sidebar.scss","_layout.scss","_list-view.scss","_global-view.scss","_reader-view.scss","_configuration.scss","_logs.scss","_stats.scss","_mobile.scss","mapco.scss"],"names":[],"mappings":"AAAA;EACC;EACA;EACA;EACA;EACA;;AAGD;EACC;EACA;EACA;EACA;EACA;;AAGD;EACC;EACA;EACA;EACA;EACA;;AAGD;EACC;EACA;EACA;EACA;EACA;;AAGD;EACC;EACA;EACA;EACA;EACA;;AAGD;EACC;EACA;EACA;EACA;EACA;;AAGD;EACC;EACA;EACA;EACA;EACA;;AAGD;EACC;EACA;EACA;EACA;EACA;;AC5DD;AAEA;ACCA;AACA;EACC;EACA;EACA,YCac;EDZd;EACA,OCMW;EDLX;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EDXA;;ACeA;EACC,YCvBW;EDwBX,OCdM;;ADiBN;EAEC,YC5Bc;;ADiChB;EACC,YCRS;EDST;;AAEA;EAEC,YCXU;;ADeZ;EACC;;;AAIF;EACC;EACA;;;AAGD;AACA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGD;EACC;EACA;EACA;EACA,OCxDW;;;AD2DZ;EACC;EACA;EACA;;;AAGD;EACC;EACA,YCxEO;EDyEP,OCpEW;EDqEX;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGD;EACC;;;AAGD;EACC,OC1FiB;ED2FjB,cCnGY;;;ADsGb;EACC,OC5EU;ED6EV,cC7EU;ED8EV;;;AAGD;EACC,YC1FY;;;AD6Fb;EACC;;;AAID;EACC;EACA;;AAEA;EACC;EACA;EACA;;AAUD;EACC;EACA;;AAGD;EACC;EACA;;AAGD;EACC;;AAGD;EACC;EACA;;AAID;EACC;;;AE1JF;AACA;EACC;;;AAGD;EACC;EACA;;;AAGD;EACC,YDQc;;;ACLf;AAAA;EAEC;EACA;;;ACbD;AACA;AACA;AAGA;AACA;EACC;EACA;;AAEA;EACC;;AAEA;EACC;;;AAMH;AACA;EACC;EACA;EACA,YFTc;EEUd;EACA;EACA;EACA;EACA;;AAEA;EACC;EACA;;AAGD;EAEC;EACA;EACA;EACA,OF/BU;EEgCV;EACA;;AAID;EJ7CA;;AIiDC;EACC;EACA,OFlDe;EEmDf;EACA;;AAGD;EACC,YFhEU;EEiEV,OFvDK;;AEyDL;EACC;EACA,OF3DI;;AEgEL;EACC;EACA;;AAMF;EACC;EACA;EACA;;AAIF;EACC;EACA;;;AAQD;EACC;;AAEA;AAAA;EAEC,OFhGe;;AEkGf;AAAA;EACC,OFjGI;;AEqGN;EACC,YFhHU;;;AEwHb;AACA;EACC;EAEA;EACA,YFzGc;EE0Gd,OF/GW;EEgHX;EACA;EACA;EACA;;;AAGD;EACC;;;AAGD;EACC;EACA;;;AAGD;EACC,YF/Ge;EEgHf,OF/Gc;EEgHd;;;AAGD;EACC,YFjHe;EEkHf,OFjHc;EEkHd;;;AAGD;EACC,YF/Ha;EEgIb,OF/HY;EEgIZ;;;AAGD;AACA;EACC,YF/IY;EEgJZ,OF3JiB;EE4JjB;EACA;;AAGC;EACC,YF3HM;EE4HN,OFvJU;EEwJV;EACA;;AAGD;EACC;EACA,OFzKe;EE0Kf;EACA;EACA;;AAEA;EACC,YF/Kc;EEgLd,OFrKS;;AE0KZ;AAAA;EAEC;EACA;;;AAIF;EACC;EACA;;;AAID;AACA;EACC,YFlMO;EEoMP;EACA;EAEA;;AAEA;EACC;EACA;EACA,YFnMW;EEoMX,OF/MgB;EEiNhB;;AAEA;EACC;;AAIA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACC;EACA;EACA;;AAGD;EACC;;AAOF;EACC;;AAGD;EACC;;AAEA;EACC;EAEA;EACA;EACA;EACA;;AAEA;EACC;;AAOL;EAEC;;AAEA;EACC;EACA,OF5Qe;EE6Qf;EACA;EACA;;AAEA;EACC;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACC;EACA;EACA;;AAGD;EAEC;;AAMH;EACC;;;AAKH;AACA;EACC;EACA;EACA,YF5TkB;EE6TlB,OF/TY;EFOZ;;AI4TA;EACC,YFpUW;EEqUX;;AAEA;EACC;;AAIF;EACC;EACA;EACA;EACA;EACA;EACA;EACA;;;AAKF;EACC,YF3SQ;;AE8SP;EACC;;AAEA;EACC;;AAGD;EACC,OF1VI;;AE+VP;EACC,OFhWM;;AEoWN;EACC;;AAEA;EACC,OFjWU;EEkWV;;AAKD;EACC,YFpXgB;;AEsXhB;EACC,YFxWU;EEyWV,OFrXa;;;AGTlB;AACA;AACA;AAAA;EAEC;;;AAGD;EACC;;;AAGD;EACC;;;ACND;AACA;EACC;;AAEA;EACC;EACA;;AAID;EACC;;AAEA;EACC;EACA,YJ0BM;EIzBN;EACA;EACA;EACA;EACA;;AAEA;EACC;EACA,OJgBa;;AIdb;EACC;;AAMF;EACC,YJOK;EINL;;AAIF;EACC,YJEU;;AIAV;EACC;EACA;EACA;EACA;EN5CH;;AMgDG;EACC,YJxDQ;;AI0DR;EACC,OJnDY;;AIqDZ;EACC,OJjBU;;AIqBZ;EACC,OJfY;;AImBd;EACC,YJxBS;;AI2BV;EACC;EACA,OJhCY;;;AIuCjB;AACA;EACC;EACA;;AAEA;EACC;;AAGD;AAAA;EAEC;;AAGD;EACC;;AAGD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EASC;;;AAKF;EACC,YJvEQ;;AIyER;EACC;EACA;EACA,YJ5EO;;AI+ER;EACC;;;AAMF;AAIA;AAEC;AAAA;EAEC;EACA;EACA;;AAGD;EACC,YJpGO;EFvCR;;AM+IC;EACC;EACA,OJ3Gc;;AI+Gd;EACC,OJlIO;;AIsIT;EACC,YJlHW;EImHX,OJtHc;;AIyHb;EACC,YJvKQ;EIwKR,OJ3HY;;AIgIb;EACC,YJ/IQ;EIgJR,OJlIY;;AIsId;EACC,OJvIa;EIwIb;;AAIF;EACC,YJ1LU;EI2LV,OJjLK;;AIoLJ;EACC,YJ/LQ;EIgMR,OJtLG;;AI2LJ;EACC,YJvKQ;EIwKR,OJ7LG;;AIiML;EACC,OJlMI;EImMJ;;AAOF;EACC,OJtLU;;AI0LZ;EACC;EACA,YJvMa;EIwMb,OJ5MiB;;AI+MlB;EACC;EACA;EACA,OJnNU;EIoNV;EACA;EACA;;AAGD;EACC;EACA;;AAGD;EACC;EACA;EAEA,OJvOM;;AIyON;EACC,OJ1OK;;AI6ON;EACC;EACA;EACA;;;AAKH;AACA;EACC;;;AAGD;EACC;EACA,kBJjNW;;;AIoNZ;EACC;EACA,kBJtNW;;;AIyNZ;EACC,YJhQW;;;AImQZ;EACC,YJpQW;;;AIuQZ;AAAA;EAEC,OJzQW;;;AI4QZ;AAAA;EAEC,OJ9QW;;;AIiRZ;AAAA;AAAA;AAAA;EAIC,OJ1RO;;;AI6RR;EACC;;;AAGD;AAAA;AAAA;EAGC;;;AAGD;EACC,mBJpQQ;;;AK3CT;AACA;AACA;AACA;EACC;EACA,YLsCQ;EKrCR;EACA;EACA;;AAEA;EACC;EACA;;AAGD;EACC;;AAKA;EACC;EAEA;;AAGC;EACC;;AAQF;EACC;EACA,OLIa;EKHb;EACA;EACA,kBLGS;EFxCZ;;AOyCG;EACC,kBLDS;;AKIV;EACC;EACA,OLvCO;EKyCP,kBL9CG;;AKkDL;EAGC;EACA;EAEA,kBLlES;EKmET;EACA;EACA;EAEA;EACA;;AAXA;EAAK;;AAaL;EACC,kBL1EY;;AK+Ef;EACC;EACA;EACA;EACA;EACA;;AAEA;EAGC;EAGA;EACA;EACA;EACA;;AARA;EAAK;;AAqBT;AACA;EACC;;;AAMD;AACA;EACC;;;AAGD;EACC;;;AAGD;EACC;EACA;;;AAGD;EACC;EACA;;;AAGD;EACC;;;AAGD;AACA;EACC,YL9IY;EK+IZ;EACA;;;AAGD;EACC,YLnJgB;;;AKsJjB;EACC;EACA;EACA,OLhJO;;;AKmJR;EACC;;;AAGD;AACA;EACC;EACA,OL3JkB;EK4JlB;EACA;EACA;EACA;EACA;;AAEA;EACC;EAEA,OLtKgB;EKuKhB;EACA;EACA;EAGA;;;AAIF;AACA;EACC;EACA;;AAEA;EACC;EACA;EACA,kBL5Ka;EK6Kb;EACA;;AAEA;EACC,kBLlLU;;AKsLZ;EACC,YLtLa;;AKwLb;EACC;EACA;EACA,kBL3LY;EK4LZ;EACA;EP1MF;;AO8ME;EACC,kBLpMgB;;AKuMjB;EACC,kBL1NS;;AK6NV;EAAU;;AAIV;EACC;;AAGD;EACC;;AAGD;EACC;;AAGD;EACC;;AAGD;EACC;;AAGD;EACC;;AAGD;EACC;;AAGD;EACC;;AAID;EACC;EAEA,OL7Pc;EK8Pd,kBLlPW;EFbd;;AOmQG;EACC,kBLzPe;;AK8PjB;EACC;;AAGD;EACC;;AAGD;EACC;;AAGD;EACC;;AAGD;EACC;;AAGD;EACC;;AAGD;EACC;;AAMD;EACC;EACA;;;AAOJ;EACC;EACA,kBL1SkB;EK2SlB;;;AAID;AACA;EACC;EAEA;EACA;;AAGC;EACC,OLhUe;EKiUf;EACA;;AAEA;EACC,OL7US;EK8UT;;AAKH;EACC,OL3UiB;EK4UjB;;AAGD;EACC;EACA;;AAGD;EACC;EACA,YL7UkB;EK8UlB;EACA;EACA;;AAGD;EACC;EACA;EACA;EACA,YLpWkB;EKqWlB,OLhWM;EKiWN;EACA;;AAEA;EACC;EACA,OLtWK;EKuWL;;AAIF;EACC;EACA,YLnWa;EKoWb;EACA;;AAID;EACC;EACA;EACA,YL5Wa;EK6Wb;EACA,OL1XgB;EK2XhB;EACA;;AAEA;EACC;;;AAOH;AACA;EAEC;EACA,YLhYmB;EKiYnB;EACA;EACA,OLtYW;EKwYX;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACC;EACA;;AAGD;EACC,YLvYW;EKwYX,OLjaM;;AKoaP;EACC,YLpZS;EKqZT,OLtaM;;AKyaP;EACC;EACA;EACA;;AAGD;EACC,YLrZa;;AKwZd;EACC,YLjaW;;AKoaZ;EACC;;AAEA;EACC;;;AAMH;AACA;EACC;EACA;EACA;EACA;EACA,YLnaQ;;;AMzCT;AACA;EAEC,YNEO;EFHP;;AQKA;EACC,YNOa;;AMLb;EACC,YNIY;;AMEd;EACC,YNHa;EMIb,mBNxBW;;AM2BZ;EACC,YNLU;;AMOV;EACC,YNRS;;AMcT;EACC,ONtCS;;AM4CV;EACC,ON7CS;;AMiDX;EACC;;AAIF;EACC,mBNfO;EFjCR;;AQqDA;EACC,YNpBU;;AMsBV;EACC,YNvBS;;AM4BV;EACC,ON9De;EM+Df;;AAGD;EACC;;AAIF;EACC;EACA;;AAGD;EACC;EACA;;;AAIF;EACC;EACA;EACA;;AAEA;EACC;;;AC/FF;AACA;AAWE;EACC;;AAID;EACC;EACA;;AAEA;EACC,OPRQ;EOSR;EACA;EACA;EACA;EACA;EACA;;AAEA;EACC;EACA;EACA,YPfQ;EOgBR;EACA;EACA;EACA;EACA;EACA;;AAGD;EACC,OP5CQ;;AOiDX;EACC;;AAEA;EACC;EAEA;;AAEA;EACC,OPlDa;EOmDb;;AAEA;EACC,OP9DO;EO+DP;;;AAUN;EACC;;;AAGD;EACC;EACA;EACA;EACA;EACA;;;ACjFD;AACA;AACA;EACC;EACA,YRcY;EQbZ,OREiB;EQDjB;;;AAGD;EACC;EACA,ORIkB;EQHlB;;;ACZD;AACA;EACC;EACA;;AAEA;EACC;;AAGA;EACC;;AAmBF;EACC;;AAGD;EAEC,OT5BgB;ES6BhB;EACA;EACA;EACA;;AAGD;EACC;EACA;EACA,YT1Ba;ES2Bb;EAEA,OTlCU;ESmCV;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;;AAEA;EACC,YT7DU;ES8DV;EACA;EACA;;;AAQH;EACC;EACA;;;AAIA;EACC;EACA;EACA;EACA;;AAEA;EACC;EACA;;;ACrFH;AACA;AACA;EACC;EACA;;;AAGD;EACC;EACA;EACA,YVSc;EURd,OVGW;EUFX;EACA;;;AAGD;EACC;EACA;EACA;;;AAGD;EACC,YVGU;EUFV;;;AAGD;EACC,YVEY;;;AUCb;EACC,YVdY;;;AUiBb;EACC,YVhCmB;EUiCnB,OV5BO;;;AWTR;AACA;AACA;EACC;;;AAGD;AAAA;AAAA;EAGC;;;AAGD;AAAA;EAEC;;;AAGD;EACC;;;AAGD;EACC;EACA;EACA;;;AAGD;EACC;;;AC1BD;AACA;AAEA;EAME;IACC;;EAEA;IACC;;EAGD;IACC;IACA;IAEA;IACA;IACA;IACA,OZmBa;IFtChB;;EcuBG;IAEC;IACA;;;EAQJ;IACC;;;EAGD;IdtCA;;Ec0CC;IACC;;EAGD;IACC;;;EAIF;AAAA;AAAA;AAAA;IAIC,YZ7De;IY8Df;IACA;IACA;IACA;IACA;;;EAGD;IACC;;EAGC;IACC;;EAEA;IACC;;EAGD;IACC;;EAGD;IACC;IACA;;EAEA;IACC;;EAKF;IACC;IACA;;;EAOJ;IACC;IACA;;;EAIA;IACC;IACA;;EAGD;IACC;;EAEA;IACC;IACA;;EAEA;IACC;;EAKH;IACC;IACA;;EAEA;IAEC;IACA;;EAEA;IACC;;;EAQF;IACC;;;EAMF;IACC,kBZtIY;IYuIZ;IACA;IACA;IACA;;EAKC;IACC;;EAGD;IACC;;;EAMJ;IACC;IACA;;EAEA;IACC;IAEA;IACA;IACA;IACA;;;EAKF;IACC;;;EAGD;IACC;;;EAGD;IACC;;EAEA;IACC;IACA;IACA;;EAGD;IACC;;EAGD;IACC;;;AClLH;AACA;AACA;EACC,YbjBY;EakBZ;EACA;EACA;;;AAGD;AACA;EACC;EACA,Ob7CY","file":"mapco.css"} \ No newline at end of file diff --git a/p/themes/Mapco/mapco.rtl.css b/p/themes/Mapco/mapco.rtl.css index bf31d038101..81981d2f1a9 100644 --- a/p/themes/Mapco/mapco.rtl.css +++ b/p/themes/Mapco/mapco.rtl.css @@ -579,18 +579,6 @@ form th { text-decoration: none; color: #ffffff; } -.tree .tree-folder .tree-folder-items .feed .item-title:not([data-unread="0"])::before { - margin: 11px 4px 0 6px; - padding: 3px 4px; - background: rgba(0, 0, 0, 0.25); - display: block; - float: right; - font-size: 0.75rem; - border-radius: 12px; - content: attr(data-unread); - text-align: center; - line-height: 0.75rem; -} /*=== Buttons */ .stick { @@ -721,15 +709,14 @@ form th { width: calc(100% - 35px - 35px); } -.aside_feed .tree-folder-title > .title:not([data-unread="0"])::after { - margin: -0.25rem 0 0 1rem; - padding: 0 0.75rem; - background: rgba(0, 0, 0, 0.25); - border-radius: 12px; - position: absolute; - left: 0; - line-height: 1.5rem; - text-align: center; +.aside.aside_feed .category .title:not([data-unread="0"])::after { + margin: 1.5em 0 0 0; + background-color: rgba(0, 0, 0, 0.25); +} + +.aside.aside_feed .feed .item-title:not([data-unread="0"])::after { + margin: 0.5em 0 0 0; + background-color: rgba(0, 0, 0, 0.25); } .feed.item.empty.active { diff --git a/p/themes/Origine-compact/origine-compact.css b/p/themes/Origine-compact/origine-compact.css index 843d981771b..3f78c5f07a2 100644 --- a/p/themes/Origine-compact/origine-compact.css +++ b/p/themes/Origine-compact/origine-compact.css @@ -657,14 +657,16 @@ a.btn, } /*=== Aside main page (categories) */ -.aside_feed .category .title:not([data-unread="0"])::after { - margin: 10px 0; - padding: 0 10px; - background: inherit; - font-size: 0.8rem; - position: absolute; - right: 0; - line-height: 0.9rem; +.aside.aside_feed .category .title:not([data-unread="0"])::after { + margin: 0.5em 0 0 0; + background-color: #f6f6f6; + color: #444; +} + +.aside.aside_feed .feed .item-title:not([data-unread="0"])::after { + margin: 0.75em 0 0 0; + background-color: white; + color: #444; } /*=== Aside main page (feeds) */ diff --git a/p/themes/Origine-compact/origine-compact.rtl.css b/p/themes/Origine-compact/origine-compact.rtl.css index d74434d8d56..9d74d309be7 100644 --- a/p/themes/Origine-compact/origine-compact.rtl.css +++ b/p/themes/Origine-compact/origine-compact.rtl.css @@ -657,14 +657,16 @@ a.btn, } /*=== Aside main page (categories) */ -.aside_feed .category .title:not([data-unread="0"])::after { - margin: 10px 0; - padding: 0 10px; - background: inherit; - font-size: 0.8rem; - position: absolute; - left: 0; - line-height: 0.9rem; +.aside.aside_feed .category .title:not([data-unread="0"])::after { + margin: 0.5em 0 0 0; + background-color: #f6f6f6; + color: #444; +} + +.aside.aside_feed .feed .item-title:not([data-unread="0"])::after { + margin: 0.75em 0 0 0; + background-color: white; + color: #444; } /*=== Aside main page (feeds) */ diff --git a/p/themes/Origine/origine.css b/p/themes/Origine/origine.css index f651c52c202..fa907678544 100644 --- a/p/themes/Origine/origine.css +++ b/p/themes/Origine/origine.css @@ -626,14 +626,14 @@ a.btn { } /*=== Aside main page (categories) */ -.aside_feed .category .title:not([data-unread="0"])::after { - margin: 10px 0; - padding: 0 10px; - background: inherit; - font-size: 0.9rem; - position: absolute; - right: 0; - line-height: 1.5rem; +.aside.aside_feed .category .title:not([data-unread="0"])::after { + background-color: #f6f6f6; + color: #444; +} + +.aside.aside_feed .feed .item-title:not([data-unread="0"])::after { + background-color: white; + color: #444; } /*=== Aside main page (feeds) */ diff --git a/p/themes/Origine/origine.rtl.css b/p/themes/Origine/origine.rtl.css index 0ee8f79d4c4..c5c3f99109c 100644 --- a/p/themes/Origine/origine.rtl.css +++ b/p/themes/Origine/origine.rtl.css @@ -626,14 +626,14 @@ a.btn { } /*=== Aside main page (categories) */ -.aside_feed .category .title:not([data-unread="0"])::after { - margin: 10px 0; - padding: 0 10px; - background: inherit; - font-size: 0.9rem; - position: absolute; - left: 0; - line-height: 1.5rem; +.aside.aside_feed .category .title:not([data-unread="0"])::after { + background-color: #f6f6f6; + color: #444; +} + +.aside.aside_feed .feed .item-title:not([data-unread="0"])::after { + background-color: white; + color: #444; } /*=== Aside main page (feeds) */ diff --git a/p/themes/Pafat/pafat.css b/p/themes/Pafat/pafat.css index 01f9459904b..10a0838e088 100644 --- a/p/themes/Pafat/pafat.css +++ b/p/themes/Pafat/pafat.css @@ -603,13 +603,25 @@ a.signin { /*=== Aside main page (categories) */ .aside_feed .tree-folder-title > .title:not([data-unread="0"])::after { - padding: 0px 5px; - font-size: 0.8rem; + margin: 0.5em 0 0 0; + background-color: white; + color: #428bca; +} + +.aside.aside_feed .feed .item-title:not([data-unread="0"])::after { + background-color: #5bc0de; + color: white; +} + +.aside.aside_feed .category .title:not([data-unread="0"])::after { + right: 5px; +} + +.aside.aside_feed .feed.active .item-title:not([data-unread="0"])::after { + background-color: transparent; + color: white; border: 1px solid #fff; - border-radius: 3px; - position: absolute; - top: 0.25rem; right: 3px; - line-height: 1.5rem; + font-weight: bold; } .aside_feed .tree-folder.all .tree-folder-title { diff --git a/p/themes/Pafat/pafat.rtl.css b/p/themes/Pafat/pafat.rtl.css index 552dfc452c3..7f20c42653a 100644 --- a/p/themes/Pafat/pafat.rtl.css +++ b/p/themes/Pafat/pafat.rtl.css @@ -603,13 +603,25 @@ a.signin { /*=== Aside main page (categories) */ .aside_feed .tree-folder-title > .title:not([data-unread="0"])::after { - padding: 0px 5px; - font-size: 0.8rem; + margin: 0.5em 0 0 0; + background-color: white; + color: #428bca; +} + +.aside.aside_feed .feed .item-title:not([data-unread="0"])::after { + background-color: #5bc0de; + color: white; +} + +.aside.aside_feed .category .title:not([data-unread="0"])::after { + left: 5px; +} + +.aside.aside_feed .feed.active .item-title:not([data-unread="0"])::after { + background-color: transparent; + color: white; border: 1px solid #fff; - border-radius: 3px; - position: absolute; - top: 0.25rem; left: 3px; - line-height: 1.5rem; + font-weight: bold; } .aside_feed .tree-folder.all .tree-folder-title { diff --git a/p/themes/Screwdriver/screwdriver.css b/p/themes/Screwdriver/screwdriver.css index a943642c8b0..17a3535d1eb 100644 --- a/p/themes/Screwdriver/screwdriver.css +++ b/p/themes/Screwdriver/screwdriver.css @@ -673,12 +673,14 @@ a.btn { } /*=== Aside main page (categories) */ -.aside_feed .tree-folder-title > .title:not([data-unread="0"])::after { - position: absolute; - right: 3px; - padding: 1px 5px; - color: #fff; - text-shadow: 0 1px rgba(255,255,255,0.08); +.aside.aside_feed .category .title:not([data-unread="0"])::after { + background-color: #d18114; +} + +.aside.aside_feed .feed .item-title:not([data-unread="0"])::after { + background-color: #222; + color: #ccc; + border: 1px solid #333; } .aside_feed .btn-important { diff --git a/p/themes/Screwdriver/screwdriver.rtl.css b/p/themes/Screwdriver/screwdriver.rtl.css index 51be738dedd..4e9e20d7f55 100644 --- a/p/themes/Screwdriver/screwdriver.rtl.css +++ b/p/themes/Screwdriver/screwdriver.rtl.css @@ -673,12 +673,14 @@ a.btn { } /*=== Aside main page (categories) */ -.aside_feed .tree-folder-title > .title:not([data-unread="0"])::after { - position: absolute; - left: 3px; - padding: 1px 5px; - color: #fff; - text-shadow: 0 1px rgba(255,255,255,0.08); +.aside.aside_feed .category .title:not([data-unread="0"])::after { + background-color: #d18114; +} + +.aside.aside_feed .feed .item-title:not([data-unread="0"])::after { + background-color: #222; + color: #ccc; + border: 1px solid #333; } .aside_feed .btn-important { diff --git a/p/themes/Swage/swage.css b/p/themes/Swage/swage.css index 14d2eccff78..503e886e32c 100644 --- a/p/themes/Swage/swage.css +++ b/p/themes/Swage/swage.css @@ -614,14 +614,13 @@ form th { right: 33px; } -.aside_feed .tree-folder-title > .title:not([data-unread="0"])::after { - margin: 6px 0; - padding: 0 10px; - background: inherit; - font-size: 0.9rem; - position: absolute; - right: 0; - line-height: 1.5rem; +.aside_feed .category .title:not([data-unread="0"])::after { + background-color: #00488b; + color: #fcfcfc; +} +.aside_feed .feed .item-title:not([data-unread="0"])::after { + background-color: #0062be; + color: #fcfcfc; } .aside_feed .tree-folder-items .dropdown-menu::after { left: 2px; diff --git a/p/themes/Swage/swage.css.map b/p/themes/Swage/swage.css.map index 8ca4002b4ed..13bcdce701b 100644 --- a/p/themes/Swage/swage.css.map +++ b/p/themes/Swage/swage.css.map @@ -1 +1 @@ -{"version":3,"sourceRoot":"","sources":["swage.scss"],"names":[],"mappings":"AAkBA;AAAA;EACC;EACA;EACA;EACA;EACA,YAjBa;EAkBb;EACA;;;AAGD;AAAA;EACC,OAlBY;EAmBZ,cAnBY;EAoBZ;;;AAGD;EACC;EACA;EACA;;;AAGD;AAAA;AAAA;AAAA;EACC;EACA,OApCa;EAqCb;EACA;;;AAGD;EACC;EACA;EACA;;;AAGD;EACC;;;AAID;AAAA;EAEC;EACA;;;AAGD;EACC;EACA;;AAEA;EACC;EACA;EACA;;AAEA;EACC;;AAIF;EACC;;AAGD;EACC;;;AAKD;EACC;;;AAIF;EACC;;;AAGD;EACC;;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGD;EACC;;;AAGD;EACC;EACA;EACA;;AAIA;EACC;;;AASD;AAAA;EACC;;AAQD;AAAA;EACC,YAxIY;;;AA4Id;EACC;;;AAIA;EACC;;;AAIF;EACC;;;AAGD;EACC;;;AAGD;AAAA;AAAA;EAGC;EACA;;;AAGD;EACC,YAtKa;;;AA0Kb;AAAA;EAEC;EACA;;;AAKD;EACC;EACA;EACA;EACA;;;AAKF;EACC;EACA;;AAEA;EACC,YAhMY;EAiMZ;;AAGD;EACC;EACA;EACA;EACA;;AAEA;EACC;;AAIF;EACC;EACA;;AAGD;EACC;EACA;;AAEA;EACC;;;AAUH;EACC;EACA;;AAQD;EACC;EACA;EACA,YA/OY;EAgPZ;EACA,OAlPa;EAmPb;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;AAAA;AAAA;EAGC;EACA;;;AAIF;EACC;EACA,YAlQa;EAmQb,OAtQa;;AAwQb;AAAA;AAAA;EAEC;;;AAKD;EAGC;EACA;EACA,YAlRY;EAmRZ,OArRY;EAsRZ;;AAOA;EAEC;EACA,OAhSW;;AAkSX;EACC,OAnSU;;AAsSX;AAAA;AAAA;EAEC,OAxSU;;AA2SX;EACC,YAzSU;;AA4SX;EACC;;AAIF;EACC;;AAGD;EACC,OAtTW;;AAyTZ;EACC;;AAIF;EACC;EACA,YAnUY;EAoUZ;;AAGD;EACC;EACA;;AAGD;EACC;;;AAIF;EACC;EACA;EACA,YAlVa;EAmVb,OArVa;;AAuVb;EACC,OAxVY;;AA2Vb;EACC;EACA;EACA;;;AAIF;EACC;EACA;;AAEA;EACC;;;AAIF;EACC;EACA;EACA;EACA;EACA;;AAEA;EACC;;AAGD;EACC;;AAIA;EAGC;EACA;;AAUA;EACC;EACA;;AAGD;EACC,YA9YS;EA+YT,OAhZU;;AAkZV;EACC;EACA,OApZS;;AAyZZ;EACC;EACA;;AAKD;AAAA;EAEC;EACA;;;AAKH;EACC;EACA;EACA;EACA,OA5aa;;;AA+ad;EACC;EACA;EACA;;;AAGD;EACC;EACA;EACA,YAxba;EAybb;EACA;EACA;EACA;;AAEA;EACC;EACA;;;AAIF;EACC;;;AAGD;AAAA;AAAA;EAGC;;;AAGD;EACC,YA/ca;EAgdb,OA7ca;;;AAgdd;EACC,YApda;EAqdb,OAjdY;;;AAodb;EACC,YAzda;EA0db,OArdY;;;AAwdb;EACC;EACA,OAheY;EAieZ;EACA;;AAGC;EACC,YAneW;EAoeX;EACA;EACA;;AAGD;EACC;EACA,OA9eU;EA+eV;EACA;EACA;;AAEA;EACC,YAjfU;EAkfV;;AAKH;AAAA;EAEC;EACA;;;AAIF;EACC;;AAEA;EACC;EACA;;AAGD;EACC;EACA;EACA;EACA;EACA;;AAGD;EACC;EACA;EACA;EACA,YArhBW;EAshBX,OArhBY;EAshBZ;;AAEA;EACC;EACA,OA1hBW;EA2hBX;;AAIF;EACC;EACA,YAjiBY;EAkiBZ,OA7hBW;EA8hBX;;AAGD;EACC;EACA;EACA,YAziBY;EA0iBZ;EACA;EACA;EACA;;AAEA;EACC;;AAIF;EACC,OAtjBW;;;AA0jBb;EACC;;AAEA;EACC;EACA;EACA;EACA;EACA;;AAEA;EACC;;AAOF;EACC;EACA;;AAEA;EACC;EACA;EACA;;AAGC;EACC;EACA;;AAOH;EACC;EACA;EACA;;AAGD;EACC,YApmBU;;AAsmBV;EACC;;AAGD;EACC;EACA,OA7mBU;;AAinBZ;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGD;EACC;EACA;;;AAKH;EACC;;;AAGD;EACC;EACA,YAvoBa;EAwoBb;EACA;EACA;EACA;;AAEA;EACC;EACA,OAjpBY;;AAmpBZ;EACC;;;AAKH;EACC,YAxpBa;;AA0pBb;EACC;EACA;EACA;;AAEA;EACC;;AAGD;EACC;EACA,OAvqBW;;;AA4qBd;EACC;IACC;;;EAGD;IACC;;;AAIF;EACC;IACC;;;EAGD;IACC;;;AAKD;EACC;;AAEA;EAGC;EACA;;AAEA;EACC;EACA;EACA;EACA;EACA;EACA;;AAIF;EACC;;AAIF;EACC;;AAGD;EACC;;AAGD;EACC;EACA;EACA;EACA;;;AAIF;EACC;EACA,YAzuBa;;AA8uBZ;EACC;;AAIA;AAAA;EAEC;;AAIA;EACC;;AAGD;EACC;;;AAQJ;EACC;EACA;EACA;EACA;EACA;EACA;EACA;;AAGD;EACC;;;AAIF;EACC;EACA;;AAEA;EACC;;AAEA;EACC;EACA;;AAIF;EACC;;AAGD;EACC;;;AAIF;EACC;;AAEA;EACC;;AAGD;EACC;EACA;;AAGD;EACC;EACA;;AAGD;EACC;;;AAIF;EACC,YAn0BY;EAo0BZ;EACA;EACA;EACA;EACA;EACA;EACA;;AAIA;EACC;;AAGD;EACC;EACA;EACA,OAt1BY;;AAw1BZ;EACC;;;AAKH;EACC;EACA;EACA;EACA;;AAEA;EACC;;;AAKD;EACC,OA32BY;;;AAg3Bd;EACC;EACA;EACA,kBAl3BY;EAm3BZ;EACA;;AAEA;EACC;EACA;EACA;;;AAIF;EACC;EACA,YAh4Ba;;AAk4Bb;EAGC;EACA;EACA;;AAGD;AAAA;EAEC,YAp4BY;;AAs4BZ;AAAA;EACC,YAv4BW;;AA24Bb;EACC,YA94Ba;;AAg5Bb;EACC,YAj5BY;;AAq5Bd;EACC,YAr5Ba;;AAu5Bb;EACC,YAx5BY;;AA65Bb;EACC;EACA;;AAIF;EACC;EACA;;AAGD;EACC;;AAGD;EACC,OAp7BY;EAq7BZ;;;AAIF;EACC;EACA;;AAEA;EACC;;;AAIF;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAIA;AAAA;EAEC,OAt9BY;;AAy9Bb;EACC,YAt9BW;;AAw9BX;EACC,YAz9BU;;AA69BZ;EACC;;AAEA;EACC;;AAIF;EACC;;AAGD;EACC;;;AAIF;EACC;EACA;EACA;;AAEA;EACC,YAt/BY;EAu/BZ,OAz/BY;;;AA6/Bd;EACC;EACA;EACA;EACA;EAGA,YAlgCa;;;AAqgCd;EACC;;AAEA;AAAA;AAAA;EAGC;;AAIA;AAAA;EAEC;;AAIF;EACC;;AAEA;EACC;EACA;EACA;;AAEA;EACC;;;AAOH;EACC;;AAGD;EACC,YA1iCY;EA2iCZ;;AAGC;EACC;EACA;;AAKH;EACC,OAxjCY;EAyjCZ;;AAGD;EACC;EACA;EACA;EACA;;;AAIF;EACC;EACA;;;AAGD;EACC;EACA,YA3kCa;EA4kCb;EACA;;AAEA;EACC;EACA;;AAGD;EACC;EACA,OAtlCY;;AAylCb;EACC,YAvlCY;EAwlCZ,OA3lCY;;AA8lCb;EACC;EACA,OAhmCY;;AAmmCb;EACC,YArmCW;EAsmCX,OArmCY;;;AAymCd;EACC;IACC;;;EAGD;IACC;IACA;;;EAGD;IACC;;;EAGD;IACC;IACA;IACA;;;EAGD;IACC;;EAEA;IACC;;EAGD;IACC;IACA;IACA;;;EAIF;IACC;IACA;IACA;IACA;;;EAGD;IACC;;;EAGD;AAAA;IAEC;IACA;;;EAGD;IACC;IACA;;EAEA;IACC,YA/pCW;IAgqCX;IACA;IACA;IACA;IACA;;EAGD;IACC;;EAGD;IACC;IACA;IACA;IACA;;EAGD;IACC;IACA;;;EAIF;IACC;IACA;;EAEA;IACC;;EAGD;IACC;;EAEA;IACC;;EAIF;IACC;IACA;IACA;;EAEA;IACC;;EAGD;IACC;;;EAKH;IACC;;;EAGD;AAAA;IAEC,YA7tCY;IA8tCZ;IACA;IACA;IACA;IACA;;;EAGD;IACC;;;EAGD;IACC;;;EAGD;IACC;;EAEA;IACC;IACA;IACA;;EAEA;IACC;;EAGD;IACC;;;EAKH;IACC;;;EAGD;IACC;IACA;;;EAGD;IACC;;;EAGD;IACC;IACA;;;EAGD;AAAA;AAAA;AAAA;AAAA;IAKC;;;EAGD;IACC;IACA;;;EAGD;AAAA;IAEC;;;EAGD;IACC;;;EAGD;AAAA;AAAA;IAGC;;;EAGD;IACC;;;EAGD;IACC;;;AAIF;EACC;IACC;;;AAIF;EACC;IACC;;;AAIF;EACC,OAr0Ca;EAs0Cb;;;AAGD;EACC;;;AAGD;EACC;EACA;;;AAIA;EACC,OAj1CY;;AAm1CZ;EACC,YAp1CW;EAq1CX,OAx1CW;;AA01CX;EACC,OA31CU;;AA+1CZ;EACC,OA71CW;;AAi2Cb;EACC;;AAEA;EACC;EACA,OAz2CW;;AA22CX;EACC,OA52CU;;AAg3CZ;EACC;;;AAKH;EACC;EACA;;;AAGD;EACC;EACA,YA73Ca;EA83Cb,OA53Ca;EA63Cb;;AAEA;EACC;EACA;EACA;;;AAKD;EACC;;;AAKD;EACC;;AAIA;EACC","file":"swage.css"} \ No newline at end of file +{"version":3,"sourceRoot":"","sources":["swage.scss"],"names":[],"mappings":"AAkBA;AAAA;EACC;EACA;EACA;EACA;EACA,YAjBa;EAkBb;EACA;;;AAGD;AAAA;EACC,OAlBY;EAmBZ,cAnBY;EAoBZ;;;AAGD;EACC;EACA;EACA;;;AAGD;AAAA;AAAA;AAAA;EACC;EACA,OApCa;EAqCb;EACA;;;AAGD;EACC;EACA;EACA;;;AAGD;EACC;;;AAID;AAAA;EAEC;EACA;;;AAGD;EACC;EACA;;AAEA;EACC;EACA;EACA;;AAEA;EACC;;AAIF;EACC;;AAGD;EACC;;;AAKD;EACC;;;AAIF;EACC;;;AAGD;EACC;;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGD;EACC;;;AAGD;EACC;EACA;EACA;;AAIA;EACC;;;AASD;AAAA;EACC;;AAQD;AAAA;EACC,YAxIY;;;AA4Id;EACC;;;AAIA;EACC;;;AAIF;EACC;;;AAGD;EACC;;;AAGD;AAAA;AAAA;EAGC;EACA;;;AAGD;EACC,YAtKa;;;AA0Kb;AAAA;EAEC;EACA;;;AAKD;EACC;EACA;EACA;EACA;;;AAKF;EACC;EACA;;AAEA;EACC,YAhMY;EAiMZ;;AAGD;EACC;EACA;EACA;EACA;;AAEA;EACC;;AAIF;EACC;EACA;;AAGD;EACC;EACA;;AAEA;EACC;;;AAUH;EACC;EACA;;AAQD;EACC;EACA;EACA,YA/OY;EAgPZ;EACA,OAlPa;EAmPb;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;AAAA;AAAA;EAGC;EACA;;;AAIF;EACC;EACA,YAlQa;EAmQb,OAtQa;;AAwQb;AAAA;AAAA;EAEC;;;AAKD;EAGC;EACA;EACA,YAlRY;EAmRZ,OArRY;EAsRZ;;AAOA;EAEC;EACA,OAhSW;;AAkSX;EACC,OAnSU;;AAsSX;AAAA;AAAA;EAEC,OAxSU;;AA2SX;EACC,YAzSU;;AA4SX;EACC;;AAIF;EACC;;AAGD;EACC,OAtTW;;AAyTZ;EACC;;AAIF;EACC;EACA,YAnUY;EAoUZ;;AAGD;EACC;EACA;;AAGD;EACC;;;AAIF;EACC;EACA;EACA,YAlVa;EAmVb,OArVa;;AAuVb;EACC,OAxVY;;AA2Vb;EACC;EACA;EACA;;;AAIF;EACC;EACA;;AAEA;EACC;;;AAIF;EACC;EACA;EACA;EACA;EACA;;AAEA;EACC;;AAGD;EACC;;AAIA;EAGC;EACA;;AAUA;EACC;EACA;;AAGD;EACC,YA9YS;EA+YT,OAhZU;;AAkZV;EACC;EACA,OApZS;;AAyZZ;EACC;EACA;;AAKD;AAAA;EAEC;EACA;;;AAKH;EACC;EACA;EACA;EACA,OA5aa;;;AA+ad;EACC;EACA;EACA;;;AAGD;EACC;EACA;EACA,YAxba;EAybb;EACA;EACA;EACA;;AAEA;EACC;EACA;;;AAIF;EACC;;;AAGD;AAAA;AAAA;EAGC;;;AAGD;EACC,YA/ca;EAgdb,OA7ca;;;AAgdd;EACC,YApda;EAqdb,OAjdY;;;AAodb;EACC,YAzda;EA0db,OArdY;;;AAwdb;EACC;EACA,OAheY;EAieZ;EACA;;AAGC;EACC,YAneW;EAoeX;EACA;EACA;;AAGD;EACC;EACA,OA9eU;EA+eV;EACA;EACA;;AAEA;EACC,YAjfU;EAkfV;;AAKH;AAAA;EAEC;EACA;;;AAIF;EACC;;AAEA;EACC;EACA;;AAGD;EACC;EACA;EACA;EACA;EACA;;AAGD;EACC;EACA;EACA;EACA,YArhBW;EAshBX,OArhBY;EAshBZ;;AAEA;EACC;EACA,OA1hBW;EA2hBX;;AAIF;EACC;EACA,YAjiBY;EAkiBZ,OA7hBW;EA8hBX;;AAGD;EACC;EACA;EACA,YAziBY;EA0iBZ;EACA;EACA;EACA;;AAEA;EACC;;AAIF;EACC,OAtjBW;;;AA0jBb;EACC;;AAEA;EACC;EACA;EACA;EACA;EACA;;AAEA;EACC;;AAOF;EACC;EACA;;AAEA;EACC;EACA;EACA;;AAGC;EACC;EACA;;AAOH;EACC;EACA;EACA;;AAGD;EACC,YApmBU;;AAsmBV;EACC;;AAGD;EACC;EACA,OA7mBU;;AAinBZ;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGD;EACC;EACA;;;AAKH;EACC;;;AAGD;EACC;EACA,YAvoBa;EAwoBb;EACA;EACA;EACA;;AAEA;EACC;EACA,OAjpBY;;AAmpBZ;EACC;;;AAKH;EACC,YAxpBa;;AA0pBb;EACC;EACA;EACA;;AAEA;EACC;;AAGD;EACC;EACA,OAvqBW;;;AA4qBd;EACC;IACC;;;EAGD;IACC;;;AAIF;EACC;IACC;;;EAGD;IACC;;;AAKD;EACC;;AAEA;EAGC;EACA;;AAEA;EACC;EACA;EACA;EACA;EACA;EACA;;AAIF;EACC;;AAIF;EACC;;AAGD;EACC;;AAGD;EACC;EACA;EACA;EACA;;;AAIF;EACC;EACA,YAzuBa;;AA8uBZ;EACC;;AAIA;AAAA;EAEC;;AAIA;EACC;;AAGD;EACC;;;AAQJ;EACC;EACA;;AAGD;EACC;EACA;;AAGD;EACC;;;AAIF;EACC;EACA;;AAEA;EACC;;AAEA;EACC;EACA;;AAIF;EACC;;AAGD;EACC;;;AAIF;EACC;;AAEA;EACC;;AAGD;EACC;EACA;;AAGD;EACC;EACA;;AAGD;EACC;;;AAIF;EACC,YAn0BY;EAo0BZ;EACA;EACA;EACA;EACA;EACA;EACA;;AAIA;EACC;;AAGD;EACC;EACA;EACA,OAt1BY;;AAw1BZ;EACC;;;AAKH;EACC;EACA;EACA;EACA;;AAEA;EACC;;;AAKD;EACC,OA32BY;;;AAg3Bd;EACC;EACA;EACA,kBAl3BY;EAm3BZ;EACA;;AAEA;EACC;EACA;EACA;;;AAIF;EACC;EACA,YAh4Ba;;AAk4Bb;EAGC;EACA;EACA;;AAGD;AAAA;EAEC,YAp4BY;;AAs4BZ;AAAA;EACC,YAv4BW;;AA24Bb;EACC,YA94Ba;;AAg5Bb;EACC,YAj5BY;;AAq5Bd;EACC,YAr5Ba;;AAu5Bb;EACC,YAx5BY;;AA65Bb;EACC;EACA;;AAIF;EACC;EACA;;AAGD;EACC;;AAGD;EACC,OAp7BY;EAq7BZ;;;AAIF;EACC;EACA;;AAEA;EACC;;;AAIF;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAIA;EAEC,OAt9BY;;AAy9Bb;EACC,YAt9BW;;AAw9BX;EACC,YAz9BU;;AA69BZ;EACC;;AAEA;EACC;;AAIF;EACC;;AAGD;EACC;;;AAIF;EACC;EACA;EACA;;AAEA;EACC,YAt/BY;EAu/BZ,OAz/BY;;;AA6/Bd;EACC;EACA;EACA;EACA;EAGA,YAlgCa;;;AAqgCd;EACC;;AAEA;AAAA;AAAA;EAGC;;AAIA;AAAA;EAEC;;AAIF;EACC;;AAEA;EACC;EACA;EACA;;AAEA;EACC;;;AAOH;EACC;;AAGD;EACC,YA1iCY;EA2iCZ;;AAGC;EACC;EACA;;AAKH;EACC,OAxjCY;EAyjCZ;;AAGD;EACC;EACA;EACA;EACA;;;AAIF;EACC;EACA;;;AAGD;EACC;EACA,YA3kCa;EA4kCb;EACA;;AAEA;EACC;EACA;;AAGD;EACC;EACA,OAtlCY;;AAylCb;EACC,YAvlCY;EAwlCZ,OA3lCY;;AA8lCb;EACC;EACA,OAhmCY;;AAmmCb;EACC,YArmCW;EAsmCX,OArmCY;;;AAymCd;EACC;IACC;;;EAGD;IACC;IACA;;;EAGD;IACC;;;EAGD;IACC;IACA;IACA;;;EAGD;IACC;;EAEA;IACC;;EAGD;IACC;IACA;IACA;;;EAIF;IACC;IACA;IACA;IACA;;;EAGD;IACC;;;EAGD;AAAA;IAEC;IACA;;;EAGD;IACC;IACA;;EAEA;IACC,YA/pCW;IAgqCX;IACA;IACA;IACA;IACA;;EAGD;IACC;;EAGD;IACC;IACA;IACA;IACA;;EAGD;IACC;IACA;;;EAIF;IACC;IACA;;EAEA;IACC;;EAGD;IACC;;EAEA;IACC;;EAIF;IACC;IACA;IACA;;EAEA;IACC;;EAGD;IACC;;;EAKH;IACC;;;EAGD;AAAA;IAEC,YA7tCY;IA8tCZ;IACA;IACA;IACA;IACA;;;EAGD;IACC;;;EAGD;IACC;;;EAGD;IACC;;EAEA;IACC;IACA;IACA;;EAEA;IACC;;EAGD;IACC;;;EAKH;IACC;;;EAGD;IACC;IACA;;;EAGD;IACC;;;EAGD;IACC;IACA;;;EAGD;AAAA;AAAA;AAAA;AAAA;IAKC;;;EAGD;IACC;IACA;;;EAGD;AAAA;IAEC;;;EAGD;IACC;;;EAGD;AAAA;AAAA;IAGC;;;EAGD;IACC;;;EAGD;IACC;;;AAIF;EACC;IACC;;;AAIF;EACC;IACC;;;AAIF;EACC,OAr0Ca;EAs0Cb;;;AAGD;EACC;;;AAGD;EACC;EACA;;;AAIA;EACC,OAj1CY;;AAm1CZ;EACC,YAp1CW;EAq1CX,OAx1CW;;AA01CX;EACC,OA31CU;;AA+1CZ;EACC,OA71CW;;AAi2Cb;EACC;;AAEA;EACC;EACA,OAz2CW;;AA22CX;EACC,OA52CU;;AAg3CZ;EACC;;;AAKH;EACC;EACA;;;AAGD;EACC;EACA,YA73Ca;EA83Cb,OA53Ca;EA63Cb;;AAEA;EACC;EACA;EACA;;;AAKD;EACC;;;AAKD;EACC;;AAIA;EACC","file":"swage.css"} \ No newline at end of file diff --git a/p/themes/Swage/swage.rtl.css b/p/themes/Swage/swage.rtl.css index 9c8b01840ba..60a6826c897 100644 --- a/p/themes/Swage/swage.rtl.css +++ b/p/themes/Swage/swage.rtl.css @@ -614,14 +614,13 @@ form th { left: 33px; } -.aside_feed .tree-folder-title > .title:not([data-unread="0"])::after { - margin: 6px 0; - padding: 0 10px; - background: inherit; - font-size: 0.9rem; - position: absolute; - left: 0; - line-height: 1.5rem; +.aside_feed .category .title:not([data-unread="0"])::after { + background-color: #00488b; + color: #fcfcfc; +} +.aside_feed .feed .item-title:not([data-unread="0"])::after { + background-color: #0062be; + color: #fcfcfc; } .aside_feed .tree-folder-items .dropdown-menu::after { right: 2px; diff --git a/p/themes/Swage/swage.scss b/p/themes/Swage/swage.scss index 9932f94d0a9..9c9798cdc02 100644 --- a/p/themes/Swage/swage.scss +++ b/p/themes/Swage/swage.scss @@ -780,14 +780,14 @@ form { } .aside_feed { - .tree-folder-title > .title:not([data-unread="0"])::after { - margin: 6px 0; - padding: 0 10px; - background: inherit; - font-size: 0.9rem; - position: absolute; - right: 0; - line-height: 1.5rem; + .category .title:not([data-unread="0"])::after { + background-color: #00488b; + color: #fcfcfc; + } + + .feed .item-title:not([data-unread="0"])::after { + background-color: #0062be; + color: #fcfcfc; } .tree-folder-items .dropdown-menu::after { diff --git a/p/themes/base-theme/template.css b/p/themes/base-theme/template.css index c6008e1bcbd..64918843223 100644 --- a/p/themes/base-theme/template.css +++ b/p/themes/base-theme/template.css @@ -614,6 +614,10 @@ a.btn { text-overflow: ellipsis; } +.tree-folder-items .item.feed { + position: relative; +} + .tree-bottom { visibility: hidden; margin-bottom: 18em; @@ -684,7 +688,7 @@ input[type="search"] { } .aside_feed .category .title:not([data-unread="0"]) { - width: calc(100% - 35px - 20px); + width: calc(100% - 75px); } .aside_feed .tree-folder-title .icon { @@ -1310,21 +1314,42 @@ input:checked + .slide-container .properties { /*=== DIVERS */ /*===========*/ -.category .title:not([data-unread="0"])::after { - content: attr(data-unread); -} - .category .title.error::before { content: "⚠ "; color: #bd362f; } -.feed .item-title:not([data-unread="0"])::before { - content: "(" attr(data-unread) ") "; +.category .title:not([data-unread="0"])::after, +.feed .item-title:not([data-unread="0"])::after { + margin: 0.75em 0 0 0; + padding: 5px 10px; + min-width: 20px; + display: block; + content: attr(data-unread); + position: absolute; + top: 0; + right: 10px; + text-align: center; + font-size: 0.9em; + border-radius: 12px; + line-height: 1; + font-weight: initial; +} + +.feed .item-title:not([data-unread="0"])::after { + margin: 1em 0 0 0; +} + +.feed.active .item-title:not([data-unread="0"])::after { + background-color: transparent; + color: white; + border: 1px solid #fff; + font-weight: bold; } .feed .item-title:not([data-unread="0"]) { font-weight: bold; + width: calc(100% - 80px); } .state_unread .category:not(.active)[data-unread="0"], diff --git a/p/themes/base-theme/template.rtl.css b/p/themes/base-theme/template.rtl.css index a8a817a71ce..b92f14c0cf8 100644 --- a/p/themes/base-theme/template.rtl.css +++ b/p/themes/base-theme/template.rtl.css @@ -614,6 +614,10 @@ a.btn { text-overflow: ellipsis; } +.tree-folder-items .item.feed { + position: relative; +} + .tree-bottom { visibility: hidden; margin-bottom: 18em; @@ -684,7 +688,7 @@ input[type="search"] { } .aside_feed .category .title:not([data-unread="0"]) { - width: calc(100% - 35px - 20px); + width: calc(100% - 75px); } .aside_feed .tree-folder-title .icon { @@ -1310,21 +1314,42 @@ input:checked + .slide-container .properties { /*=== DIVERS */ /*===========*/ -.category .title:not([data-unread="0"])::after { - content: attr(data-unread); -} - .category .title.error::before { content: "⚠ "; color: #bd362f; } -.feed .item-title:not([data-unread="0"])::before { - content: "(" attr(data-unread) ") "; +.category .title:not([data-unread="0"])::after, +.feed .item-title:not([data-unread="0"])::after { + margin: 0.75em 0 0 0; + padding: 5px 10px; + min-width: 20px; + display: block; + content: attr(data-unread); + position: absolute; + top: 0; + left: 10px; + text-align: center; + font-size: 0.9em; + border-radius: 12px; + line-height: 1; + font-weight: initial; +} + +.feed .item-title:not([data-unread="0"])::after { + margin: 1em 0 0 0; +} + +.feed.active .item-title:not([data-unread="0"])::after { + background-color: transparent; + color: white; + border: 1px solid #fff; + font-weight: bold; } .feed .item-title:not([data-unread="0"]) { font-weight: bold; + width: calc(100% - 80px); } .state_unread .category:not(.active)[data-unread="0"], From be9c06fd5c1bfed8e0147c938b96e4876df98133 Mon Sep 17 00:00:00 2001 From: maTh Date: Sat, 5 Feb 2022 10:57:36 +0100 Subject: [PATCH 0156/2479] Improved: Idle feeds list in a new layout (#4192) * that should work fine * fixed phpcs * fixed phpcs --- app/Controllers/statsController.php | 36 +++++++++++++++++ app/Controllers/subscriptionController.php | 7 +++- app/views/helpers/feed/update.phtml | 10 ++++- app/views/stats/idle.phtml | 46 +++++++++++----------- 4 files changed, 75 insertions(+), 24 deletions(-) diff --git a/app/Controllers/statsController.php b/app/Controllers/statsController.php index d03c4fa3dc6..170d35d6f0a 100644 --- a/app/Controllers/statsController.php +++ b/app/Controllers/statsController.php @@ -20,6 +20,14 @@ public function firstAction() { 'style-src' => "'self' 'unsafe-inline'", ]); + $catDAO = FreshRSS_Factory::createCategoryDao(); + $feedDAO = FreshRSS_Factory::createFeedDao(); + + $catDAO->checkDefault(); + $feedDAO->updateTTL(); + $this->view->categories = $catDAO->listSortedCategories(false); + $this->view->default_category = $catDAO->getDefault(); + FreshRSS_View::prependTitle(_t('admin.stats.title') . ' · '); } @@ -91,6 +99,23 @@ public function indexAction() { $this->view->last30DaysLabels = $last30DaysLabels; } + /** + * This action handles the feed action on the idle statistic page. + * set the 'from' parameter to remember that it had a redirection coming from stats controller, + * to use the subscription controller to save it, + * but shows the stats idle page + */ + public function feedAction() { + $id = Minz_Request::param('id'); + $ajax = Minz_Request::param('ajax'); + if ($ajax) { + $url_redirect = array('c' => 'subscription', 'a' => 'feed', 'params' => array('id' => $id, 'from' => 'stats', 'ajax' => $ajax)); + } else { + $url_redirect = array('c' => 'subscription', 'a' => 'feed', 'params' => array('id' => $id, 'from' => 'stats')); + } + Minz_Request::forward($url_redirect, true); + } + /** * This action handles the idle feed statistic page. * @@ -138,6 +163,9 @@ public function idleAction() { $last5Year->modify('-5 year'); foreach ($feeds as $feed) { + $feedDAO = FreshRSS_Factory::createFeedDao(); + $feed['favicon'] = $feedDAO->searchById($feed['id'])->favicon(); + $feedDate->setTimestamp($feed['last_date']); if ($feedDate >= $lastWeek) { continue; @@ -162,6 +190,14 @@ public function idleAction() { } $this->view->idleFeeds = $idleFeeds; + + $id = Minz_Request::param('id'); + $this->view->displaySlider = false; + if (false !== $id) { + $this->view->displaySlider = true; + $feedDAO = FreshRSS_Factory::createFeedDao(); + $this->view->feed = $feedDAO->searchById($id); + } } /** diff --git a/app/Controllers/subscriptionController.php b/app/Controllers/subscriptionController.php index eb0d86c3b79..7d2c58714cf 100644 --- a/app/Controllers/subscriptionController.php +++ b/app/Controllers/subscriptionController.php @@ -207,7 +207,12 @@ public function feedAction() { invalidateHttpCache(); - $url_redirect = array('c' => 'subscription', 'params' => array('id' => $id)); + $from = Minz_Request::param('from'); + if ($from === false) { + $url_redirect = array('c' => 'subscription', 'params' => array('id' => $id)); + } else { + $url_redirect = array('c' => 'stats', 'a' => 'idle', 'params' => array('id' => $id, 'from' => 'stats')); + } if ($feedDAO->updateFeed($id, $values) !== false) { $feed->_category($cat); $feed->faviconPrepare(); diff --git a/app/views/helpers/feed/update.phtml b/app/views/helpers/feed/update.phtml index a1567afc0bb..ed6db9b1fcd 100644 --- a/app/views/helpers/feed/update.phtml +++ b/app/views/helpers/feed/update.phtml @@ -18,7 +18,15 @@

    - + feed->id()); + } else { + $url = _url('subscription', 'feed', 'id', $this->feed->id(), 'from', $from); + } + ?> +
    diff --git a/app/views/stats/idle.phtml b/app/views/stats/idle.phtml index 40feb4a0395..6b2141ba2e1 100644 --- a/app/views/stats/idle.phtml +++ b/app/views/stats/idle.phtml @@ -20,29 +20,19 @@ if (!empty($feeds)) { $nothing = false; ?> -
    -

    - - - - -
      -
    • -
      - - - -
      -
    • -
    • - - () -
    • +
      +
      +
        + +
      • + + show_favicons): ?>✇ + + () +
      • +
      - - -
      +

    + + displaySlider ? ' class="active"' : ''; ?> + > + + +
    > + feed)) { + $this->renderHelper('feed/update'); + } + ?> +
    From 4d5f3a20c0fee4f4fde160cc3a811289429795e1 Mon Sep 17 00:00:00 2001 From: maTh Date: Sat, 5 Feb 2022 10:58:57 +0100 Subject: [PATCH 0157/2479] Improve: new article banner (#4037) * fix Origine theme padding * Fix all themes * Update swage.scss --- p/themes/Alternative-Dark/adark.css | 5 +---- p/themes/Alternative-Dark/adark.rtl.css | 5 +---- p/themes/Ansum/ansum.css | 5 +---- p/themes/Ansum/ansum.rtl.css | 5 +---- p/themes/BlueLagoon/BlueLagoon.css | 5 +---- p/themes/BlueLagoon/BlueLagoon.rtl.css | 5 +---- p/themes/Dark/dark.css | 5 +---- p/themes/Dark/dark.rtl.css | 5 +---- p/themes/Flat/flat.css | 5 +---- p/themes/Flat/flat.rtl.css | 5 +---- p/themes/Mapco/mapco.css | 5 +---- p/themes/Mapco/mapco.rtl.css | 5 +---- p/themes/Origine-compact/origine-compact.css | 5 +---- p/themes/Origine-compact/origine-compact.rtl.css | 5 +---- p/themes/Origine/origine.css | 7 ++----- p/themes/Origine/origine.rtl.css | 7 ++----- p/themes/Pafat/pafat.css | 5 +---- p/themes/Pafat/pafat.rtl.css | 5 +---- p/themes/Screwdriver/screwdriver.css | 5 +---- p/themes/Screwdriver/screwdriver.rtl.css | 5 +---- p/themes/Swage/swage.css | 4 +--- p/themes/Swage/swage.rtl.css | 4 +--- p/themes/Swage/swage.scss | 5 +---- p/themes/base-theme/base.css | 3 --- p/themes/base-theme/base.rtl.css | 3 --- 25 files changed, 25 insertions(+), 98 deletions(-) diff --git a/p/themes/Alternative-Dark/adark.css b/p/themes/Alternative-Dark/adark.css index ad66acb3cc1..a45a8cdccc5 100644 --- a/p/themes/Alternative-Dark/adark.css +++ b/p/themes/Alternative-Dark/adark.css @@ -696,10 +696,6 @@ a.btn { font-size: 0.9em; } -#new-article:hover { - background: #06c; -} - #new-article > a { line-height: 3em; color: #fff; @@ -708,6 +704,7 @@ a.btn { #new-article > a:hover { text-decoration: none; + background: #06c; } /*=== Day indication */ diff --git a/p/themes/Alternative-Dark/adark.rtl.css b/p/themes/Alternative-Dark/adark.rtl.css index 8d8fa50fdcf..b6f6e94f92b 100644 --- a/p/themes/Alternative-Dark/adark.rtl.css +++ b/p/themes/Alternative-Dark/adark.rtl.css @@ -696,10 +696,6 @@ a.btn { font-size: 0.9em; } -#new-article:hover { - background: #06c; -} - #new-article > a { line-height: 3em; color: #fff; @@ -708,6 +704,7 @@ a.btn { #new-article > a:hover { text-decoration: none; + background: #06c; } /*=== Day indication */ diff --git a/p/themes/Ansum/ansum.css b/p/themes/Ansum/ansum.css index 72995548b30..8e74736b4a4 100644 --- a/p/themes/Ansum/ansum.css +++ b/p/themes/Ansum/ansum.css @@ -868,10 +868,6 @@ form th { text-align: center; } -#new-article:hover { - background: #b7641d; -} - #new-article > a { line-height: 3em; font-weight: bold; @@ -880,6 +876,7 @@ form th { #new-article > a:hover { text-decoration: none; + background: #b7641d; } /*=== Day indication */ diff --git a/p/themes/Ansum/ansum.rtl.css b/p/themes/Ansum/ansum.rtl.css index 405a37b9b13..34dcd75e616 100644 --- a/p/themes/Ansum/ansum.rtl.css +++ b/p/themes/Ansum/ansum.rtl.css @@ -868,10 +868,6 @@ form th { text-align: center; } -#new-article:hover { - background: #b7641d; -} - #new-article > a { line-height: 3em; font-weight: bold; @@ -880,6 +876,7 @@ form th { #new-article > a:hover { text-decoration: none; + background: #b7641d; } /*=== Day indication */ diff --git a/p/themes/BlueLagoon/BlueLagoon.css b/p/themes/BlueLagoon/BlueLagoon.css index 7f1841b145b..af47db81834 100644 --- a/p/themes/BlueLagoon/BlueLagoon.css +++ b/p/themes/BlueLagoon/BlueLagoon.css @@ -831,10 +831,6 @@ a.btn { font-size: 0.9em; } -#new-article:hover { - background: #06c; -} - #new-article > a { line-height: 3em; color: #fff; @@ -843,6 +839,7 @@ a.btn { #new-article > a:hover { text-decoration: none; + background: #06c; } /*=== Day indication */ diff --git a/p/themes/BlueLagoon/BlueLagoon.rtl.css b/p/themes/BlueLagoon/BlueLagoon.rtl.css index 6034cbf37cb..56cf33a5f41 100644 --- a/p/themes/BlueLagoon/BlueLagoon.rtl.css +++ b/p/themes/BlueLagoon/BlueLagoon.rtl.css @@ -831,10 +831,6 @@ a.btn { font-size: 0.9em; } -#new-article:hover { - background: #06c; -} - #new-article > a { line-height: 3em; color: #fff; @@ -843,6 +839,7 @@ a.btn { #new-article > a:hover { text-decoration: none; + background: #06c; } /*=== Day indication */ diff --git a/p/themes/Dark/dark.css b/p/themes/Dark/dark.css index 0025bd3e713..fa200c115ad 100644 --- a/p/themes/Dark/dark.css +++ b/p/themes/Dark/dark.css @@ -738,10 +738,6 @@ a.btn { text-align: center; } -#new-article:hover { - background: #4a5d7a; -} - #new-article > a { line-height: 3em; font-weight: bold; @@ -750,6 +746,7 @@ a.btn { #new-article > a:hover { text-decoration: none; + background: #4a5d7a; } /*=== Day indication */ diff --git a/p/themes/Dark/dark.rtl.css b/p/themes/Dark/dark.rtl.css index 2f989cb4eb1..a2da93863b5 100644 --- a/p/themes/Dark/dark.rtl.css +++ b/p/themes/Dark/dark.rtl.css @@ -738,10 +738,6 @@ a.btn { text-align: center; } -#new-article:hover { - background: #4a5d7a; -} - #new-article > a { line-height: 3em; font-weight: bold; @@ -750,6 +746,7 @@ a.btn { #new-article > a:hover { text-decoration: none; + background: #4a5d7a; } /*=== Day indication */ diff --git a/p/themes/Flat/flat.css b/p/themes/Flat/flat.css index b884a36215f..c4374a675b0 100644 --- a/p/themes/Flat/flat.css +++ b/p/themes/Flat/flat.css @@ -736,10 +736,6 @@ a.btn { text-align: center; } -#new-article:hover { - background: #2980b9; -} - #new-article > a { line-height: 3em; font-weight: bold; @@ -748,6 +744,7 @@ a.btn { #new-article > a:hover { text-decoration: none; + background: #2980b9; } /*=== Day indication */ diff --git a/p/themes/Flat/flat.rtl.css b/p/themes/Flat/flat.rtl.css index 6c5ce024b57..eb612055519 100644 --- a/p/themes/Flat/flat.rtl.css +++ b/p/themes/Flat/flat.rtl.css @@ -736,10 +736,6 @@ a.btn { text-align: center; } -#new-article:hover { - background: #2980b9; -} - #new-article > a { line-height: 3em; font-weight: bold; @@ -748,6 +744,7 @@ a.btn { #new-article > a:hover { text-decoration: none; + background: #2980b9; } /*=== Day indication */ diff --git a/p/themes/Mapco/mapco.css b/p/themes/Mapco/mapco.css index 76fd4dc46bc..16a840c41c4 100644 --- a/p/themes/Mapco/mapco.css +++ b/p/themes/Mapco/mapco.css @@ -866,10 +866,6 @@ form th { text-align: center; } -#new-article:hover { - background: #25c; -} - #new-article > a { line-height: 3em; font-weight: bold; @@ -878,6 +874,7 @@ form th { #new-article > a:hover { text-decoration: none; + background: #25c; } /*=== Day indication */ diff --git a/p/themes/Mapco/mapco.rtl.css b/p/themes/Mapco/mapco.rtl.css index 81981d2f1a9..e91161df9e5 100644 --- a/p/themes/Mapco/mapco.rtl.css +++ b/p/themes/Mapco/mapco.rtl.css @@ -866,10 +866,6 @@ form th { text-align: center; } -#new-article:hover { - background: #25c; -} - #new-article > a { line-height: 3em; font-weight: bold; @@ -878,6 +874,7 @@ form th { #new-article > a:hover { text-decoration: none; + background: #25c; } /*=== Day indication */ diff --git a/p/themes/Origine-compact/origine-compact.css b/p/themes/Origine-compact/origine-compact.css index 3f78c5f07a2..6a2a045b605 100644 --- a/p/themes/Origine-compact/origine-compact.css +++ b/p/themes/Origine-compact/origine-compact.css @@ -773,10 +773,6 @@ a.btn, font-size: 0.9em; } -#new-article:hover { - background: #06c; -} - #new-article > a { line-height: 3em; color: #fff; @@ -785,6 +781,7 @@ a.btn, #new-article > a:hover { text-decoration: none; + background: #06c; } /*=== Day indication */ diff --git a/p/themes/Origine-compact/origine-compact.rtl.css b/p/themes/Origine-compact/origine-compact.rtl.css index 9d74d309be7..2c3256006f2 100644 --- a/p/themes/Origine-compact/origine-compact.rtl.css +++ b/p/themes/Origine-compact/origine-compact.rtl.css @@ -773,10 +773,6 @@ a.btn, font-size: 0.9em; } -#new-article:hover { - background: #06c; -} - #new-article > a { line-height: 3em; color: #fff; @@ -785,6 +781,7 @@ a.btn, #new-article > a:hover { text-decoration: none; + background: #06c; } /*=== Day indication */ diff --git a/p/themes/Origine/origine.css b/p/themes/Origine/origine.css index fa907678544..0ac90100b83 100644 --- a/p/themes/Origine/origine.css +++ b/p/themes/Origine/origine.css @@ -735,23 +735,20 @@ a.btn { /*=== New article notification */ #new-article { - padding: 1em; background: #0084cc; text-align: center; font-size: 0.9em; } -#new-article:hover { - background: #06c; -} - #new-article > a { + padding: 1em; color: #fff; font-weight: bold; } #new-article > a:hover { text-decoration: none; + background: #06c; } /*=== Day indication */ diff --git a/p/themes/Origine/origine.rtl.css b/p/themes/Origine/origine.rtl.css index c5c3f99109c..c7d6695e557 100644 --- a/p/themes/Origine/origine.rtl.css +++ b/p/themes/Origine/origine.rtl.css @@ -735,23 +735,20 @@ a.btn { /*=== New article notification */ #new-article { - padding: 1em; background: #0084cc; text-align: center; font-size: 0.9em; } -#new-article:hover { - background: #06c; -} - #new-article > a { + padding: 1em; color: #fff; font-weight: bold; } #new-article > a:hover { text-decoration: none; + background: #06c; } /*=== Day indication */ diff --git a/p/themes/Pafat/pafat.css b/p/themes/Pafat/pafat.css index 10a0838e088..d8fc4f05ee2 100644 --- a/p/themes/Pafat/pafat.css +++ b/p/themes/Pafat/pafat.css @@ -745,10 +745,6 @@ a.signin { font-size: 0.9em; } -#new-article:hover { - background: #3276b1; -} - #new-article > a { line-height: 3em; color: #fff; @@ -757,6 +753,7 @@ a.signin { #new-article > a:hover { text-decoration: none; + background: #3276b1; } /*=== Day indication */ diff --git a/p/themes/Pafat/pafat.rtl.css b/p/themes/Pafat/pafat.rtl.css index 7f20c42653a..877fc5f35ac 100644 --- a/p/themes/Pafat/pafat.rtl.css +++ b/p/themes/Pafat/pafat.rtl.css @@ -745,10 +745,6 @@ a.signin { font-size: 0.9em; } -#new-article:hover { - background: #3276b1; -} - #new-article > a { line-height: 3em; color: #fff; @@ -757,6 +753,7 @@ a.signin { #new-article > a:hover { text-decoration: none; + background: #3276b1; } /*=== Day indication */ diff --git a/p/themes/Screwdriver/screwdriver.css b/p/themes/Screwdriver/screwdriver.css index 17a3535d1eb..7a77c4d6a59 100644 --- a/p/themes/Screwdriver/screwdriver.css +++ b/p/themes/Screwdriver/screwdriver.css @@ -788,10 +788,6 @@ a.btn { font-size: 0.9em; } -#new-article:hover { - background: #06c; -} - #new-article > a { line-height: 3em; color: #fff; @@ -800,6 +796,7 @@ a.btn { #new-article > a:hover { text-decoration: none; + background: #06c; } /*=== Day indication */ diff --git a/p/themes/Screwdriver/screwdriver.rtl.css b/p/themes/Screwdriver/screwdriver.rtl.css index 4e9e20d7f55..98147089a56 100644 --- a/p/themes/Screwdriver/screwdriver.rtl.css +++ b/p/themes/Screwdriver/screwdriver.rtl.css @@ -788,10 +788,6 @@ a.btn { font-size: 0.9em; } -#new-article:hover { - background: #06c; -} - #new-article > a { line-height: 3em; color: #fff; @@ -800,6 +796,7 @@ a.btn { #new-article > a:hover { text-decoration: none; + background: #06c; } /*=== Day indication */ diff --git a/p/themes/Swage/swage.css b/p/themes/Swage/swage.css index 503e886e32c..ebd04b55036 100644 --- a/p/themes/Swage/swage.css +++ b/p/themes/Swage/swage.css @@ -672,9 +672,6 @@ form th { left: 0; line-height: 1.5em; } -#new-article:hover { - background: #00488b; -} #new-article > a { line-height: 1.5em; font-weight: bold; @@ -682,6 +679,7 @@ form th { } #new-article > a:hover { text-decoration: none; + background: #00488b; } .day { diff --git a/p/themes/Swage/swage.rtl.css b/p/themes/Swage/swage.rtl.css index 60a6826c897..795dc23985f 100644 --- a/p/themes/Swage/swage.rtl.css +++ b/p/themes/Swage/swage.rtl.css @@ -672,9 +672,6 @@ form th { right: 0; line-height: 1.5em; } -#new-article:hover { - background: #00488b; -} #new-article > a { line-height: 1.5em; font-weight: bold; @@ -682,6 +679,7 @@ form th { } #new-article > a:hover { text-decoration: none; + background: #00488b; } .day { diff --git a/p/themes/Swage/swage.scss b/p/themes/Swage/swage.scss index 9c9798cdc02..f47e2dec71b 100644 --- a/p/themes/Swage/swage.scss +++ b/p/themes/Swage/swage.scss @@ -851,10 +851,6 @@ form { @extend %aside-width; - &:hover { - background: color.adjust( $color_nav, $lightness: -10%); - } - > a { line-height: 1.5em; font-weight: bold; @@ -862,6 +858,7 @@ form { &:hover { text-decoration: none; + background: color.adjust( $color_nav, $lightness: -10%); } } } diff --git a/p/themes/base-theme/base.css b/p/themes/base-theme/base.css index c05d49fe6b0..dfa754bae68 100644 --- a/p/themes/base-theme/base.css +++ b/p/themes/base-theme/base.css @@ -570,9 +570,6 @@ a.btn { font-size: 0.9em; } -#new-article:hover { -} - #new-article > a { line-height: 3em; font-weight: bold; diff --git a/p/themes/base-theme/base.rtl.css b/p/themes/base-theme/base.rtl.css index e4b5b405a6e..3cf89350bdf 100644 --- a/p/themes/base-theme/base.rtl.css +++ b/p/themes/base-theme/base.rtl.css @@ -570,9 +570,6 @@ a.btn { font-size: 0.9em; } -#new-article:hover { -} - #new-article > a { line-height: 3em; font-weight: bold; From 87b181af21ad3644e30bdf44b6704083c8a391a2 Mon Sep 17 00:00:00 2001 From: Luc SANCHEZ <4697568+ColonelMoutarde@users.noreply.github.com> Date: Sat, 5 Feb 2022 11:47:28 +0100 Subject: [PATCH 0158/2479] Draft:Add interface and add typehinting (#4130) * Add interface and add typehinting * Simplify and complete * inheritdoc Co-authored-by: Luc SANCHEZ Co-authored-by: Alexandre Alapetite --- app/Models/DatabaseDAO.php | 40 ++++++++++++++++---------------- app/Models/DatabaseDAOPGSQL.php | 13 ++++++----- app/Models/DatabaseDAOSQLite.php | 25 ++++++++++---------- 3 files changed, 40 insertions(+), 38 deletions(-) diff --git a/app/Models/DatabaseDAO.php b/app/Models/DatabaseDAO.php index b1ce0cca632..7c4daee97d1 100644 --- a/app/Models/DatabaseDAO.php +++ b/app/Models/DatabaseDAO.php @@ -19,7 +19,7 @@ class FreshRSS_DatabaseDAO extends Minz_ModelPdo { //https://dev.mysql.com/doc/refman/8.0/en/innodb-restrictions.html const LENGTH_INDEX_UNICODE = 191; - public function create() { + public function create(): string { require(APP_PATH . '/SQL/install.sql.' . $this->pdo->dbType() . '.php'); $db = FreshRSS_Context::$system_conf->db; @@ -32,7 +32,7 @@ public function create() { } } - public function testConnection() { + public function testConnection(): string { try { $sql = 'SELECT 1'; $stm = $this->pdo->query($sql); @@ -44,7 +44,7 @@ public function testConnection() { } } - public function tablesAreCorrect() { + public function tablesAreCorrect(): bool { $stm = $this->pdo->query('SHOW TABLES'); $res = $stm->fetchAll(PDO::FETCH_ASSOC); @@ -63,13 +63,13 @@ public function tablesAreCorrect() { return count(array_keys($tables, true, true)) == count($tables); } - public function getSchema($table) { + public function getSchema(string $table): array { $sql = 'DESC `_' . $table . '`'; $stm = $this->pdo->query($sql); return $this->listDaoToSchema($stm->fetchAll(PDO::FETCH_ASSOC)); } - public function checkTable($table, $schema) { + public function checkTable(string $table, $schema): bool { $columns = $this->getSchema($table); $ok = (count($columns) == count($schema)); @@ -80,13 +80,13 @@ public function checkTable($table, $schema) { return $ok; } - public function categoryIsCorrect() { + public function categoryIsCorrect(): bool { return $this->checkTable('category', array( 'id', 'name', )); } - public function feedIsCorrect() { + public function feedIsCorrect(): bool { return $this->checkTable('feed', array( 'id', 'url', 'category', 'name', 'website', 'description', 'lastUpdate', 'priority', 'pathEntries', 'httpAuth', 'error', 'ttl', 'attributes', @@ -94,33 +94,33 @@ public function feedIsCorrect() { )); } - public function entryIsCorrect() { + public function entryIsCorrect(): bool { return $this->checkTable('entry', array( 'id', 'guid', 'title', 'author', 'content_bin', 'link', 'date', 'lastSeen', 'hash', 'is_read', 'is_favorite', 'id_feed', 'tags', )); } - public function entrytmpIsCorrect() { + public function entrytmpIsCorrect(): bool { return $this->checkTable('entrytmp', array( 'id', 'guid', 'title', 'author', 'content_bin', 'link', 'date', 'lastSeen', 'hash', 'is_read', 'is_favorite', 'id_feed', 'tags', )); } - public function tagIsCorrect() { + public function tagIsCorrect(): bool { return $this->checkTable('tag', array( 'id', 'name', 'attributes', )); } - public function entrytagIsCorrect() { + public function entrytagIsCorrect(): bool { return $this->checkTable('entrytag', array( 'id_tag', 'id_entry', )); } - public function daoToSchema($dao) { + public function daoToSchema(array $dao): array { return array( 'name' => $dao['Field'], 'type' => strtolower($dao['Type']), @@ -129,7 +129,7 @@ public function daoToSchema($dao) { ); } - public function listDaoToSchema($listDAO) { + public function listDaoToSchema($listDAO): array { $list = array(); foreach ($listDAO as $dao) { @@ -139,7 +139,7 @@ public function listDaoToSchema($listDAO) { return $list; } - public function size($all = false) { + public function size(bool $all = false): int { $db = FreshRSS_Context::$system_conf->db; $sql = 'SELECT SUM(data_length + index_length) FROM information_schema.TABLES WHERE table_schema=?'; //MySQL $values = array($db['base']); @@ -150,10 +150,10 @@ public function size($all = false) { $stm = $this->pdo->prepare($sql); $stm->execute($values); $res = $stm->fetchAll(PDO::FETCH_COLUMN, 0); - return $res[0]; + return intval($res[0]); } - public function optimize() { + public function optimize(): bool { $ok = true; $tables = array('category', 'feed', 'entry', 'entrytmp', 'tag', 'entrytag'); @@ -169,7 +169,7 @@ public function optimize() { return $ok; } - public function ensureCaseInsensitiveGuids() { + public function ensureCaseInsensitiveGuids(): bool { $ok = true; if ($this->pdo->dbType() === 'mysql') { include(APP_PATH . '/SQL/install.sql.mysql.php'); @@ -192,7 +192,7 @@ public function minorDbMaintenance() { $this->ensureCaseInsensitiveGuids(); } - private static function stdError($error) { + private static function stdError($error): bool { if (defined('STDERR')) { fwrite(STDERR, $error . "\n"); } @@ -203,7 +203,7 @@ private static function stdError($error) { const SQLITE_EXPORT = 1; const SQLITE_IMPORT = 2; - public function dbCopy($filename, $mode, $clearFirst = false) { + public function dbCopy(string $filename, int $mode, bool $clearFirst = false): bool { if (!extension_loaded('pdo_sqlite')) { return self::stdError('PHP extension pdo_sqlite is missing!'); } @@ -278,7 +278,7 @@ public function dbCopy($filename, $mode, $clearFirst = false) { $tagFrom = $tagDAOSQLite; $tagTo = $tagDAO; break; default: - return; + return false; } $idMaps = []; diff --git a/app/Models/DatabaseDAOPGSQL.php b/app/Models/DatabaseDAOPGSQL.php index 75b01c90bba..83332a027df 100644 --- a/app/Models/DatabaseDAOPGSQL.php +++ b/app/Models/DatabaseDAOPGSQL.php @@ -9,7 +9,7 @@ class FreshRSS_DatabaseDAOPGSQL extends FreshRSS_DatabaseDAOSQLite { const UNDEFINED_COLUMN = '42703'; const UNDEFINED_TABLE = '42P01'; - public function tablesAreCorrect() { + public function tablesAreCorrect(): bool { $db = FreshRSS_Context::$system_conf->db; $dbowner = $db['user']; $sql = 'SELECT * FROM pg_catalog.pg_tables where tableowner=?'; @@ -33,14 +33,14 @@ public function tablesAreCorrect() { return count(array_keys($tables, true, true)) == count($tables); } - public function getSchema($table) { + public function getSchema(string $table): array { $sql = 'select column_name as field, data_type as type, column_default as default, is_nullable as null from INFORMATION_SCHEMA.COLUMNS where table_name = ?'; $stm = $this->pdo->prepare($sql); $stm->execute(array($this->pdo->prefix() . $table)); return $this->listDaoToSchema($stm->fetchAll(PDO::FETCH_ASSOC)); } - public function daoToSchema($dao) { + public function daoToSchema(array $dao): array { return array( 'name' => $dao['field'], 'type' => strtolower($dao['type']), @@ -49,7 +49,7 @@ public function daoToSchema($dao) { ); } - public function size($all = false) { + public function size(bool $all = false): int { if ($all) { $db = FreshRSS_Context::$system_conf->db; $sql = 'SELECT pg_database_size(:base)'; @@ -72,10 +72,11 @@ public function size($all = false) { return 0; } $res = $stm->fetchAll(PDO::FETCH_COLUMN, 0); - return $res[0]; + return intval($res[0]); } - public function optimize() { + + public function optimize(): bool { $ok = true; $tables = array('category', 'feed', 'entry', 'entrytmp', 'tag', 'entrytag'); diff --git a/app/Models/DatabaseDAOSQLite.php b/app/Models/DatabaseDAOSQLite.php index f944ec0436f..e5a6f5a048c 100644 --- a/app/Models/DatabaseDAOSQLite.php +++ b/app/Models/DatabaseDAOSQLite.php @@ -4,7 +4,8 @@ * This class is used to test database is well-constructed (SQLite). */ class FreshRSS_DatabaseDAOSQLite extends FreshRSS_DatabaseDAO { - public function tablesAreCorrect() { + + public function tablesAreCorrect(): bool { $sql = 'SELECT name FROM sqlite_master WHERE type="table"'; $stm = $this->pdo->query($sql); $res = $stm->fetchAll(PDO::FETCH_ASSOC); @@ -24,36 +25,36 @@ public function tablesAreCorrect() { return count(array_keys($tables, true, true)) == count($tables); } - public function getSchema($table) { + public function getSchema(string $table): array { $sql = 'PRAGMA table_info(' . $table . ')'; $stm = $this->pdo->query($sql); return $this->listDaoToSchema($stm->fetchAll(PDO::FETCH_ASSOC)); } - public function entryIsCorrect() { + public function entryIsCorrect(): bool { return $this->checkTable('entry', array( 'id', 'guid', 'title', 'author', 'content', 'link', 'date', 'lastSeen', 'hash', 'is_read', 'is_favorite', 'id_feed', 'tags', )); } - public function entrytmpIsCorrect() { + public function entrytmpIsCorrect(): bool { return $this->checkTable('entrytmp', array( 'id', 'guid', 'title', 'author', 'content', 'link', 'date', 'lastSeen', 'hash', 'is_read', 'is_favorite', 'id_feed', 'tags', )); } - public function daoToSchema($dao) { - return array( - 'name' => $dao['name'], - 'type' => strtolower($dao['type']), + public function daoToSchema(array $dao): array { + return [ + 'name' => $dao['name'], + 'type' => strtolower($dao['type']), 'notnull' => $dao['notnull'] === '1' ? true : false, 'default' => $dao['dflt_value'], - ); + ]; } - public function size($all = false) { + public function size(bool $all = false): int { $sum = 0; if ($all) { foreach (glob(DATA_PATH . '/users/*/db.sqlite') as $filename) { @@ -62,10 +63,10 @@ public function size($all = false) { } else { $sum = @filesize(DATA_PATH . '/users/' . $this->current_user . '/db.sqlite'); } - return $sum; + return intval($sum); } - public function optimize() { + public function optimize(): bool { $ok = $this->pdo->exec('VACUUM') !== false; if (!$ok) { $info = $this->pdo->errorInfo(); From 9224668285d47830830abd0f123650cadea79f80 Mon Sep 17 00:00:00 2001 From: maTh Date: Sat, 5 Feb 2022 13:13:26 +0100 Subject: [PATCH 0159/2479] Improve subscription list drag and drop (#3953) * it works * more beautiful * optimize JS * CSS - optimized for dark theme * delete not used form * phpcs * optimize * more optimization * fixed javaScript syntax * better css class name * template.css RTL * fix failed test for RTL * fix broken CSS Syntax * fixed failed test * fixed: empty lines in RTL CSS * again a fixed CSS test.... * fixed test * less magic numbers --- app/views/subscription/index.phtml | 81 ++++++++++++++-------------- p/scripts/category.js | 65 +++++++++++++--------- p/themes/base-theme/template.css | 54 +++++++++++++++++-- p/themes/base-theme/template.rtl.css | 54 +++++++++++++++++-- 4 files changed, 182 insertions(+), 72 deletions(-) diff --git a/app/views/subscription/index.phtml b/app/views/subscription/index.phtml index 92b1c7ec92c..8b9176e2743 100644 --- a/app/views/subscription/index.phtml +++ b/app/views/subscription/index.phtml @@ -3,7 +3,7 @@ $this->partial('aside_subscription'); ?> -
    +
    @@ -25,55 +25,53 @@
    - - - - categories as $cat) { - $feeds = $cat->feeds(); - ?> -
    -
    - - name() ?> -
    -
      - - + categories as $cat) { + $feeds = $cat->feeds(); + ?> +
      +
      + + name() ?> +
      +
        + onlyFeedsWithError && !$feed->inError()) { continue; } $error = $feed->inError() ? ' error' : ''; $empty = $feed->nbEntries() == 0 ? ' empty' : ''; - ?> -
      • - - show_favicons): ?>✇ - name() ?> -
      • - +
      • + + show_favicons): ?>✇ + name() ?> +
      • + -
      • - -
      • -
      -
      - + ?> +
    • + +
    • +
    +
    + -
    -
    - ✚ +
    +
    + ✚ +
    +
    +
    -
      -
    displaySlider ? ' class="active"' : ''; ?> @@ -89,5 +87,4 @@ } ?>
    - diff --git a/p/scripts/category.js b/p/scripts/category.js index cb8616b9722..d83b3b22b78 100644 --- a/p/scripts/category.js +++ b/p/scripts/category.js @@ -25,7 +25,7 @@ function dragend_process(t) { if (p.childElementCount <= 1) { p.insertAdjacentHTML('afterbegin', - '
  • ' + context.i18n.category_empty + '
  • '); + '
  • ' + context.i18n.category_empty + '
  • '); } } } @@ -47,41 +47,53 @@ function init_draggable() { const dropSection = document.querySelector('.drop-section'); dropSection.ondragstart = function (ev) { - const li = ev.target.closest ? ev.target.closest(draggable) : null; - if (li) { + const li_draggable = ev.target.closest ? ev.target.closest(draggable) : null; + if (li_draggable) { + const ulClosest = li_draggable.closest('ul'); + ulClosest.classList.add('drag-disallowed'); + ulClosest.removeAttribute('dropzone', ''); const drag = ev.target.closest('[draggable]'); ev.dataTransfer.effectAllowed = 'move'; dragHtml = drag.outerHTML; dragFeedId = drag.getAttribute('data-feed-id'); ev.dataTransfer.setData('text', dragFeedId); - drag.style.opacity = 0.3; + drag.style.opacity = 0.5; + drag.classList.add('dragging'); + li_draggable.closest('.drop-section').classList.add('drag-active'); dnd_successful = false; } }; dropSection.ondragend = function (ev) { - const li = ev.target.closest ? ev.target.closest(draggable) : null; - if (li) { - dragend_process(li); + const li_draggable = ev.target.closest ? ev.target.closest(draggable) : null; + if (li_draggable) { + dragend_process(li_draggable); + } + li_draggable.classList.remove('dragging'); + const disallowDragging = document.getElementsByClassName('drag-disallowed'); + for (let i = 0; i < disallowDragging.length; i++) { + disallowDragging[i].setAttribute('dropzone', 'move'); + disallowDragging[i].classList.remove('drag-disallowed'); } + li_draggable.closest('.drag-active').classList.remove('drag-active'); }; dropSection.ondragenter = function (ev) { - const li = ev.target.closest ? ev.target.closest(dropzone) : null; - if (li) { - li.classList.add('drag-hover'); + const ul_dropzone = ev.target.closest ? ev.target.closest(dropzone) : null; + if (ul_dropzone) { + ul_dropzone.classList.add('drag-hover'); return false; } }; dropSection.ondragleave = function (ev) { - const li = ev.target.closest ? ev.target.closest(dropzone) : null; - if (li) { + const ul_dropzone = ev.target.closest ? ev.target.closest(dropzone) : null; + if (ul_dropzone) { const scroll_top = document.documentElement.scrollTop; - const top = li.offsetTop; - const left = li.offsetLeft; - const right = left + li.clientWidth; - const bottom = top + li.clientHeight; + const top = ul_dropzone.offsetTop; + const left = ul_dropzone.offsetLeft; + const right = left + ul_dropzone.clientWidth; + const bottom = top + ul_dropzone.clientHeight; const mouse_x = ev.screenX; const mouse_y = ev.clientY + scroll_top; @@ -90,21 +102,22 @@ function init_draggable() { // HACK because dragleave is triggered when hovering children! return; } - li.classList.remove('drag-hover'); + ul_dropzone.classList.remove('drag-hover'); } }; dropSection.ondragover = function (ev) { const li = ev.target.closest ? ev.target.closest(dropzone) : null; if (li) { + li.closest('ul').classList.remove('drag-drop'); ev.dataTransfer.dropEffect = 'move'; return false; } }; dropSection.ondrop = function (ev) { - const li = ev.target.closest ? ev.target.closest(dropzone) : null; - if (li) { + const ul_dropzone = ev.target.closest ? ev.target.closest(dropzone) : null; + if (ul_dropzone) { loading = true; const req = new XMLHttpRequest(); @@ -112,9 +125,12 @@ function init_draggable() { req.responseType = 'json'; req.onload = function (e) { if (this.status == 200) { - li.insertAdjacentHTML('afterend', dragHtml); - if (li.classList.contains('disabled')) { - li.remove(); + ul_dropzone.insertAdjacentHTML('afterbegin', dragHtml); + ul_dropzone.firstChild.classList.add('moved'); + ul_dropzone.scrollTop = 0; + const disabledElement = ul_dropzone.getElementsByClassName('disabled'); + if (disabledElement.length > 0) { + disabledElement[0].remove(); } dnd_successful = true; } @@ -127,11 +143,12 @@ function init_draggable() { req.setRequestHeader('Content-Type', 'application/json'); req.send(JSON.stringify({ f_id: dragFeedId, - c_id: li.parentElement.getAttribute('data-cat-id'), + c_id: ul_dropzone.getAttribute('data-cat-id'), _csrf: context.csrf, })); - li.classList.remove('drag-hover'); + ul_dropzone.closest('ul').classList.add('drag-drop'); + ul_dropzone.closest('ul').classList.remove('drag-hover'); return false; } }; diff --git a/p/themes/base-theme/template.css b/p/themes/base-theme/template.css index 64918843223..2642d9cac4f 100644 --- a/p/themes/base-theme/template.css +++ b/p/themes/base-theme/template.css @@ -516,6 +516,14 @@ a.btn { display: block; } +.box .box-content .item.feed.moved { + font-style: italic; +} + +.box .box-content .item.feed.moved .favicon { + opacity: 0.4; +} + .box .box-content .item.disabled { text-align: center; font-style: italic; @@ -531,13 +539,53 @@ a.btn { } /*=== Draggable */ -.drag-hover { +[draggable=true]:hover { + cursor: move; +} + +.dragging { + background-color: rgba(255, 255, 0, 0.7); +} + +.dragging .icon { + visibility: hidden; +} + +.drag-disallowed { + opacity: 0.5; +} + +.drag-active .drop-zone:not(.drag-disallowed) { + background: repeating-linear-gradient(45deg, transparent, transparent 40px, rgba(250,250,210, 0.7) 40px, rgba(250,250,210, 0.7) 60px); +} + +.drag-active .drag-hover.drop-zone { + background: rgba(250,250,210, 0.7); + transition: background 0.5s; +} + +li.drag-hover { margin: 0 0 5px; border-bottom: 2px solid #ccc; } -[draggable=true] { - cursor: grab; +.drag-drop { + animation-name: droppedKeyframe; + animation-duration: 0.7s; +} + +@keyframes droppedKeyframe { + 0% { + background-color: rgba(250,250,210, 0.7); + } + + 50% { + background-color: yellow; + } + + 100% { + background-color: none; + } } /*=== Scrollbar */ diff --git a/p/themes/base-theme/template.rtl.css b/p/themes/base-theme/template.rtl.css index b92f14c0cf8..0e5dbde39b4 100644 --- a/p/themes/base-theme/template.rtl.css +++ b/p/themes/base-theme/template.rtl.css @@ -516,6 +516,14 @@ a.btn { display: block; } +.box .box-content .item.feed.moved { + font-style: italic; +} + +.box .box-content .item.feed.moved .favicon { + opacity: 0.4; +} + .box .box-content .item.disabled { text-align: center; font-style: italic; @@ -531,13 +539,53 @@ a.btn { } /*=== Draggable */ -.drag-hover { +[draggable=true]:hover { + cursor: move; +} + +.dragging { + background-color: rgba(255, 255, 0, 0.7); +} + +.dragging .icon { + visibility: hidden; +} + +.drag-disallowed { + opacity: 0.5; +} + +.drag-active .drop-zone:not(.drag-disallowed) { + background: repeating-linear-gradient(-45deg, transparent, transparent 40px, rgba(250,250,210, 0.7) 40px, rgba(250,250,210, 0.7) 60px); +} + +.drag-active .drag-hover.drop-zone { + background: rgba(250,250,210, 0.7); + transition: background 0.5s; +} + +li.drag-hover { margin: 0 0 5px; border-bottom: 2px solid #ccc; } -[draggable=true] { - cursor: grab; +.drag-drop { + animation-name: droppedKeyframe; + animation-duration: 0.7s; +} + +@keyframes droppedKeyframe { + 0% { + background-color: rgba(250,250,210, 0.7); + } + + 50% { + background-color: yellow; + } + + 100% { + background-color: none; + } } /*=== Scrollbar */ From e28a2e320eb40c777d476bd0e6d06fe6b73d3455 Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Sat, 5 Feb 2022 13:23:44 +0100 Subject: [PATCH 0160/2479] i18n CLI improve parsing (#4197) https://github.com/FreshRSS/FreshRSS/pull/3932#discussion_r800043744 --- cli/i18n/I18nFile.php | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/cli/i18n/I18nFile.php b/cli/i18n/I18nFile.php index ef8f8776e31..a7045459c46 100644 --- a/cli/i18n/I18nFile.php +++ b/cli/i18n/I18nFile.php @@ -54,16 +54,24 @@ private function process(string $filename) { $content = str_replace(' todo\',', ' -> dirty\',', ' -> ignore\',', ], $content); - $content = eval($content); + try { + $content = eval($content); + } catch (ParseError $ex) { + if (defined('STDERR')) { + fwrite(STDERR, "Error while processing: $filename\n"); + fwrite(STDERR, $ex); + } + die(1); + } if (is_array($content)) { return $content; From ba1259bb2100a776ced28b3e068f17d97f3fd4fb Mon Sep 17 00:00:00 2001 From: maTh Date: Sat, 5 Feb 2022 13:50:33 +0100 Subject: [PATCH 0161/2479] Improvement: config registration form settings (#3932) * wip * wip * i18n en-us * phpcs fixes * wip i18n * wip i18n * i18n ignore en-us * delete registration.help * i18n de * JS Syntax fixed for config.js * JavaScript lint fixes config.js * fix typo in i18n/de * improve the JS * improve HTML * phpcs fixes * update main.js from edge * fix i18n comments * Update app/i18n/fr/admin.php Co-authored-by: Alexandre Alapetite --- app/i18n/cz/admin.php | 14 ++++++- app/i18n/de/admin.php | 14 ++++++- app/i18n/en-us/admin.php | 14 ++++++- app/i18n/en/admin.php | 14 ++++++- app/i18n/es/admin.php | 14 ++++++- app/i18n/fr/admin.php | 14 ++++++- app/i18n/he/admin.php | 14 ++++++- app/i18n/it/admin.php | 14 ++++++- app/i18n/ja/admin.php | 14 ++++++- app/i18n/ko/admin.php | 14 ++++++- app/i18n/nl/admin.php | 14 ++++++- app/i18n/oc/admin.php | 14 ++++++- app/i18n/pl/admin.php | 14 ++++++- app/i18n/pt-br/admin.php | 14 ++++++- app/i18n/ru/admin.php | 14 ++++++- app/i18n/sk/admin.php | 14 ++++++- app/i18n/tr/admin.php | 14 ++++++- app/i18n/zh-cn/admin.php | 14 ++++++- app/views/configure/system.phtml | 71 +++++++++++++++++++------------- p/scripts/config.js | 56 +++++++++++++++++++++++++ 20 files changed, 332 insertions(+), 47 deletions(-) create mode 100644 p/scripts/config.js diff --git a/app/i18n/cz/admin.php b/app/i18n/cz/admin.php index 7387b466f72..0fdc4ea32cf 100644 --- a/app/i18n/cz/admin.php +++ b/app/i18n/cz/admin.php @@ -168,8 +168,20 @@ 'max-categories' => 'Maximální počet kategorií na uživatele', 'max-feeds' => 'Maximální počet kanálů na uživatele', 'registration' => array( - 'help' => '0 znamená žádná omezení účtu', 'number' => 'Maximální počet účtů', + 'select' => array( + 'label' => 'Registration form', // TODO + 'option' => array( + 'noform' => 'Disabled: No registration form', // TODO + 'nolimit' => 'Enabled: No limit of accounts', // TODO + 'setaccountsnumber' => 'Set max. number of accounts', // TODO + ), + ), + 'status' => array( + 'disabled' => 'Form disabled', // TODO + 'enabled' => 'Form enabled', // TODO + ), + 'title' => 'User registration form', // TODO ), ), 'update' => array( diff --git a/app/i18n/de/admin.php b/app/i18n/de/admin.php index 6f816457577..717b77cc272 100644 --- a/app/i18n/de/admin.php +++ b/app/i18n/de/admin.php @@ -168,8 +168,20 @@ 'max-categories' => 'Anzahl erlaubter Kategorien pro Benutzer', 'max-feeds' => 'Anzahl erlaubter Feeds pro Benutzer', 'registration' => array( - 'help' => '0 heißt, dass es kein Account Limit gibt', 'number' => 'Maximale Anzahl von Accounts', + 'select' => array( + 'label' => 'Registrierungsformular', + 'option' => array( + 'noform' => 'Deaktiviert: Keine Registrierung möglich', + 'nolimit' => 'Aktiviert: Registrierung möglich', + 'setaccountsnumber' => 'Anzahl maximaler Benutzer-Acounts festlegen', + ), + ), + 'status' => array( + 'disabled' => 'Formular deaktiviert', + 'enabled' => 'Formular aktiviert', + ), + 'title' => 'Benutzer-Registrierungsformular', ), ), 'update' => array( diff --git a/app/i18n/en-us/admin.php b/app/i18n/en-us/admin.php index 481e5a71425..471c2cf24ff 100644 --- a/app/i18n/en-us/admin.php +++ b/app/i18n/en-us/admin.php @@ -168,8 +168,20 @@ 'max-categories' => 'Max number of categories per user', // IGNORE 'max-feeds' => 'Max number of feeds per user', // IGNORE 'registration' => array( - 'help' => '0 means that there is no account limit', // IGNORE 'number' => 'Max number of accounts', // IGNORE + 'select' => array( + 'label' => 'Registration form', // IGNORE + 'option' => array( + 'noform' => 'Disabled: No registration form', // IGNORE + 'nolimit' => 'Enabled: No limit of accounts', // IGNORE + 'setaccountsnumber' => 'Set max. number of accounts', // IGNORE + ), + ), + 'status' => array( + 'disabled' => 'Form disabled', // IGNORE + 'enabled' => 'Form enabled', // IGNORE + ), + 'title' => 'User registration form', // IGNORE ), ), 'update' => array( diff --git a/app/i18n/en/admin.php b/app/i18n/en/admin.php index 3541b434ae8..4746d971fd1 100644 --- a/app/i18n/en/admin.php +++ b/app/i18n/en/admin.php @@ -168,8 +168,20 @@ 'max-categories' => 'Max number of categories per user', 'max-feeds' => 'Max number of feeds per user', 'registration' => array( - 'help' => '0 means that there is no account limit', 'number' => 'Max number of accounts', + 'select' => array( + 'label' => 'Registration form', + 'option' => array( + 'noform' => 'Disabled: No registration form', + 'nolimit' => 'Enabled: No limit of accounts', + 'setaccountsnumber' => 'Set max. number of accounts', + ), + ), + 'status' => array( + 'disabled' => 'Form disabled', + 'enabled' => 'Form enabled', + ), + 'title' => 'User registration form', ), ), 'update' => array( diff --git a/app/i18n/es/admin.php b/app/i18n/es/admin.php index 1ad98e565df..3e2441658ac 100755 --- a/app/i18n/es/admin.php +++ b/app/i18n/es/admin.php @@ -168,8 +168,20 @@ 'max-categories' => 'Límite de categorías por usuario', 'max-feeds' => 'Límite de fuentes por usuario', 'registration' => array( - 'help' => '0 significa que no hay límite en la cuenta', 'number' => 'Número máximo de cuentas', + 'select' => array( + 'label' => 'Registration form', // TODO + 'option' => array( + 'noform' => 'Disabled: No registration form', // TODO + 'nolimit' => 'Enabled: No limit of accounts', // TODO + 'setaccountsnumber' => 'Set max. number of accounts', // TODO + ), + ), + 'status' => array( + 'disabled' => 'Form disabled', // TODO + 'enabled' => 'Form enabled', // TODO + ), + 'title' => 'User registration form', // TODO ), ), 'update' => array( diff --git a/app/i18n/fr/admin.php b/app/i18n/fr/admin.php index 3789453e07a..706fa984db8 100644 --- a/app/i18n/fr/admin.php +++ b/app/i18n/fr/admin.php @@ -168,8 +168,20 @@ 'max-categories' => 'Limite de catégories par utilisateur', 'max-feeds' => 'Limite de flux par utilisateur', 'registration' => array( - 'help' => 'Un chiffre de 0 signifie que l’on peut créer un nombre infini de comptes', 'number' => 'Nombre max de comptes', + 'select' => array( + 'label' => 'Formulaire d’inscription', + 'option' => array( + 'noform' => 'Désactivé : Pas de formulaire d’inscription', + 'nolimit' => 'Activé : Pas de limite au nombre d’utilisateurs', + 'setaccountsnumber' => 'Nombre d’utilisateurs limités', + ), + ), + 'status' => array( + 'disabled' => 'Formulaire désactivé', + 'enabled' => 'Formulaire activé', + ), + 'title' => 'Formulaire d’inscription utilisateur', ), ), 'update' => array( diff --git a/app/i18n/he/admin.php b/app/i18n/he/admin.php index dc891a925ec..982712af4db 100644 --- a/app/i18n/he/admin.php +++ b/app/i18n/he/admin.php @@ -168,8 +168,20 @@ 'max-categories' => 'Max number of categories per user', // TODO 'max-feeds' => 'Max number of feeds per user', // TODO 'registration' => array( - 'help' => '0 means that there is no account limit', // TODO 'number' => 'Max number of accounts', // TODO + 'select' => array( + 'label' => 'Registration form', // TODO + 'option' => array( + 'noform' => 'Disabled: No registration form', // TODO + 'nolimit' => 'Enabled: No limit of accounts', // TODO + 'setaccountsnumber' => 'Set max. number of accounts', // TODO + ), + ), + 'status' => array( + 'disabled' => 'Form disabled', // TODO + 'enabled' => 'Form enabled', // TODO + ), + 'title' => 'User registration form', // TODO ), ), 'update' => array( diff --git a/app/i18n/it/admin.php b/app/i18n/it/admin.php index b0bad8fc285..420f3c096e7 100644 --- a/app/i18n/it/admin.php +++ b/app/i18n/it/admin.php @@ -168,8 +168,20 @@ 'max-categories' => 'Limite categorie per utente', 'max-feeds' => 'Limite feeds per utente', 'registration' => array( - 'help' => '0 significa che non esiste limite sui profili', 'number' => 'Numero massimo di profili', + 'select' => array( + 'label' => 'Registration form', // TODO + 'option' => array( + 'noform' => 'Disabled: No registration form', // TODO + 'nolimit' => 'Enabled: No limit of accounts', // TODO + 'setaccountsnumber' => 'Set max. number of accounts', // TODO + ), + ), + 'status' => array( + 'disabled' => 'Form disabled', // TODO + 'enabled' => 'Form enabled', // TODO + ), + 'title' => 'User registration form', // TODO ), ), 'update' => array( diff --git a/app/i18n/ja/admin.php b/app/i18n/ja/admin.php index f135304e24b..6eea35956c3 100644 --- a/app/i18n/ja/admin.php +++ b/app/i18n/ja/admin.php @@ -168,8 +168,20 @@ 'max-categories' => '1ユーザーごとのカテゴリの最大値', 'max-feeds' => '1ユーザーごとのフィードの最大値', 'registration' => array( - 'help' => '0 はアカウントの上限がないことを意味しています', 'number' => 'アカウントの最大値', + 'select' => array( + 'label' => 'Registration form', // TODO + 'option' => array( + 'noform' => 'Disabled: No registration form', // TODO + 'nolimit' => 'Enabled: No limit of accounts', // TODO + 'setaccountsnumber' => 'Set max. number of accounts', // TODO + ), + ), + 'status' => array( + 'disabled' => 'Form disabled', // TODO + 'enabled' => 'Form enabled', // TODO + ), + 'title' => 'User registration form', // TODO ), ), 'update' => array( diff --git a/app/i18n/ko/admin.php b/app/i18n/ko/admin.php index 4a04f6fced1..50e17294a85 100644 --- a/app/i18n/ko/admin.php +++ b/app/i18n/ko/admin.php @@ -168,8 +168,20 @@ 'max-categories' => '사용자별 카테고리 개수 제한', 'max-feeds' => '사용자별 피드 개수 제한', 'registration' => array( - 'help' => '0: 제한 없음', 'number' => '계정 최대 개수', + 'select' => array( + 'label' => 'Registration form', // TODO + 'option' => array( + 'noform' => 'Disabled: No registration form', // TODO + 'nolimit' => 'Enabled: No limit of accounts', // TODO + 'setaccountsnumber' => 'Set max. number of accounts', // TODO + ), + ), + 'status' => array( + 'disabled' => 'Form disabled', // TODO + 'enabled' => 'Form enabled', // TODO + ), + 'title' => 'User registration form', // TODO ), ), 'update' => array( diff --git a/app/i18n/nl/admin.php b/app/i18n/nl/admin.php index c5eca9a78f4..f52e33a5339 100644 --- a/app/i18n/nl/admin.php +++ b/app/i18n/nl/admin.php @@ -168,8 +168,20 @@ 'max-categories' => 'Categorielimiet per gebruiker', 'max-feeds' => 'Feedlimiet per gebruiker', 'registration' => array( - 'help' => '0 betekent geen account limiet', 'number' => 'Maximum aantal accounts', + 'select' => array( + 'label' => 'Registration form', // TODO + 'option' => array( + 'noform' => 'Disabled: No registration form', // TODO + 'nolimit' => 'Enabled: No limit of accounts', // TODO + 'setaccountsnumber' => 'Set max. number of accounts', // TODO + ), + ), + 'status' => array( + 'disabled' => 'Form disabled', // TODO + 'enabled' => 'Form enabled', // TODO + ), + 'title' => 'User registration form', // TODO ), ), 'update' => array( diff --git a/app/i18n/oc/admin.php b/app/i18n/oc/admin.php index 205b9792373..0291bcc89f4 100644 --- a/app/i18n/oc/admin.php +++ b/app/i18n/oc/admin.php @@ -168,8 +168,20 @@ 'max-categories' => 'Limita de categoria per utilizaire', 'max-feeds' => 'Limita de fluxes per utilizaire', 'registration' => array( - 'help' => '0 vòl dire qu’i a pas cap de limita de compte', 'number' => 'Nombre max de comptes', + 'select' => array( + 'label' => 'Registration form', // TODO + 'option' => array( + 'noform' => 'Disabled: No registration form', // TODO + 'nolimit' => 'Enabled: No limit of accounts', // TODO + 'setaccountsnumber' => 'Set max. number of accounts', // TODO + ), + ), + 'status' => array( + 'disabled' => 'Form disabled', // TODO + 'enabled' => 'Form enabled', // TODO + ), + 'title' => 'User registration form', // TODO ), ), 'update' => array( diff --git a/app/i18n/pl/admin.php b/app/i18n/pl/admin.php index f7fac8c9eba..6465299fbd1 100644 --- a/app/i18n/pl/admin.php +++ b/app/i18n/pl/admin.php @@ -168,8 +168,20 @@ 'max-categories' => 'Maksymalna liczba kategorii na użytkownika', 'max-feeds' => 'Maksymalna liczba kanałów na użytkownika', 'registration' => array( - 'help' => '0 oznacza brak limitu liczby kont', 'number' => 'Maksymalna liczba kont', + 'select' => array( + 'label' => 'Registration form', // TODO + 'option' => array( + 'noform' => 'Disabled: No registration form', // TODO + 'nolimit' => 'Enabled: No limit of accounts', // TODO + 'setaccountsnumber' => 'Set max. number of accounts', // TODO + ), + ), + 'status' => array( + 'disabled' => 'Form disabled', // TODO + 'enabled' => 'Form enabled', // TODO + ), + 'title' => 'User registration form', // TODO ), ), 'update' => array( diff --git a/app/i18n/pt-br/admin.php b/app/i18n/pt-br/admin.php index 30026ee0a80..c8b4241c5fd 100644 --- a/app/i18n/pt-br/admin.php +++ b/app/i18n/pt-br/admin.php @@ -168,8 +168,20 @@ 'max-categories' => 'Limite de categorias por usuário', 'max-feeds' => 'Limite de Feeds por usuário', 'registration' => array( - 'help' => '0 significa que não há limite para a conta', 'number' => 'Máximo número de contas', + 'select' => array( + 'label' => 'Registration form', // TODO + 'option' => array( + 'noform' => 'Disabled: No registration form', // TODO + 'nolimit' => 'Enabled: No limit of accounts', // TODO + 'setaccountsnumber' => 'Set max. number of accounts', // TODO + ), + ), + 'status' => array( + 'disabled' => 'Form disabled', // TODO + 'enabled' => 'Form enabled', // TODO + ), + 'title' => 'User registration form', // TODO ), ), 'update' => array( diff --git a/app/i18n/ru/admin.php b/app/i18n/ru/admin.php index a3b08e99e25..c8e72d0240b 100644 --- a/app/i18n/ru/admin.php +++ b/app/i18n/ru/admin.php @@ -168,8 +168,20 @@ 'max-categories' => 'Максимальное количество категорий на пользователя', 'max-feeds' => 'Максимальное количество лент на пользователя', 'registration' => array( - 'help' => '0 означает неограниченное количество пользователей', 'number' => 'Максимальное количество пользователей', + 'select' => array( + 'label' => 'Registration form', // TODO + 'option' => array( + 'noform' => 'Disabled: No registration form', // TODO + 'nolimit' => 'Enabled: No limit of accounts', // TODO + 'setaccountsnumber' => 'Set max. number of accounts', // TODO + ), + ), + 'status' => array( + 'disabled' => 'Form disabled', // TODO + 'enabled' => 'Form enabled', // TODO + ), + 'title' => 'User registration form', // TODO ), ), 'update' => array( diff --git a/app/i18n/sk/admin.php b/app/i18n/sk/admin.php index 18cbe280add..b4ea200f592 100644 --- a/app/i18n/sk/admin.php +++ b/app/i18n/sk/admin.php @@ -168,8 +168,20 @@ 'max-categories' => 'Limit počtu kategórií pre používateľa', 'max-feeds' => 'Limit počtu kanálov pre používateľov', 'registration' => array( - 'help' => '0 znamená žiadny limit počtu účtov', 'number' => 'Maximálny počt účtov', + 'select' => array( + 'label' => 'Registration form', // TODO + 'option' => array( + 'noform' => 'Disabled: No registration form', // TODO + 'nolimit' => 'Enabled: No limit of accounts', // TODO + 'setaccountsnumber' => 'Set max. number of accounts', // TODO + ), + ), + 'status' => array( + 'disabled' => 'Form disabled', // TODO + 'enabled' => 'Form enabled', // TODO + ), + 'title' => 'User registration form', // TODO ), ), 'update' => array( diff --git a/app/i18n/tr/admin.php b/app/i18n/tr/admin.php index 5c50d87ac65..8790bfedff5 100644 --- a/app/i18n/tr/admin.php +++ b/app/i18n/tr/admin.php @@ -168,8 +168,20 @@ 'max-categories' => 'Kullanıcı başına kategori limiti', 'max-feeds' => 'Kullanıcı başına akış limiti', 'registration' => array( - 'help' => '0 sınır yok anlamındadır', 'number' => 'En fazla hesap sayısı', + 'select' => array( + 'label' => 'Registration form', // TODO + 'option' => array( + 'noform' => 'Disabled: No registration form', // TODO + 'nolimit' => 'Enabled: No limit of accounts', // TODO + 'setaccountsnumber' => 'Set max. number of accounts', // TODO + ), + ), + 'status' => array( + 'disabled' => 'Form disabled', // TODO + 'enabled' => 'Form enabled', // TODO + ), + 'title' => 'User registration form', // TODO ), ), 'update' => array( diff --git a/app/i18n/zh-cn/admin.php b/app/i18n/zh-cn/admin.php index 84dff103dd0..fbd8cc86713 100644 --- a/app/i18n/zh-cn/admin.php +++ b/app/i18n/zh-cn/admin.php @@ -168,8 +168,20 @@ 'max-categories' => '各用户分类数限制', 'max-feeds' => '各用户订阅源数限制', 'registration' => array( - 'help' => '0 表示无用户数限制', 'number' => '最大用户数', + 'select' => array( + 'label' => 'Registration form', // TODO + 'option' => array( + 'noform' => 'Disabled: No registration form', // TODO + 'nolimit' => 'Enabled: No limit of accounts', // TODO + 'setaccountsnumber' => 'Set max. number of accounts', // TODO + ), + ), + 'status' => array( + 'disabled' => 'Form disabled', // TODO + 'enabled' => 'Form enabled', // TODO + ), + 'title' => 'User registration form', // TODO ), ), 'update' => array( diff --git a/app/views/configure/system.phtml b/app/views/configure/system.phtml index 7f355d15615..6f094e06be9 100644 --- a/app/views/configure/system.phtml +++ b/app/views/configure/system.phtml @@ -30,61 +30,72 @@
    - +
    - -

    +
    +
    - 1 ? _t('admin.user.numbers', $number) : _t('admin.user.number', $number)); - ?> +
    +
    - + +

    + +
    - +
    - + +
    +
    + +
    + +
    + + + (= )(= )
    -
    - + 1 ? _t('admin.user.numbers', $number) : _t('admin.user.number', $number)); ?>
    -
    - -

    +
    @@ -96,3 +107,5 @@
    + + diff --git a/p/scripts/config.js b/p/scripts/config.js new file mode 100644 index 00000000000..e3a85df15e4 --- /dev/null +++ b/p/scripts/config.js @@ -0,0 +1,56 @@ +// @license magnet:?xt=urn:btih:0b31508aeb0634b347b8270c7bee4d411b5d4109&dn=agpl-3.0.txt AGPL-3.0 +'use strict'; + +function init_selectInputChanger() { + const select = document.getElementsByClassName('select-input-changer'); + + for (let i = 0; i < select.length; i++) { + select[i].addEventListener('change', updateSelectInput); + select[i].dispatchEvent(new Event('change', { + bubbles: true, + cancelable: true, + })); + } +} + +function updateSelectInput(ev) { + const elem = ev.target; + const formGroup = document.getElementById(elem.dataset.name + '-block'); + const input = document.getElementById(elem.dataset.name + '-input'); + if (elem.selectedOptions[0].dataset.inputVisible == 'false') { + formGroup.style.display = 'none'; + input.name = ''; + elem.name = elem.dataset.name; + } else { + formGroup.style.display = ''; + input.name = elem.dataset.name; + elem.name = ''; + } +} + +function init_maxNumbersOfAccountsStatus() { + const input = document.getElementById('max-registrations-input'); + if (input) { + input.addEventListener('change', onchange_maxNumbersOfAccounts); + input.dispatchEvent(new Event('change', { + bubbles: true, + cancelable: true, + })); + } +} + +function onchange_maxNumbersOfAccounts(ev) { + const elem = ev.target; + if (elem.value > elem.dataset.number) { + document.getElementById('max-registrations-status-disabled').style.display = 'none'; + document.getElementById('max-registrations-status-enabled').style.display = ''; + } else { + document.getElementById('max-registrations-status-disabled').style.display = ''; + document.getElementById('max-registrations-status-enabled').style.display = 'none'; + } +} + +init_selectInputChanger(); +init_maxNumbersOfAccountsStatus(); + +// @license-end From cb36fe25a75b764e020760fd0d918bea13cadd13 Mon Sep 17 00:00:00 2001 From: maTh Date: Sat, 5 Feb 2022 14:15:32 +0100 Subject: [PATCH 0162/2479] Improved: Fetch articles with selector but do not delete the class attribute. (Simplepie: new method: rename_attribute) (#4175) * added to simplepie: rename_attributes * rename the class attribute * Update lib/SimplePie/SimplePie/Sanitize.php Co-authored-by: Alexandre Alapetite * added 'id' as attribute to rename to 'data-sanitized-id' * Update lib_rss.php * source code in sync with simplepie upstream * fixed parameters Co-authored-by: Alexandre Alapetite --- lib/SimplePie/SimplePie.php | 16 ++++++++++++ lib/SimplePie/SimplePie/Sanitize.php | 39 ++++++++++++++++++++++++++++ lib/lib_rss.php | 1 + 3 files changed, 56 insertions(+) diff --git a/lib/SimplePie/SimplePie.php b/lib/SimplePie/SimplePie.php index 4a02b29739b..b0e973e83b9 100644 --- a/lib/SimplePie/SimplePie.php +++ b/lib/SimplePie/SimplePie.php @@ -656,6 +656,13 @@ class SimplePie */ public $strip_htmltags = array('base', 'blink', 'body', 'doctype', 'embed', 'font', 'form', 'frame', 'frameset', 'html', 'iframe', 'input', 'marquee', 'meta', 'noscript', 'object', 'param', 'script', 'style'); + /** + * @var array Stores the default tags to be stripped by rename_attributes(). + * @see SimplePie::rename_attributes() + * @access private + */ + public $rename_attributes = array(); + /** * @var bool Should we throw exceptions, or use the old-style error property? * @access private @@ -1235,6 +1242,15 @@ public function encode_instead_of_strip($enable = true) $this->sanitize->encode_instead_of_strip($enable); } + public function rename_attributes($attribs = '') + { + if ($attribs === '') + { + $attribs = $this->rename_attributes; + } + $this->sanitize->rename_attributes($attribs); + } + public function strip_attributes($attribs = '') { if ($attribs === '') diff --git a/lib/SimplePie/SimplePie/Sanitize.php b/lib/SimplePie/SimplePie/Sanitize.php index 300a4780075..6cb716a728c 100644 --- a/lib/SimplePie/SimplePie/Sanitize.php +++ b/lib/SimplePie/SimplePie/Sanitize.php @@ -61,6 +61,7 @@ class SimplePie_Sanitize var $strip_htmltags = array('base', 'blink', 'body', 'doctype', 'embed', 'font', 'form', 'frame', 'frameset', 'html', 'iframe', 'input', 'marquee', 'meta', 'noscript', 'object', 'param', 'script', 'style'); var $encode_instead_of_strip = false; var $strip_attributes = array('bgsound', 'expr', 'id', 'style', 'onclick', 'onerror', 'onfinish', 'onmouseover', 'onmouseout', 'onfocus', 'onblur', 'lowsrc', 'dynsrc'); + var $rename_attributes = array(); var $add_attributes = array('audio' => array('preload' => 'none'), 'iframe' => array('sandbox' => 'allow-scripts allow-same-origin'), 'video' => array('preload' => 'none')); var $strip_comments = false; var $output_encoding = 'UTF-8'; @@ -169,6 +170,25 @@ public function encode_instead_of_strip($encode = false) $this->encode_instead_of_strip = (bool) $encode; } + public function rename_attributes($attribs = array()) + { + if ($attribs) + { + if (is_array($attribs)) + { + $this->rename_attributes = $attribs; + } + else + { + $this->rename_attributes = explode(',', $attribs); + } + } + else + { + $this->rename_attributes = false; + } + } + public function strip_attributes($attribs = array('bgsound', 'expr', 'id', 'style', 'onclick', 'onerror', 'onfinish', 'onmouseover', 'onmouseout', 'onfocus', 'onblur', 'lowsrc', 'dynsrc')) { if ($attribs) @@ -375,6 +395,14 @@ public function sanitize($data, $type, $base = '') } } + if ($this->rename_attributes) + { + foreach ($this->rename_attributes as $attrib) + { + $this->rename_attr($attrib, $xpath); + } + } + if ($this->strip_attributes) { foreach ($this->strip_attributes as $attrib) @@ -643,6 +671,17 @@ protected function strip_attr($attrib, $xpath) } } + protected function rename_attr($attrib, $xpath) + { + $elements = $xpath->query('//*[@' . $attrib . ']'); + + foreach ($elements as $element) + { + $element->setAttribute('data-sanitized-' . $attrib, $element->getAttribute($attrib)); + $element->removeAttribute($attrib); + } + } + protected function add_attr($tag, $valuePairs, $document) { $elements = $document->getElementsByTagName($tag); diff --git a/lib/lib_rss.php b/lib/lib_rss.php index bc4b06497b8..5b335e8d8a7 100644 --- a/lib/lib_rss.php +++ b/lib/lib_rss.php @@ -247,6 +247,7 @@ function customSimplePie($attributes = array()) { 'object', 'param', 'plaintext', 'script', 'style', 'svg', //TODO: Support SVG after sanitizing and URL rewriting of xlink:href )); + $simplePie->rename_attributes(array('id', 'class')); $simplePie->strip_attributes(array_merge($simplePie->strip_attributes, array( 'autoplay', 'class', 'onload', 'onunload', 'onclick', 'ondblclick', 'onmousedown', 'onmouseup', 'onmouseover', 'onmousemove', 'onmouseout', 'onfocus', 'onblur', From fe880d1a98d8224682036e44520bb92b2ed417aa Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Sat, 5 Feb 2022 19:04:07 +0100 Subject: [PATCH 0163/2479] i18n fr (#4199) And make check.translation executable: ```sh cli/check.translation.php -r ``` --- app/i18n/fr/conf.php | 10 +++++----- cli/check.translation.php | 1 + 2 files changed, 6 insertions(+), 5 deletions(-) mode change 100644 => 100755 cli/check.translation.php diff --git a/app/i18n/fr/conf.php b/app/i18n/fr/conf.php index eec838b7905..4ebf7895bca 100644 --- a/app/i18n/fr/conf.php +++ b/app/i18n/fr/conf.php @@ -131,11 +131,11 @@ 'display_articles_unfolded' => 'Afficher les articles dépliés par défaut', 'display_categories_unfolded' => 'Catégories à déplier', 'headline' => array( - 'articles' => 'Articles: Open/Close', // TODO - 'categories' => 'Left navigation: Categories', // TODO - 'mark_as_read' => 'Mark article as read', // TODO - 'misc' => 'Miscellaneous', // TODO - 'view' => 'View', // TODO + 'articles' => 'Articles : ouverture/fermeture', + 'categories' => 'Navigation de gauche : catégories', + 'mark_as_read' => 'Marquer les articles comme lus', + 'misc' => 'Divers', + 'view' => 'Vue', ), 'hide_read_feeds' => 'Cacher les catégories & flux sans article non-lu (ne fonctionne pas avec la configuration “Afficher tous les articles”)', 'img_with_lazyload' => 'Utiliser le mode “chargement différé” pour les images', diff --git a/cli/check.translation.php b/cli/check.translation.php old mode 100644 new mode 100755 index 38bb83af59f..ae0abd78ea5 --- a/cli/check.translation.php +++ b/cli/check.translation.php @@ -1,3 +1,4 @@ +#!/usr/bin/env php Date: Sun, 6 Feb 2022 14:31:36 +0100 Subject: [PATCH 0164/2479] Fix Fever 32 bit ID issue + more PHP type hints (#4201) * Fix Fever 32 bit ID issue + more PHP type hints #fix https://github.com/FreshRSS/FreshRSS/issues/4200 Follow up and fix regression from https://github.com/FreshRSS/FreshRSS/pull/4110 * More PHP type hints with PHPStan * Fix pull problem * Avoid more nulls --- app/Controllers/feedController.php | 2 +- app/Models/Category.php | 17 ++-- app/Models/CategoryDAO.php | 2 +- app/Models/CategoryDAOSQLite.php | 2 +- app/Models/Entry.php | 103 ++++++++++++++---------- app/Models/EntryDAO.php | 29 ++++--- app/Models/EntryDAOPGSQL.php | 12 +-- app/Models/EntryDAOSQLite.php | 14 ++-- app/Models/Feed.php | 111 +++++++++++++++----------- app/Models/FeedDAO.php | 104 +++++++++++++----------- app/Models/FeedDAOSQLite.php | 2 +- app/Models/Tag.php | 3 + app/Models/TagDAO.php | 4 +- app/Models/TagDAOPGSQL.php | 2 +- app/Models/TagDAOSQLite.php | 4 +- app/Services/ImportService.php | 2 +- lib/lib_rss.php | 9 +-- p/api/fever.php | 123 +++++++++++++---------------- 18 files changed, 290 insertions(+), 255 deletions(-) diff --git a/app/Controllers/feedController.php b/app/Controllers/feedController.php index faca9416b56..99a4c8bd0e8 100755 --- a/app/Controllers/feedController.php +++ b/app/Controllers/feedController.php @@ -207,7 +207,7 @@ public function addAction() { // Entries are in DB, we redirect to feed configuration page. $url_redirect['a'] = 'index'; - $url_redirect['params']['id'] = $feed->id(); + $url_redirect['params']['id'] = '' . $feed->id(); Minz_Request::good(_t('feedback.sub.feed.added', $feed->name()), $url_redirect); } else { // GET request: we must ask confirmation to user before adding feed. diff --git a/app/Models/Category.php b/app/Models/Category.php index 499f95d9796..d2968828ad3 100644 --- a/app/Models/Category.php +++ b/app/Models/Category.php @@ -1,6 +1,9 @@ _name($name); if (isset($feeds)) { $this->_feeds($feeds); @@ -24,16 +27,16 @@ public function __construct($name = '', $feeds = null) { } } - public function id() { + public function id(): int { return $this->id; } - public function name() { + public function name(): string { return $this->name; } - public function isDefault() { + public function isDefault(): bool { return $this->isDefault; } - public function nbFeed() { + public function nbFeed(): int { if ($this->nbFeed < 0) { $catDAO = FreshRSS_Factory::createCategoryDao(); $this->nbFeed = $catDAO->countFeed($this->id()); @@ -41,7 +44,7 @@ public function nbFeed() { return $this->nbFeed; } - public function nbNotRead() { + public function nbNotRead(): int { if ($this->nbNotRead < 0) { $catDAO = FreshRSS_Factory::createCategoryDao(); $this->nbNotRead = $catDAO->countNotRead($this->id()); @@ -49,7 +52,7 @@ public function nbNotRead() { return $this->nbNotRead; } - public function feeds() { + public function feeds(): array { if ($this->feeds === null) { $feedDAO = FreshRSS_Factory::createFeedDao(); $this->feeds = $feedDAO->listByCategory($this->id()); diff --git a/app/Models/CategoryDAO.php b/app/Models/CategoryDAO.php index f36532ffd93..18747c9063e 100644 --- a/app/Models/CategoryDAO.php +++ b/app/Models/CategoryDAO.php @@ -66,7 +66,7 @@ protected function addColumn($name) { return false; } - protected function autoUpdateDb($errorInfo) { + protected function autoUpdateDb(array $errorInfo) { if (isset($errorInfo[0])) { if ($errorInfo[0] === FreshRSS_DatabaseDAO::ER_BAD_FIELD_ERROR || $errorInfo[0] === FreshRSS_DatabaseDAOPGSQL::UNDEFINED_COLUMN) { foreach (['attributes'] as $column) { diff --git a/app/Models/CategoryDAOSQLite.php b/app/Models/CategoryDAOSQLite.php index e32545c90fe..6f200be6df0 100644 --- a/app/Models/CategoryDAOSQLite.php +++ b/app/Models/CategoryDAOSQLite.php @@ -2,7 +2,7 @@ class FreshRSS_CategoryDAOSQLite extends FreshRSS_CategoryDAO { - protected function autoUpdateDb($errorInfo) { + protected function autoUpdateDb(array $errorInfo) { if ($tableInfo = $this->pdo->query("PRAGMA table_info('category')")) { $columns = $tableInfo->fetchAll(PDO::FETCH_COLUMN, 1); foreach (['attributes'] as $column) { diff --git a/app/Models/Entry.php b/app/Models/Entry.php index c4f69211bb6..3e0c3f37a5d 100644 --- a/app/Models/Entry.php +++ b/app/Models/Entry.php @@ -7,23 +7,46 @@ class FreshRSS_Entry extends Minz_Model { const STATE_FAVORITE = 4; const STATE_NOT_FAVORITE = 8; - private $id = 0; + /** + * @var string + */ + private $id = '0'; + + /** + * @var string + */ private $guid; + private $title; private $authors; private $content; private $link; private $date; private $date_added = 0; //In microseconds - private $hash = null; - private $is_read; //Nullable boolean + /** + * @var string + */ + private $hash = ''; + /** + * @var bool|null + */ + private $is_read; private $is_favorite; + + /** + * @var int + */ private $feedId; + + /** + * @var FreshRSS_Feed|null + */ private $feed; + private $tags; - public function __construct($feedId = '', $guid = '', $title = '', $authors = '', $content = '', - $link = '', $pubdate = 0, $is_read = false, $is_favorite = false, $tags = '') { + public function __construct(int $feedId = 0, string $guid = '', string $title = '', string $authors = '', string $content = '', + string $link = '', $pubdate = 0, bool $is_read = false, bool $is_favorite = false, string $tags = '') { $this->_title($title); $this->_authors($authors); $this->_content($content); @@ -36,31 +59,31 @@ public function __construct($feedId = '', $guid = '', $title = '', $authors = '' $this->_guid($guid); } - public function id() { + public function id(): string { return $this->id; } - public function guid() { + public function guid(): string { return $this->guid; } - public function title() { + public function title(): string { return $this->title == '' ? $this->guid() : $this->title; } - public function author() { + public function author(): string { //Deprecated return $this->authors(true); } - public function authors($asString = false) { + public function authors(bool $asString = false) { if ($asString) { return $this->authors == null ? '' : ';' . implode('; ', $this->authors); } else { return $this->authors; } } - public function content() { + public function content(): string { return $this->content; } - public function enclosures($searchBodyImages = false) { + public function enclosures(bool $searchBodyImages = false): array { $results = []; try { $searchEnclosures = strpos($this->content, '

    pdo->query("SELECT sql FROM sqlite_master where name='tag'")) { $showCreate = $tableInfo->fetchColumn(); if (stripos($showCreate, 'tag') === false) { @@ -243,10 +243,10 @@ public function markReadCat($id, $idMax = 0, $filters = null, $state = 0, $is_re /** * Mark all the articles in a tag as read. * @param integer $id tag ID, or empty for targeting any tag - * @param integer $idMax max article ID + * @param string $idMax max article ID * @return integer|false affected rows */ - public function markReadTag($id = 0, $idMax = 0, $filters = null, $state = 0, $is_read = true) { + public function markReadTag($id = 0, string $idMax = '0', $filters = null, int $state = 0, bool $is_read = true) { FreshRSS_UserDAO::touch(); if ($idMax == 0) { $idMax = time() . '000000'; diff --git a/app/Models/Feed.php b/app/Models/Feed.php index 595c59f4fe5..48aba2b4b6b 100644 --- a/app/Models/Feed.php +++ b/app/Models/Feed.php @@ -10,8 +10,14 @@ class FreshRSS_Feed extends Minz_Model { const ARCHIVING_RETENTION_COUNT_LIMIT = 10000; const ARCHIVING_RETENTION_PERIOD = 'P3M'; + /** + * @var int + */ private $id = 0; private $url; + /** + * @var int + */ private $category = 1; private $nbEntries = -1; private $nbNotRead = -1; @@ -33,7 +39,7 @@ class FreshRSS_Feed extends Minz_Model { private $selfUrl = ''; private $filterActions = null; - public function __construct($url, $validate = true) { + public function __construct(string $url, bool $validate = true) { if ($validate) { $this->_url($url); } else { @@ -47,11 +53,11 @@ public static function example() { return $f; } - public function id() { + public function id(): int { return $this->id; } - public function hash() { + public function hash(): string { if ($this->hash === null) { $salt = FreshRSS_Context::$system_conf->salt; $this->hash = hash('crc32b', $salt . $this->url); @@ -59,16 +65,16 @@ public function hash() { return $this->hash; } - public function url($includeCredentials = true) { + public function url(bool $includeCredentials = true): string { return $includeCredentials ? $this->url : SimplePie_Misc::url_remove_credentials($this->url); } - public function selfUrl() { + public function selfUrl(): string { return $this->selfUrl; } - public function hubUrl() { + public function hubUrl(): string { return $this->hubUrl; } - public function category() { + public function category(): int { return $this->category; } public function entries() { @@ -76,22 +82,22 @@ public function entries() { $simplePie = $this->load(false, true); return $simplePie == null ? [] : iterator_to_array($this->loadEntries($simplePie)); } - public function name($raw = false) { + public function name($raw = false): string { return $raw || $this->name != '' ? $this->name : preg_replace('%^https?://(www[.])?%i', '', $this->url); } - public function website() { + public function website(): string { return $this->website; } - public function description() { + public function description(): string { return $this->description; } - public function lastUpdate() { + public function lastUpdate(): int { return $this->lastUpdate; } - public function priority() { + public function priority(): int { return $this->priority; } - public function pathEntries() { + public function pathEntries(): string { return $this->pathEntries; } public function httpAuth($raw = true) { @@ -108,10 +114,10 @@ public function httpAuth($raw = true) { ); } } - public function inError() { + public function inError(): bool { return $this->error; } - public function ttl() { + public function ttl(): int { return $this->ttl; } public function attributes($key = '') { @@ -121,7 +127,7 @@ public function attributes($key = '') { return isset($this->attributes[$key]) ? $this->attributes[$key] : null; } } - public function mute() { + public function mute(): bool { return $this->mute; } // public function ttlExpire() { @@ -134,7 +140,7 @@ public function mute() { // } // return $this->lastUpdate + $ttl; // } - public function nbEntries() { + public function nbEntries(): int { if ($this->nbEntries < 0) { $feedDAO = FreshRSS_Factory::createFeedDao(); $this->nbEntries = $feedDAO->countEntries($this->id()); @@ -142,7 +148,7 @@ public function nbEntries() { return $this->nbEntries; } - public function nbNotRead($includePending = false) { + public function nbNotRead($includePending = false): int { if ($this->nbNotRead < 0) { $feedDAO = FreshRSS_Factory::createFeedDao(); $this->nbNotRead = $feedDAO->countNotRead($this->id()); @@ -177,14 +183,14 @@ public static function faviconDelete($hash) { @unlink($path . '.ico'); @unlink($path . '.txt'); } - public function favicon() { + public function favicon(): string { return Minz_Url::display('/f.php?' . $this->hash()); } public function _id($value) { $this->id = intval($value); } - public function _url($value, $validate = true) { + public function _url(string $value, bool $validate = true) { $this->hash = null; if ($validate) { $value = checkUrl($value); @@ -198,10 +204,10 @@ public function _category($value) { $value = intval($value); $this->category = $value >= 0 ? $value : 0; } - public function _name($value) { - $this->name = $value === null ? '' : trim($value); + public function _name(string $value) { + $this->name = $value == '' ? '' : trim($value); } - public function _website($value, $validate = true) { + public function _website(string $value, bool $validate = true) { if ($validate) { $value = checkUrl($value); } @@ -210,8 +216,8 @@ public function _website($value, $validate = true) { } $this->website = $value; } - public function _description($value) { - $this->description = $value === null ? '' : $value; + public function _description(string $value) { + $this->description = $value == '' ? '' : $value; } public function _lastUpdate($value) { $this->lastUpdate = intval($value); @@ -219,10 +225,10 @@ public function _lastUpdate($value) { public function _priority($value) { $this->priority = intval($value); } - public function _pathEntries($value) { + public function _pathEntries(string $value) { $this->pathEntries = $value; } - public function _httpAuth($value) { + public function _httpAuth(string $value) { $this->httpAuth = $value; } public function _error($value) { @@ -235,7 +241,7 @@ public function _ttl($value) { $this->mute = $value < self::TTL_DEFAULT; } - public function _attributes($key, $value) { + public function _attributes(string $key, $value) { if ($key == '') { if (is_string($value)) { $value = json_decode($value, true); @@ -257,7 +263,10 @@ public function _nbEntries($value) { $this->nbEntries = intval($value); } - public function load($loadDetails = false, $noCache = false) { + /** + * @return SimplePie|null + */ + public function load(bool $loadDetails = false, bool $noCache = false) { if ($this->url !== null) { // @phpstan-ignore-next-line if (CACHE_PATH === false) { @@ -322,15 +331,17 @@ public function load($loadDetails = false, $noCache = false) { if (($mtime === true) || ($mtime > $this->lastUpdate) || $noCache) { //Minz_Log::debug('FreshRSS no cache ' . $mtime . ' > ' . $this->lastUpdate . ' for ' . $clean_url); return $simplePie; - } else { - //Minz_Log::debug('FreshRSS use cache for ' . $clean_url); - return null; } + //Minz_Log::debug('FreshRSS use cache for ' . $clean_url); } } + return null; } - public function loadGuids($simplePie) { + /** + * @return array + */ + public function loadGuids(SimplePie $simplePie) { $hasUniqueGuids = true; $testGuids = []; $guids = []; @@ -360,7 +371,7 @@ public function loadGuids($simplePie) { return $guids; } - public function loadEntries($simplePie) { + public function loadEntries(SimplePie $simplePie) { $hasBadGuids = $this->attributes('hasBadGuids'); // We want chronological order and SimplePie uses reverse order. @@ -481,7 +492,7 @@ public function loadEntries($simplePie) { /** * To keep track of some new potentially unread articles since last commit+fetch from database */ - public function incPendingUnread($n = 1) { + public function incPendingUnread(int $n = 1) { $this->nbPendingNotRead += $n; } @@ -521,13 +532,13 @@ public function cleanOldEntries() { return false; } - protected function cacheFilename() { + protected function cacheFilename(): string { $simplePie = customSimplePie($this->attributes()); $filename = $simplePie->get_cache_filename($this->url); return CACHE_PATH . '/' . $filename . '.spc'; } - public function clearCache() { + public function clearCache(): bool { return @unlink($this->cacheFilename()); } @@ -535,7 +546,7 @@ public function cacheModifiedTime() { return @filemtime($this->cacheFilename()); } - public function lock() { + public function lock(): bool { $this->lockPath = TMP_PATH . '/' . $this->hash() . '.freshrss.lock'; if (file_exists($this->lockPath) && ((time() - @filemtime($this->lockPath)) > 3600)) { @unlink($this->lockPath); @@ -548,11 +559,14 @@ public function lock() { return true; } - public function unlock() { - @unlink($this->lockPath); + public function unlock(): bool { + return @unlink($this->lockPath); } - public function filterActions() { + /** + * @return array + */ + public function filterActions(): array { if ($this->filterActions == null) { $this->filterActions = array(); $filters = $this->attributes('filters'); @@ -579,7 +593,7 @@ private function _filterActions($filterActions) { } } - public function filtersAction($action) { + public function filtersAction(string $action) { $action = trim($action); if ($action == '') { return array(); @@ -596,7 +610,7 @@ public function filtersAction($action) { return $filters; } - public function _filtersAction($action, $filters) { + public function _filtersAction(string $action, $filters) { $action = trim($action); if ($action == '' || !is_array($filters)) { return false; @@ -609,7 +623,7 @@ public function _filtersAction($action, $filters) { $filterAction = $filterActions[$i]; if ($filterAction == null || !is_array($filterAction->actions()) || $filterAction->booleanSearch() == null || trim($filterAction->booleanSearch()->getRawInput()) == '') { - array_splice($filterAction, $i, 1); + array_splice($filterActions, $i, 1); continue; } $actions = $filterAction->actions(); @@ -657,7 +671,7 @@ public function _filtersAction($action, $filters) { // - public function pubSubHubbubEnabled() { + public function pubSubHubbubEnabled(): bool { $url = $this->selfUrl ? $this->selfUrl : $this->url; $hubFilename = PSHB_PATH . '/feeds/' . base64url_encode($url) . '/!hub.json'; if ($hubFile = @file_get_contents($hubFilename)) { @@ -670,7 +684,7 @@ public function pubSubHubbubEnabled() { return false; } - public function pubSubHubbubError($error = true) { + public function pubSubHubbubError(bool $error = true): bool { $url = $this->selfUrl ? $this->selfUrl : $this->url; $hubFilename = PSHB_PATH . '/feeds/' . base64url_encode($url) . '/!hub.json'; $hubFile = @file_get_contents($hubFilename); @@ -683,6 +697,9 @@ public function pubSubHubbubError($error = true) { return false; } + /** + * @return string|false + */ public function pubSubHubbubPrepare() { $key = ''; if (Minz_Request::serverIsPublic(FreshRSS_Context::$system_conf->base_url) && @@ -731,7 +748,7 @@ public function pubSubHubbubPrepare() { } //Parameter true to subscribe, false to unsubscribe. - public function pubSubHubbubSubscribe($state) { + public function pubSubHubbubSubscribe(bool $state): bool { if ($state) { $url = $this->selfUrl ? $this->selfUrl : $this->url; } else { diff --git a/app/Models/FeedDAO.php b/app/Models/FeedDAO.php index 90a60de4fec..ab73b2ec243 100644 --- a/app/Models/FeedDAO.php +++ b/app/Models/FeedDAO.php @@ -2,7 +2,7 @@ class FreshRSS_FeedDAO extends Minz_ModelPdo implements FreshRSS_Searchable { - protected function addColumn($name) { + protected function addColumn(string $name) { Minz_Log::warning(__method__ . ': ' . $name); try { if ($name === 'attributes') { //v1.11.0 @@ -14,7 +14,7 @@ protected function addColumn($name) { return false; } - protected function autoUpdateDb($errorInfo) { + protected function autoUpdateDb(array $errorInfo) { if (isset($errorInfo[0])) { if ($errorInfo[0] === FreshRSS_DatabaseDAO::ER_BAD_FIELD_ERROR || $errorInfo[0] === FreshRSS_DatabaseDAOPGSQL::UNDEFINED_COLUMN) { foreach (['attributes'] as $column) { @@ -27,7 +27,7 @@ protected function autoUpdateDb($errorInfo) { return false; } - public function addFeed($valuesTmp) { + public function addFeed(array $valuesTmp) { $sql = ' INSERT INTO `_feed` ( @@ -84,7 +84,7 @@ public function addFeed($valuesTmp) { } } - public function addFeedObject($feed) { + public function addFeedObject($feed): int { // TODO: not sure if we should write this method in DAO since DAO // should not be aware about feed class @@ -120,7 +120,7 @@ public function addFeedObject($feed) { return $feed_search->id(); } - public function updateFeed($id, $valuesTmp) { + public function updateFeed(int $id, array $valuesTmp) { if (isset($valuesTmp['name'])) { $valuesTmp['name'] = mb_strcut(trim($valuesTmp['name']), 0, FreshRSS_DatabaseDAO::LENGTH_INDEX_UNICODE, 'UTF-8'); } @@ -163,21 +163,18 @@ public function updateFeed($id, $valuesTmp) { } } - public function updateFeedAttribute($feed, $key, $value) { - if ($feed instanceof FreshRSS_Feed) { - $feed->_attributes($key, $value); - return $this->updateFeed( - $feed->id(), - array('attributes' => $feed->attributes()) - ); - } - return false; + public function updateFeedAttribute(FreshRSS_Feed $feed, string $key, $value) { + $feed->_attributes($key, $value); + return $this->updateFeed( + $feed->id(), + array('attributes' => $feed->attributes()) + ); } /** * @see updateCachedValue() */ - public function updateLastUpdate($id, $inError = false, $mtime = 0) { + public function updateLastUpdate(int $id, bool $inError = false, int $mtime = 0) { $sql = 'UPDATE `_feed` SET `lastUpdate`=?, error=? WHERE id=?'; $values = array( $mtime <= 0 ? time() : $mtime, @@ -195,12 +192,12 @@ public function updateLastUpdate($id, $inError = false, $mtime = 0) { } } - public function mute($id, $value = true) { + public function mute(int $id, bool $value = true) { $sql = 'UPDATE `_feed` SET ttl=' . ($value ? '-' : '') . 'ABS(ttl) WHERE id=' . intval($id); return $this->pdo->exec($sql); } - public function changeCategory($idOldCat, $idNewCat) { + public function changeCategory(int $idOldCat, int $idNewCat) { $catDAO = FreshRSS_Factory::createCategoryDao(); $newCat = $catDAO->searchById($idNewCat); if (!$newCat) { @@ -224,7 +221,7 @@ public function changeCategory($idOldCat, $idNewCat) { } } - public function deleteFeed($id) { + public function deleteFeed(int $id) { $sql = 'DELETE FROM `_feed` WHERE id=?'; $stm = $this->pdo->prepare($sql); @@ -238,7 +235,7 @@ public function deleteFeed($id) { return false; } } - public function deleteFeedByCategory($id) { + public function deleteFeedByCategory(int $id) { $sql = 'DELETE FROM `_feed` WHERE category=?'; $stm = $this->pdo->prepare($sql); @@ -265,6 +262,9 @@ public function selectAll() { } } + /** + * @return FreshRSS_Feed|null + */ public function searchById($id) { $sql = 'SELECT * FROM `_feed` WHERE id=:id'; $stm = $this->pdo->prepare($sql); @@ -272,14 +272,13 @@ public function searchById($id) { $stm->execute(); $res = $stm->fetchAll(PDO::FETCH_ASSOC); $feed = self::daoToFeed($res); - - if (isset($feed[$id])) { - return $feed[$id]; - } else { - return null; - } + return $feed[$id] ?? null; } - public function searchByUrl($url) { + + /** + * @return FreshRSS_Feed|null + */ + public function searchByUrl(string $url) { $sql = 'SELECT * FROM `_feed` WHERE url=?'; $stm = $this->pdo->prepare($sql); @@ -288,21 +287,19 @@ public function searchByUrl($url) { $stm->execute($values); $res = $stm->fetchAll(PDO::FETCH_ASSOC); $feed = current(self::daoToFeed($res)); - - if (isset($feed) && $feed !== false) { - return $feed; - } else { - return null; - } + return $feed == false ? null : $feed; } - public function listFeedsIds() { + public function listFeedsIds(): array { $sql = 'SELECT id FROM `_feed`'; $stm = $this->pdo->query($sql); return $stm->fetchAll(PDO::FETCH_COLUMN, 0); } - public function listFeeds() { + /** + * @return array + */ + public function listFeeds(): array { $sql = 'SELECT * FROM `_feed` ORDER BY name'; $stm = $this->pdo->query($sql); return self::daoToFeed($stm->fetchAll(PDO::FETCH_ASSOC)); @@ -327,7 +324,7 @@ public function listFeedsNewestItemUsec($id_feed = null) { /** * For API */ - public function arrayFeedCategoryNames() { + public function arrayFeedCategoryNames(): array { $sql = <<<'SQL' SELECT f.id, f.name, c.name as c_name FROM `_feed` f INNER JOIN `_category` c ON c.id = f.category @@ -347,7 +344,7 @@ public function arrayFeedCategoryNames() { /** * Use $defaultCacheDuration == -1 to return all feeds, without filtering them by TTL. */ - public function listFeedsOrderUpdate($defaultCacheDuration = 3600, $limit = 0) { + public function listFeedsOrderUpdate(int $defaultCacheDuration = 3600, int $limit = 0) { $this->updateTTL(); $sql = 'SELECT id, url, name, website, `lastUpdate`, `pathEntries`, `httpAuth`, ttl, attributes ' . 'FROM `_feed` ' @@ -369,7 +366,7 @@ public function listFeedsOrderUpdate($defaultCacheDuration = 3600, $limit = 0) { } } - public function listTitles($id, $limit = null) { + public function listTitles(int $id, int $limit = 0) { $sql = 'SELECT title FROM `_entry` WHERE id_feed=:id_feed ORDER BY id DESC' . ($limit < 1 ? '' : ' LIMIT ' . intval($limit)); @@ -382,7 +379,7 @@ public function listTitles($id, $limit = null) { return false; } - public function listByCategory($cat) { + public function listByCategory(int $cat): array { $sql = 'SELECT * FROM `_feed` WHERE category=?'; $stm = $this->pdo->prepare($sql); @@ -397,7 +394,7 @@ public function listByCategory($cat) { return $feeds; } - public function countEntries($id) { + public function countEntries(int $id) { $sql = 'SELECT COUNT(*) AS count FROM `_entry` WHERE id_feed=?'; $stm = $this->pdo->prepare($sql); $values = array($id); @@ -407,7 +404,7 @@ public function countEntries($id) { return $res[0]['count']; } - public function countNotRead($id) { + public function countNotRead(int $id) { $sql = 'SELECT COUNT(*) AS count FROM `_entry` WHERE id_feed=? AND is_read=0'; $stm = $this->pdo->prepare($sql); $values = array($id); @@ -417,14 +414,17 @@ public function countNotRead($id) { return $res[0]['count']; } - public function updateCachedValues($id = null) { + /** + * @return int|false + */ + public function updateCachedValues(int $id = 0) { //2 sub-requests with FOREIGN KEY(e.id_feed), INDEX(e.is_read) faster than 1 request with GROUP BY or CASE $sql = 'UPDATE `_feed` ' . 'SET `cache_nbEntries`=(SELECT COUNT(e1.id) FROM `_entry` e1 WHERE e1.id_feed=`_feed`.id),' . '`cache_nbUnreads`=(SELECT COUNT(e2.id) FROM `_entry` e2 WHERE e2.id_feed=`_feed`.id AND e2.is_read=0)' - . ($id != null ? ' WHERE id=:id' : ''); + . ($id != 0 ? ' WHERE id=:id' : ''); $stm = $this->pdo->prepare($sql); - if ($id != null) { + if ($id != 0) { $stm->bindParam(':id', $id, PDO::PARAM_INT); } @@ -437,7 +437,10 @@ public function updateCachedValues($id = null) { } } - public function keepMaxUnread($id, $n) { + /** + * @return int|false + */ + public function keepMaxUnread(int $id, int $n) { //Double SELECT for MySQL workaround ERROR 1093 (HY000) $sql = <<<'SQL' UPDATE `_entry` SET is_read=1 @@ -477,7 +480,10 @@ public function keepMaxUnread($id, $n) { return $affected; } - public function truncate($id) { + /** + * @return int|false + */ + public function truncate(int $id) { $sql = 'DELETE FROM `_entry` WHERE id_feed=:id'; $stm = $this->pdo->prepare($sql); $stm->bindParam(':id', $id, PDO::PARAM_INT); @@ -528,7 +534,10 @@ public function purge() { $this->pdo->commit(); } - public static function daoToFeed($listDAO, $catID = null) { + /** + * @return array + */ + public static function daoToFeed($listDAO, $catID = null): array { $list = array(); if (!is_array($listDAO)) { @@ -589,6 +598,9 @@ public function updateTTL() { } } + /** + * @return int|false + */ public function count() { $sql = 'SELECT COUNT(e.id) AS count FROM `_feed` e'; $stm = $this->pdo->query($sql); diff --git a/app/Models/FeedDAOSQLite.php b/app/Models/FeedDAOSQLite.php index 397b6994174..54146858b17 100644 --- a/app/Models/FeedDAOSQLite.php +++ b/app/Models/FeedDAOSQLite.php @@ -2,7 +2,7 @@ class FreshRSS_FeedDAOSQLite extends FreshRSS_FeedDAO { - protected function autoUpdateDb($errorInfo) { + protected function autoUpdateDb(array $errorInfo) { if ($tableInfo = $this->pdo->query("PRAGMA table_info('feed')")) { $columns = $tableInfo->fetchAll(PDO::FETCH_COLUMN, 1); foreach (['attributes'] as $column) { diff --git a/app/Models/Tag.php b/app/Models/Tag.php index 199e03b8598..589648e26ba 100644 --- a/app/Models/Tag.php +++ b/app/Models/Tag.php @@ -1,6 +1,9 @@ pdo->query("SELECT sql FROM sqlite_master where name='tag'")) { $showCreate = $tableInfo->fetchColumn(); if (stripos($showCreate, 'tag') === false) { diff --git a/app/Services/ImportService.php b/app/Services/ImportService.php index f995a3dd7f7..7d1bb1c7c1d 100644 --- a/app/Services/ImportService.php +++ b/app/Services/ImportService.php @@ -154,7 +154,7 @@ private function addFeedOpml($feed_elt, $parent_cat) { // addFeedObject checks if feed is already in DB so nothing else to // check here $id = $this->feedDAO->addFeedObject($feed); - $error = ($id === false); + $error = ($id == false); } else { $error = true; } diff --git a/lib/lib_rss.php b/lib/lib_rss.php index 5b335e8d8a7..b608743f3de 100644 --- a/lib/lib_rss.php +++ b/lib/lib_rss.php @@ -193,11 +193,7 @@ function timestamptodate ($t, $hour = true) { return @date ($date, $t); } -/** - * @param string $text - * @return string - */ -function html_only_entity_decode($text) { +function html_only_entity_decode(string $text): string { static $htmlEntitiesOnly = null; if ($htmlEntitiesOnly === null) { $htmlEntitiesOnly = array_flip(array_diff( @@ -210,9 +206,8 @@ function html_only_entity_decode($text) { /** * @param array $attributes - * @return SimplePie */ -function customSimplePie($attributes = array()) { +function customSimplePie($attributes = array()): SimplePie { $limits = FreshRSS_Context::$system_conf->limits; $simplePie = new SimplePie(); $simplePie->set_useragent(FRESHRSS_USERAGENT); diff --git a/p/api/fever.php b/p/api/fever.php index ca8d574d404..618df4fbf17 100644 --- a/p/api/fever.php +++ b/p/api/fever.php @@ -63,13 +63,7 @@ function debugInfo() { class FeverDAO extends Minz_ModelPdo { - /** - * @param string $prefix - * @param array $values - * @param array $bindArray - * @return string - */ - protected function bindParamArray($prefix, $values, &$bindArray) { + protected function bindParamArray(string $prefix, array $values, array &$bindArray): string { $str = ''; for ($i = 0; $i < count($values); $i++) { $str .= ':' . $prefix . $i . ','; @@ -79,13 +73,9 @@ protected function bindParamArray($prefix, $values, &$bindArray) { } /** - * @param array $feed_ids - * @param array $entry_ids - * @param int|null $max_id - * @param int|null $since_id * @return FreshRSS_Entry[] */ - public function findEntries(array $feed_ids, array $entry_ids, $max_id, $since_id) { + public function findEntries(array $feed_ids, array $entry_ids, string $max_id, string $since_id) { $values = array(); $order = ''; $entryDAO = FreshRSS_Factory::createEntryDao(); @@ -98,11 +88,11 @@ public function findEntries(array $feed_ids, array $entry_ids, $max_id, $since_i if (!empty($entry_ids)) { $bindEntryIds = $this->bindParamArray('id', $entry_ids, $values); $sql .= " id IN($bindEntryIds)"; - } elseif ($max_id != null) { + } elseif ($max_id != '') { $sql .= ' id < :id'; $values[':id'] = $max_id; $order = ' ORDER BY id DESC'; - } elseif ($since_id != null) { + } elseif ($since_id != '') { $sql .= ' id > :id'; $values[':id'] = $since_id; $order = ' ORDER BY id ASC'; @@ -149,7 +139,7 @@ class FeverAPI * API Password sent from client is the result of the md5 sum of * your FreshRSS "username:your-api-password" combination */ - private function authenticate() { + private function authenticate(): bool { FreshRSS_Context::$user_conf = null; Minz_Session::_param('currentUser'); $feverKey = empty($_POST['api_key']) ? '' : substr(trim($_POST['api_key']), 0, 128); @@ -176,10 +166,7 @@ private function authenticate() { return false; } - /** - * @return bool - */ - public function isAuthenticatedApiUser() { + public function isAuthenticatedApiUser(): bool { $this->authenticate(); if (FreshRSS_Context::$user_conf !== null) { @@ -191,11 +178,9 @@ public function isAuthenticatedApiUser() { /** * This does all the processing, since the fever api does not have a specific variable that specifies the operation - * - * @return array * @throws Exception */ - public function process() { + public function process(): array { $response_arr = array(); if (!$this->isAuthenticatedApiUser()) { @@ -247,7 +232,7 @@ public function process() { break; case 'feed': case 'group': - $before = isset($_REQUEST['before']) ? $_REQUEST['before'] : null; + $before = $_REQUEST['before'] ?? ''; $this->{$method_name}($id, $before); break; } @@ -271,12 +256,8 @@ public function process() { /** * Returns the complete JSON, with 'api_version' and status as 'auth'. - * - * @param int $status - * @param array $reply - * @return string */ - public function wrap($status, array $reply = array()) { + public function wrap(int $status, array $reply = array()): string { $arr = array('api_version' => self::API_LEVEL, 'auth' => $status); if ($status === self::STATUS_OK) { @@ -289,10 +270,8 @@ public function wrap($status, array $reply = array()) { /** * every authenticated method includes last_refreshed_on_time - * - * @return int */ - protected function lastRefreshedOnTime() { + protected function lastRefreshedOnTime(): int { $lastUpdate = 0; $entries = $this->feedDAO->listFeedsOrderUpdate(-1, 1); @@ -305,10 +284,7 @@ protected function lastRefreshedOnTime() { return $lastUpdate; } - /** - * @return array - */ - protected function getFeeds() { + protected function getFeeds(): array { $feeds = array(); $myFeeds = $this->feedDAO->listFeeds(); @@ -328,10 +304,7 @@ protected function getFeeds() { return $feeds; } - /** - * @return array - */ - protected function getGroups() { + protected function getGroups(): array { $groups = array(); $categoryDAO = FreshRSS_Factory::createCategoryDao(); @@ -348,10 +321,7 @@ protected function getGroups() { return $groups; } - /** - * @return array - */ - protected function getFavicons() { + protected function getFavicons(): array { $favicons = array(); $salt = FreshRSS_Context::$system_conf->salt; $myFeeds = $this->feedDAO->listFeeds(); @@ -381,10 +351,7 @@ protected function getTotalItems() { return $this->entryDAO->count(); } - /** - * @return array - */ - protected function getFeedsGroup() { + protected function getFeedsGroup(): array { $groups = array(); $ids = array(); $myFeeds = $this->feedDAO->listFeeds(); @@ -406,24 +373,19 @@ protected function getFeedsGroup() { /** * AFAIK there is no 'hot links' alternative in FreshRSS - * @return array */ - protected function getLinks() { + protected function getLinks(): array { return array(); } /** * @param array $ids - * @return string */ - protected function entriesToIdList($ids = array()) { + protected function entriesToIdList(array $ids = array()): string { return implode(',', array_values($ids)); } - /** - * @return string - */ - protected function getUnreadItemIds() { + protected function getUnreadItemIds(): string { $entries = $this->entryDAO->listIdsWhere('a', '', FreshRSS_Entry::STATE_NOT_READ, 'ASC', 0); return $this->entriesToIdList($entries); } @@ -436,30 +398,39 @@ protected function getSavedItemIds() { return $this->entriesToIdList($entries); } + /** + * @return integer|false + */ protected function setItemAsRead($id) { return $this->entryDAO->markRead($id, true); } + /** + * @return integer|false + */ protected function setItemAsUnread($id) { return $this->entryDAO->markRead($id, false); } + /** + * @return integer|false + */ protected function setItemAsSaved($id) { return $this->entryDAO->markFavorite($id, true); } + /** + * @return integer|false + */ protected function setItemAsUnsaved($id) { return $this->entryDAO->markFavorite($id, false); } - /** - * @return array - */ - protected function getItems() { + protected function getItems(): array { $feed_ids = array(); $entry_ids = array(); - $max_id = null; - $since_id = null; + $max_id = ''; + $since_id = ''; if (isset($_REQUEST['feed_ids']) || isset($_REQUEST['group_ids'])) { if (isset($_REQUEST['feed_ids'])) { @@ -485,12 +456,18 @@ protected function getItems() { if (isset($_REQUEST['max_id'])) { // use the max_id argument to request the previous $item_limit items - $max_id = ctype_digit('' . $_REQUEST['max_id']) ? intval($_REQUEST['max_id']) : null; + $max_id = '' . $_REQUEST['max_id']; + if (!ctype_digit($max_id)) { + $max_id = ''; + } } elseif (isset($_REQUEST['with_ids'])) { $entry_ids = explode(',', $_REQUEST['with_ids']); } elseif (isset($_REQUEST['since_id'])) { // use the since_id argument to request the next $item_limit items - $since_id = ctype_digit('' . $_REQUEST['since_id']) ? intval($_REQUEST['since_id']) : null; + $since_id = '' . $_REQUEST['since_id']; + if (!ctype_digit($since_id)) { + $since_id = ''; + } } $items = array(); @@ -526,23 +503,29 @@ protected function getItems() { /** * TODO replace by a dynamic fetch for id <= $before timestamp * - * @param int $beforeTimestamp - * @return int + * @param int|string $beforeTimestamp + * @return string */ - protected function convertBeforeToId($beforeTimestamp) { - return $beforeTimestamp == 0 ? 0 : $beforeTimestamp . '000000'; + protected function convertBeforeToId($beforeTimestamp): string { + return $beforeTimestamp == '0' ? '0' : $beforeTimestamp . '000000'; } - protected function setFeedAsRead($id, $before) { + /** + * @return integer|false + */ + protected function setFeedAsRead(string $id, string $before) { $before = $this->convertBeforeToId($before); return $this->entryDAO->markReadFeed($id, $before); } - protected function setGroupAsRead($id, $before) { + /** + * @return integer|false + */ + protected function setGroupAsRead(string $id, string $before) { $before = $this->convertBeforeToId($before); // special case to mark all items as read - if ($id == 0) { + if ($id == '0') { return $this->entryDAO->markReadEntries($before); } From dfee46792f91cc357f697f35e7429c0c196f6a16 Mon Sep 17 00:00:00 2001 From: maTh Date: Sun, 6 Feb 2022 17:29:56 +0100 Subject: [PATCH 0165/2479] Improved: "Pagination" + load more button (#4125) * Frontend changes done * Load more should work now also without JS * Update template.rtl.css * improved the themes' CSS * Update template.rtl.css * fix CI * CSS prop. order fixed * Rename pagination.phtml to stream-footer.phtml * use the new template name * rename key of i18n * fixed CI, that does not like the white space * rename pagination variable * Update indexController.php --- app/Controllers/indexController.php | 4 ++-- app/i18n/cz/gen.php | 8 ++++--- app/i18n/de/gen.php | 8 ++++--- app/i18n/en-us/gen.php | 8 ++++--- app/i18n/en/gen.php | 8 ++++--- app/i18n/es/gen.php | 8 ++++--- app/i18n/fr/gen.php | 8 ++++--- app/i18n/he/gen.php | 8 ++++--- app/i18n/it/gen.php | 8 ++++--- app/i18n/ja/gen.php | 8 ++++--- app/i18n/ko/gen.php | 8 ++++--- app/i18n/nl/gen.php | 8 ++++--- app/i18n/oc/gen.php | 8 ++++--- app/i18n/pl/gen.php | 8 ++++--- app/i18n/pt-br/gen.php | 8 ++++--- app/i18n/ru/gen.php | 8 ++++--- app/i18n/sk/gen.php | 8 ++++--- app/i18n/tr/gen.php | 8 ++++--- app/i18n/zh-cn/gen.php | 8 ++++--- .../{pagination.phtml => stream-footer.phtml} | 22 +++++++---------- app/views/index/normal.phtml | 2 +- app/views/index/reader.phtml | 2 +- p/scripts/global_view.js | 2 +- p/scripts/main.js | 24 +++++++++---------- p/themes/Alternative-Dark/adark.css | 6 ----- p/themes/Alternative-Dark/adark.rtl.css | 6 ----- p/themes/Ansum/_components.scss | 9 ++++--- p/themes/Ansum/ansum.css | 5 ++-- p/themes/Ansum/ansum.rtl.css | 5 ++-- p/themes/BlueLagoon/BlueLagoon.css | 7 ------ p/themes/BlueLagoon/BlueLagoon.rtl.css | 7 ------ p/themes/Dark/dark.css | 5 ++-- p/themes/Dark/dark.rtl.css | 5 ++-- p/themes/Flat/flat.css | 5 ++-- p/themes/Flat/flat.rtl.css | 5 ++-- p/themes/Mapco/_components.scss | 10 ++++---- p/themes/Mapco/mapco.css | 5 ++-- p/themes/Mapco/mapco.rtl.css | 5 ++-- p/themes/Origine-compact/origine-compact.css | 6 ----- .../Origine-compact/origine-compact.rtl.css | 6 ----- p/themes/Origine/origine.css | 6 ----- p/themes/Origine/origine.rtl.css | 6 ----- p/themes/Pafat/pafat.css | 6 ----- p/themes/Pafat/pafat.rtl.css | 6 ----- p/themes/Screwdriver/screwdriver.css | 6 ----- p/themes/Screwdriver/screwdriver.rtl.css | 6 ----- p/themes/Swage/swage.css | 6 ++--- p/themes/Swage/swage.rtl.css | 6 ++--- p/themes/Swage/swage.scss | 10 ++++---- p/themes/base-theme/base.css | 4 ++-- p/themes/base-theme/base.rtl.css | 4 ++-- p/themes/base-theme/template.css | 17 +++++++++++++ p/themes/base-theme/template.rtl.css | 17 +++++++++++++ 53 files changed, 190 insertions(+), 207 deletions(-) rename app/views/helpers/{pagination.phtml => stream-footer.phtml} (73%) diff --git a/app/Controllers/indexController.php b/app/Controllers/indexController.php index 8ec5bdb27ff..0fc7bb61aeb 100755 --- a/app/Controllers/indexController.php +++ b/app/Controllers/indexController.php @@ -65,7 +65,7 @@ public function normalAction() { $this->view->callbackBeforeEntries = function ($view) { try { - FreshRSS_Context::$number++; //+1 for pagination + FreshRSS_Context::$number++; //+1 for articles' page $view->entries = FreshRSS_index_Controller::listEntriesByContext(); FreshRSS_Context::$number--; ob_start(); //Buffer "one entry at a time" @@ -77,7 +77,7 @@ public function normalAction() { $this->view->callbackBeforePagination = function ($view, $nbEntries, $lastEntry) { if ($nbEntries >= FreshRSS_Context::$number) { - //We have enough entries: we discard the last one to use it for the next pagination + //We have enough entries: we discard the last one to use it for the next articles' page ob_clean(); FreshRSS_Context::$next_id = $lastEntry->id(); } diff --git a/app/i18n/cz/gen.php b/app/i18n/cz/gen.php index c4b9a22a469..70a82d77657 100644 --- a/app/i18n/cz/gen.php +++ b/app/i18n/cz/gen.php @@ -179,10 +179,7 @@ 'pagination' => array( 'first' => 'První', 'last' => 'Poslední', - 'load_more' => 'Načíst více článků', - 'mark_all_read' => 'Označit vše jako přečtené', 'next' => 'Další', - 'nothing_to_load' => 'Nejsou zde žádné další články', 'previous' => 'Předchozí', ), 'period' => array( @@ -227,4 +224,9 @@ 'or' => 'nebo', 'yes' => 'Ano', ), + 'stream' => array( + 'load_more' => 'Načíst více článků', + 'mark_all_read' => 'Označit vše jako přečtené', + 'nothing_to_load' => 'Nejsou zde žádné další články', + ), ); diff --git a/app/i18n/de/gen.php b/app/i18n/de/gen.php index 2023ce93d30..7808e99e76e 100644 --- a/app/i18n/de/gen.php +++ b/app/i18n/de/gen.php @@ -179,10 +179,7 @@ 'pagination' => array( 'first' => 'Erste', 'last' => 'Letzte', - 'load_more' => 'Weitere Artikel laden', - 'mark_all_read' => 'Alle als gelesen markieren', 'next' => 'Nächste', - 'nothing_to_load' => 'Es gibt keine weiteren Artikel', 'previous' => 'Vorherige', ), 'period' => array( @@ -227,4 +224,9 @@ 'or' => 'oder', 'yes' => 'Ja', ), + 'stream' => array( + 'load_more' => 'Weitere Artikel laden', + 'mark_all_read' => 'Alle als gelesen markieren', + 'nothing_to_load' => 'Es gibt keine weiteren Artikel', + ), ); diff --git a/app/i18n/en-us/gen.php b/app/i18n/en-us/gen.php index 6a7a26e8183..ea05cfb2017 100644 --- a/app/i18n/en-us/gen.php +++ b/app/i18n/en-us/gen.php @@ -179,10 +179,7 @@ 'pagination' => array( 'first' => 'First', // IGNORE 'last' => 'Last', // IGNORE - 'load_more' => 'Load more articles', // IGNORE - 'mark_all_read' => 'Mark all as read', // IGNORE 'next' => 'Next', // IGNORE - 'nothing_to_load' => 'There are no more articles', // IGNORE 'previous' => 'Previous', // IGNORE ), 'period' => array( @@ -227,4 +224,9 @@ 'or' => 'or', // IGNORE 'yes' => 'Yes', // IGNORE ), + 'stream' => array( + 'load_more' => 'Load more articles', // IGNORE + 'mark_all_read' => 'Mark all as read', // IGNORE + 'nothing_to_load' => 'There are no more articles', // IGNORE + ), ); diff --git a/app/i18n/en/gen.php b/app/i18n/en/gen.php index 4343f1485a0..ae09a83dd88 100644 --- a/app/i18n/en/gen.php +++ b/app/i18n/en/gen.php @@ -179,10 +179,7 @@ 'pagination' => array( 'first' => 'First', 'last' => 'Last', - 'load_more' => 'Load more articles', - 'mark_all_read' => 'Mark all as read', 'next' => 'Next', - 'nothing_to_load' => 'There are no more articles', 'previous' => 'Previous', ), 'period' => array( @@ -227,4 +224,9 @@ 'or' => 'or', 'yes' => 'Yes', ), + 'stream' => array( + 'load_more' => 'Load more articles', + 'mark_all_read' => 'Mark all as read', + 'nothing_to_load' => 'There are no more articles', + ), ); diff --git a/app/i18n/es/gen.php b/app/i18n/es/gen.php index 2f2adad4911..b4a3bacbc99 100755 --- a/app/i18n/es/gen.php +++ b/app/i18n/es/gen.php @@ -179,10 +179,7 @@ 'pagination' => array( 'first' => 'Primero', 'last' => 'Último', - 'load_more' => 'Cargar más artículos', - 'mark_all_read' => 'Marcar todo como leído', 'next' => 'Siguiente', - 'nothing_to_load' => 'No hay más artículos', 'previous' => 'Anterior', ), 'period' => array( @@ -227,4 +224,9 @@ 'or' => 'o', 'yes' => 'Sí', ), + 'stream' => array( + 'load_more' => 'Cargar más artículos', + 'mark_all_read' => 'Marcar todo como leído', + 'nothing_to_load' => 'No hay más artículos', + ), ); diff --git a/app/i18n/fr/gen.php b/app/i18n/fr/gen.php index 04c5b0a76c9..da10f21fdac 100644 --- a/app/i18n/fr/gen.php +++ b/app/i18n/fr/gen.php @@ -179,10 +179,7 @@ 'pagination' => array( 'first' => 'Début', 'last' => 'Fin', - 'load_more' => 'Charger plus d’articles', - 'mark_all_read' => 'Tout marquer comme lu', 'next' => 'Suivant', - 'nothing_to_load' => 'Fin des articles', 'previous' => 'Précédent', ), 'period' => array( @@ -227,4 +224,9 @@ 'or' => 'ou', 'yes' => 'Oui', ), + 'stream' => array( + 'load_more' => 'Charger plus d’articles', + 'mark_all_read' => 'Tout marquer comme lu', + 'nothing_to_load' => 'Fin des articles', + ), ); diff --git a/app/i18n/he/gen.php b/app/i18n/he/gen.php index f24c51f0049..906ced7a04e 100644 --- a/app/i18n/he/gen.php +++ b/app/i18n/he/gen.php @@ -179,10 +179,7 @@ 'pagination' => array( 'first' => 'הראשון', 'last' => 'אחרון', - 'load_more' => 'טעינת מאמרים נוספים', - 'mark_all_read' => 'סימון הכל כנקרא', 'next' => 'הבא', - 'nothing_to_load' => 'אין מאמרים נוספים', 'previous' => 'הקודם', ), 'period' => array( @@ -227,4 +224,9 @@ 'or' => 'או', 'yes' => 'כן', ), + 'stream' => array( + 'load_more' => 'טעינת מאמרים נוספים', + 'mark_all_read' => 'סימון הכל כנקרא', + 'nothing_to_load' => 'אין מאמרים נוספים', + ), ); diff --git a/app/i18n/it/gen.php b/app/i18n/it/gen.php index d6361c45df7..f3d237621e6 100644 --- a/app/i18n/it/gen.php +++ b/app/i18n/it/gen.php @@ -179,10 +179,7 @@ 'pagination' => array( 'first' => 'Prima', 'last' => 'Ultima', - 'load_more' => 'Carica altri articoli', - 'mark_all_read' => 'Segna tutto come letto', 'next' => 'Successiva', - 'nothing_to_load' => 'Non ci sono altri articoli', 'previous' => 'Precedente', ), 'period' => array( @@ -227,4 +224,9 @@ 'or' => 'o', 'yes' => 'Si', ), + 'stream' => array( + 'load_more' => 'Carica altri articoli', + 'mark_all_read' => 'Segna tutto come letto', + 'nothing_to_load' => 'Non ci sono altri articoli', + ), ); diff --git a/app/i18n/ja/gen.php b/app/i18n/ja/gen.php index fac7c3ad2de..a2efd0e5c74 100644 --- a/app/i18n/ja/gen.php +++ b/app/i18n/ja/gen.php @@ -179,10 +179,7 @@ 'pagination' => array( 'first' => '先頭', 'last' => '最後', - 'load_more' => '記事をもっと読み込む', - 'mark_all_read' => 'すべての記事を既読にする', 'next' => 'つぎへ', - 'nothing_to_load' => 'これ以上の記事はありません', 'previous' => '前へ', ), 'period' => array( @@ -227,4 +224,9 @@ 'or' => 'または', 'yes' => 'OK', ), + 'stream' => array( + 'load_more' => '記事をもっと読み込む', + 'mark_all_read' => 'すべての記事を既読にする', + 'nothing_to_load' => 'これ以上の記事はありません', + ), ); diff --git a/app/i18n/ko/gen.php b/app/i18n/ko/gen.php index 1599f602d84..e41f161e183 100644 --- a/app/i18n/ko/gen.php +++ b/app/i18n/ko/gen.php @@ -179,10 +179,7 @@ 'pagination' => array( 'first' => '처음으로', 'last' => '마지막으로', - 'load_more' => '글 더 불러오기', - 'mark_all_read' => '모두 읽음으로 표시', 'next' => '다음', - 'nothing_to_load' => '더 이상 글이 없습니다', 'previous' => '이전', ), 'period' => array( @@ -227,4 +224,9 @@ 'or' => '또는', 'yes' => '네', ), + 'stream' => array( + 'load_more' => '글 더 불러오기', + 'mark_all_read' => '모두 읽음으로 표시', + 'nothing_to_load' => '더 이상 글이 없습니다', + ), ); diff --git a/app/i18n/nl/gen.php b/app/i18n/nl/gen.php index 2f20a0cd011..1e50d3dbda1 100644 --- a/app/i18n/nl/gen.php +++ b/app/i18n/nl/gen.php @@ -179,10 +179,7 @@ 'pagination' => array( 'first' => 'Eerste', 'last' => 'Laatste', - 'load_more' => 'Laad meer artikelen', - 'mark_all_read' => 'Markeer alle als gelezen', 'next' => 'Volgende', - 'nothing_to_load' => 'Er zijn geen artikelen meer', 'previous' => 'Vorige', ), 'period' => array( @@ -227,4 +224,9 @@ 'or' => 'of', 'yes' => 'Ja', ), + 'stream' => array( + 'load_more' => 'Laad meer artikelen', + 'mark_all_read' => 'Markeer alle als gelezen', + 'nothing_to_load' => 'Er zijn geen artikelen meer', + ), ); diff --git a/app/i18n/oc/gen.php b/app/i18n/oc/gen.php index edd7b385023..b1fe438acda 100644 --- a/app/i18n/oc/gen.php +++ b/app/i18n/oc/gen.php @@ -179,10 +179,7 @@ 'pagination' => array( 'first' => 'Debuta', 'last' => 'Fin', - 'load_more' => 'Cargar mai d’articles', - 'mark_all_read' => 'O marcar tot coma legit', 'next' => 'Seguent', - 'nothing_to_load' => 'I a pas mai d’articles', 'previous' => 'Precedent', ), 'period' => array( @@ -227,4 +224,9 @@ 'or' => 'o', 'yes' => 'Òc', ), + 'stream' => array( + 'load_more' => 'Cargar mai d’articles', + 'mark_all_read' => 'O marcar tot coma legit', + 'nothing_to_load' => 'I a pas mai d’articles', + ), ); diff --git a/app/i18n/pl/gen.php b/app/i18n/pl/gen.php index e6dd0cbaa83..3534780a849 100644 --- a/app/i18n/pl/gen.php +++ b/app/i18n/pl/gen.php @@ -179,10 +179,7 @@ 'pagination' => array( 'first' => 'Początek', 'last' => 'Koniec', - 'load_more' => 'Załaduj więcej wiadomości', - 'mark_all_read' => 'Oznacz wszystkie jako przeczytane', 'next' => 'Następne', - 'nothing_to_load' => 'Koniec listy wiadomości', 'previous' => 'Poprzednie', ), 'period' => array( @@ -227,4 +224,9 @@ 'or' => 'lub', 'yes' => 'Tak', ), + 'stream' => array( + 'load_more' => 'Załaduj więcej wiadomości', + 'mark_all_read' => 'Oznacz wszystkie jako przeczytane', + 'nothing_to_load' => 'Koniec listy wiadomości', + ), ); diff --git a/app/i18n/pt-br/gen.php b/app/i18n/pt-br/gen.php index cc3b6df0f39..0e30634b6d9 100644 --- a/app/i18n/pt-br/gen.php +++ b/app/i18n/pt-br/gen.php @@ -179,10 +179,7 @@ 'pagination' => array( 'first' => 'Primeiro', 'last' => 'Último', - 'load_more' => 'Carregar mais artigos', - 'mark_all_read' => 'Marcar todos como lidos', 'next' => 'Próximo', - 'nothing_to_load' => 'Não há mais artigos', 'previous' => 'Anterior', ), 'period' => array( @@ -227,4 +224,9 @@ 'or' => 'ou', 'yes' => 'Sim', ), + 'stream' => array( + 'load_more' => 'Carregar mais artigos', + 'mark_all_read' => 'Marcar todos como lidos', + 'nothing_to_load' => 'Não há mais artigos', + ), ); diff --git a/app/i18n/ru/gen.php b/app/i18n/ru/gen.php index fdf430ac1ec..fee014bbe1d 100644 --- a/app/i18n/ru/gen.php +++ b/app/i18n/ru/gen.php @@ -179,10 +179,7 @@ 'pagination' => array( 'first' => 'Первая', 'last' => 'Последняя', - 'load_more' => 'Загрузить больше статей', - 'mark_all_read' => 'Отметить всё прочитанным', 'next' => 'Следующая', - 'nothing_to_load' => 'Больше нет статей', 'previous' => 'Предыдущая', ), 'period' => array( @@ -227,4 +224,9 @@ 'or' => 'или', 'yes' => 'Да', ), + 'stream' => array( + 'load_more' => 'Загрузить больше статей', + 'mark_all_read' => 'Отметить всё прочитанным', + 'nothing_to_load' => 'Больше нет статей', + ), ); diff --git a/app/i18n/sk/gen.php b/app/i18n/sk/gen.php index 6ffda225178..faad543f3f0 100644 --- a/app/i18n/sk/gen.php +++ b/app/i18n/sk/gen.php @@ -179,10 +179,7 @@ 'pagination' => array( 'first' => 'Prvý', 'last' => 'Posledný', - 'load_more' => 'Načítať viac článkov', - 'mark_all_read' => 'Označiť všetko prečítané', 'next' => 'Ďalší', - 'nothing_to_load' => 'Žiadne nové články', 'previous' => 'Predošlý', ), 'period' => array( @@ -227,4 +224,9 @@ 'or' => 'alebo', 'yes' => 'Áno', ), + 'stream' => array( + 'load_more' => 'Načítať viac článkov', + 'mark_all_read' => 'Označiť všetko prečítané', + 'nothing_to_load' => 'Žiadne nové články', + ), ); diff --git a/app/i18n/tr/gen.php b/app/i18n/tr/gen.php index b920c84fb2b..a4a96360134 100644 --- a/app/i18n/tr/gen.php +++ b/app/i18n/tr/gen.php @@ -179,10 +179,7 @@ 'pagination' => array( 'first' => 'İlk', 'last' => 'Son', - 'load_more' => 'Daha fazla makale yükle', - 'mark_all_read' => 'Tümünü okundu say', 'next' => 'Sonraki', - 'nothing_to_load' => 'Başka makale yok', 'previous' => 'Önceki', ), 'period' => array( @@ -227,4 +224,9 @@ 'or' => 'ya da', 'yes' => 'Evet', ), + 'stream' => array( + 'load_more' => 'Daha fazla makale yükle', + 'mark_all_read' => 'Tümünü okundu say', + 'nothing_to_load' => 'Başka makale yok', + ), ); diff --git a/app/i18n/zh-cn/gen.php b/app/i18n/zh-cn/gen.php index ae4f330fd5e..ad03d8ca183 100644 --- a/app/i18n/zh-cn/gen.php +++ b/app/i18n/zh-cn/gen.php @@ -179,10 +179,7 @@ 'pagination' => array( 'first' => '首页', 'last' => '末页', - 'load_more' => '载入更多文章', - 'mark_all_read' => '全部设为已读', 'next' => '下一页', - 'nothing_to_load' => '没有更多文章', 'previous' => '上一页', ), 'period' => array( @@ -227,4 +224,9 @@ 'or' => '或', 'yes' => '是', ), + 'stream' => array( + 'load_more' => '载入更多文章', + 'mark_all_read' => '全部设为已读', + 'nothing_to_load' => '没有更多文章', + ), ); diff --git a/app/views/helpers/pagination.phtml b/app/views/helpers/stream-footer.phtml similarity index 73% rename from app/views/helpers/pagination.phtml rename to app/views/helpers/stream-footer.phtml index eed4f5dc217..ebce4d85283 100755 --- a/app/views/helpers/pagination.phtml +++ b/app/views/helpers/stream-footer.phtml @@ -21,34 +21,30 @@ -

    + -
    + diff --git a/app/views/index/normal.phtml b/app/views/index/normal.phtml index 3909083e94b..5dde2a1712f 100644 --- a/app/views/index/normal.phtml +++ b/app/views/index/normal.phtml @@ -110,7 +110,7 @@ $today = @strtotime('today'); if ($nbEntries > 0): call_user_func($this->callbackBeforePagination, $this, $nbEntries, $lastEntry); - $this->renderHelper('pagination'); + $this->renderHelper('stream-footer'); ?>content_width; if ($nbEntries > 0): call_user_func($this->callbackBeforePagination, $this, $nbEntries, $lastEntry); - $this->renderHelper('pagination'); + $this->renderHelper('stream-footer'); ?> 0 && - box_to_follow.scrollTop + box_to_follow.offsetHeight + (window.innerHeight / 2) >= pagination.offsetTop) { + const streamFooter = document.getElementById('stream-footer'); + if (streamFooter && box_to_follow.offsetHeight > 0 && + box_to_follow.scrollTop + box_to_follow.offsetHeight + (window.innerHeight / 2) >= streamFooter.offsetTop) { load_more_posts(); } } @@ -1570,16 +1570,16 @@ function load_more_posts() { req.responseType = 'document'; req.onload = function (e) { const html = this.response; - const formPagination = document.getElementById('mark-read-pagination'); + const streamFooter = document.getElementById('stream-footer'); const streamAdopted = document.adoptNode(html.getElementById('stream')); streamAdopted.querySelectorAll('.flux, .day').forEach(function (div) { - box_load_more.insertBefore(div, formPagination); + box_load_more.insertBefore(div, streamFooter); }); - const paginationOld = formPagination.querySelector('.pagination'); - const paginationNew = streamAdopted.querySelector('.pagination'); - formPagination.replaceChild(paginationNew, paginationOld); + const streamFooterOld = streamFooter.querySelector('.stream-footer-inner'); + const streamFooterNew = streamAdopted.querySelector('.stream-footer-inner'); + streamFooter.replaceChild(streamFooterNew, streamFooterOld); const bigMarkAsRead = document.getElementById('bigMarkAsRead'); const readAll = document.querySelector('#nav_menu_read_all .read_all'); @@ -1620,16 +1620,16 @@ function init_load_more(box) { box_load_more = box; document.body.dispatchEvent(freshrssLoadMoreEvent); - const next_link = document.getElementById('load_more'); - if (!next_link) { + const next_button = document.getElementById('load_more'); + if (!next_button) { // no more article to load url_load_more = ''; return; } - url_load_more = next_link.href; + url_load_more = next_button.getAttribute('formaction'); - next_link.onclick = function (e) { + next_button.onclick = function (e) { load_more_posts(); return false; }; diff --git a/p/themes/Alternative-Dark/adark.css b/p/themes/Alternative-Dark/adark.css index a45a8cdccc5..6f315ddd613 100644 --- a/p/themes/Alternative-Dark/adark.css +++ b/p/themes/Alternative-Dark/adark.css @@ -427,12 +427,6 @@ a.btn { border-top: 1px solid #292929; } -.pagination .loading, -.pagination a:hover.loading { - background: url("loader.gif") center center no-repeat #fff; - font-size: 0; -} - /*=== Boxes */ .box { background: #1f1f1f; diff --git a/p/themes/Alternative-Dark/adark.rtl.css b/p/themes/Alternative-Dark/adark.rtl.css index b6f6e94f92b..98d4502738b 100644 --- a/p/themes/Alternative-Dark/adark.rtl.css +++ b/p/themes/Alternative-Dark/adark.rtl.css @@ -427,12 +427,6 @@ a.btn { border-top: 1px solid #292929; } -.pagination .loading, -.pagination a:hover.loading { - background: url("loader.gif") center center no-repeat #fff; - font-size: 0; -} - /*=== Boxes */ .box { background: #1f1f1f; diff --git a/p/themes/Ansum/_components.scss b/p/themes/Ansum/_components.scss index 105352b8ac5..b5ed5ae2541 100644 --- a/p/themes/Ansum/_components.scss +++ b/p/themes/Ansum/_components.scss @@ -192,12 +192,11 @@ } } } +} - .loading, - a:hover.loading { - background: url("loader.gif") center center no-repeat #34495e; - font-size: 0; - } +#load_more.loading, +#load_more.loading:hover { + background: url("loader.gif") center center no-repeat #34495e; } .content .pagination { diff --git a/p/themes/Ansum/ansum.css b/p/themes/Ansum/ansum.css index 8e74736b4a4..e709e2acbbb 100644 --- a/p/themes/Ansum/ansum.css +++ b/p/themes/Ansum/ansum.css @@ -357,10 +357,9 @@ form th { background: #363330; color: #f5f0ec; } -.pagination .loading, -.pagination a:hover.loading { +#load_more.loading, +#load_more.loading:hover { background: url("loader.gif") center center no-repeat #34495e; - font-size: 0; } .content .pagination { diff --git a/p/themes/Ansum/ansum.rtl.css b/p/themes/Ansum/ansum.rtl.css index 34dcd75e616..d8dc71e15f8 100644 --- a/p/themes/Ansum/ansum.rtl.css +++ b/p/themes/Ansum/ansum.rtl.css @@ -357,10 +357,9 @@ form th { background: #363330; color: #f5f0ec; } -.pagination .loading, -.pagination a:hover.loading { +#load_more.loading, +#load_more.loading:hover { background: url("loader.gif") center center no-repeat #34495e; - font-size: 0; } .content .pagination { diff --git a/p/themes/BlueLagoon/BlueLagoon.css b/p/themes/BlueLagoon/BlueLagoon.css index af47db81834..5f0257e997a 100644 --- a/p/themes/BlueLagoon/BlueLagoon.css +++ b/p/themes/BlueLagoon/BlueLagoon.css @@ -514,13 +514,6 @@ a.btn { border-top: 1px solid #ddd; } -.pagination .loading, -.pagination a:hover.loading { - background: url("loader.gif") center center no-repeat #fff; - height: 55px; - font-size: 0 -} - /*=== Boxes */ .box { background: #f9f7f4; diff --git a/p/themes/BlueLagoon/BlueLagoon.rtl.css b/p/themes/BlueLagoon/BlueLagoon.rtl.css index 56cf33a5f41..9b5257680c5 100644 --- a/p/themes/BlueLagoon/BlueLagoon.rtl.css +++ b/p/themes/BlueLagoon/BlueLagoon.rtl.css @@ -514,13 +514,6 @@ a.btn { border-top: 1px solid #ddd; } -.pagination .loading, -.pagination a:hover.loading { - background: url("loader.gif") center center no-repeat #fff; - height: 55px; - font-size: 0 -} - /*=== Boxes */ .box { background: #f9f7f4; diff --git a/p/themes/Dark/dark.css b/p/themes/Dark/dark.css index fa200c115ad..fc6cd4ccbc0 100644 --- a/p/themes/Dark/dark.css +++ b/p/themes/Dark/dark.css @@ -459,10 +459,9 @@ a.btn { border-top: 1px solid #333; } -.pagination .loading, -.pagination a:hover.loading { +#load_more.loading, +#load_more.loading:hover { background: url("loader.gif") center center no-repeat; - font-size: 0; } /*=== Boxes */ diff --git a/p/themes/Dark/dark.rtl.css b/p/themes/Dark/dark.rtl.css index a2da93863b5..869498e9cb4 100644 --- a/p/themes/Dark/dark.rtl.css +++ b/p/themes/Dark/dark.rtl.css @@ -459,10 +459,9 @@ a.btn { border-top: 1px solid #333; } -.pagination .loading, -.pagination a:hover.loading { +#load_more.loading, +#load_more.loading:hover { background: url("loader.gif") center center no-repeat; - font-size: 0; } /*=== Boxes */ diff --git a/p/themes/Flat/flat.css b/p/themes/Flat/flat.css index c4374a675b0..71af37796a7 100644 --- a/p/themes/Flat/flat.css +++ b/p/themes/Flat/flat.css @@ -460,10 +460,9 @@ a.btn { color: #ecf0f1; } -.pagination .loading, -.pagination a:hover.loading { +#load_more.loading, +#load_more.loading:hover { background: url("loader.gif") center center no-repeat #34495e; - font-size: 0; } /*=== Boxes */ diff --git a/p/themes/Flat/flat.rtl.css b/p/themes/Flat/flat.rtl.css index eb612055519..bfa52815ab8 100644 --- a/p/themes/Flat/flat.rtl.css +++ b/p/themes/Flat/flat.rtl.css @@ -460,10 +460,9 @@ a.btn { color: #ecf0f1; } -.pagination .loading, -.pagination a:hover.loading { +#load_more.loading, +#load_more.loading:hover { background: url("loader.gif") center center no-repeat #34495e; - font-size: 0; } /*=== Boxes */ diff --git a/p/themes/Mapco/_components.scss b/p/themes/Mapco/_components.scss index 11b1ca92cf7..5d7bfd285e5 100644 --- a/p/themes/Mapco/_components.scss +++ b/p/themes/Mapco/_components.scss @@ -188,11 +188,11 @@ } } - .loading, - a:hover.loading { - background: url("loader.gif") center center no-repeat #34495e; - font-size: 0; - } +} + +#load_more.loading, +#load_more.loading:hover { + background: url("loader.gif") center center no-repeat #34495e; } .content .pagination { diff --git a/p/themes/Mapco/mapco.css b/p/themes/Mapco/mapco.css index 16a840c41c4..6ec1ffb60c3 100644 --- a/p/themes/Mapco/mapco.css +++ b/p/themes/Mapco/mapco.css @@ -354,10 +354,9 @@ form th { background: #303136; color: #eff0f2; } -.pagination .loading, -.pagination a:hover.loading { +#load_more.loading, +#load_more.loading:hover { background: url("loader.gif") center center no-repeat #34495e; - font-size: 0; } .content .pagination { diff --git a/p/themes/Mapco/mapco.rtl.css b/p/themes/Mapco/mapco.rtl.css index e91161df9e5..e761439dcf5 100644 --- a/p/themes/Mapco/mapco.rtl.css +++ b/p/themes/Mapco/mapco.rtl.css @@ -354,10 +354,9 @@ form th { background: #303136; color: #eff0f2; } -.pagination .loading, -.pagination a:hover.loading { +#load_more.loading, +#load_more.loading:hover { background: url("loader.gif") center center no-repeat #34495e; - font-size: 0; } .content .pagination { diff --git a/p/themes/Origine-compact/origine-compact.css b/p/themes/Origine-compact/origine-compact.css index 6a2a045b605..011934d5593 100644 --- a/p/themes/Origine-compact/origine-compact.css +++ b/p/themes/Origine-compact/origine-compact.css @@ -506,12 +506,6 @@ a.btn, border-top: 1px solid #aaa; } -.pagination .loading, -.pagination a:hover.loading { - background: url("loader.gif") center center no-repeat #fff; - font-size: 0; -} - /*=== Boxes */ .box { background: #fff; diff --git a/p/themes/Origine-compact/origine-compact.rtl.css b/p/themes/Origine-compact/origine-compact.rtl.css index 2c3256006f2..2a464410cb2 100644 --- a/p/themes/Origine-compact/origine-compact.rtl.css +++ b/p/themes/Origine-compact/origine-compact.rtl.css @@ -506,12 +506,6 @@ a.btn, border-top: 1px solid #aaa; } -.pagination .loading, -.pagination a:hover.loading { - background: url("loader.gif") center center no-repeat #fff; - font-size: 0; -} - /*=== Boxes */ .box { background: #fff; diff --git a/p/themes/Origine/origine.css b/p/themes/Origine/origine.css index 0ac90100b83..d28dac24bb0 100644 --- a/p/themes/Origine/origine.css +++ b/p/themes/Origine/origine.css @@ -488,12 +488,6 @@ a.btn { border-top: 1px solid #aaa; } -.pagination .loading, -.pagination a:hover.loading { - background: url("loader.gif") center center no-repeat #fff; - font-size: 0; -} - /*=== Boxes */ .box { background: #fff; diff --git a/p/themes/Origine/origine.rtl.css b/p/themes/Origine/origine.rtl.css index c7d6695e557..37f5453e74a 100644 --- a/p/themes/Origine/origine.rtl.css +++ b/p/themes/Origine/origine.rtl.css @@ -488,12 +488,6 @@ a.btn { border-top: 1px solid #aaa; } -.pagination .loading, -.pagination a:hover.loading { - background: url("loader.gif") center center no-repeat #fff; - font-size: 0; -} - /*=== Boxes */ .box { background: #fff; diff --git a/p/themes/Pafat/pafat.css b/p/themes/Pafat/pafat.css index d8fc4f05ee2..587bcedebdd 100644 --- a/p/themes/Pafat/pafat.css +++ b/p/themes/Pafat/pafat.css @@ -452,12 +452,6 @@ a.btn { border-top: 1px solid #aaa; } -.pagination .loading, -.pagination a:hover.loading { - background: url("loader.gif") center center no-repeat #fff; - font-size: 0; -} - /*=== Boxes */ .box { border: 1px solid #aaa; diff --git a/p/themes/Pafat/pafat.rtl.css b/p/themes/Pafat/pafat.rtl.css index 877fc5f35ac..3a097d22ad8 100644 --- a/p/themes/Pafat/pafat.rtl.css +++ b/p/themes/Pafat/pafat.rtl.css @@ -452,12 +452,6 @@ a.btn { border-top: 1px solid #aaa; } -.pagination .loading, -.pagination a:hover.loading { - background: url("loader.gif") center center no-repeat #fff; - font-size: 0; -} - /*=== Boxes */ .box { border: 1px solid #aaa; diff --git a/p/themes/Screwdriver/screwdriver.css b/p/themes/Screwdriver/screwdriver.css index 7a77c4d6a59..288bf95ca4e 100644 --- a/p/themes/Screwdriver/screwdriver.css +++ b/p/themes/Screwdriver/screwdriver.css @@ -499,12 +499,6 @@ a.btn { border-top: 1px solid #ddd; } -.pagination .loading, -.pagination a:hover.loading { - background: url("loader.gif") center center no-repeat #fff; - font-size: 0; -} - /*=== Boxes */ .box { background: #ede7de; diff --git a/p/themes/Screwdriver/screwdriver.rtl.css b/p/themes/Screwdriver/screwdriver.rtl.css index 98147089a56..88af06bcd17 100644 --- a/p/themes/Screwdriver/screwdriver.rtl.css +++ b/p/themes/Screwdriver/screwdriver.rtl.css @@ -499,12 +499,6 @@ a.btn { border-top: 1px solid #ddd; } -.pagination .loading, -.pagination a:hover.loading { - background: url("loader.gif") center center no-repeat #fff; - font-size: 0; -} - /*=== Boxes */ .box { background: #ede7de; diff --git a/p/themes/Swage/swage.css b/p/themes/Swage/swage.css index ebd04b55036..be973ea2659 100644 --- a/p/themes/Swage/swage.css +++ b/p/themes/Swage/swage.css @@ -400,10 +400,10 @@ form th { background: #22303d; color: #e3e3e3; } -.pagination .loading, -.pagination a:hover.loading { + +#load_more.loading, +#load_more.loading:hover { background: url(loader.gif) center center no-repeat #22303d; - font-size: 0; } .content { diff --git a/p/themes/Swage/swage.rtl.css b/p/themes/Swage/swage.rtl.css index 795dc23985f..887dcd9d9be 100644 --- a/p/themes/Swage/swage.rtl.css +++ b/p/themes/Swage/swage.rtl.css @@ -400,10 +400,10 @@ form th { background: #22303d; color: #e3e3e3; } -.pagination .loading, -.pagination a:hover.loading { + +#load_more.loading, +#load_more.loading:hover { background: url(loader.gif) center center no-repeat #22303d; - font-size: 0; } .content { diff --git a/p/themes/Swage/swage.scss b/p/themes/Swage/swage.scss index f47e2dec71b..fa37f6698c6 100644 --- a/p/themes/Swage/swage.scss +++ b/p/themes/Swage/swage.scss @@ -508,14 +508,14 @@ form { } } } +} - .loading, - a:hover.loading { - background: url(loader.gif) center center no-repeat $color_aside; - font-size: 0; - } +#load_more.loading, +#load_more.loading:hover { + background: url(loader.gif) center center no-repeat $color_aside; } + .content { padding: 20px 10px; diff --git a/p/themes/base-theme/base.css b/p/themes/base-theme/base.css index dfa754bae68..d9eca3d3f3e 100644 --- a/p/themes/base-theme/base.css +++ b/p/themes/base-theme/base.css @@ -366,8 +366,8 @@ a.btn { .pagination:last-child .item { } -.pagination .loading, -.pagination a:hover.loading { +#load_more.loading, +#load_more.loading:hover { font-size: 0; } diff --git a/p/themes/base-theme/base.rtl.css b/p/themes/base-theme/base.rtl.css index 3cf89350bdf..e3f01c4eb30 100644 --- a/p/themes/base-theme/base.rtl.css +++ b/p/themes/base-theme/base.rtl.css @@ -366,8 +366,8 @@ a.btn { .pagination:last-child .item { } -.pagination .loading, -.pagination a:hover.loading { +#load_more.loading, +#load_more.loading:hover { font-size: 0; } diff --git a/p/themes/base-theme/template.css b/p/themes/base-theme/template.css index 2642d9cac4f..fb151b116ab 100644 --- a/p/themes/base-theme/template.css +++ b/p/themes/base-theme/template.css @@ -461,6 +461,15 @@ a.btn { line-height: 16px; } +/* === stream-footer **/ +#stream-footer { + margin: 0 0 5em; + padding: 1em 0; + width: 100%; + border-top: 1px solid #aaa; + text-align: center; +} + /*=== Pagination */ .pagination { margin: 0; @@ -1116,6 +1125,13 @@ br { min-height: 40px; } +#load_more.loading, +#load_more.loading:hover { + padding: 10px 20px; + background: url("loader.gif") center center no-repeat #fff; + font-size: 0; +} + .loading { background: url("loader.gif") center center no-repeat; font-size: 0; @@ -1682,6 +1698,7 @@ input:checked + .slide-container .properties { .flux_header, .flux_content .bottom, .pagination, + #stream-footer, #nav_entries { display: none; } diff --git a/p/themes/base-theme/template.rtl.css b/p/themes/base-theme/template.rtl.css index 0e5dbde39b4..511d8948d06 100644 --- a/p/themes/base-theme/template.rtl.css +++ b/p/themes/base-theme/template.rtl.css @@ -461,6 +461,15 @@ a.btn { line-height: 16px; } +/* === stream-footer **/ +#stream-footer { + margin: 0 0 5em; + padding: 1em 0; + width: 100%; + border-top: 1px solid #aaa; + text-align: center; +} + /*=== Pagination */ .pagination { margin: 0; @@ -1116,6 +1125,13 @@ br { min-height: 40px; } +#load_more.loading, +#load_more.loading:hover { + padding: 10px 20px; + background: url("loader.gif") center center no-repeat #fff; + font-size: 0; +} + .loading { background: url("loader.gif") center center no-repeat; font-size: 0; @@ -1682,6 +1698,7 @@ input:checked + .slide-container .properties { .flux_header, .flux_content .bottom, .pagination, + #stream-footer, #nav_entries { display: none; } From 7c2da31418d3479b60c9c6b28cc595deda93d434 Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Mon, 7 Feb 2022 00:56:45 +0100 Subject: [PATCH 0166/2479] More PHP type hints for Fever (#4202) * More PHP type hints for Fever Follow-up of https://github.com/FreshRSS/FreshRSS/pull/4201 Related to https://github.com/FreshRSS/FreshRSS/issues/4200 --- app/Models/EntryDAO.php | 31 ++++++++++++++++++++----------- app/Models/EntryDAOSQLite.php | 14 ++++++++------ p/api/fever.php | 18 +++++++++++------- 3 files changed, 39 insertions(+), 24 deletions(-) diff --git a/app/Models/EntryDAO.php b/app/Models/EntryDAO.php index c690518b6fa..a10440edbba 100644 --- a/app/Models/EntryDAO.php +++ b/app/Models/EntryDAO.php @@ -83,7 +83,10 @@ protected function autoUpdateDb(array $errorInfo) { return false; } - private $addEntryPrepared = null; + /** + * @var PDOStatement|null|false + */ + private $addEntryPrepared = false; public function addEntry(array $valuesTmp, bool $useTmpTable = true) { if ($this->addEntryPrepared == null) { @@ -178,7 +181,7 @@ public function commitNewEntries() { private $updateEntryPrepared = null; - public function updateEntry($valuesTmp) { + public function updateEntry(array $valuesTmp) { if (!isset($valuesTmp['is_read'])) { $valuesTmp['is_read'] = null; } @@ -343,7 +346,7 @@ protected function updateCacheUnreads($catId = false, $feedId = false) { * @param boolean $is_read * @return integer|false affected rows */ - public function markRead($ids, $is_read = true) { + public function markRead($ids, bool $is_read = true) { FreshRSS_UserDAO::touch(); if (is_array($ids)) { //Many IDs at once if (count($ids) < 6) { //Speed heuristics @@ -411,12 +414,13 @@ public function markRead($ids, $is_read = true) { * place. It will be reused also for the filtering making every thing * separated. * - * @param integer $idMax fail safe article ID + * @param string $idMax fail safe article ID * @param boolean $onlyFavorites * @param integer $priorityMin + * @param FreshRSS_BooleanSearch|null $filters * @return integer|false affected rows */ - public function markReadEntries($idMax = 0, $onlyFavorites = false, $priorityMin = 0, $filters = null, $state = 0, $is_read = true) { + public function markReadEntries(string $idMax = '0', bool $onlyFavorites = false, int $priorityMin = 0, $filters = null, int $state = 0, bool $is_read = true) { FreshRSS_UserDAO::touch(); if ($idMax == 0) { $idMax = time() . '000000'; @@ -456,12 +460,13 @@ public function markReadEntries($idMax = 0, $onlyFavorites = false, $priorityMin * If $idMax equals 0, a deprecated debug message is logged * * @param integer $id category ID - * @param integer $idMax fail safe article ID + * @param string $idMax fail safe article ID + * @param FreshRSS_BooleanSearch|null $filters * @return integer|false affected rows */ - public function markReadCat($id, $idMax = 0, $filters = null, $state = 0, $is_read = true) { + public function markReadCat(int $id, string $idMax = '0', $filters = null, int $state = 0, bool $is_read = true) { FreshRSS_UserDAO::touch(); - if ($idMax == 0) { + if ($idMax == '0') { $idMax = time() . '000000'; Minz_Log::debug('Calling markReadCat(0) is deprecated!'); } @@ -495,9 +500,10 @@ public function markReadCat($id, $idMax = 0, $filters = null, $state = 0, $is_re * * @param integer $id_feed feed ID * @param string $idMax fail safe article ID + * @param FreshRSS_BooleanSearch|null $filters * @return integer|false affected rows */ - public function markReadFeed($id_feed, $idMax = '0', $filters = null, $state = 0, $is_read = true) { + public function markReadFeed(int $id_feed, string $idMax = '0', $filters = null, int $state = 0, bool $is_read = true) { FreshRSS_UserDAO::touch(); if ($idMax == '0') { $idMax = time() . '000000'; @@ -692,8 +698,11 @@ protected function sqlConcat($s1, $s2) { return 'CONCAT(' . $s1 . ',' . $s2 . ')'; //MySQL } - protected function sqlListEntriesWhere($alias = '', $filters = null, $state = FreshRSS_Entry::STATE_ALL, - $order = 'DESC', $firstId = '', $date_min = 0) { + /** + * @param FreshRSS_BooleanSearch|null $filters + */ + protected function sqlListEntriesWhere(string $alias = '', $filters = null, int $state = FreshRSS_Entry::STATE_ALL, + string $order = 'DESC', string $firstId = '', int $date_min = 0) { $search = ' '; $values = array(); if ($state & FreshRSS_Entry::STATE_NOT_READ) { diff --git a/app/Models/EntryDAOSQLite.php b/app/Models/EntryDAOSQLite.php index 72debd176e5..8b0f2d25237 100644 --- a/app/Models/EntryDAOSQLite.php +++ b/app/Models/EntryDAOSQLite.php @@ -166,14 +166,15 @@ public function markRead($ids, $is_read = true) { * place. It will be reused also for the filtering making every thing * separated. * - * @param integer $idMax fail safe article ID + * @param string $idMax fail safe article ID * @param boolean $onlyFavorites * @param integer $priorityMin + * @param FreshRSS_BooleanSearch|null $filters * @return integer|false affected rows */ - public function markReadEntries($idMax = 0, $onlyFavorites = false, $priorityMin = 0, $filters = null, $state = 0, $is_read = true) { + public function markReadEntries(string $idMax = '0', bool $onlyFavorites = false, int $priorityMin = 0, $filters = null, int $state = 0, bool $is_read = true) { FreshRSS_UserDAO::touch(); - if ($idMax == 0) { + if ($idMax == '0') { $idMax = time() . '000000'; Minz_Log::debug('Calling markReadEntries(0) is deprecated!'); } @@ -209,12 +210,13 @@ public function markReadEntries($idMax = 0, $onlyFavorites = false, $priorityMin * If $idMax equals 0, a deprecated debug message is logged * * @param integer $id category ID - * @param integer $idMax fail safe article ID + * @param string $idMax fail safe article ID + * @param FreshRSS_BooleanSearch|null $filters * @return integer|false affected rows */ - public function markReadCat($id, $idMax = 0, $filters = null, $state = 0, $is_read = true) { + public function markReadCat(int $id, string $idMax = '0', $filters = null, int $state = 0, bool $is_read = true) { FreshRSS_UserDAO::touch(); - if ($idMax == 0) { + if ($idMax == '0') { $idMax = time() . '000000'; Minz_Log::debug('Calling markReadCat(0) is deprecated!'); } diff --git a/p/api/fever.php b/p/api/fever.php index 618df4fbf17..beb0883e4be 100644 --- a/p/api/fever.php +++ b/p/api/fever.php @@ -130,7 +130,14 @@ class FeverAPI const STATUS_OK = 1; const STATUS_ERR = 0; + /** + * @var FreshRSS_EntryDAO|null + */ private $entryDAO = null; + + /** + * @var FreshRSS_FeedDAO|null + */ private $feedDAO = null; /** @@ -345,7 +352,7 @@ protected function getFavicons(): array { } /** - * @return int + * @return int|false */ protected function getTotalItems() { return $this->entryDAO->count(); @@ -502,11 +509,8 @@ protected function getItems(): array { /** * TODO replace by a dynamic fetch for id <= $before timestamp - * - * @param int|string $beforeTimestamp - * @return string */ - protected function convertBeforeToId($beforeTimestamp): string { + protected function convertBeforeToId(string $beforeTimestamp): string { return $beforeTimestamp == '0' ? '0' : $beforeTimestamp . '000000'; } @@ -515,7 +519,7 @@ protected function convertBeforeToId($beforeTimestamp): string { */ protected function setFeedAsRead(string $id, string $before) { $before = $this->convertBeforeToId($before); - return $this->entryDAO->markReadFeed($id, $before); + return $this->entryDAO->markReadFeed(intval($id), $before); } /** @@ -529,7 +533,7 @@ protected function setGroupAsRead(string $id, string $before) { return $this->entryDAO->markReadEntries($before); } - return $this->entryDAO->markReadCat($id, $before); + return $this->entryDAO->markReadCat(intval($id), $before); } } From 354f22b4fa30443cf6f0a62dbddb18a78af6d93b Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Mon, 7 Feb 2022 00:56:59 +0100 Subject: [PATCH 0167/2479] PHPStan update to 1.4.6 (#4203) https://github.com/phpstan/phpstan/releases And compose udpdate --- composer.json | 2 +- composer.lock | 63 ++++++++++++++++++----------------- lib/Minz/ExtensionManager.php | 1 + lib/Minz/Paginator.php | 6 ++-- 4 files changed, 38 insertions(+), 34 deletions(-) diff --git a/composer.json b/composer.json index a36ed55cc34..f6231016206 100644 --- a/composer.json +++ b/composer.json @@ -20,7 +20,7 @@ "php": ">=7.0.0" }, "require-dev": { - "phpstan/phpstan": "^1.2.0", + "phpstan/phpstan": "^1.4", "phpunit/phpunit": "^9", "squizlabs/php_codesniffer": "^3.6" }, diff --git a/composer.lock b/composer.lock index e74bbee3d79..2d5f58382ee 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "d18f8d175a9bb370f3ecc28362ef282a", + "content-hash": "499b1f8ed17ea2ba4fd034e893334cac", "packages": [], "packages-dev": [ { @@ -103,12 +103,12 @@ }, "type": "library", "autoload": { - "psr-4": { - "DeepCopy\\": "src/DeepCopy/" - }, "files": [ "src/DeepCopy/deep_copy.php" - ] + ], + "psr-4": { + "DeepCopy\\": "src/DeepCopy/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -413,16 +413,16 @@ }, { "name": "phpdocumentor/type-resolver", - "version": "1.5.1", + "version": "1.6.0", "source": { "type": "git", "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "a12f7e301eb7258bb68acd89d4aefa05c2906cae" + "reference": "93ebd0014cab80c4ea9f5e297ea48672f1b87706" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/a12f7e301eb7258bb68acd89d4aefa05c2906cae", - "reference": "a12f7e301eb7258bb68acd89d4aefa05c2906cae", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/93ebd0014cab80c4ea9f5e297ea48672f1b87706", + "reference": "93ebd0014cab80c4ea9f5e297ea48672f1b87706", "shasum": "" }, "require": { @@ -457,9 +457,9 @@ "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", "support": { "issues": "https://github.com/phpDocumentor/TypeResolver/issues", - "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.5.1" + "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.6.0" }, - "time": "2021-10-02T14:08:47+00:00" + "time": "2022-01-04T19:58:01+00:00" }, { "name": "phpspec/prophecy", @@ -530,16 +530,16 @@ }, { "name": "phpstan/phpstan", - "version": "1.3.0", + "version": "1.4.6", "source": { "type": "git", "url": "https://github.com/phpstan/phpstan.git", - "reference": "ffc5aee6019eeae4ea618d97dd290ab95e77be59" + "reference": "8a7761f1c520e0dad6e04d862fdc697445457cfe" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/ffc5aee6019eeae4ea618d97dd290ab95e77be59", - "reference": "ffc5aee6019eeae4ea618d97dd290ab95e77be59", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/8a7761f1c520e0dad6e04d862fdc697445457cfe", + "reference": "8a7761f1c520e0dad6e04d862fdc697445457cfe", "shasum": "" }, "require": { @@ -555,7 +555,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.3-dev" + "dev-master": "1.4-dev" } }, "autoload": { @@ -570,7 +570,7 @@ "description": "PHPStan - PHP Static Analysis Tool", "support": { "issues": "https://github.com/phpstan/phpstan/issues", - "source": "https://github.com/phpstan/phpstan/tree/1.3.0" + "source": "https://github.com/phpstan/phpstan/tree/1.4.6" }, "funding": [ { @@ -590,7 +590,7 @@ "type": "tidelift" } ], - "time": "2021-12-29T17:03:31+00:00" + "time": "2022-02-06T12:56:13+00:00" }, { "name": "phpunit/php-code-coverage", @@ -912,16 +912,16 @@ }, { "name": "phpunit/phpunit", - "version": "9.5.11", + "version": "9.5.13", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "2406855036db1102126125537adb1406f7242fdd" + "reference": "597cb647654ede35e43b137926dfdfef0fb11743" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/2406855036db1102126125537adb1406f7242fdd", - "reference": "2406855036db1102126125537adb1406f7242fdd", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/597cb647654ede35e43b137926dfdfef0fb11743", + "reference": "597cb647654ede35e43b137926dfdfef0fb11743", "shasum": "" }, "require": { @@ -999,7 +999,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", - "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.11" + "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.13" }, "funding": [ { @@ -1011,7 +1011,7 @@ "type": "github" } ], - "time": "2021-12-25T07:07:57+00:00" + "time": "2022-01-24T07:33:35+00:00" }, { "name": "sebastian/cli-parser", @@ -2035,21 +2035,24 @@ }, { "name": "symfony/polyfill-ctype", - "version": "v1.23.0", + "version": "v1.24.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "46cd95797e9df938fdd2b03693b5fca5e64b01ce" + "reference": "30885182c981ab175d4d034db0f6f469898070ab" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/46cd95797e9df938fdd2b03693b5fca5e64b01ce", - "reference": "46cd95797e9df938fdd2b03693b5fca5e64b01ce", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/30885182c981ab175d4d034db0f6f469898070ab", + "reference": "30885182c981ab175d4d034db0f6f469898070ab", "shasum": "" }, "require": { "php": ">=7.1" }, + "provide": { + "ext-ctype": "*" + }, "suggest": { "ext-ctype": "For best performance" }, @@ -2094,7 +2097,7 @@ "portable" ], "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.23.0" + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.24.0" }, "funding": [ { @@ -2110,7 +2113,7 @@ "type": "tidelift" } ], - "time": "2021-02-19T12:13:01+00:00" + "time": "2021-10-20T20:35:02+00:00" }, { "name": "theseer/tokenizer", diff --git a/lib/Minz/ExtensionManager.php b/lib/Minz/ExtensionManager.php index 17977fb0cc3..3fcbb2ab3f8 100644 --- a/lib/Minz/ExtensionManager.php +++ b/lib/Minz/ExtensionManager.php @@ -76,6 +76,7 @@ class Minz_ExtensionManager { 'signature' => 'PassArguments', ), ); + // @phpstan-ignore-next-line private static $ext_to_hooks = array(); /** diff --git a/lib/Minz/Paginator.php b/lib/Minz/Paginator.php index 0d9f2b6c3e4..e11dda11cd2 100644 --- a/lib/Minz/Paginator.php +++ b/lib/Minz/Paginator.php @@ -76,9 +76,9 @@ public function pageByItem ($item) { } /** - * Permet de retrouver la position d'un élément donné (à partir de 0) - * @param Minz_Model $item l'élément à retrouver - * @return float|false la position à laquelle se trouve l’élément, false si non trouvé + * Search the position (index) of a given element + * @param Minz_Model $item the element to search + * @return int|false the position of the element, or false if not found */ public function positionByItem ($item) { $i = 0; From ede82f9819e1fa6aafd2cb27010c84ef18bb06c0 Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Mon, 7 Feb 2022 01:03:00 +0100 Subject: [PATCH 0168/2479] Fix read-when-same-title bug (#4206) Made apparent by type hints --- app/Controllers/feedController.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Controllers/feedController.php b/app/Controllers/feedController.php index 99a4c8bd0e8..a9825bf8b84 100755 --- a/app/Controllers/feedController.php +++ b/app/Controllers/feedController.php @@ -365,7 +365,7 @@ public static function actualizeFeed($feed_id, $feed_url, $force, $simplePiePush $readWhenSameTitleInFeed = FreshRSS_Context::$user_conf->mark_when['same_title_in_feed']; } if ($readWhenSameTitleInFeed > 0) { - $titlesAsRead = array_flip($feedDAO->listTitles($feed->id(), $feed->attributes('read_when_same_title_in_feed'))); + $titlesAsRead = array_flip($feedDAO->listTitles($feed->id(), intval($readWhenSameTitleInFeed))); } $mark_updated_article_unread = $feed->attributes('mark_updated_article_unread') !== null ? ( From 946b0a0876f1c14ada9ceac62a70d6af170a2d33 Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Mon, 7 Feb 2022 01:35:29 +0100 Subject: [PATCH 0169/2479] Hot fix: fix type hint null regression (#4207) --- app/Models/Feed.php | 10 +++++----- lib/lib_rss.php | 5 ++++- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/app/Models/Feed.php b/app/Models/Feed.php index 48aba2b4b6b..3425f4bce34 100644 --- a/app/Models/Feed.php +++ b/app/Models/Feed.php @@ -33,7 +33,7 @@ class FreshRSS_Feed extends Minz_Model { private $ttl = self::TTL_DEFAULT; private $attributes = []; private $mute = false; - private $hash = null; + private $hash = ''; private $lockPath = ''; private $hubUrl = ''; private $selfUrl = ''; @@ -58,7 +58,7 @@ public function id(): int { } public function hash(): string { - if ($this->hash === null) { + if ($this->hash == '') { $salt = FreshRSS_Context::$system_conf->salt; $this->hash = hash('crc32b', $salt . $this->url); } @@ -191,7 +191,7 @@ public function _id($value) { $this->id = intval($value); } public function _url(string $value, bool $validate = true) { - $this->hash = null; + $this->hash = ''; if ($validate) { $value = checkUrl($value); } @@ -304,9 +304,9 @@ public function load(bool $loadDetails = false, bool $noCache = false) { } $links = $simplePie->get_links('self'); - $this->selfUrl = isset($links[0]) ? $links[0] : null; + $this->selfUrl = $links[0] ?? ''; $links = $simplePie->get_links('hub'); - $this->hubUrl = isset($links[0]) ? $links[0] : null; + $this->hubUrl = $links[0] ?? ''; if ($loadDetails) { // si on a utilisé l’auto-discover, notre url va avoir changé diff --git a/lib/lib_rss.php b/lib/lib_rss.php index b608743f3de..e020236ea81 100644 --- a/lib/lib_rss.php +++ b/lib/lib_rss.php @@ -193,7 +193,10 @@ function timestamptodate ($t, $hour = true) { return @date ($date, $t); } -function html_only_entity_decode(string $text): string { +/** + * @param string|null $text + */ +function html_only_entity_decode($text): string { static $htmlEntitiesOnly = null; if ($htmlEntitiesOnly === null) { $htmlEntitiesOnly = array_flip(array_diff( From 2fd8ce686778cdb1f7c4ad23e9989fdf558d72ed Mon Sep 17 00:00:00 2001 From: maTh Date: Mon, 7 Feb 2022 13:41:30 +0100 Subject: [PATCH 0170/2479] Update tests.yml (#4209) --- .github/workflows/tests.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 4e6eb11a5fa..a53ded7e9f8 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -66,12 +66,12 @@ jobs: - name: Check Markdown syntax run: npm run --silent markdownlint - - name: Check Right-to-left CSS - run: npm run --silent rtlcss && git diff --exit-code - - name: Check CSS syntax run: npm run --silent stylelint + - name: Check Right-to-left CSS + run: npm run --silent rtlcss && git diff --exit-code + # Shell tests - name: Use shell cache From 133e0d61db4d316806686243e735961166113e1c Mon Sep 17 00:00:00 2001 From: maTh Date: Mon, 7 Feb 2022 13:43:37 +0100 Subject: [PATCH 0171/2479] Improved: Focus and show password buttons (#4205) * CSS + JS * fixed the quotes --- p/scripts/extra.js | 34 +++++++++++++++++----------- p/themes/base-theme/template.css | 5 ++++ p/themes/base-theme/template.rtl.css | 5 ++++ 3 files changed, 31 insertions(+), 13 deletions(-) diff --git a/p/scripts/extra.js b/p/scripts/extra.js index ec98b41bb50..00a4609170e 100644 --- a/p/scripts/extra.js +++ b/p/scripts/extra.js @@ -98,20 +98,28 @@ function init_crypto_form() { } // +function showPW(ev) { + if (ev.buttons || ev.key == ' ' || ev.key.toUpperCase() == 'ENTER') { + const passwordField = document.getElementById(this.getAttribute('data-toggle')); + passwordField.setAttribute('type', 'text'); + this.classList.add('active'); + } + return false; +} + +function hidePW() { + const passwordField = document.getElementById(this.getAttribute('data-toggle')); + passwordField.setAttribute('type', 'password'); + this.classList.remove('active'); + return false; +} + function init_password_observers() { - document.querySelectorAll('.toggle-password').forEach(function (a) { - a.onmousedown = function (ev) { - const passwordField = document.getElementById(this.getAttribute('data-toggle')); - passwordField.setAttribute('type', 'text'); - this.classList.add('active'); - return false; - }; - a.onmouseup = function (ev) { - const passwordField = document.getElementById(this.getAttribute('data-toggle')); - passwordField.setAttribute('type', 'password'); - this.classList.remove('active'); - return false; - }; + document.querySelectorAll('.toggle-password').forEach(function (btn) { + btn.addEventListener('mousedown', showPW); + btn.addEventListener('keydown', showPW); + btn.addEventListener('mouseup', hidePW); + btn.addEventListener('keyup', hidePW); }); } diff --git a/p/themes/base-theme/template.css b/p/themes/base-theme/template.css index fb151b116ab..bea28765362 100644 --- a/p/themes/base-theme/template.css +++ b/p/themes/base-theme/template.css @@ -281,6 +281,11 @@ a.btn { font-weight: bold; } +.btn:focus-visible, +input[type="checkbox"]:focus-visible { + outline: 2px solid #ccc; +} + /*=== Navigation */ .nav-list .nav-header, .nav-list .item { diff --git a/p/themes/base-theme/template.rtl.css b/p/themes/base-theme/template.rtl.css index 511d8948d06..696dd4e3cf3 100644 --- a/p/themes/base-theme/template.rtl.css +++ b/p/themes/base-theme/template.rtl.css @@ -281,6 +281,11 @@ a.btn { font-weight: bold; } +.btn:focus-visible, +input[type="checkbox"]:focus-visible { + outline: 2px solid #ccc; +} + /*=== Navigation */ .nav-list .nav-header, .nav-list .item { From 4b9d66facafd6e795cd4953c39989bbf58486d40 Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Wed, 9 Feb 2022 23:37:13 +0100 Subject: [PATCH 0172/2479] Fix thumbnail PHP type hint (#4216) * Fix thumbnail PHP type hint https://github.com/FreshRSS/FreshRSS/issues/4215 * Blank --- app/Models/Entry.php | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/app/Models/Entry.php b/app/Models/Entry.php index 3e0c3f37a5d..a190e505dc4 100644 --- a/app/Models/Entry.php +++ b/app/Models/Entry.php @@ -125,13 +125,16 @@ public function enclosures(bool $searchBodyImages = false): array { } } - public function thumbnail(): string { + /** + * @return array|null + */ + public function thumbnail() { foreach ($this->enclosures(true) as $enclosure) { if (!empty($enclosure['url']) && empty($enclosure['type'])) { return $enclosure; } } - return ''; + return null; } public function link(): string { From d9e31864718236e1539defd8776d88266f681996 Mon Sep 17 00:00:00 2001 From: maTh Date: Sat, 12 Feb 2022 01:38:40 +0100 Subject: [PATCH 0173/2479] Fix: menu item overflow (#4218) * fix item width * better hover background * fixed template.css --- p/themes/Alternative-Dark/adark.css | 8 ++------ p/themes/Alternative-Dark/adark.rtl.css | 8 ++------ p/themes/BlueLagoon/BlueLagoon.css | 8 ++------ p/themes/BlueLagoon/BlueLagoon.rtl.css | 8 ++------ p/themes/Dark/dark.css | 8 ++------ p/themes/Dark/dark.rtl.css | 8 ++------ p/themes/Flat/flat.css | 8 ++------ p/themes/Flat/flat.rtl.css | 8 ++------ p/themes/Origine-compact/origine-compact.css | 8 ++------ p/themes/Origine-compact/origine-compact.rtl.css | 8 ++------ p/themes/Origine/origine.css | 8 ++------ p/themes/Origine/origine.rtl.css | 8 ++------ p/themes/Pafat/pafat.css | 8 ++------ p/themes/Pafat/pafat.rtl.css | 8 ++------ p/themes/Swage/swage.css | 7 ++----- p/themes/Swage/swage.rtl.css | 7 ++----- p/themes/Swage/swage.scss | 8 ++------ p/themes/base-theme/template.css | 9 ++++++++- p/themes/base-theme/template.rtl.css | 9 ++++++++- 19 files changed, 50 insertions(+), 102 deletions(-) diff --git a/p/themes/Alternative-Dark/adark.css b/p/themes/Alternative-Dark/adark.css index 6f315ddd613..52f24b9151f 100644 --- a/p/themes/Alternative-Dark/adark.css +++ b/p/themes/Alternative-Dark/adark.css @@ -322,7 +322,8 @@ a.btn { font-size: 0.8rem; } -.dropdown-menu > .item:hover { +.dropdown-menu > .item > a:hover, +.dropdown-menu > .item > button:hover { background: #262626; color: #fff; } @@ -332,11 +333,6 @@ a.btn { margin: 0 0 0 -14px; } -.dropdown-menu > .item:hover > a { - color: #fff; - text-decoration: none; -} - .dropdown-menu .input select, .dropdown-menu .input input { margin: 0 auto 5px; diff --git a/p/themes/Alternative-Dark/adark.rtl.css b/p/themes/Alternative-Dark/adark.rtl.css index 98d4502738b..9d949f76a45 100644 --- a/p/themes/Alternative-Dark/adark.rtl.css +++ b/p/themes/Alternative-Dark/adark.rtl.css @@ -322,7 +322,8 @@ a.btn { font-size: 0.8rem; } -.dropdown-menu > .item:hover { +.dropdown-menu > .item > a:hover, +.dropdown-menu > .item > button:hover { background: #262626; color: #fff; } @@ -332,11 +333,6 @@ a.btn { margin: 0 -14px 0 0; } -.dropdown-menu > .item:hover > a { - color: #fff; - text-decoration: none; -} - .dropdown-menu .input select, .dropdown-menu .input input { margin: 0 auto 5px; diff --git a/p/themes/BlueLagoon/BlueLagoon.css b/p/themes/BlueLagoon/BlueLagoon.css index 5f0257e997a..44c2c001f1a 100644 --- a/p/themes/BlueLagoon/BlueLagoon.css +++ b/p/themes/BlueLagoon/BlueLagoon.css @@ -413,7 +413,8 @@ a.btn { color: #ccc; } -.dropdown-menu > .item:hover { +.dropdown-menu > .item > a:hover, +.dropdown-menu > .item > button:hover { background: linear-gradient(180deg, #0090ff 0%, #0062be 100%) #e4992c; background: -webkit-linear-gradient(top, #0090ff 0%, #0062be 100%); color: #fff; @@ -424,11 +425,6 @@ a.btn { margin: 0 0 0 -14px; } -.dropdown-menu > .item:hover > a { - color: #fff; - text-decoration: none; -} - .separator { margin: 5px 0; border-bottom: 1px solid #171717; diff --git a/p/themes/BlueLagoon/BlueLagoon.rtl.css b/p/themes/BlueLagoon/BlueLagoon.rtl.css index 9b5257680c5..5ed6788fe72 100644 --- a/p/themes/BlueLagoon/BlueLagoon.rtl.css +++ b/p/themes/BlueLagoon/BlueLagoon.rtl.css @@ -413,7 +413,8 @@ a.btn { color: #ccc; } -.dropdown-menu > .item:hover { +.dropdown-menu > .item > a:hover, +.dropdown-menu > .item > button:hover { background: linear-gradient(-180deg, #0090ff 0%, #0062be 100%) #e4992c; background: -webkit-linear-gradient(top, #0090ff 0%, #0062be 100%); color: #fff; @@ -424,11 +425,6 @@ a.btn { margin: 0 -14px 0 0; } -.dropdown-menu > .item:hover > a { - color: #fff; - text-decoration: none; -} - .separator { margin: 5px 0; border-bottom: 1px solid #171717; diff --git a/p/themes/Dark/dark.css b/p/themes/Dark/dark.css index fc6cd4ccbc0..f94a26b2bab 100644 --- a/p/themes/Dark/dark.css +++ b/p/themes/Dark/dark.css @@ -358,7 +358,8 @@ a.btn { font-size: 0.8rem; } -.dropdown-menu > .item:hover { +.dropdown-menu > .item > a:hover, +.dropdown-menu > .item > button:hover { background: #26303f; color: #888; } @@ -368,11 +369,6 @@ a.btn { margin: 0 0 0 -14px; } -.dropdown-menu > .item:hover > a { - text-decoration: none; - color: #888; -} - .dropdown-menu .input select, .dropdown-menu .input input { margin: 0 auto 5px; diff --git a/p/themes/Dark/dark.rtl.css b/p/themes/Dark/dark.rtl.css index 869498e9cb4..fa7adfb0653 100644 --- a/p/themes/Dark/dark.rtl.css +++ b/p/themes/Dark/dark.rtl.css @@ -358,7 +358,8 @@ a.btn { font-size: 0.8rem; } -.dropdown-menu > .item:hover { +.dropdown-menu > .item > a:hover, +.dropdown-menu > .item > button:hover { background: #26303f; color: #888; } @@ -368,11 +369,6 @@ a.btn { margin: 0 -14px 0 0; } -.dropdown-menu > .item:hover > a { - text-decoration: none; - color: #888; -} - .dropdown-menu .input select, .dropdown-menu .input input { margin: 0 auto 5px; diff --git a/p/themes/Flat/flat.css b/p/themes/Flat/flat.css index 71af37796a7..e985171c691 100644 --- a/p/themes/Flat/flat.css +++ b/p/themes/Flat/flat.css @@ -359,7 +359,8 @@ a.btn { font-size: 0.8rem; } -.dropdown-menu > .item:hover { +.dropdown-menu > .item > a:hover, +.dropdown-menu > .item > button:hover { background: #2980b9; color: #fff; } @@ -369,11 +370,6 @@ a.btn { margin: 0 0 0 -14px; } -.dropdown-menu > .item:hover > a { - text-decoration: none; - color: #fff; -} - .dropdown-menu .input select, .dropdown-menu .input input { margin: 0 auto 5px; diff --git a/p/themes/Flat/flat.rtl.css b/p/themes/Flat/flat.rtl.css index bfa52815ab8..f1fa89d1391 100644 --- a/p/themes/Flat/flat.rtl.css +++ b/p/themes/Flat/flat.rtl.css @@ -359,7 +359,8 @@ a.btn { font-size: 0.8rem; } -.dropdown-menu > .item:hover { +.dropdown-menu > .item > a:hover, +.dropdown-menu > .item > button:hover { background: #2980b9; color: #fff; } @@ -369,11 +370,6 @@ a.btn { margin: 0 -14px 0 0; } -.dropdown-menu > .item:hover > a { - text-decoration: none; - color: #fff; -} - .dropdown-menu .input select, .dropdown-menu .input input { margin: 0 auto 5px; diff --git a/p/themes/Origine-compact/origine-compact.css b/p/themes/Origine-compact/origine-compact.css index 011934d5593..953376790f7 100644 --- a/p/themes/Origine-compact/origine-compact.css +++ b/p/themes/Origine-compact/origine-compact.css @@ -396,7 +396,8 @@ a.btn, font-size: 0.8rem; } -.dropdown-menu > .item:hover { +.dropdown-menu > .item > a:hover, +.dropdown-menu > .item > button:hover { background: #0062be; color: #fff; } @@ -410,11 +411,6 @@ a.btn, margin: 0 0 0 -14px; } -.dropdown-menu > .item:hover > a { - color: #fff; - text-decoration: none; -} - .dropdown-menu .input select, .dropdown-menu .input input { margin: 0 auto 5px; diff --git a/p/themes/Origine-compact/origine-compact.rtl.css b/p/themes/Origine-compact/origine-compact.rtl.css index 2a464410cb2..15063b8b27e 100644 --- a/p/themes/Origine-compact/origine-compact.rtl.css +++ b/p/themes/Origine-compact/origine-compact.rtl.css @@ -396,7 +396,8 @@ a.btn, font-size: 0.8rem; } -.dropdown-menu > .item:hover { +.dropdown-menu > .item > a:hover, +.dropdown-menu > .item > button:hover { background: #0062be; color: #fff; } @@ -410,11 +411,6 @@ a.btn, margin: 0 -14px 0 0; } -.dropdown-menu > .item:hover > a { - color: #fff; - text-decoration: none; -} - .dropdown-menu .input select, .dropdown-menu .input input { margin: 0 auto 5px; diff --git a/p/themes/Origine/origine.css b/p/themes/Origine/origine.css index d28dac24bb0..ca75f3414be 100644 --- a/p/themes/Origine/origine.css +++ b/p/themes/Origine/origine.css @@ -378,7 +378,8 @@ a.btn { font-size: 0.8rem; } -.dropdown-menu > .item:hover { +.dropdown-menu > .item > a:hover, +.dropdown-menu > .item > button:hover { background: #0062be; color: #fff; } @@ -392,11 +393,6 @@ a.btn { margin: 0 0 0 -14px; } -.dropdown-menu > .item:hover > a { - color: #fff; - text-decoration: none; -} - .dropdown-menu .input select, .dropdown-menu .input input { margin: 0 auto 5px; diff --git a/p/themes/Origine/origine.rtl.css b/p/themes/Origine/origine.rtl.css index 37f5453e74a..14ee46bd90c 100644 --- a/p/themes/Origine/origine.rtl.css +++ b/p/themes/Origine/origine.rtl.css @@ -378,7 +378,8 @@ a.btn { font-size: 0.8rem; } -.dropdown-menu > .item:hover { +.dropdown-menu > .item > a:hover, +.dropdown-menu > .item > button:hover { background: #0062be; color: #fff; } @@ -392,11 +393,6 @@ a.btn { margin: 0 -14px 0 0; } -.dropdown-menu > .item:hover > a { - color: #fff; - text-decoration: none; -} - .dropdown-menu .input select, .dropdown-menu .input input { margin: 0 auto 5px; diff --git a/p/themes/Pafat/pafat.css b/p/themes/Pafat/pafat.css index 587bcedebdd..04d406459f2 100644 --- a/p/themes/Pafat/pafat.css +++ b/p/themes/Pafat/pafat.css @@ -347,7 +347,8 @@ a.btn { font-size: 0.8rem; } -.dropdown-menu > .item:hover { +.dropdown-menu > .item > a:hover, +.dropdown-menu > .item > button:hover { background: #eee; color: #666; } @@ -357,11 +358,6 @@ a.btn { margin: 0 0 0 -14px; } -.dropdown-menu > .item:hover > a { - color: #666; - text-decoration: none; -} - .dropdown-menu .input select, .dropdown-menu .input input { margin: 0 auto 5px; diff --git a/p/themes/Pafat/pafat.rtl.css b/p/themes/Pafat/pafat.rtl.css index 3a097d22ad8..164cd4f9a68 100644 --- a/p/themes/Pafat/pafat.rtl.css +++ b/p/themes/Pafat/pafat.rtl.css @@ -347,7 +347,8 @@ a.btn { font-size: 0.8rem; } -.dropdown-menu > .item:hover { +.dropdown-menu > .item > a:hover, +.dropdown-menu > .item > button:hover { background: #eee; color: #666; } @@ -357,11 +358,6 @@ a.btn { margin: 0 -14px 0 0; } -.dropdown-menu > .item:hover > a { - color: #666; - text-decoration: none; -} - .dropdown-menu .input select, .dropdown-menu .input input { margin: 0 auto 5px; diff --git a/p/themes/Swage/swage.css b/p/themes/Swage/swage.css index be973ea2659..ab31b5de07e 100644 --- a/p/themes/Swage/swage.css +++ b/p/themes/Swage/swage.css @@ -307,14 +307,11 @@ form th { min-width: initial; white-space: nowrap; } -.dropdown-menu > .item:hover { +.dropdown-menu > .item > a:hover, +.dropdown-menu > .item > button:hover { background: #0062be; color: #fcfcfc; } -.dropdown-menu > .item:hover > a { - text-decoration: none; - color: #fcfcfc; -} .dropdown-menu > .item[aria-checked=true] > a::before { font-weight: bold; margin: 0 0 0 -14px; diff --git a/p/themes/Swage/swage.rtl.css b/p/themes/Swage/swage.rtl.css index 887dcd9d9be..ea673b91d00 100644 --- a/p/themes/Swage/swage.rtl.css +++ b/p/themes/Swage/swage.rtl.css @@ -307,14 +307,11 @@ form th { min-width: initial; white-space: nowrap; } -.dropdown-menu > .item:hover { +.dropdown-menu > .item > a:hover, +.dropdown-menu > .item > button:hover { background: #0062be; color: #fcfcfc; } -.dropdown-menu > .item:hover > a { - text-decoration: none; - color: #fcfcfc; -} .dropdown-menu > .item[aria-checked=true] > a::before { font-weight: bold; margin: 0 -14px 0 0; diff --git a/p/themes/Swage/swage.scss b/p/themes/Swage/swage.scss index fa37f6698c6..fedabf09d26 100644 --- a/p/themes/Swage/swage.scss +++ b/p/themes/Swage/swage.scss @@ -402,14 +402,10 @@ form { white-space: nowrap; } - &:hover { + > a:hover, + > button:hover { background: $color_nav; color: $color_light; - - > a { - text-decoration: none; - color: $color_light; - } } } diff --git a/p/themes/base-theme/template.css b/p/themes/base-theme/template.css index bea28765362..65befae010f 100644 --- a/p/themes/base-theme/template.css +++ b/p/themes/base-theme/template.css @@ -167,6 +167,11 @@ input[type="checkbox"] { width: calc(99% - 5em); } +.dropdown-menu > .item > a:hover, +.dropdown-menu > .item > button:hover { + text-decoration: none; +} + .dropdown-menu input[type="checkbox"] { margin-left: 1em; margin-right: .5em; @@ -373,8 +378,9 @@ input[type="checkbox"]:focus-visible { .dropdown-menu > .item > .as-link, .dropdown-menu > .item > span { display: block; - min-width: 200px; + width: 100%; white-space: nowrap; + box-sizing: border-box; } .dropdown-menu > .item[aria-checked="true"] > a::before { @@ -460,6 +466,7 @@ input[type="checkbox"]:focus-visible { /*=== Icons */ .icon { display: inline-block; + max-width: none; width: 16px; height: 16px; vertical-align: middle; diff --git a/p/themes/base-theme/template.rtl.css b/p/themes/base-theme/template.rtl.css index 696dd4e3cf3..c816179b143 100644 --- a/p/themes/base-theme/template.rtl.css +++ b/p/themes/base-theme/template.rtl.css @@ -167,6 +167,11 @@ input[type="checkbox"] { width: calc(99% - 5em); } +.dropdown-menu > .item > a:hover, +.dropdown-menu > .item > button:hover { + text-decoration: none; +} + .dropdown-menu input[type="checkbox"] { margin-right: 1em; margin-left: .5em; @@ -373,8 +378,9 @@ input[type="checkbox"]:focus-visible { .dropdown-menu > .item > .as-link, .dropdown-menu > .item > span { display: block; - min-width: 200px; + width: 100%; white-space: nowrap; + box-sizing: border-box; } .dropdown-menu > .item[aria-checked="true"] > a::before { @@ -460,6 +466,7 @@ input[type="checkbox"]:focus-visible { /*=== Icons */ .icon { display: inline-block; + max-width: none; width: 16px; height: 16px; vertical-align: middle; From 926ce8ff5f2595bdf29f6a8fb61e8e40adb1251a Mon Sep 17 00:00:00 2001 From: maTh Date: Mon, 21 Feb 2022 19:21:12 +0100 Subject: [PATCH 0174/2479] Improved: icons in same color (#4212) * delete white plus icon * delete unused icons * Themes * Update flat.css * minimized XML of SVG icons * RTL CSS fix * Update ansum.css Co-authored-by: Alexandre Alapetite --- app/Models/Themes.php | 3 -- app/layout/aside_feed.phtml | 2 +- p/themes/Ansum/_forms.scss | 4 +++ p/themes/Ansum/ansum.css | 9 +++++- p/themes/Ansum/ansum.rtl.css | 9 +++++- p/themes/BlueLagoon/BlueLagoon.css | 4 +++ p/themes/BlueLagoon/BlueLagoon.rtl.css | 4 +++ p/themes/Flat/flat.css | 13 ++++++++ p/themes/Flat/flat.rtl.css | 13 ++++++++ p/themes/Flat/icons/add.svg | 30 ----------------- p/themes/Flat/icons/bookmark-tag.svg | 3 -- p/themes/Flat/icons/category.svg | 31 ------------------ p/themes/Flat/icons/refresh.svg | 31 ------------------ p/themes/Flat/icons/rss.svg | 6 ---- p/themes/Flat/icons/search.svg | 32 ------------------- p/themes/Flat/icons/sort-down.svg | 3 -- p/themes/Flat/icons/sort-up.svg | 3 -- p/themes/Flat/icons/view-global.svg | 1 - p/themes/Flat/icons/view-normal.svg | 1 - p/themes/Flat/icons/view-reader.svg | 1 - p/themes/Origine-compact/origine-compact.css | 5 +++ .../Origine-compact/origine-compact.rtl.css | 5 +++ p/themes/Origine/origine.css | 4 +++ p/themes/Origine/origine.rtl.css | 4 +++ p/themes/Pafat/pafat.css | 4 +++ p/themes/Pafat/pafat.rtl.css | 4 +++ p/themes/Screwdriver/screwdriver.css | 4 +++ p/themes/Screwdriver/screwdriver.rtl.css | 4 +++ p/themes/base-theme/template.css | 4 +++ p/themes/base-theme/template.rtl.css | 4 +++ p/themes/icons/add-white.svg | 5 --- p/themes/icons/add.svg | 8 ++--- p/themes/icons/all.svg | 10 ++---- p/themes/icons/category-white.svg | 7 ---- p/themes/icons/close.svg | 10 ++---- p/themes/icons/down.svg | 8 ++--- p/themes/icons/help.svg | 14 ++++---- p/themes/icons/import.svg | 1 - p/themes/icons/link.svg | 14 ++++---- p/themes/icons/login.svg | 12 +++---- p/themes/icons/logout.svg | 12 +++---- p/themes/icons/next.svg | 8 ++--- p/themes/icons/non-starred.svg | 8 ++--- p/themes/icons/prev.svg | 8 ++--- p/themes/icons/read.svg | 8 ++--- p/themes/icons/share.svg | 14 ++++---- p/themes/icons/stats.svg | 10 +++--- p/themes/icons/tag.svg | 8 ++--- p/themes/icons/up.svg | 8 ++--- 49 files changed, 164 insertions(+), 254 deletions(-) delete mode 100644 p/themes/Flat/icons/add.svg delete mode 100644 p/themes/Flat/icons/bookmark-tag.svg delete mode 100644 p/themes/Flat/icons/category.svg delete mode 100644 p/themes/Flat/icons/refresh.svg delete mode 100644 p/themes/Flat/icons/rss.svg delete mode 100644 p/themes/Flat/icons/search.svg delete mode 100644 p/themes/Flat/icons/sort-down.svg delete mode 100644 p/themes/Flat/icons/sort-up.svg delete mode 100644 p/themes/Flat/icons/view-global.svg delete mode 100644 p/themes/Flat/icons/view-normal.svg delete mode 100644 p/themes/Flat/icons/view-reader.svg delete mode 100644 p/themes/icons/add-white.svg delete mode 100644 p/themes/icons/category-white.svg delete mode 100644 p/themes/icons/import.svg diff --git a/app/Models/Themes.php b/app/Models/Themes.php index 8a084246112..693657fae27 100644 --- a/app/Models/Themes.php +++ b/app/Models/Themes.php @@ -71,13 +71,11 @@ public static function load($theme_id) { public static function alt($name) { static $alts = array( 'add' => '✚', - 'add-white' => '✚', 'all' => '☰', 'bookmark' => '★', 'bookmark-add' => '✚', 'bookmark-tag' => '🔖', 'category' => '☷', - 'category-white' => '☷', 'close' => '❌', 'configure' => '⚙', 'down' => '▽', @@ -85,7 +83,6 @@ public static function alt($name) { 'FreshRSS-logo' => '⊚', 'help' => 'ⓘ', 'icon' => '⊚', - 'import' => '⤓', 'key' => '⚿', 'label' => '🏷️', 'link' => '↗', diff --git a/app/layout/aside_feed.phtml b/app/layout/aside_feed.phtml index 0b1680ffb31..bb03bdfc63e 100644 --- a/app/layout/aside_feed.phtml +++ b/app/layout/aside_feed.phtml @@ -19,7 +19,7 @@
    - +
    diff --git a/p/themes/Ansum/_forms.scss b/p/themes/Ansum/_forms.scss index 062cfc2fd63..0fc90894b77 100644 --- a/p/themes/Ansum/_forms.scss +++ b/p/themes/Ansum/_forms.scss @@ -30,6 +30,10 @@ &:active { background: variables.$main-first-alt; } + + img { + filter: brightness(3); + } } diff --git a/p/themes/Ansum/ansum.css b/p/themes/Ansum/ansum.css index e709e2acbbb..b06f01aaaa6 100644 --- a/p/themes/Ansum/ansum.css +++ b/p/themes/Ansum/ansum.css @@ -81,6 +81,9 @@ .btn.btn-important:hover, .btn.btn-important:active { background: #b7641d; } +.btn.btn-important img { + filter: brightness(3); +} .btn.btn-attention { background: #f5633e; color: #fff; @@ -357,6 +360,7 @@ form th { background: #363330; color: #f5f0ec; } + #load_more.loading, #load_more.loading:hover { background: url("loader.gif") center center no-repeat #34495e; @@ -867,6 +871,10 @@ form th { text-align: center; } +#new-article:hover { + background: #b7641d; +} + #new-article > a { line-height: 3em; font-weight: bold; @@ -875,7 +883,6 @@ form th { #new-article > a:hover { text-decoration: none; - background: #b7641d; } /*=== Day indication */ diff --git a/p/themes/Ansum/ansum.rtl.css b/p/themes/Ansum/ansum.rtl.css index d8dc71e15f8..6842ee5e2b7 100644 --- a/p/themes/Ansum/ansum.rtl.css +++ b/p/themes/Ansum/ansum.rtl.css @@ -81,6 +81,9 @@ .btn.btn-important:hover, .btn.btn-important:active { background: #b7641d; } +.btn.btn-important img { + filter: brightness(3); +} .btn.btn-attention { background: #f5633e; color: #fff; @@ -357,6 +360,7 @@ form th { background: #363330; color: #f5f0ec; } + #load_more.loading, #load_more.loading:hover { background: url("loader.gif") center center no-repeat #34495e; @@ -867,6 +871,10 @@ form th { text-align: center; } +#new-article:hover { + background: #b7641d; +} + #new-article > a { line-height: 3em; font-weight: bold; @@ -875,7 +883,6 @@ form th { #new-article > a:hover { text-decoration: none; - background: #b7641d; } /*=== Day indication */ diff --git a/p/themes/BlueLagoon/BlueLagoon.css b/p/themes/BlueLagoon/BlueLagoon.css index 44c2c001f1a..12a5a334ca1 100644 --- a/p/themes/BlueLagoon/BlueLagoon.css +++ b/p/themes/BlueLagoon/BlueLagoon.css @@ -235,6 +235,10 @@ a.btn { font-weight: normal; } +.btn-important .icon { + filter: brightness(3); +} + .btn-important:active { background: linear-gradient(0deg, #e4992c 0%, #d18114 100%) #e4992c; background: -webkit-linear-gradient(bottom, #e4992c 0%, #d18114 100%); diff --git a/p/themes/BlueLagoon/BlueLagoon.rtl.css b/p/themes/BlueLagoon/BlueLagoon.rtl.css index 5ed6788fe72..a1c510bbd70 100644 --- a/p/themes/BlueLagoon/BlueLagoon.rtl.css +++ b/p/themes/BlueLagoon/BlueLagoon.rtl.css @@ -235,6 +235,10 @@ a.btn { font-weight: normal; } +.btn-important .icon { + filter: brightness(3); +} + .btn-important:active { background: linear-gradient(0deg, #e4992c 0%, #d18114 100%) #e4992c; background: -webkit-linear-gradient(bottom, #e4992c 0%, #d18114 100%); diff --git a/p/themes/Flat/flat.css b/p/themes/Flat/flat.css index e985171c691..3822c7c351e 100644 --- a/p/themes/Flat/flat.css +++ b/p/themes/Flat/flat.css @@ -211,6 +211,15 @@ a.btn { background: #2980b9; } +.btn .icon { + filter: brightness(5); +} + +#toggle-unread .icon, +#toggle-starred .icon { + filter: none; +} + .btn-important { font-weight: normal; background: #e67e22; @@ -224,6 +233,10 @@ a.btn { background: #d35400; } +.btn-important .icon { + filter: brightness(3); +} + .btn-attention { background: #e74c3c; color: #fff; diff --git a/p/themes/Flat/flat.rtl.css b/p/themes/Flat/flat.rtl.css index f1fa89d1391..ff9836b6d5a 100644 --- a/p/themes/Flat/flat.rtl.css +++ b/p/themes/Flat/flat.rtl.css @@ -211,6 +211,15 @@ a.btn { background: #2980b9; } +.btn .icon { + filter: brightness(5); +} + +#toggle-unread .icon, +#toggle-starred .icon { + filter: none; +} + .btn-important { font-weight: normal; background: #e67e22; @@ -224,6 +233,10 @@ a.btn { background: #d35400; } +.btn-important .icon { + filter: brightness(3); +} + .btn-attention { background: #e74c3c; color: #fff; diff --git a/p/themes/Flat/icons/add.svg b/p/themes/Flat/icons/add.svg deleted file mode 100644 index 15767a3ad84..00000000000 --- a/p/themes/Flat/icons/add.svg +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - image/svg+xml - - Gnome Symbolic Icon Theme - - - - - - - Gnome Symbolic Icon Theme - - - - - - - - - - - - - diff --git a/p/themes/Flat/icons/bookmark-tag.svg b/p/themes/Flat/icons/bookmark-tag.svg deleted file mode 100644 index f087931c6c0..00000000000 --- a/p/themes/Flat/icons/bookmark-tag.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/p/themes/Flat/icons/category.svg b/p/themes/Flat/icons/category.svg deleted file mode 100644 index 5e61aeea57d..00000000000 --- a/p/themes/Flat/icons/category.svg +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - - - image/svg+xml - - Gnome Symbolic Icon Theme - - - - - - - Gnome Symbolic Icon Theme - - - - - - - - - - - - - - diff --git a/p/themes/Flat/icons/refresh.svg b/p/themes/Flat/icons/refresh.svg deleted file mode 100644 index 8f95bf44368..00000000000 --- a/p/themes/Flat/icons/refresh.svg +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - - - image/svg+xml - - Gnome Symbolic Icon Theme - - - - - - - Gnome Symbolic Icon Theme - - - - - - - - - - - - - - diff --git a/p/themes/Flat/icons/rss.svg b/p/themes/Flat/icons/rss.svg deleted file mode 100644 index 4d4faf7aec9..00000000000 --- a/p/themes/Flat/icons/rss.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/p/themes/Flat/icons/search.svg b/p/themes/Flat/icons/search.svg deleted file mode 100644 index bca7571b4f3..00000000000 --- a/p/themes/Flat/icons/search.svg +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - - image/svg+xml - - Gnome Symbolic Icon Theme - - - - - - - Gnome Symbolic Icon Theme - - - - - - - - - - - - - - - diff --git a/p/themes/Flat/icons/sort-down.svg b/p/themes/Flat/icons/sort-down.svg deleted file mode 100644 index 2db5d796353..00000000000 --- a/p/themes/Flat/icons/sort-down.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/p/themes/Flat/icons/sort-up.svg b/p/themes/Flat/icons/sort-up.svg deleted file mode 100644 index 7103b572fdd..00000000000 --- a/p/themes/Flat/icons/sort-up.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/p/themes/Flat/icons/view-global.svg b/p/themes/Flat/icons/view-global.svg deleted file mode 100644 index 9d2cd0f32cb..00000000000 --- a/p/themes/Flat/icons/view-global.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/p/themes/Flat/icons/view-normal.svg b/p/themes/Flat/icons/view-normal.svg deleted file mode 100644 index 8eda2047eaf..00000000000 --- a/p/themes/Flat/icons/view-normal.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/p/themes/Flat/icons/view-reader.svg b/p/themes/Flat/icons/view-reader.svg deleted file mode 100644 index 0e4f60a1af3..00000000000 --- a/p/themes/Flat/icons/view-reader.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/p/themes/Origine-compact/origine-compact.css b/p/themes/Origine-compact/origine-compact.css index 953376790f7..e23bac24cb5 100644 --- a/p/themes/Origine-compact/origine-compact.css +++ b/p/themes/Origine-compact/origine-compact.css @@ -230,6 +230,10 @@ a.btn, box-shadow: none; } +.btn-important .icon { + filter: brightness(3); +} + .btn-attention { background: #e95b57; background: linear-gradient(to bottom, #e95b57, #bd362f); @@ -255,6 +259,7 @@ a.btn, box-shadow: none; } + /*=== Navigation */ .nav-list .nav-header, .nav-list .item { diff --git a/p/themes/Origine-compact/origine-compact.rtl.css b/p/themes/Origine-compact/origine-compact.rtl.css index 15063b8b27e..a8df8455627 100644 --- a/p/themes/Origine-compact/origine-compact.rtl.css +++ b/p/themes/Origine-compact/origine-compact.rtl.css @@ -230,6 +230,10 @@ a.btn, box-shadow: none; } +.btn-important .icon { + filter: brightness(3); +} + .btn-attention { background: #e95b57; background: linear-gradient(to bottom, #e95b57, #bd362f); @@ -255,6 +259,7 @@ a.btn, box-shadow: none; } + /*=== Navigation */ .nav-list .nav-header, .nav-list .item { diff --git a/p/themes/Origine/origine.css b/p/themes/Origine/origine.css index ca75f3414be..dd2b864ebc9 100644 --- a/p/themes/Origine/origine.css +++ b/p/themes/Origine/origine.css @@ -230,6 +230,10 @@ a.btn { box-shadow: none; } +.btn-important .icon { + filter: brightness(3); +} + .btn-attention { background: #e95b57; background: linear-gradient(to bottom, #ea4a46, #911811); diff --git a/p/themes/Origine/origine.rtl.css b/p/themes/Origine/origine.rtl.css index 14ee46bd90c..477c9351b12 100644 --- a/p/themes/Origine/origine.rtl.css +++ b/p/themes/Origine/origine.rtl.css @@ -230,6 +230,10 @@ a.btn { box-shadow: none; } +.btn-important .icon { + filter: brightness(3); +} + .btn-attention { background: #e95b57; background: linear-gradient(to bottom, #ea4a46, #911811); diff --git a/p/themes/Pafat/pafat.css b/p/themes/Pafat/pafat.css index 04d406459f2..6da93f5022f 100644 --- a/p/themes/Pafat/pafat.css +++ b/p/themes/Pafat/pafat.css @@ -206,6 +206,10 @@ a.btn { box-shadow: none; } +.btn-important .icon { + filter: brightness(3); +} + .btn-attention { background: #d9534f; color: #fff; diff --git a/p/themes/Pafat/pafat.rtl.css b/p/themes/Pafat/pafat.rtl.css index 164cd4f9a68..2518db52432 100644 --- a/p/themes/Pafat/pafat.rtl.css +++ b/p/themes/Pafat/pafat.rtl.css @@ -206,6 +206,10 @@ a.btn { box-shadow: none; } +.btn-important .icon { + filter: brightness(3); +} + .btn-attention { background: #d9534f; color: #fff; diff --git a/p/themes/Screwdriver/screwdriver.css b/p/themes/Screwdriver/screwdriver.css index 288bf95ca4e..f06dd9e8a39 100644 --- a/p/themes/Screwdriver/screwdriver.css +++ b/p/themes/Screwdriver/screwdriver.css @@ -240,6 +240,10 @@ a.btn { background: -webkit-linear-gradient(bottom, #e4992c 0%, #d18114 100%); } +.btn-important .icon { + filter: brightness(3); +} + .btn-attention { background: #e95b57; background: linear-gradient(to bottom, #e95b57, #bd362f); diff --git a/p/themes/Screwdriver/screwdriver.rtl.css b/p/themes/Screwdriver/screwdriver.rtl.css index 88af06bcd17..6c512caf6b3 100644 --- a/p/themes/Screwdriver/screwdriver.rtl.css +++ b/p/themes/Screwdriver/screwdriver.rtl.css @@ -240,6 +240,10 @@ a.btn { background: -webkit-linear-gradient(bottom, #e4992c 0%, #d18114 100%); } +.btn-important .icon { + filter: brightness(3); +} + .btn-attention { background: #e95b57; background: linear-gradient(to bottom, #e95b57, #bd362f); diff --git a/p/themes/base-theme/template.css b/p/themes/base-theme/template.css index 65befae010f..f0c4c0dfced 100644 --- a/p/themes/base-theme/template.css +++ b/p/themes/base-theme/template.css @@ -65,6 +65,10 @@ p.help, .prompt p.help { margin: 5px 0 0.5em; } +p.help .icon { + filter: brightness(2); +} + sup { line-height: 25px; position: relative; diff --git a/p/themes/base-theme/template.rtl.css b/p/themes/base-theme/template.rtl.css index c816179b143..9bbe6fa9f69 100644 --- a/p/themes/base-theme/template.rtl.css +++ b/p/themes/base-theme/template.rtl.css @@ -65,6 +65,10 @@ p.help, .prompt p.help { margin: 5px 0 0.5em; } +p.help .icon { + filter: brightness(2); +} + sup { line-height: 25px; position: relative; diff --git a/p/themes/icons/add-white.svg b/p/themes/icons/add-white.svg deleted file mode 100644 index c1465ca94b0..00000000000 --- a/p/themes/icons/add-white.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/p/themes/icons/add.svg b/p/themes/icons/add.svg index 652491775f6..bcb3e866fd8 100644 --- a/p/themes/icons/add.svg +++ b/p/themes/icons/add.svg @@ -1,5 +1,3 @@ - - - - - \ No newline at end of file + + + diff --git a/p/themes/icons/all.svg b/p/themes/icons/all.svg index aeaa96277ef..00c63170d8a 100644 --- a/p/themes/icons/all.svg +++ b/p/themes/icons/all.svg @@ -1,7 +1,3 @@ - - - - - - - \ No newline at end of file + + + diff --git a/p/themes/icons/category-white.svg b/p/themes/icons/category-white.svg deleted file mode 100644 index 5bb5cecd98f..00000000000 --- a/p/themes/icons/category-white.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/p/themes/icons/close.svg b/p/themes/icons/close.svg index 20d1577ab81..87537c19170 100644 --- a/p/themes/icons/close.svg +++ b/p/themes/icons/close.svg @@ -1,7 +1,3 @@ - - - - - - - \ No newline at end of file + + + diff --git a/p/themes/icons/down.svg b/p/themes/icons/down.svg index 8a234ee99a3..600ccb96179 100644 --- a/p/themes/icons/down.svg +++ b/p/themes/icons/down.svg @@ -1,5 +1,3 @@ - - - - - \ No newline at end of file + + + diff --git a/p/themes/icons/help.svg b/p/themes/icons/help.svg index 9a0022f766c..e5f918f577f 100644 --- a/p/themes/icons/help.svg +++ b/p/themes/icons/help.svg @@ -1,7 +1,7 @@ - - - - - - - \ No newline at end of file + + + + + + + diff --git a/p/themes/icons/import.svg b/p/themes/icons/import.svg deleted file mode 100644 index 18a54ab59bd..00000000000 --- a/p/themes/icons/import.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/p/themes/icons/link.svg b/p/themes/icons/link.svg index e5290af7642..6419547c0eb 100644 --- a/p/themes/icons/link.svg +++ b/p/themes/icons/link.svg @@ -1,7 +1,7 @@ - - - - - - - \ No newline at end of file + + + + + + + diff --git a/p/themes/icons/login.svg b/p/themes/icons/login.svg index 954a0b74bf9..a3e3f3377ad 100644 --- a/p/themes/icons/login.svg +++ b/p/themes/icons/login.svg @@ -1,6 +1,6 @@ - - - - - - \ No newline at end of file + + + + + + diff --git a/p/themes/icons/logout.svg b/p/themes/icons/logout.svg index 8dd4ef08b4d..e690e1d3329 100644 --- a/p/themes/icons/logout.svg +++ b/p/themes/icons/logout.svg @@ -1,6 +1,6 @@ - - - - - - \ No newline at end of file + + + + + + diff --git a/p/themes/icons/next.svg b/p/themes/icons/next.svg index d504d096cc3..39ff760b293 100644 --- a/p/themes/icons/next.svg +++ b/p/themes/icons/next.svg @@ -1,5 +1,3 @@ - - - - - \ No newline at end of file + + + diff --git a/p/themes/icons/non-starred.svg b/p/themes/icons/non-starred.svg index 4ebcfccbdbd..656f17427be 100644 --- a/p/themes/icons/non-starred.svg +++ b/p/themes/icons/non-starred.svg @@ -1,5 +1,3 @@ - - - - - \ No newline at end of file + + + diff --git a/p/themes/icons/prev.svg b/p/themes/icons/prev.svg index ea43720984d..3c210644995 100644 --- a/p/themes/icons/prev.svg +++ b/p/themes/icons/prev.svg @@ -1,5 +1,3 @@ - - - - - \ No newline at end of file + + + diff --git a/p/themes/icons/read.svg b/p/themes/icons/read.svg index d72c198dfa3..d3bf517c103 100644 --- a/p/themes/icons/read.svg +++ b/p/themes/icons/read.svg @@ -1,5 +1,3 @@ - - - - - \ No newline at end of file + + + diff --git a/p/themes/icons/share.svg b/p/themes/icons/share.svg index db7a3649cdd..a17fceda611 100644 --- a/p/themes/icons/share.svg +++ b/p/themes/icons/share.svg @@ -1,8 +1,6 @@ - - - - - - - - \ No newline at end of file + + + + + + diff --git a/p/themes/icons/stats.svg b/p/themes/icons/stats.svg index 90a23215f78..abb41d084e7 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 0d6db6ed8bd..f5afe9de00d 100644 --- a/p/themes/icons/tag.svg +++ b/p/themes/icons/tag.svg @@ -1,5 +1,3 @@ - - - - - \ No newline at end of file + + + diff --git a/p/themes/icons/up.svg b/p/themes/icons/up.svg index 4819c9205d2..dbae173d920 100644 --- a/p/themes/icons/up.svg +++ b/p/themes/icons/up.svg @@ -1,5 +1,3 @@ - - - - - \ No newline at end of file + + + From c45e5ba85c253ebf05c060ce5ffa9ad2b725410a Mon Sep 17 00:00:00 2001 From: maTh Date: Sun, 27 Feb 2022 21:48:39 +0100 Subject: [PATCH 0175/2479] set type="submit" (#4237) --- app/views/helpers/category/update.phtml | 8 ++++---- app/views/helpers/configure/query.phtml | 4 ++-- app/views/helpers/feed/update.phtml | 10 +++++----- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/app/views/helpers/category/update.phtml b/app/views/helpers/category/update.phtml index 4d05ed908ac..92701013647 100644 --- a/app/views/helpers/category/update.phtml +++ b/app/views/helpers/category/update.phtml @@ -29,7 +29,7 @@
    - +
    @@ -155,7 +155,7 @@
    - +
    @@ -167,12 +167,12 @@
    - category->isDefault()): ?> - diff --git a/app/views/helpers/configure/query.phtml b/app/views/helpers/configure/query.phtml index 3dc6c245947..f681c25389d 100644 --- a/app/views/helpers/configure/query.phtml +++ b/app/views/helpers/configure/query.phtml @@ -85,8 +85,8 @@
    - - + diff --git a/app/views/helpers/feed/update.phtml b/app/views/helpers/feed/update.phtml index ed6db9b1fcd..264881f77c2 100644 --- a/app/views/helpers/feed/update.phtml +++ b/app/views/helpers/feed/update.phtml @@ -127,9 +127,9 @@
    - + - @@ -367,9 +367,9 @@
    - + - +
    @@ -476,7 +476,7 @@
    - +
    From 639f8eea84ddee767ab115b61091a1c7e3dcdbf8 Mon Sep 17 00:00:00 2001 From: maTh Date: Sun, 27 Feb 2022 21:50:28 +0100 Subject: [PATCH 0176/2479] Documentation improved: mobile access (#4235) * Update 06_Mobile_access.md * Readme: Windows + MacOS * fix markdown * Update docs/en/users/06_Mobile_access.md Co-authored-by: Frans de Jonge * Update docs/en/users/06_Mobile_access.md Co-authored-by: Frans de Jonge * MacOS -> macOS * Update 06_Mobile_access.md * Update docs/en/users/06_Mobile_access.md Co-authored-by: Frans de Jonge Co-authored-by: Frans de Jonge --- README.fr.md | 16 ++++++++-------- README.md | 16 ++++++++-------- docs/en/developers/06_GoogleReader_API.md | 4 ++-- docs/en/users/06_Mobile_access.md | 23 ++++++++++++++++++++--- docs/fr/users/06_Mobile_access.md | 2 +- 5 files changed, 39 insertions(+), 22 deletions(-) diff --git a/README.fr.md b/README.fr.md index 0fd227eab7d..b5cec608c56 100644 --- a/README.fr.md +++ b/README.fr.md @@ -217,7 +217,7 @@ Voir le [dépôt dédié à ces extensions](https://github.com/FreshRSS/Extensio # APIs et applications natives -FreshRSS supporte l’accès depuis des applications natives pour Linux, Android, iOS, et OS X, grâce à deux APIs distinctes : +FreshRSS supporte l’accès depuis des applications natives pour Linux, Android, iOS, Windows et macOS, grâce à deux APIs distinctes : [l’API compatible Google Reader](https://freshrss.github.io/FreshRSS/fr/users/06_Mobile_access.html) (la meilleure), et [l’API Fever](https://freshrss.github.io/FreshRSS/fr/users/06_Fever_API.html) (moindres fonctionnalités et moins efficace). @@ -225,21 +225,21 @@ et [l’API Fever](https://freshrss.github.io/FreshRSS/fr/users/06_Fever_API.htm |:--------------------------------------------------------------------------------------|:-----------:|:-------------------------------------------------------------:|:----------------------:|:----------------:|:-------------:|:---------:|:------------------------------:|:-------------------:|:----------:|:------:|:--------:|:------------:| | [News+](https://play.google.com/store/apps/details?id=com.noinnion.android.newsplus) with [Google Reader extension](https://github.com/noinnion/newsplus/blob/master/apk/GoogleReaderCloneExtension_101.apk) | Android | [Partially](https://github.com/noinnion/newsplus/blob/master/extensions/GoogleReaderCloneExtension/src/com/noinnion/android/newsplus/extension/google_reader/) | 2015 | GReader | ✔️ | ⭐⭐⭐ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | | [FeedMe](https://play.google.com/store/apps/details?id=com.seazon.feedme) | Android | ➖ | ✔️✔️ | GReader | ✔️ | ⭐⭐ | ➖ | ➖ | ✔️ | ✓ | ✔️ | ✔️ | -| [RSS Guard](https://github.com/martinrotter/rssguard) | Windows, GNU/Linux, MacOS, OS/2 | ✔️ | ✔️✔️ | GReader | ✔️ | ⭐ | ➖ | ✔️ | ✔️ | ✔️ | ✔️ | ➖ | +| [RSS Guard](https://github.com/martinrotter/rssguard) | Windows, GNU/Linux, macOS, OS/2 | ✔️ | ✔️✔️ | GReader | ✔️ | ⭐ | ➖ | ✔️ | ✔️ | ✔️ | ✔️ | ➖ | | [EasyRSS](https://github.com/Alkarex/EasyRSS) | Android | [✔️](https://github.com/Alkarex/EasyRSS) | ✔️ | GReader | Bug | ⭐⭐ | ➖ | ➖ | ✔️ | ➖ | ➖ | ➖ | | [FocusReader](https://play.google.com/store/apps/details?id=allen.town.focus.reader) | Android | ➖ | ✔️✔️ | GReader | ✔️ | ⭐⭐⭐ | ➖ | ➖ | ✔️ | ➖ | ✓ | ✔️ | | [Readrops](https://github.com/readrops/Readrops) | Android | [✔️](https://github.com/readrops/Readrops) | ✔️✔️ | GReader | ✔️ | ⭐⭐⭐ | ➖ | ➖ | ➖ | ➖ | ➖ | ✔️ | | [ChristopheHenry](https://gitlab.com/christophehenry/freshrss-android) | Android | [✔️](https://gitlab.com/christophehenry/freshrss-android) | En développement | GReader | ✔️ | ⭐⭐ | ➖ | ✔️ | ✔️ | ➖ | ➖ | ➖ | -| [Fluent Reader](https://hyliu.me/fluent-reader/) | Windows, Linux, MacOS| [✔️](https://github.com/yang991178/fluent-reader) | ✔️✔️ | Fever | ✔️ | ⭐ | ➖ | ✔️ | ✔️ | ➖ | ➖ | ➖ | +| [Fluent Reader](https://hyliu.me/fluent-reader/) | Windows, Linux, macOS| [✔️](https://github.com/yang991178/fluent-reader) | ✔️✔️ | Fever | ✔️ | ⭐ | ➖ | ✔️ | ✔️ | ➖ | ➖ | ➖ | | [FeedReader](https://jangernert.github.io/FeedReader/) | GNU/Linux | [✔️](https://jangernert.github.io/FeedReader/) | ✔️ | GReader | ✔️ | ⭐⭐ | ➖ | ✔️ | ✔️ | ➖ | ✔️ | ✔️ | | [NewsFlash](https://gitlab.com/news-flash/news_flash_gtk) | GNU/Linux | [✔️](https://gitlab.com/news-flash/news_flash_gtk) | ✔️✔️ | Fever | ➖ | ⭐⭐ | ✔️ | ✔️ | ✔️ | ➖ | ➖ | ➖ | -| [NewsFlash](https://gitlab.com/news-flash/news_flash_gtk) | GNU/Linux | [✔️](https://gitlab.com/news-flash/news_flash_gtk) | En développement | GReader | ➖ | ❔ | ❔ | ❔ | ❔ | ❔ | ➖ | ❔ || [Newsboat 2.24+](https://newsboat.org/) | GNU/Linux, MacOS, FreeBSD | [✔️](https://github.com/newsboat/newsboat/) | ✔️✔️ | GReader | ➖ | ⭐ | ➖ | ✔️ | ✔️ | ➖ | ✔️ | ➖ | -| [Vienna RSS](http://www.vienna-rss.com/) | MacOS | [✔️](https://github.com/ViennaRSS/vienna-rss) | ✔️✔️ | GReader | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | -| [Reeder](https://www.reederapp.com/) | iOS, MacOS | ➖ | ✔️✔️ | GReader, Fever | ✔️ | ⭐⭐⭐ | ➖ | ✔️ | ✔️ | ➖ | ➖ | ✔️ | +| [NewsFlash](https://gitlab.com/news-flash/news_flash_gtk) | GNU/Linux | [✔️](https://gitlab.com/news-flash/news_flash_gtk) | En développement | GReader | ➖ | ❔ | ❔ | ❔ | ❔ | ❔ | ➖ | ❔ || [Newsboat 2.24+](https://newsboat.org/) | GNU/Linux, macOS, FreeBSD | [✔️](https://github.com/newsboat/newsboat/) | ✔️✔️ | GReader | ➖ | ⭐ | ➖ | ✔️ | ✔️ | ➖ | ✔️ | ➖ | +| [Vienna RSS](http://www.vienna-rss.com/) | macOS | [✔️](https://github.com/ViennaRSS/vienna-rss) | ✔️✔️ | GReader | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | +| [Reeder](https://www.reederapp.com/) | iOS, macOS | ➖ | ✔️✔️ | GReader, Fever | ✔️ | ⭐⭐⭐ | ➖ | ✔️ | ✔️ | ➖ | ➖ | ✔️ | | [Unread](https://apps.apple.com/app/unread-2/id1363637349) | iOS | ➖ | ✔️✔️ | Fever | ✔️ | ❔ | ❔ | ❔ | ✔️ | ➖ | ➖ | ➖ | | [Fiery Feeds](https://apps.apple.com/app/fiery-feeds-rss-reader/id1158763303) | iOS | ➖ | ✔️✔️ | Fever | ❔ | ❔ | ❔ | ❔ | ❔ | ➖ | ➖ | ➖ | -| [Readkit](https://apps.apple.com/app/readkit/id588726889) | MacOS | ➖ | ✔️✔️ | Fever | ✔️ | ❔ | ❔ | ❔ | ❔ | ➖ | ➖ | ➖ | -| [Netnewswire](https://ranchero.com/netnewswire/) | iOS, MacOS | [✔️](https://github.com/Ranchero-Software/NetNewsWire) | En développement | GReader | ✔️ | ❔ | ❔ | ❔ | ✔️ | ➖ | ❔ | ✔️ | +| [Readkit](https://apps.apple.com/app/readkit/id588726889) | macOS | ➖ | ✔️✔️ | Fever | ✔️ | ❔ | ❔ | ❔ | ❔ | ➖ | ➖ | ➖ | +| [Netnewswire](https://ranchero.com/netnewswire/) | iOS, macOS | [✔️](https://github.com/Ranchero-Software/NetNewsWire) | En développement | GReader | ✔️ | ❔ | ❔ | ❔ | ✔️ | ➖ | ❔ | ✔️ | # Bibliothèques incluses diff --git a/README.md b/README.md index 8d6325f0373..1223b4dcd26 100644 --- a/README.md +++ b/README.md @@ -103,7 +103,7 @@ See the [repository dedicated to those extensions](https://github.com/FreshRSS/E # APIs & native apps -FreshRSS supports access from mobile / native apps for Linux, Android, iOS, and OS X, via two distinct APIs: +FreshRSS supports access from mobile / native apps for Linux, Android, iOS, Windows and macOS, via two distinct APIs: [Google Reader API](https://freshrss.github.io/FreshRSS/en/users/06_Mobile_access.html) (best), and [Fever API](https://freshrss.github.io/FreshRSS/en/users/06_Fever_API.html) (limited features and less efficient). @@ -111,22 +111,22 @@ and [Fever API](https://freshrss.github.io/FreshRSS/en/users/06_Fever_API.html) |:--------------------------------------------------------------------------------------|:-----------:|:-------------------------------------------------------------:|:----------------------:|:----------------:|:-------------:|:---------:|:------------------------------:|:-------------------:|:----------:|:------:|:--------:|:------------:| | [News+](https://play.google.com/store/apps/details?id=com.noinnion.android.newsplus) with [Google Reader extension](https://github.com/noinnion/newsplus/blob/master/apk/GoogleReaderCloneExtension_101.apk) | Android | [Partially](https://github.com/noinnion/newsplus/blob/master/extensions/GoogleReaderCloneExtension/src/com/noinnion/android/newsplus/extension/google_reader/) | 2015 | GReader | ✔️ | ⭐⭐⭐ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | | [FeedMe](https://play.google.com/store/apps/details?id=com.seazon.feedme)* | Android | ➖ | ✔️✔️ | GReader | ✔️ | ⭐⭐ | ➖ | ➖ | ✔️ | ✓ | ✔️ | ✔️ | -| [RSS Guard](https://github.com/martinrotter/rssguard) | Windows, GNU/Linux, MacOS, OS/2 | ✔️ | ✔️✔️ | GReader | ✔️ | ⭐ | ➖ | ✔️ | ✔️ | ✔️ | ✔️ | ➖ | +| [RSS Guard](https://github.com/martinrotter/rssguard) | Windows, GNU/Linux, macOS, OS/2 | ✔️ | ✔️✔️ | GReader | ✔️ | ⭐ | ➖ | ✔️ | ✔️ | ✔️ | ✔️ | ➖ | | [EasyRSS](https://github.com/Alkarex/EasyRSS) | Android | [✔️](https://github.com/Alkarex/EasyRSS) | ✔️ | GReader | Bug | ⭐⭐ | ➖ | ➖ | ✔️ | ➖ | ➖ | ➖ | | [Readrops](https://github.com/readrops/Readrops) | Android | [✔️](https://github.com/readrops/Readrops) | ✔️✔️ | GReader | ✔️ | ⭐⭐⭐ | ➖ | ➖ | ➖ | ➖ | ➖ | ✔️ | | [FocusReader](https://play.google.com/store/apps/details?id=allen.town.focus.reader) | Android | ➖ | ✔️✔️ | GReader | ✔️ | ⭐⭐⭐ | ➖ | ➖ | ✔️ | ➖ | ✓ | ✔️ | | [ChristopheHenry](https://gitlab.com/christophehenry/freshrss-android) | Android | [✔️](https://gitlab.com/christophehenry/freshrss-android) | Work in progress | GReader | ✔️ | ⭐⭐ | ➖ | ✔️ | ✔️ | ➖ | ➖ | ➖ | -| [Fluent Reader](https://hyliu.me/fluent-reader/) | Windows, Linux, MacOS| [✔️](https://github.com/yang991178/fluent-reader) | ✔️✔️ | Fever | ✔️ | ⭐ | ➖ | ✔️ | ✔️ | ➖ | ➖ | ➖ | +| [Fluent Reader](https://hyliu.me/fluent-reader/) | Windows, Linux, macOS| [✔️](https://github.com/yang991178/fluent-reader) | ✔️✔️ | Fever | ✔️ | ⭐ | ➖ | ✔️ | ✔️ | ➖ | ➖ | ➖ | | [FeedReader](https://jangernert.github.io/FeedReader/) | GNU/Linux | [✔️](https://jangernert.github.io/FeedReader/) | ✔️ | GReader | ✔️ | ⭐⭐ | ➖ | ✔️ | ✔️ | ➖ | ✔️ | ✔️ | | [NewsFlash](https://gitlab.com/news-flash/news_flash_gtk) | GNU/Linux | [✔️](https://gitlab.com/news-flash/news_flash_gtk) | ✔️✔️ | Fever | ➖ | ⭐⭐ | ✔️ | ✔️ | ✔️ | ➖ | ➖ | ➖ | | [NewsFlash](https://gitlab.com/news-flash/news_flash_gtk) | GNU/Linux | [✔️](https://gitlab.com/news-flash/news_flash_gtk) | Work in Progress | GReader | ➖ | ❔ | ❔ | ❔ | ❔ | ❔ | ➖ | ❔ | -| [Newsboat 2.24+](https://newsboat.org/) | GNU/Linux, MacOS, FreeBSD | [✔️](https://github.com/newsboat/newsboat/) | ✔️✔️ | GReader | ➖ | ⭐ | ➖ | ✔️ | ✔️ | ➖ | ✔️ | ➖ | -| [Vienna RSS](http://www.vienna-rss.com/) | MacOS | [✔️](https://github.com/ViennaRSS/vienna-rss) | ✔️✔️ | GReader | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | -| [Reeder](https://www.reederapp.com/)* | iOS, MacOS | ➖ | ✔️✔️ | GReader, Fever | ✔️ | ⭐⭐⭐ | ➖ | ✔️ | ✔️ | ➖ | ➖ | ✔️ | +| [Newsboat 2.24+](https://newsboat.org/) | GNU/Linux, macOS, FreeBSD | [✔️](https://github.com/newsboat/newsboat/) | ✔️✔️ | GReader | ➖ | ⭐ | ➖ | ✔️ | ✔️ | ➖ | ✔️ | ➖ | +| [Vienna RSS](http://www.vienna-rss.com/) | macOS | [✔️](https://github.com/ViennaRSS/vienna-rss) | ✔️✔️ | GReader | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | +| [Reeder](https://www.reederapp.com/)* | iOS, macOS | ➖ | ✔️✔️ | GReader, Fever | ✔️ | ⭐⭐⭐ | ➖ | ✔️ | ✔️ | ➖ | ➖ | ✔️ | | [Unread](https://apps.apple.com/app/unread-2/id1363637349) | iOS | ➖ | ✔️✔️ | Fever | ✔️ | ❔ | ❔ | ❔ | ✔️ | ➖ | ➖ | ➖ | | [Fiery Feeds](https://apps.apple.com/app/fiery-feeds-rss-reader/id1158763303) | iOS | ➖ | ✔️✔️ | Fever | ❔ | ❔ | ❔ | ❔ | ❔ | ➖ | ➖ | ➖ | -| [Readkit](https://apps.apple.com/app/readkit/id588726889) | MacOS | ➖ | ✔️✔️ | Fever | ✔️ | ❔ | ❔ | ❔ | ❔ | ➖ | ➖ | ➖ | -| [Netnewswire](https://ranchero.com/netnewswire/) | iOS, MacOS | [✔️](https://github.com/Ranchero-Software/NetNewsWire) | Work in progress | GReader | ✔️ | ❔ | ❔ | ❔ | ✔️ | ➖ | ❔ | ✔️ | +| [Readkit](https://apps.apple.com/app/readkit/id588726889) | macOS | ➖ | ✔️✔️ | Fever | ✔️ | ❔ | ❔ | ❔ | ❔ | ➖ | ➖ | ➖ | +| [Netnewswire](https://ranchero.com/netnewswire/) | iOS, macOS | [✔️](https://github.com/Ranchero-Software/NetNewsWire) | Work in progress | GReader | ✔️ | ❔ | ❔ | ❔ | ✔️ | ➖ | ❔ | ✔️ | \* Install and enable the [GReader Redate extension](https://github.com/javerous/freshrss-greader-redate) to have the correct publication date for feed articles if you are using Reeder or FeedMe. diff --git a/docs/en/developers/06_GoogleReader_API.md b/docs/en/developers/06_GoogleReader_API.md index 970ce824f17..ebfa6cc7e71 100644 --- a/docs/en/developers/06_GoogleReader_API.md +++ b/docs/en/developers/06_GoogleReader_API.md @@ -30,8 +30,8 @@ Then point your mobile application to the `greader.php` address (e.g. `https://f |[FocusReader](https://play.google.com/store/apps/details?id=allen.town.focus.reader) |Android |Closed Source(Free) | |[FeedReader 2.0+](https://jangernert.github.io/FeedReader/) |Linux |[GPLv3](https://github.com/jangernert/FeedReader/blob/master/LICENSE) | |[Newsboat 2.24+](https://newsboat.org/) |Linux |[MIT](https://github.com/newsboat/newsboat/blob/master/LICENSE) | -|[Vienna RSS](http://www.vienna-rss.com/) |MacOS |[Apache-2.0](https://github.com/ViennaRSS/vienna-rss/blob/master/LICENCE.md) | -|[Reeder](https://www.reederapp.com/) |MacOS, iOS |Closed Source | +|[Vienna RSS](http://www.vienna-rss.com/) |macOS |[Apache-2.0](https://github.com/ViennaRSS/vienna-rss/blob/master/LICENCE.md) | +|[Reeder](https://www.reederapp.com/) |macOS, iOS |Closed Source | |[FreshRSS-Notify](https://addons.mozilla.org/firefox/addon/freshrss-notify-webextension/) |Firefox |Open Source | ## Google Reader compatible API diff --git a/docs/en/users/06_Mobile_access.md b/docs/en/users/06_Mobile_access.md index 91271e77131..1795cf962a4 100644 --- a/docs/en/users/06_Mobile_access.md +++ b/docs/en/users/06_Mobile_access.md @@ -1,6 +1,23 @@ This page assumes you have completed the [server setup](../admins/03_Installation.md). -# Enable the API in FreshRSS +# Mobile Access + +You can access FreshRSS on mobile devices via browser and via mobile apps. + + +## Access via Browser + +The FreshRSS user interface is optimized for both small and large screens. The content will fit nicely on small mobile device screens as well. + + +## Access via Mobile App + +FreshRSS supports access from mobile / native apps for Linux, Android, iOS, Windows and macOS, via two distinct APIs: Google Reader API (best), and Fever API (limited features and less efficient). + +A list of known apps is available on the [FreshRSS GitHub page](https://github.com/FreshRSS/FreshRSS#apis--native-apps). + + +### Enable the API in FreshRSS 1. Under the section “Authentication”, enable the option “Allow API access (required for mobile apps)”. 2. Under the section “Profile”, fill-in the field “API password (e.g., for mobile apps)”. @@ -11,7 +28,7 @@ See the [page about the Google Reader compatible API](../developers/06_GoogleRea See the [page about the Fever compatible API](../developers/06_Fever_API.md) for more details. -# Testing +### Testing 1. Under the section “Profile”, click on the link like `https://rss.example.net/api/` next to the field “API password”. 2. Click on first link “Check full server configuration”: @@ -20,7 +37,7 @@ See the [page about the Fever compatible API](../developers/06_Fever_API.md) for * If you get any other error message, proceed to step 5. -# Fix server configuration +### Fix server configuration * Click on the second link “Check partial server configuration (without `%2F` support)”: * If you get `PASS`, then the problem is indeed that your server does not accept slashes `/` that are escaped `%2F`. diff --git a/docs/fr/users/06_Mobile_access.md b/docs/fr/users/06_Mobile_access.md index 8bd0ebd8dca..3156a2acefb 100644 --- a/docs/fr/users/06_Mobile_access.md +++ b/docs/fr/users/06_Mobile_access.md @@ -62,7 +62,7 @@ possibilité. * Linux * [FeedReader 2.0+](https://jangernert.github.io/FeedReader/) (Libre) * [Newsboat 2.24+](https://newsboat.org/) (Libre) - * MacOS + * macOS * [Vienna RSS](http://www.vienna-rss.com/) (Libre) * [Reeder](https://www.reederapp.com/) (Commercial) * iOS From fa23ae76ea46b329fb65329081df95e864b03b23 Mon Sep 17 00:00:00 2001 From: maTh Date: Sun, 27 Feb 2022 22:43:53 +0100 Subject: [PATCH 0177/2479] fix (#4240) --- app/Controllers/feedController.php | 1 - app/views/feed/add.phtml | 1 - 2 files changed, 2 deletions(-) diff --git a/app/Controllers/feedController.php b/app/Controllers/feedController.php index a9825bf8b84..f18a67072fa 100755 --- a/app/Controllers/feedController.php +++ b/app/Controllers/feedController.php @@ -120,7 +120,6 @@ public static function addFeed($url, $title = '', $cat_id = 0, $new_cat_name = ' * Parameters are: * - url_rss (default: false) * - category (default: false) - * - new_category (required if category == 'nc') * - http_user (default: false) * - http_pass (default: false) * It tries to get website information from RSS feed. diff --git a/app/views/feed/add.phtml b/app/views/feed/add.phtml index fb3d89ef526..f5f582249bd 100644 --- a/app/views/feed/add.phtml +++ b/app/views/feed/add.phtml @@ -55,7 +55,6 @@ name() ?> -
    + +
    + +
    + +
    +
    + +
    + feed->attributes('xpath')); + ?> +

    +
    + +
    + +

    +
    +
    +
    + +
    + +

    +
    +
    +
    + +
    + +

    +
    +
    +
    + +
    + +

    +
    +
    +
    + +
    + +

    +
    +
    +
    + +
    + +

    +
    +
    +
    + +
    + +

    +
    +
    +
    + +
    + +

    +
    +
    +
    + +
    + +
    +
    +
    +
    +
    + + +
    +
    +
    diff --git a/app/views/index/normal.phtml b/app/views/index/normal.phtml index 5dde2a1712f..06323dcb0b9 100644 --- a/app/views/index/normal.phtml +++ b/app/views/index/normal.phtml @@ -21,14 +21,17 @@ $today = @strtotime('today');
    entries as $item): $lastEntry = $item; $nbEntries++; ob_flush(); - $this->entry = Minz_ExtensionManager::callHook('entry_before_display', $item); - if ($this->entry == null) { + /** @var FreshRSS_Entry */ + $item = Minz_ExtensionManager::callHook('entry_before_display', $item); + if ($item == null) { continue; } + $this->entry = $item; // We most likely already have the feed object in cache $this->feed = FreshRSS_CategoryDAO::findFeed($this->categories, $this->entry->feed()); diff --git a/app/views/index/reader.phtml b/app/views/index/reader.phtml index e4fb74708c9..b408e348052 100644 --- a/app/views/index/reader.phtml +++ b/app/views/index/reader.phtml @@ -15,10 +15,12 @@ $content_width = FreshRSS_Context::$user_conf->content_width;
    entries as $item): $lastEntry = $item; $nbEntries++; ob_flush(); + /** @var FreshRSS_Entry */ $item = Minz_ExtensionManager::callHook('entry_before_display', $item); if ($item == null) { continue; diff --git a/app/views/index/rss.phtml b/app/views/index/rss.phtml index eedb31fa4eb..0b07a02f3ea 100755 --- a/app/views/index/rss.phtml +++ b/app/views/index/rss.phtml @@ -1,15 +1,26 @@ '; ?> - +rss_base == '' ? '' : ' xml:base="' . $this->rss_base . '"' ?> +> <?= $this->rss_title ?> - + internal_rendering ? $this->rss_url : Minz_Url::display('', 'html', true) ?> rss_title) ?> GMT - + entries as $item) { + if (!$this->internal_rendering) { + /** @var FreshRSS_Entry */ + $item = Minz_ExtensionManager::callHook('entry_before_display', $item); + if ($item == null) { + continue; + } + } ?> <?= $item->title() ?> @@ -27,12 +38,23 @@ foreach ($this->entries as $item) { echo "\t\t\t" , '', $category, '', "\n"; } } + $enclosures = $item->enclosures(false); + if (is_array($enclosures)) { + foreach ($enclosures as $enclosure) { + // https://www.rssboard.org/media-rss + echo "\t\t\t" , '', "\n"; + } + } ?> content(); ?>]]> date(true)) ?> - id() ?> + id() > 0 ? $item->id() : $item->guid() ?> diff --git a/app/views/subscription/add.phtml b/app/views/subscription/add.phtml index 380f5434fda..344e25ade71 100644 --- a/app/views/subscription/add.phtml +++ b/app/views/subscription/add.phtml @@ -51,6 +51,97 @@
    +
    + + + + +
    + +
    + +
    +
    + +
    +

    +
    + +
    + +

    +
    +
    +
    + +
    + +

    +
    +
    +
    + +
    + +

    +
    +
    +
    + +
    + +

    +
    +
    +
    + +
    + +

    +
    +
    +
    + +
    + +

    +
    +
    +
    + +
    + +

    +
    +
    +
    + +
    + +

    +
    +
    +
    + +
    + +
    +
    +
    +
    +
    diff --git a/data/cache/.gitignore b/data/cache/.gitignore index 0307e6493c2..6c43765c712 100644 --- a/data/cache/.gitignore +++ b/data/cache/.gitignore @@ -1 +1,3 @@ -*.spc \ No newline at end of file +*.spc +*.html +!index.html diff --git a/lib/Minz/Url.php b/lib/Minz/Url.php index be3184b405e..40cadb49afb 100644 --- a/lib/Minz/Url.php +++ b/lib/Minz/Url.php @@ -121,7 +121,8 @@ public static function checkUrl ($url) { /** * @param string $controller * @param string $action - * @param string ...$args + * @param string|int ...$args + * @return string|false */ function _url ($controller, $action, ...$args) { $nb_args = count($args); @@ -132,8 +133,8 @@ function _url ($controller, $action, ...$args) { $params = array (); for ($i = 0; $i < $nb_args; $i += 2) { - $arg = $args[$i]; - $params[$arg] = $args[$i + 1]; + $arg = '' . $args[$i]; + $params[$arg] = '' . $args[$i + 1]; } return Minz_Url::display (array ('c' => $controller, 'a' => $action, 'params' => $params)); diff --git a/lib/Minz/View.php b/lib/Minz/View.php index 431a8b70091..6cf811bff95 100644 --- a/lib/Minz/View.php +++ b/lib/Minz/View.php @@ -112,6 +112,12 @@ public function render () { } } + public function renderToString(): string { + ob_start(); + $this->render(); + return ob_get_clean(); + } + /** * Ajoute un élément du layout * @param string $part l'élément partial à ajouter diff --git a/lib/SimplePie/SimplePie.php b/lib/SimplePie/SimplePie.php index b0e973e83b9..bf4a66bb4c0 100644 --- a/lib/SimplePie/SimplePie.php +++ b/lib/SimplePie/SimplePie.php @@ -2275,7 +2275,7 @@ public function get_image_tags($namespace, $tag) */ public function get_base($element = array()) { - if (!($this->get_type() & SIMPLEPIE_TYPE_RSS_SYNDICATION) && !empty($element['xml_base_explicit']) && isset($element['xml_base'])) + if (!empty($element['xml_base_explicit']) && isset($element['xml_base'])) { return $element['xml_base']; } diff --git a/lib/lib_phpQuery.php b/lib/lib_phpQuery.php index 411aa120cb9..1fabfcb6dc8 100644 --- a/lib/lib_phpQuery.php +++ b/lib/lib_phpQuery.php @@ -436,7 +436,8 @@ protected function isXHTML($markup = null) { } protected function isXML($markup) { // return strpos($markup, 'set_cache_name_function('sha1'); $simplePie->set_cache_location(CACHE_PATH); $simplePie->set_cache_duration($limits['cache_duration']); + $simplePie->enable_order_by_date(false); $feed_timeout = empty($attributes['timeout']) ? 0 : intval($attributes['timeout']); $simplePie->set_timeout($feed_timeout > 0 ? $feed_timeout : $limits['timeout']); @@ -290,7 +291,10 @@ function customSimplePie($attributes = array()): SimplePie { return $simplePie; } -function sanitizeHTML($data, $base = '', $maxLength = false) { +/** + * @param int|false $maxLength + */ +function sanitizeHTML($data, string $base = '', $maxLength = false) { if (!is_string($data) || ($maxLength !== false && $maxLength <= 0)) { return ''; } @@ -311,6 +315,127 @@ function sanitizeHTML($data, $base = '', $maxLength = false) { return $result; } +function cleanCache(int $hours = 720) { + $files = glob(CACHE_PATH . '/*.{html,spc}', GLOB_BRACE | GLOB_NOSORT); + foreach ($files as $file) { + if (substr($file, -10) === 'index.html') { + continue; + } + $cacheMtime = @filemtime($file); + if ($cacheMtime !== false && $cacheMtime < time() - (3600 * $hours)) { + unlink($file); + } + } +} + +/** + * Set an XML preamble to enforce the HTML content type charset received by HTTP. + * @param string $html the row downloaded HTML content + * @param string $contentType an HTTP Content-Type such as 'text/html; charset=utf-8' + * @return string an HTML string with XML encoding information for DOMDocument::loadHTML() + */ +function enforceHttpEncoding(string $html, string $contentType = ''): string { + $httpCharset = preg_match('/\bcharset=([0-9a-z_-]{2,12})$/i', $contentType, $matches) === false ? '' : $matches[1] ?? ''; + if ($httpCharset == '') { + // No charset defined by HTTP, do nothing + return $html; + } + $httpCharsetNormalized = SimplePie_Misc::encoding($httpCharset); + if ($httpCharsetNormalized === 'windows-1252') { + // Default charset for HTTP, do nothing + return $html; + } + if (substr($html, 0, 3) === "\xEF\xBB\xBF" || // UTF-8 BOM + substr($html, 0, 2) === "\xFF\xFE" || // UTF-16 Little Endian BOM + substr($html, 0, 2) === "\xFE\xFF" || // UTF-16 Big Endian BOM + substr($html, 0, 4) === "\xFF\xFE\x00\x00" || // UTF-32 Little Endian BOM + substr($html, 0, 4) === "\x00\x00\xFE\xFF") { // UTF-32 Big Endian BOM + // Existing byte order mark, do nothing + return $html; + } + if (preg_match('/^<[?]xml[^>]+encoding\b/', substr($html, 0, 64))) { + // Existing XML declaration, do nothing + return $html; + } + return '<' . '?xml version="1.0" encoding="' . $httpCharsetNormalized . '" ?' . ">\n" . $html; +} + +/** + * @param array $attributes + */ +function getHtml(string $url, array $attributes = []): string { + $limits = FreshRSS_Context::$system_conf->limits; + $feed_timeout = empty($attributes['timeout']) ? 0 : intval($attributes['timeout']); + + $cachePath = FreshRSS_Feed::cacheFilename($url, $attributes, FreshRSS_Feed::KIND_HTML_XPATH); + $cacheMtime = @filemtime($cachePath); + if ($cacheMtime !== false && $cacheMtime > time() - intval($limits['cache_duration'])) { + $html = @file_get_contents($cachePath); + if ($html != '') { + syslog(LOG_DEBUG, 'FreshRSS uses cache for ' . SimplePie_Misc::url_remove_credentials($url)); + return $html; + } + } + + if (mt_rand(0, 30) === 1) { // Remove old entries once in a while + cleanCache(); + } + + if (FreshRSS_Context::$system_conf->simplepie_syslog_enabled) { + syslog(LOG_INFO, 'FreshRSS GET ' . SimplePie_Misc::url_remove_credentials($url)); + } + + // TODO: Implement HTTP 1.1 conditional GET If-Modified-Since + $ch = curl_init(); + curl_setopt_array($ch, [ + CURLOPT_URL => $url, + CURLOPT_REFERER => SimplePie_Misc::url_remove_credentials($url), + CURLOPT_HTTPHEADER => array('Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'), + CURLOPT_USERAGENT => FRESHRSS_USERAGENT, + CURLOPT_CONNECTTIMEOUT => $feed_timeout > 0 ? $feed_timeout : $limits['timeout'], + CURLOPT_TIMEOUT => $feed_timeout > 0 ? $feed_timeout : $limits['timeout'], + //CURLOPT_FAILONERROR => true; + CURLOPT_MAXREDIRS => 4, + CURLOPT_RETURNTRANSFER => true, + CURLOPT_FOLLOWLOCATION => true, + CURLOPT_ENCODING => '', //Enable all encodings + ]); + + curl_setopt_array($ch, FreshRSS_Context::$system_conf->curl_options); + + if (isset($attributes['curl_params']) && is_array($attributes['curl_params'])) { + curl_setopt_array($ch, $attributes['curl_params']); + } + + if (isset($attributes['ssl_verify'])) { + curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, $attributes['ssl_verify'] ? 2 : 0); + curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, $attributes['ssl_verify'] ? true : false); + if (!$attributes['ssl_verify']) { + curl_setopt($ch, CURLOPT_SSL_CIPHER_LIST, 'DEFAULT@SECLEVEL=1'); + } + } + $html = curl_exec($ch); + $c_status = curl_getinfo($ch, CURLINFO_HTTP_CODE); + $c_content_type = curl_getinfo($ch, CURLINFO_CONTENT_TYPE); //TODO: Check if that may be null + $c_error = curl_error($ch); + curl_close($ch); + + if ($c_status != 200 || $c_error != '' || $html === false) { + Minz_Log::warning('Error fetching content: HTTP code ' . $c_status . ': ' . $c_error . ' ' . $url); + } + if ($html == false) { + $html = ''; + } else { + $html = enforceHttpEncoding($html, $c_content_type); + } + + if (file_put_contents($cachePath, $html) === false) { + Minz_Log::warning("Error saving cache $cachePath for $url"); + } + + return $html; +} + /** * Validate an email address, supports internationalized addresses. * diff --git a/p/api/fever.php b/p/api/fever.php index beb0883e4be..139cd658a1e 100644 --- a/p/api/fever.php +++ b/p/api/fever.php @@ -114,7 +114,7 @@ public function findEntries(array $feed_ids, array $entry_ids, string $max_id, s $entries = array(); foreach ($result as $dao) { - $entries[] = FreshRSS_EntryDAO::daoToEntry($dao); + $entries[] = FreshRSS_Entry::fromArray($dao); } return $entries; diff --git a/p/api/greader.php b/p/api/greader.php index 7c4aba9eae6..43e3647d113 100644 --- a/p/api/greader.php +++ b/p/api/greader.php @@ -536,6 +536,7 @@ function entriesToArray($entries) { $items = array(); foreach ($entries as $item) { + /** @var FreshRSS_Entry $entry */ $entry = Minz_ExtensionManager::callHook('entry_before_display', $item); if ($entry == null) { continue; diff --git a/p/scripts/extra.js b/p/scripts/extra.js index 00a4609170e..505b0511047 100644 --- a/p/scripts/extra.js +++ b/p/scripts/extra.js @@ -213,6 +213,49 @@ function init_configuration_alert() { }; } +/** + * Allow a -

    -
    -
    diff --git a/app/views/subscription/add.phtml b/app/views/subscription/add.phtml index 344e25ade71..78380a407d6 100644 --- a/app/views/subscription/add.phtml +++ b/app/views/subscription/add.phtml @@ -72,7 +72,7 @@
    - +

    From cc6deadf69cfee717c29bb23c3405d1d730455a7 Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Sun, 6 Mar 2022 23:36:35 +0100 Subject: [PATCH 0189/2479] Faster $simplePie->get_items() (#4263) Implement one of the TODOs from https://github.com/FreshRSS/FreshRSS/pull/4220 : use `$simplePie->get_items()` instead of very slow `$simplePie->get_item($i)` --- app/Models/Feed.php | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/app/Models/Feed.php b/app/Models/Feed.php index 93403684563..baaf448f8ce 100644 --- a/app/Models/Feed.php +++ b/app/Models/Feed.php @@ -395,9 +395,12 @@ public function loadGuids(SimplePie $simplePie) { $guids = []; $hasBadGuids = $this->attributes('hasBadGuids'); - // TODO: Replace very slow $simplePie->get_item($i) by getting all items at once - for ($i = $simplePie->get_item_quantity() - 1; $i >= 0; $i--) { - $item = $simplePie->get_item($i); + $items = $simplePie->get_items(); + if (empty($items)) { + return $guids; + } + for ($i = count($items) - 1; $i >= 0; $i--) { + $item = $items[$i]; if ($item == null) { continue; } @@ -423,10 +426,13 @@ public function loadGuids(SimplePie $simplePie) { public function loadEntries(SimplePie $simplePie) { $hasBadGuids = $this->attributes('hasBadGuids'); + $items = $simplePie->get_items(); + if (empty($items)) { + return; + } // We want chronological order and SimplePie uses reverse order. - // TODO: Replace very slow $simplePie->get_item($i) by getting all items at once - for ($i = $simplePie->get_item_quantity() - 1; $i >= 0; $i--) { - $item = $simplePie->get_item($i); + for ($i = count($items) - 1; $i >= 0; $i--) { + $item = $items[$i]; if ($item == null) { continue; } From c7790bc59a285b2c7ffb1dc063656fd672a2bf03 Mon Sep 17 00:00:00 2001 From: maTh Date: Tue, 8 Mar 2022 08:42:12 +0100 Subject: [PATCH 0190/2479] Documentation: added information about code checks (#4266) * Update 02_First_steps.md * Update 02_First_steps.md * Update 02_First_steps.md * Update 02_First_steps.md * Update 02_First_steps.md --- docs/en/developers/02_First_steps.md | 34 ++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/docs/en/developers/02_First_steps.md b/docs/en/developers/02_First_steps.md index e79d86691e0..9199863a51c 100644 --- a/docs/en/developers/02_First_steps.md +++ b/docs/en/developers/02_First_steps.md @@ -69,6 +69,40 @@ If you want to contribute to the source code, it’s important to follow the pro Contributions which don’t follow the coding style will be rejected as long as the coding style is not fixed. +### Checked files via GitHub Actions + +The code will be checked within every Pull Request commit on GitHub (via GitHub Actions, config file see `.github/workflows/tests.yml`). + +Tests can be run locally, e.g. by running `make test-all` (require npm and node.js installed), and several problems can be automatically fixed by running `make fix-all` + +A short (not complete) summary: + +#### PHP + +- Syntax of `php` and `phtml` files is checked. +- translation files (`i18n`) are checked ([more information about i18n files](internationalization.html)). +- unit test (`tests`) are run by [PHPunit](https://phpunit.de/). +- Linter: + - [PHP_Codesniffer (phpcs)](https://github.com/squizlabs/PHP_CodeSniffer) + - [PHPstan](https://github.com/phpstan/phpstan) + +### CSS + +- Linter: + - [PHP_Codesniffer (phpcs)](https://github.com/squizlabs/PHP_CodeSniffer) + - via npm `.styleintrc.json` + - check that RTL (right-to-left) CSS files match to standard CSS files + +### JavaScript + +- Linter: + - via npm `.styleintrc.json` ([ECMAScript 2017](https://en.wikipedia.org/wiki/ECMAScript#8th_Edition_%E2%80%93_ECMAScript_2017)) + +### Markdown + +- Linter: + - via npm `.markdownlint.json` + ## Spaces, tabs and other whitespace characters ### Indentation From d4db9c5a091f9217af533fcdfc79cc8bad546e8e Mon Sep 17 00:00:00 2001 From: maTh Date: Mon, 14 Mar 2022 19:53:33 +0100 Subject: [PATCH 0191/2479] More sharing services (#4270) * added: Xing * added: Reddit * added: Pinterest * added: Whatsapp --- app/i18n/cz/gen.php | 4 ++++ app/i18n/de/gen.php | 4 ++++ app/i18n/en-us/gen.php | 4 ++++ app/i18n/en/gen.php | 4 ++++ app/i18n/es/gen.php | 4 ++++ app/i18n/fr/gen.php | 4 ++++ app/i18n/he/gen.php | 4 ++++ app/i18n/it/gen.php | 4 ++++ app/i18n/ja/gen.php | 4 ++++ app/i18n/ko/gen.php | 4 ++++ app/i18n/nl/gen.php | 4 ++++ app/i18n/oc/gen.php | 4 ++++ app/i18n/pl/gen.php | 4 ++++ app/i18n/pt-br/gen.php | 4 ++++ app/i18n/ru/gen.php | 4 ++++ app/i18n/sk/gen.php | 4 ++++ app/i18n/tr/gen.php | 4 ++++ app/i18n/zh-cn/gen.php | 4 ++++ app/shares.php | 28 ++++++++++++++++++++++++++++ 19 files changed, 100 insertions(+) diff --git a/app/i18n/cz/gen.php b/app/i18n/cz/gen.php index 70a82d77657..853f4d0d920 100644 --- a/app/i18n/cz/gen.php +++ b/app/i18n/cz/gen.php @@ -203,13 +203,17 @@ 'mastodon' => 'Mastodon', // IGNORE 'movim' => 'Movim', // IGNORE 'pinboard' => 'Pinboard', // IGNORE + 'pinterest' => 'Pinterest', // TODO 'pocket' => 'Pocket', // IGNORE 'print' => 'Tisknout', 'raindrop' => 'Raindrop.io', // IGNORE + 'reddit' => 'Reddit', // TODO 'shaarli' => 'Shaarli', // IGNORE 'twitter' => 'Twitter', // IGNORE 'wallabag' => 'Wallabag v1', 'wallabagv2' => 'Wallabag v2', + 'whatsapp' => 'Whatsapp', // TODO + 'xing' => 'Xing', // TODO ), 'short' => array( 'attention' => 'Upozornění!', diff --git a/app/i18n/de/gen.php b/app/i18n/de/gen.php index 7808e99e76e..3f81a2e3467 100644 --- a/app/i18n/de/gen.php +++ b/app/i18n/de/gen.php @@ -203,13 +203,17 @@ 'mastodon' => 'Mastodon', // IGNORE 'movim' => 'Movim', // IGNORE 'pinboard' => 'Pinboard', // IGNORE + 'pinterest' => 'Pinterest', // TODO 'pocket' => 'Pocket', // IGNORE 'print' => 'Drucken', 'raindrop' => 'Raindrop.io', // IGNORE + 'reddit' => 'Reddit', // TODO 'shaarli' => 'Shaarli', // IGNORE 'twitter' => 'Twitter', // IGNORE 'wallabag' => 'wallabag v1', // IGNORE 'wallabagv2' => 'wallabag v2', // IGNORE + 'whatsapp' => 'Whatsapp', // TODO + 'xing' => 'Xing', // TODO ), 'short' => array( 'attention' => 'Achtung!', diff --git a/app/i18n/en-us/gen.php b/app/i18n/en-us/gen.php index ea05cfb2017..35d2c2cfd3b 100644 --- a/app/i18n/en-us/gen.php +++ b/app/i18n/en-us/gen.php @@ -203,13 +203,17 @@ 'mastodon' => 'Mastodon', // IGNORE 'movim' => 'Movim', // IGNORE 'pinboard' => 'Pinboard', // IGNORE + 'pinterest' => 'Pinterest', // TODO 'pocket' => 'Pocket', // IGNORE 'print' => 'Print', // IGNORE 'raindrop' => 'Raindrop.io', // IGNORE + 'reddit' => 'Reddit', // TODO 'shaarli' => 'Shaarli', // IGNORE 'twitter' => 'Twitter', // IGNORE 'wallabag' => 'wallabag v1', // IGNORE 'wallabagv2' => 'wallabag v2', // IGNORE + 'whatsapp' => 'Whatsapp', // TODO + 'xing' => 'Xing', // TODO ), 'short' => array( 'attention' => 'Warning!', // IGNORE diff --git a/app/i18n/en/gen.php b/app/i18n/en/gen.php index ae09a83dd88..9fd81a71647 100644 --- a/app/i18n/en/gen.php +++ b/app/i18n/en/gen.php @@ -203,13 +203,17 @@ 'mastodon' => 'Mastodon', 'movim' => 'Movim', 'pinboard' => 'Pinboard', + 'pinterest' => 'Pinterest', // TODO 'pocket' => 'Pocket', 'print' => 'Print', 'raindrop' => 'Raindrop.io', + 'reddit' => 'Reddit', // TODO 'shaarli' => 'Shaarli', 'twitter' => 'Twitter', 'wallabag' => 'wallabag v1', 'wallabagv2' => 'wallabag v2', + 'whatsapp' => 'Whatsapp', // TODO + 'xing' => 'Xing', // TODO ), 'short' => array( 'attention' => 'Warning!', diff --git a/app/i18n/es/gen.php b/app/i18n/es/gen.php index b4a3bacbc99..de7b53924c1 100755 --- a/app/i18n/es/gen.php +++ b/app/i18n/es/gen.php @@ -203,13 +203,17 @@ 'mastodon' => 'Mastodon', // IGNORE 'movim' => 'Movim', // IGNORE 'pinboard' => 'Pinboard', // IGNORE + 'pinterest' => 'Pinterest', // TODO 'pocket' => 'Pocket', // IGNORE 'print' => 'Imprimir', 'raindrop' => 'Raindrop.io', // IGNORE + 'reddit' => 'Reddit', // TODO 'shaarli' => 'Shaarli', // IGNORE 'twitter' => 'Twitter', // IGNORE 'wallabag' => 'wallabag v1', // IGNORE 'wallabagv2' => 'wallabag v2', // IGNORE + 'whatsapp' => 'Whatsapp', // TODO + 'xing' => 'Xing', // TODO ), 'short' => array( 'attention' => '¡Aviso!', diff --git a/app/i18n/fr/gen.php b/app/i18n/fr/gen.php index da10f21fdac..80a1d727615 100644 --- a/app/i18n/fr/gen.php +++ b/app/i18n/fr/gen.php @@ -203,13 +203,17 @@ 'mastodon' => 'Mastodon', // IGNORE 'movim' => 'Movim', // IGNORE 'pinboard' => 'Pinboard', // IGNORE + 'pinterest' => 'Pinterest', // TODO 'pocket' => 'Pocket', // IGNORE 'print' => 'Imprimer', 'raindrop' => 'Raindrop.io', // IGNORE + 'reddit' => 'Reddit', // TODO 'shaarli' => 'Shaarli', // IGNORE 'twitter' => 'Twitter', // IGNORE 'wallabag' => 'wallabag v1', // IGNORE 'wallabagv2' => 'wallabag v2', // IGNORE + 'whatsapp' => 'Whatsapp', // TODO + 'xing' => 'Xing', // TODO ), 'short' => array( 'attention' => 'Attention !', diff --git a/app/i18n/he/gen.php b/app/i18n/he/gen.php index 906ced7a04e..e9da2bb9e83 100644 --- a/app/i18n/he/gen.php +++ b/app/i18n/he/gen.php @@ -203,13 +203,17 @@ 'mastodon' => 'Mastodon', // IGNORE 'movim' => 'Movim', // IGNORE 'pinboard' => 'Pinboard', // IGNORE + 'pinterest' => 'Pinterest', // TODO 'pocket' => 'Pocket', // IGNORE 'print' => 'הדפסה', 'raindrop' => 'Raindrop.io', // IGNORE + 'reddit' => 'Reddit', // TODO 'shaarli' => 'Shaarli', // IGNORE 'twitter' => 'Twitter', // IGNORE 'wallabag' => 'wallabag v1', // IGNORE 'wallabagv2' => 'wallabag v2', // IGNORE + 'whatsapp' => 'Whatsapp', // TODO + 'xing' => 'Xing', // TODO ), 'short' => array( 'attention' => 'זהירות!', diff --git a/app/i18n/it/gen.php b/app/i18n/it/gen.php index f3d237621e6..b65b7305dd0 100644 --- a/app/i18n/it/gen.php +++ b/app/i18n/it/gen.php @@ -203,13 +203,17 @@ 'mastodon' => 'Mastodon', // IGNORE 'movim' => 'Movim', // IGNORE 'pinboard' => 'Pinboard', // IGNORE + 'pinterest' => 'Pinterest', // TODO 'pocket' => 'Pocket', // IGNORE 'print' => 'Stampa', 'raindrop' => 'Raindrop.io', // IGNORE + 'reddit' => 'Reddit', // TODO 'shaarli' => 'Shaarli', // IGNORE 'twitter' => 'Twitter', // IGNORE 'wallabag' => 'wallabag v1', // IGNORE 'wallabagv2' => 'wallabag v2', // IGNORE + 'whatsapp' => 'Whatsapp', // TODO + 'xing' => 'Xing', // TODO ), 'short' => array( 'attention' => 'Attenzione!', diff --git a/app/i18n/ja/gen.php b/app/i18n/ja/gen.php index a2efd0e5c74..360ae1d8781 100644 --- a/app/i18n/ja/gen.php +++ b/app/i18n/ja/gen.php @@ -203,13 +203,17 @@ 'mastodon' => 'Mastodon', // IGNORE 'movim' => 'Movim', // IGNORE 'pinboard' => 'Pinboard', // IGNORE + 'pinterest' => 'Pinterest', // TODO 'pocket' => 'Pocket', // IGNORE 'print' => '印刷', 'raindrop' => 'Raindrop.io', // IGNORE + 'reddit' => 'Reddit', // TODO 'shaarli' => 'Shaarli', // IGNORE 'twitter' => 'Twitter', // IGNORE 'wallabag' => 'wallabag v1', // IGNORE 'wallabagv2' => 'wallabag v2', // IGNORE + 'whatsapp' => 'Whatsapp', // TODO + 'xing' => 'Xing', // TODO ), 'short' => array( 'attention' => '警告!', diff --git a/app/i18n/ko/gen.php b/app/i18n/ko/gen.php index e41f161e183..566bdd4d599 100644 --- a/app/i18n/ko/gen.php +++ b/app/i18n/ko/gen.php @@ -203,13 +203,17 @@ 'mastodon' => 'Mastodon', // IGNORE 'movim' => 'Movim', // IGNORE 'pinboard' => 'Pinboard', // IGNORE + 'pinterest' => 'Pinterest', // TODO 'pocket' => 'Pocket', // IGNORE 'print' => '인쇄', 'raindrop' => 'Raindrop.io', // IGNORE + 'reddit' => 'Reddit', // TODO 'shaarli' => 'Shaarli', // IGNORE 'twitter' => 'Twitter', // IGNORE 'wallabag' => 'wallabag v1', // IGNORE 'wallabagv2' => 'wallabag v2', // IGNORE + 'whatsapp' => 'Whatsapp', // TODO + 'xing' => 'Xing', // TODO ), 'short' => array( 'attention' => '경고!', diff --git a/app/i18n/nl/gen.php b/app/i18n/nl/gen.php index 1e50d3dbda1..81b265616f0 100644 --- a/app/i18n/nl/gen.php +++ b/app/i18n/nl/gen.php @@ -203,13 +203,17 @@ 'mastodon' => 'Mastodon', // IGNORE 'movim' => 'Movim', // IGNORE 'pinboard' => 'Pinboard', // IGNORE + 'pinterest' => 'Pinterest', // TODO 'pocket' => 'Pocket', // IGNORE 'print' => 'Print', // IGNORE 'raindrop' => 'Raindrop.io', // IGNORE + 'reddit' => 'Reddit', // TODO 'shaarli' => 'Shaarli', // IGNORE 'twitter' => 'Twitter', // IGNORE 'wallabag' => 'wallabag v1', // IGNORE 'wallabagv2' => 'wallabag v2', // IGNORE + 'whatsapp' => 'Whatsapp', // TODO + 'xing' => 'Xing', // TODO ), 'short' => array( 'attention' => 'Attentie!', diff --git a/app/i18n/oc/gen.php b/app/i18n/oc/gen.php index b1fe438acda..88758ab0d06 100644 --- a/app/i18n/oc/gen.php +++ b/app/i18n/oc/gen.php @@ -203,13 +203,17 @@ 'mastodon' => 'Mastodon', // IGNORE 'movim' => 'Movim', // IGNORE 'pinboard' => 'Pinboard', // IGNORE + 'pinterest' => 'Pinterest', // TODO 'pocket' => 'Pocket', // IGNORE 'print' => 'Imprimir', 'raindrop' => 'Raindrop.io', // IGNORE + 'reddit' => 'Reddit', // TODO 'shaarli' => 'Shaarli', // IGNORE 'twitter' => 'Twitter', // IGNORE 'wallabag' => 'wallabag v1', // IGNORE 'wallabagv2' => 'wallabag v2', // IGNORE + 'whatsapp' => 'Whatsapp', // TODO + 'xing' => 'Xing', // TODO ), 'short' => array( 'attention' => 'Atencion !', diff --git a/app/i18n/pl/gen.php b/app/i18n/pl/gen.php index 3534780a849..2acb5ece2d9 100644 --- a/app/i18n/pl/gen.php +++ b/app/i18n/pl/gen.php @@ -203,13 +203,17 @@ 'mastodon' => 'Mastodon', // IGNORE 'movim' => 'Movim', // IGNORE 'pinboard' => 'Pinboard', // IGNORE + 'pinterest' => 'Pinterest', // TODO 'pocket' => 'Pocket', // IGNORE 'print' => 'Wydruk', 'raindrop' => 'Raindrop.io', // IGNORE + 'reddit' => 'Reddit', // TODO 'shaarli' => 'Shaarli', // IGNORE 'twitter' => 'Twitter', // IGNORE 'wallabag' => 'wallabag v1', // IGNORE 'wallabagv2' => 'wallabag v2', // IGNORE + 'whatsapp' => 'Whatsapp', // TODO + 'xing' => 'Xing', // TODO ), 'short' => array( 'attention' => 'Uwaga!', diff --git a/app/i18n/pt-br/gen.php b/app/i18n/pt-br/gen.php index 0e30634b6d9..744b8978863 100644 --- a/app/i18n/pt-br/gen.php +++ b/app/i18n/pt-br/gen.php @@ -203,13 +203,17 @@ 'mastodon' => 'Mastodon', // IGNORE 'movim' => 'Movim', // IGNORE 'pinboard' => 'Pinboard', // IGNORE + 'pinterest' => 'Pinterest', // TODO 'pocket' => 'Pocket', // IGNORE 'print' => 'Imprimir', 'raindrop' => 'Raindrop.io', // IGNORE + 'reddit' => 'Reddit', // TODO 'shaarli' => 'Shaarli', // IGNORE 'twitter' => 'Twitter', // IGNORE 'wallabag' => 'wallabag v1', // IGNORE 'wallabagv2' => 'wallabag v2', // IGNORE + 'whatsapp' => 'Whatsapp', // TODO + 'xing' => 'Xing', // TODO ), 'short' => array( 'attention' => 'Atenção!', diff --git a/app/i18n/ru/gen.php b/app/i18n/ru/gen.php index fee014bbe1d..3a2f2de288f 100644 --- a/app/i18n/ru/gen.php +++ b/app/i18n/ru/gen.php @@ -203,13 +203,17 @@ 'mastodon' => 'Mastodon', // IGNORE 'movim' => 'Movim', // IGNORE 'pinboard' => 'Pinboard', // IGNORE + 'pinterest' => 'Pinterest', // TODO 'pocket' => 'Pocket', // IGNORE 'print' => 'Распечатать', 'raindrop' => 'Raindrop.io', // IGNORE + 'reddit' => 'Reddit', // TODO 'shaarli' => 'Shaarli', // IGNORE 'twitter' => 'Twitter', // IGNORE 'wallabag' => 'wallabag v1', // IGNORE 'wallabagv2' => 'wallabag v2', // IGNORE + 'whatsapp' => 'Whatsapp', // TODO + 'xing' => 'Xing', // TODO ), 'short' => array( 'attention' => 'Предупреждение!', diff --git a/app/i18n/sk/gen.php b/app/i18n/sk/gen.php index faad543f3f0..9c060f690fc 100644 --- a/app/i18n/sk/gen.php +++ b/app/i18n/sk/gen.php @@ -203,13 +203,17 @@ 'mastodon' => 'Mastodon', // IGNORE 'movim' => 'Movim', // IGNORE 'pinboard' => 'Pinboard', // IGNORE + 'pinterest' => 'Pinterest', // TODO 'pocket' => 'Pocket', // IGNORE 'print' => 'Print', // IGNORE 'raindrop' => 'Raindrop.io', // IGNORE + 'reddit' => 'Reddit', // TODO 'shaarli' => 'Shaarli', // IGNORE 'twitter' => 'Twitter', // IGNORE 'wallabag' => 'wallabag v1', // IGNORE 'wallabagv2' => 'wallabag v2', // IGNORE + 'whatsapp' => 'Whatsapp', // TODO + 'xing' => 'Xing', // TODO ), 'short' => array( 'attention' => 'Upozornenie!', diff --git a/app/i18n/tr/gen.php b/app/i18n/tr/gen.php index a4a96360134..56b7a3962b7 100644 --- a/app/i18n/tr/gen.php +++ b/app/i18n/tr/gen.php @@ -203,13 +203,17 @@ 'mastodon' => 'Mastodon', // IGNORE 'movim' => 'Movim', // IGNORE 'pinboard' => 'Pinboard', // IGNORE + 'pinterest' => 'Pinterest', // TODO 'pocket' => 'Pocket', // IGNORE 'print' => 'Print', // IGNORE 'raindrop' => 'Raindrop.io', // IGNORE + 'reddit' => 'Reddit', // TODO 'shaarli' => 'Shaarli', // IGNORE 'twitter' => 'Twitter', // IGNORE 'wallabag' => 'wallabag v1', // IGNORE 'wallabagv2' => 'wallabag v2', // IGNORE + 'whatsapp' => 'Whatsapp', // TODO + 'xing' => 'Xing', // TODO ), 'short' => array( 'attention' => 'Tehlike!', diff --git a/app/i18n/zh-cn/gen.php b/app/i18n/zh-cn/gen.php index ad03d8ca183..9942f98e781 100644 --- a/app/i18n/zh-cn/gen.php +++ b/app/i18n/zh-cn/gen.php @@ -203,13 +203,17 @@ 'mastodon' => 'Mastodon', // IGNORE 'movim' => 'Movim', // IGNORE 'pinboard' => 'Pinboard', // IGNORE + 'pinterest' => 'Pinterest', // TODO 'pocket' => 'Pocket', // IGNORE 'print' => '打印', 'raindrop' => 'Raindrop.io', // IGNORE + 'reddit' => 'Reddit', // TODO 'shaarli' => 'Shaarli', // IGNORE 'twitter' => '推特', // IGNORE 'wallabag' => 'Wallabag v1', // IGNORE 'wallabagv2' => 'Wallabag v2', // IGNORE + 'whatsapp' => 'Whatsapp', // TODO + 'xing' => 'Xing', // TODO ), 'short' => array( 'attention' => '警告!', diff --git a/app/shares.php b/app/shares.php index 330f52bb7c0..9761ed60904 100644 --- a/app/shares.php +++ b/app/shares.php @@ -109,6 +109,13 @@ 'form' => 'simple', 'method' => 'GET', ), + 'pinterest' => array( + 'url' => 'https://pinterest.com/pin/create/button/?url=~LINK~', + 'transform' => array('rawurlencode'), + 'help' => 'https://pinterest.com/', + 'form' => 'simple', + 'method' => 'GET', + ), 'pocket' => array( 'url' => 'https://getpocket.com/save?url=~LINK~&title=~TITLE~', 'transform' => array('rawurlencode'), @@ -127,6 +134,13 @@ 'form' => 'simple', 'method' => 'GET', ), + 'reddit' => array( + 'url' => 'https://www.reddit.com/submit?url=~LINK~', + 'transform' => array('rawurlencode'), + 'help' => 'https://www.reddit.com/wiki/submitting?v=c2ae883a-04b9-11e4-a68c-12313b01a1fc', + 'form' => 'simple', + 'method' => 'GET', + ), 'shaarli' => array( 'url' => '~URL~?post=~LINK~&title=~TITLE~&source=FreshRSS', 'transform' => array('rawurlencode'), @@ -154,4 +168,18 @@ 'form' => 'advanced', 'method' => 'GET', ), + 'whatsapp' => array( + 'url' => 'https://wa.me/?text=~TITLE~ | ~LINK~', + 'transform' => array('rawurlencode'), + 'help' => 'https://faq.whatsapp.com/iphone/how-to-link-to-whatsapp-from-a-different-app/?lang=en', + 'form' => 'simple', + 'method' => 'GET', + ), + 'xing' => array( + 'url' => 'https://www.xing.com/spi/shares/new?url=~LINK~', + 'transform' => array('rawurlencode'), + 'help' => 'https://dev.xing.com/plugins/share_button/docs', + 'form' => 'simple', + 'method' => 'GET', + ), ); From 7b962e246bb9f273dda534b340851db799577dfe Mon Sep 17 00:00:00 2001 From: maTh Date: Mon, 14 Mar 2022 23:03:25 +0100 Subject: [PATCH 0192/2479] Improved: Extension manager: new style (#4181) * new HTML structure. Delete-button moved to slider * Base template * dark templates * fix the position of the circle * fixed HTML * fix for netsurf * Netsurf 2: check if it works * fix phps * Update details.phtml * themes * fix code smell * Update adark.rtl.css * Update dark.rtl.css * fix code smell * fix code smell * fix empty line * readonly mode * Update template.rtl.css * Update details.phtml * Update disabled-light.svg * optimized SVG files * Update app/views/helpers/extension/details.phtml Co-authored-by: Alexandre Alapetite --- app/views/extension/index.phtml | 28 +++-- app/views/helpers/extension/configure.phtml | 11 ++ app/views/helpers/extension/details.phtml | 44 +++---- p/themes/Alternative-Dark/adark.css | 9 ++ p/themes/Alternative-Dark/adark.rtl.css | 9 ++ .../Alternative-Dark/icons/disabled-light.svg | 3 + p/themes/Dark/dark.css | 14 +++ p/themes/Dark/dark.rtl.css | 14 +++ p/themes/Flat/flat.css | 8 ++ p/themes/Flat/flat.rtl.css | 8 ++ p/themes/Flat/icons/disabled-light.svg | 3 + p/themes/Screwdriver/screwdriver.css | 4 + p/themes/Screwdriver/screwdriver.rtl.css | 4 + p/themes/Swage/icons/disabled-light.svg | 3 + p/themes/Swage/swage.css | 8 ++ p/themes/Swage/swage.rtl.css | 8 ++ p/themes/base-theme/template.css | 113 ++++++++++++++++++ p/themes/base-theme/template.rtl.css | 113 ++++++++++++++++++ p/themes/icons/disabled.svg | 3 + p/themes/icons/enabled.svg | 3 + 20 files changed, 379 insertions(+), 31 deletions(-) create mode 100644 p/themes/Alternative-Dark/icons/disabled-light.svg create mode 100644 p/themes/Flat/icons/disabled-light.svg create mode 100644 p/themes/Swage/icons/disabled-light.svg create mode 100644 p/themes/icons/disabled.svg create mode 100644 p/themes/icons/enabled.svg diff --git a/app/views/extension/index.phtml b/app/views/extension/index.phtml index ba789bebdf7..706d238e5c4 100644 --- a/app/views/extension/index.phtml +++ b/app/views/extension/index.phtml @@ -9,25 +9,33 @@

    -

    - extension_list['system'])) { + extension_list['system'])) { ?> +

    +
      + extension_list['system'] as $ext) { - $this->ext_details = $ext; - $this->renderHelper('extension/details'); - } - ?> + $this->ext_details = $ext; ?> +
    • + renderHelper('extension/details'); ?> +
    • + +
    extension_list['user'])) { ?>

    +
      extension_list['user'] as $ext) { - $this->ext_details = $ext; - $this->renderHelper('extension/details'); - } - } + $this->ext_details = $ext; ?> +
    • + renderHelper('extension/details'); ?> +
    • + +
    + extension_list['system']) && empty($this->extension_list['user'])) { ?> diff --git a/app/views/helpers/extension/configure.phtml b/app/views/helpers/extension/configure.phtml index ea68287b1a1..34da8a535b7 100644 --- a/app/views/helpers/extension/configure.phtml +++ b/app/views/helpers/extension/configure.phtml @@ -7,6 +7,17 @@

    extension->getDescription() ?> — extension->getAuthor() ?>

    + + + +
    +
    + +
    +
    +
    + +

    extension->getConfigureView(); diff --git a/app/views/helpers/extension/details.phtml b/app/views/helpers/extension/details.phtml index f6b361c6ff1..08226e86c90 100644 --- a/app/views/helpers/extension/details.phtml +++ b/app/views/helpers/extension/details.phtml @@ -1,22 +1,24 @@ -
      -
    • - ext_details->getType() === 'user' || FreshRSS_Auth::hasAccess('admin')) { ?> - ext_details->getName()); ?> -
      - - ext_details->isEnabled()) { ?> - - - - - - - -
      - - - -
    • -
    • ext_details->getName() ?>
    • -
    + +ext_details->getName()); + $ext_enabled = $this->ext_details->isEnabled(); + if ($ext_enabled) { + $button_class = ' active'; + $name_class = ''; + $action = 'disable'; + $title = _t('gen.action.disable'); + } else { + $button_class = ''; + $name_class = ' disabled'; + $action = 'enable'; + $title = _t('gen.action.enable'); + } + if ($this->ext_details->getType() === 'user' || FreshRSS_Auth::hasAccess('admin')) {?> + + + ext_details->getName() ?> + + + ext_details->getName() ?> + diff --git a/p/themes/Alternative-Dark/adark.css b/p/themes/Alternative-Dark/adark.css index 52f24b9151f..8106b3a4659 100644 --- a/p/themes/Alternative-Dark/adark.css +++ b/p/themes/Alternative-Dark/adark.css @@ -205,6 +205,15 @@ a.btn { box-shadow: none; } +/*=== switches */ +.switch.active { + background-color: #0062b7; +} + +.switch.active:hover { + background-image: url('./icons/disabled-light.svg'); +} + /*=== Navigation */ .nav-list .nav-header, .nav-list .item { diff --git a/p/themes/Alternative-Dark/adark.rtl.css b/p/themes/Alternative-Dark/adark.rtl.css index 9d949f76a45..f1939a7be66 100644 --- a/p/themes/Alternative-Dark/adark.rtl.css +++ b/p/themes/Alternative-Dark/adark.rtl.css @@ -205,6 +205,15 @@ a.btn { box-shadow: none; } +/*=== switches */ +.switch.active { + background-color: #0062b7; +} + +.switch.active:hover { + background-image: url('./icons/disabled-light.svg'); +} + /*=== Navigation */ .nav-list .nav-header, .nav-list .item { diff --git a/p/themes/Alternative-Dark/icons/disabled-light.svg b/p/themes/Alternative-Dark/icons/disabled-light.svg new file mode 100644 index 00000000000..8542db156f5 --- /dev/null +++ b/p/themes/Alternative-Dark/icons/disabled-light.svg @@ -0,0 +1,3 @@ + + + diff --git a/p/themes/Dark/dark.css b/p/themes/Dark/dark.css index f94a26b2bab..56b293f806c 100644 --- a/p/themes/Dark/dark.css +++ b/p/themes/Dark/dark.css @@ -238,6 +238,20 @@ a.btn { background: #801; } +/*=== switches */ +.switch { + background-color: #333; +} + +.switch.active { + background-color: #6986b2; +} + +.switch::before, +.switch:hover::before { + background-color: black; +} + /*=== Navigation */ .nav-list .nav-header, .nav-list .item { diff --git a/p/themes/Dark/dark.rtl.css b/p/themes/Dark/dark.rtl.css index fa7adfb0653..1019c1c48cf 100644 --- a/p/themes/Dark/dark.rtl.css +++ b/p/themes/Dark/dark.rtl.css @@ -238,6 +238,20 @@ a.btn { background: #801; } +/*=== switches */ +.switch { + background-color: #333; +} + +.switch.active { + background-color: #6986b2; +} + +.switch::before, +.switch:hover::before { + background-color: black; +} + /*=== Navigation */ .nav-list .nav-header, .nav-list .item { diff --git a/p/themes/Flat/flat.css b/p/themes/Flat/flat.css index 3822c7c351e..52200ab88fe 100644 --- a/p/themes/Flat/flat.css +++ b/p/themes/Flat/flat.css @@ -249,6 +249,14 @@ a.btn { background: #c0392b; } +.switch.active { + background-color: #2980b9; +} + +.switch.active:hover { + background-image: url('./icons/disabled-light.svg'); +} + /*=== Navigation */ .nav-list .nav-header, .nav-list .item { diff --git a/p/themes/Flat/flat.rtl.css b/p/themes/Flat/flat.rtl.css index ff9836b6d5a..7fa4b4ab239 100644 --- a/p/themes/Flat/flat.rtl.css +++ b/p/themes/Flat/flat.rtl.css @@ -249,6 +249,14 @@ a.btn { background: #c0392b; } +.switch.active { + background-color: #2980b9; +} + +.switch.active:hover { + background-image: url('./icons/disabled-light.svg'); +} + /*=== Navigation */ .nav-list .nav-header, .nav-list .item { diff --git a/p/themes/Flat/icons/disabled-light.svg b/p/themes/Flat/icons/disabled-light.svg new file mode 100644 index 00000000000..c46f7180149 --- /dev/null +++ b/p/themes/Flat/icons/disabled-light.svg @@ -0,0 +1,3 @@ + + + diff --git a/p/themes/Screwdriver/screwdriver.css b/p/themes/Screwdriver/screwdriver.css index f06dd9e8a39..53fc593e7d0 100644 --- a/p/themes/Screwdriver/screwdriver.css +++ b/p/themes/Screwdriver/screwdriver.css @@ -1039,6 +1039,10 @@ a.btn { text-shadow: 0 0 10px #666; } +.switch.active { + background-color: #d18114; +} + /*=== Navigation menu (for articles) */ #nav_entries { background: linear-gradient(180deg, #222 0%, #171717 100%) #222; diff --git a/p/themes/Screwdriver/screwdriver.rtl.css b/p/themes/Screwdriver/screwdriver.rtl.css index 6c512caf6b3..7ec1e75d0d9 100644 --- a/p/themes/Screwdriver/screwdriver.rtl.css +++ b/p/themes/Screwdriver/screwdriver.rtl.css @@ -1039,6 +1039,10 @@ a.btn { text-shadow: 0 0 10px #666; } +.switch.active { + background-color: #d18114; +} + /*=== Navigation menu (for articles) */ #nav_entries { background: linear-gradient(-180deg, #222 0%, #171717 100%) #222; diff --git a/p/themes/Swage/icons/disabled-light.svg b/p/themes/Swage/icons/disabled-light.svg new file mode 100644 index 00000000000..c46f7180149 --- /dev/null +++ b/p/themes/Swage/icons/disabled-light.svg @@ -0,0 +1,3 @@ + + + diff --git a/p/themes/Swage/swage.css b/p/themes/Swage/swage.css index ab31b5de07e..03b7be3b5a8 100644 --- a/p/themes/Swage/swage.css +++ b/p/themes/Swage/swage.css @@ -38,6 +38,14 @@ select:invalid { clear: both; } +.switch.active { + background-color: #0062be; +} + +.switch.active:hover { + background-image: url('./icons/disabled-light.svg'); +} + #nav_entries, .notification, #new-article, .aside, .header > .item.title, .stick.configure-feeds { width: 231px; } diff --git a/p/themes/Swage/swage.rtl.css b/p/themes/Swage/swage.rtl.css index ea673b91d00..65aa1f3a896 100644 --- a/p/themes/Swage/swage.rtl.css +++ b/p/themes/Swage/swage.rtl.css @@ -38,6 +38,14 @@ select:invalid { clear: both; } +.switch.active { + background-color: #0062be; +} + +.switch.active:hover { + background-image: url('./icons/disabled-light.svg'); +} + #nav_entries, .notification, #new-article, .aside, .header > .item.title, .stick.configure-feeds { width: 231px; } diff --git a/p/themes/base-theme/template.css b/p/themes/base-theme/template.css index b6111788e3c..0a03a80d404 100644 --- a/p/themes/base-theme/template.css +++ b/p/themes/base-theme/template.css @@ -298,6 +298,102 @@ a.btn { font-weight: bold; } +/*=== switch */ +.switch { + margin: 0 0.5em; + padding: revert; + position: relative; + width: 3.5em; + height: 1.75em; + border: 0; + border-radius: 1em; + background-color: #ccc; + cursor: pointer; + box-sizing: content-box; + background-repeat: no-repeat; + background-position: center center; + background-image: url('../icons/disabled.svg'); + transition: background-position 0.5s; +} + +.switch:not([disabled]):hover { + background-image: url('../icons/enabled.svg'); + background-repeat: no-repeat; + background-position: right 7px center; +} + +.switch.active { + background-color: rgb(133, 216, 133); + background-repeat: no-repeat; + background-position: center center; + background-image: url('../icons/enabled.svg'); +} + +.switch.active:not([disabled]):hover { + background-position: left 7px center; + background-repeat: no-repeat; + background-image: url('../icons/disabled.svg'); +} + +@supports selector(.switch::before) { + .switch { + background-image: none; + } + + .switch.active { + background-image: none; + } +} + +/* ::before = circle */ +.switch::before { + content: ""; + position: absolute; + left: 5px; + right: unset; + top: 0.2em; + width: 1.5em; + height: 1.5em; + background-color: #fff; + background-image: url('../icons/disabled.svg'); + background-repeat: no-repeat; + background-position: center center; + border-radius: 50%; + transition: left 0.6s, right 0.6s; +} + +.switch:not([disabled]):hover::before { + background-color: #eee; +} + +.switch.active::before { + background-image: url('../icons/enabled.svg'); + background-position: center center; + left: unset; + right: 5px; +} + +.switch.active:not([disabled]):hover::before { + right: 8px; +} + +/* ::after = background */ +.switch::after { + content: ""; + position: absolute; + top: 50%; + right: 8px; + width: 12px; + height: 12px; + transform: translateY(-50%); +} + +.switch.active::after { + width: 14px; + height: 14px; + left: 8px; +} + .btn:focus-visible, input[type="checkbox"]:focus-visible { outline: 2px solid #ccc; @@ -337,6 +433,23 @@ input[type="checkbox"]:focus-visible { display: table-cell; } +/*=== manage-list */ +.manage-list { + list-style: none; +} + +.manage-list li { + line-height: 2; +} + +.manage-list li * { + vertical-align: middle; +} + +.manage-list .disabled { + font-style: italic; +} + /*=== Dropdown */ .dropdown { position: relative; diff --git a/p/themes/base-theme/template.rtl.css b/p/themes/base-theme/template.rtl.css index eeb4c69f548..fdf094b9c62 100644 --- a/p/themes/base-theme/template.rtl.css +++ b/p/themes/base-theme/template.rtl.css @@ -298,6 +298,102 @@ a.btn { font-weight: bold; } +/*=== switch */ +.switch { + margin: 0 0.5em; + padding: revert; + position: relative; + width: 3.5em; + height: 1.75em; + border: 0; + border-radius: 1em; + background-color: #ccc; + cursor: pointer; + box-sizing: content-box; + background-repeat: no-repeat; + background-position: center center; + background-image: url('../icons/disabled.svg'); + transition: background-position 0.5s; +} + +.switch:not([disabled]):hover { + background-image: url('../icons/enabled.svg'); + background-repeat: no-repeat; + background-position: left 7px center; +} + +.switch.active { + background-color: rgb(133, 216, 133); + background-repeat: no-repeat; + background-position: center center; + background-image: url('../icons/enabled.svg'); +} + +.switch.active:not([disabled]):hover { + background-position: right 7px center; + background-repeat: no-repeat; + background-image: url('../icons/disabled.svg'); +} + +@supports selector(.switch::before) { + .switch { + background-image: none; + } + + .switch.active { + background-image: none; + } +} + +/* ::before = circle */ +.switch::before { + content: ""; + position: absolute; + right: 5px; + left: unset; + top: 0.2em; + width: 1.5em; + height: 1.5em; + background-color: #fff; + background-image: url('../icons/disabled.svg'); + background-repeat: no-repeat; + background-position: center center; + border-radius: 50%; + transition: right 0.6s, left 0.6s; +} + +.switch:not([disabled]):hover::before { + background-color: #eee; +} + +.switch.active::before { + background-image: url('../icons/enabled.svg'); + background-position: center center; + right: unset; + left: 5px; +} + +.switch.active:not([disabled]):hover::before { + left: 8px; +} + +/* ::after = background */ +.switch::after { + content: ""; + position: absolute; + top: 50%; + left: 8px; + width: 12px; + height: 12px; + transform: translateY(-50%); +} + +.switch.active::after { + width: 14px; + height: 14px; + right: 8px; +} + .btn:focus-visible, input[type="checkbox"]:focus-visible { outline: 2px solid #ccc; @@ -337,6 +433,23 @@ input[type="checkbox"]:focus-visible { display: table-cell; } +/*=== manage-list */ +.manage-list { + list-style: none; +} + +.manage-list li { + line-height: 2; +} + +.manage-list li * { + vertical-align: middle; +} + +.manage-list .disabled { + font-style: italic; +} + /*=== Dropdown */ .dropdown { position: relative; diff --git a/p/themes/icons/disabled.svg b/p/themes/icons/disabled.svg new file mode 100644 index 00000000000..cc16ff83d30 --- /dev/null +++ b/p/themes/icons/disabled.svg @@ -0,0 +1,3 @@ + + + diff --git a/p/themes/icons/enabled.svg b/p/themes/icons/enabled.svg new file mode 100644 index 00000000000..dbdcfdbc692 --- /dev/null +++ b/p/themes/icons/enabled.svg @@ -0,0 +1,3 @@ + + + From 6650d1d29ea5e6f895124afce9ed4a6e920a1ed8 Mon Sep 17 00:00:00 2001 From: maTh Date: Mon, 14 Mar 2022 23:04:17 +0100 Subject: [PATCH 0193/2479] Improved: log page (#4204) * first draft * wip * Theme Ansum * Update logs_pagination.phtml * Theme Mapco * Update adark.css * Update BlueLagoon.css * Update dark.css * Update screwdriver.css * Theme Swage * Update app/views/helpers/logs_pagination.phtml Co-authored-by: Frans de Jonge * Update app/views/helpers/logs_pagination.phtml Co-authored-by: Frans de Jonge * Update template.css * Update logs_pagination.phtml * Update logs_pagination.phtml * Update logs_pagination.phtml * RTL CSS * Update dark.rtl.css * Update swage.css * fix CLI findings * Indentation fixed * icons improved * CSS: centered icons * i18n * pipline test fixes * Update conf.php * Update gen.php * Update app/i18n/fr/conf.php Co-authored-by: Frans de Jonge Co-authored-by: Alexandre Alapetite --- app/Models/Themes.php | 3 + app/i18n/cz/conf.php | 13 ++++ app/i18n/cz/gen.php | 6 -- app/i18n/de/conf.php | 13 ++++ app/i18n/de/gen.php | 6 -- app/i18n/en-us/conf.php | 13 ++++ app/i18n/en-us/gen.php | 6 -- app/i18n/en/conf.php | 13 ++++ app/i18n/en/gen.php | 6 -- app/i18n/es/conf.php | 13 ++++ app/i18n/es/gen.php | 6 -- app/i18n/fr/conf.php | 13 ++++ app/i18n/fr/gen.php | 6 -- app/i18n/he/conf.php | 13 ++++ app/i18n/he/gen.php | 6 -- app/i18n/it/conf.php | 13 ++++ app/i18n/it/gen.php | 6 -- app/i18n/ja/conf.php | 13 ++++ app/i18n/ja/gen.php | 6 -- app/i18n/ko/conf.php | 13 ++++ app/i18n/ko/gen.php | 6 -- app/i18n/nl/conf.php | 13 ++++ app/i18n/nl/gen.php | 6 -- app/i18n/oc/conf.php | 13 ++++ app/i18n/oc/gen.php | 6 -- app/i18n/pl/conf.php | 13 ++++ app/i18n/pl/gen.php | 6 -- app/i18n/pt-br/conf.php | 13 ++++ app/i18n/pt-br/gen.php | 6 -- app/i18n/ru/conf.php | 13 ++++ app/i18n/ru/gen.php | 6 -- app/i18n/sk/conf.php | 13 ++++ app/i18n/sk/gen.php | 6 -- app/i18n/tr/conf.php | 13 ++++ app/i18n/tr/gen.php | 6 -- app/i18n/zh-cn/conf.php | 13 ++++ app/i18n/zh-cn/gen.php | 6 -- app/layout/aside_configure.phtml | 8 +++ app/views/helpers/logs_pagination.phtml | 81 +++++++++++++----------- app/views/index/logs.phtml | 54 ++++++++++++---- p/themes/Alternative-Dark/adark.css | 47 +++----------- p/themes/Alternative-Dark/adark.rtl.css | 47 +++----------- p/themes/Ansum/_components.scss | 5 -- p/themes/Ansum/_mobile.scss | 4 -- p/themes/Ansum/_sidebar.scss | 11 ++-- p/themes/Ansum/ansum.css | 13 +--- p/themes/Ansum/ansum.rtl.css | 13 +--- p/themes/BlueLagoon/BlueLagoon.css | 20 ++---- p/themes/BlueLagoon/BlueLagoon.rtl.css | 20 ++---- p/themes/Dark/dark.css | 7 +- p/themes/Dark/dark.rtl.css | 7 +- p/themes/Flat/flat.css | 20 +----- p/themes/Flat/flat.rtl.css | 20 +----- p/themes/Mapco/_components.scss | 5 -- p/themes/Mapco/_mobile.scss | 4 -- p/themes/Mapco/_sidebar.scss | 12 ++-- p/themes/Mapco/mapco.css | 14 ++-- p/themes/Mapco/mapco.rtl.css | 14 ++-- p/themes/Origine/origine.css | 10 +++ p/themes/Origine/origine.rtl.css | 10 +++ p/themes/Screwdriver/screwdriver.css | 3 +- p/themes/Screwdriver/screwdriver.rtl.css | 3 +- p/themes/Swage/swage.css | 17 ++--- p/themes/Swage/swage.rtl.css | 15 +++-- p/themes/Swage/swage.scss | 6 +- p/themes/base-theme/template.css | 29 +++++++-- p/themes/base-theme/template.rtl.css | 29 +++++++-- p/themes/icons/error.svg | 4 ++ p/themes/icons/notice.svg | 5 ++ p/themes/icons/warning.svg | 5 ++ 70 files changed, 500 insertions(+), 407 deletions(-) create mode 100644 p/themes/icons/error.svg create mode 100644 p/themes/icons/notice.svg create mode 100644 p/themes/icons/warning.svg diff --git a/app/Models/Themes.php b/app/Models/Themes.php index 693657fae27..ed379dc0d88 100644 --- a/app/Models/Themes.php +++ b/app/Models/Themes.php @@ -79,6 +79,7 @@ public static function alt($name) { 'close' => '❌', 'configure' => '⚙', 'down' => '▽', + 'error' => '❌', 'favorite' => '★', 'FreshRSS-logo' => '⊚', 'help' => 'ⓘ', @@ -91,6 +92,7 @@ public static function alt($name) { 'logout' => '🔓', 'next' => '⏩', 'non-starred' => '☆', + 'notice' => 'ⓘ', 'prev' => '⏪', 'read' => '☑', 'rss' => '☄', @@ -107,6 +109,7 @@ public static function alt($name) { 'view-normal' => '☰', 'view-global' => '☷', 'view-reader' => '☕', + 'warning' => '△', ); return isset($name) ? $alts[$name] : ''; } diff --git a/app/i18n/cz/conf.php b/app/i18n/cz/conf.php index f25382a3df9..3e961e3a951 100644 --- a/app/i18n/cz/conf.php +++ b/app/i18n/cz/conf.php @@ -66,6 +66,19 @@ 'thin' => 'Úzká', ), ), + 'logs' => array( + 'loglist' => array( + 'level' => 'Log Level', // TODO + 'message' => 'Log Message', // TODO + 'timestamp' => 'Timestamp', // TODO + ), + 'pagination' => array( + 'first' => 'První', + 'last' => 'Poslední', + 'next' => 'Další', + 'previous' => 'Předchozí', + ), + ), 'profile' => array( '_' => 'Správa profilu', 'api' => 'Správa API', diff --git a/app/i18n/cz/gen.php b/app/i18n/cz/gen.php index 853f4d0d920..cee99c845df 100644 --- a/app/i18n/cz/gen.php +++ b/app/i18n/cz/gen.php @@ -176,12 +176,6 @@ 'user_management' => 'Správa uživatelů', 'user_profile' => 'Profil', ), - 'pagination' => array( - 'first' => 'První', - 'last' => 'Poslední', - 'next' => 'Další', - 'previous' => 'Předchozí', - ), 'period' => array( 'days' => 'dní', 'hours' => 'hodin', diff --git a/app/i18n/de/conf.php b/app/i18n/de/conf.php index bc1fdc14f72..5a0438f3bad 100644 --- a/app/i18n/de/conf.php +++ b/app/i18n/de/conf.php @@ -66,6 +66,19 @@ 'thin' => 'Klein', ), ), + 'logs' => array( + 'loglist' => array( + 'level' => 'Log Stufe', + 'message' => 'Log Nachricht', + 'timestamp' => 'Zeitstempel', + ), + 'pagination' => array( + 'first' => 'Erste', + 'last' => 'Letzte', + 'next' => 'Nächste', + 'previous' => 'Vorherige', + ), + ), 'profile' => array( '_' => 'Profil-Verwaltung', 'api' => 'API-Verwaltung', diff --git a/app/i18n/de/gen.php b/app/i18n/de/gen.php index 3f81a2e3467..493cb3b1a97 100644 --- a/app/i18n/de/gen.php +++ b/app/i18n/de/gen.php @@ -176,12 +176,6 @@ 'user_management' => 'Benutzer verwalten', 'user_profile' => 'Profil', ), - 'pagination' => array( - 'first' => 'Erste', - 'last' => 'Letzte', - 'next' => 'Nächste', - 'previous' => 'Vorherige', - ), 'period' => array( 'days' => 'Tage', 'hours' => 'Stunden', diff --git a/app/i18n/en-us/conf.php b/app/i18n/en-us/conf.php index de51f5881ab..dcb530e9068 100644 --- a/app/i18n/en-us/conf.php +++ b/app/i18n/en-us/conf.php @@ -66,6 +66,19 @@ 'thin' => 'Narrow', // IGNORE ), ), + 'logs' => array( + 'loglist' => array( + 'level' => 'Log Level', // TODO + 'message' => 'Log Message', // TODO + 'timestamp' => 'Timestamp', // TODO + ), + 'pagination' => array( + 'first' => 'First', // IGNORE + 'last' => 'Last', // IGNORE + 'next' => 'Next', // IGNORE + 'previous' => 'Previous', // IGNORE + ), + ), 'profile' => array( '_' => 'Profile management', // IGNORE 'api' => 'API management', // IGNORE diff --git a/app/i18n/en-us/gen.php b/app/i18n/en-us/gen.php index 35d2c2cfd3b..2bebf441a94 100644 --- a/app/i18n/en-us/gen.php +++ b/app/i18n/en-us/gen.php @@ -176,12 +176,6 @@ 'user_management' => 'Manage users', // IGNORE 'user_profile' => 'Profile', // IGNORE ), - 'pagination' => array( - 'first' => 'First', // IGNORE - 'last' => 'Last', // IGNORE - 'next' => 'Next', // IGNORE - 'previous' => 'Previous', // IGNORE - ), 'period' => array( 'days' => 'days', // IGNORE 'hours' => 'hours', // IGNORE diff --git a/app/i18n/en/conf.php b/app/i18n/en/conf.php index 2bbceafca9a..7050a5cdc3a 100644 --- a/app/i18n/en/conf.php +++ b/app/i18n/en/conf.php @@ -66,6 +66,19 @@ 'thin' => 'Narrow', ), ), + 'logs' => array( + 'loglist' => array( + 'level' => 'Log Level', // TODO + 'message' => 'Log Message', // TODO + 'timestamp' => 'Timestamp', // TODO + ), + 'pagination' => array( + 'first' => 'First', + 'last' => 'Last', + 'next' => 'Next', + 'previous' => 'Previous', + ), + ), 'profile' => array( '_' => 'Profile management', 'api' => 'API management', diff --git a/app/i18n/en/gen.php b/app/i18n/en/gen.php index 9fd81a71647..06c8d356a1a 100644 --- a/app/i18n/en/gen.php +++ b/app/i18n/en/gen.php @@ -176,12 +176,6 @@ 'user_management' => 'Manage users', 'user_profile' => 'Profile', ), - 'pagination' => array( - 'first' => 'First', - 'last' => 'Last', - 'next' => 'Next', - 'previous' => 'Previous', - ), 'period' => array( 'days' => 'days', 'hours' => 'hours', diff --git a/app/i18n/es/conf.php b/app/i18n/es/conf.php index d5b25469d7f..63289f80042 100755 --- a/app/i18n/es/conf.php +++ b/app/i18n/es/conf.php @@ -66,6 +66,19 @@ 'thin' => 'Estrecho', ), ), + 'logs' => array( + 'loglist' => array( + 'level' => 'Log Level', // TODO + 'message' => 'Log Message', // TODO + 'timestamp' => 'Timestamp', // TODO + ), + 'pagination' => array( + 'first' => 'Primero', + 'last' => 'Último', + 'next' => 'Siguiente', + 'previous' => 'Anterior', + ), + ), 'profile' => array( '_' => 'Administración de perfiles', 'api' => 'Administración de API', diff --git a/app/i18n/es/gen.php b/app/i18n/es/gen.php index de7b53924c1..c63bacedfea 100755 --- a/app/i18n/es/gen.php +++ b/app/i18n/es/gen.php @@ -176,12 +176,6 @@ 'user_management' => 'Administrar usuarios', 'user_profile' => 'Perfil', ), - 'pagination' => array( - 'first' => 'Primero', - 'last' => 'Último', - 'next' => 'Siguiente', - 'previous' => 'Anterior', - ), 'period' => array( 'days' => 'dias', 'hours' => 'horas', diff --git a/app/i18n/fr/conf.php b/app/i18n/fr/conf.php index 8d097fa5906..c48a7bb6cfd 100644 --- a/app/i18n/fr/conf.php +++ b/app/i18n/fr/conf.php @@ -66,6 +66,19 @@ 'thin' => 'Fine', ), ), + 'logs' => array( + 'loglist' => array( + 'level' => 'Niveau de sévérité', + 'message' => 'Message de journal', + 'timestamp' => 'Horodatage', + ), + 'pagination' => array( + 'first' => 'Début', + 'last' => 'Fin', + 'next' => 'Suivant', + 'previous' => 'Précédent', + ), + ), 'profile' => array( '_' => 'Gestion du profil', 'api' => 'Gestion de l’API', diff --git a/app/i18n/fr/gen.php b/app/i18n/fr/gen.php index 80a1d727615..0554f6d5255 100644 --- a/app/i18n/fr/gen.php +++ b/app/i18n/fr/gen.php @@ -176,12 +176,6 @@ 'user_management' => 'Gestion des utilisateurs', 'user_profile' => 'Profil', ), - 'pagination' => array( - 'first' => 'Début', - 'last' => 'Fin', - 'next' => 'Suivant', - 'previous' => 'Précédent', - ), 'period' => array( 'days' => 'jours', 'hours' => 'heures', diff --git a/app/i18n/he/conf.php b/app/i18n/he/conf.php index 62dca4b11f2..7ce29c5824e 100644 --- a/app/i18n/he/conf.php +++ b/app/i18n/he/conf.php @@ -66,6 +66,19 @@ 'thin' => 'צר', ), ), + 'logs' => array( + 'loglist' => array( + 'level' => 'Log Level', // TODO + 'message' => 'Log Message', // TODO + 'timestamp' => 'Timestamp', // TODO + ), + 'pagination' => array( + 'first' => 'הראשון', + 'last' => 'אחרון', + 'next' => 'הבא', + 'previous' => 'הקודם', + ), + ), 'profile' => array( '_' => 'Profile management', // TODO 'api' => 'API management', // TODO diff --git a/app/i18n/he/gen.php b/app/i18n/he/gen.php index e9da2bb9e83..144c1242a06 100644 --- a/app/i18n/he/gen.php +++ b/app/i18n/he/gen.php @@ -176,12 +176,6 @@ 'user_management' => 'Manage users', // TODO 'user_profile' => 'Profile', // TODO ), - 'pagination' => array( - 'first' => 'הראשון', - 'last' => 'אחרון', - 'next' => 'הבא', - 'previous' => 'הקודם', - ), 'period' => array( 'days' => 'days', // TODO 'hours' => 'hours', // TODO diff --git a/app/i18n/it/conf.php b/app/i18n/it/conf.php index a9fc1a6d8b6..41f7e041c62 100644 --- a/app/i18n/it/conf.php +++ b/app/i18n/it/conf.php @@ -66,6 +66,19 @@ 'thin' => 'Stretto', ), ), + 'logs' => array( + 'loglist' => array( + 'level' => 'Log Level', // TODO + 'message' => 'Log Message', // TODO + 'timestamp' => 'Timestamp', // TODO + ), + 'pagination' => array( + 'first' => 'Prima', + 'last' => 'Ultima', + 'next' => 'Successiva', + 'previous' => 'Precedente', + ), + ), 'profile' => array( '_' => 'Gestione profili', 'api' => 'API management', // TODO diff --git a/app/i18n/it/gen.php b/app/i18n/it/gen.php index b65b7305dd0..fa1e9d3c60e 100644 --- a/app/i18n/it/gen.php +++ b/app/i18n/it/gen.php @@ -176,12 +176,6 @@ 'user_management' => 'Gestione utenti', 'user_profile' => 'Profilo', ), - 'pagination' => array( - 'first' => 'Prima', - 'last' => 'Ultima', - 'next' => 'Successiva', - 'previous' => 'Precedente', - ), 'period' => array( 'days' => 'days', // TODO 'hours' => 'hours', // TODO diff --git a/app/i18n/ja/conf.php b/app/i18n/ja/conf.php index 113d385dd83..29d69cd6be1 100644 --- a/app/i18n/ja/conf.php +++ b/app/i18n/ja/conf.php @@ -66,6 +66,19 @@ 'thin' => '狭い', ), ), + 'logs' => array( + 'loglist' => array( + 'level' => 'Log Level', // TODO + 'message' => 'Log Message', // TODO + 'timestamp' => 'Timestamp', // TODO + ), + 'pagination' => array( + 'first' => '先頭', + 'last' => '最後', + 'next' => 'つぎへ', + 'previous' => '前へ', + ), + ), 'profile' => array( '_' => 'プロフィール', 'api' => 'API管理', diff --git a/app/i18n/ja/gen.php b/app/i18n/ja/gen.php index 360ae1d8781..a5d55fec96d 100644 --- a/app/i18n/ja/gen.php +++ b/app/i18n/ja/gen.php @@ -176,12 +176,6 @@ 'user_management' => 'ユーザー管理', 'user_profile' => 'プロフィール', ), - 'pagination' => array( - 'first' => '先頭', - 'last' => '最後', - 'next' => 'つぎへ', - 'previous' => '前へ', - ), 'period' => array( 'days' => '日', 'hours' => '時', diff --git a/app/i18n/ko/conf.php b/app/i18n/ko/conf.php index 1c9674d3cce..01d853585fc 100644 --- a/app/i18n/ko/conf.php +++ b/app/i18n/ko/conf.php @@ -66,6 +66,19 @@ 'thin' => '얇게', ), ), + 'logs' => array( + 'loglist' => array( + 'level' => 'Log Level', // TODO + 'message' => 'Log Message', // TODO + 'timestamp' => 'Timestamp', // TODO + ), + 'pagination' => array( + 'first' => '처음으로', + 'last' => '마지막으로', + 'next' => '다음', + 'previous' => '이전', + ), + ), 'profile' => array( '_' => '프로필 관리', 'api' => 'API 관리', diff --git a/app/i18n/ko/gen.php b/app/i18n/ko/gen.php index 566bdd4d599..d996ac467bf 100644 --- a/app/i18n/ko/gen.php +++ b/app/i18n/ko/gen.php @@ -176,12 +176,6 @@ 'user_management' => '사용자 관리', 'user_profile' => '프로필', ), - 'pagination' => array( - 'first' => '처음으로', - 'last' => '마지막으로', - 'next' => '다음', - 'previous' => '이전', - ), 'period' => array( 'days' => '일', 'hours' => '시', diff --git a/app/i18n/nl/conf.php b/app/i18n/nl/conf.php index 6e266c350fc..f8c11707a0e 100644 --- a/app/i18n/nl/conf.php +++ b/app/i18n/nl/conf.php @@ -66,6 +66,19 @@ 'thin' => 'Smal', ), ), + 'logs' => array( + 'loglist' => array( + 'level' => 'Log Level', // TODO + 'message' => 'Log Message', // TODO + 'timestamp' => 'Timestamp', // TODO + ), + 'pagination' => array( + 'first' => 'Eerste', + 'last' => 'Laatste', + 'next' => 'Volgende', + 'previous' => 'Vorige', + ), + ), 'profile' => array( '_' => 'Profielbeheer', 'api' => 'API-beheer', diff --git a/app/i18n/nl/gen.php b/app/i18n/nl/gen.php index 81b265616f0..286b69c8511 100644 --- a/app/i18n/nl/gen.php +++ b/app/i18n/nl/gen.php @@ -176,12 +176,6 @@ 'user_management' => 'Gebruikersbeheer', 'user_profile' => 'Profiel', ), - 'pagination' => array( - 'first' => 'Eerste', - 'last' => 'Laatste', - 'next' => 'Volgende', - 'previous' => 'Vorige', - ), 'period' => array( 'days' => 'dagen', 'hours' => 'uren', diff --git a/app/i18n/oc/conf.php b/app/i18n/oc/conf.php index 28f11798a92..3cca02c2b90 100644 --- a/app/i18n/oc/conf.php +++ b/app/i18n/oc/conf.php @@ -66,6 +66,19 @@ 'thin' => 'Fina', ), ), + 'logs' => array( + 'loglist' => array( + 'level' => 'Log Level', // TODO + 'message' => 'Log Message', // TODO + 'timestamp' => 'Timestamp', // TODO + ), + 'pagination' => array( + 'first' => 'Debuta', + 'last' => 'Fin', + 'next' => 'Seguent', + 'previous' => 'Precedent', + ), + ), 'profile' => array( '_' => 'Gestion del perfil', 'api' => 'Gestion API', diff --git a/app/i18n/oc/gen.php b/app/i18n/oc/gen.php index 88758ab0d06..86f55689585 100644 --- a/app/i18n/oc/gen.php +++ b/app/i18n/oc/gen.php @@ -176,12 +176,6 @@ 'user_management' => 'Gestion dels utilizaires', 'user_profile' => 'Perfil', ), - 'pagination' => array( - 'first' => 'Debuta', - 'last' => 'Fin', - 'next' => 'Seguent', - 'previous' => 'Precedent', - ), 'period' => array( 'days' => 'jorns', 'hours' => 'oras', diff --git a/app/i18n/pl/conf.php b/app/i18n/pl/conf.php index 4c5dd0646a6..fa342abdd4b 100644 --- a/app/i18n/pl/conf.php +++ b/app/i18n/pl/conf.php @@ -66,6 +66,19 @@ 'thin' => 'Wąska', ), ), + 'logs' => array( + 'loglist' => array( + 'level' => 'Log Level', // TODO + 'message' => 'Log Message', // TODO + 'timestamp' => 'Timestamp', // TODO + ), + 'pagination' => array( + 'first' => 'Początek', + 'last' => 'Koniec', + 'next' => 'Następne', + 'previous' => 'Poprzednie', + ), + ), 'profile' => array( '_' => 'Zarządzanie profilem', 'api' => 'Zarządzanie API', diff --git a/app/i18n/pl/gen.php b/app/i18n/pl/gen.php index 2acb5ece2d9..dc7d31da74c 100644 --- a/app/i18n/pl/gen.php +++ b/app/i18n/pl/gen.php @@ -176,12 +176,6 @@ 'user_management' => 'Zarządzanie użytkownikami', 'user_profile' => 'Profil', ), - 'pagination' => array( - 'first' => 'Początek', - 'last' => 'Koniec', - 'next' => 'Następne', - 'previous' => 'Poprzednie', - ), 'period' => array( 'days' => 'dni', 'hours' => 'godziny', diff --git a/app/i18n/pt-br/conf.php b/app/i18n/pt-br/conf.php index 2b62414492d..07d1c7872d6 100644 --- a/app/i18n/pt-br/conf.php +++ b/app/i18n/pt-br/conf.php @@ -66,6 +66,19 @@ 'thin' => 'Fino', ), ), + 'logs' => array( + 'loglist' => array( + 'level' => 'Log Level', // TODO + 'message' => 'Log Message', // TODO + 'timestamp' => 'Timestamp', // TODO + ), + 'pagination' => array( + 'first' => 'Primeiro', + 'last' => 'Último', + 'next' => 'Próximo', + 'previous' => 'Anterior', + ), + ), 'profile' => array( '_' => 'Gerenciamento de perfil', 'api' => 'Administração da API', diff --git a/app/i18n/pt-br/gen.php b/app/i18n/pt-br/gen.php index 744b8978863..c1cb7326c45 100644 --- a/app/i18n/pt-br/gen.php +++ b/app/i18n/pt-br/gen.php @@ -176,12 +176,6 @@ 'user_management' => 'Gerenciamento de usuários', 'user_profile' => 'Perfil', ), - 'pagination' => array( - 'first' => 'Primeiro', - 'last' => 'Último', - 'next' => 'Próximo', - 'previous' => 'Anterior', - ), 'period' => array( 'days' => 'dias', 'hours' => 'horas', diff --git a/app/i18n/ru/conf.php b/app/i18n/ru/conf.php index 57707680506..1c6e3af5a70 100644 --- a/app/i18n/ru/conf.php +++ b/app/i18n/ru/conf.php @@ -66,6 +66,19 @@ 'thin' => 'Узкое', ), ), + 'logs' => array( + 'loglist' => array( + 'level' => 'Log Level', // TODO + 'message' => 'Log Message', // TODO + 'timestamp' => 'Timestamp', // TODO + ), + 'pagination' => array( + 'first' => 'Первая', + 'last' => 'Последняя', + 'next' => 'Следующая', + 'previous' => 'Предыдущая', + ), + ), 'profile' => array( '_' => 'Настройки профиля', 'api' => 'Настройки API', diff --git a/app/i18n/ru/gen.php b/app/i18n/ru/gen.php index 3a2f2de288f..4c03341538d 100644 --- a/app/i18n/ru/gen.php +++ b/app/i18n/ru/gen.php @@ -176,12 +176,6 @@ 'user_management' => 'Управление пользователями', 'user_profile' => 'Профиль', ), - 'pagination' => array( - 'first' => 'Первая', - 'last' => 'Последняя', - 'next' => 'Следующая', - 'previous' => 'Предыдущая', - ), 'period' => array( 'days' => 'дней', 'hours' => 'часов', diff --git a/app/i18n/sk/conf.php b/app/i18n/sk/conf.php index cbade872dd7..35a34c13696 100644 --- a/app/i18n/sk/conf.php +++ b/app/i18n/sk/conf.php @@ -66,6 +66,19 @@ 'thin' => 'Úzka', ), ), + 'logs' => array( + 'loglist' => array( + 'level' => 'Log Level', // TODO + 'message' => 'Log Message', // TODO + 'timestamp' => 'Timestamp', // TODO + ), + 'pagination' => array( + 'first' => 'Prvý', + 'last' => 'Posledný', + 'next' => 'Ďalší', + 'previous' => 'Predošlý', + ), + ), 'profile' => array( '_' => 'Správca profilu', 'api' => 'Správa API', diff --git a/app/i18n/sk/gen.php b/app/i18n/sk/gen.php index 9c060f690fc..6954e7cbb87 100644 --- a/app/i18n/sk/gen.php +++ b/app/i18n/sk/gen.php @@ -176,12 +176,6 @@ 'user_management' => 'Spravovať používateľov', 'user_profile' => 'Profil', ), - 'pagination' => array( - 'first' => 'Prvý', - 'last' => 'Posledný', - 'next' => 'Ďalší', - 'previous' => 'Predošlý', - ), 'period' => array( 'days' => 'dni', 'hours' => 'hodiny', diff --git a/app/i18n/tr/conf.php b/app/i18n/tr/conf.php index ae1a2bf47b5..e3750235c23 100644 --- a/app/i18n/tr/conf.php +++ b/app/i18n/tr/conf.php @@ -66,6 +66,19 @@ 'thin' => 'Zayıf', ), ), + 'logs' => array( + 'loglist' => array( + 'level' => 'Log Level', // TODO + 'message' => 'Log Message', // TODO + 'timestamp' => 'Timestamp', // TODO + ), + 'pagination' => array( + 'first' => 'İlk', + 'last' => 'Son', + 'next' => 'Sonraki', + 'previous' => 'Önceki', + ), + ), 'profile' => array( '_' => 'Profil yönetimi', 'api' => 'API yönetimi', diff --git a/app/i18n/tr/gen.php b/app/i18n/tr/gen.php index 56b7a3962b7..6d6aac595e3 100644 --- a/app/i18n/tr/gen.php +++ b/app/i18n/tr/gen.php @@ -176,12 +176,6 @@ 'user_management' => 'Kullanıcıları yönet', 'user_profile' => 'Profil', ), - 'pagination' => array( - 'first' => 'İlk', - 'last' => 'Son', - 'next' => 'Sonraki', - 'previous' => 'Önceki', - ), 'period' => array( 'days' => 'gün', 'hours' => 'saat', diff --git a/app/i18n/zh-cn/conf.php b/app/i18n/zh-cn/conf.php index 44d27e3b0ff..1c9e1100b35 100644 --- a/app/i18n/zh-cn/conf.php +++ b/app/i18n/zh-cn/conf.php @@ -66,6 +66,19 @@ 'thin' => '窄', ), ), + 'logs' => array( + 'loglist' => array( + 'level' => 'Log Level', // TODO + 'message' => 'Log Message', // TODO + 'timestamp' => 'Timestamp', // TODO + ), + 'pagination' => array( + 'first' => '首页', + 'last' => '末页', + 'next' => '下一页', + 'previous' => '上一页', + ), + ), 'profile' => array( '_' => '用户管理', 'api' => 'API 管理', diff --git a/app/i18n/zh-cn/gen.php b/app/i18n/zh-cn/gen.php index 9942f98e781..1071b670335 100644 --- a/app/i18n/zh-cn/gen.php +++ b/app/i18n/zh-cn/gen.php @@ -176,12 +176,6 @@ 'user_management' => '用户管理', 'user_profile' => '用户帐户', ), - 'pagination' => array( - 'first' => '首页', - 'last' => '末页', - 'next' => '下一页', - 'previous' => '上一页', - ), 'period' => array( 'days' => '天', 'hours' => '时', diff --git a/app/layout/aside_configure.phtml b/app/layout/aside_configure.phtml index f71419dc14e..5f1762834d9 100644 --- a/app/layout/aside_configure.phtml +++ b/app/layout/aside_configure.phtml @@ -33,6 +33,11 @@
  • + +
  • + +
  • + @@ -53,6 +58,9 @@
  • +
  • + +
  • diff --git a/app/views/helpers/logs_pagination.phtml b/app/views/helpers/logs_pagination.phtml index fe6a71a3ac3..d12b3f9d10a 100755 --- a/app/views/helpers/logs_pagination.phtml +++ b/app/views/helpers/logs_pagination.phtml @@ -6,46 +6,53 @@ ?> nbPage > 1) { ?> -
      - -
    • - currentPage > 1) { ?> - « - -
    • +
    + diff --git a/app/views/index/logs.phtml b/app/views/index/logs.phtml index bb11f9f695f..8221d2d4b3d 100644 --- a/app/views/index/logs.phtml +++ b/app/views/index/logs.phtml @@ -1,15 +1,12 @@ -
    +partial('aside_configure'); ?> +

    -

    - - - -

    + $items */ @@ -17,18 +14,49 @@ ?> -
    - logsPaginator->render('logs_pagination.phtml', 'page'); ?> - + logsPaginator->render('logs_pagination.phtml', 'page'); ?> +
    + + + + + + + -
    - date())) ?> - info(), ENT_NOQUOTES, 'UTF-8') ?>
    + + + + + + +
    + level()) ?> + + + + info(), ENT_NOQUOTES, 'UTF-8') ?> +
    +
    + logsPaginator->render('logs_pagination.phtml', 'page'); ?> + - logsPaginator->render('logs_pagination.phtml', 'page'); ?> + +
    +
    + + +
    + +
    +
    +

    +
    diff --git a/p/themes/Alternative-Dark/adark.css b/p/themes/Alternative-Dark/adark.css index 8106b3a4659..65e7f8bc885 100644 --- a/p/themes/Alternative-Dark/adark.css +++ b/p/themes/Alternative-Dark/adark.css @@ -219,20 +219,20 @@ a.btn { .nav-list .item { height: 2.5em; line-height: 2.5em; + color: #ccc; font-size: 0.9rem; } -.nav-list .item:hover { - background: #1f1f1f; +.nav-list .item a { + color: #ccc; } -.nav-list .item.active { - background: #171717; - color: #fff; +.nav-list .item a:hover { + background-color: #1f1f1f; } .nav-list .item.active a { - color: #fff; + background-color: #1f1f1f; } .nav-list .disable { @@ -395,41 +395,14 @@ a.btn { } /*=== Pagination */ -.pagination { - background: #171717; - text-align: center; - color: #e8e8e8; - font-size: 0.8em; -} - -.content .pagination { - margin: 0; - padding: 0; -} - -.pagination .item.pager-current { - font-weight: bold; - font-size: 1.5em; -} - .pagination .item a { - display: block; - color: #333; - font-style: italic; line-height: 3em; - text-decoration: none; } -.pagination .item a:hover { - background: #ddd; -} - -.pagination:first-child .item { - border-bottom: 1px solid #aaa; -} - -.pagination:last-child .item { - border-top: 1px solid #292929; +.pagination { + color: #999; + border-top: 1px solid #999; + border-bottom: 1px solid #999; } /*=== Boxes */ diff --git a/p/themes/Alternative-Dark/adark.rtl.css b/p/themes/Alternative-Dark/adark.rtl.css index f1939a7be66..d63222693c0 100644 --- a/p/themes/Alternative-Dark/adark.rtl.css +++ b/p/themes/Alternative-Dark/adark.rtl.css @@ -219,20 +219,20 @@ a.btn { .nav-list .item { height: 2.5em; line-height: 2.5em; + color: #ccc; font-size: 0.9rem; } -.nav-list .item:hover { - background: #1f1f1f; +.nav-list .item a { + color: #ccc; } -.nav-list .item.active { - background: #171717; - color: #fff; +.nav-list .item a:hover { + background-color: #1f1f1f; } .nav-list .item.active a { - color: #fff; + background-color: #1f1f1f; } .nav-list .disable { @@ -395,41 +395,14 @@ a.btn { } /*=== Pagination */ -.pagination { - background: #171717; - text-align: center; - color: #e8e8e8; - font-size: 0.8em; -} - -.content .pagination { - margin: 0; - padding: 0; -} - -.pagination .item.pager-current { - font-weight: bold; - font-size: 1.5em; -} - .pagination .item a { - display: block; - color: #333; - font-style: italic; line-height: 3em; - text-decoration: none; } -.pagination .item a:hover { - background: #ddd; -} - -.pagination:first-child .item { - border-bottom: 1px solid #aaa; -} - -.pagination:last-child .item { - border-top: 1px solid #292929; +.pagination { + color: #999; + border-top: 1px solid #999; + border-bottom: 1px solid #999; } /*=== Boxes */ diff --git a/p/themes/Ansum/_components.scss b/p/themes/Ansum/_components.scss index b5ed5ae2541..02b1563b147 100644 --- a/p/themes/Ansum/_components.scss +++ b/p/themes/Ansum/_components.scss @@ -185,11 +185,6 @@ font-style: italic; line-height: 3em; text-decoration: none; - - &:hover { - background: variables.$main-font-color; - color: variables.$grey-light; - } } } } diff --git a/p/themes/Ansum/_mobile.scss b/p/themes/Ansum/_mobile.scss index c8399169bd0..cc5ce3f1cfd 100644 --- a/p/themes/Ansum/_mobile.scss +++ b/p/themes/Ansum/_mobile.scss @@ -188,10 +188,6 @@ } - .pagination { - margin: 0 0 3.5em; - } - #nav_entries { line-height: 4.5rem; } diff --git a/p/themes/Ansum/_sidebar.scss b/p/themes/Ansum/_sidebar.scss index 4f5f1424acc..07f589ab818 100644 --- a/p/themes/Ansum/_sidebar.scss +++ b/p/themes/Ansum/_sidebar.scss @@ -149,11 +149,11 @@ .item { background: variables.$sid-bg; - @include mixins.transition(all, 0.15s, ease-in-out); - a { padding: 0 1rem; color: variables.$sid-font-color; + + @include mixins.transition(all, 0.15s, ease-in-out); } .error { @@ -163,9 +163,6 @@ } &:hover { - background: variables.$sid-bg-dark; - color: variables.$sid-font-color; - .error { a { background: variables.$main-first; @@ -181,7 +178,7 @@ } a { - color: variables.$sid-font-color; + background: variables.$sid-bg-dark; text-decoration: none; } } @@ -205,11 +202,11 @@ } a { + background: variables.$main-first; color: variables.$white; text-decoration: none; } } - } &.empty { diff --git a/p/themes/Ansum/ansum.css b/p/themes/Ansum/ansum.css index b06f01aaaa6..d60f11be4db 100644 --- a/p/themes/Ansum/ansum.css +++ b/p/themes/Ansum/ansum.css @@ -637,19 +637,15 @@ form th { } .nav-list .item { background: #fbf9f6; - transition: all 0.15s ease-in-out; } .nav-list .item a { padding: 0 1rem; color: #363330; + transition: all 0.15s ease-in-out; } .nav-list .item .error a { color: #f5633e; } -.nav-list .item:hover { - background: #efe3d3; - color: #363330; -} .nav-list .item:hover .error a { background: #ca7227; color: #363330; @@ -659,7 +655,7 @@ form th { color: #363330; } .nav-list .item:hover a { - color: #363330; + background: #efe3d3; text-decoration: none; } .nav-list .item.active { @@ -675,6 +671,7 @@ form th { color: #fff; } .nav-list .item.active a { + background: #ca7227; color: #fff; text-decoration: none; } @@ -1531,10 +1528,6 @@ form th { margin-bottom: 1rem; } - .pagination { - margin: 0 0 3.5em; - } - #nav_entries { line-height: 4.5rem; } diff --git a/p/themes/Ansum/ansum.rtl.css b/p/themes/Ansum/ansum.rtl.css index 6842ee5e2b7..c3cda7f4d78 100644 --- a/p/themes/Ansum/ansum.rtl.css +++ b/p/themes/Ansum/ansum.rtl.css @@ -637,19 +637,15 @@ form th { } .nav-list .item { background: #fbf9f6; - transition: all 0.15s ease-in-out; } .nav-list .item a { padding: 0 1rem; color: #363330; + transition: all 0.15s ease-in-out; } .nav-list .item .error a { color: #f5633e; } -.nav-list .item:hover { - background: #efe3d3; - color: #363330; -} .nav-list .item:hover .error a { background: #ca7227; color: #363330; @@ -659,7 +655,7 @@ form th { color: #363330; } .nav-list .item:hover a { - color: #363330; + background: #efe3d3; text-decoration: none; } .nav-list .item.active { @@ -675,6 +671,7 @@ form th { color: #fff; } .nav-list .item.active a { + background: #ca7227; color: #fff; text-decoration: none; } @@ -1531,10 +1528,6 @@ form th { margin-bottom: 1rem; } - .pagination { - margin: 0 0 3.5em; - } - #nav_entries { line-height: 4.5rem; } diff --git a/p/themes/BlueLagoon/BlueLagoon.css b/p/themes/BlueLagoon/BlueLagoon.css index 12a5a334ca1..304f55e0f1d 100644 --- a/p/themes/BlueLagoon/BlueLagoon.css +++ b/p/themes/BlueLagoon/BlueLagoon.css @@ -277,23 +277,17 @@ a.btn { font-size: 0.9rem; } -.nav-list .item:hover { +.nav-list .item a:hover { text-shadow: 0 0 2px rgba(255,255,255,0.28); color: #fff; } -.nav-list .item.active { +.nav-list .item.active a { margin: 0; background: linear-gradient(180deg, #0090ff 0%, #0062be 100%) #e4992c; background: -webkit-linear-gradient(top, #0090ff 0%, #0062be 100%); - box-shadow: -1px 2px 2px #171717, 0px 1px rgba(255, 255, 255, 0.08) inset; - border-width: medium medium 1px; - border-style: none none solid; - border-color: -moz-use-text-color -moz-use-text-color #171717; -} - -.nav-list .item.active a { color: #fff; + border-color: -moz-use-text-color -moz-use-text-color #171717; } .nav-list .disable { @@ -504,14 +498,12 @@ a.btn { .pagination .item a:hover { background: #ddd; + color: inherit; } -.pagination:first-child .item { - border-bottom: 1px solid #aaa; -} - -.pagination:last-child .item { +.pagination .item { border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; } /*=== Boxes */ diff --git a/p/themes/BlueLagoon/BlueLagoon.rtl.css b/p/themes/BlueLagoon/BlueLagoon.rtl.css index a1c510bbd70..d1d4757cc80 100644 --- a/p/themes/BlueLagoon/BlueLagoon.rtl.css +++ b/p/themes/BlueLagoon/BlueLagoon.rtl.css @@ -277,23 +277,17 @@ a.btn { font-size: 0.9rem; } -.nav-list .item:hover { +.nav-list .item a:hover { text-shadow: 0 0 2px rgba(255,255,255,0.28); color: #fff; } -.nav-list .item.active { +.nav-list .item.active a { margin: 0; background: linear-gradient(-180deg, #0090ff 0%, #0062be 100%) #e4992c; background: -webkit-linear-gradient(top, #0090ff 0%, #0062be 100%); - box-shadow: 1px 2px 2px #171717, 0px 1px rgba(255, 255, 255, 0.08) inset; - border-width: medium medium 1px; - border-style: none none solid; - border-color: -moz-use-text-color -moz-use-text-color #171717; -} - -.nav-list .item.active a { color: #fff; + border-color: -moz-use-text-color -moz-use-text-color #171717; } .nav-list .disable { @@ -504,14 +498,12 @@ a.btn { .pagination .item a:hover { background: #ddd; + color: inherit; } -.pagination:first-child .item { - border-bottom: 1px solid #aaa; -} - -.pagination:last-child .item { +.pagination .item { border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; } /*=== Boxes */ diff --git a/p/themes/Dark/dark.css b/p/themes/Dark/dark.css index 56b293f806c..356ec9ac769 100644 --- a/p/themes/Dark/dark.css +++ b/p/themes/Dark/dark.css @@ -260,7 +260,7 @@ a.btn { font-size: 0.9rem; } -.nav-list .item:hover { +.nav-list .item a:hover { background: #26303f; } @@ -462,11 +462,8 @@ a.btn { } .pagination:first-child .item { - border-bottom: 1px solid #333; -} - -.pagination:last-child .item { border-top: 1px solid #333; + border-bottom: 1px solid #333; } #load_more.loading, diff --git a/p/themes/Dark/dark.rtl.css b/p/themes/Dark/dark.rtl.css index 1019c1c48cf..bf6c155170f 100644 --- a/p/themes/Dark/dark.rtl.css +++ b/p/themes/Dark/dark.rtl.css @@ -260,7 +260,7 @@ a.btn { font-size: 0.9rem; } -.nav-list .item:hover { +.nav-list .item a:hover { background: #26303f; } @@ -462,11 +462,8 @@ a.btn { } .pagination:first-child .item { - border-bottom: 1px solid #333; -} - -.pagination:last-child .item { border-top: 1px solid #333; + border-bottom: 1px solid #333; } #load_more.loading, diff --git a/p/themes/Flat/flat.css b/p/themes/Flat/flat.css index 52200ab88fe..0a6617f59bc 100644 --- a/p/themes/Flat/flat.css +++ b/p/themes/Flat/flat.css @@ -265,13 +265,12 @@ a.btn { font-size: 0.9rem; } -.nav-list .item:hover, +.nav-list .item a:hover, .nav-list .item.active { background: #2980b9; color: #fff; } -.nav-list .item:hover a, .nav-list .item.active a { color: #fff; } @@ -448,27 +447,10 @@ a.btn { .pagination { background: #ecf0f1; color: #000; - font-size: 0.8em; - text-align: center; -} - -.content .pagination { - margin: 0; - padding: 0; -} - -.pagination .item.pager-current { - background: #34495e; - color: #ecf0f1; - font-size: 1.5em; - font-weight: bold; } .pagination .item a { - display: block; - font-style: italic; line-height: 3em; - text-decoration: none; color: #000; } diff --git a/p/themes/Flat/flat.rtl.css b/p/themes/Flat/flat.rtl.css index 7fa4b4ab239..a10f27952ff 100644 --- a/p/themes/Flat/flat.rtl.css +++ b/p/themes/Flat/flat.rtl.css @@ -265,13 +265,12 @@ a.btn { font-size: 0.9rem; } -.nav-list .item:hover, +.nav-list .item a:hover, .nav-list .item.active { background: #2980b9; color: #fff; } -.nav-list .item:hover a, .nav-list .item.active a { color: #fff; } @@ -448,27 +447,10 @@ a.btn { .pagination { background: #ecf0f1; color: #000; - font-size: 0.8em; - text-align: center; -} - -.content .pagination { - margin: 0; - padding: 0; -} - -.pagination .item.pager-current { - background: #34495e; - color: #ecf0f1; - font-size: 1.5em; - font-weight: bold; } .pagination .item a { - display: block; - font-style: italic; line-height: 3em; - text-decoration: none; color: #000; } diff --git a/p/themes/Mapco/_components.scss b/p/themes/Mapco/_components.scss index 5d7bfd285e5..7347bcc6f45 100644 --- a/p/themes/Mapco/_components.scss +++ b/p/themes/Mapco/_components.scss @@ -180,11 +180,6 @@ font-style: italic; line-height: 3em; text-decoration: none; - - &:hover { - background: variables.$main-font-color; - color: variables.$grey-light; - } } } diff --git a/p/themes/Mapco/_mobile.scss b/p/themes/Mapco/_mobile.scss index 357369f055f..7cd15514ced 100644 --- a/p/themes/Mapco/_mobile.scss +++ b/p/themes/Mapco/_mobile.scss @@ -188,10 +188,6 @@ } - .pagination { - margin: 0 0 3.5em; - } - #nav_entries { line-height: 4.5rem; } diff --git a/p/themes/Mapco/_sidebar.scss b/p/themes/Mapco/_sidebar.scss index c4a3003c200..a5ee0ea82fa 100644 --- a/p/themes/Mapco/_sidebar.scss +++ b/p/themes/Mapco/_sidebar.scss @@ -146,12 +146,13 @@ .item { background: variables.$sid-bg; - - @include mixins.transition(all, 0.15s, ease-in-out); + color: variables.$white; a { padding: 0 1rem; color: variables.$sid-font-color; + + @include mixins.transition(all, 0.15s, ease-in-out); } .error { @@ -161,9 +162,6 @@ } &:hover { - background: variables.$sid-bg-dark; - color: variables.$sid-font-color; - .error { a { background: variables.$main-first; @@ -179,7 +177,7 @@ } a { - color: variables.$sid-font-color; + background: variables.$sid-bg-dark; text-decoration: none; } } @@ -203,11 +201,11 @@ } a { + background: variables.$main-first; color: variables.$white; text-decoration: none; } } - } &.empty { diff --git a/p/themes/Mapco/mapco.css b/p/themes/Mapco/mapco.css index 6ec1ffb60c3..8768481c84c 100644 --- a/p/themes/Mapco/mapco.css +++ b/p/themes/Mapco/mapco.css @@ -628,19 +628,16 @@ form th { } .nav-list .item { background: #303136; - transition: all 0.15s ease-in-out; + color: #fff; } .nav-list .item a { padding: 0 1rem; color: #ffffff; + transition: all 0.15s ease-in-out; } .nav-list .item .error a { color: #f5633e; } -.nav-list .item:hover { - background: #17181a; - color: #ffffff; -} .nav-list .item:hover .error a { background: #36c; color: #ffffff; @@ -650,7 +647,7 @@ form th { color: #ffffff; } .nav-list .item:hover a { - color: #ffffff; + background: #17181a; text-decoration: none; } .nav-list .item.active { @@ -666,6 +663,7 @@ form th { color: #fff; } .nav-list .item.active a { + background: #36c; color: #fff; text-decoration: none; } @@ -1520,10 +1518,6 @@ form th { margin-bottom: 1rem; } - .pagination { - margin: 0 0 3.5em; - } - #nav_entries { line-height: 4.5rem; } diff --git a/p/themes/Mapco/mapco.rtl.css b/p/themes/Mapco/mapco.rtl.css index e761439dcf5..a029cce3edb 100644 --- a/p/themes/Mapco/mapco.rtl.css +++ b/p/themes/Mapco/mapco.rtl.css @@ -628,19 +628,16 @@ form th { } .nav-list .item { background: #303136; - transition: all 0.15s ease-in-out; + color: #fff; } .nav-list .item a { padding: 0 1rem; color: #ffffff; + transition: all 0.15s ease-in-out; } .nav-list .item .error a { color: #f5633e; } -.nav-list .item:hover { - background: #17181a; - color: #ffffff; -} .nav-list .item:hover .error a { background: #36c; color: #ffffff; @@ -650,7 +647,7 @@ form th { color: #ffffff; } .nav-list .item:hover a { - color: #ffffff; + background: #17181a; text-decoration: none; } .nav-list .item.active { @@ -666,6 +663,7 @@ form th { color: #fff; } .nav-list .item.active a { + background: #36c; color: #fff; text-decoration: none; } @@ -1520,10 +1518,6 @@ form th { margin-bottom: 1rem; } - .pagination { - margin: 0 0 3.5em; - } - #nav_entries { line-height: 4.5rem; } diff --git a/p/themes/Origine/origine.css b/p/themes/Origine/origine.css index dd2b864ebc9..f8e9d4722e5 100644 --- a/p/themes/Origine/origine.css +++ b/p/themes/Origine/origine.css @@ -1060,6 +1060,16 @@ a.btn { /*=== LOGS */ /*=========*/ +.pagination .item.active { + background-color: #0062be; + color: white; +} + +#loglist td { + font-family: monospace; +} + +/****old******/ .loglist { border: 1px solid #aaa; border-radius: 5px; diff --git a/p/themes/Origine/origine.rtl.css b/p/themes/Origine/origine.rtl.css index 477c9351b12..f9dc2f72029 100644 --- a/p/themes/Origine/origine.rtl.css +++ b/p/themes/Origine/origine.rtl.css @@ -1060,6 +1060,16 @@ a.btn { /*=== LOGS */ /*=========*/ +.pagination .item.active { + background-color: #0062be; + color: white; +} + +#loglist td { + font-family: monospace; +} + +/****old******/ .loglist { border: 1px solid #aaa; border-radius: 5px; diff --git a/p/themes/Screwdriver/screwdriver.css b/p/themes/Screwdriver/screwdriver.css index 53fc593e7d0..1cee7a91465 100644 --- a/p/themes/Screwdriver/screwdriver.css +++ b/p/themes/Screwdriver/screwdriver.css @@ -277,7 +277,7 @@ a.btn { font-size: 0.9rem; } -.nav-list .item:hover { +.nav-list .item a:hover { text-shadow: 0 0 2px rgba(255,255,255,0.28); color: #fff; } @@ -493,6 +493,7 @@ a.btn { .pagination .item a:hover { background: #ddd; + color: inherit } .pagination:first-child .item { diff --git a/p/themes/Screwdriver/screwdriver.rtl.css b/p/themes/Screwdriver/screwdriver.rtl.css index 7ec1e75d0d9..bee07294c18 100644 --- a/p/themes/Screwdriver/screwdriver.rtl.css +++ b/p/themes/Screwdriver/screwdriver.rtl.css @@ -277,7 +277,7 @@ a.btn { font-size: 0.9rem; } -.nav-list .item:hover { +.nav-list .item a:hover { text-shadow: 0 0 2px rgba(255,255,255,0.28); color: #fff; } @@ -493,6 +493,7 @@ a.btn { .pagination .item a:hover { background: #ddd; + color: inherit } .pagination:first-child .item { diff --git a/p/themes/Swage/swage.css b/p/themes/Swage/swage.css index 03b7be3b5a8..2751701d606 100644 --- a/p/themes/Swage/swage.css +++ b/p/themes/Swage/swage.css @@ -231,22 +231,25 @@ form th { color: #fcfcfc; cursor: default; } -.nav-list .item:hover, .nav-list .item.active { +.nav-list .item a:hover { background: #00488b; color: #fcfcfc; } -.nav-list .item:hover a, .nav-list .item.active a { +.nav-list .item.active { + background: #00488b; + color: #fcfcfc; +} +.nav-list .item.active a { color: #fcfcfc; } -.nav-list .item:hover.empty a, -.nav-list .item:hover .error a, .nav-list .item.active.empty a, +.nav-list .item.active.empty a, .nav-list .item.active .error a { color: #fcfcfc; } -.nav-list .item:hover.empty a, .nav-list .item.active.empty a { +.nav-list .item.active.empty a { background: #fa8052; } -.nav-list .item:hover.error a, .nav-list .item.active.error a { +.nav-list .item.active.error a { background: #c46178; } .nav-list .item > a { @@ -1170,5 +1173,3 @@ button.as-link { #slider .form-group:hover { background: initial; } - -/*# sourceMappingURL=swage.css.map */ diff --git a/p/themes/Swage/swage.rtl.css b/p/themes/Swage/swage.rtl.css index 65aa1f3a896..d71d9a65365 100644 --- a/p/themes/Swage/swage.rtl.css +++ b/p/themes/Swage/swage.rtl.css @@ -231,22 +231,25 @@ form th { color: #fcfcfc; cursor: default; } -.nav-list .item:hover, .nav-list .item.active { +.nav-list .item a:hover { background: #00488b; color: #fcfcfc; } -.nav-list .item:hover a, .nav-list .item.active a { +.nav-list .item.active { + background: #00488b; + color: #fcfcfc; +} +.nav-list .item.active a { color: #fcfcfc; } -.nav-list .item:hover.empty a, -.nav-list .item:hover .error a, .nav-list .item.active.empty a, +.nav-list .item.active.empty a, .nav-list .item.active .error a { color: #fcfcfc; } -.nav-list .item:hover.empty a, .nav-list .item.active.empty a { +.nav-list .item.active.empty a { background: #fa8052; } -.nav-list .item:hover.error a, .nav-list .item.active.error a { +.nav-list .item.active.error a { background: #c46178; } .nav-list .item > a { diff --git a/p/themes/Swage/swage.scss b/p/themes/Swage/swage.scss index fedabf09d26..6feb294b28e 100644 --- a/p/themes/Swage/swage.scss +++ b/p/themes/Swage/swage.scss @@ -289,7 +289,11 @@ form { @extend %nav-list; - &:hover, + a:hover { + background: color.adjust( $color_nav, $lightness: -10%); + color: $color_light; + } + &.active { background: color.adjust( $color_nav, $lightness: -10%); color: $color_light; diff --git a/p/themes/base-theme/template.css b/p/themes/base-theme/template.css index 0a03a80d404..70aa65dfd56 100644 --- a/p/themes/base-theme/template.css +++ b/p/themes/base-theme/template.css @@ -609,22 +609,31 @@ input[type="checkbox"]:focus-visible { /*=== Pagination */ .pagination { - margin: 0; + margin: 2em auto; padding: 0; display: table; - width: 100%; table-layout: fixed; } .pagination .item { display: table-cell; + width: 3em; + text-align: center; +} + +.pagination .item.active { + min-width: 3em; + font-weight: bold; } -.pagination .pager-first, .pagination .pager-previous, -.pagination .pager-next, +.pagination .pager-next { + width: 6em; +} + +.pagination .pager-first, .pagination .pager-last { - width: 100px; + width: 7.5em; } /*=== Boxes */ @@ -1515,6 +1524,12 @@ input:checked + .slide-container .properties { /*=== DIVERS */ /*===========*/ +.log-error, +.log-warning, +.log-notice { + text-align: center; +} + .category .title.error::before { content: "⚠ "; color: #bd362f; @@ -1612,6 +1627,10 @@ input:checked + .slide-container .properties { display: none; } +#loglist-wrapper { + overflow-x: auto; +} + /*=== MOBILE */ /*===========*/ diff --git a/p/themes/base-theme/template.rtl.css b/p/themes/base-theme/template.rtl.css index fdf094b9c62..158840252f3 100644 --- a/p/themes/base-theme/template.rtl.css +++ b/p/themes/base-theme/template.rtl.css @@ -609,22 +609,31 @@ input[type="checkbox"]:focus-visible { /*=== Pagination */ .pagination { - margin: 0; + margin: 2em auto; padding: 0; display: table; - width: 100%; table-layout: fixed; } .pagination .item { display: table-cell; + width: 3em; + text-align: center; +} + +.pagination .item.active { + min-width: 3em; + font-weight: bold; } -.pagination .pager-first, .pagination .pager-previous, -.pagination .pager-next, +.pagination .pager-next { + width: 6em; +} + +.pagination .pager-first, .pagination .pager-last { - width: 100px; + width: 7.5em; } /*=== Boxes */ @@ -1515,6 +1524,12 @@ input:checked + .slide-container .properties { /*=== DIVERS */ /*===========*/ +.log-error, +.log-warning, +.log-notice { + text-align: center; +} + .category .title.error::before { content: "⚠ "; color: #bd362f; @@ -1612,6 +1627,10 @@ input:checked + .slide-container .properties { display: none; } +#loglist-wrapper { + overflow-x: auto; +} + /*=== MOBILE */ /*===========*/ diff --git a/p/themes/icons/error.svg b/p/themes/icons/error.svg new file mode 100644 index 00000000000..6b597609070 --- /dev/null +++ b/p/themes/icons/error.svg @@ -0,0 +1,4 @@ + + + + diff --git a/p/themes/icons/notice.svg b/p/themes/icons/notice.svg new file mode 100644 index 00000000000..e21ee13b458 --- /dev/null +++ b/p/themes/icons/notice.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/p/themes/icons/warning.svg b/p/themes/icons/warning.svg new file mode 100644 index 00000000000..4f4ecdc9a09 --- /dev/null +++ b/p/themes/icons/warning.svg @@ -0,0 +1,5 @@ + + + + + From bdf7e4d29d954c3d2c137948577b6872c3de4656 Mon Sep 17 00:00:00 2001 From: maTh Date: Mon, 14 Mar 2022 23:05:47 +0100 Subject: [PATCH 0194/2479] Improved: Show URL button (#4238) * done * fix extra.js * click event * URL input does not extend anymore * fix * improved the i18n key * Update app/i18n/fr/gen.php Co-authored-by: Alexandre Alapetite --- app/i18n/cz/gen.php | 1 + app/i18n/de/gen.php | 1 + app/i18n/en-us/gen.php | 1 + app/i18n/en/gen.php | 1 + app/i18n/es/gen.php | 1 + app/i18n/fr/gen.php | 1 + app/i18n/he/gen.php | 1 + app/i18n/it/gen.php | 1 + app/i18n/ja/gen.php | 1 + app/i18n/ko/gen.php | 1 + app/i18n/nl/gen.php | 1 + app/i18n/oc/gen.php | 1 + app/i18n/pl/gen.php | 1 + app/i18n/pt-br/gen.php | 1 + app/i18n/ru/gen.php | 1 + app/i18n/sk/gen.php | 1 + app/i18n/tr/gen.php | 1 + app/i18n/zh-cn/gen.php | 1 + app/views/feed/add.phtml | 4 ++-- app/views/helpers/feed/update.phtml | 8 ++++---- app/views/subscription/add.phtml | 5 ++++- p/scripts/extra.js | 24 ++++++++++++++++++++++++ 22 files changed, 52 insertions(+), 7 deletions(-) diff --git a/app/i18n/cz/gen.php b/app/i18n/cz/gen.php index cee99c845df..5a4a83d8108 100644 --- a/app/i18n/cz/gen.php +++ b/app/i18n/cz/gen.php @@ -28,6 +28,7 @@ 'load_default_shortcuts' => 'Načíst výchozí zkratky', 'manage' => 'Spravovat', 'mark_read' => 'Označit jako přečtené', + 'open_url' => 'Open URL', // TODO 'promote' => 'Zvýšit úroveň', 'purge' => 'Vymazat', 'remove' => 'Odebrat', diff --git a/app/i18n/de/gen.php b/app/i18n/de/gen.php index 493cb3b1a97..5aaef1e9653 100644 --- a/app/i18n/de/gen.php +++ b/app/i18n/de/gen.php @@ -28,6 +28,7 @@ 'load_default_shortcuts' => 'Standard-Kürzel laden', 'manage' => 'Verwalten', 'mark_read' => 'Als gelesen markieren', + 'open_url' => 'URL öffnen', 'promote' => 'Hochstufen', 'purge' => 'Bereinigen', 'remove' => 'Entfernen', diff --git a/app/i18n/en-us/gen.php b/app/i18n/en-us/gen.php index 2bebf441a94..a4af57eeaa0 100644 --- a/app/i18n/en-us/gen.php +++ b/app/i18n/en-us/gen.php @@ -28,6 +28,7 @@ 'load_default_shortcuts' => 'Load default shortcuts', // IGNORE 'manage' => 'Manage', // IGNORE 'mark_read' => 'Mark as read', // IGNORE + 'open_url' => 'Open URL', // IGNORE 'promote' => 'Promote', // IGNORE 'purge' => 'Purge', // IGNORE 'remove' => 'Remove', // IGNORE diff --git a/app/i18n/en/gen.php b/app/i18n/en/gen.php index 06c8d356a1a..fadd7c9095f 100644 --- a/app/i18n/en/gen.php +++ b/app/i18n/en/gen.php @@ -28,6 +28,7 @@ 'load_default_shortcuts' => 'Load default shortcuts', 'manage' => 'Manage', 'mark_read' => 'Mark as read', + 'open_url' => 'Open URL', 'promote' => 'Promote', 'purge' => 'Purge', 'remove' => 'Remove', diff --git a/app/i18n/es/gen.php b/app/i18n/es/gen.php index c63bacedfea..122fe135fa2 100755 --- a/app/i18n/es/gen.php +++ b/app/i18n/es/gen.php @@ -28,6 +28,7 @@ 'load_default_shortcuts' => 'Cargar accesos directos predeterminados', 'manage' => 'Administrar', 'mark_read' => 'Marcar como leído', + 'open_url' => 'Open URL', // TODO 'promote' => 'Promover', 'purge' => 'Eliminar', 'remove' => 'Borrar', diff --git a/app/i18n/fr/gen.php b/app/i18n/fr/gen.php index 0554f6d5255..e43a06d1292 100644 --- a/app/i18n/fr/gen.php +++ b/app/i18n/fr/gen.php @@ -28,6 +28,7 @@ 'load_default_shortcuts' => 'Utiliser les raccourcis par défaut', 'manage' => 'Gérer', 'mark_read' => 'Marquer comme lu', + 'open_url' => 'Ouvrir l’URL', 'promote' => 'Promouvoir', 'purge' => 'Purger', 'remove' => 'Supprimer', diff --git a/app/i18n/he/gen.php b/app/i18n/he/gen.php index 144c1242a06..93641e93c8e 100644 --- a/app/i18n/he/gen.php +++ b/app/i18n/he/gen.php @@ -28,6 +28,7 @@ 'load_default_shortcuts' => 'Load default shortcuts', // TODO 'manage' => 'ניהול', 'mark_read' => 'סימון כנקרא', + 'open_url' => 'Open URL', // TODO 'promote' => 'Promote', // TODO 'purge' => 'Purge', // TODO 'remove' => 'Remove', // TODO diff --git a/app/i18n/it/gen.php b/app/i18n/it/gen.php index fa1e9d3c60e..3426d264d44 100644 --- a/app/i18n/it/gen.php +++ b/app/i18n/it/gen.php @@ -28,6 +28,7 @@ 'load_default_shortcuts' => 'Load default shortcuts', // TODO 'manage' => 'Gestisci', 'mark_read' => 'Segna come letto', + 'open_url' => 'Open URL', // TODO 'promote' => 'Promote', // TODO 'purge' => 'Purge', // TODO 'remove' => 'Rimuovi', diff --git a/app/i18n/ja/gen.php b/app/i18n/ja/gen.php index a5d55fec96d..923be75bc70 100644 --- a/app/i18n/ja/gen.php +++ b/app/i18n/ja/gen.php @@ -28,6 +28,7 @@ 'load_default_shortcuts' => 'デフォルトのショートカットを読み込む', 'manage' => '管理', 'mark_read' => '既読にする', + 'open_url' => 'Open URL', // TODO 'promote' => 'プロモート', 'purge' => '不要なデータの削除', 'remove' => '消去', diff --git a/app/i18n/ko/gen.php b/app/i18n/ko/gen.php index d996ac467bf..a53a496da69 100644 --- a/app/i18n/ko/gen.php +++ b/app/i18n/ko/gen.php @@ -28,6 +28,7 @@ 'load_default_shortcuts' => '기본 단축키 불러오기', 'manage' => '관리', 'mark_read' => '읽음으로 표시', + 'open_url' => 'Open URL', // TODO 'promote' => '목록 수준 올리기', 'purge' => '제거', 'remove' => '삭제', diff --git a/app/i18n/nl/gen.php b/app/i18n/nl/gen.php index 286b69c8511..4d6d3b441b8 100644 --- a/app/i18n/nl/gen.php +++ b/app/i18n/nl/gen.php @@ -28,6 +28,7 @@ 'load_default_shortcuts' => 'Standaardshortcuts laden', 'manage' => 'Beheren', 'mark_read' => 'Markeer als gelezen', + 'open_url' => 'Open URL', // TODO 'promote' => 'Bevorderen', 'purge' => 'Zuiveren', 'remove' => 'Verwijderen', diff --git a/app/i18n/oc/gen.php b/app/i18n/oc/gen.php index 86f55689585..9250d010549 100644 --- a/app/i18n/oc/gen.php +++ b/app/i18n/oc/gen.php @@ -28,6 +28,7 @@ 'load_default_shortcuts' => 'Cargar los acorchis per defaut', 'manage' => 'Gerir', 'mark_read' => 'Marcar coma legit', + 'open_url' => 'Open URL', // TODO 'promote' => 'Promòure', 'purge' => 'Purgar', 'remove' => 'Levar', diff --git a/app/i18n/pl/gen.php b/app/i18n/pl/gen.php index dc7d31da74c..38b48b47cea 100644 --- a/app/i18n/pl/gen.php +++ b/app/i18n/pl/gen.php @@ -28,6 +28,7 @@ 'load_default_shortcuts' => 'Ustaw domyślne skróty', 'manage' => 'Ustawienia', 'mark_read' => 'Oznacz jako przeczytane', + 'open_url' => 'Open URL', // TODO 'promote' => 'Awansuj', 'purge' => 'Oczyść', 'remove' => 'Usuń', diff --git a/app/i18n/pt-br/gen.php b/app/i18n/pt-br/gen.php index c1cb7326c45..54953d063d2 100644 --- a/app/i18n/pt-br/gen.php +++ b/app/i18n/pt-br/gen.php @@ -28,6 +28,7 @@ 'load_default_shortcuts' => 'Carregar mais atalhos', 'manage' => 'Gerenciar', 'mark_read' => 'Marcar como lido', + 'open_url' => 'Open URL', // TODO 'promote' => 'Promover', 'purge' => 'Limpar', 'remove' => 'Remover', diff --git a/app/i18n/ru/gen.php b/app/i18n/ru/gen.php index 4c03341538d..525a572eb9b 100644 --- a/app/i18n/ru/gen.php +++ b/app/i18n/ru/gen.php @@ -28,6 +28,7 @@ 'load_default_shortcuts' => 'Загрузить горячие клавиши по умолчанию', 'manage' => 'Настроить', 'mark_read' => 'Отметить прочитанным', + 'open_url' => 'Open URL', // TODO 'promote' => 'Продвинуть', 'purge' => 'Запустить очистку', 'remove' => 'Удалить', diff --git a/app/i18n/sk/gen.php b/app/i18n/sk/gen.php index 6954e7cbb87..f453409188a 100644 --- a/app/i18n/sk/gen.php +++ b/app/i18n/sk/gen.php @@ -28,6 +28,7 @@ 'load_default_shortcuts' => 'Načítať prednastavené klávesové skratky', 'manage' => 'Spravovať', 'mark_read' => 'Označiť ako prečítané', + 'open_url' => 'Open URL', // TODO 'promote' => 'Podporiť', 'purge' => 'Vymazať', 'remove' => 'Odstrániť', diff --git a/app/i18n/tr/gen.php b/app/i18n/tr/gen.php index 6d6aac595e3..d70ac2bb7aa 100644 --- a/app/i18n/tr/gen.php +++ b/app/i18n/tr/gen.php @@ -28,6 +28,7 @@ 'load_default_shortcuts' => 'Öntanımlı kısayolları yükle', 'manage' => 'Yönet', 'mark_read' => 'Okundu olarak işaretle', + 'open_url' => 'Open URL', // TODO 'promote' => 'Yöneticilik ata', 'purge' => 'Temizle', 'remove' => 'Sil', diff --git a/app/i18n/zh-cn/gen.php b/app/i18n/zh-cn/gen.php index 1071b670335..313dfd188ad 100644 --- a/app/i18n/zh-cn/gen.php +++ b/app/i18n/zh-cn/gen.php @@ -28,6 +28,7 @@ 'load_default_shortcuts' => '重置快捷键', 'manage' => '管理', 'mark_read' => '标记已读', + 'open_url' => 'Open URL', // TODO 'promote' => '设为管理员', 'purge' => '清理', 'remove' => '删除', diff --git a/app/views/feed/add.phtml b/app/views/feed/add.phtml index f5f582249bd..611d92f1074 100644 --- a/app/views/feed/add.phtml +++ b/app/views/feed/add.phtml @@ -40,8 +40,8 @@
    - - + +
    diff --git a/app/views/helpers/feed/update.phtml b/app/views/helpers/feed/update.phtml index 8d6e5ef1155..23906b36d98 100644 --- a/app/views/helpers/feed/update.phtml +++ b/app/views/helpers/feed/update.phtml @@ -45,8 +45,8 @@
    - - + +
    @@ -54,8 +54,8 @@
    - - + +
    diff --git a/p/scripts/extra.js b/p/scripts/extra.js index 505b0511047..d893427205f 100644 --- a/p/scripts/extra.js +++ b/p/scripts/extra.js @@ -123,6 +123,29 @@ function init_password_observers() { }); } +// overwrites the href attribute from the url input +function updateHref(ev) { + const urlField = document.getElementById(this.getAttribute('data-input')); + const url = urlField.value; + if (url.length > 0) { + this.href = url; + return true; + } else { + urlField.focus(); + this.removeAttribute('href'); + ev.preventDefault(); + return false; + } +} + +// set event listener on "show url" buttons +function init_url_observers() { + document.querySelectorAll('.open-url').forEach(function (btn) { + btn.addEventListener('mouseover', updateHref); + btn.addEventListener('click', updateHref); + }); +} + function init_select_observers() { document.querySelectorAll('.select-change').forEach(function (s) { s.onchange = function (ev) { @@ -266,6 +289,7 @@ function init_extra() { } init_crypto_form(); init_password_observers(); + init_url_observers(); init_select_observers(); init_slider_observers(); init_configuration_alert(); From be5848fd4fa280e5a4606fef25669974414547a5 Mon Sep 17 00:00:00 2001 From: maTh Date: Tue, 15 Mar 2022 22:58:30 +0100 Subject: [PATCH 0195/2479] Improved: Sharing/Integration configuration (#4269) * stick plus button to select list * HTML improved very much * drag and drop improved * add URL button * fix remove button behavior * prepare for PR#4238 * improve length of inputs * First draft of documentation of the sharing services * new config option: depricated * i18n for depricated text * Doc: Blogotext depricated to 2023 * dropdown menu with config link and depricated sign * Update entry_bottom.phtml * Update 08_sharing_services.md * Update template.rtl.css * Typo Deprecated/Depricated * typo * updated the documentation comment * Update shares.php * Update app/i18n/fr/conf.php Co-authored-by: Alexandre Alapetite * Update p/scripts/draggable.js Co-authored-by: Alexandre Alapetite * Update p/scripts/draggable.js Co-authored-by: Alexandre Alapetite * Documentation: services from #4270 Co-authored-by: Alexandre Alapetite --- app/Models/Share.php | 14 +- app/i18n/cz/conf.php | 1 + app/i18n/de/conf.php | 1 + app/i18n/en-us/conf.php | 1 + app/i18n/en/conf.php | 1 + app/i18n/es/conf.php | 1 + app/i18n/fr/conf.php | 1 + app/i18n/he/conf.php | 1 + app/i18n/it/conf.php | 1 + app/i18n/ja/conf.php | 1 + app/i18n/ko/conf.php | 1 + app/i18n/nl/conf.php | 1 + app/i18n/oc/conf.php | 1 + app/i18n/pl/conf.php | 1 + app/i18n/pt-br/conf.php | 1 + app/i18n/ru/conf.php | 1 + app/i18n/sk/conf.php | 1 + app/i18n/tr/conf.php | 1 + app/i18n/zh-cn/conf.php | 1 + app/shares.php | 14 +- app/views/configure/integration.phtml | 124 +++++++++++------- .../helpers/index/normal/entry_bottom.phtml | 6 +- docs/en/index.md | 1 + docs/en/users/08_sharing_services.md | 50 +++++++ p/scripts/draggable.js | 16 ++- p/scripts/integration.js | 4 +- p/themes/base-theme/template.css | 7 +- p/themes/base-theme/template.rtl.css | 7 +- 28 files changed, 202 insertions(+), 59 deletions(-) create mode 100644 docs/en/users/08_sharing_services.md diff --git a/app/Models/Share.php b/app/Models/Share.php index c453fbaaca1..a36226f691d 100644 --- a/app/Models/Share.php +++ b/app/Models/Share.php @@ -20,12 +20,13 @@ public static function register($share_options) { return; } + $isDeprecated = isset($share_options['deprecated']) ? $share_options['deprecated'] : false; $help_url = isset($share_options['help']) ? $share_options['help'] : ''; $field = isset($share_options['field']) ? $share_options['field'] : null; self::$list_sharing[$type] = new FreshRSS_Share( $type, $share_options['url'], $share_options['transform'], $share_options['form'], $help_url, $share_options['method'], - $field + $field, $isDeprecated ); } @@ -83,6 +84,7 @@ public static function get($type) { private $id = null; private $title = null; private $link = null; + private $isDeprecated = false; private $method = 'GET'; private $field; @@ -97,11 +99,12 @@ public static function get($type) { * @param string $help_url is an optional url to give help on this option. * @param string $method defines the sharing method (GET or POST) */ - private function __construct($type, $url_transform, $transform, $form_type, $help_url, $method, $field) { + private function __construct($type, $url_transform, $transform, $form_type, $help_url, $method, $field, $isDeprecated = false) { $this->type = $type; $this->name = _t('gen.share.' . $type); $this->url_transform = $url_transform; $this->help_url = $help_url; + $this->isDeprecated = $isDeprecated; if (!is_array($transform)) { $transform = array(); @@ -196,6 +199,13 @@ public function baseUrl() { return $this->base_url; } + /** + * Return the deprecated status of the share option. + */ + public function isDeprecated() { + return $this->isDeprecated; + } + /** * Return the current url by merging url_transform and base_url. */ diff --git a/app/i18n/cz/conf.php b/app/i18n/cz/conf.php index 3e961e3a951..5c2c73783f2 100644 --- a/app/i18n/cz/conf.php +++ b/app/i18n/cz/conf.php @@ -194,6 +194,7 @@ '_' => 'Sdílení', 'add' => 'Přidat metodu sdílení', 'blogotext' => 'Blogotext', // IGNORE + 'deprecated' => 'This service is deprecated and will be removed from FreshRSS in a future release.', // TODO 'diaspora' => 'Diaspora*', // IGNORE 'email' => 'E-mail', 'facebook' => 'Facebook', // IGNORE diff --git a/app/i18n/de/conf.php b/app/i18n/de/conf.php index 5a0438f3bad..1f95628d811 100644 --- a/app/i18n/de/conf.php +++ b/app/i18n/de/conf.php @@ -194,6 +194,7 @@ '_' => 'Teilen', 'add' => 'Füge eine Teilen-Dienst hinzu', 'blogotext' => 'Blogotext', // IGNORE + 'deprecated' => 'Dieser Dienst ist veraltet und wir in einer zukünftigen FreshRSS-Version entfernt.', 'diaspora' => 'Diaspora*', // IGNORE 'email' => 'E-Mail', 'facebook' => 'Facebook', // IGNORE diff --git a/app/i18n/en-us/conf.php b/app/i18n/en-us/conf.php index dcb530e9068..7bcf41d3189 100644 --- a/app/i18n/en-us/conf.php +++ b/app/i18n/en-us/conf.php @@ -194,6 +194,7 @@ '_' => 'Sharing', // IGNORE 'add' => 'Add a sharing method', // IGNORE 'blogotext' => 'Blogotext', // IGNORE + 'deprecated' => 'This service is deprecated and will be removed from FreshRSS in a future release.', // TODO 'diaspora' => 'Diaspora*', // IGNORE 'email' => 'Email', // IGNORE 'facebook' => 'Facebook', // IGNORE diff --git a/app/i18n/en/conf.php b/app/i18n/en/conf.php index 7050a5cdc3a..bdb61ec1c4c 100644 --- a/app/i18n/en/conf.php +++ b/app/i18n/en/conf.php @@ -194,6 +194,7 @@ '_' => 'Sharing', 'add' => 'Add a sharing method', 'blogotext' => 'Blogotext', + 'deprecated' => 'This service is deprecated and will be removed from FreshRSS in a future release.', // TODO 'diaspora' => 'Diaspora*', 'email' => 'Email', 'facebook' => 'Facebook', diff --git a/app/i18n/es/conf.php b/app/i18n/es/conf.php index 63289f80042..49edbb116f0 100755 --- a/app/i18n/es/conf.php +++ b/app/i18n/es/conf.php @@ -194,6 +194,7 @@ '_' => 'Compartir', 'add' => 'Agregar un método de uso compartido', 'blogotext' => 'Blogotext', // IGNORE + 'deprecated' => 'This service is deprecated and will be removed from FreshRSS in a future release.', // TODO 'diaspora' => 'Diaspora*', // IGNORE 'email' => 'Email', // TODO 'facebook' => 'Facebook', // IGNORE diff --git a/app/i18n/fr/conf.php b/app/i18n/fr/conf.php index c48a7bb6cfd..2a2ddb2a0dc 100644 --- a/app/i18n/fr/conf.php +++ b/app/i18n/fr/conf.php @@ -194,6 +194,7 @@ '_' => 'Partage', 'add' => 'Ajouter une méthode de partage', 'blogotext' => 'Blogotext', // IGNORE + 'deprecated' => 'Ce service est obsolète et sera supprimé dans une prochaine version de FreshRSS.', 'diaspora' => 'Diaspora*', // IGNORE 'email' => 'Courriel', 'facebook' => 'Facebook', // IGNORE diff --git a/app/i18n/he/conf.php b/app/i18n/he/conf.php index 7ce29c5824e..4d71988a352 100644 --- a/app/i18n/he/conf.php +++ b/app/i18n/he/conf.php @@ -194,6 +194,7 @@ '_' => 'שיתוף', 'add' => 'Add a sharing method', // TODO 'blogotext' => 'Blogotext', // IGNORE + 'deprecated' => 'This service is deprecated and will be removed from FreshRSS in a future release.', // TODO 'diaspora' => 'Diaspora*', // IGNORE 'email' => 'דואר אלקטרוני', 'facebook' => 'Facebook', // IGNORE diff --git a/app/i18n/it/conf.php b/app/i18n/it/conf.php index 41f7e041c62..4fd6e658261 100644 --- a/app/i18n/it/conf.php +++ b/app/i18n/it/conf.php @@ -194,6 +194,7 @@ '_' => 'Condivisione', 'add' => 'Add a sharing method', // TODO 'blogotext' => 'Blogotext', // IGNORE + 'deprecated' => 'This service is deprecated and will be removed from FreshRSS in a future release.', // TODO 'diaspora' => 'Diaspora*', // IGNORE 'email' => 'Email', // TODO 'facebook' => 'Facebook', // IGNORE diff --git a/app/i18n/ja/conf.php b/app/i18n/ja/conf.php index 29d69cd6be1..9faec9720c0 100644 --- a/app/i18n/ja/conf.php +++ b/app/i18n/ja/conf.php @@ -194,6 +194,7 @@ '_' => '共有', 'add' => '共有方法を追加する', 'blogotext' => 'Blogotext', // IGNORE + 'deprecated' => 'This service is deprecated and will be removed from FreshRSS in a future release.', // TODO 'diaspora' => 'Diaspora*', // IGNORE 'email' => 'Eメール', 'facebook' => 'Facebook', // IGNORE diff --git a/app/i18n/ko/conf.php b/app/i18n/ko/conf.php index 01d853585fc..617243e6b69 100644 --- a/app/i18n/ko/conf.php +++ b/app/i18n/ko/conf.php @@ -194,6 +194,7 @@ '_' => '공유', 'add' => '공유 방법 추가', 'blogotext' => 'Blogotext', // IGNORE + 'deprecated' => 'This service is deprecated and will be removed from FreshRSS in a future release.', // TODO 'diaspora' => 'Diaspora*', // IGNORE 'email' => '메일', 'facebook' => 'Facebook', // IGNORE diff --git a/app/i18n/nl/conf.php b/app/i18n/nl/conf.php index f8c11707a0e..7045456af37 100644 --- a/app/i18n/nl/conf.php +++ b/app/i18n/nl/conf.php @@ -194,6 +194,7 @@ '_' => 'Delen', 'add' => 'Deelmethode toevoegen', 'blogotext' => 'Blogotext', // IGNORE + 'deprecated' => 'This service is deprecated and will be removed from FreshRSS in a future release.', // TODO 'diaspora' => 'Diaspora*', // IGNORE 'email' => 'Email', // IGNORE 'facebook' => 'Facebook', // IGNORE diff --git a/app/i18n/oc/conf.php b/app/i18n/oc/conf.php index 3cca02c2b90..43366c23cc8 100644 --- a/app/i18n/oc/conf.php +++ b/app/i18n/oc/conf.php @@ -194,6 +194,7 @@ '_' => 'Partatge', 'add' => 'Ajustar un metòde de partatge', 'blogotext' => 'Blogotext', // IGNORE + 'deprecated' => 'This service is deprecated and will be removed from FreshRSS in a future release.', // TODO 'diaspora' => 'Diaspora*', // IGNORE 'email' => 'Corrièl', 'facebook' => 'Facebook', // IGNORE diff --git a/app/i18n/pl/conf.php b/app/i18n/pl/conf.php index fa342abdd4b..41f66390d4c 100644 --- a/app/i18n/pl/conf.php +++ b/app/i18n/pl/conf.php @@ -194,6 +194,7 @@ '_' => 'Podawanie dalej', 'add' => 'Dodaj sposób na podanie dalej wiadomości', 'blogotext' => 'Blogotext', // IGNORE + 'deprecated' => 'This service is deprecated and will be removed from FreshRSS in a future release.', // TODO 'diaspora' => 'Diaspora*', // IGNORE 'email' => 'E-mail', 'facebook' => 'Facebook', // IGNORE diff --git a/app/i18n/pt-br/conf.php b/app/i18n/pt-br/conf.php index 07d1c7872d6..23c6e17d112 100644 --- a/app/i18n/pt-br/conf.php +++ b/app/i18n/pt-br/conf.php @@ -194,6 +194,7 @@ '_' => 'Compartilhando', 'add' => 'Adicionar um método de compartilhamento', 'blogotext' => 'Blogotext', // IGNORE + 'deprecated' => 'This service is deprecated and will be removed from FreshRSS in a future release.', // TODO 'diaspora' => 'Diaspora*', // IGNORE 'email' => 'E-mail', 'facebook' => 'Facebook', // IGNORE diff --git a/app/i18n/ru/conf.php b/app/i18n/ru/conf.php index 1c6e3af5a70..5c29d7ea40d 100644 --- a/app/i18n/ru/conf.php +++ b/app/i18n/ru/conf.php @@ -194,6 +194,7 @@ '_' => 'Поделиться', 'add' => 'Добавить способ поделиться', 'blogotext' => 'Blogotext', // IGNORE + 'deprecated' => 'This service is deprecated and will be removed from FreshRSS in a future release.', // TODO 'diaspora' => 'Diaspora*', // IGNORE 'email' => 'Электронная почта', 'facebook' => 'Facebook', // IGNORE diff --git a/app/i18n/sk/conf.php b/app/i18n/sk/conf.php index 35a34c13696..e79d80af3f1 100644 --- a/app/i18n/sk/conf.php +++ b/app/i18n/sk/conf.php @@ -194,6 +194,7 @@ '_' => 'Zdieľanie', 'add' => 'Pridať spôsob zdieľania', 'blogotext' => 'Blogotext', // IGNORE + 'deprecated' => 'This service is deprecated and will be removed from FreshRSS in a future release.', // TODO 'diaspora' => 'Diaspora*', // IGNORE 'email' => 'E-mail', // IGNORE 'facebook' => 'Facebook', // IGNORE diff --git a/app/i18n/tr/conf.php b/app/i18n/tr/conf.php index e3750235c23..d889b592426 100644 --- a/app/i18n/tr/conf.php +++ b/app/i18n/tr/conf.php @@ -194,6 +194,7 @@ '_' => 'Paylaşım', 'add' => 'Bir paylaşım türü ekle', 'blogotext' => 'Blogotext', // IGNORE + 'deprecated' => 'This service is deprecated and will be removed from FreshRSS in a future release.', // TODO 'diaspora' => 'Diaspora*', // IGNORE 'email' => 'Email', // IGNORE 'facebook' => 'Facebook', // IGNORE diff --git a/app/i18n/zh-cn/conf.php b/app/i18n/zh-cn/conf.php index 1c9e1100b35..8d500d01986 100644 --- a/app/i18n/zh-cn/conf.php +++ b/app/i18n/zh-cn/conf.php @@ -194,6 +194,7 @@ '_' => '分享', 'add' => '添加分享方式', 'blogotext' => 'Blogotext', // IGNORE + 'deprecated' => 'This service is deprecated and will be removed from FreshRSS in a future release.', // TODO 'diaspora' => 'Diaspora*', // IGNORE 'email' => '邮箱', // IGNORE 'facebook' => '脸书', // IGNORE diff --git a/app/shares.php b/app/shares.php index 9761ed60904..16b2787bf11 100644 --- a/app/shares.php +++ b/app/shares.php @@ -7,23 +7,27 @@ * * For each share there is different configuration options. Here is the description * of those options: - * - url is a mandatory option. It is a string representing the share URL. It + * - 'deprecated' (optional) is a boolean. Default: 'false'. + * 'true', if the sharing service is planned to remove in the future. + * Add more information into the documentation center. + * - 'url' is a mandatory option. It is a string representing the share URL. It * supports 4 different placeholders for custom data. The ~URL~ placeholder * represents the URL of the system used to share, it is configured by the * user. The ~LINK~ placeholder represents the link of the shared article. * The ~TITLE~ placeholder represents the title of the shared article. The * ~ID~ placeholder represents the id of the shared article (only useful * for internal use) - * - transform is an array of transformation to apply on links and titles - * - help is a URL to a help page (mandatory for form = 'advanced') - * - form is the type of form to display during configuration. It’s either + * - 'transform' is an array of transformation to apply on links and titles + * - 'help' is a URL to a help page (mandatory for form = 'advanced') + * - 'form' is the type of form to display during configuration. It’s either * 'simple' or 'advanced'. 'simple' is used when only the name is configurable, * 'advanced' is used when the name and the location are configurable. - * - method is the HTTP method (POST or GET) used to share a link. + * - 'method' is the HTTP method (POST or GET) used to share a link. */ return array( 'blogotext' => array( + 'deprecated' => true, 'url' => '~URL~/admin/links.php?url=~LINK~', 'transform' => array(), 'help' => 'http://lehollandaisvolant.net/blogotext/fr/', diff --git a/app/views/configure/integration.phtml b/app/views/configure/integration.phtml index c8d299f4411..15dbb48edce 100644 --- a/app/views/configure/integration.phtml +++ b/app/views/configure/integration.phtml @@ -11,21 +11,28 @@

    " size="64" /> - -
    -
    ' - data-advanced='
    + data-simple='##label## + +
    +
    + +
    +
    ' + data-advanced='##label## -
    - - -
    - -
    ' class="draggableList"> +
    + +
    +
    + +

    +
    +
    + +
    +
    ' class="draggableList"> update($share_options); ?> -
    -

    @@ -589,13 +589,13 @@
    - +
    +
    + feed->attributes('path_entries_filter')); + ?> + +
    +
    + +
    +

    +
    +
    +
    diff --git a/docs/en/developers/OPML.md b/docs/en/developers/OPML.md index 3014dc45726..9daa94b2061 100644 --- a/docs/en/developers/OPML.md +++ b/docs/en/developers/OPML.md @@ -43,7 +43,9 @@ The following attributes are using similar naming conventions than [RSS-Bridge]( ### Miscellaneous * `frss:cssFullContent`: [CSS Selector](https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Selectors) to enable the download and extraction of the matching HTML section of each articles’ Web address. - * Example: `div.main` + * Example: `div.main, .summary` +* `frss:cssFullContentFilter`: [CSS Selector](https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Selectors) to remove the matching HTML elements from the full content retrieved by `frss:cssFullContent`. + * Example: `.footer, .aside` * `frss:filtersActionRead`: List (separated by a new line) of search queries to automatically mark a new article as read. ### Dynamic OPML (reading lists) diff --git a/p/scripts/feed.js b/p/scripts/feed.js index a5e43c61446..1a6833db6d2 100644 --- a/p/scripts/feed.js +++ b/p/scripts/feed.js @@ -56,7 +56,9 @@ function init_popup_preview_selector() { link.addEventListener('click', function (ev) { const selector_entries = document.getElementById('path_entries').value; - const href = link.href.replace('selector-token', encodeURIComponent(selector_entries)); + const selector_entries_filter = document.getElementById('path_entries_filter').value; + const href = link.href.replace('selector-token', encodeURIComponent(selector_entries)) + .replace('selector-filter-token', encodeURIComponent(selector_entries_filter)); openPopupWithSource(href); From e27eb1ca9198119ea1b0bd79be5f1aead45d615a Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Tue, 16 Aug 2022 10:56:07 +0200 Subject: [PATCH 0316/2479] Basic support for negative searches with parentheses (#4503) * Basic support for negative searches with parentheses * `!((author:Alice intitle:hello) OR (author:Bob intitle:world))` * `(author:Alice intitle:hello) !(author:Bob intitle:world)` * `!(S:1 OR S:2)` * Minor documentation / comment * Remove syslog debug line --- app/Models/BooleanSearch.php | 17 +++++++++++++++-- app/Models/Entry.php | 6 ++++-- app/Models/EntryDAO.php | 3 +++ docs/en/users/03_Main_view.md | 5 ++++- docs/fr/users/03_Main_view.md | 5 ++++- tests/app/Models/SearchTest.php | 10 ++++++++++ 6 files changed, 40 insertions(+), 6 deletions(-) diff --git a/app/Models/BooleanSearch.php b/app/Models/BooleanSearch.php index 332757556e8..b1c7bbd3b96 100644 --- a/app/Models/BooleanSearch.php +++ b/app/Models/BooleanSearch.php @@ -10,7 +10,7 @@ class FreshRSS_BooleanSearch { /** @var array */ private $searches = array(); - /** @var string 'AND' or 'OR' */ + /** @var string 'AND' or 'OR' or 'AND NOT' */ private $operator; public function __construct(string $input, int $level = 0, $operator = 'AND') { @@ -123,7 +123,20 @@ private function parseParentheses(string $input, int $level): bool { $hasParenthesis = true; $before = trim($before); - if (preg_match('/\bOR$/i', $before)) { + if (preg_match('/[!-]$/i', $before)) { + // Trim trailing negation + $before = substr($before, 0, -1); + + // The text prior to the negation is a BooleanSearch + $searchBefore = new FreshRSS_BooleanSearch($before, $level + 1, $nextOperator); + if (count($searchBefore->searches()) > 0) { + $this->searches[] = $searchBefore; + } + $before = ''; + + // The next BooleanSearch will have to be combined with AND NOT instead of default AND + $nextOperator = 'AND NOT'; + } elseif (preg_match('/\bOR$/i', $before)) { // Trim trailing OR $before = substr($before, 0, -2); diff --git a/app/Models/Entry.php b/app/Models/Entry.php index d20f5f2a723..8d20e54129c 100644 --- a/app/Models/Entry.php +++ b/app/Models/Entry.php @@ -364,10 +364,12 @@ public function matches(FreshRSS_BooleanSearch $booleanSearch): bool { $ok = true; foreach ($booleanSearch->searches() as $filter) { if ($filter instanceof FreshRSS_BooleanSearch) { - // BooleanSearches are combined by AND (default) or OR (special case) operator and are recursive + // BooleanSearches are combined by AND (default) or OR or AND NOT (special cases) operators and are recursive if ($filter->operator() === 'OR') { $ok |= $this->matches($filter); - } else { + } elseif ($filter->operator() === 'AND NOT') { + $ok &= !$this->matches($filter); + } else { // AND $ok &= $this->matches($filter); } } elseif ($filter instanceof FreshRSS_Search) { diff --git a/app/Models/EntryDAO.php b/app/Models/EntryDAO.php index d69702c6064..02552affeb8 100644 --- a/app/Models/EntryDAO.php +++ b/app/Models/EntryDAO.php @@ -770,6 +770,9 @@ public static function sqlBooleanSearch(string $alias, $filters, int $level = 0) if ($filterSearch !== '') { if ($search !== '') { $search .= $filter->operator(); + } elseif ($filter->operator() === 'AND NOT') { + // Special case if we start with a negation (there is already the default AND before) + $search .= ' NOT'; } $search .= ' (' . $filterSearch . ') '; $values = array_merge($values, $filterValues); diff --git a/docs/en/users/03_Main_view.md b/docs/en/users/03_Main_view.md index a5a2afe34bf..eb8fe0f013c 100644 --- a/docs/en/users/03_Main_view.md +++ b/docs/en/users/03_Main_view.md @@ -239,10 +239,13 @@ can be used to combine several search criteria with a logical *or* instead: `aut You don’t have to do anything special to combine multiple negative operators. Writing `!intitle:'thing1' !intitle:'thing2'` implies AND, see above. For more pointers on how AND and OR interact with negation, see [this GitHub comment](https://github.com/FreshRSS/FreshRSS/issues/3236#issuecomment-891219460). Additional reading: [De Morgan's laws](https://en.wikipedia.org/wiki/De_Morgan%27s_laws). -Finally, parentheses may be used to express more complex queries: +Finally, parentheses may be used to express more complex queries, with basic negation support: * `(author:Alice OR intitle:hello) (author:Bob OR intitle:world)` * `(author:Alice intitle:hello) OR (author:Bob intitle:world)` +* `!((author:Alice intitle:hello) OR (author:Bob intitle:world))` +* `(author:Alice intitle:hello) !(author:Bob intitle:world)` +* `!(S:1 OR S:2)` ### By sorting by date diff --git a/docs/fr/users/03_Main_view.md b/docs/fr/users/03_Main_view.md index 11df737b7ae..3a65c1f7f56 100644 --- a/docs/fr/users/03_Main_view.md +++ b/docs/fr/users/03_Main_view.md @@ -268,7 +268,10 @@ encore plus précis, et il est autorisé d’avoir plusieurs instances de : Combiner plusieurs critères implique un *et* logique, mais le mot clef `OR` peut être utilisé pour combiner plusieurs critères avec un *ou* logique : `author:Dupont OR author:Dupond` -Enfin, les parenthèses peuvent être utilisées pour des expressions plus complexes : +Enfin, les parenthèses peuvent être utilisées pour des expressions plus complexes, avec un support basique de la négation : * `(author:Alice OR intitle:bonjour) (author:Bob OR intitle:monde)` * `(author:Alice intitle:bonjour) OR (author:Bob intitle:monde)` +* `!((author:Alice intitle:bonjour) OR (author:Bob intitle:monde))` +* `(author:Alice intitle:bonjour) !(author:Bob intitle:monde)` +* `!(S:1 OR S:2)` diff --git a/tests/app/Models/SearchTest.php b/tests/app/Models/SearchTest.php index 74c1596f62f..3fb5a144f67 100644 --- a/tests/app/Models/SearchTest.php +++ b/tests/app/Models/SearchTest.php @@ -330,6 +330,16 @@ public function provideParentheses() { ' ((e.id IN (SELECT et.id_entry FROM `_entrytag` et, `_tag` t WHERE et.id_tag = t.id AND t.name IN (?)) )) ', ['%tag%','%Hello%','%Alice%','%example%','3','%World%', 'Bleu'] ], + [ + '!((author:Alice intitle:hello) OR (author:Bob intitle:world))', + ' NOT (((e.author LIKE ? AND e.title LIKE ? )) OR ((e.author LIKE ? AND e.title LIKE ? ))) ', + ['%Alice%', '%hello%', '%Bob%', '%world%'], + ], + [ + '(author:Alice intitle:hello) !(author:Bob intitle:world)', + ' ((e.author LIKE ? AND e.title LIKE ? )) AND NOT ((e.author LIKE ? AND e.title LIKE ? )) ', + ['%Alice%', '%hello%', '%Bob%', '%world%'], + ] ]; } } From ea0d924985dc0c5aa089ed59c15282ea7e84c7a4 Mon Sep 17 00:00:00 2001 From: maTh Date: Thu, 18 Aug 2022 11:13:56 +0200 Subject: [PATCH 0317/2479] Swage theme cleanup (#4493) * some general.prompt styles now in template.css * login button * same layout for login and register form * improve input and select * legend with dark background instead grey * fix config icon z-index * remove unused code * improve .prompt * set header also on login and register page * fix: show passwort button * improve login button on login and register screen * dropdown menu: smaller line height * improve layout sidebar closer * remove double code * swage.css * fix nits * fix nits * nits nits nits * nits are all around us.... * better position of config button * show header in mobile view + beauty the login button * CSS files * style the about FreshRSS link * delete unused import.svg * fix config sidebar padding * fix position of user query button in mobile view * improve config button in user query dropdown * fix global view overlay * fix close button aside bar in reader view * generated CSS files * Update swage.scss * fix nav_menu icon color of unread and favorite * improve search bar positioning in mobile view * read-all dropdown menu opens to left side in mobile view * restyle the new-article banner * improve big read button * make the header fixed while scrolling * fix search input while scrolling * improve config icons layout in .box * fix scrollbar:hover in template.css * improve article footer dropdowns * swage.css * Update main.js * Update main.js * fix (S)CSS * config navigation improved * left feed navigation: hover color added * CSS files * Update swage.scss * New Article banner improved margin * textarea: removed grey background * remove unnecessary line * Revert new-article banner layout * Remove :hover in slider * fix select height in sharing config * Fix scrollbar for slider with white background * fix: slider close button with theme color * fixed scrollbar CSS --- .../helpers/index/normal/entry_bottom.phtml | 6 +- p/scripts/main.js | 19 +- p/themes/Swage/icons/import.svg | 6 - p/themes/Swage/swage.css | 333 +++++++++++---- p/themes/Swage/swage.rtl.css | 333 +++++++++++---- p/themes/Swage/swage.scss | 389 +++++++++++++----- p/themes/base-theme/template.css | 23 +- p/themes/base-theme/template.rtl.css | 23 +- 8 files changed, 837 insertions(+), 295 deletions(-) delete mode 100644 p/themes/Swage/icons/import.svg diff --git a/app/views/helpers/index/normal/entry_bottom.phtml b/app/views/helpers/index/normal/entry_bottom.phtml index 05e62a41c8a..e58c3754055 100644 --- a/app/views/helpers/index/normal/entry_bottom.phtml +++ b/app/views/helpers/index/normal/entry_bottom.phtml @@ -37,7 +37,7 @@ } // @phpstan-ignore-next-line if ($bottomline_labels) { - ?>
  • + ?>
  • + ?>
  • +
    + +
    + +
    +
    diff --git a/app/views/subscription/add.phtml b/app/views/subscription/add.phtml index 5aadc350bf6..41ee04fb7e3 100644 --- a/app/views/subscription/add.phtml +++ b/app/views/subscription/add.phtml @@ -147,6 +147,13 @@
    +
    + +
    + +
    +
    diff --git a/docs/en/developers/OPML.md b/docs/en/developers/OPML.md index 9daa94b2061..859d99c72c4 100644 --- a/docs/en/developers/OPML.md +++ b/docs/en/developers/OPML.md @@ -39,6 +39,7 @@ The following attributes are using similar naming conventions than [RSS-Bridge]( * `frss:xPathItemThumbnail`: XPath expression for extracting an item’s thumbnail (image) URL from the item context. * Example: `descendant::img/@src` * `frss:xPathItemCategories`: XPath expression for extracting a list of categories (tags) from the item context. +* `frss:xPathItemUid`: XPath expression for extracting an item’s unique ID from the item context. If left empty, a hash is computed automatically. ### Miscellaneous From a3a0b2f97a780605338eec8c5c833d5f7d6f823b Mon Sep 17 00:00:00 2001 From: Aidi Tan <3037661+aidistan@users.noreply.github.com> Date: Thu, 18 Aug 2022 21:08:22 +0800 Subject: [PATCH 0321/2479] Update i18n/zh-cn (#4509) * Update i18n/zh-cn * Update i18n/zh-cn * Update CREDITS.md Co-authored-by: Alexandre Alapetite --- CREDITS.md | 2 +- app/i18n/zh-cn/conf.php | 42 ++++++++++++++++++++-------------------- app/i18n/zh-cn/gen.php | 4 ++-- app/i18n/zh-cn/index.php | 4 ++-- app/i18n/zh-cn/sub.php | 34 ++++++++++++++++---------------- 5 files changed, 43 insertions(+), 43 deletions(-) diff --git a/CREDITS.md b/CREDITS.md index bcf065c81aa..339ed73f082 100644 --- a/CREDITS.md +++ b/CREDITS.md @@ -12,6 +12,7 @@ People are sorted by name so please keep this order. * [4xfu](https://github.com/4xfu): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:4xfu) * [Adam Stephens](https://github.com/adamcstephens): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:adamcstephens) * [Adrien Dorsaz](https://github.com/Trim): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:Trim), [Web](https://adorsaz.ch/) +* [Aidi Stan](https://github.com/aidistan): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:aidistan), [Web](https://aidistan.site/) * [Alexander Steinhöfer](https://github.com/lx-s): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:lx-s), [Web](https://lx-s.de/) * [Alexandre Alapetite](https://github.com/Alkarex): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:Alkarex), [Web](https://alexandre.alapetite.fr/) * [Alexis Degrugillier](https://github.com/aledeg): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:aledeg) @@ -177,4 +178,3 @@ People are sorted by name so please keep this order. * [xnaas](https://github.com/xnaas): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:xnaas), [Web](https://xnaas.info/) * [Yamakuni](https://github.com/Yamakuni): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:Yamakuni), [Web](https://ofanch.me/) * [yzqzss|一座桥在水上](https://github.com/yzqzss): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:yzqzss), [Web](https://blog.othing.xyz/) - diff --git a/app/i18n/zh-cn/conf.php b/app/i18n/zh-cn/conf.php index 2086f4a7edb..ec333b3a727 100644 --- a/app/i18n/zh-cn/conf.php +++ b/app/i18n/zh-cn/conf.php @@ -139,45 +139,45 @@ 'always_show_favorites' => '默认显示收藏夹中所有的文章', 'article' => array( 'authors_date' => array( - '_' => 'Authors and date', // TODO - 'both' => 'In header and footer', // TODO - 'footer' => 'In footer', // TODO - 'header' => 'In header', // TODO - 'none' => 'None', // TODO + '_' => '作者和日期', + 'both' => '两者都显示', + 'footer' => '仅页脚显示', + 'header' => '仅页眉显示', + 'none' => '不显示', ), 'feed_name' => array( - 'above_title' => 'Above title/tags', // TODO - 'none' => 'None', // TODO - 'with_authors' => 'In authors and date row', // TODO + 'above_title' => '在文章标题和标签上方', + 'none' => '不显示', + 'with_authors' => '与作者和日期一行', ), - 'feed_title' => 'Feed title', // TODO + 'feed_title' => '订阅源标题', 'tags' => array( - '_' => 'Tags', // TODO - 'both' => 'In header and footer', // TODO - 'footer' => 'In footer', // TODO - 'header' => 'In header', // TODO - 'none' => 'None', // TODO + '_' => '文章标签', + 'both' => '两者都显示', + 'footer' => '仅页脚显示', + 'header' => '仅页眉显示', + 'none' => '不显示', ), 'tags_max' => array( - '_' => 'Max number of tags shown', // TODO - 'help' => '0 means: show all tags and do not collapse them', // TODO + '_' => '标签最多显示个数', + 'help' => '0 标识显示所有标签', ), ), 'articles_per_page' => '每页文章数', - 'auto_load_more' => '在页面底部载入下一篇文章', + 'auto_load_more' => '在页面底部载入更多文章', 'auto_remove_article' => '阅读后隐藏文章', 'confirm_enabled' => '「全部标记为已读」时显示确认对话框', 'display_articles_unfolded' => '默认展开显示文章', 'display_categories_unfolded' => '展开的分类', 'headline' => array( 'articles' => '文章:打开/关闭', - 'articles_header_footer' => 'Articles: header/footer', // TODO + 'articles_header_footer' => '文章: 页眉/页脚', 'categories' => '左侧导航:分类', 'mark_as_read' => '标为已读选项', 'misc' => '其它', 'view' => '浏览', ), - 'hide_read_feeds' => '隐藏没有未读文章的分类或订阅源 (启用「显示所有文章」后不生效)', + 'hide_read_feeds' => '隐藏没有未读文章的分类和订阅源 (启用「显示所有文章」后不生效)', 'img_with_lazyload' => '延迟加载图片', 'jump_next' => '跳转到下一未读项(订阅源或分类)', 'mark_updated_article_unread' => '将更新的文章设为未读', @@ -187,7 +187,7 @@ 'article_viewed' => '在文章被浏览后', 'keep_max_n_unread' => '未读最多保留 n 条', 'scroll' => '在滚动浏览后', - 'upon_gone' => 'when it is no longer in the upstream news feed', // TODO + 'upon_gone' => '在被原订阅源移除后', 'upon_reception' => '在接收文章后', 'when' => '何时将文章标记为已读', 'when_same_title' => '已存在 n 条相同标题文章', @@ -222,7 +222,7 @@ '_' => '分享', 'add' => '添加分享方式', 'blogotext' => 'Blogotext', // IGNORE - 'deprecated' => '这项功能已废弃并在将来版本的FreshRSS移除,详情见:查看文档.', + 'deprecated' => '这项功能已废弃并在将来版本的 FreshRSS 中移除,详情请见 说明文档.', 'diaspora' => 'Diaspora*', // IGNORE 'email' => '邮箱', // IGNORE 'facebook' => '脸书', // IGNORE diff --git a/app/i18n/zh-cn/gen.php b/app/i18n/zh-cn/gen.php index 92d3874b858..b629106a046 100644 --- a/app/i18n/zh-cn/gen.php +++ b/app/i18n/zh-cn/gen.php @@ -18,7 +18,7 @@ 'back_to_rss_feeds' => '← 返回订阅源', 'cancel' => '取消', 'create' => '创建', - 'delete_muted_feeds' => 'Delete muted feeds', // TODO + 'delete_muted_feeds' => '删除已暂停的订阅源', 'demote' => '撤销管理员', 'disable' => '禁用', 'empty' => '清空', @@ -32,7 +32,7 @@ 'open_url' => '打开链接', 'promote' => '设为管理员', 'purge' => '清理', - 'refresh_opml' => 'Refresh OPML', // TODO + 'refresh_opml' => '刷新订阅源动态列表', 'remove' => '删除', 'rename' => '重命名', 'see_website' => '网站中查看', diff --git a/app/i18n/zh-cn/index.php b/app/i18n/zh-cn/index.php index 9507489fcf7..3996ee7c9f5 100644 --- a/app/i18n/zh-cn/index.php +++ b/app/i18n/zh-cn/index.php @@ -30,7 +30,7 @@ 'rss_of' => '%s 的订阅源', 'title' => '首页', 'title_fav' => '收藏', - 'title_global' => '全屏视图', + 'title_global' => '全局视图', ), 'log' => array( '_' => '日志', @@ -44,7 +44,7 @@ 'before_one_week' => '一周前', 'bookmark_query' => '收藏当前查询', 'favorites' => '收藏(%s)', - 'global_view' => '全屏视图', + 'global_view' => '全局视图', 'main_stream' => '首页', 'mark_all_read' => '全部设为已读', 'mark_cat_read' => '此分类设为已读', diff --git a/app/i18n/zh-cn/sub.php b/app/i18n/zh-cn/sub.php index 10211b99e96..1ecb5e557bb 100644 --- a/app/i18n/zh-cn/sub.php +++ b/app/i18n/zh-cn/sub.php @@ -25,12 +25,12 @@ 'add' => '添加分类', 'archiving' => '归档', 'dynamic_opml' => array( - '_' => 'Dynamic OPML', // TODO - 'help' => 'Provide the URL to an OPML file to dynamically populate this category with feeds', // TODO + '_' => '动态订阅', + 'help' => '使用地址上的 OPML 文件 中的订阅源填充这一分类', ), 'empty' => '空分类', 'information' => '信息', - 'opml_url' => 'OPML URL', // TODO + 'opml_url' => 'OPML 地址', 'position' => '显示位置', 'position_help' => '控制分类排列顺序', 'title' => '标题', @@ -58,8 +58,8 @@ 'css_help' => '用于获取全文(注意,这将耗费更多时间!)', 'css_path' => '原文的 CSS 选择器', 'css_path_filter' => array( - '_' => 'CSS selector of the elements to remove', // TODO - 'help' => 'A CSS selector may be a list such as: .footer, .aside', // TODO + '_' => '需移除元素的 CSS 选择器', + 'help' => '可设置多个 CSS 选择器,例如:.footer, .aside', ), 'description' => '描述', 'empty' => '此源为空。请确认它是否正常更新。', @@ -76,25 +76,25 @@ '_' => 'HTML + XPath (Web 抓取)', 'feed_title' => array( '_' => '提要标题', - 'help' => '例: //title 或一个静态的字符串: "My custom feed"', + 'help' => '如 //title 或是静态字符串如 "My custom feed"', ), - 'help' => 'XPath 1.0 是高级用户的标准查询语言,FreshRSS支持XPath以支持Web抓取。', + 'help' => 'XPath 1.0 是为资深用户准备的标准查询语言,FreshRSS 用以实现 Web 抓取.', 'item' => array( '_' => '以寻找 文章
    (很重要)', - 'help' => '例: //div[@class="news-item"]', + 'help' => '例如 //div[@class="news-item"]', ), 'item_author' => array( '_' => '文章作者', - 'help' => '也可以是静态字符串。 例: "Anonymous"', + 'help' => '可以是静态字符串,例如 "Anonymous"', ), 'item_categories' => '文章标签', 'item_content' => array( '_' => '文章内容', - 'help' => '获取完整项目的示例: .', + 'help' => '例如使用 . 将整个对象作为文章内容', ), 'item_thumbnail' => array( '_' => '文章缩略图', - 'help' => '例: descendant::img/@src', + 'help' => '例如 descendant::img/@src', ), 'item_timestamp' => array( '_' => '文章日期:', @@ -102,15 +102,15 @@ ), 'item_title' => array( '_' => '文章标题', - 'help' => '特别是用 XPath 轴 descendant::descendant::h2', + 'help' => '注意使用 XPath 轴 descendant::,例如 descendant::h2', ), 'item_uid' => array( - '_' => 'item unique ID', // TODO - 'help' => 'Optional. Example: descendant::div/@data-uri', // TODO + '_' => '文章唯一标识', + 'help' => '可选,例如: descendant::div/@data-uri', ), 'item_uri' => array( '_' => '文章链接 (URL)', - 'help' => '例: descendant::a/@href', + 'help' => '例如 descendant::a/@href', ), 'relative' => 'XPath(文章):', 'xpath' => 'XPath 定位:', @@ -121,7 +121,7 @@ 'clear_cache' => '清理缓存', 'clear_cache_help' => '清除该feed的缓存', 'reload_articles' => '重载文章', - 'reload_articles_help' => '重新加载文章并获取完整内容', // DIRTY + 'reload_articles_help' => '重载 n 篇文章并抓取内容(若设置了 CSS 选择器)', 'title' => '维护', ), 'moved_category_deleted' => '删除分类时,其中的订阅源会自动归类到 %s', @@ -194,7 +194,7 @@ '_' => '订阅管理', 'add' => '添加订阅源或分类', 'add_category' => '添加分类', - 'add_dynamic_opml' => 'Add dynamic OPML', // TODO + 'add_dynamic_opml' => '添加订阅源动态列表', 'add_feed' => '添加订阅源', 'add_label' => '添加标签', 'delete_label' => '删除标签', From 8f475523f52101f818dd4cb9ab22b5429ab39287 Mon Sep 17 00:00:00 2001 From: maTh Date: Fri, 19 Aug 2022 11:09:32 +0200 Subject: [PATCH 0322/2479] fixed (#4512) --- p/themes/Swage/swage.css | 6 +++++- p/themes/Swage/swage.rtl.css | 6 +++++- p/themes/Swage/swage.scss | 9 +++++++-- 3 files changed, 17 insertions(+), 4 deletions(-) diff --git a/p/themes/Swage/swage.css b/p/themes/Swage/swage.css index f6e1dbbb7af..19750628c68 100644 --- a/p/themes/Swage/swage.css +++ b/p/themes/Swage/swage.css @@ -671,7 +671,11 @@ form th { margin-right: 5px; margin-top: 3px; } -.header .item.configure .dropdown .icon { +.header .item.configure .dropdown .dropdown-menu { + max-height: calc(100vh - 45px); + overflow: scroll; +} +.header .item.configure .dropdown .dropdown-menu .icon { filter: brightness(3); } diff --git a/p/themes/Swage/swage.rtl.css b/p/themes/Swage/swage.rtl.css index e55c10f68d8..022b66a288e 100644 --- a/p/themes/Swage/swage.rtl.css +++ b/p/themes/Swage/swage.rtl.css @@ -671,7 +671,11 @@ form th { margin-left: 5px; margin-top: 3px; } -.header .item.configure .dropdown .icon { +.header .item.configure .dropdown .dropdown-menu { + max-height: calc(100vh - 45px); + overflow: scroll; +} +.header .item.configure .dropdown .dropdown-menu .icon { filter: brightness(3); } diff --git a/p/themes/Swage/swage.scss b/p/themes/Swage/swage.scss index f1503d494ac..f7a128242e6 100644 --- a/p/themes/Swage/swage.scss +++ b/p/themes/Swage/swage.scss @@ -838,8 +838,13 @@ form { margin-top: 3px; } - .dropdown .icon { - filter: brightness(3); + .dropdown .dropdown-menu { + max-height: calc(100vh - 45px); + overflow: scroll; + + .icon { + filter: brightness(3); + } } } } From 0ec65788f9a2fb3ab389d22c723e6b36d798a806 Mon Sep 17 00:00:00 2001 From: Roman D Date: Sat, 20 Aug 2022 13:06:24 +0300 Subject: [PATCH 0323/2479] Implemented advanced feed settings to allow cookies and HTTP redirects. (#4470) * Implemented advanced feed settings to allow cookies and HTTP redirects. * i18n fr Co-authored-by: Alexandre Alapetite --- app/Controllers/feedController.php | 15 +++++++++++++++ app/Controllers/subscriptionController.php | 11 +++++++++++ app/i18n/cz/sub.php | 4 ++++ app/i18n/de/sub.php | 4 ++++ app/i18n/en-us/sub.php | 4 ++++ app/i18n/en/sub.php | 4 ++++ app/i18n/es/sub.php | 4 ++++ app/i18n/fr/sub.php | 4 ++++ app/i18n/he/sub.php | 4 ++++ app/i18n/it/sub.php | 4 ++++ app/i18n/ja/sub.php | 4 ++++ app/i18n/ko/sub.php | 4 ++++ app/i18n/nl/sub.php | 4 ++++ app/i18n/oc/sub.php | 4 ++++ app/i18n/pl/sub.php | 4 ++++ app/i18n/pt-br/sub.php | 4 ++++ app/i18n/ru/sub.php | 4 ++++ app/i18n/sk/sub.php | 4 ++++ app/i18n/tr/sub.php | 4 ++++ app/i18n/zh-cn/sub.php | 4 ++++ app/views/helpers/feed/update.phtml | 19 +++++++++++++++++++ app/views/subscription/add.phtml | 21 +++++++++++++++++++++ 22 files changed, 138 insertions(+) diff --git a/app/Controllers/feedController.php b/app/Controllers/feedController.php index 95bca33ebb5..00759bd1870 100755 --- a/app/Controllers/feedController.php +++ b/app/Controllers/feedController.php @@ -165,6 +165,9 @@ public function addAction() { $http_auth = $user . ':' . $pass; } + $cookie = Minz_Request::param('curl_params_cookie', ''); + $cookie_file = Minz_Request::paramBoolean('curl_params_cookiefile'); + $max_redirs = intval(Minz_Request::param('curl_params_redirects', 0)); $useragent = Minz_Request::param('curl_params_useragent', ''); $proxy_address = Minz_Request::param('curl_params', ''); $proxy_type = Minz_Request::param('proxy_type', ''); @@ -173,6 +176,18 @@ public function addAction() { $opts[CURLOPT_PROXY] = $proxy_address; $opts[CURLOPT_PROXYTYPE] = intval($proxy_type); } + if ($cookie !== '') { + $opts[CURLOPT_COOKIE] = $cookie; + } + if ($cookie_file) { + // Pass empty cookie file name to enable the libcurl cookie engine + // without reading any existing cookie data. + $opts[CURLOPT_COOKIEFILE] = ''; + } + if ($max_redirs != 0) { + $opts[CURLOPT_MAXREDIRS] = $max_redirs; + $opts[CURLOPT_FOLLOWLOCATION] = 1; + } if ($useragent !== '') { $opts[CURLOPT_USERAGENT] = $useragent; } diff --git a/app/Controllers/subscriptionController.php b/app/Controllers/subscriptionController.php index bbefc2d6857..cca41b004df 100644 --- a/app/Controllers/subscriptionController.php +++ b/app/Controllers/subscriptionController.php @@ -143,6 +143,8 @@ public function feedAction() { $feed->_attributes('read_when_same_title_in_feed', $read_when_same_title_in_feed); $cookie = Minz_Request::param('curl_params_cookie', ''); + $cookie_file = Minz_Request::paramBoolean('curl_params_cookiefile'); + $max_redirs = intval(Minz_Request::param('curl_params_redirects', 0)); $useragent = Minz_Request::param('curl_params_useragent', ''); $proxy_address = Minz_Request::param('curl_params', ''); $proxy_type = Minz_Request::param('proxy_type', ''); @@ -154,6 +156,15 @@ public function feedAction() { if ($cookie !== '') { $opts[CURLOPT_COOKIE] = $cookie; } + if ($cookie_file) { + // Pass empty cookie file name to enable the libcurl cookie engine + // without reading any existing cookie data. + $opts[CURLOPT_COOKIEFILE] = ''; + } + if ($max_redirs != 0) { + $opts[CURLOPT_MAXREDIRS] = $max_redirs; + $opts[CURLOPT_FOLLOWLOCATION] = 1; + } if ($useragent !== '') { $opts[CURLOPT_USERAGENT] = $useragent; } diff --git a/app/i18n/cz/sub.php b/app/i18n/cz/sub.php index 6cacf3e8bc6..a51692a3fa1 100644 --- a/app/i18n/cz/sub.php +++ b/app/i18n/cz/sub.php @@ -36,6 +36,8 @@ 'title' => 'Název', ), 'feed' => array( + 'accept_cookies' => 'Accept cookies', // TODO + 'accept_cookies_help' => 'Allow the feed server to set cookies (stored in memory for the duration of the request only)', // TODO 'add' => 'Přidat kanál RSS', 'advanced' => 'Rozšířené', 'archiving' => 'Archivace', @@ -124,6 +126,8 @@ 'reload_articles_help' => 'Znovu načíst články a získat úplný obsah, pokud je definován přepínač.', // DIRTY 'title' => 'Údržba', ), + 'max_http_redir' => 'Max HTTP redirects', // TODO + 'max_http_redir_help' => 'Set to 0 or leave blank to disable, -1 for unlimited redirects', // TODO 'moved_category_deleted' => 'Když odstraníte kategorii, její kanály jsou automaticky přesunuty do %s.', 'mute' => 'ztlumit', 'no_selected' => 'Nejsou vybrány žádné kanály.', diff --git a/app/i18n/de/sub.php b/app/i18n/de/sub.php index c8a0c79618d..e78d1ef2540 100644 --- a/app/i18n/de/sub.php +++ b/app/i18n/de/sub.php @@ -36,6 +36,8 @@ 'title' => 'Titel', ), 'feed' => array( + 'accept_cookies' => 'Accept cookies', // TODO + 'accept_cookies_help' => 'Allow the feed server to set cookies (stored in memory for the duration of the request only)', // TODO 'add' => 'Einen RSS-Feed hinzufügen', 'advanced' => 'Erweitert', 'archiving' => 'Archivierung', @@ -124,6 +126,8 @@ 'reload_articles_help' => 'Artikel neuladen und komplette Inhalte holen, wenn ein Selektor festgelegt wurde.', // DIRTY 'title' => 'Wartung', ), + 'max_http_redir' => 'Max HTTP redirects', // TODO + 'max_http_redir_help' => 'Set to 0 or leave blank to disable, -1 for unlimited redirects', // TODO 'moved_category_deleted' => 'Wenn Sie eine Kategorie entfernen, werden deren Feeds automatisch in die Kategorie %s eingefügt.', 'mute' => 'Stumm schalten', 'no_selected' => 'Kein Feed ausgewählt.', diff --git a/app/i18n/en-us/sub.php b/app/i18n/en-us/sub.php index 648fdec9aa4..df727041a37 100644 --- a/app/i18n/en-us/sub.php +++ b/app/i18n/en-us/sub.php @@ -36,6 +36,8 @@ 'title' => 'Title', // IGNORE ), 'feed' => array( + 'accept_cookies' => 'Accept cookies', // IGNORE + 'accept_cookies_help' => 'Allow the feed server to set cookies (stored in memory for the duration of the request only)', // IGNORE 'add' => 'Add an RSS feed', // IGNORE 'advanced' => 'Advanced', // IGNORE 'archiving' => 'Archiving', // IGNORE @@ -124,6 +126,8 @@ 'reload_articles_help' => 'Reload that many articles and fetch complete content if a selector is defined.', // IGNORE 'title' => 'Maintenance', // IGNORE ), + 'max_http_redir' => 'Max HTTP redirects', // IGNORE + 'max_http_redir_help' => 'Set to 0 or leave blank to disable, -1 for unlimited redirects', // IGNORE 'moved_category_deleted' => 'When you delete a category, its feeds are automatically classified under %s.', // IGNORE 'mute' => 'mute', // IGNORE 'no_selected' => 'No feed selected.', // IGNORE diff --git a/app/i18n/en/sub.php b/app/i18n/en/sub.php index 202d89b3c18..c5c15a435d3 100644 --- a/app/i18n/en/sub.php +++ b/app/i18n/en/sub.php @@ -36,6 +36,8 @@ 'title' => 'Title', ), 'feed' => array( + 'accept_cookies' => 'Accept cookies', + 'accept_cookies_help' => 'Allow the feed server to set cookies (stored in memory for the duration of the request only)', 'add' => 'Add an RSS feed', 'advanced' => 'Advanced', 'archiving' => 'Archiving', @@ -124,6 +126,8 @@ 'reload_articles_help' => 'Reload that many articles and fetch complete content if a selector is defined.', 'title' => 'Maintenance', ), + 'max_http_redir' => 'Max HTTP redirects', + 'max_http_redir_help' => 'Set to 0 or leave blank to disable, -1 for unlimited redirects', 'moved_category_deleted' => 'When you delete a category, its feeds are automatically classified under %s.', 'mute' => 'mute', 'no_selected' => 'No feed selected.', diff --git a/app/i18n/es/sub.php b/app/i18n/es/sub.php index dcf72697f10..7918a943743 100755 --- a/app/i18n/es/sub.php +++ b/app/i18n/es/sub.php @@ -36,6 +36,8 @@ 'title' => 'Título', ), 'feed' => array( + 'accept_cookies' => 'Accept cookies', // TODO + 'accept_cookies_help' => 'Allow the feed server to set cookies (stored in memory for the duration of the request only)', // TODO 'add' => 'Añadir fuente RSS', 'advanced' => 'Avanzado', 'archiving' => 'Archivo', @@ -124,6 +126,8 @@ 'reload_articles_help' => 'Vuelva a cargar artículos y obtenga contenido completo si se define un selector.', // DIRTY 'title' => 'Mantenimiento', ), + 'max_http_redir' => 'Max HTTP redirects', // TODO + 'max_http_redir_help' => 'Set to 0 or leave blank to disable, -1 for unlimited redirects', // TODO 'moved_category_deleted' => 'Al borrar una categoría todas sus fuentes pasan automáticamente a la categoría %s.', 'mute' => 'silenciar', 'no_selected' => 'No hay funentes seleccionadas.', diff --git a/app/i18n/fr/sub.php b/app/i18n/fr/sub.php index 3faf379c241..f199fefbd1d 100644 --- a/app/i18n/fr/sub.php +++ b/app/i18n/fr/sub.php @@ -36,6 +36,8 @@ 'title' => 'Titre', ), 'feed' => array( + 'accept_cookies' => 'Autoriser les cookies', + 'accept_cookies_help' => 'Accepte les cookies du flux (stocké en mémoire seulement le temps de la requête)', 'add' => 'Ajouter un flux RSS', 'advanced' => 'Avancé', 'archiving' => 'Archivage', @@ -124,6 +126,8 @@ 'reload_articles_help' => 'Recharge cette quantité d’articles et récupère le contenu complet si un sélecteur est défini.', 'title' => 'Maintenance', // IGNORE ), + 'max_http_redir' => 'Maximum de redirections HTTP', + 'max_http_redir_help' => 'Mettre à 0 ou vide pour désactiver, -1 pour un nombre illimité de redirections', 'moved_category_deleted' => 'Lors de la suppression d’une catégorie, ses flux seront automatiquement classés dans %s.', 'mute' => 'désactivé', 'no_selected' => 'Aucun flux sélectionné.', diff --git a/app/i18n/he/sub.php b/app/i18n/he/sub.php index 0d9f2ea969a..033a0a7e5ea 100644 --- a/app/i18n/he/sub.php +++ b/app/i18n/he/sub.php @@ -36,6 +36,8 @@ 'title' => 'כותרת', ), 'feed' => array( + 'accept_cookies' => 'Accept cookies', // TODO + 'accept_cookies_help' => 'Allow the feed server to set cookies (stored in memory for the duration of the request only)', // TODO 'add' => 'הוספת הזנה', 'advanced' => 'מתקדם', 'archiving' => 'ארכוב', @@ -124,6 +126,8 @@ 'reload_articles_help' => 'Reload that many articles and fetch complete content if a selector is defined.', // TODO 'title' => 'Maintenance', // TODO ), + 'max_http_redir' => 'Max HTTP redirects', // TODO + 'max_http_redir_help' => 'Set to 0 or leave blank to disable, -1 for unlimited redirects', // TODO 'moved_category_deleted' => 'כאשר הקטגוריה נמחקת ההזנות שבתוכה אוטומטית מקוטלגות תחת %s.', 'mute' => 'mute', // TODO 'no_selected' => 'אף הזנה לא נבחרה.', diff --git a/app/i18n/it/sub.php b/app/i18n/it/sub.php index c9f4823f097..720733c7d8e 100644 --- a/app/i18n/it/sub.php +++ b/app/i18n/it/sub.php @@ -36,6 +36,8 @@ 'title' => 'Titolo', ), 'feed' => array( + 'accept_cookies' => 'Accept cookies', // TODO + 'accept_cookies_help' => 'Allow the feed server to set cookies (stored in memory for the duration of the request only)', // TODO 'add' => 'Aggiungi un Feed RSS', 'advanced' => 'Avanzate', 'archiving' => 'Archiviazione', @@ -124,6 +126,8 @@ 'reload_articles_help' => 'Reload that many articles and fetch complete content if a selector is defined.', // TODO 'title' => 'Maintenance', // TODO ), + 'max_http_redir' => 'Max HTTP redirects', // TODO + 'max_http_redir_help' => 'Set to 0 or leave blank to disable, -1 for unlimited redirects', // TODO 'moved_category_deleted' => 'Cancellando una categoria i feed al suo interno verranno classificati automaticamente come %s.', 'mute' => 'mute', // TODO 'no_selected' => 'Nessun feed selezionato.', diff --git a/app/i18n/ja/sub.php b/app/i18n/ja/sub.php index 9973e5bec81..54ae552672b 100644 --- a/app/i18n/ja/sub.php +++ b/app/i18n/ja/sub.php @@ -36,6 +36,8 @@ 'title' => 'タイトル', ), 'feed' => array( + 'accept_cookies' => 'Accept cookies', // TODO + 'accept_cookies_help' => 'Allow the feed server to set cookies (stored in memory for the duration of the request only)', // TODO 'add' => 'RSSフィードに追加する', 'advanced' => '応用的な設定', 'archiving' => 'アーカイブ', @@ -124,6 +126,8 @@ 'reload_articles_help' => '記事を再読み込みして、セレクターが定義したコンテンツを完全に取得します。', // DIRTY 'title' => 'メンテナンス', ), + 'max_http_redir' => 'Max HTTP redirects', // TODO + 'max_http_redir_help' => 'Set to 0 or leave blank to disable, -1 for unlimited redirects', // TODO 'moved_category_deleted' => 'カテゴリを削除したとき、フィードは自動的に%s下に分類されます。', 'mute' => 'ミュート', 'no_selected' => 'どのフィードも選択されていません', diff --git a/app/i18n/ko/sub.php b/app/i18n/ko/sub.php index edb97842b74..4e188f6d19e 100644 --- a/app/i18n/ko/sub.php +++ b/app/i18n/ko/sub.php @@ -36,6 +36,8 @@ 'title' => '제목', ), 'feed' => array( + 'accept_cookies' => 'Accept cookies', // TODO + 'accept_cookies_help' => 'Allow the feed server to set cookies (stored in memory for the duration of the request only)', // TODO 'add' => 'RSS 피드 추가', 'advanced' => '고급 설정', 'archiving' => '보관', @@ -124,6 +126,8 @@ 'reload_articles_help' => '글 다시 로드하고 셀렉터가 정의 되었을 경우에 모든 컨텐츠 가져오기.', // DIRTY 'title' => '유지 보수', ), + 'max_http_redir' => 'Max HTTP redirects', // TODO + 'max_http_redir_help' => 'Set to 0 or leave blank to disable, -1 for unlimited redirects', // TODO 'moved_category_deleted' => '카테고리를 삭제하면, 해당 카테고리 아래에 있던 피드들은 자동적으로 %s 아래로 분류됩니다.', 'mute' => '무기한 새로고침 금지', 'no_selected' => '선택된 피드가 없습니다.', diff --git a/app/i18n/nl/sub.php b/app/i18n/nl/sub.php index b8585bcbb52..fbcbb8bfb38 100644 --- a/app/i18n/nl/sub.php +++ b/app/i18n/nl/sub.php @@ -36,6 +36,8 @@ 'title' => 'Titel', ), 'feed' => array( + 'accept_cookies' => 'Accept cookies', // TODO + 'accept_cookies_help' => 'Allow the feed server to set cookies (stored in memory for the duration of the request only)', // TODO 'add' => 'Voeg een RSS-feed toe', 'advanced' => 'Geavanceerd', 'archiving' => 'Archiveren', @@ -124,6 +126,8 @@ 'reload_articles_help' => 'Artikels herladen en complete inhoud ophalen als een selector is gedefinieerd.', // DIRTY 'title' => 'Onderhoud', ), + 'max_http_redir' => 'Max HTTP redirects', // TODO + 'max_http_redir_help' => 'Set to 0 or leave blank to disable, -1 for unlimited redirects', // TODO 'moved_category_deleted' => 'Als u een categorie verwijderd, worden de feeds automatisch geclassificeerd onder %s.', 'mute' => 'demp', 'no_selected' => 'Geen feed geselecteerd.', diff --git a/app/i18n/oc/sub.php b/app/i18n/oc/sub.php index 28b0de33ba6..59b5d40ad3d 100644 --- a/app/i18n/oc/sub.php +++ b/app/i18n/oc/sub.php @@ -36,6 +36,8 @@ 'title' => 'Títol', ), 'feed' => array( + 'accept_cookies' => 'Accept cookies', // TODO + 'accept_cookies_help' => 'Allow the feed server to set cookies (stored in memory for the duration of the request only)', // TODO 'add' => 'Ajustar un flux RSS', 'advanced' => 'Avançat', 'archiving' => 'Archivar', @@ -124,6 +126,8 @@ 'reload_articles_help' => 'Recargar los articles e recuperar lo contengut complet', // DIRTY 'title' => 'Mantenença', ), + 'max_http_redir' => 'Max HTTP redirects', // TODO + 'max_http_redir_help' => 'Set to 0 or leave blank to disable, -1 for unlimited redirects', // TODO 'moved_category_deleted' => 'Quand escafatz una categoria, sos fluxes son automaticament classats dins %s.', 'mute' => 'mut', 'no_selected' => 'Cap de flux pas seleccionat.', diff --git a/app/i18n/pl/sub.php b/app/i18n/pl/sub.php index 603fe8f4a2f..6e819d92c81 100644 --- a/app/i18n/pl/sub.php +++ b/app/i18n/pl/sub.php @@ -36,6 +36,8 @@ 'title' => 'Tytuł', ), 'feed' => array( + 'accept_cookies' => 'Accept cookies', // TODO + 'accept_cookies_help' => 'Allow the feed server to set cookies (stored in memory for the duration of the request only)', // TODO 'add' => 'Dodaj kanał', 'advanced' => 'Zaawansowane', 'archiving' => 'Archiwizacja', @@ -124,6 +126,8 @@ 'reload_articles_help' => 'Ponownie pobiera wiadomości i przetwarza treść ze strony pierwotnej, jeżeli zdefiniowany został selektor CSS.', // DIRTY 'title' => 'Konserwacja', ), + 'max_http_redir' => 'Max HTTP redirects', // TODO + 'max_http_redir_help' => 'Set to 0 or leave blank to disable, -1 for unlimited redirects', // TODO 'moved_category_deleted' => 'Po usunięciu kategorii znajdujące się w niej kanały zostaną automatycznie przeniesione do %s.', 'mute' => 'wycisz', 'no_selected' => 'Brak kanałów.', diff --git a/app/i18n/pt-br/sub.php b/app/i18n/pt-br/sub.php index 82ae085ef2f..6f49f6fc358 100644 --- a/app/i18n/pt-br/sub.php +++ b/app/i18n/pt-br/sub.php @@ -36,6 +36,8 @@ 'title' => 'Título', ), 'feed' => array( + 'accept_cookies' => 'Accept cookies', // TODO + 'accept_cookies_help' => 'Allow the feed server to set cookies (stored in memory for the duration of the request only)', // TODO 'add' => 'Adicionar um RSS feed', 'advanced' => 'Avançado', 'archiving' => 'Arquivar', @@ -124,6 +126,8 @@ 'reload_articles_help' => 'Recarregar artigos e buscar conteúdo completo', // DIRTY 'title' => 'Manutenção', ), + 'max_http_redir' => 'Max HTTP redirects', // TODO + 'max_http_redir_help' => 'Set to 0 or leave blank to disable, -1 for unlimited redirects', // TODO 'moved_category_deleted' => 'Quando você deleta uma categoria, seus feeds são automaticamente classificados como %s.', 'mute' => 'silenciar', 'no_selected' => 'Nenhum feed selecionado.', diff --git a/app/i18n/ru/sub.php b/app/i18n/ru/sub.php index 9bc64f05dab..34716229610 100644 --- a/app/i18n/ru/sub.php +++ b/app/i18n/ru/sub.php @@ -36,6 +36,8 @@ 'title' => 'Заголовок', ), 'feed' => array( + 'accept_cookies' => 'Accept cookies', // TODO + 'accept_cookies_help' => 'Allow the feed server to set cookies (stored in memory for the duration of the request only)', // TODO 'add' => 'Добавить RSS-ленту', 'advanced' => 'Дополнительно', 'archiving' => 'Архивирование', @@ -124,6 +126,8 @@ 'reload_articles_help' => 'Перезагрузить столько статей и извлечь полное содержимое, если задан селектор.', 'title' => 'Обслуживание', ), + 'max_http_redir' => 'Max HTTP redirects', // TODO + 'max_http_redir_help' => 'Set to 0 or leave blank to disable, -1 for unlimited redirects', // TODO 'moved_category_deleted' => 'Когда вы удаляете категорию, ленты категории автоматически попадают в категорию %s.', 'mute' => 'заглушить', 'no_selected' => 'Ленты не выбраны.', diff --git a/app/i18n/sk/sub.php b/app/i18n/sk/sub.php index 58999e5f3f3..4a4fd6f9f9f 100644 --- a/app/i18n/sk/sub.php +++ b/app/i18n/sk/sub.php @@ -36,6 +36,8 @@ 'title' => 'Názov', ), 'feed' => array( + 'accept_cookies' => 'Accept cookies', // TODO + 'accept_cookies_help' => 'Allow the feed server to set cookies (stored in memory for the duration of the request only)', // TODO 'add' => 'Pridať RSS kanál', 'advanced' => 'Pokročilé', 'archiving' => 'Archivovanie', @@ -124,6 +126,8 @@ 'reload_articles_help' => 'Obnoviť články a stiahnuť kompletný obsah, ak je definovaný selektor.', // DIRTY 'title' => 'Údržba', ), + 'max_http_redir' => 'Max HTTP redirects', // TODO + 'max_http_redir_help' => 'Set to 0 or leave blank to disable, -1 for unlimited redirects', // TODO 'moved_category_deleted' => 'Keď vymažete kategóriu, jej kanály sa automaticky zaradia pod %s.', 'mute' => 'stíšiť', 'no_selected' => 'Nevybrali ste kanál.', diff --git a/app/i18n/tr/sub.php b/app/i18n/tr/sub.php index e0af10d129a..3fb1ff5208b 100644 --- a/app/i18n/tr/sub.php +++ b/app/i18n/tr/sub.php @@ -36,6 +36,8 @@ 'title' => 'Başlık', ), 'feed' => array( + 'accept_cookies' => 'Accept cookies', // TODO + 'accept_cookies_help' => 'Allow the feed server to set cookies (stored in memory for the duration of the request only)', // TODO 'add' => 'RSS akışı ekle', 'advanced' => 'Gelişmiş', 'archiving' => 'Arşiv', @@ -124,6 +126,8 @@ 'reload_articles_help' => 'Reload that many articles and fetch complete content if a selector is defined.', // TODO 'title' => 'Bakım', ), + 'max_http_redir' => 'Max HTTP redirects', // TODO + 'max_http_redir_help' => 'Set to 0 or leave blank to disable, -1 for unlimited redirects', // TODO 'moved_category_deleted' => 'Bir kategoriyi silerseniz, içerisindeki akışlar %s içerisine yerleşir.', 'mute' => 'sessize al', 'no_selected' => 'Hiçbir akış seçilmedi.', diff --git a/app/i18n/zh-cn/sub.php b/app/i18n/zh-cn/sub.php index 1ecb5e557bb..580a25e888b 100644 --- a/app/i18n/zh-cn/sub.php +++ b/app/i18n/zh-cn/sub.php @@ -36,6 +36,8 @@ 'title' => '标题', ), 'feed' => array( + 'accept_cookies' => 'Accept cookies', // TODO + 'accept_cookies_help' => 'Allow the feed server to set cookies (stored in memory for the duration of the request only)', // TODO 'add' => '添加订阅源', 'advanced' => '高级', 'archiving' => '归档', @@ -124,6 +126,8 @@ 'reload_articles_help' => '重载 n 篇文章并抓取内容(若设置了 CSS 选择器)', 'title' => '维护', ), + 'max_http_redir' => 'Max HTTP redirects', // TODO + 'max_http_redir_help' => 'Set to 0 or leave blank to disable, -1 for unlimited redirects', // TODO 'moved_category_deleted' => '删除分类时,其中的订阅源会自动归类到 %s', 'mute' => '暂停', 'no_selected' => '未选择订阅源', diff --git a/app/views/helpers/feed/update.phtml b/app/views/helpers/feed/update.phtml index 02dcb29e61a..3ebf2d0f3c0 100644 --- a/app/views/helpers/feed/update.phtml +++ b/app/views/helpers/feed/update.phtml @@ -527,6 +527,25 @@ $this->feed->attributes('curl_params')[CURLOPT_COOKIE] : '' ?>" placeholder="" />

    + +

    +
    +
    + +
    + +
    + +

    diff --git a/app/views/subscription/add.phtml b/app/views/subscription/add.phtml index 41ee04fb7e3..a2b7f128910 100644 --- a/app/views/subscription/add.phtml +++ b/app/views/subscription/add.phtml @@ -179,6 +179,27 @@
    +
    + +
    + +

    + +

    +
    +
    + +
    + +
    + +

    +
    +
    +
    From 0ec3874620c03b03a5cb462d99d710bd802d06f9 Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Sat, 20 Aug 2022 19:44:25 +0200 Subject: [PATCH 0324/2479] Fix PHP 7.0 warning (#4514) Regression from https://github.com/FreshRSS/FreshRSS/pull/4202 > Warning: Declaration of FreshRSS_EntryDAOSQLite::markRead($ids, $is_read = true) should be compatible with FreshRSS_EntryDAO::markRead($ids, bool $is_read = true) in /var/www/FreshRSS/app/Models/EntryDAOSQLite.php on line 3 --- app/Models/EntryDAOSQLite.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Models/EntryDAOSQLite.php b/app/Models/EntryDAOSQLite.php index b1ab6601e53..8039581e69a 100644 --- a/app/Models/EntryDAOSQLite.php +++ b/app/Models/EntryDAOSQLite.php @@ -115,7 +115,7 @@ protected function updateCacheUnreads($catId = false, $feedId = false) { * @param boolean $is_read * @return integer|false affected rows */ - public function markRead($ids, $is_read = true) { + public function markRead($ids, bool $is_read = true) { FreshRSS_UserDAO::touch(); if (is_array($ids)) { //Many IDs at once (used by API) //if (true) { //Speed heuristics //TODO: Not implemented yet for SQLite (so always call IDs one by one) From 85991d1c5ca1b29503e11be65a33da9a7e0c154a Mon Sep 17 00:00:00 2001 From: Luc SANCHEZ <4697568+ColonelMoutarde@users.noreply.github.com> Date: Sun, 21 Aug 2022 22:41:31 +0200 Subject: [PATCH 0325/2479] Use keyword "static" (#4436) static closure --- app/Services/ImportService.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Services/ImportService.php b/app/Services/ImportService.php index 780dcbd07ab..2e70d4b8191 100644 --- a/app/Services/ImportService.php +++ b/app/Services/ImportService.php @@ -70,7 +70,7 @@ private function addOpmlElements($opml_elements, $parent_cat = null, $flatten = $limits = FreshRSS_Context::$system_conf->limits; //Sort with categories first - usort($opml_elements, function ($a, $b) { + usort($opml_elements, static function ($a, $b) { return strcmp( (isset($a['xmlUrl']) ? 'Z' : 'A') . (isset($a['text']) ? $a['text'] : ''), (isset($b['xmlUrl']) ? 'Z' : 'A') . (isset($b['text']) ? $b['text'] : '')); From 4214954ea169e6cf6b9a7b2927dce892463c851c Mon Sep 17 00:00:00 2001 From: maTh Date: Sun, 21 Aug 2022 22:44:03 +0200 Subject: [PATCH 0326/2479] Improved: error page (#4465) * error page: true HTML page * error page: http500 erorr * error page: add CSP header * 'log.txt' replaced by LOG_FILENAME * use ADMIN_LOG * log.txt => LOG_FILENAME * error message: add * Docs created * delete: documentation on error message page * line break added * added: new line at the end * typo fixed * Update lib/lib_rss.php Co-authored-by: Alexandre Alapetite <alexandre@alapetite.fr> * Update lib/lib_rss.php Co-authored-by: Alexandre Alapetite <alexandre@alapetite.fr> * Minz HTTP 500 Co-authored-by: Alexandre Alapetite <alexandre@alapetite.fr> --- app/Models/Context.php | 2 +- app/Models/LogDAO.php | 4 ++-- app/actualize_script.php | 4 ++-- constants.php | 3 ++- docs/en/admins/01_Index.md | 3 +++ docs/en/admins/logs_and_errors.md | 40 +++++++++++++++++++++++++++++++ lib/Minz/FrontController.php | 17 ++++++------- lib/Minz/Log.php | 2 +- lib/lib_rss.php | 31 +++++++++--------------- p/i/index.php | 5 ++-- 10 files changed, 73 insertions(+), 38 deletions(-) create mode 100644 docs/en/admins/logs_and_errors.md diff --git a/app/Models/Context.php b/app/Models/Context.php index 5b7c8908986..fed2a676749 100644 --- a/app/Models/Context.php +++ b/app/Models/Context.php @@ -100,7 +100,7 @@ public static function initUser($username = '', $userMustExist = true) { $user_conf = Minz_Configuration::get('user'); FreshRSS_Context::$user_conf = $user_conf; } catch (Exception $ex) { - Minz_Log::warning($ex->getMessage(), USERS_PATH . '/_/log.txt'); + Minz_Log::warning($ex->getMessage(), USERS_PATH . '/_/' . LOG_FILENAME); } } if (FreshRSS_Context::$user_conf == null) { diff --git a/app/Models/LogDAO.php b/app/Models/LogDAO.php index 5bce466d5f3..787945af47a 100644 --- a/app/Models/LogDAO.php +++ b/app/Models/LogDAO.php @@ -3,7 +3,7 @@ class FreshRSS_LogDAO { public static function lines() { $logs = array(); - $handle = @fopen(join_path(DATA_PATH, 'users', Minz_Session::param('currentUser', '_'), 'log.txt'), 'r'); + $handle = @fopen(join_path(DATA_PATH, 'users', Minz_Session::param('currentUser', '_'), LOG_FILENAME), 'r'); if ($handle) { while (($line = fgets($handle)) !== false) { if (preg_match('/^\[([^\[]+)\] \[([^\[]+)\] --- (.*)$/', $line, $matches)) { @@ -20,7 +20,7 @@ public static function lines() { } public static function truncate() { - file_put_contents(join_path(DATA_PATH, 'users', Minz_Session::param('currentUser', '_'), 'log.txt'), ''); + file_put_contents(join_path(DATA_PATH, 'users', Minz_Session::param('currentUser', '_'), LOG_FILENAME), ''); if (FreshRSS_Auth::hasAccess('admin')) { file_put_contents(ADMIN_LOG, ''); file_put_contents(API_LOG, ''); diff --git a/app/actualize_script.php b/app/actualize_script.php index 08f897a6cdb..bad466e64e8 100755 --- a/app/actualize_script.php +++ b/app/actualize_script.php @@ -83,9 +83,9 @@ function notice($message) { $app->run(); if (!invalidateHttpCache()) { - Minz_Log::warning('FreshRSS write access problem in ' . join_path(USERS_PATH, $user, 'log.txt'), ADMIN_LOG); + Minz_Log::warning('FreshRSS write access problem in ' . join_path(USERS_PATH, $user, LOG_FILENAME), ADMIN_LOG); if (defined('STDERR')) { - fwrite(STDERR, 'FreshRSS write access problem in ' . join_path(USERS_PATH, $user, 'log.txt') . "\n"); + fwrite(STDERR, 'FreshRSS write access problem in ' . join_path(USERS_PATH, $user, LOG_FILENAME) . "\n"); } } diff --git a/constants.php b/constants.php index fa4e542336b..76593703e07 100644 --- a/constants.php +++ b/constants.php @@ -42,7 +42,8 @@ defined('UPDATE_FILENAME') or define('UPDATE_FILENAME', DATA_PATH . '/update.php'); defined('USERS_PATH') or define('USERS_PATH', DATA_PATH . '/users'); -defined('ADMIN_LOG') or define('ADMIN_LOG', USERS_PATH . '/_/log.txt'); +defined('LOG_FILENAME') or define('LOG_FILENAME', 'log.txt'); +defined('ADMIN_LOG') or define('ADMIN_LOG', USERS_PATH . '/_/' . LOG_FILENAME); defined('API_LOG') or define('API_LOG', USERS_PATH . '/_/log_api.txt'); defined('CACHE_PATH') or define('CACHE_PATH', DATA_PATH . '/cache'); defined('PSHB_LOG') or define('PSHB_LOG', USERS_PATH . '/_/log_pshb.txt'); diff --git a/docs/en/admins/01_Index.md b/docs/en/admins/01_Index.md index 792434389d5..8bf07c0216b 100644 --- a/docs/en/admins/01_Index.md +++ b/docs/en/admins/01_Index.md @@ -2,9 +2,12 @@ Learn how to install, update, and backup FreshRSS, as well as how to use the command line tools. +## System Basics + 1. [Prerequisites](02_Prerequisites.md): What you’ll need to run FreshRSS 2. [General installation instructions](03_Installation.md) for FreshRSS 3. [Update your installation](04_Updating.md) to the latest stable or development version +4. [Logging and error messages](logs_and_errors.md) in case of any troubles ## Tutorials and Examples diff --git a/docs/en/admins/logs_and_errors.md b/docs/en/admins/logs_and_errors.md new file mode 100644 index 00000000000..efb05fdb800 --- /dev/null +++ b/docs/en/admins/logs_and_errors.md @@ -0,0 +1,40 @@ +# Logging and Error Messages + +## Read the Log + +### Log in the Application + +The log files are displayed in the config menu. + +### Log as Text Files + +FreshRSS logs are located in: +* user related: `./FreshRSS/data/users/*/log.txt` +* general/system related: `./FreshRSS/data/users/_/log.txt` + +### More Logging Information + +More logs can be generated by enabling `'environment' => 'development'` (default: `'production'`), in `./FreshRSS/data/config.php` + +## Error Message + +If there is an 'Application Problem' or 'Fatal Error', then a HTTP 500 error message is shown with more information. + +## Often the Cause of Problems + +A typical problem is wrong file permissions in the `./FreshRSS/data/` folder so make sure the Web server can write there and in sub-directories. + +## Common locations for additional logs + +Adapt names and paths according to your local setup. + +* If using Docker: `docker logs -f freshrss` +* To check Web server logs on a Linux system using systemd: `journalctl -xeu apache2` and if you are using php-fpm: `journalctl -xeu php-fpm` +* Otherwise, Web server logs are typically located in `/var/log/apache2/` or similar +* System logs may also contain relevant information in `/var/log/syslog`, or if using systemd: `sudo journalctl -xe` + +Running the feed update script (with the same user and PHP version as your Web server) might provide other hints, e.g.: `sudo -u www-data /usr/bin/php ./FreshRSS/app/actualize_script.php` + +## Help needed + +see: [Report a bug](https://freshrss.github.io/FreshRSS/en/contributing.html) diff --git a/lib/Minz/FrontController.php b/lib/Minz/FrontController.php index dea818a915d..80fa5ce9668 100644 --- a/lib/Minz/FrontController.php +++ b/lib/Minz/FrontController.php @@ -44,7 +44,7 @@ public function __construct () { Minz_Request::forward ($url); } catch (Minz_Exception $e) { Minz_Log::error($e->getMessage()); - $this->killApp ($e->getMessage()); + self::killApp($e->getMessage()); } $this->dispatcher = Minz_Dispatcher::getInstance(); @@ -78,7 +78,7 @@ public function run() { try { Minz_Log::error($e->getMessage()); } catch (Minz_PermissionDeniedException $e) { - $this->killApp ($e->getMessage ()); + self::killApp($e->getMessage()); } if ($e instanceof Minz_FileNotExistException || @@ -91,20 +91,21 @@ public function run() { true ); } else { - $this->killApp($e->getMessage()); + self::killApp($e->getMessage()); } } } /** - * Permet d'arrêter le programme en urgence - */ - private function killApp ($txt = '') { + * Kills the programme + */ + public static function killApp($txt = '') { + header('HTTP 1.1 500 Internal Server Error', true, 500); if (function_exists('errorMessageInfo')) { //If the application has defined a custom error message function - exit(errorMessageInfo('Application problem', $txt)); + die(errorMessageInfo('Application problem', $txt)); } - exit('### Application problem ###<br />' . "\n" . $txt); + die('### Application problem ###<br />' . "\n" . $txt); } private function setReporting() { diff --git a/lib/Minz/Log.php b/lib/Minz/Log.php index 80b93a09755..43f3c9d6d0e 100644 --- a/lib/Minz/Log.php +++ b/lib/Minz/Log.php @@ -36,7 +36,7 @@ public static function record ($information, $level, $file_name = null) { $username = '_'; } if ($file_name == null) { - $file_name = join_path(USERS_PATH, $username, 'log.txt'); + $file_name = join_path(USERS_PATH, $username, LOG_FILENAME); } else { $username = '_'; } diff --git a/lib/lib_rss.php b/lib/lib_rss.php index b485d379bdd..743aa7840d7 100644 --- a/lib/lib_rss.php +++ b/lib/lib_rss.php @@ -508,7 +508,7 @@ function invalidateHttpCache($username = '') { Minz_Session::_param('touch', uTimeString()); $username = Minz_Session::param('currentUser', '_'); } - $ok = @touch(DATA_PATH . '/users/' . $username . '/log.txt'); + $ok = @touch(DATA_PATH . '/users/' . $username . '/' . LOG_FILENAME); //if (!$ok) { //TODO: Display notification error on front-end //} @@ -569,9 +569,9 @@ function get_user_configuration($username) { FRESHRSS_PATH . '/config-user.default.php'); } catch (Minz_ConfigurationNamespaceException $e) { // namespace already exists, do nothing. - Minz_Log::warning($e->getMessage(), USERS_PATH . '/_/log.txt'); + Minz_Log::warning($e->getMessage(), ADMIN_LOG); } catch (Minz_FileNotExistException $e) { - Minz_Log::warning($e->getMessage(), USERS_PATH . '/_/log.txt'); + Minz_Log::warning($e->getMessage(), ADMIN_LOG); return null; } @@ -823,25 +823,16 @@ function errorMessageInfo($errorTitle, $error = '') { $details = "<pre>{$details}</pre>"; } + header("Content-Security-Policy: default-src 'self'"); + return <<<MSG - <h1>{$errorTitle}</h1> + <!DOCTYPE html><html><header><title>HTTP 500: {$errorTitle} +

    HTTP 500: {$errorTitle}

    {$message} {$details} -

    Check the logs

    -

    FreshRSS logs are located in ./FreshRSS/data/users/*/log*.txt

    -

    N.B.: A typical problem is wrong file permissions in the ./FreshRSS/data/ folder - so make sure the Web server can write there and in sub-directories.

    -

    Common locations for additional logs

    -

    N.B.: Adapt names and paths according to your local setup.

    -
      -
    • If using Docker: docker logs -f freshrss
    • -
    • To check Web server logs on a Linux system using systemd: journalctl -xeu apache2 - and if you are using php-fpm: journalctl -xeu php-fpm
    • -
    • Otherwise, Web server logs are typically located in /var/log/apache2/ or similar
    • -
    • System logs may also contain relevant information in /var/log/syslog, or if using systemd: sudo journalctl -xe
    • -
    -

    More logs can be generated by enabling 'environment' => 'development', in ./FreshRSS/data/config.php

    -

    Running the feed update script (with the same user and PHP version as your Web server) might provide other hints, e.g.: - sudo -u www-data /usr/bin/php ./FreshRSS/app/actualize_script.php

    +
    + For help see the documentation: + https://freshrss.github.io/FreshRSS/en/admins/logs_and_errors.html + MSG; } diff --git a/p/i/index.php b/p/i/index.php index 949d82aeceb..48cedfc9264 100755 --- a/p/i/index.php +++ b/p/i/index.php @@ -35,7 +35,7 @@ require(LIB_PATH . '/http-conditional.php'); $currentUser = Minz_Session::param('currentUser', ''); $dateLastModification = $currentUser === '' ? time() : max( - @filemtime(join_path(USERS_PATH, $currentUser, 'log.txt')), + @filemtime(join_path(USERS_PATH, $currentUser, LOG_FILENAME)), @filemtime(join_path(DATA_PATH, 'config.php')) ); if (httpConditional($dateLastModification, 0, 0, false, PHP_COMPRESSION, true)) { @@ -64,7 +64,6 @@ if ($error) { syslog(LOG_INFO, 'FreshRSS Fatal error! ' . $error); - Minz_Log::error($error); - die(errorMessageInfo('Fatal error', $error)); + FreshRSS::killApp($error); } } From 1f6eed14da09e061c7dc5e8b4888fd07b5a01d9b Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Sun, 21 Aug 2022 22:50:05 +0200 Subject: [PATCH 0327/2479] Delayed changelog (#4457) * Delayed changelog More coming later * Some more * Up-to-date * A bit more --- CHANGELOG.md | 111 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 111 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8e7611c87f5..8e3af944c12 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,117 @@ * Features * New Web scraping feature *HTML+XPath* for Web pages without any RSS/ATOM feed [#4220](https://github.com/FreshRSS/FreshRSS/pull/4220) + * Add support for *Dynamic OPML* [#4407](https://github.com/FreshRSS/FreshRSS/pull/4407) + * Subscriber: Ability for a category to be dynamically populated with a list of feeds provided by a remote OPML + * Publisher: Ability to dynamically export a FreshRSS view (all, feed, category) into a dynamic OPML + * New search engine supporting (nested) parentheses [#4378](https://github.com/FreshRSS/FreshRSS/pull/4378), [#4503](https://github.com/FreshRSS/FreshRSS/pull/4503) + * `(author:Alice OR intitle:hello) (author:Bob OR intitle:world)` + * also with negation: `!((author:Alice intitle:hello) OR (author:Bob intitle:world))` + * and supporting calling user queries from the search field by name: `search:"My query"` or `search:QueryA`, or by ID: `S:3` + * Allow many (50k+) feeds [#4347](https://github.com/FreshRSS/FreshRSS/pull/4347) + * Note: only for new users or after an export/import or a manual database update + * See also [#4357](https://github.com/FreshRSS/FreshRSS/pull/4357), [#4353](https://github.com/FreshRSS/FreshRSS/pull/4353), + [#4417](https://github.com/FreshRSS/FreshRSS/pull/4417), [#4502](https://github.com/FreshRSS/FreshRSS/pull/4502) + * New option to exclude some DOM elements with a CSS Selector when retrieving an article full content [#4501](https://github.com/FreshRSS/FreshRSS/pull/4501) + * New option to automatically mark as read gone articles [#4426](https://github.com/FreshRSS/FreshRSS/pull/4426) + * New OPML export/import of some proprietary FreshRSS attributes [#4342](https://github.com/FreshRSS/FreshRSS/pull/4342) + * New feed settings to allow cookies and HTTP redirects [#4470](https://github.com/FreshRSS/FreshRSS/pull/4470) + * Performance: Easier [text search indexes](https://freshrss.github.io/FreshRSS/en/admins/DatabaseConfig.html) for fast searches with PostgreSQL [#4505](https://github.com/FreshRSS/FreshRSS/pull/4505) + * The indexes must be manually added for now. Using GIN `pg_trgm` + * Easier definition of default user queries for new users in `data/config-user.custom.php` [#4360](https://github.com/FreshRSS/FreshRSS/pull/4360) + * New sharing through standard [Web Share API](https://www.w3.org/TR/web-share/) [#4271](https://github.com/FreshRSS/FreshRSS/pull/4271) + * New sharing with Xing, Reddit, Pinterest, WhatsApp [#4270](https://github.com/FreshRSS/FreshRSS/pull/4270) +* SimplePie + * New method `rename_attribute()` instead of removing attributes to better be able to style/hide content of articles [#4175](https://github.com/FreshRSS/FreshRSS/pull/4175) + * Fix parsing of HTTP Links [simplepie#729](https://github.com/simplepie/simplepie/pull/729) + * Fix `status_code` type for PHP 8.1+ [simplepie#728](https://github.com/simplepie/simplepie/pull/728) +* Bug fixing + * Fix regression with Fever API on 32-bit platforms [#4201](https://github.com/FreshRSS/FreshRSS/pull/4201) + * Fix read-when-same-title bug [#4206](https://github.com/FreshRSS/FreshRSS/pull/4206) + * Fix some search expressions such as `"ab cd"` and `ab-cd` [#4277](https://github.com/FreshRSS/FreshRSS/pull/4277) + * WebSub: Use hash instead of base64 to handle long URLs [#4282](https://github.com/FreshRSS/FreshRSS/pull/4282) + * Fix last update & archive logic [#4422](https://github.com/FreshRSS/FreshRSS/pull/4422) + * Fix handling of authors with ampersand `&` [#4287](https://github.com/FreshRSS/FreshRSS/pull/4287) + * Fix lazy loading images containing a quote `'` in the address [#4330](https://github.com/FreshRSS/FreshRSS/pull/4330) + * Fix database size calculation for PostgreSQL [#4249](https://github.com/FreshRSS/FreshRSS/pull/4249) + * Fix HTTP root redirection in some cases (trailing slash with a proxy) [#4167](https://github.com/FreshRSS/FreshRSS/pull/4167) + * Fix `htmlspecialchars()` warnings with PHP 8.1+ [#4411](https://github.com/FreshRSS/FreshRSS/pull/4411) + * Fix OPML category encoding [#4427](https://github.com/FreshRSS/FreshRSS/pull/4427) + * Fix one category of favicon update problem [#4358](https://github.com/FreshRSS/FreshRSS/pull/4358) + * Fix rare mark-as-read bug [#4456](https://github.com/FreshRSS/FreshRSS/pull/4456) + * Add missing extension hook `freshrss_user_maintenance` in CLI [#4495](https://github.com/FreshRSS/FreshRSS/pull/4495) + * Rename conflicting function `errorMessage()` which exists on some platforms [#4289](https://github.com/FreshRSS/FreshRSS/pull/4289) + * Fix remain of bookmarklet [#4240](https://github.com/FreshRSS/FreshRSS/pull/4240) +* UI + * Performance: Automatic simplification of layout for 1000+ feeds [#4357](https://github.com/FreshRSS/FreshRSS/pull/4357) + * Performance: New option *icons-as-emojis* [#4353](https://github.com/FreshRSS/FreshRSS/pull/4353) + * Manage feed configuration using a dynamic slider view [#4226](https://github.com/FreshRSS/FreshRSS/pull/4226), [#4297](https://github.com/FreshRSS/FreshRSS/pull/4297), [#4394](https://github.com/FreshRSS/FreshRSS/pull/4394) + * New option for custom HTML logo/title in the main Web UI view [#4369](https://github.com/FreshRSS/FreshRSS/pull/4369) + * Show errored, empty, muted feeds in statistics [#4276](https://github.com/FreshRSS/FreshRSS/pull/4276) + * Improve configuration of registration form [#3932](https://github.com/FreshRSS/FreshRSS/pull/3932) + * Improve subscription list drag & drop [#3953](https://github.com/FreshRSS/FreshRSS/pull/3953) + * Improve extension manager [#4181](https://github.com/FreshRSS/FreshRSS/pull/4181) + * Improve idle feeds list [#4192](https://github.com/FreshRSS/FreshRSS/pull/4192) + * Improve feed link in normal view [#4006](https://github.com/FreshRSS/FreshRSS/pull/4006) + * Improve browser notification for unread message [#4193](https://github.com/FreshRSS/FreshRSS/pull/4193) + * Improve notification banner [#4023](https://github.com/FreshRSS/FreshRSS/pull/4023) + * Improve new article banner [#4037](https://github.com/FreshRSS/FreshRSS/pull/4037) + * Improve pagination + *load more* button [#4125](https://github.com/FreshRSS/FreshRSS/pull/4125) + * Improve log view [#4204](https://github.com/FreshRSS/FreshRSS/pull/4204) + * Improve unread articles counter in normal view [#4166](https://github.com/FreshRSS/FreshRSS/pull/4166) + * Automatically set the category when adding a feed from an existing category [#4333](https://github.com/FreshRSS/FreshRSS/pull/4333) + * Better PWA colours for mobile [#4254](https://github.com/FreshRSS/FreshRSS/pull/4254) + * Improve article footer [#4306](https://github.com/FreshRSS/FreshRSS/pull/4306) + * Various UI and style improvements [#4205](https://github.com/FreshRSS/FreshRSS/pull/4205), [#4212](https://github.com/FreshRSS/FreshRSS/pull/4212), [#4218](https://github.com/FreshRSS/FreshRSS/pull/4218), + [#4238](https://github.com/FreshRSS/FreshRSS/pull/4238), [#4455](https://github.com/FreshRSS/FreshRSS/pull/4455), [#4298](https://github.com/FreshRSS/FreshRSS/pull/4298), + [#4383](https://github.com/FreshRSS/FreshRSS/pull/4383), [#4452](https://github.com/FreshRSS/FreshRSS/pull/4452), [#4455](https://github.com/FreshRSS/FreshRSS/pull/4455), + [#4466](https://github.com/FreshRSS/FreshRSS/pull/4466), [#4471](https://github.com/FreshRSS/FreshRSS/pull/4471), [#4472](https://github.com/FreshRSS/FreshRSS/pull/4472), + [#4474](https://github.com/FreshRSS/FreshRSS/pull/4474), [#4498](https://github.com/FreshRSS/FreshRSS/pull/4498), [#4502](https://github.com/FreshRSS/FreshRSS/pull/4502), + [#4504](https://github.com/FreshRSS/FreshRSS/pull/4504) +* Themes + * New theme *Dark pink* [#4311](https://github.com/FreshRSS/FreshRSS/pull/4311) + * New theme *Nord* [#4400](https://github.com/FreshRSS/FreshRSS/pull/4400) + * Improve themes *Mapco* [#4491](https://github.com/FreshRSS/FreshRSS/pull/4491); *Swage* [#4493](https://github.com/FreshRSS/FreshRSS/pull/4493), [#4512](https://github.com/FreshRSS/FreshRSS/pull/4512) +* Extensions + * Allow extensions using `entry_before_insert` to change `entry->isRead()` [#4331](https://github.com/FreshRSS/FreshRSS/pull/4331) +* i18n + * Improve i18n CLI [#4197](https://github.com/FreshRSS/FreshRSS/pull/4197), [#4199](https://github.com/FreshRSS/FreshRSS/pull/4199) + * Improve Chinese [#4332](https://github.com/FreshRSS/FreshRSS/pull/4332), [#4337](https://github.com/FreshRSS/FreshRSS/pull/4337), [#4379](https://github.com/FreshRSS/FreshRSS/pull/4379), + [#4509](https://github.com/FreshRSS/FreshRSS/pull/4509) + * Improve English [#4450](https://github.com/FreshRSS/FreshRSS/pull/4450) + * Improve Polish [#4363](https://github.com/FreshRSS/FreshRSS/pull/4363) + * Improve Russian [#4385](https://github.com/FreshRSS/FreshRSS/pull/4385) +* Deployment + * Docker: Performance: entrypoint fix buffering, problematic when importing large OPMLs during install [#4417](https://github.com/FreshRSS/FreshRSS/pull/4417) + * Docker: alternative image updated to Alpine 3.16 with PHP 8.0.22 and Apache 2.4.54 [#4391](https://github.com/FreshRSS/FreshRSS/pull/4391) + * Add PHP extensions `php-openssl` (used by PHPMailer) and `php-xml` (used by SimplePie) [#4420](https://github.com/FreshRSS/FreshRSS/pull/4420) + * Docker: Upgraded dev image `freshrss/freshrss:newest` to PHP 8.2 [#4420](https://github.com/FreshRSS/FreshRSS/pull/4420) + * Docker default image (Debian 11 Bullseye) updated to PHP 7.4.30 and Apache 2.4.54 + * Include PHP extensions in Composer for easier automated deployment [#4497](https://github.com/FreshRSS/FreshRSS/pull/4497) + * Improved trimming of `base_url` to avoid some common configuration bugs, especially via Docker / CLI [#4423](https://github.com/FreshRSS/FreshRSS/pull/4423) +* CLI + * Allow empty DB prefix [#4488](https://github.com/FreshRSS/FreshRSS/pull/4488) +* Compatibility + * Initial support for PHP 8.2+ [#4420](https://github.com/FreshRSS/FreshRSS/pull/4420), [#4421](https://github.com/FreshRSS/FreshRSS/pull/4421) +* Security + * Improved error page, properly returning HTTP 500 and CSP [#4465](https://github.com/FreshRSS/FreshRSS/pull/4465) +* Misc. + * Replace `lib_phpQuery` by [`PhpGt/CssXPath`](https://github.com/PhpGt/CssXPath) library for full content retrieval [#4261](https://github.com/FreshRSS/FreshRSS/pull/4261) + * Add support for star CSS Selectors such as `a[href*="example"]` [CssXPath#181](https://github.com/PhpGt/CssXPath/pull/181) + * Performance: Do not render irrelevant HTML for Ajax calls [#4310](https://github.com/FreshRSS/FreshRSS/pull/4310), [#4366](https://github.com/FreshRSS/FreshRSS/pull/4366) + * Performance: New limit option when reloading a feed [#4370](https://github.com/FreshRSS/FreshRSS/pull/4370) + * Optional possibility to use Composer to update some libraries [#4329](https://github.com/FreshRSS/FreshRSS/pull/4329), [#4368](https://github.com/FreshRSS/FreshRSS/pull/4368) + * Update to PHPMailer 6.6.0 [#4329](https://github.com/FreshRSS/FreshRSS/pull/4329) + * Use `.gitattributes` `export-ignore` [#4415](https://github.com/FreshRSS/FreshRSS/pull/4415) + * Remove HTTP Referer for HTML download [#4372](https://github.com/FreshRSS/FreshRSS/pull/4372) + * Add database field `attributes` (JSON) for entries [#4444](https://github.com/FreshRSS/FreshRSS/pull/4444) + * Improve dev automated checks [#4209](https://github.com/FreshRSS/FreshRSS/pull/4209) + * Update dev dependencies [#4173](https://github.com/FreshRSS/FreshRSS/pull/4173), [#4203](https://github.com/FreshRSS/FreshRSS/pull/4203), [#4241](https://github.com/FreshRSS/FreshRSS/pull/4241), + [#4419](https://github.com/FreshRSS/FreshRSS/pull/4419), [#4424](https://github.com/FreshRSS/FreshRSS/pull/4424) + * Code improvements [#4130](https://github.com/FreshRSS/FreshRSS/pull/4130), [#4194](https://github.com/FreshRSS/FreshRSS/pull/4194), [#4201](https://github.com/FreshRSS/FreshRSS/pull/4201), + [#4202](https://github.com/FreshRSS/FreshRSS/pull/4202), [#4258](https://github.com/FreshRSS/FreshRSS/pull/4258), [#4263](https://github.com/FreshRSS/FreshRSS/pull/4263), + [#4356](https://github.com/FreshRSS/FreshRSS/pull/4356), [#4436](https://github.com/FreshRSS/FreshRSS/pull/4436), [#4489](https://github.com/FreshRSS/FreshRSS/pull/4489), + [#4490](https://github.com/FreshRSS/FreshRSS/pull/4490), [#4496](https://github.com/FreshRSS/FreshRSS/pull/4496) ## 2022-02-04 FreshRSS 1.19.2 From 20338b1f2e79a545d11375877b723f004b34646d Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Sun, 21 Aug 2022 23:20:43 +0200 Subject: [PATCH 0328/2479] Update credits --- CREDITS.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/CREDITS.md b/CREDITS.md index 339ed73f082..5d339d0b517 100644 --- a/CREDITS.md +++ b/CREDITS.md @@ -22,7 +22,9 @@ People are sorted by name so please keep this order. * [Andrew Rabert](https://github.com/nvllsvm): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:nvllsvm), [Web](https://nullsum.net) * [Anton Smirnov](https://github.com/arokettu): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:arokettu), [Web](https://sandfox.me/) * [ArthurHoaro](https://github.com/ArthurHoaro): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:ArthurHoaro) +* [Artur Weigandt](https://github.com/Art4): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:Art4), [Web](https://ruhr.social/@Art4) * [ASMfreaK](https://github.com/ASMfreaK): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:ASMfreaK) +* [azlux](https://github.com/azlux): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:azlux), [Web](https://azlux.fr/) * [Bartosz Taudul](https://github.com/wolfpld): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:wolfpld), [Web](https://wolf.nereid.pl/) * [Benjamin Bouvier](https://github.com/bnjbvr): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:bnjbvr), [Web](https://benj.me/) * [bluewhale235](https://github.com/BuleWhale): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:BuleWhale) @@ -44,6 +46,7 @@ People are sorted by name so please keep this order. * [Daniel Lo Nigro](https://github.com/Daniel15): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:Daniel15), [Web](https://d.sb/) * [David Souza](https://github.com/araujo0205): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:araujo0205), [Web](http://davidsouza.tech/) * [Django Janny](https://github.com/keltroth): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:keltroth) +* [drosoCode](https://github.com/drosoCode): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:drosoCode), [Web](https://thomasz.me/) * [dswd](https://github.com/dswd): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:dswd) * [DuncanBennie](https://github.com/DuncanBennie): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:DuncanBennie), [Web](https://duncanbennie.com) * [ealdraed](https://github.com/ealdraed): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:ealdraed) @@ -91,6 +94,7 @@ People are sorted by name so please keep this order. * [Luc Sanchez](https://github.com/ColonelMoutarde): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:ColonelMoutarde), [Web](https://www.luc-sanchez.fr/) * [LucasVerneyDGE](https://github.com/LucasVerneyDGE): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:LucasVerneyDGE) * [Lukas David Vacula](https://github.com/ldv8434): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:ldv8434), [Web](https://lvacula.com/) +* [Manu](https://github.com/m3nu): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:m3nu) * [Marc Ole Bulling](https://github.com/Forceu): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:Forceu) * [Marco Hinniger](https://github.com/rom-1): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:rom-1), [Web](https://blog.rootdir.net/) * [marcohald](https://github.com/marcohald): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:marcohald) @@ -114,6 +118,7 @@ People are sorted by name so please keep this order. * [Nico B](https://github.com/youknow0): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:youknow0) * [Nicola Spanti](https://github.com/RyDroid): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:RyDroid), [Web](http://www.nicola-spanti.info/) * [Nicolas Elie](https://github.com/nicolaselie): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:nicolaselie) +* [Nicolas Ferrari](https://github.com/nferrari): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:nferrari), [Web](https://www.alwaysdata.com/) * [Nicolas Frandeboeuf](https://github.com/nicofrand): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:nicofrand), [Web](https://nicofrand.ey) * [Nicolas Lœuillet](https://github.com/nicosomb): [contributions](https://github.com/FreshRSS/documentation/pulls?q=is:pr+author:nicosomb), [Web](http://www.loeuillet.org/) * [No Name Pro](https://github.com/NoNamePro0): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:NoNamePro0) @@ -123,8 +128,10 @@ People are sorted by name so please keep this order. * [ORelio](https://github.com/ORelio): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:ORelio), [Web](https://microzoom.fr/) * [Pablo Caro](https://github.com/pcaro90): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:pcaro90), [Web](https://pcaro.es/) * [PAHXO](https://github.com/PAHXO): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:PAHXO) +* [papaschloss](https://github.com/papaschloss): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:papaschloss) * [Patrick Crandol](https://github.com/pattems): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:pattems) * [Paulius Šukys](https://github.com/psukys): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:psukys), [Web](http://sukys.eu) +* [Paweł Kalemba](https://github.com/pkalemba): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:pkalemba) * [perrinjerome](https://github.com/perrinjerome): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:perrinjerome) * [Peter Stoinov](https://github.com/stoinov): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:stoinov), [Web](https://stoinov.com) * [Petra Lamborn](https://github.com/petraoleum): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:petraoleum), [Web](https://petras.space) @@ -142,6 +149,7 @@ People are sorted by name so please keep this order. * [Quentin Pagès](https://github.com/Quenty31): [contributions](https://github.com/FreshRSS/documentation/pulls?q=is:pr+author:Quenty31) * [Raineer](https://github.com/Raineer): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:Raineer) * [Ramón Cutanda](https://github.com/rcutanda): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:rcutanda) +* [rdmitr](https://github.com/rdmitr): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:rdmitr) * [Rezad](https://github.com/rezad1393): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:rezad1393) * [Robert Kaussow](https://github.com/xoxys): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:xoxys), [Web](https://geeklabor.de/) * [rocka](https://github.com/rocka): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:rocka) @@ -158,6 +166,7 @@ People are sorted by name so please keep this order. * [Stunkymonkey](https://github.com/Stunkymonkey): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:Stunkymonkey) * [stysebae](https://github.com/stysebae): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:stysebae) * [subic](https://github.com/subic): [contributions](https://github.com/FreshRSS/documentation/pulls?q=is:pr+author:subic) +* [Tealk](https://github.com/Tealk): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:Tealk), [Web](https://rollenspiel.monster/) * [Tets42](https://github.com/Tets42): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:Tets42) * [Thomas Citharel](https://github.com/tcitworld): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:tomgue), [Web](https://www.tcit.fr/) * [Thomas Guesnon](https://github.com/patjennings): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:patjennings), [Web](http://www.thomasguesnon.fr/) From 866ee41d2f97588202430cbc80151ba168db9e25 Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Mon, 22 Aug 2022 12:12:59 +0200 Subject: [PATCH 0329/2479] i18n en-US (#4519) --- .gitignore | 2 ++ app/i18n/en-us/conf.php | 12 ++++++------ app/i18n/en-us/gen.php | 6 +++--- app/i18n/en-us/sub.php | 10 +++++----- 4 files changed, 16 insertions(+), 14 deletions(-) diff --git a/.gitignore b/.gitignore index 00005eeff6d..32dd22ae6db 100644 --- a/.gitignore +++ b/.gitignore @@ -3,6 +3,8 @@ /vendor/ /constants.local.php +.vscode/ + # Temp files *~ *.bak diff --git a/app/i18n/en-us/conf.php b/app/i18n/en-us/conf.php index 04f7a203b0f..8073605f5fc 100644 --- a/app/i18n/en-us/conf.php +++ b/app/i18n/en-us/conf.php @@ -68,9 +68,9 @@ ), 'logs' => array( 'loglist' => array( - 'level' => 'Log Level', // TODO - 'message' => 'Log Message', // TODO - 'timestamp' => 'Timestamp', // TODO + 'level' => 'Log Level', // IGNORE + 'message' => 'Log Message', // IGNORE + 'timestamp' => 'Timestamp', // IGNORE ), 'pagination' => array( 'first' => 'First', // IGNORE @@ -171,7 +171,7 @@ 'display_categories_unfolded' => 'Categories to unfold', // IGNORE 'headline' => array( 'articles' => 'Articles: Open/Close', // IGNORE - 'articles_header_footer' => 'Articles: header/footer', // TODO + 'articles_header_footer' => 'Articles: header/footer', // IGNORE 'categories' => 'Left navigation: Categories', // IGNORE 'mark_as_read' => 'Mark article as read', // IGNORE 'misc' => 'Miscellaneous', // IGNORE @@ -187,7 +187,7 @@ 'article_viewed' => 'when the article is viewed', // IGNORE 'keep_max_n_unread' => 'Max number of articles to keep unread', // IGNORE 'scroll' => 'while scrolling', // IGNORE - 'upon_gone' => 'when it is no longer in the upstream news feed', // TODO + 'upon_gone' => 'when it is no longer in the upstream news feed', // IGNORE 'upon_reception' => 'upon receiving the article', // IGNORE 'when' => 'Mark an article as read…', // IGNORE 'when_same_title' => 'if an identical title already exists in the top n newest articles', // IGNORE @@ -222,7 +222,7 @@ '_' => 'Sharing', // IGNORE 'add' => 'Add a sharing method', // IGNORE 'blogotext' => 'Blogotext', // IGNORE - 'deprecated' => 'This service is deprecated and will be removed from FreshRSS in a future release.', // TODO + 'deprecated' => 'This service is deprecated and will be removed from FreshRSS in a future release.', // IGNORE 'diaspora' => 'Diaspora*', // IGNORE 'email' => 'Email', // IGNORE 'facebook' => 'Facebook', // IGNORE diff --git a/app/i18n/en-us/gen.php b/app/i18n/en-us/gen.php index aedf7bd505d..1fdfef994f9 100644 --- a/app/i18n/en-us/gen.php +++ b/app/i18n/en-us/gen.php @@ -18,7 +18,7 @@ 'back_to_rss_feeds' => '← Go back to your RSS feeds', // IGNORE 'cancel' => 'Cancel', // IGNORE 'create' => 'Create', // IGNORE - 'delete_muted_feeds' => 'Delete muted feeds', // TODO + 'delete_muted_feeds' => 'Delete muted feeds', // IGNORE 'demote' => 'Demote', // IGNORE 'disable' => 'Disable', // IGNORE 'empty' => 'Empty', // IGNORE @@ -32,7 +32,7 @@ 'open_url' => 'Open URL', // IGNORE 'promote' => 'Promote', // IGNORE 'purge' => 'Purge', // IGNORE - 'refresh_opml' => 'Refresh OPML', // TODO + 'refresh_opml' => 'Refresh OPML', // IGNORE 'remove' => 'Remove', // IGNORE 'rename' => 'Rename', // IGNORE 'see_website' => 'See website', // IGNORE @@ -209,7 +209,7 @@ 'twitter' => 'Twitter', // IGNORE 'wallabag' => 'wallabag v1', // IGNORE 'wallabagv2' => 'wallabag v2', // IGNORE - 'web-sharing-api' => 'System sharing', // TODO + 'web-sharing-api' => 'System sharing', // IGNORE 'whatsapp' => 'Whatsapp', // IGNORE 'xing' => 'Xing', // IGNORE ), diff --git a/app/i18n/en-us/sub.php b/app/i18n/en-us/sub.php index df727041a37..b0c6c8a1b0b 100644 --- a/app/i18n/en-us/sub.php +++ b/app/i18n/en-us/sub.php @@ -25,12 +25,12 @@ 'add' => 'Add a category', // IGNORE 'archiving' => 'Archiving', // IGNORE 'dynamic_opml' => array( - '_' => 'Dynamic OPML', // TODO - 'help' => 'Provide the URL to an OPML file to dynamically populate this category with feeds', // TODO + '_' => 'Dynamic OPML', // IGNORE + 'help' => 'Provide the URL to an OPML file to dynamically populate this category with feeds', // IGNORE ), 'empty' => 'Empty category', // IGNORE 'information' => 'Information', // IGNORE - 'opml_url' => 'OPML URL', // TODO + 'opml_url' => 'OPML URL', // IGNORE 'position' => 'Display position', // IGNORE 'position_help' => 'To control category sort order', // IGNORE 'title' => 'Title', // IGNORE @@ -108,7 +108,7 @@ ), 'item_uid' => array( '_' => 'item unique ID', // IGNORE - 'help' => 'Optional. Example: descendant::div/@data-uri', // TODO + 'help' => 'Optional. Example: descendant::div/@data-uri', // IGNORE ), 'item_uri' => array( '_' => 'item link (URL)', // IGNORE @@ -198,7 +198,7 @@ '_' => 'Subscription management', // IGNORE 'add' => 'Add a feed or category', // IGNORE 'add_category' => 'Add a category', // IGNORE - 'add_dynamic_opml' => 'Add dynamic OPML', // TODO + 'add_dynamic_opml' => 'Add dynamic OPML', // IGNORE 'add_feed' => 'Add a feed', // IGNORE 'add_label' => 'Add a label', // IGNORE 'delete_label' => 'Delete a label', // IGNORE From 51bd9be82f4692a3d565101d3046465936350138 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tibor=20Rep=C4=8Dek?= Date: Mon, 22 Aug 2022 16:02:16 +0200 Subject: [PATCH 0330/2479] Slovak translation (#4520) * Slovak translationi * articles_header_footer Co-authored-by: Alexandre Alapetite --- app/i18n/sk/admin.php | 14 +++++++------- app/i18n/sk/conf.php | 10 +++++----- app/i18n/sk/gen.php | 2 +- 3 files changed, 13 insertions(+), 13 deletions(-) diff --git a/app/i18n/sk/admin.php b/app/i18n/sk/admin.php index b4ea200f592..69649d63dbe 100644 --- a/app/i18n/sk/admin.php +++ b/app/i18n/sk/admin.php @@ -170,18 +170,18 @@ 'registration' => array( 'number' => 'Maximálny počt účtov', 'select' => array( - 'label' => 'Registration form', // TODO + 'label' => 'Registračný formulár', 'option' => array( - 'noform' => 'Disabled: No registration form', // TODO - 'nolimit' => 'Enabled: No limit of accounts', // TODO - 'setaccountsnumber' => 'Set max. number of accounts', // TODO + 'noform' => 'Zakázané: Žiadny registračný formulár', + 'nolimit' => 'Povolené: Bez obmedzenia účtov', + 'setaccountsnumber' => 'Určiť max. počet účtov', ), ), 'status' => array( - 'disabled' => 'Form disabled', // TODO - 'enabled' => 'Form enabled', // TODO + 'disabled' => 'Formulár zakázaný', + 'enabled' => 'Formulár povolený', ), - 'title' => 'User registration form', // TODO + 'title' => 'Registračný formulár používateľa', ), ), 'update' => array( diff --git a/app/i18n/sk/conf.php b/app/i18n/sk/conf.php index cb14c5bb493..04fb68827e4 100644 --- a/app/i18n/sk/conf.php +++ b/app/i18n/sk/conf.php @@ -170,12 +170,12 @@ 'display_articles_unfolded' => 'Zobraziť články otvorené', 'display_categories_unfolded' => 'Kategórie na rozbalenie', 'headline' => array( - 'articles' => 'Articles: Open/Close', // TODO + 'articles' => 'Články: Otvoriť/Zavrieť', 'articles_header_footer' => 'Articles: header/footer', // TODO - 'categories' => 'Left navigation: Categories', // TODO - 'mark_as_read' => 'Mark article as read', // TODO - 'misc' => 'Miscellaneous', // TODO - 'view' => 'View', // TODO + 'categories' => 'Ľavé menu: Kategórie', + 'mark_as_read' => 'Označiť články ako prečítané', + 'misc' => 'Ostatné', + 'view' => 'Zobraznie', ), 'hide_read_feeds' => 'Skryť kategórie a kanály s nulovým počtom neprečítaných článkov (nefunguje s nastaveným “Zobraziť všetky články”)', 'img_with_lazyload' => 'Pre načítanie obrázkov použiť "lazy load"', diff --git a/app/i18n/sk/gen.php b/app/i18n/sk/gen.php index 0709e64ce14..0325762b592 100644 --- a/app/i18n/sk/gen.php +++ b/app/i18n/sk/gen.php @@ -130,7 +130,7 @@ 'confirm_action_feed_cat' => 'Určite chcete vykonať túto akciu? Prídete o súvisiace obľúbené a používateľské dopyty. Zmeny budú nezvratné!', 'feedback' => array( 'body_new_articles' => 'Počet nových článkov v čítačke FreshRSS: %%d', - 'body_unread_articles' => '(unread: %%d)', // TODO + 'body_unread_articles' => '(neprečítané: %%d)', 'request_failed' => 'Nepodarilo sa spracovať váš dopyt, pravdepodobne kvôli problému s pripojením do internetu.', 'title_new_articles' => 'FreshRSS: nové články!', ), From bba33065007ad350513c072b4118f0ce8a105c57 Mon Sep 17 00:00:00 2001 From: maTh Date: Mon, 22 Aug 2022 23:17:54 +0200 Subject: [PATCH 0331/2479] i18n German (#4525) --- app/i18n/de/conf.php | 2 +- app/i18n/de/gen.php | 4 +-- app/i18n/de/sub.php | 72 ++++++++++++++++++++++---------------------- 3 files changed, 39 insertions(+), 39 deletions(-) diff --git a/app/i18n/de/conf.php b/app/i18n/de/conf.php index c2e99377d2f..4e7da6a637f 100644 --- a/app/i18n/de/conf.php +++ b/app/i18n/de/conf.php @@ -187,7 +187,7 @@ 'article_viewed' => 'wenn der Artikel angesehen wird', 'keep_max_n_unread' => 'Max. Anzahl von ungelesenen Artikeln', 'scroll' => 'beim Scrollen bzw. Überspringen', - 'upon_gone' => 'when it is no longer in the upstream news feed', // TODO + 'upon_gone' => 'wenn der Artikel nicht mehr im Feed enthalten ist', 'upon_reception' => 'beim Empfang des Artikels', 'when' => 'Artikel als gelesen markieren…', 'when_same_title' => 'falls der identische Titel bereit in den n neusten Artikel vorhanden ist.', diff --git a/app/i18n/de/gen.php b/app/i18n/de/gen.php index 3d05eb5abdc..fb7726416cb 100644 --- a/app/i18n/de/gen.php +++ b/app/i18n/de/gen.php @@ -18,7 +18,7 @@ 'back_to_rss_feeds' => '← Zurück zu Ihren RSS-Feeds gehen', 'cancel' => 'Abbrechen', 'create' => 'Erstellen', - 'delete_muted_feeds' => 'Delete muted feeds', // TODO + 'delete_muted_feeds' => 'Lösche stumm gestellte Feeds', 'demote' => 'Zurückstufen', 'disable' => 'Deaktivieren', 'empty' => 'Leeren', @@ -32,7 +32,7 @@ 'open_url' => 'URL öffnen', 'promote' => 'Hochstufen', 'purge' => 'Bereinigen', - 'refresh_opml' => 'Refresh OPML', // TODO + 'refresh_opml' => 'OPML erneut laden', 'remove' => 'Entfernen', 'rename' => 'Umbenennen', 'see_website' => 'Website ansehen', diff --git a/app/i18n/de/sub.php b/app/i18n/de/sub.php index e78d1ef2540..f45c8f02117 100644 --- a/app/i18n/de/sub.php +++ b/app/i18n/de/sub.php @@ -25,19 +25,19 @@ 'add' => 'Kategorie hinzufügen', 'archiving' => 'Archivierung', 'dynamic_opml' => array( - '_' => 'Dynamic OPML', // TODO - 'help' => 'Provide the URL to an OPML file to dynamically populate this category with feeds', // TODO + '_' => 'Dynamisches OPML', + 'help' => 'URL zu einer OPML Datei, um die Kategorie dynamisch mit Feeds zu befüllen', ), 'empty' => 'Leere Kategorie', 'information' => 'Information', // IGNORE - 'opml_url' => 'OPML URL', // TODO + 'opml_url' => 'OPML-Datei URL', 'position' => 'Reihenfolge', 'position_help' => 'Steuert die Kategoriesortierung', 'title' => 'Titel', ), 'feed' => array( - 'accept_cookies' => 'Accept cookies', // TODO - 'accept_cookies_help' => 'Allow the feed server to set cookies (stored in memory for the duration of the request only)', // TODO + 'accept_cookies' => 'Cookies zulassen', + 'accept_cookies_help' => 'Erlaubt dem Feed-Server das Setzen von Cookies (wird nur für die Dauer der Anfrage im Speicher gehalten)', 'add' => 'Einen RSS-Feed hinzufügen', 'advanced' => 'Erweitert', 'archiving' => 'Archivierung', @@ -60,8 +60,8 @@ 'css_help' => 'Ruft bei gekürzten RSS-Feeds den vollständigen Artikelinhalt ab (Achtung, benötigt mehr Zeit!)', 'css_path' => 'CSS-Selektor des Artikelinhaltes auf der Original-Webseite', 'css_path_filter' => array( - '_' => 'CSS selector of the elements to remove', // TODO - 'help' => 'A CSS selector may be a list such as: .footer, .aside', // TODO + '_' => 'CSS-Selector für die Elemente, die entfernt werden sollen', + 'help' => 'CSS-Selector könnte eine Liste sein, wie z.B.: .footer, .aside', ), 'description' => 'Beschreibung', 'empty' => 'Dieser Feed ist leer. Bitte stellen Sie sicher, dass er noch gepflegt wird.', @@ -73,61 +73,61 @@ 'information' => 'Information', // IGNORE 'keep_min' => 'Minimale Anzahl an Artikeln, die behalten wird', 'kind' => array( - '_' => 'Type of feed source', // TODO + '_' => 'Art der Feed-Quelle', 'html_xpath' => array( - '_' => 'HTML + XPath (Web scraping)', // TODO + '_' => 'HTML + XPath (Webseite scannen)', 'feed_title' => array( - '_' => 'feed title', // TODO - 'help' => 'Example: //title or a static string: "My custom feed"', // TODO + '_' => 'Feed Title', + 'help' => 'Beispiel: //title oder ein statischer Text: "Mein eigener Feed"', ), - 'help' => 'XPath 1.0 is a standard query language for advanced users, and which FreshRSS supports to enable Web scraping.', // TODO + 'help' => 'XPath 1.0 ist eine standardisierte Query-Sprache für fortgeschrittene Nutzer und wird von FreshRSS genutzt, um die Webseite abzuscannen.', 'item' => array( - '_' => 'finding news items
    (most important)', // TODO - 'help' => 'Example: //div[@class="news-item"]', // TODO + '_' => 'News Artikel finden
    (Sehr wichtig)', + 'help' => 'Beispiel: //div[@class="news-artikel"]', ), 'item_author' => array( - '_' => 'item author', // TODO - 'help' => 'Can also be a static string. Example: "Anonymous"', // TODO + '_' => 'Artikel-Autor:in', + 'help' => 'Kann auch ein statischer Text sein: "Unbekannt"', ), - 'item_categories' => 'item tags', // TODO + 'item_categories' => 'Artikel-(Hash)Tags', 'item_content' => array( - '_' => 'item content', // TODO - 'help' => 'Example to take the full item: .', // TODO + '_' => 'Artikelinhalt', + 'help' => 'Beispiel, um den vollen Artikel zu nehmen: .', ), 'item_thumbnail' => array( - '_' => 'item thumbnail', // TODO - 'help' => 'Example: descendant::img/@src', // TODO + '_' => 'Artikel-Vorschaubild', + 'help' => 'Beispiel: descendant::img/@src', ), 'item_timestamp' => array( - '_' => 'item date', // TODO - 'help' => 'The result will be parsed by strtotime()', // TODO + '_' => 'Artikel-Datum', + 'help' => 'Das Ergebnis wird durch strtotime() geparst', ), 'item_title' => array( - '_' => 'item title', // TODO - 'help' => 'Use in particular the XPath axis descendant:: like descendant::h2', // TODO + '_' => 'Artikel-Titel', + 'help' => 'Insbesondere XPath axis descendant:: nutzen, wie z.B. descendant::h2', ), 'item_uid' => array( - '_' => 'item unique ID', // TODO - 'help' => 'Optional. Example: descendant::div/@data-uri', // TODO + '_' => 'Eindeutige ID des Artikels', + 'help' => 'Optional. Beispiel: descendant::div/@data-uri', ), 'item_uri' => array( - '_' => 'item link (URL)', // TODO - 'help' => 'Example: descendant::a/@href', // TODO + '_' => 'Link zum Artikel (URL)', + 'help' => 'Beispiel: descendant::a/@href', ), - 'relative' => 'XPath (relative to item) for:', // TODO - 'xpath' => 'XPath for:', // TODO + 'relative' => 'XPath (relativ zum Artikel) für:', + 'xpath' => 'XPath für:', ), - 'rss' => 'RSS / Atom (default)', // TODO + 'rss' => 'RSS / Atom (Standard)', ), 'maintenance' => array( 'clear_cache' => 'Zwischenspeicher leeren', 'clear_cache_help' => 'Zwischenspeicher für diesen Feed leeren.', 'reload_articles' => 'Artikel neuladen', - 'reload_articles_help' => 'Artikel neuladen und komplette Inhalte holen, wenn ein Selektor festgelegt wurde.', // DIRTY + 'reload_articles_help' => 'Artikel neuladen und kompletten Inhalt laden, wenn ein Selektor festgelegt wurde.', 'title' => 'Wartung', ), - 'max_http_redir' => 'Max HTTP redirects', // TODO - 'max_http_redir_help' => 'Set to 0 or leave blank to disable, -1 for unlimited redirects', // TODO + 'max_http_redir' => 'Max HTTP Umleitungen', + 'max_http_redir_help' => '0 oder leeres Feld = deaktiviert; -1 für unendlich viele Umleitungen', 'moved_category_deleted' => 'Wenn Sie eine Kategorie entfernen, werden deren Feeds automatisch in die Kategorie %s eingefügt.', 'mute' => 'Stumm schalten', 'no_selected' => 'Kein Feed ausgewählt.', @@ -198,7 +198,7 @@ '_' => 'Abonnementverwaltung', 'add' => 'Feed oder Kategorie hinzufügen', 'add_category' => 'Kategorie hinzufügen', - 'add_dynamic_opml' => 'Add dynamic OPML', // TODO + 'add_dynamic_opml' => 'dynamisches OPML hinzufügen', 'add_feed' => 'Feed hinzufügen', 'add_label' => 'Label hinzufügen', 'delete_label' => 'Label löschen', From 1b813cfbe3d2ca792678729130e0aea2a031201c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tibor=20Rep=C4=8Dek?= Date: Mon, 22 Aug 2022 23:18:24 +0200 Subject: [PATCH 0332/2479] Slovak translation (#4524) * Slovak translation * Fix IGNORE Co-authored-by: Alexandre Alapetite --- app/i18n/sk/conf.php | 48 +++++++++++++++++----------------- app/i18n/sk/gen.php | 8 +++--- app/i18n/sk/sub.php | 62 ++++++++++++++++++++++---------------------- 3 files changed, 59 insertions(+), 59 deletions(-) diff --git a/app/i18n/sk/conf.php b/app/i18n/sk/conf.php index 04fb68827e4..f1fba211dfe 100644 --- a/app/i18n/sk/conf.php +++ b/app/i18n/sk/conf.php @@ -68,9 +68,9 @@ ), 'logs' => array( 'loglist' => array( - 'level' => 'Log Level', // TODO - 'message' => 'Log Message', // TODO - 'timestamp' => 'Timestamp', // TODO + 'level' => 'Úroveň záznamu', + 'message' => 'Správa záznamu', + 'timestamp' => 'Časová značka', ), 'pagination' => array( 'first' => 'Prvý', @@ -139,28 +139,28 @@ 'always_show_favorites' => 'Automaticky zobraziť všetky články v obľúbených', 'article' => array( 'authors_date' => array( - '_' => 'Authors and date', // TODO - 'both' => 'In header and footer', // TODO - 'footer' => 'In footer', // TODO - 'header' => 'In header', // TODO - 'none' => 'None', // TODO + '_' => 'Authori a dátum', + 'both' => 'V záhlaví a pätičke', + 'footer' => 'V pätičke', + 'header' => 'V záhlaví', + 'none' => 'Žiadne', ), 'feed_name' => array( - 'above_title' => 'Above title/tags', // TODO - 'none' => 'None', // TODO - 'with_authors' => 'In authors and date row', // TODO + 'above_title' => 'O zápise/značky', + 'none' => 'Žiadne', + 'with_authors' => 'V riadku autori a dátum', ), - 'feed_title' => 'Feed title', // TODO + 'feed_title' => 'Nadpis kanála', 'tags' => array( - '_' => 'Tags', // TODO - 'both' => 'In header and footer', // TODO - 'footer' => 'In footer', // TODO - 'header' => 'In header', // TODO - 'none' => 'None', // TODO + '_' => 'Značky', + 'both' => 'V záhlaví a pätičke', + 'footer' => 'V pätičke', + 'header' => 'V záhlaví', + 'none' => 'Žiadne', ), 'tags_max' => array( - '_' => 'Max number of tags shown', // TODO - 'help' => '0 means: show all tags and do not collapse them', // TODO + '_' => 'Maximálny počet zobrazených značiek', + 'help' => '0 znamená: zobraziť všetky značky a nerozbaľuj ich', ), ), 'articles_per_page' => 'Počet článkov na jednu stranu', @@ -170,12 +170,12 @@ 'display_articles_unfolded' => 'Zobraziť články otvorené', 'display_categories_unfolded' => 'Kategórie na rozbalenie', 'headline' => array( - 'articles' => 'Články: Otvoriť/Zavrieť', - 'articles_header_footer' => 'Articles: header/footer', // TODO + 'articles' => 'Články: Otvoriť/Zatvoriť', + 'articles_header_footer' => 'Články: záhlavie/pätička', 'categories' => 'Ľavé menu: Kategórie', - 'mark_as_read' => 'Označiť články ako prečítané', + 'mark_as_read' => 'Označiť článok ako prečítaný', 'misc' => 'Ostatné', - 'view' => 'Zobraznie', + 'view' => 'Zobraziť', ), 'hide_read_feeds' => 'Skryť kategórie a kanály s nulovým počtom neprečítaných článkov (nefunguje s nastaveným “Zobraziť všetky články”)', 'img_with_lazyload' => 'Pre načítanie obrázkov použiť "lazy load"', @@ -187,7 +187,7 @@ 'article_viewed' => 'keď je článok zobrazený', 'keep_max_n_unread' => 'Maximálny počet článkov ponechať ako neprečítané', 'scroll' => 'počas skrolovania', - 'upon_gone' => 'when it is no longer in the upstream news feed', // TODO + 'upon_gone' => 'keď už nie je v hlavnom kanály noviniek', 'upon_reception' => 'po načítaní článku', 'when' => 'Označiť článok ako prečítaný…', 'when_same_title' => 'ak rovnaký nadpis už existuje v TOP n najnovších článkoch', diff --git a/app/i18n/sk/gen.php b/app/i18n/sk/gen.php index 0325762b592..4af81ff793a 100644 --- a/app/i18n/sk/gen.php +++ b/app/i18n/sk/gen.php @@ -18,7 +18,7 @@ 'back_to_rss_feeds' => '← Späť na vaše RSS kanály', 'cancel' => 'Zrušiť', 'create' => 'Vytvoriť', - 'delete_muted_feeds' => 'Delete muted feeds', // TODO + 'delete_muted_feeds' => 'Vymazať stíšené kanály', 'demote' => 'Degradovať', 'disable' => 'Zakázať', 'empty' => 'Vyprázdniť', @@ -29,10 +29,10 @@ 'load_default_shortcuts' => 'Načítať prednastavené klávesové skratky', 'manage' => 'Spravovať', 'mark_read' => 'Označiť ako prečítané', - 'open_url' => 'Open URL', // TODO + 'open_url' => 'Otvoriť URL', 'promote' => 'Podporiť', 'purge' => 'Vymazať', - 'refresh_opml' => 'Refresh OPML', // TODO + 'refresh_opml' => 'Obnoviť OPML', 'remove' => 'Odstrániť', 'rename' => 'Premenovať', 'see_website' => 'Zobraziť webovú stránku', @@ -209,7 +209,7 @@ 'twitter' => 'Twitter', // IGNORE 'wallabag' => 'wallabag v1', // IGNORE 'wallabagv2' => 'wallabag v2', // IGNORE - 'web-sharing-api' => 'System sharing', // TODO + 'web-sharing-api' => 'Systémové zdieľanie', 'whatsapp' => 'Whatsapp', // IGNORE 'xing' => 'Xing', // IGNORE ), diff --git a/app/i18n/sk/sub.php b/app/i18n/sk/sub.php index 4a4fd6f9f9f..914d6315cc0 100644 --- a/app/i18n/sk/sub.php +++ b/app/i18n/sk/sub.php @@ -25,18 +25,18 @@ 'add' => 'Pridať kategória', 'archiving' => 'Archív', 'dynamic_opml' => array( - '_' => 'Dynamic OPML', // TODO + '_' => 'Dynamické OPML', 'help' => 'Provide the URL to an OPML file to dynamically populate this category with feeds', // TODO ), 'empty' => 'Prázdna kategória', 'information' => 'Informácia', - 'opml_url' => 'OPML URL', // TODO + 'opml_url' => 'OPML URL', // IGNORE 'position' => 'Zobrazť pozíciu', 'position_help' => 'Na kontrolu zoradenia kategórií', 'title' => 'Názov', ), 'feed' => array( - 'accept_cookies' => 'Accept cookies', // TODO + 'accept_cookies' => 'Prijať cookies', 'accept_cookies_help' => 'Allow the feed server to set cookies (stored in memory for the duration of the request only)', // TODO 'add' => 'Pridať RSS kanál', 'advanced' => 'Pokročilé', @@ -60,8 +60,8 @@ 'css_help' => 'Stiahnuť skrátenú verziu RSS kanála (pozor, vyžaduje viac času!)', 'css_path' => 'Pôvodný CSS súbor článku z webovej stránky', 'css_path_filter' => array( - '_' => 'CSS selector of the elements to remove', // TODO - 'help' => 'A CSS selector may be a list such as: .footer, .aside', // TODO + '_' => 'CSS selektor elementu na odstránenie', + 'help' => 'CSS selektor môže byť zoznam ako: .footer, .aside', ), 'description' => 'Popis', 'empty' => 'Tento kanál je prázdny. Overte, prosím, či je ešte spravovaný autorom.', @@ -73,51 +73,51 @@ 'information' => 'Informácia', 'keep_min' => 'Minimálny počet článkov na uchovanie', 'kind' => array( - '_' => 'Type of feed source', // TODO + '_' => 'Typ zdroja kanála', 'html_xpath' => array( '_' => 'HTML + XPath (Web scraping)', // TODO 'feed_title' => array( - '_' => 'feed title', // TODO - 'help' => 'Example: //title or a static string: "My custom feed"', // TODO + '_' => 'názov kanála', + 'help' => 'Príklad: //title alebo statický text: "Môj vlastný kanál"', ), 'help' => 'XPath 1.0 is a standard query language for advanced users, and which FreshRSS supports to enable Web scraping.', // TODO 'item' => array( - '_' => 'finding news items
    (most important)', // TODO - 'help' => 'Example: //div[@class="news-item"]', // TODO + '_' => 'vyhľadávanie noviniek položky
    (najdôležitejšie)', + 'help' => 'Príklad: //div[@class="news-item"]', ), 'item_author' => array( - '_' => 'item author', // TODO - 'help' => 'Can also be a static string. Example: "Anonymous"', // TODO + '_' => 'položka autor', + 'help' => 'Môže byť aj statický text. Príklad: "Anonym"', ), - 'item_categories' => 'item tags', // TODO + 'item_categories' => 'položka značky', 'item_content' => array( - '_' => 'item content', // TODO - 'help' => 'Example to take the full item: .', // TODO + '_' => 'položka obsah', + 'help' => 'Príklad na zabratie celej položky: .', ), 'item_thumbnail' => array( - '_' => 'item thumbnail', // TODO - 'help' => 'Example: descendant::img/@src', // TODO + '_' => 'položka miniatúra', + 'help' => 'Príklad: descendant::img/@src', ), 'item_timestamp' => array( - '_' => 'item date', // TODO - 'help' => 'The result will be parsed by strtotime()', // TODO + '_' => 'položka dátum', + 'help' => 'Výsledok spracuje strtotime()', // DIRTY ), 'item_title' => array( - '_' => 'item title', // TODO - 'help' => 'Use in particular the XPath axis descendant:: like descendant::h2', // TODO + '_' => 'položka nadpis', + 'help' => 'Použite hlavne XPath axis descendant:: like descendant::h2', // DIRTY ), 'item_uid' => array( - '_' => 'item unique ID', // TODO - 'help' => 'Optional. Example: descendant::div/@data-uri', // TODO + '_' => 'položka unikátny identifikátor', + 'help' => 'Nepovinné. Príklad: descendant::div/@data-uri', ), 'item_uri' => array( - '_' => 'item link (URL)', // TODO - 'help' => 'Example: descendant::a/@href', // TODO + '_' => 'položka odkaz (URL)', + 'help' => 'Príklad: descendant::a/@href', ), - 'relative' => 'XPath (relative to item) for:', // TODO - 'xpath' => 'XPath for:', // TODO + 'relative' => 'XPath (relatívne k položke) pre:', + 'xpath' => 'XPath pre:', ), - 'rss' => 'RSS / Atom (default)', // TODO + 'rss' => 'RSS / Atom (prednastavené)', ), 'maintenance' => array( 'clear_cache' => 'Vymazať vyrovnáciu pamäť', @@ -126,8 +126,8 @@ 'reload_articles_help' => 'Obnoviť články a stiahnuť kompletný obsah, ak je definovaný selektor.', // DIRTY 'title' => 'Údržba', ), - 'max_http_redir' => 'Max HTTP redirects', // TODO - 'max_http_redir_help' => 'Set to 0 or leave blank to disable, -1 for unlimited redirects', // TODO + 'max_http_redir' => 'Max HTTP presmerovaní', + 'max_http_redir_help' => 'Nastavte na 0 alebo nechajte prázdne na zakázanie, -1 pre neobmedzené množstvo presmerovaní', 'moved_category_deleted' => 'Keď vymažete kategóriu, jej kanály sa automaticky zaradia pod %s.', 'mute' => 'stíšiť', 'no_selected' => 'Nevybrali ste kanál.', @@ -198,7 +198,7 @@ '_' => 'Správa odoberaných kanálov', 'add' => 'Pridať kanál alebo kategóriu', 'add_category' => 'Pridať kategóriu', - 'add_dynamic_opml' => 'Add dynamic OPML', // TODO + 'add_dynamic_opml' => 'Pridať dynamické OPML', 'add_feed' => 'Pridať kanál', 'add_label' => 'Pridať štítok', 'delete_label' => 'Zmazať štítok', From 23bf5306390ce193883bbae03b891a83db1f53dc Mon Sep 17 00:00:00 2001 From: Matt Sephton Date: Mon, 22 Aug 2022 22:18:50 +0100 Subject: [PATCH 0333/2479] lire app (#4523) * Update README.md Add lire, sort alphabetically * Mix conflict * English * GReader * Duplicate line Reeder Co-authored-by: Alexandre Alapetite --- README.fr.md | 1 + README.md | 1 + docs/en/developers/06_GoogleReader_API.md | 1 + docs/fr/users/06_Mobile_access.md | 5 ++--- 4 files changed, 5 insertions(+), 3 deletions(-) diff --git a/README.fr.md b/README.fr.md index 343ed9fd476..b12c04b9da2 100644 --- a/README.fr.md +++ b/README.fr.md @@ -239,6 +239,7 @@ et [l’API Fever](https://freshrss.github.io/FreshRSS/fr/users/06_Fever_API.htm | [NewsFlash](https://gitlab.com/news-flash/news_flash_gtk) | GNU/Linux | [✔️](https://gitlab.com/news-flash/news_flash_gtk) | En développement | GReader | ➖ | ❔ | ❔ | ❔ | ❔ | ❔ | ➖ | ❔ || [Newsboat 2.24+](https://newsboat.org/) | GNU/Linux, macOS, FreeBSD | [✔️](https://github.com/newsboat/newsboat/) | ✔️✔️ | GReader | ➖ | ⭐ | ➖ | ✔️ | ✔️ | ➖ | ✔️ | ➖ | | [Vienna RSS](http://www.vienna-rss.com/) | macOS | [✔️](https://github.com/ViennaRSS/vienna-rss) | ✔️✔️ | GReader | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | | [Reeder](https://www.reederapp.com/) | iOS, macOS | ➖ | ✔️✔️ | GReader, Fever | ✔️ | ⭐⭐⭐ | ➖ | ✔️ | ✔️ | ➖ | ➖ | ✔️ | +| [lire](https://lireapp.com/) | iOS, macOS | ➖ | ✔️✔️ | GReader | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | | [Unread](https://apps.apple.com/app/unread-2/id1363637349) | iOS | ➖ | ✔️✔️ | Fever | ✔️ | ❔ | ❔ | ❔ | ✔️ | ➖ | ➖ | ➖ | | [Fiery Feeds](https://apps.apple.com/app/fiery-feeds-rss-reader/id1158763303) | iOS | ➖ | ✔️✔️ | Fever | ❔ | ❔ | ❔ | ❔ | ❔ | ➖ | ➖ | ➖ | | [Readkit](https://apps.apple.com/app/readkit/id588726889) | macOS | ➖ | ✔️✔️ | Fever | ✔️ | ❔ | ❔ | ❔ | ❔ | ➖ | ➖ | ➖ | diff --git a/README.md b/README.md index 60d3ca7f03a..f659eca9e47 100644 --- a/README.md +++ b/README.md @@ -126,6 +126,7 @@ and [Fever API](https://freshrss.github.io/FreshRSS/en/users/06_Fever_API.html) | [Newsboat 2.24+](https://newsboat.org/) | GNU/Linux, macOS, FreeBSD | [✔️](https://github.com/newsboat/newsboat/) | ✔️✔️ | GReader | ➖ | ⭐ | ➖ | ✔️ | ✔️ | ➖ | ✔️ | ➖ | | [Vienna RSS](http://www.vienna-rss.com/) | macOS | [✔️](https://github.com/ViennaRSS/vienna-rss) | ✔️✔️ | GReader | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | | [Reeder](https://www.reederapp.com/)* | iOS, macOS | ➖ | ✔️✔️ | GReader, Fever | ✔️ | ⭐⭐⭐ | ➖ | ✔️ | ✔️ | ➖ | ➖ | ✔️ | +| [lire](https://lireapp.com/) | iOS, macOS | ➖ | ✔️✔️ | GReader | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | | [Unread](https://apps.apple.com/app/unread-2/id1363637349) | iOS | ➖ | ✔️✔️ | Fever | ✔️ | ❔ | ❔ | ❔ | ✔️ | ➖ | ➖ | ➖ | | [Fiery Feeds](https://apps.apple.com/app/fiery-feeds-rss-reader/id1158763303) | iOS | ➖ | ✔️✔️ | Fever | ❔ | ❔ | ❔ | ❔ | ❔ | ➖ | ➖ | ➖ | | [Readkit](https://apps.apple.com/app/readkit/id588726889) | macOS | ➖ | ✔️✔️ | Fever | ✔️ | ❔ | ❔ | ❔ | ❔ | ➖ | ➖ | ➖ | diff --git a/docs/en/developers/06_GoogleReader_API.md b/docs/en/developers/06_GoogleReader_API.md index 556e0aee9e1..20a1eaa6566 100644 --- a/docs/en/developers/06_GoogleReader_API.md +++ b/docs/en/developers/06_GoogleReader_API.md @@ -29,6 +29,7 @@ Then point your mobile application to the `greader.php` address (e.g. `https://f |[Readrops](https://github.com/readrops/Readrops) |Android |[GPLv3](https://github.com/readrops/Readrops/blob/develop/LICENSE) | |[FocusReader](https://play.google.com/store/apps/details?id=allen.town.focus.reader) |Android |Closed Source(Free) | |[FeedReader 2.0+](https://jangernert.github.io/FeedReader/) |Linux |[GPLv3](https://github.com/jangernert/FeedReader/blob/master/LICENSE) | +|[lire](https://lireapp.com/) |iOS, macOS |Closed Source | |[Newsboat 2.24+](https://newsboat.org/) |Linux |[MIT](https://github.com/newsboat/newsboat/blob/master/LICENSE) | |[Vienna RSS](http://www.vienna-rss.com/) |macOS |[Apache-2.0](https://github.com/ViennaRSS/vienna-rss/blob/master/LICENCE.md) | |[Reeder](https://www.reederapp.com/) |macOS, iOS |Closed Source | diff --git a/docs/fr/users/06_Mobile_access.md b/docs/fr/users/06_Mobile_access.md index 8e3a024334d..b239e9cc66b 100644 --- a/docs/fr/users/06_Mobile_access.md +++ b/docs/fr/users/06_Mobile_access.md @@ -62,11 +62,10 @@ possibilité. * Linux * [FeedReader 2.0+](https://jangernert.github.io/FeedReader/) (Libre) * [Newsboat 2.24+](https://newsboat.org/) (Libre) - * macOS + * macOS, iOS * [Vienna RSS](http://www.vienna-rss.com/) (Libre) * [Reeder](https://www.reederapp.com/) (Commercial) - * iOS - * [Reeder](https://www.reederapp.com/) (Commercial) + * [lire](https://lireapp.com/) (Commercial) * Firefox * [FreshRSS-Notify](https://addons.mozilla.org/firefox/addon/freshrss-notify-webextension/) (Libre) From ef40e0659b14049fb46fa76afd7cf0b2160d3f0b Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Mon, 22 Aug 2022 23:53:29 +0200 Subject: [PATCH 0334/2479] More changelog --- CHANGELOG.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8e3af944c12..62264af9e06 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -25,7 +25,8 @@ * New sharing through standard [Web Share API](https://www.w3.org/TR/web-share/) [#4271](https://github.com/FreshRSS/FreshRSS/pull/4271) * New sharing with Xing, Reddit, Pinterest, WhatsApp [#4270](https://github.com/FreshRSS/FreshRSS/pull/4270) * SimplePie - * New method `rename_attribute()` instead of removing attributes to better be able to style/hide content of articles [#4175](https://github.com/FreshRSS/FreshRSS/pull/4175) + * New method `rename_attribute()` instead of removing attributes to better be able to style/hide content of articles [#4175](https://github.com/FreshRSS/FreshRSS/pull/4175), + [simplepie#717](https://github.com/simplepie/simplepie/pull/717) * Fix parsing of HTTP Links [simplepie#729](https://github.com/simplepie/simplepie/pull/729) * Fix `status_code` type for PHP 8.1+ [simplepie#728](https://github.com/simplepie/simplepie/pull/728) * Bug fixing @@ -82,8 +83,10 @@ * Improve Chinese [#4332](https://github.com/FreshRSS/FreshRSS/pull/4332), [#4337](https://github.com/FreshRSS/FreshRSS/pull/4337), [#4379](https://github.com/FreshRSS/FreshRSS/pull/4379), [#4509](https://github.com/FreshRSS/FreshRSS/pull/4509) * Improve English [#4450](https://github.com/FreshRSS/FreshRSS/pull/4450) + * Improve German [#4525](https://github.com/FreshRSS/FreshRSS/pull/4525) * Improve Polish [#4363](https://github.com/FreshRSS/FreshRSS/pull/4363) * Improve Russian [#4385](https://github.com/FreshRSS/FreshRSS/pull/4385) + * Improve Slovak [#4524](https://github.com/FreshRSS/FreshRSS/pull/4524) * Deployment * Docker: Performance: entrypoint fix buffering, problematic when importing large OPMLs during install [#4417](https://github.com/FreshRSS/FreshRSS/pull/4417) * Docker: alternative image updated to Alpine 3.16 with PHP 8.0.22 and Apache 2.4.54 [#4391](https://github.com/FreshRSS/FreshRSS/pull/4391) From 3fe36e7c8c6be3b4506dd2761ae63bc977da35b7 Mon Sep 17 00:00:00 2001 From: Frans de Jonge Date: Tue, 23 Aug 2022 08:42:43 +0200 Subject: [PATCH 0335/2479] Update Dutch translation (#4529) --- app/i18n/nl/admin.php | 14 ++++----- app/i18n/nl/conf.php | 54 ++++++++++++++++----------------- app/i18n/nl/gen.php | 10 +++---- app/i18n/nl/sub.php | 70 +++++++++++++++++++++---------------------- 4 files changed, 74 insertions(+), 74 deletions(-) diff --git a/app/i18n/nl/admin.php b/app/i18n/nl/admin.php index f52e33a5339..58e7fac9045 100644 --- a/app/i18n/nl/admin.php +++ b/app/i18n/nl/admin.php @@ -170,18 +170,18 @@ 'registration' => array( 'number' => 'Maximum aantal accounts', 'select' => array( - 'label' => 'Registration form', // TODO + 'label' => 'Registratieformulier', 'option' => array( - 'noform' => 'Disabled: No registration form', // TODO - 'nolimit' => 'Enabled: No limit of accounts', // TODO - 'setaccountsnumber' => 'Set max. number of accounts', // TODO + 'noform' => 'Uitgeschakeld: geen registratieformulier', + 'nolimit' => 'Ingeschakeld: geen limiet op aantal accounts', + 'setaccountsnumber' => 'Max. aantal accounts instellen', ), ), 'status' => array( - 'disabled' => 'Form disabled', // TODO - 'enabled' => 'Form enabled', // TODO + 'disabled' => 'Formulier uitgeschakeld', + 'enabled' => 'Form ingeschakeld', ), - 'title' => 'User registration form', // TODO + 'title' => 'Gebruikersregistratieformulier', ), ), 'update' => array( diff --git a/app/i18n/nl/conf.php b/app/i18n/nl/conf.php index 5539d5569a2..d5a1f279273 100644 --- a/app/i18n/nl/conf.php +++ b/app/i18n/nl/conf.php @@ -68,9 +68,9 @@ ), 'logs' => array( 'loglist' => array( - 'level' => 'Log Level', // TODO - 'message' => 'Log Message', // TODO - 'timestamp' => 'Timestamp', // TODO + 'level' => 'Logniveau', + 'message' => 'Logbericht', + 'timestamp' => 'Tijdstempel', ), 'pagination' => array( 'first' => 'Eerste', @@ -139,28 +139,28 @@ 'always_show_favorites' => 'Toon alle artikelen standaard in favorieten', 'article' => array( 'authors_date' => array( - '_' => 'Authors and date', // TODO - 'both' => 'In header and footer', // TODO - 'footer' => 'In footer', // TODO - 'header' => 'In header', // TODO - 'none' => 'None', // TODO + '_' => 'Auteurs en datum', + 'both' => 'In kop en voet', + 'footer' => 'In voet', + 'header' => 'In kop', + 'none' => 'Geen', ), 'feed_name' => array( - 'above_title' => 'Above title/tags', // TODO - 'none' => 'None', // TODO - 'with_authors' => 'In authors and date row', // TODO + 'above_title' => 'Boven titel/tags', + 'none' => 'Geen', + 'with_authors' => 'In lijn met auteurs en datum', ), - 'feed_title' => 'Feed title', // TODO + 'feed_title' => 'Feedtitel', 'tags' => array( - '_' => 'Tags', // TODO - 'both' => 'In header and footer', // TODO - 'footer' => 'In footer', // TODO - 'header' => 'In header', // TODO - 'none' => 'None', // TODO + '_' => 'Tags', // IGNORE + 'both' => 'In kop en voet', + 'footer' => 'In voet', + 'header' => 'In kop', + 'none' => 'Geen', ), 'tags_max' => array( - '_' => 'Max number of tags shown', // TODO - 'help' => '0 means: show all tags and do not collapse them', // TODO + '_' => 'Max aantal getoonde tags', + 'help' => '0 betekent: toon alle tags en verberg er geen', ), ), 'articles_per_page' => 'Aantal artikelen per pagina', @@ -170,12 +170,12 @@ 'display_articles_unfolded' => 'Artikelen standaard uitklappen', 'display_categories_unfolded' => 'Categoriën om uit te klappen', 'headline' => array( - 'articles' => 'Articles: Open/Close', // TODO - 'articles_header_footer' => 'Articles: header/footer', // TODO - 'categories' => 'Left navigation: Categories', // TODO - 'mark_as_read' => 'Mark article as read', // TODO - 'misc' => 'Miscellaneous', // TODO - 'view' => 'View', // TODO + 'articles' => 'Artikelen: openen/sluiten', + 'articles_header_footer' => 'Artikelen: kop/voet', + 'categories' => 'Linkernavigatie: categoriën', + 'mark_as_read' => 'Artikelen als gelezen markeren', + 'misc' => 'Diversen', + 'view' => 'Weergave', ), 'hide_read_feeds' => 'Categorieën en feeds zonder ongelezen artikelen verbergen (werkt niet met “Toon alle artikelen” configuratie)', 'img_with_lazyload' => 'Gebruik "lazy load" methode om afbeeldingen te laden', @@ -187,7 +187,7 @@ 'article_viewed' => 'als het artikel wordt bekeken', 'keep_max_n_unread' => 'Max aantal artikelen ongelezen houden', 'scroll' => 'tijdens het scrollen', - 'upon_gone' => 'when it is no longer in the upstream news feed', // TODO + 'upon_gone' => 'als het niet langer in de nieuwsfeed staat', 'upon_reception' => 'bij ontvangst van het artikel', 'when' => 'Markeer artikel als gelezen…', 'when_same_title' => 'als een zelfde titel al voorkomt in de top n nieuwste artikelen', @@ -222,7 +222,7 @@ '_' => 'Delen', 'add' => 'Deelmethode toevoegen', 'blogotext' => 'Blogotext', // IGNORE - 'deprecated' => 'This service is deprecated and will be removed from FreshRSS in a future release.', // TODO + 'deprecated' => 'Deze dienst is afgeschreven en zal uit FreshRSS worden verwijderd in een toekomstige versie.', 'diaspora' => 'Diaspora*', // IGNORE 'email' => 'Email', // IGNORE 'facebook' => 'Facebook', // IGNORE diff --git a/app/i18n/nl/gen.php b/app/i18n/nl/gen.php index 6d6e3360bcc..d12750dde9b 100644 --- a/app/i18n/nl/gen.php +++ b/app/i18n/nl/gen.php @@ -18,7 +18,7 @@ 'back_to_rss_feeds' => '← Ga terug naar je RSS feeds', 'cancel' => 'Annuleren', 'create' => 'Opslaan', - 'delete_muted_feeds' => 'Delete muted feeds', // TODO + 'delete_muted_feeds' => 'Gedempte feeds verwijderen', 'demote' => 'Degraderen', 'disable' => 'Uitzetten', 'empty' => 'Leeg', @@ -29,10 +29,10 @@ 'load_default_shortcuts' => 'Standaardshortcuts laden', 'manage' => 'Beheren', 'mark_read' => 'Markeer als gelezen', - 'open_url' => 'Open URL', // TODO + 'open_url' => 'URL openen', 'promote' => 'Bevorderen', 'purge' => 'Zuiveren', - 'refresh_opml' => 'Refresh OPML', // TODO + 'refresh_opml' => 'OPML vernieuwen', 'remove' => 'Verwijderen', 'rename' => 'Hernoemen', 'see_website' => 'Bekijk website', @@ -130,7 +130,7 @@ 'confirm_action_feed_cat' => 'Weet u zeker dat u dit wilt doen? U verliest alle gereleteerde favorieten en gebruikers informatie. Het kan niet ongedaan worden gemaakt!', 'feedback' => array( 'body_new_articles' => 'Er zijn %%d nieuwe artikelen om te lezen op FreshRSS.', - 'body_unread_articles' => '(unread: %%d)', // TODO + 'body_unread_articles' => '(ongelezen: %%d)', 'request_failed' => 'Een opdracht is mislukt, mogelijk door Internet verbindings problemen.', 'title_new_articles' => 'FreshRSS: nieuwe artikelen!', ), @@ -209,7 +209,7 @@ 'twitter' => 'Twitter', // IGNORE 'wallabag' => 'wallabag v1', // IGNORE 'wallabagv2' => 'wallabag v2', // IGNORE - 'web-sharing-api' => 'System sharing', // TODO + 'web-sharing-api' => 'Delen van systeem', 'whatsapp' => 'Whatsapp', // IGNORE 'xing' => 'Xing', // IGNORE ), diff --git a/app/i18n/nl/sub.php b/app/i18n/nl/sub.php index fbcbb8bfb38..85a01a97ace 100644 --- a/app/i18n/nl/sub.php +++ b/app/i18n/nl/sub.php @@ -25,19 +25,19 @@ 'add' => 'Voeg categorie', 'archiving' => 'Archiveren', 'dynamic_opml' => array( - '_' => 'Dynamic OPML', // TODO - 'help' => 'Provide the URL to an OPML file to dynamically populate this category with feeds', // TODO + '_' => 'Dynamische OPML', + 'help' => 'Geef de URL naar een OPML-bestand om deze categorie dynamisch met feeds te vullen', ), 'empty' => 'Lege categorie', 'information' => 'Informatie', - 'opml_url' => 'OPML URL', // TODO + 'opml_url' => 'OPML URL', // IGNORE 'position' => 'Weergavepositie', 'position_help' => 'Om de categorieweergave-sorteervolgorde te controleren', 'title' => 'Titel', ), 'feed' => array( - 'accept_cookies' => 'Accept cookies', // TODO - 'accept_cookies_help' => 'Allow the feed server to set cookies (stored in memory for the duration of the request only)', // TODO + 'accept_cookies' => 'Cookies accepteren', + 'accept_cookies_help' => 'De feed-server toestaan cookies te plaatsen (die alleen voor de duur van de aanvraag in het geheugen worden opgeslagen)', 'add' => 'Voeg een RSS-feed toe', 'advanced' => 'Geavanceerd', 'archiving' => 'Archiveren', @@ -60,8 +60,8 @@ 'css_help' => 'Haalt onvolledige RSS-feeds op (attentie, heeft meer tijd nodig!)', 'css_path' => 'CSS-pad van artikelen op originele website', 'css_path_filter' => array( - '_' => 'CSS selector of the elements to remove', // TODO - 'help' => 'A CSS selector may be a list such as: .footer, .aside', // TODO + '_' => 'CSS selector van de elementen om te verwijderen', + 'help' => 'Een CSS selector kan een lijst zijn, zoals: .footer, .aside', ), 'description' => 'Omschrijving', 'empty' => 'Deze feed is leeg. Controleer of deze nog actueel is.', @@ -73,51 +73,51 @@ 'information' => 'Informatie', 'keep_min' => 'Minimum aantal artikelen om te houden', 'kind' => array( - '_' => 'Type of feed source', // TODO + '_' => 'Feedbron-type', 'html_xpath' => array( - '_' => 'HTML + XPath (Web scraping)', // TODO + '_' => 'HTML + XPath (Web scraping)', // IGNORE 'feed_title' => array( - '_' => 'feed title', // TODO - 'help' => 'Example: //title or a static string: "My custom feed"', // TODO + '_' => 'feedtitel', + 'help' => 'Voorbeeld: //title of een statische string: "Mijn aangepaste feed"', ), - 'help' => 'XPath 1.0 is a standard query language for advanced users, and which FreshRSS supports to enable Web scraping.', // TODO + 'help' => 'XPath 1.0 is een standaard querytaal voor geavanceerde gebruikers, die door FreshRSS ondersteund wordt voor web scraping.', 'item' => array( - '_' => 'finding news items
    (most important)', // TODO - 'help' => 'Example: //div[@class="news-item"]', // TODO + '_' => 'nieuws vinden berichten
    (belangrijkste)', + 'help' => 'Voorbeeld: //div[@class="nieuws-bericht"]', ), 'item_author' => array( - '_' => 'item author', // TODO - 'help' => 'Can also be a static string. Example: "Anonymous"', // TODO + '_' => 'auteur van het bericht', + 'help' => 'Kan ook een statische string zijn. Voorbeeld: "Anoniem"', ), - 'item_categories' => 'item tags', // TODO + 'item_categories' => 'tags van bericht', 'item_content' => array( - '_' => 'item content', // TODO - 'help' => 'Example to take the full item: .', // TODO + '_' => 'inhoud van bericht', + 'help' => 'Voorbeeld om het volledige bericht over te nemen: .', ), 'item_thumbnail' => array( - '_' => 'item thumbnail', // TODO - 'help' => 'Example: descendant::img/@src', // TODO + '_' => 'miniatuur van bericht', + 'help' => 'Voorbeeld: descendant::img/@src', ), 'item_timestamp' => array( - '_' => 'item date', // TODO - 'help' => 'The result will be parsed by strtotime()', // TODO + '_' => 'datum van bericht', + 'help' => 'Het resultaat zal worden geparset door strtotime()', ), 'item_title' => array( - '_' => 'item title', // TODO - 'help' => 'Use in particular the XPath axis descendant:: like descendant::h2', // TODO + '_' => 'titel van bericht', + 'help' => 'Gebruik vooral XPath axis descendant:: zoals descendant::h2', ), 'item_uid' => array( - '_' => 'item unique ID', // TODO - 'help' => 'Optional. Example: descendant::div/@data-uri', // TODO + '_' => 'uniek ID van bericht', + 'help' => 'Optioneel. Voorbeeld: descendant::div/@data-uri', ), 'item_uri' => array( - '_' => 'item link (URL)', // TODO - 'help' => 'Example: descendant::a/@href', // TODO + '_' => 'link van bericht (URL)', + 'help' => 'Voorbeeld: descendant::a/@href', ), - 'relative' => 'XPath (relative to item) for:', // TODO - 'xpath' => 'XPath for:', // TODO + 'relative' => 'XPath (relatief naar bericht) voor:', + 'xpath' => 'XPath voor:', ), - 'rss' => 'RSS / Atom (default)', // TODO + 'rss' => 'RSS / Atom (standaard)', ), 'maintenance' => array( 'clear_cache' => 'Cache leegmaken', @@ -126,8 +126,8 @@ 'reload_articles_help' => 'Artikels herladen en complete inhoud ophalen als een selector is gedefinieerd.', // DIRTY 'title' => 'Onderhoud', ), - 'max_http_redir' => 'Max HTTP redirects', // TODO - 'max_http_redir_help' => 'Set to 0 or leave blank to disable, -1 for unlimited redirects', // TODO + 'max_http_redir' => 'Max HTTP redirects', // IGNORE + 'max_http_redir_help' => 'Stel in op 0 of laat leeg om uit te schakelen, -1 voor ongelimiteerde redirects', 'moved_category_deleted' => 'Als u een categorie verwijderd, worden de feeds automatisch geclassificeerd onder %s.', 'mute' => 'demp', 'no_selected' => 'Geen feed geselecteerd.', @@ -198,7 +198,7 @@ '_' => 'Abonnementenbeheer', 'add' => 'Feed of categorie toevoegen', 'add_category' => 'Categorie toevoegen', - 'add_dynamic_opml' => 'Add dynamic OPML', // TODO + 'add_dynamic_opml' => 'Dynamische OPML toevoegen', 'add_feed' => 'Feed toevoegen', 'add_label' => 'Label toevoegen', 'delete_label' => 'Label verwijderen', From e866fead6c223dcdce5bac34fed9a7c5a42e473e Mon Sep 17 00:00:00 2001 From: maTh Date: Tue, 23 Aug 2022 21:36:06 +0200 Subject: [PATCH 0336/2479] fix: Theme Swage - Text overflow in dropdown menu (#4531) * fix * fix --- p/themes/Swage/swage.css | 1 + p/themes/Swage/swage.rtl.css | 1 + p/themes/Swage/swage.scss | 1 + 3 files changed, 3 insertions(+) diff --git a/p/themes/Swage/swage.css b/p/themes/Swage/swage.css index 19750628c68..1dd6cadc9df 100644 --- a/p/themes/Swage/swage.css +++ b/p/themes/Swage/swage.css @@ -1294,6 +1294,7 @@ button.as-link { #nav_menu_actions ul.dropdown-menu { left: 0; + right: auto; } #nav_menu_read_all ul.dropdown-menu { diff --git a/p/themes/Swage/swage.rtl.css b/p/themes/Swage/swage.rtl.css index 022b66a288e..e23c19cb760 100644 --- a/p/themes/Swage/swage.rtl.css +++ b/p/themes/Swage/swage.rtl.css @@ -1294,6 +1294,7 @@ button.as-link { #nav_menu_actions ul.dropdown-menu { right: 0; + left: auto; } #nav_menu_read_all ul.dropdown-menu { diff --git a/p/themes/Swage/swage.scss b/p/themes/Swage/swage.scss index f7a128242e6..a2afea81e85 100644 --- a/p/themes/Swage/swage.scss +++ b/p/themes/Swage/swage.scss @@ -1596,6 +1596,7 @@ button.as-link { #nav_menu_actions { ul.dropdown-menu { left: 0; + right: auto; } } From 34b07a729d0a2deb662e992328f6ced69f7a5b35 Mon Sep 17 00:00:00 2001 From: maTh Date: Tue, 23 Aug 2022 21:38:13 +0200 Subject: [PATCH 0337/2479] add archive.ph (#4530) --- app/i18n/cz/gen.php | 1 + app/i18n/de/gen.php | 1 + app/i18n/en-us/gen.php | 1 + app/i18n/en/gen.php | 1 + app/i18n/es/gen.php | 1 + app/i18n/fr/gen.php | 1 + app/i18n/he/gen.php | 1 + app/i18n/it/gen.php | 1 + app/i18n/ja/gen.php | 1 + app/i18n/ko/gen.php | 1 + app/i18n/nl/gen.php | 1 + app/i18n/oc/gen.php | 1 + app/i18n/pl/gen.php | 1 + app/i18n/pt-br/gen.php | 1 + app/i18n/ru/gen.php | 1 + app/i18n/sk/gen.php | 1 + app/i18n/tr/gen.php | 1 + app/i18n/zh-cn/gen.php | 1 + app/shares.php | 7 +++++++ 19 files changed, 25 insertions(+) diff --git a/app/i18n/cz/gen.php b/app/i18n/cz/gen.php index 26e7387ea7e..2fcc843deb1 100644 --- a/app/i18n/cz/gen.php +++ b/app/i18n/cz/gen.php @@ -188,6 +188,7 @@ ), 'share' => array( 'Known' => 'Známé základní stránky', + 'archivePH' => 'archive.ph', // IGNORE 'blogotext' => 'Blogotext', // IGNORE 'clipboard' => 'Schránka', 'diaspora' => 'Diaspora*', // IGNORE diff --git a/app/i18n/de/gen.php b/app/i18n/de/gen.php index fb7726416cb..745c52915e2 100644 --- a/app/i18n/de/gen.php +++ b/app/i18n/de/gen.php @@ -188,6 +188,7 @@ ), 'share' => array( 'Known' => 'Known-Seite (https://withknown.com)', + 'archivePH' => 'archive.ph', // IGNORE 'blogotext' => 'Blogotext', // IGNORE 'clipboard' => 'Zwischenablage', 'diaspora' => 'Diaspora*', // IGNORE diff --git a/app/i18n/en-us/gen.php b/app/i18n/en-us/gen.php index 1fdfef994f9..8faa93a1466 100644 --- a/app/i18n/en-us/gen.php +++ b/app/i18n/en-us/gen.php @@ -188,6 +188,7 @@ ), 'share' => array( 'Known' => 'Known based sites', // IGNORE + 'archivePH' => 'archive.ph', // IGNORE 'blogotext' => 'Blogotext', // IGNORE 'clipboard' => 'Clipboard', // IGNORE 'diaspora' => 'Diaspora*', // IGNORE diff --git a/app/i18n/en/gen.php b/app/i18n/en/gen.php index e1479044090..d825a321b62 100644 --- a/app/i18n/en/gen.php +++ b/app/i18n/en/gen.php @@ -188,6 +188,7 @@ ), 'share' => array( 'Known' => 'Known based sites', + 'archivePH' => 'archive.ph', 'blogotext' => 'Blogotext', 'clipboard' => 'Clipboard', 'diaspora' => 'Diaspora*', diff --git a/app/i18n/es/gen.php b/app/i18n/es/gen.php index b224000a3b8..c8ff1454c48 100755 --- a/app/i18n/es/gen.php +++ b/app/i18n/es/gen.php @@ -188,6 +188,7 @@ ), 'share' => array( 'Known' => 'Sitios basados en conocidos', + 'archivePH' => 'archive.ph', // IGNORE 'blogotext' => 'Blogotext', // IGNORE 'clipboard' => 'Portapapeles', 'diaspora' => 'Diaspora*', // IGNORE diff --git a/app/i18n/fr/gen.php b/app/i18n/fr/gen.php index 40eca19c125..66abf504be1 100644 --- a/app/i18n/fr/gen.php +++ b/app/i18n/fr/gen.php @@ -188,6 +188,7 @@ ), 'share' => array( 'Known' => 'Sites basés sur Known', + 'archivePH' => 'archive.ph', // IGNORE 'blogotext' => 'Blogotext', // IGNORE 'clipboard' => 'Presse-papier', 'diaspora' => 'Diaspora*', // IGNORE diff --git a/app/i18n/he/gen.php b/app/i18n/he/gen.php index f42d2268fb8..f091c40d60c 100644 --- a/app/i18n/he/gen.php +++ b/app/i18n/he/gen.php @@ -188,6 +188,7 @@ ), 'share' => array( 'Known' => 'Known based sites', // TODO + 'archivePH' => 'archive.ph', // IGNORE 'blogotext' => 'Blogotext', // IGNORE 'clipboard' => 'Clipboard', // TODO 'diaspora' => 'Diaspora*', // IGNORE diff --git a/app/i18n/it/gen.php b/app/i18n/it/gen.php index f8ad2bd4851..d0e23a141e2 100644 --- a/app/i18n/it/gen.php +++ b/app/i18n/it/gen.php @@ -188,6 +188,7 @@ ), 'share' => array( 'Known' => 'Siti basati su Known', + 'archivePH' => 'archive.ph', // IGNORE 'blogotext' => 'Blogotext', // IGNORE 'clipboard' => 'Clipboard', // TODO 'diaspora' => 'Diaspora*', // IGNORE diff --git a/app/i18n/ja/gen.php b/app/i18n/ja/gen.php index 19ee5ad07fe..a26db3eefae 100644 --- a/app/i18n/ja/gen.php +++ b/app/i18n/ja/gen.php @@ -188,6 +188,7 @@ ), 'share' => array( 'Known' => 'よく使われるサイト', + 'archivePH' => 'archive.ph', // IGNORE 'blogotext' => 'Blogotext', // IGNORE 'clipboard' => 'クリップボード', 'diaspora' => 'Diaspora*', // IGNORE diff --git a/app/i18n/ko/gen.php b/app/i18n/ko/gen.php index 7070f105db2..afb0750eafa 100644 --- a/app/i18n/ko/gen.php +++ b/app/i18n/ko/gen.php @@ -188,6 +188,7 @@ ), 'share' => array( 'Known' => 'Known based sites', // IGNORE + 'archivePH' => 'archive.ph', // IGNORE 'blogotext' => 'Blogotext', // IGNORE 'clipboard' => '클립보드', 'diaspora' => 'Diaspora*', // IGNORE diff --git a/app/i18n/nl/gen.php b/app/i18n/nl/gen.php index d12750dde9b..8a5851baf5f 100644 --- a/app/i18n/nl/gen.php +++ b/app/i18n/nl/gen.php @@ -188,6 +188,7 @@ ), 'share' => array( 'Known' => 'Known-gebaseerde sites', + 'archivePH' => 'archive.ph', // IGNORE 'blogotext' => 'Blogotext', // IGNORE 'clipboard' => 'Klembord', 'diaspora' => 'Diaspora*', // IGNORE diff --git a/app/i18n/oc/gen.php b/app/i18n/oc/gen.php index a641afeaa0a..40a75164fc5 100644 --- a/app/i18n/oc/gen.php +++ b/app/i18n/oc/gen.php @@ -188,6 +188,7 @@ ), 'share' => array( 'Known' => 'Sites basats sus Known', + 'archivePH' => 'archive.ph', // IGNORE 'blogotext' => 'Blogotext', // IGNORE 'clipboard' => 'Quicha-papiers.', 'diaspora' => 'Diaspora*', // IGNORE diff --git a/app/i18n/pl/gen.php b/app/i18n/pl/gen.php index c8b57632f2a..0296eeb0b5d 100644 --- a/app/i18n/pl/gen.php +++ b/app/i18n/pl/gen.php @@ -188,6 +188,7 @@ ), 'share' => array( 'Known' => 'Strony bazujące na usłudze Known', + 'archivePH' => 'archive.ph', // IGNORE 'blogotext' => 'Blogotext', // IGNORE 'clipboard' => 'Schowek', 'diaspora' => 'Diaspora*', // IGNORE diff --git a/app/i18n/pt-br/gen.php b/app/i18n/pt-br/gen.php index bfe8a311b65..240646810db 100644 --- a/app/i18n/pt-br/gen.php +++ b/app/i18n/pt-br/gen.php @@ -188,6 +188,7 @@ ), 'share' => array( 'Known' => 'Sites no Known', + 'archivePH' => 'archive.ph', // IGNORE 'blogotext' => 'Blogotext', // IGNORE 'clipboard' => 'Área de transferência', 'diaspora' => 'Diaspora*', // IGNORE diff --git a/app/i18n/ru/gen.php b/app/i18n/ru/gen.php index 18b4d1aea12..d10dac020e6 100644 --- a/app/i18n/ru/gen.php +++ b/app/i18n/ru/gen.php @@ -188,6 +188,7 @@ ), 'share' => array( 'Known' => 'Сайты на Known', + 'archivePH' => 'archive.ph', // IGNORE 'blogotext' => 'Blogotext', // IGNORE 'clipboard' => 'Буфер обмена', 'diaspora' => 'Diaspora*', // IGNORE diff --git a/app/i18n/sk/gen.php b/app/i18n/sk/gen.php index 4af81ff793a..dc114d000a4 100644 --- a/app/i18n/sk/gen.php +++ b/app/i18n/sk/gen.php @@ -188,6 +188,7 @@ ), 'share' => array( 'Known' => 'Stránky založené na Known', + 'archivePH' => 'archive.ph', // IGNORE 'blogotext' => 'Blogotext', // IGNORE 'clipboard' => 'Schránka', 'diaspora' => 'Diaspora*', // IGNORE diff --git a/app/i18n/tr/gen.php b/app/i18n/tr/gen.php index 04f1a16eb62..e8ea72f5ded 100644 --- a/app/i18n/tr/gen.php +++ b/app/i18n/tr/gen.php @@ -188,6 +188,7 @@ ), 'share' => array( 'Known' => 'Bilinen siteler', + 'archivePH' => 'archive.ph', // IGNORE 'blogotext' => 'Blogotext', // IGNORE 'clipboard' => 'Kopyala', 'diaspora' => 'Diaspora*', // IGNORE diff --git a/app/i18n/zh-cn/gen.php b/app/i18n/zh-cn/gen.php index b629106a046..678f75e7d09 100644 --- a/app/i18n/zh-cn/gen.php +++ b/app/i18n/zh-cn/gen.php @@ -188,6 +188,7 @@ ), 'share' => array( 'Known' => '基于 Known 的站点', + 'archivePH' => 'archive.ph', // IGNORE 'blogotext' => 'Blogotext', // IGNORE 'clipboard' => '剪贴板', 'diaspora' => 'Diaspora*', // IGNORE diff --git a/app/shares.php b/app/shares.php index 8e0134663b0..0d2b358bb9b 100644 --- a/app/shares.php +++ b/app/shares.php @@ -26,6 +26,13 @@ */ return array( + 'archivePH' => array( + 'url' => 'https://archive.ph/submit/?url=~LINK~', + 'transform' => array(), + 'help' => 'https://archive.ph/', + 'form' => 'simple', + 'method' => 'GET', + ), 'blogotext' => array( 'deprecated' => true, 'url' => '~URL~/admin/links.php?url=~LINK~', From 7ff63448544c139bc6a024112fd721dd8ea6a6a2 Mon Sep 17 00:00:00 2001 From: maTh Date: Wed, 24 Aug 2022 23:28:48 +0200 Subject: [PATCH 0338/2479] fix (#4533) --- p/themes/base-theme/template.css | 7 +------ p/themes/base-theme/template.rtl.css | 7 +------ 2 files changed, 2 insertions(+), 12 deletions(-) diff --git a/p/themes/base-theme/template.css b/p/themes/base-theme/template.css index e5332f8a4b9..e0c7bd74e47 100644 --- a/p/themes/base-theme/template.css +++ b/p/themes/base-theme/template.css @@ -295,13 +295,8 @@ td.numeric { display: none !important; } -/* login and register form */ +/* prompt: login + register form + alert message banner */ .prompt { - margin: 3rem auto; - padding: 2rem; - max-width: 400px; - min-width: 300px; - width: 33%; text-align: center; } diff --git a/p/themes/base-theme/template.rtl.css b/p/themes/base-theme/template.rtl.css index 126ca04a3c0..a4031cafade 100644 --- a/p/themes/base-theme/template.rtl.css +++ b/p/themes/base-theme/template.rtl.css @@ -295,13 +295,8 @@ td.numeric { display: none !important; } -/* login and register form */ +/* prompt: login + register form + alert message banner */ .prompt { - margin: 3rem auto; - padding: 2rem; - max-width: 400px; - min-width: 300px; - width: 33%; text-align: center; } From d815dd8dbe7f294284d319c97fe24d6c3c5a14c7 Mon Sep 17 00:00:00 2001 From: Bartosz Taudul Date: Thu, 25 Aug 2022 19:35:34 +0200 Subject: [PATCH 0339/2479] Update PL translation. (#4536) --- app/i18n/pl/admin.php | 14 ++++----- app/i18n/pl/conf.php | 54 ++++++++++++++++---------------- app/i18n/pl/gen.php | 8 ++--- app/i18n/pl/sub.php | 72 +++++++++++++++++++++---------------------- 4 files changed, 74 insertions(+), 74 deletions(-) diff --git a/app/i18n/pl/admin.php b/app/i18n/pl/admin.php index 6465299fbd1..f7cc2b69650 100644 --- a/app/i18n/pl/admin.php +++ b/app/i18n/pl/admin.php @@ -170,18 +170,18 @@ 'registration' => array( 'number' => 'Maksymalna liczba kont', 'select' => array( - 'label' => 'Registration form', // TODO + 'label' => 'Formularz tworzenia konta', 'option' => array( - 'noform' => 'Disabled: No registration form', // TODO - 'nolimit' => 'Enabled: No limit of accounts', // TODO - 'setaccountsnumber' => 'Set max. number of accounts', // TODO + 'noform' => 'Wyłączony: formularz niedostępny', + 'nolimit' => 'Włączony: brak limitu liczby kont', + 'setaccountsnumber' => 'Ustaw limit liczby kont', ), ), 'status' => array( - 'disabled' => 'Form disabled', // TODO - 'enabled' => 'Form enabled', // TODO + 'disabled' => 'Formularz wyłączony', + 'enabled' => 'Formularz włączony', ), - 'title' => 'User registration form', // TODO + 'title' => 'Formularz rejestracji użytkowników', ), ), 'update' => array( diff --git a/app/i18n/pl/conf.php b/app/i18n/pl/conf.php index fc4b233c98c..86dc8aa32b2 100644 --- a/app/i18n/pl/conf.php +++ b/app/i18n/pl/conf.php @@ -68,9 +68,9 @@ ), 'logs' => array( 'loglist' => array( - 'level' => 'Log Level', // TODO - 'message' => 'Log Message', // TODO - 'timestamp' => 'Timestamp', // TODO + 'level' => 'Poziom', + 'message' => 'Zawartość wpisu', + 'timestamp' => 'Czas', ), 'pagination' => array( 'first' => 'Początek', @@ -139,28 +139,28 @@ 'always_show_favorites' => 'Pokaż wszystkie wiadomości po wejściu do ulubionych', 'article' => array( 'authors_date' => array( - '_' => 'Authors and date', // TODO - 'both' => 'In header and footer', // TODO - 'footer' => 'In footer', // TODO - 'header' => 'In header', // TODO - 'none' => 'None', // TODO + '_' => 'Autor i data', + 'both' => 'W nagłówku i stopce', + 'footer' => 'W stopce', + 'header' => 'W nagłówku', + 'none' => 'Brak', ), 'feed_name' => array( - 'above_title' => 'Above title/tags', // TODO - 'none' => 'None', // TODO - 'with_authors' => 'In authors and date row', // TODO + 'above_title' => 'Ponad tytułem/tagami', + 'none' => 'Brak', + 'with_authors' => 'W tej samej linii co autor i data', ), - 'feed_title' => 'Feed title', // TODO + 'feed_title' => 'Nazwa kanału', 'tags' => array( - '_' => 'Tags', // TODO - 'both' => 'In header and footer', // TODO - 'footer' => 'In footer', // TODO - 'header' => 'In header', // TODO - 'none' => 'None', // TODO + '_' => 'Tagi', + 'both' => 'W nagłówku i stopce', + 'footer' => 'W stopce', + 'header' => 'W nagłówku', + 'none' => 'Brak', ), 'tags_max' => array( - '_' => 'Max number of tags shown', // TODO - 'help' => '0 means: show all tags and do not collapse them', // TODO + '_' => 'Limit liczby wyświetlanych tagów', + 'help' => '0 oznacza: wyświetl wszystkie tagi i żadnego nie zwijaj', ), ), 'articles_per_page' => 'Liczba wiadomości na stronę', @@ -170,12 +170,12 @@ 'display_articles_unfolded' => 'Domyślnie wyświetlaj rozwinięte wiadomości', 'display_categories_unfolded' => 'Kategorie do rozwinięcia', 'headline' => array( - 'articles' => 'Articles: Open/Close', // TODO - 'articles_header_footer' => 'Articles: header/footer', // TODO - 'categories' => 'Left navigation: Categories', // TODO - 'mark_as_read' => 'Mark article as read', // TODO - 'misc' => 'Miscellaneous', // TODO - 'view' => 'View', // TODO + 'articles' => 'Wiadomości: otwieranie i zamykanie', + 'articles_header_footer' => 'Wiadomości: nagłówek i stopka', + 'categories' => 'Nawigacja po lewej: Kategorie', + 'mark_as_read' => 'Oznacz wiadomość jako przeczytaną', + 'misc' => 'Różne', + 'view' => 'Widok', ), 'hide_read_feeds' => 'Ukryj kategorie i kanały nie zawierające nieprzeczytanych wiadomości (nie działa gdy włączone jest wyświetlanie wszystkich wiadomości)', 'img_with_lazyload' => 'Opóźnij ładowanie obrazów dopóki nie będą widoczne', @@ -187,7 +187,7 @@ 'article_viewed' => 'gdy wiadomość jest otworzona', 'keep_max_n_unread' => 'Maksymalna liczba nieprzeczytanych wiadomości', 'scroll' => 'podczas przewijania', - 'upon_gone' => 'when it is no longer in the upstream news feed', // TODO + 'upon_gone' => 'gdy nie jest już listowana w źródle kanału', 'upon_reception' => 'po otrzymaniu wiadomości', 'when' => 'Oznacz wiadomość jako przeczytaną…', 'when_same_title' => 'gdy identyczny tytuł już istnieje w n najnowszych wiadomościach', @@ -222,7 +222,7 @@ '_' => 'Podawanie dalej', 'add' => 'Dodaj sposób na podanie dalej wiadomości', 'blogotext' => 'Blogotext', // IGNORE - 'deprecated' => 'This service is deprecated and will be removed from FreshRSS in a future release.', // TODO + 'deprecated' => 'Ta usługa jest przestarzała i zostanie usunięta w przyszłych wydaniach FreshRSS.', 'diaspora' => 'Diaspora*', // IGNORE 'email' => 'E-mail', 'facebook' => 'Facebook', // IGNORE diff --git a/app/i18n/pl/gen.php b/app/i18n/pl/gen.php index 0296eeb0b5d..636c86c4cc5 100644 --- a/app/i18n/pl/gen.php +++ b/app/i18n/pl/gen.php @@ -18,7 +18,7 @@ 'back_to_rss_feeds' => '← Wróć do subskrybowanych kanałów RSS', 'cancel' => 'Anuluj', 'create' => 'Stwórz', - 'delete_muted_feeds' => 'Delete muted feeds', // TODO + 'delete_muted_feeds' => 'Usuń wyciszone kanały', 'demote' => 'Zdegraduj', 'disable' => 'Wyłącz', 'empty' => 'Opróżnij', @@ -29,10 +29,10 @@ 'load_default_shortcuts' => 'Ustaw domyślne skróty', 'manage' => 'Ustawienia', 'mark_read' => 'Oznacz jako przeczytane', - 'open_url' => 'Open URL', // TODO + 'open_url' => 'Otwórz adres', 'promote' => 'Awansuj', 'purge' => 'Oczyść', - 'refresh_opml' => 'Refresh OPML', // TODO + 'refresh_opml' => 'Odśwież OPML', 'remove' => 'Usuń', 'rename' => 'Zmień nazwę', 'see_website' => 'Przejdź na stronę', @@ -210,7 +210,7 @@ 'twitter' => 'Twitter', // IGNORE 'wallabag' => 'wallabag v1', // IGNORE 'wallabagv2' => 'wallabag v2', // IGNORE - 'web-sharing-api' => 'System sharing', // TODO + 'web-sharing-api' => 'Udostępnianie natywne', 'whatsapp' => 'Whatsapp', // IGNORE 'xing' => 'Xing', // IGNORE ), diff --git a/app/i18n/pl/sub.php b/app/i18n/pl/sub.php index 6e819d92c81..54c69eb00e2 100644 --- a/app/i18n/pl/sub.php +++ b/app/i18n/pl/sub.php @@ -25,19 +25,19 @@ 'add' => 'Dodaj kategoria', 'archiving' => 'Archiwizacja', 'dynamic_opml' => array( - '_' => 'Dynamic OPML', // TODO - 'help' => 'Provide the URL to an OPML file to dynamically populate this category with feeds', // TODO + '_' => 'Dynamiczny OPML', + 'help' => 'Podaj adres pliku OPML, aby dynamicznie zapełnić tę kategorię kanałami', ), 'empty' => 'Pusta kategoria', 'information' => 'Informacje', - 'opml_url' => 'OPML URL', // TODO + 'opml_url' => 'Adres OPML', 'position' => 'Miejsce wyświetlania', 'position_help' => 'Kontrola porządku sortowania kategorii', 'title' => 'Tytuł', ), 'feed' => array( - 'accept_cookies' => 'Accept cookies', // TODO - 'accept_cookies_help' => 'Allow the feed server to set cookies (stored in memory for the duration of the request only)', // TODO + 'accept_cookies' => 'Akceptuj ciasteczka', + 'accept_cookies_help' => 'Pozwól serwerowi kanału na użycie ciasteczek (będą przechowywane w pamięci tylko na czas zapytania)', 'add' => 'Dodaj kanał', 'advanced' => 'Zaawansowane', 'archiving' => 'Archiwizacja', @@ -60,8 +60,8 @@ 'css_help' => 'Pozwala na ograniczenie zawartości kanałów (uwaga, wymaga więcej czasu!)', 'css_path' => 'Selektor CSS dla wiadomości na pierwotnej stronie', 'css_path_filter' => array( - '_' => 'CSS selector of the elements to remove', // TODO - 'help' => 'A CSS selector may be a list such as: .footer, .aside', // TODO + '_' => 'Selektor CSS elementów do usunięcia', + 'help' => 'Selector CSS może być listą, na przykład: .footer, .aside', ), 'description' => 'Opis', 'empty' => 'Ten kanał jest pusty. Należy sprawdzić czy kanał w dalszym ciągu działa.', @@ -73,61 +73,61 @@ 'information' => 'Informacja', 'keep_min' => 'Minimalna liczba wiadomości do do przechowywania', 'kind' => array( - '_' => 'Type of feed source', // TODO + '_' => 'Rodzaj źródła kanału', 'html_xpath' => array( - '_' => 'HTML + XPath (Web scraping)', // TODO + '_' => 'HTML + XPath (Web scraping)', // IGNORE 'feed_title' => array( - '_' => 'feed title', // TODO - 'help' => 'Example: //title or a static string: "My custom feed"', // TODO + '_' => 'nazwy kanału', + 'help' => 'Przykład: //title, lub statyczny ciąg: "Mój własny kanał"', ), - 'help' => 'XPath 1.0 is a standard query language for advanced users, and which FreshRSS supports to enable Web scraping.', // TODO + 'help' => 'XPath 1.0 jest standardowym językiem zapytań przeznaczonym dla zaawansowanych użytkowników. FreshRSS wykorzystuje ten język aby wydobywać (scrape\'ować) dane ze stron internetowych.', 'item' => array( - '_' => 'finding news items
    (most important)', // TODO - 'help' => 'Example: //div[@class="news-item"]', // TODO + '_' => 'znajdowania poszczególnych wiadomości
    (najważniejsza opcja)', + 'help' => 'Przykład: //div[@class="news-item"]', ), 'item_author' => array( - '_' => 'item author', // TODO - 'help' => 'Can also be a static string. Example: "Anonymous"', // TODO + '_' => 'autora', + 'help' => 'Może również być statycznym ciągiem, na przykład: "Gall Anonim"', ), - 'item_categories' => 'item tags', // TODO + 'item_categories' => 'tagów wiadomości', 'item_content' => array( - '_' => 'item content', // TODO - 'help' => 'Example to take the full item: .', // TODO + '_' => 'zawartości', + 'help' => 'Następujące zapytanie uwzględni całą wiadomość: .', ), 'item_thumbnail' => array( - '_' => 'item thumbnail', // TODO - 'help' => 'Example: descendant::img/@src', // TODO + '_' => 'miniaturki', + 'help' => 'Przykład: descendant::img/@src', ), 'item_timestamp' => array( - '_' => 'item date', // TODO - 'help' => 'The result will be parsed by strtotime()', // TODO + '_' => 'daty', + 'help' => 'Wynik zostanie przetworzony za pomocą funkcji strtotime()', ), 'item_title' => array( - '_' => 'item title', // TODO - 'help' => 'Use in particular the XPath axis descendant:: like descendant::h2', // TODO + '_' => 'tytułu', + 'help' => 'W szczególności warto użyć oś XPath descendant::, na przykład: descendant::h2', ), 'item_uid' => array( - '_' => 'item unique ID', // TODO - 'help' => 'Optional. Example: descendant::div/@data-uri', // TODO + '_' => 'unikalnego identyfikatora', + 'help' => 'Opcjonalne. Przykład: descendant::div/@data-uri', ), 'item_uri' => array( - '_' => 'item link (URL)', // TODO - 'help' => 'Example: descendant::a/@href', // TODO + '_' => 'adresu (URL)', + 'help' => 'Przykład: descendant::a/@href', ), - 'relative' => 'XPath (relative to item) for:', // TODO - 'xpath' => 'XPath for:', // TODO + 'relative' => 'XPath (względem wiadomości) dla:', + 'xpath' => 'XPath dla:', ), - 'rss' => 'RSS / Atom (default)', // TODO + 'rss' => 'RSS / Atom (domyślne)', ), 'maintenance' => array( 'clear_cache' => 'Wyczyść pamięć podręczną', 'clear_cache_help' => 'Czyści pamięć podręczną tego kanału.', 'reload_articles' => 'Przeładuj wiadomości', - 'reload_articles_help' => 'Ponownie pobiera wiadomości i przetwarza treść ze strony pierwotnej, jeżeli zdefiniowany został selektor CSS.', // DIRTY + 'reload_articles_help' => 'Ponownie pobiera zdefiniowaną liczbę wiadomości i przetwarza treść ze strony pierwotnej, jeżeli zdefiniowany został selektor CSS.', 'title' => 'Konserwacja', ), - 'max_http_redir' => 'Max HTTP redirects', // TODO - 'max_http_redir_help' => 'Set to 0 or leave blank to disable, -1 for unlimited redirects', // TODO + 'max_http_redir' => 'Limit przekierowań HTTP', + 'max_http_redir_help' => 'Ustaw na 0, albo pozostaw puste, by zabronić przekierowywania. Wartość -1 wyłącza limit.', 'moved_category_deleted' => 'Po usunięciu kategorii znajdujące się w niej kanały zostaną automatycznie przeniesione do %s.', 'mute' => 'wycisz', 'no_selected' => 'Brak kanałów.', @@ -198,7 +198,7 @@ '_' => 'Zarządzanie subskrypcjami', 'add' => 'Dodaj kanał lub kategorię', 'add_category' => 'Dodaj kategorię', - 'add_dynamic_opml' => 'Add dynamic OPML', // TODO + 'add_dynamic_opml' => 'Dodaj dynamiczny OPML', 'add_feed' => 'Dodaj kanał', 'add_label' => 'Dodaj etykietę', 'delete_label' => 'Usuń etykietę', From 2b1aa7eedeba6058b8cc7cca261bf379462f3655 Mon Sep 17 00:00:00 2001 From: maTh Date: Thu, 25 Aug 2022 22:05:54 +0200 Subject: [PATCH 0340/2479] Fix: Ansum theme cleaning (#4538) * icons * login screen * fix login screen input in .stick * in the same height like input * simplefy the search bar button * header height improved * improve the config menu button * navigation bar: border radius * navigation bar: btn hover improved to darker grey, when not within .stick * delete unused code ul.nav * delete outcommented code + translate EN-> FR * fix syntax * fixed and RTL * RTL --- p/themes/Ansum/_components.scss | 141 ++--------- p/themes/Ansum/_configuration.scss | 25 +- p/themes/Ansum/_forms.scss | 14 +- p/themes/Ansum/_global-view.scss | 12 +- p/themes/Ansum/_layout.scss | 153 +++-------- p/themes/Ansum/_list-view.scss | 6 +- p/themes/Ansum/_mobile.scss | 41 +-- p/themes/Ansum/_sidebar.scss | 3 +- p/themes/Ansum/_variables.scss | 42 ++-- p/themes/Ansum/ansum.css | 238 +++++------------- p/themes/Ansum/ansum.rtl.css | 238 +++++------------- p/themes/Ansum/ansum.scss | 5 + p/themes/Ansum/icons/cog-white.svg | 5 - .../Ansum/icons/{cog.svg => configure.svg} | 31 +-- p/themes/Ansum/icons/down-white.svg | 59 ----- p/themes/Ansum/icons/link-white.svg | 59 ----- p/themes/Ansum/icons/magnifier.svg | 5 - p/themes/Ansum/icons/non-starred-white.svg | 61 ----- p/themes/Ansum/icons/read-grey.svg | 5 - p/themes/Ansum/icons/read-white.svg | 59 ----- p/themes/Ansum/icons/rss-white.svg | 60 ----- p/themes/Ansum/icons/starred-white.svg | 59 ----- p/themes/Ansum/icons/tick-white.svg | 5 - p/themes/Ansum/icons/unread-grey.svg | 59 ----- p/themes/Ansum/icons/unread-white.svg | 5 - p/themes/Ansum/icons/up-white.svg | 59 ----- p/themes/Ansum/icons/view-global-white.svg | 5 - p/themes/Ansum/icons/view-list-white.svg | 5 - p/themes/Ansum/icons/view-reader-white.svg | 59 ----- 29 files changed, 234 insertions(+), 1284 deletions(-) delete mode 100644 p/themes/Ansum/icons/cog-white.svg rename p/themes/Ansum/icons/{cog.svg => configure.svg} (86%) delete mode 100644 p/themes/Ansum/icons/down-white.svg delete mode 100644 p/themes/Ansum/icons/link-white.svg delete mode 100644 p/themes/Ansum/icons/magnifier.svg delete mode 100644 p/themes/Ansum/icons/non-starred-white.svg delete mode 100644 p/themes/Ansum/icons/read-grey.svg delete mode 100644 p/themes/Ansum/icons/read-white.svg delete mode 100644 p/themes/Ansum/icons/rss-white.svg delete mode 100644 p/themes/Ansum/icons/starred-white.svg delete mode 100644 p/themes/Ansum/icons/tick-white.svg delete mode 100644 p/themes/Ansum/icons/unread-grey.svg delete mode 100644 p/themes/Ansum/icons/unread-white.svg delete mode 100644 p/themes/Ansum/icons/up-white.svg delete mode 100644 p/themes/Ansum/icons/view-global-white.svg delete mode 100644 p/themes/Ansum/icons/view-list-white.svg delete mode 100644 p/themes/Ansum/icons/view-reader-white.svg diff --git a/p/themes/Ansum/_components.scss b/p/themes/Ansum/_components.scss index 0749f07f53e..82fbaec5914 100644 --- a/p/themes/Ansum/_components.scss +++ b/p/themes/Ansum/_components.scss @@ -192,61 +192,10 @@ padding: 0.5rem 0.75rem; background: variables.$grey-light; color: variables.$main-font-color; - // border-bottom: 1px solid #ddd; border-radius: 2px 2px 0 0; - - &:hover { - .configure { - background: url("icons/cog.svg") no-repeat 4px 4px; - display: block; - float: left; - width: 1.75rem; - height: 1.75rem; - border-radius: 2px; - margin-right: 0.5rem; - - .icon { - display: none; - border-radius: 3px; - vertical-align: middle; - } - - &:hover { - background: url("icons/cog-white.svg") no-repeat 4px 4px variables.$main-first; - } - } - } - - form { - input { - width: 85%; - } - - .dropdown { - float: right; - - a.dropdown-toggle { - padding: 0; - // float: right; - border-radius: 0; - background-image: url(icons/more.svg); - background-repeat: no-repeat; - background-position: right 8px; - - img { - display: none; - } - } - } - } - - .configure { - margin-right: 4px; - } } .box-content { - // max-height: 260px; padding-left: 30px; .item { @@ -255,36 +204,29 @@ font-size: 1rem; border-bottom: 1px solid variables.$grey-light; line-height: 1.7em; + } - img { - margin-right: 0.75rem; - } + .item:last-child { + border-bottom: none; + } + } - .configure { - background: url("icons/cog.svg") no-repeat 4px 4px; - display: block; - float: left; - width: 1.75rem; - height: 1.75rem; - border-radius: 2px; - margin-right: 0.5rem; - - .icon { - display: none; - border-radius: 3px; - vertical-align: middle; - } - - &:hover { - // background: $main-first; - background: url("icons/cog-white.svg") no-repeat 4px 4px variables.$main-first; - } - } + .configure { + margin-right: 0.5rem; + padding: 0.25rem; + border-radius: 3px; + .icon { + vertical-align: middle; } - .item:last-child { - border-bottom: none; + &:hover { + border-radius: 2px; + background-color: variables.$main-first; + + .icon { + filter: brightness(3); + } } } } @@ -303,7 +245,7 @@ color: #fff; .bigTick { - background: url(icons/tick-white.svg) center no-repeat; + filter: brightness(7); } } @@ -317,48 +259,3 @@ white-space: nowrap; } } - -// page de login -.formLogin { - background: variables.$sid-bg; - - .header { - .configure { - padding-right: 1rem; - - img { - margin-right: 0.5rem; - } - - a.signin { - color: variables.$white; - } - } - } - - h1 { - color: variables.$white; - } - - form#crypto-form { - div { - margin-bottom: 1rem; - - label { - color: variables.$grey-medium; - font-size: 1rem; - - - } - - input { - background: variables.$main-first-darker; - - &:focus { - background: variables.$grey-lighter; - color: variables.$main-font-color; - } - } - } - } -} diff --git a/p/themes/Ansum/_configuration.scss b/p/themes/Ansum/_configuration.scss index e2f9d054a45..a31362730b6 100644 --- a/p/themes/Ansum/_configuration.scss +++ b/p/themes/Ansum/_configuration.scss @@ -8,24 +8,9 @@ form { margin: 1rem 0; - // Gestion des extensions + // Extension management .horizontal-list { margin-bottom: 0.5rem; - - .item { - .stick { - // width: 65%; - // margin-right: 1rem; - // display:flex; - - } - - .btn { - // width: 8rem; - // flex-grow: 1; - } - } - } } @@ -33,8 +18,7 @@ max-width: 550px; } - h1, h2 { // pages titles - // font-family: "spectral"; + h1, h2 { color: variables.$main-font-color; font-size: 3rem; margin-top: 1.75rem; @@ -42,17 +26,16 @@ line-height: 1.2em; } - a[href="./"] { // C’est le bouton "Retour à vos flux" + a[href="./"] { + // This is the "Back to your feeds" button. margin: 0; padding: 0.75rem 1.5rem; background: variables.$grey-lighter; display: inline-block; - // border: none; color: variables.$grey-dark; font-size: 1rem; border: 1px solid variables.$grey-medium-light; border-radius: 5px; - // min-height: 38px; min-width: 15px; line-height: 25px; vertical-align: middle; diff --git a/p/themes/Ansum/_forms.scss b/p/themes/Ansum/_forms.scss index 0fc90894b77..0f5f96681bf 100644 --- a/p/themes/Ansum/_forms.scss +++ b/p/themes/Ansum/_forms.scss @@ -25,7 +25,6 @@ background: variables.$main-first; color: variables.$white; - // @include transition(all, 0.15s, ease-in-out); &:hover, &:active { background: variables.$main-first-alt; @@ -96,6 +95,11 @@ input, select, textarea, button { vertical-align: middle; } +select { + padding-top: 9px; + padding-bottom: 9px; +} + option { padding: 0 .5em; } @@ -130,13 +134,6 @@ input.extend { clear: both; } - &:hover { - // background: #fff; - // border: 1px solid #eee; - // border-radius: 3px; - // border: 1px solid #eee; - } - .group-name { padding: 10px 0; text-align: right; @@ -154,7 +151,6 @@ input.extend { &.form-actions { margin: 15px 0 25px; padding: 5px 0; - // background: #333; } &.form-actions .btn { diff --git a/p/themes/Ansum/_global-view.scss b/p/themes/Ansum/_global-view.scss index c2055c64f0d..dbf82f75f24 100644 --- a/p/themes/Ansum/_global-view.scss +++ b/p/themes/Ansum/_global-view.scss @@ -4,17 +4,8 @@ /*================*/ #stream { .box.category { - &:not([data-unread="0"]) .box-title { - // background: #3498db; - } - - &:not([data-unread="0"]) .box-title:active { - // background: #2980b9; - } - &:not([data-unread="0"]) .box-title .title { font-weight: bold; - // color: #fff; } .box-title { @@ -53,7 +44,6 @@ .item.feed { padding: 0.5rem 1.5rem; - // padding: 2px 10px; font-size: 1rem; a { @@ -71,7 +61,7 @@ } -// le panel qui apparait en overlay pour afficher les flux +// the panel that appears in overlay to display the flows #overlay { background: rgba(0, 0, 0, 0.65); } diff --git a/p/themes/Ansum/_layout.scss b/p/themes/Ansum/_layout.scss index b35b1ded7a8..4d099ab4a90 100644 --- a/p/themes/Ansum/_layout.scss +++ b/p/themes/Ansum/_layout.scss @@ -10,15 +10,12 @@ background: variables.$sid-bg; display: block; width: auto; - height: 3rem; + height: 3.5rem; table-layout: none; .item { vertical-align: middle; - // text-align: center; - // display: flex; - // justify-content: space-between; - // flex-direction: row; + &.title { width: 280px; font-weight: 400; @@ -32,8 +29,6 @@ } &.search { - // text-align: center; - // width: 50%; input { width: 230px; color: variables.$sid-font-color; @@ -55,50 +50,46 @@ } } - .btn { - img {display: none;} + input:focus ~ .btn, + input:hover ~ .btn { + background-color: variables.$main-first; + .icon { + filter: brightness(3); + } + } + + .btn { width: 3rem; border-radius: 0 2px 2px 0; - - background-color: variables.$main-first; - background-position: center; - background-repeat: no-repeat; - background-image: url(icons/magnifier.svg); - + background-color: variables.$sid-bg-alt; border-left-width: 0; min-height: 35px; + .icon { + filter: invert(49%) sepia(13%) saturate(2426%) hue-rotate(346deg) brightness(99%) contrast(95%); + } + &:hover { background-color: variables.$main-first-alt; + + .icon { + filter: brightness(3); + } } } } &.configure { - width: 2rem; + width: 3rem; position: absolute; right: 1rem; - top: 1.25rem; + top: 1rem; text-align: center; - // float: right; - .btn { - img {display: none;} - - padding: 0 0.5rem; - // border-radius: 0 2px 2px 0; + .btn { + padding: 0.25rem 1rem; background-color: transparent; - background-position: center; - background-repeat: no-repeat; - background-image: url(icons/cog.svg); - - // border-left-width: 0; - - // width: 3rem; - &:hover { - // background-color: $main-first-alt; - } } } } @@ -106,12 +97,13 @@ /*=== Body */ #global { - height: calc(100% - 4rem); + height: calc(100% - 3.5rem); } /*=== Prompt (centered) */ -.prompt input { - margin: 5px auto; +main.prompt { + background: variables.$grey-light; + border-radius: 5px; } /*=== New article notification */ @@ -141,16 +133,13 @@ line-height: 3em; letter-spacing: 1px; text-transform: uppercase; - // border-left: 2px solid #ecf0f1; + .name { padding: 0 1rem 0 1rem; - // font-weight: 700; color: variables.$main-font-color; font-size: 0.875rem; position: relative; left: 0; - - // letter-spacing: 1px; text-transform: uppercase; } } @@ -186,13 +175,11 @@ background-repeat: no-repeat; &:hover { - background-color: variables.$grey-light; + background-color: variables.$grey-medium-light; } } .stick { - background: variables.$grey-lighter; - .btn { border-left-width: 0; padding: 0.5rem 1rem; @@ -208,48 +195,14 @@ &.active { background-color: variables.$main-first; - } - - img.icon {display: none;} // on efface pour afficher nos icones, mouhahaha !! - - - // actions - &#toggle-read { - background-image: url(icons/read.svg); - } - - &#toggle-read.active { - background-image: url(icons/read-white.svg); - } - &#toggle-unread { - background-image: url(icons/unread.svg); - } - - &#toggle-unread.active { - background-image: url(icons/unread-white.svg); - } - - &#toggle-starred { - background-image: url(icons/starred.svg); - } - - &#toggle-starred.active { - background-image: url(icons/starred-white.svg); - } - - &#toggle-non-starred { - background-image: url(icons/non-starred.svg); - } - - &#toggle-non-starred.active { - background-image: url(icons/non-starred-white.svg); + .icon { + filter: brightness(5); + } } - // read all &.read_all { padding: 5px 16px; - // min-height: 0; color: variables.$main-font-color; background-color: variables.$grey-lighter; @@ -259,42 +212,16 @@ background-color: variables.$grey-medium-light; } } - - // views - &.view-normal { - background-image: url(icons/view-list.svg); - } - - &.view-normal.active { - background-image: url(icons/view-list-white.svg); - } - - &.view-global { - background-image: url(icons/view-global.svg); - } - - &.view-global.active { - background-image: url(icons/view-global-white.svg); - } - - &.view-reader { - background-image: url(icons/view-reader.svg); - } - - &.view-reader.active { - background-image: url(icons/view-reader-white.svg); - } - - &.view-rss { - background-image: url(icons/rss.svg); - } - } .dropdown { a.dropdown-toggle { border-left-width: 0; background-image: url(icons/more.svg); + + .icon { + display: none; + } } } } @@ -368,7 +295,6 @@ border-radius: 3px; } - blockquote { margin: 0; padding: 5px 20px; @@ -382,21 +308,17 @@ margin: 0; } } - } /*=== Notification and actualize notification */ .notification { - padding: 1rem 0; background: variables.$grey-medium-light; width: 100%; height: 3rem; color: variables.$grey-dark; - // font-weight: bold; font-size: 1em; - // border-radius: 3px; border: none; position: fixed; top: auto; @@ -448,7 +370,6 @@ } } - /*=== Navigation menu (for articles) */ #nav_entries { margin: 0; diff --git a/p/themes/Ansum/_list-view.scss b/p/themes/Ansum/_list-view.scss index f21f472d820..03005b7fd98 100644 --- a/p/themes/Ansum/_list-view.scss +++ b/p/themes/Ansum/_list-view.scss @@ -27,7 +27,7 @@ } &.not_read:not(.current) { - background: variables.$unread-bg; //-------------------- + background: variables.$unread-bg; &:hover .item.title { background: variables.$unread-bg; @@ -37,13 +37,13 @@ &.not_read { .item.title { a { - color: variables.$unread-font-color; //-------------------- + color: variables.$unread-font-color; } } .item.website { a { - color: variables.$unread-font-color; //-------------------- + color: variables.$unread-font-color; } } diff --git a/p/themes/Ansum/_mobile.scss b/p/themes/Ansum/_mobile.scss index e84dfe1cd32..f397e0f866f 100644 --- a/p/themes/Ansum/_mobile.scss +++ b/p/themes/Ansum/_mobile.scss @@ -6,41 +6,6 @@ /*===========*/ @media (max-width: 840px) { - html, body { - // font-size: 1rem; - } - - ul.nav { - .item { - width: 100%; - - img { - display: none; - } - - a { - box-sizing: border-box; - padding: 1rem 1rem 1rem 2.5rem; - - background: url("../../themes/icons/logout.svg") no-repeat variables.$sid-bg-dark 3% center; - display: inline-block; - width: 100%; - color: variables.$sid-font-color; - - @include mixins.transition(all, 0.2s, ease-in-out); - - &:hover, - &:active { - background: url("../../themes/icons/logout.svg") no-repeat variables.$alert-bg 3% center; - text-decoration: none; - color: variables.$white; - } - } - - } - - } - .form-group .group-name { text-align: left; } @@ -76,6 +41,7 @@ .header { padding: 0.5rem; + height: 8rem; .item { &.search { @@ -107,6 +73,10 @@ } } + #global { + height: calc(100% - 8rem); + } + .post { padding-left: 1rem; padding-right: 1rem; @@ -183,7 +153,6 @@ .name { padding: 0; - // font-size: 1.1rem; display: block; width: 100%; line-height: 1.5rem; diff --git a/p/themes/Ansum/_sidebar.scss b/p/themes/Ansum/_sidebar.scss index 07f589ab818..562718631a3 100644 --- a/p/themes/Ansum/_sidebar.scss +++ b/p/themes/Ansum/_sidebar.scss @@ -92,8 +92,7 @@ border-radius: 0; } - .btn:first-child, - input:first-child { + .btn:first-child { border-radius: 5px 0 0 5px; } diff --git a/p/themes/Ansum/_variables.scss b/p/themes/Ansum/_variables.scss index 8e2190a93ae..6ed5e295e2e 100644 --- a/p/themes/Ansum/_variables.scss +++ b/p/themes/Ansum/_variables.scss @@ -1,18 +1,18 @@ -// La couleur principale du thème -$main-first: #ca7227; // couleur principale -$main-first-alt: #b7641d; // var pour les hovers +// The main color of the theme +$main-first: #ca7227; // main color +$main-first-alt: #b7641d; // var for hovers $main-first-light: #fdf6ef; // var light 1 $main-first-lighter: #fefaf7; // var light 2 -$main-first-dark: #3c3835; // var pour les hovers -$main-first-darker: #221f1d; // var pour les hovers +$main-first-dark: #3c3835; // var for hovers +$main-first-darker: #221f1d; // var for hovers -// les couleurs de polices liées +// linked font colors $main-font-color: #363330; $light-font-color: #6d655f; -$white: #fff; // le blanc (des fois qu’on aurait envie de le teinter un peu) +$white: #fff; // white (sometimes we would like to tint it a little) -// toute la palette des gris, très utile -// on essaiera de teinter ces gris suivant la couleur principale +// the whole palette of grays, very useful +// we will try to tint these grays according to the main color $grey-darker: #524236; $grey-dark: #766556; $grey-medium-dark: #ba9; @@ -25,10 +25,10 @@ $unread-font-color: #161a38; $unread-bg: #f2f6f8; $unread-bg-light: #fdfdfe; -// les couleurs d’alertes (rouge, jaune, vert) -$alert-bg: #f5633e; // la base +// alert colors (red, yellow, green) +$alert-bg: #f5633e; // the base $alert-light: #fde0d8; // +light -$alert-text: #73341f; // +foncé +$alert-text: #73341f; // +dark $warning-bg: #f4f762; $warning-light: #fdfde0; @@ -38,17 +38,17 @@ $success-bg: #10f5b2; $success-light: #cffdef; $success-text: #0c7556; -// les favoris +// favorites $fav-bg: #ffc300; $fav-light: #fff6da; -// la couleur de sidebar, utile si on a envie d’un thème qui aurait une sidebar foncé, e.g. -$sid-font-color: #363330; // la couleur de fond de la barre de gauche et du header -$sid-bg: #fbf9f6; // le background général de la barre de gauche, et du header +// the sidebar color, useful if you want a theme that would have a dark sidebar, e.g. +$sid-font-color: #363330; // the background color of the left bar and the header +$sid-bg: #fbf9f6; // the general background of the left bar, and of the header $sid-bg-alt: #f7f2ea; // background inside groups -$sid-bg-dark: #efe3d3; // les hovers -$sid-sep: #f0e7da; // les séparateurs -$sid-active: $main-first; // la couleur active +$sid-bg-dark: #efe3d3; // the hover +$sid-sep: #f0e7da; // the separators +$sid-active: $main-first; // the active color // stylelint-disable-next-line color-hex-length -$sid-active-font: #ffffff; // la couleur active -$sid-pills: rgba(35,35,0, 0.15); // les gélules +$sid-active-font: #ffffff; // the active color +$sid-pills: rgba(35,35,0, 0.15); // capsules diff --git a/p/themes/Ansum/ansum.css b/p/themes/Ansum/ansum.css index 8b91139ca49..1f42beca43b 100644 --- a/p/themes/Ansum/ansum.css +++ b/p/themes/Ansum/ansum.css @@ -139,6 +139,11 @@ input, select, textarea, button { vertical-align: middle; } +select { + padding-top: 9px; + padding-bottom: 9px; +} + option { padding: 0 0.5em; } @@ -364,42 +369,6 @@ form th { color: #363330; border-radius: 2px 2px 0 0; } -.box .box-title:hover .configure { - background: url("icons/cog.svg") no-repeat 4px 4px; - display: block; - float: left; - width: 1.75rem; - height: 1.75rem; - border-radius: 2px; - margin-right: 0.5rem; -} -.box .box-title:hover .configure .icon { - display: none; - border-radius: 3px; - vertical-align: middle; -} -.box .box-title:hover .configure:hover { - background: url("icons/cog-white.svg") no-repeat 4px 4px #ca7227; -} -.box .box-title form input { - width: 85%; -} -.box .box-title form .dropdown { - float: right; -} -.box .box-title form .dropdown a.dropdown-toggle { - padding: 0; - border-radius: 0; - background-image: url(icons/more.svg); - background-repeat: no-repeat; - background-position: right 8px; -} -.box .box-title form .dropdown a.dropdown-toggle img { - display: none; -} -.box .box-title .configure { - margin-right: 4px; -} .box .box-content { padding-left: 30px; } @@ -410,28 +379,23 @@ form th { border-bottom: 1px solid #f5f0ec; line-height: 1.7em; } -.box .box-content .item img { - margin-right: 0.75rem; +.box .box-content .item:last-child { + border-bottom: none; } -.box .box-content .item .configure { - background: url("icons/cog.svg") no-repeat 4px 4px; - display: block; - float: left; - width: 1.75rem; - height: 1.75rem; - border-radius: 2px; +.box .configure { margin-right: 0.5rem; -} -.box .box-content .item .configure .icon { - display: none; + padding: 0.25rem; border-radius: 3px; +} +.box .configure .icon { vertical-align: middle; } -.box .box-content .item .configure:hover { - background: url("icons/cog-white.svg") no-repeat 4px 4px #ca7227; +.box .configure:hover { + border-radius: 2px; + background-color: #ca7227; } -.box .box-content .item:last-child { - border-bottom: none; +.box .configure:hover .icon { + filter: brightness(3); } /*=== "Load more" part */ @@ -447,7 +411,7 @@ form th { color: #fff; } #bigMarkAsRead:hover .bigTick { - background: url(icons/tick-white.svg) center no-repeat; + filter: brightness(7); } #bigMarkAsRead .bigTick { margin: 0.5rem 0; @@ -459,36 +423,6 @@ form th { white-space: nowrap; } -.formLogin { - background: #fbf9f6; -} -.formLogin .header .configure { - padding-right: 1rem; -} -.formLogin .header .configure img { - margin-right: 0.5rem; -} -.formLogin .header .configure a.signin { - color: #fff; -} -.formLogin h1 { - color: #fff; -} -.formLogin form#crypto-form div { - margin-bottom: 1rem; -} -.formLogin form#crypto-form div label { - color: #d9ccbf; - font-size: 1rem; -} -.formLogin form#crypto-form div input { - background: #221f1d; -} -.formLogin form#crypto-form div input:focus { - background: #fcfaf8; - color: #363330; -} - /*=== DIVERS */ /*===========*/ .aside.aside_feed .nav-form input, @@ -574,8 +508,7 @@ form th { .stick input, .stick .btn { border-radius: 0; } -.stick .btn:first-child, -.stick input:first-child { +.stick .btn:first-child { border-radius: 5px 0 0 5px; } .stick .btn:last-child, .stick input:last-child, .stick .btn + .dropdown > .btn { @@ -750,7 +683,7 @@ form th { background: #fbf9f6; display: block; width: auto; - height: 3rem; + height: 3.5rem; table-layout: none; } .header .item { @@ -780,47 +713,51 @@ form th { color: #766556; background-color: #fff; } +.header .item.search input:focus ~ .btn, +.header .item.search input:hover ~ .btn { + background-color: #ca7227; +} +.header .item.search input:focus ~ .btn .icon, +.header .item.search input:hover ~ .btn .icon { + filter: brightness(3); +} .header .item.search .btn { width: 3rem; border-radius: 0 2px 2px 0; - background-color: #ca7227; - background-position: center; - background-repeat: no-repeat; - background-image: url(icons/magnifier.svg); + background-color: #f7f2ea; border-left-width: 0; min-height: 35px; } -.header .item.search .btn img { - display: none; +.header .item.search .btn .icon { + filter: invert(49%) sepia(13%) saturate(2426%) hue-rotate(346deg) brightness(99%) contrast(95%); } .header .item.search .btn:hover { background-color: #b7641d; } +.header .item.search .btn:hover .icon { + filter: brightness(3); +} .header .item.configure { - width: 2rem; + width: 3rem; position: absolute; right: 1rem; - top: 1.25rem; + top: 1rem; text-align: center; } .header .item.configure .btn { - padding: 0 0.5rem; + padding: 0.25rem 1rem; background-color: transparent; - background-position: center; - background-repeat: no-repeat; - background-image: url(icons/cog.svg); -} -.header .item.configure .btn img { - display: none; } + /*=== Body */ #global { - height: calc(100% - 4rem); + height: calc(100% - 3.5rem); } /*=== Prompt (centered) */ -.prompt input { - margin: 5px auto; +main.prompt { + background: #f5f0ec; + border-radius: 5px; } /*=== New article notification */ @@ -830,10 +767,6 @@ form th { text-align: center; } -#new-article:hover { - background: #b7641d; -} - #new-article > a { line-height: 3em; font-weight: bold; @@ -842,6 +775,7 @@ form th { #new-article > a:hover { text-decoration: none; + background: #b7641d; } /*=== Day indication */ @@ -891,10 +825,7 @@ form th { background-repeat: no-repeat; } .nav_menu .btn:hover { - background-color: #f5f0ec; -} -.nav_menu .stick { - background: #fcfaf8; + background-color: #e4d8cc; } .nav_menu .stick .btn { border-left-width: 0; @@ -910,32 +841,8 @@ form th { .nav_menu .stick .btn.active { background-color: #ca7227; } -.nav_menu .stick .btn img.icon { - display: none; -} -.nav_menu .stick .btn#toggle-read { - background-image: url(icons/read.svg); -} -.nav_menu .stick .btn#toggle-read.active { - background-image: url(icons/read-white.svg); -} -.nav_menu .stick .btn#toggle-unread { - background-image: url(icons/unread.svg); -} -.nav_menu .stick .btn#toggle-unread.active { - background-image: url(icons/unread-white.svg); -} -.nav_menu .stick .btn#toggle-starred { - background-image: url(icons/starred.svg); -} -.nav_menu .stick .btn#toggle-starred.active { - background-image: url(icons/starred-white.svg); -} -.nav_menu .stick .btn#toggle-non-starred { - background-image: url(icons/non-starred.svg); -} -.nav_menu .stick .btn#toggle-non-starred.active { - background-image: url(icons/non-starred-white.svg); +.nav_menu .stick .btn.active .icon { + filter: brightness(5); } .nav_menu .stick .btn.read_all { padding: 5px 16px; @@ -946,31 +853,13 @@ form th { .nav_menu .stick .btn.read_all:hover { background-color: #e4d8cc; } -.nav_menu .stick .btn.view-normal { - background-image: url(icons/view-list.svg); -} -.nav_menu .stick .btn.view-normal.active { - background-image: url(icons/view-list-white.svg); -} -.nav_menu .stick .btn.view-global { - background-image: url(icons/view-global.svg); -} -.nav_menu .stick .btn.view-global.active { - background-image: url(icons/view-global-white.svg); -} -.nav_menu .stick .btn.view-reader { - background-image: url(icons/view-reader.svg); -} -.nav_menu .stick .btn.view-reader.active { - background-image: url(icons/view-reader-white.svg); -} -.nav_menu .stick .btn.view-rss { - background-image: url(icons/rss.svg); -} .nav_menu .stick .dropdown a.dropdown-toggle { border-left-width: 0; background-image: url(icons/more.svg); } +.nav_menu .stick .dropdown a.dropdown-toggle .icon { + display: none; +} #dropdown-query ~ .dropdown-menu .dropdown-header .icon { vertical-align: middle; @@ -1372,27 +1261,6 @@ form th { /*=== MOBILE */ /*===========*/ @media (max-width: 840px) { - ul.nav .item { - width: 100%; - } - ul.nav .item img { - display: none; - } - ul.nav .item a { - box-sizing: border-box; - padding: 1rem 1rem 1rem 2.5rem; - background: url("../../themes/icons/logout.svg") no-repeat #efe3d3 3% center; - display: inline-block; - width: 100%; - color: #363330; - transition: all 0.2s ease-in-out; - } - ul.nav .item a:hover, ul.nav .item a:active { - background: url("../../themes/icons/logout.svg") no-repeat #f5633e 3% center; - text-decoration: none; - color: #fff; - } - .form-group .group-name { text-align: left; } @@ -1427,6 +1295,7 @@ form th { .header { padding: 0.5rem; + height: 8rem; } .header .item.search { display: block; @@ -1449,6 +1318,10 @@ form th { padding: 0.5rem 2rem; } + #global { + height: calc(100% - 8rem); + } + .post { padding-left: 1rem; padding-right: 1rem; @@ -1537,6 +1410,11 @@ html, body { font-size: 0.875rem; } +body.formLogin, +body.register { + background: #fbf9f6; +} + /*=== Links */ a, button.as-link { outline: none; diff --git a/p/themes/Ansum/ansum.rtl.css b/p/themes/Ansum/ansum.rtl.css index 2dc349ead93..e77b0468f5a 100644 --- a/p/themes/Ansum/ansum.rtl.css +++ b/p/themes/Ansum/ansum.rtl.css @@ -139,6 +139,11 @@ input, select, textarea, button { vertical-align: middle; } +select { + padding-top: 9px; + padding-bottom: 9px; +} + option { padding: 0 0.5em; } @@ -364,42 +369,6 @@ form th { color: #363330; border-radius: 2px 2px 0 0; } -.box .box-title:hover .configure { - background: url("icons/cog.svg") no-repeat 4px 4px; - display: block; - float: right; - width: 1.75rem; - height: 1.75rem; - border-radius: 2px; - margin-left: 0.5rem; -} -.box .box-title:hover .configure .icon { - display: none; - border-radius: 3px; - vertical-align: middle; -} -.box .box-title:hover .configure:hover { - background: url("icons/cog-white.svg") no-repeat 4px 4px #ca7227; -} -.box .box-title form input { - width: 85%; -} -.box .box-title form .dropdown { - float: left; -} -.box .box-title form .dropdown a.dropdown-toggle { - padding: 0; - border-radius: 0; - background-image: url(icons/more.svg); - background-repeat: no-repeat; - background-position: left 8px; -} -.box .box-title form .dropdown a.dropdown-toggle img { - display: none; -} -.box .box-title .configure { - margin-left: 4px; -} .box .box-content { padding-right: 30px; } @@ -410,28 +379,23 @@ form th { border-bottom: 1px solid #f5f0ec; line-height: 1.7em; } -.box .box-content .item img { - margin-left: 0.75rem; +.box .box-content .item:last-child { + border-bottom: none; } -.box .box-content .item .configure { - background: url("icons/cog.svg") no-repeat 4px 4px; - display: block; - float: right; - width: 1.75rem; - height: 1.75rem; - border-radius: 2px; +.box .configure { margin-left: 0.5rem; -} -.box .box-content .item .configure .icon { - display: none; + padding: 0.25rem; border-radius: 3px; +} +.box .configure .icon { vertical-align: middle; } -.box .box-content .item .configure:hover { - background: url("icons/cog-white.svg") no-repeat 4px 4px #ca7227; +.box .configure:hover { + border-radius: 2px; + background-color: #ca7227; } -.box .box-content .item:last-child { - border-bottom: none; +.box .configure:hover .icon { + filter: brightness(3); } /*=== "Load more" part */ @@ -447,7 +411,7 @@ form th { color: #fff; } #bigMarkAsRead:hover .bigTick { - background: url(icons/tick-white.svg) center no-repeat; + filter: brightness(7); } #bigMarkAsRead .bigTick { margin: 0.5rem 0; @@ -459,36 +423,6 @@ form th { white-space: nowrap; } -.formLogin { - background: #fbf9f6; -} -.formLogin .header .configure { - padding-left: 1rem; -} -.formLogin .header .configure img { - margin-left: 0.5rem; -} -.formLogin .header .configure a.signin { - color: #fff; -} -.formLogin h1 { - color: #fff; -} -.formLogin form#crypto-form div { - margin-bottom: 1rem; -} -.formLogin form#crypto-form div label { - color: #d9ccbf; - font-size: 1rem; -} -.formLogin form#crypto-form div input { - background: #221f1d; -} -.formLogin form#crypto-form div input:focus { - background: #fcfaf8; - color: #363330; -} - /*=== DIVERS */ /*===========*/ .aside.aside_feed .nav-form input, @@ -574,8 +508,7 @@ form th { .stick input, .stick .btn { border-radius: 0; } -.stick .btn:first-child, -.stick input:first-child { +.stick .btn:first-child { border-radius: 0 5px 5px 0; } .stick .btn:last-child, .stick input:last-child, .stick .btn + .dropdown > .btn { @@ -750,7 +683,7 @@ form th { background: #fbf9f6; display: block; width: auto; - height: 3rem; + height: 3.5rem; table-layout: none; } .header .item { @@ -780,47 +713,51 @@ form th { color: #766556; background-color: #fff; } +.header .item.search input:focus ~ .btn, +.header .item.search input:hover ~ .btn { + background-color: #ca7227; +} +.header .item.search input:focus ~ .btn .icon, +.header .item.search input:hover ~ .btn .icon { + filter: brightness(3); +} .header .item.search .btn { width: 3rem; border-radius: 2px 0 0 2px; - background-color: #ca7227; - background-position: center; - background-repeat: no-repeat; - background-image: url(icons/magnifier.svg); + background-color: #f7f2ea; border-right-width: 0; min-height: 35px; } -.header .item.search .btn img { - display: none; +.header .item.search .btn .icon { + filter: invert(49%) sepia(13%) saturate(2426%) hue-rotate(346deg) brightness(99%) contrast(95%); } .header .item.search .btn:hover { background-color: #b7641d; } +.header .item.search .btn:hover .icon { + filter: brightness(3); +} .header .item.configure { - width: 2rem; + width: 3rem; position: absolute; left: 1rem; - top: 1.25rem; + top: 1rem; text-align: center; } .header .item.configure .btn { - padding: 0 0.5rem; + padding: 0.25rem 1rem; background-color: transparent; - background-position: center; - background-repeat: no-repeat; - background-image: url(icons/cog.svg); -} -.header .item.configure .btn img { - display: none; } + /*=== Body */ #global { - height: calc(100% - 4rem); + height: calc(100% - 3.5rem); } /*=== Prompt (centered) */ -.prompt input { - margin: 5px auto; +main.prompt { + background: #f5f0ec; + border-radius: 5px; } /*=== New article notification */ @@ -830,10 +767,6 @@ form th { text-align: center; } -#new-article:hover { - background: #b7641d; -} - #new-article > a { line-height: 3em; font-weight: bold; @@ -842,6 +775,7 @@ form th { #new-article > a:hover { text-decoration: none; + background: #b7641d; } /*=== Day indication */ @@ -891,10 +825,7 @@ form th { background-repeat: no-repeat; } .nav_menu .btn:hover { - background-color: #f5f0ec; -} -.nav_menu .stick { - background: #fcfaf8; + background-color: #e4d8cc; } .nav_menu .stick .btn { border-right-width: 0; @@ -910,32 +841,8 @@ form th { .nav_menu .stick .btn.active { background-color: #ca7227; } -.nav_menu .stick .btn img.icon { - display: none; -} -.nav_menu .stick .btn#toggle-read { - background-image: url(icons/read.svg); -} -.nav_menu .stick .btn#toggle-read.active { - background-image: url(icons/read-white.svg); -} -.nav_menu .stick .btn#toggle-unread { - background-image: url(icons/unread.svg); -} -.nav_menu .stick .btn#toggle-unread.active { - background-image: url(icons/unread-white.svg); -} -.nav_menu .stick .btn#toggle-starred { - background-image: url(icons/starred.svg); -} -.nav_menu .stick .btn#toggle-starred.active { - background-image: url(icons/starred-white.svg); -} -.nav_menu .stick .btn#toggle-non-starred { - background-image: url(icons/non-starred.svg); -} -.nav_menu .stick .btn#toggle-non-starred.active { - background-image: url(icons/non-starred-white.svg); +.nav_menu .stick .btn.active .icon { + filter: brightness(5); } .nav_menu .stick .btn.read_all { padding: 5px 16px; @@ -946,31 +853,13 @@ form th { .nav_menu .stick .btn.read_all:hover { background-color: #e4d8cc; } -.nav_menu .stick .btn.view-normal { - background-image: url(icons/view-list.svg); -} -.nav_menu .stick .btn.view-normal.active { - background-image: url(icons/view-list-white.svg); -} -.nav_menu .stick .btn.view-global { - background-image: url(icons/view-global.svg); -} -.nav_menu .stick .btn.view-global.active { - background-image: url(icons/view-global-white.svg); -} -.nav_menu .stick .btn.view-reader { - background-image: url(icons/view-reader.svg); -} -.nav_menu .stick .btn.view-reader.active { - background-image: url(icons/view-reader-white.svg); -} -.nav_menu .stick .btn.view-rss { - background-image: url(icons/rss.svg); -} .nav_menu .stick .dropdown a.dropdown-toggle { border-right-width: 0; background-image: url(icons/more.svg); } +.nav_menu .stick .dropdown a.dropdown-toggle .icon { + display: none; +} #dropdown-query ~ .dropdown-menu .dropdown-header .icon { vertical-align: middle; @@ -1372,27 +1261,6 @@ form th { /*=== MOBILE */ /*===========*/ @media (max-width: 840px) { - ul.nav .item { - width: 100%; - } - ul.nav .item img { - display: none; - } - ul.nav .item a { - box-sizing: border-box; - padding: 1rem 2.5rem 1rem 1rem; - background: url("../../themes/icons/logout.svg") no-repeat #efe3d3 97% center; - display: inline-block; - width: 100%; - color: #363330; - transition: all 0.2s ease-in-out; - } - ul.nav .item a:hover, ul.nav .item a:active { - background: url("../../themes/icons/logout.svg") no-repeat #f5633e 97% center; - text-decoration: none; - color: #fff; - } - .form-group .group-name { text-align: right; } @@ -1427,6 +1295,7 @@ form th { .header { padding: 0.5rem; + height: 8rem; } .header .item.search { display: block; @@ -1449,6 +1318,10 @@ form th { padding: 0.5rem 2rem; } + #global { + height: calc(100% - 8rem); + } + .post { padding-right: 1rem; padding-left: 1rem; @@ -1537,6 +1410,11 @@ html, body { font-size: 0.875rem; } +body.formLogin, +body.register { + background: #fbf9f6; +} + /*=== Links */ a, button.as-link { outline: none; diff --git a/p/themes/Ansum/ansum.scss b/p/themes/Ansum/ansum.scss index 0cf9a84f257..5457b15aa40 100644 --- a/p/themes/Ansum/ansum.scss +++ b/p/themes/Ansum/ansum.scss @@ -40,6 +40,11 @@ html, body { font-size: 0.875rem; } +body.formLogin, +body.register { + background: variables.$sid-bg; +} + /*=== Links */ a, button.as-link { outline: none; diff --git a/p/themes/Ansum/icons/cog-white.svg b/p/themes/Ansum/icons/cog-white.svg deleted file mode 100644 index 3df8c2d7075..00000000000 --- a/p/themes/Ansum/icons/cog-white.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/p/themes/Ansum/icons/cog.svg b/p/themes/Ansum/icons/configure.svg similarity index 86% rename from p/themes/Ansum/icons/cog.svg rename to p/themes/Ansum/icons/configure.svg index aa56d862b3b..04145eba5d7 100644 --- a/p/themes/Ansum/icons/cog.svg +++ b/p/themes/Ansum/icons/configure.svg @@ -1,19 +1,19 @@ + sodipodi:docname="configure.svg" + inkscape:version="1.2 (dc2aedaf03, 2022-05-15)" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> @@ -22,7 +22,6 @@ image/svg+xml - @@ -47,9 +46,13 @@ inkscape:window-x="0" inkscape:window-y="27" inkscape:window-maximized="1" - inkscape:current-layer="svg5" /> + inkscape:current-layer="svg5" + inkscape:showpageshadow="2" + inkscape:pagecheckerboard="0" + inkscape:deskcolor="#d1d1d1" /> + id="surface2" + transform="translate(0,-1)"> - - - - - image/svg+xml - - - - - - - - - - - diff --git a/p/themes/Ansum/icons/link-white.svg b/p/themes/Ansum/icons/link-white.svg deleted file mode 100644 index c6baadc852f..00000000000 --- a/p/themes/Ansum/icons/link-white.svg +++ /dev/null @@ -1,59 +0,0 @@ - - - - - - image/svg+xml - - - - - - - - - - diff --git a/p/themes/Ansum/icons/magnifier.svg b/p/themes/Ansum/icons/magnifier.svg deleted file mode 100644 index ae3732c69ba..00000000000 --- a/p/themes/Ansum/icons/magnifier.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/p/themes/Ansum/icons/non-starred-white.svg b/p/themes/Ansum/icons/non-starred-white.svg deleted file mode 100644 index 9bd48c801ce..00000000000 --- a/p/themes/Ansum/icons/non-starred-white.svg +++ /dev/null @@ -1,61 +0,0 @@ - - - - - - image/svg+xml - - - - - - - - - - - diff --git a/p/themes/Ansum/icons/read-grey.svg b/p/themes/Ansum/icons/read-grey.svg deleted file mode 100644 index 4857aca028b..00000000000 --- a/p/themes/Ansum/icons/read-grey.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/p/themes/Ansum/icons/read-white.svg b/p/themes/Ansum/icons/read-white.svg deleted file mode 100644 index 578facdc733..00000000000 --- a/p/themes/Ansum/icons/read-white.svg +++ /dev/null @@ -1,59 +0,0 @@ - - - - - - image/svg+xml - - - - - - - - - - - diff --git a/p/themes/Ansum/icons/rss-white.svg b/p/themes/Ansum/icons/rss-white.svg deleted file mode 100644 index b7fbf998742..00000000000 --- a/p/themes/Ansum/icons/rss-white.svg +++ /dev/null @@ -1,60 +0,0 @@ - - - - - - image/svg+xml - - - - - - - - - - - diff --git a/p/themes/Ansum/icons/starred-white.svg b/p/themes/Ansum/icons/starred-white.svg deleted file mode 100644 index 896dd1eebc2..00000000000 --- a/p/themes/Ansum/icons/starred-white.svg +++ /dev/null @@ -1,59 +0,0 @@ - - - - - - image/svg+xml - - - - - - - - - - - diff --git a/p/themes/Ansum/icons/tick-white.svg b/p/themes/Ansum/icons/tick-white.svg deleted file mode 100644 index 0bcc26f47e2..00000000000 --- a/p/themes/Ansum/icons/tick-white.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/p/themes/Ansum/icons/unread-grey.svg b/p/themes/Ansum/icons/unread-grey.svg deleted file mode 100644 index 1981cf92c86..00000000000 --- a/p/themes/Ansum/icons/unread-grey.svg +++ /dev/null @@ -1,59 +0,0 @@ - - - - - - image/svg+xml - - - - - - - - - - - diff --git a/p/themes/Ansum/icons/unread-white.svg b/p/themes/Ansum/icons/unread-white.svg deleted file mode 100644 index 6623924ab60..00000000000 --- a/p/themes/Ansum/icons/unread-white.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/p/themes/Ansum/icons/up-white.svg b/p/themes/Ansum/icons/up-white.svg deleted file mode 100644 index e19d1e1d962..00000000000 --- a/p/themes/Ansum/icons/up-white.svg +++ /dev/null @@ -1,59 +0,0 @@ - - - - - - image/svg+xml - - - - - - - - - - - diff --git a/p/themes/Ansum/icons/view-global-white.svg b/p/themes/Ansum/icons/view-global-white.svg deleted file mode 100644 index 950267f6ad5..00000000000 --- a/p/themes/Ansum/icons/view-global-white.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/p/themes/Ansum/icons/view-list-white.svg b/p/themes/Ansum/icons/view-list-white.svg deleted file mode 100644 index c76fc298bd3..00000000000 --- a/p/themes/Ansum/icons/view-list-white.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/p/themes/Ansum/icons/view-reader-white.svg b/p/themes/Ansum/icons/view-reader-white.svg deleted file mode 100644 index 70175c623d0..00000000000 --- a/p/themes/Ansum/icons/view-reader-white.svg +++ /dev/null @@ -1,59 +0,0 @@ - - - - - - image/svg+xml - - - - - - - - - - - From 03f5a42640928a11cbf5e7c63642c0e7eeca4706 Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Thu, 25 Aug 2022 23:16:24 +0200 Subject: [PATCH 0341/2479] Fix MariaDB case sensitivity (#4537) * Fix MariaDB case sensitivity #fix https://github.com/FreshRSS/FreshRSS/issues/4535 Collation regression from https://github.com/FreshRSS/FreshRSS/pull/4505 * faster * Minor syntax * Minor parentheses --- app/Models/EntryDAO.php | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/app/Models/EntryDAO.php b/app/Models/EntryDAO.php index 7cefc8c0e70..424f682a839 100644 --- a/app/Models/EntryDAO.php +++ b/app/Models/EntryDAO.php @@ -978,18 +978,26 @@ public static function sqlBooleanSearch(string $alias, $filters, int $level = 0) if ($filter->getSearch()) { foreach ($filter->getSearch() as $search_value) { - $sub_search .= 'AND (' . $alias . 'title LIKE ? OR ' . - (static::isCompressed() ? 'UNCOMPRESS(' . $alias . 'content_bin)' : '' . $alias . 'content') . ' LIKE ?) '; - $values[] = "%{$search_value}%"; - $values[] = "%{$search_value}%"; + if (static::isCompressed()) { // MySQL-only + $sub_search .= 'AND CONCAT(' . $alias . 'title, UNCOMPRESS(' . $alias . 'content_bin)) LIKE ? '; + $values[] = "%{$search_value}%"; + } else { + $sub_search .= 'AND (' . $alias . 'title LIKE ? OR ' . $alias . 'content LIKE ?) '; + $values[] = "%{$search_value}%"; + $values[] = "%{$search_value}%"; + } } } if ($filter->getNotSearch()) { foreach ($filter->getNotSearch() as $search_value) { - $sub_search .= 'AND ' . $alias . 'title NOT LIKE ? AND ' . - (static::isCompressed() ? 'UNCOMPRESS(' . $alias . 'content_bin)' : '' . $alias . 'content') . ' NOT LIKE ? '; - $values[] = "%{$search_value}%"; - $values[] = "%{$search_value}%"; + if (static::isCompressed()) { // MySQL-only + $sub_search .= 'AND CONCAT(' . $alias . 'title, UNCOMPRESS(' . $alias . 'content_bin)) NOT LIKE ? '; + $values[] = "%{$search_value}%"; + } else { + $sub_search .= 'AND ' . $alias . 'title NOT LIKE ? AND ' . $alias . 'content NOT LIKE ? '; + $values[] = "%{$search_value}%"; + $values[] = "%{$search_value}%"; + } } } From ef84343576f671163b11811f59294e72e1da2b36 Mon Sep 17 00:00:00 2001 From: Aidi Tan <3037661+aidistan@users.noreply.github.com> Date: Sat, 27 Aug 2022 17:11:41 +0800 Subject: [PATCH 0342/2479] Fix #4231 (#4541) Actually, there are two issues to be fixed: 1. Since `div.flux_content` has been changed to `article.flux_content` in HTML, we should address that in JS too. Or, to take one step further, select it using `.flux_content` directly. 2. For the article already at the first position, its `prev_article` would select `#new-article` whose css attribute `display` is `none` in most cases, which breaks the new position calculation. --- p/scripts/main.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/p/scripts/main.js b/p/scripts/main.js index 1619993c497..ad3224507ab 100644 --- a/p/scripts/main.js +++ b/p/scripts/main.js @@ -435,7 +435,7 @@ function toggleContent(new_active, old_active, skipping) { let new_pos = new_active.offsetParent.offsetTop + new_active.offsetTop - nav_menu_height; - if (prev_article && new_active.offsetTop - prev_article.offsetTop <= 150) { + if (prev_article && prev_article.offsetParent && new_active.offsetTop - prev_article.offsetTop <= 150) { new_pos = prev_article.offsetParent.offsetTop + prev_article.offsetTop - nav_menu_height; if (relative_move) { new_pos -= box_to_move.offsetTop; @@ -1103,7 +1103,7 @@ function init_stream(stream) { if (ev.target.closest('.content, .item.website, .item.link, .dropdown')) { return true; } - if (!context.sides_close_article && ev.target.matches('div.flux_content')) { + if (!context.sides_close_article && ev.target.matches('.flux_content')) { // setting for not-closing after clicking outside article area return false; } From 5e3f2a4ad53df1bacfb03c2499c19e36a020de2a Mon Sep 17 00:00:00 2001 From: maTh Date: Mon, 29 Aug 2022 08:38:19 +0200 Subject: [PATCH 0343/2479] Fix: swage extension config button (#4551) * add configure class to the slide-opener link * better cog color * cog color of extension configure --- app/views/helpers/extension/details.phtml | 2 +- p/themes/Swage/swage.css | 10 +++++++++- p/themes/Swage/swage.rtl.css | 10 +++++++++- p/themes/Swage/swage.scss | 15 ++++++++++++++- 4 files changed, 33 insertions(+), 4 deletions(-) diff --git a/app/views/helpers/extension/details.phtml b/app/views/helpers/extension/details.phtml index 08226e86c90..f200ce0d802 100644 --- a/app/views/helpers/extension/details.phtml +++ b/app/views/helpers/extension/details.phtml @@ -16,7 +16,7 @@ } if ($this->ext_details->getType() === 'user' || FreshRSS_Auth::hasAccess('admin')) {?> - + ext_details->getName() ?> diff --git a/p/themes/Swage/swage.css b/p/themes/Swage/swage.css index 1dd6cadc9df..7535bbc0e3a 100644 --- a/p/themes/Swage/swage.css +++ b/p/themes/Swage/swage.css @@ -273,6 +273,14 @@ form th { background: #f95c20 !important; } +.manage-list .configure .icon { + filter: brightness(0.4); + vertical-align: sub; +} +.manage-list .configure:hover { + filter: invert(56%) sepia(87%) saturate(1185%) hue-rotate(327deg) brightness(104%) contrast(96%); +} + .switch.active { background-color: #0062be; } @@ -542,7 +550,7 @@ form th { } .box .box-content .item .configure .icon { vertical-align: middle; - filter: invert(1); + filter: brightness(0.4); } .box .box-content .item .configure .icon:hover { filter: invert(56%) sepia(87%) saturate(1185%) hue-rotate(327deg) brightness(104%) contrast(96%); diff --git a/p/themes/Swage/swage.rtl.css b/p/themes/Swage/swage.rtl.css index e23c19cb760..15418f2cf79 100644 --- a/p/themes/Swage/swage.rtl.css +++ b/p/themes/Swage/swage.rtl.css @@ -273,6 +273,14 @@ form th { background: #f95c20 !important; } +.manage-list .configure .icon { + filter: brightness(0.4); + vertical-align: sub; +} +.manage-list .configure:hover { + filter: invert(56%) sepia(87%) saturate(1185%) hue-rotate(327deg) brightness(104%) contrast(96%); +} + .switch.active { background-color: #0062be; } @@ -542,7 +550,7 @@ form th { } .box .box-content .item .configure .icon { vertical-align: middle; - filter: invert(1); + filter: brightness(0.4); } .box .box-content .item .configure .icon:hover { filter: invert(56%) sepia(87%) saturate(1185%) hue-rotate(327deg) brightness(104%) contrast(96%); diff --git a/p/themes/Swage/swage.scss b/p/themes/Swage/swage.scss index a2afea81e85..0a3b66e74bb 100644 --- a/p/themes/Swage/swage.scss +++ b/p/themes/Swage/swage.scss @@ -343,6 +343,19 @@ form { } } +.manage-list { + .configure { + .icon { + filter: brightness(0.4); + vertical-align: sub; + } + + &:hover { + filter: invert(56%) sepia(87%) saturate(1185%) hue-rotate(327deg) brightness(104%) contrast(96%); + } + } +} + .switch.active { background-color: #0062be; @@ -680,7 +693,7 @@ form { .configure { .icon { vertical-align: middle; - filter: invert(1); + filter: brightness(0.4); &:hover { filter: invert(56%) sepia(87%) saturate(1185%) hue-rotate(327deg) brightness(104%) contrast(96%); From 10f29a736221a41549f9ab1de70e0c4d593958c7 Mon Sep 17 00:00:00 2001 From: maTh Date: Mon, 29 Aug 2022 08:38:35 +0200 Subject: [PATCH 0344/2479] Improve documentation: example code to configure SMTP (#4555) * add example code * just a changed line break * fix * Fix Co-authored-by: Alexandre Alapetite --- .../admins/05_Configuring_email_validation.md | 21 +++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/docs/en/admins/05_Configuring_email_validation.md b/docs/en/admins/05_Configuring_email_validation.md index 500a2b5aaa0..69a06b53f1e 100644 --- a/docs/en/admins/05_Configuring_email_validation.md +++ b/docs/en/admins/05_Configuring_email_validation.md @@ -26,12 +26,29 @@ To configure a SMTP server, you’ll have to modify the `data/config.php` file. First, change the `mailer` item to `smtp` (instead of the default `mail`). -Then, you should change the `smtp` options like you would do with a regular -email client. You can find the full list of options in the [`config.default.php` file](https://github.com/FreshRSS/FreshRSS/blob/edge/config.default.php). +Then, you should change the `smtp` options like you would do with a regular email client. +You can find the full list of options in the [`config.default.php` file](https://github.com/FreshRSS/FreshRSS/blob/edge/config.default.php). If you’re not sure to what each item is corresponding, you may find useful [the PHPMailer documentation](http://phpmailer.github.io/PHPMailer/classes/PHPMailer.PHPMailer.PHPMailer.html#properties) (which is used by FreshRSS under the hood). +### Example code to configure SMTP server + +```php + 'mailer' => 'smtp', // instead of 'mail' + 'smtp' => array( + 'hostname' => 'example.net', + 'host' => 'smtp.example.net', // URL to your smtp server + 'port' => 465, + 'auth' => true, + 'auth_type' => '', + 'username' => 'alice', // or maybe alice@example.net + 'password' => 'yoursecretpassword', + 'secure' => 'ssl', // '', 'ssl' or 'tls' + 'from' => 'alice@example.net', + ), +``` + ## Check your SMTP server is correctly configured To do so, once you’ve enabled the `force_email_validation` option, you only From 5c5aaafb0f7c0c9431bb3da5bd5d205a3d194382 Mon Sep 17 00:00:00 2001 From: Alwaysin Date: Mon, 29 Aug 2022 08:40:32 +0200 Subject: [PATCH 0345/2479] Update GNOME link (#4550) Co-authored-by: Adrien Demma --- app/i18n/cz/index.php | 2 +- app/i18n/de/index.php | 2 +- app/i18n/en-us/index.php | 2 +- app/i18n/en/index.php | 2 +- app/i18n/es/index.php | 2 +- app/i18n/fr/index.php | 2 +- app/i18n/he/index.php | 2 +- app/i18n/it/index.php | 2 +- app/i18n/ja/index.php | 2 +- app/i18n/ko/index.php | 2 +- app/i18n/nl/index.php | 2 +- app/i18n/oc/index.php | 2 +- app/i18n/pl/index.php | 2 +- app/i18n/pt-br/index.php | 2 +- app/i18n/ru/index.php | 2 +- app/i18n/sk/index.php | 2 +- app/i18n/tr/index.php | 2 +- app/i18n/zh-cn/index.php | 2 +- 18 files changed, 18 insertions(+), 18 deletions(-) diff --git a/app/i18n/cz/index.php b/app/i18n/cz/index.php index b92fc43180b..dfa00c33c59 100644 --- a/app/i18n/cz/index.php +++ b/app/i18n/cz/index.php @@ -16,7 +16,7 @@ 'agpl3' => 'AGPL 3', // IGNORE 'bugs_reports' => 'Hlášení chyb', 'credits' => 'Poděkování', - 'credits_content' => 'Některé designové prvky pocházejí z Bootstrap, FreshRSS ale tuto platformu nevyužívá. Ikony pocházejí z projektu GNOME. Písmo Open Sans vytvořil Steve Matteson. FreshRSS je založeno na PHP framework Minz.', + 'credits_content' => 'Některé designové prvky pocházejí z Bootstrap, FreshRSS ale tuto platformu nevyužívá. Ikony pocházejí z projektu GNOME. Písmo Open Sans vytvořil Steve Matteson. FreshRSS je založeno na PHP framework Minz.', 'freshrss_description' => 'FreshRSS je čtečka kanálů RSS určená k provozu na vlastním serveru, podobná Kriss Feed nebo Leed. Je to nenáročný a jednoduchý, zároveň ale mocný a konfigurovatelný nástroj.', 'github' => 'na Github', 'license' => 'Licence', diff --git a/app/i18n/de/index.php b/app/i18n/de/index.php index 82fc6bec231..aa526f725e4 100644 --- a/app/i18n/de/index.php +++ b/app/i18n/de/index.php @@ -16,7 +16,7 @@ 'agpl3' => 'AGPL 3', // IGNORE 'bugs_reports' => 'Fehlerberichte', 'credits' => 'Mitwirkende', - 'credits_content' => 'Einige Designelemente stammen von Bootstrap, obwohl FreshRSS dieses Framework nicht nutzt. Icons stammen vom GNOME project. Open Sans Font wurde von Steve Matteson erstellt. FreshRSS basiert auf Minz, einem PHP-Framework.', + 'credits_content' => 'Einige Designelemente stammen von Bootstrap, obwohl FreshRSS dieses Framework nicht nutzt. Icons stammen vom GNOME project. Open Sans Font wurde von Steve Matteson erstellt. FreshRSS basiert auf Minz, einem PHP-Framework.', 'freshrss_description' => 'FreshRSS ist ein RSS-Feedsaggregator zum selbst hosten wie zum Beispiel Kriss Feed oder Leed. Er ist leicht und einfach zu handhaben und gleichzeitig ein leistungsstarkes und konfigurierbares Werkzeug.', 'github' => 'auf Github', 'license' => 'Lizenz', diff --git a/app/i18n/en-us/index.php b/app/i18n/en-us/index.php index 18531bf3870..1cb31b10e5c 100644 --- a/app/i18n/en-us/index.php +++ b/app/i18n/en-us/index.php @@ -16,7 +16,7 @@ 'agpl3' => 'AGPL 3', // IGNORE 'bugs_reports' => 'Bug reports', // IGNORE 'credits' => 'Credits', // IGNORE - 'credits_content' => 'Some design elements come from Bootstrap although FreshRSS doesn’t use this framework. Icons come from the GNOME project. Open Sans font police has been created by Steve Matteson. FreshRSS is based on Minz, a PHP framework.', // IGNORE + 'credits_content' => 'Some design elements come from Bootstrap although FreshRSS doesn’t use this framework. Icons come from the GNOME project. Open Sans font police has been created by Steve Matteson. FreshRSS is based on Minz, a PHP framework.', // IGNORE 'freshrss_description' => 'FreshRSS is a self-hostable RSS aggregator and reader. It allows you to read and follow several news websites at a glance without the need to browse from one website to another. FreshRSS is lightweight, configurable, and easy to use.', // IGNORE 'github' => 'on Github', // IGNORE 'license' => 'License', // IGNORE diff --git a/app/i18n/en/index.php b/app/i18n/en/index.php index af431739dce..272dae438c8 100644 --- a/app/i18n/en/index.php +++ b/app/i18n/en/index.php @@ -16,7 +16,7 @@ 'agpl3' => 'AGPL 3', 'bugs_reports' => 'Bug reports', 'credits' => 'Credits', - 'credits_content' => 'Some design elements come from Bootstrap although FreshRSS doesn’t use this framework. Icons come from the GNOME project. Open Sans font police has been created by Steve Matteson. FreshRSS is based on Minz, a PHP framework.', + 'credits_content' => 'Some design elements come from Bootstrap although FreshRSS doesn’t use this framework. Icons come from the GNOME project. Open Sans font police has been created by Steve Matteson. FreshRSS is based on Minz, a PHP framework.', 'freshrss_description' => 'FreshRSS is a self-hostable RSS aggregator and reader. It allows you to read and follow several news websites at a glance without the need to browse from one website to another. FreshRSS is lightweight, configurable, and easy to use.', 'github' => 'on Github', 'license' => 'License', diff --git a/app/i18n/es/index.php b/app/i18n/es/index.php index 7aebc4d70ec..610f677ed4f 100755 --- a/app/i18n/es/index.php +++ b/app/i18n/es/index.php @@ -16,7 +16,7 @@ 'agpl3' => 'AGPL 3', // IGNORE 'bugs_reports' => 'Informe de fallos', 'credits' => 'Créditos', - 'credits_content' => 'Aunque FreshRSS no usa ese entorno, algunos elementos del diseño están obtenidos de Bootstrap. Los Iconos han sido obtenidos del proyecto GNOME. La fuente Open Sans es una creación de Steve Matteson. FreshRSS usa el entorno PHP Minz.', + 'credits_content' => 'Aunque FreshRSS no usa ese entorno, algunos elementos del diseño están obtenidos de Bootstrap. Los Iconos han sido obtenidos del proyecto GNOME. La fuente Open Sans es una creación de Steve Matteson. FreshRSS usa el entorno PHP Minz.', 'freshrss_description' => 'FreshRSS es un agregador de fuentes RSS de alojamiento privado al estilo de Kriss Feed o Leed. Es una herramienta potente, pero ligera y fácil de usar y configurar.', 'github' => 'en Github', 'license' => 'Licencia', diff --git a/app/i18n/fr/index.php b/app/i18n/fr/index.php index 6430a9cf132..d8d4cce10cb 100644 --- a/app/i18n/fr/index.php +++ b/app/i18n/fr/index.php @@ -16,7 +16,7 @@ 'agpl3' => 'AGPL 3', // IGNORE 'bugs_reports' => 'Rapports de bugs', 'credits' => 'Crédits', - 'credits_content' => 'Des éléments de design sont issus du projet Bootstrap bien que FreshRSS n’utilise pas ce framework. Les icônes sont issues du projet GNOME. La police Open Sans utilisée a été créée par Steve Matteson. FreshRSS repose sur Minz, un framework PHP.', + 'credits_content' => 'Des éléments de design sont issus du projet Bootstrap bien que FreshRSS n’utilise pas ce framework. Les icônes sont issues du projet GNOME. La police Open Sans utilisée a été créée par Steve Matteson. FreshRSS repose sur Minz, un framework PHP.', 'freshrss_description' => 'FreshRSS est un agrégateur de flux RSS à auto-héberger à l’image de Kriss Feed ou Leed. Il se veut léger et facile à prendre en main tout en étant un outil puissant et paramétrable.', 'github' => 'sur Github', 'license' => 'Licence', diff --git a/app/i18n/he/index.php b/app/i18n/he/index.php index 8b204fbc922..24d4843ec1f 100644 --- a/app/i18n/he/index.php +++ b/app/i18n/he/index.php @@ -16,7 +16,7 @@ 'agpl3' => 'AGPL 3', // IGNORE 'bugs_reports' => 'דיווח באגים', 'credits' => 'קרדיטים', - 'credits_content' => 'מאפייני עיצוב מסויימים הגיעו מ Bootstrap אף על פי ש FreshRSS אינו משתמש בתשתית הזו. סמלילים הגיעו מ פרוייקט GNOME . Open Sans הגופן police נוצר על ידי Steve Matteson. Favicons נאספים בעזרת getFavicon API. FreshRSS מבוסס על Minz, תשתית PHP.', + 'credits_content' => 'מאפייני עיצוב מסויימים הגיעו מ Bootstrap אף על פי ש FreshRSS אינו משתמש בתשתית הזו. סמלילים הגיעו מ פרוייקט GNOME . Open Sans הגופן police נוצר על ידי Steve Matteson. Favicons נאספים בעזרת getFavicon API. FreshRSS מבוסס על Minz, תשתית PHP.', 'freshrss_description' => 'FreshRSS הוא קורא RSS לאחסון עצמי בדומה ל Kriss Feed או Leed. אינו צורך משאבים רבים, וקל לתפעול אך בו בזמן חזק וניתן להתאמה.', 'github' => 'בגיטהאב', 'license' => 'רישיון', diff --git a/app/i18n/it/index.php b/app/i18n/it/index.php index f89ddb40455..4ea30d8bb99 100644 --- a/app/i18n/it/index.php +++ b/app/i18n/it/index.php @@ -16,7 +16,7 @@ 'agpl3' => 'AGPL 3', // IGNORE 'bugs_reports' => 'Bugs', 'credits' => 'Crediti', - 'credits_content' => 'Alcuni elementi di design provengono da Bootstrap sebbene FreshRSS non usi questo framework. Le icone provengono dal progetto GNOME. Il carattere Open Sans è stato creato da Steve Matteson. FreshRSS è basato su Minz, un framework PHP.', + 'credits_content' => 'Alcuni elementi di design provengono da Bootstrap sebbene FreshRSS non usi questo framework. Le icone provengono dal progetto GNOME. Il carattere Open Sans è stato creato da Steve Matteson. FreshRSS è basato su Minz, un framework PHP.', 'freshrss_description' => 'FreshRSS è un aggregatore di feeds RSS da installare sul proprio host come Kriss Feed o Leed. Leggero e facile da mantenere pur essendo molto configurabile e potente.', 'github' => 'su Github', 'license' => 'Licenza', diff --git a/app/i18n/ja/index.php b/app/i18n/ja/index.php index af70f25de31..10421c990e4 100644 --- a/app/i18n/ja/index.php +++ b/app/i18n/ja/index.php @@ -16,7 +16,7 @@ 'agpl3' => 'AGPL 3', // IGNORE 'bugs_reports' => 'バグレポート', 'credits' => 'クレジット', - 'credits_content' => 'いくつかのデザイン要素は Bootstrapから来ています。しかしFreshRSSはこのフレームワークを使用していません。 アイコンGNOME プロジェクトから作られていますOpen Sans フォントは Steve Matteson によって作成されました。 FreshRSS はMinz,PHP フレームワークをもとにしています。', + 'credits_content' => 'いくつかのデザイン要素は Bootstrapから来ています。しかしFreshRSSはこのフレームワークを使用していません。 アイコンGNOME プロジェクトから作られていますOpen Sans フォントは Steve Matteson によって作成されました。 FreshRSS はMinz,PHP フレームワークをもとにしています。', 'freshrss_description' => 'FreshRSSは Kriss FeedLeedのようなセルフホストできるRSSフィード収集ツールです。強力なツールになっており、軽量で簡単に使え、豊富な設定が特徴です。', 'github' => 'Githubへお願いします', 'license' => 'ライセンス', diff --git a/app/i18n/ko/index.php b/app/i18n/ko/index.php index c13465e9407..e312968456b 100644 --- a/app/i18n/ko/index.php +++ b/app/i18n/ko/index.php @@ -16,7 +16,7 @@ 'agpl3' => 'AGPL 3', // IGNORE 'bugs_reports' => '버그 제보하기', 'credits' => '크레딧', - 'credits_content' => 'FreshRSS는 Bootstrap 프레임워크를 사용하진 않지만, 일부 디자인 요소를 가져왔습니다. 아이콘들GNOME 프로젝트에서 가져왔습니다. Open Sans 글꼴은 Steve Matteson가 제작하였습니다. FreshRSS는 PHP 프레임워크인 Minz에 기반하고 있습니다.', + 'credits_content' => 'FreshRSS는 Bootstrap 프레임워크를 사용하진 않지만, 일부 디자인 요소를 가져왔습니다. 아이콘들GNOME 프로젝트에서 가져왔습니다. Open Sans 글꼴은 Steve Matteson가 제작하였습니다. FreshRSS는 PHP 프레임워크인 Minz에 기반하고 있습니다.', 'freshrss_description' => 'FreshRSS는 Kriss Feed 또는 Leed와 같은 셀프 호스팅 기반의 RSS 피드 수집기입니다. FreshRSS는 강력하고 다양한 설정을 할 수 있으면서도 가볍고 사용하기 쉽습니다.', 'github' => 'Github 저장소에 제보', 'license' => '라이센스', diff --git a/app/i18n/nl/index.php b/app/i18n/nl/index.php index 79a600ce506..6a8f9e17992 100644 --- a/app/i18n/nl/index.php +++ b/app/i18n/nl/index.php @@ -16,7 +16,7 @@ 'agpl3' => 'AGPL 3', // IGNORE 'bugs_reports' => 'Rapporteer fouten', 'credits' => 'Waarderingen', - 'credits_content' => 'Sommige ontwerp elementen komen van Bootstrap alhoewel FreshRSS dit raamwerk niet gebruikt. Pictogrammen komen van het GNOME project. De Open Sans font police is gemaakt door Steve Matteson. FreshRSS is gebaseerd op Minz, een PHP raamwerk. Nederlandse vertaling door Wanabo, NieuwsKop.be. Link naar de Nederlandse vertaling, FreshRSS-Dutch-translation.', + 'credits_content' => 'Sommige ontwerp elementen komen van Bootstrap alhoewel FreshRSS dit raamwerk niet gebruikt. Pictogrammen komen van het GNOME project. De Open Sans font police is gemaakt door Steve Matteson. FreshRSS is gebaseerd op Minz, een PHP raamwerk. Nederlandse vertaling door Wanabo, NieuwsKop.be. Link naar de Nederlandse vertaling, FreshRSS-Dutch-translation.', 'freshrss_description' => 'FreshRSS is een RSS-feed aggregator om zelf te hosten, net als Kriss Feed of Leed. Het gebruikt weinig systeembronnen en is makkelijk te beheren terwijl het een krachtig en makkelijk te configureren programma is.', 'github' => 'op Github', 'license' => 'Licentie', diff --git a/app/i18n/oc/index.php b/app/i18n/oc/index.php index 5b3d4414041..e00033345a6 100644 --- a/app/i18n/oc/index.php +++ b/app/i18n/oc/index.php @@ -16,7 +16,7 @@ 'agpl3' => 'AGPL 3', // IGNORE 'bugs_reports' => 'Senhalament de problèmas', 'credits' => 'Crèdits', - 'credits_content' => 'Unes elements de l’estil venon del projècte Bootstrap encara que FreshRSS utilize pas aqueste framework. Las icònas venon del projècte GNOME. La polissa Open Sans utilizada foguèt creada per en Steve Matteson. FreshRSS es basat sus Minz, un framework PHP.', + 'credits_content' => 'Unes elements de l’estil venon del projècte Bootstrap encara que FreshRSS utilize pas aqueste framework. Las icònas venon del projècte GNOME. La polissa Open Sans utilizada foguèt creada per en Steve Matteson. FreshRSS es basat sus Minz, un framework PHP.', 'freshrss_description' => 'FreshRSS es un agregador de fluxes RSS per l’auto-albergar tal coma Kriss Feed o Leed. Sa tòca es d’èsser leugièr e de bon utilizar de prima abòrd mas tanben d’èsser potent e parametrable.', 'github' => 'sus Github', 'license' => 'Licéncia', diff --git a/app/i18n/pl/index.php b/app/i18n/pl/index.php index c09d9132e5a..0a86963c6d9 100644 --- a/app/i18n/pl/index.php +++ b/app/i18n/pl/index.php @@ -16,7 +16,7 @@ 'agpl3' => 'AGPL 3', // IGNORE 'bugs_reports' => 'Zgłaszanie problemów', 'credits' => 'Uznanie autorstwa', - 'credits_content' => 'Niektóre elementy designu pochodzą z Bootstrapa, przy czym FreshRSS nie używa tego frameworku. Ikony zostały pierwotnie stworzone dla projektu GNOME. Font Open Sans jest autorstwa Steve’a Mattesona. FreshRSS opiera się na Minz, frameworku PHP.', + 'credits_content' => 'Niektóre elementy designu pochodzą z Bootstrapa, przy czym FreshRSS nie używa tego frameworku. Ikony zostały pierwotnie stworzone dla projektu GNOME. Font Open Sans jest autorstwa Steve’a Mattesona. FreshRSS opiera się na Minz, frameworku PHP.', 'freshrss_description' => 'FreshRSS jest agregatorem kanałów RSS przeznaczonym do zainstalowania na własnym serwerze, podobnie jak Kriss Feed, bądź Leed. Jest lekki i łatwy do schowania w kieszeni, pozostając przy tym potężnym i konfigurowalnym narzędziem.', 'github' => 'na Githubie', 'license' => 'Licencja', diff --git a/app/i18n/pt-br/index.php b/app/i18n/pt-br/index.php index efff9e6852b..d2dbf0b3465 100644 --- a/app/i18n/pt-br/index.php +++ b/app/i18n/pt-br/index.php @@ -16,7 +16,7 @@ 'agpl3' => 'AGPL 3', // IGNORE 'bugs_reports' => 'Reportar Bugs', 'credits' => 'Créditos', - 'credits_content' => 'Alguns elementos de design vieram do Bootstrap Embora FreshRRS não utiliza este framework. Ícones vieram do GNOME project. Open Sans font police foi criada por Steve Matteson. FreshRSS é baseado no Minz, um framework PHP.', + 'credits_content' => 'Alguns elementos de design vieram do Bootstrap Embora FreshRRS não utiliza este framework. Ícones vieram do GNOME project. Open Sans font police foi criada por Steve Matteson. FreshRSS é baseado no Minz, um framework PHP.', 'freshrss_description' => 'FreshRSS é um RSS feeds aggregator para um host próprio como o Kriss Feed ou Leed. É leve e fácil de utilizar enquanto é uma ferramenta poderosa e configurável. ', 'github' => 'no Github', 'license' => 'licença', diff --git a/app/i18n/ru/index.php b/app/i18n/ru/index.php index f0961017ee3..f99fedf05da 100644 --- a/app/i18n/ru/index.php +++ b/app/i18n/ru/index.php @@ -16,7 +16,7 @@ 'agpl3' => 'AGPL 3', // IGNORE 'bugs_reports' => 'Баг репорты', 'credits' => 'Авторство', - 'credits_content' => 'Некоторые элементы дизайна взяты из Bootstrap, хотя FreshRSS не использует этот фреймворк. Иконки взяты из проекта GNOME. Шрифт Open Sans создан Стивом Мэттесоном. FreshRSS основан на Minz, PHP-фреймворке.', + 'credits_content' => 'Некоторые элементы дизайна взяты из Bootstrap, хотя FreshRSS не использует этот фреймворк. Иконки взяты из проекта GNOME. Шрифт Open Sans создан Стивом Мэттесоном. FreshRSS основан на Minz, PHP-фреймворке.', 'freshrss_description' => 'FreshRSS — агрегатор RSS-лент для размещения на своём сервере подобно Kriss Feed или Leed. Лёгкий и простой в использовании, будучи при этом мощным и настраиваемым инструментом.', 'github' => 'в Github', 'license' => 'Лицензия', diff --git a/app/i18n/sk/index.php b/app/i18n/sk/index.php index 043467dec0e..916fadbc8c6 100644 --- a/app/i18n/sk/index.php +++ b/app/i18n/sk/index.php @@ -16,7 +16,7 @@ 'agpl3' => 'AGPL 3', // IGNORE 'bugs_reports' => 'Nahlásiť chybu', 'credits' => 'Poďakovanie', - 'credits_content' => 'Niektoré časti vzhľadu pochádzajú z Bootstrapu, aj keď FreshRSS tento framework nepoužíva. Ikony sú z GNOME project. Font Open Sans zabezpečil Steve Matteson. FreshRSS je založený na PHP frameworku Minz.', + 'credits_content' => 'Niektoré časti vzhľadu pochádzajú z Bootstrapu, aj keď FreshRSS tento framework nepoužíva. Ikony sú z GNOME project. Font Open Sans zabezpečil Steve Matteson. FreshRSS je založený na PHP frameworku Minz.', 'freshrss_description' => 'FreshRSS je čítačka RSS kanálov, ktorú môžete nasadiť na vlastný server podobne ako Kriss Feed alebo Leed. Ide o jednoduchý a zároveň dobre nastaviteľný nástroj.', 'github' => 'na Githube', 'license' => 'Licencia', diff --git a/app/i18n/tr/index.php b/app/i18n/tr/index.php index ceeb36e7ada..9b009b28796 100644 --- a/app/i18n/tr/index.php +++ b/app/i18n/tr/index.php @@ -16,7 +16,7 @@ 'agpl3' => 'AGPL 3', // IGNORE 'bugs_reports' => 'Hata raporu', 'credits' => 'Tanıtım', - 'credits_content' => 'Bu frameworkü kullanmamasına rağmen FreshRSS bazı tasarım ögelerini Bootstrap dan almıştır. İkonlar GNOME projesinden alınmıştır. Open Sans yazı tipi Steve Matteson tarafından oluşturulmuştur. FreshRSS bir PHP framework olan Minz i temel alır.', + 'credits_content' => 'Bu frameworkü kullanmamasına rağmen FreshRSS bazı tasarım ögelerini Bootstrap dan almıştır. İkonlar GNOME projesinden alınmıştır. Open Sans yazı tipi Steve Matteson tarafından oluşturulmuştur. FreshRSS bir PHP framework olan Minz i temel alır.', 'freshrss_description' => 'FreshRSS Kriss Feed veya Leed gibi kendi hostunuzda çalışan bir RSS akış toplayıcısıdır. Güçlü ve yapılandırılabilir araçlarıyla basit ve kullanımı kolay bir uygulamadır.', 'github' => 'Github sayfası', 'license' => 'Lisans', diff --git a/app/i18n/zh-cn/index.php b/app/i18n/zh-cn/index.php index 3996ee7c9f5..91614010755 100644 --- a/app/i18n/zh-cn/index.php +++ b/app/i18n/zh-cn/index.php @@ -16,7 +16,7 @@ 'agpl3' => 'AGPL 3', // IGNORE 'bugs_reports' => '报告错误', 'credits' => '致谢', - 'credits_content' => '某些设计元素来自于 Bootstrap ,尽管 FreshRSS 并没有使用此框架。图标 来自于 GNOME 项目Open Sans 字体出自 Steve Matteson 之手。FreshRSS 基于 PHP 框架 Minz。', + 'credits_content' => '某些设计元素来自于 Bootstrap ,尽管 FreshRSS 并没有使用此框架。图标 来自于 GNOME 项目Open Sans 字体出自 Steve Matteson 之手。FreshRSS 基于 PHP 框架 Minz。', 'freshrss_description' => 'FreshRSS 是一个自托管的 RSS 聚合服务,类似于 Kriss FeedLeed。 它不仅轻快又易用,而且强大又易于配置。', 'github' => 'Github Issues', 'license' => '授权', From c418c8a450b9e9277eaf631be705915237384285 Mon Sep 17 00:00:00 2001 From: maTh Date: Mon, 29 Aug 2022 08:41:13 +0200 Subject: [PATCH 0346/2479] Improved: Mapco/Ansum headline sizes (#4549) * Ansum Theme * Mapco Theme --- p/themes/Ansum/_configuration.scss | 6 +++++- p/themes/Ansum/ansum.css | 5 ++++- p/themes/Ansum/ansum.rtl.css | 5 ++++- p/themes/Mapco/_configuration.scss | 6 +++++- p/themes/Mapco/mapco.css | 5 ++++- p/themes/Mapco/mapco.rtl.css | 5 ++++- 6 files changed, 26 insertions(+), 6 deletions(-) diff --git a/p/themes/Ansum/_configuration.scss b/p/themes/Ansum/_configuration.scss index a31362730b6..f33451c68dd 100644 --- a/p/themes/Ansum/_configuration.scss +++ b/p/themes/Ansum/_configuration.scss @@ -20,12 +20,16 @@ h1, h2 { color: variables.$main-font-color; - font-size: 3rem; + font-size: 2rem; margin-top: 1.75rem; font-weight: 300; line-height: 1.2em; } + h2 { + font-size: 1.5rem; + } + a[href="./"] { // This is the "Back to your feeds" button. margin: 0; diff --git a/p/themes/Ansum/ansum.css b/p/themes/Ansum/ansum.css index 1f42beca43b..ac35b263ba0 100644 --- a/p/themes/Ansum/ansum.css +++ b/p/themes/Ansum/ansum.css @@ -1144,11 +1144,14 @@ main.prompt { } .post h1, .post h2 { color: #363330; - font-size: 3rem; + font-size: 2rem; margin-top: 1.75rem; font-weight: 300; line-height: 1.2em; } +.post h2 { + font-size: 1.5rem; +} .post a[href="./"] { margin: 0; padding: 0.75rem 1.5rem; diff --git a/p/themes/Ansum/ansum.rtl.css b/p/themes/Ansum/ansum.rtl.css index e77b0468f5a..c678ffc51e7 100644 --- a/p/themes/Ansum/ansum.rtl.css +++ b/p/themes/Ansum/ansum.rtl.css @@ -1144,11 +1144,14 @@ main.prompt { } .post h1, .post h2 { color: #363330; - font-size: 3rem; + font-size: 2rem; margin-top: 1.75rem; font-weight: 300; line-height: 1.2em; } +.post h2 { + font-size: 1.5rem; +} .post a[href="./"] { margin: 0; padding: 0.75rem 1.5rem; diff --git a/p/themes/Mapco/_configuration.scss b/p/themes/Mapco/_configuration.scss index d14d54a5eb3..1ac695f1507 100644 --- a/p/themes/Mapco/_configuration.scss +++ b/p/themes/Mapco/_configuration.scss @@ -15,12 +15,16 @@ h1, h2 { color: variables.$main-font-color; - font-size: 3rem; + font-size: 2rem; margin-top: 1.75rem; font-weight: 300; line-height: 1.2em; } + h2 { + font-size: 1.5rem; + } + a[href="./"] { // This is the "Back to your feeds" button. margin: 0; padding: 0.75rem 1.5rem; diff --git a/p/themes/Mapco/mapco.css b/p/themes/Mapco/mapco.css index 950b7593fc6..92105c9c7e2 100644 --- a/p/themes/Mapco/mapco.css +++ b/p/themes/Mapco/mapco.css @@ -1171,11 +1171,14 @@ main.prompt { } .post h1, .post h2 { color: #303136; - font-size: 3rem; + font-size: 2rem; margin-top: 1.75rem; font-weight: 300; line-height: 1.2em; } +.post h2 { + font-size: 1.5rem; +} .post a[href="./"] { margin: 0; padding: 0.75rem 1.5rem; diff --git a/p/themes/Mapco/mapco.rtl.css b/p/themes/Mapco/mapco.rtl.css index d53234a9b45..a13040b0def 100644 --- a/p/themes/Mapco/mapco.rtl.css +++ b/p/themes/Mapco/mapco.rtl.css @@ -1171,11 +1171,14 @@ main.prompt { } .post h1, .post h2 { color: #303136; - font-size: 3rem; + font-size: 2rem; margin-top: 1.75rem; font-weight: 300; line-height: 1.2em; } +.post h2 { + font-size: 1.5rem; +} .post a[href="./"] { margin: 0; padding: 0.75rem 1.5rem; From d5826a0d1671da9b48cd9e84e69dcd8b9cf7da19 Mon Sep 17 00:00:00 2001 From: Mejans <61360811+Mejans@users.noreply.github.com> Date: Mon, 29 Aug 2022 08:42:01 +0200 Subject: [PATCH 0347/2479] lang: update Occitan (#4548) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * MàJ Occitan * MàJ Occitan * MàJ Occitan * MàJ Occitan * Update admin.php * Update sub.php * Update sub.php * tab instead of white space for comments Co-authored-by: maTh --- app/i18n/oc/admin.php | 14 ++++----- app/i18n/oc/conf.php | 56 +++++++++++++++++----------------- app/i18n/oc/gen.php | 6 ++-- app/i18n/oc/sub.php | 70 +++++++++++++++++++++---------------------- 4 files changed, 73 insertions(+), 73 deletions(-) diff --git a/app/i18n/oc/admin.php b/app/i18n/oc/admin.php index 0291bcc89f4..2ba5b909843 100644 --- a/app/i18n/oc/admin.php +++ b/app/i18n/oc/admin.php @@ -170,18 +170,18 @@ 'registration' => array( 'number' => 'Nombre max de comptes', 'select' => array( - 'label' => 'Registration form', // TODO + 'label' => 'Formulari d’inscripcion', 'option' => array( - 'noform' => 'Disabled: No registration form', // TODO - 'nolimit' => 'Enabled: No limit of accounts', // TODO - 'setaccountsnumber' => 'Set max. number of accounts', // TODO + 'noform' => 'Desactivat : cap de formulari d’inscripcion', + 'nolimit' => 'Activat : cap de limit de comptes', + 'setaccountsnumber' => 'Definir lo numbre max. de comptes', ), ), 'status' => array( - 'disabled' => 'Form disabled', // TODO - 'enabled' => 'Form enabled', // TODO + 'disabled' => 'Formulari desactivat', + 'enabled' => 'Formulari activat', ), - 'title' => 'User registration form', // TODO + 'title' => 'Formulari d’inscripcion utilizaire', ), ), 'update' => array( diff --git a/app/i18n/oc/conf.php b/app/i18n/oc/conf.php index 207681bc657..c1834e9aacc 100644 --- a/app/i18n/oc/conf.php +++ b/app/i18n/oc/conf.php @@ -68,9 +68,9 @@ ), 'logs' => array( 'loglist' => array( - 'level' => 'Log Level', // TODO - 'message' => 'Log Message', // TODO - 'timestamp' => 'Timestamp', // TODO + 'level' => 'Nivèl de log', + 'message' => 'Messatge de log', + 'timestamp' => 'Orodatatge', ), 'pagination' => array( 'first' => 'Debuta', @@ -139,28 +139,28 @@ 'always_show_favorites' => 'Mostrar totes los articles dels favorits per defaut', 'article' => array( 'authors_date' => array( - '_' => 'Authors and date', // TODO - 'both' => 'In header and footer', // TODO - 'footer' => 'In footer', // TODO - 'header' => 'In header', // TODO - 'none' => 'None', // TODO + '_' => 'Autors e data', + 'both' => 'Dins l’entèsta e lo bas de pagina', + 'footer' => 'Al pè de pagina', + 'header' => 'Dins l’entèsta', + 'none' => 'Cap', ), 'feed_name' => array( - 'above_title' => 'Above title/tags', // TODO - 'none' => 'None', // TODO - 'with_authors' => 'In authors and date row', // TODO + 'above_title' => 'Al dessús títol/etiquetas', + 'none' => 'Cap', + 'with_authors' => 'Dins la linha autors e data', ), - 'feed_title' => 'Feed title', // TODO + 'feed_title' => 'Títol del flux', 'tags' => array( - '_' => 'Tags', // TODO - 'both' => 'In header and footer', // TODO - 'footer' => 'In footer', // TODO - 'header' => 'In header', // TODO - 'none' => 'None', // TODO + '_' => 'Etiquetas', + 'both' => 'Dins l’entèsta e lo bas de pagina', + 'footer' => 'Al pè de pagina', + 'header' => 'Dins l’entèsta', + 'none' => 'Cap', ), 'tags_max' => array( - '_' => 'Max number of tags shown', // TODO - 'help' => '0 means: show all tags and do not collapse them', // TODO + '_' => 'Nombre max d’etiquetas afichadas', + 'help' => '0 significa : mostrar totas las etiquetas e las plegar pas', ), ), 'articles_per_page' => 'Nombre d’articles per pagina', @@ -170,12 +170,12 @@ 'display_articles_unfolded' => 'Mostrar los articles desplegats per defaut', 'display_categories_unfolded' => 'Categorias a desplegar', 'headline' => array( - 'articles' => 'Articles: Open/Close', // TODO - 'articles_header_footer' => 'Articles: header/footer', // TODO - 'categories' => 'Left navigation: Categories', // TODO - 'mark_as_read' => 'Mark article as read', // TODO - 'misc' => 'Miscellaneous', // TODO - 'view' => 'View', // TODO + 'articles' => 'Articles : Dobrir/Tampar', + 'articles_header_footer' => 'Articles : entèsta/pè de pagina', + 'categories' => 'Navegacion esquèrra : categorias', + 'mark_as_read' => 'Marcar los articles coma legits', + 'misc' => 'Divèrs', + 'view' => 'Vista', ), 'hide_read_feeds' => 'Rescondre las categorias & fluxes sens articles pas legits (fonciona pas amb la configuracion « Mostrar totes los articles »)', 'img_with_lazyload' => 'Utilizar lo mòde “cargament tardiu” pels imatges', @@ -186,8 +186,8 @@ 'article_open_on_website' => 'quand l’article es dobèrt sul site d’origina', 'article_viewed' => 'quand l’article es mostrat', 'keep_max_n_unread' => 'Nombre max d’articles a gardar pas legits', - 'scroll' => 'en davalar la pagina', - 'upon_gone' => 'when it is no longer in the upstream news feed', // TODO + 'scroll' => 'en davalant la pagina', + 'upon_gone' => 'quand es pas mai dins lo flux de novèla font', 'upon_reception' => 'en recebre un article novèl', 'when' => 'Marcar un article coma legit…', 'when_same_title' => 'se un títol identic existís ja demest lo n articles mai recents', @@ -222,7 +222,7 @@ '_' => 'Partatge', 'add' => 'Ajustar un metòde de partatge', 'blogotext' => 'Blogotext', // IGNORE - 'deprecated' => 'This service is deprecated and will be removed from FreshRSS in a future release.', // TODO + 'deprecated' => 'Aqueste servici es obsolèt e serà tirat de la futura version de FreshRSS.', 'diaspora' => 'Diaspora*', // IGNORE 'email' => 'Corrièl', 'facebook' => 'Facebook', // IGNORE diff --git a/app/i18n/oc/gen.php b/app/i18n/oc/gen.php index 40a75164fc5..913832a1996 100644 --- a/app/i18n/oc/gen.php +++ b/app/i18n/oc/gen.php @@ -18,7 +18,7 @@ 'back_to_rss_feeds' => '← Tornar a vòstres fluxes RSS', 'cancel' => 'Anullar', 'create' => 'Crear', - 'delete_muted_feeds' => 'Delete muted feeds', // TODO + 'delete_muted_feeds' => 'Suprimir los flux muts', 'demote' => 'Retrogradar', 'disable' => 'Desactivar', 'empty' => 'Voidar', @@ -29,10 +29,10 @@ 'load_default_shortcuts' => 'Cargar los acorchis per defaut', 'manage' => 'Gerir', 'mark_read' => 'Marcar coma legit', - 'open_url' => 'Open URL', // TODO + 'open_url' => 'Dobrir l’URL', 'promote' => 'Promòure', 'purge' => 'Purgar', - 'refresh_opml' => 'Refresh OPML', // TODO + 'refresh_opml' => 'Refrescar OPML', 'remove' => 'Levar', 'rename' => 'Renomenar', 'see_website' => 'Veire lo site', diff --git a/app/i18n/oc/sub.php b/app/i18n/oc/sub.php index 59b5d40ad3d..b1869f983ec 100644 --- a/app/i18n/oc/sub.php +++ b/app/i18n/oc/sub.php @@ -25,19 +25,19 @@ 'add' => 'Ajustar categoria', 'archiving' => 'Archivar', 'dynamic_opml' => array( - '_' => 'Dynamic OPML', // TODO - 'help' => 'Provide the URL to an OPML file to dynamically populate this category with feeds', // TODO + '_' => 'OPML dinamic', + 'help' => 'Fornís l’URL per un fichièr OPML per garnir automaticament aquesta categoria amb de flux', ), 'empty' => 'Categoria voida', 'information' => 'Informacions', - 'opml_url' => 'OPML URL', // TODO + 'opml_url' => 'URL OPML', 'position' => 'Mostrar la posicion', 'position_help' => 'Per contrarotlar l’òrdre de tria de la categoria', 'title' => 'Títol', ), 'feed' => array( - 'accept_cookies' => 'Accept cookies', // TODO - 'accept_cookies_help' => 'Allow the feed server to set cookies (stored in memory for the duration of the request only)', // TODO + 'accept_cookies' => 'Acceptar los cookies', + 'accept_cookies_help' => 'Permetre al servidor del flux de definir de cookies (gardatz en memòria pendent la durada de la requèsta sonque)', 'add' => 'Ajustar un flux RSS', 'advanced' => 'Avançat', 'archiving' => 'Archivar', @@ -60,8 +60,8 @@ 'css_help' => 'Permet de recuperar los fluxes troncats (atencion, demanda mai de temps !)', 'css_path' => 'Selector CSS dels articles sul site d’origina', 'css_path_filter' => array( - '_' => 'CSS selector of the elements to remove', // TODO - 'help' => 'A CSS selector may be a list such as: .footer, .aside', // TODO + '_' => 'Selector CSS de l’element de tirar', + 'help' => 'Un selector CSS pòt èsser una lista coma : .footer, .aside', ), 'description' => 'Descripcion', // IGNORE 'empty' => 'Aqueste flux es void. Assegurats-vos qu’es totjorn mantengut.', @@ -73,51 +73,51 @@ 'information' => 'Informacions', 'keep_min' => 'Nombre minimum d’articles de servar', 'kind' => array( - '_' => 'Type of feed source', // TODO + '_' => 'Tipe de font de flux', 'html_xpath' => array( - '_' => 'HTML + XPath (Web scraping)', // TODO + '_' => 'HTML + XPath (Web scraping)', // IGNORE 'feed_title' => array( - '_' => 'feed title', // TODO - 'help' => 'Example: //title or a static string: "My custom feed"', // TODO + '_' => 'títol del flux', + 'help' => 'Exemple : //title o una cadena de tèxt estatica : "Mon flux personalizat"', ), - 'help' => 'XPath 1.0 is a standard query language for advanced users, and which FreshRSS supports to enable Web scraping.', // TODO + 'help' => 'XPath 1.0 es un lengatge de requèsta estandard pels utilizaires avançats, e que FreshRSS prend en carga pel Web scraping.', 'item' => array( - '_' => 'finding news items
    (most important)', // TODO - 'help' => 'Example: //div[@class="news-item"]', // TODO + '_' => 'trobar de novèlas items
    (mai important)', + 'help' => 'Exemple : //div[@class="news-item"]', ), 'item_author' => array( - '_' => 'item author', // TODO - 'help' => 'Can also be a static string. Example: "Anonymous"', // TODO + '_' => 'item autor', + 'help' => 'Pòt èsser una cadena de tèxt estatica. Exemple : "Anonymous"', ), - 'item_categories' => 'item tags', // TODO + 'item_categories' => 'item etiqueta', 'item_content' => array( - '_' => 'item content', // TODO - 'help' => 'Example to take the full item: .', // TODO + '_' => 'item contengut', + 'help' => 'Exemple per prendre tot l’item : .', ), 'item_thumbnail' => array( - '_' => 'item thumbnail', // TODO - 'help' => 'Example: descendant::img/@src', // TODO + '_' => 'item vinheta', + 'help' => 'Exemple : descendant::img/@src', ), 'item_timestamp' => array( - '_' => 'item date', // TODO - 'help' => 'The result will be parsed by strtotime()', // TODO + '_' => 'item data', + 'help' => 'Lo resultats serà formatat per la foncion strtotime()', ), 'item_title' => array( - '_' => 'item title', // TODO - 'help' => 'Use in particular the XPath axis descendant:: like descendant::h2', // TODO + '_' => 'item títol', + 'help' => 'Utilizatz en particular lo XPath axis descendant:: coma descendant::h2', ), 'item_uid' => array( - '_' => 'item unique ID', // TODO - 'help' => 'Optional. Example: descendant::div/@data-uri', // TODO + '_' => 'item ID unic', + 'help' => 'Opcional. Exemple : descendant::div/@data-uri', ), 'item_uri' => array( - '_' => 'item link (URL)', // TODO - 'help' => 'Example: descendant::a/@href', // TODO + '_' => 'item ligam (URL)', + 'help' => 'Exemple : descendant::a/@href', ), - 'relative' => 'XPath (relative to item) for:', // TODO - 'xpath' => 'XPath for:', // TODO + 'relative' => 'XPath (relatiu a l’element) per :', + 'xpath' => 'XPath per :', ), - 'rss' => 'RSS / Atom (default)', // TODO + 'rss' => 'RSS / Atom (defaut)', ), 'maintenance' => array( 'clear_cache' => 'Escafar lo cache', @@ -126,8 +126,8 @@ 'reload_articles_help' => 'Recargar los articles e recuperar lo contengut complet', // DIRTY 'title' => 'Mantenença', ), - 'max_http_redir' => 'Max HTTP redirects', // TODO - 'max_http_redir_help' => 'Set to 0 or leave blank to disable, -1 for unlimited redirects', // TODO + 'max_http_redir' => 'Max HTTP redireccions', + 'max_http_redir_help' => 'Definir a 0 o daissar void per lo desactivar, -1 per de redireccions illimitadas', 'moved_category_deleted' => 'Quand escafatz una categoria, sos fluxes son automaticament classats dins %s.', 'mute' => 'mut', 'no_selected' => 'Cap de flux pas seleccionat.', @@ -198,7 +198,7 @@ '_' => 'Gestion dels abonaments', 'add' => 'Apondon de flux o categoria', 'add_category' => 'Ajustar una categoria', - 'add_dynamic_opml' => 'Add dynamic OPML', // TODO + 'add_dynamic_opml' => 'Apondre un OPML dinamic', 'add_feed' => 'Ajustar un flux', 'add_label' => 'Ajustar una etiqueta', 'delete_label' => 'Suprimir una etiqueta', From 83437c0dd1c6f78a15b5f7468fc6ba0ce36698dc Mon Sep 17 00:00:00 2001 From: maTh Date: Mon, 29 Aug 2022 08:43:14 +0200 Subject: [PATCH 0348/2479] Improve input disabled, select disabled (#4546) * set default in template.css * Theme Alternative Dark * Theme Ansum * Theme BlueLagoon * Theme dark * theme Nord * fix --- p/themes/Alternative-Dark/adark.css | 3 ++- p/themes/Alternative-Dark/adark.rtl.css | 3 ++- p/themes/Ansum/_forms.scss | 3 ++- p/themes/Ansum/ansum.css | 3 ++- p/themes/Ansum/ansum.rtl.css | 3 ++- p/themes/BlueLagoon/BlueLagoon.css | 2 ++ p/themes/BlueLagoon/BlueLagoon.rtl.css | 2 ++ p/themes/Dark/dark.css | 4 +++- p/themes/Dark/dark.rtl.css | 4 +++- p/themes/Nord/nord.css | 5 +++++ p/themes/Nord/nord.rtl.css | 5 +++++ p/themes/base-theme/template.css | 9 +++++++++ p/themes/base-theme/template.rtl.css | 9 +++++++++ 13 files changed, 48 insertions(+), 7 deletions(-) diff --git a/p/themes/Alternative-Dark/adark.css b/p/themes/Alternative-Dark/adark.css index 13b5f7dc807..59ab41ea5cb 100644 --- a/p/themes/Alternative-Dark/adark.css +++ b/p/themes/Alternative-Dark/adark.css @@ -49,7 +49,8 @@ option { } input:disabled, select:disabled { - background: #eee; + color: #666; + border-color: #666; } input.extend { diff --git a/p/themes/Alternative-Dark/adark.rtl.css b/p/themes/Alternative-Dark/adark.rtl.css index 573606f30fe..ef08cbb3f5b 100644 --- a/p/themes/Alternative-Dark/adark.rtl.css +++ b/p/themes/Alternative-Dark/adark.rtl.css @@ -49,7 +49,8 @@ option { } input:disabled, select:disabled { - background: #eee; + color: #666; + border-color: #666; } input.extend { diff --git a/p/themes/Ansum/_forms.scss b/p/themes/Ansum/_forms.scss index 0f5f96681bf..77c9e355228 100644 --- a/p/themes/Ansum/_forms.scss +++ b/p/themes/Ansum/_forms.scss @@ -116,7 +116,8 @@ input:invalid, select:invalid { } input:disabled, select:disabled { - background: variables.$grey-light; + color: variables.$grey-medium-dark; + border-color: variables.$grey-medium-dark; } input.extend { diff --git a/p/themes/Ansum/ansum.css b/p/themes/Ansum/ansum.css index ac35b263ba0..3df770d8825 100644 --- a/p/themes/Ansum/ansum.css +++ b/p/themes/Ansum/ansum.css @@ -160,7 +160,8 @@ input:invalid, select:invalid { } input:disabled, select:disabled { - background: #f5f0ec; + color: #ba9; + border-color: #ba9; } input.extend { diff --git a/p/themes/Ansum/ansum.rtl.css b/p/themes/Ansum/ansum.rtl.css index c678ffc51e7..e4c6e2294be 100644 --- a/p/themes/Ansum/ansum.rtl.css +++ b/p/themes/Ansum/ansum.rtl.css @@ -160,7 +160,8 @@ input:invalid, select:invalid { } input:disabled, select:disabled { - background: #f5f0ec; + color: #ba9; + border-color: #ba9; } input.extend { diff --git a/p/themes/BlueLagoon/BlueLagoon.css b/p/themes/BlueLagoon/BlueLagoon.css index 24a56b5b3de..c60d2f1c3f0 100644 --- a/p/themes/BlueLagoon/BlueLagoon.css +++ b/p/themes/BlueLagoon/BlueLagoon.css @@ -61,6 +61,8 @@ input:invalid, select:invalid { input:disabled, select:disabled { background: #eee; + border-style: solid; + border-color: #ccc; } input.extend { diff --git a/p/themes/BlueLagoon/BlueLagoon.rtl.css b/p/themes/BlueLagoon/BlueLagoon.rtl.css index 41534143942..55a9cf41626 100644 --- a/p/themes/BlueLagoon/BlueLagoon.rtl.css +++ b/p/themes/BlueLagoon/BlueLagoon.rtl.css @@ -61,6 +61,8 @@ input:invalid, select:invalid { input:disabled, select:disabled { background: #eee; + border-style: solid; + border-color: #ccc; } input.extend { diff --git a/p/themes/Dark/dark.css b/p/themes/Dark/dark.css index c25d8acb60e..717c7c8f2a5 100644 --- a/p/themes/Dark/dark.css +++ b/p/themes/Dark/dark.css @@ -72,8 +72,10 @@ input:invalid, select:invalid { } input:disabled, select:disabled { - background: #666; + background-color: #222; color: #aaa; + border-style: solid; + border-color: #000; } input.extend { diff --git a/p/themes/Dark/dark.rtl.css b/p/themes/Dark/dark.rtl.css index 6c019e3db78..f9af44eb2ec 100644 --- a/p/themes/Dark/dark.rtl.css +++ b/p/themes/Dark/dark.rtl.css @@ -72,8 +72,10 @@ input:invalid, select:invalid { } input:disabled, select:disabled { - background: #666; + background-color: #222; color: #aaa; + border-style: solid; + border-color: #000; } input.extend { diff --git a/p/themes/Nord/nord.css b/p/themes/Nord/nord.css index ebaf1a2bf31..84b53c5d081 100644 --- a/p/themes/Nord/nord.css +++ b/p/themes/Nord/nord.css @@ -74,6 +74,11 @@ input, select, textarea { vertical-align: middle; } +input:disabled, select:disabled { + color: #aaa; + border-color: var(--border); +} + button { font-family: var(--sans-font); } diff --git a/p/themes/Nord/nord.rtl.css b/p/themes/Nord/nord.rtl.css index 5b4e85dca2c..a420aa1800e 100644 --- a/p/themes/Nord/nord.rtl.css +++ b/p/themes/Nord/nord.rtl.css @@ -74,6 +74,11 @@ input, select, textarea { vertical-align: middle; } +input:disabled, select:disabled { + color: #aaa; + border-color: var(--border); +} + button { font-family: var(--sans-font); } diff --git a/p/themes/base-theme/template.css b/p/themes/base-theme/template.css index e0c7bd74e47..d929752346c 100644 --- a/p/themes/base-theme/template.css +++ b/p/themes/base-theme/template.css @@ -229,6 +229,15 @@ input[type="checkbox"] { box-sizing: border-box; } +input:disabled, +select:disabled { + background-color: transparent; + min-width: 75px; + color: lightgray; + font-style: italic; + border: 1px dashed lightgray; +} + .dropdown-menu label > input[type="text"] { width: 150px; width: calc(99% - 5em); diff --git a/p/themes/base-theme/template.rtl.css b/p/themes/base-theme/template.rtl.css index a4031cafade..78a9f3ee132 100644 --- a/p/themes/base-theme/template.rtl.css +++ b/p/themes/base-theme/template.rtl.css @@ -229,6 +229,15 @@ input[type="checkbox"] { box-sizing: border-box; } +input:disabled, +select:disabled { + background-color: transparent; + min-width: 75px; + color: lightgray; + font-style: italic; + border: 1px dashed lightgray; +} + .dropdown-menu label > input[type="text"] { width: 150px; width: calc(99% - 5em); From a38fe3a15e12e8317e22c95c2fca7bff7f771222 Mon Sep 17 00:00:00 2001 From: berumuron Date: Mon, 29 Aug 2022 21:11:54 +0200 Subject: [PATCH 0349/2479] doc: Add recommendations for manual updates (#4557) --- docs/en/admins/04_Updating.md | 10 ++++++++-- docs/en/admins/07_LinuxUpdate.md | 4 +++- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/docs/en/admins/04_Updating.md b/docs/en/admins/04_Updating.md index 27874d25cd5..c391c9fa50b 100644 --- a/docs/en/admins/04_Updating.md +++ b/docs/en/admins/04_Updating.md @@ -12,7 +12,13 @@ If you enabled web updates from your installation (see footnote 2 in [installati This will check for and apply a new Stable version, if available. -## Updating Using git +## Updating manually + +There are two options to update manually: with git (recommended if you’ve installed FreshRSS this way), or from a Zip archive. + +In both cases, **it is highly recommended to update version by version.** For instance, if you are running FreshRSS 1.17.0, you should update to version 1.18.1 (i.e. the latest of the branch 1.18.x) before updating to 1.19.2. After each update, check that FreshRSS is still running correctly. If it’s not, it will help to understand what is broken. + +### Using git If you installed FreshRSS using git, you can update, change branches, or switch to a specific version from the command line. @@ -25,6 +31,6 @@ Generally, the update procedure via git works as follows: 5. Pull the new version. 6. Re-set group read (and write, if you wish) permissions on all files in `.`, and group write permissions on `./data/`. -## Updating from a Zip Archive +### From a Zip Archive Updating to a new version from a zip archive is always an option. Begin by unzipping the archive into your FreshRSS directory, overwriting old files, and finally re-set group read (and write, if you wish) permissions on all files in `.` and group write permissions on `./data/`. diff --git a/docs/en/admins/07_LinuxUpdate.md b/docs/en/admins/07_LinuxUpdate.md index bc8a00aeb25..834dfaaef3a 100644 --- a/docs/en/admins/07_LinuxUpdate.md +++ b/docs/en/admins/07_LinuxUpdate.md @@ -4,6 +4,8 @@ This tutorial demonstrates commands for updating FreshRSS. It assumes that your **Note that FreshRSS contains a built-in update system.** It’s easier to use if you don’t understand the commands that follow. It’s available through the web interface of your FreshRSS installation, Administration → Update. +Please read the general advices from “[Backing Up and Updating FreshRSS](04_Updating.md)” before applying any command from this guide. + ## Pausing automatic feed updates If [Automatic Feed Updating](08_FeedUpdates.md) has been configured, temporarily suspend the automatic feed updates during the upgrade process. @@ -92,7 +94,7 @@ If your local user doesn’t have write access to the FreshRSS folder, use a sud chown -R :www-data . && chmod -R g+r . && chmod -R g+w ./data/ ``` -6. Clean up the FreshRSS directory by deleting the downloaded zip, the file forcing the setup wizard and the temporary directory +6. Clean up the FreshRSS directory by deleting the downloaded zip and the temporary directory ```sh rm -f freshrss.zip rm -rf FreshRSS-*/ From de7ae9878cfe9d1c9d78caf3e6c67811181f9537 Mon Sep 17 00:00:00 2001 From: maTh Date: Mon, 29 Aug 2022 21:58:42 +0200 Subject: [PATCH 0350/2479] Update header.phtml (#4558) --- app/layout/header.phtml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/layout/header.phtml b/app/layout/header.phtml index 3abcfa999f0..fc83b20448f 100644 --- a/app/layout/header.phtml +++ b/app/layout/header.phtml @@ -89,7 +89,7 @@
    - +
    From 2392a261d25b9f5c4f4a624ec48cbf44650fa7f1 Mon Sep 17 00:00:00 2001 From: maTh Date: Mon, 29 Aug 2022 23:12:04 +0200 Subject: [PATCH 0351/2479] Fix: global view unread article (#4559) * template.css * themes --- p/themes/Alternative-Dark/adark.css | 3 ++- p/themes/Alternative-Dark/adark.rtl.css | 3 ++- p/themes/Origine-compact/origine-compact.css | 3 ++- .../Origine-compact/origine-compact.rtl.css | 3 ++- p/themes/Origine/origine.css | 3 ++- p/themes/Origine/origine.rtl.css | 3 ++- p/themes/Pafat/pafat.css | 3 ++- p/themes/Pafat/pafat.rtl.css | 3 ++- p/themes/base-theme/template.css | 20 +++++++++++++++++-- p/themes/base-theme/template.rtl.css | 20 +++++++++++++++++-- 10 files changed, 52 insertions(+), 12 deletions(-) diff --git a/p/themes/Alternative-Dark/adark.css b/p/themes/Alternative-Dark/adark.css index 59ab41ea5cb..99586fb0e80 100644 --- a/p/themes/Alternative-Dark/adark.css +++ b/p/themes/Alternative-Dark/adark.css @@ -549,7 +549,8 @@ a.btn { } .aside.aside_feed .category .title:not([data-unread="0"])::after, -.aside.aside_feed .feed .item-title:not([data-unread="0"])::after { +.aside.aside_feed .feed .item-title:not([data-unread="0"])::after, +.global .box.category .title:not([data-unread="0"])::after { background-color: #171717; color: #999; border-color: #999; diff --git a/p/themes/Alternative-Dark/adark.rtl.css b/p/themes/Alternative-Dark/adark.rtl.css index ef08cbb3f5b..f4e0a1f79af 100644 --- a/p/themes/Alternative-Dark/adark.rtl.css +++ b/p/themes/Alternative-Dark/adark.rtl.css @@ -549,7 +549,8 @@ a.btn { } .aside.aside_feed .category .title:not([data-unread="0"])::after, -.aside.aside_feed .feed .item-title:not([data-unread="0"])::after { +.aside.aside_feed .feed .item-title:not([data-unread="0"])::after, +.global .box.category .title:not([data-unread="0"])::after { background-color: #171717; color: #999; border-color: #999; diff --git a/p/themes/Origine-compact/origine-compact.css b/p/themes/Origine-compact/origine-compact.css index c91306ba059..40b1ea05188 100644 --- a/p/themes/Origine-compact/origine-compact.css +++ b/p/themes/Origine-compact/origine-compact.css @@ -635,7 +635,8 @@ a.btn, } /*=== Aside main page (categories) */ -.aside.aside_feed .category .title:not([data-unread="0"])::after { +.aside.aside_feed .category .title:not([data-unread="0"])::after, +.global .box.category .title:not([data-unread="0"])::after { margin: 0.5em 0 0 0; background-color: #f6f6f6; color: #444; diff --git a/p/themes/Origine-compact/origine-compact.rtl.css b/p/themes/Origine-compact/origine-compact.rtl.css index ed245a8479d..2e4d1d5e84c 100644 --- a/p/themes/Origine-compact/origine-compact.rtl.css +++ b/p/themes/Origine-compact/origine-compact.rtl.css @@ -635,7 +635,8 @@ a.btn, } /*=== Aside main page (categories) */ -.aside.aside_feed .category .title:not([data-unread="0"])::after { +.aside.aside_feed .category .title:not([data-unread="0"])::after, +.global .box.category .title:not([data-unread="0"])::after { margin: 0.5em 0 0 0; background-color: #f6f6f6; color: #444; diff --git a/p/themes/Origine/origine.css b/p/themes/Origine/origine.css index df99ed694d8..94039274420 100644 --- a/p/themes/Origine/origine.css +++ b/p/themes/Origine/origine.css @@ -604,7 +604,8 @@ a.btn { } /*=== Aside main page (categories) */ -.aside.aside_feed .category .title:not([data-unread="0"])::after { +.aside.aside_feed .category .title:not([data-unread="0"])::after, +.global .box.category .title:not([data-unread="0"])::after { background-color: #f6f6f6; color: #444; } diff --git a/p/themes/Origine/origine.rtl.css b/p/themes/Origine/origine.rtl.css index 2b30c071ca6..7f60394f1f0 100644 --- a/p/themes/Origine/origine.rtl.css +++ b/p/themes/Origine/origine.rtl.css @@ -604,7 +604,8 @@ a.btn { } /*=== Aside main page (categories) */ -.aside.aside_feed .category .title:not([data-unread="0"])::after { +.aside.aside_feed .category .title:not([data-unread="0"])::after, +.global .box.category .title:not([data-unread="0"])::after { background-color: #f6f6f6; color: #444; } diff --git a/p/themes/Pafat/pafat.css b/p/themes/Pafat/pafat.css index fbbb842423a..389dabb6a8b 100644 --- a/p/themes/Pafat/pafat.css +++ b/p/themes/Pafat/pafat.css @@ -570,7 +570,8 @@ a.signin { } /*=== Aside main page (categories) */ -.aside_feed .tree-folder-title > .title:not([data-unread="0"])::after { +.aside_feed .tree-folder-title > .title:not([data-unread="0"])::after, +.global .box.category .title:not([data-unread="0"])::after { margin: 0.5em 0 0 0; background-color: white; color: #428bca; diff --git a/p/themes/Pafat/pafat.rtl.css b/p/themes/Pafat/pafat.rtl.css index 22e0cb5f763..178747ba5d4 100644 --- a/p/themes/Pafat/pafat.rtl.css +++ b/p/themes/Pafat/pafat.rtl.css @@ -570,7 +570,8 @@ a.signin { } /*=== Aside main page (categories) */ -.aside_feed .tree-folder-title > .title:not([data-unread="0"])::after { +.aside_feed .tree-folder-title > .title:not([data-unread="0"])::after, +.global .box.category .title:not([data-unread="0"])::after { margin: 0.5em 0 0 0; background-color: white; color: #428bca; diff --git a/p/themes/base-theme/template.css b/p/themes/base-theme/template.css index d929752346c..f6fa871876c 100644 --- a/p/themes/base-theme/template.css +++ b/p/themes/base-theme/template.css @@ -1712,8 +1712,8 @@ input:checked + .slide-container .properties { color: white; } -.category .title:not([data-unread="0"])::after, -.feed .item-title:not([data-unread="0"])::after { +.aside .category .title:not([data-unread="0"])::after, +.aside .feed .item-title:not([data-unread="0"])::after { margin: 0.75em 0 0 0; padding: 5px 10px; min-width: 20px; @@ -1729,6 +1729,22 @@ input:checked + .slide-container .properties { font-weight: initial; } +.global .box.category .title:not([data-unread="0"])::after { + margin: 0.5rem 0 0 0; + padding: 5px 10px; + min-width: 20px; + display: block; + content: attr(data-unread); + position: absolute; + top: 0; + right: 10px; + text-align: center; + font-size: 0.75rem; + border-radius: 12px; + line-height: 1; + font-weight: initial; +} + .feed .item-title:not([data-unread="0"])::after { margin: 1em 0 0 0; } diff --git a/p/themes/base-theme/template.rtl.css b/p/themes/base-theme/template.rtl.css index 78a9f3ee132..26ba473d89e 100644 --- a/p/themes/base-theme/template.rtl.css +++ b/p/themes/base-theme/template.rtl.css @@ -1712,8 +1712,8 @@ input:checked + .slide-container .properties { color: white; } -.category .title:not([data-unread="0"])::after, -.feed .item-title:not([data-unread="0"])::after { +.aside .category .title:not([data-unread="0"])::after, +.aside .feed .item-title:not([data-unread="0"])::after { margin: 0.75em 0 0 0; padding: 5px 10px; min-width: 20px; @@ -1729,6 +1729,22 @@ input:checked + .slide-container .properties { font-weight: initial; } +.global .box.category .title:not([data-unread="0"])::after { + margin: 0.5rem 0 0 0; + padding: 5px 10px; + min-width: 20px; + display: block; + content: attr(data-unread); + position: absolute; + top: 0; + left: 10px; + text-align: center; + font-size: 0.75rem; + border-radius: 12px; + line-height: 1; + font-weight: initial; +} + .feed .item-title:not([data-unread="0"])::after { margin: 1em 0 0 0; } From b5f1c3f29dbd99a65412edbfcadb6e032ddc988e Mon Sep 17 00:00:00 2001 From: maTh Date: Tue, 30 Aug 2022 22:55:14 +0200 Subject: [PATCH 0352/2479] Fix: Global view - No articles banner (#4563) * Update global.phtml * Update app/views/index/global.phtml Co-authored-by: Alexandre Alapetite --- app/views/index/global.phtml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/app/views/index/global.phtml b/app/views/index/global.phtml index ff5fceaedf6..9bc291fca8c 100644 --- a/app/views/index/global.phtml +++ b/app/views/index/global.phtml @@ -3,10 +3,13 @@ $this->partial('nav_menu'); $class = ''; + $state_unread = false; + if (FreshRSS_Context::$user_conf->hide_read_feeds && FreshRSS_Context::isStateEnabled(FreshRSS_Entry::STATE_NOT_READ) && !FreshRSS_Context::isStateEnabled(FreshRSS_Entry::STATE_READ)) { $class = ' state_unread'; + $state_unread = true; } ?> @@ -54,7 +57,7 @@ } } - if ($unreadArticles < 1) { + if ($unreadArticles < 1 && $state_unread) { ?>

    From a8353e4b4c9cd17c94fa63792f4ce23a3040284a Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Wed, 31 Aug 2022 13:00:46 +0200 Subject: [PATCH 0353/2479] Compat Readrops (#4568) While waiting for https://github.com/readrops/Readrops/pull/163 #fix https://github.com/FreshRSS/FreshRSS/issues/4567 --- app/Models/Entry.php | 1 + 1 file changed, 1 insertion(+) diff --git a/app/Models/Entry.php b/app/Models/Entry.php index 8d20e54129c..feb09434735 100644 --- a/app/Models/Entry.php +++ b/app/Models/Entry.php @@ -689,6 +689,7 @@ public function toGReader(string $mode = ''): array { ]; if ($mode === 'compat') { $item['title'] = escapeToUnicodeAlternative($this->title(), false); + unset($item['alternate'][0]['type']); } elseif ($mode === 'freshrss') { $item['guid'] = $this->guid(); unset($item['summary']); From b1a74a34769513224ea9388b6614ffd53270fe50 Mon Sep 17 00:00:00 2001 From: maTh Date: Wed, 31 Aug 2022 21:34:18 +0200 Subject: [PATCH 0354/2479] Update extensionController.php (#4571) --- app/Controllers/extensionController.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Controllers/extensionController.php b/app/Controllers/extensionController.php index 3a3affb9973..d1ea889aa07 100644 --- a/app/Controllers/extensionController.php +++ b/app/Controllers/extensionController.php @@ -42,7 +42,7 @@ public function indexAction() { */ protected function getAvailableExtensionList() { $extensionListUrl = 'https://raw.githubusercontent.com/FreshRSS/Extensions/master/extensions.json'; - $json = file_get_contents($extensionListUrl); + $json = @file_get_contents($extensionListUrl); // we ran into problems, simply ignore them if ($json === false) { From 213f115fe245f9f7a44388776b192004c4c835c7 Mon Sep 17 00:00:00 2001 From: Moon Sungjoon Date: Thu, 1 Sep 2022 04:53:09 +0900 Subject: [PATCH 0355/2479] i18n: Update Korean language (#4572) * Update Korean language * Fix ignore Co-authored-by: Alexandre Alapetite --- app/i18n/ko/admin.php | 14 ++++----- app/i18n/ko/conf.php | 54 ++++++++++++++++----------------- app/i18n/ko/gen.php | 10 +++---- app/i18n/ko/sub.php | 70 +++++++++++++++++++++---------------------- 4 files changed, 74 insertions(+), 74 deletions(-) diff --git a/app/i18n/ko/admin.php b/app/i18n/ko/admin.php index 50e17294a85..7d20e0c4326 100644 --- a/app/i18n/ko/admin.php +++ b/app/i18n/ko/admin.php @@ -170,18 +170,18 @@ 'registration' => array( 'number' => '계정 최대 개수', 'select' => array( - 'label' => 'Registration form', // TODO + 'label' => '회원가입 양식', 'option' => array( - 'noform' => 'Disabled: No registration form', // TODO - 'nolimit' => 'Enabled: No limit of accounts', // TODO - 'setaccountsnumber' => 'Set max. number of accounts', // TODO + 'noform' => '비활성화: 회원가입 양식 없음', + 'nolimit' => '활성화: 계정 개수 제한 없음', + 'setaccountsnumber' => '최대 계정 개수 설정', ), ), 'status' => array( - 'disabled' => 'Form disabled', // TODO - 'enabled' => 'Form enabled', // TODO + 'disabled' => '양식 비활성화됨', + 'enabled' => '양식 활성화됨', ), - 'title' => 'User registration form', // TODO + 'title' => '사용자 회원가입 양식', ), ), 'update' => array( diff --git a/app/i18n/ko/conf.php b/app/i18n/ko/conf.php index 9e4c45bf951..2c6a8523fbc 100644 --- a/app/i18n/ko/conf.php +++ b/app/i18n/ko/conf.php @@ -68,9 +68,9 @@ ), 'logs' => array( 'loglist' => array( - 'level' => 'Log Level', // TODO - 'message' => 'Log Message', // TODO - 'timestamp' => 'Timestamp', // TODO + 'level' => '로그 수준', + 'message' => '로그 메세지', + 'timestamp' => '시간 표기', ), 'pagination' => array( 'first' => '처음으로', @@ -139,28 +139,28 @@ 'always_show_favorites' => '기본으로 즐겨찾기에 있는 모든 글을 표시', 'article' => array( 'authors_date' => array( - '_' => 'Authors and date', // TODO - 'both' => 'In header and footer', // TODO - 'footer' => 'In footer', // TODO - 'header' => 'In header', // TODO - 'none' => 'None', // TODO + '_' => '작성자, 작성일', + 'both' => '머리말과 꼬리말에 모두', + 'footer' => '꼬리말에', + 'header' => '머리말에', + 'none' => '숨김', ), 'feed_name' => array( - 'above_title' => 'Above title/tags', // TODO - 'none' => 'None', // TODO - 'with_authors' => 'In authors and date row', // TODO + 'above_title' => '제목/태그 위에', + 'none' => '숨김', + 'with_authors' => '작성자, 작성일과 같은 줄에', ), - 'feed_title' => 'Feed title', // TODO + 'feed_title' => '피드 제목', 'tags' => array( - '_' => 'Tags', // TODO - 'both' => 'In header and footer', // TODO - 'footer' => 'In footer', // TODO - 'header' => 'In header', // TODO - 'none' => 'None', // TODO + '_' => '태그', + 'both' => '머리말과 꼬리말에', + 'footer' => '꼬리말에', + 'header' => '머리말에', + 'none' => '숨김', ), 'tags_max' => array( - '_' => 'Max number of tags shown', // TODO - 'help' => '0 means: show all tags and do not collapse them', // TODO + '_' => ' 표시할 최대 태그 수', + 'help' => '0 으로 설정하면 모든 태그를 표시하고 숨기지 않습니다', ), ), 'articles_per_page' => '페이지당 글 수', @@ -170,12 +170,12 @@ 'display_articles_unfolded' => '글을 펼쳐진 상태로 보여주기', 'display_categories_unfolded' => '다음 카테고리를 펼치기', 'headline' => array( - 'articles' => 'Articles: Open/Close', // TODO - 'articles_header_footer' => 'Articles: header/footer', // TODO - 'categories' => 'Left navigation: Categories', // TODO - 'mark_as_read' => 'Mark article as read', // TODO - 'misc' => 'Miscellaneous', // TODO - 'view' => 'View', // TODO + 'articles' => '기사: 열기/닫기', + 'articles_header_footer' => '기사: 머리말/꼬리말', + 'categories' => '좌측 탐색 메뉴: 카테고리', + 'mark_as_read' => '읽음으로 표시', + 'misc' => '기타', + 'view' => '보기', ), 'hide_read_feeds' => '읽지 않은 글이 없는 카테고리와 피드 감추기 (“모든 글 표시”가 설정된 경우 동작하지 않습니다)', 'img_with_lazyload' => '그림을 불러오는 데에 "lazy load" 모드 사용하기', @@ -187,7 +187,7 @@ 'article_viewed' => '글을 읽었을 때', 'keep_max_n_unread' => '읽지 않은 상태로 유지할 최대 글 개수', 'scroll' => '스크롤을 하며 지나갈 때', - 'upon_gone' => 'when it is no longer in the upstream news feed', // TODO + 'upon_gone' => '원본 뉴스 피드에서 글 삭제 되었을 때', 'upon_reception' => '글을 가져오자마자', 'when' => '읽음으로 표시…', 'when_same_title' => '상위 n개의 최신 글에 동일한 제목이 이미 있는 경우', @@ -222,7 +222,7 @@ '_' => '공유', 'add' => '공유 방법 추가', 'blogotext' => 'Blogotext', // IGNORE - 'deprecated' => 'This service is deprecated and will be removed from FreshRSS in a future release.', // TODO + 'deprecated' => '이 서비스는 더 이상 사용되지 않으며 추후 릴리즈 FreshRSS에서 삭제 될 것 입니다.', 'diaspora' => 'Diaspora*', // IGNORE 'email' => '메일', 'facebook' => 'Facebook', // IGNORE diff --git a/app/i18n/ko/gen.php b/app/i18n/ko/gen.php index afb0750eafa..0ebf81b6c2d 100644 --- a/app/i18n/ko/gen.php +++ b/app/i18n/ko/gen.php @@ -18,7 +18,7 @@ 'back_to_rss_feeds' => '← RSS 피드로 돌아가기', 'cancel' => '취소', 'create' => '생성', - 'delete_muted_feeds' => 'Delete muted feeds', // TODO + 'delete_muted_feeds' => '음소거된 피드 삭제', 'demote' => '목록 수준 내리기', 'disable' => '비활성화', 'empty' => '비우기', @@ -29,10 +29,10 @@ 'load_default_shortcuts' => '기본 단축키 불러오기', 'manage' => '관리', 'mark_read' => '읽음으로 표시', - 'open_url' => 'Open URL', // TODO + 'open_url' => 'URL 열기', 'promote' => '목록 수준 올리기', 'purge' => '제거', - 'refresh_opml' => 'Refresh OPML', // TODO + 'refresh_opml' => 'OPML 새로고침', 'remove' => '삭제', 'rename' => '이름 바꾸기', 'see_website' => '웹사이트 열기', @@ -130,7 +130,7 @@ 'confirm_action_feed_cat' => '정말 이 작업을 수행하시겠습니까? 관련된 즐겨찾기와 사용자 쿼리가 삭제됩니다. 이 작업은 되돌릴 수 없습니다!!', 'feedback' => array( 'body_new_articles' => '%%d 개의 새 글이 FreshRSS에 있습니다.', - 'body_unread_articles' => '(unread: %%d)', // TODO + 'body_unread_articles' => '(%%d 개 읽지 않음)', 'request_failed' => '요청한 작업을 수행할 수 없습니다. 인터넷 연결에 문제가 발생한 것 같습니다.', 'title_new_articles' => 'FreshRSS: 새 글이 있습니다!', ), @@ -210,7 +210,7 @@ 'twitter' => 'Twitter', // IGNORE 'wallabag' => 'wallabag v1', // IGNORE 'wallabagv2' => 'wallabag v2', // IGNORE - 'web-sharing-api' => 'System sharing', // TODO + 'web-sharing-api' => '기기 내장 공유 기능', 'whatsapp' => 'Whatsapp', // IGNORE 'xing' => 'Xing', // IGNORE ), diff --git a/app/i18n/ko/sub.php b/app/i18n/ko/sub.php index 4e188f6d19e..ef21d9ca1b5 100644 --- a/app/i18n/ko/sub.php +++ b/app/i18n/ko/sub.php @@ -25,19 +25,19 @@ 'add' => '카테고리 추가', 'archiving' => '보관', 'dynamic_opml' => array( - '_' => 'Dynamic OPML', // TODO - 'help' => 'Provide the URL to an OPML file to dynamically populate this category with feeds', // TODO + '_' => '동적 OPML', + 'help' => '이 카테코리에 피드를 동적으로 채우려면 OPML 파일 의 URL을 제공해주세요', ), 'empty' => '빈 카테고리', 'information' => '정보', - 'opml_url' => 'OPML URL', // TODO + 'opml_url' => 'OPML URL', // IGNORE 'position' => '표시 위치', 'position_help' => '정렬 순서 제어', 'title' => '제목', ), 'feed' => array( - 'accept_cookies' => 'Accept cookies', // TODO - 'accept_cookies_help' => 'Allow the feed server to set cookies (stored in memory for the duration of the request only)', // TODO + 'accept_cookies' => '쿠키 사용 동의', + 'accept_cookies_help' => '피드 서버가 쿠키를 사용하도록 허용 (요청 지속 기간 동안에만 메모리에 저장)', 'add' => 'RSS 피드 추가', 'advanced' => '고급 설정', 'archiving' => '보관', @@ -60,8 +60,8 @@ 'css_help' => '글의 일부가 포함된 RSS 피드를 가져옵니다 (주의, 시간이 좀 더 걸립니다!)', 'css_path' => '웹사이트 상의 글 본문에 해당하는 CSS 경로', 'css_path_filter' => array( - '_' => 'CSS selector of the elements to remove', // TODO - 'help' => 'A CSS selector may be a list such as: .footer, .aside', // TODO + '_' => '제거할 요소의 CSS 선택자', + 'help' => 'CSS 선택자는 다음과 같은 목록일 수 있습니다: .footer, .aside', ), 'description' => '설명', 'empty' => '이 피드는 비어있습니다. 피드가 계속 운영되고 있는지 확인하세요.', @@ -73,51 +73,51 @@ 'information' => '정보', 'keep_min' => '최소 유지 글 개수', 'kind' => array( - '_' => 'Type of feed source', // TODO + '_' => '피드 소스 유형', 'html_xpath' => array( - '_' => 'HTML + XPath (Web scraping)', // TODO + '_' => 'HTML + XPath (웹 스크래핑)', 'feed_title' => array( - '_' => 'feed title', // TODO - 'help' => 'Example: //title or a static string: "My custom feed"', // TODO + '_' => '피드 제목', + 'help' => '예제: //title 혹은 정적 문자열: "나의 커스텀 피드"', ), - 'help' => 'XPath 1.0 is a standard query language for advanced users, and which FreshRSS supports to enable Web scraping.', // TODO + 'help' => 'XPath 1.0 는 고급 사용자를 위한 표준 쿼리 언어입니다. FreshRSS는 웹 스크래핑 지원을 위해 이를 사용합니다.', 'item' => array( - '_' => 'finding news items
    (most important)', // TODO - 'help' => 'Example: //div[@class="news-item"]', // TODO + '_' => '뉴스 기사
    (가장 중요한 항목)', + 'help' => '예제: //div[@class="news-item"]', ), 'item_author' => array( - '_' => 'item author', // TODO - 'help' => 'Can also be a static string. Example: "Anonymous"', // TODO + '_' => '기사 작성자', + 'help' => '정적 문자열이 될 수 있습니다. 예제: "Anonymous"', ), - 'item_categories' => 'item tags', // TODO + 'item_categories' => '기사 태그', 'item_content' => array( - '_' => 'item content', // TODO - 'help' => 'Example to take the full item: .', // TODO + '_' => '기사 내용', + 'help' => '전체 기사를 가져오는 예시: .', ), 'item_thumbnail' => array( - '_' => 'item thumbnail', // TODO - 'help' => 'Example: descendant::img/@src', // TODO + '_' => '기사 섬네일', + 'help' => '예제: descendant::img/@src', ), 'item_timestamp' => array( - '_' => 'item date', // TODO - 'help' => 'The result will be parsed by strtotime()', // TODO + '_' => '기사 날짜', + 'help' => '결과 값은 strtotime()에서 파싱한 값을 이용합니다.', ), 'item_title' => array( - '_' => 'item title', // TODO - 'help' => 'Use in particular the XPath axis descendant:: like descendant::h2', // TODO + '_' => '기사 제목', + 'help' => 'descendant::h2 같은 특정 descendant::XPath 축을 사용합니다.', ), 'item_uid' => array( - '_' => 'item unique ID', // TODO - 'help' => 'Optional. Example: descendant::div/@data-uri', // TODO + '_' => '기사 UID', + 'help' => 'Optional. 예제: descendant::div/@data-uri', ), 'item_uri' => array( - '_' => 'item link (URL)', // TODO - 'help' => 'Example: descendant::a/@href', // TODO + '_' => '기사 링크 (URL)', + 'help' => '예제: descendant::a/@href', ), - 'relative' => 'XPath (relative to item) for:', // TODO - 'xpath' => 'XPath for:', // TODO + 'relative' => '다음의 (기사와 관련된) XPath:', + 'xpath' => '다음의 XPath:', ), - 'rss' => 'RSS / Atom (default)', // TODO + 'rss' => 'RSS / Atom (기본값)', ), 'maintenance' => array( 'clear_cache' => '캐쉬 지우기', @@ -126,8 +126,8 @@ 'reload_articles_help' => '글 다시 로드하고 셀렉터가 정의 되었을 경우에 모든 컨텐츠 가져오기.', // DIRTY 'title' => '유지 보수', ), - 'max_http_redir' => 'Max HTTP redirects', // TODO - 'max_http_redir_help' => 'Set to 0 or leave blank to disable, -1 for unlimited redirects', // TODO + 'max_http_redir' => '최대 HTTP 리다이렉션', + 'max_http_redir_help' => '값을 비워두거나 0으로 설정하면 비활성화하며, -1으로 설정하면 무제한 리다이렉션합니다', 'moved_category_deleted' => '카테고리를 삭제하면, 해당 카테고리 아래에 있던 피드들은 자동적으로 %s 아래로 분류됩니다.', 'mute' => '무기한 새로고침 금지', 'no_selected' => '선택된 피드가 없습니다.', @@ -198,7 +198,7 @@ '_' => '구독 관리', 'add' => '피드 혹은 카테고리 추가', 'add_category' => '카테고리 추가', - 'add_dynamic_opml' => 'Add dynamic OPML', // TODO + 'add_dynamic_opml' => '동적 OPML 추가', 'add_feed' => '피드 추가', 'add_label' => '라벨 추가', 'delete_label' => '라벨 삭제', From 59c2f9a71f8f8061385bd3307f4ed568da10f6a8 Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Thu, 1 Sep 2022 12:37:14 +0200 Subject: [PATCH 0356/2479] Updated changelog --- CHANGELOG.md | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 62264af9e06..8dc8d55122f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,6 @@ # FreshRSS changelog -## 2022-0X-XX FreshRSS 1.20.0-dev +## 2022-09-XX FreshRSS 1.20.0-dev * Features * New Web scraping feature *HTML+XPath* for Web pages without any RSS/ATOM feed [#4220](https://github.com/FreshRSS/FreshRSS/pull/4220) @@ -71,11 +71,14 @@ [#4383](https://github.com/FreshRSS/FreshRSS/pull/4383), [#4452](https://github.com/FreshRSS/FreshRSS/pull/4452), [#4455](https://github.com/FreshRSS/FreshRSS/pull/4455), [#4466](https://github.com/FreshRSS/FreshRSS/pull/4466), [#4471](https://github.com/FreshRSS/FreshRSS/pull/4471), [#4472](https://github.com/FreshRSS/FreshRSS/pull/4472), [#4474](https://github.com/FreshRSS/FreshRSS/pull/4474), [#4498](https://github.com/FreshRSS/FreshRSS/pull/4498), [#4502](https://github.com/FreshRSS/FreshRSS/pull/4502), - [#4504](https://github.com/FreshRSS/FreshRSS/pull/4504) + [#4504](https://github.com/FreshRSS/FreshRSS/pull/4504), [#4558](https://github.com/FreshRSS/FreshRSS/pull/4558), [#4546](https://github.com/FreshRSS/FreshRSS/pull/4546), + [#4541](https://github.com/FreshRSS/FreshRSS/pull/4541) * Themes * New theme *Dark pink* [#4311](https://github.com/FreshRSS/FreshRSS/pull/4311) * New theme *Nord* [#4400](https://github.com/FreshRSS/FreshRSS/pull/4400) - * Improve themes *Mapco* [#4491](https://github.com/FreshRSS/FreshRSS/pull/4491); *Swage* [#4493](https://github.com/FreshRSS/FreshRSS/pull/4493), [#4512](https://github.com/FreshRSS/FreshRSS/pull/4512) + * Improve themes *Ansum* [#4538](https://github.com/FreshRSS/FreshRSS/pull/4538), [#4549](https://github.com/FreshRSS/FreshRSS/pull/4549); + *Mapco* [#4491](https://github.com/FreshRSS/FreshRSS/pull/4491), [#4491](https://github.com/FreshRSS/FreshRSS/pull/4491); + *Swage* [#4493](https://github.com/FreshRSS/FreshRSS/pull/4493), [#4512](https://github.com/FreshRSS/FreshRSS/pull/4512) * Extensions * Allow extensions using `entry_before_insert` to change `entry->isRead()` [#4331](https://github.com/FreshRSS/FreshRSS/pull/4331) * i18n @@ -84,6 +87,8 @@ [#4509](https://github.com/FreshRSS/FreshRSS/pull/4509) * Improve English [#4450](https://github.com/FreshRSS/FreshRSS/pull/4450) * Improve German [#4525](https://github.com/FreshRSS/FreshRSS/pull/4525) + * Improve Korean [#4572](https://github.com/FreshRSS/FreshRSS/pull/4572) + * Improve Occitan [#4548](https://github.com/FreshRSS/FreshRSS/pull/4548) * Improve Polish [#4363](https://github.com/FreshRSS/FreshRSS/pull/4363) * Improve Russian [#4385](https://github.com/FreshRSS/FreshRSS/pull/4385) * Improve Slovak [#4524](https://github.com/FreshRSS/FreshRSS/pull/4524) @@ -111,9 +116,11 @@ * Use `.gitattributes` `export-ignore` [#4415](https://github.com/FreshRSS/FreshRSS/pull/4415) * Remove HTTP Referer for HTML download [#4372](https://github.com/FreshRSS/FreshRSS/pull/4372) * Add database field `attributes` (JSON) for entries [#4444](https://github.com/FreshRSS/FreshRSS/pull/4444) + * Add [`archive.today`](https://archive.ph/) as sharing service [#4530](https://github.com/FreshRSS/FreshRSS/pull/4530) * Improve dev automated checks [#4209](https://github.com/FreshRSS/FreshRSS/pull/4209) * Update dev dependencies [#4173](https://github.com/FreshRSS/FreshRSS/pull/4173), [#4203](https://github.com/FreshRSS/FreshRSS/pull/4203), [#4241](https://github.com/FreshRSS/FreshRSS/pull/4241), [#4419](https://github.com/FreshRSS/FreshRSS/pull/4419), [#4424](https://github.com/FreshRSS/FreshRSS/pull/4424) + * Fix extension list warning when offline[#4571](https://github.com/FreshRSS/FreshRSS/pull/4571) * Code improvements [#4130](https://github.com/FreshRSS/FreshRSS/pull/4130), [#4194](https://github.com/FreshRSS/FreshRSS/pull/4194), [#4201](https://github.com/FreshRSS/FreshRSS/pull/4201), [#4202](https://github.com/FreshRSS/FreshRSS/pull/4202), [#4258](https://github.com/FreshRSS/FreshRSS/pull/4258), [#4263](https://github.com/FreshRSS/FreshRSS/pull/4263), [#4356](https://github.com/FreshRSS/FreshRSS/pull/4356), [#4436](https://github.com/FreshRSS/FreshRSS/pull/4436), [#4489](https://github.com/FreshRSS/FreshRSS/pull/4489), From 8b85fa351a120953ef39e1271b2798c668ee4d9a Mon Sep 17 00:00:00 2001 From: maTh Date: Fri, 2 Sep 2022 08:30:11 +0200 Subject: [PATCH 0357/2479] fix (#4576) --- p/themes/base-theme/template.css | 13 +++++++------ p/themes/base-theme/template.rtl.css | 13 +++++++------ 2 files changed, 14 insertions(+), 12 deletions(-) diff --git a/p/themes/base-theme/template.css b/p/themes/base-theme/template.css index f6fa871876c..ea2816ebe3a 100644 --- a/p/themes/base-theme/template.css +++ b/p/themes/base-theme/template.css @@ -214,12 +214,6 @@ textarea:invalid { border: 2px dashed red; } -input[type="radio"], -input[type="checkbox"] { - width: 15px !important; - min-height: 15px !important; -} - .prompt textarea, .prompt input, .prompt select, @@ -238,6 +232,13 @@ select:disabled { border: 1px dashed lightgray; } +input[type="radio"], +input[type="checkbox"] { + min-width: auto; + width: 15px !important; + min-height: 15px !important; +} + .dropdown-menu label > input[type="text"] { width: 150px; width: calc(99% - 5em); diff --git a/p/themes/base-theme/template.rtl.css b/p/themes/base-theme/template.rtl.css index 26ba473d89e..5057baf5630 100644 --- a/p/themes/base-theme/template.rtl.css +++ b/p/themes/base-theme/template.rtl.css @@ -214,12 +214,6 @@ textarea:invalid { border: 2px dashed red; } -input[type="radio"], -input[type="checkbox"] { - width: 15px !important; - min-height: 15px !important; -} - .prompt textarea, .prompt input, .prompt select, @@ -238,6 +232,13 @@ select:disabled { border: 1px dashed lightgray; } +input[type="radio"], +input[type="checkbox"] { + min-width: auto; + width: 15px !important; + min-height: 15px !important; +} + .dropdown-menu label > input[type="text"] { width: 150px; width: calc(99% - 5em); From e4394ec6daf92ddaf91fe16c492df110d76569bc Mon Sep 17 00:00:00 2001 From: maTh Date: Fri, 2 Sep 2022 08:31:29 +0200 Subject: [PATCH 0358/2479] Improved: Flat theme (#4575) * dropdown-menu hover icon in white * dropdown menu config icon * delete theme icons, use standard icons * about link * RTL * fix --- p/themes/Flat/flat.css | 35 +++++++++++++++++++++----- p/themes/Flat/flat.rtl.css | 35 +++++++++++++++++++++----- p/themes/Flat/icons/all.svg | 32 ----------------------- p/themes/Flat/icons/close.svg | 28 --------------------- p/themes/Flat/icons/configure.svg | 31 ----------------------- p/themes/Flat/icons/disabled-light.svg | 3 --- p/themes/Flat/icons/down.svg | 31 ----------------------- p/themes/Flat/icons/icon.svg | 12 --------- p/themes/Flat/icons/key.svg | 7 ------ p/themes/Flat/icons/next.svg | 31 ----------------------- p/themes/Flat/icons/prev.svg | 31 ----------------------- p/themes/Flat/icons/up.svg | 31 ----------------------- 12 files changed, 58 insertions(+), 249 deletions(-) delete mode 100644 p/themes/Flat/icons/all.svg delete mode 100644 p/themes/Flat/icons/close.svg delete mode 100644 p/themes/Flat/icons/configure.svg delete mode 100644 p/themes/Flat/icons/disabled-light.svg delete mode 100644 p/themes/Flat/icons/down.svg delete mode 100644 p/themes/Flat/icons/icon.svg delete mode 100644 p/themes/Flat/icons/key.svg delete mode 100644 p/themes/Flat/icons/next.svg delete mode 100644 p/themes/Flat/icons/prev.svg delete mode 100644 p/themes/Flat/icons/up.svg diff --git a/p/themes/Flat/flat.css b/p/themes/Flat/flat.css index bb1a621eac1..a1efd126445 100644 --- a/p/themes/Flat/flat.css +++ b/p/themes/Flat/flat.css @@ -349,8 +349,8 @@ a.btn { /*=== Dropdown */ .dropdown-menu { - margin: 5px 0 0; - padding: 5px 0; + margin: 0.5rem 0 0; + padding: 0.5rem 0; background: #fafafa; font-size: 0.8rem; border: 1px solid #95a5a6; @@ -364,12 +364,17 @@ a.btn { } .dropdown-header { - padding: 0 5px 5px; + padding: 0 0.5rem 0.5rem; font-weight: bold; text-align: left; color: #34495e; } +.dropdown-header a { + position: absolute; + right: 0.5rem; +} + .dropdown-menu > .item > a, .dropdown-menu > .item > span, .dropdown-menu > .item > .as-link { @@ -384,6 +389,11 @@ a.btn { color: #fff; } +.dropdown-menu > .item a:hover .icon, +.nav-list.aside .item a:hover .icon { + filter: brightness(3); +} + .dropdown-menu > .item[aria-checked="true"] > a::before { font-weight: bold; margin: 0 0 0 -14px; @@ -609,6 +619,10 @@ a.btn { margin: 10px 0 50px; } +.aside.aside_feed .icon { + filter: brightness(3); +} + /*=== Aside main page (categories) */ .aside.aside_feed .category .title:not([data-unread="0"])::after { background-color: #2c3e50; @@ -618,6 +632,13 @@ a.btn { background-color: #34495e; } +.aside .about { + margin: 1rem; + display: block; + color: #ecf0f1; + font-style: italic; +} + /*=== Aside main page (feeds) */ .feed.item.empty.active { background: #f39c12; @@ -732,9 +753,11 @@ a.btn { } .dropdown-menu .dropdown-header .icon { - vertical-align: middle; - background-color: #95a5a6; - border-radius: 3px; + filter: invert(0.6); +} + +.dropdown-menu .dropdown-header a:hover .icon { + filter: invert(0.6) invert(77%) sepia(63%) saturate(4993%) hue-rotate(177deg) brightness(88%) contrast(96%); } /*=== Feed articles */ diff --git a/p/themes/Flat/flat.rtl.css b/p/themes/Flat/flat.rtl.css index 01026968aee..fd9a2c0556c 100644 --- a/p/themes/Flat/flat.rtl.css +++ b/p/themes/Flat/flat.rtl.css @@ -349,8 +349,8 @@ a.btn { /*=== Dropdown */ .dropdown-menu { - margin: 5px 0 0; - padding: 5px 0; + margin: 0.5rem 0 0; + padding: 0.5rem 0; background: #fafafa; font-size: 0.8rem; border: 1px solid #95a5a6; @@ -364,12 +364,17 @@ a.btn { } .dropdown-header { - padding: 0 5px 5px; + padding: 0 0.5rem 0.5rem; font-weight: bold; text-align: right; color: #34495e; } +.dropdown-header a { + position: absolute; + left: 0.5rem; +} + .dropdown-menu > .item > a, .dropdown-menu > .item > span, .dropdown-menu > .item > .as-link { @@ -384,6 +389,11 @@ a.btn { color: #fff; } +.dropdown-menu > .item a:hover .icon, +.nav-list.aside .item a:hover .icon { + filter: brightness(3); +} + .dropdown-menu > .item[aria-checked="true"] > a::before { font-weight: bold; margin: 0 -14px 0 0; @@ -609,6 +619,10 @@ a.btn { margin: 10px 0 50px; } +.aside.aside_feed .icon { + filter: brightness(3); +} + /*=== Aside main page (categories) */ .aside.aside_feed .category .title:not([data-unread="0"])::after { background-color: #2c3e50; @@ -618,6 +632,13 @@ a.btn { background-color: #34495e; } +.aside .about { + margin: 1rem; + display: block; + color: #ecf0f1; + font-style: italic; +} + /*=== Aside main page (feeds) */ .feed.item.empty.active { background: #f39c12; @@ -732,9 +753,11 @@ a.btn { } .dropdown-menu .dropdown-header .icon { - vertical-align: middle; - background-color: #95a5a6; - border-radius: 3px; + filter: invert(0.6); +} + +.dropdown-menu .dropdown-header a:hover .icon { + filter: invert(0.6) invert(77%) sepia(63%) saturate(4993%) hue-rotate(177deg) brightness(88%) contrast(96%); } /*=== Feed articles */ diff --git a/p/themes/Flat/icons/all.svg b/p/themes/Flat/icons/all.svg deleted file mode 100644 index d20e0f5bfec..00000000000 --- a/p/themes/Flat/icons/all.svg +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - - image/svg+xml - - Gnome Symbolic Icon Theme - - - - - - - Gnome Symbolic Icon Theme - - - - - - - - - - - - - - - diff --git a/p/themes/Flat/icons/close.svg b/p/themes/Flat/icons/close.svg deleted file mode 100644 index 629fda7ff58..00000000000 --- a/p/themes/Flat/icons/close.svg +++ /dev/null @@ -1,28 +0,0 @@ - - - - - Gnome Symbolic Icon Theme - - - - image/svg+xml - - Gnome Symbolic Icon Theme - - - - - - - - - - - - - - - - - diff --git a/p/themes/Flat/icons/configure.svg b/p/themes/Flat/icons/configure.svg deleted file mode 100644 index 969c5719f46..00000000000 --- a/p/themes/Flat/icons/configure.svg +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - - - image/svg+xml - - Gnome Symbolic Icon Theme - - - - - - - Gnome Symbolic Icon Theme - - - - - - - - - - - - - - diff --git a/p/themes/Flat/icons/disabled-light.svg b/p/themes/Flat/icons/disabled-light.svg deleted file mode 100644 index c46f7180149..00000000000 --- a/p/themes/Flat/icons/disabled-light.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/p/themes/Flat/icons/down.svg b/p/themes/Flat/icons/down.svg deleted file mode 100644 index 31730626f0a..00000000000 --- a/p/themes/Flat/icons/down.svg +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - - - image/svg+xml - - Gnome Symbolic Icon Theme - - - - - - - Gnome Symbolic Icon Theme - - - - - - - - - - - - - - diff --git a/p/themes/Flat/icons/icon.svg b/p/themes/Flat/icons/icon.svg deleted file mode 100644 index 9657d020ccc..00000000000 --- a/p/themes/Flat/icons/icon.svg +++ /dev/null @@ -1,12 +0,0 @@ - - Logo FreshRSS - - - - - - - - - - diff --git a/p/themes/Flat/icons/key.svg b/p/themes/Flat/icons/key.svg deleted file mode 100644 index 77d0218e517..00000000000 --- a/p/themes/Flat/icons/key.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/p/themes/Flat/icons/next.svg b/p/themes/Flat/icons/next.svg deleted file mode 100644 index d75cc40f506..00000000000 --- a/p/themes/Flat/icons/next.svg +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - - - image/svg+xml - - Gnome Symbolic Icon Theme - - - - - - - Gnome Symbolic Icon Theme - - - - - - - - - - - - - - diff --git a/p/themes/Flat/icons/prev.svg b/p/themes/Flat/icons/prev.svg deleted file mode 100644 index 9ba03ceb286..00000000000 --- a/p/themes/Flat/icons/prev.svg +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - - - image/svg+xml - - Gnome Symbolic Icon Theme - - - - - - - Gnome Symbolic Icon Theme - - - - - - - - - - - - - - diff --git a/p/themes/Flat/icons/up.svg b/p/themes/Flat/icons/up.svg deleted file mode 100644 index 3ab11b168c4..00000000000 --- a/p/themes/Flat/icons/up.svg +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - - - image/svg+xml - - Gnome Symbolic Icon Theme - - - - - - - Gnome Symbolic Icon Theme - - - - - - - - - - - - - - From dc3fd52eb66d5ce571abdcb817171ed4c2e88454 Mon Sep 17 00:00:00 2001 From: miles Date: Sat, 3 Sep 2022 16:30:25 +0800 Subject: [PATCH 0359/2479] Update zh-cn translation (#4577) * Update i18n/zh-cn * Update CREDITS.md * Update CREDITS.md --- CREDITS.md | 1 + app/i18n/zh-cn/sub.php | 8 ++++---- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/CREDITS.md b/CREDITS.md index 5d339d0b517..5d4477b3f4a 100644 --- a/CREDITS.md +++ b/CREDITS.md @@ -109,6 +109,7 @@ People are sorted by name so please keep this order. * [Melvyn Laïly](https://github.com/yaurthek): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:yaurthek), [Web](http://x2a.yt/) * [Miika Launiainen](https://gitlab.com/miicat): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:miicat), [Web](https://miicat.eu/) * [Mike Vanbuskirk](https://github.com/codevbus): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:codevbus) [Web](http://mikevanbuskirk.io/) +* [miles](https://github.com/miles170): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:miles170) * [MSZ](https://github.com/mszkb): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:mszkb) * [Myuki](https://github.com/Myuki): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:Myuki) * [Nainor](https://github.com/Nainor): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:Nainor) diff --git a/app/i18n/zh-cn/sub.php b/app/i18n/zh-cn/sub.php index 580a25e888b..ad6307472f1 100644 --- a/app/i18n/zh-cn/sub.php +++ b/app/i18n/zh-cn/sub.php @@ -36,8 +36,8 @@ 'title' => '标题', ), 'feed' => array( - 'accept_cookies' => 'Accept cookies', // TODO - 'accept_cookies_help' => 'Allow the feed server to set cookies (stored in memory for the duration of the request only)', // TODO + 'accept_cookies' => '接受 Cookies', + 'accept_cookies_help' => '允许提要服务器设置 Cookies(仅在请求期间存储在内存中)', 'add' => '添加订阅源', 'advanced' => '高级', 'archiving' => '归档', @@ -126,8 +126,8 @@ 'reload_articles_help' => '重载 n 篇文章并抓取内容(若设置了 CSS 选择器)', 'title' => '维护', ), - 'max_http_redir' => 'Max HTTP redirects', // TODO - 'max_http_redir_help' => 'Set to 0 or leave blank to disable, -1 for unlimited redirects', // TODO + 'max_http_redir' => '最大 HTTP 重定向', + 'max_http_redir_help' => '设置为 0 或留空以禁用,-1 表示无限重定向', 'moved_category_deleted' => '删除分类时,其中的订阅源会自动归类到 %s', 'mute' => '暂停', 'no_selected' => '未选择订阅源', From 2cc8411cb06ed26297f460c94d1eaddfe5e4123e Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Sat, 3 Sep 2022 10:37:27 +0200 Subject: [PATCH 0360/2479] Update changelog --- CHANGELOG.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8dc8d55122f..4f1c1b68bbf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -24,17 +24,18 @@ * Easier definition of default user queries for new users in `data/config-user.custom.php` [#4360](https://github.com/FreshRSS/FreshRSS/pull/4360) * New sharing through standard [Web Share API](https://www.w3.org/TR/web-share/) [#4271](https://github.com/FreshRSS/FreshRSS/pull/4271) * New sharing with Xing, Reddit, Pinterest, WhatsApp [#4270](https://github.com/FreshRSS/FreshRSS/pull/4270) + * New sharing with [`archive.today`](https://archive.ph/) [#4530](https://github.com/FreshRSS/FreshRSS/pull/4530) * SimplePie * New method `rename_attribute()` instead of removing attributes to better be able to style/hide content of articles [#4175](https://github.com/FreshRSS/FreshRSS/pull/4175), [simplepie#717](https://github.com/simplepie/simplepie/pull/717) * Fix parsing of HTTP Links [simplepie#729](https://github.com/simplepie/simplepie/pull/729) * Fix `status_code` type for PHP 8.1+ [simplepie#728](https://github.com/simplepie/simplepie/pull/728) * Bug fixing + * Fix last update & archive logic (especially for very long feeds, for which some old items were marked as unread) [#4422](https://github.com/FreshRSS/FreshRSS/pull/4422) * Fix regression with Fever API on 32-bit platforms [#4201](https://github.com/FreshRSS/FreshRSS/pull/4201) * Fix read-when-same-title bug [#4206](https://github.com/FreshRSS/FreshRSS/pull/4206) * Fix some search expressions such as `"ab cd"` and `ab-cd` [#4277](https://github.com/FreshRSS/FreshRSS/pull/4277) * WebSub: Use hash instead of base64 to handle long URLs [#4282](https://github.com/FreshRSS/FreshRSS/pull/4282) - * Fix last update & archive logic [#4422](https://github.com/FreshRSS/FreshRSS/pull/4422) * Fix handling of authors with ampersand `&` [#4287](https://github.com/FreshRSS/FreshRSS/pull/4287) * Fix lazy loading images containing a quote `'` in the address [#4330](https://github.com/FreshRSS/FreshRSS/pull/4330) * Fix database size calculation for PostgreSQL [#4249](https://github.com/FreshRSS/FreshRSS/pull/4249) @@ -77,6 +78,7 @@ * New theme *Dark pink* [#4311](https://github.com/FreshRSS/FreshRSS/pull/4311) * New theme *Nord* [#4400](https://github.com/FreshRSS/FreshRSS/pull/4400) * Improve themes *Ansum* [#4538](https://github.com/FreshRSS/FreshRSS/pull/4538), [#4549](https://github.com/FreshRSS/FreshRSS/pull/4549); + *Flat* [#4575](https://github.com/FreshRSS/FreshRSS/pull/4575); *Mapco* [#4491](https://github.com/FreshRSS/FreshRSS/pull/4491), [#4491](https://github.com/FreshRSS/FreshRSS/pull/4491); *Swage* [#4493](https://github.com/FreshRSS/FreshRSS/pull/4493), [#4512](https://github.com/FreshRSS/FreshRSS/pull/4512) * Extensions @@ -84,7 +86,7 @@ * i18n * Improve i18n CLI [#4197](https://github.com/FreshRSS/FreshRSS/pull/4197), [#4199](https://github.com/FreshRSS/FreshRSS/pull/4199) * Improve Chinese [#4332](https://github.com/FreshRSS/FreshRSS/pull/4332), [#4337](https://github.com/FreshRSS/FreshRSS/pull/4337), [#4379](https://github.com/FreshRSS/FreshRSS/pull/4379), - [#4509](https://github.com/FreshRSS/FreshRSS/pull/4509) + [#4509](https://github.com/FreshRSS/FreshRSS/pull/4509), [#4577](https://github.com/FreshRSS/FreshRSS/pull/4577) * Improve English [#4450](https://github.com/FreshRSS/FreshRSS/pull/4450) * Improve German [#4525](https://github.com/FreshRSS/FreshRSS/pull/4525) * Improve Korean [#4572](https://github.com/FreshRSS/FreshRSS/pull/4572) @@ -116,7 +118,6 @@ * Use `.gitattributes` `export-ignore` [#4415](https://github.com/FreshRSS/FreshRSS/pull/4415) * Remove HTTP Referer for HTML download [#4372](https://github.com/FreshRSS/FreshRSS/pull/4372) * Add database field `attributes` (JSON) for entries [#4444](https://github.com/FreshRSS/FreshRSS/pull/4444) - * Add [`archive.today`](https://archive.ph/) as sharing service [#4530](https://github.com/FreshRSS/FreshRSS/pull/4530) * Improve dev automated checks [#4209](https://github.com/FreshRSS/FreshRSS/pull/4209) * Update dev dependencies [#4173](https://github.com/FreshRSS/FreshRSS/pull/4173), [#4203](https://github.com/FreshRSS/FreshRSS/pull/4203), [#4241](https://github.com/FreshRSS/FreshRSS/pull/4241), [#4419](https://github.com/FreshRSS/FreshRSS/pull/4419), [#4424](https://github.com/FreshRSS/FreshRSS/pull/4424) From d921be63f67fe22a4c822c0a37a5da113512d0c8 Mon Sep 17 00:00:00 2001 From: -Shiken- <58270741+den13501@users.noreply.github.com> Date: Sun, 4 Sep 2022 16:44:36 +0800 Subject: [PATCH 0361/2479] [i18n] Add zh-TW translation (#4578) --- CREDITS.md | 1 + app/i18n/cz/gen.php | 1 + app/i18n/de/gen.php | 1 + app/i18n/en-us/gen.php | 1 + app/i18n/en/gen.php | 1 + app/i18n/es/gen.php | 1 + app/i18n/fr/gen.php | 1 + app/i18n/he/gen.php | 1 + app/i18n/it/gen.php | 1 + app/i18n/ja/gen.php | 1 + app/i18n/ko/gen.php | 1 + app/i18n/nl/gen.php | 1 + app/i18n/oc/gen.php | 1 + app/i18n/pl/gen.php | 1 + app/i18n/pt-br/gen.php | 1 + app/i18n/ru/gen.php | 1 + app/i18n/sk/gen.php | 1 + app/i18n/tr/gen.php | 1 + app/i18n/zh-cn/gen.php | 1 + app/i18n/zh-tw/admin.php | 216 +++++++++++++++++++++++++++ app/i18n/zh-tw/conf.php | 283 ++++++++++++++++++++++++++++++++++++ app/i18n/zh-tw/feedback.php | 144 ++++++++++++++++++ app/i18n/zh-tw/gen.php | 236 ++++++++++++++++++++++++++++++ app/i18n/zh-tw/index.php | 75 ++++++++++ app/i18n/zh-tw/install.php | 133 +++++++++++++++++ app/i18n/zh-tw/sub.php | 209 ++++++++++++++++++++++++++ app/i18n/zh-tw/user.php | 54 +++++++ 27 files changed, 1369 insertions(+) create mode 100644 app/i18n/zh-tw/admin.php create mode 100644 app/i18n/zh-tw/conf.php create mode 100644 app/i18n/zh-tw/feedback.php create mode 100644 app/i18n/zh-tw/gen.php create mode 100644 app/i18n/zh-tw/index.php create mode 100644 app/i18n/zh-tw/install.php create mode 100644 app/i18n/zh-tw/sub.php create mode 100644 app/i18n/zh-tw/user.php diff --git a/CREDITS.md b/CREDITS.md index 5d4477b3f4a..d874e0c3696 100644 --- a/CREDITS.md +++ b/CREDITS.md @@ -45,6 +45,7 @@ People are sorted by name so please keep this order. * [danc](https://github.com/danc): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:danc), [Web](http://tintouli.free.fr/) * [Daniel Lo Nigro](https://github.com/Daniel15): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:Daniel15), [Web](https://d.sb/) * [David Souza](https://github.com/araujo0205): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:araujo0205), [Web](http://davidsouza.tech/) +* [Dennis Cheng](https://github.com/den13501): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:den13501) * [Django Janny](https://github.com/keltroth): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:keltroth) * [drosoCode](https://github.com/drosoCode): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:drosoCode), [Web](https://thomasz.me/) * [dswd](https://github.com/dswd): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:dswd) diff --git a/app/i18n/cz/gen.php b/app/i18n/cz/gen.php index 2fcc843deb1..4afc419a1ba 100644 --- a/app/i18n/cz/gen.php +++ b/app/i18n/cz/gen.php @@ -156,6 +156,7 @@ 'sk' => 'Slovenčina', // IGNORE 'tr' => 'Türkçe', // IGNORE 'zh-cn' => '简体中文', // IGNORE + 'zh-tw' => '正體中文', // IGNORE ), 'menu' => array( 'about' => 'O aplikaci', diff --git a/app/i18n/de/gen.php b/app/i18n/de/gen.php index 745c52915e2..a22d3d4664a 100644 --- a/app/i18n/de/gen.php +++ b/app/i18n/de/gen.php @@ -156,6 +156,7 @@ 'sk' => 'Slovenčina', // IGNORE 'tr' => 'Türkçe', // IGNORE 'zh-cn' => '简体中文', // IGNORE + 'zh-tw' => '正體中文', // IGNORE ), 'menu' => array( 'about' => 'Über', diff --git a/app/i18n/en-us/gen.php b/app/i18n/en-us/gen.php index 8faa93a1466..a818fa67054 100644 --- a/app/i18n/en-us/gen.php +++ b/app/i18n/en-us/gen.php @@ -156,6 +156,7 @@ 'sk' => 'Slovenčina', // IGNORE 'tr' => 'Türkçe', // IGNORE 'zh-cn' => '简体中文', // IGNORE + 'zh-tw' => '正體中文', // IGNORE ), 'menu' => array( 'about' => 'About', // IGNORE diff --git a/app/i18n/en/gen.php b/app/i18n/en/gen.php index d825a321b62..5a6cbc9b956 100644 --- a/app/i18n/en/gen.php +++ b/app/i18n/en/gen.php @@ -156,6 +156,7 @@ 'sk' => 'Slovenčina', 'tr' => 'Türkçe', 'zh-cn' => '简体中文', + 'zh-tw' => '正體中文', ), 'menu' => array( 'about' => 'About', diff --git a/app/i18n/es/gen.php b/app/i18n/es/gen.php index c8ff1454c48..92e1331e562 100755 --- a/app/i18n/es/gen.php +++ b/app/i18n/es/gen.php @@ -156,6 +156,7 @@ 'sk' => 'Slovenčina', // IGNORE 'tr' => 'Türkçe', // IGNORE 'zh-cn' => '简体中文', // IGNORE + 'zh-tw' => '正體中文', // IGNORE ), 'menu' => array( 'about' => 'Acerca de', diff --git a/app/i18n/fr/gen.php b/app/i18n/fr/gen.php index 66abf504be1..9fbd736423d 100644 --- a/app/i18n/fr/gen.php +++ b/app/i18n/fr/gen.php @@ -156,6 +156,7 @@ 'sk' => 'Slovenčina', // IGNORE 'tr' => 'Türkçe', // IGNORE 'zh-cn' => '简体中文', // IGNORE + 'zh-tw' => '正體中文', // IGNORE ), 'menu' => array( 'about' => 'À propos', diff --git a/app/i18n/he/gen.php b/app/i18n/he/gen.php index f091c40d60c..c50f0fef7fa 100644 --- a/app/i18n/he/gen.php +++ b/app/i18n/he/gen.php @@ -156,6 +156,7 @@ 'sk' => 'Slovenčina', // IGNORE 'tr' => 'Türkçe', // IGNORE 'zh-cn' => '简体中文', // IGNORE + 'zh-tw' => '正體中文', // IGNORE ), 'menu' => array( 'about' => 'אודות', diff --git a/app/i18n/it/gen.php b/app/i18n/it/gen.php index d0e23a141e2..e5c020b3ee4 100644 --- a/app/i18n/it/gen.php +++ b/app/i18n/it/gen.php @@ -156,6 +156,7 @@ 'sk' => 'Slovenčina', // IGNORE 'tr' => 'Türkçe', // IGNORE 'zh-cn' => '简体中文', // IGNORE + 'zh-tw' => '正體中文', // IGNORE ), 'menu' => array( 'about' => 'Informazioni', diff --git a/app/i18n/ja/gen.php b/app/i18n/ja/gen.php index a26db3eefae..a3f80b1fea0 100644 --- a/app/i18n/ja/gen.php +++ b/app/i18n/ja/gen.php @@ -156,6 +156,7 @@ 'sk' => 'Slovenčina', // IGNORE 'tr' => 'Türkçe', // IGNORE 'zh-cn' => '简体中文', // IGNORE + 'zh-tw' => '正體中文', // IGNORE ), 'menu' => array( 'about' => 'FreshRSSについて', diff --git a/app/i18n/ko/gen.php b/app/i18n/ko/gen.php index 0ebf81b6c2d..24d95d2ff53 100644 --- a/app/i18n/ko/gen.php +++ b/app/i18n/ko/gen.php @@ -156,6 +156,7 @@ 'sk' => 'Slovenčina', // IGNORE 'tr' => 'Türkçe', // IGNORE 'zh-cn' => '简体中文', // IGNORE + 'zh-tw' => '正體中文', // IGNORE ), 'menu' => array( 'about' => '정보', diff --git a/app/i18n/nl/gen.php b/app/i18n/nl/gen.php index 8a5851baf5f..f09cf54676a 100644 --- a/app/i18n/nl/gen.php +++ b/app/i18n/nl/gen.php @@ -156,6 +156,7 @@ 'sk' => 'Slovenčina', // IGNORE 'tr' => 'Türkçe', // IGNORE 'zh-cn' => '简体中文', // IGNORE + 'zh-tw' => '正體中文', // IGNORE ), 'menu' => array( 'about' => 'Over', diff --git a/app/i18n/oc/gen.php b/app/i18n/oc/gen.php index 913832a1996..c8244026f34 100644 --- a/app/i18n/oc/gen.php +++ b/app/i18n/oc/gen.php @@ -156,6 +156,7 @@ 'sk' => 'Slovenčina', // IGNORE 'tr' => 'Türkçe', // IGNORE 'zh-cn' => '简体中文', // IGNORE + 'zh-tw' => '正體中文', // IGNORE ), 'menu' => array( 'about' => 'A prepaus', diff --git a/app/i18n/pl/gen.php b/app/i18n/pl/gen.php index 636c86c4cc5..619567ac154 100644 --- a/app/i18n/pl/gen.php +++ b/app/i18n/pl/gen.php @@ -156,6 +156,7 @@ 'sk' => 'Slovenčina', // IGNORE 'tr' => 'Türkçe', // IGNORE 'zh-cn' => '简体中文', // IGNORE + 'zh-tw' => '正體中文', // IGNORE ), 'menu' => array( 'about' => 'O serwisie', diff --git a/app/i18n/pt-br/gen.php b/app/i18n/pt-br/gen.php index 240646810db..710c901e96b 100644 --- a/app/i18n/pt-br/gen.php +++ b/app/i18n/pt-br/gen.php @@ -156,6 +156,7 @@ 'sk' => 'Slovenčina', // IGNORE 'tr' => 'Türkçe', // IGNORE 'zh-cn' => '简体中文', // IGNORE + 'zh-tw' => '正體中文', // IGNORE ), 'menu' => array( 'about' => 'Sobre', diff --git a/app/i18n/ru/gen.php b/app/i18n/ru/gen.php index d10dac020e6..7602e9c9a72 100644 --- a/app/i18n/ru/gen.php +++ b/app/i18n/ru/gen.php @@ -156,6 +156,7 @@ 'sk' => 'Slovenčina', // IGNORE 'tr' => 'Türkçe', // IGNORE 'zh-cn' => '简体中文', // IGNORE + 'zh-tw' => '正體中文', // IGNORE ), 'menu' => array( 'about' => 'О проекте', diff --git a/app/i18n/sk/gen.php b/app/i18n/sk/gen.php index dc114d000a4..b730f17a89b 100644 --- a/app/i18n/sk/gen.php +++ b/app/i18n/sk/gen.php @@ -156,6 +156,7 @@ 'sk' => 'Slovenčina', // IGNORE 'tr' => 'Türkçe', // IGNORE 'zh-cn' => '简体中文', // IGNORE + 'zh-tw' => '正體中文', // IGNORE ), 'menu' => array( 'about' => 'O FreshRSS', diff --git a/app/i18n/tr/gen.php b/app/i18n/tr/gen.php index e8ea72f5ded..04c0f796314 100644 --- a/app/i18n/tr/gen.php +++ b/app/i18n/tr/gen.php @@ -156,6 +156,7 @@ 'sk' => 'Slovenčina', // IGNORE 'tr' => 'Türkçe', // IGNORE 'zh-cn' => '简体中文', // IGNORE + 'zh-tw' => '正體中文', // IGNORE ), 'menu' => array( 'about' => 'Hakkında', diff --git a/app/i18n/zh-cn/gen.php b/app/i18n/zh-cn/gen.php index 678f75e7d09..1157ba73cda 100644 --- a/app/i18n/zh-cn/gen.php +++ b/app/i18n/zh-cn/gen.php @@ -156,6 +156,7 @@ 'sk' => 'Slovenčina', // IGNORE 'tr' => 'Türkçe', // IGNORE 'zh-cn' => '简体中文', // IGNORE + 'zh-tw' => '正體中文', // IGNORE ), 'menu' => array( 'about' => '关于', diff --git a/app/i18n/zh-tw/admin.php b/app/i18n/zh-tw/admin.php new file mode 100644 index 00000000000..869555dde73 --- /dev/null +++ b/app/i18n/zh-tw/admin.php @@ -0,0 +1,216 @@ + array( + 'allow_anonymous' => '允許匿名閱讀預設使用者(%s)的文章', + 'allow_anonymous_refresh' => '允許匿名刷新文章', + 'api_enabled' => '允許 API 訪問 (用於手機應用)', + 'form' => '網頁表單(傳統方式, 需要 JavaScript)', + 'http' => 'HTTP(面向啟用 HTTPS 的高級用戶)', + 'none' => '無認證(危險)', + 'title' => '認證', + 'token' => '認證口令', + 'token_help' => '用於不經認證訪問預設使用者的 RSS 輸出:', + 'type' => '認證方式', + 'unsafe_autologin' => '允許不安全的自動登入方式:', + ), + 'check_install' => array( + 'cache' => array( + 'nok' => '請檢查 ./data/cache 目錄權限。HTTP 伺服器必須有其寫入權限。', + 'ok' => 'cache 目錄權限正常', + ), + 'categories' => array( + 'nok' => 'Category 表配置錯誤', + 'ok' => 'Category 表正常', + ), + 'connection' => array( + 'nok' => '資料庫連接失敗', + 'ok' => '資料庫連接正常', + ), + 'ctype' => array( + 'nok' => '找不到字元類型檢測庫(php-ctype)', + 'ok' => '已找到字元類型檢測庫 (php-ctype)', + ), + 'curl' => array( + 'nok' => '找不到 cURL 庫(php-cURL)', + 'ok' => '已找到 cURL 庫(php-cURL)', + ), + 'data' => array( + 'nok' => '請檢查 ./data 目錄權限。HTTP 伺服器必須有其寫入權限。', + 'ok' => 'data 目錄權限正常', + ), + 'database' => '資料庫相關', + 'dom' => array( + 'nok' => '找不到用於瀏覽 DOM 的庫(php-xml)', + 'ok' => '已找到用於瀏覽 DOM 的庫(php-xml)', + ), + 'entries' => array( + 'nok' => 'Entry 表配置錯誤', + 'ok' => 'Entry 表正常', + ), + 'favicons' => array( + 'nok' => '請檢查 ./data/favicons 目錄權限。HTTP 伺服器必須有其寫入權限。', + 'ok' => 'favicons 目錄權限正常', + ), + 'feeds' => array( + 'nok' => 'Feed 表配置錯誤', + 'ok' => 'Feed 表正常', + ), + 'fileinfo' => array( + 'nok' => '找不到 fileinfo 庫(php-fileinfo)', + 'ok' => '已找到 fileinfo 庫(php-fileinfo)', + ), + 'files' => '文件相關', + 'json' => array( + 'nok' => '找不到 JSON 擴展(php-json )', + 'ok' => '已找到 JSON 擴展(php-json)', + ), + 'mbstring' => array( + 'nok' => '找不到推薦的 Unicode 解析庫(mbstring)', + 'ok' => '已找到推薦的 Unicode 解析庫(mbstring)', + ), + 'pcre' => array( + 'nok' => '找不到正則表達式解析庫(php-pcre)', + 'ok' => '已找到正則表達式解析庫(php-pcre)', + ), + 'pdo' => array( + 'nok' => '找不到 PDO 或支持的驅動(pdo_mysql、pdo_sqlite、pdo_pgsql)', + 'ok' => '已找到 PDO 和支持的至少一種驅動(pdo_mysql、pdo_sqlite、pdo_pgsql)', + ), + 'php' => array( + '_' => 'PHP 相關', + 'nok' => '你的 PHP 版本為 %s,但 FreshRSS 最低需要 %s', + 'ok' => '你的 PHP 版本為 %s,與 FreshRSS 相容', + ), + 'tables' => array( + 'nok' => '資料庫中缺少一個或多個表', + 'ok' => '資料庫中相關表存在', + ), + 'title' => '環境檢查', + 'tokens' => array( + 'nok' => '請檢查 ./data/tokens 目錄權限。HTTP 伺服器必須有其寫入權限。', + 'ok' => 'tokens 目錄權限正常', + ), + 'users' => array( + 'nok' => '請檢查 ./data/users 目錄權限。HTTP 伺服器必須有其寫入權限。', + 'ok' => 'users 目錄權限正常', + ), + 'zip' => array( + 'nok' => '找不到 ZIP 擴展(php-zip)', + 'ok' => '已找到 ZIP 擴展', + ), + ), + 'extensions' => array( + 'author' => '作者', + 'community' => '可用的社群擴充功能', + 'description' => '描述', + 'disabled' => '已禁用', + 'empty_list' => '沒有已安裝的擴充功能', + 'enabled' => '已啟用', + 'latest' => '已安裝', + 'name' => '名稱', + 'no_configure_view' => '此擴充功能不能配置。', + 'system' => array( + '_' => '系統擴充功能', + 'no_rights' => '系統擴充功能(你無權修改)', + ), + 'title' => '擴充功能', + 'update' => '更新可用', + 'user' => '用戶擴充功能', + 'version' => '版本', + ), + 'stats' => array( + '_' => '統計', + 'all_feeds' => '所有訂閱源', + 'category' => '分類', + 'entry_count' => '文章數', + 'entry_per_category' => '各分類文章數', + 'entry_per_day' => '近三十日每日文章數', + 'entry_per_day_of_week' => '一週各日(平均:%.2f 條消息)', + 'entry_per_hour' => '各小時(平均:%.2f 條消息)', + 'entry_per_month' => '各月(平均:%.2f 條消息)', + 'entry_repartition' => '文章分布', + 'feed' => '訂閱源', + 'feed_per_category' => '各分類訂閱源數', + 'idle' => '長期無更新訂閱源', + 'main' => '主要統計', + 'main_stream' => '首頁', + 'no_idle' => '訂閱源近期皆有更新!', + 'number_entries' => '%d 篇文章', + 'percent_of_total' => '%%', + 'repartition' => '文章分布', + 'status_favorites' => '收藏', + 'status_read' => '已讀', + 'status_total' => '總計', + 'status_unread' => '未讀', + 'title' => '統計', + 'top_feed' => '前十訂閱源', + ), + 'system' => array( + '_' => '系統配置', + 'auto-update-url' => '自動升級伺服器地址', + 'cookie-duration' => array( + 'help' => '單位(秒)', + 'number' => '保持登錄的時長', + ), + 'force_email_validation' => '強制驗證郵箱地址', + 'instance-name' => '實例名稱', + 'max-categories' => '各使用者分類數限制', + 'max-feeds' => '各使用者訂閱源數限制', + 'registration' => array( + 'number' => '最大使用者數', + 'select' => array( + 'label' => '註冊表單', + 'option' => array( + 'noform' => '禁用,無註冊表單', + 'nolimit' => '啟用,且無帳號限制', + 'setaccountsnumber' => '設置用戶數的最大值', + ), + ), + 'status' => array( + 'disabled' => '註冊表單禁用', + 'enabled' => '註冊表單啟用', + ), + 'title' => '使用者註冊表單', + ), + ), + 'update' => array( + '_' => '更新系統', + 'apply' => '應用', + 'check' => '檢查更新', + 'current_version' => '當前 FreshRSS 版本為 %s。', + 'last' => '上次檢查:%s', + 'none' => '沒有可用更新', + 'title' => '系統更新', + ), + 'user' => array( + 'admin' => '管理員', + 'article_count' => '文章數', + 'back_to_manage' => '← 返回用戶列表', + 'create' => '新增使用者', + 'database_size' => '資料庫大小', + 'email' => '郵箱地址', + 'enabled' => '已啟用', + 'feed_count' => '訂閱源數', + 'is_admin' => '管理員', + 'language' => '語言', + 'last_user_activity' => '上次使用者活躍', + 'list' => '使用者列表', + 'number' => '已有 %d 個使用者', + 'numbers' => '已有 %d 個使用者', + 'password_form' => '密碼
    (用於網頁表單登錄方式)', + 'password_format' => '至少 7 個字元', + 'title' => '使用者管理', + 'username' => '使用者名稱', + ), +); diff --git a/app/i18n/zh-tw/conf.php b/app/i18n/zh-tw/conf.php new file mode 100644 index 00000000000..1756954132b --- /dev/null +++ b/app/i18n/zh-tw/conf.php @@ -0,0 +1,283 @@ + array( + '_' => '歸檔', + 'exception' => '高級清理策略', + 'help' => '具體選項位於各訂閱源的設置', + 'keep_favourites' => '不清理已收藏的文章', + 'keep_labels' => '不清理標簽', + 'keep_max' => '最多保留的文章數', + 'keep_min_by_feed' => '至少保留的文章數', + 'keep_period' => '文章最多保留', + 'keep_unreads' => '不清理未讀文章', + 'maintenance' => '優化', + 'optimize' => '優化資料庫', + 'optimize_help' => '偶爾執行優化可以減少資料庫大小', + 'policy' => '清理策略', + 'policy_warning' => '如果未選擇清理策略,則將保留全部文章。', + 'purge_now' => '立即清除', + 'title' => '存檔', + 'ttl' => '最小自動刷新間隔', + ), + 'display' => array( + '_' => '顯示', + 'icon' => array( + 'bottom_line' => '底欄', + 'display_authors' => '作者', + 'entry' => '文章圖示', + 'publication_date' => '更新日期', + 'related_tags' => '相關標簽', + 'sharing' => '分享', + 'summary' => '摘要', + 'top_line' => '頂欄', + ), + 'language' => '語言', + 'notif_html5' => array( + 'seconds' => '秒(0 表示不超時)', + 'timeout' => 'HTML5 通知超時時間', + ), + 'show_nav_buttons' => '顯示導航按鈕', + 'theme' => '主題', + 'theme_not_available' => '“%s” 主題不再可用,請選擇其他主題。', + 'thumbnail' => array( + 'label' => '縮圖', + 'landscape' => '風景', + 'none' => '無', + 'portrait' => '肖像', + 'square' => '方塊', + ), + 'title' => '顯示', + 'width' => array( + 'content' => '內容寬度', + 'large' => '寬', + 'medium' => '中', + 'no_limit' => '無限制', + 'thin' => '窄', + ), + ), + 'logs' => array( + 'loglist' => array( + 'level' => '日誌等級', + 'message' => '信息', + 'timestamp' => '時間', + ), + 'pagination' => array( + 'first' => '首頁', + 'last' => '末頁', + 'next' => '下一頁', + 'previous' => '上一頁', + ), + ), + 'profile' => array( + '_' => '使用者管理', + 'api' => 'API 管理', + 'delete' => array( + '_' => '帳號刪除', + 'warn' => '將刪除你的帳號以及所有相關數據!', + ), + 'email' => '郵箱地址', + 'password_api' => 'API 密碼
    (例如用於手機應用)', + 'password_form' => '密碼
    (用於 Web-form 登入方式)', + 'password_format' => '至少 7 個字元', + 'title' => '用戶帳號', + ), + 'query' => array( + '_' => '自定義查詢', + 'deprecated' => '此查詢不再有效。相關的分類或訂閱源已被刪除。', + 'filter' => array( + '_' => '生效的過濾器:', + 'categories' => '按分類顯示', + 'feeds' => '按訂閱源顯示', + 'order' => '按日期排序', + 'search' => '表達式', + 'state' => '狀態', + 'tags' => '按標簽顯示', + 'type' => '類型', + ), + 'get_all' => '顯示所有文章', + 'get_category' => '顯示分類 "%s"', + 'get_favorite' => '顯示收藏文章', + 'get_feed' => '顯示訂閱源 "%s"', + 'name' => '名稱', + 'no_filter' => '無過濾器', + 'number' => '查詢 n°%d', + 'order_asc' => '由舊至新顯示文章', + 'order_desc' => '由新至舊顯示文章', + 'search' => '搜尋 "%s"', + 'state_0' => '顯示所有文章', + 'state_1' => '顯示已讀文章', + 'state_2' => '顯示未讀文章', + 'state_3' => '顯示所有文章', + 'state_4' => '顯示收藏文章', + 'state_5' => '顯示已讀的收藏文章', + 'state_6' => '顯示未讀的收藏文章', + 'state_7' => '顯示收藏文章', + 'state_8' => '顯示未收藏文章', + 'state_9' => '顯示已讀的未收藏文章', + 'state_10' => '顯示未讀的未收藏文章', + 'state_11' => '顯示未收藏文章', + 'state_12' => '顯示所有文章', + 'state_13' => '顯示已讀文章', + 'state_14' => '顯示未讀文章', + 'state_15' => '顯示所有文章', + 'title' => '自定義查詢', + ), + 'reading' => array( + '_' => '閱讀', + 'after_onread' => '「全部標記為已讀」後', + 'always_show_favorites' => '預設顯示收藏夾中所有的文章', + 'article' => array( + 'authors_date' => array( + '_' => '作者和日期', + 'both' => '兩者都顯示', + 'footer' => '僅頁腳顯示', + 'header' => '僅頁眉顯示', + 'none' => '不顯示', + ), + 'feed_name' => array( + 'above_title' => '在文章標題和標簽上方', + 'none' => '不顯示', + 'with_authors' => '與作者和日期一行', + ), + 'feed_title' => '訂閱源標題', + 'tags' => array( + '_' => '文章標簽', + 'both' => '兩者都顯示', + 'footer' => '僅頁腳顯示', + 'header' => '僅頁眉顯示', + 'none' => '不顯示', + ), + 'tags_max' => array( + '_' => '標簽最多顯示個數', + 'help' => '0 標識顯示所有標簽', + ), + ), + 'articles_per_page' => '每頁文章數', + 'auto_load_more' => '在頁面底部載入更多文章', + 'auto_remove_article' => '閱讀後隱藏文章', + 'confirm_enabled' => '「全部標記為已讀」時顯示確認對話框', + 'display_articles_unfolded' => '預設展開顯示文章', + 'display_categories_unfolded' => '要展開的分類', + 'headline' => array( + 'articles' => '文章:打開/關閉', + 'articles_header_footer' => '文章: 頁眉/頁腳', + 'categories' => '左側導航:分類', + 'mark_as_read' => '標為已讀選項', + 'misc' => '其它', + 'view' => '瀏覽', + ), + 'hide_read_feeds' => '隱藏沒有未讀文章的分類和訂閱源 (啟用「顯示所有文章」後不生效)', + 'img_with_lazyload' => '延遲加載圖片', + 'jump_next' => '跳轉到下一未讀項(訂閱源或分類)', + 'mark_updated_article_unread' => '將更新的文章設為未讀', + 'number_divided_when_reader' => '閱讀視圖中顯示一半', + 'read' => array( + 'article_open_on_website' => '在打開原文章後', + 'article_viewed' => '在文章被瀏覽後', + 'keep_max_n_unread' => '未讀最多保留 n 條', + 'scroll' => '在滾動瀏覽後', + 'upon_gone' => '在被原訂閱源移除後', + 'upon_reception' => '在接收文章後', + 'when' => '何時將文章標記為已讀', + 'when_same_title' => '已存在 n 條相同標題文章', + ), + 'show' => array( + '_' => '文章顯示', + 'active_category' => '啟用的分類', + 'adaptive' => '智能顯示', + 'all_articles' => '顯示所有', + 'all_categories' => '所有分類', + 'no_category' => '無分類', + 'remember_categories' => '記住打開的分類', + 'unread' => '只顯示未讀', + ), + 'show_fav_unread_help' => '同樣適用於標簽', + 'sides_close_article' => '點擊文章區域外以關閉', + 'sort' => array( + '_' => '排列順序', + 'newer_first' => '由新至舊', + 'older_first' => '由舊至新', + ), + 'sticky_post' => '打開文章時將其置於頁首', + 'title' => '閱讀', + 'view' => array( + 'default' => '預設視圖', + 'global' => '全屏視圖', + 'normal' => '普通視圖', + 'reader' => '閱讀視圖', + ), + ), + 'sharing' => array( + '_' => '分享', + 'add' => '添加分享方式', + 'blogotext' => 'Blogotext', // IGNORE + 'deprecated' => '這項功能已廢棄並在將來版本的 FreshRSS 中移除,詳情請見 說明文檔.', + 'diaspora' => 'Diaspora*', // IGNORE + 'email' => '郵箱', // IGNORE + 'facebook' => '臉書', // IGNORE + 'more_information' => '更多信息', + 'print' => '打印', + 'raindrop' => 'Raindrop.io', // IGNORE + 'remove' => '刪除分享方式', + 'shaarli' => 'Shaarli', // IGNORE + 'share_name' => '名稱', + 'share_url' => '地址', + 'title' => '分享', + 'twitter' => '推特', // IGNORE + 'wallabag' => 'Wallabag', // IGNORE + ), + 'shortcut' => array( + '_' => '快捷鍵', + 'article_action' => '文章操作', + 'auto_share' => '分享', + 'auto_share_help' => '如果有多種分享方式,則會按照它們的序號依次訪問。', + 'close_dropdown' => '關閉菜單', + 'collapse_article' => '收起文章', + 'first_article' => '打開第一篇文章', + 'focus_search' => '聚焦到搜尋框', + 'global_view' => '切換到全屏視圖', + 'help' => '顯示幫助文檔', + 'javascript' => '若要使用快捷鍵,必須啟用 JavaScript', + 'last_article' => '打開最後一篇文章', + 'load_more' => '載入更多文章', + 'mark_favorite' => '加入收藏', + 'mark_read' => '設為已讀', + 'navigation' => '瀏覽', + 'navigation_help' => '組合 ⇧ Shift 鍵,瀏覽快捷鍵將生效於訂閱源。
    組合 Alt ⎇ 鍵,瀏覽快捷鍵將生效於分類。', + 'navigation_no_mod_help' => '以下快捷鍵不支持組合鍵(Shift 或 Alt)', + 'next_article' => '打開下一篇文章', + 'next_unread_article' => '打開下一篇未讀文章', + 'non_standard' => '這些鍵 (%s) 可能不能作為快捷鍵', + 'normal_view' => '切換到普通視圖', + 'other_action' => '其它操作', + 'previous_article' => '打開上一篇文章', + 'reading_view' => '切換到閱讀視圖', + 'rss_view' => '切換到 RSS 視圖', + 'see_on_website' => '在原網站中查看', + 'shift_for_all_read' => '組合 Alt ⎇鍵 將上方的文章標記為已讀
    組合 ⇧ Shift按鍵 可以將全部文章設為已讀', + 'skip_next_article' => '跳轉到下一篇文章而不打開', + 'skip_previous_article' => '跳轉到上一篇文章而不打開', + 'title' => '快捷鍵', + 'toggle_media' => '播放/暫停媒體', + 'user_filter' => '顯示自定義查詢', + 'user_filter_help' => '如果有多個自定義過濾器,則會按照它們的序號依次訪問。', + 'views' => '視圖', + ), + 'user' => array( + 'articles_and_size' => '%s 篇文章 (%s)', + 'current' => '當前使用者', + 'is_admin' => '該使用者為管理員', + 'users' => '用戶', + ), +); diff --git a/app/i18n/zh-tw/feedback.php b/app/i18n/zh-tw/feedback.php new file mode 100644 index 00000000000..8fae4d4ef79 --- /dev/null +++ b/app/i18n/zh-tw/feedback.php @@ -0,0 +1,144 @@ + array( + 'denied' => '你無權訪問此頁面', + 'not_found' => '你尋找的頁面不存在', + ), + 'admin' => array( + 'optimization_complete' => '優化完成', + ), + 'api' => array( + 'password' => array( + 'failed' => '您的密碼無法修改', + 'updated' => '您的密碼已修改', + ), + ), + 'auth' => array( + 'login' => array( + 'invalid' => '用戶名或密碼無效', + 'success' => '登入成功', + ), + 'logout' => array( + 'success' => '已登出', + ), + ), + 'conf' => array( + 'error' => '保存配置時出錯', + 'query_created' => '查詢 "%s" 已創建。', + 'shortcuts_updated' => '快捷鍵已更新', + 'updated' => '配置已更新', + ), + 'extensions' => array( + 'already_enabled' => '%s 已啟用', + 'cannot_remove' => '無法刪除 %s', + 'disable' => array( + 'ko' => '禁用 %s 失敗。檢查 FreshRSS 日誌 查看詳情。', + 'ok' => '%s 現已禁用', + ), + 'enable' => array( + 'ko' => '%s 啟用失敗。檢查 FreshRSS 日誌 查看詳情。', + 'ok' => '%s 現已啟用', + ), + 'no_access' => '你無權訪問 %s', + 'not_enabled' => '%s 未啟用', + 'not_found' => '%s 不存在', + 'removed' => '%s 已刪除', + ), + 'import_export' => array( + 'export_no_zip_extension' => '伺服器未啟用 ZIP 擴展。請嘗試逐個導出文件。', + 'feeds_imported' => '你的訂閱已導入,即將刷新', + 'feeds_imported_with_errors' => '你的訂閱源已導入,但發生錯誤', + 'file_cannot_be_uploaded' => '文件未能上傳!', + 'no_zip_extension' => '伺服器未啟用 ZIP 擴展。', + 'zip_error' => '導入 ZIP 文件時出錯', + ), + 'profile' => array( + 'error' => '你的帳戶修改失敗', + 'updated' => '你的帳戶已修改', + ), + 'sub' => array( + 'actualize' => '獲取', + 'articles' => array( + 'marked_read' => '文章已標記為已讀', + 'marked_unread' => '文章已標記為未讀', + ), + 'category' => array( + 'created' => '已創建分類 %s', + 'deleted' => '已刪除分類', + 'emptied' => '已清空分類', + 'error' => '更新分類失敗', + 'name_exists' => '分類名已存在', + 'no_id' => '你必須明確分類編號', + 'no_name' => '分類名不能為空', + 'not_delete_default' => '你不能刪除默認分類!', + 'not_exist' => '分類不存在!', + 'over_max' => '你已達到分類數上限(%d)', + 'updated' => '已更新分類', + ), + 'feed' => array( + 'actualized' => '已更新 %s', + 'actualizeds' => '已更新訂閱源', + 'added' => '訂閱源 %s 已添加', + 'already_subscribed' => '你已訂閱 %s', + 'cache_cleared' => '%s 緩存已清理', + 'deleted' => '已刪除訂閱源', + 'error' => '訂閱源更新失敗', + 'internal_problem' => '訂閱源添加失敗。檢查 FreshRSS 日誌 查看詳情。你可以在地址連結後附加 #force_feed 從而嘗試強制添加。', + 'invalid_url' => '地址鏈接 %s 無效', + 'n_actualized' => '已更新 %d 個訂閱源', + 'n_entries_deleted' => '已刪除 %d 篇文章', + 'no_refresh' => '沒有可刷新的訂閱源…', + 'not_added' => '%s 添加失敗', + 'not_found' => '無法找到訂閱', + 'over_max' => '你已達到訂閱源數上限(%d)', + 'reloaded' => '%s 已重置', + 'selector_preview' => array( + 'http_error' => '無法加載網站內容。', + 'no_entries' => '您的訂閱中沒有任何條目。您至少需要一個條目來創建一個預覽。', + 'no_feed' => '網絡錯誤(訂閱源不存在)', + 'no_result' => '選擇器沒有匹配到任何東西。作為備用,原始的feed文本將被顯示出來。', + 'selector_empty' => '選擇器是空的。你需要一個來創建預覽。', + ), + 'updated' => '已更新訂閱源', + ), + 'purge_completed' => '清除完成(已刪除 %d 篇文章)', + ), + 'tag' => array( + 'created' => '標簽 "%s" 已創建。', + 'name_exists' => '標簽名已存在。', + 'renamed' => '標簽 "%s" 已被重命名為 "%s"。', + ), + 'update' => array( + 'can_apply' => 'FreshRSS 將更新到 版本 %s。', + 'error' => '更新出錯:%s', + 'file_is_nok' => '請檢查 %s 目錄權限。HTTP 伺服器必須有其寫入權限。', + 'finished' => '更新完成!', + 'none' => '沒有可用更新', + 'server_not_found' => '找不到更新伺服器 [%s]', + ), + 'user' => array( + 'created' => array( + '_' => '已創建用戶 %s', + 'error' => '創建用戶 %s 失敗', + ), + 'deleted' => array( + '_' => '已刪除用戶 %s', + 'error' => '刪除用戶 %s 失敗', + ), + 'updated' => array( + '_' => '已更新用戶 %s', + 'error' => '更新用戶 %s 失敗', + ), + ), +); diff --git a/app/i18n/zh-tw/gen.php b/app/i18n/zh-tw/gen.php new file mode 100644 index 00000000000..7437dc23133 --- /dev/null +++ b/app/i18n/zh-tw/gen.php @@ -0,0 +1,236 @@ + array( + 'actualize' => '更新提要', + 'add' => '新增', + 'back' => '← 返回', + 'back_to_rss_feeds' => '← 返回訂閱源', + 'cancel' => '取消', + 'create' => '創建', + 'delete_muted_feeds' => '刪除已暫停的訂閱源', + 'demote' => '撤銷管理員', + 'disable' => '禁用', + 'empty' => '清空', + 'enable' => '啟用', + 'export' => '導出', + 'filter' => '過濾', + 'import' => '導入', + 'load_default_shortcuts' => '重置快捷鍵', + 'manage' => '管理', + 'mark_read' => '標記已讀', + 'open_url' => '打開連結', + 'promote' => '設為管理員', + 'purge' => '清理', + 'refresh_opml' => '更新訂閱源動態列表', + 'remove' => '刪除', + 'rename' => '重命名', + 'see_website' => '網站中查看', + 'submit' => '提交', + 'truncate' => '刪除所有文章', + 'update' => '更新訂閱', + ), + 'auth' => array( + 'accept_tos' => '我接受 服務條款', + 'email' => 'Email 地址', + 'keep_logged_in' => '%s 天內保持登入', + 'login' => '登入', + 'logout' => '登出', + 'password' => array( + '_' => '密碼', + 'format' => '至少 7 個字元', + ), + 'registration' => array( + '_' => '新使用者', + 'ask' => '創建新使用者?', + 'title' => '使用者創建', + ), + 'username' => array( + '_' => '帳號', + 'format' => '最多 16 個數字或字母', + ), + ), + 'date' => array( + 'Apr' => '\\四\\月', + 'Aug' => '\\八\\月', + 'Dec' => '\\十\\二\\月', + 'Feb' => '\\二\\月', + 'Jan' => '\\一\\月', + 'Jul' => '\\七\\月', + 'Jun' => '\\六\\月', + 'Mar' => '\\三\\月', + 'May' => '\\五\\月', + 'Nov' => '\\十\\一\\月', + 'Oct' => '\\十\\月', + 'Sep' => '\\九\\月', + 'apr' => '四月', + 'april' => '四月', + 'aug' => '八月', + 'august' => '八月', + 'before_yesterday' => '昨天以前', + 'dec' => '十二月', + 'december' => '十二月', + 'feb' => '二月', + 'february' => '二月', + 'format_date' => 'Y\\年n\\月j\\日', + 'format_date_hour' => 'Y\\年n\\月j\\日 H\\:i', + 'fri' => '週五', + 'jan' => '一月', + 'january' => '一月', + 'jul' => '七月', + 'july' => '七月', + 'jun' => '六月', + 'june' => '六月', + 'last_2_year' => '過去兩年', + 'last_3_month' => '最近三個月', + 'last_3_year' => '過去三年', + 'last_5_year' => '過去五年', + 'last_6_month' => '最近六個月', + 'last_month' => '上月', + 'last_week' => '上週', + 'last_year' => '去年', + 'mar' => '三月', + 'march' => '三月', + 'may' => '五月', + 'may_' => '五月', + 'mon' => '週一', + 'month' => '個月', + 'nov' => '十一月', + 'november' => '十一月', + 'oct' => '十月', + 'october' => '十月', + 'sat' => '週六', + 'sep' => '九月', + 'september' => '九月', + 'sun' => '週日', + 'thu' => '週四', + 'today' => '今天', + 'tue' => '週二', + 'wed' => '週三', + 'yesterday' => '昨天', + ), + 'dir' => 'ltr', // IGNORE + 'freshrss' => array( + '_' => 'FreshRSS', // IGNORE + 'about' => '關於 FreshRSS', + ), + 'js' => array( + 'category_empty' => '清空分類', + 'confirm_action' => '你確定要執行此操作嗎?這將不可撤銷!', + 'confirm_action_feed_cat' => '你確定要執行此操作嗎?你將丟失相關的收藏和自定義查詢。這將不可撤銷!', + 'feedback' => array( + 'body_new_articles' => 'FreshRSS 中有 %%d 篇文章等待閱讀。', + 'body_unread_articles' => '(未讀: %%d)', + 'request_failed' => '請求失敗,這可能是因為網絡連接問題。', + 'title_new_articles' => 'FreshRSS: 新文章!', + ), + 'new_article' => '發現新文章,點擊刷新頁面。', + 'should_be_activated' => '必須啟用 JavaScript', + ), + 'lang' => array( + 'cz' => 'Čeština', // IGNORE + 'de' => 'Deutsch', // IGNORE + 'en' => 'English', // IGNORE + 'en-us' => 'English (United States)', // IGNORE + 'es' => 'Español', // IGNORE + 'fr' => 'Français', // IGNORE + 'he' => 'עברית', // IGNORE + 'it' => 'Italiano', // IGNORE + 'ja' => '日本語', // IGNORE + 'ko' => '한국어', // IGNORE + 'nl' => 'Nederlands', // IGNORE + 'oc' => 'Occitan', // IGNORE + 'pl' => 'Polski', // IGNORE + 'pt-br' => 'Português (Brasil)', // IGNORE + 'ru' => 'Русский', // IGNORE + 'sk' => 'Slovenčina', // IGNORE + 'tr' => 'Türkçe', // IGNORE + 'zh-cn' => '簡體中文', // IGNORE + 'zh-tw' => '正體中文', // IGNORE + ), + 'menu' => array( + 'about' => '關於', + 'account' => '帳號', + 'admin' => '管理', + 'archiving' => '歸檔', + 'authentication' => '認證', + 'check_install' => '環境檢查', + 'configuration' => '配置', + 'display' => '顯示', + 'extensions' => '擴充功能', + 'logs' => '日誌', + 'queries' => '自定義查詢', + 'reading' => '閱讀', + 'search' => '搜尋內容或#標簽', + 'sharing' => '分享', + 'shortcuts' => '快捷鍵', + 'stats' => '統計', + 'system' => '系統配置', + 'update' => '更新', + 'user_management' => '使用者管理', + 'user_profile' => '使用者資訊', + ), + 'period' => array( + 'days' => '天', + 'hours' => '時', + 'months' => '月', + 'weeks' => '週', + 'years' => '年', + ), + 'share' => array( + 'Known' => '基於 Known 的站點', + 'archivePH' => 'archive.ph', // IGNORE + 'blogotext' => 'Blogotext', // IGNORE + 'clipboard' => '剪貼板', + 'diaspora' => 'Diaspora*', // IGNORE + 'email' => '郵箱', // IGNORE + 'facebook' => '臉書', // IGNORE + 'gnusocial' => 'GNU social', // IGNORE + 'jdh' => 'Journal du hacker', // IGNORE + 'lemmy' => 'Lemmy', // IGNORE + 'linkedin' => 'LinkedIn', // IGNORE + 'mastodon' => 'Mastodon', // IGNORE + 'movim' => 'Movim', // IGNORE + 'pinboard' => 'Pinboard', // IGNORE + 'pinterest' => 'Pinterest', // IGNORE + 'pocket' => 'Pocket', // IGNORE + 'print' => '打印', + 'raindrop' => 'Raindrop.io', // IGNORE + 'reddit' => 'Reddit', // IGNORE + 'shaarli' => 'Shaarli', // IGNORE + 'twitter' => '推特', // IGNORE + 'wallabag' => 'Wallabag v1', // IGNORE + 'wallabagv2' => 'Wallabag v2', // IGNORE + 'web-sharing-api' => 'Web分享', + 'whatsapp' => 'Whatsapp', // IGNORE + 'xing' => 'Xing', // IGNORE + ), + 'short' => array( + 'attention' => '警告!', + 'blank_to_disable' => '留空以禁用', + 'by_author' => '作者', + 'by_default' => '預設', + 'damn' => '錯誤!', + 'default_category' => '未分類', + 'no' => '否', + 'not_applicable' => '不可用', + 'ok' => '正常!', + 'or' => '或', + 'yes' => '是', + ), + 'stream' => array( + 'load_more' => '載入更多文章', + 'mark_all_read' => '全部設為已讀', + 'nothing_to_load' => '沒有更多文章', + ), +); diff --git a/app/i18n/zh-tw/index.php b/app/i18n/zh-tw/index.php new file mode 100644 index 00000000000..ab5f6a38926 --- /dev/null +++ b/app/i18n/zh-tw/index.php @@ -0,0 +1,75 @@ + array( + '_' => '關於', + 'agpl3' => 'AGPL 3', // IGNORE + 'bugs_reports' => '報告錯誤', + 'credits' => '致謝', + 'credits_content' => '某些設計元素來自於 Bootstrap ,盡管 FreshRSS 並沒有使用此框架。圖標 來自於 GNOME 項目Open Sans 字體出自 Steve Matteson 之手。FreshRSS 基于 PHP 框架 Minz。', + 'freshrss_description' => 'FreshRSS 是一個自托管的 RSS 聚合服務,類似於 Kriss FeedLeed。 它不僅輕快又易用,而且強大又易於配置。', + 'github' => 'Github Issues', + 'license' => '授權', + 'project_website' => '項目網站', + 'title' => '關於', + 'version' => '版本', + ), + 'feed' => array( + 'add' => '你可以添加一些訂閱源。', + 'empty' => '暫時沒有文章可顯示。', + 'rss_of' => '%s 的訂閱源', + 'title' => '首頁', + 'title_fav' => '收藏', + 'title_global' => '全局視圖', + ), + 'log' => array( + '_' => '日誌', + 'clear' => '清除日誌', + 'empty' => '日誌文件為空', + 'title' => '日誌', + ), + 'menu' => array( + 'about' => '關於 FreshRSS', + 'before_one_day' => '一天前', + 'before_one_week' => '一週前', + 'bookmark_query' => '收藏當前查詢', + 'favorites' => '收藏(%s)', + 'global_view' => '全局視圖', + 'main_stream' => '首頁', + 'mark_all_read' => '全部設為已讀', + 'mark_cat_read' => '此分類設為已讀', + 'mark_feed_read' => '此訂閱源設為已讀', + 'mark_selection_unread' => '選中設為已讀', + 'newer_first' => '由新至舊', + 'non-starred' => '顯示未收藏', + 'normal_view' => '普通視圖', + 'older_first' => '由舊至新', + 'queries' => '自定義查詢', + 'read' => '顯示已讀', + 'reader_view' => '閱讀視圖', + 'rss_view' => '訂閱源', + 'search_short' => '搜尋', + 'starred' => '顯示收藏', + 'stats' => '統計', + 'subscription' => '訂閱管理', + 'tags' => '我的標簽', + 'unread' => '顯示未讀', + ), + 'share' => '分享', + 'tag' => array( + 'related' => '文章標簽', + ), + 'tos' => array( + 'title' => '服務條款', + ), +); diff --git a/app/i18n/zh-tw/install.php b/app/i18n/zh-tw/install.php new file mode 100644 index 00000000000..3ed45497e73 --- /dev/null +++ b/app/i18n/zh-tw/install.php @@ -0,0 +1,133 @@ + array( + 'finish' => '完成安裝', + 'fix_errors_before' => '請在繼續下一步前修復錯誤', + 'keep_install' => '保留當前配置', + 'next_step' => '下一步', + 'reinstall' => '重新安裝 FreshRSS', + ), + 'auth' => array( + 'form' => '網頁表單(傳統方式, 依賴 JavaScript)', + 'http' => 'HTTP(面向啟用 HTTPS 的高級用戶)', + 'none' => '無認證(危險)', + 'password_form' => '密碼
    (用于網頁表單登錄方式)', + 'password_format' => '至少 7 個字符', + 'type' => '認證方式', + ), + 'bdd' => array( + '_' => '數據庫', + 'conf' => array( + '_' => '數據庫配置', + 'ko' => '請驗證你的數據庫信息', + 'ok' => '數據庫配置已保存', + ), + 'host' => '主機', + 'password' => '密碼', + 'prefix' => '表前綴', + 'type' => '數據庫類型', + 'username' => '用戶名', + ), + 'check' => array( + '_' => '檢查', + 'already_installed' => '我們檢測到 FreshRSS 已經安裝!', + 'cache' => array( + 'nok' => '請檢查 %s 目錄權限。HTTP 服務器必須有其寫入權限。', + 'ok' => 'cache 目錄權限正常', + ), + 'ctype' => array( + 'nok' => '找不到字符類型檢測庫(php-ctype)', + 'ok' => '已找到字符類型檢測庫', + ), + 'curl' => array( + 'nok' => '找不到 cURL 庫(php-curl)', + 'ok' => '已找到 cURL 庫', + ), + 'data' => array( + 'nok' => '請檢查 %s 目錄權限。HTTP 服務器必須有其寫入權限。', + 'ok' => 'data 目錄權限正常', + ), + 'dom' => array( + 'nok' => '找不到用于瀏覽 DOM 的庫(php-xml)', + 'ok' => '已找到用于瀏覽 DOM 的庫', + ), + 'favicons' => array( + 'nok' => '請檢查 %s 目錄權限。HTTP 服務器必須有其寫入權限。', + 'ok' => 'favicons 目錄權限正常', + ), + 'fileinfo' => array( + 'nok' => '找不到 PHP fileinfo 庫(php-fileinfo)', + 'ok' => '已找到 fileinfo 庫', + ), + 'json' => array( + 'nok' => '找不到推薦的 JSON 解析庫', + 'ok' => '已找到推薦的 JSON 解析庫', + ), + 'mbstring' => array( + 'nok' => '找不到推薦的 Unicode 解析庫(mbstring)', + 'ok' => '已找到推薦的 Unicode 解析庫', + ), + 'pcre' => array( + 'nok' => '找不到正則表達式解析庫(php-pcre)', + 'ok' => '已找到正則表達式解析庫', + ), + 'pdo' => array( + 'nok' => '找不到 PDO 或支持的驅動(pdo_mysql、pdo_sqlite、pdo_pgsql)', + 'ok' => '已找到 PDO 和支持的至少一種驅動(pdo_mysql、pdo_sqlite、pdo_pgsql)', + ), + 'php' => array( + 'nok' => '你的 PHP 版本為 %s,但 FreshRSS 最低需要 %s', + 'ok' => '你的 PHP 版本為 %s,與 FreshRSS 兼容', + ), + 'reload' => '再檢查一遍', + 'tmp' => array( + 'nok' => '請檢查 %s 目錄權限。HTTP 服務器必須有其寫入權限。', + 'ok' => '緩存目錄權限正常。', + ), + 'unknown_process_username' => '未知', + 'users' => array( + 'nok' => '請檢查 %s 目錄權限。HTTP 服務器必須有其寫入權限。', + 'ok' => 'users 目錄權限正常', + ), + 'xml' => array( + 'nok' => '找不到用于 XML 解析庫', + 'ok' => '已找到 XML 解析庫', + ), + ), + 'conf' => array( + '_' => '常規配置', + 'ok' => '常規配置已保存', + ), + 'congratulations' => '恭喜!', + 'default_user' => '默認用戶名 (最多 16 個數字或字母)', + 'fix_errors_before' => '請在繼續下一步前修復錯誤', + 'javascript_is_better' => '啟用 JavaScript 會使 FreshRSS 工作得更好', + 'js' => array( + 'confirm_reinstall' => '重新安裝 FreshRSS 將會重置之前的配置。你確定要繼續嗎?', + ), + 'language' => array( + '_' => '語言', + 'choose' => '為 FreshRSS 選擇語言', + 'defined' => '語言已指定', + ), + 'missing_applied_migrations' => '出現錯誤,你需要手動創建一個空文件 %s。', + 'ok' => '安裝成功', + 'session' => array( + 'nok' => 'Web 服務器似乎未正確配置 PHP 會話所需的 cookie!', + ), + 'step' => '步驟 %d', + 'steps' => '步驟', + 'this_is_the_end' => '最后一步', + 'title' => '安裝 FreshRSS', +); diff --git a/app/i18n/zh-tw/sub.php b/app/i18n/zh-tw/sub.php new file mode 100644 index 00000000000..8b448cfd86e --- /dev/null +++ b/app/i18n/zh-tw/sub.php @@ -0,0 +1,209 @@ + array( + 'documentation' => '複製以下地址,以供外部工具使用', + 'title' => 'API', // IGNORE + ), + 'bookmarklet' => array( + 'documentation' => '拖動此書簽到你的書簽欄或者右鍵選擇「收藏此連結」,然後在你想要訂閱的頁面上點擊「訂閱」按鈕', + 'label' => '訂閱', + 'title' => '書簽應用', + ), + 'category' => array( + '_' => '分類', + 'add' => '添加分類', + 'archiving' => '歸檔', + 'dynamic_opml' => array( + '_' => '動態訂閱', + 'help' => '使用地址上的 OPML 文件 中的訂閱源填充這一分類', + ), + 'empty' => '空分類', + 'information' => '信息', + 'opml_url' => 'OPML 地址', + 'position' => '顯示位置', + 'position_help' => '控制分類排列順序', + 'title' => '標題', + ), + 'feed' => array( + 'accept_cookies' => '接受 Cookies', + 'accept_cookies_help' => '允許提要伺服器設置 Cookies(僅在請求期間存儲在內存中)', + 'add' => '添加訂閱源', + 'advanced' => '高級', + 'archiving' => '歸檔', + 'auth' => array( + 'configuration' => '認證', + 'help' => '用於連接啟用 HTTP 認證的訂閱源', + 'http' => 'HTTP 認證', + 'password' => 'HTTP 密碼', + 'username' => 'HTTP 用戶名', + ), + 'clear_cache' => '總是清除暫存', + 'content_action' => array( + '_' => '獲取原文後的操作', + 'append' => '添加在現有內容後部', + 'prepend' => '添加在現有內容前部', + 'replace' => '替換現有內容', + ), + 'css_cookie' => '獲取原文時的 Cookies', + 'css_cookie_help' => '例:foo=bar; gdpr_consent=true; cookie=value', + 'css_help' => '用於獲取全文(注意,這將耗費更多時間!)', + 'css_path' => '原文的 CSS 選擇器', + 'css_path_filter' => array( + '_' => '需移除元素的 CSS 選擇器', + 'help' => '可設置多個 CSS 選擇器,例如:.footer, .aside', + ), + 'description' => '描述', + 'empty' => '此源為空。請確認它是否正常更新。', + 'error' => '此源遇到一些問題。請在確認是否能正常訪問後重試。', + 'filteractions' => array( + '_' => '過濾動作', + 'help' => '每行寫一條過濾搜尋', + ), + 'information' => '信息', + 'keep_min' => '至少保存的文章數', + 'kind' => array( + '_' => '訂閱源類型', + 'html_xpath' => array( + '_' => 'HTML + XPath (Web 抓取)', + 'feed_title' => array( + '_' => '提要標題', + 'help' => '如 //title 或是靜態字元串如 "My custom feed"', + ), + 'help' => 'XPath 1.0 是為資深用戶準備的標準查詢語言,FreshRSS 用以實現 Web 抓取.', + 'item' => array( + '_' => '以尋找 文章
    (很重要)', + 'help' => '例如 //div[@class="news-item"]', + ), + 'item_author' => array( + '_' => '文章作者', + 'help' => '可以是靜態字元串,例如 "Anonymous"', + ), + 'item_categories' => '文章標簽', + 'item_content' => array( + '_' => '文章內容', + 'help' => '例如使用 . 將整個對象作為文章內容', + ), + 'item_thumbnail' => array( + '_' => '文章縮圖', + 'help' => '例如 descendant::img/@src', + ), + 'item_timestamp' => array( + '_' => '文章日期:', + 'help' => '結果將被 strtotime() 解析', + ), + 'item_title' => array( + '_' => '文章標題', + 'help' => '注意使用 XPath 軸 descendant::,例如 descendant::h2', + ), + 'item_uid' => array( + '_' => '文章唯一標識', + 'help' => '可選,例如: descendant::div/@data-uri', + ), + 'item_uri' => array( + '_' => '文章鏈接 (URL)', + 'help' => '例如 descendant::a/@href', + ), + 'relative' => 'XPath(文章):', + 'xpath' => 'XPath 定位:', + ), + 'rss' => 'RSS / Atom (默認)', + ), + 'maintenance' => array( + 'clear_cache' => '清理暫存', + 'clear_cache_help' => '清除該feed的暫存', + 'reload_articles' => '重載文章', + 'reload_articles_help' => '重載 n 篇文章並抓取內容(若設置了 CSS 選擇器)', + 'title' => '維護', + ), + 'max_http_redir' => '最大 HTTP 重定向', + 'max_http_redir_help' => '設置為 0 或留空以禁用,-1 表示無限重定向', + 'moved_category_deleted' => '刪除分類時,其中的訂閱源會自動歸類到 %s', + 'mute' => '暫停', + 'no_selected' => '未選擇訂閱源', + 'number_entries' => '%d 篇文章', + 'priority' => array( + '_' => '可見性', + 'archived' => '不顯示(歸檔)', + 'main_stream' => '在首頁中顯示', + 'normal' => '在分類中顯示', + ), + 'proxy' => '獲取訂閱源時的代理', + 'proxy_help' => '選擇協議(例:SOCKS5)和代理地址(例:127.0.0.1:1080)', + 'selector_preview' => array( + 'show_raw' => '顯示源碼', + 'show_rendered' => '顯示內容', + ), + 'show' => array( + 'all' => '顯示所有訂閱源', + 'error' => '僅顯示有錯誤的訂閱源', + ), + 'showing' => array( + 'error' => '正在顯示有錯誤的訂閱源', + ), + 'ssl_verify' => '驗證 SSL 證書安全', + 'stats' => '統計', + 'think_to_add' => '你可以添加一些訂閱源。', + 'timeout' => '超時時間(秒)', + 'title' => '標題', + 'title_add' => '添加訂閱源', + 'ttl' => '最小自動更新間隔', + 'url' => '源地址', + 'useragent' => '設置用於獲取此源的 User Agent', + 'useragent_help' => '例:Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:86.0)', + 'validator' => '檢查訂閱源有效性', + 'website' => '網站地址', + 'websub' => 'WebSub 即時通知', + ), + 'import_export' => array( + 'export' => '導出', + 'export_labelled' => '導出有標簽的文章', + 'export_opml' => '導出訂閱源列表(OPML)', + 'export_starred' => '導出你的收藏', + 'feed_list' => '%s 文章列表', + 'file_to_import' => '需要導入的文件
    (OPML、JSON 或 ZIP)', + 'file_to_import_no_zip' => '需要導入的文件
    (OPML 或 JSON)', + 'import' => '導入', + 'starred_list' => '收藏文章列表', + 'title' => '導入/導出', + ), + 'menu' => array( + 'add' => '添加訂閱源或分類', + 'import_export' => '導入/導出', + 'label_management' => '標簽管理', + 'stats' => array( + 'idle' => '長期無更新訂閱源', + 'main' => '主要統計', + 'repartition' => '文章分布', + ), + 'subscription_management' => '訂閱管理', + 'subscription_tools' => '訂閱工具', + ), + 'tag' => array( + 'name' => '名稱', + 'new_name' => '新名稱', + 'old_name' => '舊名稱', + ), + 'title' => array( + '_' => '訂閱管理', + 'add' => '添加訂閱源或分類', + 'add_category' => '添加分類', + 'add_dynamic_opml' => '添加訂閱源動態列表', + 'add_feed' => '添加訂閱源', + 'add_label' => '添加標簽', + 'delete_label' => '刪除標簽', + 'feed_management' => '訂閱源管理', + 'rename_label' => '重命名標簽', + 'subscription_tools' => '訂閱工具', + ), +); diff --git a/app/i18n/zh-tw/user.php b/app/i18n/zh-tw/user.php new file mode 100644 index 00000000000..365bd314920 --- /dev/null +++ b/app/i18n/zh-tw/user.php @@ -0,0 +1,54 @@ + array( + 'feedback' => array( + 'invalid' => '電子郵箱地址無效', + 'required' => '必須填寫郵箱地址', + ), + 'validation' => array( + 'change_email' => '您可以在 使用者管理 中變更您的郵箱地址', + 'email_sent_to' => '我們已通過 %s 發送驗證郵件給您,請按其中指示來驗證郵箱地址。', + 'feedback' => array( + 'email_failed' => '由於伺服器配置錯誤,我們無法向您發送郵件。', + 'email_sent' => '郵件已發送到您的郵箱中', + 'error' => '郵箱地址無法通過驗證', + 'ok' => '郵箱地址已成功通過驗證', + 'unnecessary' => '該郵箱地址已被驗證', + 'wrong_token' => '由於令牌錯誤,郵箱地址無法通過驗證。', + ), + 'need_to' => '您需要先驗證郵箱地址才能使用 %s', + 'resend_email' => '重發郵件', + 'title' => '驗證郵箱地址', + ), + ), + 'mailer' => array( + 'email_need_validation' => array( + 'body' => '%s,歡迎', + 'title' => '您需要驗證您的帳號', + 'welcome' => '您已註冊 %s 現在只需點擊下方連結通過郵箱驗證即可完成註冊:', + ), + ), + 'password' => array( + 'invalid' => '無效密碼', + ), + 'tos' => array( + 'feedback' => array( + 'invalid' => '您必須接受服務條款才能註冊', + ), + ), + 'username' => array( + 'invalid' => '無效用戶名', + 'taken' => '已存在此用戶名', + ), +); From 2e0fbf60e752aaa6e58178a6e8388537010a2f47 Mon Sep 17 00:00:00 2001 From: maTh Date: Sun, 4 Sep 2022 21:28:20 +0200 Subject: [PATCH 0362/2479] fix: space key opens empty tab (#4581) * Update main.js * Update p/scripts/main.js Co-authored-by: Frans de Jonge * fix Co-authored-by: Frans de Jonge --- p/scripts/main.js | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/p/scripts/main.js b/p/scripts/main.js index ad3224507ab..b0a6df01b8e 100644 --- a/p/scripts/main.js +++ b/p/scripts/main.js @@ -1001,12 +1001,14 @@ function init_shortcuts() { if (context.auto_mark_site) { mark_read(document.querySelector('.flux.current'), true, false); } + + const link_go_website = document.querySelector('.flux.current a.go_website'); const newWindow = window.open(); - if (newWindow) { + if (link_go_website && newWindow) { newWindow.opener = null; - newWindow.location = document.querySelector('.flux.current a.go_website').href; + newWindow.location = link_go_website.href; + ev.preventDefault(); } - ev.preventDefault(); return; } if (k === s.skip_next_entry) { next_entry(true); ev.preventDefault(); return; } From fd22ee409082dd325d591bf57c73009a727122a1 Mon Sep 17 00:00:00 2001 From: Tealk <12276250+Tealk@users.noreply.github.com> Date: Sun, 4 Sep 2022 23:12:23 +0200 Subject: [PATCH 0363/2479] remove margin-top: 2rem; in Swage (#4566) * remove margin-top: 2rem; in Swage * remove margin-top: 2rem; manually * make fix-all * revert formating * Update swage.css Co-authored-by: Alexandre Alapetite Co-authored-by: mathContao --- p/themes/Swage/swage.css | 4 ---- p/themes/Swage/swage.css.map | 2 +- p/themes/Swage/swage.rtl.css | 4 ---- p/themes/Swage/swage.scss | 4 ---- 4 files changed, 1 insertion(+), 13 deletions(-) diff --git a/p/themes/Swage/swage.css b/p/themes/Swage/swage.css index 7535bbc0e3a..03a76654ef9 100644 --- a/p/themes/Swage/swage.css +++ b/p/themes/Swage/swage.css @@ -72,10 +72,6 @@ img.icon:hover { background: none; } -main#stream { - margin-top: 2rem; -} - sup { top: -0.3em; } diff --git a/p/themes/Swage/swage.css.map b/p/themes/Swage/swage.css.map index 13bcdce701b..a3265de7383 100644 --- a/p/themes/Swage/swage.css.map +++ b/p/themes/Swage/swage.css.map @@ -1 +1 @@ -{"version":3,"sourceRoot":"","sources":["swage.scss"],"names":[],"mappings":"AAkBA;AAAA;EACC;EACA;EACA;EACA;EACA,YAjBa;EAkBb;EACA;;;AAGD;AAAA;EACC,OAlBY;EAmBZ,cAnBY;EAoBZ;;;AAGD;EACC;EACA;EACA;;;AAGD;AAAA;AAAA;AAAA;EACC;EACA,OApCa;EAqCb;EACA;;;AAGD;EACC;EACA;EACA;;;AAGD;EACC;;;AAID;AAAA;EAEC;EACA;;;AAGD;EACC;EACA;;AAEA;EACC;EACA;EACA;;AAEA;EACC;;AAIF;EACC;;AAGD;EACC;;;AAKD;EACC;;;AAIF;EACC;;;AAGD;EACC;;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGD;EACC;;;AAGD;EACC;EACA;EACA;;AAIA;EACC;;;AASD;AAAA;EACC;;AAQD;AAAA;EACC,YAxIY;;;AA4Id;EACC;;;AAIA;EACC;;;AAIF;EACC;;;AAGD;EACC;;;AAGD;AAAA;AAAA;EAGC;EACA;;;AAGD;EACC,YAtKa;;;AA0Kb;AAAA;EAEC;EACA;;;AAKD;EACC;EACA;EACA;EACA;;;AAKF;EACC;EACA;;AAEA;EACC,YAhMY;EAiMZ;;AAGD;EACC;EACA;EACA;EACA;;AAEA;EACC;;AAIF;EACC;EACA;;AAGD;EACC;EACA;;AAEA;EACC;;;AAUH;EACC;EACA;;AAQD;EACC;EACA;EACA,YA/OY;EAgPZ;EACA,OAlPa;EAmPb;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;AAAA;AAAA;EAGC;EACA;;;AAIF;EACC;EACA,YAlQa;EAmQb,OAtQa;;AAwQb;AAAA;AAAA;EAEC;;;AAKD;EAGC;EACA;EACA,YAlRY;EAmRZ,OArRY;EAsRZ;;AAOA;EAEC;EACA,OAhSW;;AAkSX;EACC,OAnSU;;AAsSX;AAAA;AAAA;EAEC,OAxSU;;AA2SX;EACC,YAzSU;;AA4SX;EACC;;AAIF;EACC;;AAGD;EACC,OAtTW;;AAyTZ;EACC;;AAIF;EACC;EACA,YAnUY;EAoUZ;;AAGD;EACC;EACA;;AAGD;EACC;;;AAIF;EACC;EACA;EACA,YAlVa;EAmVb,OArVa;;AAuVb;EACC,OAxVY;;AA2Vb;EACC;EACA;EACA;;;AAIF;EACC;EACA;;AAEA;EACC;;;AAIF;EACC;EACA;EACA;EACA;EACA;;AAEA;EACC;;AAGD;EACC;;AAIA;EAGC;EACA;;AAUA;EACC;EACA;;AAGD;EACC,YA9YS;EA+YT,OAhZU;;AAkZV;EACC;EACA,OApZS;;AAyZZ;EACC;EACA;;AAKD;AAAA;EAEC;EACA;;;AAKH;EACC;EACA;EACA;EACA,OA5aa;;;AA+ad;EACC;EACA;EACA;;;AAGD;EACC;EACA;EACA,YAxba;EAybb;EACA;EACA;EACA;;AAEA;EACC;EACA;;;AAIF;EACC;;;AAGD;AAAA;AAAA;EAGC;;;AAGD;EACC,YA/ca;EAgdb,OA7ca;;;AAgdd;EACC,YApda;EAqdb,OAjdY;;;AAodb;EACC,YAzda;EA0db,OArdY;;;AAwdb;EACC;EACA,OAheY;EAieZ;EACA;;AAGC;EACC,YAneW;EAoeX;EACA;EACA;;AAGD;EACC;EACA,OA9eU;EA+eV;EACA;EACA;;AAEA;EACC,YAjfU;EAkfV;;AAKH;AAAA;EAEC;EACA;;;AAIF;EACC;;AAEA;EACC;EACA;;AAGD;EACC;EACA;EACA;EACA;EACA;;AAGD;EACC;EACA;EACA;EACA,YArhBW;EAshBX,OArhBY;EAshBZ;;AAEA;EACC;EACA,OA1hBW;EA2hBX;;AAIF;EACC;EACA,YAjiBY;EAkiBZ,OA7hBW;EA8hBX;;AAGD;EACC;EACA;EACA,YAziBY;EA0iBZ;EACA;EACA;EACA;;AAEA;EACC;;AAIF;EACC,OAtjBW;;;AA0jBb;EACC;;AAEA;EACC;EACA;EACA;EACA;EACA;;AAEA;EACC;;AAOF;EACC;EACA;;AAEA;EACC;EACA;EACA;;AAGC;EACC;EACA;;AAOH;EACC;EACA;EACA;;AAGD;EACC,YApmBU;;AAsmBV;EACC;;AAGD;EACC;EACA,OA7mBU;;AAinBZ;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGD;EACC;EACA;;;AAKH;EACC;;;AAGD;EACC;EACA,YAvoBa;EAwoBb;EACA;EACA;EACA;;AAEA;EACC;EACA,OAjpBY;;AAmpBZ;EACC;;;AAKH;EACC,YAxpBa;;AA0pBb;EACC;EACA;EACA;;AAEA;EACC;;AAGD;EACC;EACA,OAvqBW;;;AA4qBd;EACC;IACC;;;EAGD;IACC;;;AAIF;EACC;IACC;;;EAGD;IACC;;;AAKD;EACC;;AAEA;EAGC;EACA;;AAEA;EACC;EACA;EACA;EACA;EACA;EACA;;AAIF;EACC;;AAIF;EACC;;AAGD;EACC;;AAGD;EACC;EACA;EACA;EACA;;;AAIF;EACC;EACA,YAzuBa;;AA8uBZ;EACC;;AAIA;AAAA;EAEC;;AAIA;EACC;;AAGD;EACC;;;AAQJ;EACC;EACA;;AAGD;EACC;EACA;;AAGD;EACC;;;AAIF;EACC;EACA;;AAEA;EACC;;AAEA;EACC;EACA;;AAIF;EACC;;AAGD;EACC;;;AAIF;EACC;;AAEA;EACC;;AAGD;EACC;EACA;;AAGD;EACC;EACA;;AAGD;EACC;;;AAIF;EACC,YAn0BY;EAo0BZ;EACA;EACA;EACA;EACA;EACA;EACA;;AAIA;EACC;;AAGD;EACC;EACA;EACA,OAt1BY;;AAw1BZ;EACC;;;AAKH;EACC;EACA;EACA;EACA;;AAEA;EACC;;;AAKD;EACC,OA32BY;;;AAg3Bd;EACC;EACA;EACA,kBAl3BY;EAm3BZ;EACA;;AAEA;EACC;EACA;EACA;;;AAIF;EACC;EACA,YAh4Ba;;AAk4Bb;EAGC;EACA;EACA;;AAGD;AAAA;EAEC,YAp4BY;;AAs4BZ;AAAA;EACC,YAv4BW;;AA24Bb;EACC,YA94Ba;;AAg5Bb;EACC,YAj5BY;;AAq5Bd;EACC,YAr5Ba;;AAu5Bb;EACC,YAx5BY;;AA65Bb;EACC;EACA;;AAIF;EACC;EACA;;AAGD;EACC;;AAGD;EACC,OAp7BY;EAq7BZ;;;AAIF;EACC;EACA;;AAEA;EACC;;;AAIF;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAIA;EAEC,OAt9BY;;AAy9Bb;EACC,YAt9BW;;AAw9BX;EACC,YAz9BU;;AA69BZ;EACC;;AAEA;EACC;;AAIF;EACC;;AAGD;EACC;;;AAIF;EACC;EACA;EACA;;AAEA;EACC,YAt/BY;EAu/BZ,OAz/BY;;;AA6/Bd;EACC;EACA;EACA;EACA;EAGA,YAlgCa;;;AAqgCd;EACC;;AAEA;AAAA;AAAA;EAGC;;AAIA;AAAA;EAEC;;AAIF;EACC;;AAEA;EACC;EACA;EACA;;AAEA;EACC;;;AAOH;EACC;;AAGD;EACC,YA1iCY;EA2iCZ;;AAGC;EACC;EACA;;AAKH;EACC,OAxjCY;EAyjCZ;;AAGD;EACC;EACA;EACA;EACA;;;AAIF;EACC;EACA;;;AAGD;EACC;EACA,YA3kCa;EA4kCb;EACA;;AAEA;EACC;EACA;;AAGD;EACC;EACA,OAtlCY;;AAylCb;EACC,YAvlCY;EAwlCZ,OA3lCY;;AA8lCb;EACC;EACA,OAhmCY;;AAmmCb;EACC,YArmCW;EAsmCX,OArmCY;;;AAymCd;EACC;IACC;;;EAGD;IACC;IACA;;;EAGD;IACC;;;EAGD;IACC;IACA;IACA;;;EAGD;IACC;;EAEA;IACC;;EAGD;IACC;IACA;IACA;;;EAIF;IACC;IACA;IACA;IACA;;;EAGD;IACC;;;EAGD;AAAA;IAEC;IACA;;;EAGD;IACC;IACA;;EAEA;IACC,YA/pCW;IAgqCX;IACA;IACA;IACA;IACA;;EAGD;IACC;;EAGD;IACC;IACA;IACA;IACA;;EAGD;IACC;IACA;;;EAIF;IACC;IACA;;EAEA;IACC;;EAGD;IACC;;EAEA;IACC;;EAIF;IACC;IACA;IACA;;EAEA;IACC;;EAGD;IACC;;;EAKH;IACC;;;EAGD;AAAA;IAEC,YA7tCY;IA8tCZ;IACA;IACA;IACA;IACA;;;EAGD;IACC;;;EAGD;IACC;;;EAGD;IACC;;EAEA;IACC;IACA;IACA;;EAEA;IACC;;EAGD;IACC;;;EAKH;IACC;;;EAGD;IACC;IACA;;;EAGD;IACC;;;EAGD;IACC;IACA;;;EAGD;AAAA;AAAA;AAAA;AAAA;IAKC;;;EAGD;IACC;IACA;;;EAGD;AAAA;IAEC;;;EAGD;IACC;;;EAGD;AAAA;AAAA;IAGC;;;EAGD;IACC;;;EAGD;IACC;;;AAIF;EACC;IACC;;;AAIF;EACC;IACC;;;AAIF;EACC,OAr0Ca;EAs0Cb;;;AAGD;EACC;;;AAGD;EACC;EACA;;;AAIA;EACC,OAj1CY;;AAm1CZ;EACC,YAp1CW;EAq1CX,OAx1CW;;AA01CX;EACC,OA31CU;;AA+1CZ;EACC,OA71CW;;AAi2Cb;EACC;;AAEA;EACC;EACA,OAz2CW;;AA22CX;EACC,OA52CU;;AAg3CZ;EACC;;;AAKH;EACC;EACA;;;AAGD;EACC;EACA,YA73Ca;EA83Cb,OA53Ca;EA63Cb;;AAEA;EACC;EACA;EACA;;;AAKD;EACC;;;AAKD;EACC;;AAIA;EACC","file":"swage.css"} \ No newline at end of file +{"version":3,"sources":["swage.scss"],"names":[],"mappings":"AAkBA,sBACC,eAAA,CACA,cAAA,CACA,gBAAA,CACA,qBAAA,CACA,kBAjBa,CAkBb,wBAAA,CACA,gBAAA,CAGD,6BACC,gBAAA,CACA,aAnBY,CAoBZ,yBApBY,CAqBZ,qBAAA,CACA,eAAA,CAGD,sCACC,YAAA,CACA,iBAAA,CACA,eAAA,CAGD,gIACC,cAAA,CACA,aAtCa,CAuCb,eAAA,CACA,iBAAA,CAGD,gCACC,UAAA,CACA,aAAA,CACA,UAAA,CAGD,0FACC,WAAA,CAID,UAEC,sCAAA,CAGD,EACC,aAAA,CACA,YAAA,CAEA,MACC,eAAA,CACA,gBAAA,CACA,oBAAA,CAEA,YACC,oBAAA,CAIF,mBACC,SAAA,CAGD,UACC,QAAA,CAKD,eACC,eAAA,CAIF,IACC,UAAA,CAGD,OACC,iBAAA,CACA,gBAAA,CACA,kBA7Fa,CA8Fb,oBAAA,CACA,UAAA,CACA,aAlGa,CAmGb,eAAA,CACA,UAAA,CAGD,MACC,eAAA,CAGD,SACC,WAAA,CACA,YAAA,CAIA,eACC,oBAAA,CASD,yBACC,oBAAA,CAQD,+BACC,kBArIY,CAyId,OACC,eAAA,CACA,kBAAA,CAIA,aACC,6BAAA,CAIF,OACC,cAAA,CAGD,MACC,wBAAA,CAGD,SAGC,YAAA,CACA,wBAAA,CAGD,GACC,kBApKa,CAwKb,gBAEC,kBAAA,CACA,iBAAA,CAKF,iCAEC,yBAEC,uDAAA,CACA,oBAAA,CAGD,qCAEC,yDAAA,CAID,uBACC,8CAAA,CAGD,6BACC,6CAAA,CAAA,CAIF,sCAEC,+DAEC,8BAAA,CACA,SAAA,CAGD,2EAEC,8BAAA,CACA,aAAA,CACA,iBAAA,CAGD,uFAEC,+BAAA,CAID,0CACC,0BAAA,CAGD,gDACC,yBAAA,CAGD,sDACC,yBAAA,CAAA,CAMD,+BACC,oBAAA,CACA,iBAAA,CACA,UAAA,CACA,qCAAA,CAKF,YACC,WAAA,CACA,8BAAA,CAEA,kBACC,kBAzPY,CA0PZ,wBAAA,CAGD,yBACC,kBAAA,CACA,aAAA,CACA,kBAAA,CACA,4BAAA,CAEA,8BACC,aAAA,CAIF,wBACC,cAAA,CACA,gBAAA,CAGD,4BACC,eAAA,CACA,aAAA,CAEA,qCACC,eAAA,CAUH,OACC,qBAAA,CACA,WAAA,CAEA,cACC,YAAA,CASF,KACC,QAAA,CACA,gBAAA,CACA,kBA5SY,CA6SZ,oBAAA,CACA,aA/Sa,CAgTb,eAAA,CACA,WAAA,CACA,eAAA,CACA,cAAA,CACA,qBAAA,CACA,cAAA,CACA,eAAA,CAEA,mCAGC,kBAAA,CACA,oBAAA,CAGD,WACC,oBAAA,CAIF,8BACC,kBAAA,CACA,kBAnUa,CAoUb,aAvUa,CAyUb,wFAEC,6BAAA,CAMA,8BACC,sBAAA,CACA,kBAAA,CAGD,8BACC,+FAAA,CAKH,eACC,wBAAA,CAEA,qBACC,kDAAA,CAKD,sBAGC,cAAA,CACA,gBAAA,CACA,kBAxWY,CAyWZ,aA3WY,CA4WZ,cAAA,CAOA,wBACC,kBAAA,CACA,aArXW,CAwXZ,uBACC,kBAAA,CACA,aA1XW,CA4XX,yBACC,aA7XU,CAgYX,+DAEC,aAlYU,CAqYX,+BACC,kBAnYU,CAsYX,+BACC,kBAAA,CAIF,kBACC,gBAAA,CAGD,wBACC,aAhZW,CAmZZ,wBACC,aAAA,CAGD,sBACC,oBAAA,CAIF,mBACC,iBAAA,CACA,kBAjaY,CAkaZ,aAAA,CAGD,oBACC,WAAA,CACA,iBAAA,CAGD,kBACC,oBAAA,CAIF,UACC,QAAA,CACA,gBAAA,CACA,kBAhba,CAibb,aAnba,CAqbb,YACC,aAtbY,CAybb,gBACC,gBAAA,CACA,eAAA,CACA,kBAAA,CAIF,iBACC,QAAA,CACA,SAAA,CAEA,uBACC,qBAAA,CAIF,eACC,sBAAA,CACA,eAAA,CACA,eAAA,CACA,WAAA,CACA,wBAAA,CAEA,gCACC,cAAA,CACA,qBAAA,CACA,gBAAA,CACA,aApdY,CAsdZ,kCACC,aAAA,CACA,iBAAA,CACA,SAAA,CAEA,wCACC,wBA3dS,CAgeZ,sBACC,YAAA,CAIA,qBAGC,SAAA,CACA,gBAAA,CAUA,uBACC,iBAAA,CACA,kBAAA,CAGD,+DAEC,kBA1fS,CA2fT,aA5fU,CAggBZ,kDACC,gBAAA,CACA,kBAAA,CAKD,yDAEC,iBAAA,CACA,eAAA,CAQF,kEACC,UAAA,CAIF,WACC,YAAA,CACA,+BAAA,CACA,cAAA,CAGD,OACC,eAAA,CACA,iBAAA,CACA,kBAhiBa,CAiiBb,aAAA,CACA,cAAA,CACA,WAAA,CACA,2BAAA,CAEA,SACC,aAAA,CACA,yBAAA,CAIF,YACC,gBAAA,CAGD,wCAGC,WAAA,CAGD,YACC,kBAvjBa,CAwjBb,aArjBa,CAwjBd,eACC,kBA5jBa,CA6jBb,aAzjBY,CA4jBb,aACC,kBAjkBa,CAkkBb,aA7jBY,CAgkBb,YACC,kBAAA,CACA,aAxkBY,CA0kBZ,oBACC,aA3kBW,CA+kBb,4CAEC,0DAAA,CAID,SACC,iBAAA,CAEA,YACC,gBAAA,CACA,kBAAA,CACA,UAAA,CACA,QAAA,CACA,4BAAA,CAGD,aACC,gBAAA,CACA,iBAAA,CACA,aAAA,CACA,kBApmBW,CAqmBX,aApmBY,CAqmBZ,eAAA,CAEA,kBACC,wBAAA,CACA,aAzmBW,CA0mBX,WAAA,CAIF,cACC,eAAA,CACA,kBAhnBY,CAinBZ,aA5mBW,CA6mBX,wBAAA,CAGD,oBACC,QAAA,CACA,gBAAA,CACA,kBAxnBY,CAynBZ,aAAA,CACA,aAAA,CACA,4BAAA,CACA,+BAAA,CAEA,sBACC,QAAA,CAIF,oBACC,aAroBW,CAyoBb,KACC,wBAAA,CAEA,gBACC,QAAA,CACA,gBAAA,CACA,kBA5oBY,CA6oBZ,aA/oBY,CAgpBZ,+BAAA,CAEA,kBACC,aAnpBW,CAspBZ,2BACC,gBAAA,CAGC,uCACC,+FAAA,CAMJ,kBACC,iBAAA,CACA,gBAAA,CAEA,wBACC,cAAA,CACA,eAAA,CACA,iBAAA,CAGC,yCACC,qBAAA,CACA,sBAAA,CAEA,+CACC,+FAAA,CAQJ,gCACC,kBAAA,CACA,oBAAA,CACA,eAAA,CAGD,gDACC,kBA9rBU,CAgsBV,uDACC,kBAAA,CAGD,uDACC,gBAAA,CACA,aAvsBU,CA2sBZ,mDACC,eAAA,CACA,QAAA,CACA,eAAA,CACA,iBAAA,CACA,OAAA,CACA,UAAA,CACA,gBAAA,CACA,gBAAA,CAGD,yBACC,gBAAA,CACA,eAAA,CAIF,kBACC,kBAAA,CAIF,MACC,aAAA,CAGD,mBACC,cAAA,CACA,kBAruBa,CAsuBb,WAAA,CACA,cAAA,CACA,iBAAA,CACA,gBAAA,CAEA,0BACC,kBAAA,CACA,aA/uBY,CAivBZ,gCACC,oBAAA,CAKH,mBACC,kBAtvBa,CAwvBb,yBACC,cAAA,CACA,kBAAA,CACA,eAAA,CAEA,gCACC,kBAAA,CAGD,2BACC,oBAAA,CACA,aArwBW,CA0wBd,iCACC,SACC,mDAAA,CAGD,eACC,kDAAA,CAAA,CAIF,sCACC,kCACC,+BAAA,CAGD,wCACC,+BAAA,CAAA,CAIF,QACC,WAAA,CAEA,cACC,qBAAA,CAEA,oBAGC,iBAAA,CACA,iBAAA,CAEA,0BACC,oBAAA,CACA,WAAA,CACA,kBAAA,CACA,iBAAA,CACA,OAAA,CACA,sCAAA,CAKH,iCACC,WAAA,CAGD,qBACC,YAAA,CAGD,wBACC,cAAA,CACA,OAAA,CACA,UAAA,CACA,UAAA,CACA,iBAAA,CACA,iBAAA,CAEA,8BACC,oBAAA,CACA,gBAAA,CACA,cAAA,CAGD,iDACC,6BAAA,CACA,eAAA,CAEA,uDACC,oBAAA,CAMJ,OACC,cAAA,CACA,kBAt1Ba,CA21BZ,wBACC,eAAA,CAMC,wGACC,wBAAA,CAMF,qEAEC,WAAA,CAIA,qDACC,WAAA,CAGD,4DACC,UAAA,CAQJ,2DACC,wBAAA,CACA,aAAA,CAGD,4DACC,wBAAA,CACA,aAAA,CAGD,qDACC,QAAA,CAGD,mBACC,YAAA,CACA,aAAA,CACA,iBAAA,CACA,cAAA,CACA,iBAAA,CAMA,6BACC,kBAt5BW,CAu5BX,aAAA,CACA,UAAA,CACA,WAAA,CACA,gBAAA,CACA,iBAAA,CAEA,mCACC,oBAAA,CAGD,mCACC,wBAAA,CAMJ,MACC,iBAAA,CACA,cAAA,CAGC,iBACC,WAAA,CACA,cAAA,CAIF,WACC,aAAA,CAGD,cACC,eAAA,CAKD,cACC,eAAA,CAIF,QACC,YAAA,CAGD,aACC,kBAx8BY,CAy8BZ,aAAA,CACA,iBAAA,CACA,cAAA,CACA,WAAA,CACA,WAAA,CACA,MAAA,CACA,iBAAA,CAIA,eACC,YAAA,CACA,iBAAA,CACA,gBAAA,CACA,aAx9BY,CA09BZ,qBACC,oBAAA,CACA,kBAAA,CAKH,KACC,cAAA,CACA,gBAAA,CACA,eAAA,CACA,iBAAA,CAEA,WACC,YAAA,CAKD,OACC,aA9+BY,CAm/Bd,UACC,UAAA,CACA,WAAA,CACA,wBAr/BY,CAs/BZ,uBAAA,CAAA,eAAA,CACA,KAAA,CACA,UAAA,CAEA,uBACC,oBAAA,CACA,iBAAA,CACA,UAAA,CAEA,6BACC,cAAA,CACA,gBAAA,CAMD,+DACC,oBAAA,CAKH,MACC,kBAAA,CACA,kBAhhCa,CAkhCb,aAGC,aAAA,CACA,SAAA,CACA,4BAAA,CAGD,2BAEC,eAphCY,CAshCZ,2FACC,eAvhCW,CA2hCb,6BACC,kBA9hCa,CAgiCb,+CACC,kBAjiCY,CAqiCd,6BACC,kBAriCa,CAuiCb,+CACC,kBAxiCY,CA6iCb,iBACC,aAAA,CACA,eAAA,CAIF,cACC,eAAA,CACA,iBAAA,CAGD,wBACC,WAAA,CAGD,YACC,aApkCY,CAqkCZ,cAAA,CAIF,aACC,eAAA,CACA,cAAA,CAEA,oBACC,eAAA,CAIF,cACC,cAAA,CACA,kBAAA,CACA,WAAA,CACA,aAAA,CACA,aAAA,CACA,WAAA,CACA,iBAAA,CACA,gBAAA,CACA,qBAAA,CACA,cAAA,CACA,WAAA,CACA,MAAA,CACA,QAAA,CAIA,qCAEC,aArmCY,CAwmCb,mBACC,kBArmCW,CAumCX,iCACC,kBAxmCU,CA4mCZ,kBACC,kBAAA,CAEA,gCACC,kBAAA,CAIF,gCACC,eAAA,CAGD,sBACC,YAAA,CAIF,eACC,iBAAA,CACA,oBAAA,CACA,kBAAA,CAEA,qBACC,kBAroCY,CAsoCZ,aAxoCY,CA4oCd,aACC,QAAA,CACA,iBAAA,CACA,eAAA,CACA,kBAAA,CAGA,kBAjpCa,CAopCd,MACC,kBAAA,CAEA,2BAGC,WAAA,CAIA,8BAEC,+BAAA,CAIF,uBACC,cAAA,CAEA,6BACC,eAAA,CACA,kBAAA,CACA,sBAAA,CAEA,yCACC,WAAA,CAMJ,SACC,WAAA,CAGD,OACC,WAAA,CAEA,iBACC,iBAAA,CAMD,qCACC,QAAA,CAGD,qCACC,kBAvsCW,CAwsCX,WAAA,CACA,iBAAA,CAGC,qEACC,WAAA,CACA,UAAA,CACA,iBAAA,CACA,OAAA,CACA,kBAAA,CACA,QAAA,CAEA,iFACC,oBAAA,CAOL,SACC,aA9tCa,CA+tCb,aAAA,CAGD,SACC,eAAA,CACA,wBAAA,CAGD,KACC,cAAA,CACA,kBAzuCa,CA0uCb,eAAA,CACA,aAAA,CAEA,WACC,iBAAA,CACA,gBAAA,CAGD,iBACC,kBAAA,CACA,aApvCY,CAuvCb,mBACC,kBArvCY,CAsvCZ,aAzvCY,CA4vCb,kBACC,kBAAA,CACA,aA9vCY,CAiwCb,iBACC,kBAnwCW,CAowCX,aAnwCY,CAuwCd,yBAGG,mDACC,YAAA,CAKH,wBACC,gBAAA,CACA,eAAA,CAGD,UACC,iBAAA,CAGD,aACC,eAAA,CACA,UAAA,CAGD,QACC,aAAA,CAEA,cACC,SAAA,CAGD,wBACC,SAAA,CACA,cAAA,CACA,UAAA,CAEA,8BACC,cAAA,CAKH,oBACC,YAAA,CAGD,8CAEC,UAAA,CACA,iBAAA,CAGD,OACC,SAAA,CACA,OAAA,CACA,6BAAA,CAEA,qBACC,kBA9zCW,CA+zCX,aAAA,CACA,WAAA,CACA,gBAAA,CACA,iBAAA,CACA,kBAAA,CAEA,2BACC,wBAAA,CAGD,2BACC,oBAAA,CAIF,mCACC,YAAA,CACA,YAAA,CACA,gBAAA,CACA,iBAAA,CAGD,cACC,SAAA,CACA,YAAA,CAKD,sBACC,kBA71CW,CA81CX,aAAA,CACA,WAAA,CACA,gBAAA,CACA,iBAAA,CACA,kBAAA,CAEA,4BACC,wBAAA,CAGD,4BACC,oBAAA,CAKH,UACC,WAAA,CAEA,eACC,QAAA,CAGD,iBACC,QAAA,CAEA,sBACC,QAAA,CAIF,uBACC,OAAA,CACA,gBAAA,CACA,wBAAA,CACA,iBAAA,CAEA,4BACC,aAAA,CAGD,6BACC,UAAA,CAKH,2CAEC,kBA/4CY,CAg5CZ,aAAA,CACA,WAAA,CACA,gBAAA,CACA,iBAAA,CACA,kBAAA,CAEA,uDACC,wBAAA,CAIF,oGAEC,YAAA,CAGD,sBACC,QAAA,CACA,SAAA,CAGD,WACC,gBAAA,CAGD,cACC,UAAA,CAEA,sBACC,wBAAA,CACA,aAAA,CACA,MAAA,CAEA,4BACC,UAAA,CAGD,4BACC,YAAA,CAKH,aACC,qBAAA,CAGD,MACC,iBAAA,CACA,kBAAA,CAGD,WACC,cAAA,CAGD,mBACC,iBAAA,CACA,KAAA,CAGD,uFAKC,iBAAA,CAGD,oBACC,UAAA,CACA,KAAA,CAGD,2BAEC,OAAA,CAGD,YACC,KAAA,CAGD,uDAGC,QAAA,CAGD,qBACC,QAAA,CAGD,mBACC,UAAA,CAAA,CAIF,yBACC,iBACC,QAAA,CAAA,CAIF,yBACC,gBACC,YAAA,CAAA,CAIF,eACC,YAAA,CAGD,6CACC,kBAAA,CAGD,uCACC,kBAAA,CACA,gBAAA,CAIA,iBACC,aA5gDY,CA8gDZ,wBACC,kBA/gDW,CAghDX,aAnhDW,CAqhDX,0BACC,aAthDU,CA0hDZ,mBACC,aAxhDW,CA4hDb,iBACC,aAAA,CAEA,wBACC,kBAAA,CACA,aApiDW,CAsiDX,0BACC,aAviDU,CA2iDZ,mBACC,aAAA,CAKH,qBACC,gBAAA,CACA,kBAnjDa,CAojDb,aAljDa,CAmjDb,WAAA,CAEA,6BACC,eAAA,CACA,aAAA,CACA,aAAA,CAKD,mCACC,MAAA,CACA,UAAA,CAKD,oCACC,OAAA,CACA,SAAA,CAKD,cACC,kBAAA","file":"swage.css"} \ No newline at end of file diff --git a/p/themes/Swage/swage.rtl.css b/p/themes/Swage/swage.rtl.css index 15418f2cf79..a7e9370745a 100644 --- a/p/themes/Swage/swage.rtl.css +++ b/p/themes/Swage/swage.rtl.css @@ -72,10 +72,6 @@ img.icon:hover { background: none; } -main#stream { - margin-top: 2rem; -} - sup { top: -0.3em; } diff --git a/p/themes/Swage/swage.scss b/p/themes/Swage/swage.scss index 0a3b66e74bb..1d520376419 100644 --- a/p/themes/Swage/swage.scss +++ b/p/themes/Swage/swage.scss @@ -92,10 +92,6 @@ img { } } -main#stream { - margin-top: 2rem; -} - sup { top: -0.3em; } From e2867cfe1453f06d6bfab769552d39ba8b30df24 Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Mon, 5 Sep 2022 08:53:50 +0200 Subject: [PATCH 0364/2479] Shortcuts: auto-load at least a few articles (#4532) * Auto-load at least a few articles #fix https://github.com/FreshRSS/FreshRSS/issues/3974 * Fix init * syntax * Aledeg simplification --- p/scripts/main.js | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/p/scripts/main.js b/p/scripts/main.js index b0a6df01b8e..90e7d79c81a 100644 --- a/p/scripts/main.js +++ b/p/scripts/main.js @@ -720,10 +720,14 @@ function onScroll() { } }); } - if (context.auto_load_more) { - const streamFooter = document.getElementById('stream-footer'); - if (streamFooter && box_to_follow.offsetHeight > 0 && + let streamFooter; + if (context.auto_load_more && (streamFooter = document.getElementById('stream-footer'))) { + if (box_to_follow.offsetHeight > 0 && box_to_follow.scrollTop + box_to_follow.offsetHeight + (window.innerHeight / 2) >= streamFooter.offsetTop) { + // Too close to the last pre-loaded article + load_more_posts(); + } else if (document.querySelectorAll('.flux.current ~ .flux').length <= 5) { + // Too few pre-loaded articles load_more_posts(); } } From 442019a0548d3f1d888419930d38f1986e5cd773 Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Mon, 5 Sep 2022 09:15:20 +0200 Subject: [PATCH 0365/2479] SimplePie fix base (#4565) * SimplePie fix base #fix https://github.com/FreshRSS/FreshRSS/issues/4562 See `` example in https://datatracker.ietf.org/doc/html/rfc4287#section-1.1 First uses item `` if it exists, or the item own link, or the feed's base URL rules (feed URL, or Web site URL) * Minor formatting --- lib/SimplePie/SimplePie/Item.php | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/lib/SimplePie/SimplePie/Item.php b/lib/SimplePie/SimplePie/Item.php index 3ac4fa882bf..2fb1d328409 100644 --- a/lib/SimplePie/SimplePie/Item.php +++ b/lib/SimplePie/SimplePie/Item.php @@ -152,15 +152,21 @@ public function get_item_tags($namespace, $tag) } /** - * Get the base URL value from the parent feed - * - * Uses `` + * Get the base URL value. + * Uses ``, or item link, or feed base URL. * * @param array $element * @return string */ public function get_base($element = array()) { + if (!empty($element['xml_base_explicit']) && isset($element['xml_base'])) { + return $element['xml_base']; + } + $link = $this->get_permalink(); + if ($link != null) { + return $link; + } return $this->feed->get_base($element); } From 3b81708c1aa7dc0be9fbd017a85a57855094b57d Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Mon, 5 Sep 2022 13:13:07 +0200 Subject: [PATCH 0366/2479] API protection limit content size (#4583) * API protection limit content size We had no limit to the length of an article sent through our GReader API to clients, which was a problem: The article https://devblogs.microsoft.com/dotnet/performance_improvements_in_net_7/ from the feed https://devblogs.microsoft.com/dotnet/feed/ is about 700KB long, which makes some clients (tested with News+) fail. We should try other clients to verify that 500KB is a safe enough limit. * Light optimisation * Use class constant --- app/Models/Entry.php | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/app/Models/Entry.php b/app/Models/Entry.php index feb09434735..12cef68a50f 100644 --- a/app/Models/Entry.php +++ b/app/Models/Entry.php @@ -651,6 +651,12 @@ private static function dec2hex($dec): string { str_pad(dechex($dec), 16, '0', STR_PAD_LEFT); } + /** + * Some clients (tested with News+) would fail if sending too long item content + * @var int + */ + const API_MAX_COMPAT_CONTENT_LENGTH = 500000; + /** * N.B.: To avoid expensive lookups, ensure to set `$entry->_feed($feed)` before calling this function. * N.B.: You might have to populate `$entry->_tags()` prior to calling this function. @@ -690,6 +696,9 @@ public function toGReader(string $mode = ''): array { if ($mode === 'compat') { $item['title'] = escapeToUnicodeAlternative($this->title(), false); unset($item['alternate'][0]['type']); + if (mb_strlen($this->content(), 'UTF-8') > self::API_MAX_COMPAT_CONTENT_LENGTH) { + $item['summary']['content'] = mb_strcut($this->content(), 0, self::API_MAX_COMPAT_CONTENT_LENGTH, 'UTF-8'); + } } elseif ($mode === 'freshrss') { $item['guid'] = $this->guid(); unset($item['summary']); From 31d0508b0ce7b9e876602c8b10a1310ab800d3ac Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Mon, 5 Sep 2022 22:08:31 +0200 Subject: [PATCH 0367/2479] Update changelog --- CHANGELOG.md | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4f1c1b68bbf..68c81098b7a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -30,11 +30,14 @@ [simplepie#717](https://github.com/simplepie/simplepie/pull/717) * Fix parsing of HTTP Links [simplepie#729](https://github.com/simplepie/simplepie/pull/729) * Fix `status_code` type for PHP 8.1+ [simplepie#728](https://github.com/simplepie/simplepie/pull/728) + * Fix relative URLs [simplepie#744](https://github.com/simplepie/simplepie/pull/744) * Bug fixing * Fix last update & archive logic (especially for very long feeds, for which some old items were marked as unread) [#4422](https://github.com/FreshRSS/FreshRSS/pull/4422) * Fix regression with Fever API on 32-bit platforms [#4201](https://github.com/FreshRSS/FreshRSS/pull/4201) * Fix read-when-same-title bug [#4206](https://github.com/FreshRSS/FreshRSS/pull/4206) * Fix some search expressions such as `"ab cd"` and `ab-cd` [#4277](https://github.com/FreshRSS/FreshRSS/pull/4277) + * Fix auto-load of more articles when using shortcuts [#4532](https://github.com/FreshRSS/FreshRSS/pull/4532) + * Fix space shortcut [#4581](https://github.com/FreshRSS/FreshRSS/pull/4581) * WebSub: Use hash instead of base64 to handle long URLs [#4282](https://github.com/FreshRSS/FreshRSS/pull/4282) * Fix handling of authors with ampersand `&` [#4287](https://github.com/FreshRSS/FreshRSS/pull/4287) * Fix lazy loading images containing a quote `'` in the address [#4330](https://github.com/FreshRSS/FreshRSS/pull/4330) @@ -80,12 +83,13 @@ * Improve themes *Ansum* [#4538](https://github.com/FreshRSS/FreshRSS/pull/4538), [#4549](https://github.com/FreshRSS/FreshRSS/pull/4549); *Flat* [#4575](https://github.com/FreshRSS/FreshRSS/pull/4575); *Mapco* [#4491](https://github.com/FreshRSS/FreshRSS/pull/4491), [#4491](https://github.com/FreshRSS/FreshRSS/pull/4491); - *Swage* [#4493](https://github.com/FreshRSS/FreshRSS/pull/4493), [#4512](https://github.com/FreshRSS/FreshRSS/pull/4512) + *Swage* [#4493](https://github.com/FreshRSS/FreshRSS/pull/4493), [#4512](https://github.com/FreshRSS/FreshRSS/pull/4512), [#4566](https://github.com/FreshRSS/FreshRSS/pull/4566) * Extensions * Allow extensions using `entry_before_insert` to change `entry->isRead()` [#4331](https://github.com/FreshRSS/FreshRSS/pull/4331) * i18n * Improve i18n CLI [#4197](https://github.com/FreshRSS/FreshRSS/pull/4197), [#4199](https://github.com/FreshRSS/FreshRSS/pull/4199) - * Improve Chinese [#4332](https://github.com/FreshRSS/FreshRSS/pull/4332), [#4337](https://github.com/FreshRSS/FreshRSS/pull/4337), [#4379](https://github.com/FreshRSS/FreshRSS/pull/4379), + * Add Chinese (Traditional) [#4578](https://github.com/FreshRSS/FreshRSS/pull/4578) + * Improve Chinese (Simplified) [#4332](https://github.com/FreshRSS/FreshRSS/pull/4332), [#4337](https://github.com/FreshRSS/FreshRSS/pull/4337), [#4379](https://github.com/FreshRSS/FreshRSS/pull/4379), [#4509](https://github.com/FreshRSS/FreshRSS/pull/4509), [#4577](https://github.com/FreshRSS/FreshRSS/pull/4577) * Improve English [#4450](https://github.com/FreshRSS/FreshRSS/pull/4450) * Improve German [#4525](https://github.com/FreshRSS/FreshRSS/pull/4525) @@ -94,12 +98,14 @@ * Improve Polish [#4363](https://github.com/FreshRSS/FreshRSS/pull/4363) * Improve Russian [#4385](https://github.com/FreshRSS/FreshRSS/pull/4385) * Improve Slovak [#4524](https://github.com/FreshRSS/FreshRSS/pull/4524) +* API + * Restrict maximum length of item content length for clients compatibility [#4583](https://github.com/FreshRSS/FreshRSS/pull/4583) * Deployment * Docker: Performance: entrypoint fix buffering, problematic when importing large OPMLs during install [#4417](https://github.com/FreshRSS/FreshRSS/pull/4417) + * Docker default image (Debian 11 Bullseye) updated to PHP 7.4.30 and Apache 2.4.54 * Docker: alternative image updated to Alpine 3.16 with PHP 8.0.22 and Apache 2.4.54 [#4391](https://github.com/FreshRSS/FreshRSS/pull/4391) * Add PHP extensions `php-openssl` (used by PHPMailer) and `php-xml` (used by SimplePie) [#4420](https://github.com/FreshRSS/FreshRSS/pull/4420) * Docker: Upgraded dev image `freshrss/freshrss:newest` to PHP 8.2 [#4420](https://github.com/FreshRSS/FreshRSS/pull/4420) - * Docker default image (Debian 11 Bullseye) updated to PHP 7.4.30 and Apache 2.4.54 * Include PHP extensions in Composer for easier automated deployment [#4497](https://github.com/FreshRSS/FreshRSS/pull/4497) * Improved trimming of `base_url` to avoid some common configuration bugs, especially via Docker / CLI [#4423](https://github.com/FreshRSS/FreshRSS/pull/4423) * CLI From fea12a0957c5156b8d4ce3f329aa20a819a1e316 Mon Sep 17 00:00:00 2001 From: Frans de Jonge Date: Tue, 6 Sep 2022 22:26:51 +0200 Subject: [PATCH 0368/2479] Use body text color for input in Alternative Dark theme to improve contrast (#4587) Fixes #4585. --- p/themes/Alternative-Dark/adark.css | 2 +- p/themes/Alternative-Dark/adark.rtl.css | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/p/themes/Alternative-Dark/adark.css b/p/themes/Alternative-Dark/adark.css index 99586fb0e80..fa353758263 100644 --- a/p/themes/Alternative-Dark/adark.css +++ b/p/themes/Alternative-Dark/adark.css @@ -36,7 +36,7 @@ textarea { input, select, textarea { padding: 5px; background: #262626; - color: #666; + color: #999; border: 1px solid #666; border-radius: 3px; min-height: 25px; diff --git a/p/themes/Alternative-Dark/adark.rtl.css b/p/themes/Alternative-Dark/adark.rtl.css index f4e0a1f79af..d90736ce52f 100644 --- a/p/themes/Alternative-Dark/adark.rtl.css +++ b/p/themes/Alternative-Dark/adark.rtl.css @@ -36,7 +36,7 @@ textarea { input, select, textarea { padding: 5px; background: #262626; - color: #666; + color: #999; border: 1px solid #666; border-radius: 3px; min-height: 25px; From adf1c3bd9a2feb02227b5468bc0559deb34b60bf Mon Sep 17 00:00:00 2001 From: Alexis Degrugillier Date: Fri, 9 Sep 2022 06:56:32 -0400 Subject: [PATCH 0369/2479] Add freshrss network when creating container (#4592) This will ease the connection between freshrss container and other containers. --- Makefile | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 7777bdfc117..6216dfcecbc 100644 --- a/Makefile +++ b/Makefile @@ -5,6 +5,7 @@ ifndef TAG endif PORT ?= 8080 +NETWORK ?= freshrss-network ifdef NO_DOCKER PHP = $(shell which php) @@ -38,6 +39,7 @@ build: ## Build a Docker image .PHONY: start start: ## Start the development environment (use Docker) + docker network create --driver bridge $(NETWORK) || true $(foreach extension,$(extensions),$(eval volumes=$(volumes) --volume $(extension):/var/www/FreshRSS/extensions/$(notdir $(extension)):z)) docker run \ --rm \ @@ -46,11 +48,13 @@ start: ## Start the development environment (use Docker) --publish $(PORT):80 \ --env FRESHRSS_ENV=development \ --name freshrss-dev \ + --network $(NETWORK) \ freshrss/freshrss:$(TAG) .PHONY: stop stop: ## Stop FreshRSS container if any - docker stop freshrss-dev + docker stop freshrss-dev || true + docker network rm $(NETWORK) || true ###################### ## Tests and linter ## From 0c472402f22816daa66982a815febc464c4856c8 Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Fri, 9 Sep 2022 22:56:34 +0200 Subject: [PATCH 0370/2479] Workaround invalid OPMLs (#4591) * Workaround invalid OPMLs #fix https://github.com/FreshRSS/FreshRSS/issues/4590 Accept OPML files lacking text attributes * Tolerate missing head element --- app/Models/FeedDAO.php | 4 ++-- app/Services/ImportService.php | 15 ++++++--------- lib/lib_opml.php | 19 ++++++++++--------- 3 files changed, 18 insertions(+), 20 deletions(-) diff --git a/app/Models/FeedDAO.php b/app/Models/FeedDAO.php index 233d2a7158b..1b3d84c4603 100644 --- a/app/Models/FeedDAO.php +++ b/app/Models/FeedDAO.php @@ -83,7 +83,7 @@ public function addFeedObject(FreshRSS_Feed $feed) { 'url' => $feed->url(), 'kind' => $feed->kind(), 'category' => $feed->categoryId(), - 'name' => $feed->name(), + 'name' => $feed->name(true), 'website' => $feed->website(), 'description' => $feed->description(), 'lastUpdate' => 0, @@ -113,7 +113,7 @@ public function addFeedObject(FreshRSS_Feed $feed) { // Update some values of the existing feed using the import $values = [ 'kind' => $feed->kind(), - 'name' => $feed->name(), + 'name' => $feed->name(true), 'website' => $feed->website(), 'description' => $feed->description(), 'pathEntries' => $feed->pathEntries(), diff --git a/app/Services/ImportService.php b/app/Services/ImportService.php index 2e70d4b8191..4910e9cc494 100644 --- a/app/Services/ImportService.php +++ b/app/Services/ImportService.php @@ -123,6 +123,9 @@ private function addOpmlElements($opml_elements, $parent_cat = null, $flatten = * @return FreshRSS_Feed|null a feed. */ private function addFeedOpml($feed_elt, $parent_cat, $dryRun = false) { + if (empty($feed_elt['xmlUrl'])) { + return null; + } if ($parent_cat == null) { // This feed has no parent category so we get the default one $this->catDAO->checkDefault(); @@ -135,15 +138,9 @@ private function addFeedOpml($feed_elt, $parent_cat, $dryRun = false) { // We get different useful information $url = Minz_Helper::htmlspecialchars_utf8($feed_elt['xmlUrl']); - $name = Minz_Helper::htmlspecialchars_utf8($feed_elt['text']); - $website = ''; - if (isset($feed_elt['htmlUrl'])) { - $website = Minz_Helper::htmlspecialchars_utf8($feed_elt['htmlUrl']); - } - $description = ''; - if (isset($feed_elt['description'])) { - $description = Minz_Helper::htmlspecialchars_utf8($feed_elt['description']); - } + $name = Minz_Helper::htmlspecialchars_utf8($feed_elt['text'] ?? ''); + $website = Minz_Helper::htmlspecialchars_utf8($feed_elt['htmlUrl'] ?? ''); + $description = Minz_Helper::htmlspecialchars_utf8($feed_elt['description'] ?? ''); try { // Create a Feed object and add it in DB diff --git a/lib/lib_opml.php b/lib/lib_opml.php index 86847d7200d..f86d780b7ef 100644 --- a/lib/lib_opml.php +++ b/lib/lib_opml.php @@ -189,16 +189,17 @@ function libopml_parse_string($xml, $strict = true) { 'body' => array() ); - // First, we get all "head" elements. Head is required but its sub-elements - // are optional. - foreach ($opml->head->children() as $key => $value) { - if (in_array($key, unserialize(HEAD_ELEMENTS), true)) { - $array['head'][$key] = (string)$value; - } elseif ($strict) { - throw new LibOPML_Exception( - $key . ' is not part of the OPML 2.0 specification' - ); + if (isset($opml->head)) { + // We get all "head" elements. Head is required but its sub-elements are optional. + foreach ($opml->head->children() as $key => $value) { + if (in_array($key, unserialize(HEAD_ELEMENTS), true)) { + $array['head'][$key] = (string)$value; + } elseif ($strict) { + throw new LibOPML_Exception($key . ' is not part of the OPML 2.0 specification'); + } } + } elseif ($strict) { + throw new LibOPML_Exception('Required OPML head element is missing!'); } // Then, we get body oulines. Body must contain at least one outline From f1854cd0ae4bb41a7671a0efe9e3e483ead2a1c1 Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Sat, 10 Sep 2022 07:54:56 +0200 Subject: [PATCH 0371/2479] Fix auto-loading of more articles (#4593) Fix regression from https://github.com/FreshRSS/FreshRSS/pull/4532 https://github.com/FreshRSS/FreshRSS/issues/3974 --- p/scripts/main.js | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/p/scripts/main.js b/p/scripts/main.js index 90e7d79c81a..a9f0986de50 100644 --- a/p/scripts/main.js +++ b/p/scripts/main.js @@ -726,9 +726,12 @@ function onScroll() { box_to_follow.scrollTop + box_to_follow.offsetHeight + (window.innerHeight / 2) >= streamFooter.offsetTop) { // Too close to the last pre-loaded article load_more_posts(); - } else if (document.querySelectorAll('.flux.current ~ .flux').length <= 5) { - // Too few pre-loaded articles - load_more_posts(); + } else { + const after = document.querySelectorAll('.flux.current ~ .flux').length; + if (after > 0 && after <= 5) { + // Too few pre-loaded articles + load_more_posts(); + } } } } From f7adc43eb0d64673e7770f27df6addf57319c4f1 Mon Sep 17 00:00:00 2001 From: martinrotter Date: Sat, 10 Sep 2022 13:33:59 +0200 Subject: [PATCH 0372/2479] Update README.md (#3859) Sync in RSS Guard is now much faster, better (optional) syncing algorithm was implemented Co-authored-by: Alexandre Alapetite --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index f659eca9e47..1c82a25fc6c 100644 --- a/README.md +++ b/README.md @@ -114,7 +114,7 @@ and [Fever API](https://freshrss.github.io/FreshRSS/en/users/06_Fever_API.html) |:--------------------------------------------------------------------------------------|:-----------:|:-------------------------------------------------------------:|:----------------------:|:----------------:|:-------------:|:---------:|:------------------------------:|:-------------------:|:----------:|:------:|:--------:|:------------:| | [News+](https://github.com/noinnion/newsplus/blob/master/apk/NewsPlus_202.apk) with [Google Reader extension](https://github.com/noinnion/newsplus/blob/master/apk/GoogleReaderCloneExtension_101.apk) | Android | [Partially](https://github.com/noinnion/newsplus/blob/master/extensions/GoogleReaderCloneExtension/src/com/noinnion/android/newsplus/extension/google_reader/) | 2015 | GReader | ✔️ | ⭐⭐⭐ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | | [FeedMe](https://play.google.com/store/apps/details?id=com.seazon.feedme)* | Android | ➖ | ✔️✔️ | GReader | ✔️ | ⭐⭐ | ➖ | ➖ | ✔️ | ✓ | ✔️ | ✔️ | -| [RSS Guard](https://github.com/martinrotter/rssguard) | Windows, GNU/Linux, macOS, OS/2 | ✔️ | ✔️✔️ | GReader | ✔️ | ⭐ | ➖ | ✔️ | ✔️ | ✔️ | ✔️ | ➖ | +| [RSS Guard](https://github.com/martinrotter/rssguard) | Windows, GNU/Linux, macOS, OS/2 | ✔️ | ✔️✔️ | GReader | ✔️ | ⭐⭐ | ➖ | ✔️ | ✔️ | ✔️ | ✔️ | ➖ | | [EasyRSS](https://github.com/Alkarex/EasyRSS) | Android | [✔️](https://github.com/Alkarex/EasyRSS) | ✔️ | GReader | Bug | ⭐⭐ | ➖ | ➖ | ✔️ | ➖ | ➖ | ➖ | | [Readrops](https://github.com/readrops/Readrops) | Android | [✔️](https://github.com/readrops/Readrops) | ✔️✔️ | GReader | ✔️ | ⭐⭐⭐ | ➖ | ➖ | ➖ | ➖ | ➖ | ✔️ | | [FocusReader](https://play.google.com/store/apps/details?id=allen.town.focus.reader) | Android | ➖ | ✔️✔️ | GReader | ✔️ | ⭐⭐⭐ | ➖ | ➖ | ✔️ | ➖ | ✓ | ✔️ | From 4c911c67efc0279a526e3a84cecc389196ad1e35 Mon Sep 17 00:00:00 2001 From: martinrotter Date: Sat, 10 Sep 2022 13:36:16 +0200 Subject: [PATCH 0373/2479] Update README.fr.md (#3860) Sync in RSS Guard is now much faster, better (optional) syncing algorithm was implemented Co-authored-by: Alexandre Alapetite Co-authored-by: maTh --- README.fr.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.fr.md b/README.fr.md index b12c04b9da2..d73ca24e8ab 100644 --- a/README.fr.md +++ b/README.fr.md @@ -228,7 +228,7 @@ et [l’API Fever](https://freshrss.github.io/FreshRSS/fr/users/06_Fever_API.htm |:--------------------------------------------------------------------------------------|:-----------:|:-------------------------------------------------------------:|:----------------------:|:----------------:|:-------------:|:---------:|:------------------------------:|:-------------------:|:----------:|:------:|:--------:|:------------:| | [News+](https://github.com/noinnion/newsplus/blob/master/apk/NewsPlus_202.apk) with [Google Reader extension](https://github.com/noinnion/newsplus/blob/master/apk/GoogleReaderCloneExtension_101.apk) | Android | [Partially](https://github.com/noinnion/newsplus/blob/master/extensions/GoogleReaderCloneExtension/src/com/noinnion/android/newsplus/extension/google_reader/) | 2015 | GReader | ✔️ | ⭐⭐⭐ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | | [FeedMe](https://play.google.com/store/apps/details?id=com.seazon.feedme) | Android | ➖ | ✔️✔️ | GReader | ✔️ | ⭐⭐ | ➖ | ➖ | ✔️ | ✓ | ✔️ | ✔️ | -| [RSS Guard](https://github.com/martinrotter/rssguard) | Windows, GNU/Linux, macOS, OS/2 | ✔️ | ✔️✔️ | GReader | ✔️ | ⭐ | ➖ | ✔️ | ✔️ | ✔️ | ✔️ | ➖ | +| [RSS Guard](https://github.com/martinrotter/rssguard) | Windows, GNU/Linux, macOS, OS/2 | ✔️ | ✔️✔️ | GReader | ✔️ | ⭐⭐ | ➖ | ✔️ | ✔️ | ✔️ | ✔️ | ➖ | | [EasyRSS](https://github.com/Alkarex/EasyRSS) | Android | [✔️](https://github.com/Alkarex/EasyRSS) | ✔️ | GReader | Bug | ⭐⭐ | ➖ | ➖ | ✔️ | ➖ | ➖ | ➖ | | [FocusReader](https://play.google.com/store/apps/details?id=allen.town.focus.reader) | Android | ➖ | ✔️✔️ | GReader | ✔️ | ⭐⭐⭐ | ➖ | ➖ | ✔️ | ➖ | ✓ | ✔️ | | [Readrops](https://github.com/readrops/Readrops) | Android | [✔️](https://github.com/readrops/Readrops) | ✔️✔️ | GReader | ✔️ | ⭐⭐⭐ | ➖ | ➖ | ➖ | ➖ | ➖ | ✔️ | From eb850b7a016df92843066f9a02a4cd7ab2fcc5bf Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Sat, 10 Sep 2022 15:17:49 +0200 Subject: [PATCH 0374/2479] Add Fluent Reader Lite (#4595) #fix https://github.com/FreshRSS/FreshRSS/issues/3418 --- README.fr.md | 1 + README.md | 1 + docs/en/developers/06_Fever_API.md | 1 + docs/en/developers/06_GoogleReader_API.md | 1 + docs/fr/users/06_Fever_API.md | 1 + docs/fr/users/06_Mobile_access.md | 4 +++- 6 files changed, 8 insertions(+), 1 deletion(-) diff --git a/README.fr.md b/README.fr.md index d73ca24e8ab..69ef5f6c53f 100644 --- a/README.fr.md +++ b/README.fr.md @@ -232,6 +232,7 @@ et [l’API Fever](https://freshrss.github.io/FreshRSS/fr/users/06_Fever_API.htm | [EasyRSS](https://github.com/Alkarex/EasyRSS) | Android | [✔️](https://github.com/Alkarex/EasyRSS) | ✔️ | GReader | Bug | ⭐⭐ | ➖ | ➖ | ✔️ | ➖ | ➖ | ➖ | | [FocusReader](https://play.google.com/store/apps/details?id=allen.town.focus.reader) | Android | ➖ | ✔️✔️ | GReader | ✔️ | ⭐⭐⭐ | ➖ | ➖ | ✔️ | ➖ | ✓ | ✔️ | | [Readrops](https://github.com/readrops/Readrops) | Android | [✔️](https://github.com/readrops/Readrops) | ✔️✔️ | GReader | ✔️ | ⭐⭐⭐ | ➖ | ➖ | ➖ | ➖ | ➖ | ✔️ | +| [Fluent Reader Lite](https://hyliu.me/fluent-reader-lite/) | Android, iOS| [✔️](https://github.com/yang991178/fluent-reader-lite) | ✔️✔️ | GReader, Fever | ✔️ | ⭐⭐⭐ | ➖ | ➖ | ✓ | ➖ | ➖ | ➖ | | [ChristopheHenry](https://gitlab.com/christophehenry/freshrss-android) | Android | [✔️](https://gitlab.com/christophehenry/freshrss-android) | En développement | GReader | ✔️ | ⭐⭐ | ➖ | ✔️ | ✔️ | ➖ | ➖ | ➖ | | [Fluent Reader](https://hyliu.me/fluent-reader/) | Windows, Linux, macOS| [✔️](https://github.com/yang991178/fluent-reader) | ✔️✔️ | Fever | ✔️ | ⭐ | ➖ | ✔️ | ✔️ | ➖ | ➖ | ➖ | | [FeedReader](https://jangernert.github.io/FeedReader/) | GNU/Linux | [✔️](https://jangernert.github.io/FeedReader/) | ✔️ | GReader | ✔️ | ⭐⭐ | ➖ | ✔️ | ✔️ | ➖ | ✔️ | ✔️ | diff --git a/README.md b/README.md index 1c82a25fc6c..197591bba1f 100644 --- a/README.md +++ b/README.md @@ -117,6 +117,7 @@ and [Fever API](https://freshrss.github.io/FreshRSS/en/users/06_Fever_API.html) | [RSS Guard](https://github.com/martinrotter/rssguard) | Windows, GNU/Linux, macOS, OS/2 | ✔️ | ✔️✔️ | GReader | ✔️ | ⭐⭐ | ➖ | ✔️ | ✔️ | ✔️ | ✔️ | ➖ | | [EasyRSS](https://github.com/Alkarex/EasyRSS) | Android | [✔️](https://github.com/Alkarex/EasyRSS) | ✔️ | GReader | Bug | ⭐⭐ | ➖ | ➖ | ✔️ | ➖ | ➖ | ➖ | | [Readrops](https://github.com/readrops/Readrops) | Android | [✔️](https://github.com/readrops/Readrops) | ✔️✔️ | GReader | ✔️ | ⭐⭐⭐ | ➖ | ➖ | ➖ | ➖ | ➖ | ✔️ | +| [Fluent Reader Lite](https://hyliu.me/fluent-reader-lite/) | Android, iOS| [✔️](https://github.com/yang991178/fluent-reader-lite) | ✔️✔️ | GReader, Fever | ✔️ | ⭐⭐⭐ | ➖ | ➖ | ✓ | ➖ | ➖ | ➖ | | [FocusReader](https://play.google.com/store/apps/details?id=allen.town.focus.reader) | Android | ➖ | ✔️✔️ | GReader | ✔️ | ⭐⭐⭐ | ➖ | ➖ | ✔️ | ➖ | ✓ | ✔️ | | [ChristopheHenry](https://gitlab.com/christophehenry/freshrss-android) | Android | [✔️](https://gitlab.com/christophehenry/freshrss-android) | Work in progress | GReader | ✔️ | ⭐⭐ | ➖ | ✔️ | ✔️ | ➖ | ➖ | ➖ | | [Fluent Reader](https://hyliu.me/fluent-reader/) | Windows, Linux, macOS| [✔️](https://github.com/yang991178/fluent-reader) | ✔️✔️ | Fever | ✔️ | ⭐ | ➖ | ✔️ | ✔️ | ➖ | ➖ | ➖ | diff --git a/docs/en/developers/06_Fever_API.md b/docs/en/developers/06_Fever_API.md index 28788508989..4807484d19f 100644 --- a/docs/en/developers/06_Fever_API.md +++ b/docs/en/developers/06_Fever_API.md @@ -22,6 +22,7 @@ Then point your mobile application to the `fever.php` address (e.g. `https://fre | App | Platform | License | |:----------------------------------------------------------------------------------:|:-------------------:|:--------------------------------------------------------:| |[Fluent Reader](https://hyliu.me/fluent-reader/) |Windows, Linux, macOS|[BSD-3-Clause](https://github.com/yang991178/fluent-reader/blob/master/LICENSE)| +|[Fluent Reader lite](https://hyliu.me/fluent-reader-lite/) |Android, iOS |[BSD-3-Clause](https://github.com/yang991178/fluent-reader-lite)| |[Fiery Feeds](https://apps.apple.com/app/fiery-feeds-rss-reader/id1158763303) |iOS |Closed Source | |[Newsflash](https://gitlab.com/news-flash/news_flash_gtk/) |Linux |[GPLv3](https://gitlab.com/news-flash/news_flash_gtk/-/blob/master/LICENSE)| |[Unread](https://apps.apple.com/app/unread-rss-reader/id1252376153) |iOS |Closed Source | diff --git a/docs/en/developers/06_GoogleReader_API.md b/docs/en/developers/06_GoogleReader_API.md index 20a1eaa6566..5500237e45f 100644 --- a/docs/en/developers/06_GoogleReader_API.md +++ b/docs/en/developers/06_GoogleReader_API.md @@ -27,6 +27,7 @@ Then point your mobile application to the `greader.php` address (e.g. `https://f |[FeedMe 3.5.3+](https://play.google.com/store/apps/details?id=com.seazon.feedme) |Android |Closed Source (Free) | |[EasyRSS](https://github.com/Alkarex/EasyRSS) |Android |[GPLv3](https://github.com/Alkarex/EasyRSS/blob/master/license.txt) ([F-Droid](https://f-droid.org/packages/org.freshrss.easyrss/))| |[Readrops](https://github.com/readrops/Readrops) |Android |[GPLv3](https://github.com/readrops/Readrops/blob/develop/LICENSE) | +|[Fluent Reader Lite](https://hyliu.me/fluent-reader-lite/) |Android, iOS |[BSD-3](https://github.com/yang991178/fluent-reader-lite) | |[FocusReader](https://play.google.com/store/apps/details?id=allen.town.focus.reader) |Android |Closed Source(Free) | |[FeedReader 2.0+](https://jangernert.github.io/FeedReader/) |Linux |[GPLv3](https://github.com/jangernert/FeedReader/blob/master/LICENSE) | |[lire](https://lireapp.com/) |iOS, macOS |Closed Source | diff --git a/docs/fr/users/06_Fever_API.md b/docs/fr/users/06_Fever_API.md index d9fdaf05db9..ef44e989970 100644 --- a/docs/fr/users/06_Fever_API.md +++ b/docs/fr/users/06_Fever_API.md @@ -26,6 +26,7 @@ Connectez ensuite votre application mobile en utilisant l’adresse de l’API | App | Platform | License | |:----------------------------------------------------------------------------------:|:-------------------:|:--------------------------------------------------------:| |[Fluent Reader](https://hyliu.me/fluent-reader/) |Windows, Linux, macOS|[BSD-3-Clause](https://github.com/yang991178/fluent-reader/blob/master/LICENSE)| +|[Fluent Reader lite](https://hyliu.me/fluent-reader-lite/) |Android, iOS |[BSD-3-Clause](https://github.com/yang991178/fluent-reader-lite)| |[Fiery Feeds](https://apps.apple.com/app/fiery-feeds-rss-reader/id1158763303) |iOS |Source fermée | |[Unread](https://apps.apple.com/app/unread-rss-reader/id1252376153) |iOS |Source fermée | |[Reeder](https://www.reederapp.com/) |iOS |Source fermée | diff --git a/docs/fr/users/06_Mobile_access.md b/docs/fr/users/06_Mobile_access.md index b239e9cc66b..d018c022e8c 100644 --- a/docs/fr/users/06_Mobile_access.md +++ b/docs/fr/users/06_Mobile_access.md @@ -57,13 +57,15 @@ possibilité. * [News+](https://github.com/noinnion/newsplus/blob/master/apk/NewsPlus_202.apk) avec [News+ Google Reader extension](https://github.com/noinnion/newsplus/blob/master/apk/GoogleReaderCloneExtension_101.apk) (Closed source) * [FeedMe 3.5.3+](https://play.google.com/store/apps/details?id=com.seazon.feedme) (Propriétaire) * [EasyRSS](https://github.com/Alkarex/EasyRSS) (Libre, [F-Droid](https://f-droid.org/packages/org.freshrss.easyrss/)) - * [Readrops](https://github.com/readrops/Readrops) (Open source) + * [Readrops](https://github.com/readrops/Readrops) (Libre) + * [Fluent Reader Lite](https://hyliu.me/fluent-reader-lite/) (Libre) * [FocusReader](https://play.google.com/store/apps/details?id=allen.town.focus.reader) (Commercial) * Linux * [FeedReader 2.0+](https://jangernert.github.io/FeedReader/) (Libre) * [Newsboat 2.24+](https://newsboat.org/) (Libre) * macOS, iOS * [Vienna RSS](http://www.vienna-rss.com/) (Libre) + * [Fluent Reader Lite](https://hyliu.me/fluent-reader-lite/) (Libre) * [Reeder](https://www.reederapp.com/) (Commercial) * [lire](https://lireapp.com/) (Commercial) * Firefox From 812e65447b93021bdb752b4e4f2fb057422daa57 Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Sat, 10 Sep 2022 16:55:41 +0200 Subject: [PATCH 0375/2479] Release FreshRSS 1.20.0 --- CHANGELOG.md | 7 +++++-- constants.php | 2 +- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 68c81098b7a..3f1ad30d827 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,6 @@ # FreshRSS changelog -## 2022-09-XX FreshRSS 1.20.0-dev +## 2022-09-10 FreshRSS 1.20.0 * Features * New Web scraping feature *HTML+XPath* for Web pages without any RSS/ATOM feed [#4220](https://github.com/FreshRSS/FreshRSS/pull/4220) @@ -18,6 +18,7 @@ * New option to exclude some DOM elements with a CSS Selector when retrieving an article full content [#4501](https://github.com/FreshRSS/FreshRSS/pull/4501) * New option to automatically mark as read gone articles [#4426](https://github.com/FreshRSS/FreshRSS/pull/4426) * New OPML export/import of some proprietary FreshRSS attributes [#4342](https://github.com/FreshRSS/FreshRSS/pull/4342) + * Tolerate the import of some invalid OPML files [#4591](https://github.com/FreshRSS/FreshRSS/pull/4591) * New feed settings to allow cookies and HTTP redirects [#4470](https://github.com/FreshRSS/FreshRSS/pull/4470) * Performance: Easier [text search indexes](https://freshrss.github.io/FreshRSS/en/admins/DatabaseConfig.html) for fast searches with PostgreSQL [#4505](https://github.com/FreshRSS/FreshRSS/pull/4505) * The indexes must be manually added for now. Using GIN `pg_trgm` @@ -80,7 +81,8 @@ * Themes * New theme *Dark pink* [#4311](https://github.com/FreshRSS/FreshRSS/pull/4311) * New theme *Nord* [#4400](https://github.com/FreshRSS/FreshRSS/pull/4400) - * Improve themes *Ansum* [#4538](https://github.com/FreshRSS/FreshRSS/pull/4538), [#4549](https://github.com/FreshRSS/FreshRSS/pull/4549); + * Improve themes *Alternative Dark* [#4587](https://github.com/FreshRSS/FreshRSS/pull/4587); + *Ansum* [#4538](https://github.com/FreshRSS/FreshRSS/pull/4538), [#4549](https://github.com/FreshRSS/FreshRSS/pull/4549); *Flat* [#4575](https://github.com/FreshRSS/FreshRSS/pull/4575); *Mapco* [#4491](https://github.com/FreshRSS/FreshRSS/pull/4491), [#4491](https://github.com/FreshRSS/FreshRSS/pull/4491); *Swage* [#4493](https://github.com/FreshRSS/FreshRSS/pull/4493), [#4512](https://github.com/FreshRSS/FreshRSS/pull/4512), [#4566](https://github.com/FreshRSS/FreshRSS/pull/4566) @@ -100,6 +102,7 @@ * Improve Slovak [#4524](https://github.com/FreshRSS/FreshRSS/pull/4524) * API * Restrict maximum length of item content length for clients compatibility [#4583](https://github.com/FreshRSS/FreshRSS/pull/4583) + * Supported by [Fluent Reader Lite](https://hyliu.me/fluent-reader-lite/) [#4595](https://github.com/FreshRSS/FreshRSS/pull/4595) * Deployment * Docker: Performance: entrypoint fix buffering, problematic when importing large OPMLs during install [#4417](https://github.com/FreshRSS/FreshRSS/pull/4417) * Docker default image (Debian 11 Bullseye) updated to PHP 7.4.30 and Apache 2.4.54 diff --git a/constants.php b/constants.php index 76593703e07..d80d1181a7a 100644 --- a/constants.php +++ b/constants.php @@ -3,7 +3,7 @@ // define('FRESHRSS_MIN_PHP_VERSION', '7.0.0'); -define('FRESHRSS_VERSION', '1.20.0-dev'); +define('FRESHRSS_VERSION', '1.20.0'); define('FRESHRSS_WEBSITE', 'https://freshrss.org'); define('FRESHRSS_WIKI', 'https://freshrss.github.io/FreshRSS/'); From 945fde6192c366dc57c80f1cf65cacedd62d5d6f Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Sat, 10 Sep 2022 17:19:32 +0200 Subject: [PATCH 0376/2479] Start 1.20.1-dev --- CHANGELOG.md | 5 ++++- constants.php | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3f1ad30d827..e33dd434e2a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,7 @@ -# FreshRSS changelog +# FreshRSS changelog + +## 202X-XX-XX FreshRSS 1.20.1-dev + ## 2022-09-10 FreshRSS 1.20.0 diff --git a/constants.php b/constants.php index d80d1181a7a..a440d18ec49 100644 --- a/constants.php +++ b/constants.php @@ -3,7 +3,7 @@ // define('FRESHRSS_MIN_PHP_VERSION', '7.0.0'); -define('FRESHRSS_VERSION', '1.20.0'); +define('FRESHRSS_VERSION', '1.20.1-dev'); define('FRESHRSS_WEBSITE', 'https://freshrss.org'); define('FRESHRSS_WIKI', 'https://freshrss.github.io/FreshRSS/'); From c1ecb7145c0e2c1a78cc1dec862996923d51fdf6 Mon Sep 17 00:00:00 2001 From: maTh Date: Mon, 12 Sep 2022 22:02:11 +0200 Subject: [PATCH 0377/2479] Improved: eslint + stylelint: Do not scan extension folder (#4606) * ignore in eslint * ignore in stylelint --- .eslintignore | 1 + .stylelintignore | 1 + 2 files changed, 2 insertions(+) diff --git a/.eslintignore b/.eslintignore index a3264ebd0e5..a7369cee493 100644 --- a/.eslintignore +++ b/.eslintignore @@ -1,4 +1,5 @@ *.min.js +extensions/ node_modules/ p/scripts/vendor/ vendor/ diff --git a/.stylelintignore b/.stylelintignore index 56613503b2a..451259453d5 100644 --- a/.stylelintignore +++ b/.stylelintignore @@ -1,3 +1,4 @@ +extensions/ node_modules/ p/scripts/vendor/ vendor/ From 27349070003f76493ce13bc4566fa9c018ae5d5c Mon Sep 17 00:00:00 2001 From: maTh Date: Sun, 18 Sep 2022 12:10:00 +0200 Subject: [PATCH 0378/2479] (S)CSS .disable removed (#4619) --- p/themes/Alternative-Dark/adark.css | 6 ------ p/themes/Alternative-Dark/adark.rtl.css | 6 ------ p/themes/Ansum/_sidebar.scss | 6 ------ p/themes/Ansum/ansum.css | 5 ----- p/themes/Ansum/ansum.rtl.css | 5 ----- p/themes/BlueLagoon/BlueLagoon.css | 6 ------ p/themes/BlueLagoon/BlueLagoon.rtl.css | 6 ------ p/themes/Dark/dark.css | 6 ------ p/themes/Dark/dark.rtl.css | 6 ------ p/themes/Flat/flat.css | 6 ------ p/themes/Flat/flat.rtl.css | 6 ------ p/themes/Mapco/_sidebar.scss | 6 ------ p/themes/Mapco/mapco.css | 5 ----- p/themes/Mapco/mapco.rtl.css | 5 ----- p/themes/Nord/nord.css | 4 ---- p/themes/Nord/nord.rtl.css | 4 ---- p/themes/Origine-compact/origine-compact.css | 6 ------ p/themes/Origine-compact/origine-compact.rtl.css | 6 ------ p/themes/Origine/origine.css | 6 ------ p/themes/Origine/origine.rtl.css | 6 ------ p/themes/Pafat/pafat.css | 6 ------ p/themes/Pafat/pafat.rtl.css | 6 ------ p/themes/Screwdriver/screwdriver.css | 6 ------ p/themes/Screwdriver/screwdriver.rtl.css | 6 ------ p/themes/Swage/swage.css | 5 ----- p/themes/Swage/swage.rtl.css | 5 ----- p/themes/Swage/swage.scss | 6 ------ p/themes/base-theme/base.css | 4 ---- p/themes/base-theme/base.rtl.css | 4 ---- 29 files changed, 160 deletions(-) diff --git a/p/themes/Alternative-Dark/adark.css b/p/themes/Alternative-Dark/adark.css index fa353758263..29098b9b9f0 100644 --- a/p/themes/Alternative-Dark/adark.css +++ b/p/themes/Alternative-Dark/adark.css @@ -239,12 +239,6 @@ a.btn { background-color: #1f1f1f; } -.nav-list .disable { - background: #fafafa; - color: #aaa; - text-align: center; -} - .nav-list .item > a { padding: 0 10px; } diff --git a/p/themes/Alternative-Dark/adark.rtl.css b/p/themes/Alternative-Dark/adark.rtl.css index d90736ce52f..e46a44129ac 100644 --- a/p/themes/Alternative-Dark/adark.rtl.css +++ b/p/themes/Alternative-Dark/adark.rtl.css @@ -239,12 +239,6 @@ a.btn { background-color: #1f1f1f; } -.nav-list .disable { - background: #fafafa; - color: #aaa; - text-align: center; -} - .nav-list .item > a { padding: 0 10px; } diff --git a/p/themes/Ansum/_sidebar.scss b/p/themes/Ansum/_sidebar.scss index 562718631a3..f5b6b23550b 100644 --- a/p/themes/Ansum/_sidebar.scss +++ b/p/themes/Ansum/_sidebar.scss @@ -214,12 +214,6 @@ } } - .disable { - text-align: center; - background: variables.$grey-lighter; - color: variables.$grey-medium-dark; - } - .nav-header { padding: 0 10px; font-weight: bold; diff --git a/p/themes/Ansum/ansum.css b/p/themes/Ansum/ansum.css index 3df770d8825..6e301313ed1 100644 --- a/p/themes/Ansum/ansum.css +++ b/p/themes/Ansum/ansum.css @@ -591,11 +591,6 @@ form th { .nav-list.empty a { color: #f4f762; } -.nav-list .disable { - text-align: center; - background: #fcfaf8; - color: #ba9; -} .nav-list .nav-header { padding: 0 10px; font-weight: bold; diff --git a/p/themes/Ansum/ansum.rtl.css b/p/themes/Ansum/ansum.rtl.css index e4c6e2294be..d2255289b48 100644 --- a/p/themes/Ansum/ansum.rtl.css +++ b/p/themes/Ansum/ansum.rtl.css @@ -591,11 +591,6 @@ form th { .nav-list.empty a { color: #f4f762; } -.nav-list .disable { - text-align: center; - background: #fcfaf8; - color: #ba9; -} .nav-list .nav-header { padding: 0 10px; font-weight: bold; diff --git a/p/themes/BlueLagoon/BlueLagoon.css b/p/themes/BlueLagoon/BlueLagoon.css index c60d2f1c3f0..4b22fc00dd0 100644 --- a/p/themes/BlueLagoon/BlueLagoon.css +++ b/p/themes/BlueLagoon/BlueLagoon.css @@ -291,12 +291,6 @@ a.btn { border-color: -moz-use-text-color -moz-use-text-color #171717; } -.nav-list .disable { - background: #fafafa; - color: #aaa; - text-align: center; -} - .nav-list .item > a { padding: 0 10px; color: #ccc; diff --git a/p/themes/BlueLagoon/BlueLagoon.rtl.css b/p/themes/BlueLagoon/BlueLagoon.rtl.css index 55a9cf41626..7c2a81e137b 100644 --- a/p/themes/BlueLagoon/BlueLagoon.rtl.css +++ b/p/themes/BlueLagoon/BlueLagoon.rtl.css @@ -291,12 +291,6 @@ a.btn { border-color: -moz-use-text-color -moz-use-text-color #171717; } -.nav-list .disable { - background: #fafafa; - color: #aaa; - text-align: center; -} - .nav-list .item > a { padding: 0 10px; color: #ccc; diff --git a/p/themes/Dark/dark.css b/p/themes/Dark/dark.css index 717c7c8f2a5..327a3ef1e84 100644 --- a/p/themes/Dark/dark.css +++ b/p/themes/Dark/dark.css @@ -288,12 +288,6 @@ a.btn { color: #888; } -.nav-list .disable { - background: #fafafa; - color: #aaa; - text-align: center; -} - .nav-list .item > a { padding: 0 10px; } diff --git a/p/themes/Dark/dark.rtl.css b/p/themes/Dark/dark.rtl.css index f9af44eb2ec..36405d35059 100644 --- a/p/themes/Dark/dark.rtl.css +++ b/p/themes/Dark/dark.rtl.css @@ -288,12 +288,6 @@ a.btn { color: #888; } -.nav-list .disable { - background: #fafafa; - color: #aaa; - text-align: center; -} - .nav-list .item > a { padding: 0 10px; } diff --git a/p/themes/Flat/flat.css b/p/themes/Flat/flat.css index a1efd126445..4a0dcc9dc71 100644 --- a/p/themes/Flat/flat.css +++ b/p/themes/Flat/flat.css @@ -274,12 +274,6 @@ a.btn { color: #fff; } -.nav-list .disable { - text-align: center; - background: #fafafa; - color: #aaa; -} - .nav-list .item > a { padding: 0 10px; } diff --git a/p/themes/Flat/flat.rtl.css b/p/themes/Flat/flat.rtl.css index fd9a2c0556c..99b6f4f32eb 100644 --- a/p/themes/Flat/flat.rtl.css +++ b/p/themes/Flat/flat.rtl.css @@ -274,12 +274,6 @@ a.btn { color: #fff; } -.nav-list .disable { - text-align: center; - background: #fafafa; - color: #aaa; -} - .nav-list .item > a { padding: 0 10px; } diff --git a/p/themes/Mapco/_sidebar.scss b/p/themes/Mapco/_sidebar.scss index 06ae07d9e55..3a679710909 100644 --- a/p/themes/Mapco/_sidebar.scss +++ b/p/themes/Mapco/_sidebar.scss @@ -213,12 +213,6 @@ } } - .disable { - text-align: center; - background: variables.$grey-lighter; - color: variables.$grey-medium-dark; - } - .nav-header { padding: 0 10px; font-weight: bold; diff --git a/p/themes/Mapco/mapco.css b/p/themes/Mapco/mapco.css index 92105c9c7e2..ea7ac5769b4 100644 --- a/p/themes/Mapco/mapco.css +++ b/p/themes/Mapco/mapco.css @@ -614,11 +614,6 @@ form th { .nav-list.empty a { color: #f4f762; } -.nav-list .disable { - text-align: center; - background: #f9fafb; - color: #a6a7ae; -} .nav-list .nav-header { padding: 0 10px; font-weight: bold; diff --git a/p/themes/Mapco/mapco.rtl.css b/p/themes/Mapco/mapco.rtl.css index a13040b0def..c7e8958050b 100644 --- a/p/themes/Mapco/mapco.rtl.css +++ b/p/themes/Mapco/mapco.rtl.css @@ -614,11 +614,6 @@ form th { .nav-list.empty a { color: #f4f762; } -.nav-list .disable { - text-align: center; - background: #f9fafb; - color: #a6a7ae; -} .nav-list .nav-header { padding: 0 10px; font-weight: bold; diff --git a/p/themes/Nord/nord.css b/p/themes/Nord/nord.css index 84b53c5d081..b5d03e0811f 100644 --- a/p/themes/Nord/nord.css +++ b/p/themes/Nord/nord.css @@ -996,10 +996,6 @@ input.extend { } /*=== Navigation */ -.nav-list .disable { - text-align: center; -} - .nav-list .item > a { padding: 0 10px; } diff --git a/p/themes/Nord/nord.rtl.css b/p/themes/Nord/nord.rtl.css index a420aa1800e..636874e05e5 100644 --- a/p/themes/Nord/nord.rtl.css +++ b/p/themes/Nord/nord.rtl.css @@ -996,10 +996,6 @@ input.extend { } /*=== Navigation */ -.nav-list .disable { - text-align: center; -} - .nav-list .item > a { padding: 0 10px; } diff --git a/p/themes/Origine-compact/origine-compact.css b/p/themes/Origine-compact/origine-compact.css index 40b1ea05188..8e11594a196 100644 --- a/p/themes/Origine-compact/origine-compact.css +++ b/p/themes/Origine-compact/origine-compact.css @@ -284,12 +284,6 @@ a.btn, color: #fff; } -.nav-list .disable { - background: #fafafa; - color: #aaa; - text-align: center; -} - .nav-list .item > a { padding: 0 10px; } diff --git a/p/themes/Origine-compact/origine-compact.rtl.css b/p/themes/Origine-compact/origine-compact.rtl.css index 2e4d1d5e84c..ac01ded81ad 100644 --- a/p/themes/Origine-compact/origine-compact.rtl.css +++ b/p/themes/Origine-compact/origine-compact.rtl.css @@ -284,12 +284,6 @@ a.btn, color: #fff; } -.nav-list .disable { - background: #fafafa; - color: #aaa; - text-align: center; -} - .nav-list .item > a { padding: 0 10px; } diff --git a/p/themes/Origine/origine.css b/p/themes/Origine/origine.css index 94039274420..7efa0185398 100644 --- a/p/themes/Origine/origine.css +++ b/p/themes/Origine/origine.css @@ -275,12 +275,6 @@ a.btn { color: #fff; } -.nav-list .disable { - background: #fafafa; - color: #aaa; - text-align: center; -} - .nav-list .item > a, .nav-list .item > span { padding: 0 10px; diff --git a/p/themes/Origine/origine.rtl.css b/p/themes/Origine/origine.rtl.css index 7f60394f1f0..d1d30556e40 100644 --- a/p/themes/Origine/origine.rtl.css +++ b/p/themes/Origine/origine.rtl.css @@ -275,12 +275,6 @@ a.btn { color: #fff; } -.nav-list .disable { - background: #fafafa; - color: #aaa; - text-align: center; -} - .nav-list .item > a, .nav-list .item > span { padding: 0 10px; diff --git a/p/themes/Pafat/pafat.css b/p/themes/Pafat/pafat.css index 389dabb6a8b..c1744d8ea9d 100644 --- a/p/themes/Pafat/pafat.css +++ b/p/themes/Pafat/pafat.css @@ -250,12 +250,6 @@ a.btn { color: #fff; } -.nav-list .disable { - background: #fafafa; - color: #aaa; - text-align: center; -} - .nav-list .item > a { padding: 0 10px; } diff --git a/p/themes/Pafat/pafat.rtl.css b/p/themes/Pafat/pafat.rtl.css index 178747ba5d4..cceec0894ca 100644 --- a/p/themes/Pafat/pafat.rtl.css +++ b/p/themes/Pafat/pafat.rtl.css @@ -250,12 +250,6 @@ a.btn { color: #fff; } -.nav-list .disable { - background: #fafafa; - color: #aaa; - text-align: center; -} - .nav-list .item > a { padding: 0 10px; } diff --git a/p/themes/Screwdriver/screwdriver.css b/p/themes/Screwdriver/screwdriver.css index 541e7f8acca..02526652730 100644 --- a/p/themes/Screwdriver/screwdriver.css +++ b/p/themes/Screwdriver/screwdriver.css @@ -295,12 +295,6 @@ a.btn { color: #d18114; } -.nav-list .disable { - background: #fafafa; - color: #aaa; - text-align: center; -} - .nav-list .item > a { padding: 0 10px; color: #ccc; diff --git a/p/themes/Screwdriver/screwdriver.rtl.css b/p/themes/Screwdriver/screwdriver.rtl.css index 0452ea9028c..af5b631e061 100644 --- a/p/themes/Screwdriver/screwdriver.rtl.css +++ b/p/themes/Screwdriver/screwdriver.rtl.css @@ -295,12 +295,6 @@ a.btn { color: #d18114; } -.nav-list .disable { - background: #fafafa; - color: #aaa; - text-align: center; -} - .nav-list .item > a { padding: 0 10px; color: #ccc; diff --git a/p/themes/Swage/swage.css b/p/themes/Swage/swage.css index 03a76654ef9..5c11de4c059 100644 --- a/p/themes/Swage/swage.css +++ b/p/themes/Swage/swage.css @@ -324,11 +324,6 @@ form th { .nav-list .item .icon { filter: brightness(3); } -.nav-list .disable { - text-align: center; - background: #fcfcfc; - color: #969696; -} .nav-list .nav-form { padding: 3px; text-align: center; diff --git a/p/themes/Swage/swage.rtl.css b/p/themes/Swage/swage.rtl.css index a7e9370745a..49ee37bc947 100644 --- a/p/themes/Swage/swage.rtl.css +++ b/p/themes/Swage/swage.rtl.css @@ -324,11 +324,6 @@ form th { .nav-list .item .icon { filter: brightness(3); } -.nav-list .disable { - text-align: center; - background: #fcfcfc; - color: #969696; -} .nav-list .nav-form { padding: 3px; text-align: center; diff --git a/p/themes/Swage/swage.scss b/p/themes/Swage/swage.scss index 1d520376419..55454ba3647 100644 --- a/p/themes/Swage/swage.scss +++ b/p/themes/Swage/swage.scss @@ -419,12 +419,6 @@ form { } } - .disable { - text-align: center; - background: $color_light; - color: color.adjust( $color_light, $lightness: -40% ); - } - .nav-form { padding: 3px; text-align: center; diff --git a/p/themes/base-theme/base.css b/p/themes/base-theme/base.css index d9eca3d3f3e..9393b2f27fc 100644 --- a/p/themes/base-theme/base.css +++ b/p/themes/base-theme/base.css @@ -198,10 +198,6 @@ a.btn { .nav-list .item.active a { } -.nav-list .disable { - text-align: center; -} - .nav-list .item > a { padding: 0 10px; } diff --git a/p/themes/base-theme/base.rtl.css b/p/themes/base-theme/base.rtl.css index e3f01c4eb30..05856051673 100644 --- a/p/themes/base-theme/base.rtl.css +++ b/p/themes/base-theme/base.rtl.css @@ -198,10 +198,6 @@ a.btn { .nav-list .item.active a { } -.nav-list .disable { - text-align: center; -} - .nav-list .item > a { padding: 0 10px; } From 3d5b9ac9020f4c14803d77ab76a225091628b79a Mon Sep 17 00:00:00 2001 From: maTh Date: Sun, 18 Sep 2022 13:02:07 +0200 Subject: [PATCH 0379/2479] clean .horizontal-list (#4596) --- p/themes/Alternative-Dark/adark.css | 24 ------------------- p/themes/Alternative-Dark/adark.rtl.css | 24 ------------------- p/themes/Ansum/_components.scss | 3 --- p/themes/Ansum/_configuration.scss | 5 ---- p/themes/Ansum/_stats.scss | 14 ----------- p/themes/Ansum/ansum.css | 21 ---------------- p/themes/Ansum/ansum.rtl.css | 21 ---------------- p/themes/BlueLagoon/BlueLagoon.css | 24 ------------------- p/themes/BlueLagoon/BlueLagoon.rtl.css | 24 ------------------- p/themes/Dark/dark.css | 24 ------------------- p/themes/Dark/dark.rtl.css | 24 ------------------- p/themes/Flat/flat.css | 24 ------------------- p/themes/Flat/flat.rtl.css | 24 ------------------- p/themes/Mapco/_components.scss | 3 --- p/themes/Mapco/_stats.scss | 14 ----------- p/themes/Mapco/mapco.css | 18 -------------- p/themes/Mapco/mapco.rtl.css | 18 -------------- p/themes/Nord/nord.css | 21 ---------------- p/themes/Nord/nord.rtl.css | 21 ---------------- p/themes/Origine-compact/origine-compact.css | 17 ------------- .../Origine-compact/origine-compact.rtl.css | 17 ------------- p/themes/Origine/origine.css | 24 ------------------- p/themes/Origine/origine.rtl.css | 24 ------------------- p/themes/Pafat/pafat.css | 24 ------------------- p/themes/Pafat/pafat.rtl.css | 24 ------------------- p/themes/Screwdriver/screwdriver.css | 24 ------------------- p/themes/Screwdriver/screwdriver.rtl.css | 24 ------------------- p/themes/Swage/swage.css | 19 --------------- p/themes/Swage/swage.rtl.css | 19 --------------- p/themes/Swage/swage.scss | 23 ------------------ p/themes/base-theme/base.css | 24 ------------------- p/themes/base-theme/base.rtl.css | 24 ------------------- p/themes/base-theme/template.css | 3 +++ p/themes/base-theme/template.rtl.css | 3 +++ 34 files changed, 6 insertions(+), 638 deletions(-) diff --git a/p/themes/Alternative-Dark/adark.css b/p/themes/Alternative-Dark/adark.css index 29098b9b9f0..58f7124032d 100644 --- a/p/themes/Alternative-Dark/adark.css +++ b/p/themes/Alternative-Dark/adark.css @@ -289,16 +289,6 @@ a.btn { line-height: 1.5rem; } -/*=== Horizontal-list */ -.horizontal-list { - margin: 0; - padding: 0; -} - -.horizontal-list .item { - vertical-align: middle; -} - /*=== Dropdown */ .dropdown-menu { margin: 5px 0 0; @@ -954,20 +944,6 @@ a.btn { border-bottom: 1px solid #ddd; } -.stat > .horizontal-list { - margin: 0 0 5px; -} - -.stat > .horizontal-list .item { - overflow: hidden; - white-space: nowrap; - text-overflow: ellipsis; -} - -.stat > .horizontal-list .item:first-child { - width: 270px; -} - /*=== LOGS */ /*=========*/ .loglist { diff --git a/p/themes/Alternative-Dark/adark.rtl.css b/p/themes/Alternative-Dark/adark.rtl.css index e46a44129ac..31dbebff916 100644 --- a/p/themes/Alternative-Dark/adark.rtl.css +++ b/p/themes/Alternative-Dark/adark.rtl.css @@ -289,16 +289,6 @@ a.btn { line-height: 1.5rem; } -/*=== Horizontal-list */ -.horizontal-list { - margin: 0; - padding: 0; -} - -.horizontal-list .item { - vertical-align: middle; -} - /*=== Dropdown */ .dropdown-menu { margin: 5px 0 0; @@ -954,20 +944,6 @@ a.btn { border-bottom: 1px solid #ddd; } -.stat > .horizontal-list { - margin: 0 0 5px; -} - -.stat > .horizontal-list .item { - overflow: hidden; - white-space: nowrap; - text-overflow: ellipsis; -} - -.stat > .horizontal-list .item:first-child { - width: 270px; -} - /*=== LOGS */ /*=========*/ .loglist { diff --git a/p/themes/Ansum/_components.scss b/p/themes/Ansum/_components.scss index 82fbaec5914..acb2430ff70 100644 --- a/p/themes/Ansum/_components.scss +++ b/p/themes/Ansum/_components.scss @@ -11,12 +11,9 @@ /*=== Horizontal-list */ .horizontal-list { - margin: 0; padding: 0.1rem 0; .item { - vertical-align: middle; - &:first-child { padding-left: 0.5rem; } diff --git a/p/themes/Ansum/_configuration.scss b/p/themes/Ansum/_configuration.scss index f33451c68dd..fa21ef44e9a 100644 --- a/p/themes/Ansum/_configuration.scss +++ b/p/themes/Ansum/_configuration.scss @@ -7,11 +7,6 @@ form { margin: 1rem 0; - - // Extension management - .horizontal-list { - margin-bottom: 0.5rem; - } } &.content { diff --git a/p/themes/Ansum/_stats.scss b/p/themes/Ansum/_stats.scss index f98f10234fc..26dc390d757 100644 --- a/p/themes/Ansum/_stats.scss +++ b/p/themes/Ansum/_stats.scss @@ -16,17 +16,3 @@ .stat > table th { border-bottom: 1px solid variables.$grey-medium-light; } - -.stat > .horizontal-list { - margin: 0 0 5px; -} - -.stat > .horizontal-list .item { - overflow: hidden; - white-space: nowrap; - text-overflow: ellipsis; -} - -.stat > .horizontal-list .item:first-child { - width: 270px; -} diff --git a/p/themes/Ansum/ansum.css b/p/themes/Ansum/ansum.css index 6e301313ed1..a2c13965618 100644 --- a/p/themes/Ansum/ansum.css +++ b/p/themes/Ansum/ansum.css @@ -221,12 +221,8 @@ form th { /*=== Forms */ /*=== Horizontal-list */ .horizontal-list { - margin: 0; padding: 0.1rem 0; } -.horizontal-list .item { - vertical-align: middle; -} .horizontal-list .item:first-child { padding-left: 0.5rem; } @@ -1132,9 +1128,6 @@ main.prompt { .post form { margin: 1rem 0; } -.post form .horizontal-list { - margin-bottom: 0.5rem; -} .post.content { max-width: 550px; } @@ -1243,20 +1236,6 @@ main.prompt { border-bottom: 1px solid #e4d8cc; } -.stat > .horizontal-list { - margin: 0 0 5px; -} - -.stat > .horizontal-list .item { - overflow: hidden; - white-space: nowrap; - text-overflow: ellipsis; -} - -.stat > .horizontal-list .item:first-child { - width: 270px; -} - /*=== MOBILE */ /*===========*/ @media (max-width: 840px) { diff --git a/p/themes/Ansum/ansum.rtl.css b/p/themes/Ansum/ansum.rtl.css index d2255289b48..2642a31e6dd 100644 --- a/p/themes/Ansum/ansum.rtl.css +++ b/p/themes/Ansum/ansum.rtl.css @@ -221,12 +221,8 @@ form th { /*=== Forms */ /*=== Horizontal-list */ .horizontal-list { - margin: 0; padding: 0.1rem 0; } -.horizontal-list .item { - vertical-align: middle; -} .horizontal-list .item:first-child { padding-right: 0.5rem; } @@ -1132,9 +1128,6 @@ main.prompt { .post form { margin: 1rem 0; } -.post form .horizontal-list { - margin-bottom: 0.5rem; -} .post.content { max-width: 550px; } @@ -1243,20 +1236,6 @@ main.prompt { border-bottom: 1px solid #e4d8cc; } -.stat > .horizontal-list { - margin: 0 0 5px; -} - -.stat > .horizontal-list .item { - overflow: hidden; - white-space: nowrap; - text-overflow: ellipsis; -} - -.stat > .horizontal-list .item:first-child { - width: 270px; -} - /*=== MOBILE */ /*===========*/ @media (max-width: 840px) { diff --git a/p/themes/BlueLagoon/BlueLagoon.css b/p/themes/BlueLagoon/BlueLagoon.css index 4b22fc00dd0..02ada470807 100644 --- a/p/themes/BlueLagoon/BlueLagoon.css +++ b/p/themes/BlueLagoon/BlueLagoon.css @@ -343,16 +343,6 @@ a.btn { line-height: 1.5rem; } -/*=== Horizontal-list */ -.horizontal-list { - margin: 0; - padding: 0; -} - -.horizontal-list .item { - vertical-align: middle; -} - /*=== Dropdown */ .dropdown-menu { margin: 5px 0 0; @@ -1134,20 +1124,6 @@ a.btn { box-shadow: 0 1px #fff; } -.stat > .horizontal-list { - margin: 0 0 5px; -} - -.stat > .horizontal-list .item { - overflow: hidden; - white-space: nowrap; - text-overflow: ellipsis; -} - -.stat > .horizontal-list .item:first-child { - width: 250px; -} - /*=== LOGS */ /*=========*/ .loglist { diff --git a/p/themes/BlueLagoon/BlueLagoon.rtl.css b/p/themes/BlueLagoon/BlueLagoon.rtl.css index 7c2a81e137b..e895681ce16 100644 --- a/p/themes/BlueLagoon/BlueLagoon.rtl.css +++ b/p/themes/BlueLagoon/BlueLagoon.rtl.css @@ -343,16 +343,6 @@ a.btn { line-height: 1.5rem; } -/*=== Horizontal-list */ -.horizontal-list { - margin: 0; - padding: 0; -} - -.horizontal-list .item { - vertical-align: middle; -} - /*=== Dropdown */ .dropdown-menu { margin: 5px 0 0; @@ -1134,20 +1124,6 @@ a.btn { box-shadow: 0 1px #fff; } -.stat > .horizontal-list { - margin: 0 0 5px; -} - -.stat > .horizontal-list .item { - overflow: hidden; - white-space: nowrap; - text-overflow: ellipsis; -} - -.stat > .horizontal-list .item:first-child { - width: 250px; -} - /*=== LOGS */ /*=========*/ .loglist { diff --git a/p/themes/Dark/dark.css b/p/themes/Dark/dark.css index 327a3ef1e84..685134604e8 100644 --- a/p/themes/Dark/dark.css +++ b/p/themes/Dark/dark.css @@ -341,16 +341,6 @@ a.btn { line-height: 1.5rem; } -/*=== Horizontal-list */ -.horizontal-list { - margin: 0; - padding: 0; -} - -.horizontal-list .item { - vertical-align: middle; -} - /*=== Dropdown */ .dropdown-menu { margin: 5px 0 0; @@ -1012,20 +1002,6 @@ a.btn { border-bottom: 1px solid #333; } -.stat > .horizontal-list { - margin: 0 0 5px; -} - -.stat > .horizontal-list .item { - overflow: hidden; - white-space: nowrap; - text-overflow: ellipsis; -} - -.stat > .horizontal-list .item:first-child { - width: 270px; -} - /*=== LOGS */ /*=========*/ .loglist { diff --git a/p/themes/Dark/dark.rtl.css b/p/themes/Dark/dark.rtl.css index 36405d35059..6616048f6e1 100644 --- a/p/themes/Dark/dark.rtl.css +++ b/p/themes/Dark/dark.rtl.css @@ -341,16 +341,6 @@ a.btn { line-height: 1.5rem; } -/*=== Horizontal-list */ -.horizontal-list { - margin: 0; - padding: 0; -} - -.horizontal-list .item { - vertical-align: middle; -} - /*=== Dropdown */ .dropdown-menu { margin: 5px 0 0; @@ -1012,20 +1002,6 @@ a.btn { border-bottom: 1px solid #333; } -.stat > .horizontal-list { - margin: 0 0 5px; -} - -.stat > .horizontal-list .item { - overflow: hidden; - white-space: nowrap; - text-overflow: ellipsis; -} - -.stat > .horizontal-list .item:first-child { - width: 270px; -} - /*=== LOGS */ /*=========*/ .loglist { diff --git a/p/themes/Flat/flat.css b/p/themes/Flat/flat.css index 4a0dcc9dc71..b359f09aba7 100644 --- a/p/themes/Flat/flat.css +++ b/p/themes/Flat/flat.css @@ -331,16 +331,6 @@ a.btn { line-height: 1.5rem; } -/*=== Horizontal-list */ -.horizontal-list { - margin: 0; - padding: 0; -} - -.horizontal-list .item { - vertical-align: middle; -} - /*=== Dropdown */ .dropdown-menu { margin: 0.5rem 0 0; @@ -1019,20 +1009,6 @@ a.btn { border-bottom: 1px solid #ddd; } -.stat > .horizontal-list { - margin: 0 0 5px; -} - -.stat > .horizontal-list .item { - overflow: hidden; - white-space: nowrap; - text-overflow: ellipsis; -} - -.stat > .horizontal-list .item:first-child { - width: 270px; -} - /*=== LOGS */ /*=========*/ .loglist { diff --git a/p/themes/Flat/flat.rtl.css b/p/themes/Flat/flat.rtl.css index 99b6f4f32eb..4b22fd3b3e9 100644 --- a/p/themes/Flat/flat.rtl.css +++ b/p/themes/Flat/flat.rtl.css @@ -331,16 +331,6 @@ a.btn { line-height: 1.5rem; } -/*=== Horizontal-list */ -.horizontal-list { - margin: 0; - padding: 0; -} - -.horizontal-list .item { - vertical-align: middle; -} - /*=== Dropdown */ .dropdown-menu { margin: 0.5rem 0 0; @@ -1019,20 +1009,6 @@ a.btn { border-bottom: 1px solid #ddd; } -.stat > .horizontal-list { - margin: 0 0 5px; -} - -.stat > .horizontal-list .item { - overflow: hidden; - white-space: nowrap; - text-overflow: ellipsis; -} - -.stat > .horizontal-list .item:first-child { - width: 270px; -} - /*=== LOGS */ /*=========*/ .loglist { diff --git a/p/themes/Mapco/_components.scss b/p/themes/Mapco/_components.scss index c3698659bff..594ef4371db 100644 --- a/p/themes/Mapco/_components.scss +++ b/p/themes/Mapco/_components.scss @@ -11,12 +11,9 @@ /*=== Horizontal-list */ .horizontal-list { - margin: 0; padding: 0.1rem 0; .item { - vertical-align: middle; - &:first-child { padding-left: 0.5rem; } diff --git a/p/themes/Mapco/_stats.scss b/p/themes/Mapco/_stats.scss index f98f10234fc..26dc390d757 100644 --- a/p/themes/Mapco/_stats.scss +++ b/p/themes/Mapco/_stats.scss @@ -16,17 +16,3 @@ .stat > table th { border-bottom: 1px solid variables.$grey-medium-light; } - -.stat > .horizontal-list { - margin: 0 0 5px; -} - -.stat > .horizontal-list .item { - overflow: hidden; - white-space: nowrap; - text-overflow: ellipsis; -} - -.stat > .horizontal-list .item:first-child { - width: 270px; -} diff --git a/p/themes/Mapco/mapco.css b/p/themes/Mapco/mapco.css index ea7ac5769b4..2289ec5a12b 100644 --- a/p/themes/Mapco/mapco.css +++ b/p/themes/Mapco/mapco.css @@ -220,12 +220,8 @@ form th { /*=== Forms */ /*=== Horizontal-list */ .horizontal-list { - margin: 0; padding: 0.1rem 0; } -.horizontal-list .item { - vertical-align: middle; -} .horizontal-list .item:first-child { padding-left: 0.5rem; } @@ -1269,20 +1265,6 @@ main.prompt { border-bottom: 1px solid #d5d8db; } -.stat > .horizontal-list { - margin: 0 0 5px; -} - -.stat > .horizontal-list .item { - overflow: hidden; - white-space: nowrap; - text-overflow: ellipsis; -} - -.stat > .horizontal-list .item:first-child { - width: 270px; -} - /*=== MOBILE */ /*===========*/ @media (max-width: 840px) { diff --git a/p/themes/Mapco/mapco.rtl.css b/p/themes/Mapco/mapco.rtl.css index c7e8958050b..d06f9fe929c 100644 --- a/p/themes/Mapco/mapco.rtl.css +++ b/p/themes/Mapco/mapco.rtl.css @@ -220,12 +220,8 @@ form th { /*=== Forms */ /*=== Horizontal-list */ .horizontal-list { - margin: 0; padding: 0.1rem 0; } -.horizontal-list .item { - vertical-align: middle; -} .horizontal-list .item:first-child { padding-right: 0.5rem; } @@ -1269,20 +1265,6 @@ main.prompt { border-bottom: 1px solid #d5d8db; } -.stat > .horizontal-list { - margin: 0 0 5px; -} - -.stat > .horizontal-list .item { - overflow: hidden; - white-space: nowrap; - text-overflow: ellipsis; -} - -.stat > .horizontal-list .item:first-child { - width: 270px; -} - /*=== MOBILE */ /*===========*/ @media (max-width: 840px) { diff --git a/p/themes/Nord/nord.css b/p/themes/Nord/nord.css index b5d03e0811f..9456da5f434 100644 --- a/p/themes/Nord/nord.css +++ b/p/themes/Nord/nord.css @@ -215,12 +215,6 @@ a.btn { line-height: 1.5rem; } -/*=== Horizontal-list */ -.horizontal-list { - margin: 0; - padding: 0; -} - .dropdown-menu { margin: 5px 0 0; padding: 5px 0; @@ -743,21 +737,6 @@ li.item.active { text-align: center; } -.stat > .horizontal-list { - margin: 0 0 5px; -} - -.stat > .horizontal-list .item { - overflow: hidden; - white-space: nowrap; - text-overflow: ellipsis; -} - -.stat > .horizontal-list .item:first-child { - width: 250px; -} - - .stat { margin: 10px 0 20px; } diff --git a/p/themes/Nord/nord.rtl.css b/p/themes/Nord/nord.rtl.css index 636874e05e5..502e11acc6b 100644 --- a/p/themes/Nord/nord.rtl.css +++ b/p/themes/Nord/nord.rtl.css @@ -215,12 +215,6 @@ a.btn { line-height: 1.5rem; } -/*=== Horizontal-list */ -.horizontal-list { - margin: 0; - padding: 0; -} - .dropdown-menu { margin: 5px 0 0; padding: 5px 0; @@ -743,21 +737,6 @@ li.item.active { text-align: center; } -.stat > .horizontal-list { - margin: 0 0 5px; -} - -.stat > .horizontal-list .item { - overflow: hidden; - white-space: nowrap; - text-overflow: ellipsis; -} - -.stat > .horizontal-list .item:first-child { - width: 250px; -} - - .stat { margin: 10px 0 20px; } diff --git a/p/themes/Origine-compact/origine-compact.css b/p/themes/Origine-compact/origine-compact.css index 8e11594a196..aa003c81f4f 100644 --- a/p/themes/Origine-compact/origine-compact.css +++ b/p/themes/Origine-compact/origine-compact.css @@ -344,13 +344,10 @@ a.btn, /*=== Horizontal-list */ .horizontal-list { - margin: 0; - padding: 0; font-size: 0.9rem; } .horizontal-list .item { - vertical-align: middle; line-height: 30px; } @@ -1075,20 +1072,6 @@ a.btn, border-bottom: 1px solid #ddd; } -.stat > .horizontal-list { - margin: 0 0 5px; -} - -.stat > .horizontal-list .item { - overflow: hidden; - white-space: nowrap; - text-overflow: ellipsis; -} - -.stat > .horizontal-list .item:first-child { - width: 270px; -} - /*=== LOGS */ /*=========*/ .loglist { diff --git a/p/themes/Origine-compact/origine-compact.rtl.css b/p/themes/Origine-compact/origine-compact.rtl.css index ac01ded81ad..d01ed80979c 100644 --- a/p/themes/Origine-compact/origine-compact.rtl.css +++ b/p/themes/Origine-compact/origine-compact.rtl.css @@ -344,13 +344,10 @@ a.btn, /*=== Horizontal-list */ .horizontal-list { - margin: 0; - padding: 0; font-size: 0.9rem; } .horizontal-list .item { - vertical-align: middle; line-height: 30px; } @@ -1075,20 +1072,6 @@ a.btn, border-bottom: 1px solid #ddd; } -.stat > .horizontal-list { - margin: 0 0 5px; -} - -.stat > .horizontal-list .item { - overflow: hidden; - white-space: nowrap; - text-overflow: ellipsis; -} - -.stat > .horizontal-list .item:first-child { - width: 270px; -} - /*=== LOGS */ /*=========*/ .loglist { diff --git a/p/themes/Origine/origine.css b/p/themes/Origine/origine.css index 7efa0185398..213b3c71653 100644 --- a/p/themes/Origine/origine.css +++ b/p/themes/Origine/origine.css @@ -335,16 +335,6 @@ a.btn { line-height: 1.5rem; } -/*=== Horizontal-list */ -.horizontal-list { - margin: 0; - padding: 0; -} - -.horizontal-list .item { - vertical-align: middle; -} - /*=== Dropdown */ .dropdown-menu { margin: 5px 0 0; @@ -997,20 +987,6 @@ a.btn { border-bottom: 1px solid #ddd; } -.stat > .horizontal-list { - margin: 0 0 5px; -} - -.stat > .horizontal-list .item { - overflow: hidden; - white-space: nowrap; - text-overflow: ellipsis; -} - -.stat > .horizontal-list .item:first-child { - width: 270px; -} - /*=== LOGS */ /*=========*/ .pagination .item.active { diff --git a/p/themes/Origine/origine.rtl.css b/p/themes/Origine/origine.rtl.css index d1d30556e40..8c5e11ebedc 100644 --- a/p/themes/Origine/origine.rtl.css +++ b/p/themes/Origine/origine.rtl.css @@ -335,16 +335,6 @@ a.btn { line-height: 1.5rem; } -/*=== Horizontal-list */ -.horizontal-list { - margin: 0; - padding: 0; -} - -.horizontal-list .item { - vertical-align: middle; -} - /*=== Dropdown */ .dropdown-menu { margin: 5px 0 0; @@ -997,20 +987,6 @@ a.btn { border-bottom: 1px solid #ddd; } -.stat > .horizontal-list { - margin: 0 0 5px; -} - -.stat > .horizontal-list .item { - overflow: hidden; - white-space: nowrap; - text-overflow: ellipsis; -} - -.stat > .horizontal-list .item:first-child { - width: 270px; -} - /*=== LOGS */ /*=========*/ .pagination .item.active { diff --git a/p/themes/Pafat/pafat.css b/p/themes/Pafat/pafat.css index c1744d8ea9d..28fa03c8689 100644 --- a/p/themes/Pafat/pafat.css +++ b/p/themes/Pafat/pafat.css @@ -302,16 +302,6 @@ a.btn { line-height: 1.5rem; } -/*=== Horizontal-list */ -.horizontal-list { - margin: 0; - padding: 0; -} - -.horizontal-list .item { - vertical-align: middle; -} - /*=== Dropdown */ .dropdown-menu { margin: 5px 0 0; @@ -996,20 +986,6 @@ a.signin { text-align: center; } -.stat > .horizontal-list { - margin: 0 0 5px; -} - -.stat > .horizontal-list .item { - overflow: hidden; - white-space: nowrap; - text-overflow: ellipsis; -} - -.stat > .horizontal-list .item:first-child { - width: 250px; -} - /*=== LOGS */ /*=========*/ .loglist { diff --git a/p/themes/Pafat/pafat.rtl.css b/p/themes/Pafat/pafat.rtl.css index cceec0894ca..4576763408c 100644 --- a/p/themes/Pafat/pafat.rtl.css +++ b/p/themes/Pafat/pafat.rtl.css @@ -302,16 +302,6 @@ a.btn { line-height: 1.5rem; } -/*=== Horizontal-list */ -.horizontal-list { - margin: 0; - padding: 0; -} - -.horizontal-list .item { - vertical-align: middle; -} - /*=== Dropdown */ .dropdown-menu { margin: 5px 0 0; @@ -996,20 +986,6 @@ a.signin { text-align: center; } -.stat > .horizontal-list { - margin: 0 0 5px; -} - -.stat > .horizontal-list .item { - overflow: hidden; - white-space: nowrap; - text-overflow: ellipsis; -} - -.stat > .horizontal-list .item:first-child { - width: 250px; -} - /*=== LOGS */ /*=========*/ .loglist { diff --git a/p/themes/Screwdriver/screwdriver.css b/p/themes/Screwdriver/screwdriver.css index 02526652730..fc451d2d48d 100644 --- a/p/themes/Screwdriver/screwdriver.css +++ b/p/themes/Screwdriver/screwdriver.css @@ -347,16 +347,6 @@ a.btn { line-height: 1.5rem; } -/*=== Horizontal-list */ -.horizontal-list { - margin: 0; - padding: 0; -} - -.horizontal-list .item { - vertical-align: middle; -} - /*=== Dropdown */ .dropdown-menu { margin: 5px 0 0; @@ -1111,20 +1101,6 @@ a.btn { box-shadow: 0 1px #fff; } -.stat > .horizontal-list { - margin: 0 0 5px; -} - -.stat > .horizontal-list .item { - overflow: hidden; - white-space: nowrap; - text-overflow: ellipsis; -} - -.stat > .horizontal-list .item:first-child { - width: 250px; -} - /*=== LOGS */ /*=========*/ .loglist { diff --git a/p/themes/Screwdriver/screwdriver.rtl.css b/p/themes/Screwdriver/screwdriver.rtl.css index af5b631e061..fdbc0729b1a 100644 --- a/p/themes/Screwdriver/screwdriver.rtl.css +++ b/p/themes/Screwdriver/screwdriver.rtl.css @@ -347,16 +347,6 @@ a.btn { line-height: 1.5rem; } -/*=== Horizontal-list */ -.horizontal-list { - margin: 0; - padding: 0; -} - -.horizontal-list .item { - vertical-align: middle; -} - /*=== Dropdown */ .dropdown-menu { margin: 5px 0 0; @@ -1111,20 +1101,6 @@ a.btn { box-shadow: 0 1px #fff; } -.stat > .horizontal-list { - margin: 0 0 5px; -} - -.stat > .horizontal-list .item { - overflow: hidden; - white-space: nowrap; - text-overflow: ellipsis; -} - -.stat > .horizontal-list .item:first-child { - width: 250px; -} - /*=== LOGS */ /*=========*/ .loglist { diff --git a/p/themes/Swage/swage.css b/p/themes/Swage/swage.css index 5c11de4c059..67a4d3f0d20 100644 --- a/p/themes/Swage/swage.css +++ b/p/themes/Swage/swage.css @@ -347,14 +347,6 @@ form th { line-height: 1.5rem; } -.horizontal-list { - margin: 0; - padding: 0; -} -.horizontal-list .item { - vertical-align: middle; -} - .dropdown-menu { padding: 0.5rem 0 1rem 0; font-size: 0.8rem; @@ -934,17 +926,6 @@ form th { .stat > table th { border-bottom: 1px solid #e3e3e3; } -.stat > .horizontal-list { - margin: 0 0 5px; -} -.stat > .horizontal-list .item { - overflow: hidden; - white-space: nowrap; - text-overflow: ellipsis; -} -.stat > .horizontal-list .item:first-child { - width: 270px; -} #overlay { z-index: 100; diff --git a/p/themes/Swage/swage.rtl.css b/p/themes/Swage/swage.rtl.css index 49ee37bc947..ed9d6ac072f 100644 --- a/p/themes/Swage/swage.rtl.css +++ b/p/themes/Swage/swage.rtl.css @@ -347,14 +347,6 @@ form th { line-height: 1.5rem; } -.horizontal-list { - margin: 0; - padding: 0; -} -.horizontal-list .item { - vertical-align: middle; -} - .dropdown-menu { padding: 0.5rem 0 1rem 0; font-size: 0.8rem; @@ -934,17 +926,6 @@ form th { .stat > table th { border-bottom: 1px solid #e3e3e3; } -.stat > .horizontal-list { - margin: 0 0 5px; -} -.stat > .horizontal-list .item { - overflow: hidden; - white-space: nowrap; - text-overflow: ellipsis; -} -.stat > .horizontal-list .item:first-child { - width: 270px; -} #overlay { z-index: 100; diff --git a/p/themes/Swage/swage.scss b/p/themes/Swage/swage.scss index 55454ba3647..81dedaafb4a 100644 --- a/p/themes/Swage/swage.scss +++ b/p/themes/Swage/swage.scss @@ -446,15 +446,6 @@ form { } } -.horizontal-list { - margin: 0; - padding: 0; - - .item { - vertical-align: middle; - } -} - .dropdown-menu { padding: 0.5rem 0 1rem 0; font-size: 0.8rem; @@ -1187,20 +1178,6 @@ form { border-bottom: 1px solid color.adjust( $color_light, $lightness: -10%); } } - - > .horizontal-list { - margin: 0 0 5px; - - .item { - overflow: hidden; - white-space: nowrap; - text-overflow: ellipsis; - - &:first-child { - width: 270px; - } - } - } } #overlay { diff --git a/p/themes/base-theme/base.css b/p/themes/base-theme/base.css index 9393b2f27fc..2c40e28d8eb 100644 --- a/p/themes/base-theme/base.css +++ b/p/themes/base-theme/base.css @@ -239,16 +239,6 @@ a.btn { line-height: 1.5rem; } -/*=== Horizontal-list */ -.horizontal-list { - margin: 0; - padding: 0; -} - -.horizontal-list .item { - vertical-align: middle; -} - /*=== Dropdown */ .dropdown-menu { margin: 5px 0 0; @@ -810,20 +800,6 @@ a.btn { text-align: center; } -.stat > .horizontal-list { - margin: 0 0 5px; -} - -.stat > .horizontal-list .item { - overflow: hidden; - white-space: nowrap; - text-overflow: ellipsis; -} - -.stat > .horizontal-list .item:first-child { - width: 250px; -} - /*=== LOGS */ /*=========*/ .loglist { diff --git a/p/themes/base-theme/base.rtl.css b/p/themes/base-theme/base.rtl.css index 05856051673..190fe0b8914 100644 --- a/p/themes/base-theme/base.rtl.css +++ b/p/themes/base-theme/base.rtl.css @@ -239,16 +239,6 @@ a.btn { line-height: 1.5rem; } -/*=== Horizontal-list */ -.horizontal-list { - margin: 0; - padding: 0; -} - -.horizontal-list .item { - vertical-align: middle; -} - /*=== Dropdown */ .dropdown-menu { margin: 5px 0 0; @@ -810,20 +800,6 @@ a.btn { text-align: center; } -.stat > .horizontal-list { - margin: 0 0 5px; -} - -.stat > .horizontal-list .item { - overflow: hidden; - white-space: nowrap; - text-overflow: ellipsis; -} - -.stat > .horizontal-list .item:first-child { - width: 250px; -} - /*=== LOGS */ /*=========*/ .loglist { diff --git a/p/themes/base-theme/template.css b/p/themes/base-theme/template.css index ea2816ebe3a..cab0719f03b 100644 --- a/p/themes/base-theme/template.css +++ b/p/themes/base-theme/template.css @@ -532,6 +532,8 @@ input[type="checkbox"]:focus-visible { /*=== Horizontal-list */ .horizontal-list { + margin: 0; + padding: 0; display: table; table-layout: fixed; width: 100%; @@ -539,6 +541,7 @@ input[type="checkbox"]:focus-visible { .horizontal-list .item { display: table-cell; + vertical-align: middle; } /*=== manage-list */ diff --git a/p/themes/base-theme/template.rtl.css b/p/themes/base-theme/template.rtl.css index 5057baf5630..2dfe58afed4 100644 --- a/p/themes/base-theme/template.rtl.css +++ b/p/themes/base-theme/template.rtl.css @@ -532,6 +532,8 @@ input[type="checkbox"]:focus-visible { /*=== Horizontal-list */ .horizontal-list { + margin: 0; + padding: 0; display: table; table-layout: fixed; width: 100%; @@ -539,6 +541,7 @@ input[type="checkbox"]:focus-visible { .horizontal-list .item { display: table-cell; + vertical-align: middle; } /*=== manage-list */ From 37cf23390719ee0c04ce2b1b33d2cc945de69c2f Mon Sep 17 00:00:00 2001 From: Alexis Degrugillier Date: Sun, 18 Sep 2022 07:47:51 -0400 Subject: [PATCH 0380/2479] Force default user before rendering login page (#4620) --- app/Controllers/authController.php | 29 +++++++++++++++-------------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/app/Controllers/authController.php b/app/Controllers/authController.php index 2bcf4eae7f6..0ad85ea38c2 100644 --- a/app/Controllers/authController.php +++ b/app/Controllers/authController.php @@ -72,21 +72,22 @@ public function loginAction() { } $auth_type = FreshRSS_Context::$system_conf->auth_type; + FreshRSS_Context::initUser('_'); switch ($auth_type) { - case 'form': - Minz_Request::forward(array('c' => 'auth', 'a' => 'formLogin')); - break; - case 'http_auth': - Minz_Error::error(403, array('error' => array(_t('feedback.access.denied'), - ' [HTTP Remote-User=' . htmlspecialchars(httpAuthUser(), ENT_NOQUOTES, 'UTF-8') . ']' - )), false); - break; - case 'none': - // It should not happen! - Minz_Error::error(404); - default: - // TODO load plugin instead - Minz_Error::error(404); + case 'form': + Minz_Request::forward(array('c' => 'auth', 'a' => 'formLogin')); + break; + case 'http_auth': + Minz_Error::error(403, array('error' => array(_t('feedback.access.denied'), + ' [HTTP Remote-User=' . htmlspecialchars(httpAuthUser(), ENT_NOQUOTES, 'UTF-8') . ']' + )), false); + break; + case 'none': + // It should not happen! + Minz_Error::error(404); + default: + // TODO load plugin instead + Minz_Error::error(404); } } From 7de5b93da49929072c2f984c2d78bb6865e1023d Mon Sep 17 00:00:00 2001 From: Alexis Degrugillier Date: Sun, 18 Sep 2022 12:26:18 -0400 Subject: [PATCH 0381/2479] Fix login page when user does not exist (#4621) --- app/Controllers/authController.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Controllers/authController.php b/app/Controllers/authController.php index 0ad85ea38c2..932a1ed6dbf 100644 --- a/app/Controllers/authController.php +++ b/app/Controllers/authController.php @@ -72,7 +72,7 @@ public function loginAction() { } $auth_type = FreshRSS_Context::$system_conf->auth_type; - FreshRSS_Context::initUser('_'); + FreshRSS_Context::initUser('_', false); switch ($auth_type) { case 'form': Minz_Request::forward(array('c' => 'auth', 'a' => 'formLogin')); From 67ea2d16b7723719f7dc5aeeecc45a00605df20f Mon Sep 17 00:00:00 2001 From: maTh Date: Sun, 18 Sep 2022 18:29:33 +0200 Subject: [PATCH 0382/2479] Improved: Cleanup CSS of ".log" (#4594) * themes css * Log Level CSS class improved * SCSS * RTL CSS --- app/views/index/logs.phtml | 4 +- p/themes/Alternative-Dark/adark.css | 44 ------------------- p/themes/Alternative-Dark/adark.rtl.css | 44 ------------------- p/themes/Ansum/_logs.scss | 38 +--------------- p/themes/Ansum/ansum.css | 38 +--------------- p/themes/Ansum/ansum.rtl.css | 38 +--------------- p/themes/BlueLagoon/BlueLagoon.css | 44 ------------------- p/themes/BlueLagoon/BlueLagoon.rtl.css | 44 ------------------- p/themes/Dark/dark.css | 43 ------------------ p/themes/Dark/dark.rtl.css | 43 ------------------ p/themes/Flat/flat.css | 40 ----------------- p/themes/Flat/flat.rtl.css | 40 ----------------- p/themes/Mapco/_logs.scss | 38 +--------------- p/themes/Mapco/mapco.css | 38 +--------------- p/themes/Mapco/mapco.rtl.css | 38 +--------------- p/themes/Nord/nord.css | 16 ------- p/themes/Nord/nord.rtl.css | 16 ------- p/themes/Origine-compact/origine-compact.css | 44 ------------------- .../Origine-compact/origine-compact.rtl.css | 44 ------------------- p/themes/Origine/origine.css | 43 ------------------ p/themes/Origine/origine.rtl.css | 43 ------------------ p/themes/Pafat/pafat.css | 44 ------------------- p/themes/Pafat/pafat.rtl.css | 44 ------------------- p/themes/Screwdriver/screwdriver.css | 44 ------------------- p/themes/Screwdriver/screwdriver.rtl.css | 44 ------------------- p/themes/Swage/swage.css | 26 ++--------- p/themes/Swage/swage.rtl.css | 26 ++--------- p/themes/Swage/swage.scss | 29 ++---------- p/themes/base-theme/base.css | 31 ------------- p/themes/base-theme/base.rtl.css | 31 ------------- p/themes/base-theme/template.css | 11 ++--- p/themes/base-theme/template.rtl.css | 11 ++--- 32 files changed, 36 insertions(+), 1085 deletions(-) diff --git a/app/views/index/logs.phtml b/app/views/index/logs.phtml index a96ff66b577..f6a76b9221a 100644 --- a/app/views/index/logs.phtml +++ b/app/views/index/logs.phtml @@ -24,8 +24,8 @@ - - + + level()) ?> diff --git a/p/themes/Alternative-Dark/adark.css b/p/themes/Alternative-Dark/adark.css index 58f7124032d..6ebfc02fe89 100644 --- a/p/themes/Alternative-Dark/adark.css +++ b/p/themes/Alternative-Dark/adark.css @@ -944,50 +944,6 @@ a.btn { border-bottom: 1px solid #ddd; } -/*=== LOGS */ -/*=========*/ -.loglist { - border: 1px solid #aaa; - border-radius: 5px; - overflow: hidden; -} - -.log { - padding: 5px 10px; - background: #fafafa; - color: #333; - font-size: 0.8rem; -} - -.log+.log { - border-top: 1px solid #aaa; -} - -.log .date { - display: block; - font-weight: bold; -} - -.log.error { - background: #fdd; - color: #844; -} - -.log.warning { - background: #ffe; - color: #c95; -} - -.log.notice { - background: #f4f4f4; - color: #aaa; -} - -.log.debug { - background: #333; - color: #eee; -} - /*=== MOBILE */ /*===========*/ diff --git a/p/themes/Alternative-Dark/adark.rtl.css b/p/themes/Alternative-Dark/adark.rtl.css index 31dbebff916..9bc3d0ebcdf 100644 --- a/p/themes/Alternative-Dark/adark.rtl.css +++ b/p/themes/Alternative-Dark/adark.rtl.css @@ -944,50 +944,6 @@ a.btn { border-bottom: 1px solid #ddd; } -/*=== LOGS */ -/*=========*/ -.loglist { - border: 1px solid #aaa; - border-radius: 5px; - overflow: hidden; -} - -.log { - padding: 5px 10px; - background: #fafafa; - color: #333; - font-size: 0.8rem; -} - -.log+.log { - border-top: 1px solid #aaa; -} - -.log .date { - display: block; - font-weight: bold; -} - -.log.error { - background: #fdd; - color: #844; -} - -.log.warning { - background: #ffe; - color: #c95; -} - -.log.notice { - background: #f4f4f4; - color: #aaa; -} - -.log.debug { - background: #333; - color: #eee; -} - /*=== MOBILE */ /*===========*/ diff --git a/p/themes/Ansum/_logs.scss b/p/themes/Ansum/_logs.scss index 2ea26e68ba7..69d0153d17e 100644 --- a/p/themes/Ansum/_logs.scss +++ b/p/themes/Ansum/_logs.scss @@ -2,40 +2,6 @@ /*=== LOGS */ /*=========*/ -.loglist { - overflow: hidden; - border: 1px solid variables.$grey-medium-dark; -} - -.log { - margin: 10px 0; - padding: 5px 2%; - background: variables.$grey-lighter; - color: variables.$grey-dark; - font-size: 0.8rem; - overflow: auto; -} - -.log > .date { - margin: 0 10px 0 0; - padding: 5px 10px; - border-radius: 20px; -} - -.log.error > .date { - background: variables.$alert-bg; - color: #fff; -} - -.log.warning > .date { - background: variables.$warning-bg; -} - -.log.notice > .date { - background: variables.$grey-light; -} - -.log.debug > .date { - background: variables.$main-first-darker; - color: variables.$white; +.log-item.log-error { + background-color: rgba(variables.$main-first, 0.2); } diff --git a/p/themes/Ansum/ansum.css b/p/themes/Ansum/ansum.css index a2c13965618..63a014db0f3 100644 --- a/p/themes/Ansum/ansum.css +++ b/p/themes/Ansum/ansum.css @@ -1181,42 +1181,8 @@ main.prompt { /*=== LOGS */ /*=========*/ -.loglist { - overflow: hidden; - border: 1px solid #ba9; -} - -.log { - margin: 10px 0; - padding: 5px 2%; - background: #fcfaf8; - color: #766556; - font-size: 0.8rem; - overflow: auto; -} - -.log > .date { - margin: 0 10px 0 0; - padding: 5px 10px; - border-radius: 20px; -} - -.log.error > .date { - background: #f5633e; - color: #fff; -} - -.log.warning > .date { - background: #f4f762; -} - -.log.notice > .date { - background: #f5f0ec; -} - -.log.debug > .date { - background: #221f1d; - color: #fff; +.log-item.log-error { + background-color: rgba(202, 114, 39, 0.2); } /*=== STATISTICS */ diff --git a/p/themes/Ansum/ansum.rtl.css b/p/themes/Ansum/ansum.rtl.css index 2642a31e6dd..d1dcd97d0c2 100644 --- a/p/themes/Ansum/ansum.rtl.css +++ b/p/themes/Ansum/ansum.rtl.css @@ -1181,42 +1181,8 @@ main.prompt { /*=== LOGS */ /*=========*/ -.loglist { - overflow: hidden; - border: 1px solid #ba9; -} - -.log { - margin: 10px 0; - padding: 5px 2%; - background: #fcfaf8; - color: #766556; - font-size: 0.8rem; - overflow: auto; -} - -.log > .date { - margin: 0 0 0 10px; - padding: 5px 10px; - border-radius: 20px; -} - -.log.error > .date { - background: #f5633e; - color: #fff; -} - -.log.warning > .date { - background: #f4f762; -} - -.log.notice > .date { - background: #f5f0ec; -} - -.log.debug > .date { - background: #221f1d; - color: #fff; +.log-item.log-error { + background-color: rgba(202, 114, 39, 0.2); } /*=== STATISTICS */ diff --git a/p/themes/BlueLagoon/BlueLagoon.css b/p/themes/BlueLagoon/BlueLagoon.css index 02ada470807..e12964a4f54 100644 --- a/p/themes/BlueLagoon/BlueLagoon.css +++ b/p/themes/BlueLagoon/BlueLagoon.css @@ -1124,50 +1124,6 @@ a.btn { box-shadow: 0 1px #fff; } -/*=== LOGS */ -/*=========*/ -.loglist { - border: 1px solid #aaa; - border-radius: 5px; - overflow: hidden; -} - -.log { - padding: 5px 10px; - background: #fafafa; - color: #333; - font-size: 0.8rem; -} - -.log+.log { - border-top: 1px solid #aaa; -} - -.log .date { - display: block; - font-weight: bold; -} - -.log.error { - background: #fdd; - color: #844; -} - -.log.warning { - background: #ffe; - color: #c95; -} - -.log.notice { - background: #f4f4f4; - color: #aaa; -} - -.log.debug { - background: #333; - color: #eee; -} - #slider.active { background: #f8f8f8; box-shadow: -4px 0 4px rgba(15, 15, 15, 0.55); diff --git a/p/themes/BlueLagoon/BlueLagoon.rtl.css b/p/themes/BlueLagoon/BlueLagoon.rtl.css index e895681ce16..370fc4c240f 100644 --- a/p/themes/BlueLagoon/BlueLagoon.rtl.css +++ b/p/themes/BlueLagoon/BlueLagoon.rtl.css @@ -1124,50 +1124,6 @@ a.btn { box-shadow: 0 1px #fff; } -/*=== LOGS */ -/*=========*/ -.loglist { - border: 1px solid #aaa; - border-radius: 5px; - overflow: hidden; -} - -.log { - padding: 5px 10px; - background: #fafafa; - color: #333; - font-size: 0.8rem; -} - -.log+.log { - border-top: 1px solid #aaa; -} - -.log .date { - display: block; - font-weight: bold; -} - -.log.error { - background: #fdd; - color: #844; -} - -.log.warning { - background: #ffe; - color: #c95; -} - -.log.notice { - background: #f4f4f4; - color: #aaa; -} - -.log.debug { - background: #333; - color: #eee; -} - #slider.active { background: #f8f8f8; box-shadow: 4px 0 4px rgba(15, 15, 15, 0.55); diff --git a/p/themes/Dark/dark.css b/p/themes/Dark/dark.css index 685134604e8..38fc0bce42b 100644 --- a/p/themes/Dark/dark.css +++ b/p/themes/Dark/dark.css @@ -1002,49 +1002,6 @@ a.btn { border-bottom: 1px solid #333; } -/*=== LOGS */ -/*=========*/ -.loglist { - overflow: hidden; - border: 1px solid #333; -} - -.log { - padding: 5px 10px; - background: #111; - color: #888; - font-size: 0.8rem; -} - -.log+.log { - border-top: 1px solid #333; -} - -.log .date { - display: block; - font-weight: bold; -} - -.log.error { - background: #a44; - color: #fff; -} - -.log.warning { - background: #c95; - color: #fff; -} - -.log.notice { - background: #ec9; - color: #000; -} - -.log.debug { - background: #111; - color: #eee; -} - /*=== MOBILE */ /*===========*/ diff --git a/p/themes/Dark/dark.rtl.css b/p/themes/Dark/dark.rtl.css index 6616048f6e1..8c5b30fed07 100644 --- a/p/themes/Dark/dark.rtl.css +++ b/p/themes/Dark/dark.rtl.css @@ -1002,49 +1002,6 @@ a.btn { border-bottom: 1px solid #333; } -/*=== LOGS */ -/*=========*/ -.loglist { - overflow: hidden; - border: 1px solid #333; -} - -.log { - padding: 5px 10px; - background: #111; - color: #888; - font-size: 0.8rem; -} - -.log+.log { - border-top: 1px solid #333; -} - -.log .date { - display: block; - font-weight: bold; -} - -.log.error { - background: #a44; - color: #fff; -} - -.log.warning { - background: #c95; - color: #fff; -} - -.log.notice { - background: #ec9; - color: #000; -} - -.log.debug { - background: #111; - color: #eee; -} - /*=== MOBILE */ /*===========*/ diff --git a/p/themes/Flat/flat.css b/p/themes/Flat/flat.css index b359f09aba7..66b489c3179 100644 --- a/p/themes/Flat/flat.css +++ b/p/themes/Flat/flat.css @@ -1009,46 +1009,6 @@ a.btn { border-bottom: 1px solid #ddd; } -/*=== LOGS */ -/*=========*/ -.loglist { - overflow: hidden; - border: 1px solid #aaa; -} - -.log { - margin: 10px 0; - padding: 5px 2%; - background: #fafafa; - color: #666; - font-size: 0.8rem; - overflow: auto; -} - -.log > .date { - margin: 0 10px 0 0; - padding: 5px 10px; - border-radius: 20px; -} - -.log.error > .date { - background: #e74c3c; - color: #fff; -} - -.log.warning > .date { - background: #f39c12; -} - -.log.notice > .date { - background: #ecf0f1; -} - -.log.debug > .date { - background: #111; - color: #eee; -} - /*=== MOBILE */ /*===========*/ diff --git a/p/themes/Flat/flat.rtl.css b/p/themes/Flat/flat.rtl.css index 4b22fd3b3e9..c98abd49667 100644 --- a/p/themes/Flat/flat.rtl.css +++ b/p/themes/Flat/flat.rtl.css @@ -1009,46 +1009,6 @@ a.btn { border-bottom: 1px solid #ddd; } -/*=== LOGS */ -/*=========*/ -.loglist { - overflow: hidden; - border: 1px solid #aaa; -} - -.log { - margin: 10px 0; - padding: 5px 2%; - background: #fafafa; - color: #666; - font-size: 0.8rem; - overflow: auto; -} - -.log > .date { - margin: 0 0 0 10px; - padding: 5px 10px; - border-radius: 20px; -} - -.log.error > .date { - background: #e74c3c; - color: #fff; -} - -.log.warning > .date { - background: #f39c12; -} - -.log.notice > .date { - background: #ecf0f1; -} - -.log.debug > .date { - background: #111; - color: #eee; -} - /*=== MOBILE */ /*===========*/ diff --git a/p/themes/Mapco/_logs.scss b/p/themes/Mapco/_logs.scss index 2ea26e68ba7..69d0153d17e 100644 --- a/p/themes/Mapco/_logs.scss +++ b/p/themes/Mapco/_logs.scss @@ -2,40 +2,6 @@ /*=== LOGS */ /*=========*/ -.loglist { - overflow: hidden; - border: 1px solid variables.$grey-medium-dark; -} - -.log { - margin: 10px 0; - padding: 5px 2%; - background: variables.$grey-lighter; - color: variables.$grey-dark; - font-size: 0.8rem; - overflow: auto; -} - -.log > .date { - margin: 0 10px 0 0; - padding: 5px 10px; - border-radius: 20px; -} - -.log.error > .date { - background: variables.$alert-bg; - color: #fff; -} - -.log.warning > .date { - background: variables.$warning-bg; -} - -.log.notice > .date { - background: variables.$grey-light; -} - -.log.debug > .date { - background: variables.$main-first-darker; - color: variables.$white; +.log-item.log-error { + background-color: rgba(variables.$main-first, 0.2); } diff --git a/p/themes/Mapco/mapco.css b/p/themes/Mapco/mapco.css index 2289ec5a12b..d4dd32e1759 100644 --- a/p/themes/Mapco/mapco.css +++ b/p/themes/Mapco/mapco.css @@ -1210,42 +1210,8 @@ main.prompt { /*=== LOGS */ /*=========*/ -.loglist { - overflow: hidden; - border: 1px solid #a6a7ae; -} - -.log { - margin: 10px 0; - padding: 5px 2%; - background: #f9fafb; - color: #5b6871; - font-size: 0.8rem; - overflow: auto; -} - -.log > .date { - margin: 0 10px 0 0; - padding: 5px 10px; - border-radius: 20px; -} - -.log.error > .date { - background: #f5633e; - color: #fff; -} - -.log.warning > .date { - background: #f4f762; -} - -.log.notice > .date { - background: #eff0f2; -} - -.log.debug > .date { - background: #1d1e22; - color: #fff; +.log-item.log-error { + background-color: rgba(51, 102, 204, 0.2); } /*=== STATISTICS */ diff --git a/p/themes/Mapco/mapco.rtl.css b/p/themes/Mapco/mapco.rtl.css index d06f9fe929c..a53dd3c0d34 100644 --- a/p/themes/Mapco/mapco.rtl.css +++ b/p/themes/Mapco/mapco.rtl.css @@ -1210,42 +1210,8 @@ main.prompt { /*=== LOGS */ /*=========*/ -.loglist { - overflow: hidden; - border: 1px solid #a6a7ae; -} - -.log { - margin: 10px 0; - padding: 5px 2%; - background: #f9fafb; - color: #5b6871; - font-size: 0.8rem; - overflow: auto; -} - -.log > .date { - margin: 0 0 0 10px; - padding: 5px 10px; - border-radius: 20px; -} - -.log.error > .date { - background: #f5633e; - color: #fff; -} - -.log.warning > .date { - background: #f4f762; -} - -.log.notice > .date { - background: #eff0f2; -} - -.log.debug > .date { - background: #1d1e22; - color: #fff; +.log-item.log-error { + background-color: rgba(51, 102, 204, 0.2); } /*=== STATISTICS */ diff --git a/p/themes/Nord/nord.css b/p/themes/Nord/nord.css index 9456da5f434..ac4c4104a52 100644 --- a/p/themes/Nord/nord.css +++ b/p/themes/Nord/nord.css @@ -1100,22 +1100,6 @@ input.extend { background-color: var(--bg); } -/*=== LOGS */ -/*=========*/ -.loglist { - overflow: hidden; -} - -.log { - padding: 5px 10px; - font-size: 0.8rem; -} - -.log .date { - display: block; - font-weight: bold; -} - /*=== MOBILE */ /*===========*/ diff --git a/p/themes/Nord/nord.rtl.css b/p/themes/Nord/nord.rtl.css index 502e11acc6b..18a0ef7a0c4 100644 --- a/p/themes/Nord/nord.rtl.css +++ b/p/themes/Nord/nord.rtl.css @@ -1100,22 +1100,6 @@ input.extend { background-color: var(--bg); } -/*=== LOGS */ -/*=========*/ -.loglist { - overflow: hidden; -} - -.log { - padding: 5px 10px; - font-size: 0.8rem; -} - -.log .date { - display: block; - font-weight: bold; -} - /*=== MOBILE */ /*===========*/ diff --git a/p/themes/Origine-compact/origine-compact.css b/p/themes/Origine-compact/origine-compact.css index aa003c81f4f..17959e910d2 100644 --- a/p/themes/Origine-compact/origine-compact.css +++ b/p/themes/Origine-compact/origine-compact.css @@ -1072,50 +1072,6 @@ a.btn, border-bottom: 1px solid #ddd; } -/*=== LOGS */ -/*=========*/ -.loglist { - border: 1px solid #aaa; - border-radius: 5px; - overflow: hidden; -} - -.log { - padding: 5px 10px; - background: #fafafa; - color: #333; - font-size: 0.8rem; -} - -.log+.log { - border-top: 1px solid #aaa; -} - -.log .date { - display: block; - font-weight: bold; -} - -.log.error { - background: #fdd; - color: #844; -} - -.log.warning { - background: #ffe; - color: #c95; -} - -.log.notice { - background: #f4f4f4; - color: #aaa; -} - -.log.debug { - background: #333; - color: #eee; -} - /*=== MOBILE */ /*===========*/ diff --git a/p/themes/Origine-compact/origine-compact.rtl.css b/p/themes/Origine-compact/origine-compact.rtl.css index d01ed80979c..62c82bc6f3e 100644 --- a/p/themes/Origine-compact/origine-compact.rtl.css +++ b/p/themes/Origine-compact/origine-compact.rtl.css @@ -1072,50 +1072,6 @@ a.btn, border-bottom: 1px solid #ddd; } -/*=== LOGS */ -/*=========*/ -.loglist { - border: 1px solid #aaa; - border-radius: 5px; - overflow: hidden; -} - -.log { - padding: 5px 10px; - background: #fafafa; - color: #333; - font-size: 0.8rem; -} - -.log+.log { - border-top: 1px solid #aaa; -} - -.log .date { - display: block; - font-weight: bold; -} - -.log.error { - background: #fdd; - color: #844; -} - -.log.warning { - background: #ffe; - color: #c95; -} - -.log.notice { - background: #f4f4f4; - color: #aaa; -} - -.log.debug { - background: #333; - color: #eee; -} - /*=== MOBILE */ /*===========*/ diff --git a/p/themes/Origine/origine.css b/p/themes/Origine/origine.css index 213b3c71653..4fd62134ad1 100644 --- a/p/themes/Origine/origine.css +++ b/p/themes/Origine/origine.css @@ -998,49 +998,6 @@ a.btn { font-family: monospace; } -/****old******/ -.loglist { - border: 1px solid #aaa; - border-radius: 5px; - overflow: hidden; -} - -.log { - padding: 5px 10px; - background: #fafafa; - color: #333; - font-size: 0.8rem; -} - -.log+.log { - border-top: 1px solid #aaa; -} - -.log .date { - display: block; - font-weight: bold; -} - -.log.error { - background: #fdd; - color: #844; -} - -.log.warning { - background: #ffe; - color: #c95; -} - -.log.notice { - background: #f4f4f4; - color: #aaa; -} - -.log.debug { - background: #333; - color: #eee; -} - /*=== MOBILE */ /*===========*/ diff --git a/p/themes/Origine/origine.rtl.css b/p/themes/Origine/origine.rtl.css index 8c5e11ebedc..a284e5464a2 100644 --- a/p/themes/Origine/origine.rtl.css +++ b/p/themes/Origine/origine.rtl.css @@ -998,49 +998,6 @@ a.btn { font-family: monospace; } -/****old******/ -.loglist { - border: 1px solid #aaa; - border-radius: 5px; - overflow: hidden; -} - -.log { - padding: 5px 10px; - background: #fafafa; - color: #333; - font-size: 0.8rem; -} - -.log+.log { - border-top: 1px solid #aaa; -} - -.log .date { - display: block; - font-weight: bold; -} - -.log.error { - background: #fdd; - color: #844; -} - -.log.warning { - background: #ffe; - color: #c95; -} - -.log.notice { - background: #f4f4f4; - color: #aaa; -} - -.log.debug { - background: #333; - color: #eee; -} - /*=== MOBILE */ /*===========*/ diff --git a/p/themes/Pafat/pafat.css b/p/themes/Pafat/pafat.css index 28fa03c8689..6dc1c8990f9 100644 --- a/p/themes/Pafat/pafat.css +++ b/p/themes/Pafat/pafat.css @@ -986,50 +986,6 @@ a.signin { text-align: center; } -/*=== LOGS */ -/*=========*/ -.loglist { - border: 1px solid #aaa; - border-radius: 5px; - overflow: hidden; -} - -.log { - padding: 5px 10px; - background: #fafafa; - color: #41444f; - font-size: 0.8rem; -} - -.log+.log { - border-top: 1px solid #aaa; -} - -.log .date { - display: block; - font-weight: bold; -} - -.log.error { - background: #fdd; - color: #844; -} - -.log.warning { - background: #ffe; - color: #c95; -} - -.log.notice { - background: #f4f4f4; - color: #aaa; -} - -.log.debug { - background: #41444f; - color: #eee; -} - /*=== MOBILE */ /*===========*/ diff --git a/p/themes/Pafat/pafat.rtl.css b/p/themes/Pafat/pafat.rtl.css index 4576763408c..8f5ecb5c392 100644 --- a/p/themes/Pafat/pafat.rtl.css +++ b/p/themes/Pafat/pafat.rtl.css @@ -986,50 +986,6 @@ a.signin { text-align: center; } -/*=== LOGS */ -/*=========*/ -.loglist { - border: 1px solid #aaa; - border-radius: 5px; - overflow: hidden; -} - -.log { - padding: 5px 10px; - background: #fafafa; - color: #41444f; - font-size: 0.8rem; -} - -.log+.log { - border-top: 1px solid #aaa; -} - -.log .date { - display: block; - font-weight: bold; -} - -.log.error { - background: #fdd; - color: #844; -} - -.log.warning { - background: #ffe; - color: #c95; -} - -.log.notice { - background: #f4f4f4; - color: #aaa; -} - -.log.debug { - background: #41444f; - color: #eee; -} - /*=== MOBILE */ /*===========*/ diff --git a/p/themes/Screwdriver/screwdriver.css b/p/themes/Screwdriver/screwdriver.css index fc451d2d48d..3da84823232 100644 --- a/p/themes/Screwdriver/screwdriver.css +++ b/p/themes/Screwdriver/screwdriver.css @@ -1101,50 +1101,6 @@ a.btn { box-shadow: 0 1px #fff; } -/*=== LOGS */ -/*=========*/ -.loglist { - border: 1px solid #aaa; - border-radius: 5px; - overflow: hidden; -} - -.log { - padding: 5px 10px; - background: #fafafa; - color: #333; - font-size: 0.8rem; -} - -.log+.log { - border-top: 1px solid #aaa; -} - -.log .date { - display: block; - font-weight: bold; -} - -.log.error { - background: #fdd; - color: #844; -} - -.log.warning { - background: #ffe; - color: #c95; -} - -.log.notice { - background: #f4f4f4; - color: #aaa; -} - -.log.debug { - background: #333; - color: #eee; -} - #slider.active { background: #f8f8f8; box-shadow: -4px 0 4px rgba(15, 15, 15, 0.55); diff --git a/p/themes/Screwdriver/screwdriver.rtl.css b/p/themes/Screwdriver/screwdriver.rtl.css index fdbc0729b1a..dcc54d9a3c5 100644 --- a/p/themes/Screwdriver/screwdriver.rtl.css +++ b/p/themes/Screwdriver/screwdriver.rtl.css @@ -1101,50 +1101,6 @@ a.btn { box-shadow: 0 1px #fff; } -/*=== LOGS */ -/*=========*/ -.loglist { - border: 1px solid #aaa; - border-radius: 5px; - overflow: hidden; -} - -.log { - padding: 5px 10px; - background: #fafafa; - color: #333; - font-size: 0.8rem; -} - -.log+.log { - border-top: 1px solid #aaa; -} - -.log .date { - display: block; - font-weight: bold; -} - -.log.error { - background: #fdd; - color: #844; -} - -.log.warning { - background: #ffe; - color: #c95; -} - -.log.notice { - background: #f4f4f4; - color: #aaa; -} - -.log.debug { - background: #333; - color: #eee; -} - #slider.active { background: #f8f8f8; box-shadow: 4px 0 4px rgba(15, 15, 15, 0.55); diff --git a/p/themes/Swage/swage.css b/p/themes/Swage/swage.css index 67a4d3f0d20..a39922a6c86 100644 --- a/p/themes/Swage/swage.css +++ b/p/themes/Swage/swage.css @@ -967,36 +967,16 @@ a.signin { font-size: 70%; } -.loglist { - overflow: hidden; - border: 1px solid #969696; -} - -.log { - padding: 5px 2%; - background: #fcfcfc; - font-size: 0.8rem; - overflow: auto; -} -.log > .date { - margin: 0 10px 0 0; - padding: 5px 10px; -} -.log.error > .date { +.log-item.log-error { background: #c46178; color: #fcfcfc; } -.log.warning > .date { +.log-item.log-warning { background: #fa8052; color: #fcfcfc; } -.log.notice > .date { - background: #e3e3e3; - color: #fcfcfc; -} -.log.debug > .date { +.log-item.log-debug { background: #181621; - color: #fcfcfc; } @media (max-width: 840px) { diff --git a/p/themes/Swage/swage.rtl.css b/p/themes/Swage/swage.rtl.css index ed9d6ac072f..535f47fdb84 100644 --- a/p/themes/Swage/swage.rtl.css +++ b/p/themes/Swage/swage.rtl.css @@ -967,36 +967,16 @@ a.signin { font-size: 70%; } -.loglist { - overflow: hidden; - border: 1px solid #969696; -} - -.log { - padding: 5px 2%; - background: #fcfcfc; - font-size: 0.8rem; - overflow: auto; -} -.log > .date { - margin: 0 0 0 10px; - padding: 5px 10px; -} -.log.error > .date { +.log-item.log-error { background: #c46178; color: #fcfcfc; } -.log.warning > .date { +.log-item.log-warning { background: #fa8052; color: #fcfcfc; } -.log.notice > .date { - background: #e3e3e3; - color: #fcfcfc; -} -.log.debug > .date { +.log-item.log-debug { background: #181621; - color: #fcfcfc; } @media (max-width: 840px) { diff --git a/p/themes/Swage/swage.scss b/p/themes/Swage/swage.scss index 81dedaafb4a..ce59f47eaac 100644 --- a/p/themes/Swage/swage.scss +++ b/p/themes/Swage/swage.scss @@ -1225,40 +1225,19 @@ a.signin { font-size: 70%; } -.loglist { - overflow: hidden; - border: 1px solid color.adjust( $color_light, $lightness: -40% ); -} - -.log { - padding: 5px 2%; - background: $color_light; - font-size: 0.8rem; - overflow: auto; - - > .date { - margin: 0 10px 0 0; - padding: 5px 10px; - } - - &.error > .date { +.log-item { + &.log-error { background: color.adjust( $color_bad, $lightness: 10%); color: $color_light; } - &.warning > .date { + &.log-warning { background: $color_alert; color: $color_light; } - &.notice > .date { - background: color.adjust( $color_light, $lightness: -10%); - color: $color_light; - } - - &.debug > .date { + &.log-debug { background: $color_text; - color: $color_light; } } diff --git a/p/themes/base-theme/base.css b/p/themes/base-theme/base.css index 2c40e28d8eb..8fa2a33b6da 100644 --- a/p/themes/base-theme/base.css +++ b/p/themes/base-theme/base.css @@ -800,37 +800,6 @@ a.btn { text-align: center; } -/*=== LOGS */ -/*=========*/ -.loglist { - overflow: hidden; -} - -.log { - padding: 5px 10px; - font-size: 0.8rem; -} - -.log+.log { -} - -.log .date { - display: block; - font-weight: bold; -} - -.log.error { -} - -.log.warning { -} - -.log.notice { -} - -.log.debug { -} - /*=== MOBILE */ /*===========*/ diff --git a/p/themes/base-theme/base.rtl.css b/p/themes/base-theme/base.rtl.css index 190fe0b8914..dc10f3c5388 100644 --- a/p/themes/base-theme/base.rtl.css +++ b/p/themes/base-theme/base.rtl.css @@ -800,37 +800,6 @@ a.btn { text-align: center; } -/*=== LOGS */ -/*=========*/ -.loglist { - overflow: hidden; -} - -.log { - padding: 5px 10px; - font-size: 0.8rem; -} - -.log+.log { -} - -.log .date { - display: block; - font-weight: bold; -} - -.log.error { -} - -.log.warning { -} - -.log.notice { -} - -.log.debug { -} - /*=== MOBILE */ /*===========*/ diff --git a/p/themes/base-theme/template.css b/p/themes/base-theme/template.css index cab0719f03b..b2ed624454c 100644 --- a/p/themes/base-theme/template.css +++ b/p/themes/base-theme/template.css @@ -710,7 +710,7 @@ input[type="checkbox"]:focus-visible { } .pagination { - margin: 0; + margin: 0 auto; padding: 0; display: table; table-layout: fixed; @@ -1698,13 +1698,14 @@ input:checked + .slide-container .properties { /*=== DIVERS */ /*===========*/ -.log-error, -.log-warning, -.log-notice, -.log-debug { +.log-level { text-align: center; } +.log-item.log-error { + background-color: #bd362f44; +} + .item.share.error a::after, .category .title.error::before, .item.feed.error .item-title::before { diff --git a/p/themes/base-theme/template.rtl.css b/p/themes/base-theme/template.rtl.css index 2dfe58afed4..e6d02e2bc25 100644 --- a/p/themes/base-theme/template.rtl.css +++ b/p/themes/base-theme/template.rtl.css @@ -710,7 +710,7 @@ input[type="checkbox"]:focus-visible { } .pagination { - margin: 0; + margin: 0 auto; padding: 0; display: table; table-layout: fixed; @@ -1698,13 +1698,14 @@ input:checked + .slide-container .properties { /*=== DIVERS */ /*===========*/ -.log-error, -.log-warning, -.log-notice, -.log-debug { +.log-level { text-align: center; } +.log-item.log-error { + background-color: #bd362f44; +} + .item.share.error a::after, .category .title.error::before, .item.feed.error .item-title::before { From 6bed64f6f360e1480bf5efc0d52d255b85791242 Mon Sep 17 00:00:00 2001 From: maTh Date: Sun, 18 Sep 2022 18:31:14 +0200 Subject: [PATCH 0383/2479] Improved: Mouse title on empty feeds (#4617) * Update aside_feed.phtml * Update global.phtml * Update idle.phtml * Update index.phtml * Update idle.phtml * improved * Update app/views/subscription/index.phtml Co-authored-by: Alexandre Alapetite * Update app/views/stats/idle.phtml Co-authored-by: Alexandre Alapetite Co-authored-by: Alexandre Alapetite --- app/layout/aside_feed.phtml | 21 ++++++++++++++++++--- app/views/index/global.phtml | 20 +++++++++++++++++--- app/views/stats/idle.phtml | 19 ++++++++++++++++--- app/views/subscription/index.phtml | 25 ++++++++++++++++++------- 4 files changed, 69 insertions(+), 16 deletions(-) diff --git a/app/layout/aside_feed.phtml b/app/layout/aside_feed.phtml index 3ddb958f25a..79a83e1baf1 100644 --- a/app/layout/aside_feed.phtml +++ b/app/layout/aside_feed.phtml @@ -99,10 +99,25 @@ // NB: Reduce whitespace in that loop foreach ($feeds as $feed): $f_active = FreshRSS_Context::isCurrentGet('f_' . $feed->id()); + $f_active_class = $f_active ? ' active' : ''; + + $error_class = ''; + $error_title = ''; + if ($feed->inError()) { + $error_class = ' error'; + $error_title = _t('sub.feed.error'); + } + + $empty_class = ''; + $empty_title = ''; + if ($feed->nbEntries() <= 0) { + $empty_class = ' empty'; + $empty_title = _t('sub.feed.empty'); + } + $mute_class = $feed->mute() ? ' mute' : ''; ?> -
  • id() ?>" class="item feed" title="" + data-unread="nbNotRead() ?>" data-priority="priority() ?>">simplify_over_n_feeds): ?>
  • show_favicons): ?>✇ name() ?> diff --git a/app/views/stats/idle.phtml b/app/views/stats/idle.phtml index 9dbfbf4ab2b..a88dbeb8a57 100644 --- a/app/views/stats/idle.phtml +++ b/app/views/stats/idle.phtml @@ -26,10 +26,23 @@ feeds[$feedInPeriod['id']] ?? null; - $error = $feed == null || $feed->inError() ? ' error' : ''; - $empty = $feed != null && $feed->nbEntries() == 0 ? ' empty' : ''; + + $error_class = ''; + $error_title = ''; + if ($feed == null || $feed->inError()) { + $error_class = ' error'; + $error_title = _t('sub.feed.error'); + } + + $empty_class = ''; + $empty_title = ''; + if ($feed != null && $feed->nbEntries() == 0) { + $empty_class = ' empty'; + $empty_title = _t('sub.feed.empty'); + } + $mute_class = $feed->mute() ? ' mute' : ''; ?> -
  • +
  • show_favicons): ?>✇ diff --git a/app/views/subscription/index.phtml b/app/views/subscription/index.phtml index b546eea6dbc..f056214d290 100644 --- a/app/views/subscription/index.phtml +++ b/app/views/subscription/index.phtml @@ -45,14 +45,25 @@ if ($this->onlyFeedsWithError && !$feed->inError()) { continue; } - $error = $feed->inError() ? ' error' : ''; - $empty = $feed->nbEntries() == 0 ? ' empty' : ''; + + $error_class = ''; + $error_title = ''; + if ($feed->inError()) { + $error_class = ' error'; + $error_title = _t('sub.feed.error'); + } + + $empty_class = ''; + $empty_title = ''; + if ($feed->nbEntries() == 0) { + $empty_class = ' empty'; + $empty_title = _t('sub.feed.empty'); + } + $mute_class = $feed->mute() ? ' mute' : ''; ?> -
  • - +
  • + show_favicons): ?>✇ name() ?>
  • From 6813e16e95c631084029cc84f786acd87495c063 Mon Sep 17 00:00:00 2001 From: berumuron Date: Mon, 19 Sep 2022 11:50:46 +0200 Subject: [PATCH 0384/2479] fix: Fix preg_match in enforceHttpEncoding (#4623) `preg_match` can return `1`, `0` or `false`. In this last case, `enforceHttpEncoding` was trying to access `$matches[1]`, even if the regex wasn't matching. --- lib/lib_rss.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/lib_rss.php b/lib/lib_rss.php index 743aa7840d7..7a7a282253c 100644 --- a/lib/lib_rss.php +++ b/lib/lib_rss.php @@ -351,7 +351,7 @@ function cleanCache(int $hours = 720) { * @return string an HTML string with XML encoding information for DOMDocument::loadHTML() */ function enforceHttpEncoding(string $html, string $contentType = ''): string { - $httpCharset = preg_match('/\bcharset=([0-9a-z_-]{2,12})$/i', $contentType, $matches) === false ? '' : $matches[1]; + $httpCharset = preg_match('/\bcharset=([0-9a-z_-]{2,12})$/i', $contentType, $matches) === 1 ? $matches[1] : ''; if ($httpCharset == '') { // No charset defined by HTTP, do nothing return $html; From 412b60ca8380dd760225574746207cf8e90a2b43 Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Mon, 19 Sep 2022 11:51:44 +0200 Subject: [PATCH 0385/2479] Fix transaction rollbacks during auto-update (#4622) #fix https://github.com/FreshRSS/FreshRSS/issues/4600 We first need to commit the SQL transaction before being able to auto-update. Avoid error such as: > 25P02: 7 ERROR: current transaction is aborted, commands ignored until end of transaction block --- app/Models/CategoryDAO.php | 3 +++ app/Models/EntryDAO.php | 3 +++ app/Models/FeedDAO.php | 3 +++ 3 files changed, 9 insertions(+) diff --git a/app/Models/CategoryDAO.php b/app/Models/CategoryDAO.php index e9b873d7234..e098c65e4bc 100644 --- a/app/Models/CategoryDAO.php +++ b/app/Models/CategoryDAO.php @@ -15,6 +15,9 @@ public function resetDefaultCategoryName() { } protected function addColumn($name) { + if ($this->pdo->inTransaction()) { + $this->pdo->commit(); + } Minz_Log::warning(__method__ . ': ' . $name); try { if ($name === 'kind') { //v1.20.0 diff --git a/app/Models/EntryDAO.php b/app/Models/EntryDAO.php index 424f682a839..b635152235d 100644 --- a/app/Models/EntryDAO.php +++ b/app/Models/EntryDAO.php @@ -62,6 +62,9 @@ private function updateToMediumBlob() { } protected function addColumn(string $name) { + if ($this->pdo->inTransaction()) { + $this->pdo->commit(); + } Minz_Log::warning(__method__ . ': ' . $name); try { if ($name === 'attributes') { //v1.20.0 diff --git a/app/Models/FeedDAO.php b/app/Models/FeedDAO.php index 1b3d84c4603..9f85fbc86f7 100644 --- a/app/Models/FeedDAO.php +++ b/app/Models/FeedDAO.php @@ -3,6 +3,9 @@ class FreshRSS_FeedDAO extends Minz_ModelPdo implements FreshRSS_Searchable { protected function addColumn(string $name) { + if ($this->pdo->inTransaction()) { + $this->pdo->commit(); + } Minz_Log::warning(__method__ . ': ' . $name); try { if ($name === 'kind') { //v1.20.0 From f941533b3e2b45e830e63bbad237fba53284a924 Mon Sep 17 00:00:00 2001 From: maTh Date: Mon, 19 Sep 2022 22:50:09 +0200 Subject: [PATCH 0386/2479] Update update.phtml (#4625) --- app/views/helpers/feed/update.phtml | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/app/views/helpers/feed/update.phtml b/app/views/helpers/feed/update.phtml index 3ebf2d0f3c0..4ca2c472888 100644 --- a/app/views/helpers/feed/update.phtml +++ b/app/views/helpers/feed/update.phtml @@ -254,12 +254,10 @@
    -
    - - - - -
    + + + +
    Date: Tue, 20 Sep 2022 10:36:07 +0200 Subject: [PATCH 0387/2479] Fix opcache bug during Web update (#4629) #fix https://github.com/FreshRSS/FreshRSS/issues/4624 #fix https://github.com/FreshRSS/FreshRSS/issues/4605 --- app/Controllers/updateController.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/app/Controllers/updateController.php b/app/Controllers/updateController.php index d9b81741297..675bd7def88 100644 --- a/app/Controllers/updateController.php +++ b/app/Controllers/updateController.php @@ -259,6 +259,10 @@ public function applyAction() { } } + if (function_exists('opcache_reset')) { + opcache_reset(); + } + if ($res === true) { Minz_Request::forward(array( 'c' => 'update', From 6dc611db2b57810d2cd51b927f70c6181324e1f6 Mon Sep 17 00:00:00 2001 From: Chris Francy Date: Tue, 20 Sep 2022 01:41:36 -0700 Subject: [PATCH 0388/2479] Fix show settings page after adding new feed (#4612) (#4631) --- app/Controllers/feedController.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/Controllers/feedController.php b/app/Controllers/feedController.php index 00759bd1870..7030c27c177 100755 --- a/app/Controllers/feedController.php +++ b/app/Controllers/feedController.php @@ -240,7 +240,7 @@ public function addAction() { } // Entries are in DB, we redirect to feed configuration page. - $url_redirect['a'] = 'index'; + $url_redirect['a'] = 'feed'; $url_redirect['params']['id'] = '' . $feed->id(); Minz_Request::good(_t('feedback.sub.feed.added', $feed->name()), $url_redirect); } else { @@ -261,7 +261,7 @@ public function addAction() { $feed = $feedDAO->searchByUrl($this->view->feed->url()); if ($feed) { // Already subscribe so we redirect to the feed configuration page. - $url_redirect['a'] = 'index'; + $url_redirect['a'] = 'feed'; $url_redirect['params']['id'] = $feed->id(); Minz_Request::good(_t('feedback.sub.feed.already_subscribed', $feed->name()), $url_redirect); } From 97fc0bc95e8bdc593bb4a4ae65aa632df708af9c Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Tue, 20 Sep 2022 12:03:46 +0200 Subject: [PATCH 0389/2479] GLOB_BRACE is not available on all platforms (#4628) https://php.net/glob #fix https://github.com/FreshRSS/FreshRSS/issues/4627 Improvement of https://github.com/FreshRSS/FreshRSS/pull/4220 --- lib/lib_rss.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/lib_rss.php b/lib/lib_rss.php index 7a7a282253c..592ad81499d 100644 --- a/lib/lib_rss.php +++ b/lib/lib_rss.php @@ -332,7 +332,8 @@ function sanitizeHTML($data, string $base = '', $maxLength = false) { } function cleanCache(int $hours = 720) { - $files = glob(CACHE_PATH . '/*.{html,spc}', GLOB_BRACE | GLOB_NOSORT); + // N.B.: GLOB_BRACE is not available on all platforms + $files = array_merge(glob(CACHE_PATH . '/*.html', GLOB_NOSORT), glob(CACHE_PATH . '/*.spc', GLOB_NOSORT)); foreach ($files as $file) { if (substr($file, -10) === 'index.html') { continue; From ce5162042b64c0a27c5bf65360dd425e1b914583 Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Tue, 20 Sep 2022 21:48:01 +0200 Subject: [PATCH 0390/2479] Minor update list of API clients (#4632) Updated in particular FeedReader, NewsFlash, Fluent Reader --- README.fr.md | 12 ++++++------ README.md | 23 +++++++++++------------ 2 files changed, 17 insertions(+), 18 deletions(-) diff --git a/README.fr.md b/README.fr.md index 69ef5f6c53f..298d81475a5 100644 --- a/README.fr.md +++ b/README.fr.md @@ -228,16 +228,16 @@ et [l’API Fever](https://freshrss.github.io/FreshRSS/fr/users/06_Fever_API.htm |:--------------------------------------------------------------------------------------|:-----------:|:-------------------------------------------------------------:|:----------------------:|:----------------:|:-------------:|:---------:|:------------------------------:|:-------------------:|:----------:|:------:|:--------:|:------------:| | [News+](https://github.com/noinnion/newsplus/blob/master/apk/NewsPlus_202.apk) with [Google Reader extension](https://github.com/noinnion/newsplus/blob/master/apk/GoogleReaderCloneExtension_101.apk) | Android | [Partially](https://github.com/noinnion/newsplus/blob/master/extensions/GoogleReaderCloneExtension/src/com/noinnion/android/newsplus/extension/google_reader/) | 2015 | GReader | ✔️ | ⭐⭐⭐ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | | [FeedMe](https://play.google.com/store/apps/details?id=com.seazon.feedme) | Android | ➖ | ✔️✔️ | GReader | ✔️ | ⭐⭐ | ➖ | ➖ | ✔️ | ✓ | ✔️ | ✔️ | -| [RSS Guard](https://github.com/martinrotter/rssguard) | Windows, GNU/Linux, macOS, OS/2 | ✔️ | ✔️✔️ | GReader | ✔️ | ⭐⭐ | ➖ | ✔️ | ✔️ | ✔️ | ✔️ | ➖ | | [EasyRSS](https://github.com/Alkarex/EasyRSS) | Android | [✔️](https://github.com/Alkarex/EasyRSS) | ✔️ | GReader | Bug | ⭐⭐ | ➖ | ➖ | ✔️ | ➖ | ➖ | ➖ | | [FocusReader](https://play.google.com/store/apps/details?id=allen.town.focus.reader) | Android | ➖ | ✔️✔️ | GReader | ✔️ | ⭐⭐⭐ | ➖ | ➖ | ✔️ | ➖ | ✓ | ✔️ | | [Readrops](https://github.com/readrops/Readrops) | Android | [✔️](https://github.com/readrops/Readrops) | ✔️✔️ | GReader | ✔️ | ⭐⭐⭐ | ➖ | ➖ | ➖ | ➖ | ➖ | ✔️ | | [Fluent Reader Lite](https://hyliu.me/fluent-reader-lite/) | Android, iOS| [✔️](https://github.com/yang991178/fluent-reader-lite) | ✔️✔️ | GReader, Fever | ✔️ | ⭐⭐⭐ | ➖ | ➖ | ✓ | ➖ | ➖ | ➖ | -| [ChristopheHenry](https://gitlab.com/christophehenry/freshrss-android) | Android | [✔️](https://gitlab.com/christophehenry/freshrss-android) | En développement | GReader | ✔️ | ⭐⭐ | ➖ | ✔️ | ✔️ | ➖ | ➖ | ➖ | -| [Fluent Reader](https://hyliu.me/fluent-reader/) | Windows, Linux, macOS| [✔️](https://github.com/yang991178/fluent-reader) | ✔️✔️ | Fever | ✔️ | ⭐ | ➖ | ✔️ | ✔️ | ➖ | ➖ | ➖ | -| [FeedReader](https://jangernert.github.io/FeedReader/) | GNU/Linux | [✔️](https://jangernert.github.io/FeedReader/) | ✔️ | GReader | ✔️ | ⭐⭐ | ➖ | ✔️ | ✔️ | ➖ | ✔️ | ✔️ | -| [NewsFlash](https://gitlab.com/news-flash/news_flash_gtk) | GNU/Linux | [✔️](https://gitlab.com/news-flash/news_flash_gtk) | ✔️✔️ | Fever | ➖ | ⭐⭐ | ✔️ | ✔️ | ✔️ | ➖ | ➖ | ➖ | -| [NewsFlash](https://gitlab.com/news-flash/news_flash_gtk) | GNU/Linux | [✔️](https://gitlab.com/news-flash/news_flash_gtk) | En développement | GReader | ➖ | ❔ | ❔ | ❔ | ❔ | ❔ | ➖ | ❔ || [Newsboat 2.24+](https://newsboat.org/) | GNU/Linux, macOS, FreeBSD | [✔️](https://github.com/newsboat/newsboat/) | ✔️✔️ | GReader | ➖ | ⭐ | ➖ | ✔️ | ✔️ | ➖ | ✔️ | ➖ | +| [ChristopheHenry](https://gitlab.com/christophehenry/freshrss-android) | Android | [✔️](https://gitlab.com/christophehenry/freshrss-android) | En développement | GReader | ✔️ | ⭐⭐ | ➖ | ✔️ | ✔️ | ➖ | ➖ | ➖ | +| [Fluent Reader](https://hyliu.me/fluent-reader/) | Windows, Linux, macOS| [✔️](https://github.com/yang991178/fluent-reader) | ✔️✔️ | Fever | ✔️ | ⭐ | ➖ | ✔️ | ✓ | ➖ | ➖ | ➖ | +| [RSS Guard](https://github.com/martinrotter/rssguard) | Windows, GNU/Linux, macOS, OS/2 | [✔️](https://github.com/martinrotter/rssguard) | ✔️✔️ | GReader | ✔️ | ⭐⭐ | ➖ | ✔️ | ✔️ | ✔️ | ✔️ | ➖ | +| [FeedReader](https://jangernert.github.io/FeedReader/) | GNU/Linux | [✔️](https://jangernert.github.io/FeedReader/) | 2020 | GReader | ✔️ | ⭐⭐ | ➖ | ✔️ | ✔️ | ➖ | ✔️ | ✔️ | +| [NewsFlash](https://gitlab.com/news-flash/news_flash_gtk) | GNU/Linux | [✔️](https://gitlab.com/news-flash/news_flash_gtk) | ✔️✔️ | Fever, (GReader) | ➖ | ⭐⭐ | ✔️ | ✔️ | ✔️ | ➖ | ➖ | ➖ | +| [Newsboat 2.24+](https://newsboat.org/) | GNU/Linux, macOS, FreeBSD | [✔️](https://github.com/newsboat/newsboat/) | ✔️✔️ | GReader | ➖ | ⭐ | ➖ | ✔️ | ✔️ | ➖ | ✔️ | ➖ | | [Vienna RSS](http://www.vienna-rss.com/) | macOS | [✔️](https://github.com/ViennaRSS/vienna-rss) | ✔️✔️ | GReader | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | | [Reeder](https://www.reederapp.com/) | iOS, macOS | ➖ | ✔️✔️ | GReader, Fever | ✔️ | ⭐⭐⭐ | ➖ | ✔️ | ✔️ | ➖ | ➖ | ✔️ | | [lire](https://lireapp.com/) | iOS, macOS | ➖ | ✔️✔️ | GReader | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | diff --git a/README.md b/README.md index 197591bba1f..9778f1b1412 100644 --- a/README.md +++ b/README.md @@ -113,20 +113,19 @@ and [Fever API](https://freshrss.github.io/FreshRSS/en/users/06_Fever_API.html) | App | Platform | Free Software | Maintained & Developed | API | Works offline | Fast sync | Fetch more in individual views | Fetch read articles | Favourites | Labels | Podcasts | Manage feeds | |:--------------------------------------------------------------------------------------|:-----------:|:-------------------------------------------------------------:|:----------------------:|:----------------:|:-------------:|:---------:|:------------------------------:|:-------------------:|:----------:|:------:|:--------:|:------------:| | [News+](https://github.com/noinnion/newsplus/blob/master/apk/NewsPlus_202.apk) with [Google Reader extension](https://github.com/noinnion/newsplus/blob/master/apk/GoogleReaderCloneExtension_101.apk) | Android | [Partially](https://github.com/noinnion/newsplus/blob/master/extensions/GoogleReaderCloneExtension/src/com/noinnion/android/newsplus/extension/google_reader/) | 2015 | GReader | ✔️ | ⭐⭐⭐ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | -| [FeedMe](https://play.google.com/store/apps/details?id=com.seazon.feedme)* | Android | ➖ | ✔️✔️ | GReader | ✔️ | ⭐⭐ | ➖ | ➖ | ✔️ | ✓ | ✔️ | ✔️ | -| [RSS Guard](https://github.com/martinrotter/rssguard) | Windows, GNU/Linux, macOS, OS/2 | ✔️ | ✔️✔️ | GReader | ✔️ | ⭐⭐ | ➖ | ✔️ | ✔️ | ✔️ | ✔️ | ➖ | -| [EasyRSS](https://github.com/Alkarex/EasyRSS) | Android | [✔️](https://github.com/Alkarex/EasyRSS) | ✔️ | GReader | Bug | ⭐⭐ | ➖ | ➖ | ✔️ | ➖ | ➖ | ➖ | -| [Readrops](https://github.com/readrops/Readrops) | Android | [✔️](https://github.com/readrops/Readrops) | ✔️✔️ | GReader | ✔️ | ⭐⭐⭐ | ➖ | ➖ | ➖ | ➖ | ➖ | ✔️ | -| [Fluent Reader Lite](https://hyliu.me/fluent-reader-lite/) | Android, iOS| [✔️](https://github.com/yang991178/fluent-reader-lite) | ✔️✔️ | GReader, Fever | ✔️ | ⭐⭐⭐ | ➖ | ➖ | ✓ | ➖ | ➖ | ➖ | -| [FocusReader](https://play.google.com/store/apps/details?id=allen.town.focus.reader) | Android | ➖ | ✔️✔️ | GReader | ✔️ | ⭐⭐⭐ | ➖ | ➖ | ✔️ | ➖ | ✓ | ✔️ | -| [ChristopheHenry](https://gitlab.com/christophehenry/freshrss-android) | Android | [✔️](https://gitlab.com/christophehenry/freshrss-android) | Work in progress | GReader | ✔️ | ⭐⭐ | ➖ | ✔️ | ✔️ | ➖ | ➖ | ➖ | -| [Fluent Reader](https://hyliu.me/fluent-reader/) | Windows, Linux, macOS| [✔️](https://github.com/yang991178/fluent-reader) | ✔️✔️ | Fever | ✔️ | ⭐ | ➖ | ✔️ | ✔️ | ➖ | ➖ | ➖ | -| [FeedReader](https://jangernert.github.io/FeedReader/) | GNU/Linux | [✔️](https://jangernert.github.io/FeedReader/) | ✔️ | GReader | ✔️ | ⭐⭐ | ➖ | ✔️ | ✔️ | ➖ | ✔️ | ✔️ | -| [NewsFlash](https://gitlab.com/news-flash/news_flash_gtk) | GNU/Linux | [✔️](https://gitlab.com/news-flash/news_flash_gtk) | ✔️✔️ | Fever | ➖ | ⭐⭐ | ✔️ | ✔️ | ✔️ | ➖ | ➖ | ➖ | -| [NewsFlash](https://gitlab.com/news-flash/news_flash_gtk) | GNU/Linux | [✔️](https://gitlab.com/news-flash/news_flash_gtk) | Work in Progress | GReader | ➖ | ❔ | ❔ | ❔ | ❔ | ❔ | ➖ | ❔ | +| [FeedMe](https://play.google.com/store/apps/details?id=com.seazon.feedme)* | Android | ➖ | ✔️✔️ | GReader | ✔️ | ⭐⭐ | ➖ | ➖ | ✔️ | ✓ | ✔️ | ✔️ | +| [EasyRSS](https://github.com/Alkarex/EasyRSS) | Android | [✔️](https://github.com/Alkarex/EasyRSS) | ✔️ | GReader | Bug | ⭐⭐ | ➖ | ➖ | ✔️ | ➖ | ➖ | ➖ | +| [Readrops](https://github.com/readrops/Readrops) | Android | [✔️](https://github.com/readrops/Readrops) | ✔️✔️ | GReader | ✔️ | ⭐⭐⭐ | ➖ | ➖ | ➖ | ➖ | ➖ | ✔️ | +| [Fluent Reader Lite](https://hyliu.me/fluent-reader-lite/) | Android, iOS| [✔️](https://github.com/yang991178/fluent-reader-lite) | ✔️✔️ | GReader, Fever | ✔️ | ⭐⭐⭐ | ➖ | ➖ | ✓ | ➖ | ➖ | ➖ | +| [FocusReader](https://play.google.com/store/apps/details?id=allen.town.focus.reader) | Android | ➖ | ✔️✔️ | GReader | ✔️ | ⭐⭐⭐ | ➖ | ➖ | ✔️ | ➖ | ✓ | ✔️ | +| [ChristopheHenry](https://gitlab.com/christophehenry/freshrss-android) | Android | [✔️](https://gitlab.com/christophehenry/freshrss-android) | Work in progress | GReader | ✔️ | ⭐⭐ | ➖ | ✔️ | ✔️ | ➖ | ➖ | ➖ | +| [Fluent Reader](https://hyliu.me/fluent-reader/) | Windows, Linux, macOS| [✔️](https://github.com/yang991178/fluent-reader) | ✔️✔️ | GReader, Fever | ✔️ | ⭐ | ➖ | ✔️ | ✓ | ➖ | ➖ | ➖ | +| [RSS Guard](https://github.com/martinrotter/rssguard) | Windows, GNU/Linux, macOS, OS/2 | [✔️](https://github.com/martinrotter/rssguard) | ✔️✔️ | GReader | ✔️ | ⭐⭐ | ➖ | ✔️ | ✔️ | ✔️ | ✔️ | ➖ | +| [FeedReader](https://jangernert.github.io/FeedReader/) | GNU/Linux | [✔️](https://jangernert.github.io/FeedReader/) | 2020 | GReader | ✔️ | ⭐⭐ | ➖ | ✔️ | ✔️ | ➖ | ✔️ | ✔️ | +| [NewsFlash](https://gitlab.com/news-flash/news_flash_gtk) | GNU/Linux | [✔️](https://gitlab.com/news-flash/news_flash_gtk) | ✔️✔️ | Fever, (GReader) | ➖ | ⭐⭐ | ✔️ | ✔️ | ✔️ | ➖ | ➖ | ➖ | | [Newsboat 2.24+](https://newsboat.org/) | GNU/Linux, macOS, FreeBSD | [✔️](https://github.com/newsboat/newsboat/) | ✔️✔️ | GReader | ➖ | ⭐ | ➖ | ✔️ | ✔️ | ➖ | ✔️ | ➖ | | [Vienna RSS](http://www.vienna-rss.com/) | macOS | [✔️](https://github.com/ViennaRSS/vienna-rss) | ✔️✔️ | GReader | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | -| [Reeder](https://www.reederapp.com/)* | iOS, macOS | ➖ | ✔️✔️ | GReader, Fever | ✔️ | ⭐⭐⭐ | ➖ | ✔️ | ✔️ | ➖ | ➖ | ✔️ | +| [Reeder](https://www.reederapp.com/)* | iOS, macOS | ➖ | ✔️✔️ | GReader, Fever | ✔️ | ⭐⭐⭐ | ➖ | ✔️ | ✔️ | ➖ | ➖ | ✔️ | | [lire](https://lireapp.com/) | iOS, macOS | ➖ | ✔️✔️ | GReader | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | | [Unread](https://apps.apple.com/app/unread-2/id1363637349) | iOS | ➖ | ✔️✔️ | Fever | ✔️ | ❔ | ❔ | ❔ | ✔️ | ➖ | ➖ | ➖ | | [Fiery Feeds](https://apps.apple.com/app/fiery-feeds-rss-reader/id1158763303) | iOS | ➖ | ✔️✔️ | Fever | ❔ | ❔ | ❔ | ❔ | ❔ | ➖ | ➖ | ➖ | From 9505eb8445fc3689bdad31bc8a9afe54104d9fcc Mon Sep 17 00:00:00 2001 From: maTh Date: Mon, 26 Sep 2022 23:25:56 +0200 Subject: [PATCH 0391/2479] fixed: Safari issue with .stick dropdowns (#4643) * fix * fixed --- p/themes/Alternative-Dark/adark.css | 5 ----- p/themes/Alternative-Dark/adark.rtl.css | 5 ----- p/themes/Ansum/_sidebar.scss | 3 --- p/themes/Ansum/ansum.css | 4 ---- p/themes/Ansum/ansum.rtl.css | 4 ---- p/themes/BlueLagoon/BlueLagoon.css | 5 ----- p/themes/BlueLagoon/BlueLagoon.rtl.css | 5 ----- p/themes/Dark/dark.css | 5 ----- p/themes/Dark/dark.rtl.css | 5 ----- p/themes/Flat/flat.css | 5 ----- p/themes/Flat/flat.rtl.css | 5 ----- p/themes/Mapco/_sidebar.scss | 3 --- p/themes/Mapco/mapco.css | 4 ---- p/themes/Mapco/mapco.rtl.css | 4 ---- p/themes/Nord/nord.css | 5 ----- p/themes/Nord/nord.rtl.css | 5 ----- p/themes/Origine-compact/origine-compact.css | 5 ----- p/themes/Origine-compact/origine-compact.rtl.css | 5 ----- p/themes/Origine/origine.css | 5 ----- p/themes/Origine/origine.rtl.css | 5 ----- p/themes/Pafat/pafat.css | 5 ----- p/themes/Pafat/pafat.rtl.css | 5 ----- p/themes/Screwdriver/screwdriver.css | 5 ----- p/themes/Screwdriver/screwdriver.rtl.css | 5 ----- p/themes/Swage/swage.css | 4 ---- p/themes/Swage/swage.rtl.css | 4 ---- p/themes/Swage/swage.scss | 3 --- p/themes/base-theme/base.css | 5 ----- p/themes/base-theme/base.rtl.css | 5 ----- p/themes/base-theme/template.css | 5 +++++ p/themes/base-theme/template.rtl.css | 5 +++++ 31 files changed, 10 insertions(+), 133 deletions(-) diff --git a/p/themes/Alternative-Dark/adark.css b/p/themes/Alternative-Dark/adark.css index 6ebfc02fe89..48ddd0ca1b0 100644 --- a/p/themes/Alternative-Dark/adark.css +++ b/p/themes/Alternative-Dark/adark.css @@ -101,11 +101,6 @@ form th { } /*=== Buttons */ -.stick { - vertical-align: middle; - font-size: 0; -} - .stick input, .stick .btn { border-radius: 0; diff --git a/p/themes/Alternative-Dark/adark.rtl.css b/p/themes/Alternative-Dark/adark.rtl.css index 9bc3d0ebcdf..1cae8386f40 100644 --- a/p/themes/Alternative-Dark/adark.rtl.css +++ b/p/themes/Alternative-Dark/adark.rtl.css @@ -101,11 +101,6 @@ form th { } /*=== Buttons */ -.stick { - vertical-align: middle; - font-size: 0; -} - .stick input, .stick .btn { border-radius: 0; diff --git a/p/themes/Ansum/_sidebar.scss b/p/themes/Ansum/_sidebar.scss index f5b6b23550b..a2df60c445f 100644 --- a/p/themes/Ansum/_sidebar.scss +++ b/p/themes/Ansum/_sidebar.scss @@ -85,9 +85,6 @@ /*=== Buttons */ .stick { - vertical-align: middle; - font-size: 0; - input, .btn { border-radius: 0; } diff --git a/p/themes/Ansum/ansum.css b/p/themes/Ansum/ansum.css index 63a014db0f3..e241efcf56b 100644 --- a/p/themes/Ansum/ansum.css +++ b/p/themes/Ansum/ansum.css @@ -498,10 +498,6 @@ form th { } /*=== Buttons */ -.stick { - vertical-align: middle; - font-size: 0; -} .stick input, .stick .btn { border-radius: 0; } diff --git a/p/themes/Ansum/ansum.rtl.css b/p/themes/Ansum/ansum.rtl.css index d1dcd97d0c2..842ab4d9360 100644 --- a/p/themes/Ansum/ansum.rtl.css +++ b/p/themes/Ansum/ansum.rtl.css @@ -498,10 +498,6 @@ form th { } /*=== Buttons */ -.stick { - vertical-align: middle; - font-size: 0; -} .stick input, .stick .btn { border-radius: 0; } diff --git a/p/themes/BlueLagoon/BlueLagoon.css b/p/themes/BlueLagoon/BlueLagoon.css index e12964a4f54..1c6093f3b32 100644 --- a/p/themes/BlueLagoon/BlueLagoon.css +++ b/p/themes/BlueLagoon/BlueLagoon.css @@ -129,11 +129,6 @@ button.as-link[disabled] { box-shadow: 0 2px 2px #222 inset, 0px 1px rgba(255, 255, 255, 0.08); } -.stick { - vertical-align: middle; - font-size: 0; -} - .stick input, .stick .btn { border-radius: 0; diff --git a/p/themes/BlueLagoon/BlueLagoon.rtl.css b/p/themes/BlueLagoon/BlueLagoon.rtl.css index 370fc4c240f..18b5607cfa2 100644 --- a/p/themes/BlueLagoon/BlueLagoon.rtl.css +++ b/p/themes/BlueLagoon/BlueLagoon.rtl.css @@ -129,11 +129,6 @@ button.as-link[disabled] { box-shadow: 0 2px 2px #222 inset, 0px 1px rgba(255, 255, 255, 0.08); } -.stick { - vertical-align: middle; - font-size: 0; -} - .stick input, .stick .btn { border-radius: 0; diff --git a/p/themes/Dark/dark.css b/p/themes/Dark/dark.css index 38fc0bce42b..6ec73980352 100644 --- a/p/themes/Dark/dark.css +++ b/p/themes/Dark/dark.css @@ -130,11 +130,6 @@ button.as-link[disabled] { color: #445 !important; } -.stick { - vertical-align: middle; - font-size: 0; -} - .stick input, .stick .btn { border-radius: 0; diff --git a/p/themes/Dark/dark.rtl.css b/p/themes/Dark/dark.rtl.css index 8c5b30fed07..fcd76c4afd9 100644 --- a/p/themes/Dark/dark.rtl.css +++ b/p/themes/Dark/dark.rtl.css @@ -130,11 +130,6 @@ button.as-link[disabled] { color: #445 !important; } -.stick { - vertical-align: middle; - font-size: 0; -} - .stick input, .stick .btn { border-radius: 0; diff --git a/p/themes/Flat/flat.css b/p/themes/Flat/flat.css index 66b489c3179..275f810eead 100644 --- a/p/themes/Flat/flat.css +++ b/p/themes/Flat/flat.css @@ -141,11 +141,6 @@ form th { } /*=== Buttons */ -.stick { - vertical-align: middle; - font-size: 0; -} - .stick input, .stick .btn { border-radius: 0; diff --git a/p/themes/Flat/flat.rtl.css b/p/themes/Flat/flat.rtl.css index c98abd49667..3f531d578de 100644 --- a/p/themes/Flat/flat.rtl.css +++ b/p/themes/Flat/flat.rtl.css @@ -141,11 +141,6 @@ form th { } /*=== Buttons */ -.stick { - vertical-align: middle; - font-size: 0; -} - .stick input, .stick .btn { border-radius: 0; diff --git a/p/themes/Mapco/_sidebar.scss b/p/themes/Mapco/_sidebar.scss index 3a679710909..8389b9444a4 100644 --- a/p/themes/Mapco/_sidebar.scss +++ b/p/themes/Mapco/_sidebar.scss @@ -85,9 +85,6 @@ /*=== Buttons */ .stick { - vertical-align: middle; - font-size: 0; - input, .btn { border-radius: 0; } diff --git a/p/themes/Mapco/mapco.css b/p/themes/Mapco/mapco.css index d4dd32e1759..25d9fa0b228 100644 --- a/p/themes/Mapco/mapco.css +++ b/p/themes/Mapco/mapco.css @@ -521,10 +521,6 @@ form th { } /*=== Buttons */ -.stick { - vertical-align: middle; - font-size: 0; -} .stick input, .stick .btn { border-radius: 0; } diff --git a/p/themes/Mapco/mapco.rtl.css b/p/themes/Mapco/mapco.rtl.css index a53dd3c0d34..39f9cba686b 100644 --- a/p/themes/Mapco/mapco.rtl.css +++ b/p/themes/Mapco/mapco.rtl.css @@ -521,10 +521,6 @@ form th { } /*=== Buttons */ -.stick { - vertical-align: middle; - font-size: 0; -} .stick input, .stick .btn { border-radius: 0; } diff --git a/p/themes/Nord/nord.css b/p/themes/Nord/nord.css index ac4c4104a52..5da5bd1f2c2 100644 --- a/p/themes/Nord/nord.css +++ b/p/themes/Nord/nord.css @@ -147,11 +147,6 @@ table td span { } /*=== Buttons */ -.stick { - font-size: 0; - vertical-align: middle; -} - .btn, a.btn { margin: .3rem .3rem; diff --git a/p/themes/Nord/nord.rtl.css b/p/themes/Nord/nord.rtl.css index 18a0ef7a0c4..1d91bb08d7c 100644 --- a/p/themes/Nord/nord.rtl.css +++ b/p/themes/Nord/nord.rtl.css @@ -147,11 +147,6 @@ table td span { } /*=== Buttons */ -.stick { - font-size: 0; - vertical-align: middle; -} - .btn, a.btn { margin: .3rem .3rem; diff --git a/p/themes/Origine-compact/origine-compact.css b/p/themes/Origine-compact/origine-compact.css index 17959e910d2..8fea0808a24 100644 --- a/p/themes/Origine-compact/origine-compact.css +++ b/p/themes/Origine-compact/origine-compact.css @@ -111,11 +111,6 @@ form th { } /*=== Buttons */ -.stick { - vertical-align: middle; - font-size: 0; -} - .stick input, .stick .btn { border-radius: 0; diff --git a/p/themes/Origine-compact/origine-compact.rtl.css b/p/themes/Origine-compact/origine-compact.rtl.css index 62c82bc6f3e..0315c32dcb7 100644 --- a/p/themes/Origine-compact/origine-compact.rtl.css +++ b/p/themes/Origine-compact/origine-compact.rtl.css @@ -111,11 +111,6 @@ form th { } /*=== Buttons */ -.stick { - vertical-align: middle; - font-size: 0; -} - .stick input, .stick .btn { border-radius: 0; diff --git a/p/themes/Origine/origine.css b/p/themes/Origine/origine.css index 4fd62134ad1..85362c9db4e 100644 --- a/p/themes/Origine/origine.css +++ b/p/themes/Origine/origine.css @@ -127,11 +127,6 @@ form th { } /*=== Buttons */ -.stick { - vertical-align: middle; - font-size: 0; -} - .stick input, .stick .btn { border-radius: 0; diff --git a/p/themes/Origine/origine.rtl.css b/p/themes/Origine/origine.rtl.css index a284e5464a2..2d506f1208a 100644 --- a/p/themes/Origine/origine.rtl.css +++ b/p/themes/Origine/origine.rtl.css @@ -127,11 +127,6 @@ form th { } /*=== Buttons */ -.stick { - vertical-align: middle; - font-size: 0; -} - .stick input, .stick .btn { border-radius: 0; diff --git a/p/themes/Pafat/pafat.css b/p/themes/Pafat/pafat.css index 6dc1c8990f9..c80f6581c64 100644 --- a/p/themes/Pafat/pafat.css +++ b/p/themes/Pafat/pafat.css @@ -112,11 +112,6 @@ form th { } /*=== Buttons */ -.stick { - vertical-align: middle; - font-size: 0; -} - .stick input, .stick .btn { border-radius: 0; diff --git a/p/themes/Pafat/pafat.rtl.css b/p/themes/Pafat/pafat.rtl.css index 8f5ecb5c392..ae16105b92b 100644 --- a/p/themes/Pafat/pafat.rtl.css +++ b/p/themes/Pafat/pafat.rtl.css @@ -112,11 +112,6 @@ form th { } /*=== Buttons */ -.stick { - vertical-align: middle; - font-size: 0; -} - .stick input, .stick .btn { border-radius: 0; diff --git a/p/themes/Screwdriver/screwdriver.css b/p/themes/Screwdriver/screwdriver.css index 3da84823232..5e546f5adfe 100644 --- a/p/themes/Screwdriver/screwdriver.css +++ b/p/themes/Screwdriver/screwdriver.css @@ -127,11 +127,6 @@ button.as-link[disabled] { box-shadow: 0 2px 2px #222 inset, 0px 1px rgba(255, 255, 255, 0.08); } -.stick { - vertical-align: middle; - font-size: 0; -} - .stick input, .stick .btn { border-radius: 0; diff --git a/p/themes/Screwdriver/screwdriver.rtl.css b/p/themes/Screwdriver/screwdriver.rtl.css index dcc54d9a3c5..e86209fd8d3 100644 --- a/p/themes/Screwdriver/screwdriver.rtl.css +++ b/p/themes/Screwdriver/screwdriver.rtl.css @@ -127,11 +127,6 @@ button.as-link[disabled] { box-shadow: 0 2px 2px #222 inset, 0px 1px rgba(255, 255, 255, 0.08); } -.stick { - vertical-align: middle; - font-size: 0; -} - .stick input, .stick .btn { border-radius: 0; diff --git a/p/themes/Swage/swage.css b/p/themes/Swage/swage.css index a39922a6c86..719df2b1565 100644 --- a/p/themes/Swage/swage.css +++ b/p/themes/Swage/swage.css @@ -229,10 +229,6 @@ form th { line-height: 2em; } -.stick { - vertical-align: middle; - font-size: 0; -} .stick select { margin-top: 0; } diff --git a/p/themes/Swage/swage.rtl.css b/p/themes/Swage/swage.rtl.css index 535f47fdb84..4a75aeddf0d 100644 --- a/p/themes/Swage/swage.rtl.css +++ b/p/themes/Swage/swage.rtl.css @@ -229,10 +229,6 @@ form th { line-height: 2em; } -.stick { - vertical-align: middle; - font-size: 0; -} .stick select { margin-top: 0; } diff --git a/p/themes/Swage/swage.scss b/p/themes/Swage/swage.scss index ce59f47eaac..68963f7db06 100644 --- a/p/themes/Swage/swage.scss +++ b/p/themes/Swage/swage.scss @@ -289,9 +289,6 @@ form { } .stick { - vertical-align: middle; - font-size: 0; - select { margin-top: 0; } diff --git a/p/themes/base-theme/base.css b/p/themes/base-theme/base.css index 8fa2a33b6da..8321abfc6d3 100644 --- a/p/themes/base-theme/base.css +++ b/p/themes/base-theme/base.css @@ -96,11 +96,6 @@ form th { } /*=== Buttons */ -.stick { - vertical-align: middle; - font-size: 0; -} - .stick input, .stick .btn { } diff --git a/p/themes/base-theme/base.rtl.css b/p/themes/base-theme/base.rtl.css index dc10f3c5388..e48222bddbe 100644 --- a/p/themes/base-theme/base.rtl.css +++ b/p/themes/base-theme/base.rtl.css @@ -96,11 +96,6 @@ form th { } /*=== Buttons */ -.stick { - vertical-align: middle; - font-size: 0; -} - .stick input, .stick .btn { } diff --git a/p/themes/base-theme/template.css b/p/themes/base-theme/template.css index b2ed624454c..463db875c20 100644 --- a/p/themes/base-theme/template.css +++ b/p/themes/base-theme/template.css @@ -380,6 +380,7 @@ td.numeric { display: inline-flex; max-width: 100%; white-space: nowrap; + vertical-align: middle; } .stick > input { @@ -395,6 +396,10 @@ td.numeric { flex-shrink: 0; } +.stick form { + display: inline-flex; +} + .btn, a.btn { display: inline-block; diff --git a/p/themes/base-theme/template.rtl.css b/p/themes/base-theme/template.rtl.css index e6d02e2bc25..8e7f2c99256 100644 --- a/p/themes/base-theme/template.rtl.css +++ b/p/themes/base-theme/template.rtl.css @@ -380,6 +380,7 @@ td.numeric { display: inline-flex; max-width: 100%; white-space: nowrap; + vertical-align: middle; } .stick > input { @@ -395,6 +396,10 @@ td.numeric { flex-shrink: 0; } +.stick form { + display: inline-flex; +} + .btn, a.btn { display: inline-block; From 2c3900dbdb7c471f852e7a55383512ce96517591 Mon Sep 17 00:00:00 2001 From: maTh Date: Tue, 27 Sep 2022 17:51:04 +0200 Subject: [PATCH 0392/2479] fix the icons in square sizes (#4648) --- p/themes/Ansum/icons/unread.svg | 60 ++------------------------------- p/themes/Mapco/icons/unread.svg | 4 +-- 2 files changed, 4 insertions(+), 60 deletions(-) diff --git a/p/themes/Ansum/icons/unread.svg b/p/themes/Ansum/icons/unread.svg index 5c6c3ac8ef3..6cdd8c38348 100644 --- a/p/themes/Ansum/icons/unread.svg +++ b/p/themes/Ansum/icons/unread.svg @@ -1,59 +1,3 @@ - - - - - - image/svg+xml - - - - - - - - - - + + diff --git a/p/themes/Mapco/icons/unread.svg b/p/themes/Mapco/icons/unread.svg index e80d4119ce8..6cdd8c38348 100644 --- a/p/themes/Mapco/icons/unread.svg +++ b/p/themes/Mapco/icons/unread.svg @@ -1,3 +1,3 @@ - - + + From b34bd30cc888e13050c401a45429c1b38294b4c6 Mon Sep 17 00:00:00 2001 From: maTh Date: Tue, 27 Sep 2022 17:56:24 +0200 Subject: [PATCH 0393/2479] Improved: Origine compact inherit from origine (#4636) * Update metadata.json * clean Origine compact * fix * RTL * fix * fix line-height --- p/themes/Origine-compact/metadata.json | 2 +- p/themes/Origine-compact/origine-compact.css | 952 ------------------ .../Origine-compact/origine-compact.rtl.css | 952 ------------------ p/themes/Origine/origine.css | 3 +- p/themes/Origine/origine.rtl.css | 3 +- 5 files changed, 5 insertions(+), 1907 deletions(-) diff --git a/p/themes/Origine-compact/metadata.json b/p/themes/Origine-compact/metadata.json index eba82defd60..67038e17320 100644 --- a/p/themes/Origine-compact/metadata.json +++ b/p/themes/Origine-compact/metadata.json @@ -3,5 +3,5 @@ "author": "Kevin Papst", "description": "A theme that tries to use the screen size more efficiently, based on Origine", "version": 0.1, - "files": ["_template.css", "origine-compact.css"] + "files": ["_template.css", "../Origine/origine.css", "origine-compact.css"] } diff --git a/p/themes/Origine-compact/origine-compact.css b/p/themes/Origine-compact/origine-compact.css index 8fea0808a24..c97b83dd0c6 100644 --- a/p/themes/Origine-compact/origine-compact.css +++ b/p/themes/Origine-compact/origine-compact.css @@ -2,177 +2,29 @@ /*=== GENERAL */ /*============*/ -html, body { - background: #fafafa; - font-family: "OpenSans", "Cantarell", "Helvetica", "Arial", "PingFang SC", "Microsoft YaHei", sans-serif; -} - -/*=== Links */ -a, button.as-link { - color: #0062be; - outline: none; -} - -/*=== Forms */ -legend { - margin: 20px 0 5px; - padding: 5px 0; - font-size: 1.4em; - border-bottom: 1px solid #ddd; -} - -label { - min-height: 25px; - padding: 5px 0; - cursor: pointer; -} - -textarea { - width: 360px; - height: 100px; -} - input, select, textarea { padding: 3px 5px 2px 5px; - background: #fdfdfd; - color: #666; - border: 1px solid #bbb; - border-radius: 3px; - box-shadow: 0 2px 2px #eee inset; min-height: 25px; line-height: 25px; - vertical-align: middle; -} - -option { - padding: 0 .5em; -} - -input:focus, select:focus, textarea:focus { - color: #0062be; - border-color: #3bf; - box-shadow: 0 2px 2px #ddf inset; -} - -input:invalid, select:invalid { - border-color: #f00; - box-shadow: 0 0 2px 2px #fdd inset; -} - -input:disabled, select:disabled { - background: #eee; -} - -input.extend { - transition: width 200ms linear; -} - -/*=== Tables */ -table { - border-collapse: collapse; -} - -tr, th, td { - padding: 0.5em; - border: 1px solid #ddd; -} - -th { - background: #f6f6f6; -} - -form td, -form th { - font-weight: normal; - text-align: center; } /*=== COMPONENTS */ /*===============*/ /*=== Forms */ -.form-group.form-actions { - padding: 5px 0; - background: #f4f4f4; - border-top: 1px solid #ddd; -} - .form-group.form-actions .btn { margin: 0 10px; } -.form-group .group-name { - padding: 10px 0; - text-align: right; -} - .form-group .group-controls { min-height: 25px; padding: 8px 0; } /*=== Buttons */ -.stick input, -.stick .btn { - border-radius: 0; -} - -.stick .btn:first-child, -.stick input:first-child { - border-radius: 3px 0 0 3px; -} - -.stick .btn-important:first-child { - border-right: 1px solid #06f; -} - -.stick .btn:last-child, -.stick input:last-child { - border-radius: 0 3px 3px 0; -} - -.stick .btn + .btn, -.stick .btn + input, -.stick .btn + .dropdown > .btn, -.stick input + .btn, -.stick input + input, -.stick input + .dropdown > .btn, -.stick .dropdown + .btn, -.stick .dropdown + input, -.stick .dropdown + .dropdown > .btn { - border-left: none; -} - -.stick input + .btn { - border-top: 1px solid #bbb; -} - -.stick .btn + .dropdown > .btn { - border-left: none; - border-radius: 0 3px 3px 0; -} - .btn { margin: 0; padding: 5px 10px; - background: #fff; - background: linear-gradient(to bottom, #fff 0%, #eee 100%); - background: -moz-linear-gradient(top, #fff 0%, #eee 100%); - background: -webkit-linear-gradient(top, #fff 0%, #eee 100%); - background: -o-linear-gradient(top, #fff 0%, #eee 100%); - background: -ms-linear-gradient(top, #fff 0%, #eee 100%); - display: inline-block; - color: #666; - font-size: 0.9rem; - border: 1px solid #ddd; - border-right: 1px solid #aaa; - border-bottom: 1px solid #aaa; - border-radius: 3px; min-height: 32px; - min-width: 15px; - text-shadow: 0px -1px 0 #ddd; - vertical-align: middle; - cursor: pointer; - overflow: hidden; } a.btn, @@ -181,161 +33,7 @@ a.btn, line-height: 20px; } -.btn:hover { - background: #f0f0f0; - background: linear-gradient(to bottom, #f8f8f8, #f0f0f0); - background: -moz-linear-gradient(top, #f8f8f8 0%, #f0f0f0 100%); - background: -webkit-linear-gradient(top, #f8f8f8 0%, #f0f0f0 100%); - background: -o-linear-gradient(top, #f8f8f8 0%, #f0f0f0 100%); - background: -ms-linear-gradient(top, #f8f8f8 0%, #f0f0f0 100%); - text-decoration: none; -} - -.btn.active, -.btn:active, -.dropdown-target:target ~ .btn.dropdown-toggle { - background: #eee; - box-shadow: 0px 2px 4px #e0e0e0 inset, 0px 1px 2px #fafafa; -} - -.btn-important { - background: #0084cc; - background: linear-gradient(to bottom, #0084cc, #0045cc); - background: -moz-linear-gradient(top, #0084cc 0%, #0045cc 100%); - background: -webkit-linear-gradient(top, #0084cc 0%, #0045cc 100%); - background: -o-linear-gradient(top, #0084cc 0%, #0045cc 100%); - background: -ms-linear-gradient(top, #0084cc 0%, #0045cc 100%); - color: #fff; - border: 1px solid #0062b7; - text-shadow: 0px -1px 0 #aaa; - font-weight: normal; -} - -.btn-important:hover { - background: linear-gradient(to bottom, #06c, #0045cc); - background: -moz-linear-gradient(top, #06c 0%, #0045cc 100%); - background: -webkit-linear-gradient(top, #06c 0%, #0045cc 100%); - background: -o-linear-gradient(top, #06c 0%, #0045cc 100%); - background: -ms-linear-gradient(top, #06c 0%, #0045cc 100%); -} - -.btn-important:active { - background: #0044cb; - box-shadow: none; -} - -.btn-important .icon { - filter: brightness(3); -} - -.btn-attention { - background: #e95b57; - background: linear-gradient(to bottom, #e95b57, #bd362f); - background: -moz-linear-gradient(top, #e95b57 0%, #bd362f 100%); - background: -webkit-linear-gradient(top, #e95b57 0%, #bd362f 100%); - background: -o-linear-gradient(top, #e95b57 0%, #bd362f 100%); - background: -ms-linear-gradient(top, #e95b57 0%, #bd362f 100%); - color: #fff; - border: 1px solid #c44742; - text-shadow: 0px -1px 0px #666; -} - -.btn-attention:hover { - background: linear-gradient(to bottom, #d14641, #bd362f); - background: -moz-linear-gradient(top, #d14641 0%, #bd362f 100%); - background: -webkit-linear-gradient(top, #d14641 0%, #bd362f 100%); - background: -o-linear-gradient(top, #d14641 0%, #bd362f 100%); - background: -ms-linear-gradient(top, #d14641 0%, #bd362f 100%); -} - -.btn-attention:active { - background: #bd362f; - box-shadow: none; -} - - /*=== Navigation */ -.nav-list .nav-header, -.nav-list .item { - height: 2.5em; - line-height: 2.5em; - font-size: 0.9rem; -} - -.nav-list .item:hover { - background: #fafafa; -} - -.nav-list .item:hover a { - color: #038; -} - -.nav-list .item.active { - background: #0062be; - color: #fff; -} - -.nav-list .item.active a { - color: #fff; -} - -.nav-list .item > a { - padding: 0 10px; -} - -.nav-list a:hover { - text-decoration: none; -} - -.nav-list .item.empty a { - color: #f39c12; -} - -.nav-list .item.active.empty a { - background: #f39c12; - color: #fff; -} - -.nav-list .item.error a { - color: #bd362f; -} - -.nav-list .item.active.error a { - background: #bd362f; - color: #fff; -} - -.nav-list .nav-header { - padding: 0 10px; - background: #f4f4f4; - color: #888; - border-bottom: 1px solid #ddd; - font-weight: bold; - text-shadow: 0 0 1px #ddd; -} - -.nav-list .nav-form { - padding: 3px; - text-align: center; -} - -.nav-head { - margin: 0; - background: #fff; - background: linear-gradient(to bottom, #fff, #f0f0f0); - background: -moz-linear-gradient(top, #fff 0%, #f0f0f0 100%); - background: -webkit-linear-gradient(top, #fff 0%, #f0f0f0 100%); - background: -o-linear-gradient(top, #fff 0%, #f0f0f0 100%); - background: -ms-linear-gradient(top, #fff 0%, #f0f0f0 100%); - border-bottom: 1px solid #ddd; - text-align: right; -} - -.nav-head .item { - padding: 5px 10px; - font-size: 0.9rem; - line-height: 1.5rem; -} /*=== Horizontal-list */ .horizontal-list { @@ -347,237 +45,29 @@ a.btn, } /*=== Dropdown */ -.dropdown-menu { - margin: 5px 0 0; - padding: 5px 0; - font-size: 0.8rem; - border: 1px solid #ddd; - border-radius: 5px; - box-shadow: 3px 3px 3px #ddd; - text-align: left; -} - -.dropdown-menu::after { - background: #fff; - width: 10px; - height: 10px; - border-top: 1px solid #ddd; - border-left: 1px solid #ddd; - content: ""; - position: absolute; - top: -6px; - right: 13px; - z-index: -10; - transform: rotate(45deg); -} - -.dropdown-header { - padding: 0 5px 5px; - color: #888; - font-weight: bold; - text-align: left; -} - -.dropdown-menu > .item > a, -.dropdown-menu > .item > span, -.dropdown-menu > .item > .as-link { - padding: 0 22px; - line-height: 2.5em; - font-size: 0.8rem; -} - -.dropdown-menu > .item > a:hover, -.dropdown-menu > .item > button:hover { - background: #0062be; - color: #fff; -} - -.dropdown-menu > .item:hover .icon { - filter: grayscale(100%) brightness(2.5); -} - -.dropdown-menu > .item[aria-checked="true"] > a::before { - font-weight: bold; - margin: 0 0 0 -14px; -} - -.dropdown-menu .input select, -.dropdown-menu .input input { - margin: 0 auto 5px; - padding: 2px 5px; - border-radius: 3px; -} - -.separator { - margin: 5px 0; - border-bottom: 1px solid #ddd; -} - /*=== Alerts */ -.alert { - margin: 15px auto; - padding: 10px 15px; - background: #f4f4f4; - color: #aaa; - font-size: 0.9em; - border: 1px solid #ccc; - border-right: 1px solid #aaa; - border-bottom: 1px solid #aaa; - border-radius: 5px; - text-shadow: 0 0 1px #eee; -} - -.alert-head { - font-size: 1.15em; -} - -.alert > a { - color: inherit; - text-decoration: underline; -} - -.alert-warn { - background: #ffe; - color: #c95; - border: 1px solid #eeb; -} - -.alert-success { - background: #dfd; - color: #484; - border: 1px solid #cec; -} - -.alert-error { - background: #fdd; - color: #844; - border: 1px solid #ecc; -} - /*=== Pagination */ -.pagination { - background: #fafafa; - color: #333; -} - -.pagination .item a { - color: #333; -} - -.pagination .item a:hover { - background: #ddd; -} - -.pagination:first-child .item { - border-bottom: 1px solid #aaa; -} - -.pagination:last-child .item { - border-top: 1px solid #aaa; -} - /*=== Boxes */ -.box { - background: #fff; - border-radius: 5px; - box-shadow: 0 0 3px #bbb; -} - -.box .box-title { - margin: 0; - padding: 5px 10px; - background: #f6f6f6; - border-bottom: 1px solid #ddd; - border-radius: 5px 5px 0 0; -} - -.box .box-title .configure { - margin-right: 4px; -} - -.box .box-content { - padding-left: 30px; - min-height: 2.5em; - max-height: 260px; -} - -.box .box-content .item { - font-size: 0.9rem; - line-height: 2.5em; -} - /*=== Tree */ -.tree { - margin: 10px 0; -} - .tree-folder-title { - position: relative; padding: 0 5px; - background: #fff; line-height: 2rem; font-size: 0.9rem; } -.tree-folder-title .title { - background: inherit; - color: #444; -} - -.tree-folder-title .title:hover { - text-decoration: none; -} - -.tree-folder.active .tree-folder-title { - background: #f0f0f0; - font-weight: bold; -} - -.tree-folder.active .tree-folder-title .title { - color: #0062be; -} - -.tree-folder-items { - background: #f6f6f6; - border-top: 1px solid #ccc; - border-bottom: 1px solid #ccc; -} - .tree-folder-items > .item { - padding: 0 10px; line-height: 2.2rem; - font-size: 0.8rem; -} - -.tree-folder-items > .item.active { - background: #0062be; -} - -.tree-folder-items > .item > a { - text-decoration: none; -} - -.tree-folder-items > .item.active > a { - color: #fff; } /*=== STRUCTURE */ /*===============*/ /*=== Header */ .header { - background: #f4f4f4; height: 40px; } .header > .item { padding: 0px; - border-bottom: 1px solid #aaa; - vertical-align: middle; - text-align: center; -} - -.header > .item.title { - width: 230px; } .header .item.configure .btn, @@ -593,11 +83,6 @@ a.btn, .header > .item.search input { padding: 1px 5px; - width: 230px; -} - -.header .item.search input:focus { - width: 350px; } /*=== Body */ @@ -605,202 +90,37 @@ a.btn, height: calc(100vh - 40px); } -.aside { - background: #fff; - border-right: 1px solid #aaa; -} - -.aside.aside_feed { - padding: 10px 0; - text-align: center; - background: #fff; -} - -.aside.aside_feed .tree { - margin: 10px 0 50px; -} - /*=== Aside main page (categories) */ .aside.aside_feed .category .title:not([data-unread="0"])::after, .global .box.category .title:not([data-unread="0"])::after { margin: 0.5em 0 0 0; - background-color: #f6f6f6; - color: #444; } .aside.aside_feed .feed .item-title:not([data-unread="0"])::after { margin: 0.75em 0 0 0; - background-color: white; - color: #444; } /*=== Aside main page (feeds) */ -.feed.item.empty.active { - background: #e67e22; -} - -.feed.item.error.active { - background: #bd362f; -} - -.feed.item.empty, -.feed.item.empty > a { - color: #e67e22; -} - -.feed.item.error, -.feed.item.error > a { - color: #bd362f; -} - -.feed.item.empty.active, -.feed.item.error.active, -.feed.item.empty.active > a, -.feed.item.error.active > a { - color: #fff; -} - -.aside_feed .tree-folder-items .dropdown-menu::after { - left: 2px; -} - -.aside_feed .tree-folder-items .item .dropdown-target:target ~ .dropdown-toggle > .icon, -.aside_feed .tree-folder-items .item.active .dropdown-toggle > .icon { - background-color: #fff; - border-radius: 3px; -} - /*=== Configuration pages */ -.post { - padding: 10px 50px; - font-size: 0.9em; -} - -.post form { - margin: 10px 0; -} - -.post.content { - max-width: 550px; -} - /*=== Prompt (centered) */ -.prompt .form-group { - margin-bottom: 1rem; -} - -.prompt .form-group::after { - display: none; -} - -.prompt .form-group.form-group-actions { - display: flex; - margin-top: 2rem; - align-items: center; - justify-content: space-between; -} - -.prompt .btn.btn-important { - padding-left: 1.5rem; - padding-right: 1.5rem; - font-size: 1.1rem; -} - /*=== New article notification */ -#new-article { - background: #0084cc; - text-align: center; - font-size: 0.9em; -} - #new-article > a { line-height: 3em; - color: #fff; - font-weight: bold; -} - -#new-article > a:hover { - text-decoration: none; - background: #06c; } /*=== Day indication */ .day { - padding: 0 10px; - background: #fff; font-size: 0.9rem; - border-top: 1px solid #aaa; - border-bottom: 1px solid #aaa; - font-weight: bold; line-height: 2em; } -#new-article + .day { - border-top: none; -} - .day .name { - padding: 0 10px 0 0; - color: #aab; font-size: 1em; opacity: 0.6; - font-style: italic; - text-align: right; } /*=== Index menu */ -.nav_menu { - padding: 5px 0; - background: #fafafa; - border-bottom: 1px solid #aaa; - text-align: center; -} - /*=== Feed articles */ -.flux { - background: #fafafa; - border-left: 2px solid #aaa; -} - -.flux:hover { - background: #fff; -} - -.flux.current { - background: #fff; - border-left: 2px solid #0062be; -} - -.flux.not_read { - border-left-color: #ff5300; -} - -.flux.not_read:not(.current) { - background: #fff3ed; -} - -.flux.not_read:not(.current):hover .item.title { - background: inherit; -} - -.flux.favorite { - border-left: 2px solid #ffc300; -} - -.flux.favorite:not(.current) { - background: #fff6da; -} - -.flux.favorite:not(.current):hover .item.title { - background: #fff6da; -} - -.flux_header { - font-size: 0.8rem; - border-top: 1px solid #ddd; - cursor: pointer; -} - .flux_header .title { font-size: 0.8rem; } @@ -842,20 +162,6 @@ a.btn, max-height: 1.5em; } -.flux .website .favicon { - padding: 5px; -} - -.flux .item.date { - color: #666; - font-size: 0.7rem; -} - -.flux .bottom { - font-size: 0.8rem; - text-align: center; -} - /*=== Content of feed articles */ .content { padding: 10px 10px; @@ -865,299 +171,41 @@ a.btn, display: none; } -.content > h1.title > a { - color: #000; -} - -.content hr { - margin: 30px 10px; - background: #ddd; - height: 1px; - border: 0; - box-shadow: 0 2px 5px #ccc; -} - -.content pre { - margin: 10px auto; - padding: 10px 20px; - overflow: auto; - background: #222; - color: #fff; - font-size: 0.9rem; - border-radius: 3px; -} - -.content code { - padding: 2px 5px; - background: #fafafa; - color: #d14; - border: 1px solid #eee; - border-radius: 3px; -} - -.content pre code { - background: transparent; - color: #fff; - border: none; -} - -.content blockquote { - margin: 0; - padding: 5px 20px; - background: #fafafa; - display: block; - color: #333; - border-top: 1px solid #ddd; - border-bottom: 1px solid #ddd; -} - -.content blockquote p { - margin: 0; -} - /*=== Notification and actualize notification */ -.notification { - font-size: 0.9em; - border: 1px solid #eeb; - border-radius: 3px; - box-shadow: 0 0 5px #ddd; - text-align: center; - font-weight: bold; - vertical-align: middle; -} - -.notification.good { - background: #ffe; - color: #c95; - border: 1px solid #eeb; -} - -.notification.bad { - background: #fdd; - color: #844; - border: 1px solid #ecc; -} - -.notification a.close { - padding: 0 15px; - line-height: 3em; -} - -.notification.good a.close:hover { - background: #eeb; -} - -.notification.bad a.close:hover { - background: #ecc; -} - -.notification#actualizeProgress { - line-height: 2em; -} - /*=== "Load more" part */ #bigMarkAsRead { - background: #fafafa; - color: #666; font-size: 1.2em; - text-align: center; - text-decoration: none; -} - -#bigMarkAsRead:hover { - background: #fff; - color: #0062be; - box-shadow: 0 -5px 10px #eee inset; } #bigMarkAsRead .bigTick { font-size: 3em; } -#bigMarkAsRead:hover .bigTick { - text-shadow: 0 0 5px #0062be; -} - /*=== Navigation menu (for articles) */ #nav_entries { - margin: 0; - background: #fff; - border-top: 1px solid #ddd; - text-align: center; line-height: 2.2em; - table-layout: fixed; } /*=== READER VIEW */ /*================*/ -#stream.reader .flux { - padding: 0 0 50px; - background: #f0f0f0; - color: #333; - border: none; -} - -#stream.reader .flux .author { - margin: 0 0 10px; - color: #666; - font-size: 90%; -} - /*=== GLOBAL VIEW */ /*================*/ -.box.category:not([data-unread="0"]) .box-title { - background: #0084cc; -} - -.box.category .box-title .title { - display: block; - font-weight: normal; -} - -.box.category:not([data-unread="0"]) .box-title .title { - color: #fff; - font-weight: bold; -} - -.box.category .title:not([data-unread="0"])::after { - background: none; - color: #fff; - border: 0; - box-shadow: none; - position: absolute; - top: 5px; right: 10px; - font-weight: bold; - text-shadow: none; -} - -.box.category .item.feed { - padding: 2px 10px; - font-size: 0.8rem; -} - /*=== DIVERS */ /*===========*/ -.aside.aside_feed .nav-form input, -.aside.aside_feed .nav-form select { - width: 140px; -} - -.aside.aside_feed .nav-form .dropdown .dropdown-menu { - right: -20px; -} - -.aside.aside_feed .nav-form .dropdown .dropdown-menu::after { - right: 33px; -} - /*=== STATISTICS */ /*===============*/ -.stat { - margin: 10px 0 20px; -} - -.stat th, -.stat td, -.stat tr { - border: none; -} - -.stat > table td, -.stat > table th { - border-bottom: 1px solid #ddd; -} - /*=== MOBILE */ /*===========*/ @media (max-width: 840px) { - .form-group .group-name { - padding-bottom: 0; - text-align: left; - } - - .aside { - transition: width 200ms linear; - } - - .aside:target { - box-shadow: 3px 0 3px #aaa; - } - - .aside .toggle_aside, - #panel .close, - .dropdown-menu .toggle_aside { - background: #f6f6f6; - display: block; - width: 100%; - height: 50px; - border-bottom: 1px solid #ddd; - line-height: 50px; - text-align: center; - } - - .aside.aside_feed { - padding: 0; - } - - .nav_menu .btn { - margin: 5px 10px; - padding: 3px 5px; - min-height: 0; - } - - .nav_menu .stick { - margin: 0 10px; - } - - .nav_menu .stick .btn { - margin: 5px 0; - } - - .nav_menu .search { - display: inline-block; - max-width: 97%; - } - .nav_menu .search input { padding: 1px 5px; - max-width: 97%; - width: 90px; - } - - .nav_menu .search input:focus { - width: 400px; - } - - .dropdown-target:target ~ .dropdown-toggle::after { - background-color: #fff; - border-top: 1px solid #ddd; - border-left: 1px solid #ddd; } .dropdown-target:target ~ .dropdown-toggle:not(.btn) ~ .dropdown-menu { margin-top: 5px; } - .day .name { - font-size: 1.1rem; - text-shadow: none; - } - - .notification a.close { - background: transparent; - display: block; - left: 0; - } - - .notification a.close:hover { - opacity: 0.5; - } - - .notification a.close .icon { - display: none; - } - .post { padding-left: 15px; padding-right: 15px; diff --git a/p/themes/Origine-compact/origine-compact.rtl.css b/p/themes/Origine-compact/origine-compact.rtl.css index 0315c32dcb7..4b6601cb056 100644 --- a/p/themes/Origine-compact/origine-compact.rtl.css +++ b/p/themes/Origine-compact/origine-compact.rtl.css @@ -2,177 +2,29 @@ /*=== GENERAL */ /*============*/ -html, body { - background: #fafafa; - font-family: "OpenSans", "Cantarell", "Helvetica", "Arial", "PingFang SC", "Microsoft YaHei", sans-serif; -} - -/*=== Links */ -a, button.as-link { - color: #0062be; - outline: none; -} - -/*=== Forms */ -legend { - margin: 20px 0 5px; - padding: 5px 0; - font-size: 1.4em; - border-bottom: 1px solid #ddd; -} - -label { - min-height: 25px; - padding: 5px 0; - cursor: pointer; -} - -textarea { - width: 360px; - height: 100px; -} - input, select, textarea { padding: 3px 5px 2px 5px; - background: #fdfdfd; - color: #666; - border: 1px solid #bbb; - border-radius: 3px; - box-shadow: 0 2px 2px #eee inset; min-height: 25px; line-height: 25px; - vertical-align: middle; -} - -option { - padding: 0 .5em; -} - -input:focus, select:focus, textarea:focus { - color: #0062be; - border-color: #3bf; - box-shadow: 0 2px 2px #ddf inset; -} - -input:invalid, select:invalid { - border-color: #f00; - box-shadow: 0 0 2px 2px #fdd inset; -} - -input:disabled, select:disabled { - background: #eee; -} - -input.extend { - transition: width 200ms linear; -} - -/*=== Tables */ -table { - border-collapse: collapse; -} - -tr, th, td { - padding: 0.5em; - border: 1px solid #ddd; -} - -th { - background: #f6f6f6; -} - -form td, -form th { - font-weight: normal; - text-align: center; } /*=== COMPONENTS */ /*===============*/ /*=== Forms */ -.form-group.form-actions { - padding: 5px 0; - background: #f4f4f4; - border-top: 1px solid #ddd; -} - .form-group.form-actions .btn { margin: 0 10px; } -.form-group .group-name { - padding: 10px 0; - text-align: left; -} - .form-group .group-controls { min-height: 25px; padding: 8px 0; } /*=== Buttons */ -.stick input, -.stick .btn { - border-radius: 0; -} - -.stick .btn:first-child, -.stick input:first-child { - border-radius: 0 3px 3px 0; -} - -.stick .btn-important:first-child { - border-left: 1px solid #06f; -} - -.stick .btn:last-child, -.stick input:last-child { - border-radius: 3px 0 0 3px; -} - -.stick .btn + .btn, -.stick .btn + input, -.stick .btn + .dropdown > .btn, -.stick input + .btn, -.stick input + input, -.stick input + .dropdown > .btn, -.stick .dropdown + .btn, -.stick .dropdown + input, -.stick .dropdown + .dropdown > .btn { - border-right: none; -} - -.stick input + .btn { - border-top: 1px solid #bbb; -} - -.stick .btn + .dropdown > .btn { - border-right: none; - border-radius: 3px 0 0 3px; -} - .btn { margin: 0; padding: 5px 10px; - background: #fff; - background: linear-gradient(to bottom, #fff 0%, #eee 100%); - background: -moz-linear-gradient(top, #fff 0%, #eee 100%); - background: -webkit-linear-gradient(top, #fff 0%, #eee 100%); - background: -o-linear-gradient(top, #fff 0%, #eee 100%); - background: -ms-linear-gradient(top, #fff 0%, #eee 100%); - display: inline-block; - color: #666; - font-size: 0.9rem; - border: 1px solid #ddd; - border-left: 1px solid #aaa; - border-bottom: 1px solid #aaa; - border-radius: 3px; min-height: 32px; - min-width: 15px; - text-shadow: 0px -1px 0 #ddd; - vertical-align: middle; - cursor: pointer; - overflow: hidden; } a.btn, @@ -181,161 +33,7 @@ a.btn, line-height: 20px; } -.btn:hover { - background: #f0f0f0; - background: linear-gradient(to bottom, #f8f8f8, #f0f0f0); - background: -moz-linear-gradient(top, #f8f8f8 0%, #f0f0f0 100%); - background: -webkit-linear-gradient(top, #f8f8f8 0%, #f0f0f0 100%); - background: -o-linear-gradient(top, #f8f8f8 0%, #f0f0f0 100%); - background: -ms-linear-gradient(top, #f8f8f8 0%, #f0f0f0 100%); - text-decoration: none; -} - -.btn.active, -.btn:active, -.dropdown-target:target ~ .btn.dropdown-toggle { - background: #eee; - box-shadow: 0px 2px 4px #e0e0e0 inset, 0px 1px 2px #fafafa; -} - -.btn-important { - background: #0084cc; - background: linear-gradient(to bottom, #0084cc, #0045cc); - background: -moz-linear-gradient(top, #0084cc 0%, #0045cc 100%); - background: -webkit-linear-gradient(top, #0084cc 0%, #0045cc 100%); - background: -o-linear-gradient(top, #0084cc 0%, #0045cc 100%); - background: -ms-linear-gradient(top, #0084cc 0%, #0045cc 100%); - color: #fff; - border: 1px solid #0062b7; - text-shadow: 0px -1px 0 #aaa; - font-weight: normal; -} - -.btn-important:hover { - background: linear-gradient(to bottom, #06c, #0045cc); - background: -moz-linear-gradient(top, #06c 0%, #0045cc 100%); - background: -webkit-linear-gradient(top, #06c 0%, #0045cc 100%); - background: -o-linear-gradient(top, #06c 0%, #0045cc 100%); - background: -ms-linear-gradient(top, #06c 0%, #0045cc 100%); -} - -.btn-important:active { - background: #0044cb; - box-shadow: none; -} - -.btn-important .icon { - filter: brightness(3); -} - -.btn-attention { - background: #e95b57; - background: linear-gradient(to bottom, #e95b57, #bd362f); - background: -moz-linear-gradient(top, #e95b57 0%, #bd362f 100%); - background: -webkit-linear-gradient(top, #e95b57 0%, #bd362f 100%); - background: -o-linear-gradient(top, #e95b57 0%, #bd362f 100%); - background: -ms-linear-gradient(top, #e95b57 0%, #bd362f 100%); - color: #fff; - border: 1px solid #c44742; - text-shadow: 0px -1px 0px #666; -} - -.btn-attention:hover { - background: linear-gradient(to bottom, #d14641, #bd362f); - background: -moz-linear-gradient(top, #d14641 0%, #bd362f 100%); - background: -webkit-linear-gradient(top, #d14641 0%, #bd362f 100%); - background: -o-linear-gradient(top, #d14641 0%, #bd362f 100%); - background: -ms-linear-gradient(top, #d14641 0%, #bd362f 100%); -} - -.btn-attention:active { - background: #bd362f; - box-shadow: none; -} - - /*=== Navigation */ -.nav-list .nav-header, -.nav-list .item { - height: 2.5em; - line-height: 2.5em; - font-size: 0.9rem; -} - -.nav-list .item:hover { - background: #fafafa; -} - -.nav-list .item:hover a { - color: #038; -} - -.nav-list .item.active { - background: #0062be; - color: #fff; -} - -.nav-list .item.active a { - color: #fff; -} - -.nav-list .item > a { - padding: 0 10px; -} - -.nav-list a:hover { - text-decoration: none; -} - -.nav-list .item.empty a { - color: #f39c12; -} - -.nav-list .item.active.empty a { - background: #f39c12; - color: #fff; -} - -.nav-list .item.error a { - color: #bd362f; -} - -.nav-list .item.active.error a { - background: #bd362f; - color: #fff; -} - -.nav-list .nav-header { - padding: 0 10px; - background: #f4f4f4; - color: #888; - border-bottom: 1px solid #ddd; - font-weight: bold; - text-shadow: 0 0 1px #ddd; -} - -.nav-list .nav-form { - padding: 3px; - text-align: center; -} - -.nav-head { - margin: 0; - background: #fff; - background: linear-gradient(to bottom, #fff, #f0f0f0); - background: -moz-linear-gradient(top, #fff 0%, #f0f0f0 100%); - background: -webkit-linear-gradient(top, #fff 0%, #f0f0f0 100%); - background: -o-linear-gradient(top, #fff 0%, #f0f0f0 100%); - background: -ms-linear-gradient(top, #fff 0%, #f0f0f0 100%); - border-bottom: 1px solid #ddd; - text-align: left; -} - -.nav-head .item { - padding: 5px 10px; - font-size: 0.9rem; - line-height: 1.5rem; -} /*=== Horizontal-list */ .horizontal-list { @@ -347,237 +45,29 @@ a.btn, } /*=== Dropdown */ -.dropdown-menu { - margin: 5px 0 0; - padding: 5px 0; - font-size: 0.8rem; - border: 1px solid #ddd; - border-radius: 5px; - box-shadow: -3px 3px 3px #ddd; - text-align: right; -} - -.dropdown-menu::after { - background: #fff; - width: 10px; - height: 10px; - border-top: 1px solid #ddd; - border-right: 1px solid #ddd; - content: ""; - position: absolute; - top: -6px; - left: 13px; - z-index: -10; - transform: rotate(-45deg); -} - -.dropdown-header { - padding: 0 5px 5px; - color: #888; - font-weight: bold; - text-align: right; -} - -.dropdown-menu > .item > a, -.dropdown-menu > .item > span, -.dropdown-menu > .item > .as-link { - padding: 0 22px; - line-height: 2.5em; - font-size: 0.8rem; -} - -.dropdown-menu > .item > a:hover, -.dropdown-menu > .item > button:hover { - background: #0062be; - color: #fff; -} - -.dropdown-menu > .item:hover .icon { - filter: grayscale(100%) brightness(2.5); -} - -.dropdown-menu > .item[aria-checked="true"] > a::before { - font-weight: bold; - margin: 0 -14px 0 0; -} - -.dropdown-menu .input select, -.dropdown-menu .input input { - margin: 0 auto 5px; - padding: 2px 5px; - border-radius: 3px; -} - -.separator { - margin: 5px 0; - border-bottom: 1px solid #ddd; -} - /*=== Alerts */ -.alert { - margin: 15px auto; - padding: 10px 15px; - background: #f4f4f4; - color: #aaa; - font-size: 0.9em; - border: 1px solid #ccc; - border-left: 1px solid #aaa; - border-bottom: 1px solid #aaa; - border-radius: 5px; - text-shadow: 0 0 1px #eee; -} - -.alert-head { - font-size: 1.15em; -} - -.alert > a { - color: inherit; - text-decoration: underline; -} - -.alert-warn { - background: #ffe; - color: #c95; - border: 1px solid #eeb; -} - -.alert-success { - background: #dfd; - color: #484; - border: 1px solid #cec; -} - -.alert-error { - background: #fdd; - color: #844; - border: 1px solid #ecc; -} - /*=== Pagination */ -.pagination { - background: #fafafa; - color: #333; -} - -.pagination .item a { - color: #333; -} - -.pagination .item a:hover { - background: #ddd; -} - -.pagination:first-child .item { - border-bottom: 1px solid #aaa; -} - -.pagination:last-child .item { - border-top: 1px solid #aaa; -} - /*=== Boxes */ -.box { - background: #fff; - border-radius: 5px; - box-shadow: 0 0 3px #bbb; -} - -.box .box-title { - margin: 0; - padding: 5px 10px; - background: #f6f6f6; - border-bottom: 1px solid #ddd; - border-radius: 5px 5px 0 0; -} - -.box .box-title .configure { - margin-left: 4px; -} - -.box .box-content { - padding-right: 30px; - min-height: 2.5em; - max-height: 260px; -} - -.box .box-content .item { - font-size: 0.9rem; - line-height: 2.5em; -} - /*=== Tree */ -.tree { - margin: 10px 0; -} - .tree-folder-title { - position: relative; padding: 0 5px; - background: #fff; line-height: 2rem; font-size: 0.9rem; } -.tree-folder-title .title { - background: inherit; - color: #444; -} - -.tree-folder-title .title:hover { - text-decoration: none; -} - -.tree-folder.active .tree-folder-title { - background: #f0f0f0; - font-weight: bold; -} - -.tree-folder.active .tree-folder-title .title { - color: #0062be; -} - -.tree-folder-items { - background: #f6f6f6; - border-top: 1px solid #ccc; - border-bottom: 1px solid #ccc; -} - .tree-folder-items > .item { - padding: 0 10px; line-height: 2.2rem; - font-size: 0.8rem; -} - -.tree-folder-items > .item.active { - background: #0062be; -} - -.tree-folder-items > .item > a { - text-decoration: none; -} - -.tree-folder-items > .item.active > a { - color: #fff; } /*=== STRUCTURE */ /*===============*/ /*=== Header */ .header { - background: #f4f4f4; height: 40px; } .header > .item { padding: 0px; - border-bottom: 1px solid #aaa; - vertical-align: middle; - text-align: center; -} - -.header > .item.title { - width: 230px; } .header .item.configure .btn, @@ -593,11 +83,6 @@ a.btn, .header > .item.search input { padding: 1px 5px; - width: 230px; -} - -.header .item.search input:focus { - width: 350px; } /*=== Body */ @@ -605,202 +90,37 @@ a.btn, height: calc(100vh - 40px); } -.aside { - background: #fff; - border-left: 1px solid #aaa; -} - -.aside.aside_feed { - padding: 10px 0; - text-align: center; - background: #fff; -} - -.aside.aside_feed .tree { - margin: 10px 0 50px; -} - /*=== Aside main page (categories) */ .aside.aside_feed .category .title:not([data-unread="0"])::after, .global .box.category .title:not([data-unread="0"])::after { margin: 0.5em 0 0 0; - background-color: #f6f6f6; - color: #444; } .aside.aside_feed .feed .item-title:not([data-unread="0"])::after { margin: 0.75em 0 0 0; - background-color: white; - color: #444; } /*=== Aside main page (feeds) */ -.feed.item.empty.active { - background: #e67e22; -} - -.feed.item.error.active { - background: #bd362f; -} - -.feed.item.empty, -.feed.item.empty > a { - color: #e67e22; -} - -.feed.item.error, -.feed.item.error > a { - color: #bd362f; -} - -.feed.item.empty.active, -.feed.item.error.active, -.feed.item.empty.active > a, -.feed.item.error.active > a { - color: #fff; -} - -.aside_feed .tree-folder-items .dropdown-menu::after { - right: 2px; -} - -.aside_feed .tree-folder-items .item .dropdown-target:target ~ .dropdown-toggle > .icon, -.aside_feed .tree-folder-items .item.active .dropdown-toggle > .icon { - background-color: #fff; - border-radius: 3px; -} - /*=== Configuration pages */ -.post { - padding: 10px 50px; - font-size: 0.9em; -} - -.post form { - margin: 10px 0; -} - -.post.content { - max-width: 550px; -} - /*=== Prompt (centered) */ -.prompt .form-group { - margin-bottom: 1rem; -} - -.prompt .form-group::after { - display: none; -} - -.prompt .form-group.form-group-actions { - display: flex; - margin-top: 2rem; - align-items: center; - justify-content: space-between; -} - -.prompt .btn.btn-important { - padding-right: 1.5rem; - padding-left: 1.5rem; - font-size: 1.1rem; -} - /*=== New article notification */ -#new-article { - background: #0084cc; - text-align: center; - font-size: 0.9em; -} - #new-article > a { line-height: 3em; - color: #fff; - font-weight: bold; -} - -#new-article > a:hover { - text-decoration: none; - background: #06c; } /*=== Day indication */ .day { - padding: 0 10px; - background: #fff; font-size: 0.9rem; - border-top: 1px solid #aaa; - border-bottom: 1px solid #aaa; - font-weight: bold; line-height: 2em; } -#new-article + .day { - border-top: none; -} - .day .name { - padding: 0 0 0 10px; - color: #aab; font-size: 1em; opacity: 0.6; - font-style: italic; - text-align: left; } /*=== Index menu */ -.nav_menu { - padding: 5px 0; - background: #fafafa; - border-bottom: 1px solid #aaa; - text-align: center; -} - /*=== Feed articles */ -.flux { - background: #fafafa; - border-right: 2px solid #aaa; -} - -.flux:hover { - background: #fff; -} - -.flux.current { - background: #fff; - border-right: 2px solid #0062be; -} - -.flux.not_read { - border-right-color: #ff5300; -} - -.flux.not_read:not(.current) { - background: #fff3ed; -} - -.flux.not_read:not(.current):hover .item.title { - background: inherit; -} - -.flux.favorite { - border-right: 2px solid #ffc300; -} - -.flux.favorite:not(.current) { - background: #fff6da; -} - -.flux.favorite:not(.current):hover .item.title { - background: #fff6da; -} - -.flux_header { - font-size: 0.8rem; - border-top: 1px solid #ddd; - cursor: pointer; -} - .flux_header .title { font-size: 0.8rem; } @@ -842,20 +162,6 @@ a.btn, max-height: 1.5em; } -.flux .website .favicon { - padding: 5px; -} - -.flux .item.date { - color: #666; - font-size: 0.7rem; -} - -.flux .bottom { - font-size: 0.8rem; - text-align: center; -} - /*=== Content of feed articles */ .content { padding: 10px 10px; @@ -865,299 +171,41 @@ a.btn, display: none; } -.content > h1.title > a { - color: #000; -} - -.content hr { - margin: 30px 10px; - background: #ddd; - height: 1px; - border: 0; - box-shadow: 0 2px 5px #ccc; -} - -.content pre { - margin: 10px auto; - padding: 10px 20px; - overflow: auto; - background: #222; - color: #fff; - font-size: 0.9rem; - border-radius: 3px; -} - -.content code { - padding: 2px 5px; - background: #fafafa; - color: #d14; - border: 1px solid #eee; - border-radius: 3px; -} - -.content pre code { - background: transparent; - color: #fff; - border: none; -} - -.content blockquote { - margin: 0; - padding: 5px 20px; - background: #fafafa; - display: block; - color: #333; - border-top: 1px solid #ddd; - border-bottom: 1px solid #ddd; -} - -.content blockquote p { - margin: 0; -} - /*=== Notification and actualize notification */ -.notification { - font-size: 0.9em; - border: 1px solid #eeb; - border-radius: 3px; - box-shadow: 0 0 5px #ddd; - text-align: center; - font-weight: bold; - vertical-align: middle; -} - -.notification.good { - background: #ffe; - color: #c95; - border: 1px solid #eeb; -} - -.notification.bad { - background: #fdd; - color: #844; - border: 1px solid #ecc; -} - -.notification a.close { - padding: 0 15px; - line-height: 3em; -} - -.notification.good a.close:hover { - background: #eeb; -} - -.notification.bad a.close:hover { - background: #ecc; -} - -.notification#actualizeProgress { - line-height: 2em; -} - /*=== "Load more" part */ #bigMarkAsRead { - background: #fafafa; - color: #666; font-size: 1.2em; - text-align: center; - text-decoration: none; -} - -#bigMarkAsRead:hover { - background: #fff; - color: #0062be; - box-shadow: 0 -5px 10px #eee inset; } #bigMarkAsRead .bigTick { font-size: 3em; } -#bigMarkAsRead:hover .bigTick { - text-shadow: 0 0 5px #0062be; -} - /*=== Navigation menu (for articles) */ #nav_entries { - margin: 0; - background: #fff; - border-top: 1px solid #ddd; - text-align: center; line-height: 2.2em; - table-layout: fixed; } /*=== READER VIEW */ /*================*/ -#stream.reader .flux { - padding: 0 0 50px; - background: #f0f0f0; - color: #333; - border: none; -} - -#stream.reader .flux .author { - margin: 0 0 10px; - color: #666; - font-size: 90%; -} - /*=== GLOBAL VIEW */ /*================*/ -.box.category:not([data-unread="0"]) .box-title { - background: #0084cc; -} - -.box.category .box-title .title { - display: block; - font-weight: normal; -} - -.box.category:not([data-unread="0"]) .box-title .title { - color: #fff; - font-weight: bold; -} - -.box.category .title:not([data-unread="0"])::after { - background: none; - color: #fff; - border: 0; - box-shadow: none; - position: absolute; - top: 5px; left: 10px; - font-weight: bold; - text-shadow: none; -} - -.box.category .item.feed { - padding: 2px 10px; - font-size: 0.8rem; -} - /*=== DIVERS */ /*===========*/ -.aside.aside_feed .nav-form input, -.aside.aside_feed .nav-form select { - width: 140px; -} - -.aside.aside_feed .nav-form .dropdown .dropdown-menu { - left: -20px; -} - -.aside.aside_feed .nav-form .dropdown .dropdown-menu::after { - left: 33px; -} - /*=== STATISTICS */ /*===============*/ -.stat { - margin: 10px 0 20px; -} - -.stat th, -.stat td, -.stat tr { - border: none; -} - -.stat > table td, -.stat > table th { - border-bottom: 1px solid #ddd; -} - /*=== MOBILE */ /*===========*/ @media (max-width: 840px) { - .form-group .group-name { - padding-bottom: 0; - text-align: right; - } - - .aside { - transition: width 200ms linear; - } - - .aside:target { - box-shadow: -3px 0 3px #aaa; - } - - .aside .toggle_aside, - #panel .close, - .dropdown-menu .toggle_aside { - background: #f6f6f6; - display: block; - width: 100%; - height: 50px; - border-bottom: 1px solid #ddd; - line-height: 50px; - text-align: center; - } - - .aside.aside_feed { - padding: 0; - } - - .nav_menu .btn { - margin: 5px 10px; - padding: 3px 5px; - min-height: 0; - } - - .nav_menu .stick { - margin: 0 10px; - } - - .nav_menu .stick .btn { - margin: 5px 0; - } - - .nav_menu .search { - display: inline-block; - max-width: 97%; - } - .nav_menu .search input { padding: 1px 5px; - max-width: 97%; - width: 90px; - } - - .nav_menu .search input:focus { - width: 400px; - } - - .dropdown-target:target ~ .dropdown-toggle::after { - background-color: #fff; - border-top: 1px solid #ddd; - border-right: 1px solid #ddd; } .dropdown-target:target ~ .dropdown-toggle:not(.btn) ~ .dropdown-menu { margin-top: 5px; } - .day .name { - font-size: 1.1rem; - text-shadow: none; - } - - .notification a.close { - background: transparent; - display: block; - right: 0; - } - - .notification a.close:hover { - opacity: 0.5; - } - - .notification a.close .icon { - display: none; - } - .post { padding-right: 15px; padding-left: 15px; diff --git a/p/themes/Origine/origine.css b/p/themes/Origine/origine.css index 85362c9db4e..31ab793916a 100644 --- a/p/themes/Origine/origine.css +++ b/p/themes/Origine/origine.css @@ -188,7 +188,8 @@ form th { overflow: hidden; } -a.btn { +a.btn, +.stick .btn { min-height: 25px; line-height: 25px; } diff --git a/p/themes/Origine/origine.rtl.css b/p/themes/Origine/origine.rtl.css index 2d506f1208a..fa0e97a0fe5 100644 --- a/p/themes/Origine/origine.rtl.css +++ b/p/themes/Origine/origine.rtl.css @@ -188,7 +188,8 @@ form th { overflow: hidden; } -a.btn { +a.btn, +.stick .btn { min-height: 25px; line-height: 25px; } From dec399f510b70100671345fca9a1da991b04deed Mon Sep 17 00:00:00 2001 From: maTh Date: Tue, 27 Sep 2022 18:55:23 +0200 Subject: [PATCH 0394/2479] Improved: template.css (colors) (#4641) * font colors * html, body color: moved to the themes * finished font-color * background-colors * fix scrollbar-colors * background colors modal/darken-hover * background-color * loading image * template-background-color-transparent * background-colors (inkl. modal background) * box-shadow * fix:: toggle_aside:hover * background-color * border-color * rgba -> # * improvements * RTL.css --- p/themes/Ansum/ansum.css | 1 + p/themes/Ansum/ansum.rtl.css | 1 + p/themes/Ansum/ansum.scss | 1 + p/themes/BlueLagoon/BlueLagoon.css | 1 + p/themes/BlueLagoon/BlueLagoon.rtl.css | 1 + p/themes/Flat/flat.css | 1 + p/themes/Flat/flat.rtl.css | 1 + p/themes/Mapco/mapco.css | 1 + p/themes/Mapco/mapco.rtl.css | 1 + p/themes/Mapco/mapco.scss | 1 + p/themes/Origine/origine.css | 1 + p/themes/Origine/origine.rtl.css | 1 + p/themes/Screwdriver/screwdriver.css | 1 + p/themes/Screwdriver/screwdriver.rtl.css | 1 + p/themes/Swage/swage.css | 1 + p/themes/Swage/swage.rtl.css | 1 + p/themes/Swage/swage.scss | 1 + p/themes/base-theme/base.css | 2 + p/themes/base-theme/base.rtl.css | 2 + p/themes/base-theme/template.css | 204 ++++++++++++++--------- p/themes/base-theme/template.rtl.css | 204 ++++++++++++++--------- 21 files changed, 267 insertions(+), 162 deletions(-) diff --git a/p/themes/Ansum/ansum.css b/p/themes/Ansum/ansum.css index e241efcf56b..c04a1693783 100644 --- a/p/themes/Ansum/ansum.css +++ b/p/themes/Ansum/ansum.css @@ -1346,6 +1346,7 @@ main.prompt { /*============*/ html, body { background: #f5f0ec; + color: #161a38; font-family: "lato", "Helvetica", "Arial", sans-serif; font-size: 0.875rem; } diff --git a/p/themes/Ansum/ansum.rtl.css b/p/themes/Ansum/ansum.rtl.css index 842ab4d9360..623897993be 100644 --- a/p/themes/Ansum/ansum.rtl.css +++ b/p/themes/Ansum/ansum.rtl.css @@ -1346,6 +1346,7 @@ main.prompt { /*============*/ html, body { background: #f5f0ec; + color: #161a38; font-family: "lato", "Helvetica", "Arial", sans-serif; font-size: 0.875rem; } diff --git a/p/themes/Ansum/ansum.scss b/p/themes/Ansum/ansum.scss index 5457b15aa40..b850bf2b422 100644 --- a/p/themes/Ansum/ansum.scss +++ b/p/themes/Ansum/ansum.scss @@ -36,6 +36,7 @@ /*============*/ html, body { background: variables.$grey-light; + color: variables.$unread-font-color; font-family: "lato", "Helvetica", "Arial", sans-serif; font-size: 0.875rem; } diff --git a/p/themes/BlueLagoon/BlueLagoon.css b/p/themes/BlueLagoon/BlueLagoon.css index 1c6093f3b32..4f290c97cf2 100644 --- a/p/themes/BlueLagoon/BlueLagoon.css +++ b/p/themes/BlueLagoon/BlueLagoon.css @@ -4,6 +4,7 @@ /*============*/ html, body { background: #fafafa; + color: black; font-family: "OpenSans", "Cantarell", "Helvetica", "Arial", "PingFang SC", "Microsoft YaHei", sans-serif; font-size: 92%; } diff --git a/p/themes/BlueLagoon/BlueLagoon.rtl.css b/p/themes/BlueLagoon/BlueLagoon.rtl.css index 18b5607cfa2..247b20aac64 100644 --- a/p/themes/BlueLagoon/BlueLagoon.rtl.css +++ b/p/themes/BlueLagoon/BlueLagoon.rtl.css @@ -4,6 +4,7 @@ /*============*/ html, body { background: #fafafa; + color: black; font-family: "OpenSans", "Cantarell", "Helvetica", "Arial", "PingFang SC", "Microsoft YaHei", sans-serif; font-size: 92%; } diff --git a/p/themes/Flat/flat.css b/p/themes/Flat/flat.css index 275f810eead..d7541f99f17 100644 --- a/p/themes/Flat/flat.css +++ b/p/themes/Flat/flat.css @@ -4,6 +4,7 @@ /*============*/ html, body { background: #fafafa; + color: black; font-family: "OpenSans", "Cantarell", "Helvetica", "Arial", "PingFang SC", "Microsoft YaHei", sans-serif; } diff --git a/p/themes/Flat/flat.rtl.css b/p/themes/Flat/flat.rtl.css index 3f531d578de..0cf0dbdc1e8 100644 --- a/p/themes/Flat/flat.rtl.css +++ b/p/themes/Flat/flat.rtl.css @@ -4,6 +4,7 @@ /*============*/ html, body { background: #fafafa; + color: black; font-family: "OpenSans", "Cantarell", "Helvetica", "Arial", "PingFang SC", "Microsoft YaHei", sans-serif; } diff --git a/p/themes/Mapco/mapco.css b/p/themes/Mapco/mapco.css index 25d9fa0b228..6ecb32b0085 100644 --- a/p/themes/Mapco/mapco.css +++ b/p/themes/Mapco/mapco.css @@ -1377,6 +1377,7 @@ main.prompt { /*============*/ html, body { background: #eff0f2; + color: #36c; font-family: "lato", "Helvetica", "Arial", sans-serif; font-size: 0.875rem; } diff --git a/p/themes/Mapco/mapco.rtl.css b/p/themes/Mapco/mapco.rtl.css index 39f9cba686b..7335484be33 100644 --- a/p/themes/Mapco/mapco.rtl.css +++ b/p/themes/Mapco/mapco.rtl.css @@ -1377,6 +1377,7 @@ main.prompt { /*============*/ html, body { background: #eff0f2; + color: #36c; font-family: "lato", "Helvetica", "Arial", sans-serif; font-size: 0.875rem; } diff --git a/p/themes/Mapco/mapco.scss b/p/themes/Mapco/mapco.scss index 5457b15aa40..b850bf2b422 100644 --- a/p/themes/Mapco/mapco.scss +++ b/p/themes/Mapco/mapco.scss @@ -36,6 +36,7 @@ /*============*/ html, body { background: variables.$grey-light; + color: variables.$unread-font-color; font-family: "lato", "Helvetica", "Arial", sans-serif; font-size: 0.875rem; } diff --git a/p/themes/Origine/origine.css b/p/themes/Origine/origine.css index 31ab793916a..f34bfd7c10a 100644 --- a/p/themes/Origine/origine.css +++ b/p/themes/Origine/origine.css @@ -4,6 +4,7 @@ /*============*/ html, body { background: #fafafa; + color: black; font-family: "OpenSans", "Cantarell", "Helvetica", "Arial", "PingFang SC", "Microsoft YaHei", sans-serif; } diff --git a/p/themes/Origine/origine.rtl.css b/p/themes/Origine/origine.rtl.css index fa0e97a0fe5..da071f80db7 100644 --- a/p/themes/Origine/origine.rtl.css +++ b/p/themes/Origine/origine.rtl.css @@ -4,6 +4,7 @@ /*============*/ html, body { background: #fafafa; + color: black; font-family: "OpenSans", "Cantarell", "Helvetica", "Arial", "PingFang SC", "Microsoft YaHei", sans-serif; } diff --git a/p/themes/Screwdriver/screwdriver.css b/p/themes/Screwdriver/screwdriver.css index 5e546f5adfe..6473a1329ca 100644 --- a/p/themes/Screwdriver/screwdriver.css +++ b/p/themes/Screwdriver/screwdriver.css @@ -4,6 +4,7 @@ /*============*/ html, body { background: #fafafa; + color: black; font-family: "OpenSans", "Cantarell", "Helvetica", "Arial", "PingFang SC", "Microsoft YaHei", sans-serif; font-size: 92%; } diff --git a/p/themes/Screwdriver/screwdriver.rtl.css b/p/themes/Screwdriver/screwdriver.rtl.css index e86209fd8d3..d87523ec24c 100644 --- a/p/themes/Screwdriver/screwdriver.rtl.css +++ b/p/themes/Screwdriver/screwdriver.rtl.css @@ -4,6 +4,7 @@ /*============*/ html, body { background: #fafafa; + color: black; font-family: "OpenSans", "Cantarell", "Helvetica", "Arial", "PingFang SC", "Microsoft YaHei", sans-serif; font-size: 92%; } diff --git a/p/themes/Swage/swage.css b/p/themes/Swage/swage.css index 719df2b1565..b25d980aeb0 100644 --- a/p/themes/Swage/swage.css +++ b/p/themes/Swage/swage.css @@ -46,6 +46,7 @@ select:invalid { html, body { + color: black; font-family: Helvetica, Arial, sans-serif; } diff --git a/p/themes/Swage/swage.rtl.css b/p/themes/Swage/swage.rtl.css index 4a75aeddf0d..6497de09bc6 100644 --- a/p/themes/Swage/swage.rtl.css +++ b/p/themes/Swage/swage.rtl.css @@ -46,6 +46,7 @@ select:invalid { html, body { + color: black; font-family: Helvetica, Arial, sans-serif; } diff --git a/p/themes/Swage/swage.scss b/p/themes/Swage/swage.scss index 68963f7db06..420de3a14bf 100644 --- a/p/themes/Swage/swage.scss +++ b/p/themes/Swage/swage.scss @@ -60,6 +60,7 @@ $color_hover: #fff; // /@extend-elements html, body { + color: black; font-family: Helvetica, Arial, sans-serif; } diff --git a/p/themes/base-theme/base.css b/p/themes/base-theme/base.css index 8321abfc6d3..5edf0257e4c 100644 --- a/p/themes/base-theme/base.css +++ b/p/themes/base-theme/base.css @@ -6,11 +6,13 @@ /*============*/ html, body { height: 100%; + color: black; font-family: "OpenSans", "Cantarell", "Helvetica", "Arial", "PingFang SC", "Microsoft YaHei", sans-serif; } /*=== Links */ a, button.as-link { + color: blue; outline: none; } diff --git a/p/themes/base-theme/base.rtl.css b/p/themes/base-theme/base.rtl.css index e48222bddbe..8ef5e2a2168 100644 --- a/p/themes/base-theme/base.rtl.css +++ b/p/themes/base-theme/base.rtl.css @@ -6,11 +6,13 @@ /*============*/ html, body { height: 100%; + color: black; font-family: "OpenSans", "Cantarell", "Helvetica", "Arial", "PingFang SC", "Microsoft YaHei", sans-serif; } /*=== Links */ a, button.as-link { + color: blue; outline: none; } diff --git a/p/themes/base-theme/template.css b/p/themes/base-theme/template.css index 463db875c20..08c5623ac78 100644 --- a/p/themes/base-theme/template.css +++ b/p/themes/base-theme/template.css @@ -2,6 +2,42 @@ /*=== GENERAL */ /*============*/ +:root { + --template-font-color-dark: #000; + --template-font-color-grey-dark: #666; + --template-font-color-grey-light: #aaa; + --template-font-color-light: #fff; + --template-background-color-error-transparent: #ff000040; + --template-font-color-error: #f00; + + --template-background-color: #fff; + --template-background-color-transparent: #ffffff7f; + --template-background-color-middle: #eee; + --template-background-color-dark: #ccc; + + --template-border-color: #999; + --template-border-color-error: #f00; + + --template-switch-accent-color: #85d885; + + --template-dragdrop-color: #ff0; + --template-dragdrop-color-transparent: #ff02; + + --template-noThumbnailImage-background-color: #ddd; + + --template-darken-background-hover-transparent: #6662; + + --template-modal-background-color-transparent: #0007; + + --template-box-shadow-color-transparent: #0003; + + --template-scrollbar-handle: #0002; + --template-scrollbar-handle-hover: #0005; + --template-scrollbar-track: #0001; + --template-scrollbar-track-hover: #0001; + + --template-loading-image: url("loader.gif"); +} @font-face { font-family: 'OpenSans'; @@ -15,9 +51,8 @@ html, body { margin: 0; padding: 0; - background: white; + background-color: var(--template-background-color); height: 100%; - color: black; font-family: "OpenSans", "Cantarell", "Helvetica", "Arial", sans-serif; font-size: 100%; } @@ -88,11 +123,11 @@ sup { } kbd { - background-color: #eee; + background-color: var(--template-background-color-middle); padding: 2px 4px 2px 24px; display: inline-block; - color: #333; - border: 1px solid #b4b4b4; + color: var(--template-font-color-grey-dark); + border: 1px solid var(--template-border-color); border-radius: 3px; text-indent: -20px; white-space: pre-wrap; @@ -211,7 +246,7 @@ textarea[rows="2"] { } textarea:invalid { - border: 2px dashed red; + border: 2px dashed var(--template-border-color-error); } .prompt textarea, @@ -227,9 +262,9 @@ input:disabled, select:disabled { background-color: transparent; min-width: 75px; - color: lightgray; + color: var(--template-font-color-grey-light); font-style: italic; - border: 1px dashed lightgray; + border: 1px dashed var(--template-border-color); } input[type="radio"], @@ -282,7 +317,7 @@ button.as-link:active { } button.as-link[disabled] { - color: #ddd !important; + color: var(--template-font-color-grey-light) !important; } /*=== Tables */ @@ -420,7 +455,7 @@ a.btn { height: 1.75em; border: 0; border-radius: 1em; - background-color: #ccc; + background-color: var(--template-background-color-dark); cursor: pointer; box-sizing: content-box; background-repeat: no-repeat; @@ -436,7 +471,7 @@ a.btn { } .switch.active { - background-color: rgb(133, 216, 133); + background-color: var(--template-switch-accent-color); background-repeat: no-repeat; background-position: center center; background-image: url('../icons/enabled.svg'); @@ -467,7 +502,7 @@ a.btn { top: 0.2em; width: 1.5em; height: 1.5em; - background-color: #fff; + background-color: var(--template-background-color); background-image: url('../icons/disabled.svg'); background-repeat: no-repeat; background-position: center center; @@ -476,7 +511,7 @@ a.btn { } .switch:not([disabled]):hover::before { - background-color: #eee; + background-color: var(--template-background-color-middle); } .switch.active::before { @@ -509,7 +544,7 @@ a.btn { .btn:focus-visible, input[type="checkbox"]:focus-visible { - outline: 2px solid #ccc; + outline: 2px solid var(--template-border-color); } /*=== Navigation */ @@ -579,9 +614,9 @@ input[type="checkbox"]:focus-visible { .dropdown-menu { margin: 0; - background: #fff; + background-color: var(--template-background-color); display: none; - border: 1px solid #aaa; + border: 1px solid var(--template-border-color); min-width: 200px; position: absolute; right: 0; @@ -593,6 +628,7 @@ input[type="checkbox"]:focus-visible { height: 10px; border-width: 1px 0 0 1px; border-style: solid; + border-color: var(--template-border-color); content: ""; position: absolute; top: -6px; @@ -660,7 +696,7 @@ input[type="checkbox"]:focus-visible { .separator { display: block; height: 0; - border-bottom: 1px solid #aaa; + border-bottom: 1px solid var(--template-border-color); } /*=== Alerts */ @@ -705,7 +741,7 @@ input[type="checkbox"]:focus-visible { margin: 0 0 5em; padding: 1em 0; width: 100%; - border-top: 1px solid #aaa; + border-top: 1px solid var(--template-border-color); text-align: center; } @@ -756,7 +792,6 @@ input[type="checkbox"]:focus-visible { display: inline-block; max-width: 95%; width: 20rem; - border: 1px solid #ccc; vertical-align: top; } @@ -815,7 +850,7 @@ input[type="checkbox"]:focus-visible { } .dragging { - background-color: rgba(255, 255, 0, 0.7); + background-color: var(--template-dragdrop-color) } .dragging .icon { @@ -827,17 +862,17 @@ input[type="checkbox"]:focus-visible { } .drag-active .drop-zone:not(.drag-disallowed) { - background: repeating-linear-gradient(45deg, transparent, transparent 40px, rgba(250,250,210, 0.7) 40px, rgba(250,250,210, 0.7) 60px); + background: repeating-linear-gradient(45deg, transparent, transparent 40px, var(--template-dragdrop-color-transparent) 40px, var(--template-dragdrop-color-transparent) 60px); } .drag-active .drag-hover.drop-zone { - background: rgba(250,250,210, 0.7); + background-color: var(--template-dragdrop-color-transparent); transition: background 0.5s; } li.drag-hover { margin: 0 0 5px; - border-bottom: 2px solid #ccc; + border-bottom: 2px solid var(--template-border-color); } .drag-drop { @@ -847,11 +882,11 @@ li.drag-hover { @keyframes droppedKeyframe { 0% { - background-color: rgba(250,250,210, 0.7); + background-color: var(--template-dragdrop-color-transparent); } 50% { - background-color: yellow; + background-color: var(--template-dragdrop-color); } 100% { @@ -864,33 +899,38 @@ li.drag-hover { @supports (scrollbar-width: thin) { #sidebar, .scrollbar-thin { - scrollbar-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.05); + scrollbar-color: var(--template-scrollbar-handle) var(--template-scrollbar-track); scrollbar-width: thin; } #sidebar:hover, .scrollbar-thin:hover { - scrollbar-color: rgba(0, 0, 0, 0.3) rgba(0, 0, 0, 0.05); + scrollbar-color: var(--template-scrollbar-handle-hover) var(--template-scrollbar-track-hover); } } @supports not (scrollbar-width: thin) { #sidebar::-webkit-scrollbar, .scrollbar-thin::-webkit-scrollbar { - background: rgba(0, 0, 0, 0.05); + background-color: var(--template-scrollbar-track); width: 8px; } + #sidebar:hover::-webkit-scrollbar, + .scrollbar-thin:hover::-webkit-scrollbar { + background-color: var(--template-scrollbar-track-hover); + } + #sidebar::-webkit-scrollbar-thumb, .scrollbar-thin::-webkit-scrollbar-thumb { - background: rgba(0, 0, 0, 0.1); + background-color: var(--template-scrollbar-handle); display: unset; border-radius: 5px; } #sidebar:hover::-webkit-scrollbar-thumb, - .scrollbar-thin::-webkit-scrollbar-thumb { - background: rgba(0, 0, 0, 0.3); + .scrollbar-thin:hover::-webkit-scrollbar-thumb { + background-color: var(--template-scrollbar-handle-hover); } } @@ -1045,6 +1085,13 @@ input[type="search"] { visibility: visible; } +.aside .toggle_aside:hover, +#panel .close:hover, +#slider .toggle_aside:hover, +.dropdown-menu .toggle_aside:hover { + background-color: var(--template-darken-background-hover-transparent); +} + /*=== New article notification */ #new-article { display: none; @@ -1101,7 +1148,7 @@ a.website:hover .favicon { } .flux:not(.current):hover .item.title { - background: #fff; + background-color: var(--template-background-color); max-width: calc(100% - 320px); position: absolute; } @@ -1111,7 +1158,7 @@ a.website:hover .favicon { } .flux .item.title a { - color: #000; + color: var(--template-font-color-dark); text-decoration: none; } @@ -1150,7 +1197,7 @@ a.website:hover .favicon { } .flux .item.thumbnail img { - background: repeating-linear-gradient( -45deg, #ddd, #ddd 5px, transparent 5px, transparent 10px ); + background: repeating-linear-gradient( -45deg, var(--template-noThumbnailImage-background-color), var(--template-noThumbnailImage-background-color) 5px, transparent 5px, transparent 10px ); display: inline-block; width: 100%; height: 100%; @@ -1160,7 +1207,7 @@ a.website:hover .favicon { .flux .item.title .summary { max-height: 3em; - color: #666; + color: var(--template-font-color-grey-dark); font-size: 0.9em; line-height: 1.5em; font-weight: normal; @@ -1171,7 +1218,7 @@ a.website:hover .favicon { .flux .item.title .author { padding-left: 1rem; - color: #555; + color: var(--template-font-color-grey-dark); font-size: .9rem; font-weight: normal; } @@ -1229,14 +1276,14 @@ a.website:hover .favicon { .content > header, .content > footer { - color: #666; + color: var(--template-font-color-grey-light); font-size: .9rem; } .content > footer { margin: 2rem 0 2rem; padding-top: 1rem; - border-top: 2px solid #ccc; + border-top: 2px solid var(--template-border-color); clear: both; } @@ -1309,8 +1356,8 @@ br { top: 1em; left: 25%; right: 25%; z-index: 9999; - background: #fff; - border: 1px solid #aaa; + background-color: var(--template-background-color); + border: 1px solid var(--template-border-color); opacity: 1; line-height: 2; visibility: visible; @@ -1330,7 +1377,7 @@ br { } .notification a.close:hover { - background: rgba(10,10,10,0.05); + background-color: var(--template-darken-background-hover-transparent); } .notification a.close:hover .icon { @@ -1360,8 +1407,7 @@ br { width: 100%; height: 100%; overflow: auto; - background-color: #eee; - background-color: rgba(0,0,0,0.4); + background-color: var(--template-modal-background-color-transparent); } #popup-content { @@ -1370,9 +1416,9 @@ br { width: 80%; height: 80%; overflow: hidden; - background-color: #fafafa; + background-color: var(--template-background-color); border-radius: .25rem; - box-shadow: 0 0 1px #737373, 1px 2px 3px #4a4a4f; + box-shadow: 3px 3px 5px var(--template-box-shadow-color-transparent); } .popup-row { @@ -1385,14 +1431,14 @@ br { width: 27px; height: 27px; padding-bottom: 5px; - color: #aaa; + color: var(--template-font-color-grey-light); font-size: 28px; font-weight: bold; } #popup-close:hover, #popup-close:focus { - color: #000; + color: var(--template-font-color-dark); text-decoration: none; cursor: pointer; } @@ -1414,7 +1460,6 @@ br { /*=== Navigation menu (for articles) */ #nav_entries { - background: #fff; display: table; position: fixed; bottom: 0; left: 0; @@ -1444,12 +1489,12 @@ br { #load_more.loading, #load_more.loading:hover { padding: 10px 20px; - background: url("loader.gif") center center no-repeat #fff; + background: var(--template-loading-image) center center no-repeat var(--template-background-color); font-size: 0; } .loading { - background: url("loader.gif") center center no-repeat; + background: var(--template-loading-image) center center no-repeat; font-size: 0; } @@ -1516,7 +1561,7 @@ br { position: fixed; top: 0; bottom: 0; left: 0; right: 0; - background: rgba(0, 0, 0, 0.5); + background-color: var(--template-modal-background-color-transparent); opacity: 0; transition: visibility .3s, opacity .3s; visibility: hidden; @@ -1528,7 +1573,7 @@ br { } #panel { - background: #fff; + background-color: var(--template-background-color); display: none; position: fixed; top: 2%; bottom: 2%; @@ -1549,18 +1594,18 @@ br { /*=== Slider */ #slider { - background: #fff; + background-color: var(--template-background-color); width: 0; position: fixed; top: 0; bottom: 0; right: 0; overflow: auto; - border-left: 1px solid #aaa; z-index: 100; } #slider.active:target { width: 750px; + box-shadow: -3px 3px 5px var(--template-box-shadow-color-transparent); } #slider.sliding { @@ -1575,7 +1620,7 @@ br { } #slider.active:target + #close-slider { - background: rgba(0, 0, 0, 0.2); + background-color: var(--template-modal-background-color-transparent); font-size: 0; left: 0; z-index: 99; @@ -1608,7 +1653,7 @@ br { display: block; max-width: 640px; height: 320px; - border: 1px solid #aaa; + border: 1px solid var(--template-border-color); position: relative; min-width: 260px; margin-bottom: 30px; @@ -1643,7 +1688,7 @@ br { display: none; width: 65px; height: 100%; - color: #fff; + color: var(--template-font-color-light); font-family: "Varela Round", sans-serif; font-size: 1000%; position: absolute; @@ -1653,20 +1698,20 @@ br { transition: opacity .2s; text-align: center; line-height: 225%; - background-color: rgba(255, 255, 255, .3); + background-color: var(--template-background-color-transparent); text-shadow: 0px 0px 15px rgb(119, 119, 119); } .properties { padding: 5px; - background: rgba(255, 255, 255, 0.7); + background-color: var(--template-background-color-transparent); display: none; - color: #000; - border-top: 1px solid #aaa; + border-top: 1px solid var(--template-border-color); bottom: 0; left: 0; right: 0; position: absolute; z-index: 10; + backdrop-filter: blur(3px); } .properties .page-number { @@ -1708,18 +1753,18 @@ input:checked + .slide-container .properties { } .log-item.log-error { - background-color: #bd362f44; + background-color: var(--template-background-color-error-transparent); } .item.share.error a::after, .category .title.error::before, .item.feed.error .item-title::before { content: " ⚠ "; - color: #bd362f; + color: var(--template-font-color-error); } .feed.item.error.active .item-title::before { - color: white; + color: var(--template-font-color-light); } .aside .category .title:not([data-unread="0"])::after, @@ -1760,9 +1805,8 @@ input:checked + .slide-container .properties { } .feed.active .item-title:not([data-unread="0"])::after { - background-color: transparent; - color: white; - border: 1px solid #fff; + color: var(--template-font-color-light); + border: 1px solid var(--template-border-color); font-weight: bold; } @@ -1859,15 +1903,18 @@ input:checked + .slide-container .properties { display: none; } + .aside:target { + box-shadow: 3px 3px 5px var(--template-box-shadow-color-transparent); + } + .aside .toggle_aside, #panel .close, .dropdown-menu .toggle_aside, #slider .toggle_aside { - background: #f6f6f6; display: block; width: 100%; height: 50px; - border-bottom: 1px solid #ddd; + border-bottom: 1px solid var(--template-border-color); line-height: 50px; text-align: center; } @@ -1916,7 +1963,7 @@ input:checked + .slide-container .properties { } .dropdown-target:target ~ .dropdown-toggle::after { - background-color: #fff; + background-color: var(--template-background-color); width: 10px; height: 10px; content: ""; @@ -1943,7 +1990,7 @@ input:checked + .slide-container .properties { padding-top: 0; margin-top: 0; overflow: auto; - box-shadow: -3px 0 3px #aaa; + box-shadow: -3px 0 3px var(--template-box-shadow-color-transparent); } .configure .dropdown-target:target ~ .dropdown-toggle::after { @@ -1974,7 +2021,7 @@ input:checked + .slide-container .properties { .aside:target + .close-aside, .configure .dropdown-target:target ~ .dropdown-close { - background: rgba(0, 0, 0, 0.2); + background-color: var(--template-modal-background-color-transparent); display: block; font-size: 0; position: fixed; @@ -2080,8 +2127,7 @@ input:checked + .slide-container .properties { } html, body { - background: #fff; - color: #000; + background-color: var(--template-background-color); font-family: Serif; } @@ -2095,7 +2141,7 @@ input:checked + .slide-container .properties { } .flux_content .content a { - color: #000; + color: var(--template-font-color-dark); } .flux_content .content a::after { @@ -2112,8 +2158,8 @@ input:checked + .slide-container .properties { padding: 1rem; max-width: 1000px; text-align: center; - background-color: #eee; - border: 1px solid #e0e0e0; + background-color: var(--template-background-color-middle); + border: 1px solid var(--template-border-color); border-radius: .25rem; } @@ -2129,10 +2175,6 @@ input:checked + .slide-container .properties { margin-left: 1rem; } -.preview_background { - background-color: transparent; -} - .drag-drop-marker { margin: -1px; } diff --git a/p/themes/base-theme/template.rtl.css b/p/themes/base-theme/template.rtl.css index 8e7f2c99256..a6428f009cb 100644 --- a/p/themes/base-theme/template.rtl.css +++ b/p/themes/base-theme/template.rtl.css @@ -2,6 +2,42 @@ /*=== GENERAL */ /*============*/ +:root { + --template-font-color-dark: #000; + --template-font-color-grey-dark: #666; + --template-font-color-grey-light: #aaa; + --template-font-color-light: #fff; + --template-background-color-error-transparent: #ff000040; + --template-font-color-error: #f00; + + --template-background-color: #fff; + --template-background-color-transparent: #ffffff7f; + --template-background-color-middle: #eee; + --template-background-color-dark: #ccc; + + --template-border-color: #999; + --template-border-color-error: #f00; + + --template-switch-accent-color: #85d885; + + --template-dragdrop-color: #ff0; + --template-dragdrop-color-transparent: #ff02; + + --template-noThumbnailImage-background-color: #ddd; + + --template-darken-background-hover-transparent: #6662; + + --template-modal-background-color-transparent: #0007; + + --template-box-shadow-color-transparent: #0003; + + --template-scrollbar-handle: #0002; + --template-scrollbar-handle-hover: #0005; + --template-scrollbar-track: #0001; + --template-scrollbar-track-hover: #0001; + + --template-loading-image: url("loader.gif"); +} @font-face { font-family: 'OpenSans'; @@ -15,9 +51,8 @@ html, body { margin: 0; padding: 0; - background: white; + background-color: var(--template-background-color); height: 100%; - color: black; font-family: "OpenSans", "Cantarell", "Helvetica", "Arial", sans-serif; font-size: 100%; } @@ -88,11 +123,11 @@ sup { } kbd { - background-color: #eee; + background-color: var(--template-background-color-middle); padding: 2px 24px 2px 4px; display: inline-block; - color: #333; - border: 1px solid #b4b4b4; + color: var(--template-font-color-grey-dark); + border: 1px solid var(--template-border-color); border-radius: 3px; text-indent: -20px; white-space: pre-wrap; @@ -211,7 +246,7 @@ textarea[rows="2"] { } textarea:invalid { - border: 2px dashed red; + border: 2px dashed var(--template-border-color-error); } .prompt textarea, @@ -227,9 +262,9 @@ input:disabled, select:disabled { background-color: transparent; min-width: 75px; - color: lightgray; + color: var(--template-font-color-grey-light); font-style: italic; - border: 1px dashed lightgray; + border: 1px dashed var(--template-border-color); } input[type="radio"], @@ -282,7 +317,7 @@ button.as-link:active { } button.as-link[disabled] { - color: #ddd !important; + color: var(--template-font-color-grey-light) !important; } /*=== Tables */ @@ -420,7 +455,7 @@ a.btn { height: 1.75em; border: 0; border-radius: 1em; - background-color: #ccc; + background-color: var(--template-background-color-dark); cursor: pointer; box-sizing: content-box; background-repeat: no-repeat; @@ -436,7 +471,7 @@ a.btn { } .switch.active { - background-color: rgb(133, 216, 133); + background-color: var(--template-switch-accent-color); background-repeat: no-repeat; background-position: center center; background-image: url('../icons/enabled.svg'); @@ -467,7 +502,7 @@ a.btn { top: 0.2em; width: 1.5em; height: 1.5em; - background-color: #fff; + background-color: var(--template-background-color); background-image: url('../icons/disabled.svg'); background-repeat: no-repeat; background-position: center center; @@ -476,7 +511,7 @@ a.btn { } .switch:not([disabled]):hover::before { - background-color: #eee; + background-color: var(--template-background-color-middle); } .switch.active::before { @@ -509,7 +544,7 @@ a.btn { .btn:focus-visible, input[type="checkbox"]:focus-visible { - outline: 2px solid #ccc; + outline: 2px solid var(--template-border-color); } /*=== Navigation */ @@ -579,9 +614,9 @@ input[type="checkbox"]:focus-visible { .dropdown-menu { margin: 0; - background: #fff; + background-color: var(--template-background-color); display: none; - border: 1px solid #aaa; + border: 1px solid var(--template-border-color); min-width: 200px; position: absolute; left: 0; @@ -593,6 +628,7 @@ input[type="checkbox"]:focus-visible { height: 10px; border-width: 1px 1px 0 0; border-style: solid; + border-color: var(--template-border-color); content: ""; position: absolute; top: -6px; @@ -660,7 +696,7 @@ input[type="checkbox"]:focus-visible { .separator { display: block; height: 0; - border-bottom: 1px solid #aaa; + border-bottom: 1px solid var(--template-border-color); } /*=== Alerts */ @@ -705,7 +741,7 @@ input[type="checkbox"]:focus-visible { margin: 0 0 5em; padding: 1em 0; width: 100%; - border-top: 1px solid #aaa; + border-top: 1px solid var(--template-border-color); text-align: center; } @@ -756,7 +792,6 @@ input[type="checkbox"]:focus-visible { display: inline-block; max-width: 95%; width: 20rem; - border: 1px solid #ccc; vertical-align: top; } @@ -815,7 +850,7 @@ input[type="checkbox"]:focus-visible { } .dragging { - background-color: rgba(255, 255, 0, 0.7); + background-color: var(--template-dragdrop-color) } .dragging .icon { @@ -827,17 +862,17 @@ input[type="checkbox"]:focus-visible { } .drag-active .drop-zone:not(.drag-disallowed) { - background: repeating-linear-gradient(-45deg, transparent, transparent 40px, rgba(250,250,210, 0.7) 40px, rgba(250,250,210, 0.7) 60px); + background: repeating-linear-gradient(-45deg, transparent, transparent 40px, var(--template-dragdrop-color-transparent) 40px, var(--template-dragdrop-color-transparent) 60px); } .drag-active .drag-hover.drop-zone { - background: rgba(250,250,210, 0.7); + background-color: var(--template-dragdrop-color-transparent); transition: background 0.5s; } li.drag-hover { margin: 0 0 5px; - border-bottom: 2px solid #ccc; + border-bottom: 2px solid var(--template-border-color); } .drag-drop { @@ -847,11 +882,11 @@ li.drag-hover { @keyframes droppedKeyframe { 0% { - background-color: rgba(250,250,210, 0.7); + background-color: var(--template-dragdrop-color-transparent); } 50% { - background-color: yellow; + background-color: var(--template-dragdrop-color); } 100% { @@ -864,33 +899,38 @@ li.drag-hover { @supports (scrollbar-width: thin) { #sidebar, .scrollbar-thin { - scrollbar-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.05); + scrollbar-color: var(--template-scrollbar-handle) var(--template-scrollbar-track); scrollbar-width: thin; } #sidebar:hover, .scrollbar-thin:hover { - scrollbar-color: rgba(0, 0, 0, 0.3) rgba(0, 0, 0, 0.05); + scrollbar-color: var(--template-scrollbar-handle-hover) var(--template-scrollbar-track-hover); } } @supports not (scrollbar-width: thin) { #sidebar::-webkit-scrollbar, .scrollbar-thin::-webkit-scrollbar { - background: rgba(0, 0, 0, 0.05); + background-color: var(--template-scrollbar-track); width: 8px; } + #sidebar:hover::-webkit-scrollbar, + .scrollbar-thin:hover::-webkit-scrollbar { + background-color: var(--template-scrollbar-track-hover); + } + #sidebar::-webkit-scrollbar-thumb, .scrollbar-thin::-webkit-scrollbar-thumb { - background: rgba(0, 0, 0, 0.1); + background-color: var(--template-scrollbar-handle); display: unset; border-radius: 5px; } #sidebar:hover::-webkit-scrollbar-thumb, - .scrollbar-thin::-webkit-scrollbar-thumb { - background: rgba(0, 0, 0, 0.3); + .scrollbar-thin:hover::-webkit-scrollbar-thumb { + background-color: var(--template-scrollbar-handle-hover); } } @@ -1045,6 +1085,13 @@ input[type="search"] { visibility: visible; } +.aside .toggle_aside:hover, +#panel .close:hover, +#slider .toggle_aside:hover, +.dropdown-menu .toggle_aside:hover { + background-color: var(--template-darken-background-hover-transparent); +} + /*=== New article notification */ #new-article { display: none; @@ -1101,7 +1148,7 @@ a.website:hover .favicon { } .flux:not(.current):hover .item.title { - background: #fff; + background-color: var(--template-background-color); max-width: calc(100% - 320px); position: absolute; } @@ -1111,7 +1158,7 @@ a.website:hover .favicon { } .flux .item.title a { - color: #000; + color: var(--template-font-color-dark); text-decoration: none; } @@ -1150,7 +1197,7 @@ a.website:hover .favicon { } .flux .item.thumbnail img { - background: repeating-linear-gradient( 45deg, #ddd, #ddd 5px, transparent 5px, transparent 10px ); + background: repeating-linear-gradient( 45deg, var(--template-noThumbnailImage-background-color), var(--template-noThumbnailImage-background-color) 5px, transparent 5px, transparent 10px ); display: inline-block; width: 100%; height: 100%; @@ -1160,7 +1207,7 @@ a.website:hover .favicon { .flux .item.title .summary { max-height: 3em; - color: #666; + color: var(--template-font-color-grey-dark); font-size: 0.9em; line-height: 1.5em; font-weight: normal; @@ -1171,7 +1218,7 @@ a.website:hover .favicon { .flux .item.title .author { padding-right: 1rem; - color: #555; + color: var(--template-font-color-grey-dark); font-size: .9rem; font-weight: normal; } @@ -1229,14 +1276,14 @@ a.website:hover .favicon { .content > header, .content > footer { - color: #666; + color: var(--template-font-color-grey-light); font-size: .9rem; } .content > footer { margin: 2rem 0 2rem; padding-top: 1rem; - border-top: 2px solid #ccc; + border-top: 2px solid var(--template-border-color); clear: both; } @@ -1309,8 +1356,8 @@ br { top: 1em; right: 25%; left: 25%; z-index: 9999; - background: #fff; - border: 1px solid #aaa; + background-color: var(--template-background-color); + border: 1px solid var(--template-border-color); opacity: 1; line-height: 2; visibility: visible; @@ -1330,7 +1377,7 @@ br { } .notification a.close:hover { - background: rgba(10,10,10,0.05); + background-color: var(--template-darken-background-hover-transparent); } .notification a.close:hover .icon { @@ -1360,8 +1407,7 @@ br { width: 100%; height: 100%; overflow: auto; - background-color: #eee; - background-color: rgba(0,0,0,0.4); + background-color: var(--template-modal-background-color-transparent); } #popup-content { @@ -1370,9 +1416,9 @@ br { width: 80%; height: 80%; overflow: hidden; - background-color: #fafafa; + background-color: var(--template-background-color); border-radius: .25rem; - box-shadow: 0 0 1px #737373, -1px 2px 3px #4a4a4f; + box-shadow: -3px 3px 5px var(--template-box-shadow-color-transparent); } .popup-row { @@ -1385,14 +1431,14 @@ br { width: 27px; height: 27px; padding-bottom: 5px; - color: #aaa; + color: var(--template-font-color-grey-light); font-size: 28px; font-weight: bold; } #popup-close:hover, #popup-close:focus { - color: #000; + color: var(--template-font-color-dark); text-decoration: none; cursor: pointer; } @@ -1414,7 +1460,6 @@ br { /*=== Navigation menu (for articles) */ #nav_entries { - background: #fff; display: table; position: fixed; bottom: 0; right: 0; @@ -1444,12 +1489,12 @@ br { #load_more.loading, #load_more.loading:hover { padding: 10px 20px; - background: url("loader.gif") center center no-repeat #fff; + background: var(--template-loading-image) center center no-repeat var(--template-background-color); font-size: 0; } .loading { - background: url("loader.gif") center center no-repeat; + background: var(--template-loading-image) center center no-repeat; font-size: 0; } @@ -1516,7 +1561,7 @@ br { position: fixed; top: 0; bottom: 0; right: 0; left: 0; - background: rgba(0, 0, 0, 0.5); + background-color: var(--template-modal-background-color-transparent); opacity: 0; transition: visibility .3s, opacity .3s; visibility: hidden; @@ -1528,7 +1573,7 @@ br { } #panel { - background: #fff; + background-color: var(--template-background-color); display: none; position: fixed; top: 2%; bottom: 2%; @@ -1549,18 +1594,18 @@ br { /*=== Slider */ #slider { - background: #fff; + background-color: var(--template-background-color); width: 0; position: fixed; top: 0; bottom: 0; left: 0; overflow: auto; - border-right: 1px solid #aaa; z-index: 100; } #slider.active:target { width: 750px; + box-shadow: 3px 3px 5px var(--template-box-shadow-color-transparent); } #slider.sliding { @@ -1575,7 +1620,7 @@ br { } #slider.active:target + #close-slider { - background: rgba(0, 0, 0, 0.2); + background-color: var(--template-modal-background-color-transparent); font-size: 0; right: 0; z-index: 99; @@ -1608,7 +1653,7 @@ br { display: block; max-width: 640px; height: 320px; - border: 1px solid #aaa; + border: 1px solid var(--template-border-color); position: relative; min-width: 260px; margin-bottom: 30px; @@ -1643,7 +1688,7 @@ br { display: none; width: 65px; height: 100%; - color: #fff; + color: var(--template-font-color-light); font-family: "Varela Round", sans-serif; font-size: 1000%; position: absolute; @@ -1653,20 +1698,20 @@ br { transition: opacity .2s; text-align: center; line-height: 225%; - background-color: rgba(255, 255, 255, .3); + background-color: var(--template-background-color-transparent); text-shadow: 0px 0px 15px rgb(119, 119, 119); } .properties { padding: 5px; - background: rgba(255, 255, 255, 0.7); + background-color: var(--template-background-color-transparent); display: none; - color: #000; - border-top: 1px solid #aaa; + border-top: 1px solid var(--template-border-color); bottom: 0; right: 0; left: 0; position: absolute; z-index: 10; + backdrop-filter: blur(3px); } .properties .page-number { @@ -1708,18 +1753,18 @@ input:checked + .slide-container .properties { } .log-item.log-error { - background-color: #bd362f44; + background-color: var(--template-background-color-error-transparent); } .item.share.error a::after, .category .title.error::before, .item.feed.error .item-title::before { content: " ⚠ "; - color: #bd362f; + color: var(--template-font-color-error); } .feed.item.error.active .item-title::before { - color: white; + color: var(--template-font-color-light); } .aside .category .title:not([data-unread="0"])::after, @@ -1760,9 +1805,8 @@ input:checked + .slide-container .properties { } .feed.active .item-title:not([data-unread="0"])::after { - background-color: transparent; - color: white; - border: 1px solid #fff; + color: var(--template-font-color-light); + border: 1px solid var(--template-border-color); font-weight: bold; } @@ -1859,15 +1903,18 @@ input:checked + .slide-container .properties { display: none; } + .aside:target { + box-shadow: -3px 3px 5px var(--template-box-shadow-color-transparent); + } + .aside .toggle_aside, #panel .close, .dropdown-menu .toggle_aside, #slider .toggle_aside { - background: #f6f6f6; display: block; width: 100%; height: 50px; - border-bottom: 1px solid #ddd; + border-bottom: 1px solid var(--template-border-color); line-height: 50px; text-align: center; } @@ -1916,7 +1963,7 @@ input:checked + .slide-container .properties { } .dropdown-target:target ~ .dropdown-toggle::after { - background-color: #fff; + background-color: var(--template-background-color); width: 10px; height: 10px; content: ""; @@ -1943,7 +1990,7 @@ input:checked + .slide-container .properties { padding-top: 0; margin-top: 0; overflow: auto; - box-shadow: 3px 0 3px #aaa; + box-shadow: 3px 0 3px var(--template-box-shadow-color-transparent); } .configure .dropdown-target:target ~ .dropdown-toggle::after { @@ -1974,7 +2021,7 @@ input:checked + .slide-container .properties { .aside:target + .close-aside, .configure .dropdown-target:target ~ .dropdown-close { - background: rgba(0, 0, 0, 0.2); + background-color: var(--template-modal-background-color-transparent); display: block; font-size: 0; position: fixed; @@ -2080,8 +2127,7 @@ input:checked + .slide-container .properties { } html, body { - background: #fff; - color: #000; + background-color: var(--template-background-color); font-family: Serif; } @@ -2095,7 +2141,7 @@ input:checked + .slide-container .properties { } .flux_content .content a { - color: #000; + color: var(--template-font-color-dark); } .flux_content .content a::after { @@ -2112,8 +2158,8 @@ input:checked + .slide-container .properties { padding: 1rem; max-width: 1000px; text-align: center; - background-color: #eee; - border: 1px solid #e0e0e0; + background-color: var(--template-background-color-middle); + border: 1px solid var(--template-border-color); border-radius: .25rem; } @@ -2129,10 +2175,6 @@ input:checked + .slide-container .properties { margin-right: 1rem; } -.preview_background { - background-color: transparent; -} - .drag-drop-marker { margin: -1px; } From 28461df5b87d6d51544f4ce7951f14037a0e2429 Mon Sep 17 00:00:00 2001 From: maTh Date: Wed, 28 Sep 2022 15:05:30 +0200 Subject: [PATCH 0395/2479] Improved: Alternative Dark theme (#4635) * background colors * border * Update adark.css * font-color * empty feed color * slider * color input improved * menu nav hover * nav: highlight font color while hovering * lighter color btn icon on hover * btn-attention background color * empty feed color * delete .log CSS * delete white background .icon when feed active * article header+footer * bigMarkAsRead button * .content hr * dropdown triangle color * rename variables * notification colors * border colors * last left colors * reorder * hover flux icons * config dropdown menu mobile view shadow+border * dropdown menu hover color * close aside hover * slider-shadow * icon hover * toggle aside * improved contrast blue * contrast border color hover * kbd styled * hover on form elements highlight font color * font colors instead background color * link in alert * contrast attention font color * fix stream last item border * font color of author in stream * lighter color for headlines in article * nav: active menu entry in lighter font color * Update adark.rtl.css * fixes * fix favicon hover * fix --- p/themes/Alternative-Dark/adark.css | 523 ++++++++++++++++-------- p/themes/Alternative-Dark/adark.rtl.css | 523 ++++++++++++++++-------- 2 files changed, 684 insertions(+), 362 deletions(-) diff --git a/p/themes/Alternative-Dark/adark.css b/p/themes/Alternative-Dark/adark.css index 48ddd0ca1b0..7d098c2becc 100644 --- a/p/themes/Alternative-Dark/adark.css +++ b/p/themes/Alternative-Dark/adark.css @@ -2,24 +2,70 @@ /*=== GENERAL */ /*============*/ +:root { + --background-color-dark: #171717; + --background-color-middle: #1f1f1f; + --background-color-light: #262626; + --background-color-hover: #1d242f; + --background-color-active: #333; + --background-color-slider-shadow: rgba(0, 0, 0, 0.5); + + --contrast-background-color: #0062b7; + --contrast-background-color-hover: #0078e0; + --contrast-background-color-active: #003461; + --contrast-background-font-color: #eee; + --contrast-border-color-hover: #0078e0; + + --contrast-attention-background-color: #912621; + --contrast-attention-background-color-hover: #be342c; + --contrast-attention-font-color: #eee; + + --font-color-dark: #666; + --font-color-middle: #999; + --font-color-light: #ccc; + --font-color-contrast: #0062b7; + --font-color-error: #912621; + + --border-color-dark: #333; + --border-color-middle: #666; + --border-color-favorite: #ffc300; + --border-color-unread: #e74c3c; + + --empty-feed-color: #e67e22; + + --alert-warn-border-color: #615f20; + --alert-success-border-color: #18521d; + --alert-error-border-color: #912621; + + --notification-border-color: #eeb; + --notification-good-border-color: #0044cb; + --notification-bad-background-color: #fdd; + --notification-bad-font-color: #912621; + --notification-bad-border-color: #ecc; +} + html, body { - background: #171717; - color: #999; + background-color: var(--background-color-dark); + color: var(--font-color-middle); font-family: "OpenSans", "Cantarell", "Helvetica", "Arial", "PingFang SC", "Microsoft YaHei", sans-serif; } /*=== Links */ a, button.as-link { - color: #ccc; + color: var(--font-color-light); outline: none; } +a:hover .icon { + filter: brightness(2); +} + /*=== Forms */ legend { margin: 20px 0 5px; padding: 5px 0; font-size: 1.4em; - border-bottom: 1px solid #333; + border-bottom: 1px solid var(--border-color-dark); } label { @@ -35,22 +81,43 @@ textarea { input, select, textarea { padding: 5px; - background: #262626; - color: #999; - border: 1px solid #666; + background: var(--background-color-light); + color: var(--font-color-middle); + border: 1px solid var(--border-color-middle); border-radius: 3px; min-height: 25px; line-height: 25px; vertical-align: middle; } +input:hover, +select:hover, +textarea:hover, +label:hover { + color: var(--font-color-light); +} + +select { + padding: 10px 0px 9px; +} + option { padding: 0 .5em; } +input[type="checkbox"], +input[type="radio"] { + accent-color: var(--contrast-background-color); +} + +input[type="checkbox"]:hover, +input[type="radio"]:hover { + accent-color: var(--contrast-background-color-hover); +} + input:disabled, select:disabled { - color: #666; - border-color: #666; + color: var(--font-color-dark); + border-color: var(--border-color-dark); } input.extend { @@ -64,11 +131,11 @@ table { tr, th, td { padding: 0.5em; - border: 1px solid #333; + border: 1px solid var(--border-color-dark); } th { - background: #262626; + background: var(--background-color-light); } form td, @@ -82,8 +149,8 @@ form th { /*=== Forms */ .form-group.form-actions { padding: 5px 0; - background: #171717; - border-top: 1px solid #333; + background: var(--background-color-dark); + border-top: 1px solid var(--border-color-dark); } .form-group.form-actions .btn { @@ -112,7 +179,7 @@ form th { } .stick .btn-important:first-child { - border-right: 1px solid #06f; + border-right: 1px solid var(--contrast-background-color-hover); } .stick .btn:last-child, @@ -140,13 +207,11 @@ form th { .btn { margin: 0; padding: 5px 10px; - background: #171717; + background: var(--background-color-dark); display: inline-block; - color: #bfbfbf; + color: var(--font-color-middle); font-size: 0.9rem; - border: 1px solid #777; - border-right: 1px solid #777; - border-bottom: 1px solid #777; + border: 1px solid var(--border-color-middle); border-radius: 3px; min-height: 37px; min-width: 15px; @@ -162,28 +227,32 @@ a.btn { } .btn:hover { - background: #1d242f; + background: var(--background-color-hover); text-decoration: none; - color: #6b88ae; - border: 1px solid #45699a; + color: var(--font-color-light); + border: 1px solid var(--contrast-border-color-hover); +} + +.btn:hover .icon { + filter: brightness(2); } .btn.active, .btn:active, .dropdown-target:target ~ .btn.dropdown-toggle { - background: #262626; + background: var(--background-color-light); } .btn-important { - background: #0062b7; - color: #fff; - border: 1px solid #0062b7; + background: var(--contrast-background-color); + color: var(--contrast-background-font-color); + border: 1px solid var(--contrast-border-color-hover); font-weight: normal; } .btn-important:hover { - background: #45699a; - color: #eee; + background: var(--contrast-background-color-hover); + color: var(--contrast-background-font-color); } .btn-important .icon { @@ -191,22 +260,28 @@ a.btn { } .btn-important:active { - background: #0044cb; + background: var(--contrast-background-color-active); box-shadow: none; } .btn-attention { - color: #fff; + background-color: var(--contrast-attention-background-color); + color: var(--contrast-attention-font-color); +} + +.btn-attention:hover { + background-color: var(--contrast-attention-background-color-hover); + color: var(--contrast-attention-font-color); } .btn-attention:active { - background: #bd362f; + background: var(--contrast-attention-background-color); box-shadow: none; } /*=== switches */ .switch.active { - background-color: #0062b7; + background-color: var(--contrast-background-color); } .switch.active:hover { @@ -218,20 +293,22 @@ a.btn { .nav-list .item { height: 2.5em; line-height: 2.5em; - color: #ccc; + color: var(--font-color-light); font-size: 0.9rem; } .nav-list .item a { - color: #ccc; + color: var(--font-color-middle); } .nav-list .item a:hover { - background-color: #1f1f1f; + background-color: var(--background-color-hover); + color: var(--font-color-light); } .nav-list .item.active a { - background-color: #1f1f1f; + background-color: var(--background-color-dark); + color: var(--font-color-light); } .nav-list .item > a { @@ -243,26 +320,26 @@ a.btn { } .nav-list .item.empty a { - color: #f39c12; + color: var(--empty-feed-color); } .nav-list .item.active.empty a { - background: #f39c12; - color: #fff; + background: var(--empty-feed-color); + color: var(--font-color-light); } .nav-list .item.error a { - color: #bd362f; + color: var(--font-color-error); } .nav-list .item.active.error a { - background: #bd362f; - color: #fff; + background: var(--contrast-attention-background-color); + color: var(--font-color-light); } .nav-list .nav-header { padding: 0 10px; - color: #888; + color: var(--font-color-middle); font-weight: bold; } @@ -273,8 +350,8 @@ a.btn { .nav-head { margin: 0; - background: #262626; - border-bottom: 1px solid #333; + background: var(--background-color-light); + border-bottom: 1px solid var(--border-color-dark); text-align: right; } @@ -288,20 +365,20 @@ a.btn { .dropdown-menu { margin: 5px 0 0; padding: 5px 0; - background: #333; + background: var(--background-color-active); font-size: 0.8rem; - border: 2px solid #262626; + border: 2px solid var(--background-color-light); border-radius: 5px; text-align: left; } .dropdown-menu::after { - border-color: #333; + border-color: var(--border-color-dark); } .dropdown-header { padding: 0 5px 5px; - color: #888; + color: var(--font-color-middle); font-weight: bold; text-align: left; } @@ -316,8 +393,8 @@ a.btn { .dropdown-menu > .item > a:hover, .dropdown-menu > .item > button:hover { - background: #262626; - color: #fff; + background: var(--background-color-hover); + color: var(--font-color-light); } .dropdown-menu > .item[aria-checked="true"] > a::before { @@ -334,19 +411,18 @@ a.btn { .separator { margin: 5px 0; - border-bottom: 1px solid #292929; + border-bottom: 1px solid var(--border-color-dark); } /*=== Alerts */ .alert { margin: 15px auto; padding: 10px 15px; - background: #f4f4f4; - color: #aaa; + background-color: var(--background-color-dark); + color: var(--font-color-middle); font-size: 0.9em; - border: 1px solid #ccc; - border-right: 1px solid #aaa; - border-bottom: 1px solid #aaa; + border-width: 2px; + border-style: solid; border-radius: 5px; } @@ -354,48 +430,51 @@ a.btn { font-size: 1.15em; } -.alert > a { - color: inherit; +.alert a { + color: var(--font-color-middle); text-decoration: underline; } +.alert a:hover { + color: var(--font-color-light); +} + .alert-warn { - background: #171717; - color: #999; - border: 2px solid #615f20; + border-color: var(--alert-warn-border-color); } .alert-success { - background: #171717; - color: #999; - border: 2px solid #18521d; + border-color: var(--alert-success-border-color); } .alert-error { - background: #171717; - color: #999; - border: 2px solid #902b2b; + border-color: var(--alert-error-border-color); +} + +kbd { + background-color: var(--background-color-middle); + color: var(--font-color-middle); + border-color: var(--border-color-middle); } /*=== Pagination */ .pagination { - color: #999; - border-top: 1px solid #999; - border-bottom: 1px solid #999; + color: var(--font-color-middle); + border-top: 1px solid var(--border-color-dark); + border-bottom: 1px solid var(--border-color-dark); } /*=== Boxes */ .box { - background: #1f1f1f; - border: 1px solid #444; + background: var(--background-color-middle); + border-width: 0; border-radius: 3px; } .box .box-title { margin: 0; padding: 5px 10px; - background: #262626; - border: 1px solid #292929; + background: var(--background-color-light); border-radius: 5px 5px 0 0; } @@ -422,18 +501,26 @@ a.btn { .tree-folder-title { position: relative; padding: 0 10px; - background: #262626; + background: var(--background-color-light); line-height: 2.5rem; font-size: 1rem; } .tree-folder-title:hover { - background: #1f1f1f; + background: var(--background-color-hover); +} + +.tree-folder-title:hover .title { + color: var(--font-color-light); +} + +.tree-folder-title:hover .dropdown-toggle .icon { + filter: brightness(2); } .tree-folder-title .title { background: inherit; - color: #999; + color: var(--font-color-middle); } .tree-folder-title .title:hover { @@ -441,20 +528,20 @@ a.btn { } .tree-folder.active .tree-folder-title { - background: #171717; + background: var(--background-color-dark); font-weight: bold; } .tree-folder.active .tree-folder-title .title { - color: #ccc; + color: var(--font-color-light); } .tree-folder-items { - background: #262626; + background: var(--background-color-light); } .tree-folder-items:hover { - background: #1f1f1f; + background: var(--background-color-middle); } .tree-folder-items > .item { @@ -464,7 +551,7 @@ a.btn { } .tree-folder-items > .item.active { - background: #171717; + background: var(--background-color-dark); } .tree-folder-items > .item > a { @@ -472,19 +559,19 @@ a.btn { } .tree-folder-items > .item.active > a { - color: #999; + color: var(--font-color-middle); } /*=== STRUCTURE */ /*===============*/ /*=== Header */ .header { - background: #171717; + background: var(--background-color-dark); } .header > .item { padding: 10px; - border-bottom: 1px solid #333; + border-bottom: 1px solid var(--border-color-dark); vertical-align: middle; text-align: center; } @@ -508,13 +595,13 @@ a.btn { /*=== Body */ .aside { - background: #262626; + background: var(--background-color-light); } .aside.aside_feed { padding: 10px 0; text-align: center; - background: #262626; + background: var(--background-color-light); } .aside.aside_feed .tree { @@ -530,47 +617,45 @@ a.btn { .aside.aside_feed .category .title:not([data-unread="0"])::after, .aside.aside_feed .feed .item-title:not([data-unread="0"])::after, .global .box.category .title:not([data-unread="0"])::after { - background-color: #171717; - color: #999; - border-color: #999; + background-color: var(--background-color-dark); + color: var(--font-color-middle); +} + +.aside.aside_feed .category:hover .title:not([data-unread="0"])::after, +.aside.aside_feed .feed:hover .item-title:not([data-unread="0"])::after { + color: var(--font-color-light); } /*=== Aside main page (feeds) */ -.feed.item.empty.active { - background: #e67e22; +.feed.item.empty.active, +.feed.item.empty.active > a { + background: var(--empty-feed-color); + color: var(--font-color-dark); } .feed.item.error.active { - background: #bd362f; + background: var(--contrast-attention-background-color); } .feed.item.empty, .feed.item.empty > a { - color: #e67e22; + color: var(--empty-feed-color); } .feed.item.error, .feed.item.error > a { - color: #bd362f; + color: var(--font-color-error); } -.feed.item.empty.active, .feed.item.error.active, -.feed.item.empty.active > a, .feed.item.error.active > a { - color: #fff; + color: var(--font-color-light); } .aside_feed .tree-folder-items .dropdown-menu::after { left: 2px; } -.aside_feed .tree-folder-items .item .dropdown-target:target ~ .dropdown-toggle > .icon, -.aside_feed .tree-folder-items .item.active .dropdown-toggle > .icon { - background-color: #fff; - border-radius: 3px; -} - /*=== Configuration pages */ .post { padding: 10px 50px; @@ -585,6 +670,16 @@ a.btn { max-width: 550px; } +.slides { + border-color: var(--border-color-middle); +} + +.properties { + background-color: var(--background-color-light); + color: var(--font-color-middle); + border-color: var(--border-color-middle); +} + /*=== Prompt (centered) */ .prompt .form-group { margin-bottom: 1rem; @@ -609,20 +704,20 @@ a.btn { /*=== New article notification */ #new-article { - background: #0084cc; + background: var(--contrast-background-color); text-align: center; font-size: 0.9em; } #new-article > a { line-height: 3em; - color: #fff; + color: var(--font-color-light); font-weight: bold; } #new-article > a:hover { text-decoration: none; - background: #06c; + background: var(--contrast-background-color-hover); } /*=== Day indication */ @@ -630,9 +725,9 @@ a.btn { padding: 0 10px; font-weight: bold; line-height: 3em; - background: #171717; - color: #ccc; - border-top: 1px solid #aaa; + background: var(--background-color-dark); + color: var(--font-color-light); + border-top: 1px solid var(--border-color-dark); } #new-article + .day { @@ -641,10 +736,10 @@ a.btn { .day .name { padding: 0 10px 0 0; - color: #ccc; + color: var(--font-color-light); font-size: 1.8em; opacity: 0.3; - text-shadow: 0px -1px 0px #666; + text-shadow: 0px -1px 0px var(--font-color-dark); font-style: italic; text-align: right; } @@ -652,35 +747,37 @@ a.btn { /*=== Index menu */ .nav_menu { padding: 5px 0; - background: #171717; + background: var(--background-color-dark); text-align: center; } /*=== Feed articles */ .flux { - background: #171717; - border-left: 1px solid #292929; + background: var(--background-color-dark); + border-left-color: var(--border-color-dark); + border-left-width: 2px; + border-left-style: solid; } .flux:hover { - background: #333!important; + background: var(--background-color-hover) !important; } .flux.current { - background: #191919; - border-left: 2px solid #0062be; + background: var(--background-color-middle); + border-left: 2px solid var(--contrast-border-color-hover); } .flux.current.active { - background: #333; + background: var(--background-color-middle); } .flux.not_read { - border-left: 2px solid #e74c3c; + border-left: 2px solid var(--border-color-unread); } .flux.not_read:not(.current) { - background: #171717; + background: var(--background-color-dark); } .flux.not_read:not(.current):hover .item.title { @@ -688,24 +785,28 @@ a.btn { } .flux:not(.current):hover .item.title { - background: #333; + background: var(--background-color-hover); } .flux .item.title a { - color: #ababab; + color: var(--font-color-light); +} + +.flux .item.title .author { + color: var(--font-color-dark); } .flux.favorite { - border-left: 2px solid #ffc300; + border-left: 2px solid var(--border-color-favorite); } .flux.favorite:not(.current) { - background: #171717; + background: var(--background-color-dark); } .flux_header { font-size: 0.8rem; - border-top: 1px solid #292929; + border-top: 1px solid var(--border-color-dark); cursor: pointer; } @@ -717,8 +818,17 @@ a.btn { padding: 5px; } +.flux .website a:hover .favicon, +.flux a.website:hover .favicon { + filter: grayscale(50%); +} + +.flux .item.manage .read:hover .icon { + filter: grayscale(0.8) brightness(1.7); +} + .flux .item.date { - color: #ababab; + color: var(--font-color-light); font-size: 0.7rem; } @@ -730,80 +840,100 @@ a.btn { /*=== Content of feed articles */ .content { padding: 20px 10px; - color: #999; + color: var(--font-color-middle); } -.content > h1.title > a { - color: #949494; +.content h1, +.content h2, +.content h3 { + color: var(--font-color-light); } .content hr { margin: 30px 10px; - background: #ddd; + background: var(--font-color-middle); height: 1px; border: 0; - box-shadow: 0 2px 5px #ccc; } .content pre { margin: 10px auto; padding: 10px 20px; overflow: auto; - background: #222; - color: #fff; + background: var(--background-color-dark); + color: var(--font-color-light); font-size: 0.9rem; border-radius: 3px; } .content code { padding: 2px 5px; - background: #262626; - border: 1px solid #262626; + background: var(--background-color-light); + border: 1px solid var(--background-color-light); border-radius: 3px; } .content pre code { background: transparent; - color: #fff; + color: var(--font-color-light); border: none; } .content blockquote { margin: 0; padding: 25px; - background: #262626; + background: var(--background-color-light); display: block; - color: #999; + color: var(--font-color-middle); } .content blockquote p { margin: 0; } +.content > footer { + border-color: var(--border-color-middle); +} + +.content > header a, +.content > header .subtitle, +.content > footer a, +.content > footer .subtitle { + color: var(--font-color-middle); +} + +.content > header h1 a { + color: var(--font-color-light); +} + /*=== Notification and actualize notification */ .notification { font-size: 0.9em; - border: 1px solid #eeb; - border-radius: 3px; + border: 2px solid var(--notification-border-color); + border-radius: 5px; text-align: center; font-weight: bold; vertical-align: middle; } .notification.good { - background: #262626; - color: #999; - border: 2px solid #3b5981; + background-color: var(--background-color-light); + color: var(--font-color-middle); + border-color: var(--notification-good-border-color); } .notification.bad { - background: #fdd; - color: #844; - border: 1px solid #ecc; + background-color: var(--notification-bad-background-color); + color: var(--notification-bad-font-color); + border-color: var(--notification-bad-border-color); +} + +.notification.bad a.close:hover { + background: var(--notification-bad-background-color); } .notification a { - color: #0062be; + color: var(--font-color-contrast); } .notification a.close { @@ -811,22 +941,23 @@ a.btn { line-height: 3em; } -.notification.bad a.close:hover { - background: #ecc; -} - .notification#actualizeProgress { line-height: 2em; } /*=== "Load more" part */ #bigMarkAsRead { - background: #171717; - color: #0062be; + background: var(--background-color-dark); + color: var(--font-color-contrast); text-align: center; text-decoration: none; } +#bigMarkAsRead:hover { + background-color: var(--background-color-hover); + color: var(--font-color-light); +} + .bigTick { display: none!important; } @@ -834,7 +965,7 @@ a.btn { /*=== Navigation menu (for articles) */ #nav_entries { margin: 0; - background: #262626; + background: var(--background-color-light); text-align: center; line-height: 3em; table-layout: fixed; @@ -844,20 +975,24 @@ a.btn { /*================*/ #stream.reader .flux { padding: 0 0 50px; - color: #333; - border-bottom: 10px solid #171717; + color: var(--font-color-dark); + border-bottom: 10px solid var(--background-color-dark); } #stream.reader .flux.current.active { - background: #333; + background: var(--background-color-middle); } #stream.reader .flux .author { margin: 0 0 10px; - color: #666; + color: var(--font-color-dark); font-size: 90%; } +#stream-footer { + border-top-color: var(--border-color-dark); +} + /*=== GLOBAL VIEW */ /*================*/ .box.category .box-title .title { @@ -867,21 +1002,21 @@ a.btn { } .box.category:not([data-unread="0"]) .box-title { - background: #262626; + background: var(--background-color-light); } .box.category:not([data-unread="0"]) .box-title:active { - background: #171717; + background: var(--background-color-dark); } .box.category:not([data-unread="0"]) .box-title .title { - color: #999; + color: var(--font-color-middle); font-weight: bold; } .box.category .title:not([data-unread="0"])::after { background: none; - color: #fff; + color: var(--font-color-light); border: 0; box-shadow: none; position: absolute; @@ -897,14 +1032,22 @@ a.btn { /*=== Slider */ #slider { - background: #171717; - border-left: 1px solid #333; + background: var(--background-color-dark); + border-left: 1px solid var(--border-color-dark); +} + +#slider.active:target + #close-slider { + background-color: var(--background-color-slider-shadow); } /*=== SLIDESHOW */ /*==============*/ .nav label { - color: #0062b7; + color: var(--font-color-light); +} + +.nav label:hover { + color: var(--font-color-contrast); } /*=== DIVERS */ @@ -936,7 +1079,7 @@ a.btn { .stat > table td, .stat > table th { - border-bottom: 1px solid #ddd; + border-bottom: 1px solid var(--border-color-dark); } /*=== MOBILE */ @@ -949,26 +1092,44 @@ a.btn { } .aside { - box-shadow: 3px 0 3px #aaa; + box-shadow: 3px 0 3px var(--background-color-active); transition: width 200ms linear; } .aside .toggle_aside, #panel .close, - .dropdown-menu .toggle_aside { - background: #262626; - display: block; - width: 100%; - height: 50px; - border-bottom: 1px solid #333; - line-height: 50px; - text-align: center; + .dropdown-menu .toggle_aside, + #slider .toggle_aside { + background: var(--background-color-light); + border-bottom-color: var(--border-color-dark); + } + + .aside .toggle_aside:hover, + #panel .close:hover, + .dropdown-menu .toggle_aside:hover, + #slider .toggle_aside:hover { + background-color: var(--background-color-hover); + } + + .aside .toggle_aside:hover .icon, + #panel .close:hover .icon, + .dropdown-menu .toggle_aside:hover .icon { + filter: brightness(2); + } + + .aside:target + .close-aside, .configure .dropdown-target:target ~ .dropdown-close { + background-color: var(--background-color-slider-shadow); } .aside.aside_feed { padding: 0; } + .configure .dropdown .dropdown-menu { + border-width: 0; + box-shadow: -3px 0 3px var(--background-color-active); + } + .nav_menu .btn { margin: 5px 10px; padding: 3px 5px; @@ -999,9 +1160,9 @@ a.btn { } .dropdown-target:target ~ .dropdown-toggle::after { - background-color: #333; - border-top: 2px solid #262626; - border-left: 2px solid #262626; + background-color: var(--background-color-active); + border-top: 2px solid var(--background-color-light); + border-left: 2px solid var(--background-color-light); } .day .name { @@ -1011,7 +1172,7 @@ a.btn { } .flux:not(.current):hover .item.title { - background: #333; + background: var(--background-color-hover); } .notification a.close { diff --git a/p/themes/Alternative-Dark/adark.rtl.css b/p/themes/Alternative-Dark/adark.rtl.css index 1cae8386f40..67fc7cb322d 100644 --- a/p/themes/Alternative-Dark/adark.rtl.css +++ b/p/themes/Alternative-Dark/adark.rtl.css @@ -2,24 +2,70 @@ /*=== GENERAL */ /*============*/ +:root { + --background-color-dark: #171717; + --background-color-middle: #1f1f1f; + --background-color-light: #262626; + --background-color-hover: #1d242f; + --background-color-active: #333; + --background-color-slider-shadow: rgba(0, 0, 0, 0.5); + + --contrast-background-color: #0062b7; + --contrast-background-color-hover: #0078e0; + --contrast-background-color-active: #003461; + --contrast-background-font-color: #eee; + --contrast-border-color-hover: #0078e0; + + --contrast-attention-background-color: #912621; + --contrast-attention-background-color-hover: #be342c; + --contrast-attention-font-color: #eee; + + --font-color-dark: #666; + --font-color-middle: #999; + --font-color-light: #ccc; + --font-color-contrast: #0062b7; + --font-color-error: #912621; + + --border-color-dark: #333; + --border-color-middle: #666; + --border-color-favorite: #ffc300; + --border-color-unread: #e74c3c; + + --empty-feed-color: #e67e22; + + --alert-warn-border-color: #615f20; + --alert-success-border-color: #18521d; + --alert-error-border-color: #912621; + + --notification-border-color: #eeb; + --notification-good-border-color: #0044cb; + --notification-bad-background-color: #fdd; + --notification-bad-font-color: #912621; + --notification-bad-border-color: #ecc; +} + html, body { - background: #171717; - color: #999; + background-color: var(--background-color-dark); + color: var(--font-color-middle); font-family: "OpenSans", "Cantarell", "Helvetica", "Arial", "PingFang SC", "Microsoft YaHei", sans-serif; } /*=== Links */ a, button.as-link { - color: #ccc; + color: var(--font-color-light); outline: none; } +a:hover .icon { + filter: brightness(2); +} + /*=== Forms */ legend { margin: 20px 0 5px; padding: 5px 0; font-size: 1.4em; - border-bottom: 1px solid #333; + border-bottom: 1px solid var(--border-color-dark); } label { @@ -35,22 +81,43 @@ textarea { input, select, textarea { padding: 5px; - background: #262626; - color: #999; - border: 1px solid #666; + background: var(--background-color-light); + color: var(--font-color-middle); + border: 1px solid var(--border-color-middle); border-radius: 3px; min-height: 25px; line-height: 25px; vertical-align: middle; } +input:hover, +select:hover, +textarea:hover, +label:hover { + color: var(--font-color-light); +} + +select { + padding: 10px 0px 9px; +} + option { padding: 0 .5em; } +input[type="checkbox"], +input[type="radio"] { + accent-color: var(--contrast-background-color); +} + +input[type="checkbox"]:hover, +input[type="radio"]:hover { + accent-color: var(--contrast-background-color-hover); +} + input:disabled, select:disabled { - color: #666; - border-color: #666; + color: var(--font-color-dark); + border-color: var(--border-color-dark); } input.extend { @@ -64,11 +131,11 @@ table { tr, th, td { padding: 0.5em; - border: 1px solid #333; + border: 1px solid var(--border-color-dark); } th { - background: #262626; + background: var(--background-color-light); } form td, @@ -82,8 +149,8 @@ form th { /*=== Forms */ .form-group.form-actions { padding: 5px 0; - background: #171717; - border-top: 1px solid #333; + background: var(--background-color-dark); + border-top: 1px solid var(--border-color-dark); } .form-group.form-actions .btn { @@ -112,7 +179,7 @@ form th { } .stick .btn-important:first-child { - border-left: 1px solid #06f; + border-left: 1px solid var(--contrast-background-color-hover); } .stick .btn:last-child, @@ -140,13 +207,11 @@ form th { .btn { margin: 0; padding: 5px 10px; - background: #171717; + background: var(--background-color-dark); display: inline-block; - color: #bfbfbf; + color: var(--font-color-middle); font-size: 0.9rem; - border: 1px solid #777; - border-left: 1px solid #777; - border-bottom: 1px solid #777; + border: 1px solid var(--border-color-middle); border-radius: 3px; min-height: 37px; min-width: 15px; @@ -162,28 +227,32 @@ a.btn { } .btn:hover { - background: #1d242f; + background: var(--background-color-hover); text-decoration: none; - color: #6b88ae; - border: 1px solid #45699a; + color: var(--font-color-light); + border: 1px solid var(--contrast-border-color-hover); +} + +.btn:hover .icon { + filter: brightness(2); } .btn.active, .btn:active, .dropdown-target:target ~ .btn.dropdown-toggle { - background: #262626; + background: var(--background-color-light); } .btn-important { - background: #0062b7; - color: #fff; - border: 1px solid #0062b7; + background: var(--contrast-background-color); + color: var(--contrast-background-font-color); + border: 1px solid var(--contrast-border-color-hover); font-weight: normal; } .btn-important:hover { - background: #45699a; - color: #eee; + background: var(--contrast-background-color-hover); + color: var(--contrast-background-font-color); } .btn-important .icon { @@ -191,22 +260,28 @@ a.btn { } .btn-important:active { - background: #0044cb; + background: var(--contrast-background-color-active); box-shadow: none; } .btn-attention { - color: #fff; + background-color: var(--contrast-attention-background-color); + color: var(--contrast-attention-font-color); +} + +.btn-attention:hover { + background-color: var(--contrast-attention-background-color-hover); + color: var(--contrast-attention-font-color); } .btn-attention:active { - background: #bd362f; + background: var(--contrast-attention-background-color); box-shadow: none; } /*=== switches */ .switch.active { - background-color: #0062b7; + background-color: var(--contrast-background-color); } .switch.active:hover { @@ -218,20 +293,22 @@ a.btn { .nav-list .item { height: 2.5em; line-height: 2.5em; - color: #ccc; + color: var(--font-color-light); font-size: 0.9rem; } .nav-list .item a { - color: #ccc; + color: var(--font-color-middle); } .nav-list .item a:hover { - background-color: #1f1f1f; + background-color: var(--background-color-hover); + color: var(--font-color-light); } .nav-list .item.active a { - background-color: #1f1f1f; + background-color: var(--background-color-dark); + color: var(--font-color-light); } .nav-list .item > a { @@ -243,26 +320,26 @@ a.btn { } .nav-list .item.empty a { - color: #f39c12; + color: var(--empty-feed-color); } .nav-list .item.active.empty a { - background: #f39c12; - color: #fff; + background: var(--empty-feed-color); + color: var(--font-color-light); } .nav-list .item.error a { - color: #bd362f; + color: var(--font-color-error); } .nav-list .item.active.error a { - background: #bd362f; - color: #fff; + background: var(--contrast-attention-background-color); + color: var(--font-color-light); } .nav-list .nav-header { padding: 0 10px; - color: #888; + color: var(--font-color-middle); font-weight: bold; } @@ -273,8 +350,8 @@ a.btn { .nav-head { margin: 0; - background: #262626; - border-bottom: 1px solid #333; + background: var(--background-color-light); + border-bottom: 1px solid var(--border-color-dark); text-align: left; } @@ -288,20 +365,20 @@ a.btn { .dropdown-menu { margin: 5px 0 0; padding: 5px 0; - background: #333; + background: var(--background-color-active); font-size: 0.8rem; - border: 2px solid #262626; + border: 2px solid var(--background-color-light); border-radius: 5px; text-align: right; } .dropdown-menu::after { - border-color: #333; + border-color: var(--border-color-dark); } .dropdown-header { padding: 0 5px 5px; - color: #888; + color: var(--font-color-middle); font-weight: bold; text-align: right; } @@ -316,8 +393,8 @@ a.btn { .dropdown-menu > .item > a:hover, .dropdown-menu > .item > button:hover { - background: #262626; - color: #fff; + background: var(--background-color-hover); + color: var(--font-color-light); } .dropdown-menu > .item[aria-checked="true"] > a::before { @@ -334,19 +411,18 @@ a.btn { .separator { margin: 5px 0; - border-bottom: 1px solid #292929; + border-bottom: 1px solid var(--border-color-dark); } /*=== Alerts */ .alert { margin: 15px auto; padding: 10px 15px; - background: #f4f4f4; - color: #aaa; + background-color: var(--background-color-dark); + color: var(--font-color-middle); font-size: 0.9em; - border: 1px solid #ccc; - border-left: 1px solid #aaa; - border-bottom: 1px solid #aaa; + border-width: 2px; + border-style: solid; border-radius: 5px; } @@ -354,48 +430,51 @@ a.btn { font-size: 1.15em; } -.alert > a { - color: inherit; +.alert a { + color: var(--font-color-middle); text-decoration: underline; } +.alert a:hover { + color: var(--font-color-light); +} + .alert-warn { - background: #171717; - color: #999; - border: 2px solid #615f20; + border-color: var(--alert-warn-border-color); } .alert-success { - background: #171717; - color: #999; - border: 2px solid #18521d; + border-color: var(--alert-success-border-color); } .alert-error { - background: #171717; - color: #999; - border: 2px solid #902b2b; + border-color: var(--alert-error-border-color); +} + +kbd { + background-color: var(--background-color-middle); + color: var(--font-color-middle); + border-color: var(--border-color-middle); } /*=== Pagination */ .pagination { - color: #999; - border-top: 1px solid #999; - border-bottom: 1px solid #999; + color: var(--font-color-middle); + border-top: 1px solid var(--border-color-dark); + border-bottom: 1px solid var(--border-color-dark); } /*=== Boxes */ .box { - background: #1f1f1f; - border: 1px solid #444; + background: var(--background-color-middle); + border-width: 0; border-radius: 3px; } .box .box-title { margin: 0; padding: 5px 10px; - background: #262626; - border: 1px solid #292929; + background: var(--background-color-light); border-radius: 5px 5px 0 0; } @@ -422,18 +501,26 @@ a.btn { .tree-folder-title { position: relative; padding: 0 10px; - background: #262626; + background: var(--background-color-light); line-height: 2.5rem; font-size: 1rem; } .tree-folder-title:hover { - background: #1f1f1f; + background: var(--background-color-hover); +} + +.tree-folder-title:hover .title { + color: var(--font-color-light); +} + +.tree-folder-title:hover .dropdown-toggle .icon { + filter: brightness(2); } .tree-folder-title .title { background: inherit; - color: #999; + color: var(--font-color-middle); } .tree-folder-title .title:hover { @@ -441,20 +528,20 @@ a.btn { } .tree-folder.active .tree-folder-title { - background: #171717; + background: var(--background-color-dark); font-weight: bold; } .tree-folder.active .tree-folder-title .title { - color: #ccc; + color: var(--font-color-light); } .tree-folder-items { - background: #262626; + background: var(--background-color-light); } .tree-folder-items:hover { - background: #1f1f1f; + background: var(--background-color-middle); } .tree-folder-items > .item { @@ -464,7 +551,7 @@ a.btn { } .tree-folder-items > .item.active { - background: #171717; + background: var(--background-color-dark); } .tree-folder-items > .item > a { @@ -472,19 +559,19 @@ a.btn { } .tree-folder-items > .item.active > a { - color: #999; + color: var(--font-color-middle); } /*=== STRUCTURE */ /*===============*/ /*=== Header */ .header { - background: #171717; + background: var(--background-color-dark); } .header > .item { padding: 10px; - border-bottom: 1px solid #333; + border-bottom: 1px solid var(--border-color-dark); vertical-align: middle; text-align: center; } @@ -508,13 +595,13 @@ a.btn { /*=== Body */ .aside { - background: #262626; + background: var(--background-color-light); } .aside.aside_feed { padding: 10px 0; text-align: center; - background: #262626; + background: var(--background-color-light); } .aside.aside_feed .tree { @@ -530,47 +617,45 @@ a.btn { .aside.aside_feed .category .title:not([data-unread="0"])::after, .aside.aside_feed .feed .item-title:not([data-unread="0"])::after, .global .box.category .title:not([data-unread="0"])::after { - background-color: #171717; - color: #999; - border-color: #999; + background-color: var(--background-color-dark); + color: var(--font-color-middle); +} + +.aside.aside_feed .category:hover .title:not([data-unread="0"])::after, +.aside.aside_feed .feed:hover .item-title:not([data-unread="0"])::after { + color: var(--font-color-light); } /*=== Aside main page (feeds) */ -.feed.item.empty.active { - background: #e67e22; +.feed.item.empty.active, +.feed.item.empty.active > a { + background: var(--empty-feed-color); + color: var(--font-color-dark); } .feed.item.error.active { - background: #bd362f; + background: var(--contrast-attention-background-color); } .feed.item.empty, .feed.item.empty > a { - color: #e67e22; + color: var(--empty-feed-color); } .feed.item.error, .feed.item.error > a { - color: #bd362f; + color: var(--font-color-error); } -.feed.item.empty.active, .feed.item.error.active, -.feed.item.empty.active > a, .feed.item.error.active > a { - color: #fff; + color: var(--font-color-light); } .aside_feed .tree-folder-items .dropdown-menu::after { right: 2px; } -.aside_feed .tree-folder-items .item .dropdown-target:target ~ .dropdown-toggle > .icon, -.aside_feed .tree-folder-items .item.active .dropdown-toggle > .icon { - background-color: #fff; - border-radius: 3px; -} - /*=== Configuration pages */ .post { padding: 10px 50px; @@ -585,6 +670,16 @@ a.btn { max-width: 550px; } +.slides { + border-color: var(--border-color-middle); +} + +.properties { + background-color: var(--background-color-light); + color: var(--font-color-middle); + border-color: var(--border-color-middle); +} + /*=== Prompt (centered) */ .prompt .form-group { margin-bottom: 1rem; @@ -609,20 +704,20 @@ a.btn { /*=== New article notification */ #new-article { - background: #0084cc; + background: var(--contrast-background-color); text-align: center; font-size: 0.9em; } #new-article > a { line-height: 3em; - color: #fff; + color: var(--font-color-light); font-weight: bold; } #new-article > a:hover { text-decoration: none; - background: #06c; + background: var(--contrast-background-color-hover); } /*=== Day indication */ @@ -630,9 +725,9 @@ a.btn { padding: 0 10px; font-weight: bold; line-height: 3em; - background: #171717; - color: #ccc; - border-top: 1px solid #aaa; + background: var(--background-color-dark); + color: var(--font-color-light); + border-top: 1px solid var(--border-color-dark); } #new-article + .day { @@ -641,10 +736,10 @@ a.btn { .day .name { padding: 0 0 0 10px; - color: #ccc; + color: var(--font-color-light); font-size: 1.8em; opacity: 0.3; - text-shadow: 0px -1px 0px #666; + text-shadow: 0px -1px 0px var(--font-color-dark); font-style: italic; text-align: left; } @@ -652,35 +747,37 @@ a.btn { /*=== Index menu */ .nav_menu { padding: 5px 0; - background: #171717; + background: var(--background-color-dark); text-align: center; } /*=== Feed articles */ .flux { - background: #171717; - border-right: 1px solid #292929; + background: var(--background-color-dark); + border-right-color: var(--border-color-dark); + border-right-width: 2px; + border-right-style: solid; } .flux:hover { - background: #333!important; + background: var(--background-color-hover) !important; } .flux.current { - background: #191919; - border-right: 2px solid #0062be; + background: var(--background-color-middle); + border-right: 2px solid var(--contrast-border-color-hover); } .flux.current.active { - background: #333; + background: var(--background-color-middle); } .flux.not_read { - border-right: 2px solid #e74c3c; + border-right: 2px solid var(--border-color-unread); } .flux.not_read:not(.current) { - background: #171717; + background: var(--background-color-dark); } .flux.not_read:not(.current):hover .item.title { @@ -688,24 +785,28 @@ a.btn { } .flux:not(.current):hover .item.title { - background: #333; + background: var(--background-color-hover); } .flux .item.title a { - color: #ababab; + color: var(--font-color-light); +} + +.flux .item.title .author { + color: var(--font-color-dark); } .flux.favorite { - border-right: 2px solid #ffc300; + border-right: 2px solid var(--border-color-favorite); } .flux.favorite:not(.current) { - background: #171717; + background: var(--background-color-dark); } .flux_header { font-size: 0.8rem; - border-top: 1px solid #292929; + border-top: 1px solid var(--border-color-dark); cursor: pointer; } @@ -717,8 +818,17 @@ a.btn { padding: 5px; } +.flux .website a:hover .favicon, +.flux a.website:hover .favicon { + filter: grayscale(50%); +} + +.flux .item.manage .read:hover .icon { + filter: grayscale(0.8) brightness(1.7); +} + .flux .item.date { - color: #ababab; + color: var(--font-color-light); font-size: 0.7rem; } @@ -730,80 +840,100 @@ a.btn { /*=== Content of feed articles */ .content { padding: 20px 10px; - color: #999; + color: var(--font-color-middle); } -.content > h1.title > a { - color: #949494; +.content h1, +.content h2, +.content h3 { + color: var(--font-color-light); } .content hr { margin: 30px 10px; - background: #ddd; + background: var(--font-color-middle); height: 1px; border: 0; - box-shadow: 0 2px 5px #ccc; } .content pre { margin: 10px auto; padding: 10px 20px; overflow: auto; - background: #222; - color: #fff; + background: var(--background-color-dark); + color: var(--font-color-light); font-size: 0.9rem; border-radius: 3px; } .content code { padding: 2px 5px; - background: #262626; - border: 1px solid #262626; + background: var(--background-color-light); + border: 1px solid var(--background-color-light); border-radius: 3px; } .content pre code { background: transparent; - color: #fff; + color: var(--font-color-light); border: none; } .content blockquote { margin: 0; padding: 25px; - background: #262626; + background: var(--background-color-light); display: block; - color: #999; + color: var(--font-color-middle); } .content blockquote p { margin: 0; } +.content > footer { + border-color: var(--border-color-middle); +} + +.content > header a, +.content > header .subtitle, +.content > footer a, +.content > footer .subtitle { + color: var(--font-color-middle); +} + +.content > header h1 a { + color: var(--font-color-light); +} + /*=== Notification and actualize notification */ .notification { font-size: 0.9em; - border: 1px solid #eeb; - border-radius: 3px; + border: 2px solid var(--notification-border-color); + border-radius: 5px; text-align: center; font-weight: bold; vertical-align: middle; } .notification.good { - background: #262626; - color: #999; - border: 2px solid #3b5981; + background-color: var(--background-color-light); + color: var(--font-color-middle); + border-color: var(--notification-good-border-color); } .notification.bad { - background: #fdd; - color: #844; - border: 1px solid #ecc; + background-color: var(--notification-bad-background-color); + color: var(--notification-bad-font-color); + border-color: var(--notification-bad-border-color); +} + +.notification.bad a.close:hover { + background: var(--notification-bad-background-color); } .notification a { - color: #0062be; + color: var(--font-color-contrast); } .notification a.close { @@ -811,22 +941,23 @@ a.btn { line-height: 3em; } -.notification.bad a.close:hover { - background: #ecc; -} - .notification#actualizeProgress { line-height: 2em; } /*=== "Load more" part */ #bigMarkAsRead { - background: #171717; - color: #0062be; + background: var(--background-color-dark); + color: var(--font-color-contrast); text-align: center; text-decoration: none; } +#bigMarkAsRead:hover { + background-color: var(--background-color-hover); + color: var(--font-color-light); +} + .bigTick { display: none!important; } @@ -834,7 +965,7 @@ a.btn { /*=== Navigation menu (for articles) */ #nav_entries { margin: 0; - background: #262626; + background: var(--background-color-light); text-align: center; line-height: 3em; table-layout: fixed; @@ -844,20 +975,24 @@ a.btn { /*================*/ #stream.reader .flux { padding: 0 0 50px; - color: #333; - border-bottom: 10px solid #171717; + color: var(--font-color-dark); + border-bottom: 10px solid var(--background-color-dark); } #stream.reader .flux.current.active { - background: #333; + background: var(--background-color-middle); } #stream.reader .flux .author { margin: 0 0 10px; - color: #666; + color: var(--font-color-dark); font-size: 90%; } +#stream-footer { + border-top-color: var(--border-color-dark); +} + /*=== GLOBAL VIEW */ /*================*/ .box.category .box-title .title { @@ -867,21 +1002,21 @@ a.btn { } .box.category:not([data-unread="0"]) .box-title { - background: #262626; + background: var(--background-color-light); } .box.category:not([data-unread="0"]) .box-title:active { - background: #171717; + background: var(--background-color-dark); } .box.category:not([data-unread="0"]) .box-title .title { - color: #999; + color: var(--font-color-middle); font-weight: bold; } .box.category .title:not([data-unread="0"])::after { background: none; - color: #fff; + color: var(--font-color-light); border: 0; box-shadow: none; position: absolute; @@ -897,14 +1032,22 @@ a.btn { /*=== Slider */ #slider { - background: #171717; - border-right: 1px solid #333; + background: var(--background-color-dark); + border-right: 1px solid var(--border-color-dark); +} + +#slider.active:target + #close-slider { + background-color: var(--background-color-slider-shadow); } /*=== SLIDESHOW */ /*==============*/ .nav label { - color: #0062b7; + color: var(--font-color-light); +} + +.nav label:hover { + color: var(--font-color-contrast); } /*=== DIVERS */ @@ -936,7 +1079,7 @@ a.btn { .stat > table td, .stat > table th { - border-bottom: 1px solid #ddd; + border-bottom: 1px solid var(--border-color-dark); } /*=== MOBILE */ @@ -949,26 +1092,44 @@ a.btn { } .aside { - box-shadow: -3px 0 3px #aaa; + box-shadow: -3px 0 3px var(--background-color-active); transition: width 200ms linear; } .aside .toggle_aside, #panel .close, - .dropdown-menu .toggle_aside { - background: #262626; - display: block; - width: 100%; - height: 50px; - border-bottom: 1px solid #333; - line-height: 50px; - text-align: center; + .dropdown-menu .toggle_aside, + #slider .toggle_aside { + background: var(--background-color-light); + border-bottom-color: var(--border-color-dark); + } + + .aside .toggle_aside:hover, + #panel .close:hover, + .dropdown-menu .toggle_aside:hover, + #slider .toggle_aside:hover { + background-color: var(--background-color-hover); + } + + .aside .toggle_aside:hover .icon, + #panel .close:hover .icon, + .dropdown-menu .toggle_aside:hover .icon { + filter: brightness(2); + } + + .aside:target + .close-aside, .configure .dropdown-target:target ~ .dropdown-close { + background-color: var(--background-color-slider-shadow); } .aside.aside_feed { padding: 0; } + .configure .dropdown .dropdown-menu { + border-width: 0; + box-shadow: 3px 0 3px var(--background-color-active); + } + .nav_menu .btn { margin: 5px 10px; padding: 3px 5px; @@ -999,9 +1160,9 @@ a.btn { } .dropdown-target:target ~ .dropdown-toggle::after { - background-color: #333; - border-top: 2px solid #262626; - border-right: 2px solid #262626; + background-color: var(--background-color-active); + border-top: 2px solid var(--background-color-light); + border-right: 2px solid var(--background-color-light); } .day .name { @@ -1011,7 +1172,7 @@ a.btn { } .flux:not(.current):hover .item.title { - background: #333; + background: var(--background-color-hover); } .notification a.close { From ad9329ff47944b43d23b6a50ae89a2d6bb4867e6 Mon Sep 17 00:00:00 2001 From: maTh Date: Wed, 28 Sep 2022 21:19:41 +0200 Subject: [PATCH 0396/2479] Update main.js (#4652) --- p/scripts/main.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/p/scripts/main.js b/p/scripts/main.js index a9f0986de50..30fc795a116 100644 --- a/p/scripts/main.js +++ b/p/scripts/main.js @@ -1109,7 +1109,7 @@ function init_stream(stream) { el = ev.target.closest('.flux_header, .flux_content'); if (el) { // flux_toggle - if (ev.target.closest('.content, .item.website, .item.link, .dropdown')) { + if (ev.target.closest('.reader, .content, .item.website, .item.link, .dropdown')) { return true; } if (!context.sides_close_article && ev.target.matches('.flux_content')) { From 87082767d8436fe36245c75380a745864536dbd5 Mon Sep 17 00:00:00 2001 From: maTh Date: Wed, 28 Sep 2022 21:26:52 +0200 Subject: [PATCH 0397/2479] Origine.css (#4653) --- p/themes/Origine/origine.css | 8 +++++++- p/themes/Origine/origine.rtl.css | 8 +++++++- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/p/themes/Origine/origine.css b/p/themes/Origine/origine.css index f34bfd7c10a..73fbe1719bb 100644 --- a/p/themes/Origine/origine.css +++ b/p/themes/Origine/origine.css @@ -908,12 +908,18 @@ a.btn, /*=== READER VIEW */ /*================*/ #stream.reader .flux { - padding: 0 0 50px; + padding: 25px 0 25px; background: #f0f0f0; color: #333; border: none; } +#stream.reader .flux .content { + padding: 3rem; + background-color: #fff; + border: 1px solid #ddd; +} + #stream.reader .flux .author { margin: 0 0 10px; color: #666; diff --git a/p/themes/Origine/origine.rtl.css b/p/themes/Origine/origine.rtl.css index da071f80db7..878c4ba9aed 100644 --- a/p/themes/Origine/origine.rtl.css +++ b/p/themes/Origine/origine.rtl.css @@ -908,12 +908,18 @@ a.btn, /*=== READER VIEW */ /*================*/ #stream.reader .flux { - padding: 0 0 50px; + padding: 25px 0 25px; background: #f0f0f0; color: #333; border: none; } +#stream.reader .flux .content { + padding: 3rem; + background-color: #fff; + border: 1px solid #ddd; +} + #stream.reader .flux .author { margin: 0 0 10px; color: #666; From fedbda4f6acbc5f5c09ad90a7b7972595695a3de Mon Sep 17 00:00:00 2001 From: maTh Date: Thu, 29 Sep 2022 12:40:50 +0200 Subject: [PATCH 0398/2479] Rename template.css (#4644) * Fix conflicts * Update doc * Misses * Update prefix in CSS Co-authored-by: Alexandre Alapetite --- app/install.php | 2 +- docs/en/developers/04_Frontend/02_Design.md | 4 +- p/themes/Alternative-Dark/metadata.json | 2 +- p/themes/Ansum/metadata.json | 2 +- p/themes/BlueLagoon/metadata.json | 2 +- p/themes/Dark-pink/metadata.json | 2 +- p/themes/Dark/metadata.json | 2 +- p/themes/Flat/metadata.json | 4 +- p/themes/Mapco/metadata.json | 2 +- p/themes/Nord/metadata.json | 2 +- p/themes/Origine-compact/metadata.json | 2 +- p/themes/Origine/metadata.json | 2 +- p/themes/Pafat/metadata.json | 2 +- p/themes/Screwdriver/metadata.json | 2 +- p/themes/Swage/metadata.json | 2 +- .../base-theme/{template.css => frss.css} | 192 +++++++++--------- .../{template.rtl.css => frss.rtl.css} | 192 +++++++++--------- p/themes/base-theme/metadata.json | 2 +- 18 files changed, 210 insertions(+), 210 deletions(-) rename p/themes/base-theme/{template.css => frss.css} (84%) rename p/themes/base-theme/{template.rtl.css => frss.rtl.css} (84%) diff --git a/app/install.php b/app/install.php index b0363efbc93..9d0d855b814 100644 --- a/app/install.php +++ b/app/install.php @@ -670,7 +670,7 @@ function printStep5() { <?= _t('install.title') ?>: <?= _t('install.step', STEP + 1) ?> - + diff --git a/docs/en/developers/04_Frontend/02_Design.md b/docs/en/developers/04_Frontend/02_Design.md index f3dbc10eb66..a497ac29d63 100644 --- a/docs/en/developers/04_Frontend/02_Design.md +++ b/docs/en/developers/04_Frontend/02_Design.md @@ -11,7 +11,7 @@ The easiest way to create a theme is by copying and modifying the base theme (or - an **icons** folder containing .svg, .ico, and .png files to override existing icons - a **thumbs** folder containing a file, **original.png** that will be used as the preview for the theme -"_template.css" is normally added to the metadata file as a fallback for missing aspects. The file is taken from the base theme. If submitting a pull request for a theme, please know that [pull request themes must include this file.](https://github.com/FreshRSS/FreshRSS/pull/2938#issuecomment-624085450) +"_frss.css" is normally added to the metadata file as a fallback for missing aspects. The file is taken from the base theme. If submitting a pull request for a theme, please know that [pull request themes must include this file.](https://github.com/FreshRSS/FreshRSS/pull/2938#issuecomment-624085450) ## RTL Support @@ -31,7 +31,7 @@ To replace the default icons, add an "icons" folder to your theme’s folder. Us "author": "Theme author", "description": "Theme description", "version": 0.1, - "files": ["_template.css", "file1.css", "file2.css"] + "files": ["_frss.css", "file1.css", "file2.css"] } ``` diff --git a/p/themes/Alternative-Dark/metadata.json b/p/themes/Alternative-Dark/metadata.json index ea97e9fa03a..707ed1da51e 100644 --- a/p/themes/Alternative-Dark/metadata.json +++ b/p/themes/Alternative-Dark/metadata.json @@ -3,5 +3,5 @@ "author": "Ghost", "description": "Save my eyes!!!", "version": 0.1, - "files": ["_template.css", "adark.css"] + "files": ["_frss.css", "adark.css"] } diff --git a/p/themes/Ansum/metadata.json b/p/themes/Ansum/metadata.json index c76c3fa9ca2..23b1a96cce3 100644 --- a/p/themes/Ansum/metadata.json +++ b/p/themes/Ansum/metadata.json @@ -3,5 +3,5 @@ "author": "Thomas Guesnon", "description": "Thème sablonneux", "version": 0.1, - "files": ["_template.css", "ansum.css"] + "files": ["_frss.css", "ansum.css"] } diff --git a/p/themes/BlueLagoon/metadata.json b/p/themes/BlueLagoon/metadata.json index 71f364ad9f5..7822d73468c 100644 --- a/p/themes/BlueLagoon/metadata.json +++ b/p/themes/BlueLagoon/metadata.json @@ -3,5 +3,5 @@ "author": "Mister aiR", "description": "C’est un cocktail (bis)! C’est la version plus fresh de Screwdriver. C’est… c’est… un thème pour l’agrégateur de flux RSS FreshRSS. En toute modestie, ce thème tue du Nyan Cat.", "version": 1.0, - "files": ["_template.css","BlueLagoon.css"] + "files": ["_frss.css","BlueLagoon.css"] } diff --git a/p/themes/Dark-pink/metadata.json b/p/themes/Dark-pink/metadata.json index 0d69fa2d6b0..7e582eefd2e 100644 --- a/p/themes/Dark-pink/metadata.json +++ b/p/themes/Dark-pink/metadata.json @@ -3,5 +3,5 @@ "author": "Miicat_47", "description": "Nice dawk pink theme. >_< UwU", "version": 0.1, - "files": ["_template.css", "../Alternative-Dark/adark.css", "pinkdark.css"] + "files": ["_frss.css", "../Alternative-Dark/adark.css", "pinkdark.css"] } diff --git a/p/themes/Dark/metadata.json b/p/themes/Dark/metadata.json index 7a85bd6cf2f..b3842899516 100644 --- a/p/themes/Dark/metadata.json +++ b/p/themes/Dark/metadata.json @@ -3,5 +3,5 @@ "author": "AD", "description": "The dark side of the “Origine” theme", "version": 0.2, - "files": ["_template.css", "dark.css"] + "files": ["_frss.css", "dark.css"] } diff --git a/p/themes/Flat/metadata.json b/p/themes/Flat/metadata.json index 3afdc98af8c..27a83fe83a0 100644 --- a/p/themes/Flat/metadata.json +++ b/p/themes/Flat/metadata.json @@ -3,5 +3,5 @@ "author": "Marien Fressinaud", "description": "Thème plat pour FreshRSS", "version": 0.2, - "files": ["_template.css", "flat.css"] -} \ No newline at end of file + "files": ["_frss.css", "flat.css"] +} diff --git a/p/themes/Mapco/metadata.json b/p/themes/Mapco/metadata.json index 24bb04b87c2..353d0908a53 100644 --- a/p/themes/Mapco/metadata.json +++ b/p/themes/Mapco/metadata.json @@ -3,5 +3,5 @@ "author": "Thomas Guesnon", "description": "Thème pour FreshRSS", "version": 0.1, - "files": ["_template.css", "mapco.css"] + "files": ["_frss.css", "mapco.css"] } diff --git a/p/themes/Nord/metadata.json b/p/themes/Nord/metadata.json index aaaf64c44d6..eeb9ef808f3 100644 --- a/p/themes/Nord/metadata.json +++ b/p/themes/Nord/metadata.json @@ -3,5 +3,5 @@ "author": "joelchrono12", "description": "A simple theme based on Nord's color scheme", "version": 0.1, - "files": ["_template.css","nord.css"] + "files": ["_frss.css","nord.css"] } diff --git a/p/themes/Origine-compact/metadata.json b/p/themes/Origine-compact/metadata.json index 67038e17320..ded2f0616d4 100644 --- a/p/themes/Origine-compact/metadata.json +++ b/p/themes/Origine-compact/metadata.json @@ -3,5 +3,5 @@ "author": "Kevin Papst", "description": "A theme that tries to use the screen size more efficiently, based on Origine", "version": 0.1, - "files": ["_template.css", "../Origine/origine.css", "origine-compact.css"] + "files": ["_frss.css", "../Origine/origine.css", "origine-compact.css"] } diff --git a/p/themes/Origine/metadata.json b/p/themes/Origine/metadata.json index 774320eb40d..721f9af8b97 100644 --- a/p/themes/Origine/metadata.json +++ b/p/themes/Origine/metadata.json @@ -3,5 +3,5 @@ "author": "Marien Fressinaud", "description": "Le thème par défaut pour FreshRSS", "version": 0.2, - "files": ["_template.css", "origine.css"] + "files": ["_frss.css", "origine.css"] } diff --git a/p/themes/Pafat/metadata.json b/p/themes/Pafat/metadata.json index ba82e0a0980..f70442378b9 100644 --- a/p/themes/Pafat/metadata.json +++ b/p/themes/Pafat/metadata.json @@ -3,5 +3,5 @@ "author": "Plopoyop", "description": "Un thème pour FreshRSS", "version": 0.2, - "files": ["_template.css", "pafat.css"] + "files": ["_frss.css", "pafat.css"] } diff --git a/p/themes/Screwdriver/metadata.json b/p/themes/Screwdriver/metadata.json index f07769d6a6a..08654e51d0a 100644 --- a/p/themes/Screwdriver/metadata.json +++ b/p/themes/Screwdriver/metadata.json @@ -3,5 +3,5 @@ "author": "Mister aiR", "description": "C’est un cocktail ! C’est chaud mais « fresh » à la fois. Ce thème tue du chaton.", "version": 1.1, - "files": ["_template.css","screwdriver.css"] + "files": ["_frss.css","screwdriver.css"] } diff --git a/p/themes/Swage/metadata.json b/p/themes/Swage/metadata.json index a81c10cfd58..d51b026ccf8 100644 --- a/p/themes/Swage/metadata.json +++ b/p/themes/Swage/metadata.json @@ -3,5 +3,5 @@ "author": "Patrick Crandol", "description": "A Fresh take on the interface, inspired by the Flat Theme.", "version": 1.0, - "files": ["_template.css", "swage.css"] + "files": ["_frss.css", "swage.css"] } diff --git a/p/themes/base-theme/template.css b/p/themes/base-theme/frss.css similarity index 84% rename from p/themes/base-theme/template.css rename to p/themes/base-theme/frss.css index 08c5623ac78..56a31466482 100644 --- a/p/themes/base-theme/template.css +++ b/p/themes/base-theme/frss.css @@ -3,40 +3,40 @@ /*=== GENERAL */ /*============*/ :root { - --template-font-color-dark: #000; - --template-font-color-grey-dark: #666; - --template-font-color-grey-light: #aaa; - --template-font-color-light: #fff; - --template-background-color-error-transparent: #ff000040; - --template-font-color-error: #f00; + --frss-font-color-dark: #000; + --frss-font-color-grey-dark: #666; + --frss-font-color-grey-light: #aaa; + --frss-font-color-light: #fff; + --frss-background-color-error-transparent: #ff000040; + --frss-font-color-error: #f00; - --template-background-color: #fff; - --template-background-color-transparent: #ffffff7f; - --template-background-color-middle: #eee; - --template-background-color-dark: #ccc; + --frss-background-color: #fff; + --frss-background-color-transparent: #ffffff7f; + --frss-background-color-middle: #eee; + --frss-background-color-dark: #ccc; - --template-border-color: #999; - --template-border-color-error: #f00; + --frss-border-color: #999; + --frss-border-color-error: #f00; - --template-switch-accent-color: #85d885; + --frss-switch-accent-color: #85d885; - --template-dragdrop-color: #ff0; - --template-dragdrop-color-transparent: #ff02; + --frss-dragdrop-color: #ff0; + --frss-dragdrop-color-transparent: #ff02; - --template-noThumbnailImage-background-color: #ddd; + --frss-noThumbnailImage-background-color: #ddd; - --template-darken-background-hover-transparent: #6662; + --frss-darken-background-hover-transparent: #6662; - --template-modal-background-color-transparent: #0007; + --frss-modal-background-color-transparent: #0007; - --template-box-shadow-color-transparent: #0003; + --frss-box-shadow-color-transparent: #0003; - --template-scrollbar-handle: #0002; - --template-scrollbar-handle-hover: #0005; - --template-scrollbar-track: #0001; - --template-scrollbar-track-hover: #0001; + --frss-scrollbar-handle: #0002; + --frss-scrollbar-handle-hover: #0005; + --frss-scrollbar-track: #0001; + --frss-scrollbar-track-hover: #0001; - --template-loading-image: url("loader.gif"); + --frss-loading-image: url("loader.gif"); } @font-face { @@ -51,7 +51,7 @@ html, body { margin: 0; padding: 0; - background-color: var(--template-background-color); + background-color: var(--frss-background-color); height: 100%; font-family: "OpenSans", "Cantarell", "Helvetica", "Arial", sans-serif; font-size: 100%; @@ -123,11 +123,11 @@ sup { } kbd { - background-color: var(--template-background-color-middle); + background-color: var(--frss-background-color-middle); padding: 2px 4px 2px 24px; display: inline-block; - color: var(--template-font-color-grey-dark); - border: 1px solid var(--template-border-color); + color: var(--frss-font-color-grey-dark); + border: 1px solid var(--frss-border-color); border-radius: 3px; text-indent: -20px; white-space: pre-wrap; @@ -246,7 +246,7 @@ textarea[rows="2"] { } textarea:invalid { - border: 2px dashed var(--template-border-color-error); + border: 2px dashed var(--frss-border-color-error); } .prompt textarea, @@ -262,9 +262,9 @@ input:disabled, select:disabled { background-color: transparent; min-width: 75px; - color: var(--template-font-color-grey-light); + color: var(--frss-font-color-grey-light); font-style: italic; - border: 1px dashed var(--template-border-color); + border: 1px dashed var(--frss-border-color); } input[type="radio"], @@ -317,7 +317,7 @@ button.as-link:active { } button.as-link[disabled] { - color: var(--template-font-color-grey-light) !important; + color: var(--frss-font-color-grey-light) !important; } /*=== Tables */ @@ -455,7 +455,7 @@ a.btn { height: 1.75em; border: 0; border-radius: 1em; - background-color: var(--template-background-color-dark); + background-color: var(--frss-background-color-dark); cursor: pointer; box-sizing: content-box; background-repeat: no-repeat; @@ -471,7 +471,7 @@ a.btn { } .switch.active { - background-color: var(--template-switch-accent-color); + background-color: var(--frss-switch-accent-color); background-repeat: no-repeat; background-position: center center; background-image: url('../icons/enabled.svg'); @@ -502,7 +502,7 @@ a.btn { top: 0.2em; width: 1.5em; height: 1.5em; - background-color: var(--template-background-color); + background-color: var(--frss-background-color); background-image: url('../icons/disabled.svg'); background-repeat: no-repeat; background-position: center center; @@ -511,7 +511,7 @@ a.btn { } .switch:not([disabled]):hover::before { - background-color: var(--template-background-color-middle); + background-color: var(--frss-background-color-middle); } .switch.active::before { @@ -544,7 +544,7 @@ a.btn { .btn:focus-visible, input[type="checkbox"]:focus-visible { - outline: 2px solid var(--template-border-color); + outline: 2px solid var(--frss-border-color); } /*=== Navigation */ @@ -614,9 +614,9 @@ input[type="checkbox"]:focus-visible { .dropdown-menu { margin: 0; - background-color: var(--template-background-color); + background-color: var(--frss-background-color); display: none; - border: 1px solid var(--template-border-color); + border: 1px solid var(--frss-border-color); min-width: 200px; position: absolute; right: 0; @@ -628,7 +628,7 @@ input[type="checkbox"]:focus-visible { height: 10px; border-width: 1px 0 0 1px; border-style: solid; - border-color: var(--template-border-color); + border-color: var(--frss-border-color); content: ""; position: absolute; top: -6px; @@ -696,7 +696,7 @@ input[type="checkbox"]:focus-visible { .separator { display: block; height: 0; - border-bottom: 1px solid var(--template-border-color); + border-bottom: 1px solid var(--frss-border-color); } /*=== Alerts */ @@ -741,7 +741,7 @@ input[type="checkbox"]:focus-visible { margin: 0 0 5em; padding: 1em 0; width: 100%; - border-top: 1px solid var(--template-border-color); + border-top: 1px solid var(--frss-border-color); text-align: center; } @@ -850,7 +850,7 @@ input[type="checkbox"]:focus-visible { } .dragging { - background-color: var(--template-dragdrop-color) + background-color: var(--frss-dragdrop-color) } .dragging .icon { @@ -862,17 +862,17 @@ input[type="checkbox"]:focus-visible { } .drag-active .drop-zone:not(.drag-disallowed) { - background: repeating-linear-gradient(45deg, transparent, transparent 40px, var(--template-dragdrop-color-transparent) 40px, var(--template-dragdrop-color-transparent) 60px); + background: repeating-linear-gradient(45deg, transparent, transparent 40px, var(--frss-dragdrop-color-transparent) 40px, var(--frss-dragdrop-color-transparent) 60px); } .drag-active .drag-hover.drop-zone { - background-color: var(--template-dragdrop-color-transparent); + background-color: var(--frss-dragdrop-color-transparent); transition: background 0.5s; } li.drag-hover { margin: 0 0 5px; - border-bottom: 2px solid var(--template-border-color); + border-bottom: 2px solid var(--frss-border-color); } .drag-drop { @@ -882,11 +882,11 @@ li.drag-hover { @keyframes droppedKeyframe { 0% { - background-color: var(--template-dragdrop-color-transparent); + background-color: var(--frss-dragdrop-color-transparent); } 50% { - background-color: var(--template-dragdrop-color); + background-color: var(--frss-dragdrop-color); } 100% { @@ -899,38 +899,38 @@ li.drag-hover { @supports (scrollbar-width: thin) { #sidebar, .scrollbar-thin { - scrollbar-color: var(--template-scrollbar-handle) var(--template-scrollbar-track); + scrollbar-color: var(--frss-scrollbar-handle) var(--frss-scrollbar-track); scrollbar-width: thin; } #sidebar:hover, .scrollbar-thin:hover { - scrollbar-color: var(--template-scrollbar-handle-hover) var(--template-scrollbar-track-hover); + scrollbar-color: var(--frss-scrollbar-handle-hover) var(--frss-scrollbar-track-hover); } } @supports not (scrollbar-width: thin) { #sidebar::-webkit-scrollbar, .scrollbar-thin::-webkit-scrollbar { - background-color: var(--template-scrollbar-track); + background-color: var(--frss-scrollbar-track); width: 8px; } #sidebar:hover::-webkit-scrollbar, .scrollbar-thin:hover::-webkit-scrollbar { - background-color: var(--template-scrollbar-track-hover); + background-color: var(--frss-scrollbar-track-hover); } #sidebar::-webkit-scrollbar-thumb, .scrollbar-thin::-webkit-scrollbar-thumb { - background-color: var(--template-scrollbar-handle); + background-color: var(--frss-scrollbar-handle); display: unset; border-radius: 5px; } #sidebar:hover::-webkit-scrollbar-thumb, .scrollbar-thin:hover::-webkit-scrollbar-thumb { - background-color: var(--template-scrollbar-handle-hover); + background-color: var(--frss-scrollbar-handle-hover); } } @@ -1089,7 +1089,7 @@ input[type="search"] { #panel .close:hover, #slider .toggle_aside:hover, .dropdown-menu .toggle_aside:hover { - background-color: var(--template-darken-background-hover-transparent); + background-color: var(--frss-darken-background-hover-transparent); } /*=== New article notification */ @@ -1148,7 +1148,7 @@ a.website:hover .favicon { } .flux:not(.current):hover .item.title { - background-color: var(--template-background-color); + background-color: var(--frss-background-color); max-width: calc(100% - 320px); position: absolute; } @@ -1158,7 +1158,7 @@ a.website:hover .favicon { } .flux .item.title a { - color: var(--template-font-color-dark); + color: var(--frss-font-color-dark); text-decoration: none; } @@ -1197,7 +1197,7 @@ a.website:hover .favicon { } .flux .item.thumbnail img { - background: repeating-linear-gradient( -45deg, var(--template-noThumbnailImage-background-color), var(--template-noThumbnailImage-background-color) 5px, transparent 5px, transparent 10px ); + background: repeating-linear-gradient( -45deg, var(--frss-noThumbnailImage-background-color), var(--frss-noThumbnailImage-background-color) 5px, transparent 5px, transparent 10px ); display: inline-block; width: 100%; height: 100%; @@ -1207,7 +1207,7 @@ a.website:hover .favicon { .flux .item.title .summary { max-height: 3em; - color: var(--template-font-color-grey-dark); + color: var(--frss-font-color-grey-dark); font-size: 0.9em; line-height: 1.5em; font-weight: normal; @@ -1218,7 +1218,7 @@ a.website:hover .favicon { .flux .item.title .author { padding-left: 1rem; - color: var(--template-font-color-grey-dark); + color: var(--frss-font-color-grey-dark); font-size: .9rem; font-weight: normal; } @@ -1276,14 +1276,14 @@ a.website:hover .favicon { .content > header, .content > footer { - color: var(--template-font-color-grey-light); + color: var(--frss-font-color-grey-light); font-size: .9rem; } .content > footer { margin: 2rem 0 2rem; padding-top: 1rem; - border-top: 2px solid var(--template-border-color); + border-top: 2px solid var(--frss-border-color); clear: both; } @@ -1356,8 +1356,8 @@ br { top: 1em; left: 25%; right: 25%; z-index: 9999; - background-color: var(--template-background-color); - border: 1px solid var(--template-border-color); + background-color: var(--frss-background-color); + border: 1px solid var(--frss-border-color); opacity: 1; line-height: 2; visibility: visible; @@ -1377,7 +1377,7 @@ br { } .notification a.close:hover { - background-color: var(--template-darken-background-hover-transparent); + background-color: var(--frss-darken-background-hover-transparent); } .notification a.close:hover .icon { @@ -1407,7 +1407,7 @@ br { width: 100%; height: 100%; overflow: auto; - background-color: var(--template-modal-background-color-transparent); + background-color: var(--frss-modal-background-color-transparent); } #popup-content { @@ -1416,9 +1416,9 @@ br { width: 80%; height: 80%; overflow: hidden; - background-color: var(--template-background-color); + background-color: var(--frss-background-color); border-radius: .25rem; - box-shadow: 3px 3px 5px var(--template-box-shadow-color-transparent); + box-shadow: 3px 3px 5px var(--frss-box-shadow-color-transparent); } .popup-row { @@ -1431,14 +1431,14 @@ br { width: 27px; height: 27px; padding-bottom: 5px; - color: var(--template-font-color-grey-light); + color: var(--frss-font-color-grey-light); font-size: 28px; font-weight: bold; } #popup-close:hover, #popup-close:focus { - color: var(--template-font-color-dark); + color: var(--frss-font-color-dark); text-decoration: none; cursor: pointer; } @@ -1489,12 +1489,12 @@ br { #load_more.loading, #load_more.loading:hover { padding: 10px 20px; - background: var(--template-loading-image) center center no-repeat var(--template-background-color); + background: var(--frss-loading-image) center center no-repeat var(--frss-background-color); font-size: 0; } .loading { - background: var(--template-loading-image) center center no-repeat; + background: var(--frss-loading-image) center center no-repeat; font-size: 0; } @@ -1561,7 +1561,7 @@ br { position: fixed; top: 0; bottom: 0; left: 0; right: 0; - background-color: var(--template-modal-background-color-transparent); + background-color: var(--frss-modal-background-color-transparent); opacity: 0; transition: visibility .3s, opacity .3s; visibility: hidden; @@ -1573,7 +1573,7 @@ br { } #panel { - background-color: var(--template-background-color); + background-color: var(--frss-background-color); display: none; position: fixed; top: 2%; bottom: 2%; @@ -1594,7 +1594,7 @@ br { /*=== Slider */ #slider { - background-color: var(--template-background-color); + background-color: var(--frss-background-color); width: 0; position: fixed; top: 0; bottom: 0; @@ -1605,7 +1605,7 @@ br { #slider.active:target { width: 750px; - box-shadow: -3px 3px 5px var(--template-box-shadow-color-transparent); + box-shadow: -3px 3px 5px var(--frss-box-shadow-color-transparent); } #slider.sliding { @@ -1620,7 +1620,7 @@ br { } #slider.active:target + #close-slider { - background-color: var(--template-modal-background-color-transparent); + background-color: var(--frss-modal-background-color-transparent); font-size: 0; left: 0; z-index: 99; @@ -1653,7 +1653,7 @@ br { display: block; max-width: 640px; height: 320px; - border: 1px solid var(--template-border-color); + border: 1px solid var(--frss-border-color); position: relative; min-width: 260px; margin-bottom: 30px; @@ -1688,7 +1688,7 @@ br { display: none; width: 65px; height: 100%; - color: var(--template-font-color-light); + color: var(--frss-font-color-light); font-family: "Varela Round", sans-serif; font-size: 1000%; position: absolute; @@ -1698,15 +1698,15 @@ br { transition: opacity .2s; text-align: center; line-height: 225%; - background-color: var(--template-background-color-transparent); + background-color: var(--frss-background-color-transparent); text-shadow: 0px 0px 15px rgb(119, 119, 119); } .properties { padding: 5px; - background-color: var(--template-background-color-transparent); + background-color: var(--frss-background-color-transparent); display: none; - border-top: 1px solid var(--template-border-color); + border-top: 1px solid var(--frss-border-color); bottom: 0; left: 0; right: 0; position: absolute; @@ -1753,18 +1753,18 @@ input:checked + .slide-container .properties { } .log-item.log-error { - background-color: var(--template-background-color-error-transparent); + background-color: var(--frss-background-color-error-transparent); } .item.share.error a::after, .category .title.error::before, .item.feed.error .item-title::before { content: " ⚠ "; - color: var(--template-font-color-error); + color: var(--frss-font-color-error); } .feed.item.error.active .item-title::before { - color: var(--template-font-color-light); + color: var(--frss-font-color-light); } .aside .category .title:not([data-unread="0"])::after, @@ -1805,8 +1805,8 @@ input:checked + .slide-container .properties { } .feed.active .item-title:not([data-unread="0"])::after { - color: var(--template-font-color-light); - border: 1px solid var(--template-border-color); + color: var(--frss-font-color-light); + border: 1px solid var(--frss-border-color); font-weight: bold; } @@ -1904,7 +1904,7 @@ input:checked + .slide-container .properties { } .aside:target { - box-shadow: 3px 3px 5px var(--template-box-shadow-color-transparent); + box-shadow: 3px 3px 5px var(--frss-box-shadow-color-transparent); } .aside .toggle_aside, @@ -1914,7 +1914,7 @@ input:checked + .slide-container .properties { display: block; width: 100%; height: 50px; - border-bottom: 1px solid var(--template-border-color); + border-bottom: 1px solid var(--frss-border-color); line-height: 50px; text-align: center; } @@ -1963,7 +1963,7 @@ input:checked + .slide-container .properties { } .dropdown-target:target ~ .dropdown-toggle::after { - background-color: var(--template-background-color); + background-color: var(--frss-background-color); width: 10px; height: 10px; content: ""; @@ -1990,7 +1990,7 @@ input:checked + .slide-container .properties { padding-top: 0; margin-top: 0; overflow: auto; - box-shadow: -3px 0 3px var(--template-box-shadow-color-transparent); + box-shadow: -3px 0 3px var(--frss-box-shadow-color-transparent); } .configure .dropdown-target:target ~ .dropdown-toggle::after { @@ -2021,7 +2021,7 @@ input:checked + .slide-container .properties { .aside:target + .close-aside, .configure .dropdown-target:target ~ .dropdown-close { - background-color: var(--template-modal-background-color-transparent); + background-color: var(--frss-modal-background-color-transparent); display: block; font-size: 0; position: fixed; @@ -2127,7 +2127,7 @@ input:checked + .slide-container .properties { } html, body { - background-color: var(--template-background-color); + background-color: var(--frss-background-color); font-family: Serif; } @@ -2141,7 +2141,7 @@ input:checked + .slide-container .properties { } .flux_content .content a { - color: var(--template-font-color-dark); + color: var(--frss-font-color-dark); } .flux_content .content a::after { @@ -2158,8 +2158,8 @@ input:checked + .slide-container .properties { padding: 1rem; max-width: 1000px; text-align: center; - background-color: var(--template-background-color-middle); - border: 1px solid var(--template-border-color); + background-color: var(--frss-background-color-middle); + border: 1px solid var(--frss-border-color); border-radius: .25rem; } diff --git a/p/themes/base-theme/template.rtl.css b/p/themes/base-theme/frss.rtl.css similarity index 84% rename from p/themes/base-theme/template.rtl.css rename to p/themes/base-theme/frss.rtl.css index a6428f009cb..9aa043ccdf7 100644 --- a/p/themes/base-theme/template.rtl.css +++ b/p/themes/base-theme/frss.rtl.css @@ -3,40 +3,40 @@ /*=== GENERAL */ /*============*/ :root { - --template-font-color-dark: #000; - --template-font-color-grey-dark: #666; - --template-font-color-grey-light: #aaa; - --template-font-color-light: #fff; - --template-background-color-error-transparent: #ff000040; - --template-font-color-error: #f00; + --frss-font-color-dark: #000; + --frss-font-color-grey-dark: #666; + --frss-font-color-grey-light: #aaa; + --frss-font-color-light: #fff; + --frss-background-color-error-transparent: #ff000040; + --frss-font-color-error: #f00; - --template-background-color: #fff; - --template-background-color-transparent: #ffffff7f; - --template-background-color-middle: #eee; - --template-background-color-dark: #ccc; + --frss-background-color: #fff; + --frss-background-color-transparent: #ffffff7f; + --frss-background-color-middle: #eee; + --frss-background-color-dark: #ccc; - --template-border-color: #999; - --template-border-color-error: #f00; + --frss-border-color: #999; + --frss-border-color-error: #f00; - --template-switch-accent-color: #85d885; + --frss-switch-accent-color: #85d885; - --template-dragdrop-color: #ff0; - --template-dragdrop-color-transparent: #ff02; + --frss-dragdrop-color: #ff0; + --frss-dragdrop-color-transparent: #ff02; - --template-noThumbnailImage-background-color: #ddd; + --frss-noThumbnailImage-background-color: #ddd; - --template-darken-background-hover-transparent: #6662; + --frss-darken-background-hover-transparent: #6662; - --template-modal-background-color-transparent: #0007; + --frss-modal-background-color-transparent: #0007; - --template-box-shadow-color-transparent: #0003; + --frss-box-shadow-color-transparent: #0003; - --template-scrollbar-handle: #0002; - --template-scrollbar-handle-hover: #0005; - --template-scrollbar-track: #0001; - --template-scrollbar-track-hover: #0001; + --frss-scrollbar-handle: #0002; + --frss-scrollbar-handle-hover: #0005; + --frss-scrollbar-track: #0001; + --frss-scrollbar-track-hover: #0001; - --template-loading-image: url("loader.gif"); + --frss-loading-image: url("loader.gif"); } @font-face { @@ -51,7 +51,7 @@ html, body { margin: 0; padding: 0; - background-color: var(--template-background-color); + background-color: var(--frss-background-color); height: 100%; font-family: "OpenSans", "Cantarell", "Helvetica", "Arial", sans-serif; font-size: 100%; @@ -123,11 +123,11 @@ sup { } kbd { - background-color: var(--template-background-color-middle); + background-color: var(--frss-background-color-middle); padding: 2px 24px 2px 4px; display: inline-block; - color: var(--template-font-color-grey-dark); - border: 1px solid var(--template-border-color); + color: var(--frss-font-color-grey-dark); + border: 1px solid var(--frss-border-color); border-radius: 3px; text-indent: -20px; white-space: pre-wrap; @@ -246,7 +246,7 @@ textarea[rows="2"] { } textarea:invalid { - border: 2px dashed var(--template-border-color-error); + border: 2px dashed var(--frss-border-color-error); } .prompt textarea, @@ -262,9 +262,9 @@ input:disabled, select:disabled { background-color: transparent; min-width: 75px; - color: var(--template-font-color-grey-light); + color: var(--frss-font-color-grey-light); font-style: italic; - border: 1px dashed var(--template-border-color); + border: 1px dashed var(--frss-border-color); } input[type="radio"], @@ -317,7 +317,7 @@ button.as-link:active { } button.as-link[disabled] { - color: var(--template-font-color-grey-light) !important; + color: var(--frss-font-color-grey-light) !important; } /*=== Tables */ @@ -455,7 +455,7 @@ a.btn { height: 1.75em; border: 0; border-radius: 1em; - background-color: var(--template-background-color-dark); + background-color: var(--frss-background-color-dark); cursor: pointer; box-sizing: content-box; background-repeat: no-repeat; @@ -471,7 +471,7 @@ a.btn { } .switch.active { - background-color: var(--template-switch-accent-color); + background-color: var(--frss-switch-accent-color); background-repeat: no-repeat; background-position: center center; background-image: url('../icons/enabled.svg'); @@ -502,7 +502,7 @@ a.btn { top: 0.2em; width: 1.5em; height: 1.5em; - background-color: var(--template-background-color); + background-color: var(--frss-background-color); background-image: url('../icons/disabled.svg'); background-repeat: no-repeat; background-position: center center; @@ -511,7 +511,7 @@ a.btn { } .switch:not([disabled]):hover::before { - background-color: var(--template-background-color-middle); + background-color: var(--frss-background-color-middle); } .switch.active::before { @@ -544,7 +544,7 @@ a.btn { .btn:focus-visible, input[type="checkbox"]:focus-visible { - outline: 2px solid var(--template-border-color); + outline: 2px solid var(--frss-border-color); } /*=== Navigation */ @@ -614,9 +614,9 @@ input[type="checkbox"]:focus-visible { .dropdown-menu { margin: 0; - background-color: var(--template-background-color); + background-color: var(--frss-background-color); display: none; - border: 1px solid var(--template-border-color); + border: 1px solid var(--frss-border-color); min-width: 200px; position: absolute; left: 0; @@ -628,7 +628,7 @@ input[type="checkbox"]:focus-visible { height: 10px; border-width: 1px 1px 0 0; border-style: solid; - border-color: var(--template-border-color); + border-color: var(--frss-border-color); content: ""; position: absolute; top: -6px; @@ -696,7 +696,7 @@ input[type="checkbox"]:focus-visible { .separator { display: block; height: 0; - border-bottom: 1px solid var(--template-border-color); + border-bottom: 1px solid var(--frss-border-color); } /*=== Alerts */ @@ -741,7 +741,7 @@ input[type="checkbox"]:focus-visible { margin: 0 0 5em; padding: 1em 0; width: 100%; - border-top: 1px solid var(--template-border-color); + border-top: 1px solid var(--frss-border-color); text-align: center; } @@ -850,7 +850,7 @@ input[type="checkbox"]:focus-visible { } .dragging { - background-color: var(--template-dragdrop-color) + background-color: var(--frss-dragdrop-color) } .dragging .icon { @@ -862,17 +862,17 @@ input[type="checkbox"]:focus-visible { } .drag-active .drop-zone:not(.drag-disallowed) { - background: repeating-linear-gradient(-45deg, transparent, transparent 40px, var(--template-dragdrop-color-transparent) 40px, var(--template-dragdrop-color-transparent) 60px); + background: repeating-linear-gradient(-45deg, transparent, transparent 40px, var(--frss-dragdrop-color-transparent) 40px, var(--frss-dragdrop-color-transparent) 60px); } .drag-active .drag-hover.drop-zone { - background-color: var(--template-dragdrop-color-transparent); + background-color: var(--frss-dragdrop-color-transparent); transition: background 0.5s; } li.drag-hover { margin: 0 0 5px; - border-bottom: 2px solid var(--template-border-color); + border-bottom: 2px solid var(--frss-border-color); } .drag-drop { @@ -882,11 +882,11 @@ li.drag-hover { @keyframes droppedKeyframe { 0% { - background-color: var(--template-dragdrop-color-transparent); + background-color: var(--frss-dragdrop-color-transparent); } 50% { - background-color: var(--template-dragdrop-color); + background-color: var(--frss-dragdrop-color); } 100% { @@ -899,38 +899,38 @@ li.drag-hover { @supports (scrollbar-width: thin) { #sidebar, .scrollbar-thin { - scrollbar-color: var(--template-scrollbar-handle) var(--template-scrollbar-track); + scrollbar-color: var(--frss-scrollbar-handle) var(--frss-scrollbar-track); scrollbar-width: thin; } #sidebar:hover, .scrollbar-thin:hover { - scrollbar-color: var(--template-scrollbar-handle-hover) var(--template-scrollbar-track-hover); + scrollbar-color: var(--frss-scrollbar-handle-hover) var(--frss-scrollbar-track-hover); } } @supports not (scrollbar-width: thin) { #sidebar::-webkit-scrollbar, .scrollbar-thin::-webkit-scrollbar { - background-color: var(--template-scrollbar-track); + background-color: var(--frss-scrollbar-track); width: 8px; } #sidebar:hover::-webkit-scrollbar, .scrollbar-thin:hover::-webkit-scrollbar { - background-color: var(--template-scrollbar-track-hover); + background-color: var(--frss-scrollbar-track-hover); } #sidebar::-webkit-scrollbar-thumb, .scrollbar-thin::-webkit-scrollbar-thumb { - background-color: var(--template-scrollbar-handle); + background-color: var(--frss-scrollbar-handle); display: unset; border-radius: 5px; } #sidebar:hover::-webkit-scrollbar-thumb, .scrollbar-thin:hover::-webkit-scrollbar-thumb { - background-color: var(--template-scrollbar-handle-hover); + background-color: var(--frss-scrollbar-handle-hover); } } @@ -1089,7 +1089,7 @@ input[type="search"] { #panel .close:hover, #slider .toggle_aside:hover, .dropdown-menu .toggle_aside:hover { - background-color: var(--template-darken-background-hover-transparent); + background-color: var(--frss-darken-background-hover-transparent); } /*=== New article notification */ @@ -1148,7 +1148,7 @@ a.website:hover .favicon { } .flux:not(.current):hover .item.title { - background-color: var(--template-background-color); + background-color: var(--frss-background-color); max-width: calc(100% - 320px); position: absolute; } @@ -1158,7 +1158,7 @@ a.website:hover .favicon { } .flux .item.title a { - color: var(--template-font-color-dark); + color: var(--frss-font-color-dark); text-decoration: none; } @@ -1197,7 +1197,7 @@ a.website:hover .favicon { } .flux .item.thumbnail img { - background: repeating-linear-gradient( 45deg, var(--template-noThumbnailImage-background-color), var(--template-noThumbnailImage-background-color) 5px, transparent 5px, transparent 10px ); + background: repeating-linear-gradient( 45deg, var(--frss-noThumbnailImage-background-color), var(--frss-noThumbnailImage-background-color) 5px, transparent 5px, transparent 10px ); display: inline-block; width: 100%; height: 100%; @@ -1207,7 +1207,7 @@ a.website:hover .favicon { .flux .item.title .summary { max-height: 3em; - color: var(--template-font-color-grey-dark); + color: var(--frss-font-color-grey-dark); font-size: 0.9em; line-height: 1.5em; font-weight: normal; @@ -1218,7 +1218,7 @@ a.website:hover .favicon { .flux .item.title .author { padding-right: 1rem; - color: var(--template-font-color-grey-dark); + color: var(--frss-font-color-grey-dark); font-size: .9rem; font-weight: normal; } @@ -1276,14 +1276,14 @@ a.website:hover .favicon { .content > header, .content > footer { - color: var(--template-font-color-grey-light); + color: var(--frss-font-color-grey-light); font-size: .9rem; } .content > footer { margin: 2rem 0 2rem; padding-top: 1rem; - border-top: 2px solid var(--template-border-color); + border-top: 2px solid var(--frss-border-color); clear: both; } @@ -1356,8 +1356,8 @@ br { top: 1em; right: 25%; left: 25%; z-index: 9999; - background-color: var(--template-background-color); - border: 1px solid var(--template-border-color); + background-color: var(--frss-background-color); + border: 1px solid var(--frss-border-color); opacity: 1; line-height: 2; visibility: visible; @@ -1377,7 +1377,7 @@ br { } .notification a.close:hover { - background-color: var(--template-darken-background-hover-transparent); + background-color: var(--frss-darken-background-hover-transparent); } .notification a.close:hover .icon { @@ -1407,7 +1407,7 @@ br { width: 100%; height: 100%; overflow: auto; - background-color: var(--template-modal-background-color-transparent); + background-color: var(--frss-modal-background-color-transparent); } #popup-content { @@ -1416,9 +1416,9 @@ br { width: 80%; height: 80%; overflow: hidden; - background-color: var(--template-background-color); + background-color: var(--frss-background-color); border-radius: .25rem; - box-shadow: -3px 3px 5px var(--template-box-shadow-color-transparent); + box-shadow: -3px 3px 5px var(--frss-box-shadow-color-transparent); } .popup-row { @@ -1431,14 +1431,14 @@ br { width: 27px; height: 27px; padding-bottom: 5px; - color: var(--template-font-color-grey-light); + color: var(--frss-font-color-grey-light); font-size: 28px; font-weight: bold; } #popup-close:hover, #popup-close:focus { - color: var(--template-font-color-dark); + color: var(--frss-font-color-dark); text-decoration: none; cursor: pointer; } @@ -1489,12 +1489,12 @@ br { #load_more.loading, #load_more.loading:hover { padding: 10px 20px; - background: var(--template-loading-image) center center no-repeat var(--template-background-color); + background: var(--frss-loading-image) center center no-repeat var(--frss-background-color); font-size: 0; } .loading { - background: var(--template-loading-image) center center no-repeat; + background: var(--frss-loading-image) center center no-repeat; font-size: 0; } @@ -1561,7 +1561,7 @@ br { position: fixed; top: 0; bottom: 0; right: 0; left: 0; - background-color: var(--template-modal-background-color-transparent); + background-color: var(--frss-modal-background-color-transparent); opacity: 0; transition: visibility .3s, opacity .3s; visibility: hidden; @@ -1573,7 +1573,7 @@ br { } #panel { - background-color: var(--template-background-color); + background-color: var(--frss-background-color); display: none; position: fixed; top: 2%; bottom: 2%; @@ -1594,7 +1594,7 @@ br { /*=== Slider */ #slider { - background-color: var(--template-background-color); + background-color: var(--frss-background-color); width: 0; position: fixed; top: 0; bottom: 0; @@ -1605,7 +1605,7 @@ br { #slider.active:target { width: 750px; - box-shadow: 3px 3px 5px var(--template-box-shadow-color-transparent); + box-shadow: 3px 3px 5px var(--frss-box-shadow-color-transparent); } #slider.sliding { @@ -1620,7 +1620,7 @@ br { } #slider.active:target + #close-slider { - background-color: var(--template-modal-background-color-transparent); + background-color: var(--frss-modal-background-color-transparent); font-size: 0; right: 0; z-index: 99; @@ -1653,7 +1653,7 @@ br { display: block; max-width: 640px; height: 320px; - border: 1px solid var(--template-border-color); + border: 1px solid var(--frss-border-color); position: relative; min-width: 260px; margin-bottom: 30px; @@ -1688,7 +1688,7 @@ br { display: none; width: 65px; height: 100%; - color: var(--template-font-color-light); + color: var(--frss-font-color-light); font-family: "Varela Round", sans-serif; font-size: 1000%; position: absolute; @@ -1698,15 +1698,15 @@ br { transition: opacity .2s; text-align: center; line-height: 225%; - background-color: var(--template-background-color-transparent); + background-color: var(--frss-background-color-transparent); text-shadow: 0px 0px 15px rgb(119, 119, 119); } .properties { padding: 5px; - background-color: var(--template-background-color-transparent); + background-color: var(--frss-background-color-transparent); display: none; - border-top: 1px solid var(--template-border-color); + border-top: 1px solid var(--frss-border-color); bottom: 0; right: 0; left: 0; position: absolute; @@ -1753,18 +1753,18 @@ input:checked + .slide-container .properties { } .log-item.log-error { - background-color: var(--template-background-color-error-transparent); + background-color: var(--frss-background-color-error-transparent); } .item.share.error a::after, .category .title.error::before, .item.feed.error .item-title::before { content: " ⚠ "; - color: var(--template-font-color-error); + color: var(--frss-font-color-error); } .feed.item.error.active .item-title::before { - color: var(--template-font-color-light); + color: var(--frss-font-color-light); } .aside .category .title:not([data-unread="0"])::after, @@ -1805,8 +1805,8 @@ input:checked + .slide-container .properties { } .feed.active .item-title:not([data-unread="0"])::after { - color: var(--template-font-color-light); - border: 1px solid var(--template-border-color); + color: var(--frss-font-color-light); + border: 1px solid var(--frss-border-color); font-weight: bold; } @@ -1904,7 +1904,7 @@ input:checked + .slide-container .properties { } .aside:target { - box-shadow: -3px 3px 5px var(--template-box-shadow-color-transparent); + box-shadow: -3px 3px 5px var(--frss-box-shadow-color-transparent); } .aside .toggle_aside, @@ -1914,7 +1914,7 @@ input:checked + .slide-container .properties { display: block; width: 100%; height: 50px; - border-bottom: 1px solid var(--template-border-color); + border-bottom: 1px solid var(--frss-border-color); line-height: 50px; text-align: center; } @@ -1963,7 +1963,7 @@ input:checked + .slide-container .properties { } .dropdown-target:target ~ .dropdown-toggle::after { - background-color: var(--template-background-color); + background-color: var(--frss-background-color); width: 10px; height: 10px; content: ""; @@ -1990,7 +1990,7 @@ input:checked + .slide-container .properties { padding-top: 0; margin-top: 0; overflow: auto; - box-shadow: 3px 0 3px var(--template-box-shadow-color-transparent); + box-shadow: 3px 0 3px var(--frss-box-shadow-color-transparent); } .configure .dropdown-target:target ~ .dropdown-toggle::after { @@ -2021,7 +2021,7 @@ input:checked + .slide-container .properties { .aside:target + .close-aside, .configure .dropdown-target:target ~ .dropdown-close { - background-color: var(--template-modal-background-color-transparent); + background-color: var(--frss-modal-background-color-transparent); display: block; font-size: 0; position: fixed; @@ -2127,7 +2127,7 @@ input:checked + .slide-container .properties { } html, body { - background-color: var(--template-background-color); + background-color: var(--frss-background-color); font-family: Serif; } @@ -2141,7 +2141,7 @@ input:checked + .slide-container .properties { } .flux_content .content a { - color: var(--template-font-color-dark); + color: var(--frss-font-color-dark); } .flux_content .content a::after { @@ -2158,8 +2158,8 @@ input:checked + .slide-container .properties { padding: 1rem; max-width: 1000px; text-align: center; - background-color: var(--template-background-color-middle); - border: 1px solid var(--template-border-color); + background-color: var(--frss-background-color-middle); + border: 1px solid var(--frss-border-color); border-radius: .25rem; } diff --git a/p/themes/base-theme/metadata.json b/p/themes/base-theme/metadata.json index 4d59365a8c9..8ba17b10165 100644 --- a/p/themes/base-theme/metadata.json +++ b/p/themes/base-theme/metadata.json @@ -3,5 +3,5 @@ "author": "Your name", "description": "A wonderful base theme", "version": 0.1, - "files": ["template.css", "base.css"] + "files": ["frss.css", "base.css"] } From fc6203a904795d8d74df8ab2d66f8769f2d2a96f Mon Sep 17 00:00:00 2001 From: maTh Date: Thu, 29 Sep 2022 21:48:17 +0200 Subject: [PATCH 0399/2479] all themes (#4663) --- p/themes/Alternative-Dark/adark.css | 11 +++++++++- p/themes/Alternative-Dark/adark.rtl.css | 11 +++++++++- p/themes/Ansum/_reader-view.scss | 26 +++++++++++++++--------- p/themes/Ansum/ansum.css | 8 +++++--- p/themes/Ansum/ansum.rtl.css | 8 +++++--- p/themes/BlueLagoon/BlueLagoon.css | 12 +++++++++-- p/themes/BlueLagoon/BlueLagoon.rtl.css | 12 +++++++++-- p/themes/Dark/dark.css | 8 ++++++-- p/themes/Dark/dark.rtl.css | 8 ++++++-- p/themes/Flat/flat.css | 8 ++++++-- p/themes/Flat/flat.rtl.css | 8 ++++++-- p/themes/Mapco/_reader-view.scss | 26 +++++++++++++++--------- p/themes/Mapco/mapco.css | 8 +++++--- p/themes/Mapco/mapco.rtl.css | 8 +++++--- p/themes/Nord/nord.css | 8 +++++++- p/themes/Nord/nord.rtl.css | 8 +++++++- p/themes/Origine/origine.css | 4 +--- p/themes/Origine/origine.rtl.css | 4 +--- p/themes/Pafat/pafat.css | 8 ++++++-- p/themes/Pafat/pafat.rtl.css | 8 ++++++-- p/themes/Screwdriver/screwdriver.css | 15 ++++++++++++-- p/themes/Screwdriver/screwdriver.rtl.css | 15 ++++++++++++-- p/themes/Swage/swage.css | 7 ++++++- p/themes/Swage/swage.rtl.css | 7 ++++++- p/themes/Swage/swage.scss | 9 +++++++- p/themes/base-theme/base.css | 8 +++++++- p/themes/base-theme/base.rtl.css | 8 +++++++- p/themes/base-theme/frss.css | 10 +++++++++ p/themes/base-theme/frss.rtl.css | 10 +++++++++ 29 files changed, 224 insertions(+), 67 deletions(-) diff --git a/p/themes/Alternative-Dark/adark.css b/p/themes/Alternative-Dark/adark.css index 7d098c2becc..7b6efda4459 100644 --- a/p/themes/Alternative-Dark/adark.css +++ b/p/themes/Alternative-Dark/adark.css @@ -974,11 +974,20 @@ kbd { /*=== READER VIEW */ /*================*/ #stream.reader .flux { - padding: 0 0 50px; color: var(--font-color-dark); + background-color: var(--background-color-dark); border-bottom: 10px solid var(--background-color-dark); } +#stream.reader .flux:hover { + background: inherit !important; +} + +#stream.reader .flux .content { + background-color: var(--background-color-middle); + border-color: var(--border-color-dark); +} + #stream.reader .flux.current.active { background: var(--background-color-middle); } diff --git a/p/themes/Alternative-Dark/adark.rtl.css b/p/themes/Alternative-Dark/adark.rtl.css index 67fc7cb322d..c461a289622 100644 --- a/p/themes/Alternative-Dark/adark.rtl.css +++ b/p/themes/Alternative-Dark/adark.rtl.css @@ -974,11 +974,20 @@ kbd { /*=== READER VIEW */ /*================*/ #stream.reader .flux { - padding: 0 0 50px; color: var(--font-color-dark); + background-color: var(--background-color-dark); border-bottom: 10px solid var(--background-color-dark); } +#stream.reader .flux:hover { + background: inherit !important; +} + +#stream.reader .flux .content { + background-color: var(--background-color-middle); + border-color: var(--border-color-dark); +} + #stream.reader .flux.current.active { background: var(--background-color-middle); } diff --git a/p/themes/Ansum/_reader-view.scss b/p/themes/Ansum/_reader-view.scss index 3390985b067..81046aa8993 100644 --- a/p/themes/Ansum/_reader-view.scss +++ b/p/themes/Ansum/_reader-view.scss @@ -2,15 +2,21 @@ /*=== READER VIEW */ /*================*/ -#stream.reader .flux { - padding: 0 0 50px; - background: variables.$grey-light; - color: variables.$main-font-color; - border: none; -} +#stream.reader { + .flux { + background: variables.$grey-light; + color: variables.$main-font-color; + border: none; + + .content { + background-color: variables.$white; + border: none; -#stream.reader .flux .author { - margin: 0 0 10px; - color: variables.$grey-medium-dark; - font-size: 90%; + .author { + margin: 0 0 10px; + color: variables.$grey-medium-dark; + font-size: 90%; + } + } + } } diff --git a/p/themes/Ansum/ansum.css b/p/themes/Ansum/ansum.css index c04a1693783..ad48d4f8fb0 100644 --- a/p/themes/Ansum/ansum.css +++ b/p/themes/Ansum/ansum.css @@ -1104,13 +1104,15 @@ main.prompt { /*=== READER VIEW */ /*================*/ #stream.reader .flux { - padding: 0 0 50px; background: #f5f0ec; color: #363330; border: none; } - -#stream.reader .flux .author { +#stream.reader .flux .content { + background-color: #fff; + border: none; +} +#stream.reader .flux .content .author { margin: 0 0 10px; color: #ba9; font-size: 90%; diff --git a/p/themes/Ansum/ansum.rtl.css b/p/themes/Ansum/ansum.rtl.css index 623897993be..2052a159852 100644 --- a/p/themes/Ansum/ansum.rtl.css +++ b/p/themes/Ansum/ansum.rtl.css @@ -1104,13 +1104,15 @@ main.prompt { /*=== READER VIEW */ /*================*/ #stream.reader .flux { - padding: 0 0 50px; background: #f5f0ec; color: #363330; border: none; } - -#stream.reader .flux .author { +#stream.reader .flux .content { + background-color: #fff; + border: none; +} +#stream.reader .flux .content .author { margin: 0 0 10px; color: #ba9; font-size: 90%; diff --git a/p/themes/BlueLagoon/BlueLagoon.css b/p/themes/BlueLagoon/BlueLagoon.css index 4f290c97cf2..31e28320984 100644 --- a/p/themes/BlueLagoon/BlueLagoon.css +++ b/p/themes/BlueLagoon/BlueLagoon.css @@ -1024,12 +1024,20 @@ a.btn { /*=== READER VIEW */ /*================*/ #stream.reader .flux { - padding: 0 0 50px; - background: #f0f0f0; + background: #f9f7f4; color: #333; border: none; } +#stream.reader .flux_content { + background: none; +} + +#stream.reader .flux .content { + background-color: #fff; + border-color: #ddd; +} + #stream.reader .flux .author { margin: 0 0 10px; color: #666; diff --git a/p/themes/BlueLagoon/BlueLagoon.rtl.css b/p/themes/BlueLagoon/BlueLagoon.rtl.css index 247b20aac64..8537af83c05 100644 --- a/p/themes/BlueLagoon/BlueLagoon.rtl.css +++ b/p/themes/BlueLagoon/BlueLagoon.rtl.css @@ -1024,12 +1024,20 @@ a.btn { /*=== READER VIEW */ /*================*/ #stream.reader .flux { - padding: 0 0 50px; - background: #f0f0f0; + background: #f9f7f4; color: #333; border: none; } +#stream.reader .flux_content { + background: none; +} + +#stream.reader .flux .content { + background-color: #fff; + border-color: #ddd; +} + #stream.reader .flux .author { margin: 0 0 10px; color: #666; diff --git a/p/themes/Dark/dark.css b/p/themes/Dark/dark.css index 6ec73980352..75183479831 100644 --- a/p/themes/Dark/dark.css +++ b/p/themes/Dark/dark.css @@ -904,8 +904,12 @@ a.btn { /*=== READER VIEW */ /*================*/ #stream.reader .flux { - padding: 0 0 50px; - background: #111; + background: #1c1c1c; + border: none; +} + +#stream.reader .flux .content { + background-color: #111; border: none; } diff --git a/p/themes/Dark/dark.rtl.css b/p/themes/Dark/dark.rtl.css index fcd76c4afd9..9522cb3c780 100644 --- a/p/themes/Dark/dark.rtl.css +++ b/p/themes/Dark/dark.rtl.css @@ -904,8 +904,12 @@ a.btn { /*=== READER VIEW */ /*================*/ #stream.reader .flux { - padding: 0 0 50px; - background: #111; + background: #1c1c1c; + border: none; +} + +#stream.reader .flux .content { + background-color: #111; border: none; } diff --git a/p/themes/Flat/flat.css b/p/themes/Flat/flat.css index d7541f99f17..ac6585c6f29 100644 --- a/p/themes/Flat/flat.css +++ b/p/themes/Flat/flat.css @@ -925,12 +925,16 @@ a.btn { /*=== READER VIEW */ /*================*/ #stream.reader .flux { - padding: 0 0 50px; - background: #ecf0f1; + background: #fafafa; color: #34495e; border: none; } +#stream.reader .flux .content { + background-color: #fff; + border-color: #ecf0f1; +} + #stream.reader .flux .author { margin: 0 0 10px; color: #999; diff --git a/p/themes/Flat/flat.rtl.css b/p/themes/Flat/flat.rtl.css index 0cf0dbdc1e8..dc57e6d2459 100644 --- a/p/themes/Flat/flat.rtl.css +++ b/p/themes/Flat/flat.rtl.css @@ -925,12 +925,16 @@ a.btn { /*=== READER VIEW */ /*================*/ #stream.reader .flux { - padding: 0 0 50px; - background: #ecf0f1; + background: #fafafa; color: #34495e; border: none; } +#stream.reader .flux .content { + background-color: #fff; + border-color: #ecf0f1; +} + #stream.reader .flux .author { margin: 0 0 10px; color: #999; diff --git a/p/themes/Mapco/_reader-view.scss b/p/themes/Mapco/_reader-view.scss index 3390985b067..81046aa8993 100644 --- a/p/themes/Mapco/_reader-view.scss +++ b/p/themes/Mapco/_reader-view.scss @@ -2,15 +2,21 @@ /*=== READER VIEW */ /*================*/ -#stream.reader .flux { - padding: 0 0 50px; - background: variables.$grey-light; - color: variables.$main-font-color; - border: none; -} +#stream.reader { + .flux { + background: variables.$grey-light; + color: variables.$main-font-color; + border: none; + + .content { + background-color: variables.$white; + border: none; -#stream.reader .flux .author { - margin: 0 0 10px; - color: variables.$grey-medium-dark; - font-size: 90%; + .author { + margin: 0 0 10px; + color: variables.$grey-medium-dark; + font-size: 90%; + } + } + } } diff --git a/p/themes/Mapco/mapco.css b/p/themes/Mapco/mapco.css index 6ecb32b0085..06d612a8d19 100644 --- a/p/themes/Mapco/mapco.css +++ b/p/themes/Mapco/mapco.css @@ -1133,13 +1133,15 @@ main.prompt { /*=== READER VIEW */ /*================*/ #stream.reader .flux { - padding: 0 0 50px; background: #eff0f2; color: #303136; border: none; } - -#stream.reader .flux .author { +#stream.reader .flux .content { + background-color: #fff; + border: none; +} +#stream.reader .flux .content .author { margin: 0 0 10px; color: #a6a7ae; font-size: 90%; diff --git a/p/themes/Mapco/mapco.rtl.css b/p/themes/Mapco/mapco.rtl.css index 7335484be33..8044831938f 100644 --- a/p/themes/Mapco/mapco.rtl.css +++ b/p/themes/Mapco/mapco.rtl.css @@ -1133,13 +1133,15 @@ main.prompt { /*=== READER VIEW */ /*================*/ #stream.reader .flux { - padding: 0 0 50px; background: #eff0f2; color: #303136; border: none; } - -#stream.reader .flux .author { +#stream.reader .flux .content { + background-color: #fff; + border: none; +} +#stream.reader .flux .content .author { margin: 0 0 10px; color: #a6a7ae; font-size: 90%; diff --git a/p/themes/Nord/nord.css b/p/themes/Nord/nord.css index 5da5bd1f2c2..fcad17acc25 100644 --- a/p/themes/Nord/nord.css +++ b/p/themes/Nord/nord.css @@ -1060,7 +1060,13 @@ input.extend { /*=== READER VIEW */ /*================*/ #stream.reader .flux { - padding: 0 0 50px; + background: #242933; + border: none; +} + +#stream.reader .flux .content { + background-color: #2e3440; + border: none; } #stream.reader .flux .author { diff --git a/p/themes/Nord/nord.rtl.css b/p/themes/Nord/nord.rtl.css index 1d91bb08d7c..fe2fe4de851 100644 --- a/p/themes/Nord/nord.rtl.css +++ b/p/themes/Nord/nord.rtl.css @@ -1060,7 +1060,13 @@ input.extend { /*=== READER VIEW */ /*================*/ #stream.reader .flux { - padding: 0 0 50px; + background: #242933; + border: none; +} + +#stream.reader .flux .content { + background-color: #2e3440; + border: none; } #stream.reader .flux .author { diff --git a/p/themes/Origine/origine.css b/p/themes/Origine/origine.css index 73fbe1719bb..83e0822a209 100644 --- a/p/themes/Origine/origine.css +++ b/p/themes/Origine/origine.css @@ -908,16 +908,14 @@ a.btn, /*=== READER VIEW */ /*================*/ #stream.reader .flux { - padding: 25px 0 25px; background: #f0f0f0; color: #333; border: none; } #stream.reader .flux .content { - padding: 3rem; background-color: #fff; - border: 1px solid #ddd; + border-color: #ddd; } #stream.reader .flux .author { diff --git a/p/themes/Origine/origine.rtl.css b/p/themes/Origine/origine.rtl.css index 878c4ba9aed..9efd136adf0 100644 --- a/p/themes/Origine/origine.rtl.css +++ b/p/themes/Origine/origine.rtl.css @@ -908,16 +908,14 @@ a.btn, /*=== READER VIEW */ /*================*/ #stream.reader .flux { - padding: 25px 0 25px; background: #f0f0f0; color: #333; border: none; } #stream.reader .flux .content { - padding: 3rem; background-color: #fff; - border: 1px solid #ddd; + border-color: #ddd; } #stream.reader .flux .author { diff --git a/p/themes/Pafat/pafat.css b/p/themes/Pafat/pafat.css index c80f6581c64..14266cc7911 100644 --- a/p/themes/Pafat/pafat.css +++ b/p/themes/Pafat/pafat.css @@ -902,12 +902,16 @@ a.signin { /*=== READER VIEW */ /*================*/ #stream.reader .flux { - padding: 0 0 50px; - background: #f0f0f0; + background: #fafafa; color: #41444f; border: none; } +#stream.reader .flux .content { + background-color: #fff; + border-color: #ddd; +} + #stream.reader .flux .author { margin: 0 0 10px; color: #666; diff --git a/p/themes/Pafat/pafat.rtl.css b/p/themes/Pafat/pafat.rtl.css index ae16105b92b..2a9daf39f4f 100644 --- a/p/themes/Pafat/pafat.rtl.css +++ b/p/themes/Pafat/pafat.rtl.css @@ -902,12 +902,16 @@ a.signin { /*=== READER VIEW */ /*================*/ #stream.reader .flux { - padding: 0 0 50px; - background: #f0f0f0; + background: #fafafa; color: #41444f; border: none; } +#stream.reader .flux .content { + background-color: #fff; + border-color: #ddd; +} + #stream.reader .flux .author { margin: 0 0 10px; color: #666; diff --git a/p/themes/Screwdriver/screwdriver.css b/p/themes/Screwdriver/screwdriver.css index 6473a1329ca..9672a25d5da 100644 --- a/p/themes/Screwdriver/screwdriver.css +++ b/p/themes/Screwdriver/screwdriver.css @@ -999,12 +999,23 @@ a.btn { /*=== READER VIEW */ /*================*/ #stream.reader .flux { - padding: 0 0 50px; - background: #f0f0f0; + background: #ede7de; color: #333; border: none; } +#stream.reader .flux_content { + background: none; + border-radius: 0; +} + +#stream.reader .flux .content { + background-color: #fff; + border-color: #ddd; + border-radius: 10px; + box-shadow: 0 -1px rgba(255,255,255,0.28) inset; +} + #stream.reader .flux .author { margin: 0 0 10px; color: #666; diff --git a/p/themes/Screwdriver/screwdriver.rtl.css b/p/themes/Screwdriver/screwdriver.rtl.css index d87523ec24c..71631666039 100644 --- a/p/themes/Screwdriver/screwdriver.rtl.css +++ b/p/themes/Screwdriver/screwdriver.rtl.css @@ -999,12 +999,23 @@ a.btn { /*=== READER VIEW */ /*================*/ #stream.reader .flux { - padding: 0 0 50px; - background: #f0f0f0; + background: #ede7de; color: #333; border: none; } +#stream.reader .flux_content { + background: none; + border-radius: 0; +} + +#stream.reader .flux .content { + background-color: #fff; + border-color: #ddd; + border-radius: 10px; + box-shadow: 0 -1px rgba(255,255,255,0.28) inset; +} + #stream.reader .flux .author { margin: 0 0 10px; color: #666; diff --git a/p/themes/Swage/swage.css b/p/themes/Swage/swage.css index b25d980aeb0..08c9b380d87 100644 --- a/p/themes/Swage/swage.css +++ b/p/themes/Swage/swage.css @@ -1238,11 +1238,16 @@ button.as-link { } #stream.reader .flux { - padding: 0 0 50px; background: #fcfcfc; color: #22303d; border: none; } +#stream.reader .flux::after { + border: none; +} +#stream.reader .flux .content { + border-color: #e3e3e3; +} #stream.reader .flux .author { margin: 0 0 10px; color: #969696; diff --git a/p/themes/Swage/swage.rtl.css b/p/themes/Swage/swage.rtl.css index 6497de09bc6..f486cd0303e 100644 --- a/p/themes/Swage/swage.rtl.css +++ b/p/themes/Swage/swage.rtl.css @@ -1238,11 +1238,16 @@ button.as-link { } #stream.reader .flux { - padding: 0 0 50px; background: #fcfcfc; color: #22303d; border: none; } +#stream.reader .flux::after { + border: none; +} +#stream.reader .flux .content { + border-color: #e3e3e3; +} #stream.reader .flux .author { margin: 0 0 10px; color: #969696; diff --git a/p/themes/Swage/swage.scss b/p/themes/Swage/swage.scss index 420de3a14bf..c690e13c266 100644 --- a/p/themes/Swage/swage.scss +++ b/p/themes/Swage/swage.scss @@ -1538,11 +1538,18 @@ button.as-link { } #stream.reader .flux { - padding: 0 0 50px; background: $color_light; color: $color_aside; border: none; + &::after { + border: none; + } + + .content { + border-color: #e3e3e3; + } + .author { margin: 0 0 10px; color: color.adjust( $color_light, $lightness: -40% ); diff --git a/p/themes/base-theme/base.css b/p/themes/base-theme/base.css index 5edf0257e4c..7ce91c584b1 100644 --- a/p/themes/base-theme/base.css +++ b/p/themes/base-theme/base.css @@ -725,7 +725,13 @@ a.btn { /*=== READER VIEW */ /*================*/ #stream.reader .flux { - padding: 0 0 50px; + background-color: #f0f0f0; + color: #333; +} + +#stream.reader .flux .content { + background-color: #fff; + border-color: #ddd; } #stream.reader .flux .author { diff --git a/p/themes/base-theme/base.rtl.css b/p/themes/base-theme/base.rtl.css index 8ef5e2a2168..380afb97260 100644 --- a/p/themes/base-theme/base.rtl.css +++ b/p/themes/base-theme/base.rtl.css @@ -725,7 +725,13 @@ a.btn { /*=== READER VIEW */ /*================*/ #stream.reader .flux { - padding: 0 0 50px; + background-color: #f0f0f0; + color: #333; +} + +#stream.reader .flux .content { + background-color: #fff; + border-color: #ddd; } #stream.reader .flux .author { diff --git a/p/themes/base-theme/frss.css b/p/themes/base-theme/frss.css index 56a31466482..1ce76069011 100644 --- a/p/themes/base-theme/frss.css +++ b/p/themes/base-theme/frss.css @@ -1875,6 +1875,16 @@ input:checked + .slide-container .properties { display: none; } +.reader .flux { + padding: 1rem 0 2rem; +} + +.reader .flux .content { + padding: 3rem; + background-color: var(--frss-background-color); + border: 1px solid var(--frss-border-color); +} + #loglist-wrapper { overflow-x: auto; } diff --git a/p/themes/base-theme/frss.rtl.css b/p/themes/base-theme/frss.rtl.css index 9aa043ccdf7..d5aeb34294d 100644 --- a/p/themes/base-theme/frss.rtl.css +++ b/p/themes/base-theme/frss.rtl.css @@ -1875,6 +1875,16 @@ input:checked + .slide-container .properties { display: none; } +.reader .flux { + padding: 1rem 0 2rem; +} + +.reader .flux .content { + padding: 3rem; + background-color: var(--frss-background-color); + border: 1px solid var(--frss-border-color); +} + #loglist-wrapper { overflow-x: auto; } From d84dd549a7a3cf25d29f69419eeb6750d8bafa4d Mon Sep 17 00:00:00 2001 From: 312k <55316963+312k@users.noreply.github.com> Date: Sun, 2 Oct 2022 01:50:35 +0900 Subject: [PATCH 0400/2479] Update Japanese translation (#4668) * Update Japanese translation * fix translations syntax --- app/i18n/ja/admin.php | 40 ++++++++++---------- app/i18n/ja/conf.php | 88 +++++++++++++++++++++---------------------- app/i18n/ja/gen.php | 18 ++++----- app/i18n/ja/index.php | 4 +- app/i18n/ja/sub.php | 84 ++++++++++++++++++++--------------------- app/i18n/ja/user.php | 4 +- 6 files changed, 119 insertions(+), 119 deletions(-) diff --git a/app/i18n/ja/admin.php b/app/i18n/ja/admin.php index 6eea35956c3..41b3bf7b3f9 100644 --- a/app/i18n/ja/admin.php +++ b/app/i18n/ja/admin.php @@ -12,15 +12,15 @@ return array( 'auth' => array( - 'allow_anonymous' => '標準のユーザーの記事が匿名のユーザーでも読めるようにします。 (%s)', - 'allow_anonymous_refresh' => '匿名ユーザーが記事を更新できるようにします。', + 'allow_anonymous' => 'デフォルトのユーザーの記事がログインしていないときでも読めるようにします。 (%s)', + 'allow_anonymous_refresh' => '未ログインユーザーでも記事を更新できるようにします。', 'api_enabled' => 'APIからのアクセスを許可する (モバイルアプリが必要です)', 'form' => 'ウェブフォーム (JavaScriptが必要です)', - 'http' => 'HTTP (上級者向けのHTTPS)', + 'http' => 'HTTP (上級者はHTTPSでも)', 'none' => 'なし (危険)', 'title' => '認証', 'token' => '認証トークン', - 'token_help' => '標準ユーザーが承認無しで、RSSを出力できることを許可します。:', + 'token_help' => 'ユーザーが承認無しで、RSSを出力できるようにします。:', 'type' => '認証メソッド', 'unsafe_autologin' => '危険な自動ログインを有効にします', ), @@ -112,21 +112,21 @@ ), 'extensions' => array( 'author' => '作者', - 'community' => 'コミュニティ製の拡張', + 'community' => 'コミュニティ製の拡張機能', 'description' => '説明', 'disabled' => '無効', - 'empty_list' => 'インストールされている拡張はありません', + 'empty_list' => 'インストールされている拡張機能はありません', 'enabled' => '有効', 'latest' => 'インストール済み', 'name' => '名前', - 'no_configure_view' => 'この拡張は設定できません.', + 'no_configure_view' => 'この拡張機能は設定できません.', 'system' => array( - '_' => 'システム拡張', - 'no_rights' => 'システム拡張 (あなたには権限がありません)', + '_' => 'システムの拡張機能', + 'no_rights' => 'システムの拡張機能 (あなたは権限を所持していません', ), - 'title' => '拡張', + 'title' => '拡張機能', 'update' => 'アップデート可能', - 'user' => 'ユーザー拡張', + 'user' => 'ユーザー拡張機能', 'version' => 'バージョン', ), 'stats' => array( @@ -135,7 +135,7 @@ 'category' => 'カテゴリ', 'entry_count' => 'エントリの統計', 'entry_per_category' => 'カテゴリのエントリ', - 'entry_per_day' => '日にちあたりのエントリ (直近30日間)', + 'entry_per_day' => '日にちごとのエントリ (直近30日間)', 'entry_per_day_of_week' => '週あたり (平均: %.2f メッセージ)', 'entry_per_hour' => '時間当たり (平均: %.2f メッセージ)', 'entry_per_month' => '月あたり (平均: %.2f メッセージ)', @@ -170,18 +170,18 @@ 'registration' => array( 'number' => 'アカウントの最大値', 'select' => array( - 'label' => 'Registration form', // TODO + 'label' => '登録フォーム', 'option' => array( - 'noform' => 'Disabled: No registration form', // TODO - 'nolimit' => 'Enabled: No limit of accounts', // TODO - 'setaccountsnumber' => 'Set max. number of accounts', // TODO + 'noform' => '無効: 登録されたフォームはありません', + 'nolimit' => '有効: アカウントの上限はありません', + 'setaccountsnumber' => 'アカウントの上限数に達しました', ), ), 'status' => array( - 'disabled' => 'Form disabled', // TODO - 'enabled' => 'Form enabled', // TODO + 'disabled' => 'フォームは無効です', + 'enabled' => 'フォームは有効です', ), - 'title' => 'User registration form', // TODO + 'title' => 'ユーザー登録', ), ), 'update' => array( @@ -190,7 +190,7 @@ 'check' => 'アップデートを確認する', 'current_version' => 'FreshRSS の現在のバージョンは %s です。', 'last' => '最近の検証: %s', - 'none' => '適用できないアップデート', + 'none' => '更新を適用できません', 'title' => 'アップデートシステム', ), 'user' => array( diff --git a/app/i18n/ja/conf.php b/app/i18n/ja/conf.php index e4a8c9e2ecf..6f441deff8b 100644 --- a/app/i18n/ja/conf.php +++ b/app/i18n/ja/conf.php @@ -23,15 +23,15 @@ 'keep_unreads' => '未読の記事を消去しない', 'maintenance' => 'メンテナンス', 'optimize' => 'データベースを整理する', - 'optimize_help' => '時々データベースサイズを減らすため実行されます', + 'optimize_help' => 'データベースサイズを減らすため、時々実行されます', 'policy' => '不要なデータを削除する', - 'policy_warning' => 'すべての記事が、不要なデータを削除する方法が選択されてないときは保存されます。', + 'policy_warning' => 'すべての記事が、不要なデータを削除する設定がなされてないときは保存されます。', 'purge_now' => '不要なデータをまとめて削除する', 'title' => 'アーカイブ', 'ttl' => '自動的に更新される時間', ), 'display' => array( - '_' => 'ディスプレイ', + '_' => '表示', 'icon' => array( 'bottom_line' => '行の下部', 'display_authors' => '著者', @@ -44,7 +44,7 @@ ), 'language' => '言語', 'notif_html5' => array( - 'seconds' => '秒 (0 はタイムアウトなしです)', + 'seconds' => '秒 (0秒だとタイムアウトしません)', 'timeout' => 'HTML5 の通知タイムアウト時間', ), 'show_nav_buttons' => 'ナビゲーションボタンを表示する', @@ -68,9 +68,9 @@ ), 'logs' => array( 'loglist' => array( - 'level' => 'Log Level', // TODO - 'message' => 'Log Message', // TODO - 'timestamp' => 'Timestamp', // TODO + 'level' => 'ログのレベル', + 'message' => 'ログのメッセージ', + 'timestamp' => 'タイムスタンプ', ), 'pagination' => array( 'first' => '先頭', @@ -84,17 +84,17 @@ 'api' => 'API管理', 'delete' => array( '_' => 'アカウント消去', - 'warn' => 'あなたのアカウントとそれに関連したデーターが消去されます。', + 'warn' => 'あなたのアカウントとそれに関連したデータが消去されます。', ), 'email' => 'Eメールアドレス', 'password_api' => 'APIのパスワード
    (モバイルアプリなど)', 'password_form' => 'パスワード
    (Web-formのログイン時に使われます)', - 'password_format' => '最低限7文字必要です', + 'password_format' => '最低7文字必要です', 'title' => 'プロフィール', ), 'query' => array( '_' => 'ユーザークエリ', - 'deprecated' => 'このクエリはもう有効ではありません。参照されているカテゴリあるいはフィードは消去されました。', + 'deprecated' => 'このクエリは有効ではありません。参照されているカテゴリあるいはフィードはすでに消去されました。', 'filter' => array( '_' => 'フィルターを適用:', 'categories' => 'カテゴリごとに表示する', @@ -139,43 +139,43 @@ 'always_show_favorites' => 'デフォルトですべてのお気に入りの記事を表示する', 'article' => array( 'authors_date' => array( - '_' => 'Authors and date', // TODO - 'both' => 'In header and footer', // TODO - 'footer' => 'In footer', // TODO - 'header' => 'In header', // TODO - 'none' => 'None', // TODO + '_' => '著者と日付', + 'both' => 'ヘッダーとフッター', + 'footer' => 'フッター', + 'header' => 'ヘッダー', + 'none' => 'なし', ), 'feed_name' => array( - 'above_title' => 'Above title/tags', // TODO - 'none' => 'None', // TODO - 'with_authors' => 'In authors and date row', // TODO + 'above_title' => '上のタイトル/タグ', + 'none' => 'なし', + 'with_authors' => '著者と日付の行', ), - 'feed_title' => 'Feed title', // TODO + 'feed_title' => 'フィードのタイトル', 'tags' => array( - '_' => 'Tags', // TODO - 'both' => 'In header and footer', // TODO - 'footer' => 'In footer', // TODO - 'header' => 'In header', // TODO - 'none' => 'None', // TODO + '_' => 'タグ', + 'both' => 'ヘッダーとフッター', + 'footer' => 'フッター', + 'header' => 'ヘッダー', + 'none' => 'なし', ), 'tags_max' => array( - '_' => 'Max number of tags shown', // TODO - 'help' => '0 means: show all tags and do not collapse them', // TODO + '_' => '表示されるタグの数の上限', + 'help' => '0は:すべてのタグを表示し、折り畳めまれないことを意味します。', ), ), - 'articles_per_page' => 'ページ当たりの記事の数', + 'articles_per_page' => '1ページ当たりの記事の数', 'auto_load_more' => 'ページの下にもっと記事を読み込む', 'auto_remove_article' => '記事を読んだら非表示にする', 'confirm_enabled' => '“すべてに既読を付ける” を押したとき確認ダイアログを表示する', 'display_articles_unfolded' => 'デフォルトでフォルダーに入れてない記事を表示する', 'display_categories_unfolded' => '展開されていない記事', 'headline' => array( - 'articles' => 'Articles: Open/Close', // TODO - 'articles_header_footer' => 'Articles: header/footer', // TODO - 'categories' => 'Left navigation: Categories', // TODO - 'mark_as_read' => 'Mark article as read', // TODO - 'misc' => 'Miscellaneous', // TODO - 'view' => 'View', // TODO + 'articles' => '記事: 開く/閉じる', + 'articles_header_footer' => '記事: ヘッダー/フッター', + 'categories' => '左のナビゲーション: カテゴリ', + 'mark_as_read' => 'チェックをつけた記事を既読にする', + 'misc' => 'その他', + 'view' => 'ビュー', ), 'hide_read_feeds' => 'カテゴリーを非表示 & 未読の記事がないフィード ("すべてに既読を付ける”では適用しません)', 'img_with_lazyload' => '"lazy load"を写真の読み込み時に使う', @@ -187,16 +187,16 @@ 'article_viewed' => '記事を読んだとき', 'keep_max_n_unread' => '未読の記事として残す最大数', 'scroll' => 'スクロールしているとき', - 'upon_gone' => 'when it is no longer in the upstream news feed', // TODO + 'upon_gone' => 'ニュースフィードの提供元がなくなったとき', 'upon_reception' => '記事を受け取ったとき', 'when' => '記事を既読にする…', 'when_same_title' => '同一タイトルの新しい記事があるときには、上部へ表示する', ), 'show' => array( '_' => '記事を表示する', - 'active_category' => '活発なカテゴリ', + 'active_category' => 'アクティブなカテゴリ', 'adaptive' => '表示を調整する', - 'all_articles' => 'すべての記事を見せる', + 'all_articles' => 'すべての記事を表示する', 'all_categories' => 'すべてのカテゴリ', 'no_category' => 'カテゴリがありません', 'remember_categories' => '開いたカテゴリを保存する', @@ -206,10 +206,10 @@ 'sides_close_article' => '記事の外をクリックすると記事を閉じるようにする', 'sort' => array( '_' => '順序', - 'newer_first' => '最新のものが先頭', - 'older_first' => '最古のものが先頭', + 'newer_first' => '最新のものを先頭にする', + 'older_first' => '最古のものを先頭にする', ), - 'sticky_post' => '開いたときトップに記事を貼り付ける', + 'sticky_post' => '開いたときにトップを記事にする', 'title' => 'リーディング', 'view' => array( 'default' => 'デフォルトビュー', @@ -222,7 +222,7 @@ '_' => '共有', 'add' => '共有方法を追加する', 'blogotext' => 'Blogotext', // IGNORE - 'deprecated' => 'This service is deprecated and will be removed from FreshRSS in a future release.', // TODO + 'deprecated' => 'このサービスは非推奨でFreshRSSから削除される予定ですfuture release.', 'diaspora' => 'Diaspora*', // IGNORE 'email' => 'Eメール', 'facebook' => 'Facebook', // IGNORE @@ -231,8 +231,8 @@ 'raindrop' => 'Raindrop.io', // IGNORE 'remove' => '共有方法を削除する', 'shaarli' => 'Shaarli', // IGNORE - 'share_name' => '表示する共有方法の名前', - 'share_url' => '使用するURLを共有する', + 'share_name' => '共有する方法', + 'share_url' => 'URLを共有する', 'title' => '共有', 'twitter' => 'Twitter', // IGNORE 'wallabag' => 'wallabag', // IGNORE @@ -241,7 +241,7 @@ '_' => 'ショートカット', 'article_action' => '記事のアクション', 'auto_share' => '共有', - 'auto_share_help' => 'もしも、共有方法が一つしかないとき、それが使われます。さもなければ、番号によって共有方法にアクセスできます。', + 'auto_share_help' => '共有方法が一つしか設定されていないときにはそれが使われます。そうではなければ、番号によって共有方法にアクセスできます。', 'close_dropdown' => 'メニューを閉じる', 'collapse_article' => '折りたたむ', 'first_article' => '初めの記事を開く', @@ -271,7 +271,7 @@ 'title' => 'ショートカット', 'toggle_media' => 'メディアの 再生/停止', 'user_filter' => 'ユーザーのクエリにアクセスする', - 'user_filter_help' => '一つのユーザークエリしかないとき、それが使われます。さもなければ、番号によってクエリにアクセスできます。', + 'user_filter_help' => '一つのユーザークエリしかないとき、それが使われます。そうではなければ、番号によってクエリにアクセスできます。', 'views' => 'ビュー', ), 'user' => array( diff --git a/app/i18n/ja/gen.php b/app/i18n/ja/gen.php index a3f80b1fea0..45001836b0f 100644 --- a/app/i18n/ja/gen.php +++ b/app/i18n/ja/gen.php @@ -18,7 +18,7 @@ 'back_to_rss_feeds' => '← RSSフィードに戻る', 'cancel' => 'キャンセル', 'create' => '作成', - 'delete_muted_feeds' => 'Delete muted feeds', // TODO + 'delete_muted_feeds' => 'ミュートにしているフィードを削除する', 'demote' => '寄付', 'disable' => '無効', 'empty' => '空', @@ -29,13 +29,13 @@ 'load_default_shortcuts' => 'デフォルトのショートカットを読み込む', 'manage' => '管理', 'mark_read' => '既読にする', - 'open_url' => 'Open URL', // TODO + 'open_url' => 'URLを開く', 'promote' => 'プロモート', 'purge' => '不要なデータの削除', - 'refresh_opml' => 'Refresh OPML', // TODO + 'refresh_opml' => 'OPMLをリフレッシュする', 'remove' => '消去', - 'rename' => 'リネーム', - 'see_website' => 'webサイトを閲覧してください', + 'rename' => '名前を変更する', + 'see_website' => 'webサイトをご覧ください', 'submit' => '保存', 'truncate' => 'すべての記事を消去する', 'update' => '更新', @@ -119,7 +119,7 @@ 'wed' => '水', 'yesterday' => '昨日', ), - 'dir' => 'ltr', // IGNORE + 'dir' => 'ディレクトリ', 'freshrss' => array( '_' => 'FreshRSS', // IGNORE 'about' => 'FreshRSSについて', @@ -130,7 +130,7 @@ 'confirm_action_feed_cat' => '本当に実行してもいいですか? あなたは関連するお気に入りとユーザークエリを失います。キャンセルできません!', 'feedback' => array( 'body_new_articles' => '%%d の新規記事がFreshRSSにはあります。', - 'body_unread_articles' => '(unread: %%d)', // TODO + 'body_unread_articles' => '(未読: %%d)', 'request_failed' => 'おそらくインターネット接続に問題があるため、リクエストは失敗しました。', 'title_new_articles' => 'FreshRSS: 新規記事!', ), @@ -171,7 +171,7 @@ 'logs' => 'ログ', 'queries' => 'ユーザークエリ', 'reading' => 'リーディング', - 'search' => '単語で検索するか #tagsで検索する', + 'search' => '単語で検索するかハッシュタグで検索する', 'sharing' => '共有', 'shortcuts' => 'ショートカット', 'stats' => '統計', @@ -211,7 +211,7 @@ 'twitter' => 'Twitter', // IGNORE 'wallabag' => 'wallabag v1', // IGNORE 'wallabagv2' => 'wallabag v2', // IGNORE - 'web-sharing-api' => 'System sharing', // TODO + 'web-sharing-api' => 'システム共有', 'whatsapp' => 'Whatsapp', // IGNORE 'xing' => 'Xing', // IGNORE ), diff --git a/app/i18n/ja/index.php b/app/i18n/ja/index.php index 10421c990e4..77d2bed82ed 100644 --- a/app/i18n/ja/index.php +++ b/app/i18n/ja/index.php @@ -50,10 +50,10 @@ 'mark_cat_read' => 'カテゴリーに既読をつける', 'mark_feed_read' => 'フィードに既読をつける', 'mark_selection_unread' => '選択したものに未読をつける', - 'newer_first' => '最新のものを先に', + 'newer_first' => '最新のものを先にする', 'non-starred' => 'お気に入りに登録されてないものを表示する', 'normal_view' => 'ノーマルビュー', - 'older_first' => '最古のものを先に', + 'older_first' => '最古のものを先にする', 'queries' => 'ユーザークエリ', 'read' => '読み取りを表示する', 'reader_view' => 'リーディングビュー', diff --git a/app/i18n/ja/sub.php b/app/i18n/ja/sub.php index 54ae552672b..a6cf81bc31a 100644 --- a/app/i18n/ja/sub.php +++ b/app/i18n/ja/sub.php @@ -25,21 +25,21 @@ 'add' => 'カテゴリを追加する', 'archiving' => 'アーカイブ', 'dynamic_opml' => array( - '_' => 'Dynamic OPML', // TODO - 'help' => 'Provide the URL to an OPML file to dynamically populate this category with feeds', // TODO + '_' => 'ダイナミックOPML', + 'help' => 'から提供されたOPMLファイルをこのカテゴリに動的に追加します。', ), 'empty' => 'からのカテゴリ', 'information' => 'インフォメーション', - 'opml_url' => 'OPML URL', // TODO + 'opml_url' => 'OPMLのURL', 'position' => '表示位置', 'position_help' => 'カテゴリの表示順を操作する', 'title' => 'タイトル', ), 'feed' => array( - 'accept_cookies' => 'Accept cookies', // TODO - 'accept_cookies_help' => 'Allow the feed server to set cookies (stored in memory for the duration of the request only)', // TODO + 'accept_cookies' => 'クッキーを受け入れる', + 'accept_cookies_help' => 'クッキーをこのサーバーから受け入れます(このリクエストだけにメモリへ保存されます)', 'add' => 'RSSフィードに追加する', - 'advanced' => '応用的な設定', + 'advanced' => '高度な設定', 'archiving' => 'アーカイブ', 'auth' => array( 'configuration' => 'ログイン', @@ -48,7 +48,7 @@ 'password' => 'HTTP パスワード', 'username' => 'HTTP ユーザー名', ), - 'clear_cache' => 'いつでもキャッシュをクリアする', + 'clear_cache' => '常にキャッシュをクリアする', 'content_action' => array( '_' => '記事のコンテンツを読み出したとき、コンテンツアクションを実行する', 'append' => '既に存在するコンテンツの後に追加する', @@ -57,15 +57,15 @@ ), 'css_cookie' => '記事のコンテンツを読み出したとき、クッキーを使用する', 'css_cookie_help' => '例: foo=bar; gdpr_consent=true; cookie=value', - 'css_help' => 'あきらめられたRSSフィードを取得します (注意してください、より多くの時間が必要になるでしょう!)', - 'css_path' => '元のwebサイトの記事のCSS', + 'css_help' => '失敗したRSSフィードを再取得します (ただし、多くの時間が必要になります!)', + 'css_path' => '元のwebサイトのCSS', 'css_path_filter' => array( - '_' => 'CSS selector of the elements to remove', // TODO - 'help' => 'A CSS selector may be a list such as: .footer, .aside', // TODO + '_' => '削除される要素をCSSで選ぶ', + 'help' => 'CSSセレクタは: フッターやアサイド要素をリストにできます', ), 'description' => '説明', - 'empty' => 'このフィードは空です。運営されているかどうかを確認してみてください。', - 'error' => 'このフィードに問題が発生しました。ここにいつでもアクセスできるかどうかを確認して更新してみてください。', + 'empty' => 'このフィードは空です。サイトが運営されているかどうかを確認してみてください。', + 'error' => 'このフィードに問題が発生しました。ここでアクセスできるかどうかを確認して更新してみてください。', 'filteractions' => array( '_' => 'フィルターアクション', 'help' => '1行に1つの検索フィルターを設定してください', @@ -73,51 +73,51 @@ 'information' => 'インフォメーション', 'keep_min' => '最小数の記事は保持されます', 'kind' => array( - '_' => 'Type of feed source', // TODO + '_' => 'フィードソースの種類', 'html_xpath' => array( - '_' => 'HTML + XPath (Web scraping)', // TODO + '_' => 'HTML + XPath (ウェブスクレイピング)', 'feed_title' => array( - '_' => 'feed title', // TODO - 'help' => 'Example: //title or a static string: "My custom feed"', // TODO + '_' => 'フィードタイトル', + 'help' => '例: //タイトルあるいは文字列定数: "カスタムフィード"', ), - 'help' => 'XPath 1.0 is a standard query language for advanced users, and which FreshRSS supports to enable Web scraping.', // TODO + 'help' => 'XPath 1.0 は上級者向けのクエリ型言語で、FreshRSSでスクレイピングをサポートしている言語です。', 'item' => array( - '_' => 'finding news items
    (most important)', // TODO - 'help' => 'Example: //div[@class="news-item"]', // TODO + '_' => 'ニュースの項目を探す
    (最も重要)', + 'help' => '例: //div[@class="news-item"]', ), 'item_author' => array( - '_' => 'item author', // TODO - 'help' => 'Can also be a static string. Example: "Anonymous"', // TODO + '_' => '著者', + 'help' => 'これもまた、文字定数が使えます。例: "匿名"', ), - 'item_categories' => 'item tags', // TODO + 'item_categories' => '項目のタグ', 'item_content' => array( - '_' => 'item content', // TODO - 'help' => 'Example to take the full item: .', // TODO + '_' => '項目のコンテンツ', + 'help' => 'すべての項目を取得する方法例: .', ), 'item_thumbnail' => array( - '_' => 'item thumbnail', // TODO - 'help' => 'Example: descendant::img/@src', // TODO + '_' => '項目のサムネイル', + 'help' => '例: descendant::img/@src', ), 'item_timestamp' => array( - '_' => 'item date', // TODO - 'help' => 'The result will be parsed by strtotime()', // TODO + '_' => '項目の日付', + 'help' => '結果はstrtotime()によってパースされます', ), 'item_title' => array( - '_' => 'item title', // TODO - 'help' => 'Use in particular the XPath axis descendant:: like descendant::h2', // TODO + '_' => '項目のタイトル', + 'help' => '特にXPath アクシスを descendant:: ように使います descendant::h2', ), 'item_uid' => array( - '_' => 'item unique ID', // TODO - 'help' => 'Optional. Example: descendant::div/@data-uri', // TODO + '_' => '項目のユニークID', + 'help' => 'オプションです。例: descendant::div/@data-uri', ), 'item_uri' => array( - '_' => 'item link (URL)', // TODO - 'help' => 'Example: descendant::a/@href', // TODO + '_' => '項目のリンク(URL)', + 'help' => '例: descendant::a/@href', ), - 'relative' => 'XPath (relative to item) for:', // TODO - 'xpath' => 'XPath for:', // TODO + 'relative' => 'XPath (関連する項目):', + 'xpath' => 'XPathは:', ), - 'rss' => 'RSS / Atom (default)', // TODO + 'rss' => 'RSS / Atom (標準)', ), 'maintenance' => array( 'clear_cache' => 'キャッシュのクリア', @@ -126,8 +126,8 @@ 'reload_articles_help' => '記事を再読み込みして、セレクターが定義したコンテンツを完全に取得します。', // DIRTY 'title' => 'メンテナンス', ), - 'max_http_redir' => 'Max HTTP redirects', // TODO - 'max_http_redir_help' => 'Set to 0 or leave blank to disable, -1 for unlimited redirects', // TODO + 'max_http_redir' => 'HTTPのリダイレクトの上限', + 'max_http_redir_help' => '0を設定するか、空白のままにすると無効になり、-1を設定するとリダイレクト数が無制限になります。', 'moved_category_deleted' => 'カテゴリを削除したとき、フィードは自動的に%s下に分類されます。', 'mute' => 'ミュート', 'no_selected' => 'どのフィードも選択されていません', @@ -153,7 +153,7 @@ ), 'ssl_verify' => 'SSL セキュリティを管理する', 'stats' => '統計', - 'think_to_add' => 'あなたはフィードを追加できるでしょう。', + 'think_to_add' => 'フィードを追加できます。', 'timeout' => 'タイムアウトする時間(秒)', 'title' => 'タイトル', 'title_add' => 'RSS フィードを追加する', @@ -198,7 +198,7 @@ '_' => '購読されたものの管理', 'add' => 'フィードあるいはカテゴリを追加します', 'add_category' => 'カテゴリの追加', - 'add_dynamic_opml' => 'Add dynamic OPML', // TODO + 'add_dynamic_opml' => '動的なOPMLを追加する', 'add_feed' => 'フィードの追加', 'add_label' => 'ラベルの追加', 'delete_label' => 'ラベルの削除', diff --git a/app/i18n/ja/user.php b/app/i18n/ja/user.php index 756975c8fac..b9ebd75a73c 100644 --- a/app/i18n/ja/user.php +++ b/app/i18n/ja/user.php @@ -14,7 +14,7 @@ 'email' => array( 'feedback' => array( 'invalid' => 'このEメールアドレスは無効です。', - 'required' => 'このEメールアドレスは必要です。', + 'required' => 'Eメールアドレスは必要です。', ), 'validation' => array( 'change_email' => 'Eメールアドレスは プロフィールページで変更できます.', @@ -36,7 +36,7 @@ 'email_need_validation' => array( 'body' => 'あなたは %s で登録されましたが、Eメールアドレスを確認する必要があります。このリンクに従ってください:', 'title' => 'あなたのアカウントを確認する必要があります', - 'welcome' => 'ようこそ %s,', + 'welcome' => 'ようこそ %s さん', ), ), 'password' => array( From 79e3b99ae3b9df4bb02957838fc6b62491ab0bd2 Mon Sep 17 00:00:00 2001 From: maTh Date: Sat, 1 Oct 2022 18:52:26 +0200 Subject: [PATCH 0401/2479] Improved: CSS .toggle_aside (#4664) * all themes * fixed order * fix end of file * fixed swage --- p/themes/Ansum/_mobile.scss | 15 +++++++-------- p/themes/Ansum/ansum.css | 21 +++++++++++---------- p/themes/Ansum/ansum.rtl.css | 21 +++++++++++---------- p/themes/BlueLagoon/BlueLagoon.css | 8 ++------ p/themes/BlueLagoon/BlueLagoon.rtl.css | 8 ++------ p/themes/Dark/dark.css | 5 ----- p/themes/Dark/dark.rtl.css | 5 ----- p/themes/Flat/flat.css | 5 ----- p/themes/Flat/flat.rtl.css | 5 ----- p/themes/Mapco/_mobile.scss | 15 +++++++-------- p/themes/Mapco/mapco.css | 21 +++++++++++---------- p/themes/Mapco/mapco.rtl.css | 21 +++++++++++---------- p/themes/Nord/nord.css | 9 --------- p/themes/Nord/nord.rtl.css | 9 --------- p/themes/Origine/origine.css | 5 ----- p/themes/Origine/origine.rtl.css | 5 ----- p/themes/Pafat/pafat.css | 5 ----- p/themes/Pafat/pafat.rtl.css | 5 ----- p/themes/Screwdriver/screwdriver.css | 5 ----- p/themes/Screwdriver/screwdriver.rtl.css | 5 ----- p/themes/Swage/swage.css | 15 --------------- p/themes/Swage/swage.rtl.css | 15 --------------- p/themes/Swage/swage.scss | 15 --------------- p/themes/base-theme/base.css | 18 ++++++++++++------ p/themes/base-theme/base.rtl.css | 18 ++++++++++++------ p/themes/base-theme/frss.css | 3 +-- p/themes/base-theme/frss.rtl.css | 3 +-- 27 files changed, 88 insertions(+), 197 deletions(-) diff --git a/p/themes/Ansum/_mobile.scss b/p/themes/Ansum/_mobile.scss index f397e0f866f..9e90010c640 100644 --- a/p/themes/Ansum/_mobile.scss +++ b/p/themes/Ansum/_mobile.scss @@ -25,14 +25,13 @@ .aside .toggle_aside, #panel .close, - #close-slider.active, - .dropdown-menu .toggle_aside { - background: variables.$main-first-alt; - display: block; - width: 100%; - height: 50px; - line-height: 50px; - text-align: center; + .dropdown-menu .toggle_aside, + #slider .toggle_aside { + background-color: variables.$main-first; + + &:hover { + background-color: variables.$main-first-alt; + } .icon { filter: grayscale(100%) brightness(2.5); diff --git a/p/themes/Ansum/ansum.css b/p/themes/Ansum/ansum.css index ad48d4f8fb0..0aeae0e08f7 100644 --- a/p/themes/Ansum/ansum.css +++ b/p/themes/Ansum/ansum.css @@ -1219,19 +1219,20 @@ main.prompt { .aside .toggle_aside, #panel .close, -#close-slider.active, -.dropdown-menu .toggle_aside { - background: #b7641d; - display: block; - width: 100%; - height: 50px; - line-height: 50px; - text-align: center; +.dropdown-menu .toggle_aside, +#slider .toggle_aside { + background-color: #ca7227; + } + .aside .toggle_aside:hover, +#panel .close:hover, +.dropdown-menu .toggle_aside:hover, +#slider .toggle_aside:hover { + background-color: #b7641d; } .aside .toggle_aside .icon, #panel .close .icon, -#close-slider.active .icon, -.dropdown-menu .toggle_aside .icon { +.dropdown-menu .toggle_aside .icon, +#slider .toggle_aside .icon { filter: grayscale(100%) brightness(2.5); } diff --git a/p/themes/Ansum/ansum.rtl.css b/p/themes/Ansum/ansum.rtl.css index 2052a159852..429cb36aa9c 100644 --- a/p/themes/Ansum/ansum.rtl.css +++ b/p/themes/Ansum/ansum.rtl.css @@ -1219,19 +1219,20 @@ main.prompt { .aside .toggle_aside, #panel .close, -#close-slider.active, -.dropdown-menu .toggle_aside { - background: #b7641d; - display: block; - width: 100%; - height: 50px; - line-height: 50px; - text-align: center; +.dropdown-menu .toggle_aside, +#slider .toggle_aside { + background-color: #ca7227; + } + .aside .toggle_aside:hover, +#panel .close:hover, +.dropdown-menu .toggle_aside:hover, +#slider .toggle_aside:hover { + background-color: #b7641d; } .aside .toggle_aside .icon, #panel .close .icon, -#close-slider.active .icon, -.dropdown-menu .toggle_aside .icon { +.dropdown-menu .toggle_aside .icon, +#slider .toggle_aside .icon { filter: grayscale(100%) brightness(2.5); } diff --git a/p/themes/BlueLagoon/BlueLagoon.css b/p/themes/BlueLagoon/BlueLagoon.css index 31e28320984..a375427ff77 100644 --- a/p/themes/BlueLagoon/BlueLagoon.css +++ b/p/themes/BlueLagoon/BlueLagoon.css @@ -1171,13 +1171,9 @@ a.btn { .aside .toggle_aside, #panel .close, - .dropdown-menu .toggle_aside { + .dropdown-menu .toggle_aside, + #slider .toggle_aside { background: #171717; - display: block; - width: 100%; - height: 40px; - line-height: 40px; - text-align: center; box-shadow: 0 1px rgba(255,255,255,0.08); } diff --git a/p/themes/BlueLagoon/BlueLagoon.rtl.css b/p/themes/BlueLagoon/BlueLagoon.rtl.css index 8537af83c05..778a5cecd89 100644 --- a/p/themes/BlueLagoon/BlueLagoon.rtl.css +++ b/p/themes/BlueLagoon/BlueLagoon.rtl.css @@ -1171,13 +1171,9 @@ a.btn { .aside .toggle_aside, #panel .close, - .dropdown-menu .toggle_aside { + .dropdown-menu .toggle_aside, + #slider .toggle_aside { background: #171717; - display: block; - width: 100%; - height: 40px; - line-height: 40px; - text-align: center; box-shadow: 0 1px rgba(255,255,255,0.08); } diff --git a/p/themes/Dark/dark.css b/p/themes/Dark/dark.css index 75183479831..0b05dfba442 100644 --- a/p/themes/Dark/dark.css +++ b/p/themes/Dark/dark.css @@ -1018,12 +1018,7 @@ a.btn { #panel .close, .dropdown-menu .toggle_aside { background: #111; - display: block; - width: 100%; - height: 50px; border-bottom: 1px solid #333; - line-height: 50px; - text-align: center; } .aside.aside_feed { diff --git a/p/themes/Dark/dark.rtl.css b/p/themes/Dark/dark.rtl.css index 9522cb3c780..e12b4536820 100644 --- a/p/themes/Dark/dark.rtl.css +++ b/p/themes/Dark/dark.rtl.css @@ -1018,12 +1018,7 @@ a.btn { #panel .close, .dropdown-menu .toggle_aside { background: #111; - display: block; - width: 100%; - height: 50px; border-bottom: 1px solid #333; - line-height: 50px; - text-align: center; } .aside.aside_feed { diff --git a/p/themes/Flat/flat.css b/p/themes/Flat/flat.css index ac6585c6f29..14efcf175f5 100644 --- a/p/themes/Flat/flat.css +++ b/p/themes/Flat/flat.css @@ -1026,11 +1026,6 @@ a.btn { #panel .close, .dropdown-menu .toggle_aside { background: #2c3e50; - display: block; - width: 100%; - height: 50px; - line-height: 50px; - text-align: center; } .aside.aside_feed { diff --git a/p/themes/Flat/flat.rtl.css b/p/themes/Flat/flat.rtl.css index dc57e6d2459..aa18c40db91 100644 --- a/p/themes/Flat/flat.rtl.css +++ b/p/themes/Flat/flat.rtl.css @@ -1026,11 +1026,6 @@ a.btn { #panel .close, .dropdown-menu .toggle_aside { background: #2c3e50; - display: block; - width: 100%; - height: 50px; - line-height: 50px; - text-align: center; } .aside.aside_feed { diff --git a/p/themes/Mapco/_mobile.scss b/p/themes/Mapco/_mobile.scss index 76943489243..1c11448f042 100644 --- a/p/themes/Mapco/_mobile.scss +++ b/p/themes/Mapco/_mobile.scss @@ -25,14 +25,13 @@ .aside .toggle_aside, #panel .close, - #close-slider.active, - .dropdown-menu .toggle_aside { - background: variables.$main-first-alt; - display: block; - width: 100%; - height: 50px; - line-height: 50px; - text-align: center; + .dropdown-menu .toggle_aside, + #slider .toggle_aside { + background-color: variables.$main-first; + + &:hover { + background-color: variables.$main-first-alt; + } .icon { filter: grayscale(100%) brightness(2.5); diff --git a/p/themes/Mapco/mapco.css b/p/themes/Mapco/mapco.css index 06d612a8d19..e1c1d262cdb 100644 --- a/p/themes/Mapco/mapco.css +++ b/p/themes/Mapco/mapco.css @@ -1248,19 +1248,20 @@ main.prompt { .aside .toggle_aside, #panel .close, -#close-slider.active, -.dropdown-menu .toggle_aside { - background: #25c; - display: block; - width: 100%; - height: 50px; - line-height: 50px; - text-align: center; +.dropdown-menu .toggle_aside, +#slider .toggle_aside { + background-color: #36c; + } + .aside .toggle_aside:hover, +#panel .close:hover, +.dropdown-menu .toggle_aside:hover, +#slider .toggle_aside:hover { + background-color: #25c; } .aside .toggle_aside .icon, #panel .close .icon, -#close-slider.active .icon, -.dropdown-menu .toggle_aside .icon { +.dropdown-menu .toggle_aside .icon, +#slider .toggle_aside .icon { filter: grayscale(100%) brightness(2.5); } diff --git a/p/themes/Mapco/mapco.rtl.css b/p/themes/Mapco/mapco.rtl.css index 8044831938f..5aa6c6ee668 100644 --- a/p/themes/Mapco/mapco.rtl.css +++ b/p/themes/Mapco/mapco.rtl.css @@ -1248,19 +1248,20 @@ main.prompt { .aside .toggle_aside, #panel .close, -#close-slider.active, -.dropdown-menu .toggle_aside { - background: #25c; - display: block; - width: 100%; - height: 50px; - line-height: 50px; - text-align: center; +.dropdown-menu .toggle_aside, +#slider .toggle_aside { + background-color: #36c; + } + .aside .toggle_aside:hover, +#panel .close:hover, +.dropdown-menu .toggle_aside:hover, +#slider .toggle_aside:hover { + background-color: #25c; } .aside .toggle_aside .icon, #panel .close .icon, -#close-slider.active .icon, -.dropdown-menu .toggle_aside .icon { +.dropdown-menu .toggle_aside .icon, +#slider .toggle_aside .icon { filter: grayscale(100%) brightness(2.5); } diff --git a/p/themes/Nord/nord.css b/p/themes/Nord/nord.css index fcad17acc25..5b41edcd49d 100644 --- a/p/themes/Nord/nord.css +++ b/p/themes/Nord/nord.css @@ -1109,15 +1109,6 @@ input.extend { transition: width 200ms linear; } - .aside .toggle_aside, - #panel .close { - display: block; - width: 100%; - height: 50px; - line-height: 50px; - text-align: center; - } - .aside.aside_feed { padding: 0; } diff --git a/p/themes/Nord/nord.rtl.css b/p/themes/Nord/nord.rtl.css index fe2fe4de851..fd6aa7dd3d2 100644 --- a/p/themes/Nord/nord.rtl.css +++ b/p/themes/Nord/nord.rtl.css @@ -1109,15 +1109,6 @@ input.extend { transition: width 200ms linear; } - .aside .toggle_aside, - #panel .close { - display: block; - width: 100%; - height: 50px; - line-height: 50px; - text-align: center; - } - .aside.aside_feed { padding: 0; } diff --git a/p/themes/Origine/origine.css b/p/themes/Origine/origine.css index 83e0822a209..6ef335fdd11 100644 --- a/p/themes/Origine/origine.css +++ b/p/themes/Origine/origine.css @@ -1021,12 +1021,7 @@ a.btn, #panel .close, .dropdown-menu .toggle_aside { background: #f6f6f6; - display: block; - width: 100%; - height: 50px; border-bottom: 1px solid #ddd; - line-height: 50px; - text-align: center; } .aside.aside_feed { diff --git a/p/themes/Origine/origine.rtl.css b/p/themes/Origine/origine.rtl.css index 9efd136adf0..f52dcc1c328 100644 --- a/p/themes/Origine/origine.rtl.css +++ b/p/themes/Origine/origine.rtl.css @@ -1021,12 +1021,7 @@ a.btn, #panel .close, .dropdown-menu .toggle_aside { background: #f6f6f6; - display: block; - width: 100%; - height: 50px; border-bottom: 1px solid #ddd; - line-height: 50px; - text-align: center; } .aside.aside_feed { diff --git a/p/themes/Pafat/pafat.css b/p/themes/Pafat/pafat.css index 14266cc7911..aef22b4cab6 100644 --- a/p/themes/Pafat/pafat.css +++ b/p/themes/Pafat/pafat.css @@ -1006,12 +1006,7 @@ a.signin { #panel .close, .dropdown-menu .toggle_aside { background: #f6f6f6; - display: block; - width: 100%; - height: 40px; border-bottom: 1px solid #ddd; - line-height: 40px; - text-align: center; } .aside.aside_feed { diff --git a/p/themes/Pafat/pafat.rtl.css b/p/themes/Pafat/pafat.rtl.css index 2a9daf39f4f..dea595bda19 100644 --- a/p/themes/Pafat/pafat.rtl.css +++ b/p/themes/Pafat/pafat.rtl.css @@ -1006,12 +1006,7 @@ a.signin { #panel .close, .dropdown-menu .toggle_aside { background: #f6f6f6; - display: block; - width: 100%; - height: 40px; border-bottom: 1px solid #ddd; - line-height: 40px; - text-align: center; } .aside.aside_feed { diff --git a/p/themes/Screwdriver/screwdriver.css b/p/themes/Screwdriver/screwdriver.css index 9672a25d5da..a3454704416 100644 --- a/p/themes/Screwdriver/screwdriver.css +++ b/p/themes/Screwdriver/screwdriver.css @@ -1149,13 +1149,8 @@ a.btn { #panel .close, .dropdown-menu .toggle_aside { background: #171717; - display: block; - width: 100%; - height: 40px; border-radius: 0 8px 0 8px; box-shadow: 0 1px rgba(255,255,255,0.08); - line-height: 40px; - text-align: center; } .aside.aside_feed { diff --git a/p/themes/Screwdriver/screwdriver.rtl.css b/p/themes/Screwdriver/screwdriver.rtl.css index 71631666039..97f3590b202 100644 --- a/p/themes/Screwdriver/screwdriver.rtl.css +++ b/p/themes/Screwdriver/screwdriver.rtl.css @@ -1149,13 +1149,8 @@ a.btn { #panel .close, .dropdown-menu .toggle_aside { background: #171717; - display: block; - width: 100%; - height: 40px; border-radius: 8px 0 8px 0; box-shadow: 0 1px rgba(255,255,255,0.08); - line-height: 40px; - text-align: center; } .aside.aside_feed { diff --git a/p/themes/Swage/swage.css b/p/themes/Swage/swage.css index 08c9b380d87..a6cc3a09a5d 100644 --- a/p/themes/Swage/swage.css +++ b/p/themes/Swage/swage.css @@ -710,11 +710,6 @@ form th { .reader .aside .toggle_aside { background: #22303d; - display: block; - width: 100%; - height: 50px; - line-height: 50px; - text-align: center; } .reader .aside .toggle_aside .icon { filter: brightness(3); @@ -1027,11 +1022,6 @@ a.signin { } .aside .toggle_aside { background: #22303d; - display: block; - height: 50px; - line-height: 50px; - text-align: center; - padding-right: 10px; } .aside .toggle_aside:hover { background-color: #0062be; @@ -1052,11 +1042,6 @@ a.signin { #slider .toggle_aside { background: #22303d; - display: block; - height: 50px; - line-height: 50px; - text-align: center; - padding-right: 10px; } #slider .toggle_aside:hover { background-color: #0062be; diff --git a/p/themes/Swage/swage.rtl.css b/p/themes/Swage/swage.rtl.css index f486cd0303e..6b171287726 100644 --- a/p/themes/Swage/swage.rtl.css +++ b/p/themes/Swage/swage.rtl.css @@ -710,11 +710,6 @@ form th { .reader .aside .toggle_aside { background: #22303d; - display: block; - width: 100%; - height: 50px; - line-height: 50px; - text-align: center; } .reader .aside .toggle_aside .icon { filter: brightness(3); @@ -1027,11 +1022,6 @@ a.signin { } .aside .toggle_aside { background: #22303d; - display: block; - height: 50px; - line-height: 50px; - text-align: center; - padding-left: 10px; } .aside .toggle_aside:hover { background-color: #0062be; @@ -1052,11 +1042,6 @@ a.signin { #slider .toggle_aside { background: #22303d; - display: block; - height: 50px; - line-height: 50px; - text-align: center; - padding-left: 10px; } #slider .toggle_aside:hover { background-color: #0062be; diff --git a/p/themes/Swage/swage.scss b/p/themes/Swage/swage.scss index c690e13c266..ea9a837168e 100644 --- a/p/themes/Swage/swage.scss +++ b/p/themes/Swage/swage.scss @@ -908,11 +908,6 @@ form { .aside { .toggle_aside { background: $color_aside; - display: block; - width: 100%; - height: 50px; - line-height: 50px; - text-align: center; .icon { filter: brightness(3); @@ -1297,11 +1292,6 @@ a.signin { .toggle_aside { background: $color_aside; - display: block; - height: 50px; - line-height: 50px; - text-align: center; - padding-right: 10px; &:hover { background-color: color.adjust( $color_nav, $lightness: 0%); @@ -1328,11 +1318,6 @@ a.signin { #slider { .toggle_aside { background: $color_aside; - display: block; - height: 50px; - line-height: 50px; - text-align: center; - padding-right: 10px; &:hover { background-color: color.adjust( $color_nav, $lightness: 0%); diff --git a/p/themes/base-theme/base.css b/p/themes/base-theme/base.css index 7ce91c584b1..6c0531969d0 100644 --- a/p/themes/base-theme/base.css +++ b/p/themes/base-theme/base.css @@ -812,12 +812,18 @@ a.btn { } .aside .toggle_aside, - #panel .close { - display: block; - width: 100%; - height: 50px; - line-height: 50px; - text-align: center; + #panel .close, + .dropdown-menu .toggle_aside, + #slider .toggle_aside { + background: #fff; + border-bottom-color: #ddd; + } + + .aside .toggle_aside:hover, + #panel .close:hover, + .dropdown-menu .toggle_aside:hover, + #slider .toggle_aside:hover { + background-color: #ddd; } .aside.aside_feed { diff --git a/p/themes/base-theme/base.rtl.css b/p/themes/base-theme/base.rtl.css index 380afb97260..a25776f1d01 100644 --- a/p/themes/base-theme/base.rtl.css +++ b/p/themes/base-theme/base.rtl.css @@ -812,12 +812,18 @@ a.btn { } .aside .toggle_aside, - #panel .close { - display: block; - width: 100%; - height: 50px; - line-height: 50px; - text-align: center; + #panel .close, + .dropdown-menu .toggle_aside, + #slider .toggle_aside { + background: #fff; + border-bottom-color: #ddd; + } + + .aside .toggle_aside:hover, + #panel .close:hover, + .dropdown-menu .toggle_aside:hover, + #slider .toggle_aside:hover { + background-color: #ddd; } .aside.aside_feed { diff --git a/p/themes/base-theme/frss.css b/p/themes/base-theme/frss.css index 1ce76069011..1f97f0483f4 100644 --- a/p/themes/base-theme/frss.css +++ b/p/themes/base-theme/frss.css @@ -1921,11 +1921,10 @@ input:checked + .slide-container .properties { #panel .close, .dropdown-menu .toggle_aside, #slider .toggle_aside { + padding: 1rem; display: block; width: 100%; - height: 50px; border-bottom: 1px solid var(--frss-border-color); - line-height: 50px; text-align: center; } diff --git a/p/themes/base-theme/frss.rtl.css b/p/themes/base-theme/frss.rtl.css index d5aeb34294d..718b888d988 100644 --- a/p/themes/base-theme/frss.rtl.css +++ b/p/themes/base-theme/frss.rtl.css @@ -1921,11 +1921,10 @@ input:checked + .slide-container .properties { #panel .close, .dropdown-menu .toggle_aside, #slider .toggle_aside { + padding: 1rem; display: block; width: 100%; - height: 50px; border-bottom: 1px solid var(--frss-border-color); - line-height: 50px; text-align: center; } From 6405b6d16935aff1ecbc4b9e0b5d0f9fcb81e95e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Edgardo=20Ram=C3=ADrez?= Date: Sun, 2 Oct 2022 13:51:28 -0500 Subject: [PATCH 0402/2479] UPDATE: Spanish translations [i18n] #4656 (#4676) --- app/i18n/es/admin.php | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/app/i18n/es/admin.php b/app/i18n/es/admin.php index 3e2441658ac..868cac45d16 100755 --- a/app/i18n/es/admin.php +++ b/app/i18n/es/admin.php @@ -170,18 +170,18 @@ 'registration' => array( 'number' => 'Número máximo de cuentas', 'select' => array( - 'label' => 'Registration form', // TODO + 'label' => 'Formulario de registro', 'option' => array( - 'noform' => 'Disabled: No registration form', // TODO - 'nolimit' => 'Enabled: No limit of accounts', // TODO - 'setaccountsnumber' => 'Set max. number of accounts', // TODO + 'noform' => 'Deshabilitado: Sin formulario de registro', + 'nolimit' => 'Habilitado: Sin límite de cuentas', + 'setaccountsnumber' => 'Establece el número máximo de cuentas', ), ), 'status' => array( - 'disabled' => 'Form disabled', // TODO - 'enabled' => 'Form enabled', // TODO + 'disabled' => 'Formulario deshabilitado', + 'enabled' => 'Formulario habilitado', ), - 'title' => 'User registration form', // TODO + 'title' => 'Formulario de registro del usuario', ), ), 'update' => array( From c4a0fe364fad38e7100182ff250a4941a8e17a5e Mon Sep 17 00:00:00 2001 From: Nicolas Pereira Date: Sun, 2 Oct 2022 15:52:56 -0300 Subject: [PATCH 0403/2479] [Feature - Hacktoberfest] - Add Admin transalation pt br (#4669) * feat (translate): translate Registration form * feat(translate): add translaction notform term * feat(translate): add translate nolimit term * feat(translate): add translate ptBR setaccountsnumber term * feat(translate): add translate ptBR disabled term * fix(translate): fix disabled translate ptBR term * feat(translate): add translate ptBR enabled term * feat(translate): add translate ptBR title term * feat(translate): remove //todo comments * feat(translate): add translate ptbr level term * feat(translate): add translate ptbr message term * feat(translate): add translate ptBR timestaamp term * feat(translate): add translate ptBR term * feat(translate): add translate ptBR both term * feat(translate): add translate ptBR header term * fix: remove TODO * feat(translate): add translate ptBR header term * feat(translate): add translate ptBR none term * feat(translate): add translate ptBR above_title term * feat(translate): add translate ptBR none term * feat(translate): add transaction ptBR with_authors term * feat(translate): add transaction ptBR feed_title term * feat(translate): add translate ptBR term * fix(translate): fix translate * feat(translate): add translate ptBR both term * feat(translate): add translate ptBR tags -> footer term * feat(translate): add translate ptBR tags->header term * feat(translate): add translate ptBR tags->none term * feat(translate): add translate ptBR tags_max term * feat(translate): add translate ptBR help term * feat(translate): add translate ptBR headline * feat(translate): add upong_gone term translate ptBR * feat(translate): add deprecated terms translatePTBR * feat(translate): add ptBR translate in gen.php * feat(translate): add translate ptBR for sub.php * Tab instead of white space * another fix Co-authored-by: mathContao --- app/i18n/pt-br/admin.php | 14 ++++---- app/i18n/pt-br/conf.php | 54 +++++++++++++++---------------- app/i18n/pt-br/gen.php | 10 +++--- app/i18n/pt-br/sub.php | 70 ++++++++++++++++++++-------------------- 4 files changed, 74 insertions(+), 74 deletions(-) diff --git a/app/i18n/pt-br/admin.php b/app/i18n/pt-br/admin.php index c8b4241c5fd..bf5406b3958 100644 --- a/app/i18n/pt-br/admin.php +++ b/app/i18n/pt-br/admin.php @@ -170,18 +170,18 @@ 'registration' => array( 'number' => 'Máximo número de contas', 'select' => array( - 'label' => 'Registration form', // TODO + 'label' => 'Formulário de Registro', 'option' => array( - 'noform' => 'Disabled: No registration form', // TODO - 'nolimit' => 'Enabled: No limit of accounts', // TODO - 'setaccountsnumber' => 'Set max. number of accounts', // TODO + 'noform' => 'Desativado: Sem formulário de registro', + 'nolimit' => 'Atividado: Sem limites de contas', + 'setaccountsnumber' => 'Definir o máximo de número de contas', ), ), 'status' => array( - 'disabled' => 'Form disabled', // TODO - 'enabled' => 'Form enabled', // TODO + 'disabled' => 'Formulário desabilitado', + 'enabled' => 'Formulário habilitado', ), - 'title' => 'User registration form', // TODO + 'title' => 'Formulário de Cadastro de Usuário', ), ), 'update' => array( diff --git a/app/i18n/pt-br/conf.php b/app/i18n/pt-br/conf.php index af8cafe7056..a48b9df7cea 100644 --- a/app/i18n/pt-br/conf.php +++ b/app/i18n/pt-br/conf.php @@ -68,9 +68,9 @@ ), 'logs' => array( 'loglist' => array( - 'level' => 'Log Level', // TODO - 'message' => 'Log Message', // TODO - 'timestamp' => 'Timestamp', // TODO + 'level' => 'Nivel de Registro', + 'message' => 'Mensagem de Registro', + 'timestamp' => 'Data e Hora', ), 'pagination' => array( 'first' => 'Primeiro', @@ -139,28 +139,28 @@ 'always_show_favorites' => 'Mostrar todos os artivos nos favoritos por padrão', 'article' => array( 'authors_date' => array( - '_' => 'Authors and date', // TODO - 'both' => 'In header and footer', // TODO - 'footer' => 'In footer', // TODO - 'header' => 'In header', // TODO - 'none' => 'None', // TODO + '_' => 'Autores e Data', + 'both' => 'No cabeçalho e rodapé', + 'footer' => 'No rodapé', + 'header' => 'No cabeçalho', + 'none' => 'Nenhum', ), 'feed_name' => array( - 'above_title' => 'Above title/tags', // TODO - 'none' => 'None', // TODO - 'with_authors' => 'In authors and date row', // TODO + 'above_title' => 'Acima do titulo/etiqueta', + 'none' => 'Nenhum', + 'with_authors' => 'Com autores e data', ), - 'feed_title' => 'Feed title', // TODO + 'feed_title' => 'Titulo do Feed', 'tags' => array( - '_' => 'Tags', // TODO - 'both' => 'In header and footer', // TODO - 'footer' => 'In footer', // TODO - 'header' => 'In header', // TODO - 'none' => 'None', // TODO + '_' => 'Etiqueta', + 'both' => 'No cabeçalho e rodapé', + 'footer' => 'No rodapé', + 'header' => 'No cabeçalho', + 'none' => 'Nenhum', ), 'tags_max' => array( - '_' => 'Max number of tags shown', // TODO - 'help' => '0 means: show all tags and do not collapse them', // TODO + '_' => 'Número máximo de etiquetas exibidas', + 'help' => '0 significa: mostrar todas as etiquetas e não recolhê-las', ), ), 'articles_per_page' => 'Número de artigos por página', @@ -170,12 +170,12 @@ 'display_articles_unfolded' => 'Mostrar artigos abertos por padrão', 'display_categories_unfolded' => 'Categorias abertas', 'headline' => array( - 'articles' => 'Articles: Open/Close', // TODO - 'articles_header_footer' => 'Articles: header/footer', // TODO - 'categories' => 'Left navigation: Categories', // TODO - 'mark_as_read' => 'Mark article as read', // TODO - 'misc' => 'Miscellaneous', // TODO - 'view' => 'View', // TODO + 'articles' => 'Artigos: Abrir/Fechar', + 'articles_header_footer' => 'Artigos: cabeçalho/rodapé', + 'categories' => 'Navegação à esquerda: Categoria', + 'mark_as_read' => 'Marcar artigo como lido', + 'misc' => 'Diversos', + 'view' => 'Visualização', ), 'hide_read_feeds' => 'Esconder categorias e feeds com nenhum artigo não lido (não funciona com a configuração "Mostrar todos os artigos”)', 'img_with_lazyload' => 'Utilizar o modo "lazy load" para carregar as imagens', @@ -187,7 +187,7 @@ 'article_viewed' => 'Quando o artigo é visualizado', 'keep_max_n_unread' => 'Número máximo de artigos para manter como não lido', 'scroll' => 'enquanto scrolling', - 'upon_gone' => 'when it is no longer in the upstream news feed', // TODO + 'upon_gone' => 'QUuando não estiver mais no feed de noticiais principais', 'upon_reception' => 'ao receber um artigo', 'when' => 'Marcar artigo como lido…', 'when_same_title' => 'Se um título idêntico já existir nos últimosn artigos mais novos', @@ -222,7 +222,7 @@ '_' => 'Compartilhando', 'add' => 'Adicionar um método de compartilhamento', 'blogotext' => 'Blogotext', // IGNORE - 'deprecated' => 'This service is deprecated and will be removed from FreshRSS in a future release.', // TODO + 'deprecated' => 'Este serviço está obceloeto e será removido do FreshRSS em versões futuras.', 'diaspora' => 'Diaspora*', // IGNORE 'email' => 'E-mail', 'facebook' => 'Facebook', // IGNORE diff --git a/app/i18n/pt-br/gen.php b/app/i18n/pt-br/gen.php index 710c901e96b..c1962e80ab8 100644 --- a/app/i18n/pt-br/gen.php +++ b/app/i18n/pt-br/gen.php @@ -18,7 +18,7 @@ 'back_to_rss_feeds' => '← Volte para o seu feeds RSS', 'cancel' => 'Cancelar', 'create' => 'Criar', - 'delete_muted_feeds' => 'Delete muted feeds', // TODO + 'delete_muted_feeds' => 'Excluir feeds silenciados', 'demote' => 'Despromover', 'disable' => 'Desabilitar', 'empty' => 'Vazio', @@ -29,10 +29,10 @@ 'load_default_shortcuts' => 'Carregar mais atalhos', 'manage' => 'Gerenciar', 'mark_read' => 'Marcar como lido', - 'open_url' => 'Open URL', // TODO + 'open_url' => 'Abrir URL', 'promote' => 'Promover', 'purge' => 'Limpar', - 'refresh_opml' => 'Refresh OPML', // TODO + 'refresh_opml' => 'Atualizar OPML', 'remove' => 'Remover', 'rename' => 'Renomear', 'see_website' => 'Ver o site', @@ -130,7 +130,7 @@ 'confirm_action_feed_cat' => 'Você tem certeza que deseja efetuar esta ação ? Você irá perder favoritos e queries de usuários. Não poderá ser cancelado!', 'feedback' => array( 'body_new_articles' => 'Há %%d novos artigos para ler no FreshRSS.', - 'body_unread_articles' => '(unread: %%d)', // TODO + 'body_unread_articles' => '(não lido: %%d)', 'request_failed' => 'Uma solicitação falhou, isto pode ter sido causado por problemas de conexão com a internet.', 'title_new_articles' => 'FreshRSS: novos artigos!', ), @@ -211,7 +211,7 @@ 'twitter' => 'Twitter', // IGNORE 'wallabag' => 'wallabag v1', // IGNORE 'wallabagv2' => 'wallabag v2', // IGNORE - 'web-sharing-api' => 'System sharing', // TODO + 'web-sharing-api' => 'Sistemas-compartilhados (API)', 'whatsapp' => 'Whatsapp', // IGNORE 'xing' => 'Xing', // IGNORE ), diff --git a/app/i18n/pt-br/sub.php b/app/i18n/pt-br/sub.php index 6f49f6fc358..d8e146b77a1 100644 --- a/app/i18n/pt-br/sub.php +++ b/app/i18n/pt-br/sub.php @@ -25,19 +25,19 @@ 'add' => 'Adicionar categoria', 'archiving' => 'Arquivar', 'dynamic_opml' => array( - '_' => 'Dynamic OPML', // TODO - 'help' => 'Provide the URL to an OPML file to dynamically populate this category with feeds', // TODO + '_' => 'OPML Dinâmico', + 'help' => 'Forneça uma URL para o arquivo OPML para preencher dinamicamente esta categoria com feeds', ), 'empty' => 'Categoria vazia', 'information' => 'Informações', - 'opml_url' => 'OPML URL', // TODO + 'opml_url' => 'URL de OPML', 'position' => 'Posição de exibição', 'position_help' => 'Para controlar a ordem de exibição', 'title' => 'Título', ), 'feed' => array( - 'accept_cookies' => 'Accept cookies', // TODO - 'accept_cookies_help' => 'Allow the feed server to set cookies (stored in memory for the duration of the request only)', // TODO + 'accept_cookies' => 'Aceitar cookies', + 'accept_cookies_help' => 'Permitir que o servidor de Feed defina os cookies (sarmazenados na memória apenas durante a solicitação)', 'add' => 'Adicionar um RSS feed', 'advanced' => 'Avançado', 'archiving' => 'Arquivar', @@ -60,8 +60,8 @@ 'css_help' => 'Retorna RSS feeds truncados (atenção, requer mais tempo!)', 'css_path' => 'Caminho do CSS do artigo no site original', 'css_path_filter' => array( - '_' => 'CSS selector of the elements to remove', // TODO - 'help' => 'A CSS selector may be a list such as: .footer, .aside', // TODO + '_' => 'Seletor CSS dos elementos a serem removidos', + 'help' => 'O seletor CSS pode ser uma lista com: .footer, .aside', ), 'description' => 'Descrição', 'empty' => 'Este feed está vazio. Por favor verifique ele ainda é mantido.', @@ -73,51 +73,51 @@ 'information' => 'Informações', 'keep_min' => 'Número mínimo de artigos para manter', 'kind' => array( - '_' => 'Type of feed source', // TODO + '_' => 'Tipo de fonte de alimentação do Feed', 'html_xpath' => array( - '_' => 'HTML + XPath (Web scraping)', // TODO + '_' => 'HTML + XPath (Web scraping)', // IGNORE 'feed_title' => array( - '_' => 'feed title', // TODO - 'help' => 'Example: //title or a static string: "My custom feed"', // TODO + '_' => 'Título do Feed', + 'help' => 'Exemplo: //title ou uma string estática: "Meu feed customizado"', ), - 'help' => 'XPath 1.0 is a standard query language for advanced users, and which FreshRSS supports to enable Web scraping.', // TODO + 'help' => 'XPath 1.0é uma linguagem de consulta padrão para usuários avançados e que o FreshRSS suporta para habilitar o Web scraping.', 'item' => array( - '_' => 'finding news items
    (most important)', // TODO - 'help' => 'Example: //div[@class="news-item"]', // TODO + '_' => 'encontrar notícias items
    (mais importantes)', + 'help' => 'Exemplo: //div[@class="news-item"]', ), 'item_author' => array( - '_' => 'item author', // TODO - 'help' => 'Can also be a static string. Example: "Anonymous"', // TODO + '_' => 'Autor do item', + 'help' => 'Também pode ser uma string estática. Exemplo: "Anônimo"', ), - 'item_categories' => 'item tags', // TODO + 'item_categories' => 'Etiquetas do item', 'item_content' => array( - '_' => 'item content', // TODO - 'help' => 'Example to take the full item: .', // TODO + '_' => 'Conteúdo do item', + 'help' => 'Exemplo para pegar o item completo: .', ), 'item_thumbnail' => array( - '_' => 'item thumbnail', // TODO - 'help' => 'Example: descendant::img/@src', // TODO + '_' => 'Miniatura do item', + 'help' => 'Exemplo: descendant::img/@src', ), 'item_timestamp' => array( - '_' => 'item date', // TODO - 'help' => 'The result will be parsed by strtotime()', // TODO + '_' => 'Data do Item', + 'help' => 'O resultado será parecido com: strtotime()', ), 'item_title' => array( - '_' => 'item title', // TODO - 'help' => 'Use in particular the XPath axis descendant:: like descendant::h2', // TODO + '_' => 'Titulo do Item', + 'help' => 'Utilize especialmente XPath axis descendant:: like descendant::h2', ), 'item_uid' => array( - '_' => 'item unique ID', // TODO - 'help' => 'Optional. Example: descendant::div/@data-uri', // TODO + '_' => 'ID único do item', + 'help' => 'Opcional. Exemplo: descendant::div/@data-uri', ), 'item_uri' => array( - '_' => 'item link (URL)', // TODO - 'help' => 'Example: descendant::a/@href', // TODO + '_' => 'Link do item (URL)', + 'help' => 'Exemplo: descendant::a/@href', ), - 'relative' => 'XPath (relative to item) for:', // TODO - 'xpath' => 'XPath for:', // TODO + 'relative' => 'XPath (relativo do item) para:', + 'xpath' => 'XPath para:', ), - 'rss' => 'RSS / Atom (default)', // TODO + 'rss' => 'RSS / Atom (padrão)', ), 'maintenance' => array( 'clear_cache' => 'Limpar o cache', @@ -126,8 +126,8 @@ 'reload_articles_help' => 'Recarregar artigos e buscar conteúdo completo', // DIRTY 'title' => 'Manutenção', ), - 'max_http_redir' => 'Max HTTP redirects', // TODO - 'max_http_redir_help' => 'Set to 0 or leave blank to disable, -1 for unlimited redirects', // TODO + 'max_http_redir' => 'Quantidade máxima de redirecionamentos HTTP', + 'max_http_redir_help' => 'Defina como 0 ou deixe em branco para desabilitar, -1 para redirecionamentos ilimitados', 'moved_category_deleted' => 'Quando você deleta uma categoria, seus feeds são automaticamente classificados como %s.', 'mute' => 'silenciar', 'no_selected' => 'Nenhum feed selecionado.', @@ -198,7 +198,7 @@ '_' => 'Gerenciamento de inscrições', 'add' => 'Adicionar um feed ou categoria', 'add_category' => 'Adicionar uma categoria', - 'add_dynamic_opml' => 'Add dynamic OPML', // TODO + 'add_dynamic_opml' => 'Adicionar OPML dinâmico', 'add_feed' => 'Adicionar um feed', 'add_label' => 'Adicionar uma etiqueta', 'delete_label' => 'Deletar uma etiqueta', From 3b54f8cd8196728df14590bfb1560dd4f6aaf685 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Edgardo=20Ram=C3=ADrez?= Date: Sun, 2 Oct 2022 15:11:15 -0500 Subject: [PATCH 0404/2479] Update CREDITS.md (#4678) --- CREDITS.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CREDITS.md b/CREDITS.md index d874e0c3696..efb67f2c66d 100644 --- a/CREDITS.md +++ b/CREDITS.md @@ -52,6 +52,7 @@ People are sorted by name so please keep this order. * [DuncanBennie](https://github.com/DuncanBennie): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:DuncanBennie), [Web](https://duncanbennie.com) * [ealdraed](https://github.com/ealdraed): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:ealdraed) * [Ed Sandor](https://github.com/ewsandor): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:ewsandor), [Web](https://ewsandor.com) +* [Edgardo Ramírez](https://github.com/SoldierCorp): [contributors](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:SoldierCorp) * [equinoxmatt](https://github.com/equinoxmatt): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:equinoxmatt) * [fabianski7](https://github.com/fabianski7): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:fabianski7) * [Fake4d](https://github.com/Fake4d): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:Fake4d) From a9d4c789311ee54f10ff2b483ad8804bd1de5286 Mon Sep 17 00:00:00 2001 From: maTh Date: Mon, 3 Oct 2022 16:26:53 +0200 Subject: [PATCH 0405/2479] Improved: Subscription Management: Show the position number (#4679) * the code * improvement * fix doubled parameter --- app/Controllers/subscriptionController.php | 2 +- app/views/subscription/index.phtml | 2 +- p/themes/base-theme/frss.css | 16 ++++++++++++++++ p/themes/base-theme/frss.rtl.css | 16 ++++++++++++++++ 4 files changed, 34 insertions(+), 2 deletions(-) diff --git a/app/Controllers/subscriptionController.php b/app/Controllers/subscriptionController.php index cca41b004df..eab45db2603 100644 --- a/app/Controllers/subscriptionController.php +++ b/app/Controllers/subscriptionController.php @@ -19,7 +19,7 @@ public function firstAction() { $catDAO->checkDefault(); $feedDAO->updateTTL(); - $this->view->categories = $catDAO->listSortedCategories(false, true, true); + $this->view->categories = $catDAO->listSortedCategories(false, true); $this->view->default_category = $catDAO->getDefault(); $signalError = false; diff --git a/app/views/subscription/index.phtml b/app/views/subscription/index.phtml index f056214d290..71bf5b4296f 100644 --- a/app/views/subscription/index.phtml +++ b/app/views/subscription/index.phtml @@ -34,7 +34,7 @@ ?>
    - + name() ?> kind() == FreshRSS_Category::KIND_DYNAMIC_OPML) { echo _i('opml-dyn'); } ?>
    diff --git a/p/themes/base-theme/frss.css b/p/themes/base-theme/frss.css index 1f97f0483f4..9accd5fe87f 100644 --- a/p/themes/base-theme/frss.css +++ b/p/themes/base-theme/frss.css @@ -1800,6 +1800,22 @@ input:checked + .slide-container .properties { font-weight: initial; } +.box .box-title .configure:not([data-cat-position=""])::after { + margin: 0.5rem 0px 0px; + padding: 5px 10px; + min-width: 20px; + display: block; + content: attr(data-cat-position); + position: absolute; + top: 0px; + right: 10px; + text-align: center; + font-size: 0.75rem; + border-radius: 12px; + line-height: 1; + font-weight: initial; +} + .feed .item-title:not([data-unread="0"])::after { margin: 1em 0 0 0; } diff --git a/p/themes/base-theme/frss.rtl.css b/p/themes/base-theme/frss.rtl.css index 718b888d988..00eeba2cbe7 100644 --- a/p/themes/base-theme/frss.rtl.css +++ b/p/themes/base-theme/frss.rtl.css @@ -1800,6 +1800,22 @@ input:checked + .slide-container .properties { font-weight: initial; } +.box .box-title .configure:not([data-cat-position=""])::after { + margin: 0.5rem 0px 0px; + padding: 5px 10px; + min-width: 20px; + display: block; + content: attr(data-cat-position); + position: absolute; + top: 0px; + left: 10px; + text-align: center; + font-size: 0.75rem; + border-radius: 12px; + line-height: 1; + font-weight: initial; +} + .feed .item-title:not([data-unread="0"])::after { margin: 1em 0 0 0; } From db4c2798ae7ab88d6745cfc7d8827d636a7d3ba3 Mon Sep 17 00:00:00 2001 From: Alexis Degrugillier Date: Mon, 3 Oct 2022 10:49:52 -0400 Subject: [PATCH 0406/2479] Allow redirection after login (#4654) Before, if you've tried to reach a page without being logged, you'll be automatically redirected to the index page after login. Now, the original page is used after login. Fix #3663 --- app/Controllers/authController.php | 2 +- app/views/auth/formLogin.phtml | 1 + lib/Minz/FrontController.php | 20 +----------------- lib/Minz/Request.php | 9 ++++++++ lib/Minz/Url.php | 34 ++++++++++++++++++++++++++++++ 5 files changed, 46 insertions(+), 20 deletions(-) diff --git a/app/Controllers/authController.php b/app/Controllers/authController.php index 932a1ed6dbf..3661e35cb4b 100644 --- a/app/Controllers/authController.php +++ b/app/Controllers/authController.php @@ -160,7 +160,7 @@ public function formLoginAction() { Minz_Translate::init(FreshRSS_Context::$user_conf->language); // All is good, go back to the index. - Minz_Request::good(_t('feedback.auth.login.success'), [ 'c' => 'index', 'a' => 'index' ]); + Minz_Request::good(_t('feedback.auth.login.success'), Minz_Url::unserialize(Minz_Request::param('original_request'))); } else { Minz_Log::warning("Password mismatch for user={$username}, nonce={$nonce}, c={$challenge}"); diff --git a/app/views/auth/formLogin.phtml b/app/views/auth/formLogin.phtml index e218d089d24..872caac0201 100644 --- a/app/views/auth/formLogin.phtml +++ b/app/views/auth/formLogin.phtml @@ -8,6 +8,7 @@ +
    diff --git a/lib/Minz/FrontController.php b/lib/Minz/FrontController.php index 80fa5ce9668..a5f73b59f41 100644 --- a/lib/Minz/FrontController.php +++ b/lib/Minz/FrontController.php @@ -36,7 +36,7 @@ public function __construct () { Minz_Request::init(); - $url = $this->buildUrl(); + $url = Minz_Url::build(); $url['params'] = array_merge ( $url['params'], $_POST @@ -50,24 +50,6 @@ public function __construct () { $this->dispatcher = Minz_Dispatcher::getInstance(); } - /** - * Returns an array representing the URL as passed in the address bar - * @return array URL representation - */ - private function buildUrl() { - $url = array(); - - $url['c'] = $_GET['c'] ?? Minz_Request::defaultControllerName(); - $url['a'] = $_GET['a'] ?? Minz_Request::defaultActionName(); - $url['params'] = $_GET; - - // post-traitement - unset($url['params']['c']); - unset($url['params']['a']); - - return $url; - } - /** * Démarre l'application (lance le dispatcher et renvoie la réponse) */ diff --git a/lib/Minz/Request.php b/lib/Minz/Request.php index 2ad02014fc5..62d042f2849 100644 --- a/lib/Minz/Request.php +++ b/lib/Minz/Request.php @@ -15,6 +15,8 @@ class Minz_Request { private static $default_controller_name = 'index'; private static $default_action_name = 'index'; + private static $originalRequest; + /** * Getteurs */ @@ -92,6 +94,9 @@ public static function currentRequest() { 'params' => self::$params, ); } + public static function originalRequest() { + return self::$originalRequest; + } public static function modifiedCurrentRequest(array $extraParams = null) { $currentRequest = self::currentRequest(); if (null !== $extraParams) { @@ -327,6 +332,10 @@ public static function getNotification() { * > sinon, le dispatcher recharge en interne */ public static function forward($url = array(), $redirect = false) { + if (Minz_Request::originalRequest() === null && strpos('auth', json_encode($url)) !== false) { + self::$originalRequest = $url; + } + if (!is_array($url)) { header('Location: ' . $url); exit(); diff --git a/lib/Minz/Url.php b/lib/Minz/Url.php index d6af50364e6..0780a636fbc 100644 --- a/lib/Minz/Url.php +++ b/lib/Minz/Url.php @@ -128,6 +128,40 @@ public static function checkUrl ($url) { return $url_checked; } + + public static function serialize($url = []) { + try { + return base64_encode(json_encode($url, JSON_THROW_ON_ERROR)); + } catch (\Throwable $exception) { + return ''; + } + } + + public static function unserialize($url = '') { + try { + return json_decode(base64_decode($url), true, JSON_THROW_ON_ERROR); + } catch (\Throwable $exception) { + return ''; + } + } + + /** + * Returns an array representing the URL as passed in the address bar + * @return array URL representation + */ + public static function build () { + $url = [ + 'c' => $_GET['c'] ?? Minz_Request::defaultControllerName(), + 'a' => $_GET['a'] ?? Minz_Request::defaultActionName(), + 'params' => $_GET, + ]; + + // post-traitement + unset($url['params']['c']); + unset($url['params']['a']); + + return $url; + } } /** From 01a8c37b8308c283b2c71d629260bd30f8cf85cc Mon Sep 17 00:00:00 2001 From: maTh Date: Mon, 3 Oct 2022 16:55:02 +0200 Subject: [PATCH 0407/2479] Improved: Frss.css - font size + line height with 'rem' values (#4671) * headlines h1-h3 * delete for trust the browser * .icons = 1rem * line-height WIP * .flux .item * paragraphs * kbd * button.as-link * .form-advanced-title * set line-height 1.5 as default * .flux .item.title .summary * .flux .item.title .author * .content > header, .content > footer * popup * last lines * RTL CSS * imrpove jumpy line * Origine Compact * Swage * FRSS CSS RTL * deleted: br * deleted: font-size: 16px * RTL CSS --- app/views/helpers/feed/update.phtml | 2 +- p/themes/Origine-compact/origine-compact.css | 4 + .../Origine-compact/origine-compact.rtl.css | 4 + p/themes/Swage/swage.css | 5 + p/themes/Swage/swage.rtl.css | 5 + p/themes/Swage/swage.scss | 5 + p/themes/base-theme/frss.css | 91 +++++++++---------- p/themes/base-theme/frss.rtl.css | 91 +++++++++---------- 8 files changed, 106 insertions(+), 101 deletions(-) diff --git a/app/views/helpers/feed/update.phtml b/app/views/helpers/feed/update.phtml index 4ca2c472888..80782fc5795 100644 --- a/app/views/helpers/feed/update.phtml +++ b/app/views/helpers/feed/update.phtml @@ -650,7 +650,7 @@
    + $curlParams */ + $curlParams = $this->feed->attributeArray('curl_params') ?? []; + ?>

    @@ -656,8 +660,7 @@

    @@ -678,8 +681,7 @@

    @@ -689,18 +691,14 @@

    diff --git a/app/views/helpers/index/article.phtml b/app/views/helpers/index/article.phtml index 56fd06b4fba..bfdfdb8d193 100644 --- a/app/views/helpers/index/article.phtml +++ b/app/views/helpers/index/article.phtml @@ -10,11 +10,11 @@ 'entry', 'a' => 'bookmark', 'params' => ['id' => $entry->id()]]; if ($entry->isFavorite()) { - $favoriteUrl['params']['is_favorite'] = 0; + $favoriteUrl['params']['is_favorite'] = '0'; } $readUrl = ['c' => 'entry', 'a' => 'read', 'params' => ['id' => $entry->id()]]; if ($entry->isRead()) { - $readUrl['params']['is_read'] = 0; + $readUrl['params']['is_read'] = '0'; } ?>
    diff --git a/app/views/helpers/index/normal/entry_bottom.phtml b/app/views/helpers/index/normal/entry_bottom.phtml index e5bfd7fd036..21bd1d355ff 100644 --- a/app/views/helpers/index/normal/entry_bottom.phtml +++ b/app/views/helpers/index/normal/entry_bottom.phtml @@ -12,9 +12,9 @@ if (FreshRSS_Auth::hasAccess()) { if ($bottomline_read) { ?>
  • 'entry', 'a' => 'read', 'params' => array('id' => $this->entry->id())); + $arUrl = ['c' => 'entry', 'a' => 'read', 'params' => ['id' => $this->entry->id()]]; if ($this->entry->isRead()) { - $arUrl['params']['is_read'] = 0; + $arUrl['params']['is_read'] = '0'; } ?>entry->isRead() ? 'read' : 'unread'); ?>
  • 'entry', 'a' => 'bookmark', 'params' => array('id' => $this->entry->id())); + $arUrl = ['c' => 'entry', 'a' => 'bookmark', 'params' => ['id' => $this->entry->id()]]; if ($this->entry->isFavorite()) { - $arUrl['params']['is_favorite'] = 0; + $arUrl['params']['is_favorite'] = '0'; } ?>entry->isFavorite() ? 'starred' : 'non-starred'); ?>
  • 'entry', 'a' => 'read', 'params' => array('id' => $this->entry->id())); + $arUrl = ['c' => 'entry', 'a' => 'read', 'params' => ['id' => $this->entry->id()]]; if ($this->entry->isRead()) { - $arUrl['params']['is_read'] = 0; + $arUrl['params']['is_read'] = '0'; } ?>entry->isRead() ? 'read' : 'unread'); ?>
  • 'entry', 'a' => 'bookmark', 'params' => array('id' => $this->entry->id())); + $arUrl = ['c' => 'entry', 'a' => 'bookmark', 'params' => ['id' => $this->entry->id()]]; if ($this->entry->isFavorite()) { - $arUrl['params']['is_favorite'] = 0; + $arUrl['params']['is_favorite'] = '0'; } ?>entry->isFavorite() ? 'starred' : 'non-starred'); ?> 'entry', 'a' => 'read', - 'params' => array( + 'params' => [ 'get' => FreshRSS_Context::currentGet(), 'nextGet' => FreshRSS_Context::$next_get, 'idMax' => FreshRSS_Context::$id_max, 'search' => htmlspecialchars_decode(FreshRSS_Context::$search->getRawInput(), ENT_QUOTES), 'state' => FreshRSS_Context::$state, - ) - ); + ], + ]; $hasAccess = FreshRSS_Auth::hasAccess(); if ($hasAccess) { diff --git a/app/views/javascript/actualize.phtml b/app/views/javascript/actualize.phtml index bce316d8517..314f8301294 100644 --- a/app/views/javascript/actualize.phtml +++ b/app/views/javascript/actualize.phtml @@ -5,21 +5,21 @@ declare(strict_types=1); $categories = []; foreach ($this->categories as $category) { $categories[] = [ - 'url' => Minz_Url::display(array('c' => 'category', 'a' => 'refreshOpml', 'params' => array('id' => $category->id(), 'ajax' => '1')), 'php'), + 'url' => Minz_Url::display(['c' => 'category', 'a' => 'refreshOpml', 'params' => ['id' => $category->id(), 'ajax' => '1']], 'php'), 'title' => $category->name(), ]; } -$feeds = array(); +$feeds = []; foreach ($this->feeds as $feed) { - $feeds[] = array( - 'url' => Minz_Url::display(array('c' => 'feed', 'a' => 'actualize', 'params' => array('id' => $feed->id(), 'ajax' => '1')), 'php'), + $feeds[] = [ + 'url' => Minz_Url::display(['c' => 'feed', 'a' => 'actualize', 'params' => ['id' => $feed->id(), 'ajax' => '1']], 'php'), 'title' => $feed->name(), - ); + ]; } -echo json_encode(array( +echo json_encode([ 'categories' => $categories, 'feeds' => $feeds, 'feedback_no_refresh' => _t('feedback.sub.feed.no_refresh'), 'feedback_actualize' => _t('feedback.sub.actualize'), -)); +]); diff --git a/app/views/user/profile.phtml b/app/views/user/profile.phtml index 3a80065ef39..b2e8a7d7b12 100644 --- a/app/views/user/profile.phtml +++ b/app/views/user/profile.phtml @@ -60,8 +60,8 @@

    - 'rss', 'params' => array('user' => Minz_User::name(), - 'token' => $token, 'hours' => FreshRSS_Context::userConf()->since_hours_posts_per_rss)), 'html', true) ?> + 'rss', 'params' => ['user' => Minz_User::name() ?? '', + 'token' => $token, 'hours' => FreshRSS_Context::userConf()->since_hours_posts_per_rss]], 'html', true) ?>

  • diff --git a/composer.lock b/composer.lock index 8ee60e7282b..1b21112a21c 100644 --- a/composer.lock +++ b/composer.lock @@ -314,16 +314,16 @@ }, { "name": "phpstan/phpstan", - "version": "1.11.3", + "version": "1.11.4", "source": { "type": "git", "url": "https://github.com/phpstan/phpstan.git", - "reference": "e64220a05c1209fc856d58e789c3b7a32c0bb9a5" + "reference": "9100a76ce8015b9aa7125b9171ae3a76887b6c82" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/e64220a05c1209fc856d58e789c3b7a32c0bb9a5", - "reference": "e64220a05c1209fc856d58e789c3b7a32c0bb9a5", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/9100a76ce8015b9aa7125b9171ae3a76887b6c82", + "reference": "9100a76ce8015b9aa7125b9171ae3a76887b6c82", "shasum": "" }, "require": { @@ -368,7 +368,7 @@ "type": "github" } ], - "time": "2024-05-31T13:53:37+00:00" + "time": "2024-06-06T12:19:22+00:00" }, { "name": "phpstan/phpstan-phpunit", diff --git a/lib/Minz/Helper.php b/lib/Minz/Helper.php index 04539ec4030..50243ded018 100644 --- a/lib/Minz/Helper.php +++ b/lib/Minz/Helper.php @@ -9,23 +9,25 @@ /** * The Minz_Helper class contains some misc. help functions */ -class Minz_Helper { +final class Minz_Helper { /** * Wrapper for htmlspecialchars. - * Force UTf-8 value and can be used on array too. + * Force UTF-8 value and can be used on array too. * - * @phpstan-template T of string|array + * @phpstan-template T of mixed * @phpstan-param T $var * @phpstan-return T * - * @param string|array $var - * @return string|array + * @param mixed $var + * @return mixed */ public static function htmlspecialchars_utf8($var) { if (is_array($var)) { - return array_map(['Minz_Helper', 'htmlspecialchars_utf8'], $var); + // @phpstan-ignore argument.type, return.type + return array_map([self::class, 'htmlspecialchars_utf8'], $var); } elseif (is_string($var)) { + // @phpstan-ignore return.type return htmlspecialchars($var, ENT_COMPAT, 'UTF-8'); } else { return $var; diff --git a/lib/Minz/Model.php b/lib/Minz/Model.php index ee65d7d9c50..c744b5a522e 100644 --- a/lib/Minz/Model.php +++ b/lib/Minz/Model.php @@ -9,6 +9,6 @@ /** * The Minz_Model class represents a model in the MVC paradigm. */ -class Minz_Model { +abstract class Minz_Model { } diff --git a/lib/Minz/Request.php b/lib/Minz/Request.php index 6d099a55518..301bd5623cd 100644 --- a/lib/Minz/Request.php +++ b/lib/Minz/Request.php @@ -19,7 +19,7 @@ class Minz_Request { private static string $default_controller_name = 'index'; private static string $default_action_name = 'index'; - /** @var array{'c'?:string,'a'?:string,'params'?:array} */ + /** @var array{c?:string,a?:string,params?:array} */ private static array $originalRequest = []; /** @@ -35,6 +35,7 @@ public static function actionName(): string { public static function params(): array { return self::$params; } + /** * Read the URL parameter * @param string $key Key name @@ -46,10 +47,8 @@ public static function params(): array { public static function param(string $key, $default = false, bool $specialchars = false) { if (isset(self::$params[$key])) { $p = self::$params[$key]; - if (is_object($p) || $specialchars) { - return $p; - } elseif (is_string($p) || is_array($p)) { - return Minz_Helper::htmlspecialchars_utf8($p); + if (is_string($p) || is_array($p)) { + return $specialchars ? $p : Minz_Helper::htmlspecialchars_utf8($p); } else { return $p; } @@ -58,12 +57,15 @@ public static function param(string $key, $default = false, bool $specialchars = } } - /** @return array> */ + public static function hasParam(string $key): bool { + return isset(self::$params[$key]); + } + + /** @return array> */ public static function paramArray(string $key, bool $specialchars = false): array { if (empty(self::$params[$key]) || !is_array(self::$params[$key])) { return []; } - return $specialchars ? Minz_Helper::htmlspecialchars_utf8(self::$params[$key]) : self::$params[$key]; } @@ -131,7 +133,7 @@ public static function defaultControllerName(): string { public static function defaultActionName(): string { return self::$default_action_name; } - /** @return array{'c':string,'a':string,'params':array} */ + /** @return array{c:string,a:string,params:array} */ public static function currentRequest(): array { return [ 'c' => self::$controller_name, @@ -140,14 +142,14 @@ public static function currentRequest(): array { ]; } - /** @return array{'c'?:string,'a'?:string,'params'?:array} */ + /** @return array{c?:string,a?:string,params?:array} */ public static function originalRequest() { return self::$originalRequest; } /** * @param array|null $extraParams - * @return array{'c':string,'a':string,'params':array} + * @return array{c:string,a:string,params:array} */ public static function modifiedCurrentRequest(?array $extraParams = null): array { unset(self::$params['ajax']); @@ -169,14 +171,13 @@ public static function _actionName(string $action_name): void { self::$action_name = ctype_alnum($action_name) ? $action_name : ''; } - /** @param array $params */ + /** @param array $params */ public static function _params(array $params): void { self::$params = $params; } - /** @param array|mixed $value */ - public static function _param(string $key, $value = false): void { - if ($value === false) { + public static function _param(string $key, ?string $value = null): void { + if ($value === null) { unset(self::$params[$key]); } else { self::$params[$key] = $value; @@ -382,7 +383,7 @@ public static function getNotification(bool $pop = true): ?array { /** * Restart a request - * @param array{'c'?:string,'a'?:string,'params'?:array} $url an array presentation of the URL to route to + * @param array{c?:string,a?:string,params?:array} $url an array presentation of the URL to route to * @param bool $redirect If true, uses an HTTP redirection, and if false (default), performs an internal dispatcher redirection. * @throws Minz_ConfigurationException */ @@ -400,10 +401,8 @@ public static function forward($url = [], bool $redirect = false): void { } else { self::_controllerName($url['c']); self::_actionName($url['a']); - self::_params(array_merge( - self::$params, - $url['params'] - )); + $merge = array_merge(self::$params, $url['params']); + self::_params($merge); Minz_Dispatcher::reset(); } } @@ -411,7 +410,7 @@ public static function forward($url = [], bool $redirect = false): void { /** * Wrappers good notifications + redirection * @param string $msg notification content - * @param array{'c'?:string,'a'?:string,'params'?:array} $url url array to where we should be forwarded + * @param array{c?:string,a?:string,params?:array} $url url array to where we should be forwarded */ public static function good(string $msg, array $url = []): void { Minz_Request::setGoodNotification($msg); @@ -421,7 +420,7 @@ public static function good(string $msg, array $url = []): void { /** * Wrappers bad notifications + redirection * @param string $msg notification content - * @param array{'c'?:string,'a'?:string,'params'?:array} $url url array to where we should be forwarded + * @param array{c?:string,a?:string,params?:array} $url url array to where we should be forwarded */ public static function bad(string $msg, array $url = []): void { Minz_Request::setBadNotification($msg); diff --git a/lib/Minz/Url.php b/lib/Minz/Url.php index 67b927f050c..73edcf76db3 100644 --- a/lib/Minz/Url.php +++ b/lib/Minz/Url.php @@ -7,7 +7,7 @@ class Minz_Url { /** * Display a formatted URL - * @param string|array> $url The URL to format, defined as an array: + * @param string|array{c?:string,a?:string,params?:array} $url The URL to format, defined as an array: * $url['c'] = controller * $url['a'] = action * $url['params'] = array of additional parameters @@ -26,7 +26,7 @@ public static function display($url = [], string $encoding = 'html', $absolute = $url_string = ''; - if ($absolute) { + if ($absolute !== false) { $url_string = Minz_Request::getBaseUrl(); if (strlen($url_string) < strlen('http://a.bc')) { $url_string = Minz_Request::guessBaseUrl(); @@ -58,7 +58,7 @@ public static function display($url = [], string $encoding = 'html', $absolute = /** * Construit l'URI d'une URL - * @param array $url l'url sous forme de tableau + * @param array{c:string,a:string,params:array} $url URL as array definition * @param string $encodage pour indiquer comment encoder les & (& ou & pour html) * @return string uri sous la forme ?key=value&key2=value2 */ @@ -74,17 +74,19 @@ private static function printUri(array $url, string $encodage): string { } if (!empty($url['params']) && is_array($url['params']) && !empty($url['params']['#'])) { - $anchor = '#' . ($encodage === 'html' ? htmlspecialchars($url['params']['#'], ENT_QUOTES, 'UTF-8') : $url['params']['#']); + if (is_string($url['params']['#'])) { + $anchor = '#' . ($encodage === 'html' ? htmlspecialchars($url['params']['#'], ENT_QUOTES, 'UTF-8') : $url['params']['#']); + } unset($url['params']['#']); } - if (isset($url['c']) + if (isset($url['c']) && is_string($url['c']) && $url['c'] != Minz_Request::defaultControllerName()) { $uri .= $separator . 'c=' . $url['c']; $separator = $and; } - if (isset($url['a']) + if (isset($url['a']) && is_string($url['a']) && $url['a'] != Minz_Request::defaultActionName()) { $uri .= $separator . 'a=' . $url['a']; $separator = $and; @@ -94,7 +96,7 @@ private static function printUri(array $url, string $encodage): string { unset($url['params']['c']); unset($url['params']['a']); foreach ($url['params'] as $key => $param) { - if (!is_string($key) || (!is_string($param) && !is_int($param))) { + if (!is_string($key) || (!is_string($param) && !is_int($param) && !is_bool($param))) { continue; } $uri .= $separator . urlencode($key) . '=' . urlencode((string)$param); @@ -102,10 +104,6 @@ private static function printUri(array $url, string $encodage): string { } } - if (!empty($url['#']) && is_string($url['#'])) { - $uri .= '#' . ($encodage === 'html' ? htmlspecialchars($url['#'], ENT_QUOTES, 'UTF-8') : $url['#']); - } - $uri .= $anchor; return $uri; @@ -113,8 +111,8 @@ private static function printUri(array $url, string $encodage): string { /** * Check that all array elements representing the controller URL are OK - * @param array> $url controller URL as array - * @return array{'c':string,'a':string,'params':array} Verified controller URL as array + * @param array{c?:string,a?:string,params?:array} $url controller URL as array + * @return array{c:string,a:string,params:array} Verified controller URL as array */ public static function checkControllerUrl(array $url): array { return [ @@ -124,7 +122,7 @@ public static function checkControllerUrl(array $url): array { ]; } - /** @param array{'c'?:string,'a'?:string,'params'?:array} $url */ + /** @param array{c?:string,a?:string,params?:array} $url */ public static function serialize(?array $url = []): string { if (empty($url)) { return ''; @@ -136,19 +134,16 @@ public static function serialize(?array $url = []): string { } } - /** - * @phpstan-return array{'c'?:string,'a'?:string,'params'?:array} - * @return array> - */ + /** @return array{c?:string,a?:string,params?:array} */ public static function unserialize(string $url = ''): array { $result = json_decode(base64_decode($url, true) ?: '', true, JSON_THROW_ON_ERROR) ?? []; - /** @var array{'c'?:string,'a'?:string,'params'?:array} $result */ + /** @var array{c?:string,a?:string,params?:array} $result */ return $result; } /** * Returns an array representing the URL as passed in the address bar - * @return array{'c'?:string,'a'?:string,'params'?:array} URL representation + * @return array{c?:string,a?:string,params?:array} URL representation */ public static function build(): array { $url = [ @@ -184,5 +179,5 @@ function _url(string $controller, string $action, ...$args) { $params[$arg] = '' . $args[$i + 1]; } - return Minz_Url::display (array ('c' => $controller, 'a' => $action, 'params' => $params)); + return Minz_Url::display(['c' => $controller, 'a' => $action, 'params' => $params]); } diff --git a/lib/favicons.php b/lib/favicons.php index 53cc9f75925..a9ebf9f3049 100644 --- a/lib/favicons.php +++ b/lib/favicons.php @@ -75,7 +75,7 @@ function searchFavicon(string &$url): string { $links = $xpath->query('//link[@href][translate(@rel, "ABCDEFGHIJKLMNOPQRSTUVWXYZ", "abcdefghijklmnopqrstuvwxyz")="shortcut icon"' . ' or translate(@rel, "ABCDEFGHIJKLMNOPQRSTUVWXYZ", "abcdefghijklmnopqrstuvwxyz")="icon"]'); - if (!$links) { + if (!($links instanceof DOMNodeList)) { return ''; } diff --git a/lib/lib_rss.php b/lib/lib_rss.php index 6bceccc8649..ae87448419c 100644 --- a/lib/lib_rss.php +++ b/lib/lib_rss.php @@ -41,8 +41,7 @@ function str_starts_with(string $haystack, string $needle): bool { define('STDERR', fopen('php://stderr', 'w')); } function syslog(int $priority, string $message): bool { - // @phpstan-ignore booleanAnd.rightAlwaysTrue - if (COPY_SYSLOG_TO_STDERR && defined('STDERR') && STDERR) { + if (COPY_SYSLOG_TO_STDERR && defined('STDERR') && is_resource(STDERR)) { return fwrite(STDERR, $message . "\n") != false; } return false; @@ -619,9 +618,12 @@ function lazyimg(string $content): string { ) ?? ''; } +/** @return numeric-string */ function uTimeString(): string { $t = @gettimeofday(); - return $t['sec'] . str_pad('' . $t['usec'], 6, '0', STR_PAD_LEFT); + $result = $t['sec'] . str_pad('' . $t['usec'], 6, '0', STR_PAD_LEFT); + /** @var numeric-string @result */ + return $result; } function invalidateHttpCache(string $username = ''): bool { diff --git a/p/api/fever.php b/p/api/fever.php index 9f4766c9e5f..ec5af189f51 100644 --- a/p/api/fever.php +++ b/p/api/fever.php @@ -407,7 +407,7 @@ private function getLinks(): array { } /** - * @param array $ids + * @param array $ids */ private function entriesToIdList(array $ids = []): string { return implode(',', array_values($ids)); @@ -424,6 +424,7 @@ private function getSavedItemIds(): string { } /** + * @param numeric-string $id * @return int|false */ private function setItemAsRead(string $id) { @@ -431,6 +432,7 @@ private function setItemAsRead(string $id) { } /** + * @param numeric-string $id * @return int|false */ private function setItemAsUnread(string $id) { @@ -438,6 +440,7 @@ private function setItemAsUnread(string $id) { } /** + * @param numeric-string $id * @return int|false */ private function setItemAsSaved(string $id) { @@ -445,6 +448,7 @@ private function setItemAsSaved(string $id) { } /** + * @param numeric-string $id * @return int|false */ private function setItemAsUnsaved(string $id) { @@ -527,6 +531,7 @@ private function getItems(): array { /** * TODO replace by a dynamic fetch for id <= $before timestamp + * @return numeric-string */ private function convertBeforeToId(int $beforeTimestamp): string { return $beforeTimestamp == 0 ? '0' : $beforeTimestamp . '000000'; diff --git a/p/api/greader.php b/p/api/greader.php index fe6327cb054..71cf408849c 100644 --- a/p/api/greader.php +++ b/p/api/greader.php @@ -31,11 +31,15 @@ $ORIGINAL_INPUT = file_get_contents('php://input', false, null, 0, 1048576) ?: ''; if (PHP_INT_SIZE < 8) { //32-bit + /** @return numeric-string */ function hex2dec(string $hex): string { if (!ctype_xdigit($hex)) return '0'; - return gmp_strval(gmp_init($hex, 16), 10); + $result = gmp_strval(gmp_init($hex, 16), 10); + /** @var numeric-string $result */ + return $result; } } else { //64-bit + /** @return numeric-string */ function hex2dec(string $hex): string { if (!ctype_xdigit($hex)) { return '0'; @@ -794,6 +798,7 @@ private static function streamContentsItems(array $e_ids, string $order) { $e_ids[$i] = hex2dec(basename($e_id)); //Strip prefix 'tag:google.com,2005:reader/item/' } } + /** @var array $e_ids */ $entryDAO = FreshRSS_Factory::createEntryDao(); $entries = $entryDAO->listByIds($e_ids, $order === 'o' ? 'ASC' : 'DESC'); @@ -822,6 +827,7 @@ private static function editTag(array $e_ids, string $a, string $r): void { $e_ids[$i] = hex2dec(basename($e_id)); //Strip prefix 'tag:google.com,2005:reader/item/' } } + /** @var array $e_ids */ $entryDAO = FreshRSS_Factory::createEntryDao(); $tagDAO = FreshRSS_Factory::createTagDao(); @@ -943,7 +949,10 @@ private static function disableTag(string $s) { self::badRequest(); } - /** @return never */ + /** + * @param numeric-string $olderThanId + * @return never + */ private static function markAllAsRead(string $streamId, string $olderThanId) { $entryDAO = FreshRSS_Factory::createEntryDao(); if (strpos($streamId, 'feed/') === 0) { diff --git a/p/api/pshb.php b/p/api/pshb.php index 18aa0ebbfa8..9f5b4822c6d 100644 --- a/p/api/pshb.php +++ b/p/api/pshb.php @@ -67,7 +67,7 @@ } if (!empty($_REQUEST['hub_mode']) && $_REQUEST['hub_mode'] === 'subscribe') { - $leaseSeconds = empty($_REQUEST['hub_lease_seconds']) ? 0 : (int) $_REQUEST['hub_lease_seconds']; + $leaseSeconds = empty($_REQUEST['hub_lease_seconds']) ? 0 : (int)$_REQUEST['hub_lease_seconds']; if ($leaseSeconds > 60) { $hubJson['lease_end'] = time() + $leaseSeconds; } else { diff --git a/p/api/query.php b/p/api/query.php index 20a2d8cdc61..c95a2bf4363 100644 --- a/p/api/query.php +++ b/p/api/query.php @@ -82,7 +82,7 @@ if (Minz_Request::paramString('order') === '') { Minz_Request::_param('order', $query->getOrder()); } - Minz_Request::_param('state', $query->getState()); + Minz_Request::_param('state', (string)$query->getState()); $search = $query->getSearch()->getRawInput(); // Note: we disallow references to user queries in public user search to avoid sniffing internal user queries diff --git a/phpstan-next.neon b/phpstan-next.neon index 0cc7f5eacc8..aa8dc678ab1 100644 --- a/phpstan-next.neon +++ b/phpstan-next.neon @@ -2,17 +2,40 @@ includes: - phpstan.neon parameters: - level: 9 + strictRules: + booleansInConditions: true + ignoreErrors: + - '#Only booleans are allowed in (a negated boolean|a ternary operator condition|an elseif condition|an if condition|&&|\|\|), (bool|false|int(<[0-9, max]+>)?|true|null|\|)+ given.*#' excludePaths: analyse: # TODO: Update files below and remove them from this list - - app/Controllers/configureController.php + - app/Controllers/feedController.php - app/Controllers/importExportController.php - - app/Models/DatabaseDAO.php + - app/Controllers/subscriptionController.php + - app/Controllers/tagController.php + - app/FreshRSS.php + - app/Models/CategoryDAO.php + - app/Models/CategoryDAOSQLite.php + - app/Models/DatabaseDAOSQLite.php - app/Models/Entry.php + - app/Models/EntryDAO.php + - app/Models/EntryDAOSQLite.php - app/Models/Feed.php + - app/Models/FeedDAO.php + - app/Models/FeedDAOSQLite.php + - app/Models/FormAuth.php + - app/Models/LogDAO.php + - app/Models/TagDAO.php + - app/Models/Themes.php + - app/Services/ExportService.php - app/Services/ImportService.php - app/views/configure/archiving.phtml - - app/views/helpers/feed/update.phtml - - lib/Minz/Helper.php - - lib/Minz/Request.php + - app/views/configure/queries.phtml + - app/views/configure/query.phtml + - app/views/helpers/stream-footer.phtml + - app/views/stats/repartition.phtml + - app/views/subscription/feed.phtml + - cli/CliOptionsParser.php + - cli/create-user.php + - cli/update-user.php + - lib/lib_rss.php diff --git a/phpstan.neon b/phpstan.neon index 3097afd9c1c..640e4d9f9b2 100644 --- a/phpstan.neon +++ b/phpstan.neon @@ -1,6 +1,5 @@ parameters: - # TODO: Increase rule-level https://phpstan.org/user-guide/rule-levels - level: 8 + level: 9 # https://phpstan.org/user-guide/rule-levels phpVersion: 80399 # TODO: Remove line when moving composer.json to PHP 8+ fileExtensions: - php diff --git a/tests/app/Models/SearchTest.php b/tests/app/Models/SearchTest.php index e2dba31a183..e4457fedcca 100644 --- a/tests/app/Models/SearchTest.php +++ b/tests/app/Models/SearchTest.php @@ -332,6 +332,11 @@ public function provideParentheses(): array { '(e.title LIKE ? )', ['%(test)%'], ], + [ + 'intitle:\'"hello world"\'', + '(e.title LIKE ? )', + ['%"hello world"%'], + ], ]; } } From 493d46759eda507190b11206f6c3d668edbd9b40 Mon Sep 17 00:00:00 2001 From: maTh <1645099+math-GH@users.noreply.github.com> Date: Mon, 10 Jun 2024 19:43:48 +0200 Subject: [PATCH 1180/2479] fix broken sharing services (part 2): delete Blogotext (#6225) --- app/i18n/cs/conf.php | 1 - app/i18n/cs/gen.php | 1 - app/i18n/de/conf.php | 1 - app/i18n/de/gen.php | 1 - app/i18n/el/conf.php | 1 - app/i18n/el/gen.php | 1 - app/i18n/en-us/conf.php | 1 - app/i18n/en-us/gen.php | 1 - app/i18n/en/conf.php | 1 - app/i18n/en/gen.php | 1 - app/i18n/es/conf.php | 1 - app/i18n/es/gen.php | 1 - app/i18n/fa/conf.php | 1 - app/i18n/fa/gen.php | 1 - app/i18n/fr/conf.php | 1 - app/i18n/fr/gen.php | 1 - app/i18n/he/conf.php | 1 - app/i18n/he/gen.php | 1 - app/i18n/hu/conf.php | 1 - app/i18n/hu/gen.php | 1 - app/i18n/id/conf.php | 1 - app/i18n/id/gen.php | 1 - app/i18n/it/conf.php | 1 - app/i18n/it/gen.php | 1 - app/i18n/ja/conf.php | 1 - app/i18n/ja/gen.php | 1 - app/i18n/ko/conf.php | 1 - app/i18n/ko/gen.php | 1 - app/i18n/lv/conf.php | 1 - app/i18n/lv/gen.php | 1 - app/i18n/nl/conf.php | 1 - app/i18n/nl/gen.php | 1 - app/i18n/oc/conf.php | 1 - app/i18n/oc/gen.php | 1 - app/i18n/pl/conf.php | 1 - app/i18n/pl/gen.php | 1 - app/i18n/pt-br/conf.php | 1 - app/i18n/pt-br/gen.php | 1 - app/i18n/ru/conf.php | 1 - app/i18n/ru/gen.php | 1 - app/i18n/sk/conf.php | 1 - app/i18n/sk/gen.php | 1 - app/i18n/tr/conf.php | 1 - app/i18n/tr/gen.php | 1 - app/i18n/zh-cn/conf.php | 1 - app/i18n/zh-cn/gen.php | 1 - app/i18n/zh-tw/conf.php | 1 - app/i18n/zh-tw/gen.php | 1 - app/shares.php | 8 -------- docs/en/users/08_sharing_services.md | 1 - 50 files changed, 57 deletions(-) diff --git a/app/i18n/cs/conf.php b/app/i18n/cs/conf.php index 489d82a93d9..f432360208d 100644 --- a/app/i18n/cs/conf.php +++ b/app/i18n/cs/conf.php @@ -257,7 +257,6 @@ 'sharing' => array( '_' => 'Sdílení', 'add' => 'Přidat metodu sdílení', - 'blogotext' => 'Blogotext', // IGNORE 'deprecated' => 'Tato služba je zastaralá a bude ze služby FreshRSS odstraněna v budoucím vydání.', 'diaspora' => 'Diaspora*', // IGNORE 'email' => 'E-mail', diff --git a/app/i18n/cs/gen.php b/app/i18n/cs/gen.php index b13f8d537d5..5cb56829c3c 100644 --- a/app/i18n/cs/gen.php +++ b/app/i18n/cs/gen.php @@ -203,7 +203,6 @@ 'Known' => 'Známé základní stránky', 'archiveORG' => 'archive.org', // IGNORE 'archivePH' => 'archive.ph', // IGNORE - 'blogotext' => 'Blogotext', // IGNORE 'buffer' => 'Buffer', // IGNORE 'clipboard' => 'Schránka', 'diaspora' => 'Diaspora*', // IGNORE diff --git a/app/i18n/de/conf.php b/app/i18n/de/conf.php index 91963fa3cac..9da725499df 100644 --- a/app/i18n/de/conf.php +++ b/app/i18n/de/conf.php @@ -257,7 +257,6 @@ 'sharing' => array( '_' => 'Teilen', 'add' => 'Füge eine Teilen-Dienst hinzu', - 'blogotext' => 'Blogotext', // IGNORE 'deprecated' => 'Dieser Dienst ist veraltet und wir in einer zukünftigen FreshRSS-Version entfernt.', 'diaspora' => 'Diaspora*', // IGNORE 'email' => 'E-Mail', diff --git a/app/i18n/de/gen.php b/app/i18n/de/gen.php index 4785cb7b4fa..8cb974039c4 100644 --- a/app/i18n/de/gen.php +++ b/app/i18n/de/gen.php @@ -203,7 +203,6 @@ 'Known' => 'Known-Seite (https://withknown.com)', 'archiveORG' => 'archive.org', // IGNORE 'archivePH' => 'archive.ph', // IGNORE - 'blogotext' => 'Blogotext', // IGNORE 'buffer' => 'Buffer', // IGNORE 'clipboard' => 'Zwischenablage', 'diaspora' => 'Diaspora*', // IGNORE diff --git a/app/i18n/el/conf.php b/app/i18n/el/conf.php index c97aa291c48..cae8efe15dd 100644 --- a/app/i18n/el/conf.php +++ b/app/i18n/el/conf.php @@ -257,7 +257,6 @@ 'sharing' => array( '_' => 'Sharing', // TODO 'add' => 'Add a sharing method', // TODO - 'blogotext' => 'Blogotext', // TODO 'deprecated' => 'This service is deprecated and will be removed from FreshRSS in a future release.', // TODO 'diaspora' => 'Diaspora*', // TODO 'email' => 'Email', // TODO diff --git a/app/i18n/el/gen.php b/app/i18n/el/gen.php index 309dad62c5a..99abffc888e 100644 --- a/app/i18n/el/gen.php +++ b/app/i18n/el/gen.php @@ -203,7 +203,6 @@ 'Known' => 'Known based sites', // TODO 'archiveORG' => 'archive.org', // IGNORE 'archivePH' => 'archive.ph', // TODO - 'blogotext' => 'Blogotext', // TODO 'buffer' => 'Buffer', // IGNORE 'clipboard' => 'Clipboard', // TODO 'diaspora' => 'Diaspora*', // TODO diff --git a/app/i18n/en-us/conf.php b/app/i18n/en-us/conf.php index 33a67cb3f96..d0f7c4f8e40 100644 --- a/app/i18n/en-us/conf.php +++ b/app/i18n/en-us/conf.php @@ -257,7 +257,6 @@ 'sharing' => array( '_' => 'Sharing', // IGNORE 'add' => 'Add a sharing method', // IGNORE - 'blogotext' => 'Blogotext', // IGNORE 'deprecated' => 'This service is deprecated and will be removed from FreshRSS in a future release.', // IGNORE 'diaspora' => 'Diaspora*', // IGNORE 'email' => 'Email', // IGNORE diff --git a/app/i18n/en-us/gen.php b/app/i18n/en-us/gen.php index 3c1bab41385..cad075f548b 100644 --- a/app/i18n/en-us/gen.php +++ b/app/i18n/en-us/gen.php @@ -203,7 +203,6 @@ 'Known' => 'Known based sites', // IGNORE 'archiveORG' => 'archive.org', // IGNORE 'archivePH' => 'archive.ph', // IGNORE - 'blogotext' => 'Blogotext', // IGNORE 'buffer' => 'Buffer', // IGNORE 'clipboard' => 'Clipboard', // IGNORE 'diaspora' => 'Diaspora*', // IGNORE diff --git a/app/i18n/en/conf.php b/app/i18n/en/conf.php index 83189a10a59..5b3b93fcbfe 100644 --- a/app/i18n/en/conf.php +++ b/app/i18n/en/conf.php @@ -257,7 +257,6 @@ 'sharing' => array( '_' => 'Sharing', 'add' => 'Add a sharing method', - 'blogotext' => 'Blogotext', 'deprecated' => 'This service is deprecated and will be removed from FreshRSS in a future release.', 'diaspora' => 'Diaspora*', 'email' => 'Email', diff --git a/app/i18n/en/gen.php b/app/i18n/en/gen.php index 0dcd5cb53f5..641569c23ef 100644 --- a/app/i18n/en/gen.php +++ b/app/i18n/en/gen.php @@ -203,7 +203,6 @@ 'Known' => 'Known based sites', 'archiveORG' => 'archive.org', 'archivePH' => 'archive.ph', - 'blogotext' => 'Blogotext', 'buffer' => 'Buffer', 'clipboard' => 'Clipboard', 'diaspora' => 'Diaspora*', diff --git a/app/i18n/es/conf.php b/app/i18n/es/conf.php index 4fadb8be7f3..6aa11b0c760 100644 --- a/app/i18n/es/conf.php +++ b/app/i18n/es/conf.php @@ -257,7 +257,6 @@ 'sharing' => array( '_' => 'Compartir', 'add' => 'Agregar un método de uso compartido', - 'blogotext' => 'Blogotext', // IGNORE 'deprecated' => 'Este servicio está obsoleto y será removido de FreshRSS en unfuturo lanzamiento.', 'diaspora' => 'Diaspora*', // IGNORE 'email' => 'Correo electrónico', diff --git a/app/i18n/es/gen.php b/app/i18n/es/gen.php index 35f6f72b10e..0db02de3736 100644 --- a/app/i18n/es/gen.php +++ b/app/i18n/es/gen.php @@ -203,7 +203,6 @@ 'Known' => 'Sitios basados en conocidos', 'archiveORG' => 'archive.org', // IGNORE 'archivePH' => 'archive.ph', // IGNORE - 'blogotext' => 'Blogotext', // IGNORE 'buffer' => 'Buffer', // IGNORE 'clipboard' => 'Portapapeles', 'diaspora' => 'Diaspora*', // IGNORE diff --git a/app/i18n/fa/conf.php b/app/i18n/fa/conf.php index f2b940cba42..63b6ecd1f3a 100644 --- a/app/i18n/fa/conf.php +++ b/app/i18n/fa/conf.php @@ -257,7 +257,6 @@ 'sharing' => array( '_' => ' اشتراک گذاری', 'add' => ' یک روش اشتراک گذاری اضافه کنید', - 'blogotext' => ' وبلاگ متن', 'deprecated' => ' این سرویس منسوخ شده است و در نسخه آینده.', 'diaspora' => ' دیاسپورا*', 'email' => ' ایمیل', diff --git a/app/i18n/fa/gen.php b/app/i18n/fa/gen.php index b379b91bb31..b92fd8e0b88 100644 --- a/app/i18n/fa/gen.php +++ b/app/i18n/fa/gen.php @@ -203,7 +203,6 @@ 'Known' => ' سایت های مبتنی بر شناخته شده', 'archiveORG' => ' archive.org', 'archivePH' => ' archive.ph', - 'blogotext' => ' وبلاگ متن', 'buffer' => ' بافر', 'clipboard' => ' کلیپ بورد', 'diaspora' => ' دیاسپورا*', diff --git a/app/i18n/fr/conf.php b/app/i18n/fr/conf.php index 925fa878266..325752dc7c4 100644 --- a/app/i18n/fr/conf.php +++ b/app/i18n/fr/conf.php @@ -257,7 +257,6 @@ 'sharing' => array( '_' => 'Partage', 'add' => 'Ajouter une méthode de partage', - 'blogotext' => 'Blogotext', // IGNORE 'deprecated' => 'Ce service est obsolète et sera supprimé dans une prochaine version de FreshRSS.', 'diaspora' => 'Diaspora*', // IGNORE 'email' => 'Courriel', diff --git a/app/i18n/fr/gen.php b/app/i18n/fr/gen.php index 6d000f0374d..e2d9c4dd868 100644 --- a/app/i18n/fr/gen.php +++ b/app/i18n/fr/gen.php @@ -203,7 +203,6 @@ 'Known' => 'Sites basés sur Known', 'archiveORG' => 'archive.org', // IGNORE 'archivePH' => 'archive.ph', // IGNORE - 'blogotext' => 'Blogotext', // IGNORE 'buffer' => 'Buffer', // IGNORE 'clipboard' => 'Presse-papier', 'diaspora' => 'Diaspora*', // IGNORE diff --git a/app/i18n/he/conf.php b/app/i18n/he/conf.php index 68de3fdfacc..d00c8ad2c12 100644 --- a/app/i18n/he/conf.php +++ b/app/i18n/he/conf.php @@ -257,7 +257,6 @@ 'sharing' => array( '_' => 'שיתוף', 'add' => 'Add a sharing method', // TODO - 'blogotext' => 'Blogotext', // IGNORE 'deprecated' => 'This service is deprecated and will be removed from FreshRSS in a future release.', // TODO 'diaspora' => 'Diaspora*', // IGNORE 'email' => 'דואר אלקטרוני', diff --git a/app/i18n/he/gen.php b/app/i18n/he/gen.php index 7286e1eb982..12f5b17c24a 100644 --- a/app/i18n/he/gen.php +++ b/app/i18n/he/gen.php @@ -203,7 +203,6 @@ 'Known' => 'Known based sites', // TODO 'archiveORG' => 'archive.org', // IGNORE 'archivePH' => 'archive.ph', // IGNORE - 'blogotext' => 'Blogotext', // IGNORE 'buffer' => 'Buffer', // IGNORE 'clipboard' => 'Clipboard', // TODO 'diaspora' => 'Diaspora*', // IGNORE diff --git a/app/i18n/hu/conf.php b/app/i18n/hu/conf.php index 641f408b89c..ae3c164fd44 100644 --- a/app/i18n/hu/conf.php +++ b/app/i18n/hu/conf.php @@ -257,7 +257,6 @@ 'sharing' => array( '_' => 'Megosztás', 'add' => 'Megosztási mód hozzáadása', - 'blogotext' => 'Blogotext', // IGNORE 'deprecated' => 'Ez a szolgáltatás elavult, és el lesz távolítva a FreshRSS következő kiadásában..', 'diaspora' => 'Diaspora*', // IGNORE 'email' => 'Email', // IGNORE diff --git a/app/i18n/hu/gen.php b/app/i18n/hu/gen.php index d7dee4384af..9862833c0be 100644 --- a/app/i18n/hu/gen.php +++ b/app/i18n/hu/gen.php @@ -203,7 +203,6 @@ 'Known' => 'Ismert weboldalak', 'archiveORG' => 'archive.org', // IGNORE 'archivePH' => 'archive.ph', // IGNORE - 'blogotext' => 'Blogotext', // IGNORE 'buffer' => 'Buffer', // IGNORE 'clipboard' => 'Clipboard', // IGNORE 'diaspora' => 'Diaspora*', // IGNORE diff --git a/app/i18n/id/conf.php b/app/i18n/id/conf.php index 14a5a1a17bd..21f14d42333 100644 --- a/app/i18n/id/conf.php +++ b/app/i18n/id/conf.php @@ -257,7 +257,6 @@ 'sharing' => array( '_' => 'Sharing', // TODO 'add' => 'Add a sharing method', // TODO - 'blogotext' => 'Blogotext', // IGNORE 'deprecated' => 'This service is deprecated and will be removed from FreshRSS in a future release.', // TODO 'diaspora' => 'Diaspora*', // IGNORE 'email' => 'Email', // TODO diff --git a/app/i18n/id/gen.php b/app/i18n/id/gen.php index 020498a9e71..2d7334b3721 100644 --- a/app/i18n/id/gen.php +++ b/app/i18n/id/gen.php @@ -203,7 +203,6 @@ 'Known' => 'Known based sites', // TODO 'archiveORG' => 'archive.org', // IGNORE 'archivePH' => 'archive.ph', // TODO - 'blogotext' => 'Blogotext', // TODO 'buffer' => 'Buffer', // IGNORE 'clipboard' => 'Clipboard', // TODO 'diaspora' => 'Diaspora*', // TODO diff --git a/app/i18n/it/conf.php b/app/i18n/it/conf.php index 0f7785924bb..d042b8f09e7 100644 --- a/app/i18n/it/conf.php +++ b/app/i18n/it/conf.php @@ -257,7 +257,6 @@ 'sharing' => array( '_' => 'Condivisione', 'add' => 'Aggiungi un metodo di condivisione', - 'blogotext' => 'Blogotext', // IGNORE 'deprecated' => 'Questo servizio è deprecato e sarà rimosso da FreshRSS in una release successiva.', 'diaspora' => 'Diaspora*', // IGNORE 'email' => 'Email', // IGNORE diff --git a/app/i18n/it/gen.php b/app/i18n/it/gen.php index 5bd1f784199..bc9a7f04df4 100644 --- a/app/i18n/it/gen.php +++ b/app/i18n/it/gen.php @@ -203,7 +203,6 @@ 'Known' => 'Siti basati su Known', 'archiveORG' => 'archive.org', // IGNORE 'archivePH' => 'archive.ph', // IGNORE - 'blogotext' => 'Blogotext', // IGNORE 'buffer' => 'Buffer', // IGNORE 'clipboard' => 'Appunti', 'diaspora' => 'Diaspora*', // IGNORE diff --git a/app/i18n/ja/conf.php b/app/i18n/ja/conf.php index b3fcae76bdf..3b3a91746c6 100644 --- a/app/i18n/ja/conf.php +++ b/app/i18n/ja/conf.php @@ -257,7 +257,6 @@ 'sharing' => array( '_' => '共有', 'add' => '共有方法を追加する', - 'blogotext' => 'Blogotext', // IGNORE 'deprecated' => 'このサービスは非推奨でFreshRSSから削除される予定ですfuture release.', 'diaspora' => 'Diaspora*', // IGNORE 'email' => 'Eメール', diff --git a/app/i18n/ja/gen.php b/app/i18n/ja/gen.php index 7b37803037c..2ba669304ff 100644 --- a/app/i18n/ja/gen.php +++ b/app/i18n/ja/gen.php @@ -203,7 +203,6 @@ 'Known' => 'よく使われるサイト', 'archiveORG' => 'archive.org', // IGNORE 'archivePH' => 'archive.ph', // IGNORE - 'blogotext' => 'Blogotext', // IGNORE 'buffer' => 'Buffer', // IGNORE 'clipboard' => 'クリップボード', 'diaspora' => 'Diaspora*', // IGNORE diff --git a/app/i18n/ko/conf.php b/app/i18n/ko/conf.php index 5b68c827f1e..9223863baa4 100644 --- a/app/i18n/ko/conf.php +++ b/app/i18n/ko/conf.php @@ -257,7 +257,6 @@ 'sharing' => array( '_' => '공유', 'add' => '공유 방법 추가', - 'blogotext' => 'Blogotext', // IGNORE 'deprecated' => '이 서비스는 더 이상 사용되지 않으며 추후 릴리즈 FreshRSS에서 삭제 될 것 입니다.', 'diaspora' => 'Diaspora*', // IGNORE 'email' => '메일', diff --git a/app/i18n/ko/gen.php b/app/i18n/ko/gen.php index 72592790ad4..8ef6fcf87c3 100644 --- a/app/i18n/ko/gen.php +++ b/app/i18n/ko/gen.php @@ -203,7 +203,6 @@ 'Known' => 'Known based sites', // IGNORE 'archiveORG' => 'archive.org', // IGNORE 'archivePH' => 'archive.ph', // IGNORE - 'blogotext' => 'Blogotext', // IGNORE 'buffer' => 'Buffer', // IGNORE 'clipboard' => '클립보드', 'diaspora' => 'Diaspora*', // IGNORE diff --git a/app/i18n/lv/conf.php b/app/i18n/lv/conf.php index 9e8aad46861..90a425eebe2 100644 --- a/app/i18n/lv/conf.php +++ b/app/i18n/lv/conf.php @@ -257,7 +257,6 @@ 'sharing' => array( '_' => 'Dalīšanās', 'add' => 'Pievienojat dalīšanās metodi', - 'blogotext' => 'Blogotext', // IGNORE 'deprecated' => 'Šis pakalpojums ir novecojis un tiks noņemts no FreshRSS kādā nākamajā versijā.', 'diaspora' => 'Diaspora*', // IGNORE 'email' => 'E-pasts', diff --git a/app/i18n/lv/gen.php b/app/i18n/lv/gen.php index 7456a13b5cf..fbf434f20b6 100644 --- a/app/i18n/lv/gen.php +++ b/app/i18n/lv/gen.php @@ -203,7 +203,6 @@ 'Known' => 'Zināmas vietnes', 'archiveORG' => 'archive.org', // IGNORE 'archivePH' => 'archive.ph', // IGNORE - 'blogotext' => 'Blogotext', // IGNORE 'buffer' => 'Buffer', // IGNORE 'clipboard' => 'Starpliktuve', 'diaspora' => 'Diaspora*', // IGNORE diff --git a/app/i18n/nl/conf.php b/app/i18n/nl/conf.php index 31068f6ff1e..83f0ea6ba19 100644 --- a/app/i18n/nl/conf.php +++ b/app/i18n/nl/conf.php @@ -257,7 +257,6 @@ 'sharing' => array( '_' => 'Delen', 'add' => 'Deelmethode toevoegen', - 'blogotext' => 'Blogotext', // IGNORE 'deprecated' => 'Deze dienst is afgeschreven en zal uit FreshRSS worden verwijderd in een toekomstige versie.', 'diaspora' => 'Diaspora*', // IGNORE 'email' => 'Email', // IGNORE diff --git a/app/i18n/nl/gen.php b/app/i18n/nl/gen.php index 719f528e98d..f3601f445e0 100644 --- a/app/i18n/nl/gen.php +++ b/app/i18n/nl/gen.php @@ -203,7 +203,6 @@ 'Known' => 'Known-gebaseerde sites', 'archiveORG' => 'archive.org', // IGNORE 'archivePH' => 'archive.ph', // IGNORE - 'blogotext' => 'Blogotext', // IGNORE 'buffer' => 'Buffer', // IGNORE 'clipboard' => 'Klembord', 'diaspora' => 'Diaspora*', // IGNORE diff --git a/app/i18n/oc/conf.php b/app/i18n/oc/conf.php index 17b28ccba9e..f803ab7bf5d 100644 --- a/app/i18n/oc/conf.php +++ b/app/i18n/oc/conf.php @@ -257,7 +257,6 @@ 'sharing' => array( '_' => 'Partatge', 'add' => 'Ajustar un metòde de partatge', - 'blogotext' => 'Blogotext', // IGNORE 'deprecated' => 'Aqueste servici es obsolèt e serà tirat de la futura version de FreshRSS.', 'diaspora' => 'Diaspora*', // IGNORE 'email' => 'Corrièl', diff --git a/app/i18n/oc/gen.php b/app/i18n/oc/gen.php index e5232a48ce4..d00c250e36a 100644 --- a/app/i18n/oc/gen.php +++ b/app/i18n/oc/gen.php @@ -203,7 +203,6 @@ 'Known' => 'Sites basats sus Known', 'archiveORG' => 'archive.org', // IGNORE 'archivePH' => 'archive.ph', // IGNORE - 'blogotext' => 'Blogotext', // IGNORE 'buffer' => 'Buffer', // IGNORE 'clipboard' => 'Quicha-papiers.', 'diaspora' => 'Diaspora*', // IGNORE diff --git a/app/i18n/pl/conf.php b/app/i18n/pl/conf.php index c48d76d1496..875f21a45b0 100644 --- a/app/i18n/pl/conf.php +++ b/app/i18n/pl/conf.php @@ -257,7 +257,6 @@ 'sharing' => array( '_' => 'Podawanie dalej', 'add' => 'Dodaj sposób na podanie dalej wiadomości', - 'blogotext' => 'Blogotext', // IGNORE 'deprecated' => 'Ta usługa jest przestarzała i zostanie usunięta w przyszłych wydaniach FreshRSS.', 'diaspora' => 'Diaspora*', // IGNORE 'email' => 'E-mail', diff --git a/app/i18n/pl/gen.php b/app/i18n/pl/gen.php index 3402e111c3e..978b1e211c6 100644 --- a/app/i18n/pl/gen.php +++ b/app/i18n/pl/gen.php @@ -203,7 +203,6 @@ 'Known' => 'Strony bazujące na usłudze Known', 'archiveORG' => 'archive.org', // IGNORE 'archivePH' => 'archive.ph', // IGNORE - 'blogotext' => 'Blogotext', // IGNORE 'buffer' => 'Buffer', // IGNORE 'clipboard' => 'Schowek', 'diaspora' => 'Diaspora*', // IGNORE diff --git a/app/i18n/pt-br/conf.php b/app/i18n/pt-br/conf.php index 1570264482a..d7353c1d2ec 100644 --- a/app/i18n/pt-br/conf.php +++ b/app/i18n/pt-br/conf.php @@ -257,7 +257,6 @@ 'sharing' => array( '_' => 'Compartilhando', 'add' => 'Adicionar um método de compartilhamento', - 'blogotext' => 'Blogotext', // IGNORE 'deprecated' => 'Este serviço está obceloeto e será removido do FreshRSS em versões futuras.', 'diaspora' => 'Diaspora*', // IGNORE 'email' => 'E-mail', diff --git a/app/i18n/pt-br/gen.php b/app/i18n/pt-br/gen.php index a35fb97e802..c9f1b669919 100644 --- a/app/i18n/pt-br/gen.php +++ b/app/i18n/pt-br/gen.php @@ -203,7 +203,6 @@ 'Known' => 'Sites no Known', 'archiveORG' => 'archive.org', // IGNORE 'archivePH' => 'archive.ph', // IGNORE - 'blogotext' => 'Blogotext', // IGNORE 'buffer' => 'Buffer', // IGNORE 'clipboard' => 'Área de transferência', 'diaspora' => 'Diaspora*', // IGNORE diff --git a/app/i18n/ru/conf.php b/app/i18n/ru/conf.php index 6b902353023..e71d43c2059 100644 --- a/app/i18n/ru/conf.php +++ b/app/i18n/ru/conf.php @@ -257,7 +257,6 @@ 'sharing' => array( '_' => 'Обмен', 'add' => 'Добавить способ обмена', - 'blogotext' => 'Blogotext', // IGNORE 'deprecated' => 'Этот сервис устарел и будет удалён из FreshRSS в будущем релизе.', 'diaspora' => 'Diaspora*', // IGNORE 'email' => 'Электронная почта', diff --git a/app/i18n/ru/gen.php b/app/i18n/ru/gen.php index 76a111f92d9..259131d9476 100644 --- a/app/i18n/ru/gen.php +++ b/app/i18n/ru/gen.php @@ -203,7 +203,6 @@ 'Known' => 'Сайты на Known', 'archiveORG' => 'archive.org', // IGNORE 'archivePH' => 'archive.ph', // IGNORE - 'blogotext' => 'Blogotext', // IGNORE 'buffer' => 'Buffer', // IGNORE 'clipboard' => 'Буфер обмена', 'diaspora' => 'Diaspora*', // IGNORE diff --git a/app/i18n/sk/conf.php b/app/i18n/sk/conf.php index f817a23633b..dafb1bfe9a0 100644 --- a/app/i18n/sk/conf.php +++ b/app/i18n/sk/conf.php @@ -257,7 +257,6 @@ 'sharing' => array( '_' => 'Zdieľanie', 'add' => 'Pridať spôsob zdieľania', - 'blogotext' => 'Blogotext', // IGNORE 'deprecated' => 'Táto služba nie je podporovaná a bude z FreshRSS odstránená v budúcich verziách.', 'diaspora' => 'Diaspora*', // IGNORE 'email' => 'E-mail', // IGNORE diff --git a/app/i18n/sk/gen.php b/app/i18n/sk/gen.php index 9624a40048c..4945ace5d0d 100644 --- a/app/i18n/sk/gen.php +++ b/app/i18n/sk/gen.php @@ -203,7 +203,6 @@ 'Known' => 'Stránky založené na Known', 'archiveORG' => 'archive.org', // IGNORE 'archivePH' => 'archive.ph', // IGNORE - 'blogotext' => 'Blogotext', // IGNORE 'buffer' => 'Buffer', // IGNORE 'clipboard' => 'Schránka', 'diaspora' => 'Diaspora*', // IGNORE diff --git a/app/i18n/tr/conf.php b/app/i18n/tr/conf.php index 85a82684fee..2ef8486bf7e 100644 --- a/app/i18n/tr/conf.php +++ b/app/i18n/tr/conf.php @@ -257,7 +257,6 @@ 'sharing' => array( '_' => 'Paylaşım', 'add' => 'Bir paylaşım türü ekle', - 'blogotext' => 'Blogotext', // IGNORE 'deprecated' => 'Bu servis kullanımdan kaldırılmıştır ve gelecekteki bir FreshRSS dağıtımında kaldırılacaktır. Daha fazla bilgi için buraya tıklayın.', 'diaspora' => 'Diaspora*', // IGNORE 'email' => 'Email', // IGNORE diff --git a/app/i18n/tr/gen.php b/app/i18n/tr/gen.php index f2a5db54f66..e3c83afb071 100644 --- a/app/i18n/tr/gen.php +++ b/app/i18n/tr/gen.php @@ -203,7 +203,6 @@ 'Known' => 'Bilinen siteler', 'archiveORG' => 'archive.org', // IGNORE 'archivePH' => 'archive.ph', // IGNORE - 'blogotext' => 'Blogotext', // IGNORE 'buffer' => 'Buffer', // IGNORE 'clipboard' => 'Kopyala', 'diaspora' => 'Diaspora*', // IGNORE diff --git a/app/i18n/zh-cn/conf.php b/app/i18n/zh-cn/conf.php index 3e85f9033af..c92239e8d60 100644 --- a/app/i18n/zh-cn/conf.php +++ b/app/i18n/zh-cn/conf.php @@ -257,7 +257,6 @@ 'sharing' => array( '_' => '分享', 'add' => '添加分享方式', - 'blogotext' => 'Blogotext', // IGNORE 'deprecated' => '此功能已被废弃并会在未来的 FreshRSS 版本中移除,详情见 说明文档.', 'diaspora' => 'Diaspora*', // IGNORE 'email' => 'Email', // IGNORE diff --git a/app/i18n/zh-cn/gen.php b/app/i18n/zh-cn/gen.php index daa077ff748..2845dedfc37 100644 --- a/app/i18n/zh-cn/gen.php +++ b/app/i18n/zh-cn/gen.php @@ -203,7 +203,6 @@ 'Known' => '基于 Known 的站点', 'archiveORG' => 'archive.org', // IGNORE 'archivePH' => 'archive.ph', // IGNORE - 'blogotext' => 'Blogotext', // IGNORE 'buffer' => 'Buffer', // IGNORE 'clipboard' => '剪贴板', 'diaspora' => 'Diaspora*', // IGNORE diff --git a/app/i18n/zh-tw/conf.php b/app/i18n/zh-tw/conf.php index 18c8e9279c2..2598d97a1c2 100644 --- a/app/i18n/zh-tw/conf.php +++ b/app/i18n/zh-tw/conf.php @@ -257,7 +257,6 @@ 'sharing' => array( '_' => '分享', 'add' => '新增分享方式', - 'blogotext' => 'Blogotext', // IGNORE 'deprecated' => '這項功能已廢棄並在將來版本的 FreshRSS 中移除,詳情請見 說明文檔.', 'diaspora' => 'Diaspora*', // IGNORE 'email' => '郵箱', // IGNORE diff --git a/app/i18n/zh-tw/gen.php b/app/i18n/zh-tw/gen.php index d53e086678d..68d078173a3 100644 --- a/app/i18n/zh-tw/gen.php +++ b/app/i18n/zh-tw/gen.php @@ -203,7 +203,6 @@ 'Known' => '基於 Known 的站點', 'archiveORG' => 'archive.org', // IGNORE 'archivePH' => 'archive.ph', // IGNORE - 'blogotext' => 'Blogotext', // IGNORE 'buffer' => 'Buffer', // IGNORE 'clipboard' => '剪貼板', 'diaspora' => 'Diaspora*', // IGNORE diff --git a/app/shares.php b/app/shares.php index 51889862506..392f99c408b 100644 --- a/app/shares.php +++ b/app/shares.php @@ -43,14 +43,6 @@ 'form' => 'simple', 'method' => 'GET', ], - 'blogotext' => [ - 'deprecated' => true, - 'url' => '~URL~/admin/links.php?url=~LINK~', - 'transform' => [], - 'help' => 'http://lehollandaisvolant.net/blogotext/fr/', - 'form' => 'advanced', - 'method' => 'GET', - ], 'buffer' => [ 'url' => 'https://publish.buffer.com/compose?url=~LINK~&text=~TITLE~', 'transform' => ['rawurlencode'], diff --git a/docs/en/users/08_sharing_services.md b/docs/en/users/08_sharing_services.md index d8d25e4b0a9..96a736eb166 100644 --- a/docs/en/users/08_sharing_services.md +++ b/docs/en/users/08_sharing_services.md @@ -14,7 +14,6 @@ FreshRSS has the option to share links with a bunch of services. | Service | Short description | Links | Notes | |:------------------|:-----------------------------------------------------|:-------------------------------------------------|:--------------------------------------------------------------| -| Blogotext | A little more than a lightweight SQLite Blog-Engine. | [GitHub](https://github.com/BlogoText/blogotext) | Deprecated since FreshRSS V1.20.0 (2022). Will be deleted in 2023 (scheduled to FreshRSS V1.22.0) | | Buffer | Buffer.com is a social media management platform for scheduling, publishing, and analyzing content. | [Website](https://buffer.com) || | Diaspora* | The online social world where you are in control | [Website](https://diasporafoundation.org/), [Wikipedia](https://en.wikipedia.org/wiki/Diaspora_(social_network)) | | | Facebook | Worldwide social network (by Meta Platforms) | [Website](https://facebook.com), [Wikipedia](https://en.wikipedia.org/wiki/Facebook) | | From 35ee123dda654facadf82037675c21ca215d7fec Mon Sep 17 00:00:00 2001 From: maTh <1645099+math-GH@users.noreply.github.com> Date: Wed, 12 Jun 2024 21:45:16 +0200 Subject: [PATCH 1181/2479] Sticky buttons (#6304) * make it sticky * Origine theme * fix * config option * i18n * CSS * fix category config * some themes and some fixes * grey behind the buttons * more themes * Revert "config option" This reverts commit b81ae15030979ebfcfdce070ce8b36c4b9444155. * Revert "CSS" This reverts commit a0f4f769f17298f10cc2279c57c0688d47844d83. * css * revert i18n --- p/themes/Alternative-Dark/adark.css | 3 ++- p/themes/Alternative-Dark/adark.rtl.css | 3 ++- p/themes/Dark/dark.css | 1 + p/themes/Dark/dark.rtl.css | 1 + p/themes/Flat/flat.css | 2 +- p/themes/Flat/flat.rtl.css | 2 +- p/themes/Nord/nord.css | 2 ++ p/themes/Nord/nord.rtl.css | 2 ++ p/themes/Origine/origine.css | 3 ++- p/themes/Origine/origine.rtl.css | 3 ++- p/themes/Pafat/pafat.css | 3 ++- p/themes/Pafat/pafat.rtl.css | 3 ++- p/themes/Swage/swage.css | 3 ++- p/themes/Swage/swage.rtl.css | 3 ++- p/themes/Swage/swage.scss | 4 +++- p/themes/base-theme/frss.css | 4 ++++ p/themes/base-theme/frss.rtl.css | 4 ++++ 17 files changed, 35 insertions(+), 11 deletions(-) diff --git a/p/themes/Alternative-Dark/adark.css b/p/themes/Alternative-Dark/adark.css index ce45f036d09..1d7c53c62a3 100644 --- a/p/themes/Alternative-Dark/adark.css +++ b/p/themes/Alternative-Dark/adark.css @@ -4,6 +4,7 @@ /*============*/ :root { --background-color-dark: #171717; + --background-color-dark-transparent: #171717aa; --background-color-middle: #1f1f1f; --background-color-light: #262626; --background-color-hover: #1d242f; @@ -140,7 +141,7 @@ th { /*=== Forms */ .form-group.form-actions { padding: 5px 0; - background: var(--background-color-dark); + background-color: var(--background-color-dark-transparent); border-top: 1px solid var(--border-color-dark); } diff --git a/p/themes/Alternative-Dark/adark.rtl.css b/p/themes/Alternative-Dark/adark.rtl.css index fff6e102fd9..08de1ba86e4 100644 --- a/p/themes/Alternative-Dark/adark.rtl.css +++ b/p/themes/Alternative-Dark/adark.rtl.css @@ -4,6 +4,7 @@ /*============*/ :root { --background-color-dark: #171717; + --background-color-dark-transparent: #171717aa; --background-color-middle: #1f1f1f; --background-color-light: #262626; --background-color-hover: #1d242f; @@ -140,7 +141,7 @@ th { /*=== Forms */ .form-group.form-actions { padding: 5px 0; - background: var(--background-color-dark); + background-color: var(--background-color-dark-transparent); border-top: 1px solid var(--border-color-dark); } diff --git a/p/themes/Dark/dark.css b/p/themes/Dark/dark.css index 453bd3301ed..a2cc94f2035 100644 --- a/p/themes/Dark/dark.css +++ b/p/themes/Dark/dark.css @@ -14,6 +14,7 @@ /** Origine **/ --background-color-light: #1c1c1c; --background-color-light-shadowed: inherit; + --background-color-light-shadowed-transparent: #262626aa; --background-color-grey: #1c1c1c; --background-color-hover: #26303f; --background-color-flux-hover: #111; diff --git a/p/themes/Dark/dark.rtl.css b/p/themes/Dark/dark.rtl.css index 0d04778575d..a6d90ba22c7 100644 --- a/p/themes/Dark/dark.rtl.css +++ b/p/themes/Dark/dark.rtl.css @@ -14,6 +14,7 @@ /** Origine **/ --background-color-light: #1c1c1c; --background-color-light-shadowed: inherit; + --background-color-light-shadowed-transparent: #262626aa; --background-color-grey: #1c1c1c; --background-color-hover: #26303f; --background-color-flux-hover: #111; diff --git a/p/themes/Flat/flat.css b/p/themes/Flat/flat.css index 61622b840e4..f668e5bd601 100644 --- a/p/themes/Flat/flat.css +++ b/p/themes/Flat/flat.css @@ -112,7 +112,7 @@ th { .form-group.form-actions { margin: 15px 0 25px; padding: 5px 0; - background: #ecf0f1; + background-color: #e6ecedaa; border-top: 3px solid #bdc3c7; border-radius: 5px 5px 0 0; } diff --git a/p/themes/Flat/flat.rtl.css b/p/themes/Flat/flat.rtl.css index 35cd1d62043..0a078880015 100644 --- a/p/themes/Flat/flat.rtl.css +++ b/p/themes/Flat/flat.rtl.css @@ -112,7 +112,7 @@ th { .form-group.form-actions { margin: 15px 0 25px; padding: 5px 0; - background: #ecf0f1; + background-color: #e6ecedaa; border-top: 3px solid #bdc3c7; border-radius: 5px 5px 0 0; } diff --git a/p/themes/Nord/nord.css b/p/themes/Nord/nord.css index 7df84b20a35..2d0cd16e04e 100644 --- a/p/themes/Nord/nord.css +++ b/p/themes/Nord/nord.css @@ -31,6 +31,7 @@ --nord15-aurora: #b48ead; --main-background: var(--nordX-background); + --main-background-transparent: #242933cc; --accent-bg: var(--nord0-polarnight); --accent-border: var(--nord0-polarnight); --light-bg: var(--nord1-polarnight); @@ -190,6 +191,7 @@ table th, table td { .form-group.form-actions { margin: 2rem 0 5rem 0; + background-color: var(--main-background-transparent); } .form-group .group-name { diff --git a/p/themes/Nord/nord.rtl.css b/p/themes/Nord/nord.rtl.css index ee20cc6e4db..6786097d5f6 100644 --- a/p/themes/Nord/nord.rtl.css +++ b/p/themes/Nord/nord.rtl.css @@ -31,6 +31,7 @@ --nord15-aurora: #b48ead; --main-background: var(--nordX-background); + --main-background-transparent: #242933cc; --accent-bg: var(--nord0-polarnight); --accent-border: var(--nord0-polarnight); --light-bg: var(--nord1-polarnight); @@ -190,6 +191,7 @@ table th, table td { .form-group.form-actions { margin: 2rem 0 5rem 0; + background-color: var(--main-background-transparent); } .form-group .group-name { diff --git a/p/themes/Origine/origine.css b/p/themes/Origine/origine.css index 99f8547ce61..afdc3e0a5c9 100644 --- a/p/themes/Origine/origine.css +++ b/p/themes/Origine/origine.css @@ -9,6 +9,7 @@ --background-color-light-gradient2: #eee; --background-color-light: #fff; --background-color-light-shadowed: #f6f6f6; + --background-color-light-shadowed-transparent: #f0f0f0a8; --background-color-grey: #f0f0f0; --background-color-hover: #f6f6f6; @@ -177,7 +178,7 @@ th { .form-group.form-actions { margin-bottom: 40px; padding: 5px 0; - background-color: var(--background-color-light-shadowed); + background-color: var(--background-color-light-shadowed-transparent); border-top: 1px solid var(--border-color); } diff --git a/p/themes/Origine/origine.rtl.css b/p/themes/Origine/origine.rtl.css index 8b88c4329f0..ee2ab8265d5 100644 --- a/p/themes/Origine/origine.rtl.css +++ b/p/themes/Origine/origine.rtl.css @@ -9,6 +9,7 @@ --background-color-light-gradient2: #eee; --background-color-light: #fff; --background-color-light-shadowed: #f6f6f6; + --background-color-light-shadowed-transparent: #f0f0f0a8; --background-color-grey: #f0f0f0; --background-color-hover: #f6f6f6; @@ -177,7 +178,7 @@ th { .form-group.form-actions { margin-bottom: 40px; padding: 5px 0; - background-color: var(--background-color-light-shadowed); + background-color: var(--background-color-light-shadowed-transparent); border-top: 1px solid var(--border-color); } diff --git a/p/themes/Pafat/pafat.css b/p/themes/Pafat/pafat.css index 675b472fd71..6a69bb56929 100644 --- a/p/themes/Pafat/pafat.css +++ b/p/themes/Pafat/pafat.css @@ -21,6 +21,7 @@ --background-color-white: #fff; --background-color-grey-light: #fafafa; --background-color-grey: #f4f4f4; + --background-color-grey-transparent: #f3f3f3bb; --background-color-grey-hover: #f0f0f0; --background-color-grey-button-active: #eee; @@ -164,7 +165,7 @@ th { /*=== Forms */ .form-group.form-actions { padding: 5px 0; - background-color: var(--background-color-grey); + background-color: var(--background-color-grey-transparent); border-top: 1px solid var(--border-color-grey-light); } diff --git a/p/themes/Pafat/pafat.rtl.css b/p/themes/Pafat/pafat.rtl.css index 78ed6f98470..ac2c7772e80 100644 --- a/p/themes/Pafat/pafat.rtl.css +++ b/p/themes/Pafat/pafat.rtl.css @@ -21,6 +21,7 @@ --background-color-white: #fff; --background-color-grey-light: #fafafa; --background-color-grey: #f4f4f4; + --background-color-grey-transparent: #f3f3f3bb; --background-color-grey-hover: #f0f0f0; --background-color-grey-button-active: #eee; @@ -164,7 +165,7 @@ th { /*=== Forms */ .form-group.form-actions { padding: 5px 0; - background-color: var(--background-color-grey); + background-color: var(--background-color-grey-transparent); border-top: 1px solid var(--border-color-grey-light); } diff --git a/p/themes/Swage/swage.css b/p/themes/Swage/swage.css index 7321fac868a..c741fbf0833 100644 --- a/p/themes/Swage/swage.css +++ b/p/themes/Swage/swage.css @@ -17,6 +17,7 @@ --color-border-bad: #b0425b; --color-background-light: #fcfcfc; --color-background-light-darker: #e3e3e3; + --color-background-light-darker-transparent: rgba(217, 217, 217, 0.7333333333); --color-background-dark: #181621; --color-background-nav: #0062be; --color-background-nav-darker: #00488b; @@ -181,7 +182,7 @@ form th { .form-group.form-actions { margin: 15px 0 25px; padding: 5px 0; - background-color: var(--color-background-light-darker); + background-color: var(--color-background-light-darker-transparent); border-top: 3px solid var(--color-border-light-darker); } .form-group.form-actions .btn { diff --git a/p/themes/Swage/swage.rtl.css b/p/themes/Swage/swage.rtl.css index c46869e91fb..3e31a9487b6 100644 --- a/p/themes/Swage/swage.rtl.css +++ b/p/themes/Swage/swage.rtl.css @@ -17,6 +17,7 @@ --color-border-bad: #b0425b; --color-background-light: #fcfcfc; --color-background-light-darker: #e3e3e3; + --color-background-light-darker-transparent: rgba(217, 217, 217, 0.7333333333); --color-background-dark: #181621; --color-background-nav: #0062be; --color-background-nav-darker: #00488b; @@ -181,7 +182,7 @@ form th { .form-group.form-actions { margin: 15px 0 25px; padding: 5px 0; - background-color: var(--color-background-light-darker); + background-color: var(--color-background-light-darker-transparent); border-top: 3px solid var(--color-border-light-darker); } .form-group.form-actions .btn { diff --git a/p/themes/Swage/swage.scss b/p/themes/Swage/swage.scss index f05bf8ee460..97999265965 100644 --- a/p/themes/Swage/swage.scss +++ b/p/themes/Swage/swage.scss @@ -11,6 +11,7 @@ $color_alert: #fa8052; $color_good: #5eaabf; $color_bad: #b0425b; $color_grey: #e3e3e3; +$color_grey_transparent: #d9d9d9bb; $color_stared: #fff6da; $color_unread: #fff3ed; $color_hover: #fff; @@ -37,6 +38,7 @@ $color_hover: #fff; --color-background-light: #{$color_light}; --color-background-light-darker: #{color.adjust( $color_light, $lightness: -10%)}; + --color-background-light-darker-transparent: #{$color_grey_transparent}; --color-background-dark: #{$color_text}; --color-background-nav: #{$color_nav}; --color-background-nav-darker: #{color.adjust( $color_nav, $lightness: -10%)}; @@ -223,7 +225,7 @@ form { &.form-actions { margin: 15px 0 25px; padding: 5px 0; - background-color: var(--color-background-light-darker); + background-color: var(--color-background-light-darker-transparent); border-top: 3px solid var(--color-border-light-darker); .btn { diff --git a/p/themes/base-theme/frss.css b/p/themes/base-theme/frss.css index adea1f6cc4c..90abbf25426 100644 --- a/p/themes/base-theme/frss.css +++ b/p/themes/base-theme/frss.css @@ -431,7 +431,11 @@ td.numeric { } .form-group.form-actions { + position: sticky; + bottom: 0; + backdrop-filter: blur(2px) grayscale(1); min-width: 250px; + z-index: 80; } .form-group .group-name { diff --git a/p/themes/base-theme/frss.rtl.css b/p/themes/base-theme/frss.rtl.css index 5684501c349..c6914ac89d3 100644 --- a/p/themes/base-theme/frss.rtl.css +++ b/p/themes/base-theme/frss.rtl.css @@ -431,7 +431,11 @@ td.numeric { } .form-group.form-actions { + position: sticky; + bottom: 0; + backdrop-filter: blur(2px) grayscale(1); min-width: 250px; + z-index: 80; } .form-group .group-name { From 20f13312d15a1408365b859b14621364009990cd Mon Sep 17 00:00:00 2001 From: maTh <1645099+math-GH@users.noreply.github.com> Date: Thu, 13 Jun 2024 16:40:54 +0200 Subject: [PATCH 1182/2479] Reading view: action icons position (#6297) * add configs in reading * implementation into the reading view * CSS * i18n * Credits to joshka * Update article.phtml * fix * fix *
    * Update app/i18n/fr/conf.php Co-authored-by: Alexandre Alapetite * Update app/i18n/en/conf.php Co-authored-by: Alexandre Alapetite * fix French * show_articleicons => show_article_icons * Update app/i18n/en/conf.php Co-authored-by: Alexandre Alapetite * Update app/i18n/en-us/conf.php Co-authored-by: Alexandre Alapetite --------- Co-authored-by: Alexandre Alapetite --- CREDITS.md | 1 + app/Controllers/configureController.php | 1 + app/Models/UserConfiguration.php | 1 + app/i18n/cs/conf.php | 5 ++ app/i18n/de/conf.php | 5 ++ app/i18n/el/conf.php | 5 ++ app/i18n/en-us/conf.php | 5 ++ app/i18n/en/conf.php | 5 ++ app/i18n/es/conf.php | 5 ++ app/i18n/fa/conf.php | 5 ++ app/i18n/fr/conf.php | 5 ++ app/i18n/he/conf.php | 5 ++ app/i18n/hu/conf.php | 5 ++ app/i18n/id/conf.php | 5 ++ app/i18n/it/conf.php | 5 ++ app/i18n/ja/conf.php | 5 ++ app/i18n/ko/conf.php | 5 ++ app/i18n/lv/conf.php | 5 ++ app/i18n/nl/conf.php | 5 ++ app/i18n/oc/conf.php | 5 ++ app/i18n/pl/conf.php | 5 ++ app/i18n/pt-br/conf.php | 5 ++ app/i18n/ru/conf.php | 5 ++ app/i18n/ru/sub.php | 2 +- app/i18n/sk/conf.php | 5 ++ app/i18n/tr/conf.php | 5 ++ app/i18n/zh-cn/conf.php | 5 ++ app/i18n/zh-tw/conf.php | 5 ++ app/views/configure/reading.phtml | 9 +++ app/views/helpers/index/article.phtml | 83 +++++++++++++++++-------- config-user.default.php | 1 + p/themes/base-theme/frss.css | 48 +++++++++++++- p/themes/base-theme/frss.rtl.css | 48 +++++++++++++- 33 files changed, 285 insertions(+), 29 deletions(-) diff --git a/CREDITS.md b/CREDITS.md index ef9b1849f82..b04ffb9200b 100644 --- a/CREDITS.md +++ b/CREDITS.md @@ -108,6 +108,7 @@ People are sorted by name so please keep this order. * [Jonas Östanbäck](https://github.com/cez81): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:cez81) * [Jordi Garcia](https://github.com/jgtorcal): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:jgtorcal) * [Joris Kinable](https://github.com/jkinable): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:jkinable) +* [Josh McKinney](https://github.com/joshka): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:joshka) * [Jules Bertholet](https://github.com/Jules-Bertholet): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:Jules-Bertholet) * [Julien Reichardt](https://github.com/j8r): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:j8r), [Web](https://blog.jrei.ch/) * [Julien-Pierre Avérous](https://github.com/javerous): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:javerous), [Web](https://www.sourcemac.com/) diff --git a/app/Controllers/configureController.php b/app/Controllers/configureController.php index 343623d750c..7707870219e 100644 --- a/app/Controllers/configureController.php +++ b/app/Controllers/configureController.php @@ -123,6 +123,7 @@ public function readingAction(): void { FreshRSS_Context::userConf()->show_tags_max = Minz_Request::paramInt('show_tags_max'); FreshRSS_Context::userConf()->show_author_date = Minz_Request::paramString('show_author_date') ?: '0'; FreshRSS_Context::userConf()->show_feed_name = Minz_Request::paramString('show_feed_name') ?: 't'; + FreshRSS_Context::userConf()->show_article_icons = Minz_Request::paramString('show_article_icons') ?: 't'; FreshRSS_Context::userConf()->hide_read_feeds = Minz_Request::paramBoolean('hide_read_feeds'); FreshRSS_Context::userConf()->onread_jump_next = Minz_Request::paramBoolean('onread_jump_next'); FreshRSS_Context::userConf()->lazyload = Minz_Request::paramBoolean('lazyload'); diff --git a/app/Models/UserConfiguration.php b/app/Models/UserConfiguration.php index c9d5b07af32..938c2ed270a 100644 --- a/app/Models/UserConfiguration.php +++ b/app/Models/UserConfiguration.php @@ -21,6 +21,7 @@ * @property int $show_tags_max * @property string $show_author_date * @property string $show_feed_name + * @property string $show_article_icons * @property bool $display_posts * @property string $email_validation_token * @property-read bool $enabled diff --git a/app/i18n/cs/conf.php b/app/i18n/cs/conf.php index f432360208d..2c2559d8b6a 100644 --- a/app/i18n/cs/conf.php +++ b/app/i18n/cs/conf.php @@ -186,6 +186,11 @@ 'with_authors' => 'V řádku s autory a datem', ), 'feed_title' => 'Název feedu', + 'icons' => array( + '_' => 'Article icons position
    (Reading view only)', // TODO + 'above_title' => 'Above title', // TODO + 'with_authors' => 'In authors and date row', // TODO + ), 'tags' => array( '_' => 'Štítky', 'both' => 'V záhlaví a zápatí', diff --git a/app/i18n/de/conf.php b/app/i18n/de/conf.php index 9da725499df..71b402b73d7 100644 --- a/app/i18n/de/conf.php +++ b/app/i18n/de/conf.php @@ -186,6 +186,11 @@ 'with_authors' => 'In der Zeile mit Autoren und Datum', ), 'feed_title' => 'Feed Titel', + 'icons' => array( + '_' => 'Article icons position
    (Reading view only)', // TODO + 'above_title' => 'Above title', // TODO + 'with_authors' => 'In authors and date row', // TODO + ), 'tags' => array( '_' => 'Hashtags', 'both' => 'In Kopf- und Fußzeile', diff --git a/app/i18n/el/conf.php b/app/i18n/el/conf.php index cae8efe15dd..681ec5ecd4c 100644 --- a/app/i18n/el/conf.php +++ b/app/i18n/el/conf.php @@ -186,6 +186,11 @@ 'with_authors' => 'In authors and date row', // TODO ), 'feed_title' => 'Feed title', // TODO + 'icons' => array( + '_' => 'Article icons position
    (Reading view only)', // TODO + 'above_title' => 'Above title', // TODO + 'with_authors' => 'In authors and date row', // TODO + ), 'tags' => array( '_' => 'Tags', // TODO 'both' => 'In header and footer', // TODO diff --git a/app/i18n/en-us/conf.php b/app/i18n/en-us/conf.php index d0f7c4f8e40..9281fd9c2a7 100644 --- a/app/i18n/en-us/conf.php +++ b/app/i18n/en-us/conf.php @@ -186,6 +186,11 @@ 'with_authors' => 'In authors and date row', // IGNORE ), 'feed_title' => 'Feed title', // IGNORE + 'icons' => array( + '_' => 'Article icons position
    (Reading view only)', // IGNORE + 'above_title' => 'Above title', // IGNORE + 'with_authors' => 'In authors and date row', // IGNORE + ), 'tags' => array( '_' => 'Tags', // IGNORE 'both' => 'In header and footer', // IGNORE diff --git a/app/i18n/en/conf.php b/app/i18n/en/conf.php index 5b3b93fcbfe..30b499a5fd0 100644 --- a/app/i18n/en/conf.php +++ b/app/i18n/en/conf.php @@ -186,6 +186,11 @@ 'with_authors' => 'In authors and date row', ), 'feed_title' => 'Feed title', + 'icons' => array( + '_' => 'Article icons position
    (Reading view only)', + 'above_title' => 'Above title', + 'with_authors' => 'In authors and date row', + ), 'tags' => array( '_' => 'Tags', 'both' => 'In header and footer', diff --git a/app/i18n/es/conf.php b/app/i18n/es/conf.php index 6aa11b0c760..02c1609ec79 100644 --- a/app/i18n/es/conf.php +++ b/app/i18n/es/conf.php @@ -186,6 +186,11 @@ 'with_authors' => 'En la fila de autores y fecha', ), 'feed_title' => 'Título del Feed', + 'icons' => array( + '_' => 'Article icons position
    (Reading view only)', // TODO + 'above_title' => 'Above title', // TODO + 'with_authors' => 'In authors and date row', // TODO + ), 'tags' => array( '_' => 'Etiquetas', 'both' => 'En el encabezado y pie de página', diff --git a/app/i18n/fa/conf.php b/app/i18n/fa/conf.php index 63b6ecd1f3a..75e698516d3 100644 --- a/app/i18n/fa/conf.php +++ b/app/i18n/fa/conf.php @@ -186,6 +186,11 @@ 'with_authors' => ' در نویسندگان و ردیف تاریخ', ), 'feed_title' => ' عنوان خوراک', + 'icons' => array( + '_' => 'Article icons position
    (Reading view only)', // TODO + 'above_title' => 'Above title', // TODO + 'with_authors' => 'In authors and date row', // TODO + ), 'tags' => array( '_' => ' برچسب ها', 'both' => ' در سرصفحه و پاورقی', diff --git a/app/i18n/fr/conf.php b/app/i18n/fr/conf.php index 325752dc7c4..7470d3aa9d5 100644 --- a/app/i18n/fr/conf.php +++ b/app/i18n/fr/conf.php @@ -186,6 +186,11 @@ 'with_authors' => 'Sur la ligne « Auteurs et date »', ), 'feed_title' => 'Titre du flux', + 'icons' => array( + '_' => 'Position des icônes d’article
    (Vue lecture seulement)', + 'above_title' => 'Au dessus du titre', + 'with_authors' => 'Sur la ligne auteur et date', + ), 'tags' => array( '_' => 'Tags', // IGNORE 'both' => 'En en-tête et en pied d’article', diff --git a/app/i18n/he/conf.php b/app/i18n/he/conf.php index d00c8ad2c12..11201608479 100644 --- a/app/i18n/he/conf.php +++ b/app/i18n/he/conf.php @@ -186,6 +186,11 @@ 'with_authors' => 'In authors and date row', // TODO ), 'feed_title' => 'Feed title', // TODO + 'icons' => array( + '_' => 'Article icons position
    (Reading view only)', // TODO + 'above_title' => 'Above title', // TODO + 'with_authors' => 'In authors and date row', // TODO + ), 'tags' => array( '_' => 'Tags', // TODO 'both' => 'In header and footer', // TODO diff --git a/app/i18n/hu/conf.php b/app/i18n/hu/conf.php index ae3c164fd44..331599189d4 100644 --- a/app/i18n/hu/conf.php +++ b/app/i18n/hu/conf.php @@ -186,6 +186,11 @@ 'with_authors' => 'A szerzők és dátum sorban', ), 'feed_title' => 'Hírforrás címe', + 'icons' => array( + '_' => 'Article icons position
    (Reading view only)', // TODO + 'above_title' => 'Above title', // TODO + 'with_authors' => 'In authors and date row', // TODO + ), 'tags' => array( '_' => 'Címkék', 'both' => 'Fejlécben és láblécben', diff --git a/app/i18n/id/conf.php b/app/i18n/id/conf.php index 21f14d42333..660894bd871 100644 --- a/app/i18n/id/conf.php +++ b/app/i18n/id/conf.php @@ -186,6 +186,11 @@ 'with_authors' => 'Di baris penulis dan tanggal', ), 'feed_title' => 'Judul feed', + 'icons' => array( + '_' => 'Article icons position
    (Reading view only)', // TODO + 'above_title' => 'Above title', // TODO + 'with_authors' => 'In authors and date row', // TODO + ), 'tags' => array( '_' => 'Tag', 'both' => 'Di header dan footer', diff --git a/app/i18n/it/conf.php b/app/i18n/it/conf.php index d042b8f09e7..77980b16b5e 100644 --- a/app/i18n/it/conf.php +++ b/app/i18n/it/conf.php @@ -186,6 +186,11 @@ 'with_authors' => 'Nella riga degli autori e data', ), 'feed_title' => 'Titolo del feed', + 'icons' => array( + '_' => 'Article icons position
    (Reading view only)', // TODO + 'above_title' => 'Above title', // TODO + 'with_authors' => 'In authors and date row', // TODO + ), 'tags' => array( '_' => 'Tag', 'both' => 'Nell’intestazione e nel fondo pagina', diff --git a/app/i18n/ja/conf.php b/app/i18n/ja/conf.php index 3b3a91746c6..22075b92bf7 100644 --- a/app/i18n/ja/conf.php +++ b/app/i18n/ja/conf.php @@ -186,6 +186,11 @@ 'with_authors' => '著者と日付の行', ), 'feed_title' => 'フィードのタイトル', + 'icons' => array( + '_' => 'Article icons position
    (Reading view only)', // TODO + 'above_title' => 'Above title', // TODO + 'with_authors' => 'In authors and date row', // TODO + ), 'tags' => array( '_' => 'タグ', 'both' => 'ヘッダーとフッター', diff --git a/app/i18n/ko/conf.php b/app/i18n/ko/conf.php index 9223863baa4..2dc85f84a29 100644 --- a/app/i18n/ko/conf.php +++ b/app/i18n/ko/conf.php @@ -186,6 +186,11 @@ 'with_authors' => '작성자, 작성일과 같은 줄에', ), 'feed_title' => '피드 제목', + 'icons' => array( + '_' => 'Article icons position
    (Reading view only)', // TODO + 'above_title' => 'Above title', // TODO + 'with_authors' => 'In authors and date row', // TODO + ), 'tags' => array( '_' => '태그', 'both' => '머리말과 꼬리말에', diff --git a/app/i18n/lv/conf.php b/app/i18n/lv/conf.php index 90a425eebe2..65df53baa9d 100644 --- a/app/i18n/lv/conf.php +++ b/app/i18n/lv/conf.php @@ -186,6 +186,11 @@ 'with_authors' => 'Autoru un datuma rindā', ), 'feed_title' => 'Barotnes tituls', + 'icons' => array( + '_' => 'Article icons position
    (Reading view only)', // TODO + 'above_title' => 'Above title', // TODO + 'with_authors' => 'In authors and date row', // TODO + ), 'tags' => array( '_' => 'Birkas', 'both' => 'Virsrakstā un kājenē', diff --git a/app/i18n/nl/conf.php b/app/i18n/nl/conf.php index 83f0ea6ba19..241b4f91f86 100644 --- a/app/i18n/nl/conf.php +++ b/app/i18n/nl/conf.php @@ -186,6 +186,11 @@ 'with_authors' => 'In lijn met auteurs en datum', ), 'feed_title' => 'Feedtitel', + 'icons' => array( + '_' => 'Article icons position
    (Reading view only)', // TODO + 'above_title' => 'Above title', // TODO + 'with_authors' => 'In authors and date row', // TODO + ), 'tags' => array( '_' => 'Tags', // IGNORE 'both' => 'In kop en voet', diff --git a/app/i18n/oc/conf.php b/app/i18n/oc/conf.php index f803ab7bf5d..45641450456 100644 --- a/app/i18n/oc/conf.php +++ b/app/i18n/oc/conf.php @@ -186,6 +186,11 @@ 'with_authors' => 'Dins la linha autors e data', ), 'feed_title' => 'Títol del flux', + 'icons' => array( + '_' => 'Article icons position
    (Reading view only)', // TODO + 'above_title' => 'Above title', // TODO + 'with_authors' => 'In authors and date row', // TODO + ), 'tags' => array( '_' => 'Etiquetas', 'both' => 'Dins l’entèsta e lo bas de pagina', diff --git a/app/i18n/pl/conf.php b/app/i18n/pl/conf.php index 875f21a45b0..7f9fcb9d262 100644 --- a/app/i18n/pl/conf.php +++ b/app/i18n/pl/conf.php @@ -186,6 +186,11 @@ 'with_authors' => 'W tej samej linii co autor i data', ), 'feed_title' => 'Nazwa kanału', + 'icons' => array( + '_' => 'Article icons position
    (Reading view only)', // TODO + 'above_title' => 'Above title', // TODO + 'with_authors' => 'In authors and date row', // TODO + ), 'tags' => array( '_' => 'Tagi', 'both' => 'W nagłówku i stopce', diff --git a/app/i18n/pt-br/conf.php b/app/i18n/pt-br/conf.php index d7353c1d2ec..29ca4f7cfa4 100644 --- a/app/i18n/pt-br/conf.php +++ b/app/i18n/pt-br/conf.php @@ -186,6 +186,11 @@ 'with_authors' => 'Com autores e data', ), 'feed_title' => 'Título do Feed', + 'icons' => array( + '_' => 'Article icons position
    (Reading view only)', // TODO + 'above_title' => 'Above title', // TODO + 'with_authors' => 'In authors and date row', // TODO + ), 'tags' => array( '_' => 'Tag', 'both' => 'No cabeçalho e rodapé', diff --git a/app/i18n/ru/conf.php b/app/i18n/ru/conf.php index e71d43c2059..0c28ef0cb02 100644 --- a/app/i18n/ru/conf.php +++ b/app/i18n/ru/conf.php @@ -186,6 +186,11 @@ 'with_authors' => 'В строке с автором и датой', ), 'feed_title' => 'Титул ленты', + 'icons' => array( + '_' => 'Article icons position
    (Reading view only)', // TODO + 'above_title' => 'Above title', // TODO + 'with_authors' => 'In authors and date row', // TODO + ), 'tags' => array( '_' => 'Метки', 'both' => 'В верхнем и нижнем колонтитулах', diff --git a/app/i18n/ru/sub.php b/app/i18n/ru/sub.php index 91cd3807cb9..789f8312e75 100644 --- a/app/i18n/ru/sub.php +++ b/app/i18n/ru/sub.php @@ -16,7 +16,7 @@ 'title' => 'API', // IGNORE ), 'bookmarklet' => array( - 'documentation' => 'Перетяните эту кнопку на вашу панель закладок, или нажмите правой кнопкой мыши и выберите "Добавить ссылку в закладки". Нажимайте кнопку "Подписаться" на любой странице, на которую вы хотите подписаться.
    ', + 'documentation' => 'Перетяните эту кнопку на вашу панель закладок, или нажмите правой кнопкой мыши и выберите "Добавить ссылку в закладки". Нажимайте кнопку "Подписаться" на любой странице, на которую вы хотите подписаться.
    ', 'label' => 'Подписаться', 'title' => 'Букмарклет', ), diff --git a/app/i18n/sk/conf.php b/app/i18n/sk/conf.php index dafb1bfe9a0..d50d84f376b 100644 --- a/app/i18n/sk/conf.php +++ b/app/i18n/sk/conf.php @@ -186,6 +186,11 @@ 'with_authors' => 'V riadku autori a dátum', ), 'feed_title' => 'Nadpis kanála', + 'icons' => array( + '_' => 'Article icons position
    (Reading view only)', // TODO + 'above_title' => 'Above title', // TODO + 'with_authors' => 'In authors and date row', // TODO + ), 'tags' => array( '_' => 'Značky', 'both' => 'V záhlaví a pätičke', diff --git a/app/i18n/tr/conf.php b/app/i18n/tr/conf.php index 2ef8486bf7e..74e3cc8f832 100644 --- a/app/i18n/tr/conf.php +++ b/app/i18n/tr/conf.php @@ -186,6 +186,11 @@ 'with_authors' => 'Yazarlar ve tarihler satırında', ), 'feed_title' => 'Akış Başlığı', + 'icons' => array( + '_' => 'Article icons position
    (Reading view only)', // TODO + 'above_title' => 'Above title', // TODO + 'with_authors' => 'In authors and date row', // TODO + ), 'tags' => array( '_' => 'Etiketler', 'both' => 'Üst Bilgi ve Alt Bilgide', diff --git a/app/i18n/zh-cn/conf.php b/app/i18n/zh-cn/conf.php index c92239e8d60..6222b76f6fc 100644 --- a/app/i18n/zh-cn/conf.php +++ b/app/i18n/zh-cn/conf.php @@ -186,6 +186,11 @@ 'with_authors' => '与作者和日期一行', ), 'feed_title' => '订阅源标题', + 'icons' => array( + '_' => 'Article icons position
    (Reading view only)', // TODO + 'above_title' => 'Above title', // TODO + 'with_authors' => 'In authors and date row', // TODO + ), 'tags' => array( '_' => '文章标签', 'both' => '页脚与页眉', diff --git a/app/i18n/zh-tw/conf.php b/app/i18n/zh-tw/conf.php index 2598d97a1c2..ccfa7a0d502 100644 --- a/app/i18n/zh-tw/conf.php +++ b/app/i18n/zh-tw/conf.php @@ -186,6 +186,11 @@ 'with_authors' => '與作者和日期一行', ), 'feed_title' => '訂閱源標題', + 'icons' => array( + '_' => 'Article icons position
    (Reading view only)', // TODO + 'above_title' => 'Above title', // TODO + 'with_authors' => 'In authors and date row', // TODO + ), 'tags' => array( '_' => '文章標籤', 'both' => '兩者都顯示', diff --git a/app/views/configure/reading.phtml b/app/views/configure/reading.phtml index e475b220c57..8df461ef85e 100644 --- a/app/views/configure/reading.phtml +++ b/app/views/configure/reading.phtml @@ -136,6 +136,15 @@
    +
    + +
    + +
    +
    diff --git a/app/views/helpers/index/article.phtml b/app/views/helpers/index/article.phtml index bfdfdb8d193..bdc108f1eca 100644 --- a/app/views/helpers/index/article.phtml +++ b/app/views/helpers/index/article.phtml @@ -1,4 +1,5 @@ entry; @@ -17,16 +18,32 @@ $readUrl['params']['is_read'] = '0'; } ?> -
    +
    - isRead() ? 'read' : 'unread') ?> - isFavorite() ? 'starred' : 'non-starred') ?> + topline_read && FreshRSS_Context::userConf()->show_article_icons == 't') { ?> + + + topline_favorite && FreshRSS_Context::userConf()->show_article_icons == 't') { ?> + + - show_feed_name === 't') { ?> - - show_favicons): ?> - ✇name() ?> +
    + show_feed_name === 't') { ?> + + show_favicons): ?> + ✇name() ?> + +
    + topline_link && FreshRSS_Context::userConf()->show_article_icons == 't') { ?> +
    @@ -35,24 +52,31 @@ $this->renderHelper('index/tags'); } ?> -

    title() ?>

    - show_author_date === 'h' || FreshRSS_Context::userConf()->show_author_date === 'b') { ?> -
    - show_feed_name === 'a') { ?> -
    - + show_author_date, ['h','b'], true)) { ?> +
    + + topline_read && FreshRSS_Context::userConf()->show_article_icons == 'a') { ?> + + + topline_favorite && FreshRSS_Context::userConf()->show_article_icons == 'a') { ?> + + + +
    + show_feed_name === 'a') { ?> + show_favicons): ?> ✇name() ?> - -
    - authors(); - if (!empty($authors) && is_array($authors)) { - ?> -
    + endif; ?>name() ?> + authors(); + if (!empty($authors) && is_array($authors)) { ?> +
    -
    - -
    +
    + +
    +
    + topline_link && FreshRSS_Context::userConf()->show_article_icons == 'a') { ?> + +
    diff --git a/config-user.default.php b/config-user.default.php index 2164030a24e..b6268987386 100644 --- a/config-user.default.php +++ b/config-user.default.php @@ -40,6 +40,7 @@ 'show_tags_max' => 7, 'show_author_date' => 'h', // {0 => none, b => both, f => footer, h => header} 'show_feed_name' => 'a', // {0 => none, a => with authors, t => above title} + 'show_article_icons' => 't', // {a => with_authors, t => above title} 'hide_read_feeds' => true, 'onread_jump_next' => true, 'lazyload' => true, diff --git a/p/themes/base-theme/frss.css b/p/themes/base-theme/frss.css index 90abbf25426..77393bd42b4 100644 --- a/p/themes/base-theme/frss.css +++ b/p/themes/base-theme/frss.css @@ -1539,6 +1539,52 @@ a.website:hover .favicon { padding: 0 0 0.25rem 1rem; } +.content .article-header-topline.horizontal-list .item.manage, +.content .subtitle.horizontal-list .item.manage { + text-align: left; + width: 2rem; +} + +.content .article-header-topline.horizontal-list .item.manage a, +.content .subtitle.horizontal-list .item.manage a { + padding: 0.5rem 0.25rem; +} + +.content .article-header-topline.horizontal-list .item, +.content .subtitle.horizontal-list .item { + vertical-align: top; +} + +.content .article-header-topline.horizontal-list .item .website, +.content .subtitle.horizontal-list .item .website { + display: inline-block; + max-width: 100%; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + vertical-align: top; +} + +.content .subtitle.horizontal-list .item .author { + display: inline-block; +} + +.content .subtitle.horizontal-list .item.date { + padding: 0.25rem; + width: 155px; + text-align: right; +} + +.content .article-header-topline.horizontal-list .item.link, +.content .subtitle.horizontal-list .item.link { + text-align: right; +} + +.content .article-header-topline.horizontal-list .item.link a, +.content .subtitle.horizontal-list .item.link a { + padding: 0.25rem 0.5rem; +} + .content pre { overflow: auto; } @@ -1547,7 +1593,7 @@ a.website:hover .favicon { display: inline; } -.subtitle > div:not(:first-of-type)::before { +.subtitle:not(.horizontal-list) > div:not(:first-of-type)::before { content: ' · '; } diff --git a/p/themes/base-theme/frss.rtl.css b/p/themes/base-theme/frss.rtl.css index c6914ac89d3..b73d8c2eb4d 100644 --- a/p/themes/base-theme/frss.rtl.css +++ b/p/themes/base-theme/frss.rtl.css @@ -1539,6 +1539,52 @@ a.website:hover .favicon { padding: 0 1rem 0.25rem 0; } +.content .article-header-topline.horizontal-list .item.manage, +.content .subtitle.horizontal-list .item.manage { + text-align: right; + width: 2rem; +} + +.content .article-header-topline.horizontal-list .item.manage a, +.content .subtitle.horizontal-list .item.manage a { + padding: 0.5rem 0.25rem; +} + +.content .article-header-topline.horizontal-list .item, +.content .subtitle.horizontal-list .item { + vertical-align: top; +} + +.content .article-header-topline.horizontal-list .item .website, +.content .subtitle.horizontal-list .item .website { + display: inline-block; + max-width: 100%; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + vertical-align: top; +} + +.content .subtitle.horizontal-list .item .author { + display: inline-block; +} + +.content .subtitle.horizontal-list .item.date { + padding: 0.25rem; + width: 155px; + text-align: left; +} + +.content .article-header-topline.horizontal-list .item.link, +.content .subtitle.horizontal-list .item.link { + text-align: left; +} + +.content .article-header-topline.horizontal-list .item.link a, +.content .subtitle.horizontal-list .item.link a { + padding: 0.25rem 0.5rem; +} + .content pre { overflow: auto; } @@ -1547,7 +1593,7 @@ a.website:hover .favicon { display: inline; } -.subtitle > div:not(:first-of-type)::before { +.subtitle:not(.horizontal-list) > div:not(:first-of-type)::before { content: ' · '; } From ff61050dc07a845b0374040a3ca24e4dafe7f58f Mon Sep 17 00:00:00 2001 From: maTh <1645099+math-GH@users.noreply.github.com> Date: Thu, 13 Jun 2024 16:41:44 +0200 Subject: [PATCH 1183/2479] Sticky Footer Regression dark mode (#6555) --- p/themes/Origine/origine.css | 1 + p/themes/Origine/origine.rtl.css | 1 + 2 files changed, 2 insertions(+) diff --git a/p/themes/Origine/origine.css b/p/themes/Origine/origine.css index afdc3e0a5c9..762fe2f95d6 100644 --- a/p/themes/Origine/origine.css +++ b/p/themes/Origine/origine.css @@ -1200,6 +1200,7 @@ a:hover .icon { --background-color-light-gradient2: #111; --background-color-light: #111; --background-color-light-shadowed: #191919; + --background-color-light-shadowed-transparent: #191919cf; --background-color-grey: #1f1f1f; --background-color-hover: #212227; diff --git a/p/themes/Origine/origine.rtl.css b/p/themes/Origine/origine.rtl.css index ee2ab8265d5..9c486d1beed 100644 --- a/p/themes/Origine/origine.rtl.css +++ b/p/themes/Origine/origine.rtl.css @@ -1200,6 +1200,7 @@ a:hover .icon { --background-color-light-gradient2: #111; --background-color-light: #111; --background-color-light-shadowed: #191919; + --background-color-light-shadowed-transparent: #191919cf; --background-color-grey: #1f1f1f; --background-color-hover: #212227; From 7a9a24a0d0f2e5cc674995ce3174116803acde09 Mon Sep 17 00:00:00 2001 From: hkcomori Date: Sat, 15 Jun 2024 18:32:39 +0900 Subject: [PATCH 1184/2479] Improve Japanese translation (TODO/DIRTY commented, swayed notation, and unnatural wording) (#6564) * Improve Japanese translation for category * Improve Japanese translation * Add Japanese translation (TODO, DIRTY) * Unify terminology * Fix unnatural wording --- app/i18n/ja/admin.php | 6 +-- app/i18n/ja/conf.php | 106 +++++++++++++++++++-------------------- app/i18n/ja/feedback.php | 8 +-- app/i18n/ja/gen.php | 24 ++++----- app/i18n/ja/index.php | 28 +++++------ app/i18n/ja/install.php | 6 +-- app/i18n/ja/sub.php | 64 +++++++++++------------ 7 files changed, 121 insertions(+), 121 deletions(-) diff --git a/app/i18n/ja/admin.php b/app/i18n/ja/admin.php index 09fd002c342..7b6d06d3f16 100644 --- a/app/i18n/ja/admin.php +++ b/app/i18n/ja/admin.php @@ -84,7 +84,7 @@ 'ok' => '正規表現ライブラリはインストールされています。 (PCRE).', ), 'pdo' => array( - 'nok' => 'PD0あるいはサポートされているドライバーが見つかりませんでした。 (pdo_mysql, pdo_sqlite, pdo_pgsql).', + 'nok' => 'PD0またはサポートされているドライバーが見つかりませんでした。 (pdo_mysql, pdo_sqlite, pdo_pgsql).', 'ok' => 'PD0とサポートされているドライバーはインストールされています。 (pdo_mysql, pdo_sqlite, pdo_pgsql).', ), 'php' => array( @@ -187,7 +187,7 @@ ), 'title' => 'ユーザー登録', ), - 'sensitive-parameter' => 'センシティブなパラメーターです。./data/config.php を手動で編集', + 'sensitive-parameter' => 'センシティブなパラメーターです。./data/config.php を手動で編集してください', 'tos' => array( 'disabled' => '無効化', 'enabled' => '有効化', @@ -203,7 +203,7 @@ 'changelog' => '変更履歴', 'check' => 'アップデートを確認する', 'copiedFromURL' => 'update.php が %s から ./data にコピーされました。', - 'current_version' => '現在のバージョンは', + 'current_version' => '現在のバージョン', 'last' => '最近の検証', 'loading' => '更新中…', 'none' => '更新を適用できません', diff --git a/app/i18n/ja/conf.php b/app/i18n/ja/conf.php index 22075b92bf7..e70fdc7409d 100644 --- a/app/i18n/ja/conf.php +++ b/app/i18n/ja/conf.php @@ -17,9 +17,9 @@ 'help' => '個々のフィード設定内で、より多くの設定をしていただけます。', 'keep_favourites' => 'お気に入りを消去しない', 'keep_labels' => 'ラベルを消去しない', - 'keep_max' => '記事を保存する最大数', // DIRTY - 'keep_min_by_feed' => '記事をフィードに残す最小数', - 'keep_period' => '記事を保存する最大時間', + 'keep_max' => '各フィードに残す記事の最大数', + 'keep_min_by_feed' => '各フィードに残す記事の最小数', + 'keep_period' => '記事を残す最大時間', 'keep_unreads' => '未読の記事を消去しない', 'maintenance' => 'メンテナンス', 'optimize' => 'データベースを整理する', @@ -35,7 +35,7 @@ 'darkMode' => array( '_' => '自動ダークモード', 'auto' => '自動', - 'help' => 'For compatible themes only', // TODO + 'help' => '対応するテーマのみ', 'no' => '無効', ), 'icon' => array( @@ -58,10 +58,10 @@ '_' => 'テーマ', 'deprecated' => array( '_' => '非推奨', - 'description' => 'このテーマのサポートは終了しており、FreshRSS の将来のリリースでは利用できなくなります。', + 'description' => 'このテーマのサポートは終了しており、FreshRSSの将来のリリースでは利用できなくなります。', ), ), - 'theme_not_available' => '“%s”テーマはご利用いただけません。他のテーマをお選びください。', + 'theme_not_available' => 'テーマ“%s”はご利用いただけません。他のテーマをお選びください。', 'thumbnail' => array( 'label' => 'サムネイル', 'landscape' => 'ランドスケープ', @@ -74,9 +74,9 @@ 'website' => array( 'full' => 'アイコンと名前', 'icon' => 'アイコンのみ', - 'label' => 'ウェブサイト', + 'label' => 'Webサイト', 'name' => '名前のみ', - 'none' => '無し', + 'none' => 'なし', ), 'width' => array( 'content' => 'コンテンツ幅', @@ -95,7 +95,7 @@ 'pagination' => array( 'first' => '先頭', 'last' => '最後', - 'next' => 'つぎへ', + 'next' => '次へ', 'previous' => '前へ', ), ), @@ -114,41 +114,41 @@ ), 'query' => array( '_' => 'ユーザークエリ', - 'deprecated' => 'このクエリは有効ではありません。参照されているカテゴリあるいはフィードはすでに消去されました。', - 'description' => 'Description', // TODO + 'deprecated' => 'このクエリは有効ではありません。参照されているカテゴリやフィードはすでに消去されました。', + 'description' => '説明', 'filter' => array( '_' => 'フィルターを適用:', 'categories' => 'カテゴリごとに表示する', 'feeds' => 'フィードごとに表示する', 'order' => '日付ごとにソートする', 'search' => '式', - 'shareOpml' => '対応するカテゴリーとフィードのOPMLによる共有が可能', + 'shareOpml' => 'カテゴリとフィードのOPMLによる共有を有効にする', 'shareRss' => 'HTMLとRSSによる共有を有効にする', 'state' => '状態', 'tags' => 'タグごとに表示する', 'type' => 'タイプ', ), - 'get_all' => 'すべての著者を表示する', + 'get_all' => 'すべての記事を表示する', 'get_all_labels' => '任意のラベルで記事を表示する', - 'get_category' => '“%s”カテゴリを表示する', - 'get_favorite' => 'お気に入りの著者を表示する', - 'get_feed' => '“%s”フィードを表示する', + 'get_category' => 'カテゴリ“%s”を表示する', + 'get_favorite' => 'お気に入りの記事を表示する', + 'get_feed' => 'フィード“%s”を表示する', 'get_important' => '重要なフィードからの記事を表示する', - 'get_label' => '“%s”ラベルの記事を表示する', - 'help' => 'HTML/RSS/OPMLによるユーザー照会と再共有については こちらをご覧ください', - 'image_url' => 'Image URL', // TODO + 'get_label' => 'ラベル“%s”の記事を表示する', + 'help' => 'HTML/RSS/OPMLによるユーザークエリと再共有については こちらをご覧ください', + 'image_url' => '画像のURL', 'name' => '名前', 'no_filter' => 'フィルターはありません', 'number' => 'クエリ n°%d', - 'order_asc' => '古い著者を最初に表示する', - 'order_desc' => '新しい著者を最初に表示する', + 'order_asc' => '古い記事を最初に表示する', + 'order_desc' => '新しい記事を最初に表示する', 'search' => '“%s”で検索する', 'share' => array( '_' => 'このクエリをリンクで共有する', - 'help' => 'このクエリを誰かと共有したい場合は、このリンクを貼ってください', - 'html' => 'HTMLページへの共有可能なリンク', - 'opml' => 'フィードのOPMLリストへの共有可能なリンク', - 'rss' => 'RSSフィードへの共有可能なリンク', + 'help' => 'このクエリを誰かと共有したい場合は、このリンクを提供してください', + 'html' => 'HTMLページへの共有リンク', + 'opml' => 'フィードのOPMLリストへの共有リンク', + 'rss' => 'RSSフィードへの共有リンク', ), 'state_0' => 'すべての記事を表示する', 'state_1' => '既読の記事を表示する', @@ -170,7 +170,7 @@ ), 'reading' => array( '_' => 'リーディング', - 'after_onread' => 'あとで “すべてに既読を付ける”,', + 'after_onread' => '“すべてに既読を付ける”を押した後,', 'always_show_favorites' => 'デフォルトですべてのお気に入りの記事を表示する', 'article' => array( 'authors_date' => array( @@ -187,9 +187,9 @@ ), 'feed_title' => 'フィードのタイトル', 'icons' => array( - '_' => 'Article icons position
    (Reading view only)', // TODO - 'above_title' => 'Above title', // TODO - 'with_authors' => 'In authors and date row', // TODO + '_' => '記事アイコンの位置
    (リーディングビューのみ)', + 'above_title' => 'タイトルの上', + 'with_authors' => '著者と日付の行', ), 'tags' => array( '_' => 'タグ', @@ -200,15 +200,15 @@ ), 'tags_max' => array( '_' => '表示されるタグの数の上限', - 'help' => '0は:すべてのタグを表示し、折り畳めまれないことを意味します。', + 'help' => '0に設定すると、折りたたまずにすべてのタグを表示します。', ), ), 'articles_per_page' => '1ページ当たりの記事の数', 'auto_load_more' => 'ページの下にもっと記事を読み込む', 'auto_remove_article' => '記事を読んだら非表示にする', 'confirm_enabled' => '“すべてに既読を付ける” を押したとき確認ダイアログを表示する', - 'display_articles_unfolded' => 'デフォルトでフォルダーに入れてない記事を表示する', - 'display_categories_unfolded' => '展開されていない記事', + 'display_articles_unfolded' => 'デフォルトで未分類の記事を表示する', + 'display_categories_unfolded' => '展開するカテゴリ', 'headline' => array( 'articles' => '記事: 開く/閉じる', 'articles_header_footer' => '記事: ヘッダー/フッター', @@ -217,21 +217,21 @@ 'misc' => 'その他', 'view' => 'ビュー', ), - 'hide_read_feeds' => 'カテゴリーを非表示 & 未読の記事がないフィード ("すべてに既読を付ける”では適用しません)', + 'hide_read_feeds' => 'カテゴリを非表示 & 未読の記事がないフィード ("すべてに既読を付ける”では適用しません)', 'img_with_lazyload' => 'lazy loadを写真の読み込み時に使う', - 'jump_next' => '次の未読の姉妹記事へ移る (フィードあるいはカテゴリー)', + 'jump_next' => '次の未読の姉妹記事へ移る (フィードやカテゴリ)', 'mark_updated_article_unread' => '更新された記事を未読とする', - 'number_divided_when_reader' => 'reading viewを二分割する', + 'number_divided_when_reader' => 'リーディングビューを2分割する', 'read' => array( - 'article_open_on_website' => '記事を元のwebサイトで開いたとき', + 'article_open_on_website' => '記事を元のWebサイトで開いたとき', 'article_viewed' => '記事を読んだとき', - 'focus' => 'フォーカス時(重要なフィードを除く)', + 'focus' => 'フォーカスしたとき (重要なフィードを除く)', 'keep_max_n_unread' => '未読の記事として残す最大数', - 'scroll' => 'スクロールしているとき (except for important feeds)', // DIRTY + 'scroll' => 'スクロールしているとき (重要なフィードを除く)', 'upon_gone' => 'ニュースフィードの提供元がなくなったとき', 'upon_reception' => '記事を受け取ったとき', 'when' => '記事を既読にする…', - 'when_same_title' => '同一タイトルの新しい記事があるときには、上部へ表示する', + 'when_same_title' => 'すでに同一タイトルが上位n件の最新記事に存在するとき', ), 'show' => array( '_' => '記事を表示する', @@ -239,8 +239,8 @@ 'adaptive' => '表示を調整する', 'all_articles' => 'すべての記事を表示する', 'all_categories' => 'すべてのカテゴリ', - 'no_category' => 'カテゴリがありません', - 'remember_categories' => '開いたカテゴリを保存する', + 'no_category' => '未分類', + 'remember_categories' => '前回開いたカテゴリ', 'unread' => '未読のみ表示する', ), 'show_fav_unread_help' => 'ラベルも適用する', @@ -255,14 +255,14 @@ 'view' => array( 'default' => 'デフォルトビュー', 'global' => 'グローバルビュー', - 'normal' => '標準ビュー', + 'normal' => 'ノーマルビュー', 'reader' => 'リーディングビュー', ), ), 'sharing' => array( '_' => '共有', 'add' => '共有方法を追加する', - 'deprecated' => 'このサービスは非推奨でFreshRSSから削除される予定ですfuture release.', + 'deprecated' => 'このサービスは非推奨でFreshRSSの将来のリリースから削除される予定です。', 'diaspora' => 'Diaspora*', // IGNORE 'email' => 'Eメール', 'facebook' => 'Facebook', // IGNORE @@ -285,33 +285,33 @@ 'close_dropdown' => 'メニューを閉じる', 'collapse_article' => '折りたたむ', 'first_article' => '初めの記事を開く', - 'focus_search' => '共有ボックスにアクセスする', + 'focus_search' => '検索ボックスにアクセスする', 'global_view' => 'グローバルビューに変更する', 'help' => 'ドキュメントを表示する', 'javascript' => 'JavaScriptはショートカットを使うときに必要です', 'last_article' => '最近の記事を表示する', 'load_more' => 'もっと記事を読み込む', 'mark_favorite' => 'お気に入りを切り替える', - 'mark_read' => '読みを切り替える', + 'mark_read' => '既読/未読を切り替える', 'navigation' => 'ナビゲーション', - 'navigation_help' => '⇧ Shiftキーを使うと, フィードにショートカットナビが表示されます。
    Alt ⎇ キーを使うと、カテゴリにショートカットナビが表示されます。', - 'navigation_no_mod_help' => '次のショートカットナビは、キーボードショートカットには対応していません。', + 'navigation_help' => '⇧ Shiftキーとの組み合わせで、フィードをナビゲーションします。
    Alt ⎇ キーとの組み合わせで、カテゴリをナビゲーションします。', + 'navigation_no_mod_help' => '以下のナビゲーションショートカットは、修飾キーをサポートしません。', 'next_article' => '次の記事を開く', - 'next_unread_article' => '次に未読の記事を開く', + 'next_unread_article' => '次の未読の記事を開く', 'non_standard' => '(%s)のキーはショートカットにはなりません。', 'normal_view' => 'ノーマルビューに切り替える', 'other_action' => 'ほかのアクション', 'previous_article' => '前の記事を表示する', 'reading_view' => 'リーディングビューに切り替える', 'rss_view' => 'RSSフィードとして開く', - 'see_on_website' => '元のwebサイトを開く', + 'see_on_website' => '元のWebサイトを開く', 'shift_for_all_read' => '+ Alt ⎇で前の記事を既読にし、
    + ⇧ Shiftですべての記事を既読にします。', - 'skip_next_article' => '次を開かないで飛ばす', - 'skip_previous_article' => '前の記事を開かないで飛ばす', + 'skip_next_article' => '次の記事を開かずにフォーカスする', + 'skip_previous_article' => '前の記事を開かずにフォーカスする', 'title' => 'ショートカット', 'toggle_media' => 'メディアの 再生/停止', - 'user_filter' => 'ユーザーのクエリにアクセスする', - 'user_filter_help' => '一つのユーザークエリしかないとき、それが使われます。そうではなければ、番号によってクエリにアクセスできます。', + 'user_filter' => 'ユーザークエリにアクセスする', + 'user_filter_help' => 'ユーザークエリが一つしかなければ、それを使う。そうではなければ、番号でクエリを選択する。', 'views' => 'ビュー', ), 'user' => array( diff --git a/app/i18n/ja/feedback.php b/app/i18n/ja/feedback.php index 325d48282be..df2bc9eda6c 100644 --- a/app/i18n/ja/feedback.php +++ b/app/i18n/ja/feedback.php @@ -57,11 +57,11 @@ ), 'import_export' => array( 'export_no_zip_extension' => 'ZIP 拡張は現在あなたのサーバーに存在しません。一つずつファイルをエクスポートしてみてください。', - 'feeds_imported' => 'あなたのフィードはインポートされ、更新されます。 / Your feeds have been imported. If you are done importing, you can now click the Update feeds button.', // DIRTY - 'feeds_imported_with_errors' => 'あなたのフィードはインポートされましたが、エラーが起きました。 / Your feeds have been imported, but some errors occurred. If you are done importing, you can now click the Update feeds button.', // DIRTY + 'feeds_imported' => 'フィードがインポートされました。インポートが完了したら、フィードを更新するボタンをクリックしてください。', + 'feeds_imported_with_errors' => 'フィードがインポートされましたが、エラーが起きました。インポートが完了したら、フィードを更新するボタンをクリックしてください。', 'file_cannot_be_uploaded' => 'ファイルをアップロードすることはできません!', 'no_zip_extension' => 'ZIP拡張は現在あなたのサーバーに存在しません。', - 'zip_error' => 'ZIPをインポートするときエラーが発生しました。', // DIRTY + 'zip_error' => 'ZIPの処理中にエラーが発生しました。', ), 'profile' => array( 'error' => 'あなたのプロフィールを変更することはできません', @@ -104,7 +104,7 @@ 'over_max' => 'フィードの最大値に達しました (%d)', 'reloaded' => '%s は再読み込みされました', 'selector_preview' => array( - 'http_error' => 'webサイトの読み込みに失敗しました', + 'http_error' => 'Webサイトの読み込みに失敗しました', 'no_entries' => 'このフィードには記事がありません。少なくともプレビュー表示を作成するには一つの記事が必要です。', 'no_feed' => '内部エラー (フィードが見つかりませんでした).', 'no_result' => '選択されたものはどれともマッチしませんでした。代わりにフォールバックとして、元のテキストが表示されます。', diff --git a/app/i18n/ja/gen.php b/app/i18n/ja/gen.php index 2ba669304ff..0cd82a3c25e 100644 --- a/app/i18n/ja/gen.php +++ b/app/i18n/ja/gen.php @@ -30,9 +30,9 @@ 'manage' => '管理', 'mark_read' => '既読にする', 'nav_buttons' => array( - 'next' => 'Next article', // TODO - 'prev' => 'Previous article', // TODO - 'up' => 'Go up', // TODO + 'next' => '次の記事', + 'prev' => '前の記事', + 'up' => '先頭へ', ), 'open_url' => 'URLを開く', 'promote' => 'プロモート', @@ -40,7 +40,7 @@ 'refresh_opml' => 'OPMLをリフレッシュする', 'remove' => '消去', 'rename' => '名前を変更する', - 'see_website' => 'webサイトをご覧ください', + 'see_website' => 'Webサイトを開く', 'submit' => '保存', 'truncate' => 'すべての記事を消去する', 'update' => '更新', @@ -193,11 +193,11 @@ 'user_profile' => 'プロフィール', ), 'period' => array( - 'days' => '日', - 'hours' => '時', - 'months' => '月', - 'weeks' => '週', - 'years' => '年', + 'days' => '日間', + 'hours' => '時間', + 'months' => 'ヶ月', + 'weeks' => '週間', + 'years' => '年間', ), 'share' => array( 'Known' => 'よく使われるサイト', @@ -237,12 +237,12 @@ 'by_author' => '著者:', 'by_default' => 'デフォルト', 'damn' => '終了!', - 'default_category' => 'カテゴリーに登録されていない', - 'no' => 'NO', + 'default_category' => '未分類', + 'no' => 'いいえ', 'not_applicable' => '利用不可能', 'ok' => 'OK!', 'or' => 'または', - 'yes' => 'OK', + 'yes' => 'はい', ), 'stream' => array( 'load_more' => '記事をもっと読み込む', diff --git a/app/i18n/ja/index.php b/app/i18n/ja/index.php index 92dae4757d5..35671a6e748 100644 --- a/app/i18n/ja/index.php +++ b/app/i18n/ja/index.php @@ -16,10 +16,10 @@ 'agpl3' => 'AGPL 3', // IGNORE 'bugs_reports' => 'バグレポート', 'credits' => 'クレジット', - 'credits_content' => 'いくつかのデザイン要素は Bootstrapから来ています。しかしFreshRSSはこのフレームワークを使用していません。 アイコンGNOME プロジェクトから作られていますOpen Sans フォントは Steve Matteson によって作成されました。 FreshRSS はMinz,PHP フレームワークをもとにしています。', - 'documentation' => '文書', - 'freshrss_description' => 'FreshRSSは なセルフホストできるRSSフィード収集ツールです。強力なツールになっており、軽量で簡単に使え、豊富な設定が特徴です。', - 'github' => 'GitHubへお願いします', + 'credits_content' => 'いくつかのデザイン要素はBootstrapに由来しますが、FreshRSSはこのフレームワークを使用していません。アイコンGNOMEプロジェクトに由来します。Open SansフォントはSteve Mattesonによって作成されました。FreshRSSはPHPフレームワークのMinzを採用しています。', + 'documentation' => 'ドキュメント', + 'freshrss_description' => 'FreshRSSはセルフホストできるRSSフィード収集ツールです。強力なツールで、軽量で簡単に使え、豊富な設定が特徴です。', + 'github' => 'Githubへお願いします', 'license' => 'ライセンス', 'project_website' => 'プロジェクトのwebサイト', 'title' => 'FreshRSSについて', @@ -47,24 +47,24 @@ 'global_view' => 'グローバルビュー', 'important' => '重要なフィード', 'main_stream' => 'メイン', - 'mark_all_read' => 'すべての記事に既読をつける', - 'mark_cat_read' => 'カテゴリーに既読をつける', - 'mark_feed_read' => 'フィードに既読をつける', - 'mark_selection_unread' => '選択したものに未読をつける', - 'newer_first' => '最新のものを先にする', - 'non-starred' => 'お気に入りに登録されてないものを表示する', + 'mark_all_read' => 'すべての記事を既読にする', + 'mark_cat_read' => 'カテゴリを既読にする', + 'mark_feed_read' => 'フィードを既読にする', + 'mark_selection_unread' => '選択した記事を未読にする', + 'newer_first' => '最新の記事を先頭にする', + 'non-starred' => 'お気に入りに登録されてない記事を表示する', 'normal_view' => 'ノーマルビュー', - 'older_first' => '最古のものを先にする', + 'older_first' => '最古の記事を先頭にする', 'queries' => 'ユーザークエリ', - 'read' => '読み取りを表示する', + 'read' => '既読の記事を表示する', 'reader_view' => 'リーディングビュー', 'rss_view' => 'RSSフィード', 'search_short' => '検索', 'starred' => 'お気に入りを表示する', 'stats' => '統計', - 'subscription' => '購読されたものの管理', + 'subscription' => '購読フィードの管理', 'tags' => 'ラベル', - 'unread' => '未読のものを表示する', + 'unread' => '未読の記事を表示する', ), 'share' => '共有', 'tag' => array( diff --git a/app/i18n/ja/install.php b/app/i18n/ja/install.php index cef3147beed..ccdaf427fef 100644 --- a/app/i18n/ja/install.php +++ b/app/i18n/ja/install.php @@ -83,8 +83,8 @@ 'ok' => '正規表現ライブラリはインストールされています。 (PCRE).', ), 'pdo' => array( - 'nok' => 'PD0あるいはサポートされているドライバーが見つかりませんでした。 (pdo_mysql, pdo_sqlite, pdo_pgsql).', - 'ok' => 'PD0とサポートされているドライバーはインストールされています。 (pdo_mysql, pdo_sqlite, pdo_pgsql).', + 'nok' => 'PDOまたはサポートされているドライバーが見つかりませんでした。 (pdo_mysql, pdo_sqlite, pdo_pgsql).', + 'ok' => 'PDOとサポートされているドライバーはインストールされています。 (pdo_mysql, pdo_sqlite, pdo_pgsql).', ), 'php' => array( 'nok' => 'あなたのPHPのバージョンは %s ですが、FreshRSSが動作する最低限のバージョンは %s です。', @@ -127,7 +127,7 @@ 'missing_applied_migrations' => '何かが誤っています; 空のファイルを手動で作ることができます %s', 'ok' => 'インストール作業は成功しました。', 'session' => array( - 'nok' => 'webサーバーは、不正な設定がされておりPHPセッションが必要とされているクッキーの設定が誤っています!', + 'nok' => 'Webサーバーは、不正な設定がされておりPHPセッションが必要とされているクッキーの設定が誤っています!', ), 'step' => 'ステップ %d', 'steps' => 'ステップ', diff --git a/app/i18n/ja/sub.php b/app/i18n/ja/sub.php index b6d4e4bde4d..0ca9cc37bb2 100644 --- a/app/i18n/ja/sub.php +++ b/app/i18n/ja/sub.php @@ -68,12 +68,12 @@ 'error' => 'このフィードに問題が発生しました。ここでアクセスできるかどうかを確認して更新してみてください。', 'export-as-opml' => array( 'download' => 'ダウンロード', - 'help' => 'XMLファイル (data subset. See documentation)', // DIRTY + 'help' => 'XMLファイル (データのサブセット。ドキュメントを参照してください。)', 'label' => 'OPMLとしてエクスポート', ), 'filteractions' => array( '_' => 'フィルターアクション', - 'help' => '1行に1つの検索フィルターを設定してください Operators see documentation.', // DIRTY + 'help' => '1行に1つの検索フィルターを設定してください。演算子はドキュメントを参照してください。', ), 'information' => 'インフォメーション', 'keep_min' => '最小数の記事は保持されます', @@ -83,15 +83,15 @@ '_' => 'HTML + XPath (ウェブスクレイピング)', 'feed_title' => array( '_' => 'フィードタイトル', - 'help' => '例: //タイトルあるいは文字列定数: "カスタムフィード"', + 'help' => '例: //title または文字列定数: "カスタムフィード"', ), 'help' => 'XPath 1.0 は上級者向けのクエリ型言語で、FreshRSSでスクレイピングをサポートしている言語です。', 'item' => array( - '_' => 'ニュースの項目を探す
    (最も重要)', + '_' => 'ニュース項目を探す
    (最も重要)', 'help' => '例: //div[@class="news-item"]', ), 'item_author' => array( - '_' => '著者', + '_' => '項目の著者', 'help' => 'これもまた、文字定数が使えます。例: "匿名"', ), 'item_categories' => '項目のタグ', @@ -105,15 +105,15 @@ ), 'item_timeFormat' => array( '_' => 'カスタム日時フォーマット', - 'help' => 'オプションです。DateTime::createFromFormat()でサポートされている、d-m-Y H:i:sのように使います', + 'help' => 'オプションです。DateTime::createFromFormat()でサポートされている書式で、d-m-Y H:i:sのように指定します', ), 'item_timestamp' => array( '_' => '項目の日付', - 'help' => '結果はstrtotime()によってパースされます', + 'help' => '結果はstrtotime()で解析されます', ), 'item_title' => array( '_' => '項目のタイトル', - 'help' => '特にXPath アクシスを descendant:: ように使います descendant::h2', + 'help' => '特にXPath Axisdescendant::descendant::h2 のように使います', ), 'item_uid' => array( '_' => '項目のユニークID', @@ -123,8 +123,8 @@ '_' => '項目のリンク(URL)', 'help' => '例: descendant::a/@href', ), - 'relative' => 'XPath (関連する項目):', - 'xpath' => 'XPathは:', + 'relative' => 'XPath (項目からの相対パス):', + 'xpath' => 'XPath:', ), 'json_dotnotation' => array( '_' => 'JSON(ドット記法)', @@ -132,37 +132,37 @@ '_' => 'フィード名', 'help' => '例: meta.title または静的文字列: "My custom feed"', ), - 'help' => 'JSONのドット表記は、オブジェクトの間にドットを使用し、配列には括弧を使用します。例: data.items[0].title', + 'help' => 'JSONのドット記法は、オブジェクトの間にドットを使用し、配列には括弧を使用します。例: data.items[0].title', 'item' => array( - '_' => 'ニュースを探す
    (最重要)', + '_' => 'ニュース項目を探す
    (最重要)', 'help' => '項目を含む配列へのJSONパス。 例: newsItems', ), - 'item_author' => 'アイテム作成者', - 'item_categories' => 'アイテムタグ', + 'item_author' => '項目の著者', + 'item_categories' => '項目のタグ', 'item_content' => array( - '_' => '項目内容', + '_' => '項目のコンテンツ', 'help' => 'コンテンツが存在するキー。例: content', ), 'item_thumbnail' => array( - '_' => 'アイテムのサムネイル', + '_' => '項目のサムネイル', 'help' => '例: image', ), 'item_timeFormat' => array( '_' => 'カスタム日時フォーマット', - 'help' => 'オプションです。DateTime::createFromFormat()でサポートされている、d-m-Y H:i:sのように使います', + 'help' => 'オプションです。DateTime::createFromFormat()でサポートされている書式で、d-m-Y H:i:sのように指定します', ), 'item_timestamp' => array( - '_' => 'アイテム日付', - 'help' => '結果はstrtotime()で解析される', + '_' => '項目の日付', + 'help' => '結果はstrtotime()で解析されます', ), - 'item_title' => 'アイテム名', - 'item_uid' => 'アイテム固有ID', + 'item_title' => '項目のタイトル', + 'item_uid' => '項目のユニークID', 'item_uri' => array( - '_' => 'アイテムリンク(URL)', + '_' => '項目のリンク(URL)', 'help' => '例: permalink', ), - 'json' => ':のドット表記', - 'relative' => ':のドット表記パス(アイテムからの相対パス)。', + 'json' => 'ドット記法:', + 'relative' => 'ドット記法(項目からの相対パス):', ), 'jsonfeed' => 'JSONフィード', 'rss' => 'RSS / Atom (標準)', @@ -172,7 +172,7 @@ 'clear_cache' => 'キャッシュのクリア', 'clear_cache_help' => 'このフィードのキャッシュをクリアします。', 'reload_articles' => '記事を再読み込みする', - 'reload_articles_help' => '記事を再読み込みして、セレクターが定義したコンテンツを完全に取得します。', // DIRTY + 'reload_articles_help' => '指定した数の記事を再読み込みし、セレクターが定義されていればコンテンツを完全に取得します。', 'title' => 'メンテナンス', ), 'max_http_redir' => 'HTTPのリダイレクトの上限', @@ -194,7 +194,7 @@ 'main_stream' => 'メインストリームで表示する', ), 'proxy' => 'フィードを読み込み時にproxyを設定してください', - 'proxy_help' => 'プロトコルを選択し (例: SOCKS5) proxyアドレスを入力してください (例: 127.0.0.1:1080 or username:password@127.0.0.1:1080)', // DIRTY + 'proxy_help' => 'プロトコルを選択し (例: SOCKS5) プロキシアドレスを入力してください (例: 127.0.0.1:1080username:password@127.0.0.1:1080)', 'selector_preview' => array( 'show_raw' => 'ソースコードを表示する', 'show_rendered' => 'コンテンツを表示する', @@ -226,14 +226,14 @@ 'export_opml' => 'フィードリストをエクスポートする (OPML)', 'export_starred' => 'お気に入りをエクスポートする', 'feed_list' => '%s 記事のリスト', - 'file_to_import' => 'インポートするファイル
    (OPML, JSON あるいは ZIP)', - 'file_to_import_no_zip' => 'インポートするファイル
    (OPML あるいは JSON)', + 'file_to_import' => 'インポートするファイル
    (OPML, JSON または ZIP)', + 'file_to_import_no_zip' => 'インポートするファイル
    (OPML または JSON)', 'import' => 'インポート', 'starred_list' => 'お気に入りの記事', 'title' => 'インポート / エクスポート', ), 'menu' => array( - 'add' => 'フィードあるいはカテゴリを追加します', + 'add' => 'フィードやカテゴリを追加', 'import_export' => 'インポート / エクスポート', 'label_management' => 'ラベル管理', 'stats' => array( @@ -241,7 +241,7 @@ 'main' => '主な統計', 'repartition' => '記事の仕切り', ), - 'subscription_management' => '購読されたものの管理', + 'subscription_management' => '購読フィードの管理', 'subscription_tools' => '購読ツール', ), 'tag' => array( @@ -251,8 +251,8 @@ 'old_name' => '古い名前', ), 'title' => array( - '_' => '購読されたものの管理', - 'add' => 'フィードあるいはカテゴリを追加します', + '_' => '購読フィードの管理', + 'add' => 'フィードやカテゴリを追加', 'add_category' => 'カテゴリの追加', 'add_dynamic_opml' => '動的なOPMLを追加する', 'add_feed' => 'フィードの追加', From 74deec6fb2aefa0bdaf6bb427f34d56ac3544cc3 Mon Sep 17 00:00:00 2001 From: hkcomori Date: Sat, 29 Jun 2024 17:10:49 +0900 Subject: [PATCH 1185/2479] Add quiet option to cli/db-backup.php (#6593) * Add quiet option to cli/db-backup.php * Fix CI test error * Fix README --- app/Models/DatabaseDAO.php | 8 ++++---- cli/README.md | 1 + cli/db-backup.php | 20 ++++++++++++++++++-- 3 files changed, 23 insertions(+), 6 deletions(-) diff --git a/app/Models/DatabaseDAO.php b/app/Models/DatabaseDAO.php index b57138093fb..363225cdbd7 100644 --- a/app/Models/DatabaseDAO.php +++ b/app/Models/DatabaseDAO.php @@ -269,7 +269,7 @@ private static function stdError(string $error): bool { public const SQLITE_EXPORT = 1; public const SQLITE_IMPORT = 2; - public function dbCopy(string $filename, int $mode, bool $clearFirst = false): bool { + public function dbCopy(string $filename, int $mode, bool $clearFirst = false, bool $verbose = true): bool { if (!extension_loaded('pdo_sqlite')) { return self::stdError('PHP extension pdo_sqlite is missing!'); } @@ -354,7 +354,7 @@ public function dbCopy(string $filename, int $mode, bool $clearFirst = false): b $idMaps = []; - if (defined('STDERR')) { + if (defined('STDERR') && $verbose) { fwrite(STDERR, "Start SQL copy…\n"); } @@ -397,11 +397,11 @@ public function dbCopy(string $filename, int $mode, bool $clearFirst = false): b return self::stdError($error); } } - if ($n % 100 === 1 && defined('STDERR')) { //Display progression + if ($n % 100 === 1 && defined('STDERR') && $verbose) { //Display progression fwrite(STDERR, "\033[0G" . $n . '/' . $nbEntries); } } - if (defined('STDERR')) { + if (defined('STDERR') && $verbose) { fwrite(STDERR, "\033[0G" . $n . '/' . $nbEntries . "\n"); } $entryTo->commit(); diff --git a/cli/README.md b/cli/README.md index 366f456d585..22db8895708 100644 --- a/cli/README.md +++ b/cli/README.md @@ -123,6 +123,7 @@ cd /usr/share/FreshRSS ./cli/db-backup.php # Back-up all users respective database to `data/users/*/backup.sqlite` +# -q, --quiet suppress non-error messages ./cli/db-restore.php --delete-backup --force-overwrite # Restore all users respective database from `data/users/*/backup.sqlite` diff --git a/cli/db-backup.php b/cli/db-backup.php index 290b5cc7bee..8f8fda2b164 100755 --- a/cli/db-backup.php +++ b/cli/db-backup.php @@ -6,15 +6,31 @@ performRequirementCheck(FreshRSS_Context::systemConf()->db['type'] ?? ''); $ok = true; +$cliOptions = new class extends CliOptionsParser { + public string $quiet; + + public function __construct() { + $this->addOption('quiet', (new CliOption('quiet', 'q'))->withValueNone()); + parent::__construct(); + } +}; + +if (!empty($cliOptions->errors)) { + fail('FreshRSS error: ' . array_shift($cliOptions->errors) . "\n" . $cliOptions->usage); +} + foreach (listUsers() as $username) { $username = cliInitUser($username); $filename = DATA_PATH . '/users/' . $username . '/backup.sqlite'; @unlink($filename); + $verbose = !isset($cliOptions->quiet); - echo 'FreshRSS backup database to SQLite for user “', $username, "”…\n"; + if ($verbose) { + echo 'FreshRSS backup database to SQLite for user “', $username, "”…\n"; + } $databaseDAO = FreshRSS_Factory::createDatabaseDAO($username); - $ok &= $databaseDAO->dbCopy($filename, FreshRSS_DatabaseDAO::SQLITE_EXPORT); + $ok &= $databaseDAO->dbCopy($filename, FreshRSS_DatabaseDAO::SQLITE_EXPORT, false, $verbose); } done((bool)$ok); From de477e15eca72d9e4d9dd99c0c694dc52500d4d5 Mon Sep 17 00:00:00 2001 From: hkcomori Date: Sat, 29 Jun 2024 17:40:44 +0900 Subject: [PATCH 1186/2479] Update CREDITS.md (#6599) Add hkcomori as a contributor --- CREDITS.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CREDITS.md b/CREDITS.md index b04ffb9200b..dfcfb6f8927 100644 --- a/CREDITS.md +++ b/CREDITS.md @@ -91,6 +91,7 @@ People are sorted by name so please keep this order. * [Harshad Hirapara](https://github.com/harshad389): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:harshad389) * [hesch](https://github.com/hesch): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:hesch) * [Hippolyte Thomas](https://github.com/hippothomas): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:hippothomas), [Web](https://hippolyte-thomas.fr/) +* [hkcomori](https://github.com/hkcomori): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:hkcomori) * [hoilc](https://github.com/hoilc): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:hoilc) * [ibiruai](https://github.com/ibiruai): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:ibiruai) * [id-konstantin-stepanov](https://github.com/id-konstantin-stepanov): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:id-konstantin-stepanov) From 7aa3d9f87309620b54dc9ff5f726dc22d1e6ea0c Mon Sep 17 00:00:00 2001 From: maTh <1645099+math-GH@users.noreply.github.com> Date: Mon, 1 Jul 2024 01:13:54 +0200 Subject: [PATCH 1187/2479] New: Sharing articles from the article title line (#6395) * enable option * Update entry_header.phtml * frss.css * fix print sharing * Light refactoring * fix --------- Co-authored-by: Alexandre Alapetite --- app/Controllers/configureController.php | 1 + app/Models/UserConfiguration.php | 1 + app/views/configure/display.phtml | 4 +- .../helpers/index/normal/entry_bottom.phtml | 34 +---------------- .../helpers/index/normal/entry_header.phtml | 13 +++++++ .../index/normal/entry_share_menu.phtml | 37 +++++++++++++++++++ config-user.default.php | 1 + p/scripts/main.js | 23 +++++++++--- p/themes/base-theme/frss.css | 2 + p/themes/base-theme/frss.rtl.css | 2 + 10 files changed, 79 insertions(+), 39 deletions(-) create mode 100644 app/views/helpers/index/normal/entry_share_menu.phtml diff --git a/app/Controllers/configureController.php b/app/Controllers/configureController.php index 7707870219e..2ccc6fe4276 100644 --- a/app/Controllers/configureController.php +++ b/app/Controllers/configureController.php @@ -52,6 +52,7 @@ public function displayAction(): void { FreshRSS_Context::userConf()->content_width = Minz_Request::paramString('content_width') ?: 'thin'; FreshRSS_Context::userConf()->topline_read = Minz_Request::paramBoolean('topline_read'); FreshRSS_Context::userConf()->topline_favorite = Minz_Request::paramBoolean('topline_favorite'); + FreshRSS_Context::userConf()->topline_sharing = Minz_Request::paramBoolean('topline_sharing'); FreshRSS_Context::userConf()->topline_date = Minz_Request::paramBoolean('topline_date'); FreshRSS_Context::userConf()->topline_link = Minz_Request::paramBoolean('topline_link'); FreshRSS_Context::userConf()->topline_website = Minz_Request::paramString('topline_website'); diff --git a/app/Models/UserConfiguration.php b/app/Models/UserConfiguration.php index 938c2ed270a..b46df4d78ab 100644 --- a/app/Models/UserConfiguration.php +++ b/app/Models/UserConfiguration.php @@ -61,6 +61,7 @@ * @property bool $topline_date * @property bool $topline_display_authors * @property bool $topline_favorite + * @property bool $topline_sharing * @property bool $topline_link * @property bool $topline_read * @property bool $topline_summary diff --git a/app/views/configure/display.phtml b/app/views/configure/display.phtml index ce140c4396a..9584f37ea08 100644 --- a/app/views/configure/display.phtml +++ b/app/views/configure/display.phtml @@ -212,7 +212,9 @@ data-leave-validation="topline_favorite ?>" /> - + topline_sharing ? ' checked="checked"' : '' ?> + data-leave-validation="topline_sharing ?>" /> topline_summary ? 'checked="checked"' : '' ?> data-leave-validation="topline_summary ?>" /> diff --git a/app/views/helpers/index/normal/entry_bottom.phtml b/app/views/helpers/index/normal/entry_bottom.phtml index 21bd1d355ff..f8cf0eda3a4 100644 --- a/app/views/helpers/index/normal/entry_bottom.phtml +++ b/app/views/helpers/index/normal/entry_bottom.phtml @@ -76,39 +76,7 @@ - - + renderHelper('index/normal/entry_share_menu'); ?>
    diff --git a/app/views/helpers/index/normal/entry_header.phtml b/app/views/helpers/index/normal/entry_header.phtml index e4befb3465e..bcd4a7c98fa 100644 --- a/app/views/helpers/index/normal/entry_header.phtml +++ b/app/views/helpers/index/normal/entry_header.phtml @@ -3,6 +3,7 @@ /** @var FreshRSS_View $this */ $topline_read = FreshRSS_Context::userConf()->topline_read; $topline_favorite = FreshRSS_Context::userConf()->topline_favorite; + $topline_sharing = FreshRSS_Context::userConf()->topline_sharing; $topline_website = FreshRSS_Context::userConf()->topline_website; $topline_thumbnail = FreshRSS_Context::userConf()->topline_thumbnail; $topline_summary = FreshRSS_Context::userConf()->topline_summary; @@ -72,6 +73,18 @@ endif; ?>   + + + diff --git a/app/views/helpers/index/normal/entry_share_menu.phtml b/app/views/helpers/index/normal/entry_share_menu.phtml new file mode 100644 index 00000000000..62d1f524442 --- /dev/null +++ b/app/views/helpers/index/normal/entry_share_menu.phtml @@ -0,0 +1,37 @@ + + diff --git a/config-user.default.php b/config-user.default.php index b6268987386..af48f61b8f8 100644 --- a/config-user.default.php +++ b/config-user.default.php @@ -102,6 +102,7 @@ 'topline_read' => true, 'topline_favorite' => true, + 'topline_sharing' => false, 'topline_website' => 'full', 'topline_thumbnail' => 'none', 'topline_summary' => false, diff --git a/p/scripts/main.js b/p/scripts/main.js index 2bc0f5337dc..5690eb53269 100644 --- a/p/scripts/main.js +++ b/p/scripts/main.js @@ -402,6 +402,13 @@ function mark_favorite(div) { const freshrssOpenArticleEvent = document.createEvent('Event'); freshrssOpenArticleEvent.initEvent('freshrss:openArticle', true, true); +function loadLazyImages(rootElement) { + rootElement.querySelectorAll('img[data-original], iframe[data-original]').forEach(function (el) { + el.src = el.getAttribute('data-original'); + el.removeAttribute('data-original'); + }); +} + function toggleContent(new_active, old_active, skipping) { // If skipping, move current without activating or marking as read if (!new_active) { @@ -409,10 +416,7 @@ function toggleContent(new_active, old_active, skipping) { } if (context.does_lazyload && !skipping) { - new_active.querySelectorAll('img[data-original], iframe[data-original]').forEach(function (el) { - el.src = el.getAttribute('data-original'); - el.removeAttribute('data-original'); - }); + loadLazyImages(new_active); } if (old_active !== new_active) { @@ -1101,7 +1105,16 @@ function init_stream(stream) { for (let i = 0; i < document.styleSheets.length; i++) { tmp_window.document.writeln(''); } - tmp_window.document.writeln(el.closest('.flux_content').querySelector('.content').innerHTML); + const flux_content = el.closest('.flux_content'); + let content_el = null; + if (flux_content) { + content_el = el.closest('.flux_content').querySelector('.content'); + } + if (content_el === null) { + content_el = el.closest('.flux').querySelector('.flux_content .content'); + } + loadLazyImages(content_el); + tmp_window.document.writeln(content_el.innerHTML); tmp_window.document.close(); tmp_window.focus(); tmp_window.print(); diff --git a/p/themes/base-theme/frss.css b/p/themes/base-theme/frss.css index 77393bd42b4..18da5a4ce5f 100644 --- a/p/themes/base-theme/frss.css +++ b/p/themes/base-theme/frss.css @@ -1257,12 +1257,14 @@ input[type="search"] { .flux .flux_header .item.manage .item-element, .flux .flux_header .item.website .item-element, +.flux .flux_header .item.share .dropdown-toggle, .flux .flux_header .item.link .item-element { padding-left: var(--frss-padding-flux-items); padding-right: var(--frss-padding-flux-items); } .flux .item.manage, +.flux .flux_header > .item.share, .flux .item.link { width: calc(1rem + 2 * var(--frss-padding-flux-items)); } diff --git a/p/themes/base-theme/frss.rtl.css b/p/themes/base-theme/frss.rtl.css index b73d8c2eb4d..a79684f81ac 100644 --- a/p/themes/base-theme/frss.rtl.css +++ b/p/themes/base-theme/frss.rtl.css @@ -1257,12 +1257,14 @@ input[type="search"] { .flux .flux_header .item.manage .item-element, .flux .flux_header .item.website .item-element, +.flux .flux_header .item.share .dropdown-toggle, .flux .flux_header .item.link .item-element { padding-right: var(--frss-padding-flux-items); padding-left: var(--frss-padding-flux-items); } .flux .item.manage, +.flux .flux_header > .item.share, .flux .item.link { width: calc(1rem + 2 * var(--frss-padding-flux-items)); } From d7806a35b461552f648725598209fe6a37bea481 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 1 Jul 2024 23:34:45 +0200 Subject: [PATCH 1188/2479] Bump phpstan/phpstan from 1.11.4 to 1.11.6 (#6606) Bumps [phpstan/phpstan](https://github.com/phpstan/phpstan) from 1.11.4 to 1.11.6. - [Release notes](https://github.com/phpstan/phpstan/releases) - [Changelog](https://github.com/phpstan/phpstan/blob/1.11.x/CHANGELOG.md) - [Commits](https://github.com/phpstan/phpstan/compare/1.11.4...1.11.6) --- updated-dependencies: - dependency-name: phpstan/phpstan dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- composer.lock | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/composer.lock b/composer.lock index 1b21112a21c..7ad7f63b893 100644 --- a/composer.lock +++ b/composer.lock @@ -314,16 +314,16 @@ }, { "name": "phpstan/phpstan", - "version": "1.11.4", + "version": "1.11.6", "source": { "type": "git", "url": "https://github.com/phpstan/phpstan.git", - "reference": "9100a76ce8015b9aa7125b9171ae3a76887b6c82" + "reference": "6ac78f1165346c83b4a753f7e4186d969c6ad0ee" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/9100a76ce8015b9aa7125b9171ae3a76887b6c82", - "reference": "9100a76ce8015b9aa7125b9171ae3a76887b6c82", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/6ac78f1165346c83b4a753f7e4186d969c6ad0ee", + "reference": "6ac78f1165346c83b4a753f7e4186d969c6ad0ee", "shasum": "" }, "require": { @@ -368,7 +368,7 @@ "type": "github" } ], - "time": "2024-06-06T12:19:22+00:00" + "time": "2024-07-01T15:33:06+00:00" }, { "name": "phpstan/phpstan-phpunit", From b533af1a8e68d40b4a23288412d58af1c4ae9d25 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 1 Jul 2024 23:36:28 +0200 Subject: [PATCH 1189/2479] Bump sass from 1.77.4 to 1.77.6 (#6605) Bumps [sass](https://github.com/sass/dart-sass) from 1.77.4 to 1.77.6. - [Release notes](https://github.com/sass/dart-sass/releases) - [Changelog](https://github.com/sass/dart-sass/blob/main/CHANGELOG.md) - [Commits](https://github.com/sass/dart-sass/compare/1.77.4...1.77.6) --- updated-dependencies: - dependency-name: sass dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index bbd4ec79929..458f764928e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -15,7 +15,7 @@ "eslint-plugin-promise": "^6.1.1", "markdownlint-cli": "^0.41.0", "rtlcss": "^4.1.1", - "sass": "^1.77.4", + "sass": "^1.77.6", "stylelint": "^16.6.1", "stylelint-config-recommended-scss": "^14.0.0", "stylelint-order": "^6.0.4" @@ -3595,9 +3595,9 @@ } }, "node_modules/sass": { - "version": "1.77.4", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.77.4.tgz", - "integrity": "sha512-vcF3Ckow6g939GMA4PeU7b2K/9FALXk2KF9J87txdHzXbUF9XRQRwSxcAs/fGaTnJeBFd7UoV22j3lzMLdM0Pw==", + "version": "1.77.6", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.77.6.tgz", + "integrity": "sha512-ByXE1oLD79GVq9Ht1PeHWCPMPB8XHpBuz1r85oByKHjZY6qV6rWnQovQzXJXuQ/XyE1Oj3iPk3lo28uzaRA2/Q==", "dev": true, "dependencies": { "chokidar": ">=3.0.0 <4.0.0", diff --git a/package.json b/package.json index d0041fe435c..c5a963f9ff9 100644 --- a/package.json +++ b/package.json @@ -40,7 +40,7 @@ "eslint-plugin-promise": "^6.1.1", "markdownlint-cli": "^0.41.0", "rtlcss": "^4.1.1", - "sass": "^1.77.4", + "sass": "^1.77.6", "stylelint": "^16.6.1", "stylelint-config-recommended-scss": "^14.0.0", "stylelint-order": "^6.0.4", From 8ae95055dce9935ec32fb986417f4c5703a32bf9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 1 Jul 2024 23:37:11 +0200 Subject: [PATCH 1190/2479] Bump docker/build-push-action from 5 to 6 (#6604) Bumps [docker/build-push-action](https://github.com/docker/build-push-action) from 5 to 6. - [Release notes](https://github.com/docker/build-push-action/releases) - [Commits](https://github.com/docker/build-push-action/compare/v5...v6) --- updated-dependencies: - dependency-name: docker/build-push-action dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/docker-publish.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/docker-publish.yml b/.github/workflows/docker-publish.yml index 1ebd3656032..1df5203c39c 100644 --- a/.github/workflows/docker-publish.yml +++ b/.github/workflows/docker-publish.yml @@ -81,7 +81,7 @@ jobs: # password: ${{ secrets.GITHUB_TOKEN }} - name: Build and push Docker images - uses: docker/build-push-action@v5 + uses: docker/build-push-action@v6 with: file: ${{ matrix.file }} platforms: linux/amd64,linux/arm/v7,linux/arm64 From 4738ca851207f07bdfc409ecb16d3fc754e5bf48 Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Mon, 8 Jul 2024 11:05:58 +0200 Subject: [PATCH 1191/2479] Fix for disabled logged-in users (#6612) fix https://github.com/FreshRSS/FreshRSS/issues/6611 Logged-in users were still able to use their account for some time despite having being disabled by admin --- app/Models/Auth.php | 17 +++++++++-------- p/api/query.php | 2 +- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/app/Models/Auth.php b/app/Models/Auth.php index ecb8ead2fd6..416f3061d12 100644 --- a/app/Models/Auth.php +++ b/app/Models/Auth.php @@ -31,15 +31,16 @@ public static function init(): bool { ]); } - if (self::$login_ok) { - self::giveAccess(); - } elseif (self::accessControl() && self::giveAccess()) { + if (self::$login_ok && self::giveAccess()) { + return self::$login_ok; + } + if (self::accessControl() && self::giveAccess()) { FreshRSS_UserDAO::touch(); - } else { - // Be sure all accesses are removed! - self::removeAccess(); + return self::$login_ok; } - return self::$login_ok; + // Be sure all accesses are removed! + self::removeAccess(); + return false; } /** @@ -103,7 +104,7 @@ private static function accessControl(): bool { */ public static function giveAccess(): bool { FreshRSS_Context::initUser(); - if (!FreshRSS_Context::hasUserConf()) { + if (!FreshRSS_Context::hasUserConf() || !FreshRSS_Context::userConf()->enabled) { self::$login_ok = false; return false; } diff --git a/p/api/query.php b/p/api/query.php index c95a2bf4363..7d74f23138e 100644 --- a/p/api/query.php +++ b/p/api/query.php @@ -36,7 +36,7 @@ } FreshRSS_Context::initUser($user); -if (!FreshRSS_Context::hasUserConf()) { +if (!FreshRSS_Context::hasUserConf() || !FreshRSS_Context::userConf()->enabled) { usleep(rand(100, 10000)); //Primitive mitigation of scanning for users header('HTTP/1.1 404 Not Found'); header('Content-Type: text/plain; charset=UTF-8'); From 5a5ccc94f39d5207a5c4be2523b4bcf4e87d9457 Mon Sep 17 00:00:00 2001 From: maTh <1645099+math-GH@users.noreply.github.com> Date: Mon, 8 Jul 2024 11:32:19 +0200 Subject: [PATCH 1192/2479] Improve aside feed bar (#6446) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * delete theme BlueLagoon * delete theme Screwdriver * phpstan level 7 for feedController.php (#5373) * phpstan level 7 for feedController.php * phpstan level 7 for feedController.php * phpstan level 7 for feedController.php * phpstan level 7 for feedController.php * A few fixes --------- Co-authored-by: Luc Co-authored-by: Alexandre Alapetite * phpstan level 7 for updateController.php (#5376) * phpstan level 7 for updateController.php * phpstan level 7 for updateController.php * Minor array syntax --------- Co-authored-by: Luc Co-authored-by: Alexandre Alapetite * docs: language table added (#5375) * docs: language table added * Update 05_Configuration.md * Update 05_Configuration.md * french docs * Unicode quote and a few fixes (Same search&replace aslo applied to a few other files) --------- Co-authored-by: Alexandre Alapetite * Share in anonymous mode (#5261) #fix https://github.com/FreshRSS/FreshRSS/issues/5248 Co-authored-by: maTh * Minor development config fixes (#5379) * Add compatibility with MacOS for `paste` command * Addition to .editorconfig * Fix markAsReadUponGone (#5382) Fix regression from https://github.com/FreshRSS/FreshRSS/pull/5315 which indroduced a bug for cached feeds. We now update the `lastSeen` property of entries to account for the fact that they are unchanged but still existing. * phpstan level 7 for indexController.php (#5384) Co-authored-by: Luc * Improved: "Mark an article as read…" text area. Added a link to the documentation (#5349) * i18n * Update sub.php * Update app/i18n/fr/sub.php Co-authored-by: Alexandre Alapetite * fix target="_blank" --------- Co-authored-by: Alexandre Alapetite * Update Docker image Alpine 3.18 (#5383) https://alpinelinux.org/posts/Alpine-3.18.0-released.html Minor updates with Apache 2.4.57 and PHP 8.1.19 * Docs: delete 04_Changing_source_code.md (#5391) * delete 04_Changing_source_code.md * make pot --------- Co-authored-by: Alexandre Alapetite * Typed view model classes (#5380) * Typed view model classes * Add ability to provide a typed view model class to a controller * Use `::class` instead of string for referring to classes * Examplified with `stats` and `javascript` controllers / views (more to do) * Also useful for extensions (my usecase today), which did not have the ability to define own view model attributes before. * Typo * A few additional PHPStan rules (#5388) A subset of https://github.com/phpstan/phpstan-strict-rules * Improved: Install process: give more infos (#5350) * comments added for each step * infos about FreshRSS added in first step * Remove reference to Kriss and Leed from install page I do not find that informative, and quite confusing. Moved to readme instead. --------- Co-authored-by: Alexandre Alapetite * PHPMailer 6.8.0 (#5389) * PHPMailer 6.8.0 https://github.com/PHPMailer/PHPMailer/releases/tag/v6.8.0 https://github.com/PHPMailer/PHPMailer/releases * Exclude unused DSNConfigurator * fix: docs: array syntax (#5392) * Link configuration to proper parameter (#5394) Before, the system configuration was linked to the user parameter while the user configuration was linked to the system parameter. This was an issue when trying to retrieve some kind of configuration value in an extension. Now, the configurations are properly linked to their parameters. * PHPStan Level 7 for Share userController logs_pagination (#5393) * fix: "for" attribute in config display (#5398) * move darkMode_auto from body to html root (#5397) * CSS: refactor of a.btn (#5401) * Fix logs pagination (#5403) * Fix logs pagination Regression from https://github.com/FreshRSS/FreshRSS/pull/5269 * Add better default * PHPStan Level 7 for Minz_Request, FreshRSS_Feed, Minz_Error (#5400) * PHPStan Level 7 for Minz_Request * PHPStan Level 7 for FreshRSS_Feed * PHPStan Level 7 for Minz_Error * Fix again updateLastSeenUnchanged (#5404) * Fix again updateLastSeenUnchanged https://github.com/FreshRSS/FreshRSS/pull/5382 was not good enough to fix markAsReadUponGone and introduced a regression in `entry.lastSeen`. New approach. Follow-up of https://github.com/FreshRSS/FreshRSS/pull/5315 * Minor change of mind * Fix handling of lastSeen entry.lastSeen was not always correctly initialised, and sometimes overriden * Remove debug line Forgotten from https://github.com/FreshRSS/FreshRSS/pull/5404 * Avoid falsy guid (#5412) Whitespace strings, empty strings, 0 are all problematic when working with GUIDs. so avoid them. * PHPStan Level 7 complete (#5406) * PHPStan Level 7 complete * Start PHPStan Level 8 * Forgot exclude .phtml * Fix favicon fetching while using proxies (#5421) * Fix favicon fetching while using proxies This ensures that if curl_options are defined in config.php, those settings are respected while fetching favicons. Fixes FreshRSS#4951 * Change options priority * Credits keep alphabticorder --------- Co-authored-by: Alexandre Alapetite * Fixed: i18n extensions: 'en' as fallback (#5426) * Update Translate.php * Small improvements --------- Co-authored-by: Alexandre Alapetite * Improve Dev Container (#5423) * Improve Dev Container PHPStan was failing in Dev Container * Update Docker to Alpine Linux 3.18 * New DATA_PATH environment variable * README * Update of Spanish translation (#5408) * Update admin.php Update Spanish * Update conf.php Spanish update * Fix --------- Co-authored-by: Alexandre Alapetite * Linkding share now passes title #5432 (#5433) * phpstan-8 typehinting (#5429) Co-authored-by: Luc * Forgotten debug line https://github.com/FreshRSS/FreshRSS/pull/5404 * phpstan-9 for Share.php (#5431) * phpstan 9 for Search.php phpstan 9 for Share.php * phpstan-9 for Search.php * Better consistency for search results --------- Co-authored-by: Luc Co-authored-by: Alexandre Alapetite * Pull request of spanish translation (#5436) * Update sub.php Update spanish translation * Update conf.php Update Spanish translation * Update gen.php Update spanish translation * Update index.php Update spanish translation * Update admin.php update spanish translation * Fix ignore --------- Co-authored-by: Alexandre Alapetite * improved background colors (#5437) * phpstan-8 for category class (#5434) * phpstan-8 for category class * Another approach to nullable https://github.com/FreshRSS/FreshRSS/pull/5434#discussion_r1210776699 --------- Co-authored-by: Luc Co-authored-by: Alexandre Alapetite * Docker example of PostgreSQL tuning (#5446) Provide example of how to easily tune selected PostgreSQL settings https://wiki.postgresql.org/wiki/Tuning_Your_PostgreSQL_Server * Update SECURITY.md (#5448) Link to GitHub security advisory process + PGP key * fix: new article banner in Ansum/mapco theme (#5453) * fix * rtl * Update dark theme css to lower brightness to all icons (#5439) * Update dark.css to lower brightness to all icons * Update dark.rtl.css to lower brightness to all icons * re-add p.help .icon * re-add p.help .icon * Remove core extensions Google Groups and Tumblr (#5457) * Remove core extensions Google Groups and Tumblr * Google Groups seems to have remove support for RSS/ATOM https://github.com/FreshRSS/FreshRSS/pull/2838 (see e.g. https://www.theregister.com/2021/08/16/google_groups_rss/ ) * Tumblr seems to have fixed their RSS/ATOM post-GDPR https://github.com/FreshRSS/FreshRSS/pull/1924 So for both of thems, the extensions have become irrelevant. * Cleaning * Clarify that maximum number to keep is per feed (#5458) * Clarify that maximum number to keep is per feed Signed-off-by: Christian König * Append //DIRTY Signed-off-by: Christian König * make fix-all * Revert wrong whitespace * Amend Credits.md Signed-off-by: Christian König --------- Signed-off-by: Christian König Co-authored-by: Alexandre Alapetite * Add OpenID Connect (#5351) * Add OIDC * Update documentation. * Update apache conf adding IfModule * Use IfDefine for OIDC in apache conf * Fix non-oidc support * Fix typing * Use IfDefine to enable OIDC * Add OIDC support to all dockerfiles * Re add apache Require option * Fixes and documentation * A few more fixes * A bit more doc * Change type of environment variable * Update readme * Correct apache config for OIDC support. * Fix README formatting * Update oidc control path * Fix oidc endpoint being cached * A bit more review * Simplify ExpiresActive * Add session refresh and improve caching * Allow more different setups * A bit more documentation * A bit more readme --------- Co-authored-by: Aaron Schif Co-authored-by: Alexandre Alapetite Co-authored-by: maTh * Fix OpenID Connect crash on ARM (#5463) Only enable the Apache auth_openidc module when actually used Fix https://github.com/FreshRSS/FreshRSS/issues/5460 Follow-up of https://github.com/FreshRSS/FreshRSS/pull/5351 * Readme minor typo * Fix: conf.php (German i18n) (#5468) * Improved: update page (#5420) * prependTitle() * do not need the "damn" in the alert * update page layout improved * release channel * i18n labels * add log messages while updating * Delete updatee.php * Update updateController.php * Update updateController.php * Update updateController.php * Update updateController.php * add getCurrentGitBranch() * Update updateController.php * state2 buttons * i18n * loading * Update feedback.php * Update feedback.php * Update feedback.php * Update extra.js * Apply suggestions from code review Co-authored-by: Luc SANCHEZ <4697568+ColonelMoutarde@users.noreply.github.com> * Update updateController.php * Update terminology * update button is now armed --------- Co-authored-by: Luc SANCHEZ <4697568+ColonelMoutarde@users.noreply.github.com> Co-authored-by: Alexandre Alapetite * Allow deep link to extension configuration (#5449) * Allow deep link to extension configuration Full screen * Support slider * Add aside_configure Fix https://github.com/FreshRSS/FreshRSS/pull/5449#issuecomment-1588089769 * category title improved * Feed title: better HTML structure + have a correct semantic * feed title: CSS * feed title special cases * improved feed mouseover titles * cog icon half transparent. Shining while hovering * i18n labels * improve hover of more menu * Update gen.php * fix * i18n: fr --------- Signed-off-by: Christian König Co-authored-by: Luc SANCHEZ <4697568+ColonelMoutarde@users.noreply.github.com> Co-authored-by: Luc Co-authored-by: Alexandre Alapetite Co-authored-by: Alexis Degrugillier Co-authored-by: vrachnis Co-authored-by: LleanaRuv <133794633+LleanaRuv@users.noreply.github.com> Co-authored-by: acbgbca <60839662+acbgbca@users.noreply.github.com> Co-authored-by: Alwaysin Co-authored-by: yubiuser Co-authored-by: Aaron Schif Co-authored-by: Aaron Schif Co-authored-by: math-gh <> --- app/i18n/cs/gen.php | 3 ++ app/i18n/cs/sub.php | 8 +++- app/i18n/de/gen.php | 3 ++ app/i18n/de/sub.php | 8 +++- app/i18n/el/gen.php | 3 ++ app/i18n/el/sub.php | 8 +++- app/i18n/en-us/gen.php | 3 ++ app/i18n/en-us/sub.php | 8 +++- app/i18n/en/gen.php | 3 ++ app/i18n/en/sub.php | 8 +++- app/i18n/es/gen.php | 3 ++ app/i18n/es/sub.php | 8 +++- app/i18n/fa/gen.php | 3 ++ app/i18n/fa/sub.php | 8 +++- app/i18n/fr/gen.php | 3 ++ app/i18n/fr/sub.php | 8 +++- app/i18n/he/gen.php | 3 ++ app/i18n/he/sub.php | 8 +++- app/i18n/hu/gen.php | 3 ++ app/i18n/hu/sub.php | 8 +++- app/i18n/id/gen.php | 3 ++ app/i18n/id/sub.php | 8 +++- app/i18n/it/gen.php | 3 ++ app/i18n/it/sub.php | 8 +++- app/i18n/ja/gen.php | 3 ++ app/i18n/ja/sub.php | 8 +++- app/i18n/ko/gen.php | 3 ++ app/i18n/ko/sub.php | 8 +++- app/i18n/lv/gen.php | 3 ++ app/i18n/lv/sub.php | 8 +++- app/i18n/nl/gen.php | 3 ++ app/i18n/nl/sub.php | 8 +++- app/i18n/oc/gen.php | 3 ++ app/i18n/oc/sub.php | 8 +++- app/i18n/pl/gen.php | 3 ++ app/i18n/pl/sub.php | 8 +++- app/i18n/pt-br/gen.php | 3 ++ app/i18n/pt-br/sub.php | 8 +++- app/i18n/ru/gen.php | 3 ++ app/i18n/ru/sub.php | 8 +++- app/i18n/sk/gen.php | 3 ++ app/i18n/sk/sub.php | 8 +++- app/i18n/tr/gen.php | 3 ++ app/i18n/tr/sub.php | 8 +++- app/i18n/zh-cn/gen.php | 3 ++ app/i18n/zh-cn/sub.php | 8 +++- app/i18n/zh-tw/gen.php | 3 ++ app/i18n/zh-tw/sub.php | 8 +++- app/layout/aside_feed.phtml | 39 ++++++++++------- p/scripts/main.js | 6 +-- p/themes/Origine/origine.css | 15 ++++++- p/themes/Origine/origine.rtl.css | 15 ++++++- p/themes/base-theme/frss.css | 72 ++++++++++++++++++++++++-------- p/themes/base-theme/frss.rtl.css | 72 ++++++++++++++++++++++++-------- 54 files changed, 402 insertions(+), 81 deletions(-) diff --git a/app/i18n/cs/gen.php b/app/i18n/cs/gen.php index 5cb56829c3c..9c3106e6598 100644 --- a/app/i18n/cs/gen.php +++ b/app/i18n/cs/gen.php @@ -29,6 +29,9 @@ 'load_default_shortcuts' => 'Načíst výchozí zkratky', 'manage' => 'Spravovat', 'mark_read' => 'Označit jako přečtené', + 'menu' => array( + 'open' => 'Open menu', // TODO + ), 'nav_buttons' => array( 'next' => 'Next article', // TODO 'prev' => 'Previous article', // TODO diff --git a/app/i18n/cs/sub.php b/app/i18n/cs/sub.php index 667bca949ad..c031e5efb5e 100644 --- a/app/i18n/cs/sub.php +++ b/app/i18n/cs/sub.php @@ -29,7 +29,9 @@ 'help' => 'Zadejte adresu URL na OPML soubor k dynamickému naplnění této kategorie RSS kanály', ), 'empty' => 'Vyprázdit kategorii', + 'expand' => 'Expand category', // TODO 'information' => 'Informace', + 'open' => 'Open category', // TODO 'opml_url' => 'ADRESA URL OPML', 'position' => 'Zobrazit pozici', 'position_help' => 'Pro ovládání pořadí řazení kategorií', @@ -183,9 +185,13 @@ 'method_help' => 'Payload metody POST má automatickou podporu pro application/x-www-form-urlencoded a application/json', 'method_postparams' => 'Payload pro metodu POST', 'moved_category_deleted' => 'Když odstraníte kategorii, její kanály jsou automaticky přesunuty do %s.', - 'mute' => 'ztlumit', + 'mute' => array( + '_' => 'ztlumit', + 'state_is_muted' => 'This feed is muted', // TODO + ), 'no_selected' => 'Nejsou vybrány žádné kanály.', 'number_entries' => '%d článků', + 'open_feed' => 'Open feed %s', // TODO 'priority' => array( '_' => 'Viditelnost', 'archived' => 'Nezobrazovat (archivováno)', diff --git a/app/i18n/de/gen.php b/app/i18n/de/gen.php index 8cb974039c4..4e59553fe32 100644 --- a/app/i18n/de/gen.php +++ b/app/i18n/de/gen.php @@ -29,6 +29,9 @@ 'load_default_shortcuts' => 'Standard-Kürzel laden', 'manage' => 'Verwalten', 'mark_read' => 'Als gelesen markieren', + 'menu' => array( + 'open' => 'Menü öffnen', + ), 'nav_buttons' => array( 'next' => 'Nächster Artikel', 'prev' => 'Vorheriger Artikel', diff --git a/app/i18n/de/sub.php b/app/i18n/de/sub.php index e791cc951e1..ad622d91196 100644 --- a/app/i18n/de/sub.php +++ b/app/i18n/de/sub.php @@ -29,7 +29,9 @@ 'help' => 'URL zu einer OPML Datei, um die Kategorie dynamisch mit Feeds zu befüllen', ), 'empty' => 'Leere Kategorie', + 'expand' => 'Kategory aufklappen', 'information' => 'Information', // IGNORE + 'open' => 'Kategory öffnen', 'opml_url' => 'OPML-Datei URL', 'position' => 'Reihenfolge', 'position_help' => 'Steuert die Kategoriesortierung', @@ -183,9 +185,13 @@ 'method_help' => 'Der POST-Payload unterstützt automatisch application/x-www-form-urlencoded und application/json', 'method_postparams' => 'Payload für POST', 'moved_category_deleted' => 'Wenn Sie eine Kategorie entfernen, werden deren Feeds automatisch in die Kategorie %s eingefügt.', - 'mute' => 'Stumm schalten', + 'mute' => array( + '_' => 'Stumm schalten', + 'state_is_muted' => 'Dieser Feed ist stummgeschaltet', + ), 'no_selected' => 'Kein Feed ausgewählt.', 'number_entries' => '%d Artikel', + 'open_feed' => 'Feed %s öffnen', 'priority' => array( '_' => 'Sichtbarkeit', 'archived' => 'Nicht anzeigen (archiviert)', diff --git a/app/i18n/el/gen.php b/app/i18n/el/gen.php index 99abffc888e..1798f2084cc 100644 --- a/app/i18n/el/gen.php +++ b/app/i18n/el/gen.php @@ -29,6 +29,9 @@ 'load_default_shortcuts' => 'Load default shortcuts', // TODO 'manage' => 'Manage', // TODO 'mark_read' => 'Mark as read', // TODO + 'menu' => array( + 'open' => 'Open menu', // TODO + ), 'nav_buttons' => array( 'next' => 'Next article', // TODO 'prev' => 'Previous article', // TODO diff --git a/app/i18n/el/sub.php b/app/i18n/el/sub.php index 046f60a84c3..b5bcc2ebadf 100644 --- a/app/i18n/el/sub.php +++ b/app/i18n/el/sub.php @@ -29,7 +29,9 @@ 'help' => 'Provide the URL to an OPML file to dynamically populate this category with feeds', // TODO ), 'empty' => 'Empty category', // TODO + 'expand' => 'Expand category', // TODO 'information' => 'Information', // TODO + 'open' => 'Open category', // TODO 'opml_url' => 'OPML URL', // TODO 'position' => 'Display position', // TODO 'position_help' => 'To control category sort order', // TODO @@ -183,9 +185,13 @@ 'method_help' => 'The POST payload has automatic support for application/x-www-form-urlencoded and application/json', // TODO 'method_postparams' => 'Payload for POST', // TODO 'moved_category_deleted' => 'When you delete a category, its feeds are automatically classified under %s.', // TODO - 'mute' => 'mute', // TODO + 'mute' => array( + '_' => 'mute', // TODO + 'state_is_muted' => 'This feed is muted', // TODO + ), 'no_selected' => 'No feed selected.', // TODO 'number_entries' => '%d articles', // TODO + 'open_feed' => 'Open feed %s', // TODO 'priority' => array( '_' => 'Visibility', // TODO 'archived' => 'Do not show (archived)', // TODO diff --git a/app/i18n/en-us/gen.php b/app/i18n/en-us/gen.php index cad075f548b..8bb101ca3c6 100644 --- a/app/i18n/en-us/gen.php +++ b/app/i18n/en-us/gen.php @@ -29,6 +29,9 @@ 'load_default_shortcuts' => 'Load default shortcuts', // IGNORE 'manage' => 'Manage', // IGNORE 'mark_read' => 'Mark as read', // IGNORE + 'menu' => array( + 'open' => 'Open menu', // IGNORE + ), 'nav_buttons' => array( 'next' => 'Next article', // IGNORE 'prev' => 'Previous article', // IGNORE diff --git a/app/i18n/en-us/sub.php b/app/i18n/en-us/sub.php index 714b7d433f1..057f5158c36 100644 --- a/app/i18n/en-us/sub.php +++ b/app/i18n/en-us/sub.php @@ -29,7 +29,9 @@ 'help' => 'Provide the URL to an OPML file to dynamically populate this category with feeds', // IGNORE ), 'empty' => 'Empty category', // IGNORE + 'expand' => 'Expand category', // IGNORE 'information' => 'Information', // IGNORE + 'open' => 'Open category', // IGNORE 'opml_url' => 'OPML URL', // IGNORE 'position' => 'Display position', // IGNORE 'position_help' => 'To control category sort order', // IGNORE @@ -183,9 +185,13 @@ 'method_help' => 'The POST payload has automatic support for application/x-www-form-urlencoded and application/json', // IGNORE 'method_postparams' => 'Payload for POST', // IGNORE 'moved_category_deleted' => 'When you delete a category, its feeds are automatically classified under %s.', // IGNORE - 'mute' => 'mute', // IGNORE + 'mute' => array( + '_' => 'mute', // IGNORE + 'state_is_muted' => 'This feed is muted', // IGNORE + ), 'no_selected' => 'No feed selected.', // IGNORE 'number_entries' => '%d articles', // IGNORE + 'open_feed' => 'Open feed %s', // IGNORE 'priority' => array( '_' => 'Visibility', // IGNORE 'archived' => 'Do not show (archived)', // IGNORE diff --git a/app/i18n/en/gen.php b/app/i18n/en/gen.php index 641569c23ef..a267d15fb11 100644 --- a/app/i18n/en/gen.php +++ b/app/i18n/en/gen.php @@ -29,6 +29,9 @@ 'load_default_shortcuts' => 'Load default shortcuts', 'manage' => 'Manage', 'mark_read' => 'Mark as read', + 'menu' => array( + 'open' => 'Open menu', + ), 'nav_buttons' => array( 'next' => 'Next article', // TODO 'prev' => 'Previous article', // TODO diff --git a/app/i18n/en/sub.php b/app/i18n/en/sub.php index 82f913a4e0f..9b3f9e9e8c2 100644 --- a/app/i18n/en/sub.php +++ b/app/i18n/en/sub.php @@ -29,7 +29,9 @@ 'help' => 'Provide the URL to an OPML file to dynamically populate this category with feeds', ), 'empty' => 'Empty category', + 'expand' => 'Expand category', 'information' => 'Information', + 'open' => 'Open category', 'opml_url' => 'OPML URL', 'position' => 'Display position', 'position_help' => 'To control category sort order', @@ -183,9 +185,13 @@ 'method_help' => 'The POST payload has automatic support for application/x-www-form-urlencoded and application/json', 'method_postparams' => 'Payload for POST', 'moved_category_deleted' => 'When you delete a category, its feeds are automatically classified under %s.', - 'mute' => 'mute', + 'mute' => array( + '_' => 'mute', + 'state_is_muted' => 'This feed is muted', + ), 'no_selected' => 'No feed selected.', 'number_entries' => '%d articles', + 'open_feed' => 'Open feed %s', 'priority' => array( '_' => 'Visibility', 'archived' => 'Do not show (archived)', diff --git a/app/i18n/es/gen.php b/app/i18n/es/gen.php index 0db02de3736..2a7d116de20 100644 --- a/app/i18n/es/gen.php +++ b/app/i18n/es/gen.php @@ -29,6 +29,9 @@ 'load_default_shortcuts' => 'Cargar accesos directos predeterminados', 'manage' => 'Administrar', 'mark_read' => 'Marcar como leído', + 'menu' => array( + 'open' => 'Open menu', // TODO + ), 'nav_buttons' => array( 'next' => 'Next article', // TODO 'prev' => 'Previous article', // TODO diff --git a/app/i18n/es/sub.php b/app/i18n/es/sub.php index 146f72ac256..ed0de211d95 100644 --- a/app/i18n/es/sub.php +++ b/app/i18n/es/sub.php @@ -29,7 +29,9 @@ 'help' => 'Provee la URL a un archivo OPML para llenar dinámicamente esta categoría con feeds', ), 'empty' => 'Vaciar categoría', + 'expand' => 'Expand category', // TODO 'information' => 'Información', + 'open' => 'Open category', // TODO 'opml_url' => 'URL del OPML', 'position' => 'Posición de visualización', 'position_help' => 'Para controlar el orden de clasificación de categorías', @@ -183,9 +185,13 @@ 'method_help' => 'La carga útil del POST tiene soporte automático para application/x-www-form-urlencoded y application/json', 'method_postparams' => 'Carga útil para POST', 'moved_category_deleted' => 'Al borrar una categoría todas sus fuentes pasan automáticamente a la categoría %s.', - 'mute' => 'silenciar', + 'mute' => array( + '_' => 'silenciar', + 'state_is_muted' => 'This feed is muted', // TODO + ), 'no_selected' => 'No hay funentes seleccionadas.', 'number_entries' => '%d artículos', + 'open_feed' => 'Open feed %s', // TODO 'priority' => array( '_' => 'Visibilidad', 'archived' => 'No mostrar (archivado)', diff --git a/app/i18n/fa/gen.php b/app/i18n/fa/gen.php index b92fd8e0b88..a9e5724cd28 100644 --- a/app/i18n/fa/gen.php +++ b/app/i18n/fa/gen.php @@ -29,6 +29,9 @@ 'load_default_shortcuts' => ' میانبرهای پیش فرض را بارگیری کنید', 'manage' => ' مدیریت', 'mark_read' => ' علامت گذاری به عنوان خوانده شده', + 'menu' => array( + 'open' => 'Open menu', // TODO + ), 'nav_buttons' => array( 'next' => 'Next article', // TODO 'prev' => 'Previous article', // TODO diff --git a/app/i18n/fa/sub.php b/app/i18n/fa/sub.php index ada4380aa92..735576e61b1 100644 --- a/app/i18n/fa/sub.php +++ b/app/i18n/fa/sub.php @@ -29,7 +29,9 @@ 'help' => ' URL را به فایل OPML ارائه دهید تا به صورت پویا این دسته با فیدها پر شود.', ), 'empty' => ' دسته خالی', + 'expand' => 'Expand category', // TODO 'information' => ' اطلاعات', + 'open' => 'Open category', // TODO 'opml_url' => ' URL OPML', 'position' => ' موقعیت نمایش', 'position_help' => ' برای کنترل ترتیب مرتب سازی دسته بندی', @@ -183,9 +185,13 @@ 'method_help' => 'The POST payload has automatic support for application/x-www-form-urlencoded and application/json', // TODO 'method_postparams' => 'Payload for POST', // TODO 'moved_category_deleted' => ' هنگامی که یک دسته را حذف می کنید', - 'mute' => ' بی صدا', + 'mute' => array( + '_' => ' بی صدا', + 'state_is_muted' => 'This feed is muted', // TODO + ), 'no_selected' => ' هیچ خوراکی انتخاب نشده است.', 'number_entries' => ' %d مقاله', + 'open_feed' => 'Open feed %s', // TODO 'priority' => array( '_' => ' دید', 'archived' => ' نشان داده نشود (بایگانی شده)', diff --git a/app/i18n/fr/gen.php b/app/i18n/fr/gen.php index e2d9c4dd868..ddc8a704db8 100644 --- a/app/i18n/fr/gen.php +++ b/app/i18n/fr/gen.php @@ -29,6 +29,9 @@ 'load_default_shortcuts' => 'Utiliser les raccourcis par défaut', 'manage' => 'Gérer', 'mark_read' => 'Marquer comme lu', + 'menu' => array( + 'open' => 'Ouvrir le menu', + ), 'nav_buttons' => array( 'next' => 'Article suivant', 'prev' => 'Article précédent', diff --git a/app/i18n/fr/sub.php b/app/i18n/fr/sub.php index ab13a4ead7f..9bdbdbe5d2f 100644 --- a/app/i18n/fr/sub.php +++ b/app/i18n/fr/sub.php @@ -29,7 +29,9 @@ 'help' => 'Fournir l’URL d’un fichier OPML qui donnera dynamiquement la liste des flux de cette catégorie', ), 'empty' => 'Catégorie vide', + 'expand' => 'Développer la catégorie', 'information' => 'Informations', + 'open' => 'Ouvrir la catégorie', 'opml_url' => 'URL de l’OPML', 'position' => 'Position d’affichage', 'position_help' => 'Pour contrôler l’ordre de tri des catégories', @@ -183,9 +185,13 @@ 'method_help' => 'Les données POST supportent automatiquement application/x-www-form-urlencoded et application/json', 'method_postparams' => 'Données pour POST', 'moved_category_deleted' => 'Lors de la suppression d’une catégorie, ses flux seront automatiquement classés dans %s.', - 'mute' => 'désactivé', + 'mute' => array( + '_' => 'désactivé', + 'state_is_muted' => 'Ce flux est désactivé', + ), 'no_selected' => 'Aucun flux sélectionné.', 'number_entries' => '%d articles', // IGNORE + 'open_feed' => 'Ouvrir le flux %s', 'priority' => array( '_' => 'Visibilité', 'archived' => 'Ne pas afficher (archivé)', diff --git a/app/i18n/he/gen.php b/app/i18n/he/gen.php index 12f5b17c24a..58af160d235 100644 --- a/app/i18n/he/gen.php +++ b/app/i18n/he/gen.php @@ -29,6 +29,9 @@ 'load_default_shortcuts' => 'Load default shortcuts', // TODO 'manage' => 'ניהול', 'mark_read' => 'סימון כנקרא', + 'menu' => array( + 'open' => 'Open menu', // TODO + ), 'nav_buttons' => array( 'next' => 'Next article', // TODO 'prev' => 'Previous article', // TODO diff --git a/app/i18n/he/sub.php b/app/i18n/he/sub.php index ea25fc21521..7ac40153066 100644 --- a/app/i18n/he/sub.php +++ b/app/i18n/he/sub.php @@ -29,7 +29,9 @@ 'help' => 'Provide the URL to an OPML file to dynamically populate this category with feeds', // TODO ), 'empty' => 'Empty category', // TODO + 'expand' => 'Expand category', // TODO 'information' => 'מידע', + 'open' => 'Open category', // TODO 'opml_url' => 'OPML URL', // TODO 'position' => 'Display position', // TODO 'position_help' => 'To control category sort order', // TODO @@ -183,9 +185,13 @@ 'method_help' => 'The POST payload has automatic support for application/x-www-form-urlencoded and application/json', // TODO 'method_postparams' => 'Payload for POST', // TODO 'moved_category_deleted' => 'כאשר הקטגוריה נמחקת ההזנות שבתוכה אוטומטית מקוטלגות תחת %s.', - 'mute' => 'mute', // TODO + 'mute' => array( + '_' => 'mute', // TODO + 'state_is_muted' => 'This feed is muted', // TODO + ), 'no_selected' => 'אף הזנה לא נבחרה.', 'number_entries' => '%d מאמרים', + 'open_feed' => 'Open feed %s', // TODO 'priority' => array( '_' => 'Visibility', // TODO 'archived' => 'Do not show (archived)', // TODO diff --git a/app/i18n/hu/gen.php b/app/i18n/hu/gen.php index 9862833c0be..f86ecaf9f16 100644 --- a/app/i18n/hu/gen.php +++ b/app/i18n/hu/gen.php @@ -29,6 +29,9 @@ 'load_default_shortcuts' => 'Alapértelmezett gyorsgombok visszaállítása', 'manage' => 'Kezelés', 'mark_read' => 'Megjelölés olvasottként', + 'menu' => array( + 'open' => 'Open menu', // TODO + ), 'nav_buttons' => array( 'next' => 'Next article', // TODO 'prev' => 'Previous article', // TODO diff --git a/app/i18n/hu/sub.php b/app/i18n/hu/sub.php index 24c5092d187..1b942f34023 100644 --- a/app/i18n/hu/sub.php +++ b/app/i18n/hu/sub.php @@ -29,7 +29,9 @@ 'help' => 'Adj meg egy URL-t az OPML fájlhoz hogy automatikusan kitöltődjön ez a kategória hírforrásokkal', ), 'empty' => 'Üres kategória', + 'expand' => 'Expand category', // TODO 'information' => 'Információ', + 'open' => 'Open category', // TODO 'opml_url' => 'OPML URL', // IGNORE 'position' => 'Megjelenítési pozíció', 'position_help' => 'Kategória rendezési sorrend', @@ -183,9 +185,13 @@ 'method_help' => 'A POST metódus hasznos adattartalma automatikusan támogatja az application/x-www-form-urlencoded és application/json', 'method_postparams' => 'POST metódus adattartalma', 'moved_category_deleted' => 'Ha kitörölsz egy kategóriát, az alá tartozó hírforrások automatikusan ide kerülnek %s.', - 'mute' => 'némítás', + 'mute' => array( + '_' => 'némítás', + 'state_is_muted' => 'This feed is muted', // TODO + ), 'no_selected' => 'Nincsen hírforrás kiválasztva.', 'number_entries' => '%d cikkek', + 'open_feed' => 'Open feed %s', // TODO 'priority' => array( '_' => 'Láthatóság', 'archived' => 'Ne jelenjen meg (archivált)', diff --git a/app/i18n/id/gen.php b/app/i18n/id/gen.php index 2d7334b3721..064c815d6e7 100644 --- a/app/i18n/id/gen.php +++ b/app/i18n/id/gen.php @@ -29,6 +29,9 @@ 'load_default_shortcuts' => 'Load default shortcuts', // TODO 'manage' => 'Manage', // TODO 'mark_read' => 'Mark as read', // TODO + 'menu' => array( + 'open' => 'Open menu', // TODO + ), 'nav_buttons' => array( 'next' => 'Next article', // TODO 'prev' => 'Previous article', // TODO diff --git a/app/i18n/id/sub.php b/app/i18n/id/sub.php index 592d34333a1..2cc0b868596 100644 --- a/app/i18n/id/sub.php +++ b/app/i18n/id/sub.php @@ -29,7 +29,9 @@ 'help' => 'Provide the URL to an OPML file to dynamically populate this category with feeds', // TODO ), 'empty' => 'Empty category', // TODO + 'expand' => 'Expand category', // TODO 'information' => 'Information', // TODO + 'open' => 'Open category', // TODO 'opml_url' => 'OPML URL', // TODO 'position' => 'Display position', // TODO 'position_help' => 'To control category sort order', // TODO @@ -183,9 +185,13 @@ 'method_help' => 'The POST payload has automatic support for application/x-www-form-urlencoded and application/json', // TODO 'method_postparams' => 'Payload for POST', // TODO 'moved_category_deleted' => 'When you delete a category, its feeds are automatically classified under %s.', // TODO - 'mute' => 'mute', // TODO + 'mute' => array( + '_' => 'mute', // TODO + 'state_is_muted' => 'This feed is muted', // TODO + ), 'no_selected' => 'No feed selected.', // TODO 'number_entries' => '%d articles', // TODO + 'open_feed' => 'Open feed %s', // TODO 'priority' => array( '_' => 'Visibility', // TODO 'archived' => 'Do not show (archived)', // TODO diff --git a/app/i18n/it/gen.php b/app/i18n/it/gen.php index bc9a7f04df4..0cad5df76c4 100644 --- a/app/i18n/it/gen.php +++ b/app/i18n/it/gen.php @@ -29,6 +29,9 @@ 'load_default_shortcuts' => 'Carica le scorciatoie di default', 'manage' => 'Gestisci', 'mark_read' => 'Segna come letto', + 'menu' => array( + 'open' => 'Open menu', // TODO + ), 'nav_buttons' => array( 'next' => 'Next article', // TODO 'prev' => 'Previous article', // TODO diff --git a/app/i18n/it/sub.php b/app/i18n/it/sub.php index b435d343f62..ae0a16123c1 100644 --- a/app/i18n/it/sub.php +++ b/app/i18n/it/sub.php @@ -29,7 +29,9 @@ 'help' => 'Fornisci l’URL ad un file OPML per popolare dinamicamente questa categoria con i feed', ), 'empty' => 'Categoria vuota', + 'expand' => 'Expand category', // TODO 'information' => 'Informazioni', + 'open' => 'Open category', // TODO 'opml_url' => 'URL OPML', 'position' => 'Mostra posizione', 'position_help' => 'Per controllare l’ordinamento della categoria', @@ -183,9 +185,13 @@ 'method_help' => 'Il payload POST ha il supporto automatico per application/x-www-form-urlencoded e application/json', 'method_postparams' => 'Payload per POST', 'moved_category_deleted' => 'Cancellando una categoria i feed al suo interno verranno classificati automaticamente come %s.', - 'mute' => 'muta', + 'mute' => array( + '_' => 'muta', + 'state_is_muted' => 'This feed is muted', // TODO + ), 'no_selected' => 'Nessun feed selezionato.', 'number_entries' => '%d articoli', + 'open_feed' => 'Open feed %s', // TODO 'priority' => array( '_' => 'Visibilità', 'archived' => 'Non mostrare (archiviato)', diff --git a/app/i18n/ja/gen.php b/app/i18n/ja/gen.php index 0cd82a3c25e..6abe92a4f90 100644 --- a/app/i18n/ja/gen.php +++ b/app/i18n/ja/gen.php @@ -29,6 +29,9 @@ 'load_default_shortcuts' => 'デフォルトのショートカットを読み込む', 'manage' => '管理', 'mark_read' => '既読にする', + 'menu' => array( + 'open' => 'Open menu', // TODO + ), 'nav_buttons' => array( 'next' => '次の記事', 'prev' => '前の記事', diff --git a/app/i18n/ja/sub.php b/app/i18n/ja/sub.php index 0ca9cc37bb2..614269caf1b 100644 --- a/app/i18n/ja/sub.php +++ b/app/i18n/ja/sub.php @@ -29,7 +29,9 @@ 'help' => 'から提供されたOPMLファイルをこのカテゴリに動的に追加します。', ), 'empty' => 'からのカテゴリ', + 'expand' => 'Expand category', // TODO 'information' => 'インフォメーション', + 'open' => 'Open category', // TODO 'opml_url' => 'OPMLのURL', 'position' => '表示位置', 'position_help' => 'カテゴリの表示順を操作する', @@ -183,9 +185,13 @@ 'method_help' => 'POSTペイロードは application/x-www-form-urlencodedapplication/json を自動的にサポートしています', 'method_postparams' => 'POST用ペイロード', 'moved_category_deleted' => 'カテゴリを削除したとき、フィードは自動的に%s下に分類されます。', - 'mute' => 'ミュート', + 'mute' => array( + '_' => 'ミュート', + 'state_is_muted' => 'This feed is muted', // TODO + ), 'no_selected' => 'どのフィードも選択されていません', 'number_entries' => '%d 記事数', + 'open_feed' => 'Open feed %s', // TODO 'priority' => array( '_' => '表示する場所', 'archived' => '非表示にする(アーカイブ)', diff --git a/app/i18n/ko/gen.php b/app/i18n/ko/gen.php index 8ef6fcf87c3..a71389e9054 100644 --- a/app/i18n/ko/gen.php +++ b/app/i18n/ko/gen.php @@ -29,6 +29,9 @@ 'load_default_shortcuts' => '기본 단축키 불러오기', 'manage' => '관리', 'mark_read' => '읽음으로 표시', + 'menu' => array( + 'open' => 'Open menu', // TODO + ), 'nav_buttons' => array( 'next' => 'Next article', // TODO 'prev' => 'Previous article', // TODO diff --git a/app/i18n/ko/sub.php b/app/i18n/ko/sub.php index f8fb544be7b..57eb72ab790 100644 --- a/app/i18n/ko/sub.php +++ b/app/i18n/ko/sub.php @@ -29,7 +29,9 @@ 'help' => '이 카테코리에 피드를 동적으로 채우려면 OPML 파일 의 URL을 제공해주세요', ), 'empty' => '빈 카테고리', + 'expand' => 'Expand category', // TODO 'information' => '정보', + 'open' => 'Open category', // TODO 'opml_url' => 'OPML URL', // IGNORE 'position' => '표시 위치', 'position_help' => '정렬 순서 제어', @@ -183,9 +185,13 @@ 'method_help' => 'POST 페이로드는 application/x-www-form-urlencodedapplication/json을 자동으로 지원합니다.', 'method_postparams' => 'POST용 페이로드', 'moved_category_deleted' => '카테고리를 삭제하면, 해당 카테고리 아래에 있던 피드들은 자동적으로 %s 아래로 분류됩니다.', - 'mute' => '무기한 새로고침 금지', + 'mute' => array( + '_' => '무기한 새로고침 금지', + 'state_is_muted' => 'This feed is muted', // TODO + ), 'no_selected' => '선택된 피드가 없습니다.', 'number_entries' => '%d 개의 글', + 'open_feed' => 'Open feed %s', // TODO 'priority' => array( '_' => '표시', 'archived' => '표시하지 않음 (보관됨)', diff --git a/app/i18n/lv/gen.php b/app/i18n/lv/gen.php index fbf434f20b6..ab81b3c4577 100644 --- a/app/i18n/lv/gen.php +++ b/app/i18n/lv/gen.php @@ -29,6 +29,9 @@ 'load_default_shortcuts' => 'Ielādēt noklusējuma saīsnes', 'manage' => 'Pārvaldīt', 'mark_read' => 'Atzīmēt kā izlasītu', + 'menu' => array( + 'open' => 'Open menu', // TODO + ), 'nav_buttons' => array( 'next' => 'Next article', // TODO 'prev' => 'Previous article', // TODO diff --git a/app/i18n/lv/sub.php b/app/i18n/lv/sub.php index 08c114f9530..cc739194deb 100644 --- a/app/i18n/lv/sub.php +++ b/app/i18n/lv/sub.php @@ -29,7 +29,9 @@ 'help' => 'Norādiet URL uz OPML failu, lai dinamiski papildinātu šo kategoriju ar barotnēm.', ), 'empty' => 'Tukša kategorija', + 'expand' => 'Expand category', // TODO 'information' => 'Informācija', + 'open' => 'Open category', // TODO 'opml_url' => 'OPML URL', // IGNORE 'position' => 'Displeja pozīcija', 'position_help' => 'Lai pārvaldītu kategoriju šķirošanas secību', @@ -183,9 +185,13 @@ 'method_help' => 'The POST payload has automatic support for application/x-www-form-urlencoded and application/json', // TODO 'method_postparams' => 'Payload for POST', // TODO 'moved_category_deleted' => 'Kad dzēšat kategoriju, tās plūsmas automātiski tiek automātiski klasificētas kategorijā %s.', - 'mute' => 'klusināt', + 'mute' => array( + '_' => 'klusināt', + 'state_is_muted' => 'This feed is muted', // TODO + ), 'no_selected' => 'Barotne nav izvēlēta.', 'number_entries' => '%d raksti', + 'open_feed' => 'Open feed %s', // TODO 'priority' => array( '_' => 'Prioritāte', 'archived' => 'Nerādīt (arhivēts)', diff --git a/app/i18n/nl/gen.php b/app/i18n/nl/gen.php index f3601f445e0..aa4598175f3 100644 --- a/app/i18n/nl/gen.php +++ b/app/i18n/nl/gen.php @@ -29,6 +29,9 @@ 'load_default_shortcuts' => 'Standaardshortcuts laden', 'manage' => 'Beheren', 'mark_read' => 'Markeer als gelezen', + 'menu' => array( + 'open' => 'Open menu', // TODO + ), 'nav_buttons' => array( 'next' => 'Next article', // TODO 'prev' => 'Previous article', // TODO diff --git a/app/i18n/nl/sub.php b/app/i18n/nl/sub.php index 31afc7f1221..036e631f019 100644 --- a/app/i18n/nl/sub.php +++ b/app/i18n/nl/sub.php @@ -29,7 +29,9 @@ 'help' => 'Geef de URL naar een OPML-bestand om deze categorie dynamisch met feeds te vullen', ), 'empty' => 'Lege categorie', + 'expand' => 'Expand category', // TODO 'information' => 'Informatie', + 'open' => 'Open category', // TODO 'opml_url' => 'OPML URL', // IGNORE 'position' => 'Weergavepositie', 'position_help' => 'Om de categorieweergave-sorteervolgorde te controleren', @@ -183,9 +185,13 @@ 'method_help' => 'De POST-payload ondersteunt automatisch application/x-www-form-urlencoded en application/json', 'method_postparams' => 'Payload voor POST', 'moved_category_deleted' => 'Als u een categorie verwijderd, worden de feeds automatisch geclassificeerd onder %s.', - 'mute' => 'demp', + 'mute' => array( + '_' => 'demp', + 'state_is_muted' => 'This feed is muted', // TODO + ), 'no_selected' => 'Geen feed geselecteerd.', 'number_entries' => '%d artikelen', + 'open_feed' => 'Open feed %s', // TODO 'priority' => array( '_' => 'Zichtbaarheid', 'archived' => 'Niet weergeven (gearchiveerd)', diff --git a/app/i18n/oc/gen.php b/app/i18n/oc/gen.php index d00c250e36a..b2a3cd0ee9c 100644 --- a/app/i18n/oc/gen.php +++ b/app/i18n/oc/gen.php @@ -29,6 +29,9 @@ 'load_default_shortcuts' => 'Cargar los acorchis per defaut', 'manage' => 'Gerir', 'mark_read' => 'Marcar coma legit', + 'menu' => array( + 'open' => 'Open menu', // TODO + ), 'nav_buttons' => array( 'next' => 'Next article', // TODO 'prev' => 'Previous article', // TODO diff --git a/app/i18n/oc/sub.php b/app/i18n/oc/sub.php index a1206917417..d503f0eadf7 100644 --- a/app/i18n/oc/sub.php +++ b/app/i18n/oc/sub.php @@ -29,7 +29,9 @@ 'help' => 'Fornís l’URL per un fichièr OPML per garnir automaticament aquesta categoria amb de flux', ), 'empty' => 'Categoria voida', + 'expand' => 'Expand category', // TODO 'information' => 'Informacions', + 'open' => 'Open category', // TODO 'opml_url' => 'URL OPML', 'position' => 'Mostrar la posicion', 'position_help' => 'Per contrarotlar l’òrdre de tria de la categoria', @@ -183,9 +185,13 @@ 'method_help' => 'The POST payload has automatic support for application/x-www-form-urlencoded and application/json', // TODO 'method_postparams' => 'Payload for POST', // TODO 'moved_category_deleted' => 'Quand escafatz una categoria, sos fluxes son automaticament classats dins %s.', - 'mute' => 'mut', + 'mute' => array( + '_' => 'mut', + 'state_is_muted' => 'This feed is muted', // TODO + ), 'no_selected' => 'Cap de flux pas seleccionat.', 'number_entries' => '%d articles', // IGNORE + 'open_feed' => 'Open feed %s', // TODO 'priority' => array( '_' => 'Visibilitat', 'archived' => 'Mostrar pas (archivat)', diff --git a/app/i18n/pl/gen.php b/app/i18n/pl/gen.php index 978b1e211c6..0a76a2c97c6 100644 --- a/app/i18n/pl/gen.php +++ b/app/i18n/pl/gen.php @@ -29,6 +29,9 @@ 'load_default_shortcuts' => 'Ustaw domyślne skróty', 'manage' => 'Ustawienia', 'mark_read' => 'Oznacz jako przeczytane', + 'menu' => array( + 'open' => 'Open menu', // TODO + ), 'nav_buttons' => array( 'next' => 'Next article', // TODO 'prev' => 'Previous article', // TODO diff --git a/app/i18n/pl/sub.php b/app/i18n/pl/sub.php index 03786bcd1d3..117ec1b88d7 100644 --- a/app/i18n/pl/sub.php +++ b/app/i18n/pl/sub.php @@ -29,7 +29,9 @@ 'help' => 'Podaj adres pliku OPML, aby dynamicznie zapełnić tę kategorię kanałami', ), 'empty' => 'Pusta kategoria', + 'expand' => 'Expand category', // TODO 'information' => 'Informacje', + 'open' => 'Open category', // TODO 'opml_url' => 'Adres OPML', 'position' => 'Miejsce wyświetlania', 'position_help' => 'Kontrola porządku sortowania kategorii', @@ -183,9 +185,13 @@ 'method_help' => 'Ładunek w POST automatycznie wspiera application/x-www-form-urlencoded oraz application/json', 'method_postparams' => 'Ładunek w POST', 'moved_category_deleted' => 'Po usunięciu kategorii znajdujące się w niej kanały zostaną automatycznie przeniesione do %s.', - 'mute' => 'wycisz', + 'mute' => array( + '_' => 'wycisz', + 'state_is_muted' => 'This feed is muted', // TODO + ), 'no_selected' => 'Brak kanałów.', 'number_entries' => '%d wiadomości', + 'open_feed' => 'Open feed %s', // TODO 'priority' => array( '_' => 'Widoczność', 'archived' => 'Nie pokazuj (zarchiwizowany)', diff --git a/app/i18n/pt-br/gen.php b/app/i18n/pt-br/gen.php index c9f1b669919..04fe0df03a7 100644 --- a/app/i18n/pt-br/gen.php +++ b/app/i18n/pt-br/gen.php @@ -29,6 +29,9 @@ 'load_default_shortcuts' => 'Carregar mais atalhos', 'manage' => 'Gerenciar', 'mark_read' => 'Marcar como lido', + 'menu' => array( + 'open' => 'Open menu', // TODO + ), 'nav_buttons' => array( 'next' => 'Next article', // TODO 'prev' => 'Previous article', // TODO diff --git a/app/i18n/pt-br/sub.php b/app/i18n/pt-br/sub.php index 454bab99aac..db178e10cef 100644 --- a/app/i18n/pt-br/sub.php +++ b/app/i18n/pt-br/sub.php @@ -29,7 +29,9 @@ 'help' => 'Forneça uma URL para o arquivo OPML para preencher dinamicamente esta categoria com feeds', ), 'empty' => 'Categoria vazia', + 'expand' => 'Expand category', // TODO 'information' => 'Informações', + 'open' => 'Open category', // TODO 'opml_url' => 'URL de OPML', 'position' => 'Posição de exibição', 'position_help' => 'Para controlar a ordem de exibição', @@ -183,9 +185,13 @@ 'method_help' => 'O conteúdo do POST tem suporte automático para application/x-www-form-urlencoded e application/json', 'method_postparams' => 'Conteúdo do POST', 'moved_category_deleted' => 'Quando você deleta uma categoria, seus feeds são automaticamente classificados como %s.', - 'mute' => 'silenciar', + 'mute' => array( + '_' => 'silenciar', + 'state_is_muted' => 'This feed is muted', // TODO + ), 'no_selected' => 'Nenhum feed selecionado.', 'number_entries' => '%d artigos', + 'open_feed' => 'Open feed %s', // TODO 'priority' => array( '_' => 'Visibilidade', 'archived' => 'Não exibir (arquivado)', diff --git a/app/i18n/ru/gen.php b/app/i18n/ru/gen.php index 259131d9476..2fdf24324d9 100644 --- a/app/i18n/ru/gen.php +++ b/app/i18n/ru/gen.php @@ -29,6 +29,9 @@ 'load_default_shortcuts' => 'Загрузить горячие клавиши по умолчанию', 'manage' => 'Настроить', 'mark_read' => 'Отметить прочитанным', + 'menu' => array( + 'open' => 'Open menu', // TODO + ), 'nav_buttons' => array( 'next' => 'Next article', // TODO 'prev' => 'Previous article', // TODO diff --git a/app/i18n/ru/sub.php b/app/i18n/ru/sub.php index 789f8312e75..9c7047364b7 100644 --- a/app/i18n/ru/sub.php +++ b/app/i18n/ru/sub.php @@ -29,7 +29,9 @@ 'help' => 'Предоставьте ссылку на OPML файл чтобы динамично заполнять эту категорию лентами', ), 'empty' => 'Пустая категория', + 'expand' => 'Expand category', // TODO 'information' => 'Информация', + 'open' => 'Open category', // TODO 'opml_url' => 'OPML ссылка', 'position' => 'Положение отображения', 'position_help' => 'Влияет на порядок отображения категорий', @@ -183,9 +185,13 @@ 'method_help' => 'Полезная нагрузка POST автоматически поддерживает application/x-www-form-urlencoded и application/json', 'method_postparams' => 'Полезная нагрузка POST', 'moved_category_deleted' => 'Когда вы удаляете категорию, ленты категории автоматически попадают в категорию %s.', - 'mute' => 'заглушить', + 'mute' => array( + '_' => 'заглушить', + 'state_is_muted' => 'This feed is muted', // TODO + ), 'no_selected' => 'Ленты не выбраны.', 'number_entries' => '%d статей', + 'open_feed' => 'Open feed %s', // TODO 'priority' => array( '_' => 'Видимость', 'archived' => 'Не показывать (архивировано)', diff --git a/app/i18n/sk/gen.php b/app/i18n/sk/gen.php index 4945ace5d0d..26eded4c4a4 100644 --- a/app/i18n/sk/gen.php +++ b/app/i18n/sk/gen.php @@ -29,6 +29,9 @@ 'load_default_shortcuts' => 'Načítať prednastavené klávesové skratky', 'manage' => 'Spravovať', 'mark_read' => 'Označiť ako prečítané', + 'menu' => array( + 'open' => 'Open menu', // TODO + ), 'nav_buttons' => array( 'next' => 'Next article', // TODO 'prev' => 'Previous article', // TODO diff --git a/app/i18n/sk/sub.php b/app/i18n/sk/sub.php index fde0b641fdf..8b30f586572 100644 --- a/app/i18n/sk/sub.php +++ b/app/i18n/sk/sub.php @@ -29,7 +29,9 @@ 'help' => 'Zadajte URL adresu k OPML súboru, z ktorého sa táto kategória automaticky naplní kanálmi.', ), 'empty' => 'Prázdna kategória', + 'expand' => 'Expand category', // TODO 'information' => 'Informácia', + 'open' => 'Open category', // TODO 'opml_url' => 'OPML URL', // IGNORE 'position' => 'Zobrazť pozíciu', 'position_help' => 'Na kontrolu zoradenia kategórií', @@ -183,9 +185,13 @@ 'method_help' => 'Ako parametre metódy POST sú podporované application/x-www-form-urlencoded a application/json', 'method_postparams' => 'Parametre metódy POST', 'moved_category_deleted' => 'Keď vymažete kategóriu, jej kanály sa automaticky zaradia pod %s.', - 'mute' => 'stíšiť', + 'mute' => array( + '_' => 'stíšiť', + 'state_is_muted' => 'This feed is muted', // TODO + ), 'no_selected' => 'Nevybrali ste kanál.', 'number_entries' => 'Počet článkov: %d', + 'open_feed' => 'Open feed %s', // TODO 'priority' => array( '_' => 'Viditeľnosť', 'archived' => 'Nezobrazovať (archivované)', diff --git a/app/i18n/tr/gen.php b/app/i18n/tr/gen.php index e3c83afb071..268744f9567 100644 --- a/app/i18n/tr/gen.php +++ b/app/i18n/tr/gen.php @@ -29,6 +29,9 @@ 'load_default_shortcuts' => 'Öntanımlı kısayolları yükle', 'manage' => 'Yönet', 'mark_read' => 'Okundu olarak işaretle', + 'menu' => array( + 'open' => 'Open menu', // TODO + ), 'nav_buttons' => array( 'next' => 'Next article', // TODO 'prev' => 'Previous article', // TODO diff --git a/app/i18n/tr/sub.php b/app/i18n/tr/sub.php index c2414c1c51a..6b7a0aaea3e 100644 --- a/app/i18n/tr/sub.php +++ b/app/i18n/tr/sub.php @@ -29,7 +29,9 @@ 'help' => 'Dinamik olarak bu kategoriyi akışla doldurmak için bir link OPML file sağla', ), 'empty' => 'Boş kategori', + 'expand' => 'Expand category', // TODO 'information' => 'Bilgi', + 'open' => 'Open category', // TODO 'opml_url' => 'OPML linki', 'position' => 'Konumu göster', 'position_help' => 'Kategori sıralama düzenini kontrol etmek için', @@ -183,9 +185,13 @@ 'method_help' => 'POST payload otomatik yardımı için application/x-www-form-urlencoded ve application/json', 'method_postparams' => 'Payload for POST', // IGNORE 'moved_category_deleted' => 'Bir kategoriyi silerseniz, içerisindeki akışlar %s içerisine yerleşir.', - 'mute' => 'sessize al', + 'mute' => array( + '_' => 'sessize al', + 'state_is_muted' => 'This feed is muted', // TODO + ), 'no_selected' => 'Hiçbir akış seçilmedi.', 'number_entries' => '%d makale', + 'open_feed' => 'Open feed %s', // TODO 'priority' => array( '_' => 'Görünürlük', 'archived' => 'Gösterme (arşivlenmiş)', diff --git a/app/i18n/zh-cn/gen.php b/app/i18n/zh-cn/gen.php index 2845dedfc37..077019b9c51 100644 --- a/app/i18n/zh-cn/gen.php +++ b/app/i18n/zh-cn/gen.php @@ -29,6 +29,9 @@ 'load_default_shortcuts' => '加载默认快捷键', 'manage' => '管理', 'mark_read' => '标记已读', + 'menu' => array( + 'open' => 'Open menu', // TODO + ), 'nav_buttons' => array( 'next' => 'Next article', // TODO 'prev' => 'Previous article', // TODO diff --git a/app/i18n/zh-cn/sub.php b/app/i18n/zh-cn/sub.php index ea670acd1c3..f1d77db1b0c 100644 --- a/app/i18n/zh-cn/sub.php +++ b/app/i18n/zh-cn/sub.php @@ -29,7 +29,9 @@ 'help' => '使用 URL 上的 OPML 文件 中的订阅源填充这一分类', ), 'empty' => '空分类', + 'expand' => 'Expand category', // TODO 'information' => '信息', + 'open' => 'Open category', // TODO 'opml_url' => 'OPML URL', // IGNORE 'position' => '显示位置', 'position_help' => '控制分类排列顺序', @@ -183,9 +185,13 @@ 'method_help' => '如果荷载非空且是合法的 JSON,HTTP 请求标头将被自动设为 application/json,否则使用 application/x-www-form-urlencoded', 'method_postparams' => 'POST 荷载', 'moved_category_deleted' => '删除分类时,其中的订阅源会自动归类到 %s', - 'mute' => '暂停', + 'mute' => array( + '_' => '暂停', + 'state_is_muted' => 'This feed is muted', // TODO + ), 'no_selected' => '未选择订阅源', 'number_entries' => '%d 篇文章', + 'open_feed' => 'Open feed %s', // TODO 'priority' => array( '_' => '可见性', 'archived' => '不显示(归档)', diff --git a/app/i18n/zh-tw/gen.php b/app/i18n/zh-tw/gen.php index 68d078173a3..2372590aa06 100644 --- a/app/i18n/zh-tw/gen.php +++ b/app/i18n/zh-tw/gen.php @@ -29,6 +29,9 @@ 'load_default_shortcuts' => '重置快捷鍵', 'manage' => '管理', 'mark_read' => '標記已讀', + 'menu' => array( + 'open' => 'Open menu', // TODO + ), 'nav_buttons' => array( 'next' => 'Next article', // TODO 'prev' => 'Previous article', // TODO diff --git a/app/i18n/zh-tw/sub.php b/app/i18n/zh-tw/sub.php index 9acfb046b52..279fe67f0ff 100644 --- a/app/i18n/zh-tw/sub.php +++ b/app/i18n/zh-tw/sub.php @@ -29,7 +29,9 @@ 'help' => '使用地址上的 OPML 文件 中的訂閱源填充這一分類', ), 'empty' => '空分類', + 'expand' => 'Expand category', // TODO 'information' => '信息', + 'open' => 'Open category', // TODO 'opml_url' => 'OPML 地址', 'position' => '顯示位置', 'position_help' => '控制分類排列順序', @@ -183,9 +185,13 @@ 'method_help' => 'The POST payload has automatic support for application/x-www-form-urlencoded and application/json', // TODO 'method_postparams' => 'Payload for POST', // TODO 'moved_category_deleted' => '刪除分類時,其中的訂閱源會自動歸類到 %s', - 'mute' => '暫停', + 'mute' => array( + '_' => '暫停', + 'state_is_muted' => 'This feed is muted', // TODO + ), 'no_selected' => '未選擇訂閱源', 'number_entries' => '%d 篇文章', + 'open_feed' => 'Open feed %s', // TODO 'priority' => array( '_' => '可見性', 'archived' => '不顯示(歸檔)', diff --git a/app/layout/aside_feed.phtml b/app/layout/aside_feed.phtml index c106c9ed956..a9705a29660 100644 --- a/app/layout/aside_feed.phtml +++ b/app/layout/aside_feed.phtml @@ -57,9 +57,9 @@ $t_show = ($t_active && in_array(FreshRSS_Context::userConf()->display_categories, ['active', 'remember'], true)) || FreshRSS_Context::userConf()->display_categories === 'all'; ?>
  • -
    - -
    + + +
      tags as $tag): @@ -93,16 +93,18 @@ ?>
    • data-unread="nbNotRead() ?>"> - + ?>kind() == FreshRSS_Category::KIND_DYNAMIC_OPML) { echo _i('opml-dyn'); } ?> +
        show_favicons && $nbFeedsTotal < FreshRSS_Context::userConf()->simplify_over_n_feeds; + foreach ($feeds as $feed): $f_active = FreshRSS_Context::isCurrentGet('f_' . $feed->id()); $f_active_class = $f_active ? ' active' : ''; @@ -122,16 +124,23 @@ } $mute_class = $feed->mute() ? ' mute' : ''; ?> -
      • simplify_over_n_feeds): - ?>show_favicons) { ?>✇name() ?>
      • + $title = _t('sub.feed.open_feed', $feed->name()); + $title .= $error_title !== '' ? ' ⚠ ' . $error_title : ''; + $title .= $empty_title !== '' ? ' ' . $empty_title : ''; + $title .= $feed->mute() ? ' 🔇 ' . _t('sub.feed.mute.state_is_muted') : ''; + ?> + ✇name() ?> diff --git a/p/scripts/main.js b/p/scripts/main.js index 5690eb53269..75cf5f65ccc 100644 --- a/p/scripts/main.js +++ b/p/scripts/main.js @@ -803,7 +803,7 @@ function openCategory(category_id) { const category_element = document.getElementById(category_id); if (!category_element) return; category_element.querySelector('.tree-folder-items').classList.add('active'); - const img = category_element.querySelector('a.dropdown-toggle img'); + const img = category_element.querySelector('button.dropdown-toggle img'); if (!img) return; img.src = img.src.replace('/icons/down.', '/icons/up.'); img.alt = '🔼'; @@ -837,7 +837,7 @@ function init_column_categories() { } document.getElementById('aside_feed').onclick = function (ev) { - let a = ev.target.closest('.tree-folder > .tree-folder-title > a.dropdown-toggle'); + let a = ev.target.closest('.tree-folder > .tree-folder-title > button.dropdown-toggle'); if (a) { const icon = a.querySelector('.icon'); const category_id = a.closest('.category').id; @@ -885,8 +885,6 @@ function init_column_categories() { const template = document.getElementById(templateId) .innerHTML.replace(/------/g, id).replace('http://example.net/', feed_web); if (!dropdownMenu) { - a.href = '#dropdown-' + id; - div.querySelector('.dropdown-target').id = 'dropdown-' + id; div.insertAdjacentHTML('beforeend', template); if (feed_web == '') { const website = div.querySelector('.item.link.website'); diff --git a/p/themes/Origine/origine.css b/p/themes/Origine/origine.css index 762fe2f95d6..07307e133eb 100644 --- a/p/themes/Origine/origine.css +++ b/p/themes/Origine/origine.css @@ -603,6 +603,20 @@ a:hover .icon { font-size: 1rem; } +.aside_feed .tree-folder-title button.dropdown-toggle { + margin: -0.75rem 0.25rem -0.75rem -0.75rem; + padding: 0.75rem 0 0.75rem 0.75rem; +} + +.aside_feed .tree-folder-title:hover button.dropdown-toggle .icon { + filter: none; +} + +.aside_feed .tree-folder-title button.dropdown-toggle:hover .icon { + filter: brightness(1.5); + transition: 0.1s linear; +} + .tree-folder-title .title { background: inherit; color: var(--font-color); @@ -632,7 +646,6 @@ a:hover .icon { } .tree-folder-items > .item { - padding: 0 10px; line-height: 1.7; font-size: 0.8rem; } diff --git a/p/themes/Origine/origine.rtl.css b/p/themes/Origine/origine.rtl.css index 9c486d1beed..809812624b2 100644 --- a/p/themes/Origine/origine.rtl.css +++ b/p/themes/Origine/origine.rtl.css @@ -603,6 +603,20 @@ a:hover .icon { font-size: 1rem; } +.aside_feed .tree-folder-title button.dropdown-toggle { + margin: -0.75rem -0.75rem -0.75rem 0.25rem; + padding: 0.75rem 0.75rem 0.75rem 0; +} + +.aside_feed .tree-folder-title:hover button.dropdown-toggle .icon { + filter: none; +} + +.aside_feed .tree-folder-title button.dropdown-toggle:hover .icon { + filter: brightness(1.5); + transition: 0.1s linear; +} + .tree-folder-title .title { background: inherit; color: var(--font-color); @@ -632,7 +646,6 @@ a:hover .icon { } .tree-folder-items > .item { - padding: 0 10px; line-height: 1.7; font-size: 0.8rem; } diff --git a/p/themes/base-theme/frss.css b/p/themes/base-theme/frss.css index 18da5a4ce5f..fa2fa8146db 100644 --- a/p/themes/base-theme/frss.css +++ b/p/themes/base-theme/frss.css @@ -204,8 +204,8 @@ img.favicon { font-style: italic; } -.feed.mute::before { - content: '🔇'; +.feed.mute .item-title .title::before { + content: '🔇 '; } /*=== Videos */ @@ -1046,6 +1046,7 @@ li.drag-hover { } .tree-folder-title { + display: block; padding-top: var(--frss-padding-top-bottom); padding-bottom: var(--frss-padding-top-bottom); } @@ -1064,10 +1065,10 @@ li.drag-hover { white-space: nowrap; } -.tree-folder-items > .item > a { +.tree-folder-items > .item > .item-title { display: inline-block; vertical-align: middle; - width: calc(100% - 32px); + width: calc(100% - 2.5rem); overflow: hidden; white-space: nowrap; text-overflow: ellipsis; @@ -1169,17 +1170,19 @@ input[type="search"] { padding: 0; } -.aside_feed .tree-folder-title .icon, -.aside_feed .tree-folder-items .feed .icon { - margin: 0 0.5rem 0 0; +.aside_feed .tree-folder-title button.dropdown-toggle { + padding: 0; + border: 0; + background-color: inherit; + cursor: pointer; } -.aside_feed .tree-folder-items .feed .favicon { - padding: 0; +.aside_feed .tree-folder-title .icon { + margin: 0 0.25rem 0 0; } -.aside_feed .tree-folder-items .item.feed { - padding: var(--frss-padding-top-bottom) 0.75rem; +.aside_feed .tree-folder-items .feed .favicon { + padding: 0; } .aside_feed .tree-folder-items:not(.active) { @@ -1190,12 +1193,21 @@ input[type="search"] { overflow: hidden; } +.aside_feed .tree-folder-items .dropdown-menu { + left: 0; + margin-left: 0.75rem +} + .aside_feed .tree-folder-items .dropdown { - vertical-align: top; + vertical-align: baseline; + margin-right: 0.25rem; } -.aside_feed .tree-folder-items .dropdown-menu { - left: 0; +.aside_feed .tree-folder-items .dropdown .dropdown-toggle { + padding: var(--frss-padding-top-bottom) 0.25rem var(--frss-padding-top-bottom) 0.75rem; + display: inline-block; + text-align: right; + opacity: 0.4; } .aside_feed .tree-folder-items .item .dropdown-toggle > .icon { @@ -1203,6 +1215,10 @@ input[type="search"] { cursor: pointer; } +.aside_feed .tree-folder-items .item .dropdown-toggle:hover { + opacity: 1; +} + .aside_feed .tree-folder-items .item .dropdown-target:target ~ .dropdown-toggle > .icon, .aside_feed .tree-folder-items .item:hover .dropdown-toggle > .icon, .aside_feed .tree-folder-items .item.active .dropdown-toggle > .icon { @@ -2031,7 +2047,7 @@ html.slider-active { .item.share.error a::after, .category .title.error::before, -.item.feed.error .item-title::before, +.item.feed.error .item-title .title::before, .theme-preview-list .properties .error::before { content: " ⚠ "; color: var(--frss-font-color-error); @@ -2100,9 +2116,13 @@ html.slider-active { text-decoration: underline double; } -.aside .category .title:not([data-unread="0"])::after, +.aside .feed .item-title { + padding: var(--frss-padding-top-bottom) 3.5rem var(--frss-padding-top-bottom) 0; +} + +.aside .category .tree-folder-title .title:not([data-unread="0"])::after, .aside .feed .item-title:not([data-unread="0"])::after { - margin: calc(0.125rem + var(--frss-padding-top-bottom)) 0 0 0; + margin: var(--frss-padding-top-bottom) 0 0 0; padding: 0.25rem 0.5rem; min-width: 2rem; display: block; @@ -2117,6 +2137,10 @@ html.slider-active { font-weight: initial; } +.aside .category .title:not([data-unread="0"])::after { + margin: calc(0.125rem + var(--frss-padding-top-bottom)) 0 0 0; +} + .global .box.category .title:not([data-unread="0"])::after { margin: 0.5rem 0 0 0; padding: 5px 10px; @@ -2181,7 +2205,7 @@ html.slider-active { .feed .item-title:not([data-unread="0"]) { font-weight: bold; - width: calc(100% - 5.5rem); + width: calc(100% - 6rem); } .state_unread .category:not(.active)[data-unread="0"], @@ -2308,6 +2332,18 @@ html.slider-active { text-align: center; } + .aside .feed .item-title { + padding-left: 0.75rem; + padding-right: 4rem; + display: block; + width: 100%; + box-sizing: border-box; + } + + .aside .feed .item-title[data-unread="0"] { + padding-right: 1rem; + } + .flux .flux_header .item .title:has(~.date) { padding-right: 1rem; } diff --git a/p/themes/base-theme/frss.rtl.css b/p/themes/base-theme/frss.rtl.css index a79684f81ac..0a7d94fd1d8 100644 --- a/p/themes/base-theme/frss.rtl.css +++ b/p/themes/base-theme/frss.rtl.css @@ -204,8 +204,8 @@ img.favicon { font-style: italic; } -.feed.mute::before { - content: '🔇'; +.feed.mute .item-title .title::before { + content: '🔇 '; } /*=== Videos */ @@ -1046,6 +1046,7 @@ li.drag-hover { } .tree-folder-title { + display: block; padding-top: var(--frss-padding-top-bottom); padding-bottom: var(--frss-padding-top-bottom); } @@ -1064,10 +1065,10 @@ li.drag-hover { white-space: nowrap; } -.tree-folder-items > .item > a { +.tree-folder-items > .item > .item-title { display: inline-block; vertical-align: middle; - width: calc(100% - 32px); + width: calc(100% - 2.5rem); overflow: hidden; white-space: nowrap; text-overflow: ellipsis; @@ -1169,17 +1170,19 @@ input[type="search"] { padding: 0; } -.aside_feed .tree-folder-title .icon, -.aside_feed .tree-folder-items .feed .icon { - margin: 0 0 0 0.5rem; +.aside_feed .tree-folder-title button.dropdown-toggle { + padding: 0; + border: 0; + background-color: inherit; + cursor: pointer; } -.aside_feed .tree-folder-items .feed .favicon { - padding: 0; +.aside_feed .tree-folder-title .icon { + margin: 0 0 0 0.25rem; } -.aside_feed .tree-folder-items .item.feed { - padding: var(--frss-padding-top-bottom) 0.75rem; +.aside_feed .tree-folder-items .feed .favicon { + padding: 0; } .aside_feed .tree-folder-items:not(.active) { @@ -1190,12 +1193,21 @@ input[type="search"] { overflow: hidden; } +.aside_feed .tree-folder-items .dropdown-menu { + right: 0; + margin-right: 0.75rem +} + .aside_feed .tree-folder-items .dropdown { - vertical-align: top; + vertical-align: baseline; + margin-left: 0.25rem; } -.aside_feed .tree-folder-items .dropdown-menu { - right: 0; +.aside_feed .tree-folder-items .dropdown .dropdown-toggle { + padding: var(--frss-padding-top-bottom) 0.75rem var(--frss-padding-top-bottom) 0.25rem; + display: inline-block; + text-align: left; + opacity: 0.4; } .aside_feed .tree-folder-items .item .dropdown-toggle > .icon { @@ -1203,6 +1215,10 @@ input[type="search"] { cursor: pointer; } +.aside_feed .tree-folder-items .item .dropdown-toggle:hover { + opacity: 1; +} + .aside_feed .tree-folder-items .item .dropdown-target:target ~ .dropdown-toggle > .icon, .aside_feed .tree-folder-items .item:hover .dropdown-toggle > .icon, .aside_feed .tree-folder-items .item.active .dropdown-toggle > .icon { @@ -2031,7 +2047,7 @@ html.slider-active { .item.share.error a::after, .category .title.error::before, -.item.feed.error .item-title::before, +.item.feed.error .item-title .title::before, .theme-preview-list .properties .error::before { content: " ⚠ "; color: var(--frss-font-color-error); @@ -2100,9 +2116,13 @@ html.slider-active { text-decoration: underline double; } -.aside .category .title:not([data-unread="0"])::after, +.aside .feed .item-title { + padding: var(--frss-padding-top-bottom) 0 var(--frss-padding-top-bottom) 3.5rem; +} + +.aside .category .tree-folder-title .title:not([data-unread="0"])::after, .aside .feed .item-title:not([data-unread="0"])::after { - margin: calc(0.125rem + var(--frss-padding-top-bottom)) 0 0 0; + margin: var(--frss-padding-top-bottom) 0 0 0; padding: 0.25rem 0.5rem; min-width: 2rem; display: block; @@ -2117,6 +2137,10 @@ html.slider-active { font-weight: initial; } +.aside .category .title:not([data-unread="0"])::after { + margin: calc(0.125rem + var(--frss-padding-top-bottom)) 0 0 0; +} + .global .box.category .title:not([data-unread="0"])::after { margin: 0.5rem 0 0 0; padding: 5px 10px; @@ -2181,7 +2205,7 @@ html.slider-active { .feed .item-title:not([data-unread="0"]) { font-weight: bold; - width: calc(100% - 5.5rem); + width: calc(100% - 6rem); } .state_unread .category:not(.active)[data-unread="0"], @@ -2308,6 +2332,18 @@ html.slider-active { text-align: center; } + .aside .feed .item-title { + padding-right: 0.75rem; + padding-left: 4rem; + display: block; + width: 100%; + box-sizing: border-box; + } + + .aside .feed .item-title[data-unread="0"] { + padding-left: 1rem; + } + .flux .flux_header .item .title:has(~.date) { padding-left: 1rem; } From d56d791bafa5cdbe23067d01b92cd690e7ccb6cf Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Mon, 8 Jul 2024 12:00:58 +0200 Subject: [PATCH 1193/2479] Update composer shfmt typos (#6614) --- .github/workflows/tests.yml | 6 +++--- CONTRIBUTING.md | 2 +- Makefile | 4 ++-- cli/manipulate.translation.php | 2 +- docs/en/admins/07_LinuxUpdate.md | 2 +- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index ac63d982b56..7fe59019c80 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -82,14 +82,14 @@ jobs: uses: actions/cache@v4 with: path: bin - key: ${{ runner.os }}-bin-shfmt@v3.7.0-hadolint@v2.12.0-typos@v1.17.0 + key: ${{ runner.os }}-bin-shfmt@v3.8.0-hadolint@v2.12.0-typos@v1.23.1 - name: Add ./bin/ to $PATH run: mkdir -p bin/ && echo "${PWD}/bin" >> $GITHUB_PATH - name: Install shfmt if: steps.shell-cache.outputs.cache-hit != 'true' - run: GOBIN=${PWD}/bin/ go install mvdan.cc/sh/v3/cmd/shfmt@v3.7.0 + run: GOBIN=${PWD}/bin/ go install mvdan.cc/sh/v3/cmd/shfmt@v3.8.0 - name: Check shell script syntax # shellcheck is pre-installed https://github.com/actions/virtual-environments/blob/main/images/linux/Ubuntu2204-Readme.md @@ -106,7 +106,7 @@ jobs: if: steps.shell-cache.outputs.cache-hit != 'true' run: | cd bin ; - wget -q 'https://github.com/crate-ci/typos/releases/download/v1.17.0/typos-v1.17.0-x86_64-unknown-linux-musl.tar.gz' && + wget -q 'https://github.com/crate-ci/typos/releases/download/v1.23.1/typos-v1.23.1-x86_64-unknown-linux-musl.tar.gz' && tar -xvf *.tar.gz './typos' && chmod +x typos && rm *.tar.gz ; diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 76db326a6a2..66b28bb7ed8 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -14,7 +14,7 @@ You found a bug? Don’t panic, here are some steps to report it easily: 2. If you find a similar bug, don’t hesitate to post a comment to add more importance to the related ticket. 3. If you didn’t find it, [open a new ticket](https://github.com/FreshRSS/FreshRSS/issues/new). -If you have to create a new ticket, try to apply the following advices: +If you have to create a new ticket, try to apply the following advice: - Give an explicit title to the ticket so it will be easier to find it later. - Be as exhaustive as possible in the description: what did you do? What is the bug? What are the steps to reproduce the bug? diff --git a/Makefile b/Makefile index 1222ef3eec7..15f259bf4b8 100644 --- a/Makefile +++ b/Makefile @@ -72,7 +72,7 @@ lint-fix: vendor/bin/phpcbf ## Fix the errors detected by the linter bin/composer: mkdir -p bin/ - wget 'https://raw.githubusercontent.com/composer/getcomposer.org/8af47a6fd4910073ea7580378d6252c708f83a06/web/installer' -O - -q | php -- --quiet --install-dir='./bin/' --filename='composer' + wget 'https://raw.githubusercontent.com/composer/getcomposer.org/163a517dbb7eba0eb25633061c76e648392c6738/web/installer' -O - -q | php -- --quiet --install-dir='./bin/' --filename='composer' vendor/bin/phpunit: bin/composer bin/composer install --prefer-dist --no-progress @@ -89,7 +89,7 @@ vendor/bin/phpcbf: bin/composer bin/typos: mkdir -p bin/ cd bin ; \ - wget -q 'https://github.com/crate-ci/typos/releases/download/v1.17.0/typos-v1.17.0-x86_64-unknown-linux-musl.tar.gz' && \ + wget -q 'https://github.com/crate-ci/typos/releases/download/v1.23.1/typos-v1.23.1-x86_64-unknown-linux-musl.tar.gz' && \ tar -xvf *.tar.gz './typos' && \ chmod +x typos && \ rm *.tar.gz ; \ diff --git a/cli/manipulate.translation.php b/cli/manipulate.translation.php index 740f3c4b7f9..c0bfd1e3645 100755 --- a/cli/manipulate.translation.php +++ b/cli/manipulate.translation.php @@ -166,7 +166,7 @@ function manipulateHelp(): void { php $file -a ignore_unmodified -l my_lang Example 9: revert ignore on all unmodified keys. Removes IGNORE comments from all unmodified keys in the selected language. - Warning: will also revert individually added IGNOREs on unmodified keys. + Warning: will also revert individually added IGNORE(s) on unmodified keys. php $file -a ignore_unmodified -r -l my_lang Example 10: check if a key exist. diff --git a/docs/en/admins/07_LinuxUpdate.md b/docs/en/admins/07_LinuxUpdate.md index 47b84e5efa4..9c1ec8cef4f 100644 --- a/docs/en/admins/07_LinuxUpdate.md +++ b/docs/en/admins/07_LinuxUpdate.md @@ -4,7 +4,7 @@ This tutorial demonstrates commands for updating FreshRSS. It assumes that your **Note that FreshRSS contains a built-in update system.** It’s easier to use if you don’t understand the commands that follow. It’s available through the web interface of your FreshRSS installation, Administration → Update. -Please read the general advices from “[Backing Up and Updating FreshRSS](04_Updating.md)” before applying any command from this guide. +Please read the general advice from “[Backing Up and Updating FreshRSS](04_Updating.md)” before applying any command from this guide. ## Pausing automatic feed updates From 0f395dad43bb0ab7c2e7ac5751776e9aeeb42036 Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Tue, 9 Jul 2024 15:57:26 +0200 Subject: [PATCH 1194/2479] Initial support for PHP 8.4 (#6615) * Initial support for PHP 8.4 Sole fix needed so far seems to be related to https://wiki.php.net/rfc/deprecate-implicitly-nullable-types See also upstream PR https://github.com/PhpGt/CssXPath/pull/227 We are also hitting was seems to be a PHP bug https://github.com/php/php-src/issues/14873 * Fix return type * Disable OPCache while waiting for PHP fix --- Docker/Dockerfile-Newest | 13 +++++++------ cli/CliOptionsParser.php | 2 +- cli/i18n/I18nData.php | 2 +- tests/app/Models/FeedDAOTest.php | 11 +++++++++++ 4 files changed, 20 insertions(+), 8 deletions(-) create mode 100644 tests/app/Models/FeedDAOTest.php diff --git a/Docker/Dockerfile-Newest b/Docker/Dockerfile-Newest index 68a23e5535b..bea22ec9fc7 100644 --- a/Docker/Dockerfile-Newest +++ b/Docker/Dockerfile-Newest @@ -5,11 +5,12 @@ SHELL ["/bin/ash", "-eo", "pipefail", "-c"] RUN echo 'http://dl-cdn.alpinelinux.org/alpine/edge/testing' >> /etc/apk/repositories && \ apk add --no-cache \ tzdata \ - apache2 php83-apache2 \ + apache2 php84-apache2 \ apache-mod-auth-openidc \ - php83 php83-curl php83-gmp php83-intl php83-mbstring php83-xml php83-zip \ - php83-ctype php83-dom php83-fileinfo php83-iconv php83-json php83-opcache php83-openssl php83-phar php83-session php83-simplexml php83-xmlreader php83-xmlwriter php83-xml php83-tokenizer php83-zlib \ - php83-pdo_sqlite php83-pdo_mysql php83-pdo_pgsql + php84 php84-curl php84-gmp php84-intl php84-mbstring php84-xml php84-zip \ + php84-ctype php84-dom php84-fileinfo php84-iconv php84-json php84-openssl php84-phar php84-session php84-simplexml php84-xmlreader php84-xmlwriter php84-xml php84-tokenizer php84-zlib \ + # TODO: Re-add php84-opcache with PHP > 8.4.0alpha1. See https://github.com/php/php-src/issues/14873 + php84-pdo_sqlite php84-pdo_mysql php84-pdo_pgsql RUN mkdir -p /var/www/FreshRSS /run/apache2/ WORKDIR /var/www/FreshRSS @@ -41,8 +42,8 @@ RUN rm -f /etc/apache2/conf.d/languages.conf /etc/apache2/conf.d/info.conf \ sed -r -i "/^\s*(CustomLog|ErrorLog|Listen) /s/^/#/" \ /etc/apache2/httpd.conf && \ mv /etc/apache2/conf.d/mod-auth-openidc.conf /etc/apache2/conf.d/mod-auth-openidc.conf.bak && \ - if [ ! -f /usr/bin/php ]; then ln -s /usr/bin/php83 /usr/bin/php; else true; fi && \ - echo 'memory_limit = 256M' > /etc/php83/conf.d/10_memory.ini && \ + if [ ! -f /usr/bin/php ]; then ln -s /usr/bin/php84 /usr/bin/php; else true; fi && \ + echo 'memory_limit = 256M' > /etc/php84/conf.d/10_memory.ini && \ # Disable built-in updates when using Docker, as the full image is supposed to be updated instead. sed -r -i "\\#disable_update#s#^.*#\t'disable_update' => true,#" ./config.default.php && \ touch /var/www/FreshRSS/Docker/env.txt && \ diff --git a/cli/CliOptionsParser.php b/cli/CliOptionsParser.php index f75f6c19ac1..9fb50a4ff4b 100644 --- a/cli/CliOptionsParser.php +++ b/cli/CliOptionsParser.php @@ -43,7 +43,7 @@ protected function addRequiredOption(string $name, CliOption $option): void { * @param string $defaultInput If not null this value is received as input in all cases where no * user input is present. e.g. set this if you want an option to always return a value. */ - protected function addOption(string $name, CliOption $option, string $defaultInput = null): void { + protected function addOption(string $name, CliOption $option, ?string $defaultInput = null): void { $this->inputs[$name] = [ 'defaultInput' => is_string($defaultInput) ? [$defaultInput] : $defaultInput, 'required' => null, diff --git a/cli/i18n/I18nData.php b/cli/i18n/I18nData.php index 4142c92d18b..6d5730a08d4 100644 --- a/cli/i18n/I18nData.php +++ b/cli/i18n/I18nData.php @@ -101,7 +101,7 @@ private function getNonReferenceLanguages(): array { * Add a new language. It’s a copy of the reference language. * @throws Exception */ - public function addLanguage(string $language, string $reference = null): void { + public function addLanguage(string $language, ?string $reference = null): void { if (array_key_exists($language, $this->data)) { throw new Exception('The selected language already exist.'); } diff --git a/tests/app/Models/FeedDAOTest.php b/tests/app/Models/FeedDAOTest.php new file mode 100644 index 00000000000..e69b7c392dc --- /dev/null +++ b/tests/app/Models/FeedDAOTest.php @@ -0,0 +1,11 @@ +_ttl(-5); + self::assertEquals(-5, $feed->ttl(true)); + self::assertEquals(true, $feed->mute()); + } +} From b92b80d12484695b762e85f32e6d23303e62a84b Mon Sep 17 00:00:00 2001 From: maTh <1645099+math-GH@users.noreply.github.com> Date: Thu, 11 Jul 2024 19:20:58 +0200 Subject: [PATCH 1195/2479] Fixing dropdown menu for labels (#6617) --- app/layout/aside_feed.phtml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/layout/aside_feed.phtml b/app/layout/aside_feed.phtml index a9705a29660..719cf3660f0 100644 --- a/app/layout/aside_feed.phtml +++ b/app/layout/aside_feed.phtml @@ -66,8 +66,8 @@ ?>
      • Date: Thu, 18 Jul 2024 00:35:13 +0200 Subject: [PATCH 1197/2479] JSON Dot Notation allow string conversion (#6631) Allow fetching a string from string-friendly types. Fix https://github.com/FreshRSS/FreshRSS/discussions/6626 --- app/Utils/dotNotationUtil.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Utils/dotNotationUtil.php b/app/Utils/dotNotationUtil.php index a7fb066d105..9c44e5312ee 100644 --- a/app/Utils/dotNotationUtil.php +++ b/app/Utils/dotNotationUtil.php @@ -55,7 +55,7 @@ public static function get($array, ?string $key, mixed $default = null) { */ public static function getString($array, ?string $key): ?string { $result = self::get($array, $key, null); - return is_string($result) ? $result : null; + return is_string($result) || is_bool($result) || is_float($result) || is_int($result) ? (string)$result : null; } /** From 49789f4037dbd5bc87669e51846f8280a3bf8187 Mon Sep 17 00:00:00 2001 From: Dani Servian Date: Thu, 18 Jul 2024 18:08:14 +0200 Subject: [PATCH 1198/2479] Improve Spanish translations: Add missing entries and fix typos (#6634) * Translate TODO entries to Spanish and fix typos * further improve translation and fix more typos * Fix --------- Co-authored-by: Alexandre Alapetite --- app/i18n/es/admin.php | 10 +++---- app/i18n/es/conf.php | 40 +++++++++++++-------------- app/i18n/es/feedback.php | 16 +++++------ app/i18n/es/gen.php | 16 +++++------ app/i18n/es/index.php | 6 ++--- app/i18n/es/sub.php | 58 ++++++++++++++++++++-------------------- 6 files changed, 73 insertions(+), 73 deletions(-) diff --git a/app/i18n/es/admin.php b/app/i18n/es/admin.php index a25851c1a93..85dfd928fad 100644 --- a/app/i18n/es/admin.php +++ b/app/i18n/es/admin.php @@ -20,7 +20,7 @@ 'none' => 'Ninguno (peligroso)', 'title' => 'Identificación', 'token' => 'Token de autentificación Master', - 'token_help' => 'Permite el acceso a todas las salidas RSS del usuario así como la actualización de feeds sin autenticación:', + 'token_help' => 'Permite el acceso a todas las salidas RSS del usuario así como la actualización de fuentes sin autenticación:', 'type' => 'Método de identificación', 'unsafe_autologin' => 'Permite la identificación automática insegura usando el formato: ', ), @@ -63,8 +63,8 @@ 'ok' => 'Los permisos en el directorio favicons son correctos.', ), 'feeds' => array( - 'nok' => 'La tabla Feed está configurada de forma incorrecta.', - 'ok' => 'La tabla Feed está correcta.', + 'nok' => 'La tabla Fuentes está configurada de forma incorrecta.', + 'ok' => 'La tabla Fuentes está correcta.', ), 'fileinfo' => array( 'nok' => 'No se ha podido localizar la librería PHP fileinfo (paquete fileinfo).', @@ -136,7 +136,7 @@ 'entry_count' => 'Cómputo total', 'entry_per_category' => 'Entradas por categoría', 'entry_per_day' => 'Entradas por día (últimos 30 días)', - 'entry_per_day_of_week' => 'Por día de la semana (mnedia: %.2f mensajes)', + 'entry_per_day_of_week' => 'Por día de la semana (media: %.2f mensajes)', 'entry_per_hour' => 'Por hora (media: %.2f mensajes)', 'entry_per_month' => 'Por mes (media: %.2f mensajes)', 'entry_repartition' => 'Reparto de entradas', @@ -223,7 +223,7 @@ 'database_size' => 'Tamaño de la base de datos', 'email' => 'Dirección de correo electrónico', 'enabled' => 'Permitido', - 'feed_count' => 'Feeds', // IGNORE + 'feed_count' => 'Fuentes', 'is_admin' => 'Es admin', 'language' => 'Idioma', 'last_user_activity' => 'Última actividad del usuario', diff --git a/app/i18n/es/conf.php b/app/i18n/es/conf.php index 02c1609ec79..dc0e1c86a65 100644 --- a/app/i18n/es/conf.php +++ b/app/i18n/es/conf.php @@ -33,9 +33,9 @@ 'display' => array( '_' => 'Visualización', 'darkMode' => array( - '_' => 'Modo oscuro automatico', - 'auto' => 'Automatico', - 'help' => 'For compatible themes only', // TODO + '_' => 'Modo oscuro automático', + 'auto' => 'Automático', + 'help' => 'Solo para temas compatibles', 'no' => 'No', // IGNORE ), 'icon' => array( @@ -58,7 +58,7 @@ '_' => 'Tema', 'deprecated' => array( '_' => 'Obsoleto', - 'description' => 'Este tema no tiene soporte y no volvera a estar disponible en Futuros lanzamientos de FreshRSS', + 'description' => 'Este tema no tiene soporte y no volverá a estar disponible en Futuros lanzamientos de FreshRSS', ), ), 'theme_not_available' => 'El tema “%s” ya no está disponible. Por favor, elija otro tema.', @@ -115,14 +115,14 @@ 'query' => array( '_' => 'Consultas de usuario', 'deprecated' => 'Esta consulta ya no es válida. La categoría referenciada o fuente ha sido eliminada.', - 'description' => 'Description', // TODO + 'description' => 'Descripción', 'filter' => array( '_' => 'Filtro aplicado:', 'categories' => 'Mostrar por categoría', - 'feeds' => 'Mostrar por feed', + 'feeds' => 'Mostrar por fuente', 'order' => 'Ordenar por fecha', 'search' => 'Expresión', - 'shareOpml' => 'Permitir que OPML comparta las categorías y feeds correspondientes', + 'shareOpml' => 'Permitir que OPML comparta las categorías y fuentes correspondientes', 'shareRss' => 'Permite compartir por HTML & RSS', 'state' => 'Estado', 'tags' => 'Mostrar por etiqueta', @@ -133,10 +133,10 @@ 'get_category' => 'Mostrar la categoría “%s”', 'get_favorite' => 'Mostrar artículos favoritos', 'get_feed' => 'Mostrar fuente “%s”', - 'get_important' => 'Mostrar artículos de feeds importantes', + 'get_important' => 'Mostrar artículos de fuentes importantes', 'get_label' => 'Mostrar artículos con la etiqueta “%s”', 'help' => 'Ver la documentación para consultas de usuarios y compartir mediante HTML / RSS / OPML.', - 'image_url' => 'Image URL', // TODO + 'image_url' => 'URL de la imagen', 'name' => 'Nombre', 'no_filter' => 'Sin filtro', 'number' => 'Consulta n° %d', @@ -147,7 +147,7 @@ '_' => 'Comparte esta consulta por enlace', 'help' => 'Dale este enlace si quieres compartir esta consulta con alguien', 'html' => 'Enlace para compartir a la página HTML', - 'opml' => 'Enlace para compartir a la lista de feeds de OPML', + 'opml' => 'Enlace para compartir a la lista de fuentes de OPML', 'rss' => 'Enlace para compartir a la fuente RSS', ), 'state_0' => 'Mostrar todos los artículos', @@ -185,11 +185,11 @@ 'none' => 'Ninguno', 'with_authors' => 'En la fila de autores y fecha', ), - 'feed_title' => 'Título del Feed', + 'feed_title' => 'Título de la fuente', 'icons' => array( - '_' => 'Article icons position
        (Reading view only)', // TODO - 'above_title' => 'Above title', // TODO - 'with_authors' => 'In authors and date row', // TODO + '_' => 'Posición de los iconos del artículo
        (Solo en vista de lectura)', + 'above_title' => 'Encima del título', + 'with_authors' => 'En la fila de autores y fecha', ), 'tags' => array( '_' => 'Etiquetas', @@ -210,7 +210,7 @@ 'display_articles_unfolded' => 'Mostrar los artículos expandidos por defecto', 'display_categories_unfolded' => 'Categorías a desarrollar', 'headline' => array( - 'articles' => 'Artículos: Abrir/Cerar', + 'articles' => 'Artículos: Abrir/Cerrar', 'articles_header_footer' => 'Artículos: encabezado/pie de página', 'categories' => 'Navegación izquierda: Categorías', 'mark_as_read' => 'Marcar artículo como leído', @@ -225,10 +225,10 @@ 'read' => array( 'article_open_on_website' => 'cuando el artículo se abra en su web original', 'article_viewed' => 'cuando se muestre el artículo', - 'focus' => 'cuando tiene el foco (excepto para feed importantes)', + 'focus' => 'cuando tiene el foco (excepto para fuentes importantes)', 'keep_max_n_unread' => 'Número máximo de artículos para mantener sin leer', - 'scroll' => 'durante el desplazamiento (excepto para feed importantes)', - 'upon_gone' => 'cuando ya no está disponible en el feed de noticias previo', + 'scroll' => 'durante el desplazamiento (excepto para fuentes importantes)', + 'upon_gone' => 'cuando ya no está disponible en la fuente de noticias previa', 'upon_reception' => 'al recibir el artículo', 'when' => 'Marcar el artículo como leído…', 'when_same_title' => 'Si ya existe un título idéntico en la parte superior n artículos más recientes', @@ -272,7 +272,7 @@ 'remove' => 'Quitar método de uso compartido', 'shaarli' => 'Shaarli', // IGNORE 'share_name' => 'Compartir nombre a mostrar', - 'share_url' => 'Compatir URL a usar', + 'share_url' => 'Compartir URL a usar', 'title' => 'Compartir', 'twitter' => 'Twitter', // IGNORE 'wallabag' => 'wallabag', // IGNORE @@ -311,7 +311,7 @@ 'title' => 'Atajos de teclado', 'toggle_media' => 'Jugar/pausar medios', 'user_filter' => 'Acceso a filtros de usuario', - 'user_filter_help' => 'Si solo hay un filtro de usuario, ese será el que se use. En caso contrario, los filtros están accesibles por su númeración.', + 'user_filter_help' => 'Si solo hay un filtro de usuario, ese será el que se use. En caso contrario, los filtros están accesibles por su numeración.', 'views' => 'Vistas', ), 'user' => array( diff --git a/app/i18n/es/feedback.php b/app/i18n/es/feedback.php index fbb52d88005..9c2df529403 100644 --- a/app/i18n/es/feedback.php +++ b/app/i18n/es/feedback.php @@ -16,7 +16,7 @@ 'not_found' => 'La página que buscas no existe', ), 'admin' => array( - 'optimization_complete' => 'Optimimización completada', + 'optimization_complete' => 'Optimización completada', ), 'api' => array( 'password' => array( @@ -57,8 +57,8 @@ ), 'import_export' => array( 'export_no_zip_extension' => 'La extensión ZIP no está disponible en tu servidor. Por favor, exporta estos archivos uno a uno.', - 'feeds_imported' => 'Se han importado tus fuentes y quedarán actualizadas. Si has terminado, puedes hacer click en el botón Actualizar feeds.', - 'feeds_imported_with_errors' => 'Se importaron tus fuentes; pero hubo algunos errores. Si has terminado, puedes hacer click en el botón Actualizar feeds', + 'feeds_imported' => 'Se han importado tus fuentes y quedarán actualizadas. Si has terminado, puedes hacer click en el botón Actualizar fuentes.', + 'feeds_imported_with_errors' => 'Se importaron tus fuentes; pero hubo algunos errores. Si has terminado, puedes hacer click en el botón Actualizar fuentes', 'file_cannot_be_uploaded' => 'No es posible enviar el archivo', 'no_zip_extension' => 'La extensión ZIP no está disponible en tu servidor.', 'zip_error' => 'Hubo un error durante la importación del ZIP.', @@ -96,18 +96,18 @@ 'error' => 'No es posible actualizar la fuente', 'internal_problem' => 'No ha sido posible agregar la fuente RSS. Revisa el registro de FreshRSS para más información. Puedes probar de forzarlo añadiendo la etiqueta #force_feed a la URL.', 'invalid_url' => 'La URL %s es inválida', - 'n_actualized' => 'Se han actualiado %d fuentes', + 'n_actualized' => 'Se han actualizado %d fuentes', 'n_entries_deleted' => 'Se han eliminado %d artículos', 'no_refresh' => 'No hay fuente a actualizar…', 'not_added' => '%s no ha podido se añadida', - 'not_found' => 'No se puede encontrar el feed', + 'not_found' => 'No se puede encontrar la fuente', 'over_max' => 'Has alcanzado tu límite de fuentes (%d)', 'reloaded' => '%s se ha vuelto a cargar', 'selector_preview' => array( 'http_error' => 'Error al cargar el contenido del sitio web.', - 'no_entries' => 'No hay artículos en este feed. Necesitas al menos un artículo para crear una vista previa.', - 'no_feed' => 'Error interno (no se puede encontrar el feed).', - 'no_result' => 'El selector no coincidyó con nada. Como reserva, se mostrará el texto original del feed en su lugar.', + 'no_entries' => 'No hay artículos en esta fuente. Necesitas al menos un artículo para crear una vista previa.', + 'no_feed' => 'Error interno (no se puede encontrar la fuente).', + 'no_result' => 'El selector no coincidió con nada. Como reserva, se mostrará el texto original de la fuente en su lugar.', 'selector_empty' => 'El selector está vacío. Debe definir uno para crear una vista previa.', ), 'updated' => 'Fuente actualizada', diff --git a/app/i18n/es/gen.php b/app/i18n/es/gen.php index 2a7d116de20..b76178c9131 100644 --- a/app/i18n/es/gen.php +++ b/app/i18n/es/gen.php @@ -18,7 +18,7 @@ 'back_to_rss_feeds' => '← regresar a tus fuentes RSS', 'cancel' => 'Cancelar', 'create' => 'Crear', - 'delete_muted_feeds' => 'Eliminar feeds silenciados', + 'delete_muted_feeds' => 'Eliminar fuentes silenciadas', 'demote' => 'Degradar', 'disable' => 'Desactivar', 'empty' => 'Vaciar', @@ -30,12 +30,12 @@ 'manage' => 'Administrar', 'mark_read' => 'Marcar como leído', 'menu' => array( - 'open' => 'Open menu', // TODO + 'open' => 'Abrir menú', ), 'nav_buttons' => array( - 'next' => 'Next article', // TODO - 'prev' => 'Previous article', // TODO - 'up' => 'Go up', // TODO + 'next' => 'Siguiente artículo', + 'prev' => 'Anterior artículo', + 'up' => 'Ir arriba', ), 'open_url' => 'Abrir URL', 'promote' => 'Promover', @@ -49,7 +49,7 @@ 'update' => 'Actualizar', ), 'auth' => array( - 'accept_tos' => 'Acpeto los Terminos de Servicio.', + 'accept_tos' => 'Acepto los Términos de Servicio.', 'email' => 'Correo electrónico', 'keep_logged_in' => 'Mantenerme identificado (%s días)', 'login' => 'Conectar', @@ -134,7 +134,7 @@ ), 'js' => array( 'category_empty' => 'Vaciar categoría', - 'confirm_action' => '¿Seguyro que quieres hacerlo? No hay marcha atrás…', + 'confirm_action' => '¿Seguro que quieres hacerlo? No hay marcha atrás…', 'confirm_action_feed_cat' => '¿Seguro que quieres hacerlo? Perderás todos los favoritos relacionados y las peticiones de usuario. ¡Y no hay marcha atrás!', 'feedback' => array( 'body_new_articles' => 'Hay %%d nuevos artículos para leer en FreshRSS.', @@ -196,7 +196,7 @@ 'user_profile' => 'Perfil', ), 'period' => array( - 'days' => 'dias', + 'days' => 'días', 'hours' => 'horas', 'months' => 'meses', 'weeks' => 'semanas', diff --git a/app/i18n/es/index.php b/app/i18n/es/index.php index 22628fb390b..3401347bd20 100644 --- a/app/i18n/es/index.php +++ b/app/i18n/es/index.php @@ -17,7 +17,7 @@ 'bugs_reports' => 'Informe de fallos', 'credits' => 'Créditos', 'credits_content' => 'Aunque FreshRSS no usa ese entorno, algunos elementos del diseño están obtenidos de Bootstrap. Los Iconos han sido obtenidos del proyecto GNOME. La fuente Open Sans es una creación de Steve Matteson. FreshRSS usa el entorno PHP Minz.', - 'documentation' => 'Documentacion', + 'documentation' => 'Documentación', 'freshrss_description' => 'FreshRSS es un agregador de fuentes RSS de alojamiento privado. Es una herramienta potente, pero ligera y fácil de usar y configurar.', 'github' => 'en GitHub', 'license' => 'Licencia', @@ -45,7 +45,7 @@ 'bookmark_query' => 'Marcar consulta actual', 'favorites' => 'Favoritos (%s)', 'global_view' => 'Vista Global', - 'important' => 'Feeds importantes', + 'important' => 'Fuentes importantes', 'main_stream' => 'Salida Principal', 'mark_all_read' => 'Marcar todo como leído', 'mark_cat_read' => 'Marcar categoría como leída', @@ -64,7 +64,7 @@ 'stats' => 'Estadísticas', 'subscription' => 'Administración de suscripciones', 'tags' => 'Mis etiquetas', - 'unread' => 'Mostar solo no leídos', + 'unread' => 'Mostrar solo no leídos', ), 'share' => 'Compartir', 'tag' => array( diff --git a/app/i18n/es/sub.php b/app/i18n/es/sub.php index ed0de211d95..a134beb5729 100644 --- a/app/i18n/es/sub.php +++ b/app/i18n/es/sub.php @@ -26,12 +26,12 @@ 'archiving' => 'Archivo', 'dynamic_opml' => array( '_' => 'OPML dinámico', - 'help' => 'Provee la URL a un archivo OPML para llenar dinámicamente esta categoría con feeds', + 'help' => 'Provee la URL a un archivo OPML para llenar dinámicamente esta categoría con fuentes', ), 'empty' => 'Vaciar categoría', - 'expand' => 'Expand category', // TODO + 'expand' => 'Expandir categoría', 'information' => 'Información', - 'open' => 'Open category', // TODO + 'open' => 'Abrir categoría', 'opml_url' => 'URL del OPML', 'position' => 'Posición de visualización', 'position_help' => 'Para controlar el orden de clasificación de categorías', @@ -39,7 +39,7 @@ ), 'feed' => array( 'accept_cookies' => 'Aceptar cookies', - 'accept_cookies_help' => 'Permitir que el servidor de feed configure las cookies (guardadas en memoria únicamente para el tiempo de vida de la solicitud)', + 'accept_cookies_help' => 'Permitir que el servidor de fuentes configure las cookies (guardadas en memoria únicamente para el tiempo de vida de la solicitud)', 'add' => 'Añadir fuente RSS', 'advanced' => 'Avanzado', 'archiving' => 'Archivo', @@ -53,8 +53,8 @@ 'clear_cache' => 'Borrar siempre la memoria caché', 'content_action' => array( '_' => 'Acción de contenido al obtener el contenido del artículo', - 'append' => 'Agregar después del contenido existente', - 'prepend' => 'Agregar antes del contenido existente', + 'append' => 'Añadir después del contenido existente', + 'prepend' => 'Añadir antes del contenido existente', 'replace' => 'Reemplazar contenido existente', ), 'css_cookie' => 'Usar cookies al obtener el contenido del artículo', @@ -67,7 +67,7 @@ ), 'description' => 'Descripción', 'empty' => 'La fuente está vacía. Por favor, verifica que siga activa.', - 'error' => 'Hay un problema con esta fuente. Por favor, veritica que esté disponible y prueba de nuevo.', + 'error' => 'Hay un problema con esta fuente. Por favor, verifica que esté disponible y prueba de nuevo.', 'export-as-opml' => array( 'download' => 'Descargar', 'help' => 'archivo XML (data subset. See documentation)', // DIRTY @@ -80,12 +80,12 @@ 'information' => 'Información', 'keep_min' => 'Número mínimo de artículos a conservar', 'kind' => array( - '_' => 'Tipo de origen del feed', + '_' => 'Tipo de origen de la fuente', 'html_xpath' => array( '_' => 'HTML + XPath (Web scraping)', // IGNORE 'feed_title' => array( - '_' => 'Título del feed', - 'help' => 'Ejemplo: //título o un texto estático: "Mi feed personalizado"', + '_' => 'Título de la fuente', + 'help' => 'Ejemplo: //título o un texto estático: "Mi fuente personalizada"', ), 'help' => 'XPath 1.0 es un lenguaje de consulta estándar para usuarios avanzados, el cual FreshRSS soporta para habilitar Web scraping', 'item' => array( @@ -131,8 +131,8 @@ 'json_dotnotation' => array( '_' => 'JSON (notación de punto)', 'feed_title' => array( - '_' => 'título del feed', - 'help' => 'Ejemplo: meta.title o texto estático: "Feed personalizado"', + '_' => 'título de la fuente', + 'help' => 'Ejemplo: meta.title o texto estático: "Fuente personalizada"', ), 'help' => 'Un punto JSON anotado utiliza puntos entre objetos y corchetes para matrices (ejemplo: data.items[0].title)', 'item' => array( @@ -155,7 +155,7 @@ ), 'item_timestamp' => array( '_' => 'fecha del item', - 'help' => 'El resultado será parseado por strtotime()', + 'help' => 'El resultado será analizado por strtotime()', ), 'item_title' => 'título del item', 'item_uid' => 'ID único del item', @@ -166,7 +166,7 @@ 'json' => 'notación de punto por:', 'relative' => 'ruta de notación con puntos (relativa al elemento) para:', ), - 'jsonfeed' => 'JSON Feed', // IGNORE + 'jsonfeed' => 'Fuente JSON', 'rss' => 'RSS / Atom (por defecto)', 'xml_xpath' => 'XML + XPath', // IGNORE ), @@ -178,7 +178,7 @@ 'title' => 'Mantenimiento', ), 'max_http_redir' => 'Máximas redirecciones HTTP', - 'max_http_redir_help' => 'Escribir 0 o dejarlo en blanco para deshabilitarlo, -1 para redirecciones ilimitadas', + 'max_http_redir_help' => 'Escribir 0 o dejarlo en blanco para deshabilitar, -1 para redirecciones ilimitadas', 'method' => array( '_' => 'HTTP Method', // IGNORE ), @@ -187,16 +187,16 @@ 'moved_category_deleted' => 'Al borrar una categoría todas sus fuentes pasan automáticamente a la categoría %s.', 'mute' => array( '_' => 'silenciar', - 'state_is_muted' => 'This feed is muted', // TODO + 'state_is_muted' => 'Esta fuente está silenciada', ), - 'no_selected' => 'No hay funentes seleccionadas.', + 'no_selected' => 'No hay fuentes seleccionadas.', 'number_entries' => '%d artículos', - 'open_feed' => 'Open feed %s', // TODO + 'open_feed' => 'Fuente abierta %s', 'priority' => array( '_' => 'Visibilidad', 'archived' => 'No mostrar (archivado)', 'category' => 'Mostrar en su categoría', - 'important' => 'Mostrar en feeds importantes', + 'important' => 'Mostrar en fuentes importantes', 'main_stream' => 'Mostrar en salida principal', ), 'proxy' => 'Establecer un proxy para obtener esta fuente', @@ -206,11 +206,11 @@ 'show_rendered' => 'Mostrar contenido', ), 'show' => array( - 'all' => 'Mostrar todos los feeds', - 'error' => 'Mostrar solo feeds con errores', + 'all' => 'Mostrar todas las fuentes', + 'error' => 'Mostrar solo fuentes con errores', ), 'showing' => array( - 'error' => 'Mostrar solo feeds con errores', + 'error' => 'Mostrar solo fuentes con errores', ), 'ssl_verify' => 'Verificar la seguridad SSL', 'stats' => 'Estadísticas', @@ -220,11 +220,11 @@ 'title_add' => 'Añadir fuente RSS', 'ttl' => 'No actualizar de forma automática con una frecuencia mayor a', 'url' => 'URL de la fuente', - 'useragent' => 'Selecciona el agente de usario por recuperar la fuente', + 'useragent' => 'Selecciona el agente de usuario por recuperar la fuente', 'useragent_help' => 'Ejemplo: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:86.0)', 'validator' => 'Verifica la validez de la fuente', 'website' => 'Web de la URL', - 'websub' => 'Notificación inmedaiata con WebSub', + 'websub' => 'Notificación inmediata con WebSub', ), 'import_export' => array( 'export' => 'Exportar', @@ -239,7 +239,7 @@ 'title' => 'Importar / exportar', ), 'menu' => array( - 'add' => 'Agregar un feed o una categoría', + 'add' => 'Añadir una fuente o categoría', 'import_export' => 'Importar / exportar', 'label_management' => 'Gestión de etiquetas', 'stats' => array( @@ -251,17 +251,17 @@ 'subscription_tools' => 'Herramientas de suscripción', ), 'tag' => array( - 'auto_label' => 'Añadir esta estiqueta a nuevos artículos', + 'auto_label' => 'Añadir esta etiqueta a nuevos artículos', 'name' => 'Nombre', 'new_name' => 'Nuevo nombre', 'old_name' => 'Nombre antiguo', ), 'title' => array( '_' => 'Administración de suscripciones', - 'add' => 'Agregar un feed o una categoría', - 'add_category' => 'Agregar una categoría', + 'add' => 'Añadir una fuente o categoría', + 'add_category' => 'Añadir una categoría', 'add_dynamic_opml' => 'Agrega un OPML dinámico', - 'add_feed' => 'Añadir un feed', + 'add_feed' => 'Añadir una fuente', 'add_label' => 'Añadir una etiqueta', 'delete_label' => 'Eliminar una etiqueta', 'feed_management' => 'Administración de fuentes RSS', From da6e349e538ac5ecc268da94600cacb6e1bd53c0 Mon Sep 17 00:00:00 2001 From: Dani Servian Date: Thu, 18 Jul 2024 21:10:50 +0200 Subject: [PATCH 1199/2479] Add contributor to credits.md (#6636) * Add dservian to credits.md * Fix alphabetical order --- CREDITS.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CREDITS.md b/CREDITS.md index dfcfb6f8927..2c37f911dc7 100644 --- a/CREDITS.md +++ b/CREDITS.md @@ -55,6 +55,7 @@ People are sorted by name so please keep this order. * [Damien Leroy](https://github.com/ShiiFu): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:ShiiFu) * [Damstre](https://github.com/Damstre): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:Damstre) * [danc](https://github.com/danc): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:danc), [Web](http://tintouli.free.fr/) +* [Dani Servian](https://github.com/dservian): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:dservian) * [Daniel Lo Nigro](https://github.com/Daniel15): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:Daniel15), [Web](https://d.sb/) * [David Lynch](https://github.com/kemayo): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:kemayo), [Web](http://davidlynch.org/) * [David Souza](https://github.com/araujo0205): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:araujo0205), [Web](http://davidsouza.tech/) From 365cae840597e6d5e8e1450df98ade83499c654e Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Thu, 18 Jul 2024 22:53:01 +0200 Subject: [PATCH 1200/2479] Re-enable OPCache for PHP 8.4-alpha2 (#6637) Support https://www.php.net/index.php#2024-07-18-1 Follow-up of https://github.com/FreshRSS/FreshRSS/pull/6615 Bug https://github.com/php/php-src/issues/14873 was fixed https://github.com/nielsdos/php-src/commit/3d0885f9e54ba46bbb082df4c9c32f0be98ee423 --- Docker/Dockerfile-Newest | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Docker/Dockerfile-Newest b/Docker/Dockerfile-Newest index bea22ec9fc7..4cf752b6aae 100644 --- a/Docker/Dockerfile-Newest +++ b/Docker/Dockerfile-Newest @@ -8,8 +8,7 @@ RUN echo 'http://dl-cdn.alpinelinux.org/alpine/edge/testing' >> /etc/apk/reposit apache2 php84-apache2 \ apache-mod-auth-openidc \ php84 php84-curl php84-gmp php84-intl php84-mbstring php84-xml php84-zip \ - php84-ctype php84-dom php84-fileinfo php84-iconv php84-json php84-openssl php84-phar php84-session php84-simplexml php84-xmlreader php84-xmlwriter php84-xml php84-tokenizer php84-zlib \ - # TODO: Re-add php84-opcache with PHP > 8.4.0alpha1. See https://github.com/php/php-src/issues/14873 + php84-ctype php84-dom php84-fileinfo php84-iconv php84-json php84-opcache php84-openssl php84-phar php84-session php84-simplexml php84-xmlreader php84-xmlwriter php84-xml php84-tokenizer php84-zlib \ php84-pdo_sqlite php84-pdo_mysql php84-pdo_pgsql RUN mkdir -p /var/www/FreshRSS /run/apache2/ From 47b5e40e7240b5ccb0d0b6c54e0a958243689c83 Mon Sep 17 00:00:00 2001 From: maTh <1645099+math-GH@users.noreply.github.com> Date: Sat, 20 Jul 2024 09:35:21 +0200 Subject: [PATCH 1201/2479] Fix: feed dropdown (#6641) * Update aside_feed.phtml * Update main.js --- p/scripts/main.js | 5 ----- 1 file changed, 5 deletions(-) diff --git a/p/scripts/main.js b/p/scripts/main.js index 75cf5f65ccc..b3781c8b5a6 100644 --- a/p/scripts/main.js +++ b/p/scripts/main.js @@ -896,11 +896,6 @@ function init_column_categories() { if (b) { b.disabled = false; } - } else if (getComputedStyle(dropdownMenu).display === 'none') { - const id2 = div.closest('.item').id.substr(2); - a.href = '#dropdown-' + id2; - } else { - a.href = '#close'; } return true; } From 0eeac4a669e46fb6521ae1765b23656c9afc43de Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Sun, 21 Jul 2024 14:54:34 +0200 Subject: [PATCH 1202/2479] Revisit keepMaxUnreads (#6632) * Revisit keepMaxUnreads Again, follow-up of https://github.com/FreshRSS/FreshRSS/pull/5905 fix https://github.com/FreshRSS/FreshRSS/issues/6620 * Refactoring to address buggy cases * Fix minor test --- app/Controllers/feedController.php | 166 +++++++++++++++-------------- app/Models/EntryDAO.php | 43 ++------ app/Models/Feed.php | 7 +- app/Models/FeedDAO.php | 23 ++-- cli/actualize-user.php | 8 +- p/api/greader.php | 5 +- p/api/pshb.php | 7 +- 7 files changed, 114 insertions(+), 145 deletions(-) diff --git a/app/Controllers/feedController.php b/app/Controllers/feedController.php index 2ecf6c374c2..ba5596a3c93 100644 --- a/app/Controllers/feedController.php +++ b/app/Controllers/feedController.php @@ -110,11 +110,7 @@ public static function addFeed(string $url, string $title = '', int $cat_id = 0, $feed->_id($id); // Ok, feed has been added in database. Now we have to refresh entries. - [, , $nb_new_articles] = self::actualizeFeeds($id, $url); - if ($nb_new_articles > 0) { - self::commitNewEntries(); - } - + self::actualizeFeedsAndCommit($id, $url); return $feed; } @@ -385,7 +381,8 @@ public function truncateAction(): void { } /** - * @return array{0:int,1:FreshRSS_Feed|null,2:int} Number of updated feeds, first feed or null, number of new articles + * @return array{0:int,1:FreshRSS_Feed|null,2:int,3:array} Number of updated feeds, first feed or null, number of new articles, + * list of feeds for which a cache refresh is needed * @throws FreshRSS_BadUrl_Exception */ public static function actualizeFeeds(?int $feed_id = null, ?string $feed_url = null, ?int $maxFeeds = null, ?SimplePie $simplePiePush = null): array { @@ -435,8 +432,9 @@ public static function actualizeFeeds(?int $feed_id = null, ?string $feed_url = $pubsubhubbubEnabledGeneral = FreshRSS_Context::systemConf()->pubsubhubbub_enabled; $pshbMinAge = time() - (3600 * 24); //TODO: Make a configuration. - $updated_feeds = 0; - $nb_new_articles = 0; + $nbUpdatedFeeds = 0; + $nbNewArticles = 0; + $feedsCacheToRefresh = []; foreach ($feeds as $feed) { $feed = Minz_ExtensionManager::callHook('feed_before_actualize', $feed); @@ -598,9 +596,6 @@ public static function actualizeFeeds(?int $feed_id = null, ?string $feed_url = // If the entry has changed, there is a good chance for the full content to have changed as well. $entry->loadCompleteContent(true); - if (!$entryDAO->inTransaction()) { - $entryDAO->beginTransaction(); - } $entryDAO->updateEntry($entry->toArray()); } } else { @@ -619,6 +614,8 @@ public static function actualizeFeeds(?int $feed_id = null, ?string $feed_url = $titlesAsRead[$entry->title()] = true; } + $needFeedCacheRefresh = true; + if ($pubSubHubbubEnabled && !$simplePiePush) { //We use push, but have discovered an article by pull! $text = 'An article was discovered by pull although we use PubSubHubbub!: Feed ' . SimplePie_Misc::url_remove_credentials($url) . @@ -629,29 +626,20 @@ public static function actualizeFeeds(?int $feed_id = null, ?string $feed_url = $feed->pubSubHubbubError(true); } - if (!$entryDAO->inTransaction()) { - $entryDAO->beginTransaction(); + if ($entryDAO->addEntry($entry->toArray(), true)) { + $nbNewArticles++; } - $entryDAO->addEntry($entry->toArray(), true); - - $nb_new_articles++; } } // N.B.: Applies to _entry table and not _entrytmp: $entryDAO->updateLastSeen($feed->id(), array_keys($newGuids), $mtime); } elseif ($feedIsUnchanged) { // Feed cache was unchanged, so mark as seen the same entries as last time - if (!$entryDAO->inTransaction()) { - $entryDAO->beginTransaction(); - } $entryDAO->updateLastSeenUnchanged($feed->id(), $mtime); } unset($entries); if (rand(0, 30) === 1) { // Remove old entries once in 30. - if (!$entryDAO->inTransaction()) { - $entryDAO->beginTransaction(); - } $nb = $feed->cleanOldEntries(); if ($nb > 0) { $needFeedCacheRefresh = true; @@ -659,20 +647,12 @@ public static function actualizeFeeds(?int $feed_id = null, ?string $feed_url = } $feedDAO->updateLastUpdate($feed->id(), false, $mtime); - if ($feed->keepMaxUnread() !== null && ($feed->nbNotRead() + $nbMarkedUnread > $feed->keepMaxUnread())) { - Minz_Log::debug('Existing unread entries (' . ($feed->nbNotRead() + $nbMarkedUnread) . ') exceeding max number of ' . - $feed->keepMaxUnread() . ' for [' . $feed->url(false) . ']'); - $needFeedCacheRefresh |= ($feed->markAsReadMaxUnread() != false); - } if ($simplePiePush === null) { // Do not call for WebSub events, as we do not know the list of articles still on the upstream feed. $needFeedCacheRefresh |= ($feed->markAsReadUponGone($feedIsEmpty, $mtime) != false); } if ($needFeedCacheRefresh) { - $feedDAO->updateCachedValues($feed->id()); - } - if ($entryDAO->inTransaction()) { - $entryDAO->commit(); + $feedsCacheToRefresh[] = $feed; } $feedProperties = []; @@ -735,43 +715,37 @@ public static function actualizeFeeds(?int $feed_id = null, ?string $feed_url = } } $feed->unlock(); - $updated_feeds++; + $nbUpdatedFeeds++; unset($feed); gc_collect_cycles(); - if ($updated_feeds >= $maxFeeds) { + if ($nbUpdatedFeeds >= $maxFeeds) { break; } } - return [$updated_feeds, reset($feeds) ?: null, $nb_new_articles]; + return [$nbUpdatedFeeds, reset($feeds) ?: null, $nbNewArticles, $feedsCacheToRefresh]; } /** - * @return int|false The number of articles marked as read, of false if error + * Feeds on which to apply a the keep max unreads policy, or all feeds if none specified. + * @return int The number of articles marked as read */ - private static function keepMaxUnreads() { + private static function keepMaxUnreads(FreshRSS_Feed ...$feeds): int { $affected = 0; - $entryDAO = FreshRSS_Factory::createEntryDao(); - $newUnreadEntriesPerFeed = $entryDAO->newUnreadEntriesPerFeed(); - $feedDAO = FreshRSS_Factory::createFeedDao(); - $feeds = $feedDAO->listFeedsOrderUpdate(-1); + + if (empty($feeds)) { + $feedDAO = FreshRSS_Factory::createFeedDao(); + $feeds = $feedDAO->listFeedsOrderUpdate(-1); + } + foreach ($feeds as $feed) { - if (!empty($newUnreadEntriesPerFeed[$feed->id()]) && $feed->keepMaxUnread() !== null && - ($feed->nbNotRead() + $newUnreadEntriesPerFeed[$feed->id()] > $feed->keepMaxUnread())) { - Minz_Log::debug('New unread entries (' . ($feed->nbNotRead() + $newUnreadEntriesPerFeed[$feed->id()]) . ') exceeding max number of ' . - $feed->keepMaxUnread() . ' for [' . $feed->url(false) . ']'); - $n = $feed->markAsReadMaxUnread(); - if ($n === false) { - $affected = false; - break; - } else { - $affected += $n; - } + $n = $feed->markAsReadMaxUnread(); + if ($n !== false && $n > 0) { + Minz_Log::debug($n . ' unread entries exceeding max number of ' . $feed->keepMaxUnread() . ' for [' . $feed->url(false) . ']'); + $affected += $n; } } - if ($feedDAO->updateCachedValues() === false) { - $affected = false; - } + return $affected; } @@ -807,23 +781,38 @@ private static function applyLabelActions(int $nbNewEntries) { return $tagDAO->tagEntries($applyLabels); } - public static function commitNewEntries(): void { + public static function commitNewEntries(): int { $entryDAO = FreshRSS_Factory::createEntryDao(); - ['all' => $nbNewEntries, 'unread' => $nbNewUnreadEntries] = $entryDAO->countNewEntries(); + $nbNewEntries = $entryDAO->countNewEntries(); if ($nbNewEntries > 0) { - if (!$entryDAO->inTransaction()) { - $entryDAO->beginTransaction(); - } if ($entryDAO->commitNewEntries()) { self::applyLabelActions($nbNewEntries); - if ($nbNewUnreadEntries > 0) { - self::keepMaxUnreads(); - } - } - if ($entryDAO->inTransaction()) { - $entryDAO->commit(); } } + return $nbNewEntries; + } + + /** + * @return array{0:int,1:FreshRSS_Feed|null,2:int,3:array} Number of updated feeds, first feed or null, number of new articles, + * list of feeds for which a cache refresh is needed + * @throws FreshRSS_BadUrl_Exception + */ + public static function actualizeFeedsAndCommit(?int $feed_id = null, ?string $feed_url = null, ?int $maxFeeds = null, ?SimplePie $simplePiePush = null): array { + $entryDAO = FreshRSS_Factory::createEntryDao(); + $entryDAO->beginTransaction(); + [$nbUpdatedFeeds, $feed, $nbNewArticles, $feedsCacheToRefresh] = FreshRSS_feed_Controller::actualizeFeeds($feed_id, $feed_url, $maxFeeds, $simplePiePush); + if ($nbNewArticles > 0) { + FreshRSS_feed_Controller::commitNewEntries(); + } + if (count($feedsCacheToRefresh) > 0) { + $feedDAO = FreshRSS_Factory::createFeedDao(); + self::keepMaxUnreads(...$feedsCacheToRefresh); + $feedDAO->updateCachedValues(...array_map(fn(FreshRSS_Feed $f) => $f->id(), $feedsCacheToRefresh)); + } + if ($entryDAO->inTransaction()) { + $entryDAO->commit(); + } + return [$nbUpdatedFeeds, $feed, $nbNewArticles, $feedsCacheToRefresh]; } /** @@ -844,9 +833,11 @@ public function actualizeAction(): int { $noCommit = ($_POST['noCommit'] ?? 0) == 1; if ($id === -1 && !$noCommit) { //Special request only to commit & refresh DB cache - $updated_feeds = 0; + $nbUpdatedFeeds = 0; $feed = null; - self::commitNewEntries(); + FreshRSS_feed_Controller::commitNewEntries(); + $feedDAO = FreshRSS_Factory::createFeedDao(); + $feedDAO->updateCachedValues(); } else { if ($id === 0 && $url === '') { // Case of a batch refresh (e.g. cron) @@ -855,11 +846,32 @@ public function actualizeAction(): int { Minz_ExtensionManager::callHookVoid('freshrss_user_maintenance'); FreshRSS_feed_Controller::commitNewEntries(); + $feedDAO = FreshRSS_Factory::createFeedDao(); + $feedDAO->updateCachedValues(); FreshRSS_category_Controller::refreshDynamicOpmls(); } - [$updated_feeds, $feed, $nbNewArticles] = self::actualizeFeeds($id, $url, $maxFeeds); - if (!$noCommit && $nbNewArticles > 0) { - FreshRSS_feed_Controller::commitNewEntries(); + $entryDAO = FreshRSS_Factory::createEntryDao(); + $entryDAO->beginTransaction(); + [$nbUpdatedFeeds, $feed, $nbNewArticles, $feedsCacheToRefresh] = self::actualizeFeeds($id, $url, $maxFeeds); + if (!$noCommit) { + if ($nbNewArticles > 0) { + FreshRSS_feed_Controller::commitNewEntries(); + } + $feedDAO = FreshRSS_Factory::createFeedDao(); + if ($id !== 0 && $id !== -1) { + if ($feed instanceof FreshRSS_Feed) { + self::keepMaxUnreads($feed); + } + // Case of single feed refreshed, always update its cache + $feedDAO->updateCachedValues($id); + } elseif (count($feedsCacheToRefresh) > 0) { + self::keepMaxUnreads(...$feedsCacheToRefresh); + // Case of multiple feeds refreshed, only update cache of affected feeds + $feedDAO->updateCachedValues(...array_map(fn(FreshRSS_Feed $f) => $f->id(), $feedsCacheToRefresh)); + } + } + if ($entryDAO->inTransaction()) { + $entryDAO->commit(); } } @@ -875,12 +887,12 @@ public function actualizeAction(): int { Minz_Request::good(_t('feedback.sub.feed.actualized', $feed->name()), [ 'params' => ['get' => 'f_' . $id] ]); - } elseif ($updated_feeds >= 1) { - Minz_Request::good(_t('feedback.sub.feed.n_actualized', $updated_feeds), []); + } elseif ($nbUpdatedFeeds >= 1) { + Minz_Request::good(_t('feedback.sub.feed.n_actualized', $nbUpdatedFeeds), []); } else { Minz_Request::good(_t('feedback.sub.feed.no_refresh'), []); } - return $updated_feeds; + return $nbUpdatedFeeds; } /** @@ -1047,8 +1059,6 @@ public function reloadAction(): void { $limit = Minz_Request::paramInt('reload_limit') ?: 10; $feedDAO = FreshRSS_Factory::createFeedDao(); - $entryDAO = FreshRSS_Factory::createEntryDao(); - $feed = $feedDAO->searchById($feed_id); if ($feed === null) { Minz_Request::bad(_t('feedback.sub.feed.not_found'), []); @@ -1057,12 +1067,10 @@ public function reloadAction(): void { //Re-fetch articles as if the feed was new. $feedDAO->updateFeed($feed->id(), [ 'lastUpdate' => 0 ]); - [, , $nb_new_articles] = self::actualizeFeeds($feed_id); - if ($nb_new_articles > 0) { - FreshRSS_feed_Controller::commitNewEntries(); - } + self::actualizeFeedsAndCommit($feed_id); //Extract all feed entries from database, load complete content and store them back in database. + $entryDAO = FreshRSS_Factory::createEntryDao(); $entries = $entryDAO->listWhere('f', $feed_id, FreshRSS_Entry::STATE_ALL, 'DESC', $limit); //We need another DB connection in parallel for unbuffered streaming diff --git a/app/Models/EntryDAO.php b/app/Models/EntryDAO.php index 0b289eb41de..ec627dda1ef 100644 --- a/app/Models/EntryDAO.php +++ b/app/Models/EntryDAO.php @@ -274,45 +274,14 @@ public function updateEntry(array $valuesTmp): bool { } /** - * Count the number of new entries in the temporary table (which have not yet been committed), grouped by read / unread. - * @return array{'all':int,'unread':int,'read':int} + * Count the number of new entries in the temporary table (which have not yet been committed). */ - public function countNewEntries(): array { + public function countNewEntries(): int { $sql = <<<'SQL' - SELECT is_read, COUNT(id) AS nb_entries FROM `_entrytmp` - GROUP BY is_read + SELECT COUNT(id) AS nb_entries FROM `_entrytmp` SQL; - $lines = $this->fetchAssoc($sql) ?? []; - $nbRead = 0; - $nbUnread = 0; - foreach ($lines as $line) { - if (empty($line['is_read'])) { - $nbUnread = (int)($line['nb_entries'] ?? 0); - } else { - $nbRead = (int)($line['nb_entries'] ?? 0); - } - } - return ['all' => $nbRead + $nbUnread, 'unread' => $nbUnread, 'read' => $nbRead]; - } - - /** - * Count the number of new unread entries in the temporary table (which have not yet been committed), grouped by feed ID. - * @return array - */ - public function newUnreadEntriesPerFeed(): array { - $sql = <<<'SQL' - SELECT id_feed, COUNT(id) AS nb_entries FROM `_entrytmp` - WHERE is_read = 0 - GROUP BY id_feed - SQL; - $lines = $this->fetchAssoc($sql) ?? []; - $result = []; - foreach ($lines as $line) { - if (!empty($line['id_feed'])) { - $result[(int)$line['id_feed']] = (int)($line['nb_entries'] ?? 0); - } - } - return $result; + $res = $this->fetchColumn($sql, 0); + return isset($res[0]) ? (int)$res[0] : -1; } /** @@ -651,7 +620,7 @@ public function markReadTag(int $id = 0, string $idMax = '0', ?FreshRSS_BooleanS } /** - * Remember to call updateCachedValue($id_feed) or updateCachedValues() just after. + * Remember to call updateCachedValues($id_feed) or updateCachedValues() just after. * @param array $options * @return int|false */ diff --git a/app/Models/Feed.php b/app/Models/Feed.php index 0274ded0ab5..e9d031a82bc 100644 --- a/app/Models/Feed.php +++ b/app/Models/Feed.php @@ -835,15 +835,12 @@ public function markAsReadMaxUnread() { } $feedDAO = FreshRSS_Factory::createFeedDao(); $affected = $feedDAO->markAsReadMaxUnread($this->id(), $keepMaxUnread); - if ($affected > 0) { - Minz_Log::debug(__METHOD__ . " $affected items [" . $this->url(false) . ']'); - } return $affected; } /** * Applies the *mark as read upon gone* policy, if enabled. - * Remember to call `updateCachedValue($id_feed)` or `updateCachedValues()` just after. + * Remember to call `updateCachedValues($id_feed)` or `updateCachedValues()` just after. * @return int|false the number of lines affected, or false if not applicable */ public function markAsReadUponGone(bool $upstreamIsEmpty, int $maxTimestamp = 0) { @@ -871,7 +868,7 @@ public function markAsReadUponGone(bool $upstreamIsEmpty, int $maxTimestamp = 0) } /** - * Remember to call `updateCachedValue($id_feed)` or `updateCachedValues()` just after + * Remember to call `updateCachedValues($id_feed)` or `updateCachedValues()` just after * @return int|false */ public function cleanOldEntries() { diff --git a/app/Models/FeedDAO.php b/app/Models/FeedDAO.php index c0b2e9e7a0b..4a75e3dea05 100644 --- a/app/Models/FeedDAO.php +++ b/app/Models/FeedDAO.php @@ -203,7 +203,7 @@ public function updateFeedAttribute(FreshRSS_Feed $feed, string $key, $value) { /** * @return int|false - * @see updateCachedValue() + * @see updateCachedValues() */ public function updateLastUpdate(int $id, bool $inError = false, int $mtime = 0) { $sql = 'UPDATE `_feed` SET `lastUpdate`=?, error=? WHERE id=?'; @@ -453,20 +453,21 @@ public function countNotRead(int $id): int { } /** + * Update cached values for selected feeds, or all feeds if no feed ID is provided. * @return int|false */ - public function updateCachedValues(int $id = 0) { + public function updateCachedValues(int ...$feedIds) { //2 sub-requests with FOREIGN KEY(e.id_feed), INDEX(e.is_read) faster than 1 request with GROUP BY or CASE - $sql = 'UPDATE `_feed` ' - . 'SET `cache_nbEntries`=(SELECT COUNT(e1.id) FROM `_entry` e1 WHERE e1.id_feed=`_feed`.id),' - . '`cache_nbUnreads`=(SELECT COUNT(e2.id) FROM `_entry` e2 WHERE e2.id_feed=`_feed`.id AND e2.is_read=0)' - . ($id != 0 ? ' WHERE id=:id' : ''); - $stm = $this->pdo->prepare($sql); - if ($stm !== false && $id != 0) { - $stm->bindParam(':id', $id, PDO::PARAM_INT); + $sql = << 0) { + $sql .= ' WHERE id IN (' . str_repeat('?,', count($feedIds) - 1). '?)'; } - - if ($stm !== false && $stm->execute()) { + $stm = $this->pdo->prepare($sql); + if ($stm !== false && $stm->execute($feedIds)) { return $stm->rowCount(); } else { $info = $stm == null ? $this->pdo->errorInfo() : $stm->errorInfo(); diff --git a/cli/actualize-user.php b/cli/actualize-user.php index c07cf6d0ef9..29514769bc6 100755 --- a/cli/actualize-user.php +++ b/cli/actualize-user.php @@ -29,6 +29,9 @@ public function __construct() { Minz_ExtensionManager::callHookVoid('freshrss_user_maintenance'); FreshRSS_feed_Controller::commitNewEntries(); +$feedDAO = FreshRSS_Factory::createFeedDao(); +$feedDAO->updateCachedValues(); + $result = FreshRSS_category_Controller::refreshDynamicOpmls(); if (!empty($result['errors'])) { $errors = $result['errors']; @@ -39,10 +42,7 @@ public function __construct() { echo "FreshRSS refreshed $successes dynamic OPMLs for $username\n"; } -[$nbUpdatedFeeds, , $nbNewArticles] = FreshRSS_feed_Controller::actualizeFeeds(); -if ($nbNewArticles > 0) { - FreshRSS_feed_Controller::commitNewEntries(); -} +[$nbUpdatedFeeds, , $nbNewArticles] = FreshRSS_feed_Controller::actualizeFeedsAndCommit(); echo "FreshRSS actualized $nbUpdatedFeeds feeds for $username ($nbNewArticles new articles)\n"; diff --git a/p/api/greader.php b/p/api/greader.php index 71cf408849c..9c347954635 100644 --- a/p/api/greader.php +++ b/p/api/greader.php @@ -331,10 +331,7 @@ private static function subscriptionImport(string $opml) { $importService = new FreshRSS_Import_Service($user); $importService->importOpml($opml); if ($importService->lastStatus()) { - [, , $nb_new_articles] = FreshRSS_feed_Controller::actualizeFeeds(); - if ($nb_new_articles > 0) { - FreshRSS_feed_Controller::commitNewEntries(); - } + FreshRSS_feed_Controller::actualizeFeedsAndCommit(); invalidateHttpCache($user); exit('OK'); } else { diff --git a/p/api/pshb.php b/p/api/pshb.php index 9f5b4822c6d..8fcc5ab34cd 100644 --- a/p/api/pshb.php +++ b/p/api/pshb.php @@ -133,11 +133,8 @@ Minz_ExtensionManager::enableByList(FreshRSS_Context::userConf()->extensions_enabled, 'user'); Minz_Translate::reset(FreshRSS_Context::userConf()->language); - [$updated_feeds, , $nb_new_articles] = FreshRSS_feed_Controller::actualizeFeeds(null, $self, null, $simplePie); - if ($nb_new_articles > 0) { - FreshRSS_feed_Controller::commitNewEntries(); - } - if ($updated_feeds > 0) { + [$nbUpdatedFeeds, ] = FreshRSS_feed_Controller::actualizeFeedsAndCommit(null, $self, null, $simplePie); + if ($nbUpdatedFeeds > 0) { $nb++; } else { Minz_Log::warning('Warning: User ' . $username . ' does not subscribe anymore to ' . $self, PSHB_LOG); From dcd9e69bb4ac5fa8c553cdbf80928710ac17f005 Mon Sep 17 00:00:00 2001 From: maTh <1645099+math-GH@users.noreply.github.com> Date: Tue, 23 Jul 2024 22:47:34 +0200 Subject: [PATCH 1203/2479] Improve feed sidebar: main stream, favorites, important (#6651) * main stream * important feeds * favorite feeds * Origine --- app/layout/aside_feed.phtml | 23 +++++++++-------------- p/themes/Origine/origine.css | 6 ++++++ p/themes/Origine/origine.rtl.css | 6 ++++++ 3 files changed, 21 insertions(+), 14 deletions(-) diff --git a/app/layout/aside_feed.phtml b/app/layout/aside_feed.phtml index 719cf3660f0..31e5399c7ef 100644 --- a/app/layout/aside_feed.phtml +++ b/app/layout/aside_feed.phtml @@ -30,26 +30,21 @@
  • + +
    + +
    + +

    +
    +
    From 5267db88abf7c8546e8ba47c6d4acfd362a82e1d Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Wed, 24 Jul 2024 19:39:30 +0200 Subject: [PATCH 1208/2479] Share in GReader JSON format (#6655) fix https://github.com/FreshRSS/FreshRSS/discussions/6654#discussioncomment-10128309 --- app/Models/UserQuery.php | 7 +++++++ app/i18n/cs/conf.php | 1 + app/i18n/de/conf.php | 1 + app/i18n/el/conf.php | 1 + app/i18n/en-us/conf.php | 1 + app/i18n/en/conf.php | 1 + app/i18n/es/conf.php | 1 + app/i18n/fa/conf.php | 1 + app/i18n/fr/conf.php | 1 + app/i18n/he/conf.php | 1 + app/i18n/hu/conf.php | 1 + app/i18n/id/conf.php | 1 + app/i18n/it/conf.php | 1 + app/i18n/ja/conf.php | 1 + app/i18n/ko/conf.php | 1 + app/i18n/lv/conf.php | 1 + app/i18n/nl/conf.php | 1 + app/i18n/oc/conf.php | 1 + app/i18n/pl/conf.php | 1 + app/i18n/pt-br/conf.php | 1 + app/i18n/ru/conf.php | 1 + app/i18n/sk/conf.php | 1 + app/i18n/tr/conf.php | 1 + app/i18n/zh-cn/conf.php | 1 + app/i18n/zh-tw/conf.php | 1 + app/views/helpers/configure/query.phtml | 1 + app/views/helpers/export/articles.phtml | 4 ++++ p/api/query.php | 11 ++++++++++- 28 files changed, 46 insertions(+), 1 deletion(-) diff --git a/app/Models/UserQuery.php b/app/Models/UserQuery.php index 3058483d396..dcd17393efa 100644 --- a/app/Models/UserQuery.php +++ b/app/Models/UserQuery.php @@ -278,6 +278,13 @@ public function sharedUrlRss(bool $xmlEscaped = true): string { return ''; } + public function sharedUrlGreader(bool $xmlEscaped = true): string { + if ($this->shareRss && $this->token !== '') { + return $this->sharedUrl($xmlEscaped) . ($xmlEscaped ? '&' : '&') . 'f=greader'; + } + return ''; + } + public function sharedUrlHtml(bool $xmlEscaped = true): string { if ($this->shareRss && $this->token !== '') { return $this->sharedUrl($xmlEscaped) . ($xmlEscaped ? '&' : '&') . 'f=html'; diff --git a/app/i18n/cs/conf.php b/app/i18n/cs/conf.php index ec4c2161646..a16d065536b 100644 --- a/app/i18n/cs/conf.php +++ b/app/i18n/cs/conf.php @@ -145,6 +145,7 @@ 'search' => 'Hledat „%s“', 'share' => array( '_' => 'Sdílet tento dotaz pomocí odkazu', + 'greader' => 'Shareable link to the GReader JSON', // TODO 'help' => 'Pokud chcete tento dotaz s někým sdílet, uveďte tento odkaz.', 'html' => 'Odkaz na stránku HTML, který lze sdílet', 'opml' => 'Odkaz na seznam kanálů OPML, který lze sdílet', diff --git a/app/i18n/de/conf.php b/app/i18n/de/conf.php index dadea97365a..ba69d441427 100644 --- a/app/i18n/de/conf.php +++ b/app/i18n/de/conf.php @@ -145,6 +145,7 @@ 'search' => 'Suche nach „%s“', 'share' => array( '_' => 'Diese Benutzerabfrage per Link teilen', + 'greader' => 'Shareable link to the GReader JSON', // TODO 'help' => 'Diesen Link verteilen, um in mit Jedem zu teilen', 'html' => 'Verteilbarer Link zur HTML-Seite', 'opml' => 'Verteilbarer Link zur OPML Liste der Feeds', diff --git a/app/i18n/el/conf.php b/app/i18n/el/conf.php index d1008730aaa..d74e7a9b118 100644 --- a/app/i18n/el/conf.php +++ b/app/i18n/el/conf.php @@ -145,6 +145,7 @@ 'search' => 'Search for “%s”', // TODO 'share' => array( '_' => 'Share this query by link', // TODO + 'greader' => 'Shareable link to the GReader JSON', // TODO 'help' => 'Give this link if you want to share this query with anyone', // TODO 'html' => 'Shareable link to the HTML page', // TODO 'opml' => 'Shareable link to the OPML list of feeds', // TODO diff --git a/app/i18n/en-us/conf.php b/app/i18n/en-us/conf.php index 4d46d21dace..0f3c5e402c4 100644 --- a/app/i18n/en-us/conf.php +++ b/app/i18n/en-us/conf.php @@ -145,6 +145,7 @@ 'search' => 'Search for “%s”', // IGNORE 'share' => array( '_' => 'Share this query by link', // IGNORE + 'greader' => 'Shareable link to the GReader JSON', // IGNORE 'help' => 'Give this link if you want to share this query with anyone', // IGNORE 'html' => 'Shareable link to the HTML page', // IGNORE 'opml' => 'Shareable link to the OPML list of feeds', // IGNORE diff --git a/app/i18n/en/conf.php b/app/i18n/en/conf.php index 66c776bf0b0..79a69a44deb 100644 --- a/app/i18n/en/conf.php +++ b/app/i18n/en/conf.php @@ -145,6 +145,7 @@ 'search' => 'Search for “%s”', 'share' => array( '_' => 'Share this query by link', + 'greader' => 'Shareable link to the GReader JSON', 'help' => 'Give this link if you want to share this query with anyone', 'html' => 'Shareable link to the HTML page', 'opml' => 'Shareable link to the OPML list of feeds', diff --git a/app/i18n/es/conf.php b/app/i18n/es/conf.php index 4612752b5e8..760bbd513a2 100644 --- a/app/i18n/es/conf.php +++ b/app/i18n/es/conf.php @@ -145,6 +145,7 @@ 'search' => 'Buscar “%s”', 'share' => array( '_' => 'Comparte esta consulta por enlace', + 'greader' => 'Shareable link to the GReader JSON', // TODO 'help' => 'Dale este enlace si quieres compartir esta consulta con alguien', 'html' => 'Enlace para compartir a la página HTML', 'opml' => 'Enlace para compartir a la lista de fuentes de OPML', diff --git a/app/i18n/fa/conf.php b/app/i18n/fa/conf.php index 93ecf1a7612..0ad91cca13e 100644 --- a/app/i18n/fa/conf.php +++ b/app/i18n/fa/conf.php @@ -145,6 +145,7 @@ 'search' => ' «%s» را جستجو کنید', 'share' => array( '_' => 'Share this query by link', // TODO + 'greader' => 'Shareable link to the GReader JSON', // TODO 'help' => 'Give this link if you want to share this query with anyone', // TODO 'html' => 'Shareable link to the HTML page', // TODO 'opml' => 'Shareable link to the OPML list of feeds', // TODO diff --git a/app/i18n/fr/conf.php b/app/i18n/fr/conf.php index b821414bfd4..542bcc70043 100644 --- a/app/i18n/fr/conf.php +++ b/app/i18n/fr/conf.php @@ -145,6 +145,7 @@ 'search' => 'Recherche de « %s »', 'share' => array( '_' => 'Partager ce filtre par lien', + 'greader' => 'Lien partageable au format JSON GReader', 'help' => 'Donner ce lien pour partager le contenu du filtre avec d’autres personnes', 'html' => 'Lien partageable de la page HTML', 'opml' => 'Lien partageable de la liste des flux au format OPML', diff --git a/app/i18n/he/conf.php b/app/i18n/he/conf.php index e78c4261cf8..1e2542019f6 100644 --- a/app/i18n/he/conf.php +++ b/app/i18n/he/conf.php @@ -145,6 +145,7 @@ 'search' => 'חיפוש “%s”', 'share' => array( '_' => 'Share this query by link', // TODO + 'greader' => 'Shareable link to the GReader JSON', // TODO 'help' => 'Give this link if you want to share this query with anyone', // TODO 'html' => 'Shareable link to the HTML page', // TODO 'opml' => 'Shareable link to the OPML list of feeds', // TODO diff --git a/app/i18n/hu/conf.php b/app/i18n/hu/conf.php index b99ec414439..fc489cd3f1a 100644 --- a/app/i18n/hu/conf.php +++ b/app/i18n/hu/conf.php @@ -145,6 +145,7 @@ 'search' => 'Keresés erre „%s”', 'share' => array( '_' => 'Lekérdezés megosztása linkkel', + 'greader' => 'Shareable link to the GReader JSON', // TODO 'help' => 'Ezt a linket küldd el hogy megoszd a lekérdezést bárkivel', 'html' => 'Megosztható link a HTML oldalhoz', 'opml' => 'Megosztható link az OPML hírforrás listához', diff --git a/app/i18n/id/conf.php b/app/i18n/id/conf.php index 6fb20c1f42a..02f0ba4e603 100644 --- a/app/i18n/id/conf.php +++ b/app/i18n/id/conf.php @@ -145,6 +145,7 @@ 'search' => 'Cari untuk "%s"', 'share' => array( '_' => 'Bagikan permintaan ini melalui tautan', + 'greader' => 'Shareable link to the GReader JSON', // TODO 'help' => 'Berikan tautan ini jika Anda ingin berbagi permintaan ini dengan siapa pun', 'html' => 'Tautan dapat dibagikan ke halaman HTML', 'opml' => 'Tautan dapat dibagikan ke daftar OPML dari feed', diff --git a/app/i18n/it/conf.php b/app/i18n/it/conf.php index 5e529501bbe..446111c666e 100644 --- a/app/i18n/it/conf.php +++ b/app/i18n/it/conf.php @@ -145,6 +145,7 @@ 'search' => 'Cerca per “%s”', 'share' => array( '_' => 'Condividi questa query tramite un link', + 'greader' => 'Shareable link to the GReader JSON', // TODO 'help' => 'Fornisci questo link se vuoi condividere questa query con altre persone', 'html' => 'Link condivisibile alla pagina HTML', 'opml' => 'Link condivisibile alla lista OPML dei feed', diff --git a/app/i18n/ja/conf.php b/app/i18n/ja/conf.php index 839384380d9..fca4388628b 100644 --- a/app/i18n/ja/conf.php +++ b/app/i18n/ja/conf.php @@ -145,6 +145,7 @@ 'search' => '“%s”で検索する', 'share' => array( '_' => 'このクエリをリンクで共有する', + 'greader' => 'Shareable link to the GReader JSON', // TODO 'help' => 'このクエリを誰かと共有したい場合は、このリンクを提供してください', 'html' => 'HTMLページへの共有リンク', 'opml' => 'フィードのOPMLリストへの共有リンク', diff --git a/app/i18n/ko/conf.php b/app/i18n/ko/conf.php index 493f6824171..ddbb8cb02b5 100644 --- a/app/i18n/ko/conf.php +++ b/app/i18n/ko/conf.php @@ -145,6 +145,7 @@ 'search' => '“%s”의 검색 결과', 'share' => array( '_' => '링크로 쿼리 공유', + 'greader' => 'Shareable link to the GReader JSON', // TODO 'help' => '링크를 사용해서 쿼리를 공유하세요', 'html' => 'HTML 공유 링크', 'opml' => 'OPML 피드 목록 공유 링크', diff --git a/app/i18n/lv/conf.php b/app/i18n/lv/conf.php index dd920acbab4..a2993ecead7 100644 --- a/app/i18n/lv/conf.php +++ b/app/i18n/lv/conf.php @@ -145,6 +145,7 @@ 'search' => 'Meklēt “%s”', 'share' => array( '_' => 'Share this query by link', // TODO + 'greader' => 'Shareable link to the GReader JSON', // TODO 'help' => 'Give this link if you want to share this query with anyone', // TODO 'html' => 'Shareable link to the HTML page', // TODO 'opml' => 'Shareable link to the OPML list of feeds', // TODO diff --git a/app/i18n/nl/conf.php b/app/i18n/nl/conf.php index 78d64d293d7..59eaa38aa22 100644 --- a/app/i18n/nl/conf.php +++ b/app/i18n/nl/conf.php @@ -145,6 +145,7 @@ 'search' => 'Zoek naar „%s”', 'share' => array( '_' => 'Deze query delen via een link', + 'greader' => 'Shareable link to the GReader JSON', // TODO 'help' => 'Geef deze link als je deze query met iemand wilt delen', 'html' => 'Deelbare link naar de HTML-pagina', 'opml' => 'Deelbare link naar de OPML-lijst van feeds', diff --git a/app/i18n/oc/conf.php b/app/i18n/oc/conf.php index c798cc77dc8..dcdbf2ff2eb 100644 --- a/app/i18n/oc/conf.php +++ b/app/i18n/oc/conf.php @@ -145,6 +145,7 @@ 'search' => 'Recèrca de « %s »', 'share' => array( '_' => 'Share this query by link', // TODO + 'greader' => 'Shareable link to the GReader JSON', // TODO 'help' => 'Give this link if you want to share this query with anyone', // TODO 'html' => 'Shareable link to the HTML page', // TODO 'opml' => 'Shareable link to the OPML list of feeds', // TODO diff --git a/app/i18n/pl/conf.php b/app/i18n/pl/conf.php index db9990dd8e0..b02442befe2 100644 --- a/app/i18n/pl/conf.php +++ b/app/i18n/pl/conf.php @@ -145,6 +145,7 @@ 'search' => 'Szukaj “%s”', 'share' => array( '_' => 'Udostępnij to zapytanie', + 'greader' => 'Shareable link to the GReader JSON', // TODO 'help' => 'Posłuż się tym odnośnikiem, aby podzielić się zapytaniem', 'html' => 'Odnośnik do strony HTML', 'opml' => 'Odnośnik do listy kanałów (OPML)', diff --git a/app/i18n/pt-br/conf.php b/app/i18n/pt-br/conf.php index a8b88391c95..c5f43146f18 100644 --- a/app/i18n/pt-br/conf.php +++ b/app/i18n/pt-br/conf.php @@ -145,6 +145,7 @@ 'search' => 'Busca por “%s”', 'share' => array( '_' => 'Compartilhar esta consulta por link', + 'greader' => 'Shareable link to the GReader JSON', // TODO 'help' => 'Forneça este link se quiser compartilhar esta consulta com alguém', 'html' => 'Link compartilhável para a página HTML', 'opml' => 'Link compartilhável para a lista de feeds OPML', diff --git a/app/i18n/ru/conf.php b/app/i18n/ru/conf.php index edbcf060f40..7443c1d404a 100644 --- a/app/i18n/ru/conf.php +++ b/app/i18n/ru/conf.php @@ -145,6 +145,7 @@ 'search' => 'Искать “%s”', 'share' => array( '_' => 'Поделиться запросом по ссылке', + 'greader' => 'Shareable link to the GReader JSON', // TODO 'help' => 'Дайте эту ссылку, если хотите поделиться этим запросом с кем-либо', 'html' => 'Ссылка доступа на HTML-страницу', 'opml' => 'Ссылка доступа на список лент в формате OPML', diff --git a/app/i18n/sk/conf.php b/app/i18n/sk/conf.php index c1280a6a72e..bc95a7468e0 100644 --- a/app/i18n/sk/conf.php +++ b/app/i18n/sk/conf.php @@ -145,6 +145,7 @@ 'search' => 'Vyhľadáva sa: “%s”', 'share' => array( '_' => 'Zdieľať odkaz pre tento dopyt', + 'greader' => 'Shareable link to the GReader JSON', // TODO 'help' => 'Pošlite tento odkaz ak chcete zdielať dopyt s kýmkoľvek', 'html' => 'Zdielateľný odkaz na HTML stránku', 'opml' => 'Zdielateľný odkaz na OPML zoznam kanálov', diff --git a/app/i18n/tr/conf.php b/app/i18n/tr/conf.php index f853bca4055..aeb85a97439 100644 --- a/app/i18n/tr/conf.php +++ b/app/i18n/tr/conf.php @@ -145,6 +145,7 @@ 'search' => '“%s” için arama', 'share' => array( '_' => 'Bu aramayı linkle paylaşın', + 'greader' => 'Shareable link to the GReader JSON', // TODO 'help' => 'Bu aramayı herhangi biriyle paylaşmak istiyorsanız bu bağlantıyı verin', 'html' => 'HTML sayfasına paylaşılabilir bağlantı', 'opml' => 'OMPL listesine paylaşılabilir bağlantı', diff --git a/app/i18n/zh-cn/conf.php b/app/i18n/zh-cn/conf.php index 304e08020ae..3e63d748540 100644 --- a/app/i18n/zh-cn/conf.php +++ b/app/i18n/zh-cn/conf.php @@ -145,6 +145,7 @@ 'search' => '搜索 “%s”', 'share' => array( '_' => '分享您的自定义查询', + 'greader' => 'Shareable link to the GReader JSON', // TODO 'help' => '获取此自定义查询的分享链接', 'html' => 'HTML 页面的分享链接', 'opml' => '订阅源 OPML 的分享链接', diff --git a/app/i18n/zh-tw/conf.php b/app/i18n/zh-tw/conf.php index bae9325ca74..5b2efd001f2 100644 --- a/app/i18n/zh-tw/conf.php +++ b/app/i18n/zh-tw/conf.php @@ -145,6 +145,7 @@ 'search' => '搜尋 “%s”', 'share' => array( '_' => '透過連結分享此查詢', + 'greader' => 'Shareable link to the GReader JSON', // TODO 'help' => '如果您想與任何人分享此查詢,請提供此連結', 'html' => 'HTML 頁面的可共享連結', 'opml' => 'OPML 源列表的可共享連結', diff --git a/app/views/helpers/configure/query.phtml b/app/views/helpers/configure/query.phtml index d23a5adfb67..c32bf1e85bf 100644 --- a/app/views/helpers/configure/query.phtml +++ b/app/views/helpers/configure/query.phtml @@ -42,6 +42,7 @@
    diff --git a/app/views/helpers/export/articles.phtml b/app/views/helpers/export/articles.phtml index 40390d83204..f62573dd4fe 100644 --- a/app/views/helpers/export/articles.phtml +++ b/app/views/helpers/export/articles.phtml @@ -20,6 +20,10 @@ if (empty($this->entryIdsTagNames)) { } foreach ($this->entries as $entry) { + if (!$this->internal_rendering) { + /** @var FreshRSS_Entry */ + $entry = Minz_ExtensionManager::callHook('entry_before_display', $entry); + } if ($entry == null) { continue; } diff --git a/p/api/query.php b/p/api/query.php index 7d74f23138e..8fe3c44b0d3 100644 --- a/p/api/query.php +++ b/p/api/query.php @@ -13,7 +13,7 @@ } $format = Minz_Request::paramString('f'); -if (!in_array($format, ['atom', 'html', 'opml', 'rss'], true)) { +if (!in_array($format, ['atom', 'greader', 'html', 'json', 'opml', 'rss'], true)) { header('HTTP/1.1 422 Unprocessable Entity'); header('Content-Type: text/plain; charset=UTF-8'); die('Invalid format `f`!'); @@ -63,7 +63,9 @@ if (!empty($raw_query['token']) && $raw_query['token'] === $token) { switch ($format) { case 'atom': + case 'greader': case 'html': + case 'json': case 'rss': if (empty($raw_query['shareRss'])) { continue 2; @@ -161,6 +163,13 @@ header('Content-Type: application/rss+xml; charset=utf-8'); $view->_layout(null); $view->_path('index/rss.phtml'); +} elseif (in_array($format, ['greader', 'json'], true)) { + header('Content-Type: application/json; charset=utf-8'); + $view->_layout(null); + $view->type = 'query/' . $token; + $view->list_title = $query->getName(); + $view->entryIdsTagNames = []; // Do not export user labels for privacy + $view->_path('helpers/export/articles.phtml'); } elseif ($format === 'opml') { if (!$query->safeForOpml()) { Minz_Error::error(404, 'OPML not allowed for this user query!'); From 47a3e15edc2a2e9d76a3374a2f5ed7197b2aedea Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Sun, 28 Jul 2024 14:19:40 +0200 Subject: [PATCH 1209/2479] Add default API CORS HTTP Headers (#6659) * Add default API CORS HTTP Headers To allow interacting with our APIs from a JavaScript application. So far limited to the APIs: Greader, User queries Fix https://github.com/FreshRSS/FreshRSS/discussions/6654#discussioncomment-10131144 * Early abort for OPTIONS requests * Move a bit OPTIONS test * No content! * More cleaning --- p/api/greader.php | 14 ++++++++++++++ p/api/query.php | 9 +++++++++ 2 files changed, 23 insertions(+) diff --git a/p/api/greader.php b/p/api/greader.php index 9c347954635..a19512cfd81 100644 --- a/p/api/greader.php +++ b/p/api/greader.php @@ -112,6 +112,12 @@ function debugInfo(): string { final class GReaderAPI { + /** @return never */ + private static function noContent() { + header('HTTP/1.1 204 No Content'); + exit(); + } + /** @return never */ private static function badRequest() { Minz_Log::warning(__METHOD__, API_LOG); @@ -987,6 +993,14 @@ private static function markAllAsRead(string $streamId, string $olderThanId) { public static function parse() { global $ORIGINAL_INPUT; + header('Access-Control-Allow-Headers: Authorization'); + header('Access-Control-Allow-Methods: GET, POST'); + header('Access-Control-Allow-Origin: *'); + header('Access-Control-Max-Age: 600'); + if (($_SERVER['REQUEST_METHOD'] ?? '') === 'OPTIONS') { + self::noContent(); + } + $pathInfo = ''; if (empty($_SERVER['PATH_INFO'])) { if (!empty($_SERVER['ORIG_PATH_INFO'])) { diff --git a/p/api/query.php b/p/api/query.php index 8fe3c44b0d3..fff48503e64 100644 --- a/p/api/query.php +++ b/p/api/query.php @@ -159,6 +159,15 @@ } FreshRSS_Context::systemConf()->allow_anonymous = true; +header('Access-Control-Allow-Methods: GET'); +header('Access-Control-Allow-Origin: *'); +header('Access-Control-Max-Age: 600'); +header('Cache-Control: public, max-age=60'); +if (($_SERVER['REQUEST_METHOD'] ?? '') === 'OPTIONS') { + header('HTTP/1.1 204 No Content'); + exit(); +} + if (in_array($format, ['rss', 'atom'], true)) { header('Content-Type: application/rss+xml; charset=utf-8'); $view->_layout(null); From 5c8369ce38c67fba7dd39d68626534c7e61eb24c Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Mon, 29 Jul 2024 14:48:17 +0200 Subject: [PATCH 1210/2479] Strong type array parameter helper (#6661) Also useful for extensions (including one I am writing) --- app/Controllers/entryController.php | 2 +- lib/Minz/Request.php | 9 +++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/app/Controllers/entryController.php b/app/Controllers/entryController.php index 9104cefc42a..8cea7475237 100644 --- a/app/Controllers/entryController.php +++ b/app/Controllers/entryController.php @@ -114,7 +114,7 @@ public function readAction(): void { } } else { /** @var array $idArray */ - $idArray = Minz_Request::paramArray('id'); + $idArray = Minz_Request::paramArrayString('id'); $idString = Minz_Request::paramString('id'); if (count($idArray) > 0) { $ids = $idArray; diff --git a/lib/Minz/Request.php b/lib/Minz/Request.php index 301bd5623cd..8121eb1043e 100644 --- a/lib/Minz/Request.php +++ b/lib/Minz/Request.php @@ -69,6 +69,15 @@ public static function paramArray(string $key, bool $specialchars = false): arra return $specialchars ? Minz_Helper::htmlspecialchars_utf8(self::$params[$key]) : self::$params[$key]; } + /** @return array */ + public static function paramArrayString(string $key, bool $specialchars = false): array { + if (empty(self::$params[$key]) || !is_array(self::$params[$key])) { + return []; + } + $result = array_filter(self::$params[$key], 'is_string'); + return $specialchars ? Minz_Helper::htmlspecialchars_utf8($result) : $result; + } + public static function paramTernary(string $key): ?bool { if (isset(self::$params[$key])) { $p = self::$params[$key]; From 5659b37948c17e5e68971a2464930bee3455dfa1 Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Tue, 30 Jul 2024 12:01:59 +0200 Subject: [PATCH 1211/2479] Fix markAsReadUponGone regression (#6663) Regression from https://github.com/FreshRSS/FreshRSS/pull/5470 Was not working anymore when the feed was empty. Plus simplification of the logic when the feed is not empty --- app/Controllers/feedController.php | 2 +- app/Models/Feed.php | 10 +++++----- app/Models/FeedDAO.php | 13 ++++--------- 3 files changed, 10 insertions(+), 15 deletions(-) diff --git a/app/Controllers/feedController.php b/app/Controllers/feedController.php index ba5596a3c93..730c13a2375 100644 --- a/app/Controllers/feedController.php +++ b/app/Controllers/feedController.php @@ -515,7 +515,7 @@ public static function actualizeFeeds(?int $feed_id = null, ?string $feed_url = } else { $newGuids = $feed->loadGuids($simplePie); $entries = $feed->loadEntries($simplePie); - $feedIsEmpty = $simplePiePush !== null && empty($newGuids); + $feedIsEmpty = $simplePiePush === null && empty($newGuids); $feedIsUnchanged = false; } $mtime = $feed->cacheModifiedTime() ?: time(); diff --git a/app/Models/Feed.php b/app/Models/Feed.php index e9d031a82bc..731f82d1415 100644 --- a/app/Models/Feed.php +++ b/app/Models/Feed.php @@ -843,7 +843,7 @@ public function markAsReadMaxUnread() { * Remember to call `updateCachedValues($id_feed)` or `updateCachedValues()` just after. * @return int|false the number of lines affected, or false if not applicable */ - public function markAsReadUponGone(bool $upstreamIsEmpty, int $maxTimestamp = 0) { + public function markAsReadUponGone(bool $upstreamIsEmpty, int $minLastSeen = 0) { $readUponGone = $this->attributeBoolean('read_upon_gone'); if ($readUponGone === null) { $readUponGone = FreshRSS_Context::userConf()->mark_when['gone']; @@ -852,14 +852,14 @@ public function markAsReadUponGone(bool $upstreamIsEmpty, int $maxTimestamp = 0) return false; } if ($upstreamIsEmpty) { - if ($maxTimestamp <= 0) { - $maxTimestamp = time(); + if ($minLastSeen <= 0) { + $minLastSeen = time(); } $entryDAO = FreshRSS_Factory::createEntryDao(); - $affected = $entryDAO->markReadFeed($this->id(), $maxTimestamp . '000000'); + $affected = $entryDAO->markReadFeed($this->id(), $minLastSeen . '000000'); } else { $feedDAO = FreshRSS_Factory::createFeedDao(); - $affected = $feedDAO->markAsReadUponGone($this->id()); + $affected = $feedDAO->markAsReadNotSeen($this->id(), $minLastSeen); } if ($affected > 0) { Minz_Log::debug(__METHOD__ . " $affected items" . ($upstreamIsEmpty ? ' (all)' : '') . ' [' . $this->url(false) . ']'); diff --git a/app/Models/FeedDAO.php b/app/Models/FeedDAO.php index 4a75e3dea05..204f959397a 100644 --- a/app/Models/FeedDAO.php +++ b/app/Models/FeedDAO.php @@ -509,20 +509,15 @@ public function markAsReadMaxUnread(int $id, int $n) { * Remember to call updateCachedValues() after calling this function * @return int|false number of lines affected or false in case of error */ - public function markAsReadUponGone(int $id) { - //Double SELECT for MySQL workaround ERROR 1093 (HY000) + public function markAsReadNotSeen(int $id, int $minLastSeen) { $sql = <<<'SQL' UPDATE `_entry` SET is_read=1 -WHERE id_feed=:id_feed1 AND is_read=0 AND ( - `lastSeen` + 60 < (SELECT s1.maxlastseen FROM ( - SELECT MAX(e2.`lastSeen`) AS maxlastseen FROM `_entry` e2 WHERE e2.id_feed = :id_feed2 - ) s1) -) +WHERE id_feed=:id_feed AND is_read=0 AND (`lastSeen` + 10 < :min_last_seen) SQL; if (($stm = $this->pdo->prepare($sql)) && - $stm->bindParam(':id_feed1', $id, PDO::PARAM_INT) && - $stm->bindParam(':id_feed2', $id, PDO::PARAM_INT) && + $stm->bindValue(':id_feed', $id, PDO::PARAM_INT) && + $stm->bindValue(':min_last_seen', $minLastSeen, PDO::PARAM_INT) && $stm->execute()) { return $stm->rowCount(); } else { From 6e01866845b31d8d78c3a11bccde1594ce0119a2 Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Tue, 30 Jul 2024 15:23:46 +0200 Subject: [PATCH 1212/2479] Fix regression on mark duplicate titles as read for modified articles (#6664) When the option *mark as read if an identical title already exists in the top n newest articles*, that should not apply to updated articles, as they risk being marked as read due to themselves having the same title. Identifying the different sub-cases would require a more complicated logic, so disable for now. Regression due to https://github.com/FreshRSS/FreshRSS/pull/6334 --- app/Controllers/feedController.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/Controllers/feedController.php b/app/Controllers/feedController.php index 730c13a2375..c8d5345459e 100644 --- a/app/Controllers/feedController.php +++ b/app/Controllers/feedController.php @@ -583,7 +583,8 @@ public static function actualizeFeeds(?int $feed_id = null, ?string $feed_url = continue; } - $entry->applyFilterActions($titlesAsRead); + // NB: Do not mark updated articles as read based on their title, as the duplicate title maybe be from the same article. + $entry->applyFilterActions([]); if ($readWhenSameTitleInFeed > 0) { $titlesAsRead[$entry->title()] = true; } From 666e7b27ce4f9c8254e76373572f220ddfb2fd37 Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Wed, 31 Jul 2024 22:11:01 +0200 Subject: [PATCH 1213/2479] Fix muted feeds for WebSub (#6671) --- app/Controllers/feedController.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Controllers/feedController.php b/app/Controllers/feedController.php index c8d5345459e..396649701c4 100644 --- a/app/Controllers/feedController.php +++ b/app/Controllers/feedController.php @@ -452,7 +452,7 @@ public static function actualizeFeeds(?int $feed_id = null, ?string $feed_url = continue; //When PubSubHubbub is used, do not pull refresh so often } - if ($feed->mute() && $feed_id === null) { + if ($feed->mute() && ($feed_id === null || $simplePiePush !== null)) { continue; // If the feed is disabled, only allow refresh if manually requested for that specific feed } $mtime = $feed->cacheModifiedTime() ?: 0; From 58de38bd737d2dba617944b54a98d4bdb5810588 Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Thu, 1 Aug 2024 19:44:58 +0200 Subject: [PATCH 1214/2479] Fix parentheses for complex `OR` boolean search expressions (#6672) * Fix OR parentheses * Pass all tests * Forgotten comment * Minor whitespace * Fix several cases envolving negation * Line length * Fix `OR NOT` --- app/Models/BooleanSearch.php | 129 +++++++++++++++++++++++++++++--- app/Models/Entry.php | 20 +++-- app/Models/EntryDAO.php | 2 +- tests/app/Models/SearchTest.php | 114 +++++++++++++++++++++++++++- 4 files changed, 245 insertions(+), 20 deletions(-) diff --git a/app/Models/BooleanSearch.php b/app/Models/BooleanSearch.php index 69273810796..88069c4613f 100644 --- a/app/Models/BooleanSearch.php +++ b/app/Models/BooleanSearch.php @@ -11,11 +11,11 @@ class FreshRSS_BooleanSearch { private array $searches = []; /** - * @phpstan-var 'AND'|'OR'|'AND NOT' + * @phpstan-var 'AND'|'OR'|'AND NOT'|'OR NOT' */ private string $operator; - /** @param 'AND'|'OR'|'AND NOT' $operator */ + /** @param 'AND'|'OR'|'AND NOT'|'OR NOT' $operator */ public function __construct(string $input, int $level = 0, string $operator = 'AND', bool $allowUserQueries = true) { $this->operator = $operator; $input = trim($input); @@ -38,6 +38,8 @@ public function __construct(string $input, int $level = 0, string $operator = 'A } $this->raw_input = $input; + $input = self::consistentOrParentheses($input); + // Either parse everything as a series of BooleanSearch’s combined by implicit AND // or parse everything as a series of Search’s combined by explicit OR $this->parseParentheses($input, $level) || $this->parseOrSegments($input); @@ -130,6 +132,107 @@ private function parseUserQueryIds(string $input, bool $allowUserQueries = true) return $input; } + /** + * Example: 'ab cd OR ef OR "gh ij"' becomes '(ab cd) OR (ef) OR ("gh ij")' + */ + public static function addOrParentheses(string $input): string { + $input = trim($input); + if ($input === '') { + return ''; + } + $splits = preg_split('/\b(OR)\b/i', $input, -1, PREG_SPLIT_DELIM_CAPTURE) ?: []; + $ns = count($splits); + if ($ns <= 1) { + return $input; + } + $result = ''; + $segment = ''; + for ($i = 0; $i < $ns; $i++) { + $segment .= $splits[$i]; + if (trim($segment) === '') { + $segment = ''; + } elseif (strcasecmp($segment, 'OR') === 0) { + $result .= $segment . ' '; + $segment = ''; + } else { + $quotes = substr_count($segment, '"') + substr_count($segment, '"'); + if ($quotes % 2 === 0) { + $segment = trim($segment); + if (in_array($segment, ['!', '-'], true)) { + $result .= $segment; + } else { + $result .= '(' . $segment . ') '; + } + $segment = ''; + } + } + } + $segment = trim($segment); + if (in_array($segment, ['!', '-'], true)) { + $result .= $segment; + } elseif ($segment !== '') { + $result .= '(' . $segment . ')'; + } + return trim($result); + } + + /** + * If the query contains a mix of `OR` expressions with and without parentheses, + * then add parentheses to make the query consistent. + * Example: '(ab (cd OR ef)) OR gh OR ij OR (kl)' becomes '(ab ((cd) OR (ef))) OR (gh) OR (ij) OR (kl)' + */ + public static function consistentOrParentheses(string $input): string { + if (!preg_match('/(?= 1 ? $input[$i - 1] === '\\' : false; + if (!$backslashed) { + if ($c === '(') { + if ($parenthesesCount === 0) { + if ($segment !== '') { + $result = rtrim($result) . ' ' . self::addOrParentheses($segment); + $negation = preg_match('/[!-]$/', $result); + if (!$negation) { + $result .= ' '; + } + $segment = ''; + } + $c = ''; + } + $parenthesesCount++; + } elseif ($c === ')') { + $parenthesesCount--; + if ($parenthesesCount === 0) { + $segment = self::consistentOrParentheses($segment); + if ($segment !== '') { + $result .= '(' . $segment . ')'; + $segment = ''; + } + $c = ''; + } + } + } + $segment .= $c; + } + if (trim($segment) !== '') { + $result = rtrim($result); + $negation = preg_match('/[!-]$/', $segment); + if (!$negation) { + $result .= ' '; + } + $result .= self::addOrParentheses($segment); + } + return trim($result); + } + /** @return bool True if some parenthesis logic took over, false otherwise */ private function parseParentheses(string $input, int $level): bool { $input = trim($input); @@ -146,9 +249,14 @@ private function parseParentheses(string $input, int $level): bool { $hasParenthesis = true; $before = trim($before); - if (preg_match('/[!-]$/i', $before)) { + if (preg_match('/[!-]$/', $before)) { // Trim trailing negation - $before = substr($before, 0, -1); + $before = rtrim($before, ' !-'); + $isOr = preg_match('/\bOR$/i', $before); + if ($isOr) { + // Trim trailing OR + $before = substr($before, 0, -2); + } // The text prior to the negation is a BooleanSearch $searchBefore = new FreshRSS_BooleanSearch($before, $level + 1, $nextOperator); @@ -157,8 +265,8 @@ private function parseParentheses(string $input, int $level): bool { } $before = ''; - // The next BooleanSearch will have to be combined with AND NOT instead of default AND - $nextOperator = 'AND NOT'; + // The next BooleanSearch will have to be combined with AND NOT or OR NOT instead of default AND + $nextOperator = $isOr ? 'OR NOT' : 'AND NOT'; } elseif (preg_match('/\bOR$/i', $before)) { // Trim trailing OR $before = substr($before, 0, -2); @@ -212,7 +320,7 @@ private function parseParentheses(string $input, int $level): bool { $i++; } // $sub = trim($sub); - // if ($sub != '') { + // if ($sub !== '') { // // TODO: Consider throwing an error or warning in case of non-matching parenthesis // } // } elseif ($c === ')') { @@ -249,12 +357,11 @@ private function parseOrSegments(string $input): void { return; } $splits = preg_split('/\b(OR)\b/i', $input, -1, PREG_SPLIT_DELIM_CAPTURE) ?: []; - $segment = ''; $ns = count($splits); for ($i = 0; $i < $ns; $i++) { $segment = $segment . $splits[$i]; - if (trim($segment) == '' || strcasecmp($segment, 'OR') === 0) { + if (trim($segment) === '' || strcasecmp($segment, 'OR') === 0) { $segment = ''; } else { $quotes = substr_count($segment, '"') + substr_count($segment, '"'); @@ -266,7 +373,7 @@ private function parseOrSegments(string $input): void { } } $segment = trim($segment); - if ($segment != '') { + if ($segment !== '') { $this->searches[] = new FreshRSS_Search($segment); } } @@ -280,7 +387,7 @@ public function searches(): array { return $this->searches; } - /** @return 'AND'|'OR'|'AND NOT' depending on how this BooleanSearch should be combined */ + /** @return 'AND'|'OR'|'AND NOT'|'OR NOT' depending on how this BooleanSearch should be combined */ public function operator(): string { return $this->operator; } diff --git a/app/Models/Entry.php b/app/Models/Entry.php index e4d728ba4b1..ada6e99448c 100644 --- a/app/Models/Entry.php +++ b/app/Models/Entry.php @@ -577,12 +577,20 @@ public function matches(FreshRSS_BooleanSearch $booleanSearch): bool { foreach ($booleanSearch->searches() as $filter) { if ($filter instanceof FreshRSS_BooleanSearch) { // BooleanSearches are combined by AND (default) or OR or AND NOT (special cases) operators and are recursive - if ($filter->operator() === 'OR') { - $ok |= $this->matches($filter); - } elseif ($filter->operator() === 'AND NOT') { - $ok &= !$this->matches($filter); - } else { // AND - $ok &= $this->matches($filter); + switch ($filter->operator()) { + case 'OR': + $ok |= $this->matches($filter); + break; + case 'OR NOT': + $ok |= !$this->matches($filter); + break; + case 'AND NOT': + $ok &= !$this->matches($filter); + break; + case 'AND': + default: + $ok &= $this->matches($filter); + break; } } elseif ($filter instanceof FreshRSS_Search) { // Searches are combined by OR and are not recursive diff --git a/app/Models/EntryDAO.php b/app/Models/EntryDAO.php index ec627dda1ef..ba0cf197024 100644 --- a/app/Models/EntryDAO.php +++ b/app/Models/EntryDAO.php @@ -762,7 +762,7 @@ public static function sqlBooleanSearch(string $alias, FreshRSS_BooleanSearch $f if ($filterSearch !== '') { if ($search !== '') { $search .= $filter->operator(); - } elseif ($filter->operator() === 'AND NOT') { + } elseif (in_array($filter->operator(), ['AND NOT', 'OR NOT'], true)) { // Special case if we start with a negation (there is already the default AND before) $search .= ' NOT'; } diff --git a/tests/app/Models/SearchTest.php b/tests/app/Models/SearchTest.php index e4457fedcca..e0183031436 100644 --- a/tests/app/Models/SearchTest.php +++ b/tests/app/Models/SearchTest.php @@ -284,13 +284,60 @@ public function provideMultipleSearch(): array { ); } + /** + * @dataProvider provideAddOrParentheses + */ + public function test__addOrParentheses(string $input, string $output): void { + self::assertEquals($output, FreshRSS_BooleanSearch::addOrParentheses($input)); + } + + /** @return array */ + public function provideAddOrParentheses(): array { + return [ + ['ab', 'ab'], + ['ab cd', 'ab cd'], + ['!ab -cd', '!ab -cd'], + ['ab OR cd', '(ab) OR (cd)'], + ['!ab OR -cd', '(!ab) OR (-cd)'], + ['ab cd OR ef OR "gh ij"', '(ab cd) OR (ef) OR ("gh ij")'], + ['ab (!cd)', 'ab (!cd)'], + ]; + } + + /** + * @dataProvider provideconsistentOrParentheses + */ + public function test__consistentOrParentheses(string $input, string $output): void { + self::assertEquals($output, FreshRSS_BooleanSearch::consistentOrParentheses($input)); + } + + /** @return array */ + public function provideconsistentOrParentheses(): array { + return [ + ['ab cd ef', 'ab cd ef'], + ['(ab cd ef)', '(ab cd ef)'], + ['("ab cd" ef)', '("ab cd" ef)'], + ['"ab cd" (ef gh) "ij kl"', '"ab cd" (ef gh) "ij kl"'], + ['ab (!cd)', 'ab (!cd)'], + ['ab !(cd)', 'ab !(cd)'], + ['(ab) -(cd)', '(ab) -(cd)'], + ['ab cd OR ef OR "gh ij"', 'ab cd OR ef OR "gh ij"'], + ['"plain or text" OR (cd)', '("plain or text") OR (cd)'], + ['(ab) OR cd OR ef OR (gh)', '(ab) OR (cd) OR (ef) OR (gh)'], + ['(ab (cd OR ef)) OR gh OR ij OR (kl)', '(ab (cd OR ef)) OR (gh) OR (ij) OR (kl)'], + ['(ab (cd OR ef OR (gh))) OR ij', '(ab ((cd) OR (ef) OR (gh))) OR (ij)'], + ['(ab (!cd OR ef OR (gh))) OR ij', '(ab ((!cd) OR (ef) OR (gh))) OR (ij)'], + ['(ab !(cd OR ef OR !(gh))) OR ij', '(ab !((cd) OR (ef) OR !(gh))) OR (ij)'], + ]; + } + /** * @dataProvider provideParentheses * @param array $values */ - public function test__construct_parentheses(string $input, string $sql, array $values): void { + public function test__parentheses(string $input, string $sql, array $values): void { [$filterValues, $filterSearch] = FreshRSS_EntryDAOPGSQL::sqlBooleanSearch('e.', new FreshRSS_BooleanSearch($input)); - self::assertEquals($sql, $filterSearch); + self::assertEquals(trim($sql), trim($filterSearch)); self::assertEquals($values, $filterValues); } @@ -337,6 +384,69 @@ public function provideParentheses(): array { '(e.title LIKE ? )', ['%"hello world"%'], ], + [ + '(ab) OR (cd) OR (ef)', + '(((e.title LIKE ? OR e.content LIKE ?) )) OR (((e.title LIKE ? OR e.content LIKE ?) )) OR (((e.title LIKE ? OR e.content LIKE ?) ))', + ['%ab%', '%ab%', '%cd%', '%cd%', '%ef%', '%ef%'], + ], + [ + '("plain or text") OR (cd)', + '(((e.title LIKE ? OR e.content LIKE ?) )) OR (((e.title LIKE ? OR e.content LIKE ?) ))', + ['%plain or text%', '%plain or text%', '%cd%', '%cd%'], + ], + [ + '"plain or text" OR cd', + '((e.title LIKE ? OR e.content LIKE ?) ) OR ((e.title LIKE ? OR e.content LIKE ?) )', + ['%plain or text%', '%plain or text%', '%cd%', '%cd%'], + ], + [ + '"plain OR text" OR cd', + '((e.title LIKE ? OR e.content LIKE ?) ) OR ((e.title LIKE ? OR e.content LIKE ?) ) ', + ['%plain OR text%', '%plain OR text%', '%cd%', '%cd%'], + ], + [ + 'ab OR cd OR (ef)', + '(((e.title LIKE ? OR e.content LIKE ?) )) OR (((e.title LIKE ? OR e.content LIKE ?) )) OR (((e.title LIKE ? OR e.content LIKE ?) )) ', + ['%ab%', '%ab%', '%cd%', '%cd%', '%ef%', '%ef%'], + ], + [ + 'ab OR cd OR ef', + '((e.title LIKE ? OR e.content LIKE ?) ) OR ((e.title LIKE ? OR e.content LIKE ?) ) OR ((e.title LIKE ? OR e.content LIKE ?) )', + ['%ab%', '%ab%', '%cd%', '%cd%', '%ef%', '%ef%'], + ], + [ + '(ab) cd OR ef OR (gh)', + '(((e.title LIKE ? OR e.content LIKE ?) )) AND (((e.title LIKE ? OR e.content LIKE ?) )) ' . + 'OR (((e.title LIKE ? OR e.content LIKE ?) )) OR (((e.title LIKE ? OR e.content LIKE ?) ))', + ['%ab%', '%ab%', '%cd%', '%cd%', '%ef%', '%ef%', '%gh%', '%gh%'], + ], + [ + '(ab) OR cd OR ef OR (gh)', + '(((e.title LIKE ? OR e.content LIKE ?) )) OR (((e.title LIKE ? OR e.content LIKE ?) )) ' . + 'OR (((e.title LIKE ? OR e.content LIKE ?) )) OR (((e.title LIKE ? OR e.content LIKE ?) ))', + ['%ab%', '%ab%', '%cd%', '%cd%', '%ef%', '%ef%', '%gh%', '%gh%'], + ], + [ + 'ab OR (!(cd OR ef))', + '(((e.title LIKE ? OR e.content LIKE ?) )) OR (NOT (((e.title LIKE ? OR e.content LIKE ?) ) OR ((e.title LIKE ? OR e.content LIKE ?) )))', + ['%ab%', '%ab%', '%cd%', '%cd%', '%ef%', '%ef%'], + ], + [ + 'ab !(cd OR ef)', + '(((e.title LIKE ? OR e.content LIKE ?) )) AND NOT (((e.title LIKE ? OR e.content LIKE ?) ) OR ((e.title LIKE ? OR e.content LIKE ?) ))', + ['%ab%', '%ab%', '%cd%', '%cd%', '%ef%', '%ef%'], + ], + [ + 'ab OR !(cd OR ef)', + '(((e.title LIKE ? OR e.content LIKE ?) )) OR NOT (((e.title LIKE ? OR e.content LIKE ?) ) OR ((e.title LIKE ? OR e.content LIKE ?) ))', + ['%ab%', '%ab%', '%cd%', '%cd%', '%ef%', '%ef%'], + ], + [ + '(ab (!cd OR ef OR (gh))) OR !(ij OR kl)', + '((((e.title LIKE ? OR e.content LIKE ?) )) AND (((e.title NOT LIKE ? AND e.content NOT LIKE ? )) OR (((e.title LIKE ? OR e.content LIKE ?) )) ' . + 'OR (((e.title LIKE ? OR e.content LIKE ?) )))) OR NOT (((e.title LIKE ? OR e.content LIKE ?) ) OR ((e.title LIKE ? OR e.content LIKE ?) ))', + ['%ab%', '%ab%', '%cd%', '%cd%', '%ef%', '%ef%', '%gh%', '%gh%', '%ij%', '%ij%', '%kl%', '%kl%'], + ], ]; } } From deae6ab5039767ad2ab53bde9f0a5937220a4592 Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Thu, 1 Aug 2024 19:45:19 +0200 Subject: [PATCH 1215/2479] markdownlint no-trailing-spaces (#6668) --- .markdownlint.json | 1 + 1 file changed, 1 insertion(+) diff --git a/.markdownlint.json b/.markdownlint.json index 8cb46382f57..05965131e41 100644 --- a/.markdownlint.json +++ b/.markdownlint.json @@ -11,6 +11,7 @@ "no-multiple-blanks": { "maximum": 2 }, + "no-trailing-spaces": true, "ul-indent": false, "ul-style": { "style": "consistent" From 6394b599e6e7fedac20ab99658b1a1757f3e2659 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 1 Aug 2024 20:20:08 +0200 Subject: [PATCH 1216/2479] Bump sass from 1.77.6 to 1.77.8 (#6682) Bumps [sass](https://github.com/sass/dart-sass) from 1.77.6 to 1.77.8. - [Release notes](https://github.com/sass/dart-sass/releases) - [Changelog](https://github.com/sass/dart-sass/blob/main/CHANGELOG.md) - [Commits](https://github.com/sass/dart-sass/compare/1.77.6...1.77.8) --- updated-dependencies: - dependency-name: sass dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 458f764928e..bd565276526 100644 --- a/package-lock.json +++ b/package-lock.json @@ -15,7 +15,7 @@ "eslint-plugin-promise": "^6.1.1", "markdownlint-cli": "^0.41.0", "rtlcss": "^4.1.1", - "sass": "^1.77.6", + "sass": "^1.77.8", "stylelint": "^16.6.1", "stylelint-config-recommended-scss": "^14.0.0", "stylelint-order": "^6.0.4" @@ -3595,9 +3595,9 @@ } }, "node_modules/sass": { - "version": "1.77.6", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.77.6.tgz", - "integrity": "sha512-ByXE1oLD79GVq9Ht1PeHWCPMPB8XHpBuz1r85oByKHjZY6qV6rWnQovQzXJXuQ/XyE1Oj3iPk3lo28uzaRA2/Q==", + "version": "1.77.8", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.77.8.tgz", + "integrity": "sha512-4UHg6prsrycW20fqLGPShtEvo/WyHRVRHwOP4DzkUrObWoWI05QBSfzU71TVB7PFaL104TwNaHpjlWXAZbQiNQ==", "dev": true, "dependencies": { "chokidar": ">=3.0.0 <4.0.0", diff --git a/package.json b/package.json index c5a963f9ff9..a9327e71a76 100644 --- a/package.json +++ b/package.json @@ -40,7 +40,7 @@ "eslint-plugin-promise": "^6.1.1", "markdownlint-cli": "^0.41.0", "rtlcss": "^4.1.1", - "sass": "^1.77.6", + "sass": "^1.77.8", "stylelint": "^16.6.1", "stylelint-config-recommended-scss": "^14.0.0", "stylelint-order": "^6.0.4", From 390c26de021f6ac3e7559680f15aeeb128f0dd82 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 1 Aug 2024 20:24:02 +0200 Subject: [PATCH 1217/2479] Bump @stylistic/stylelint-plugin from 2.1.2 to 3.0.0 (#6679) Bumps [@stylistic/stylelint-plugin](https://github.com/stylelint-stylistic/stylelint-stylistic) from 2.1.2 to 3.0.0. - [Release notes](https://github.com/stylelint-stylistic/stylelint-stylistic/releases) - [Changelog](https://github.com/stylelint-stylistic/stylelint-stylistic/blob/main/CHANGELOG.md) - [Commits](https://github.com/stylelint-stylistic/stylelint-stylistic/compare/v2.1.2...v3.0.0) --- updated-dependencies: - dependency-name: "@stylistic/stylelint-plugin" dependency-type: direct:development update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 98 +++++++++++++++++++++++------------------------ package.json | 2 +- 2 files changed, 50 insertions(+), 50 deletions(-) diff --git a/package-lock.json b/package-lock.json index bd565276526..1e1789474bc 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7,7 +7,7 @@ "name": "freshrss", "license": "AGPL-3.0", "devDependencies": { - "@stylistic/stylelint-plugin": "^2.1.2", + "@stylistic/stylelint-plugin": "^3.0.0", "eslint": "^8.57.0", "eslint-config-standard": "^17.1.0", "eslint-plugin-import": "^2.29.1", @@ -133,9 +133,9 @@ } }, "node_modules/@csstools/css-parser-algorithms": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.6.3.tgz", - "integrity": "sha512-xI/tL2zxzEbESvnSxwFgwvy5HS00oCXxL4MLs6HUiDcYfwowsoQaABKxUElp1ARITrINzBnsECOc1q0eg2GOrA==", + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.7.1.tgz", + "integrity": "sha512-2SJS42gxmACHgikc1WGesXLIT8d/q2l0UFM7TaEeIzdFCE/FPMtTiizcPGGJtlPo2xuQzY09OhrLTzRxqJqwGw==", "dev": true, "funding": [ { @@ -151,13 +151,13 @@ "node": "^14 || ^16 || >=18" }, "peerDependencies": { - "@csstools/css-tokenizer": "^2.3.1" + "@csstools/css-tokenizer": "^2.4.1" } }, "node_modules/@csstools/css-tokenizer": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-2.3.1.tgz", - "integrity": "sha512-iMNHTyxLbBlWIfGtabT157LH9DUx9X8+Y3oymFEuMj8HNc+rpE3dPFGFgHjpKfjeFDjLjYIAIhXPGvS2lKxL9g==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-2.4.1.tgz", + "integrity": "sha512-eQ9DIktFJBhGjioABJRtUucoWR2mwllurfnM8LuNGAqX3ViZXaUchqk+1s7jjtkFiT9ySdACsFEA3etErkALUg==", "dev": true, "funding": [ { @@ -174,9 +174,9 @@ } }, "node_modules/@csstools/media-query-list-parser": { - "version": "2.1.11", - "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.11.tgz", - "integrity": "sha512-uox5MVhvNHqitPP+SynrB1o8oPxPMt2JLgp5ghJOWf54WGQ5OKu47efne49r1SWqs3wRP8xSWjnO9MBKxhB1dA==", + "version": "2.1.13", + "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.13.tgz", + "integrity": "sha512-XaHr+16KRU9Gf8XLi3q8kDlI18d5vzKSKCY510Vrtc9iNR0NJzbY9hhTmwhzYZj/ZwGL4VmB3TA9hJW0Um2qFA==", "dev": true, "funding": [ { @@ -192,8 +192,8 @@ "node": "^14 || ^16 || >=18" }, "peerDependencies": { - "@csstools/css-parser-algorithms": "^2.6.3", - "@csstools/css-tokenizer": "^2.3.1" + "@csstools/css-parser-algorithms": "^2.7.1", + "@csstools/css-tokenizer": "^2.4.1" } }, "node_modules/@csstools/selector-specificity": { @@ -407,25 +407,25 @@ } }, "node_modules/@stylistic/stylelint-plugin": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@stylistic/stylelint-plugin/-/stylelint-plugin-2.1.2.tgz", - "integrity": "sha512-JsSqu0Y3vsX+PBl+DwULxC0cIv9C1yIcq1MXkx7pBOGtTqU26a75I8MPYMiEYvrsXgsKLi65xVgy1iLVSZquJA==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@stylistic/stylelint-plugin/-/stylelint-plugin-3.0.0.tgz", + "integrity": "sha512-GymY+9CSqkPaZ1A3m3w/tvCdpP3qQcaL1FSaoVv9aKL3Tn6GVJWHc2VWVkbNEsYr4QImHjWnlmVZROwgUEjMmQ==", "dev": true, "dependencies": { - "@csstools/css-parser-algorithms": "^2.6.1", - "@csstools/css-tokenizer": "^2.2.4", - "@csstools/media-query-list-parser": "^2.1.9", + "@csstools/css-parser-algorithms": "^2.7.1", + "@csstools/css-tokenizer": "^2.4.1", + "@csstools/media-query-list-parser": "^2.1.13", "is-plain-object": "^5.0.0", - "postcss-selector-parser": "^6.0.16", + "postcss-selector-parser": "^6.1.1", "postcss-value-parser": "^4.2.0", "style-search": "^0.1.0", - "stylelint": "^16.4.0" + "stylelint": "^16.8.0" }, "engines": { "node": "^18.12 || >=20.9" }, "peerDependencies": { - "stylelint": "^16.0.2" + "stylelint": "^16.8.0" } }, "node_modules/@types/json5": { @@ -985,9 +985,9 @@ } }, "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", + "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", "dev": true, "dependencies": { "ms": "2.1.2" @@ -3218,9 +3218,9 @@ } }, "node_modules/postcss": { - "version": "8.4.38", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz", - "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==", + "version": "8.4.40", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.40.tgz", + "integrity": "sha512-YF2kKIUzAofPMpfH6hOi2cGnv/HrUlfucspc7pDyvv7kGdqXrfj8SCl/t8owkEgKEuu8ZcRjSOxFxVLqwChZ2Q==", "dev": true, "funding": [ { @@ -3238,7 +3238,7 @@ ], "dependencies": { "nanoid": "^3.3.7", - "picocolors": "^1.0.0", + "picocolors": "^1.0.1", "source-map-js": "^1.2.0" }, "engines": { @@ -3252,9 +3252,9 @@ "dev": true }, "node_modules/postcss-resolve-nested-selector": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.1.tgz", - "integrity": "sha512-HvExULSwLqHLgUy1rl3ANIqCsvMS0WHss2UOsXhXnQaZ9VCc2oBvIpXrl00IUFT5ZDITME0o6oiXeiHr2SAIfw==", + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.4.tgz", + "integrity": "sha512-R6vHqZWgVnTAPq0C+xjyHfEZqfIYboCBVSy24MjxEDm+tIh1BU4O6o7DP7AA7kHzf136d+Qc5duI4tlpHjixDw==", "dev": true }, "node_modules/postcss-safe-parser": { @@ -3310,9 +3310,9 @@ } }, "node_modules/postcss-selector-parser": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.0.tgz", - "integrity": "sha512-UMz42UD0UY0EApS0ZL9o1XnLhSTtvvvLe5Dc2H2O56fvRZi+KulDyf5ctDhhtYJBGKStV2FL1fy6253cmLgqVQ==", + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.1.tgz", + "integrity": "sha512-b4dlw/9V8A71rLIDsSwVmak9z2DuBUB7CA1/wSdelNEzqsjoSPeADTWNO09lpH49Diy3/JIZ2bSPB1dI3LJCHg==", "dev": true, "dependencies": { "cssesc": "^3.0.0", @@ -3915,9 +3915,9 @@ "dev": true }, "node_modules/stylelint": { - "version": "16.6.1", - "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-16.6.1.tgz", - "integrity": "sha512-yNgz2PqWLkhH2hw6X9AweV9YvoafbAD5ZsFdKN9BvSDVwGvPh+AUIrn7lYwy1S7IHmtFin75LLfX1m0D2tHu8Q==", + "version": "16.8.1", + "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-16.8.1.tgz", + "integrity": "sha512-O8aDyfdODSDNz/B3gW2HQ+8kv8pfhSu7ZR7xskQ93+vI6FhKKGUJMQ03Ydu+w3OvXXE0/u4hWU4hCPNOyld+OA==", "dev": true, "funding": [ { @@ -3930,9 +3930,9 @@ } ], "dependencies": { - "@csstools/css-parser-algorithms": "^2.6.3", - "@csstools/css-tokenizer": "^2.3.1", - "@csstools/media-query-list-parser": "^2.1.11", + "@csstools/css-parser-algorithms": "^2.7.1", + "@csstools/css-tokenizer": "^2.4.1", + "@csstools/media-query-list-parser": "^2.1.13", "@csstools/selector-specificity": "^3.1.1", "@dual-bundle/import-meta-resolve": "^4.1.0", "balanced-match": "^2.0.0", @@ -3940,7 +3940,7 @@ "cosmiconfig": "^9.0.0", "css-functions-list": "^3.2.2", "css-tree": "^2.3.1", - "debug": "^4.3.4", + "debug": "^4.3.6", "fast-glob": "^3.3.2", "fastest-levenshtein": "^1.0.16", "file-entry-cache": "^9.0.0", @@ -3951,16 +3951,16 @@ "ignore": "^5.3.1", "imurmurhash": "^0.1.4", "is-plain-object": "^5.0.0", - "known-css-properties": "^0.31.0", + "known-css-properties": "^0.34.0", "mathml-tag-names": "^2.1.3", "meow": "^13.2.0", "micromatch": "^4.0.7", "normalize-path": "^3.0.0", "picocolors": "^1.0.1", - "postcss": "^8.4.38", - "postcss-resolve-nested-selector": "^0.1.1", + "postcss": "^8.4.40", + "postcss-resolve-nested-selector": "^0.1.4", "postcss-safe-parser": "^7.0.0", - "postcss-selector-parser": "^6.1.0", + "postcss-selector-parser": "^6.1.1", "postcss-value-parser": "^4.2.0", "resolve-from": "^5.0.0", "string-width": "^4.2.3", @@ -4082,9 +4082,9 @@ } }, "node_modules/stylelint/node_modules/known-css-properties": { - "version": "0.31.0", - "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.31.0.tgz", - "integrity": "sha512-sBPIUGTNF0czz0mwGGUoKKJC8Q7On1GPbCSFPfyEsfHb2DyBG0Y4QtV+EVWpINSaiGKZblDNuF5AezxSgOhesQ==", + "version": "0.34.0", + "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.34.0.tgz", + "integrity": "sha512-tBECoUqNFbyAY4RrbqsBQqDFpGXAEbdD5QKr8kACx3+rnArmuuR22nKQWKazvp07N9yjTyDZaw/20UIH8tL9DQ==", "dev": true }, "node_modules/stylelint/node_modules/resolve-from": { diff --git a/package.json b/package.json index a9327e71a76..1400c1a296b 100644 --- a/package.json +++ b/package.json @@ -44,7 +44,7 @@ "stylelint": "^16.6.1", "stylelint-config-recommended-scss": "^14.0.0", "stylelint-order": "^6.0.4", - "@stylistic/stylelint-plugin": "^2.1.2" + "@stylistic/stylelint-plugin": "^3.0.0" }, "rtlcssConfig": {} } From 0ce7c038a582d38f0caf82ee5b215358ae84b4fd Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 1 Aug 2024 20:25:09 +0200 Subject: [PATCH 1218/2479] Bump rtlcss from 4.1.1 to 4.2.0 (#6681) Bumps [rtlcss](https://github.com/MohammadYounes/rtlcss) from 4.1.1 to 4.2.0. - [Release notes](https://github.com/MohammadYounes/rtlcss/releases) - [Changelog](https://github.com/MohammadYounes/rtlcss/blob/master/CHANGELOG.md) - [Commits](https://github.com/MohammadYounes/rtlcss/compare/v4.1.1...v4.2.0) --- updated-dependencies: - dependency-name: rtlcss dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 1e1789474bc..12dea89d2af 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,7 +14,7 @@ "eslint-plugin-n": "^16.6.2", "eslint-plugin-promise": "^6.1.1", "markdownlint-cli": "^0.41.0", - "rtlcss": "^4.1.1", + "rtlcss": "^4.2.0", "sass": "^1.77.8", "stylelint": "^16.6.1", "stylelint-config-recommended-scss": "^14.0.0", @@ -3504,9 +3504,9 @@ } }, "node_modules/rtlcss": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/rtlcss/-/rtlcss-4.1.1.tgz", - "integrity": "sha512-/oVHgBtnPNcggP2aVXQjSy6N1mMAfHg4GSag0QtZBlD5bdDgAHwr4pydqJGd+SUCu9260+Pjqbjwtvu7EMH1KQ==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/rtlcss/-/rtlcss-4.2.0.tgz", + "integrity": "sha512-AV+V3oOVvCrqyH5Q/6RuT1IDH1Xy5kJTkEWTWZPN5rdQ3HCFOd8SrbC7c6N5Y8bPpCfZSR6yYbUATXslvfvu5g==", "dev": true, "dependencies": { "escalade": "^3.1.1", diff --git a/package.json b/package.json index 1400c1a296b..3ca070ed39e 100644 --- a/package.json +++ b/package.json @@ -39,7 +39,7 @@ "eslint-plugin-n": "^16.6.2", "eslint-plugin-promise": "^6.1.1", "markdownlint-cli": "^0.41.0", - "rtlcss": "^4.1.1", + "rtlcss": "^4.2.0", "sass": "^1.77.8", "stylelint": "^16.6.1", "stylelint-config-recommended-scss": "^14.0.0", From b2c8cb74562b2f7cb290abd61ff1b6f35475f23a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 1 Aug 2024 20:27:34 +0200 Subject: [PATCH 1219/2479] Bump stylelint-config-recommended-scss (#6683) Bumps the stylelint group with 1 update in the / directory: [stylelint-config-recommended-scss](https://github.com/stylelint-scss/stylelint-config-recommended-scss). Updates `stylelint-config-recommended-scss` from 14.0.0 to 14.1.0 - [Release notes](https://github.com/stylelint-scss/stylelint-config-recommended-scss/releases) - [Changelog](https://github.com/stylelint-scss/stylelint-config-recommended-scss/blob/master/CHANGELOG.md) - [Commits](https://github.com/stylelint-scss/stylelint-config-recommended-scss/compare/v14.0.0...v14.1.0) --- updated-dependencies: - dependency-name: stylelint-config-recommended-scss dependency-type: direct:development update-type: version-update:semver-minor dependency-group: stylelint ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Alexandre Alapetite --- package-lock.json | 54 +++++++++++++++++++++++++---------------------- package.json | 2 +- 2 files changed, 30 insertions(+), 26 deletions(-) diff --git a/package-lock.json b/package-lock.json index 12dea89d2af..37d4df32c8e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -17,7 +17,7 @@ "rtlcss": "^4.2.0", "sass": "^1.77.8", "stylelint": "^16.6.1", - "stylelint-config-recommended-scss": "^14.0.0", + "stylelint-config-recommended-scss": "^14.1.0", "stylelint-order": "^6.0.4" }, "engines": { @@ -2673,9 +2673,9 @@ } }, "node_modules/known-css-properties": { - "version": "0.30.0", - "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.30.0.tgz", - "integrity": "sha512-VSWXYUnsPu9+WYKkfmJyLKtIvaRJi1kXUqVmBACORXZQxT5oZDsoZ2vQP+bQFDnWtpI/4eq3MLoRMjI2fnLzTQ==", + "version": "0.34.0", + "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.34.0.tgz", + "integrity": "sha512-tBECoUqNFbyAY4RrbqsBQqDFpGXAEbdD5QKr8kACx3+rnArmuuR22nKQWKazvp07N9yjTyDZaw/20UIH8tL9DQ==", "dev": true }, "node_modules/levn": { @@ -3978,33 +3978,43 @@ } }, "node_modules/stylelint-config-recommended": { - "version": "14.0.0", - "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-14.0.0.tgz", - "integrity": "sha512-jSkx290CglS8StmrLp2TxAppIajzIBZKYm3IxT89Kg6fGlxbPiTiyH9PS5YUuVAFwaJLl1ikiXX0QWjI0jmgZQ==", + "version": "14.0.1", + "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-14.0.1.tgz", + "integrity": "sha512-bLvc1WOz/14aPImu/cufKAZYfXs/A/owZfSMZ4N+16WGXLoX5lOir53M6odBxvhgmgdxCVnNySJmZKx73T93cg==", "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/stylelint" + }, + { + "type": "github", + "url": "https://github.com/sponsors/stylelint" + } + ], "engines": { "node": ">=18.12.0" }, "peerDependencies": { - "stylelint": "^16.0.0" + "stylelint": "^16.1.0" } }, "node_modules/stylelint-config-recommended-scss": { - "version": "14.0.0", - "resolved": "https://registry.npmjs.org/stylelint-config-recommended-scss/-/stylelint-config-recommended-scss-14.0.0.tgz", - "integrity": "sha512-HDvpoOAQ1RpF+sPbDOT2Q2/YrBDEJDnUymmVmZ7mMCeNiFSdhRdyGEimBkz06wsN+HaFwUh249gDR+I9JR7Onw==", + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/stylelint-config-recommended-scss/-/stylelint-config-recommended-scss-14.1.0.tgz", + "integrity": "sha512-bhaMhh1u5dQqSsf6ri2GVWWQW5iUjBYgcHkh7SgDDn92ijoItC/cfO/W+fpXshgTQWhwFkP1rVcewcv4jaftRg==", "dev": true, "dependencies": { "postcss-scss": "^4.0.9", - "stylelint-config-recommended": "^14.0.0", - "stylelint-scss": "^6.0.0" + "stylelint-config-recommended": "^14.0.1", + "stylelint-scss": "^6.4.0" }, "engines": { "node": ">=18.12.0" }, "peerDependencies": { "postcss": "^8.3.3", - "stylelint": "^16.0.2" + "stylelint": "^16.6.1" }, "peerDependenciesMeta": { "postcss": { @@ -4026,15 +4036,15 @@ } }, "node_modules/stylelint-scss": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/stylelint-scss/-/stylelint-scss-6.3.0.tgz", - "integrity": "sha512-8OSpiuf1xC7f8kllJsBOFAOYp/mR/C1FXMVeOFjtJPw+AFvEmC93FaklHt7MlOqU4poxuQ1TkYMyfI0V+1SxjA==", + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/stylelint-scss/-/stylelint-scss-6.4.1.tgz", + "integrity": "sha512-+clI2bQC2FPOt06ZwUlXZZ95IO2C5bKTP0GLN1LNQPVvISfSNcgMKv/VTwym1mK9vnqhHbOk8lO4rj4nY7L9pw==", "dev": true, "dependencies": { - "known-css-properties": "^0.30.0", + "known-css-properties": "^0.34.0", "postcss-media-query-parser": "^0.2.3", "postcss-resolve-nested-selector": "^0.1.1", - "postcss-selector-parser": "^6.0.15", + "postcss-selector-parser": "^6.1.0", "postcss-value-parser": "^4.2.0" }, "engines": { @@ -4081,12 +4091,6 @@ "node": ">=18" } }, - "node_modules/stylelint/node_modules/known-css-properties": { - "version": "0.34.0", - "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.34.0.tgz", - "integrity": "sha512-tBECoUqNFbyAY4RrbqsBQqDFpGXAEbdD5QKr8kACx3+rnArmuuR22nKQWKazvp07N9yjTyDZaw/20UIH8tL9DQ==", - "dev": true - }, "node_modules/stylelint/node_modules/resolve-from": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", diff --git a/package.json b/package.json index 3ca070ed39e..cd62bebe007 100644 --- a/package.json +++ b/package.json @@ -42,7 +42,7 @@ "rtlcss": "^4.2.0", "sass": "^1.77.8", "stylelint": "^16.6.1", - "stylelint-config-recommended-scss": "^14.0.0", + "stylelint-config-recommended-scss": "^14.1.0", "stylelint-order": "^6.0.4", "@stylistic/stylelint-plugin": "^3.0.0" }, From d2247221bbf23a8fe19f66ea4ad7d0a59ffaa5b4 Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Thu, 1 Aug 2024 20:31:40 +0200 Subject: [PATCH 1220/2479] Minor update whitespace PHPCS rules (#6666) * Minor update whitespace PHPCS rules To simplify our configuration, apply more rules, and be clearer about what is added or removed compared with PSR12. Does not change our current conventions, but just a bit more consistent. * Forgotten *.phtml * Sort exclusion patterns + add a few for Extensions repo * Relaxed some rules --- app/Controllers/authController.php | 2 +- app/Controllers/categoryController.php | 2 +- app/Controllers/entryController.php | 50 ++-- app/Controllers/errorController.php | 68 ++--- app/Controllers/extensionController.php | 4 +- app/Controllers/importExportController.php | 30 +- app/Controllers/indexController.php | 4 +- app/Exceptions/BadUrlException.php | 1 - app/FreshRSS.php | 10 +- app/Mailers/UserMailer.php | 2 +- app/Models/Auth.php | 130 ++++----- app/Models/CategoryDAOSQLite.php | 1 - app/Models/Context.php | 260 +++++++++--------- app/Models/Entry.php | 24 +- app/Models/EntryDAO.php | 82 +++--- app/Models/EntryDAOSQLite.php | 10 +- app/Models/Factory.php | 1 - app/Models/FeedDAO.php | 2 +- app/Models/FilterActionsTrait.php | 4 +- app/Models/Share.php | 2 +- app/Models/StatsDAO.php | 1 - app/Models/StatsDAOPGSQL.php | 3 +- app/Models/StatsDAOSQLite.php | 3 +- app/Models/TagDAO.php | 2 +- app/Models/TagDAOPGSQL.php | 1 - app/Models/TagDAOSQLite.php | 1 - app/Models/Themes.php | 2 +- app/Models/View.php | 1 - app/Models/ViewStats.php | 1 - app/views/helpers/feed/update.phtml | 2 +- app/views/importExport/index.phtml | 2 +- app/views/stats/index.phtml | 7 +- app/views/subscription/add.phtml | 2 +- app/views/subscription/index.phtml | 2 +- app/views/update/index.phtml | 2 +- app/views/user/manage.phtml | 2 +- .../user_mailer/email_need_validation.txt.php | 1 + cli/CliOptionsParser.php | 6 +- cli/manipulate.translation.php | 12 +- cli/prepare.php | 25 +- composer.lock | 95 +++---- lib/Minz/ActionController.php | 2 +- lib/Minz/ActionException.php | 2 +- lib/Minz/Configuration.php | 2 +- ...ControllerNotActionControllerException.php | 2 +- lib/Minz/ControllerNotExistException.php | 2 +- lib/Minz/CurrentPagePaginationException.php | 2 +- lib/Minz/Dispatcher.php | 20 +- lib/Minz/Error.php | 4 +- lib/Minz/Exception.php | 6 +- lib/Minz/Extension.php | 56 ++-- lib/Minz/FileNotExistException.php | 4 +- lib/Minz/FrontController.php | 2 +- lib/Minz/Log.php | 30 +- lib/Minz/PDOConnectionException.php | 2 +- lib/Minz/Paginator.php | 10 +- lib/Minz/PermissionDeniedException.php | 4 +- lib/Minz/Url.php | 4 +- lib/Minz/View.php | 6 +- lib/lib_install.php | 2 +- lib/lib_rss.php | 2 +- p/api/fever.php | 2 - p/api/greader.php | 2 +- phpcs.xml | 157 +++++------ tests/app/Models/FeedDAOTest.php | 2 +- 65 files changed, 586 insertions(+), 603 deletions(-) diff --git a/app/Controllers/authController.php b/app/Controllers/authController.php index 3fc7036fa60..b5374792112 100644 --- a/app/Controllers/authController.php +++ b/app/Controllers/authController.php @@ -36,7 +36,6 @@ public function indexAction(): void { $anon_refresh !== FreshRSS_Context::systemConf()->allow_anonymous_refresh || $unsafe_autologin !== FreshRSS_Context::systemConf()->unsafe_autologin_enabled || $api_enabled !== FreshRSS_Context::systemConf()->api_enabled) { - if (in_array($auth_type, ['form', 'http_auth', 'none'], true)) { FreshRSS_Context::systemConf()->auth_type = $auth_type; } else { @@ -89,6 +88,7 @@ public function loginAction(): void { case 'none': // It should not happen! Minz_Error::error(404); + break; default: // TODO load plugin instead Minz_Error::error(404); diff --git a/app/Controllers/categoryController.php b/app/Controllers/categoryController.php index 410147b4e53..4d5c7759676 100644 --- a/app/Controllers/categoryController.php +++ b/app/Controllers/categoryController.php @@ -28,7 +28,7 @@ public function firstAction(): void { * Request parameter is: * - new-category */ - public function createAction() :void { + public function createAction(): void { $catDAO = FreshRSS_Factory::createCategoryDao(); $tagDAO = FreshRSS_Factory::createTagDao(); diff --git a/app/Controllers/entryController.php b/app/Controllers/entryController.php index 8cea7475237..e604ca6b275 100644 --- a/app/Controllers/entryController.php +++ b/app/Controllers/entryController.php @@ -79,31 +79,31 @@ public function readAction(): void { } else { $type_get = $get[0]; $get = (int)substr($get, 2); - switch($type_get) { - case 'c': - $entryDAO->markReadCat($get, $id_max, FreshRSS_Context::$search, FreshRSS_Context::$state, $is_read); - break; - case 'f': - $entryDAO->markReadFeed($get, $id_max, FreshRSS_Context::$search, FreshRSS_Context::$state, $is_read); - break; - case 's': - $entryDAO->markReadEntries($id_max, true, null, FreshRSS_Feed::PRIORITY_IMPORTANT, - FreshRSS_Context::$search, FreshRSS_Context::$state, $is_read); - break; - case 'a': - $entryDAO->markReadEntries($id_max, false, FreshRSS_Feed::PRIORITY_MAIN_STREAM, FreshRSS_Feed::PRIORITY_IMPORTANT, - FreshRSS_Context::$search, FreshRSS_Context::$state, $is_read); - break; - case 'i': - $entryDAO->markReadEntries($id_max, false, FreshRSS_Feed::PRIORITY_IMPORTANT, null, - FreshRSS_Context::$search, FreshRSS_Context::$state, $is_read); - break; - case 't': - $entryDAO->markReadTag($get, $id_max, FreshRSS_Context::$search, FreshRSS_Context::$state, $is_read); - break; - case 'T': - $entryDAO->markReadTag(0, $id_max, FreshRSS_Context::$search, FreshRSS_Context::$state, $is_read); - break; + switch ($type_get) { + case 'c': + $entryDAO->markReadCat($get, $id_max, FreshRSS_Context::$search, FreshRSS_Context::$state, $is_read); + break; + case 'f': + $entryDAO->markReadFeed($get, $id_max, FreshRSS_Context::$search, FreshRSS_Context::$state, $is_read); + break; + case 's': + $entryDAO->markReadEntries($id_max, true, null, FreshRSS_Feed::PRIORITY_IMPORTANT, + FreshRSS_Context::$search, FreshRSS_Context::$state, $is_read); + break; + case 'a': + $entryDAO->markReadEntries($id_max, false, FreshRSS_Feed::PRIORITY_MAIN_STREAM, FreshRSS_Feed::PRIORITY_IMPORTANT, + FreshRSS_Context::$search, FreshRSS_Context::$state, $is_read); + break; + case 'i': + $entryDAO->markReadEntries($id_max, false, FreshRSS_Feed::PRIORITY_IMPORTANT, null, + FreshRSS_Context::$search, FreshRSS_Context::$state, $is_read); + break; + case 't': + $entryDAO->markReadTag($get, $id_max, FreshRSS_Context::$search, FreshRSS_Context::$state, $is_read); + break; + case 'T': + $entryDAO->markReadTag(0, $id_max, FreshRSS_Context::$search, FreshRSS_Context::$state, $is_read); + break; } if ($next_get !== 'a') { diff --git a/app/Controllers/errorController.php b/app/Controllers/errorController.php index c3e832cf82f..59e910bac37 100644 --- a/app/Controllers/errorController.php +++ b/app/Controllers/errorController.php @@ -24,40 +24,40 @@ public function indexAction(): void { ]); switch ($code_int) { - case 200 : - header('HTTP/1.1 200 OK'); - break; - case 400: - header('HTTP/1.1 400 Bad Request'); - $this->view->code = 'Error 400 - Bad Request'; - $this->view->errorMessage = ''; - break; - case 403: - header('HTTP/1.1 403 Forbidden'); - $this->view->code = 'Error 403 - Forbidden'; - $this->view->errorMessage = _t('feedback.access.denied'); - break; - case 404: - header('HTTP/1.1 404 Not Found'); - $this->view->code = 'Error 404 - Not found'; - $this->view->errorMessage = _t('feedback.access.not_found'); - break; - case 405: - header('HTTP/1.1 405 Method Not Allowed'); - $this->view->code = 'Error 405 - Method Not Allowed'; - $this->view->errorMessage = ''; - break; - case 503: - header('HTTP/1.1 503 Service Unavailable'); - $this->view->code = 'Error 503 - Service Unavailable'; - $this->view->errorMessage = 'Error 503 - Service Unavailable'; - break; - case 500: - default: - header('HTTP/1.1 500 Internal Server Error'); - $this->view->code = 'Error 500 - Internal Server Error'; - $this->view->errorMessage = 'Error 500 - Internal Server Error'; - break; + case 200: + header('HTTP/1.1 200 OK'); + break; + case 400: + header('HTTP/1.1 400 Bad Request'); + $this->view->code = 'Error 400 - Bad Request'; + $this->view->errorMessage = ''; + break; + case 403: + header('HTTP/1.1 403 Forbidden'); + $this->view->code = 'Error 403 - Forbidden'; + $this->view->errorMessage = _t('feedback.access.denied'); + break; + case 404: + header('HTTP/1.1 404 Not Found'); + $this->view->code = 'Error 404 - Not found'; + $this->view->errorMessage = _t('feedback.access.not_found'); + break; + case 405: + header('HTTP/1.1 405 Method Not Allowed'); + $this->view->code = 'Error 405 - Method Not Allowed'; + $this->view->errorMessage = ''; + break; + case 503: + header('HTTP/1.1 503 Service Unavailable'); + $this->view->code = 'Error 503 - Service Unavailable'; + $this->view->errorMessage = 'Error 503 - Service Unavailable'; + break; + case 500: + default: + header('HTTP/1.1 500 Internal Server Error'); + $this->view->code = 'Error 500 - Internal Server Error'; + $this->view->errorMessage = 'Error 500 - Internal Server Error'; + break; } $error_message = trim(implode($error_logs)); diff --git a/app/Controllers/extensionController.php b/app/Controllers/extensionController.php index 0029d5e5256..6a4d97bea11 100644 --- a/app/Controllers/extensionController.php +++ b/app/Controllers/extensionController.php @@ -158,7 +158,7 @@ public function enableAction(): void { if ($conf !== null && $res === true) { $ext_list = $conf->extensions_enabled; - $ext_list = array_filter($ext_list, static function(string $key) use($type) { + $ext_list = array_filter($ext_list, static function (string $key) use ($type) { // Remove from list the extensions that have disappeared or changed type $extension = Minz_ExtensionManager::findExtension($key); return $extension !== null && $extension->getType() === $type; @@ -220,7 +220,7 @@ public function disableAction(): void { if ($conf !== null && $res === true) { $ext_list = $conf->extensions_enabled; - $ext_list = array_filter($ext_list, static function(string $key) use($type) { + $ext_list = array_filter($ext_list, static function (string $key) use ($type) { // Remove from list the extensions that have disappeared or changed type $extension = Minz_ExtensionManager::findExtension($key); return $extension !== null && $extension->getType() === $type; diff --git a/app/Controllers/importExportController.php b/app/Controllers/importExportController.php index 52c70ffe068..2dc25fa2fd7 100644 --- a/app/Controllers/importExportController.php +++ b/app/Controllers/importExportController.php @@ -38,9 +38,15 @@ public function indexAction(): void { */ private static function megabytes(string $size_str) { switch (substr($size_str, -1)) { - case 'M': case 'm': return (int)$size_str; - case 'K': case 'k': return (int)$size_str / 1024; - case 'G': case 'g': return (int)$size_str * 1024; + case 'M': + case 'm': + return (int)$size_str; + case 'K': + case 'k': + return (int)$size_str / 1024; + case 'G': + case 'g': + return (int)$size_str * 1024; } return $size_str; } @@ -689,15 +695,15 @@ public function exportAction(): void { private static function filenameToContentType(string $filename): string { $filetype = self::guessFileType($filename); switch ($filetype) { - case 'zip': - return 'application/zip'; - case 'opml': - return 'application/xml; charset=utf-8'; - case 'json_starred': - case 'json_feed': - return 'application/json; charset=utf-8'; - default: - return 'application/octet-stream'; + case 'zip': + return 'application/zip'; + case 'opml': + return 'application/xml; charset=utf-8'; + case 'json_starred': + case 'json_feed': + return 'application/json; charset=utf-8'; + default: + return 'application/octet-stream'; } } } diff --git a/app/Controllers/indexController.php b/app/Controllers/indexController.php index 2588320b5d6..2ee72b7b706 100644 --- a/app/Controllers/indexController.php +++ b/app/Controllers/indexController.php @@ -268,8 +268,8 @@ public static function listEntriesByContext(?int $postsPerPage = null): Traversa foreach ($entryDAO->listWhere( $type, $id, FreshRSS_Context::$state, FreshRSS_Context::$order, $postsPerPage ?? FreshRSS_Context::$number, FreshRSS_Context::$offset, FreshRSS_Context::$first_id, - FreshRSS_Context::$search, $date_min) - as $entry) { + FreshRSS_Context::$search, $date_min + ) as $entry) { yield $entry; } } diff --git a/app/Exceptions/BadUrlException.php b/app/Exceptions/BadUrlException.php index d308d47916d..c7111a41fef 100644 --- a/app/Exceptions/BadUrlException.php +++ b/app/Exceptions/BadUrlException.php @@ -6,5 +6,4 @@ class FreshRSS_BadUrl_Exception extends FreshRSS_Feed_Exception { public function __construct(string $url) { parent::__construct('`' . $url . '` is not a valid URL'); } - } diff --git a/app/FreshRSS.php b/app/FreshRSS.php index f41ff5d2e87..ff766ad47ee 100644 --- a/app/FreshRSS.php +++ b/app/FreshRSS.php @@ -74,10 +74,10 @@ private static function initAuth(): void { if (!FreshRSS_Context::hasSystemConf() || !(FreshRSS_Auth::isCsrfOk() || (Minz_Request::controllerName() === 'auth' && Minz_Request::actionName() === 'login') || (Minz_Request::controllerName() === 'user' && Minz_Request::actionName() === 'create' && !FreshRSS_Auth::hasAccess('admin')) || - (Minz_Request::controllerName() === 'feed' && Minz_Request::actionName() === 'actualize' - && FreshRSS_Context::systemConf()->allow_anonymous_refresh) || - (Minz_Request::controllerName() === 'javascript' && Minz_Request::actionName() === 'actualize' - && FreshRSS_Context::systemConf()->allow_anonymous) + (Minz_Request::controllerName() === 'feed' && Minz_Request::actionName() === 'actualize' && + FreshRSS_Context::systemConf()->allow_anonymous_refresh) || + (Minz_Request::controllerName() === 'javascript' && Minz_Request::actionName() === 'actualize' && + FreshRSS_Context::systemConf()->allow_anonymous) )) { // Token-based protection against XSRF attacks, except for the login or self-create user forms self::initI18n(); @@ -112,7 +112,7 @@ public static function loadStylesAndScripts(): void { } $theme = FreshRSS_Themes::load(FreshRSS_Context::userConf()->theme); if ($theme) { - foreach(array_reverse($theme['files']) as $file) { + foreach (array_reverse($theme['files']) as $file) { switch (substr($file, -3)) { case '.js': $theme_id = $theme['id']; diff --git a/app/Mailers/UserMailer.php b/app/Mailers/UserMailer.php index 53d50d01cc5..4d657bf69dc 100644 --- a/app/Mailers/UserMailer.php +++ b/app/Mailers/UserMailer.php @@ -38,7 +38,7 @@ public function send_email_need_validation(string $username, FreshRSS_UserConfig $subject_prefix = '[' . FreshRSS_Context::systemConf()->title . ']'; return $this->mail( $user_config->mail_login, - $subject_prefix . ' ' ._t('user.mailer.email_need_validation.title') + $subject_prefix . ' ' . _t('user.mailer.email_need_validation.title') ); } } diff --git a/app/Models/Auth.php b/app/Models/Auth.php index 416f3061d12..f65a59e0350 100644 --- a/app/Models/Auth.php +++ b/app/Models/Auth.php @@ -54,48 +54,48 @@ public static function init(): bool { private static function accessControl(): bool { $auth_type = FreshRSS_Context::systemConf()->auth_type; switch ($auth_type) { - case 'form': - $credentials = FreshRSS_FormAuth::getCredentialsFromCookie(); - $current_user = ''; - if (isset($credentials[1])) { - $current_user = trim($credentials[0]); - Minz_Session::_params([ + case 'form': + $credentials = FreshRSS_FormAuth::getCredentialsFromCookie(); + $current_user = ''; + if (isset($credentials[1])) { + $current_user = trim($credentials[0]); + Minz_Session::_params([ Minz_User::CURRENT_USER => $current_user, 'passwordHash' => trim($credentials[1]), 'csrf' => false, - ]); - } - return $current_user != ''; - case 'http_auth': - $current_user = httpAuthUser(); - if ($current_user == '') { - return false; - } - $login_ok = FreshRSS_UserDAO::exists($current_user); - if (!$login_ok && FreshRSS_Context::systemConf()->http_auth_auto_register) { - $email = null; - if (FreshRSS_Context::systemConf()->http_auth_auto_register_email_field !== '' && - isset($_SERVER[FreshRSS_Context::systemConf()->http_auth_auto_register_email_field])) { - $email = (string)$_SERVER[FreshRSS_Context::systemConf()->http_auth_auto_register_email_field]; + ]); } - $language = Minz_Translate::getLanguage(null, Minz_Request::getPreferredLanguages(), FreshRSS_Context::systemConf()->language); - Minz_Translate::init($language); - $login_ok = FreshRSS_user_Controller::createUser($current_user, $email, '', [ + return $current_user != ''; + case 'http_auth': + $current_user = httpAuthUser(); + if ($current_user == '') { + return false; + } + $login_ok = FreshRSS_UserDAO::exists($current_user); + if (!$login_ok && FreshRSS_Context::systemConf()->http_auth_auto_register) { + $email = null; + if (FreshRSS_Context::systemConf()->http_auth_auto_register_email_field !== '' && + isset($_SERVER[FreshRSS_Context::systemConf()->http_auth_auto_register_email_field])) { + $email = (string)$_SERVER[FreshRSS_Context::systemConf()->http_auth_auto_register_email_field]; + } + $language = Minz_Translate::getLanguage(null, Minz_Request::getPreferredLanguages(), FreshRSS_Context::systemConf()->language); + Minz_Translate::init($language); + $login_ok = FreshRSS_user_Controller::createUser($current_user, $email, '', [ 'language' => $language, - ]); - } - if ($login_ok) { - Minz_Session::_params([ + ]); + } + if ($login_ok) { + Minz_Session::_params([ Minz_User::CURRENT_USER => $current_user, 'csrf' => false, - ]); - } - return $login_ok; - case 'none': - return true; - default: - // TODO load extension - return false; + ]); + } + return $login_ok; + case 'none': + return true; + default: + // TODO load extension + return false; } } @@ -110,19 +110,19 @@ public static function giveAccess(): bool { } switch (FreshRSS_Context::systemConf()->auth_type) { - case 'form': - self::$login_ok = Minz_Session::paramString('passwordHash') === FreshRSS_Context::userConf()->passwordHash; - break; - case 'http_auth': - $current_user = Minz_User::name() ?? ''; - self::$login_ok = strcasecmp($current_user, httpAuthUser()) === 0; - break; - case 'none': - self::$login_ok = true; - break; - default: - // TODO: extensions - self::$login_ok = false; + case 'form': + self::$login_ok = Minz_Session::paramString('passwordHash') === FreshRSS_Context::userConf()->passwordHash; + break; + case 'http_auth': + $current_user = Minz_User::name() ?? ''; + self::$login_ok = strcasecmp($current_user, httpAuthUser()) === 0; + break; + case 'none': + self::$login_ok = true; + break; + default: + // TODO: extensions + self::$login_ok = false; } Minz_Session::_params([ @@ -147,13 +147,13 @@ public static function hasAccess(string $scope = 'general'): bool { $default_user = FreshRSS_Context::systemConf()->default_user; $ok = self::$login_ok; switch ($scope) { - case 'general': - break; - case 'admin': - $ok &= $default_user === $currentUser || $isAdmin; - break; - default: - $ok = false; + case 'general': + break; + case 'admin': + $ok &= $default_user === $currentUser || $isAdmin; + break; + default: + $ok = false; } return (bool)$ok; } @@ -186,16 +186,16 @@ public static function removeAccess(): void { Minz_User::change($username); switch (FreshRSS_Context::systemConf()->auth_type) { - case 'form': - Minz_Session::_param('passwordHash'); - FreshRSS_FormAuth::deleteCookie(); - break; - case 'http_auth': - case 'none': - // Nothing to do… - break; - default: - // TODO: extensions + case 'form': + Minz_Session::_param('passwordHash'); + FreshRSS_FormAuth::deleteCookie(); + break; + case 'http_auth': + case 'none': + // Nothing to do… + break; + default: + // TODO: extensions } } diff --git a/app/Models/CategoryDAOSQLite.php b/app/Models/CategoryDAOSQLite.php index 5fb0da31dc2..4aaac07a8b5 100644 --- a/app/Models/CategoryDAOSQLite.php +++ b/app/Models/CategoryDAOSQLite.php @@ -16,5 +16,4 @@ protected function autoUpdateDb(array $errorInfo): bool { } return false; } - } diff --git a/app/Models/Context.php b/app/Models/Context.php index 7efb24ab157..988eedc7111 100644 --- a/app/Models/Context.php +++ b/app/Models/Context.php @@ -347,23 +347,23 @@ public static function isCurrentGet(string $get): bool { $type = substr($get, 0, 1); $id = substr($get, 2); - switch($type) { - case 'a': - return self::$current_get['all']; - case 'i': - return self::$current_get['important']; - case 's': - return self::$current_get['starred']; - case 'f': - return self::$current_get['feed'] == $id; - case 'c': - return self::$current_get['category'] == $id; - case 't': - return self::$current_get['tag'] == $id; - case 'T': - return self::$current_get['tags'] || self::$current_get['tag']; - default: - return false; + switch ($type) { + case 'a': + return self::$current_get['all']; + case 'i': + return self::$current_get['important']; + case 's': + return self::$current_get['starred']; + case 'f': + return self::$current_get['feed'] == $id; + case 'c': + return self::$current_get['category'] == $id; + case 't': + return self::$current_get['tag'] == $id; + case 'T': + return self::$current_get['tags'] || self::$current_get['tag']; + default: + return false; } } @@ -393,84 +393,84 @@ public static function _get(string $get): void { self::$categories = $catDAO->listCategories(true, $details); } - switch($type) { - case 'a': - self::$current_get['all'] = true; - self::$name = _t('index.feed.title'); - self::$description = FreshRSS_Context::systemConf()->meta_description; - self::$get_unread = self::$total_unread; - break; - case 'i': - self::$current_get['important'] = true; - self::$name = _t('index.menu.important'); - self::$description = FreshRSS_Context::systemConf()->meta_description; - self::$get_unread = self::$total_unread; - break; - case 's': - self::$current_get['starred'] = true; - self::$name = _t('index.feed.title_fav'); - self::$description = FreshRSS_Context::systemConf()->meta_description; - self::$get_unread = self::$total_starred['unread']; - - // Update state if favorite is not yet enabled. - self::$state = self::$state | FreshRSS_Entry::STATE_FAVORITE; - break; - case 'f': - // We try to find the corresponding feed. When allowing robots, always retrieve the full feed including description - $feed = FreshRSS_Context::systemConf()->allow_robots ? null : FreshRSS_Category::findFeed(self::$categories, $id); - if ($feed === null) { - $feedDAO = FreshRSS_Factory::createFeedDao(); - $feed = $feedDAO->searchById($id); + switch ($type) { + case 'a': + self::$current_get['all'] = true; + self::$name = _t('index.feed.title'); + self::$description = FreshRSS_Context::systemConf()->meta_description; + self::$get_unread = self::$total_unread; + break; + case 'i': + self::$current_get['important'] = true; + self::$name = _t('index.menu.important'); + self::$description = FreshRSS_Context::systemConf()->meta_description; + self::$get_unread = self::$total_unread; + break; + case 's': + self::$current_get['starred'] = true; + self::$name = _t('index.feed.title_fav'); + self::$description = FreshRSS_Context::systemConf()->meta_description; + self::$get_unread = self::$total_starred['unread']; + + // Update state if favorite is not yet enabled. + self::$state = self::$state | FreshRSS_Entry::STATE_FAVORITE; + break; + case 'f': + // We try to find the corresponding feed. When allowing robots, always retrieve the full feed including description + $feed = FreshRSS_Context::systemConf()->allow_robots ? null : FreshRSS_Category::findFeed(self::$categories, $id); if ($feed === null) { - throw new FreshRSS_Context_Exception('Invalid feed: ' . $id); + $feedDAO = FreshRSS_Factory::createFeedDao(); + $feed = $feedDAO->searchById($id); + if ($feed === null) { + throw new FreshRSS_Context_Exception('Invalid feed: ' . $id); + } } - } - self::$current_get['feed'] = $id; - self::$current_get['category'] = $feed->categoryId(); - self::$name = $feed->name(); - self::$description = $feed->description(); - self::$get_unread = $feed->nbNotRead(); - break; - case 'c': - // We try to find the corresponding category. - self::$current_get['category'] = $id; - if (!isset(self::$categories[$id])) { - $catDAO = FreshRSS_Factory::createCategoryDao(); - $cat = $catDAO->searchById($id); - if ($cat === null) { - throw new FreshRSS_Context_Exception('Invalid category: ' . $id); + self::$current_get['feed'] = $id; + self::$current_get['category'] = $feed->categoryId(); + self::$name = $feed->name(); + self::$description = $feed->description(); + self::$get_unread = $feed->nbNotRead(); + break; + case 'c': + // We try to find the corresponding category. + self::$current_get['category'] = $id; + if (!isset(self::$categories[$id])) { + $catDAO = FreshRSS_Factory::createCategoryDao(); + $cat = $catDAO->searchById($id); + if ($cat === null) { + throw new FreshRSS_Context_Exception('Invalid category: ' . $id); + } + self::$categories[$id] = $cat; + } else { + $cat = self::$categories[$id]; } - self::$categories[$id] = $cat; - } else { - $cat = self::$categories[$id]; - } - self::$name = $cat->name(); - self::$get_unread = $cat->nbNotRead(); - break; - case 't': - // We try to find the corresponding tag. - self::$current_get['tag'] = $id; - if (!isset(self::$tags[$id])) { - $tagDAO = FreshRSS_Factory::createTagDao(); - $tag = $tagDAO->searchById($id); - if ($tag === null) { - throw new FreshRSS_Context_Exception('Invalid tag: ' . $id); + self::$name = $cat->name(); + self::$get_unread = $cat->nbNotRead(); + break; + case 't': + // We try to find the corresponding tag. + self::$current_get['tag'] = $id; + if (!isset(self::$tags[$id])) { + $tagDAO = FreshRSS_Factory::createTagDao(); + $tag = $tagDAO->searchById($id); + if ($tag === null) { + throw new FreshRSS_Context_Exception('Invalid tag: ' . $id); + } + self::$tags[$id] = $tag; + } else { + $tag = self::$tags[$id]; } - self::$tags[$id] = $tag; - } else { - $tag = self::$tags[$id]; - } - self::$name = $tag->name(); - self::$get_unread = $tag->nbUnread(); - break; - case 'T': - $tagDAO = FreshRSS_Factory::createTagDao(); - self::$current_get['tags'] = true; - self::$name = _t('index.menu.tags'); - self::$get_unread = $tagDAO->countNotRead(); - break; - default: - throw new FreshRSS_Context_Exception('Invalid getter: ' . $get); + self::$name = $tag->name(); + self::$get_unread = $tag->nbUnread(); + break; + case 'T': + $tagDAO = FreshRSS_Factory::createTagDao(); + self::$current_get['tags'] = true; + self::$name = _t('index.menu.tags'); + self::$get_unread = $tagDAO->countNotRead(); + break; + default: + throw new FreshRSS_Context_Exception('Invalid getter: ' . $get); } self::_nextGet(); @@ -493,54 +493,54 @@ private static function _nextGet(): void { $another_unread_id = ''; $found_current_get = false; switch ($get[0]) { - case 'f': - // We search the next unread feed with the following priorities: next in same category, or previous in same category, or next, or previous. - foreach (self::$categories as $cat) { - $sameCat = false; - foreach ($cat->feeds() as $feed) { - if ($found_current_get) { - if ($feed->nbNotRead() > 0) { + case 'f': + // We search the next unread feed with the following priorities: next in same category, or previous in same category, or next, or previous. + foreach (self::$categories as $cat) { + $sameCat = false; + foreach ($cat->feeds() as $feed) { + if ($found_current_get) { + if ($feed->nbNotRead() > 0) { + $another_unread_id = $feed->id(); + break 2; + } + } elseif ($feed->id() == self::$current_get['feed']) { + $found_current_get = true; + } elseif ($feed->nbNotRead() > 0) { $another_unread_id = $feed->id(); - break 2; + $sameCat = true; } - } elseif ($feed->id() == self::$current_get['feed']) { - $found_current_get = true; - } elseif ($feed->nbNotRead() > 0) { - $another_unread_id = $feed->id(); - $sameCat = true; + } + if ($found_current_get && $sameCat) { + break; } } - if ($found_current_get && $sameCat) { - break; - } - } - // If there is no more unread feed, show main stream - self::$next_get = $another_unread_id == '' ? 'a' : 'f_' . $another_unread_id; - break; - case 'c': - // We search the next category with at least one unread article. - foreach (self::$categories as $cat) { - if ($cat->id() == self::$current_get['category']) { - // Here is our current category! Next one could be our - // champion if it has unread articles. - $found_current_get = true; - continue; - } + // If there is no more unread feed, show main stream + self::$next_get = $another_unread_id == '' ? 'a' : 'f_' . $another_unread_id; + break; + case 'c': + // We search the next category with at least one unread article. + foreach (self::$categories as $cat) { + if ($cat->id() == self::$current_get['category']) { + // Here is our current category! Next one could be our + // champion if it has unread articles. + $found_current_get = true; + continue; + } - if ($cat->nbNotRead() > 0) { - $another_unread_id = $cat->id(); - if ($found_current_get) { - // Unread articles and the current category has - // already been found? Leave the loop! - break; + if ($cat->nbNotRead() > 0) { + $another_unread_id = $cat->id(); + if ($found_current_get) { + // Unread articles and the current category has + // already been found? Leave the loop! + break; + } } } - } - // If there is no more unread category, show main stream - self::$next_get = $another_unread_id == '' ? 'a' : 'c_' . $another_unread_id; - break; + // If there is no more unread category, show main stream + self::$next_get = $another_unread_id == '' ? 'a' : 'c_' . $another_unread_id; + break; } } } diff --git a/app/Models/Entry.php b/app/Models/Entry.php index ada6e99448c..cd7b2729160 100644 --- a/app/Models/Entry.php +++ b/app/Models/Entry.php @@ -393,7 +393,7 @@ public function date(bool $raw = false) { return timestamptodate($this->date); } public function machineReadableDate(): string { - return @date (DATE_ATOM, $this->date); + return @date(DATE_ATOM, $this->date); } public function lastSeen(): int { @@ -728,17 +728,17 @@ public function applyFilterActions(array $titlesAsRead = []): void { public function isDay(int $day, int $today): bool { $date = $this->dateAdded(true); switch ($day) { - case FreshRSS_Days::TODAY: - $tomorrow = $today + 86400; - return $date >= $today && $date < $tomorrow; - case FreshRSS_Days::YESTERDAY: - $yesterday = $today - 86400; - return $date >= $yesterday && $date < $today; - case FreshRSS_Days::BEFORE_YESTERDAY: - $yesterday = $today - 86400; - return $date < $yesterday; - default: - return false; + case FreshRSS_Days::TODAY: + $tomorrow = $today + 86400; + return $date >= $today && $date < $tomorrow; + case FreshRSS_Days::YESTERDAY: + $yesterday = $today - 86400; + return $date >= $yesterday && $date < $today; + case FreshRSS_Days::BEFORE_YESTERDAY: + $yesterday = $today - 86400; + return $date < $yesterday; + default: + return false; } } diff --git a/app/Models/EntryDAO.php b/app/Models/EntryDAO.php index ba0cf197024..cd837376653 100644 --- a/app/Models/EntryDAO.php +++ b/app/Models/EntryDAO.php @@ -312,7 +312,7 @@ public function markFavorite($ids, bool $is_favorite = true) { } $sql = 'UPDATE `_entry` ' . 'SET is_favorite=? ' - . 'WHERE id IN (' . str_repeat('?,', count($ids) - 1). '?)'; + . 'WHERE id IN (' . str_repeat('?,', count($ids) - 1) . '?)'; $values = [$is_favorite ? 1 : 0]; $values = array_merge($values, $ids); $stm = $this->pdo->prepare($sql); @@ -393,7 +393,7 @@ public function markRead($ids, bool $is_read = true) { $sql = 'UPDATE `_entry` ' . 'SET is_read=? ' - . 'WHERE id IN (' . str_repeat('?,', count($ids) - 1). '?)'; + . 'WHERE id IN (' . str_repeat('?,', count($ids) - 1) . '?)'; $values = [$is_read ? 1 : 0]; $values = array_merge($values, $ids); $stm = $this->pdo->prepare($sql); @@ -1062,43 +1062,43 @@ private function sqlListWhere(string $type = 'a', int $id = 0, int $state = Fres $where = ''; $values = []; switch ($type) { - case 'a': //All PRIORITY_MAIN_STREAM - $where .= 'f.priority >= ' . FreshRSS_Feed::PRIORITY_MAIN_STREAM . ' '; - break; - case 'A': //All except PRIORITY_ARCHIVED - $where .= 'f.priority > ' . FreshRSS_Feed::PRIORITY_ARCHIVED . ' '; - break; - case 'i': //Priority important feeds - $where .= 'f.priority >= ' . FreshRSS_Feed::PRIORITY_IMPORTANT . ' '; - break; - case 's': //Starred. Deprecated: use $state instead - $where .= 'f.priority > ' . FreshRSS_Feed::PRIORITY_ARCHIVED . ' '; - $where .= 'AND e.is_favorite=1 '; - break; - case 'S': //Starred - $where .= 'e.is_favorite=1 '; - break; - case 'c': //Category - $where .= 'f.priority >= ' . FreshRSS_Feed::PRIORITY_CATEGORY . ' '; - $where .= 'AND f.category=? '; - $values[] = $id; - break; - case 'f': //Feed - $where .= 'e.id_feed=? '; - $values[] = $id; - break; - case 't': //Tag (label) - $where .= 'et.id_tag=? '; - $values[] = $id; - break; - case 'T': //Any tag (label) - $where .= '1=1 '; - break; - case 'ST': //Starred or tagged (label) - $where .= 'e.is_favorite=1 OR EXISTS (SELECT et2.id_tag FROM `_entrytag` et2 WHERE et2.id_entry = e.id) '; - break; - default: - throw new FreshRSS_EntriesGetter_Exception('Bad type in Entry->listByType: [' . $type . ']!'); + case 'a': //All PRIORITY_MAIN_STREAM + $where .= 'f.priority >= ' . FreshRSS_Feed::PRIORITY_MAIN_STREAM . ' '; + break; + case 'A': //All except PRIORITY_ARCHIVED + $where .= 'f.priority > ' . FreshRSS_Feed::PRIORITY_ARCHIVED . ' '; + break; + case 'i': //Priority important feeds + $where .= 'f.priority >= ' . FreshRSS_Feed::PRIORITY_IMPORTANT . ' '; + break; + case 's': //Starred. Deprecated: use $state instead + $where .= 'f.priority > ' . FreshRSS_Feed::PRIORITY_ARCHIVED . ' '; + $where .= 'AND e.is_favorite=1 '; + break; + case 'S': //Starred + $where .= 'e.is_favorite=1 '; + break; + case 'c': //Category + $where .= 'f.priority >= ' . FreshRSS_Feed::PRIORITY_CATEGORY . ' '; + $where .= 'AND f.category=? '; + $values[] = $id; + break; + case 'f': //Feed + $where .= 'e.id_feed=? '; + $values[] = $id; + break; + case 't': //Tag (label) + $where .= 'et.id_tag=? '; + $values[] = $id; + break; + case 'T': //Any tag (label) + $where .= '1=1 '; + break; + case 'ST': //Starred or tagged (label) + $where .= 'e.is_favorite=1 OR EXISTS (SELECT et2.id_tag FROM `_entrytag` et2 WHERE et2.id_entry = e.id) '; + break; + default: + throw new FreshRSS_EntriesGetter_Exception('Bad type in Entry->listByType: [' . $type . ']!'); } [$searchValues, $search] = $this->sqlListEntriesWhere('e.', $filters, $state, $order, $firstId, $date_min); @@ -1257,7 +1257,7 @@ public function listHashForFeedGuids(int $id_feed, array $guids) { } $guids = array_unique($guids); $sql = 'SELECT guid, ' . static::sqlHexEncode('hash') . - ' AS hex_hash FROM `_entry` WHERE id_feed=? AND guid IN (' . str_repeat('?,', count($guids) - 1). '?)'; + ' AS hex_hash FROM `_entry` WHERE id_feed=? AND guid IN (' . str_repeat('?,', count($guids) - 1) . '?)'; $stm = $this->pdo->prepare($sql); $values = [$id_feed]; $values = array_merge($values, $guids); @@ -1294,7 +1294,7 @@ public function updateLastSeen(int $id_feed, array $guids, int $mtime = 0) { } return $affected; } - $sql = 'UPDATE `_entry` SET `lastSeen`=? WHERE id_feed=? AND guid IN (' . str_repeat('?,', count($guids) - 1). '?)'; + $sql = 'UPDATE `_entry` SET `lastSeen`=? WHERE id_feed=? AND guid IN (' . str_repeat('?,', count($guids) - 1) . '?)'; $stm = $this->pdo->prepare($sql); if ($mtime <= 0) { $mtime = time(); diff --git a/app/Models/EntryDAOSQLite.php b/app/Models/EntryDAOSQLite.php index 44c248e82da..364d0c1530b 100644 --- a/app/Models/EntryDAOSQLite.php +++ b/app/Models/EntryDAOSQLite.php @@ -86,11 +86,11 @@ public function markRead($ids, bool $is_read = true) { FreshRSS_UserDAO::touch(); if (is_array($ids)) { //Many IDs at once (used by API) //if (true) { //Speed heuristics //TODO: Not implemented yet for SQLite (so always call IDs one by one) - $affected = 0; - foreach ($ids as $id) { - $affected += ($this->markRead($id, $is_read) ?: 0); - } - return $affected; + $affected = 0; + foreach ($ids as $id) { + $affected += ($this->markRead($id, $is_read) ?: 0); + } + return $affected; //} } else { $this->pdo->beginTransaction(); diff --git a/app/Models/Factory.php b/app/Models/Factory.php index f69c7f6aa38..be96c0e58b3 100644 --- a/app/Models/Factory.php +++ b/app/Models/Factory.php @@ -89,5 +89,4 @@ public static function createDatabaseDAO(?string $username = null): FreshRSS_Dat return new FreshRSS_DatabaseDAO($username); } } - } diff --git a/app/Models/FeedDAO.php b/app/Models/FeedDAO.php index 204f959397a..11eef4e9065 100644 --- a/app/Models/FeedDAO.php +++ b/app/Models/FeedDAO.php @@ -464,7 +464,7 @@ public function updateCachedValues(int ...$feedIds) { `cache_nbUnreads`=(SELECT COUNT(e2.id) FROM `_entry` e2 WHERE e2.id_feed=`_feed`.id AND e2.is_read=0) SQL; if (count($feedIds) > 0) { - $sql .= ' WHERE id IN (' . str_repeat('?,', count($feedIds) - 1). '?)'; + $sql .= ' WHERE id IN (' . str_repeat('?,', count($feedIds) - 1) . '?)'; } $stm = $this->pdo->prepare($sql); if ($stm !== false && $stm->execute($feedIds)) { diff --git a/app/Models/FilterActionsTrait.php b/app/Models/FilterActionsTrait.php index 495dc3eee50..9b7ee66d4dd 100644 --- a/app/Models/FilterActionsTrait.php +++ b/app/Models/FilterActionsTrait.php @@ -84,7 +84,7 @@ public function _filtersAction(string $action, array $filters): void { } } //Update existing filter with new action - for ($k = count($filters) - 1; $k >= 0; $k --) { + for ($k = count($filters) - 1; $k >= 0; $k--) { $filter = $filters[$k]; if ($filter === $filterAction->booleanSearch()->getRawInput()) { $actions[] = $action; @@ -100,7 +100,7 @@ public function _filtersAction(string $action, array $filters): void { } //Add new filters - for ($k = count($filters) - 1; $k >= 0; $k --) { + for ($k = count($filters) - 1; $k >= 0; $k--) { $filter = $filters[$k]; if ($filter != '') { $filterAction = FreshRSS_FilterAction::fromJSON([ diff --git a/app/Models/Share.php b/app/Models/Share.php index 8d2d70a6a69..9c8f2084ed8 100644 --- a/app/Models/Share.php +++ b/app/Models/Share.php @@ -157,7 +157,7 @@ public function update(array $options): void { case 'method': $this->method = strcasecmp($value, 'POST') === 0 ? 'POST' : 'GET'; break; - case 'field'; + case 'field': $this->field = $value; break; } diff --git a/app/Models/StatsDAO.php b/app/Models/StatsDAO.php index 3ee481776d6..6331e24f22d 100644 --- a/app/Models/StatsDAO.php +++ b/app/Models/StatsDAO.php @@ -371,5 +371,4 @@ private function convertToTranslatedJson(array $data = []): array { return $translated; } - } diff --git a/app/Models/StatsDAOPGSQL.php b/app/Models/StatsDAOPGSQL.php index 4fd00c29df9..ba5cbfca18d 100644 --- a/app/Models/StatsDAOPGSQL.php +++ b/app/Models/StatsDAOPGSQL.php @@ -68,7 +68,7 @@ protected function calculateEntryRepartitionPerFeedPerPeriod(string $period, ?in $periodMax = 12; break; default: - $periodMax = 30; + $periodMax = 30; } $repartition = array_fill(0, $periodMax, 0); @@ -78,5 +78,4 @@ protected function calculateEntryRepartitionPerFeedPerPeriod(string $period, ?in return $repartition; } - } diff --git a/app/Models/StatsDAOSQLite.php b/app/Models/StatsDAOSQLite.php index 8997f3abe96..c459510697d 100644 --- a/app/Models/StatsDAOSQLite.php +++ b/app/Models/StatsDAOSQLite.php @@ -43,7 +43,7 @@ protected function calculateEntryRepartitionPerFeedPerPeriod(string $period, ?in $periodMax = 12; break; default: - $periodMax = 30; + $periodMax = 30; } $repartition = array_fill(0, $periodMax, 0); @@ -53,5 +53,4 @@ protected function calculateEntryRepartitionPerFeedPerPeriod(string $period, ?in return $repartition; } - } diff --git a/app/Models/TagDAO.php b/app/Models/TagDAO.php index 7e3f544577c..1feba263ea2 100644 --- a/app/Models/TagDAO.php +++ b/app/Models/TagDAO.php @@ -381,7 +381,7 @@ public function getTagsForEntries(array $entries) { } return $values; } - $sql .= ' AND et.id_entry IN (' . str_repeat('?,', count($entries) - 1). '?)'; + $sql .= ' AND et.id_entry IN (' . str_repeat('?,', count($entries) - 1) . '?)'; if (is_array($entries[0])) { /** @var array> $entries */ foreach ($entries as $entry) { diff --git a/app/Models/TagDAOPGSQL.php b/app/Models/TagDAOPGSQL.php index 107ab6d085b..35688c2d0f3 100644 --- a/app/Models/TagDAOPGSQL.php +++ b/app/Models/TagDAOPGSQL.php @@ -7,5 +7,4 @@ class FreshRSS_TagDAOPGSQL extends FreshRSS_TagDAO { public function sqlIgnore(): string { return ''; //TODO } - } diff --git a/app/Models/TagDAOSQLite.php b/app/Models/TagDAOSQLite.php index 2ecda7735c0..69584edf061 100644 --- a/app/Models/TagDAOSQLite.php +++ b/app/Models/TagDAOSQLite.php @@ -7,5 +7,4 @@ class FreshRSS_TagDAOSQLite extends FreshRSS_TagDAO { public function sqlIgnore(): string { return 'OR IGNORE'; } - } diff --git a/app/Models/Themes.php b/app/Models/Themes.php index fab29e9868a..04ce0a36dc1 100644 --- a/app/Models/Themes.php +++ b/app/Models/Themes.php @@ -158,7 +158,7 @@ public static function icon(string $name, int $type = self::ICON_DEFAULT): strin if ($type == self::ICON_DEFAULT) { if ((FreshRSS_Context::hasUserConf() && FreshRSS_Context::userConf()->icons_as_emojis) // default to emoji alternate for some icons - ) { + ) { $type = self::ICON_EMOJI; } else { $type = self::ICON_IMG; diff --git a/app/Models/View.php b/app/Models/View.php index 293bc71ac5c..c586d8632b0 100644 --- a/app/Models/View.php +++ b/app/Models/View.php @@ -129,5 +129,4 @@ class FreshRSS_View extends Minz_View { public string $errorMessage; /** @var array */ public array $message; - } diff --git a/app/Models/ViewStats.php b/app/Models/ViewStats.php index ca98c554acd..608633f6bcd 100644 --- a/app/Models/ViewStats.php +++ b/app/Models/ViewStats.php @@ -44,5 +44,4 @@ final class FreshRSS_ViewStats extends FreshRSS_View { public array $repartitionMonth; /** @var array */ public array $topFeed; - } diff --git a/app/views/helpers/feed/update.phtml b/app/views/helpers/feed/update.phtml index 8390fa6bf65..93a528532d0 100644 --- a/app/views/helpers/feed/update.phtml +++ b/app/views/helpers/feed/update.phtml @@ -692,7 +692,7 @@
    size="10"> diff --git a/app/views/stats/index.phtml b/app/views/stats/index.phtml index 4e14d0fc73a..b24b859b892 100644 --- a/app/views/stats/index.phtml +++ b/app/views/stats/index.phtml @@ -83,16 +83,15 @@
    diff --git a/app/views/subscription/add.phtml b/app/views/subscription/add.phtml index f4651f52b1c..2aefd3c3e91 100644 --- a/app/views/subscription/add.phtml +++ b/app/views/subscription/add.phtml @@ -310,7 +310,7 @@