mirror of
https://github.com/wallabag/wallabag.git
synced 2025-12-25 22:47:33 +01:00
Compare commits
1 Commits
upgrade-ma
...
2.0.0-alph
| Author | SHA1 | Date | |
|---|---|---|---|
| a45f644148 |
@ -1,7 +0,0 @@
|
||||
{
|
||||
"github-oauth": {
|
||||
"github.com": "PLEASE DO NOT USE THIS TOKEN IN YOUR OWN PROJECTS/FORKS",
|
||||
"github.com": "This token is reserved for testing the wallabag/wallabag repository",
|
||||
"github.com": "73d9411c719a0a56259dbfa16673793b39973091"
|
||||
}
|
||||
}
|
||||
@ -8,16 +8,3 @@ indent_style = space
|
||||
indent_size = 4
|
||||
trim_trailing_whitespace = true
|
||||
insert_final_newline = true
|
||||
|
||||
[*.{js,css,scss}]
|
||||
indent_style = space
|
||||
indent_size = 2
|
||||
|
||||
[*akefile]
|
||||
indent_style = tab
|
||||
|
||||
[.github/**.yml]
|
||||
indent_size = 2
|
||||
|
||||
[phpstan-baseline.neon]
|
||||
indent_style = tab
|
||||
|
||||
@ -1,17 +0,0 @@
|
||||
{
|
||||
"extends": "airbnb-base",
|
||||
"parser": "@babel/eslint-parser",
|
||||
"parserOptions": {
|
||||
"requireConfigFile": false
|
||||
},
|
||||
"env": {
|
||||
"browser": true,
|
||||
"es6": true
|
||||
},
|
||||
"globals": {
|
||||
"Routing": true
|
||||
},
|
||||
"rules": {
|
||||
"import/no-extraneous-dependencies": ["error", {"devDependencies": true, "optionalDependencies": true, "peerDependencies": true}]
|
||||
}
|
||||
}
|
||||
7
.gitattributes
vendored
7
.gitattributes
vendored
@ -1,7 +0,0 @@
|
||||
/.editorconfig export-ignore
|
||||
/.gitattributes export-ignore
|
||||
/.github export-ignore
|
||||
/.gitignore export-ignore
|
||||
/phpstan.neon export-ignore
|
||||
/phpunit.xml.dist export-ignore
|
||||
/tests export-ignore
|
||||
61
.github/CONTRIBUTING.md
vendored
61
.github/CONTRIBUTING.md
vendored
@ -1,61 +0,0 @@
|
||||
# How to contribute
|
||||
|
||||
## Test it locally
|
||||
|
||||
### Using Docker
|
||||
|
||||
- Clone the repository
|
||||
- Ensure your Docker daemon is running
|
||||
- Copy `docker/php/env.example` to `docker/php/env` and customize
|
||||
- Launch `docker compose run --rm php composer install` to bootstrap php dependencies
|
||||
- Launch `docker compose run --rm php bin/console wallabag:install` to bootstrap your installation
|
||||
- Launch `docker compose run --rm php yarn install` to bootstrap dependencies for the frontend
|
||||
- Launch `docker compose run --rm php yarn build:dev` to build assets for the frontend
|
||||
- Launch `docker compose up -d` to start the stack
|
||||
|
||||
You'll then have:
|
||||
- a PHP daemon with standalone web server
|
||||
- a Redis database (to handle imports)
|
||||
- a SQLite database to store articles
|
||||
|
||||
You can now access your wallabag instance using that url: `http://127.0.0.1:8000`
|
||||
|
||||
If you want to test using an other database than SQLite, uncomment the `postgres` or `mariadb` code from the `compose.yaml` file at the root of the repo. Also uncomment related line in the `php` section so the database will be linked to your PHP instance.
|
||||
|
||||
### Using your own PHP server
|
||||
|
||||
- Ensure you are running PHP >= 7.4.
|
||||
- Clone the repository
|
||||
- Launch `composer install`
|
||||
- If you got some errors, fix them (they might be related to some missing PHP extension from your machine)
|
||||
- Then `php bin/console wallabag:install`
|
||||
- If you got some errors, fix them (they might be related to some missing PHP extension from your machine)
|
||||
- Run `php bin/console server:run`
|
||||
|
||||
You can now access your wallabag instance using that url: `http://127.0.0.1:8000`
|
||||
|
||||
## You found a bug
|
||||
Please [open a new issue](https://github.com/wallabag/wallabag/issues/new).
|
||||
|
||||
To fix the bug quickly, we need some infos: please answer to the questions in the issue form.
|
||||
|
||||
If you have the skills, look for errors into PHP, server and application logs (see `var/logs`).
|
||||
|
||||
Note : If you have large portions of text, use [Github's Gist service](https://gist.github.com/) or other pastebin-like.
|
||||
|
||||
## You want to fix a bug or to add a feature
|
||||
Please fork wallabag and work with **the master branch**.
|
||||
|
||||
## Run Tests and PHP formatter
|
||||
|
||||
All pull requests need to pass the tests and the code needs match the style guide.
|
||||
|
||||
To run the tests locally run `make test`.
|
||||
|
||||
To run the PHP formatter run `make fix-cs`.
|
||||
|
||||
To run the PHPStan static analysis run `make phpstan`.
|
||||
|
||||
To run the JS linter run `make lint-js`.
|
||||
|
||||
To run the SCSS linter run `make lint-scss`.
|
||||
2
.github/FUNDING.yml
vendored
2
.github/FUNDING.yml
vendored
@ -1,2 +0,0 @@
|
||||
# github: [nicosomb, j0k3r, tcitworld, Kdecherf]
|
||||
liberapay: wallabag
|
||||
30
.github/ISSUE_TEMPLATE/1-fetching-content.md
vendored
30
.github/ISSUE_TEMPLATE/1-fetching-content.md
vendored
@ -1,30 +0,0 @@
|
||||
---
|
||||
name: Fetching content
|
||||
about: If wallabag can't extract content for an URL
|
||||
title: Wrong display in wallabag (HOST)
|
||||
labels: Site Config
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
<!--
|
||||
Thank you for reporting a fetching issue.
|
||||
|
||||
Please fill in as much of the template below as you're able.
|
||||
-->
|
||||
|
||||
**Before submitting the issue, please read:**
|
||||
If wallabag can't parse / extract content for a given link, please first read the documentation about it:
|
||||
http://doc.wallabag.org/en/user/errors_during_fetching.html#how-can-i-help-to-fix-that
|
||||
|
||||
We have a lot of requests about fetching config issue. It'll help us A LOT if you give a try to fix it on your own following the doc.
|
||||
If you failed to fix it yourself, tick the following boxes:
|
||||
- [ ] I've tried myself without success
|
||||
- [ ] I've replaced `HOST` in the issue title with the host of the URL that can't be fetched (ie: `nytimes.com`, `20minutes.fr`, `bbc.com`, etc.)
|
||||
|
||||
**Content related:**
|
||||
- URL: [full url of the content]
|
||||
- wallabag version: [e.g. 2.4.0]
|
||||
|
||||
**Describe what's wrong:**
|
||||
A clear and concise description of what you expected to happen.
|
||||
43
.github/ISSUE_TEMPLATE/2-bug-report.md
vendored
43
.github/ISSUE_TEMPLATE/2-bug-report.md
vendored
@ -1,43 +0,0 @@
|
||||
---
|
||||
name: Bug report
|
||||
about: Create a report to help us improve
|
||||
title: ''
|
||||
labels: ''
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
<!--
|
||||
Thank you for reporting an issue.
|
||||
|
||||
Please fill in as much of the template below as you're able.
|
||||
|
||||
Version: if you know it, otherwise use the git revision
|
||||
Installation: How did you install wallabag? Using git clone, the docker image, an installer, downloading the package, etc.
|
||||
PHP version: The version of PHP you are using
|
||||
OS: The host running wallabag
|
||||
Database: The storage system your instance is using (SQLite, MySQL/MariaDB or PostgreSQL) with the version
|
||||
Parameters: Paste the content of your app/config/parameters.yml (hide sensitive stuff if you want)
|
||||
-->
|
||||
### Environment
|
||||
|
||||
* **Version**:
|
||||
* **Installation**:
|
||||
* **PHP version**:
|
||||
* **OS**:
|
||||
* **Database**:
|
||||
* **Parameters**:
|
||||
|
||||
<details>
|
||||
<summary>My <code>app/config/parameters.yml</code> is:</summary>
|
||||
|
||||
```
|
||||
PASTE HERE
|
||||
```
|
||||
</details>
|
||||
|
||||
### What steps will reproduce the bug?
|
||||
|
||||
<!--
|
||||
Enter details about your bug and how to reproduce it
|
||||
-->
|
||||
26
.github/ISSUE_TEMPLATE/3-feature-request.md
vendored
26
.github/ISSUE_TEMPLATE/3-feature-request.md
vendored
@ -1,26 +0,0 @@
|
||||
---
|
||||
name: Feature request
|
||||
about: Suggest an idea for this project
|
||||
title: ''
|
||||
labels: Feature
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
<!--
|
||||
Thank you for suggesting an idea to make wallabag better.
|
||||
|
||||
Please fill in as much of the template below as you're able.
|
||||
-->
|
||||
|
||||
**Is your feature request related to a problem? Please describe.**
|
||||
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
|
||||
|
||||
**Describe the solution you'd like**
|
||||
A clear and concise description of what you want to happen.
|
||||
|
||||
**Describe alternatives you've considered**
|
||||
A clear and concise description of any alternative solutions or features you've considered.
|
||||
|
||||
**Additional context**
|
||||
Add any other context or screenshots about the feature request here.
|
||||
5
.github/ISSUE_TEMPLATE/config.yml
vendored
5
.github/ISSUE_TEMPLATE/config.yml
vendored
@ -1,5 +0,0 @@
|
||||
blank_issues_enabled: false
|
||||
contact_links:
|
||||
- name: Want to ask something?
|
||||
url: https://matrix.to/#/#wallabag:matrix.org
|
||||
about: Use Matrix to ask questions.
|
||||
23
.github/PULL_REQUEST_TEMPLATE.md
vendored
23
.github/PULL_REQUEST_TEMPLATE.md
vendored
@ -1,23 +0,0 @@
|
||||
| Q | A
|
||||
| ------------- | ---
|
||||
| Bug fix? | yes/no
|
||||
| New feature? | yes/no
|
||||
| BC breaks? | yes/no
|
||||
| Deprecations? | yes/no
|
||||
| Tests pass? | yes/no
|
||||
| Documentation | yes/no
|
||||
| Translation | yes/no
|
||||
| CHANGELOG.md | yes/no
|
||||
| License | MIT
|
||||
|
||||
<!--
|
||||
Please list the issues your PR fixes using special keywords, see
|
||||
https://help.github.com/articles/closing-issues-using-keywords/
|
||||
|
||||
Fixes #…
|
||||
-->
|
||||
|
||||
<!--
|
||||
- Please fill in this template according to the PR you're about to submit.
|
||||
- Replace this comment by a description of what your PR is solving.
|
||||
-->
|
||||
56
.github/dependabot.yml
vendored
56
.github/dependabot.yml
vendored
@ -1,56 +0,0 @@
|
||||
version: 2
|
||||
updates:
|
||||
- package-ecosystem: npm
|
||||
directory: "/"
|
||||
schedule:
|
||||
interval: weekly
|
||||
time: "04:00"
|
||||
timezone: Europe/Paris
|
||||
open-pull-requests-limit: 10
|
||||
groups:
|
||||
babel-dependencies:
|
||||
patterns:
|
||||
- "*babel*"
|
||||
fontsource-dependencies:
|
||||
patterns:
|
||||
- "*fontsource*"
|
||||
ignore:
|
||||
- dependency-name: @materializecss/materialize
|
||||
versions:
|
||||
- "> 1.2.2"
|
||||
- package-ecosystem: composer
|
||||
directory: "/"
|
||||
schedule:
|
||||
interval: daily
|
||||
time: "04:00"
|
||||
timezone: Europe/Paris
|
||||
open-pull-requests-limit: 10
|
||||
groups:
|
||||
symfony-dependencies:
|
||||
patterns:
|
||||
- "symfony/*"
|
||||
twig-dependencies:
|
||||
patterns:
|
||||
- "twig/*"
|
||||
phpstan-dependencies:
|
||||
patterns:
|
||||
- "phpstan/*"
|
||||
reviewers:
|
||||
- j0k3r
|
||||
- yguedidi
|
||||
- Kdecherf
|
||||
ignore:
|
||||
- dependency-name: lcobucci/jwt
|
||||
versions:
|
||||
- ">= 4.2.0"
|
||||
# until we add support for Symfony 5+
|
||||
- dependency-name: symfony/*
|
||||
versions:
|
||||
- ">= 5.0.0"
|
||||
- package-ecosystem: github-actions
|
||||
directory: "/"
|
||||
schedule:
|
||||
interval: weekly
|
||||
time: "04:00"
|
||||
timezone: Europe/Paris
|
||||
open-pull-requests-limit: 10
|
||||
BIN
.github/images/screenshot.png
vendored
BIN
.github/images/screenshot.png
vendored
Binary file not shown.
|
Before Width: | Height: | Size: 837 KiB |
7
.github/release.yml
vendored
7
.github/release.yml
vendored
@ -1,7 +0,0 @@
|
||||
changelog:
|
||||
exclude:
|
||||
labels:
|
||||
- Dependencies
|
||||
authors:
|
||||
- dependabot
|
||||
- weblate
|
||||
90
.github/workflows/coding-standards.yml
vendored
90
.github/workflows/coding-standards.yml
vendored
@ -1,90 +0,0 @@
|
||||
name: "CS"
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
- "2.**"
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
coding-standards:
|
||||
name: "CS Fixer, PHPStan & TwigCS"
|
||||
runs-on: "ubuntu-20.04"
|
||||
|
||||
steps:
|
||||
- name: "Checkout"
|
||||
uses: "actions/checkout@v4"
|
||||
|
||||
- name: "Install PHP"
|
||||
uses: "shivammathur/setup-php@v2"
|
||||
with:
|
||||
coverage: "none"
|
||||
php-version: "7.4"
|
||||
tools: cs2pr, pecl
|
||||
extensions: pdo, pdo_mysql, pdo_sqlite, pdo_pgsql, curl, imagick, pgsql, gd, tidy
|
||||
ini-values: "date.timezone=Europe/Paris"
|
||||
env:
|
||||
COMPOSER_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: "Install Node"
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version-file: ".nvmrc"
|
||||
cache: 'yarn'
|
||||
|
||||
- name: "Setup MySQL"
|
||||
run: |
|
||||
sudo systemctl start mysql.service
|
||||
sudo mysql -u root -proot -h 127.0.0.1 -e "CREATE DATABASE wallabag_test"
|
||||
cp app/config/tests/parameters_test.mysql.yml app/config/parameters_test.yml
|
||||
|
||||
- name: "Install dependencies with Composer"
|
||||
id: composer-install
|
||||
uses: "ramsey/composer-install@v3"
|
||||
with:
|
||||
composer-options: "--optimize-autoloader --prefer-dist"
|
||||
|
||||
- name: "Install dependencies with Yarn"
|
||||
id: yarn-install
|
||||
run: yarn install
|
||||
|
||||
- name: "Run Composer validate"
|
||||
if: always() && steps.composer-install.outcome == 'success'
|
||||
run: "composer validate"
|
||||
|
||||
- name: "Run Composer dependency analyser"
|
||||
if: always() && steps.composer-install.outcome == 'success'
|
||||
run: "bin/composer-dependency-analyser"
|
||||
|
||||
- name: "Run PHP CS Fixer"
|
||||
if: always() && steps.composer-install.outcome == 'success'
|
||||
run: "bin/php-cs-fixer fix --verbose --dry-run --format=checkstyle | cs2pr"
|
||||
|
||||
- name: "Generate test cache for PHPStan"
|
||||
id: test-cache
|
||||
if: always() && steps.composer-install.outcome == 'success'
|
||||
run: "php bin/console cache:clear --env=test"
|
||||
|
||||
- name: "Run PHPStan"
|
||||
if: always() && steps.test-cache.outcome == 'success'
|
||||
run: "php bin/phpstan analyse --no-progress --error-format=checkstyle | cs2pr"
|
||||
|
||||
- name: "Run TwigCS"
|
||||
if: always() && steps.composer-install.outcome == 'success'
|
||||
run: "php bin/twigcs --severity=error --display=blocking --reporter checkstyle app/ src/ | cs2pr"
|
||||
|
||||
- name: "Run ergebnis/composer-normalize"
|
||||
if: always() && steps.composer-install.outcome == 'success'
|
||||
run: "composer normalize --dry-run --no-check-lock"
|
||||
|
||||
- name: "Run ESLint"
|
||||
if: always() && steps.yarn-install.outcome == 'success'
|
||||
run: "yarn lint:js"
|
||||
|
||||
- name: "Run Stylelint"
|
||||
if: always() && steps.yarn-install.outcome == 'success'
|
||||
run: "yarn lint:scss"
|
||||
241
.github/workflows/continuous-integration.yml
vendored
241
.github/workflows/continuous-integration.yml
vendored
@ -1,241 +0,0 @@
|
||||
name: "CI"
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
- "2.**"
|
||||
|
||||
env:
|
||||
# Force disabling the reporting of Doctrine deprecation notices for now
|
||||
DOCTRINE_DEPRECATIONS: none
|
||||
PGPASSWORD: wallabagrocks
|
||||
COMPOSER_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
jobs:
|
||||
phpunit:
|
||||
name: "PHP ${{ matrix.php }} using ${{ matrix.database }}"
|
||||
runs-on: "ubuntu-20.04"
|
||||
services:
|
||||
rabbitmq:
|
||||
image: rabbitmq:3-alpine
|
||||
ports:
|
||||
- 5672:5672
|
||||
redis:
|
||||
image: redis:6-alpine
|
||||
ports:
|
||||
- 6379:6379
|
||||
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
php:
|
||||
- "7.4"
|
||||
- "8.0"
|
||||
- "8.1"
|
||||
- "8.2"
|
||||
- "8.3"
|
||||
- "8.4"
|
||||
database:
|
||||
- "sqlite"
|
||||
- "mysql"
|
||||
- "pgsql"
|
||||
|
||||
steps:
|
||||
- name: "Checkout"
|
||||
uses: "actions/checkout@v4"
|
||||
with:
|
||||
fetch-depth: 2
|
||||
|
||||
- name: "Install PHP"
|
||||
uses: "shivammathur/setup-php@v2"
|
||||
with:
|
||||
php-version: "${{ matrix.php }}"
|
||||
coverage: none
|
||||
tools: pecl
|
||||
extensions: json, pdo, pdo_mysql, pdo_sqlite, pdo_pgsql, curl, imagick, pgsql, gd, tidy
|
||||
ini-values: "date.timezone=Europe/Paris"
|
||||
|
||||
- name: "Install Node"
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version-file: ".nvmrc"
|
||||
cache: 'yarn'
|
||||
|
||||
- name: "Setup MySQL"
|
||||
if: "${{ matrix.database == 'mysql' }}"
|
||||
run: |
|
||||
sudo systemctl start mysql.service
|
||||
sudo mysql -u root -proot -h 127.0.0.1 -e "CREATE DATABASE wallabag_test"
|
||||
|
||||
- name: "Setup PostgreSQL"
|
||||
if: "${{ matrix.database == 'pgsql' }}"
|
||||
run: |
|
||||
sudo systemctl start postgresql
|
||||
sudo -u postgres psql -d template1 -c "CREATE USER wallabag WITH PASSWORD 'wallabagrocks' CREATEDB"
|
||||
createdb -h localhost -p 5432 -U wallabag wallabag_test
|
||||
pg_isready -d wallabag_test -h localhost -p 5432 -U wallabag
|
||||
|
||||
- name: "Install dependencies with Composer"
|
||||
uses: "ramsey/composer-install@v3"
|
||||
with:
|
||||
composer-options: "--optimize-autoloader --prefer-dist"
|
||||
|
||||
- name: "Install dependencies with Yarn"
|
||||
run: yarn install
|
||||
|
||||
- name: "Build assets with Yarn"
|
||||
run: yarn build:dev
|
||||
|
||||
- name: "Prepare database configuration"
|
||||
run: cp app/config/tests/parameters_test.${{ matrix.database }}.yml app/config/parameters_test.yml
|
||||
|
||||
- name: "Run PHPUnit"
|
||||
run: "php bin/phpunit -v"
|
||||
|
||||
phpunit_no_prefix:
|
||||
name: "PHP ${{ matrix.php }} using ${{ matrix.database }} without prefix"
|
||||
runs-on: "ubuntu-20.04"
|
||||
services:
|
||||
rabbitmq:
|
||||
image: rabbitmq:3-alpine
|
||||
ports:
|
||||
- 5672:5672
|
||||
redis:
|
||||
image: redis:6-alpine
|
||||
ports:
|
||||
- 6379:6379
|
||||
|
||||
strategy:
|
||||
fail-fast: true
|
||||
matrix:
|
||||
php:
|
||||
- "8.2"
|
||||
database:
|
||||
- "sqlite"
|
||||
- "mysql"
|
||||
- "pgsql"
|
||||
|
||||
steps:
|
||||
- name: "Checkout"
|
||||
uses: "actions/checkout@v4"
|
||||
with:
|
||||
fetch-depth: 2
|
||||
|
||||
- name: "Install PHP"
|
||||
uses: "shivammathur/setup-php@v2"
|
||||
with:
|
||||
php-version: "${{ matrix.php }}"
|
||||
coverage: none
|
||||
tools: pecl
|
||||
extensions: json, pdo, pdo_mysql, pdo_sqlite, pdo_pgsql, curl, imagick, pgsql, gd, tidy
|
||||
ini-values: "date.timezone=Europe/Paris"
|
||||
|
||||
- name: "Install Node"
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version-file: ".nvmrc"
|
||||
cache: 'yarn'
|
||||
|
||||
- name: "Remove database prefix"
|
||||
run: |
|
||||
pip install --user yq
|
||||
yq -Y --in-place '.parameters.database_table_prefix = ""' app/config/parameters.yml.dist
|
||||
|
||||
- name: "Setup MySQL"
|
||||
if: "${{ matrix.database == 'mysql' }}"
|
||||
run: |
|
||||
sudo systemctl start mysql.service
|
||||
sudo mysql -u root -proot -h 127.0.0.1 -e "CREATE DATABASE wallabag_test"
|
||||
|
||||
- name: "Setup PostgreSQL"
|
||||
if: "${{ matrix.database == 'pgsql' }}"
|
||||
run: |
|
||||
sudo systemctl start postgresql
|
||||
sudo -u postgres psql -d template1 -c "CREATE USER wallabag WITH PASSWORD 'wallabagrocks' CREATEDB"
|
||||
createdb -h localhost -p 5432 -U wallabag wallabag_test
|
||||
pg_isready -d wallabag_test -h localhost -p 5432 -U wallabag
|
||||
|
||||
- name: "Install dependencies with Composer"
|
||||
uses: "ramsey/composer-install@v3"
|
||||
with:
|
||||
composer-options: "--optimize-autoloader --prefer-dist"
|
||||
|
||||
- name: "Install dependencies with Yarn"
|
||||
run: yarn install
|
||||
|
||||
- name: "Build assets with Yarn"
|
||||
run: yarn build:dev
|
||||
|
||||
- name: "Prepare database configuration"
|
||||
run: cp app/config/tests/parameters_test.${{ matrix.database }}.yml app/config/parameters_test.yml
|
||||
|
||||
- name: "Run PHPUnit"
|
||||
run: "php bin/phpunit -v"
|
||||
|
||||
phpunit-without-rmq-redis:
|
||||
name: "PHP ${{ matrix.php }} using ${{ matrix.database }} without Rabbit & Redis"
|
||||
runs-on: "ubuntu-20.04"
|
||||
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
php:
|
||||
- "8.3"
|
||||
database:
|
||||
- "sqlite"
|
||||
- "mysql"
|
||||
- "pgsql"
|
||||
|
||||
steps:
|
||||
- name: "Checkout"
|
||||
uses: "actions/checkout@v4"
|
||||
with:
|
||||
fetch-depth: 2
|
||||
|
||||
- name: "Install PHP"
|
||||
uses: "shivammathur/setup-php@v2"
|
||||
with:
|
||||
php-version: "${{ matrix.php }}"
|
||||
coverage: none
|
||||
tools: pecl
|
||||
extensions: json, pdo, pdo_mysql, pdo_sqlite, pdo_pgsql, curl, imagick, pgsql, gd, tidy
|
||||
ini-values: "date.timezone=Europe/Paris"
|
||||
|
||||
- name: "Install Node"
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version-file: ".nvmrc"
|
||||
cache: 'yarn'
|
||||
|
||||
- name: "Setup MySQL"
|
||||
if: "${{ matrix.database == 'mysql' }}"
|
||||
run: |
|
||||
sudo systemctl start mysql.service
|
||||
sudo mysql -u root -proot -h 127.0.0.1 -e "CREATE DATABASE wallabag_test"
|
||||
|
||||
- name: "Setup PostgreSQL"
|
||||
if: "${{ matrix.database == 'pgsql' }}"
|
||||
run: |
|
||||
sudo systemctl start postgresql
|
||||
sudo -u postgres psql -d template1 -c "CREATE USER wallabag WITH PASSWORD 'wallabagrocks' CREATEDB"
|
||||
createdb -h localhost -p 5432 -U wallabag wallabag_test
|
||||
pg_isready -d wallabag_test -h localhost -p 5432 -U wallabag
|
||||
|
||||
- name: "Install dependencies with Composer"
|
||||
uses: "ramsey/composer-install@v3"
|
||||
with:
|
||||
composer-options: "--optimize-autoloader --prefer-dist"
|
||||
|
||||
- name: "Install dependencies with Yarn"
|
||||
run: yarn install
|
||||
|
||||
- name: "Build assets with Yarn"
|
||||
run: yarn build:dev
|
||||
|
||||
- name: "Prepare database configuration"
|
||||
run: cp app/config/tests/parameters_test.${{ matrix.database }}.yml app/config/parameters_test.yml
|
||||
|
||||
- name: "Run PHPUnit"
|
||||
run: "php bin/phpunit -v"
|
||||
25
.github/workflows/dependabot-automerge-js.yml
vendored
25
.github/workflows/dependabot-automerge-js.yml
vendored
@ -1,25 +0,0 @@
|
||||
name: Auto-merge Dependabot JS
|
||||
on: pull_request_target
|
||||
|
||||
permissions:
|
||||
pull-requests: write
|
||||
contents: write
|
||||
|
||||
jobs:
|
||||
dependabot:
|
||||
runs-on: ubuntu-latest
|
||||
if: ${{ github.actor == 'dependabot[bot]' }}
|
||||
steps:
|
||||
- name: Dependabot metadata
|
||||
id: metadata
|
||||
uses: dependabot/fetch-metadata@v2.3.0
|
||||
with:
|
||||
github-token: '${{ secrets.GITHUB_TOKEN }}'
|
||||
- name: Approve and merge minor updates
|
||||
if: ${{ steps.metadata.outputs.package-ecosystem == 'npm_and_yarn' && (steps.metadata.outputs.update-type == 'version-update:semver-minor' || steps.metadata.outputs.update-type == 'version-update:semver-patch') }}
|
||||
run: |
|
||||
gh pr review --approve "$PR_URL"
|
||||
gh pr merge --auto --merge "$PR_URL"
|
||||
env:
|
||||
PR_URL: ${{ github.event.pull_request.html_url }}
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
44
.github/workflows/translations.yml
vendored
44
.github/workflows/translations.yml
vendored
@ -1,44 +0,0 @@
|
||||
name: "Translations"
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
- "2.**"
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
translations:
|
||||
name: "Translations"
|
||||
runs-on: "ubuntu-20.04"
|
||||
|
||||
strategy:
|
||||
matrix:
|
||||
php:
|
||||
- "7.4"
|
||||
|
||||
steps:
|
||||
- name: "Checkout"
|
||||
uses: "actions/checkout@v4"
|
||||
|
||||
- name: "Install PHP"
|
||||
uses: "shivammathur/setup-php@v2"
|
||||
with:
|
||||
coverage: "none"
|
||||
php-version: "${{ matrix.php }}"
|
||||
tools: pecl
|
||||
extensions: pdo, pdo_mysql, pdo_sqlite, pdo_pgsql, curl, imagick, pgsql, gd, tidy
|
||||
ini-values: "date.timezone=Europe/Paris"
|
||||
env:
|
||||
COMPOSER_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: "Install dependencies with Composer"
|
||||
uses: "ramsey/composer-install@v3"
|
||||
with:
|
||||
composer-options: "--optimize-autoloader --prefer-dist"
|
||||
|
||||
- name: "Validate translations"
|
||||
run: "php bin/console lint:yaml translations -v"
|
||||
45
.github/workflows/upload-release-package.yml
vendored
45
.github/workflows/upload-release-package.yml
vendored
@ -1,45 +0,0 @@
|
||||
name: "Upload release package"
|
||||
|
||||
on:
|
||||
release:
|
||||
types:
|
||||
- created
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
strategy:
|
||||
matrix:
|
||||
php:
|
||||
- "7.4"
|
||||
|
||||
steps:
|
||||
- name: "Checkout"
|
||||
uses: "actions/checkout@v4"
|
||||
|
||||
- name: "Install PHP"
|
||||
uses: "shivammathur/setup-php@v2"
|
||||
with:
|
||||
coverage: "none"
|
||||
php-version: "${{ matrix.php }}"
|
||||
tools: pecl, composer:2.2
|
||||
extensions: pdo, pdo_mysql, pdo_sqlite, pdo_pgsql, curl, imagick, pgsql, gd, tidy
|
||||
ini-values: "date.timezone=Europe/Paris"
|
||||
env:
|
||||
COMPOSER_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: "Install Node"
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version-file: ".nvmrc"
|
||||
cache: "yarn"
|
||||
|
||||
- name: Create the package
|
||||
run: make release VERSION=${{ github.event.release.tag_name }}
|
||||
|
||||
- name: Upload the package to the release
|
||||
uses: shogo82148/actions-upload-release-asset@v1
|
||||
with:
|
||||
upload_url: ${{ github.event.release.upload_url }}
|
||||
asset_path: /tmp/wllbg-release/wallabag-${{ github.event.release.tag_name }}.tar.gz
|
||||
42
.gitignore
vendored
42
.gitignore
vendored
@ -9,13 +9,7 @@
|
||||
!/var/sessions
|
||||
/var/sessions/*
|
||||
!var/sessions/.gitkeep
|
||||
/bin/*
|
||||
!/bin/console
|
||||
.php-cs-fixer.php
|
||||
.php-cs-fixer.cache
|
||||
.phpunit.result.cache
|
||||
phpunit.xml
|
||||
compose.override.yaml
|
||||
!var/SymfonyRequirements.php
|
||||
|
||||
# Parameters
|
||||
/app/config/parameters.yml
|
||||
@ -24,41 +18,23 @@ compose.override.yaml
|
||||
/vendor/
|
||||
|
||||
# Assets and user uploads
|
||||
web/uploads/
|
||||
/web/bundles/*
|
||||
!/web/bundles/.gitkeep
|
||||
/web/assets/images/*
|
||||
!web/assets/images/.gitkeep
|
||||
/web/build/*
|
||||
/web/bundles/
|
||||
/web/uploads/
|
||||
|
||||
# Build
|
||||
/app/build
|
||||
/build
|
||||
/coverage
|
||||
|
||||
# Development
|
||||
docker/php/env
|
||||
docker/php/blackfire
|
||||
|
||||
# Composer PHAR
|
||||
/composer.phar
|
||||
|
||||
# Data for wallabag
|
||||
data/assets/*
|
||||
data/db/wallabag*.sqlite
|
||||
|
||||
# assets stuff
|
||||
node_modules/
|
||||
bin
|
||||
package-lock.json
|
||||
# Docker container logs and data
|
||||
docker/logs/
|
||||
docker/data/
|
||||
|
||||
# Test-generated files
|
||||
admin-export.json
|
||||
specialexport.json
|
||||
/data/site-credentials-secret-key.txt
|
||||
|
||||
# Custom CSS file
|
||||
web/custom.css
|
||||
|
||||
.env.local
|
||||
|
||||
yarn-error.log
|
||||
# To avoid crazy stuff on some PR, we must manually FORCE ADD IT on each new release
|
||||
composer.lock
|
||||
|
||||
@ -1,66 +0,0 @@
|
||||
<?php
|
||||
|
||||
$config = new PhpCsFixer\Config();
|
||||
|
||||
return $config
|
||||
->setRiskyAllowed(true)
|
||||
->setRules([
|
||||
'@Symfony' => true,
|
||||
'@Symfony:risky' => true,
|
||||
'array_syntax' => [
|
||||
'syntax' => 'short',
|
||||
],
|
||||
'combine_consecutive_unsets' => true,
|
||||
'heredoc_to_nowdoc' => true,
|
||||
'no_extra_blank_lines' => [
|
||||
'tokens' => [
|
||||
'break',
|
||||
'continue',
|
||||
'extra',
|
||||
'return',
|
||||
'throw',
|
||||
'use',
|
||||
'parenthesis_brace_block',
|
||||
'square_brace_block',
|
||||
'curly_brace_block',
|
||||
],
|
||||
],
|
||||
'no_unreachable_default_argument_value' => true,
|
||||
'no_useless_concat_operator' => false,
|
||||
'no_useless_else' => true,
|
||||
'no_useless_return' => true,
|
||||
'ordered_class_elements' => true,
|
||||
'ordered_imports' => true,
|
||||
'php_unit_strict' => true,
|
||||
'phpdoc_order' => true,
|
||||
'phpdoc_separation' => false,
|
||||
// 'psr_autoloading' => true,
|
||||
'strict_comparison' => true,
|
||||
'strict_param' => true,
|
||||
// We override next rule because of current @Symfony ruleSet
|
||||
// 'parameters' element is breaking PHP 7.4
|
||||
// https://cs.symfony.com/doc/rules/control_structure/trailing_comma_in_multiline.html
|
||||
// TODO: remove this configuration after dropping support of PHP 7.4
|
||||
'trailing_comma_in_multiline' => [
|
||||
'elements' => [
|
||||
'arrays',
|
||||
'array_destructuring',
|
||||
'match',
|
||||
],
|
||||
],
|
||||
'concat_space' => [
|
||||
'spacing' => 'one',
|
||||
],
|
||||
])
|
||||
->setFinder(
|
||||
PhpCsFixer\Finder::create()
|
||||
->exclude([
|
||||
'node_modules',
|
||||
'vendor',
|
||||
'var',
|
||||
'web',
|
||||
])
|
||||
->in(__DIR__)
|
||||
)
|
||||
->setCacheFile('.php-cs-fixer.cache')
|
||||
;
|
||||
28
.scrutinizer.yml
Normal file
28
.scrutinizer.yml
Normal file
@ -0,0 +1,28 @@
|
||||
filter:
|
||||
paths:
|
||||
- src/*
|
||||
excluded_paths:
|
||||
- 'vendor/*'
|
||||
- 'app/*'
|
||||
- 'var/*'
|
||||
- 'web/*'
|
||||
- 'src/Wallabag/*Bundle/Tests/*'
|
||||
- '*Test.php'
|
||||
|
||||
tools:
|
||||
php_cs_fixer: true
|
||||
php_analyzer: true
|
||||
php_mess_detector: true
|
||||
php_changetracking: true
|
||||
php_code_sniffer: true
|
||||
php_pdepend: true
|
||||
sensiolabs_security_checker: true
|
||||
#external_code_coverage:
|
||||
# timeout: 3600
|
||||
php_code_coverage: true
|
||||
php_sim: false
|
||||
php_cpd: false
|
||||
|
||||
checks:
|
||||
php:
|
||||
code_rating: true
|
||||
51
.travis.yml
Normal file
51
.travis.yml
Normal file
@ -0,0 +1,51 @@
|
||||
language: php
|
||||
|
||||
# faster builds on docker-container setup
|
||||
sudo: false
|
||||
|
||||
# used for HHVM
|
||||
addons:
|
||||
apt:
|
||||
packages:
|
||||
- tidy
|
||||
|
||||
# cache vendor dirs
|
||||
cache:
|
||||
directories:
|
||||
- vendor
|
||||
- $HOME/.composer/cache
|
||||
|
||||
php:
|
||||
- 5.5
|
||||
- 5.6
|
||||
- 7.0
|
||||
- hhvm
|
||||
|
||||
env:
|
||||
- DB=mysql
|
||||
- DB=pgsql
|
||||
- DB=sqlite
|
||||
|
||||
matrix:
|
||||
fast_finish: true
|
||||
exclude:
|
||||
- php: hhvm
|
||||
env: DB=pgsql # driver for PostgreSQL currently unsupported by HHVM, requires 3rd party dependency
|
||||
allow_failures:
|
||||
- php: hhvm
|
||||
|
||||
branches:
|
||||
only:
|
||||
- v2
|
||||
|
||||
before_script:
|
||||
- if [[ $TRAVIS_PHP_VERSION != hhvm ]]; then echo "memory_limit=-1" >> ~/.phpenv/versions/$(phpenv version-name)/etc/conf.d/travis.ini; fi;
|
||||
- if [[ $TRAVIS_PHP_VERSION != hhvm ]]; then phpenv config-rm xdebug.ini; fi;
|
||||
- composer self-update --no-progress
|
||||
- if [ -n "$GH_TOKEN" ]; then composer config github-oauth.github.com ${GH_TOKEN}; fi;
|
||||
- if [[ "$DB" = "pgsql" ]]; then psql -c 'create database wallabag;' -U postgres; fi;
|
||||
|
||||
script:
|
||||
- travis_wait composer update --no-interaction --no-progress
|
||||
- ant prepare-$DB
|
||||
- bin/phpunit -v
|
||||
1189
CHANGELOG.md
1189
CHANGELOG.md
File diff suppressed because it is too large
Load Diff
@ -1,76 +0,0 @@
|
||||
# Contributor Covenant Code of Conduct
|
||||
|
||||
## Our Pledge
|
||||
|
||||
In the interest of fostering an open and welcoming environment, we as
|
||||
contributors and maintainers pledge to making participation in our project and
|
||||
our community a harassment-free experience for everyone, regardless of age, body
|
||||
size, disability, ethnicity, sex characteristics, gender identity and expression,
|
||||
level of experience, education, socio-economic status, nationality, personal
|
||||
appearance, race, religion, or sexual identity and orientation.
|
||||
|
||||
## Our Standards
|
||||
|
||||
Examples of behavior that contributes to creating a positive environment
|
||||
include:
|
||||
|
||||
* Using welcoming and inclusive language
|
||||
* Being respectful of differing viewpoints and experiences
|
||||
* Gracefully accepting constructive criticism
|
||||
* Focusing on what is best for the community
|
||||
* Showing empathy towards other community members
|
||||
|
||||
Examples of unacceptable behavior by participants include:
|
||||
|
||||
* The use of sexualized language or imagery and unwelcome sexual attention or
|
||||
advances
|
||||
* Trolling, insulting/derogatory comments, and personal or political attacks
|
||||
* Public or private harassment
|
||||
* Publishing others' private information, such as a physical or electronic
|
||||
address, without explicit permission
|
||||
* Other conduct which could reasonably be considered inappropriate in a
|
||||
professional setting
|
||||
|
||||
## Our Responsibilities
|
||||
|
||||
Project maintainers are responsible for clarifying the standards of acceptable
|
||||
behavior and are expected to take appropriate and fair corrective action in
|
||||
response to any instances of unacceptable behavior.
|
||||
|
||||
Project maintainers have the right and responsibility to remove, edit, or
|
||||
reject comments, commits, code, wiki edits, issues, and other contributions
|
||||
that are not aligned to this Code of Conduct, or to ban temporarily or
|
||||
permanently any contributor for other behaviors that they deem inappropriate,
|
||||
threatening, offensive, or harmful.
|
||||
|
||||
## Scope
|
||||
|
||||
This Code of Conduct applies both within project spaces and in public spaces
|
||||
when an individual is representing the project or its community. Examples of
|
||||
representing a project or community include using an official project e-mail
|
||||
address, posting via an official social media account, or acting as an appointed
|
||||
representative at an online or offline event. Representation of a project may be
|
||||
further defined and clarified by project maintainers.
|
||||
|
||||
## Enforcement
|
||||
|
||||
Instances of abusive, harassing, or otherwise unacceptable behavior may be
|
||||
reported by contacting the project team at hello@wallabag.org. All
|
||||
complaints will be reviewed and investigated and will result in a response that
|
||||
is deemed necessary and appropriate to the circumstances. The project team is
|
||||
obligated to maintain confidentiality with regard to the reporter of an incident.
|
||||
Further details of specific enforcement policies may be posted separately.
|
||||
|
||||
Project maintainers who do not follow or enforce the Code of Conduct in good
|
||||
faith may face temporary or permanent repercussions as determined by other
|
||||
members of the project's leadership.
|
||||
|
||||
## Attribution
|
||||
|
||||
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
|
||||
available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html
|
||||
|
||||
[homepage]: https://www.contributor-covenant.org
|
||||
|
||||
For answers to common questions about this code of conduct, see
|
||||
https://www.contributor-covenant.org/faq
|
||||
30
CONTRIBUTING.md
Normal file
30
CONTRIBUTING.md
Normal file
@ -0,0 +1,30 @@
|
||||
# How to contribute
|
||||
|
||||
## You found a bug
|
||||
Please [open a new issue](https://github.com/wallabag/wallabag/issues/new).
|
||||
|
||||
To fix the bug quickly, we need some infos:
|
||||
* your wallabag version (on top of the ./index.php file, and also on config page)
|
||||
* your webserver installation :
|
||||
* type of hosting (shared or dedicated)
|
||||
* in case of a dedicated server, the server and OS used
|
||||
* the php version used, eventually `phpinfo()`
|
||||
* which storage system you choose at install (SQLite, MySQL/MariaDB or PostgreSQL)
|
||||
* any problem on the `wallabag_compatibility_test.php` page
|
||||
* any particular details which could be related
|
||||
|
||||
|
||||
If relevant :
|
||||
* the link you want to save and which causes problem
|
||||
* the file you want to import into wallabag, or just an extract
|
||||
|
||||
If you have the skills :
|
||||
* enable DEBUG mode and look the output at cache/log.txt
|
||||
* look for errors into php and server logs
|
||||
|
||||
Note : If you have large portions of text, use [Github's Gist service](https://gist.github.com/) or other pastebin-like.
|
||||
|
||||
## You want to fix a bug or to add a feature
|
||||
Please fork wallabag and work with **the dev branch** only. **Do not work on master branch**.
|
||||
|
||||
[Don't forget to read our guidelines](https://github.com/wallabag/wallabag/blob/dev/GUIDELINES.md).
|
||||
@ -1,4 +1,4 @@
|
||||
Copyright (c) 2013-current Nicolas Lœuillet
|
||||
Copyright (c) 2013-2016 Nicolas Lœuillet
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
|
||||
@ -1,3 +1,3 @@
|
||||
wallabag is mainly developed by [Nicolas Lœuillet](https://github.com/nicosomb), [@j0k3r](https://github.com/j0k3r), [@tcitworld](https://github.com/tcitworld) and [@Kdecherf](https://github.com/Kdecherf) under the MIT License.
|
||||
wallabag is mainly developed by [Nicolas Lœuillet](https://github.com/nicosomb), [@j0k3r](https://github.com/j0k3r) and [@tcitworld](https://github.com/tcitworld) under the MIT License.
|
||||
|
||||
Thank you [to others contributors](https://github.com/wallabag/wallabag/graphs/contributors).
|
||||
|
||||
13
Capfile
Normal file
13
Capfile
Normal file
@ -0,0 +1,13 @@
|
||||
set :deploy_config_path, 'app/config/capistrano/deploy.rb'
|
||||
set :stage_config_path, 'app/config/capistrano/deploy'
|
||||
|
||||
# Load DSL and set up stages
|
||||
require 'capistrano/setup'
|
||||
|
||||
# Include default deployment tasks
|
||||
require 'capistrano/deploy'
|
||||
|
||||
require 'capistrano/symfony'
|
||||
|
||||
# Load custom tasks from `lib/capistrano/tasks` if you have any defined
|
||||
Dir.glob('lib/capistrano/tasks/*.rake').each { |r| import r }
|
||||
72
GNUmakefile
72
GNUmakefile
@ -1,72 +0,0 @@
|
||||
SHELL=bash
|
||||
TMP_FOLDER=/tmp
|
||||
RELEASE_FOLDER=wllbg-release
|
||||
|
||||
# ensure the ENV variable is well defined
|
||||
AVAILABLE_ENV := prod dev test
|
||||
ifneq ($(filter $(ENV),$(AVAILABLE_ENV)),)
|
||||
# all good
|
||||
else
|
||||
# not good, force it to "prod"
|
||||
override ENV = prod
|
||||
endif
|
||||
|
||||
DOCKER_COMPOSE_RUNNING := $(shell docker compose ps -q | grep -q . && echo 1 || echo 0)
|
||||
|
||||
ifeq ($(DOCKER_COMPOSE_RUNNING), 1)
|
||||
PHP := docker compose run --rm php php
|
||||
PHP_NO_XDEBUG := docker compose run -e XDEBUG_MODE=off --rm php php
|
||||
YARN := docker compose run --rm php yarn
|
||||
else
|
||||
PHP := php
|
||||
PHP_NO_XDEBUG := XDEBUG_MODE=off php
|
||||
YARN := yarn
|
||||
endif
|
||||
|
||||
help: ## Display this help menu
|
||||
@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}'
|
||||
|
||||
install: ## Install wallabag with the latest version
|
||||
@./scripts/install.sh $(ENV)
|
||||
|
||||
update: ## Update the wallabag installation to the latest version
|
||||
@./scripts/update.sh $(ENV)
|
||||
|
||||
dev: ENV=dev
|
||||
dev: build ## Install the latest dev version
|
||||
@./scripts/dev.sh
|
||||
|
||||
run: ## Run the wallabag built-in server
|
||||
@$(PHP) bin/console server:run --env=dev
|
||||
|
||||
build: ## Run webpack
|
||||
@$(YARN) install
|
||||
@$(YARN) build:$(ENV)
|
||||
|
||||
test: ## Launch wallabag testsuite
|
||||
@$(PHP_NO_XDEBUG) -dmemory_limit=-1 bin/phpunit -v
|
||||
|
||||
fix-cs: ## Run PHP-CS-Fixer
|
||||
@$(PHP_NO_XDEBUG) bin/php-cs-fixer fix
|
||||
|
||||
phpstan: ## Run PHPStan
|
||||
@$(PHP_NO_XDEBUG) bin/phpstan analyse
|
||||
|
||||
lint-js: ## Run ESLint
|
||||
@$(YARN) lint:js
|
||||
|
||||
lint-scss: ## Run Stylelint
|
||||
@$(YARN) lint:scss
|
||||
|
||||
release: ## Create a package. Need a VERSION parameter (eg: `make release VERSION=master`).
|
||||
ifndef VERSION
|
||||
$(error VERSION is not set)
|
||||
endif
|
||||
@./scripts/release.sh $(VERSION) $(TMP_FOLDER) $(RELEASE_FOLDER) $(ENV)
|
||||
|
||||
deploy: ## Deploy wallabag
|
||||
@bundle exec cap staging deploy
|
||||
|
||||
.PHONY: help install update build test release deploy run dev fix-cs phpstan
|
||||
|
||||
.DEFAULT_GOAL := install
|
||||
5
Gemfile
Normal file
5
Gemfile
Normal file
@ -0,0 +1,5 @@
|
||||
source "https://rubygems.org"
|
||||
|
||||
gem 'capistrano', '~> 3.1'
|
||||
gem 'capistrano-symfony', '~> 0.1', :github => 'capistrano/symfony'
|
||||
gem 'capistrano-composer', '~> 0.0.3'
|
||||
41
Gemfile.lock
Normal file
41
Gemfile.lock
Normal file
@ -0,0 +1,41 @@
|
||||
GIT
|
||||
remote: git://github.com/capistrano/symfony.git
|
||||
revision: ca56a01b817097d2831400ef9b1867fc8e07dcf8
|
||||
specs:
|
||||
capistrano-symfony (0.4.0)
|
||||
capistrano (~> 3.1)
|
||||
capistrano-composer (~> 0.0.3)
|
||||
capistrano-file-permissions (~> 0.1.0)
|
||||
|
||||
GEM
|
||||
remote: https://rubygems.org/
|
||||
specs:
|
||||
capistrano (3.4.0)
|
||||
i18n
|
||||
rake (>= 10.0.0)
|
||||
sshkit (~> 1.3)
|
||||
capistrano-composer (0.0.6)
|
||||
capistrano (>= 3.0.0.pre)
|
||||
capistrano-file-permissions (0.1.1)
|
||||
capistrano (~> 3.1)
|
||||
colorize (0.7.7)
|
||||
i18n (0.7.0)
|
||||
net-scp (1.2.1)
|
||||
net-ssh (>= 2.6.5)
|
||||
net-ssh (2.9.2)
|
||||
rake (10.4.2)
|
||||
sshkit (1.7.1)
|
||||
colorize (>= 0.7.0)
|
||||
net-scp (>= 1.1.2)
|
||||
net-ssh (>= 2.8.0)
|
||||
|
||||
PLATFORMS
|
||||
ruby
|
||||
|
||||
DEPENDENCIES
|
||||
capistrano (~> 3.1)
|
||||
capistrano-composer (~> 0.0.3)
|
||||
capistrano-symfony (~> 0.1)!
|
||||
|
||||
BUNDLED WITH
|
||||
1.10.6
|
||||
72
README.md
72
README.md
@ -1,66 +1,26 @@
|
||||
# wallabag
|
||||
[](https://travis-ci.org/wallabag/wallabag)
|
||||
[](https://scrutinizer-ci.com/g/wallabag/wallabag/?branch=v2)
|
||||
[](https://scrutinizer-ci.com/g/wallabag/wallabag/?branch=v2)
|
||||
|
||||

|
||||
[](https://matrix.to/#/#wallabag:matrix.org)
|
||||
[](https://liberapay.com/wallabag/donate)
|
||||
[](https://hosted.weblate.org/engage/wallabag/?utm_source=widget)
|
||||

|
||||
# What is wallabag?
|
||||
wallabag is a self hostable application allowing you to not miss any content anymore.
|
||||
Click, save and read it when you can. It extracts content so that you can read it when you have time.
|
||||
|
||||
wallabag is a web application allowing you to save web pages for later reading.
|
||||
Click, save and read it when you want. It extracts content so that you won't be distracted by pop-ups and cie.
|
||||
More informations on our website: [wallabag.org](http://wallabag.org)
|
||||
|
||||
You can install it on your own server, or you can create an account on [wallabag.it](https://wallabag.it).
|
||||
# Want to test the v2?
|
||||
|
||||

|
||||
Keep in mind it's an **unstable** branch, everything can be broken :)
|
||||
|
||||
* Website: [wallabag.org](https://wallabag.org)
|
||||
* Android app: [wallabag/android-app](https://github.com/wallabag/android-app)
|
||||
* iOS app: [wallabag/ios-app](https://github.com/wallabag/ios-app)
|
||||
* Browser extension: [wallabag/wallabagger](https://github.com/wallabag/wallabagger)
|
||||
* GNOME (Linux) app: [read-it-later](https://gitlab.gnome.org/World/read-it-later) (not maintained by this project)
|
||||
* All resources about wallabag ecosystem are listed here: https://github.com/wallabag/wallabag/wiki/wallabag-ecosystem
|
||||
If you don't have it yet, please [install composer](https://getcomposer.org/download/). Then you can install wallabag by executing the following commands:
|
||||
|
||||
## Documentation
|
||||
|
||||
The documentation is available at https://doc.wallabag.org.
|
||||
|
||||
You can contribute to it through its dedicated repository, available here: https://github.com/wallabag/doc.
|
||||
|
||||
## Installation
|
||||
|
||||
Please read [the documentation to see the wallabag requirements](https://doc.wallabag.org/en/admin/installation/requirements.html).
|
||||
|
||||
Then you can install wallabag by executing the following commands:
|
||||
|
||||
```bash
|
||||
git clone https://github.com/wallabag/wallabag.git
|
||||
cd wallabag && make install
|
||||
```
|
||||
composer create-project wallabag/wallabag wallabag 2.0.*@alpha
|
||||
php bin/console wallabag:install
|
||||
php bin/console server:run
|
||||
```
|
||||
|
||||
Now, [configure a virtual host](https://doc.wallabag.org/en/admin/installation/virtualhosts.html) to use your wallabag.
|
||||
|
||||
### Other methods
|
||||
|
||||
Refer to the [installation documentation](https://doc.wallabag.org/en/admin/installation/installation.html) for other installation methods.
|
||||
|
||||
## Translation
|
||||
|
||||
This project uses [Weblate](https://weblate.org/) for translation.
|
||||
|
||||
Feel free to help us [translating wallabag](https://hosted.weblate.org/projects/wallabag/).
|
||||
|
||||
## Contributing
|
||||
|
||||
To learn more about developing wallabag, please refer to the [contribution guide](./.github/CONTRIBUTING.md).
|
||||
|
||||
Content extraction relies on [Graby](https://github.com/j0k3r/graby), [php-readability](https://github.com/j0k3r/php-readability) and [ftr-site-config](https://github.com/fivefilters/ftr-site-config).
|
||||
|
||||
## Sponsors
|
||||
|
||||
<img src="https://api.blackfire.io/blackfire-logo.png" alt="Blackfire" width="200" />
|
||||
|
||||
## License
|
||||
Copyright © 2013-current Nicolas Lœuillet <nicolas@loeuillet.org>
|
||||
|
||||
Copyright © 2013-2016 Nicolas Lœuillet <nicolas@loeuillet.org>
|
||||
This work is free. You can redistribute it and/or modify it under the
|
||||
terms of the MIT License. See the [COPYING.md](./COPYING.md) file for more details.
|
||||
terms of the MIT License. See the COPYING file for more details.
|
||||
|
||||
@ -1,38 +0,0 @@
|
||||
## Definition
|
||||
|
||||
A release is mostly a git tag of http://github.com/wallabag/wallabag, following [semantic versioning](http://semver.org).
|
||||
|
||||
### Steps to release
|
||||
|
||||
During this documentation, we assume the release is `$LAST_WALLABAG_RELEASE` (like 2.3.4).
|
||||
|
||||
#### Prepare the release
|
||||
|
||||
- Update these files with new information
|
||||
- `app/config/wallabag.yml` (`wallabag.version`)
|
||||
- `CHANGELOG.md`
|
||||
- Create a PR named "Prepare $LAST_WALLABAG_RELEASE release".
|
||||
- Wait for test to be ok, merge it.
|
||||
|
||||
#### Create a new release on GitHub
|
||||
|
||||
- [Create the new release on GitHub](https://github.com/wallabag/wallabag/releases/new) by targetting the `master` branch or any appropriate branch (for instance backports).
|
||||
- Update [website](https://github.com/wallabag/website) to change MD5 sum and create the release blog post (based on the changelog).
|
||||
- Update Dockerfile https://github.com/wallabag/docker (and create a new tag)
|
||||
- Put the next patch version suffixed with `-dev` in `app/config/wallabag.yml` (`wallabag.version`)
|
||||
- Drink a :beer:!
|
||||
|
||||
### Target PHP version
|
||||
`composer.lock` is _always_ built for a particular version, by default the one it is generated (with `composer update`).
|
||||
|
||||
If the PHP version used to generate the .lock isn't a widely available one (like PHP 8), a more common one should
|
||||
be locally specified in `composer.lock`:
|
||||
|
||||
```json
|
||||
"config": {
|
||||
"platform": {
|
||||
"php": "7.4.29",
|
||||
"ext-something": "4.0"
|
||||
}
|
||||
}
|
||||
```
|
||||
@ -1,5 +0,0 @@
|
||||
# Security Policy
|
||||
|
||||
## Reporting a Vulnerability
|
||||
|
||||
Please report security issues to `hello@wallabag.org`
|
||||
@ -1,9 +1,7 @@
|
||||
<?php
|
||||
|
||||
use Symfony\Component\Config\Loader\LoaderInterface;
|
||||
use Symfony\Component\DependencyInjection\ContainerBuilder;
|
||||
use Symfony\Component\HttpKernel\Kernel;
|
||||
use Wallabag\Import\ImportCompilerPass;
|
||||
use Symfony\Component\Config\Loader\LoaderInterface;
|
||||
|
||||
class AppKernel extends Kernel
|
||||
{
|
||||
@ -14,6 +12,8 @@ class AppKernel extends Kernel
|
||||
new Symfony\Bundle\SecurityBundle\SecurityBundle(),
|
||||
new Symfony\Bundle\TwigBundle\TwigBundle(),
|
||||
new Symfony\Bundle\MonologBundle\MonologBundle(),
|
||||
new Symfony\Bundle\SwiftmailerBundle\SwiftmailerBundle(),
|
||||
new Symfony\Bundle\AsseticBundle\AsseticBundle(),
|
||||
new Doctrine\Bundle\DoctrineBundle\DoctrineBundle(),
|
||||
new Sensio\Bundle\FrameworkExtraBundle\SensioFrameworkExtraBundle(),
|
||||
new FOS\RestBundle\FOSRestBundle(),
|
||||
@ -21,95 +21,48 @@ class AppKernel extends Kernel
|
||||
new JMS\SerializerBundle\JMSSerializerBundle(),
|
||||
new Nelmio\ApiDocBundle\NelmioApiDocBundle(),
|
||||
new Nelmio\CorsBundle\NelmioCorsBundle(),
|
||||
new Liip\ThemeBundle\LiipThemeBundle(),
|
||||
new Wallabag\CoreBundle\WallabagCoreBundle(),
|
||||
new Wallabag\ApiBundle\WallabagApiBundle(),
|
||||
new Bazinga\Bundle\HateoasBundle\BazingaHateoasBundle(),
|
||||
new Spiriit\Bundle\FormFilterBundle\SpiriitFormFilterBundle(),
|
||||
new Lexik\Bundle\FormFilterBundle\LexikFormFilterBundle(),
|
||||
new FOS\OAuthServerBundle\FOSOAuthServerBundle(),
|
||||
new Wallabag\UserBundle\WallabagUserBundle(),
|
||||
new Stof\DoctrineExtensionsBundle\StofDoctrineExtensionsBundle(),
|
||||
new Scheb\TwoFactorBundle\SchebTwoFactorBundle(),
|
||||
new KPhoen\RulerZBundle\KPhoenRulerZBundle(),
|
||||
new Wallabag\ImportBundle\WallabagImportBundle(),
|
||||
new Doctrine\Bundle\MigrationsBundle\DoctrineMigrationsBundle(),
|
||||
new Craue\ConfigBundle\CraueConfigBundle(),
|
||||
new BabDev\PagerfantaBundle\BabDevPagerfantaBundle(),
|
||||
new FOS\JsRoutingBundle\FOSJsRoutingBundle(),
|
||||
new OldSound\RabbitMqBundle\OldSoundRabbitMqBundle(),
|
||||
new Sentry\SentryBundle\SentryBundle(),
|
||||
new Twig\Extra\TwigExtraBundle\TwigExtraBundle(),
|
||||
new Symfony\WebpackEncoreBundle\WebpackEncoreBundle(),
|
||||
];
|
||||
|
||||
if (in_array($this->getEnvironment(), ['dev', 'test'], true)) {
|
||||
$bundles[] = new Symfony\Bundle\DebugBundle\DebugBundle();
|
||||
$bundles[] = new Symfony\Bundle\WebProfilerBundle\WebProfilerBundle();
|
||||
$bundles[] = new Sensio\Bundle\DistributionBundle\SensioDistributionBundle();
|
||||
$bundles[] = new Sensio\Bundle\GeneratorBundle\SensioGeneratorBundle();
|
||||
$bundles[] = new Doctrine\Bundle\FixturesBundle\DoctrineFixturesBundle();
|
||||
|
||||
if ('test' === $this->getEnvironment()) {
|
||||
$bundles[] = new DAMA\DoctrineTestBundle\DAMADoctrineTestBundle();
|
||||
}
|
||||
|
||||
if ('dev' === $this->getEnvironment()) {
|
||||
$bundles[] = new Symfony\Bundle\MakerBundle\MakerBundle();
|
||||
$bundles[] = new Symfony\Bundle\WebServerBundle\WebServerBundle();
|
||||
}
|
||||
}
|
||||
|
||||
return $bundles;
|
||||
}
|
||||
|
||||
public function getRootDir()
|
||||
{
|
||||
return __DIR__;
|
||||
}
|
||||
|
||||
public function getCacheDir()
|
||||
{
|
||||
return dirname(__DIR__) . '/var/cache/' . $this->getEnvironment();
|
||||
return dirname(__DIR__).'/var/cache/'.$this->getEnvironment();
|
||||
}
|
||||
|
||||
public function getLogDir()
|
||||
{
|
||||
return dirname(__DIR__) . '/var/logs';
|
||||
return dirname(__DIR__).'/var/logs';
|
||||
}
|
||||
|
||||
public function registerContainerConfiguration(LoaderInterface $loader)
|
||||
{
|
||||
$loader->load($this->getProjectDir() . '/app/config/config_' . $this->getEnvironment() . '.yml');
|
||||
|
||||
$loader->load(function (ContainerBuilder $container) {
|
||||
// $container->setParameter('container.autowiring.strict_mode', true);
|
||||
// $container->setParameter('container.dumper.inline_class_loader', true);
|
||||
$container->addObjectResource($this);
|
||||
});
|
||||
|
||||
$loader->load(function (ContainerBuilder $container) {
|
||||
$this->processDatabaseParameters($container);
|
||||
});
|
||||
}
|
||||
|
||||
protected function build(ContainerBuilder $container)
|
||||
{
|
||||
$container->addCompilerPass(new ImportCompilerPass());
|
||||
}
|
||||
|
||||
private function processDatabaseParameters(ContainerBuilder $container)
|
||||
{
|
||||
switch ($container->getParameter('database_driver')) {
|
||||
case 'pdo_mysql':
|
||||
$scheme = 'mysql';
|
||||
break;
|
||||
case 'pdo_pgsql':
|
||||
$scheme = 'pgsql';
|
||||
break;
|
||||
case 'pdo_sqlite':
|
||||
$scheme = 'sqlite';
|
||||
break;
|
||||
default:
|
||||
throw new RuntimeException('Unsupported database driver: ' . $container->getParameter('database_driver'));
|
||||
}
|
||||
|
||||
$container->setParameter('database_scheme', $scheme);
|
||||
|
||||
if ('sqlite' === $scheme) {
|
||||
$container->setParameter('database_name', $container->getParameter('database_path'));
|
||||
}
|
||||
|
||||
$container->setParameter('database_user', (string) $container->getParameter('database_user'));
|
||||
$container->setParameter('database_password', (string) $container->getParameter('database_password'));
|
||||
$container->setParameter('database_port', (string) $container->getParameter('database_port'));
|
||||
$container->setParameter('database_socket', (string) $container->getParameter('database_socket'));
|
||||
$loader->load($this->getRootDir().'/config/config_'.$this->getEnvironment().'.yml');
|
||||
}
|
||||
}
|
||||
|
||||
13
app/autoload.php
Normal file
13
app/autoload.php
Normal file
@ -0,0 +1,13 @@
|
||||
<?php
|
||||
|
||||
use Doctrine\Common\Annotations\AnnotationRegistry;
|
||||
use Composer\Autoload\ClassLoader;
|
||||
|
||||
/**
|
||||
* @var ClassLoader $loader
|
||||
*/
|
||||
$loader = require __DIR__.'/../vendor/autoload.php';
|
||||
|
||||
AnnotationRegistry::registerLoader([$loader, 'loadClass']);
|
||||
|
||||
return $loader;
|
||||
23
app/config/capistrano/deploy.rb
Normal file
23
app/config/capistrano/deploy.rb
Normal file
@ -0,0 +1,23 @@
|
||||
# config valid only for current version of Capistrano
|
||||
lock '3.4.0'
|
||||
|
||||
set :application, 'wallabag'
|
||||
set :repo_url, 'git@github.com:wallabag/wallabag.git'
|
||||
|
||||
set :ssh_user, 'framasoft_bag'
|
||||
server '78.46.248.87', user: fetch(:ssh_user), roles: %w{web app db}
|
||||
|
||||
set :scm, :git
|
||||
|
||||
set :format, :pretty
|
||||
set :log_level, :info
|
||||
# set :log_level, :debug
|
||||
|
||||
set :composer_install_flags, '--no-dev --prefer-dist --no-interaction --optimize-autoloader'
|
||||
|
||||
set :linked_files, %w{app/config/parameters.yml}
|
||||
set :linked_dirs, %w{app/logs web/uploads data}
|
||||
|
||||
set :keep_releases, 3
|
||||
|
||||
after 'deploy:finishing', 'deploy:cleanup'
|
||||
2
app/config/capistrano/deploy/staging.rb
Normal file
2
app/config/capistrano/deploy/staging.rb
Normal file
@ -0,0 +1,2 @@
|
||||
set :branch, 'v2'
|
||||
set :deploy_to, '/var/www/v2.wallabag.org/web/'
|
||||
@ -2,85 +2,97 @@ imports:
|
||||
- { resource: parameters.yml }
|
||||
- { resource: security.yml }
|
||||
- { resource: services.yml }
|
||||
- { resource: wallabag.yml }
|
||||
|
||||
parameters:
|
||||
craue_config.cache_adapter.class: Craue\ConfigBundle\CacheAdapter\SymfonyCacheComponentAdapter
|
||||
env(DATABASE_URL): '%database_scheme%://%database_user%:%database_password%@%database_host%:%database_port%/%database_name%?unix_socket=%database_socket%&charset=%database_charset%'
|
||||
|
||||
framework:
|
||||
#esi: ~
|
||||
translator:
|
||||
enabled: true
|
||||
fallback: "%locale%"
|
||||
default_path: '%kernel.project_dir%/translations'
|
||||
secret: "%secret%"
|
||||
translator: { fallback: "%locale%" }
|
||||
secret: "%secret%"
|
||||
router:
|
||||
resource: "%kernel.project_dir%/app/config/routing.yml"
|
||||
resource: "%kernel.root_dir%/config/routing.yml"
|
||||
strict_requirements: ~
|
||||
form: ~
|
||||
form: ~
|
||||
csrf_protection: ~
|
||||
validation:
|
||||
enable_annotations: true
|
||||
default_locale: "%locale%"
|
||||
trusted_hosts: ~
|
||||
validation: { enable_annotations: true }
|
||||
templating:
|
||||
engines: ['twig']
|
||||
#assets_version: SomeVersionScheme
|
||||
default_locale: "%locale%"
|
||||
trusted_hosts: ~
|
||||
trusted_proxies: ~
|
||||
session:
|
||||
# handler_id set to null will use default session handler from php.ini
|
||||
handler_id: session.handler.native_file
|
||||
save_path: "%kernel.project_dir%/var/sessions/%kernel.environment%"
|
||||
cookie_secure: auto
|
||||
fragments: ~
|
||||
handler_id: session.handler.native_file
|
||||
save_path: "%kernel.root_dir%/../var/sessions/%kernel.environment%"
|
||||
fragments: ~
|
||||
http_method_override: true
|
||||
assets:
|
||||
base_url: '%domain_name%'
|
||||
json_manifest_path: '%kernel.project_dir%/web/build/manifest.json'
|
||||
mailer:
|
||||
dsn: "%mailer_dsn%"
|
||||
http_client:
|
||||
scoped_clients:
|
||||
download_images.client:
|
||||
scope: '.*'
|
||||
pocket.client:
|
||||
scope: '.*'
|
||||
headers:
|
||||
Content-Type: 'application/json'
|
||||
X-Accept: 'application/json'
|
||||
request_html_function.client:
|
||||
scope: '.*'
|
||||
browser.client:
|
||||
scope: '.*'
|
||||
verify_host: false
|
||||
verify_peer: false
|
||||
assets: ~
|
||||
|
||||
wallabag_core:
|
||||
languages:
|
||||
en: 'English'
|
||||
fr: 'Français'
|
||||
de: 'Deutsch'
|
||||
|
||||
wallabag_import:
|
||||
allow_mimetypes: ['application/octet-stream', 'application/json', 'text/plain']
|
||||
resource_dir: "%kernel.root_dir%/../web/uploads/import"
|
||||
|
||||
# Twig Configuration
|
||||
twig:
|
||||
default_path: '%kernel.project_dir%/templates'
|
||||
debug: "%kernel.debug%"
|
||||
debug: "%kernel.debug%"
|
||||
strict_variables: "%kernel.debug%"
|
||||
form_themes:
|
||||
- "@SpiriitFormFilter/Form/form_div_layout.html.twig"
|
||||
globals:
|
||||
registration_enabled: '%fosuser_registration%'
|
||||
share_twitter: %share_twitter%
|
||||
share_mail: %share_mail%
|
||||
share_shaarli: %share_shaarli%
|
||||
shaarli_url: %shaarli_url%
|
||||
share_diaspora: %share_diaspora%
|
||||
diaspora_url: %diaspora_url%
|
||||
flattr: %flattr%
|
||||
flattrable: 1
|
||||
flattred: 2
|
||||
carrot: %carrot%
|
||||
show_printlink: %show_printlink%
|
||||
export_epub: %export_epub%
|
||||
export_mobi: %export_mobi%
|
||||
export_pdf: %export_pdf%
|
||||
version: %app.version%
|
||||
twofactor_auth: %twofactor_auth%
|
||||
warning_message: %warning_message%
|
||||
paypal_url: "https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=9UBA65LG3FX9Y&lc=gb"
|
||||
form_themes:
|
||||
- "LexikFormFilterBundle:Form:form_div_layout.html.twig"
|
||||
|
||||
# Assetic Configuration
|
||||
assetic:
|
||||
debug: "%kernel.debug%"
|
||||
use_controller: false
|
||||
bundles: [ ]
|
||||
#java: /usr/bin/java
|
||||
filters:
|
||||
cssrewrite: ~
|
||||
#closure:
|
||||
# jar: "%kernel.root_dir%/Resources/java/compiler.jar"
|
||||
#yui_css:
|
||||
# jar: "%kernel.root_dir%/Resources/java/yuicompressor-2.4.7.jar"
|
||||
|
||||
# Doctrine Configuration
|
||||
doctrine:
|
||||
dbal:
|
||||
url: '%env(resolve:DATABASE_URL)%'
|
||||
types:
|
||||
json_array: Wallabag\Doctrine\JsonArrayType
|
||||
driver: "%database_driver%"
|
||||
host: "%database_host%"
|
||||
port: "%database_port%"
|
||||
dbname: "%database_name%"
|
||||
user: "%database_user%"
|
||||
password: "%database_password%"
|
||||
charset: UTF8
|
||||
path: "%database_path%"
|
||||
|
||||
orm:
|
||||
auto_generate_proxy_classes: "%kernel.debug%"
|
||||
entity_managers:
|
||||
default:
|
||||
auto_mapping: true
|
||||
mappings:
|
||||
Wallabag:
|
||||
type: annotation
|
||||
is_bundle: false
|
||||
dir: '%kernel.project_dir%/src/Entity'
|
||||
prefix: 'Wallabag\Entity'
|
||||
alias: Wallabag
|
||||
|
||||
stof_doctrine_extensions:
|
||||
default_locale: "%locale%"
|
||||
@ -91,70 +103,41 @@ stof_doctrine_extensions:
|
||||
sluggable: true
|
||||
|
||||
doctrine_migrations:
|
||||
migrations_paths:
|
||||
'Application\Migrations': '%kernel.project_dir%/migrations'
|
||||
storage:
|
||||
table_storage:
|
||||
table_name: 'migration_versions'
|
||||
version_column_name: 'version'
|
||||
version_column_length: 192
|
||||
executed_at_column_name: 'executed_at'
|
||||
services:
|
||||
Doctrine\Migrations\Version\MigrationFactory: Wallabag\Doctrine\MigrationFactoryDecorator
|
||||
dir_name: "%kernel.root_dir%/DoctrineMigrations"
|
||||
namespace: Application\Migrations
|
||||
table_name: migration_versions
|
||||
name: Application Migrations
|
||||
|
||||
# Swiftmailer Configuration
|
||||
swiftmailer:
|
||||
transport: "%mailer_transport%"
|
||||
host: "%mailer_host%"
|
||||
username: "%mailer_user%"
|
||||
password: "%mailer_password%"
|
||||
spool: { type: memory }
|
||||
|
||||
fos_rest:
|
||||
param_fetcher_listener: true
|
||||
body_listener: true
|
||||
format_listener: true
|
||||
view:
|
||||
mime_types:
|
||||
csv:
|
||||
- 'text/csv'
|
||||
- 'text/plain'
|
||||
pdf:
|
||||
- 'application/pdf'
|
||||
epub:
|
||||
- 'application/epub+zip'
|
||||
view_response_listener: 'force'
|
||||
formats:
|
||||
xml: true
|
||||
json: true
|
||||
txt: true
|
||||
csv: true
|
||||
pdf: true
|
||||
epub: true
|
||||
json : true
|
||||
templating_formats:
|
||||
html: true
|
||||
force_redirects:
|
||||
html: true
|
||||
failed_validation: HTTP_BAD_REQUEST
|
||||
routing_loader: false
|
||||
format_listener:
|
||||
enabled: true
|
||||
rules:
|
||||
- { path: "^/api/entries/([0-9]+)/export.(.*)", priorities: ['epub', 'pdf', 'txt', 'csv'], fallback_format: json, prefer_extension: false }
|
||||
- { path: "^/api", priorities: ['json', 'xml'], fallback_format: json, prefer_extension: false }
|
||||
- { path: "^/annotations", priorities: ['json', 'xml'], fallback_format: json, prefer_extension: false }
|
||||
# for an unknown reason, EACH REQUEST goes to FOS\RestBundle\EventListener\FormatListener
|
||||
# so we need to add custom rule for custom api export but also for all other routes of the application...
|
||||
- { path: '^/', priorities: ['text/html', '*/*'], fallback_format: html, prefer_extension: false }
|
||||
exception:
|
||||
messages:
|
||||
Symfony\Component\HttpKernel\Exception\BadRequestHttpException: true
|
||||
default_engine: twig
|
||||
routing_loader:
|
||||
default_format: json
|
||||
|
||||
nelmio_api_doc:
|
||||
areas:
|
||||
default:
|
||||
disable_default_routes: true
|
||||
documentation:
|
||||
info:
|
||||
title: wallabag API documentation
|
||||
description: This is the API documentation of wallabag
|
||||
version: 2.x
|
||||
components:
|
||||
securitySchemes:
|
||||
Bearer:
|
||||
type: apiKey
|
||||
description: 'Value: Bearer {jwt}'
|
||||
name: Authorization
|
||||
in: header
|
||||
security:
|
||||
- Bearer: []
|
||||
sandbox:
|
||||
enabled: false
|
||||
name: wallabag API documentation
|
||||
|
||||
nelmio_cors:
|
||||
defaults:
|
||||
@ -169,301 +152,58 @@ nelmio_cors:
|
||||
paths:
|
||||
'^/api/':
|
||||
allow_origin: ['*']
|
||||
allow_headers: ['Authorization','content-type']
|
||||
allow_methods: ['POST', 'PUT', 'PATCH','GET', 'DELETE']
|
||||
max_age: 3600
|
||||
'^/oauth/':
|
||||
allow_origin: ['*']
|
||||
allow_headers: ['Authorization','content-type']
|
||||
allow_headers: ['X-Custom-Auth']
|
||||
allow_methods: ['POST', 'PUT', 'GET', 'DELETE']
|
||||
max_age: 3600
|
||||
'^/':
|
||||
#origin_regex: true
|
||||
allow_origin: ['*']
|
||||
allow_headers: ['Authorization','content-type']
|
||||
allow_origin: ['^http://localhost:[0-9]+']
|
||||
allow_headers: ['X-Custom-Auth']
|
||||
allow_methods: ['POST', 'PUT', 'GET', 'DELETE']
|
||||
max_age: 3600
|
||||
hosts: ['^api\.']
|
||||
|
||||
liip_theme:
|
||||
load_controllers: false
|
||||
themes:
|
||||
- baggy
|
||||
- material
|
||||
autodetect_theme: wallabag_core.helper.detect_active_theme
|
||||
|
||||
path_patterns:
|
||||
bundle_resource:
|
||||
- %%bundle_path%%/Resources/views/themes/%%current_theme%%/%%template%%
|
||||
|
||||
fos_user:
|
||||
db_driver: orm
|
||||
firewall_name: secured_area
|
||||
user_class: Wallabag\Entity\User
|
||||
firewall_name: main
|
||||
user_class: Wallabag\UserBundle\Entity\User
|
||||
registration:
|
||||
confirmation:
|
||||
enabled: "%fosuser_confirmation%"
|
||||
from_email:
|
||||
address: "%from_email%"
|
||||
sender_name: wallabag
|
||||
service:
|
||||
mailer: Wallabag\Mailer\UserMailer
|
||||
enabled: true
|
||||
|
||||
fos_oauth_server:
|
||||
db_driver: orm
|
||||
client_class: Wallabag\Entity\Api\Client
|
||||
access_token_class: Wallabag\Entity\Api\AccessToken
|
||||
refresh_token_class: Wallabag\Entity\Api\RefreshToken
|
||||
auth_code_class: Wallabag\Entity\Api\AuthCode
|
||||
client_class: Wallabag\ApiBundle\Entity\Client
|
||||
access_token_class: Wallabag\ApiBundle\Entity\AccessToken
|
||||
refresh_token_class: Wallabag\ApiBundle\Entity\RefreshToken
|
||||
auth_code_class: Wallabag\ApiBundle\Entity\AuthCode
|
||||
service:
|
||||
user_provider: fos_user.user_provider.username_email
|
||||
options:
|
||||
refresh_token_lifetime: "%fos_oauth_server_refresh_token_lifetime%"
|
||||
access_token_lifetime: "%fos_oauth_server_access_token_lifetime%"
|
||||
user_provider: fos_user.user_manager
|
||||
|
||||
scheb_two_factor:
|
||||
trusted_device:
|
||||
trusted_computer:
|
||||
enabled: true
|
||||
cookie_name: wllbg_trusted_computer
|
||||
lifetime: 2592000
|
||||
|
||||
backup_codes:
|
||||
enabled: true
|
||||
|
||||
google:
|
||||
enabled: true
|
||||
issuer: "%server_name%"
|
||||
template: "Authentication/form.html.twig"
|
||||
cookie_lifetime: 2592000
|
||||
|
||||
email:
|
||||
enabled: true
|
||||
sender_email: "%twofactor_sender%"
|
||||
enabled: %twofactor_auth%
|
||||
sender_email: %twofactor_sender%
|
||||
digits: 6
|
||||
template: "Authentication/form.html.twig"
|
||||
mailer: Wallabag\Mailer\AuthCodeMailer
|
||||
template: WallabagUserBundle:Authentication:form.html.twig
|
||||
mailer: wallabag_user.auth_code_mailer
|
||||
|
||||
rulerz:
|
||||
targets:
|
||||
kphoen_rulerz:
|
||||
executors:
|
||||
doctrine: true
|
||||
|
||||
old_sound_rabbit_mq:
|
||||
connections:
|
||||
default:
|
||||
host: "%rabbitmq_host%"
|
||||
port: "%rabbitmq_port%"
|
||||
user: "%rabbitmq_user%"
|
||||
password: "%rabbitmq_password%"
|
||||
vhost: /
|
||||
lazy: true
|
||||
producers:
|
||||
import_pocket:
|
||||
connection: default
|
||||
exchange_options:
|
||||
name: 'wallabag.import.pocket'
|
||||
type: topic
|
||||
import_readability:
|
||||
connection: default
|
||||
exchange_options:
|
||||
name: 'wallabag.import.readability'
|
||||
type: topic
|
||||
import_pinboard:
|
||||
connection: default
|
||||
exchange_options:
|
||||
name: 'wallabag.import.pinboard'
|
||||
type: topic
|
||||
import_delicious:
|
||||
connection: default
|
||||
exchange_options:
|
||||
name: 'wallabag.import.delicious'
|
||||
type: topic
|
||||
import_instapaper:
|
||||
connection: default
|
||||
exchange_options:
|
||||
name: 'wallabag.import.instapaper'
|
||||
type: topic
|
||||
import_wallabag_v1:
|
||||
connection: default
|
||||
exchange_options:
|
||||
name: 'wallabag.import.wallabag_v1'
|
||||
type: topic
|
||||
import_wallabag_v2:
|
||||
connection: default
|
||||
exchange_options:
|
||||
name: 'wallabag.import.wallabag_v2'
|
||||
type: topic
|
||||
import_elcurator:
|
||||
connection: default
|
||||
exchange_options:
|
||||
name: 'wallabag.import.elcurator'
|
||||
type: topic
|
||||
import_omnivore:
|
||||
connection: default
|
||||
exchange_options:
|
||||
name: 'wallabag.import.omnivore'
|
||||
type: topic
|
||||
import_firefox:
|
||||
connection: default
|
||||
exchange_options:
|
||||
name: 'wallabag.import.firefox'
|
||||
type: topic
|
||||
import_chrome:
|
||||
connection: default
|
||||
exchange_options:
|
||||
name: 'wallabag.import.chrome'
|
||||
type: topic
|
||||
import_shaarli:
|
||||
connection: default
|
||||
exchange_options:
|
||||
name: 'wallabag.import.shaarli'
|
||||
type: topic
|
||||
import_pocket_html:
|
||||
connection: default
|
||||
exchange_options:
|
||||
name: 'wallabag.import.pocket_html'
|
||||
type: topic
|
||||
consumers:
|
||||
import_pocket:
|
||||
connection: default
|
||||
exchange_options:
|
||||
name: 'wallabag.import.pocket'
|
||||
type: topic
|
||||
queue_options:
|
||||
name: 'wallabag.import.pocket'
|
||||
callback: wallabag.consumer.amqp.pocket
|
||||
qos_options: {prefetch_count: "%rabbitmq_prefetch_count%"}
|
||||
import_readability:
|
||||
connection: default
|
||||
exchange_options:
|
||||
name: 'wallabag.import.readability'
|
||||
type: topic
|
||||
queue_options:
|
||||
name: 'wallabag.import.readability'
|
||||
callback: wallabag.consumer.amqp.readability
|
||||
qos_options: {prefetch_count: "%rabbitmq_prefetch_count%"}
|
||||
import_instapaper:
|
||||
connection: default
|
||||
exchange_options:
|
||||
name: 'wallabag.import.instapaper'
|
||||
type: topic
|
||||
queue_options:
|
||||
name: 'wallabag.import.instapaper'
|
||||
callback: wallabag.consumer.amqp.instapaper
|
||||
qos_options: {prefetch_count: "%rabbitmq_prefetch_count%"}
|
||||
import_pinboard:
|
||||
connection: default
|
||||
exchange_options:
|
||||
name: 'wallabag.import.pinboard'
|
||||
type: topic
|
||||
queue_options:
|
||||
name: 'wallabag.import.pinboard'
|
||||
callback: wallabag.consumer.amqp.pinboard
|
||||
qos_options: {prefetch_count: "%rabbitmq_prefetch_count%"}
|
||||
import_delicious:
|
||||
connection: default
|
||||
exchange_options:
|
||||
name: 'wallabag.import.delicious'
|
||||
type: topic
|
||||
queue_options:
|
||||
name: 'wallabag.import.delicious'
|
||||
callback: wallabag.consumer.amqp.delicious
|
||||
qos_options: {prefetch_count: "%rabbitmq_prefetch_count%"}
|
||||
import_wallabag_v1:
|
||||
connection: default
|
||||
exchange_options:
|
||||
name: 'wallabag.import.wallabag_v1'
|
||||
type: topic
|
||||
queue_options:
|
||||
name: 'wallabag.import.wallabag_v1'
|
||||
callback: wallabag.consumer.amqp.wallabag_v1
|
||||
qos_options: {prefetch_count: "%rabbitmq_prefetch_count%"}
|
||||
import_wallabag_v2:
|
||||
connection: default
|
||||
exchange_options:
|
||||
name: 'wallabag.import.wallabag_v2'
|
||||
type: topic
|
||||
queue_options:
|
||||
name: 'wallabag.import.wallabag_v2'
|
||||
callback: wallabag.consumer.amqp.wallabag_v2
|
||||
qos_options: {prefetch_count: "%rabbitmq_prefetch_count%"}
|
||||
import_elcurator:
|
||||
connection: default
|
||||
exchange_options:
|
||||
name: 'wallabag.import.elcurator'
|
||||
type: topic
|
||||
queue_options:
|
||||
name: 'wallabag.import.elcurator'
|
||||
callback: wallabag.consumer.amqp.elcurator
|
||||
qos_options: {prefetch_count: "%rabbitmq_prefetch_count%"}
|
||||
import_omnivore:
|
||||
connection: default
|
||||
exchange_options:
|
||||
name: 'wallabag.import.omnivore'
|
||||
type: topic
|
||||
queue_options:
|
||||
name: 'wallabag.import.omnivore'
|
||||
callback: wallabag.consumer.amqp.omnivore
|
||||
qos_options: {prefetch_count: "%rabbitmq_prefetch_count%"}
|
||||
import_firefox:
|
||||
connection: default
|
||||
exchange_options:
|
||||
name: 'wallabag.import.firefox'
|
||||
type: topic
|
||||
queue_options:
|
||||
name: 'wallabag.import.firefox'
|
||||
callback: wallabag.consumer.amqp.firefox
|
||||
qos_options: {prefetch_count: "%rabbitmq_prefetch_count%"}
|
||||
import_chrome:
|
||||
connection: default
|
||||
exchange_options:
|
||||
name: 'wallabag.import.chrome'
|
||||
type: topic
|
||||
queue_options:
|
||||
name: 'wallabag.import.chrome'
|
||||
callback: wallabag.consumer.amqp.chrome
|
||||
qos_options: {prefetch_count: "%rabbitmq_prefetch_count%"}
|
||||
import_shaarli:
|
||||
connection: default
|
||||
exchange_options:
|
||||
name: 'wallabag.import.shaarli'
|
||||
type: topic
|
||||
queue_options:
|
||||
name: 'wallabag.import.shaarli'
|
||||
callback: wallabag.consumer.amqp.shaarli
|
||||
qos_options: {prefetch_count: "%rabbitmq_prefetch_count%"}
|
||||
import_pocket_html:
|
||||
connection: default
|
||||
exchange_options:
|
||||
name: 'wallabag.import.pocket_html'
|
||||
type: topic
|
||||
queue_options:
|
||||
name: 'wallabag.import.pocket_html'
|
||||
callback: wallabag.consumer.amqp.pocket_html
|
||||
qos_options: {prefetch_count: "%rabbitmq_prefetch_count%"}
|
||||
|
||||
fos_js_routing:
|
||||
routes_to_expose:
|
||||
- homepage
|
||||
- starred
|
||||
- archive
|
||||
- all
|
||||
- tag
|
||||
- config
|
||||
- import
|
||||
- developer
|
||||
- howto
|
||||
- fos_user_security_logout
|
||||
- new
|
||||
|
||||
jms_serializer:
|
||||
handlers:
|
||||
# to be removed if we switch to (default) ISO8601 datetime instead of ATOM
|
||||
# see: https://github.com/schmittjoh/JMSSerializerBundle/pull/494
|
||||
datetime:
|
||||
default_format: "Y-m-d\\TH:i:sO" # ATOM
|
||||
|
||||
# see https://github.com/symfony/symfony-standard/pull/1133
|
||||
sensio_framework_extra:
|
||||
router:
|
||||
annotations: false
|
||||
|
||||
# define custom entity so we can override length attribute to fix utf8mb4 issue
|
||||
craue_config:
|
||||
entity_name: Wallabag\Entity\InternalSetting
|
||||
|
||||
when@dev:
|
||||
maker:
|
||||
root_namespace: 'Wallabag'
|
||||
|
||||
webpack_encore:
|
||||
output_path: '%kernel.project_dir%/web/build'
|
||||
script_attributes:
|
||||
defer: true
|
||||
|
||||
@ -3,14 +3,9 @@ imports:
|
||||
|
||||
framework:
|
||||
router:
|
||||
resource: "%kernel.project_dir%/app/config/routing_dev.yml"
|
||||
resource: "%kernel.root_dir%/config/routing_dev.yml"
|
||||
strict_requirements: true
|
||||
profiler:
|
||||
only_exceptions: false
|
||||
|
||||
mailer:
|
||||
# see https://mailcatcher.me/
|
||||
dsn: smtp://127.0.0.1:1025
|
||||
profiler: { only_exceptions: false }
|
||||
|
||||
web_profiler:
|
||||
toolbar: true
|
||||
@ -19,19 +14,19 @@ web_profiler:
|
||||
monolog:
|
||||
handlers:
|
||||
main:
|
||||
type: stream
|
||||
path: "%kernel.logs_dir%/%kernel.environment%.log"
|
||||
level: debug
|
||||
channels: ['!event']
|
||||
type: stream
|
||||
path: "%kernel.logs_dir%/%kernel.environment%.log"
|
||||
level: debug
|
||||
channels: [!event]
|
||||
console:
|
||||
type: console
|
||||
type: console
|
||||
bubble: false
|
||||
verbosity_levels:
|
||||
VERBOSITY_VERBOSE: INFO
|
||||
VERBOSITY_VERY_VERBOSE: DEBUG
|
||||
channels: ['!event', '!doctrine']
|
||||
channels: [!event, !doctrine]
|
||||
console_very_verbose:
|
||||
type: console
|
||||
type: console
|
||||
bubble: false
|
||||
verbosity_levels:
|
||||
VERBOSITY_VERBOSE: NOTICE
|
||||
@ -39,10 +34,11 @@ monolog:
|
||||
VERBOSITY_DEBUG: DEBUG
|
||||
channels: [doctrine]
|
||||
|
||||
# If you want to use cache for queries used in WallabagExtension
|
||||
# Uncomment the following lines
|
||||
#doctrine:
|
||||
# orm:
|
||||
# metadata_cache_driver: apcu
|
||||
# result_cache_driver: apcu
|
||||
# query_cache_driver: apcu
|
||||
assetic:
|
||||
use_controller: true
|
||||
|
||||
swiftmailer:
|
||||
# see http://mailcatcher.me/
|
||||
transport: smtp
|
||||
host: 'localhost'
|
||||
port: 1025
|
||||
|
||||
@ -1,6 +1,10 @@
|
||||
imports:
|
||||
- { resource: config.yml }
|
||||
|
||||
#framework:
|
||||
# validation:
|
||||
# cache: apc
|
||||
|
||||
#doctrine:
|
||||
# orm:
|
||||
# metadata_cache_driver: apc
|
||||
@ -10,15 +14,12 @@ imports:
|
||||
monolog:
|
||||
handlers:
|
||||
main:
|
||||
type: fingers_crossed
|
||||
type: fingers_crossed
|
||||
action_level: error
|
||||
handler: nested
|
||||
handler: nested
|
||||
nested:
|
||||
type: stream
|
||||
path: "%kernel.logs_dir%/%kernel.environment%.log"
|
||||
type: stream
|
||||
path: "%kernel.logs_dir%/%kernel.environment%.log"
|
||||
level: debug
|
||||
console:
|
||||
type: console
|
||||
|
||||
sentry:
|
||||
dsn: "%sentry_dsn%"
|
||||
type: console
|
||||
|
||||
@ -1,11 +1,5 @@
|
||||
imports:
|
||||
- { resource: config_dev.yml }
|
||||
- { resource: parameters_test.yml }
|
||||
- { resource: services_test.yml }
|
||||
|
||||
parameters:
|
||||
fosuser_registration: true
|
||||
wallabag_dbname_suffix: '_test'
|
||||
|
||||
framework:
|
||||
test: ~
|
||||
@ -13,20 +7,26 @@ framework:
|
||||
storage_id: session.storage.mock_file
|
||||
profiler:
|
||||
collect: false
|
||||
translator:
|
||||
enabled: false
|
||||
mailer:
|
||||
dsn: 'null://null'
|
||||
|
||||
web_profiler:
|
||||
toolbar: false
|
||||
intercept_redirects: false
|
||||
|
||||
swiftmailer:
|
||||
# to be able to read emails sent
|
||||
spool:
|
||||
type: file
|
||||
|
||||
doctrine:
|
||||
dbal:
|
||||
dbname_suffix: '%wallabag_dbname_suffix%' # for MySQL and PostgreSQL
|
||||
use_savepoints: true
|
||||
|
||||
driver: "%test_database_driver%"
|
||||
host: "%test_database_host%"
|
||||
port: "%test_database_port%"
|
||||
dbname: "%test_database_name%"
|
||||
user: "%test_database_user%"
|
||||
password: "%test_database_password%"
|
||||
charset: UTF8
|
||||
path: "%test_database_path%"
|
||||
orm:
|
||||
metadata_cache_driver:
|
||||
type: service
|
||||
@ -34,8 +34,3 @@ doctrine:
|
||||
query_cache_driver:
|
||||
type: service
|
||||
id: filesystem_cache
|
||||
|
||||
dama_doctrine_test:
|
||||
enable_static_connection: true
|
||||
enable_static_meta_data_cache: true
|
||||
enable_static_query_cache: true
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
# This file is a "template" of what your parameters.yml file should look like
|
||||
parameters:
|
||||
# Uncomment these settings or manually update your parameters.yml
|
||||
# to use Docker Compose
|
||||
# to use docker-compose
|
||||
#
|
||||
# database_driver: %env.database_driver%
|
||||
# database_host: %env.database_host%
|
||||
@ -10,58 +10,66 @@ parameters:
|
||||
# database_user: %env.database_user%
|
||||
# database_password: %env.database_password%
|
||||
|
||||
database_driver: pdo_mysql
|
||||
database_driver: pdo_sqlite
|
||||
database_host: 127.0.0.1
|
||||
database_port: ~
|
||||
database_name: wallabag
|
||||
database_name: symfony
|
||||
database_user: root
|
||||
database_password: ~
|
||||
# For SQLite, database_path should be "%kernel.project_dir%/data/db/wallabag.sqlite"
|
||||
database_path: null
|
||||
database_path: "%kernel.root_dir%/../data/db/wallabag.sqlite"
|
||||
database_table_prefix: wallabag_
|
||||
database_socket: null
|
||||
# with PostgreSQL and SQLite, you must set "utf8"
|
||||
database_charset: utf8mb4
|
||||
|
||||
domain_name: https://your-wallabag-instance.wallabag.org
|
||||
server_name: "Your wallabag instance"
|
||||
test_database_driver: pdo_sqlite
|
||||
test_database_host: 127.0.0.1
|
||||
test_database_port: ~
|
||||
test_database_name: ~
|
||||
test_database_user: ~
|
||||
test_database_password: ~
|
||||
test_database_path: "%kernel.root_dir%/../data/db/wallabag_test.sqlite"
|
||||
|
||||
mailer_dsn: smtp://127.0.0.1
|
||||
mailer_transport: smtp
|
||||
mailer_host: 127.0.0.1
|
||||
mailer_user: ~
|
||||
mailer_password: ~
|
||||
|
||||
locale: en
|
||||
locale: en
|
||||
|
||||
# A secret key that's used to generate certain security-related tokens
|
||||
secret: CHANGE_ME_TO_SOMETHING_SECRET_AND_RANDOM
|
||||
secret: ThisTokenIsNotSoSecretChangeIt
|
||||
|
||||
# two factor stuff
|
||||
# wallabag misc
|
||||
app.version: 2.0.0-alpha
|
||||
twofactor_auth: true
|
||||
twofactor_sender: no-reply@wallabag.org
|
||||
|
||||
# fosuser stuff
|
||||
fosuser_registration: false
|
||||
fosuser_confirmation: true
|
||||
# message to display at the bottom of the page
|
||||
warning_message: >
|
||||
You're trying wallabag v2, which is in alpha version. If you find a bug, please have a look to <a href="https://github.com/wallabag/wallabag/issues">our issues list</a> and <a href="https://github.com/wallabag/wallabag/issues/new">open a new if necessary</a>
|
||||
|
||||
# how long the access token should live in seconds for the API
|
||||
fos_oauth_server_access_token_lifetime: 3600
|
||||
# how long the refresh token should life in seconds for the API
|
||||
fos_oauth_server_refresh_token_lifetime: 1209600
|
||||
download_pictures: false # if true, pictures will be stored into data/assets for each article
|
||||
|
||||
# Entry view
|
||||
share_twitter: true
|
||||
share_mail: true
|
||||
share_shaarli: true
|
||||
shaarli_url: http://myshaarli.com
|
||||
share_diaspora: true
|
||||
diaspora_url: http://diasporapod.com
|
||||
flattr: true
|
||||
carrot: true
|
||||
show_printlink: true
|
||||
export_epub: true
|
||||
export_mobi: true
|
||||
export_pdf: true
|
||||
wallabag_url: http://v2.wallabag.org
|
||||
wallabag_support_url: 'https://www.wallabag.org/pages/support.html'
|
||||
|
||||
# default user config
|
||||
items_on_page: 12
|
||||
theme: material
|
||||
language: en
|
||||
from_email: no-reply@wallabag.org
|
||||
|
||||
rss_limit: 50
|
||||
|
||||
# RabbitMQ processing
|
||||
rabbitmq_host: localhost
|
||||
rabbitmq_port: 5672
|
||||
rabbitmq_user: guest
|
||||
rabbitmq_password: guest
|
||||
rabbitmq_prefetch_count: 10
|
||||
|
||||
# Redis processing
|
||||
redis_scheme: tcp
|
||||
redis_host: localhost
|
||||
redis_port: 6379
|
||||
redis_path: null
|
||||
redis_password: null
|
||||
|
||||
# sentry logging
|
||||
sentry_dsn: ~
|
||||
# pocket import
|
||||
pocket_consumer_key: xxxxxxxx
|
||||
|
||||
@ -1,9 +0,0 @@
|
||||
parameters:
|
||||
addons_url:
|
||||
firefox: https://addons.mozilla.org/firefox/addon/wallabagger/
|
||||
chrome: https://chrome.google.com/webstore/detail/wallabagger/gbmgphmejlcoihgedabhgjdkcahacjlj
|
||||
opera: https://addons.opera.com/en/extensions/details/wallabagger/?display=en
|
||||
f_droid: https://f-droid.org/app/fr.gaulupeau.apps.InThePoche
|
||||
google_play: https://play.google.com/store/apps/details?id=fr.gaulupeau.apps.InThePoche
|
||||
ios: https://apps.apple.com/app/wallabag-2/id1170800946?mt=8
|
||||
windows: https://www.microsoft.com/store/apps/wallabag/9nblggh11646
|
||||
@ -1,2 +0,0 @@
|
||||
parameters:
|
||||
database_path: "%kernel.project_dir%/data/db/wallabag%wallabag_dbname_suffix%.sqlite"
|
||||
@ -1,21 +1,28 @@
|
||||
wallabag_import:
|
||||
resource: "@WallabagImportBundle/Controller/"
|
||||
type: annotation
|
||||
prefix: /import
|
||||
|
||||
wallabag_api:
|
||||
resource: "@WallabagApiBundle/Resources/config/routing.yml"
|
||||
prefix: /
|
||||
|
||||
app:
|
||||
resource: ../../src/Controller/
|
||||
resource: "@WallabagCoreBundle/Controller/"
|
||||
type: annotation
|
||||
|
||||
doc-api:
|
||||
resource: "@NelmioApiDocBundle/config/routing/swaggerui.xml"
|
||||
resource: "@NelmioApiDocBundle/Resources/config/routing.yml"
|
||||
prefix: /api/doc
|
||||
|
||||
doc-api-json:
|
||||
path: /api/doc.json
|
||||
methods: GET
|
||||
defaults: { _controller: nelmio_api_doc.controller.swagger }
|
||||
rest :
|
||||
type : rest
|
||||
resource : "routing_rest.yml"
|
||||
prefix : /api
|
||||
|
||||
homepage:
|
||||
path: "/{page}"
|
||||
defaults:
|
||||
_controller: 'Wallabag\Controller\EntryController::showUnreadAction'
|
||||
page : 1
|
||||
defaults: { _controller: WallabagCoreBundle:Entry:showUnread, page : 1 }
|
||||
requirements:
|
||||
page: \d+
|
||||
|
||||
@ -24,55 +31,3 @@ fos_user:
|
||||
|
||||
fos_oauth_server_token:
|
||||
resource: "@FOSOAuthServerBundle/Resources/config/routing/token.xml"
|
||||
|
||||
craue_config_settings_modify:
|
||||
path: /settings
|
||||
defaults:
|
||||
_controller: 'Craue\ConfigBundle\Controller\SettingsController::modifyAction'
|
||||
|
||||
fos_js_routing:
|
||||
resource: "@FOSJsRoutingBundle/Resources/config/routing/routing.xml"
|
||||
|
||||
2fa_login:
|
||||
path: /2fa
|
||||
defaults:
|
||||
_controller: "scheb_two_factor.form_controller:form"
|
||||
|
||||
2fa_login_check:
|
||||
path: /2fa_check
|
||||
|
||||
# redirect RSS feed to Atom
|
||||
rss_to_atom_unread:
|
||||
path: /{username}/{token}/unread.xml
|
||||
defaults:
|
||||
_controller: 'Symfony\Bundle\FrameworkBundle\Controller\RedirectController::redirectAction'
|
||||
route: unread_feed
|
||||
permanent: true
|
||||
|
||||
rss_to_atom_archive:
|
||||
path: /{username}/{token}/archive.xml
|
||||
defaults:
|
||||
_controller: 'Symfony\Bundle\FrameworkBundle\Controller\RedirectController::redirectAction'
|
||||
route: archive_feed
|
||||
permanent: true
|
||||
|
||||
rss_to_atom_starred:
|
||||
path: /{username}/{token}/starred.xml
|
||||
defaults:
|
||||
_controller: 'Symfony\Bundle\FrameworkBundle\Controller\RedirectController::redirectAction'
|
||||
route: starred_feed
|
||||
permanent: true
|
||||
|
||||
rss_to_atom_all:
|
||||
path: /{username}/{token}/all.xml
|
||||
defaults:
|
||||
_controller: 'Symfony\Bundle\FrameworkBundle\Controller\RedirectController::redirectAction'
|
||||
route: all_feed
|
||||
permanent: true
|
||||
|
||||
rss_to_atom_tags:
|
||||
path: /{username}/{token}/tags/{slug}.xml
|
||||
defaults:
|
||||
_controller: 'Symfony\Bundle\FrameworkBundle\Controller\RedirectController::redirectAction'
|
||||
route: tag_feed
|
||||
permanent: true
|
||||
|
||||
@ -1,14 +1,14 @@
|
||||
_wdt:
|
||||
resource: "@WebProfilerBundle/Resources/config/routing/wdt.xml"
|
||||
prefix: /_wdt
|
||||
prefix: /_wdt
|
||||
|
||||
_profiler:
|
||||
resource: "@WebProfilerBundle/Resources/config/routing/profiler.xml"
|
||||
prefix: /_profiler
|
||||
prefix: /_profiler
|
||||
|
||||
_errors:
|
||||
resource: '@FrameworkBundle/Resources/config/routing/errors.xml'
|
||||
prefix: /_error
|
||||
resource: "@TwigBundle/Resources/config/routing/errors.xml"
|
||||
prefix: /_error
|
||||
|
||||
_main:
|
||||
resource: routing.yml
|
||||
|
||||
3
app/config/routing_rest.yml
Normal file
3
app/config/routing_rest.yml
Normal file
@ -0,0 +1,3 @@
|
||||
Rest_Wallabag:
|
||||
type : rest
|
||||
resource: "@WallabagApiBundle/Resources/config/routing_rest.yml"
|
||||
@ -3,16 +3,14 @@ security:
|
||||
FOS\UserBundle\Model\UserInterface: sha512
|
||||
|
||||
role_hierarchy:
|
||||
ROLE_ADMIN: ROLE_USER
|
||||
ROLE_ADMIN: ROLE_USER
|
||||
ROLE_SUPER_ADMIN: [ ROLE_USER, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH ]
|
||||
|
||||
providers:
|
||||
administrators:
|
||||
entity:
|
||||
class: 'Wallabag\Entity\User'
|
||||
property: username
|
||||
entity: { class: WallabagUserBundle:User, property: username }
|
||||
fos_userbundle:
|
||||
id: fos_user.user_provider.username_email
|
||||
id: fos_user.user_provider.username
|
||||
|
||||
# the main part of the security, where you can set up firewalls
|
||||
# for specific sections of your app
|
||||
@ -31,10 +29,9 @@ security:
|
||||
fos_oauth: true
|
||||
stateless: true
|
||||
anonymous: true
|
||||
provider: fos_userbundle
|
||||
|
||||
login_firewall:
|
||||
pattern: ^/login$
|
||||
pattern: ^/login$
|
||||
anonymous: ~
|
||||
|
||||
secured_area:
|
||||
@ -43,37 +40,21 @@ security:
|
||||
provider: fos_userbundle
|
||||
csrf_token_generator: security.csrf.token_manager
|
||||
|
||||
anonymous: true
|
||||
anonymous: true
|
||||
remember_me:
|
||||
secret: "%secret%"
|
||||
secret: "%secret%"
|
||||
lifetime: 31536000
|
||||
path: /
|
||||
domain: ~
|
||||
path: /
|
||||
domain: ~
|
||||
|
||||
logout:
|
||||
path: /logout
|
||||
target: /
|
||||
|
||||
two_factor:
|
||||
provider: fos_userbundle
|
||||
auth_form_path: 2fa_login
|
||||
check_path: 2fa_login_check
|
||||
|
||||
access_control:
|
||||
- { path: ^/api/(doc|version|info|user), roles: IS_AUTHENTICATED_ANONYMOUSLY }
|
||||
- { path: ^/api/doc, roles: IS_AUTHENTICATED_ANONYMOUSLY }
|
||||
- { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
|
||||
# force role for logout otherwise when 2fa enable, you won't be able to logout
|
||||
# https://github.com/scheb/two-factor-bundle/issues/168#issuecomment-430822478
|
||||
- { path: ^/logout, roles: [IS_AUTHENTICATED_ANONYMOUSLY, IS_AUTHENTICATED_2FA_IN_PROGRESS] }
|
||||
- { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY }
|
||||
- { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY }
|
||||
- { path: /(unread|starred|archive|annotated|all).xml$, roles: IS_AUTHENTICATED_ANONYMOUSLY }
|
||||
- { path: ^/locale, role: IS_AUTHENTICATED_ANONYMOUSLY }
|
||||
- { path: /tags/(.*).xml$, roles: IS_AUTHENTICATED_ANONYMOUSLY }
|
||||
- { path: ^/feed, roles: IS_AUTHENTICATED_ANONYMOUSLY }
|
||||
- { path: /(unread|starred|archive|annotated).xml$, roles: IS_AUTHENTICATED_ANONYMOUSLY } # For backwards compatibility
|
||||
- { path: ^/share, roles: IS_AUTHENTICATED_ANONYMOUSLY }
|
||||
- { path: ^/settings, roles: ROLE_SUPER_ADMIN }
|
||||
- { path: ^/annotations, roles: ROLE_USER }
|
||||
- { path: ^/2fa, role: IS_AUTHENTICATED_2FA_IN_PROGRESS }
|
||||
- { path: /(unread|starred|archive).xml$, roles: IS_AUTHENTICATED_ANONYMOUSLY }
|
||||
- { path: ^/, roles: ROLE_USER }
|
||||
|
||||
@ -1,362 +1,32 @@
|
||||
imports:
|
||||
- { resource: services_rabbit.yml }
|
||||
- { resource: services_redis.yml }
|
||||
- { resource: parameters_addons.yml }
|
||||
|
||||
parameters:
|
||||
spiriit_form_filter.get_filter.doctrine_orm.class: Wallabag\Event\Subscriber\CustomDoctrineORMSubscriber
|
||||
lexik_form_filter.get_filter.doctrine_orm.class: Wallabag\CoreBundle\Event\Subscriber\CustomDoctrineORMSubscriber
|
||||
|
||||
services:
|
||||
_defaults:
|
||||
autowire: true
|
||||
autoconfigure: true
|
||||
public: true
|
||||
bind:
|
||||
$projectDir: '%kernel.project_dir%'
|
||||
$debug: '%kernel.debug%'
|
||||
$defaultLocale: '%kernel.default_locale%'
|
||||
$wallabagUrl: '%domain_name%'
|
||||
$tablePrefix: "%database_table_prefix%"
|
||||
$encryptionKeyPath: "%wallabag.site_credentials.encryption_key_path%"
|
||||
$fetchingErrorMessageTitle: "%wallabag.fetching_error_message_title%"
|
||||
$fetchingErrorMessage: '%wallabag.fetching_error_message%'
|
||||
$languages: '%wallabag.languages%'
|
||||
$lifeTime: '%wallabag.cache_lifetime%'
|
||||
$logoPath: 'web/img/appicon/apple-touch-icon-152.png'
|
||||
$registrationEnabled: '%fosuser_registration%'
|
||||
$restrictedAccess: '@=service(''craue_config'').get(''restricted_access'')'
|
||||
$senderEmail: "%scheb_two_factor.email.sender_email%"
|
||||
$senderName: "%scheb_two_factor.email.sender_name%"
|
||||
$storeArticleHeaders: '@=service(''craue_config'').get(''store_article_headers'')'
|
||||
$supportUrl: '@=service(''craue_config'').get(''wallabag_support_url'')'
|
||||
$fonts: '%wallabag.fonts%'
|
||||
$defaultIgnoreOriginInstanceRules: '%wallabag.default_ignore_origin_instance_rules%'
|
||||
|
||||
Wallabag\:
|
||||
resource: '../../src/*'
|
||||
exclude: ['../../src/{Consumer,Controller,Entity,DataFixtures,Redis}', '../../src/Event/*Event.php']
|
||||
|
||||
# controllers are imported separately to make sure services can be injected
|
||||
# as action arguments even if you don't extend any base controller class
|
||||
Wallabag\Controller\:
|
||||
resource: '../../src/Controller/'
|
||||
tags: ['controller.service_arguments']
|
||||
|
||||
# inject alias service into controllers
|
||||
Wallabag\Controller\Import\ChromeController:
|
||||
# used for tests
|
||||
filesystem_cache:
|
||||
class: Doctrine\Common\Cache\FilesystemCache
|
||||
arguments:
|
||||
$rabbitMqProducer: '@old_sound_rabbit_mq.import_chrome_producer'
|
||||
$redisProducer: '@wallabag.producer.redis.chrome'
|
||||
- %kernel.cache_dir%/doctrine/metadata
|
||||
|
||||
Wallabag\Controller\Import\DeliciousController:
|
||||
arguments:
|
||||
$rabbitMqProducer: '@old_sound_rabbit_mq.import_delicious_producer'
|
||||
$redisProducer: '@wallabag.producer.redis.delicious'
|
||||
twig.extension.text:
|
||||
class: Twig_Extensions_Extension_Text
|
||||
tags:
|
||||
- { name: twig.extension }
|
||||
|
||||
Wallabag\Controller\Import\ElcuratorController:
|
||||
arguments:
|
||||
$rabbitMqProducer: '@old_sound_rabbit_mq.import_elcurator_producer'
|
||||
$redisProducer: '@wallabag.producer.redis.elcurator'
|
||||
|
||||
Wallabag\Controller\Import\OmnivoreController:
|
||||
arguments:
|
||||
$rabbitMqProducer: '@old_sound_rabbit_mq.import_omnivore_producer'
|
||||
$redisProducer: '@wallabag.producer.redis.omnivore'
|
||||
|
||||
Wallabag\Controller\Import\FirefoxController:
|
||||
arguments:
|
||||
$rabbitMqProducer: '@old_sound_rabbit_mq.import_firefox_producer'
|
||||
$redisProducer: '@wallabag.producer.redis.firefox'
|
||||
|
||||
Wallabag\Controller\Import\InstapaperController:
|
||||
arguments:
|
||||
$rabbitMqProducer: '@old_sound_rabbit_mq.import_instapaper_producer'
|
||||
$redisProducer: '@wallabag.producer.redis.instapaper'
|
||||
|
||||
Wallabag\Controller\Import\PinboardController:
|
||||
arguments:
|
||||
$rabbitMqProducer: '@old_sound_rabbit_mq.import_pinboard_producer'
|
||||
$redisProducer: '@wallabag.producer.redis.pinboard'
|
||||
|
||||
Wallabag\Controller\Import\PocketController:
|
||||
arguments:
|
||||
$rabbitMqProducer: '@old_sound_rabbit_mq.import_pocket_producer'
|
||||
$redisProducer: '@wallabag.producer.redis.pocket'
|
||||
|
||||
Wallabag\Controller\Import\ReadabilityController:
|
||||
arguments:
|
||||
$rabbitMqProducer: '@old_sound_rabbit_mq.import_readability_producer'
|
||||
$redisProducer: '@wallabag.producer.redis.readability'
|
||||
|
||||
Wallabag\Controller\Import\WallabagV1Controller:
|
||||
arguments:
|
||||
$rabbitMqProducer: '@old_sound_rabbit_mq.import_wallabag_v1_producer'
|
||||
$redisProducer: '@wallabag.producer.redis.wallabag_v1'
|
||||
|
||||
Wallabag\Controller\Import\WallabagV2Controller:
|
||||
arguments:
|
||||
$rabbitMqProducer: '@old_sound_rabbit_mq.import_wallabag_v2_producer'
|
||||
$redisProducer: '@wallabag.producer.redis.wallabag_v2'
|
||||
|
||||
Wallabag\Controller\Import\ShaarliController:
|
||||
arguments:
|
||||
$rabbitMqProducer: '@old_sound_rabbit_mq.import_shaarli_producer'
|
||||
$redisProducer: '@wallabag.producer.redis.shaarli'
|
||||
|
||||
Wallabag\Controller\Import\PocketHtmlController:
|
||||
arguments:
|
||||
$rabbitMqProducer: '@old_sound_rabbit_mq.import_pocket_html_producer'
|
||||
$redisProducer: '@wallabag.producer.redis.pocket_html'
|
||||
|
||||
Wallabag\Doctrine\MigrationFactoryDecorator:
|
||||
decorates: doctrine.migrations.migrations_factory
|
||||
|
||||
Doctrine\DBAL\Connection:
|
||||
alias: doctrine.dbal.default_connection
|
||||
|
||||
Doctrine\ORM\EntityManagerInterface:
|
||||
alias: doctrine.orm.entity_manager
|
||||
|
||||
Doctrine\Migrations\Metadata\Storage\TableMetadataStorageConfiguration:
|
||||
alias: doctrine.migrations.storage.table_storage
|
||||
|
||||
Doctrine\Persistence\ManagerRegistry:
|
||||
alias: doctrine
|
||||
|
||||
Craue\ConfigBundle\Util\Config:
|
||||
alias: craue_config
|
||||
|
||||
JMS\Serializer\SerializerInterface:
|
||||
alias: jms_serializer
|
||||
|
||||
Spiriit\Bundle\FormFilterBundle\Filter\FilterBuilderUpdaterInterface:
|
||||
alias: spiriit_form_filter.query_builder_updater
|
||||
|
||||
Scheb\TwoFactorBundle\Security\TwoFactor\Provider\Google\GoogleAuthenticatorInterface:
|
||||
alias: scheb_two_factor.security.google_authenticator
|
||||
|
||||
Symfony\Component\HttpFoundation\Session\SessionInterface:
|
||||
alias: session
|
||||
|
||||
Symfony\Component\EventDispatcher\EventDispatcherInterface:
|
||||
alias: event_dispatcher
|
||||
|
||||
Symfony\Component\Form\FormFactoryInterface:
|
||||
alias: form.factory
|
||||
|
||||
Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface:
|
||||
alias: security.token_storage
|
||||
|
||||
Symfony\Component\Security\Core\Authorization\AuthorizationCheckerInterface:
|
||||
alias: security.authorization_checker
|
||||
|
||||
Symfony\Component\Translation\TranslatorInterface:
|
||||
alias: translator
|
||||
|
||||
Symfony\Component\Validator\Validator\ValidatorInterface:
|
||||
alias: validator
|
||||
|
||||
FOS\UserBundle\Model\UserManagerInterface:
|
||||
alias: fos_user.user_manager
|
||||
|
||||
MatomoTwigExtension\MatomoTwigExtension:
|
||||
wallabag.twig_extension:
|
||||
class: Wallabag\CoreBundle\Twig\WallabagExtension
|
||||
public: false
|
||||
tags:
|
||||
- { name: twig.extension }
|
||||
|
||||
ScssPhp\ScssPhp\Compiler:
|
||||
public: false
|
||||
wallabag.locale_listener:
|
||||
class: Wallabag\CoreBundle\EventListener\LocaleListener
|
||||
arguments: ["%kernel.default_locale%"]
|
||||
tags:
|
||||
- { name: kernel.event_subscriber }
|
||||
|
||||
Wallabag\Event\Listener\UserLocaleListener:
|
||||
wallabag.user_locale_listener:
|
||||
class: Wallabag\CoreBundle\EventListener\UserLocaleListener
|
||||
arguments: ["@session"]
|
||||
tags:
|
||||
- { name: kernel.event_listener, event: security.interactive_login, method: onInteractiveLogin }
|
||||
|
||||
craue_config_cache_provider:
|
||||
class: Symfony\Component\Cache\Adapter\FilesystemAdapter
|
||||
public: false
|
||||
arguments:
|
||||
$namespace: 'craue_config'
|
||||
$defaultLifetime: 0
|
||||
$directory: '%kernel.cache_dir%'
|
||||
|
||||
Wallabag\ParamConverter\UsernameFeedTokenConverter:
|
||||
tags:
|
||||
- { name: request.param_converter, converter: username_feed_token_converter }
|
||||
|
||||
Wallabag\Event\Subscriber\TablePrefixSubscriber:
|
||||
tags:
|
||||
- { name: doctrine.event_subscriber }
|
||||
|
||||
Wallabag\Event\Subscriber\SchemaAdapterSubscriber:
|
||||
arguments:
|
||||
$databaseTablePrefix: "%database_table_prefix%"
|
||||
tags:
|
||||
- { name: doctrine.event_subscriber }
|
||||
|
||||
psr18.wallabag.client:
|
||||
class: Symfony\Component\HttpClient\Psr18Client
|
||||
arguments:
|
||||
$client: '@Wallabag\HttpClient\WallabagClient'
|
||||
|
||||
Graby\Graby:
|
||||
arguments:
|
||||
$config:
|
||||
error_message: '%wallabag.fetching_error_message%'
|
||||
error_message_title: '%wallabag.fetching_error_message_title%'
|
||||
$client: '@psr18.wallabag.client'
|
||||
calls:
|
||||
- [ setLogger, [ "@logger" ] ]
|
||||
tags:
|
||||
- { name: monolog.logger, channel: graby }
|
||||
|
||||
Graby\SiteConfig\ConfigBuilder:
|
||||
arguments:
|
||||
$config: {}
|
||||
|
||||
Wallabag\SiteConfig\GrabySiteConfigBuilder:
|
||||
tags:
|
||||
- { name: monolog.logger, channel: graby }
|
||||
|
||||
# service alias override
|
||||
Wallabag\SiteConfig\SiteConfigBuilder:
|
||||
alias: Wallabag\SiteConfig\GrabySiteConfigBuilder
|
||||
|
||||
Symfony\Component\BrowserKit\HttpBrowser:
|
||||
arguments:
|
||||
$client: '@browser.client'
|
||||
|
||||
RulerZ\RulerZ:
|
||||
alias: rulerz
|
||||
|
||||
Wallabag\Operator\PHP\Matches:
|
||||
tags:
|
||||
- { name: rulerz.operator, target: native, operator: matches }
|
||||
|
||||
Wallabag\Operator\Doctrine\Matches:
|
||||
tags:
|
||||
- { name: rulerz.operator, target: doctrine, operator: matches, inline: true }
|
||||
|
||||
Wallabag\Operator\PHP\NotMatches:
|
||||
tags:
|
||||
- { name: rulerz.operator, target: native, operator: notmatches }
|
||||
|
||||
Wallabag\Operator\Doctrine\NotMatches:
|
||||
tags:
|
||||
- { name: rulerz.operator, target: doctrine, operator: notmatches, inline: true }
|
||||
|
||||
Wallabag\Operator\PHP\PatternMatches:
|
||||
tags:
|
||||
- { name: rulerz.operator, target: native, operator: "~" }
|
||||
|
||||
Predis\Client:
|
||||
arguments:
|
||||
$parameters:
|
||||
scheme: '%redis_scheme%'
|
||||
host: '%redis_host%'
|
||||
port: '%redis_port%'
|
||||
path: '%redis_path%'
|
||||
password: '%redis_password%'
|
||||
|
||||
Wallabag\Event\Subscriber\SQLiteCascadeDeleteSubscriber:
|
||||
tags:
|
||||
- { name: doctrine.event_subscriber }
|
||||
|
||||
Wallabag\Event\Subscriber\DownloadImagesSubscriber:
|
||||
arguments:
|
||||
$enabled: '@=service(''craue_config'').get(''download_images_enabled'')'
|
||||
|
||||
Wallabag\Helper\DownloadImages:
|
||||
arguments:
|
||||
$baseFolder: "%kernel.project_dir%/web/assets/images"
|
||||
|
||||
Wallabag\Command\InstallCommand:
|
||||
arguments:
|
||||
$databaseDriver: '%database_driver%'
|
||||
$defaultSettings: '%wallabag.default_internal_settings%'
|
||||
$defaultIgnoreOriginInstanceRules: '%wallabag.default_ignore_origin_instance_rules%'
|
||||
|
||||
Wallabag\Mailer\UserMailer:
|
||||
arguments:
|
||||
$parameters:
|
||||
template:
|
||||
confirmation: '%fos_user.registration.confirmation.template%'
|
||||
resetting: '%fos_user.resetting.email.template%'
|
||||
from_email:
|
||||
confirmation: '%fos_user.registration.confirmation.from_email%'
|
||||
resetting: '%fos_user.resetting.email.from_email%'
|
||||
|
||||
Wallabag\Event\Listener\CreateConfigListener:
|
||||
arguments:
|
||||
$itemsOnPage: "%wallabag.items_on_page%"
|
||||
$feedLimit: "%wallabag.feed_limit%"
|
||||
$language: "%wallabag.language%"
|
||||
$readingSpeed: "%wallabag.reading_speed%"
|
||||
$actionMarkAsRead: "%wallabag.action_mark_as_read%"
|
||||
$listMode: "%wallabag.list_mode%"
|
||||
$displayThumbnails: "%wallabag.display_thumbnails%"
|
||||
|
||||
Wallabag\Event\Listener\AuthenticationFailureListener:
|
||||
tags:
|
||||
- { name: kernel.event_listener, event: security.authentication.failure, method: onAuthenticationFailure }
|
||||
|
||||
Wallabag\Import\PocketImport:
|
||||
calls:
|
||||
- [ setClient, [ '@Symfony\Contracts\HttpClient\HttpClientInterface $pocketClient' ] ]
|
||||
tags:
|
||||
- { name: wallabag.import, alias: pocket }
|
||||
|
||||
Wallabag\Import\WallabagV1Import:
|
||||
tags:
|
||||
- { name: wallabag.import, alias: wallabag_v1 }
|
||||
|
||||
Wallabag\Import\WallabagV2Import:
|
||||
tags:
|
||||
- { name: wallabag.import, alias: wallabag_v2 }
|
||||
|
||||
Wallabag\Import\ElcuratorImport:
|
||||
tags:
|
||||
- { name: wallabag.import, alias: elcurator }
|
||||
|
||||
Wallabag\Import\ReadabilityImport:
|
||||
tags:
|
||||
- { name: wallabag.import, alias: readability }
|
||||
|
||||
Wallabag\Import\InstapaperImport:
|
||||
tags:
|
||||
- { name: wallabag.import, alias: instapaper }
|
||||
|
||||
Wallabag\Import\PinboardImport:
|
||||
tags:
|
||||
- { name: wallabag.import, alias: pinboard }
|
||||
|
||||
Wallabag\Import\DeliciousImport:
|
||||
tags:
|
||||
- { name: wallabag.import, alias: delicious }
|
||||
|
||||
Wallabag\Import\OmnivoreImport:
|
||||
tags:
|
||||
- { name: wallabag.import, alias: omnivore }
|
||||
|
||||
Wallabag\Import\FirefoxImport:
|
||||
tags:
|
||||
- { name: wallabag.import, alias: firefox }
|
||||
|
||||
Wallabag\Import\ChromeImport:
|
||||
tags:
|
||||
- { name: wallabag.import, alias: chrome }
|
||||
|
||||
Wallabag\Import\ShaarliImport:
|
||||
tags:
|
||||
- { name: wallabag.import, alias: shaarli }
|
||||
|
||||
Wallabag\Import\PocketHtmlImport:
|
||||
tags:
|
||||
- { name: wallabag.import, alias: pocket_html }
|
||||
|
||||
# to factorize the proximity and bypass translation for prev & next
|
||||
pagerfanta.view.default_wallabag:
|
||||
class: Pagerfanta\View\OptionableView
|
||||
arguments:
|
||||
- '@pagerfanta.view.twitter_bootstrap'
|
||||
- { proximity: 1, prev_message: "<", next_message: ">" }
|
||||
public: false
|
||||
tags:
|
||||
- { name: pagerfanta.view, alias: default_wallabag }
|
||||
|
||||
@ -1,88 +0,0 @@
|
||||
# RabbitMQ stuff
|
||||
services:
|
||||
_defaults:
|
||||
autowire: true
|
||||
autoconfigure: true
|
||||
public: true
|
||||
|
||||
Wallabag\Consumer\RabbitMQConsumerTotalProxy:
|
||||
lazy: true
|
||||
arguments:
|
||||
$pocketConsumer: '@old_sound_rabbit_mq.import_pocket_consumer'
|
||||
$readabilityConsumer: '@old_sound_rabbit_mq.import_readability_consumer'
|
||||
$wallabagV1Consumer: '@old_sound_rabbit_mq.import_wallabag_v1_consumer'
|
||||
$wallabagV2Consumer: '@old_sound_rabbit_mq.import_wallabag_v2_consumer'
|
||||
$firefoxConsumer: '@old_sound_rabbit_mq.import_firefox_consumer'
|
||||
$chromeConsumer: '@old_sound_rabbit_mq.import_chrome_consumer'
|
||||
$instapaperConsumer: '@old_sound_rabbit_mq.import_instapaper_consumer'
|
||||
$pinboardConsumer: '@old_sound_rabbit_mq.import_pinboard_consumer'
|
||||
$deliciousConsumer: '@old_sound_rabbit_mq.import_delicious_consumer'
|
||||
$elcuratorConsumer: '@old_sound_rabbit_mq.import_elcurator_consumer'
|
||||
$shaarliConsumer: '@old_sound_rabbit_mq.import_shaarli_consumer'
|
||||
$pocketHtmlConsumer: '@old_sound_rabbit_mq.import_pocket_html_consumer'
|
||||
$omnivoreConsumer: '@old_sound_rabbit_mq.import_omnivore_consumer'
|
||||
|
||||
wallabag.consumer.amqp.pocket:
|
||||
class: Wallabag\Consumer\AMQPEntryConsumer
|
||||
arguments:
|
||||
$import: '@Wallabag\Import\PocketImport'
|
||||
|
||||
wallabag.consumer.amqp.readability:
|
||||
class: Wallabag\Consumer\AMQPEntryConsumer
|
||||
arguments:
|
||||
$import: '@Wallabag\Import\ReadabilityImport'
|
||||
|
||||
wallabag.consumer.amqp.instapaper:
|
||||
class: Wallabag\Consumer\AMQPEntryConsumer
|
||||
arguments:
|
||||
$import: '@Wallabag\Import\InstapaperImport'
|
||||
|
||||
wallabag.consumer.amqp.pinboard:
|
||||
class: Wallabag\Consumer\AMQPEntryConsumer
|
||||
arguments:
|
||||
$import: '@Wallabag\Import\PinboardImport'
|
||||
|
||||
wallabag.consumer.amqp.delicious:
|
||||
class: Wallabag\Consumer\AMQPEntryConsumer
|
||||
arguments:
|
||||
$import: '@Wallabag\Import\DeliciousImport'
|
||||
|
||||
wallabag.consumer.amqp.omnivore:
|
||||
class: Wallabag\Consumer\AMQPEntryConsumer
|
||||
arguments:
|
||||
$import: '@Wallabag\Import\OmnivoreImport'
|
||||
|
||||
wallabag.consumer.amqp.wallabag_v1:
|
||||
class: Wallabag\Consumer\AMQPEntryConsumer
|
||||
arguments:
|
||||
$import: '@Wallabag\Import\WallabagV1Import'
|
||||
|
||||
wallabag.consumer.amqp.wallabag_v2:
|
||||
class: Wallabag\Consumer\AMQPEntryConsumer
|
||||
arguments:
|
||||
$import: '@Wallabag\Import\WallabagV2Import'
|
||||
|
||||
wallabag.consumer.amqp.elcurator:
|
||||
class: Wallabag\Consumer\AMQPEntryConsumer
|
||||
arguments:
|
||||
$import: '@Wallabag\Import\ElcuratorImport'
|
||||
|
||||
wallabag.consumer.amqp.firefox:
|
||||
class: Wallabag\Consumer\AMQPEntryConsumer
|
||||
arguments:
|
||||
$import: '@Wallabag\Import\FirefoxImport'
|
||||
|
||||
wallabag.consumer.amqp.chrome:
|
||||
class: Wallabag\Consumer\AMQPEntryConsumer
|
||||
arguments:
|
||||
$import: '@Wallabag\Import\ChromeImport'
|
||||
|
||||
wallabag.consumer.amqp.shaarli:
|
||||
class: Wallabag\Consumer\AMQPEntryConsumer
|
||||
arguments:
|
||||
$import: '@Wallabag\Import\ShaarliImport'
|
||||
|
||||
wallabag.consumer.amqp.pocket_html:
|
||||
class: Wallabag\Consumer\AMQPEntryConsumer
|
||||
arguments:
|
||||
$import: '@Wallabag\Import\PocketHtmlImport'
|
||||
@ -1,214 +0,0 @@
|
||||
# Redis stuff
|
||||
services:
|
||||
_defaults:
|
||||
autowire: true
|
||||
autoconfigure: true
|
||||
public: true
|
||||
|
||||
# readability
|
||||
wallabag.queue.redis.readability:
|
||||
class: Simpleue\Queue\RedisQueue
|
||||
arguments:
|
||||
$queueName: "wallabag.import.readability"
|
||||
|
||||
wallabag.producer.redis.readability:
|
||||
class: Wallabag\Redis\Producer
|
||||
arguments:
|
||||
- "@wallabag.queue.redis.readability"
|
||||
|
||||
wallabag.consumer.redis.readability:
|
||||
class: Wallabag\Consumer\RedisEntryConsumer
|
||||
arguments:
|
||||
$import: '@Wallabag\Import\ReadabilityImport'
|
||||
|
||||
# instapaper
|
||||
wallabag.queue.redis.instapaper:
|
||||
class: Simpleue\Queue\RedisQueue
|
||||
arguments:
|
||||
$queueName: "wallabag.import.instapaper"
|
||||
|
||||
wallabag.producer.redis.instapaper:
|
||||
class: Wallabag\Redis\Producer
|
||||
arguments:
|
||||
- "@wallabag.queue.redis.instapaper"
|
||||
|
||||
wallabag.consumer.redis.instapaper:
|
||||
class: Wallabag\Consumer\RedisEntryConsumer
|
||||
arguments:
|
||||
$import: '@Wallabag\Import\InstapaperImport'
|
||||
|
||||
# pinboard
|
||||
wallabag.queue.redis.pinboard:
|
||||
class: Simpleue\Queue\RedisQueue
|
||||
arguments:
|
||||
$queueName: "wallabag.import.pinboard"
|
||||
|
||||
wallabag.producer.redis.pinboard:
|
||||
class: Wallabag\Redis\Producer
|
||||
arguments:
|
||||
- "@wallabag.queue.redis.pinboard"
|
||||
|
||||
wallabag.consumer.redis.pinboard:
|
||||
class: Wallabag\Consumer\RedisEntryConsumer
|
||||
arguments:
|
||||
$import: '@Wallabag\Import\PinboardImport'
|
||||
|
||||
# delicious
|
||||
wallabag.queue.redis.delicious:
|
||||
class: Simpleue\Queue\RedisQueue
|
||||
arguments:
|
||||
$queueName: "wallabag.import.delicious"
|
||||
|
||||
wallabag.producer.redis.delicious:
|
||||
class: Wallabag\Redis\Producer
|
||||
arguments:
|
||||
- "@wallabag.queue.redis.delicious"
|
||||
|
||||
wallabag.consumer.redis.delicious:
|
||||
class: Wallabag\Consumer\RedisEntryConsumer
|
||||
arguments:
|
||||
$import: '@Wallabag\Import\DeliciousImport'
|
||||
|
||||
# Omnivore
|
||||
wallabag.queue.redis.omnivore:
|
||||
class: Simpleue\Queue\RedisQueue
|
||||
arguments:
|
||||
$queueName: "wallabag.import.omnivore"
|
||||
|
||||
wallabag.producer.redis.omnivore:
|
||||
class: Wallabag\Redis\Producer
|
||||
arguments:
|
||||
- "@wallabag.queue.redis.omnivore"
|
||||
|
||||
wallabag.consumer.redis.omnivore:
|
||||
class: Wallabag\Consumer\RedisEntryConsumer
|
||||
arguments:
|
||||
$import: '@Wallabag\Import\OmnivoreImport'
|
||||
|
||||
# pocket
|
||||
wallabag.queue.redis.pocket:
|
||||
class: Simpleue\Queue\RedisQueue
|
||||
arguments:
|
||||
$queueName: "wallabag.import.pocket"
|
||||
|
||||
wallabag.producer.redis.pocket:
|
||||
class: Wallabag\Redis\Producer
|
||||
arguments:
|
||||
- "@wallabag.queue.redis.pocket"
|
||||
|
||||
wallabag.consumer.redis.pocket:
|
||||
class: Wallabag\Consumer\RedisEntryConsumer
|
||||
arguments:
|
||||
$import: '@Wallabag\Import\PocketImport'
|
||||
|
||||
# wallabag v1
|
||||
wallabag.queue.redis.wallabag_v1:
|
||||
class: Simpleue\Queue\RedisQueue
|
||||
arguments:
|
||||
$queueName: "wallabag.import.wallabag_v1"
|
||||
|
||||
wallabag.producer.redis.wallabag_v1:
|
||||
class: Wallabag\Redis\Producer
|
||||
arguments:
|
||||
- "@wallabag.queue.redis.wallabag_v1"
|
||||
|
||||
wallabag.consumer.redis.wallabag_v1:
|
||||
class: Wallabag\Consumer\RedisEntryConsumer
|
||||
arguments:
|
||||
$import: '@Wallabag\Import\WallabagV1Import'
|
||||
|
||||
# wallabag v2
|
||||
wallabag.queue.redis.wallabag_v2:
|
||||
class: Simpleue\Queue\RedisQueue
|
||||
arguments:
|
||||
$queueName: "wallabag.import.wallabag_v2"
|
||||
|
||||
wallabag.producer.redis.wallabag_v2:
|
||||
class: Wallabag\Redis\Producer
|
||||
arguments:
|
||||
- "@wallabag.queue.redis.wallabag_v2"
|
||||
|
||||
wallabag.consumer.redis.wallabag_v2:
|
||||
class: Wallabag\Consumer\RedisEntryConsumer
|
||||
arguments:
|
||||
$import: '@Wallabag\Import\WallabagV2Import'
|
||||
|
||||
# elcurator
|
||||
wallabag.queue.redis.elcurator:
|
||||
class: Simpleue\Queue\RedisQueue
|
||||
arguments:
|
||||
$queueName: "wallabag.import.elcurator"
|
||||
|
||||
wallabag.producer.redis.elcurator:
|
||||
class: Wallabag\Redis\Producer
|
||||
arguments:
|
||||
- "@wallabag.queue.redis.elcurator"
|
||||
|
||||
wallabag.consumer.redis.elcurator:
|
||||
class: Wallabag\Consumer\RedisEntryConsumer
|
||||
arguments:
|
||||
$import: '@Wallabag\Import\ElcuratorImport'
|
||||
|
||||
# firefox
|
||||
wallabag.queue.redis.firefox:
|
||||
class: Simpleue\Queue\RedisQueue
|
||||
arguments:
|
||||
$queueName: "wallabag.import.firefox"
|
||||
|
||||
wallabag.producer.redis.firefox:
|
||||
class: Wallabag\Redis\Producer
|
||||
arguments:
|
||||
- "@wallabag.queue.redis.firefox"
|
||||
|
||||
wallabag.consumer.redis.firefox:
|
||||
class: Wallabag\Consumer\RedisEntryConsumer
|
||||
arguments:
|
||||
$import: '@Wallabag\Import\FirefoxImport'
|
||||
|
||||
# chrome
|
||||
wallabag.queue.redis.chrome:
|
||||
class: Simpleue\Queue\RedisQueue
|
||||
arguments:
|
||||
$queueName: "wallabag.import.chrome"
|
||||
|
||||
wallabag.producer.redis.chrome:
|
||||
class: Wallabag\Redis\Producer
|
||||
arguments:
|
||||
- "@wallabag.queue.redis.chrome"
|
||||
|
||||
wallabag.consumer.redis.chrome:
|
||||
class: Wallabag\Consumer\RedisEntryConsumer
|
||||
arguments:
|
||||
$import: '@Wallabag\Import\ChromeImport'
|
||||
|
||||
# shaarli
|
||||
wallabag.queue.redis.shaarli:
|
||||
class: Simpleue\Queue\RedisQueue
|
||||
arguments:
|
||||
$queueName: "wallabag.import.shaarli"
|
||||
|
||||
wallabag.producer.redis.shaarli:
|
||||
class: Wallabag\Redis\Producer
|
||||
arguments:
|
||||
- "@wallabag.queue.redis.shaarli"
|
||||
|
||||
wallabag.consumer.redis.shaarli:
|
||||
class: Wallabag\Consumer\RedisEntryConsumer
|
||||
arguments:
|
||||
$import: '@Wallabag\Import\ShaarliImport'
|
||||
|
||||
# pocket html
|
||||
wallabag.queue.redis.pocket_html:
|
||||
class: Simpleue\Queue\RedisQueue
|
||||
arguments:
|
||||
$queueName: "wallabag.import.pocket_html"
|
||||
|
||||
wallabag.producer.redis.pocket_html:
|
||||
class: Wallabag\Redis\Producer
|
||||
arguments:
|
||||
- "@wallabag.queue.redis.pocket_html"
|
||||
|
||||
wallabag.consumer.redis.pocket_html:
|
||||
class: Wallabag\Consumer\RedisEntryConsumer
|
||||
arguments:
|
||||
$import: '@Wallabag\Import\PocketHtmlImport'
|
||||
@ -1,14 +0,0 @@
|
||||
services:
|
||||
filesystem_cache:
|
||||
class: Doctrine\Common\Cache\FilesystemCache
|
||||
arguments:
|
||||
- "%kernel.cache_dir%/doctrine/metadata"
|
||||
|
||||
# fixtures
|
||||
Wallabag\DataFixtures\:
|
||||
bind:
|
||||
$defaultIgnoreOriginInstanceRules: '%wallabag.default_ignore_origin_instance_rules%'
|
||||
$defaultInternalSettings: '%wallabag.default_internal_settings%'
|
||||
resource: '../../fixtures/*'
|
||||
tags: ['doctrine.fixture.orm']
|
||||
autowire: true
|
||||
65
app/config/tests/parameters.yml.dist.mysql
Normal file
65
app/config/tests/parameters.yml.dist.mysql
Normal file
@ -0,0 +1,65 @@
|
||||
# This file is a "template" of what your parameters.yml file should look like
|
||||
parameters:
|
||||
database_driver: pdo_sqlite
|
||||
database_host: 127.0.0.1
|
||||
database_port: ~
|
||||
database_name: symfony
|
||||
database_user: root
|
||||
database_password: ~
|
||||
database_path: "%kernel.root_dir%/../data/db/wallabag.sqlite"
|
||||
database_table_prefix: wallabag_
|
||||
|
||||
test_database_driver: pdo_mysql
|
||||
test_database_host: localhost
|
||||
test_database_port: 3306
|
||||
test_database_name: wallabag
|
||||
test_database_user: root
|
||||
test_database_password: ~
|
||||
test_database_path: ~
|
||||
|
||||
mailer_transport: smtp
|
||||
mailer_host: 127.0.0.1
|
||||
mailer_user: ~
|
||||
mailer_password: ~
|
||||
|
||||
locale: en
|
||||
|
||||
# A secret key that's used to generate certain security-related tokens
|
||||
secret: ThisTokenIsNotSoSecretChangeIt
|
||||
|
||||
# wallabag misc
|
||||
app.version: 2.0.0-alpha
|
||||
twofactor_auth: true
|
||||
twofactor_sender: no-reply@wallabag.org
|
||||
|
||||
# message to display at the bottom of the page
|
||||
warning_message: >
|
||||
You're trying wallabag v2, which is in alpha version. If you find a bug, please have a look to <a href="https://github.com/wallabag/wallabag/issues">our issues list</a> and <a href="https://github.com/wallabag/wallabag/issues/new">open a new if necessary</a>
|
||||
|
||||
download_pictures: false # if true, pictures will be stored into data/assets for each article
|
||||
|
||||
# Entry view
|
||||
share_twitter: true
|
||||
share_mail: true
|
||||
share_shaarli: true
|
||||
shaarli_url: http://myshaarli.com
|
||||
share_diaspora: true
|
||||
diaspora_url: http://diasporapod.com
|
||||
flattr: true
|
||||
carrot: true
|
||||
show_printlink: true
|
||||
export_epub: true
|
||||
export_mobi: true
|
||||
export_pdf: true
|
||||
wallabag_url: http://v2.wallabag.org
|
||||
wallabag_support_url: 'https://www.wallabag.org/pages/support.html'
|
||||
|
||||
# default user config
|
||||
items_on_page: 12
|
||||
theme: material
|
||||
language: en_US
|
||||
from_email: no-reply@wallabag.org
|
||||
rss_limit: 50
|
||||
|
||||
# pocket import
|
||||
pocket_consumer_key: xxxxxxxx
|
||||
65
app/config/tests/parameters.yml.dist.pgsql
Normal file
65
app/config/tests/parameters.yml.dist.pgsql
Normal file
@ -0,0 +1,65 @@
|
||||
# This file is a "template" of what your parameters.yml file should look like
|
||||
parameters:
|
||||
database_driver: pdo_sqlite
|
||||
database_host: 127.0.0.1
|
||||
database_port: ~
|
||||
database_name: symfony
|
||||
database_user: root
|
||||
database_password: ~
|
||||
database_path: "%kernel.root_dir%/../data/db/wallabag.sqlite"
|
||||
database_table_prefix: wallabag_
|
||||
|
||||
test_database_driver: pdo_pgsql
|
||||
test_database_host: localhost
|
||||
test_database_port:
|
||||
test_database_name: wallabag
|
||||
test_database_user: travis
|
||||
test_database_password: ~
|
||||
test_database_path: ~
|
||||
|
||||
mailer_transport: smtp
|
||||
mailer_host: 127.0.0.1
|
||||
mailer_user: ~
|
||||
mailer_password: ~
|
||||
|
||||
locale: en
|
||||
|
||||
# A secret key that's used to generate certain security-related tokens
|
||||
secret: ThisTokenIsNotSoSecretChangeIt
|
||||
|
||||
# wallabag misc
|
||||
app.version: 2.0.0-alpha
|
||||
twofactor_auth: true
|
||||
twofactor_sender: no-reply@wallabag.org
|
||||
|
||||
# message to display at the bottom of the page
|
||||
warning_message: >
|
||||
You're trying wallabag v2, which is in alpha version. If you find a bug, please have a look to <a href="https://github.com/wallabag/wallabag/issues">our issues list</a> and <a href="https://github.com/wallabag/wallabag/issues/new">open a new if necessary</a>
|
||||
|
||||
download_pictures: false # if true, pictures will be stored into data/assets for each article
|
||||
|
||||
# Entry view
|
||||
share_twitter: true
|
||||
share_mail: true
|
||||
share_shaarli: true
|
||||
shaarli_url: http://myshaarli.com
|
||||
share_diaspora: true
|
||||
diaspora_url: http://diasporapod.com
|
||||
flattr: true
|
||||
carrot: true
|
||||
show_printlink: true
|
||||
export_epub: true
|
||||
export_mobi: true
|
||||
export_pdf: true
|
||||
wallabag_url: http://v2.wallabag.org
|
||||
wallabag_support_url: 'https://www.wallabag.org/pages/support.html'
|
||||
|
||||
# default user config
|
||||
items_on_page: 12
|
||||
theme: material
|
||||
language: en_US
|
||||
from_email: no-reply@wallabag.org
|
||||
rss_limit: 50
|
||||
|
||||
# pocket import
|
||||
pocket_consumer_key: xxxxxxxx
|
||||
65
app/config/tests/parameters.yml.dist.sqlite
Normal file
65
app/config/tests/parameters.yml.dist.sqlite
Normal file
@ -0,0 +1,65 @@
|
||||
# This file is a "template" of what your parameters.yml file should look like
|
||||
parameters:
|
||||
database_driver: pdo_sqlite
|
||||
database_host: 127.0.0.1
|
||||
database_port: ~
|
||||
database_name: symfony
|
||||
database_user: root
|
||||
database_password: ~
|
||||
database_path: "%kernel.root_dir%/../data/db/wallabag.sqlite"
|
||||
database_table_prefix: wallabag_
|
||||
|
||||
test_database_driver: pdo_sqlite
|
||||
test_database_host: localhost
|
||||
test_database_port:
|
||||
test_database_name: ~
|
||||
test_database_user: ~
|
||||
test_database_password: ~
|
||||
test_database_path: "%kernel.root_dir%/../data/db/wallabag_test.sqlite"
|
||||
|
||||
mailer_transport: smtp
|
||||
mailer_host: 127.0.0.1
|
||||
mailer_user: ~
|
||||
mailer_password: ~
|
||||
|
||||
locale: en
|
||||
|
||||
# A secret key that's used to generate certain security-related tokens
|
||||
secret: ThisTokenIsNotSoSecretChangeIt
|
||||
|
||||
# wallabag misc
|
||||
app.version: 2.0.0-alpha
|
||||
twofactor_auth: true
|
||||
twofactor_sender: no-reply@wallabag.org
|
||||
|
||||
# message to display at the bottom of the page
|
||||
warning_message: >
|
||||
You're trying wallabag v2, which is in alpha version. If you find a bug, please have a look to <a href="https://github.com/wallabag/wallabag/issues">our issues list</a> and <a href="https://github.com/wallabag/wallabag/issues/new">open a new if necessary</a>
|
||||
|
||||
download_pictures: false # if true, pictures will be stored into data/assets for each article
|
||||
|
||||
# Entry view
|
||||
share_twitter: true
|
||||
share_mail: true
|
||||
share_shaarli: true
|
||||
shaarli_url: http://myshaarli.com
|
||||
share_diaspora: true
|
||||
diaspora_url: http://diasporapod.com
|
||||
flattr: true
|
||||
carrot: true
|
||||
show_printlink: true
|
||||
export_epub: true
|
||||
export_mobi: true
|
||||
export_pdf: true
|
||||
wallabag_url: http://v2.wallabag.org
|
||||
wallabag_support_url: 'https://www.wallabag.org/pages/support.html'
|
||||
|
||||
# default user config
|
||||
items_on_page: 12
|
||||
theme: material
|
||||
language: en_US
|
||||
from_email: no-reply@wallabag.org
|
||||
rss_limit: 50
|
||||
|
||||
# pocket import
|
||||
pocket_consumer_key: xxxxxxxx
|
||||
@ -1,2 +0,0 @@
|
||||
parameters:
|
||||
env(DATABASE_URL): mysql://root:root@127.0.0.1:3306/wallabag?charset=utf8mb4
|
||||
@ -1,2 +0,0 @@
|
||||
parameters:
|
||||
env(DATABASE_URL): postgres://wallabag:wallabagrocks@localhost/wallabag?charset=utf8
|
||||
@ -1,2 +0,0 @@
|
||||
parameters:
|
||||
env(DATABASE_URL): sqlite:///%kernel.project_dir%/data/db/wallabag%wallabag_dbname_suffix%.sqlite?charset=utf8
|
||||
@ -1,179 +0,0 @@
|
||||
parameters:
|
||||
wallabag.version: 2.6.10
|
||||
wallabag.paypal_url: "https://liberapay.com/wallabag/donate"
|
||||
wallabag.languages:
|
||||
en: 'English'
|
||||
fr: 'Français'
|
||||
de: 'Deutsch'
|
||||
nl: 'Dutch'
|
||||
th: 'ไทย'
|
||||
tr: 'Türkçe'
|
||||
fa: 'فارسی'
|
||||
ro: 'Română'
|
||||
pl: 'Polish'
|
||||
da: 'Dansk'
|
||||
es: 'Español'
|
||||
oc: 'Occitan'
|
||||
it: 'Italiano'
|
||||
pt: 'Português'
|
||||
ru: 'Русский'
|
||||
ja: '日本語'
|
||||
zh: '简体中文'
|
||||
uk: 'Українська'
|
||||
hr: 'Hrvatski'
|
||||
cs: 'Čeština'
|
||||
el: 'Ελληνικά'
|
||||
gl: 'Galego'
|
||||
wallabag.items_on_page: 12
|
||||
wallabag.language: '%locale%'
|
||||
wallabag.feed_limit: 50
|
||||
wallabag.reading_speed: 200
|
||||
wallabag.cache_lifetime: 10
|
||||
wallabag.action_mark_as_read: 1
|
||||
wallabag.list_mode: 0
|
||||
wallabag.display_thumbnails: 1
|
||||
wallabag.fetching_error_message_title: 'No title found'
|
||||
wallabag.fetching_error_message: |
|
||||
wallabag can't retrieve contents for this article. Please <a href="https://doc.wallabag.org/en/user/errors_during_fetching.html#how-can-i-help-to-fix-that">troubleshoot this issue</a>.
|
||||
wallabag.api_limit_mass_actions: 10
|
||||
wallabag.site_credentials.encryption_key_path: "%kernel.project_dir%/data/site-credentials-secret-key.txt"
|
||||
wallabag.default_internal_settings:
|
||||
-
|
||||
name: share_public
|
||||
value: 1
|
||||
section: entry
|
||||
-
|
||||
name: share_diaspora
|
||||
value: 1
|
||||
section: entry
|
||||
-
|
||||
name: diaspora_url
|
||||
value: https://diasporapod.com
|
||||
section: entry
|
||||
-
|
||||
name: share_unmark
|
||||
value: 1
|
||||
section: entry
|
||||
-
|
||||
name: unmark_url
|
||||
value: https://unmark.it
|
||||
section: entry
|
||||
-
|
||||
name: share_shaarli
|
||||
value: 1
|
||||
section: entry
|
||||
-
|
||||
name: shaarli_url
|
||||
value: https://myshaarli.com
|
||||
section: entry
|
||||
-
|
||||
name: share_linkding
|
||||
value: 1
|
||||
section: entry
|
||||
-
|
||||
name: linkding_url
|
||||
value: https://linkding.example.com
|
||||
section: entry
|
||||
-
|
||||
name: share_mail
|
||||
value: 1
|
||||
section: entry
|
||||
-
|
||||
name: share_twitter
|
||||
value: 1
|
||||
section: entry
|
||||
-
|
||||
name: show_printlink
|
||||
value: 1
|
||||
section: entry
|
||||
-
|
||||
name: restricted_access
|
||||
value: 0
|
||||
section: entry
|
||||
-
|
||||
name: export_epub
|
||||
value: 1
|
||||
section: export
|
||||
-
|
||||
name: export_pdf
|
||||
value: 1
|
||||
section: export
|
||||
-
|
||||
name: export_csv
|
||||
value: 1
|
||||
section: export
|
||||
-
|
||||
name: export_json
|
||||
value: 1
|
||||
section: export
|
||||
-
|
||||
name: export_txt
|
||||
value: 1
|
||||
section: export
|
||||
-
|
||||
name: export_xml
|
||||
value: 1
|
||||
section: export
|
||||
-
|
||||
name: export_md
|
||||
value: 1
|
||||
section: export
|
||||
-
|
||||
name: import_with_redis
|
||||
value: 0
|
||||
section: import
|
||||
-
|
||||
name: import_with_rabbitmq
|
||||
value: 0
|
||||
section: import
|
||||
-
|
||||
name: matomo_enabled
|
||||
value: 0
|
||||
section: analytics
|
||||
-
|
||||
name: matomo_host
|
||||
value: matomo.wallabag.org
|
||||
section: analytics
|
||||
-
|
||||
name: matomo_site_id
|
||||
value: 1
|
||||
section: analytics
|
||||
-
|
||||
name: download_images_enabled
|
||||
value: 0
|
||||
section: misc
|
||||
-
|
||||
name: wallabag_support_url
|
||||
value: https://github.com/wallabag/wallabag/issues/new/choose
|
||||
section: misc
|
||||
-
|
||||
name: api_user_registration
|
||||
value: 0
|
||||
section: api
|
||||
-
|
||||
name: store_article_headers
|
||||
value: 0
|
||||
section: entry
|
||||
-
|
||||
name: shaarli_share_origin_url
|
||||
value: 0
|
||||
section: entry
|
||||
|
||||
wallabag.default_ignore_origin_instance_rules:
|
||||
-
|
||||
rule: host = "feedproxy.google.com"
|
||||
-
|
||||
rule: host = "feeds.reuters.com"
|
||||
-
|
||||
rule: _all ~ "https?://www\.lemonde\.fr/tiny.*"
|
||||
wallabag.fonts:
|
||||
- 'Sans-serif'
|
||||
- 'Serif'
|
||||
- 'Atkinson Hyperlegible'
|
||||
- 'EB Garamond'
|
||||
- 'Lato'
|
||||
- 'Montserrat'
|
||||
- 'OpenDyslexicRegular'
|
||||
- 'Oswald'
|
||||
wallabag.allow_mimetypes: ['application/octet-stream', 'application/json', 'text/plain', 'text/csv', 'text/html']
|
||||
wallabag.resource_dir: "%kernel.project_dir%/web/uploads/import"
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 891 B |
@ -1 +0,0 @@
|
||||
<svg clip-rule="evenodd" fill-rule="evenodd" height="512" stroke-linejoin="round" stroke-miterlimit="1.5" viewBox="0 0 512 512" width="512" xmlns="http://www.w3.org/2000/svg"><circle cx="255.0164" cy="254.9236" fill="#5856e0" r="224.78528" stroke-width="1.18"/><g fill="none" stroke="#fff" stroke-width="31.25"><path d="m1244.39 1293.95v199.64s-.81 67.89 74.9 68.88c75.98.99 74.88-68.88 74.88-68.88v-199.64" transform="matrix(.70710678 .70710678 -.70710678 .70710678 284.139117 -1684.198509)"/><path d="m1244.39 1293.95v199.64s-.81 67.89 74.9 68.88c75.98.99 74.88-68.88 74.88-68.88v-199.64" transform="matrix(-.70957074 -.70463421 .70463421 -.70957074 235.113139 2195.434643)"/></g></svg>
|
||||
|
Before Width: | Height: | Size: 688 B |
Binary file not shown.
|
Before Width: | Height: | Size: 995 B |
Binary file not shown.
|
Before Width: | Height: | Size: 1012 B |
Binary file not shown.
|
Before Width: | Height: | Size: 718 B |
393
assets/index.js
393
assets/index.js
@ -1,393 +0,0 @@
|
||||
import $ from 'jquery';
|
||||
|
||||
/* Materialize imports */
|
||||
import '@materializecss/materialize/dist/css/materialize.css';
|
||||
import '@materializecss/materialize/dist/js/materialize';
|
||||
|
||||
/* Annotations */
|
||||
import annotator from 'annotator';
|
||||
|
||||
import ClipboardJS from 'clipboard';
|
||||
import 'mathjax/es5/tex-svg';
|
||||
|
||||
/* jrQrcode */
|
||||
import jrQrcode from 'jr-qrcode';
|
||||
|
||||
/* Fonts */
|
||||
import 'material-design-icons-iconfont/dist/material-design-icons.css';
|
||||
import 'lato-font/css/lato-font.css';
|
||||
import 'open-dyslexic/open-dyslexic-regular.css';
|
||||
import '@fontsource/atkinson-hyperlegible';
|
||||
import '@fontsource/eb-garamond';
|
||||
import '@fontsource/montserrat';
|
||||
import '@fontsource/oswald';
|
||||
|
||||
/* Highlight */
|
||||
import './js/highlight';
|
||||
|
||||
/* Tools */
|
||||
import {
|
||||
savePercent, retrievePercent, initExport, initFilters, initRandom, initPreviewText,
|
||||
} from './js/tools';
|
||||
|
||||
/* Import shortcuts */
|
||||
import './js/shortcuts/main';
|
||||
import './js/shortcuts/entry';
|
||||
|
||||
/* Theme style */
|
||||
import './scss/index.scss';
|
||||
|
||||
const mobileMaxWidth = 993;
|
||||
|
||||
/* ==========================================================================
|
||||
Annotations & Remember position
|
||||
========================================================================== */
|
||||
|
||||
$(document).ready(() => {
|
||||
if ($('#article').length) {
|
||||
const app = new annotator.App();
|
||||
|
||||
app.include(annotator.ui.main, {
|
||||
element: document.querySelector('article'),
|
||||
});
|
||||
|
||||
const authorization = {
|
||||
permits() { return true; },
|
||||
};
|
||||
app.registry.registerUtility(authorization, 'authorizationPolicy');
|
||||
|
||||
const x = JSON.parse($('#annotationroutes').html());
|
||||
app.include(annotator.storage.http, $.extend({}, x, {
|
||||
onError(msg, xhr) {
|
||||
if (!Object.prototype.hasOwnProperty.call(xhr, 'responseJSON')) {
|
||||
annotator.notification.banner('An error occurred', 'error');
|
||||
return;
|
||||
}
|
||||
$.each(xhr.responseJSON.children, (k, v) => {
|
||||
if (v.errors) {
|
||||
$.each(v.errors, (n, errorText) => {
|
||||
annotator.notification.banner(errorText, 'error');
|
||||
});
|
||||
}
|
||||
});
|
||||
},
|
||||
}));
|
||||
|
||||
app.start().then(() => {
|
||||
app.annotations.load({ entry: x.entryId });
|
||||
});
|
||||
|
||||
$(window).scroll(() => {
|
||||
const scrollTop = $(window).scrollTop();
|
||||
const docHeight = $(document).height();
|
||||
const scrollPercent = (scrollTop) / (docHeight);
|
||||
const scrollPercentRounded = Math.round(scrollPercent * 100) / 100;
|
||||
savePercent(x.entryId, scrollPercentRounded);
|
||||
});
|
||||
|
||||
retrievePercent(x.entryId);
|
||||
|
||||
$(window).resize(() => {
|
||||
retrievePercent(x.entryId, true);
|
||||
});
|
||||
}
|
||||
|
||||
document.querySelectorAll('[data-handler=tag-rename]').forEach((item) => {
|
||||
const current = item;
|
||||
current.wallabag_edit_mode = false;
|
||||
current.onclick = (event) => {
|
||||
const target = event.currentTarget;
|
||||
|
||||
if (target.wallabag_edit_mode === false) {
|
||||
$(target.parentNode.querySelector('[data-handle=tag-link]')).addClass('hidden');
|
||||
$(target.parentNode.querySelector('[data-handle=tag-rename-form]')).removeClass('hidden');
|
||||
target.parentNode.querySelector('[data-handle=tag-rename-form] input').focus();
|
||||
target.querySelector('.material-icons').innerHTML = 'done';
|
||||
|
||||
target.wallabag_edit_mode = true;
|
||||
} else {
|
||||
target.parentNode.querySelector('[data-handle=tag-rename-form]').submit();
|
||||
}
|
||||
};
|
||||
});
|
||||
|
||||
// mimic radio button because emailTwoFactor is a boolean
|
||||
$('#update_user_googleTwoFactor').on('change', () => {
|
||||
$('#update_user_emailTwoFactor').prop('checked', false);
|
||||
});
|
||||
|
||||
$('#update_user_emailTwoFactor').on('change', () => {
|
||||
$('#update_user_googleTwoFactor').prop('checked', false);
|
||||
});
|
||||
|
||||
// same mimic for super admin
|
||||
$('#user_googleTwoFactor').on('change', () => {
|
||||
$('#user_emailTwoFactor').prop('checked', false);
|
||||
});
|
||||
|
||||
$('#user_emailTwoFactor').on('change', () => {
|
||||
$('#user_googleTwoFactor').prop('checked', false);
|
||||
});
|
||||
|
||||
// handle copy to clipboard for developer stuff
|
||||
const clipboard = new ClipboardJS('.btn');
|
||||
clipboard.on('success', (e) => {
|
||||
e.clearSelection();
|
||||
});
|
||||
});
|
||||
|
||||
(function darkTheme() {
|
||||
const rootEl = document.querySelector('html');
|
||||
const themeDom = {
|
||||
darkClass: 'dark-theme',
|
||||
|
||||
toggleClass(el) {
|
||||
return el.classList.toggle(this.darkClass);
|
||||
},
|
||||
|
||||
addClass(el) {
|
||||
return el.classList.add(this.darkClass);
|
||||
},
|
||||
|
||||
removeClass(el) {
|
||||
return el.classList.remove(this.darkClass);
|
||||
},
|
||||
};
|
||||
const themeCookie = {
|
||||
values: {
|
||||
light: 'light',
|
||||
dark: 'dark',
|
||||
},
|
||||
|
||||
name: 'theme',
|
||||
|
||||
getValue(isDarkTheme) {
|
||||
return isDarkTheme ? this.values.dark : this.values.light;
|
||||
},
|
||||
|
||||
setCookie(isDarkTheme) {
|
||||
const value = this.getValue(isDarkTheme);
|
||||
document.cookie = `${this.name}=${value};samesite=Lax;path=/;max-age=31536000`;
|
||||
},
|
||||
|
||||
removeCookie() {
|
||||
document.cookie = `${this.name}=auto;samesite=Lax;path=/;max-age=0`;
|
||||
},
|
||||
|
||||
exists() {
|
||||
return document.cookie.split(';').some((cookie) => cookie.trim().startsWith(`${this.name}=`));
|
||||
},
|
||||
};
|
||||
const preferedColorScheme = {
|
||||
choose() {
|
||||
const themeCookieExists = themeCookie.exists();
|
||||
if (this.isAvailable() && !themeCookieExists) {
|
||||
const isPreferedColorSchemeDark = window.matchMedia('(prefers-color-scheme: dark)').matches === true;
|
||||
if (!themeCookieExists) {
|
||||
themeDom[isPreferedColorSchemeDark ? 'addClass' : 'removeClass'](rootEl);
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
isAvailable() {
|
||||
return typeof window.matchMedia === 'function';
|
||||
},
|
||||
|
||||
init() {
|
||||
if (!this.isAvailable()) {
|
||||
return false;
|
||||
}
|
||||
this.choose();
|
||||
window.matchMedia('(prefers-color-scheme: dark)').addListener(() => {
|
||||
this.choose();
|
||||
});
|
||||
return true;
|
||||
},
|
||||
};
|
||||
|
||||
const addDarkThemeListeners = () => {
|
||||
$(document).ready(() => {
|
||||
const lightThemeButtons = document.querySelectorAll('.js-theme-toggle[data-theme="light"]');
|
||||
[...lightThemeButtons].map((lightThemeButton) => {
|
||||
lightThemeButton.addEventListener('click', (e) => {
|
||||
e.preventDefault();
|
||||
themeDom.removeClass(rootEl);
|
||||
themeCookie.setCookie(false);
|
||||
});
|
||||
return true;
|
||||
});
|
||||
const darkThemeButtons = document.querySelectorAll('.js-theme-toggle[data-theme="dark"]');
|
||||
[...darkThemeButtons].map((darkThemeButton) => {
|
||||
darkThemeButton.addEventListener('click', (e) => {
|
||||
e.preventDefault();
|
||||
themeDom.addClass(rootEl);
|
||||
themeCookie.setCookie(true);
|
||||
});
|
||||
return true;
|
||||
});
|
||||
const autoThemeButtons = document.querySelectorAll('.js-theme-toggle[data-theme="auto"]');
|
||||
[...autoThemeButtons].map((autoThemeButton) => {
|
||||
autoThemeButton.addEventListener('click', (e) => {
|
||||
e.preventDefault();
|
||||
themeCookie.removeCookie();
|
||||
preferedColorScheme.choose();
|
||||
});
|
||||
return true;
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
preferedColorScheme.init();
|
||||
addDarkThemeListeners();
|
||||
}());
|
||||
|
||||
const stickyNav = () => {
|
||||
const nav = $('.js-entry-nav-top');
|
||||
$('[data-toggle="actions"]').click(() => {
|
||||
nav.toggleClass('entry-nav-top--sticky');
|
||||
});
|
||||
};
|
||||
|
||||
const articleScroll = () => {
|
||||
const articleEl = $('#article');
|
||||
if (articleEl.length > 0) {
|
||||
$(window).scroll(() => {
|
||||
const s = $(window).scrollTop();
|
||||
const d = $(document).height();
|
||||
const c = $(window).height();
|
||||
const articleElBottom = articleEl.offset().top + articleEl.height();
|
||||
const scrollPercent = (s / (d - c)) * 100;
|
||||
$('.progress .determinate').css('width', `${scrollPercent}%`);
|
||||
const fixedActionBtn = $('.js-fixed-action-btn');
|
||||
const toggleScrollDataName = 'toggle-auto';
|
||||
if ((s + c) > articleElBottom) {
|
||||
fixedActionBtn.data(toggleScrollDataName, true);
|
||||
fixedActionBtn.openFAB();
|
||||
} else if (fixedActionBtn.data(toggleScrollDataName) === true) {
|
||||
fixedActionBtn.data(toggleScrollDataName, false);
|
||||
fixedActionBtn.closeFAB();
|
||||
}
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
$(document).ready(() => {
|
||||
// sidenav
|
||||
$('.sidenav').sidenav();
|
||||
$('select').formSelect();
|
||||
$('.collapsible[data-collapsible="accordion"]').collapsible();
|
||||
$('.collapsible[data-collapsible="expandable"]').collapsible({
|
||||
accordion: false,
|
||||
});
|
||||
$('.datepicker').datepicker({
|
||||
selectMonths: true,
|
||||
selectYears: 15,
|
||||
formatSubmit: 'yyyy-mm-dd',
|
||||
hiddenName: false,
|
||||
format: 'yyyy-mm-dd',
|
||||
container: 'body',
|
||||
});
|
||||
|
||||
$('.dropdown-trigger').dropdown({ hover: false });
|
||||
$('.dropdown-trigger[data-covertrigger="false"][data-constrainwidth="false"]').dropdown({
|
||||
hover: false,
|
||||
coverTrigger: false,
|
||||
constrainWidth: false,
|
||||
});
|
||||
|
||||
$('.tabs').tabs();
|
||||
$('.tooltipped').tooltip();
|
||||
|
||||
initFilters();
|
||||
initExport();
|
||||
initRandom();
|
||||
stickyNav();
|
||||
articleScroll();
|
||||
initPreviewText();
|
||||
|
||||
const toggleNav = (toShow, toFocus) => {
|
||||
$('.nav-panel-actions').hide(100);
|
||||
$(toShow).show(100);
|
||||
$(toFocus).focus();
|
||||
};
|
||||
|
||||
$('#nav-btn-add-tag').on('click', () => {
|
||||
$('.nav-panel-add-tag').toggle(100);
|
||||
$('.nav-panel-menu').addClass('hidden');
|
||||
if (window.innerWidth < mobileMaxWidth) {
|
||||
$('.sidenav').sidenav('close');
|
||||
}
|
||||
$('#tag_label').focus();
|
||||
return false;
|
||||
});
|
||||
|
||||
$('#nav-btn-add').on('click', () => {
|
||||
toggleNav('.nav-panel-add', '#entry_url');
|
||||
return false;
|
||||
});
|
||||
|
||||
$('#config_fontsize').on('input', () => {
|
||||
const value = $('#config_fontsize').val();
|
||||
const css = `${value}em`;
|
||||
$('#preview-content').css('font-size', css);
|
||||
});
|
||||
|
||||
$('#config_font').on('change', () => {
|
||||
const value = $('#config_font').val();
|
||||
$('#preview-content').css('font-family', value);
|
||||
});
|
||||
|
||||
$('#config_lineHeight').on('input', () => {
|
||||
const value = $('#config_lineHeight').val();
|
||||
const css = `${value}em`;
|
||||
$('#preview-content').css('line-height', css);
|
||||
});
|
||||
|
||||
$('#config_maxWidth').on('input', () => {
|
||||
const value = $('#config_maxWidth').val();
|
||||
const css = `${value}em`;
|
||||
$('#preview-article').css('max-width', css);
|
||||
});
|
||||
|
||||
const materialAddForm = $('.nav-panel-add');
|
||||
materialAddForm.on('submit', () => {
|
||||
materialAddForm.addClass('disabled');
|
||||
$('input#entry_url', materialAddForm).prop('readonly', true).trigger('blur');
|
||||
});
|
||||
|
||||
$('#nav-btn-search').on('click', () => {
|
||||
toggleNav('.nav-panel-search', '#search_entry_term');
|
||||
return false;
|
||||
});
|
||||
|
||||
$('.close').on('click', (e) => {
|
||||
$(e.target).parent('.nav-panel-item').hide(100);
|
||||
$('.nav-panel-actions').show(100);
|
||||
return false;
|
||||
});
|
||||
|
||||
const mainCheckboxes = document.querySelectorAll('[data-js="checkboxes-toggle"]');
|
||||
if (mainCheckboxes.length) {
|
||||
[...mainCheckboxes].forEach((el) => {
|
||||
el.addEventListener('click', () => {
|
||||
const checkboxes = document.querySelectorAll(el.dataset.toggle);
|
||||
[...checkboxes].forEach((checkbox) => {
|
||||
const checkboxClone = checkbox;
|
||||
checkboxClone.checked = el.checked;
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
$('form[name="form_mass_action"] input[name="tags"]').on('keydown', (e) => {
|
||||
if (e.key === 'Enter') {
|
||||
e.preventDefault();
|
||||
$('form[name="form_mass_action"] button[name="tag"]').trigger('click');
|
||||
}
|
||||
});
|
||||
|
||||
document.querySelectorAll('img.jr-qrcode').forEach((qrcode) => {
|
||||
const src = jrQrcode.getQrBase64(qrcode.getAttribute('data-url'));
|
||||
|
||||
qrcode.setAttribute('src', src);
|
||||
});
|
||||
});
|
||||
@ -1,8 +0,0 @@
|
||||
import 'highlight.js/styles/atom-one-light.css';
|
||||
import hljs from 'highlight.js';
|
||||
|
||||
window.addEventListener('load', () => {
|
||||
document.querySelectorAll('pre').forEach((element) => {
|
||||
hljs.highlightElement(element);
|
||||
});
|
||||
});
|
||||
@ -1,26 +0,0 @@
|
||||
import Mousetrap from 'mousetrap';
|
||||
import $ from 'jquery';
|
||||
|
||||
$(document).ready(() => {
|
||||
if ($('#article').length > 0) {
|
||||
/* open original article */
|
||||
Mousetrap.bind('o', () => {
|
||||
$('ul.sidenav a.original i')[0].click();
|
||||
});
|
||||
|
||||
/* mark as favorite */
|
||||
Mousetrap.bind('f', () => {
|
||||
$('ul.sidenav a.favorite i')[0].click();
|
||||
});
|
||||
|
||||
/* mark as read */
|
||||
Mousetrap.bind('a', () => {
|
||||
$('ul.sidenav a.markasread i')[0].click();
|
||||
});
|
||||
|
||||
/* delete */
|
||||
Mousetrap.bind('del', () => {
|
||||
$('ul.sidenav a.delete i')[0].click();
|
||||
});
|
||||
}
|
||||
});
|
||||
@ -1,104 +0,0 @@
|
||||
import Mousetrap from 'mousetrap';
|
||||
import $ from 'jquery';
|
||||
|
||||
/* Go to */
|
||||
Mousetrap.bind('g u', () => { window.location.href = Routing.generate('homepage'); });
|
||||
Mousetrap.bind('g s', () => { window.location.href = Routing.generate('starred'); });
|
||||
Mousetrap.bind('g r', () => { window.location.href = Routing.generate('archive'); });
|
||||
Mousetrap.bind('g a', () => { window.location.href = Routing.generate('all'); });
|
||||
Mousetrap.bind('g t', () => { window.location.href = Routing.generate('tag'); });
|
||||
Mousetrap.bind('g c', () => { window.location.href = Routing.generate('config'); });
|
||||
Mousetrap.bind('g i', () => { window.location.href = Routing.generate('import'); });
|
||||
Mousetrap.bind('g d', () => { window.location.href = Routing.generate('developer'); });
|
||||
Mousetrap.bind('?', () => { window.location.href = Routing.generate('howto'); });
|
||||
Mousetrap.bind('g l', () => { window.location.href = Routing.generate('fos_user_security_logout'); });
|
||||
|
||||
function toggleFocus(cardToToogleFocus) {
|
||||
if (cardToToogleFocus) {
|
||||
$(cardToToogleFocus).toggleClass('z-depth-4');
|
||||
}
|
||||
}
|
||||
|
||||
$(document).ready(() => {
|
||||
const cards = $('#content').find('.card');
|
||||
const cardNumber = cards.length;
|
||||
let cardIndex = 0;
|
||||
/* If we come from next page */
|
||||
if (window.location.hash === '#prev') {
|
||||
cardIndex = cardNumber - 1;
|
||||
}
|
||||
let card = cards[cardIndex];
|
||||
const pagination = $('.pagination');
|
||||
|
||||
/* Show nothing on quickstart */
|
||||
if ($('#content > div.quickstart').length > 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
/* Show nothing on login/register page */
|
||||
if ($('#username').length > 0 || $('#fos_user_registration_form_username').length > 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
/* Show nothing on login/register page */
|
||||
if ($('#username').length > 0 || $('#fos_user_registration_form_username').length > 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
/* Focus current card */
|
||||
toggleFocus(card);
|
||||
|
||||
/* Actions */
|
||||
Mousetrap.bind('g n', () => {
|
||||
$('#nav-btn-add').trigger('click');
|
||||
return false;
|
||||
});
|
||||
|
||||
Mousetrap.bind('s', () => {
|
||||
$('#nav-btn-search').trigger('click');
|
||||
return false;
|
||||
});
|
||||
|
||||
Mousetrap.bind('esc', () => {
|
||||
$('.close').trigger('click');
|
||||
});
|
||||
|
||||
/* Select right card. If there's a next page, go to next page */
|
||||
Mousetrap.bind('right', () => {
|
||||
if (cardIndex >= 0 && cardIndex < cardNumber - 1) {
|
||||
toggleFocus(card);
|
||||
cardIndex += 1;
|
||||
card = cards[cardIndex];
|
||||
toggleFocus(card);
|
||||
return;
|
||||
}
|
||||
if (pagination.length > 0 && pagination.find('li.next:not(.disabled)').length > 0 && cardIndex === cardNumber - 1) {
|
||||
window.location.href = window.location.origin + $(pagination).find('li.next a').attr('href');
|
||||
}
|
||||
});
|
||||
|
||||
/* Select previous card. If there's a previous page, go to next page */
|
||||
Mousetrap.bind('left', () => {
|
||||
if (cardIndex > 0 && cardIndex < cardNumber) {
|
||||
toggleFocus(card);
|
||||
cardIndex -= 1;
|
||||
card = cards[cardIndex];
|
||||
toggleFocus(card);
|
||||
return;
|
||||
}
|
||||
if (pagination.length > 0 && $(pagination).find('li.prev:not(.disabled)').length > 0 && cardIndex === 0) {
|
||||
window.location.href = `${window.location.origin + $(pagination).find('li.prev a').attr('href')}#prev`;
|
||||
}
|
||||
});
|
||||
|
||||
Mousetrap.bind('enter', () => {
|
||||
if (typeof card !== 'object') {
|
||||
return;
|
||||
}
|
||||
|
||||
const url = $(card).find('.card-title a').attr('href');
|
||||
if (typeof url === 'string' && url.length > 0) {
|
||||
window.location.href = window.location.origin + url;
|
||||
}
|
||||
});
|
||||
});
|
||||
@ -1,83 +0,0 @@
|
||||
import $ from 'jquery';
|
||||
|
||||
function supportsLocalStorage() {
|
||||
try {
|
||||
return 'localStorage' in window && window.localStorage !== null;
|
||||
} catch (e) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
function savePercent(id, percent) {
|
||||
if (!supportsLocalStorage()) { return false; }
|
||||
localStorage[`wallabag.article.${id}.percent`] = percent;
|
||||
return true;
|
||||
}
|
||||
|
||||
function retrievePercent(id, resized) {
|
||||
if (!supportsLocalStorage()) { return false; }
|
||||
|
||||
const bheight = $(document).height();
|
||||
const percent = localStorage[`wallabag.article.${id}.percent`];
|
||||
const scroll = bheight * percent;
|
||||
|
||||
if (!resized) {
|
||||
$('html,body').animate({ scrollTop: scroll }, 'fast');
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
function initFilters() {
|
||||
// no display if filters not available
|
||||
if ($('div').is('#filters')) {
|
||||
$('#button_filters').show();
|
||||
$('#filters.sidenav').sidenav({ edge: 'right' });
|
||||
$('#clear_form_filters').on('click', () => {
|
||||
$('#filters input').val('');
|
||||
$('#filters :checked').removeAttr('checked');
|
||||
|
||||
return false;
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
function initExport() {
|
||||
// no display if export not available
|
||||
if ($('div').is('#export')) {
|
||||
$('#button_export').show();
|
||||
$('#export.sidenav').sidenav({ edge: 'right' });
|
||||
}
|
||||
}
|
||||
|
||||
function initRandom() {
|
||||
// no display if export (ie: entries) not available
|
||||
if ($('div').is('#export')) {
|
||||
$('#button_random').show();
|
||||
}
|
||||
}
|
||||
|
||||
function initPreviewText() {
|
||||
// no display if preview_text not available
|
||||
if ($('div').is('#preview-article')) {
|
||||
const defaultFontFamily = $('#config_font').val();
|
||||
const defaultFontSize = $('#config_fontsize').val();
|
||||
const defaultLineHeight = $('#config_lineHeight').val();
|
||||
const defaultMaxWidth = $('#config_maxWidth').val();
|
||||
const previewContent = $('#preview-content');
|
||||
|
||||
previewContent.css('font-family', defaultFontFamily);
|
||||
previewContent.css('font-size', `${defaultFontSize}em`);
|
||||
previewContent.css('line-height', `${defaultLineHeight}em`);
|
||||
$('#preview-article').css('max-width', `${defaultMaxWidth}em`);
|
||||
}
|
||||
}
|
||||
|
||||
export {
|
||||
savePercent,
|
||||
retrievePercent,
|
||||
initExport,
|
||||
initFilters,
|
||||
initRandom,
|
||||
initPreviewText,
|
||||
};
|
||||
@ -1,277 +0,0 @@
|
||||
@use "variables";
|
||||
|
||||
/* ==========================================================================
|
||||
Article
|
||||
========================================================================== */
|
||||
|
||||
#article, #preview-article {
|
||||
font-size: 20px;
|
||||
margin: 0 auto;
|
||||
max-width: 45em;
|
||||
padding: 5px 20px;
|
||||
background-color: #fff;
|
||||
box-shadow: 0 0 10px #ccc;
|
||||
|
||||
article {
|
||||
color: #424242;
|
||||
font-size: 18px;
|
||||
line-height: 1.7em;
|
||||
overflow-wrap: break-word;
|
||||
|
||||
h1,
|
||||
h2,
|
||||
h3,
|
||||
h4,
|
||||
h5,
|
||||
h6 {
|
||||
color: #212121;
|
||||
|
||||
strong {
|
||||
font-weight: 500;
|
||||
}
|
||||
}
|
||||
|
||||
h6 {
|
||||
font-size: 1.2rem;
|
||||
}
|
||||
|
||||
h5 {
|
||||
font-size: 1.6rem;
|
||||
}
|
||||
|
||||
h4 {
|
||||
font-size: 1.9rem;
|
||||
}
|
||||
|
||||
h3 {
|
||||
font-size: 2.2rem;
|
||||
}
|
||||
|
||||
h2 {
|
||||
font-size: 2.5rem;
|
||||
}
|
||||
|
||||
h1 {
|
||||
font-size: 2.7rem;
|
||||
}
|
||||
|
||||
a {
|
||||
border-bottom: 1px dotted variables.$blue-accent-color;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
a:hover {
|
||||
border-bottom-style: solid;
|
||||
}
|
||||
|
||||
ul {
|
||||
padding-left: 30px;
|
||||
}
|
||||
|
||||
ul,
|
||||
ul li {
|
||||
list-style-type: disc;
|
||||
}
|
||||
|
||||
blockquote {
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
strong {
|
||||
font-weight: bold;
|
||||
}
|
||||
}
|
||||
|
||||
img,
|
||||
figure {
|
||||
max-width: 100%;
|
||||
height: auto;
|
||||
}
|
||||
|
||||
pre {
|
||||
box-sizing: border-box;
|
||||
margin: 0 0 1.75em;
|
||||
border: #e3f2fd 1px solid;
|
||||
width: 100%;
|
||||
padding: 10px;
|
||||
font-family: monospace;
|
||||
font-size: 0.8em;
|
||||
white-space: pre;
|
||||
overflow: auto;
|
||||
background: #f5f5f5;
|
||||
border-radius: 3px;
|
||||
}
|
||||
|
||||
> header > h1 {
|
||||
font-size: 2em;
|
||||
margin: 2.1rem 0 0.68rem;
|
||||
}
|
||||
|
||||
.entry-info {
|
||||
.tools {
|
||||
display: flex;
|
||||
margin: 8px 5px 5px;
|
||||
flex-wrap: wrap;
|
||||
|
||||
.stats {
|
||||
margin: 0;
|
||||
font-size: 0.7em;
|
||||
|
||||
li {
|
||||
display: inline-flex;
|
||||
vertical-align: middle;
|
||||
margin: 3px 5px;
|
||||
|
||||
i.material-icons {
|
||||
color: #3e3e3e;
|
||||
margin-right: 3px;
|
||||
font-size: 18px;
|
||||
}
|
||||
}
|
||||
|
||||
a {
|
||||
color: #000;
|
||||
text-decoration: none;
|
||||
}
|
||||
}
|
||||
|
||||
.tags {
|
||||
display: flex;
|
||||
margin: 0;
|
||||
align-items: center;
|
||||
gap: 5px;
|
||||
}
|
||||
}
|
||||
|
||||
.chip {
|
||||
display: flex;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
height: 25px;
|
||||
line-height: 25px;
|
||||
align-items: center;
|
||||
background-color: transparent;
|
||||
|
||||
a,
|
||||
i {
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
i.material-icons {
|
||||
font-size: 16px;
|
||||
vertical-align: sub;
|
||||
}
|
||||
}
|
||||
|
||||
.chip-label {
|
||||
padding-left: 10px;
|
||||
padding-right: 5px;
|
||||
background-color: #9e9e9e;
|
||||
border-radius: 6px 0 0 6px;
|
||||
}
|
||||
|
||||
.chip-action {
|
||||
padding: 0 5px;
|
||||
background-color: #868686;
|
||||
border-radius: 0 6px 6px 0;
|
||||
}
|
||||
|
||||
.chip-label,
|
||||
.chip-action {
|
||||
min-width: 30px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.chip-label:hover,
|
||||
.chip-label:active,
|
||||
.chip-label:focus,
|
||||
.chip-action:hover,
|
||||
.chip-action:active,
|
||||
.chip-action:focus {
|
||||
background-color: #5e5e5e;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.entry-info {
|
||||
margin-bottom: 40px;
|
||||
}
|
||||
|
||||
.reader-mode {
|
||||
width: 70px !important;
|
||||
transition: width 0.2s ease;
|
||||
|
||||
.collapsible-body {
|
||||
height: 0;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
span {
|
||||
opacity: 0;
|
||||
transition: opacity 0.2s ease;
|
||||
}
|
||||
|
||||
&:hover {
|
||||
width: 260px !important;
|
||||
|
||||
span {
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
|
||||
.collapsible-body {
|
||||
height: auto;
|
||||
|
||||
li a i.material-icons {
|
||||
margin: auto 5px auto -8px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.progress {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
width: 100%;
|
||||
height: 3px;
|
||||
margin: 0;
|
||||
z-index: 9999;
|
||||
}
|
||||
|
||||
.tags-add-form {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 20px;
|
||||
}
|
||||
|
||||
@media only screen and (max-width: 640px) {
|
||||
.entry-info {
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
#article .entry-info .tools {
|
||||
margin-left: 0;
|
||||
margin-right: 0;
|
||||
}
|
||||
|
||||
#article .entry-info .tools .tags {
|
||||
gap: 10px;
|
||||
}
|
||||
|
||||
#article .entry-info .chip {
|
||||
height: 32px;
|
||||
line-height: 32px;
|
||||
}
|
||||
|
||||
#article .entry-info .chip-label,
|
||||
#article .entry-info .chip-action {
|
||||
min-width: 40px;
|
||||
}
|
||||
|
||||
.tags-add-form {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.tags-add-form-submit {
|
||||
margin-top: 10px;
|
||||
}
|
||||
}
|
||||
@ -1,355 +0,0 @@
|
||||
@use "variables";
|
||||
|
||||
/* ==========================================================================
|
||||
Cards
|
||||
========================================================================== */
|
||||
|
||||
main {
|
||||
div#content {
|
||||
padding: 0 0.5rem;
|
||||
}
|
||||
}
|
||||
|
||||
@mixin mixin-reading-time {
|
||||
.reading-time {
|
||||
display: inline-flex;
|
||||
vertical-align: middle;
|
||||
|
||||
.card-reading-time,
|
||||
.card-created-at {
|
||||
display: inline-flex;
|
||||
}
|
||||
|
||||
span {
|
||||
margin-right: 5px;
|
||||
}
|
||||
|
||||
@content;
|
||||
}
|
||||
}
|
||||
|
||||
.card {
|
||||
.card-content {
|
||||
padding-bottom: 12px;
|
||||
flex-grow: 1;
|
||||
}
|
||||
|
||||
.card-content .card-title,
|
||||
.card-reveal .card-title {
|
||||
line-height: 22.8px;
|
||||
max-height: 80px;
|
||||
font-size: 19px;
|
||||
font-family: roberto, "Helvetica Neue", Helvetica, Arial, sans-serif;
|
||||
}
|
||||
|
||||
.card-stacked .card-content .card-title {
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
.card-content .activator,
|
||||
.card-reveal .activator {
|
||||
cursor: pointer;
|
||||
font-family: "Material Icons";
|
||||
}
|
||||
|
||||
.card-content i.right,
|
||||
.card-reveal i.right {
|
||||
margin-left: 0;
|
||||
}
|
||||
|
||||
.card-content .original {
|
||||
line-height: 24px;
|
||||
font-size: 15px;
|
||||
}
|
||||
|
||||
.card-entry-labels {
|
||||
position: absolute;
|
||||
top: 10px;
|
||||
z-index: 90;
|
||||
max-width: 50%;
|
||||
}
|
||||
|
||||
.card-entry-labels-hidden {
|
||||
margin: 2.5px auto;
|
||||
}
|
||||
|
||||
.card-entry-labels-hidden li {
|
||||
display: inline-block;
|
||||
background-color: variables.$blue-accent-color;
|
||||
margin: 0 5px;
|
||||
padding: 5px 12px;
|
||||
border-radius: 3px;
|
||||
color: #fff;
|
||||
max-height: 2em;
|
||||
max-width: calc(100% - 15px);
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.card-action {
|
||||
padding: 10px 10px 10px 15px;
|
||||
|
||||
ul.links {
|
||||
margin: 0;
|
||||
font-size: 24px;
|
||||
line-height: 24px;
|
||||
}
|
||||
|
||||
a {
|
||||
color: #fff;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
a:hover {
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.tool {
|
||||
display: flex;
|
||||
margin-right: 0 !important;
|
||||
}
|
||||
|
||||
@include mixin-reading-time;
|
||||
}
|
||||
|
||||
.card-image {
|
||||
height: 10em;
|
||||
}
|
||||
|
||||
.card-fullimage {
|
||||
height: 13.5em;
|
||||
}
|
||||
|
||||
&.sw {
|
||||
max-width: 370px;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
}
|
||||
}
|
||||
|
||||
.card-body {
|
||||
display: flex;
|
||||
flex-grow: 1;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
a.original:not(.waves-effect) {
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
display: block;
|
||||
}
|
||||
|
||||
.card .card-image .preview,
|
||||
.card .card-fullimage .preview,
|
||||
.card-stacked .preview {
|
||||
height: 100%;
|
||||
background: no-repeat 50%/cover;
|
||||
background-color: #efefef;
|
||||
display: block;
|
||||
|
||||
&--default {
|
||||
background-size: contain;
|
||||
}
|
||||
}
|
||||
|
||||
.card-entry-labels li,
|
||||
.card-tag-labels li {
|
||||
margin: 10px 10px 10px auto;
|
||||
padding: 5px 12px 5px 16px !important;
|
||||
background-color: variables.$blue-accent-color;
|
||||
border-radius: 3px;
|
||||
color: #fff;
|
||||
cursor: default;
|
||||
line-height: 20px;
|
||||
}
|
||||
|
||||
.card-entry-labels li {
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
border-radius: 0 3px 3px 0;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.card-tag-labels li {
|
||||
display: flex;
|
||||
}
|
||||
|
||||
.card-entry-tags a,
|
||||
.card-entry-labels a,
|
||||
.card-tag-labels a,
|
||||
.card-entry-labels-hidden a,
|
||||
#list .chip a {
|
||||
text-decoration: none;
|
||||
font-weight: normal;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.card-tag-link {
|
||||
width: calc(100% - 24px);
|
||||
line-height: 1.3;
|
||||
white-space: nowrap;
|
||||
text-overflow: ellipsis;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.card-tag-form {
|
||||
display: flex;
|
||||
min-width: 100px;
|
||||
flex-grow: 1;
|
||||
}
|
||||
|
||||
.card-tag-form input {
|
||||
margin-bottom: 0;
|
||||
height: 1.8rem;
|
||||
}
|
||||
|
||||
.card-tag-icon {
|
||||
display: flex;
|
||||
}
|
||||
|
||||
.card-tag-delete {
|
||||
margin-left: 10px;
|
||||
}
|
||||
|
||||
.card-tag-labels {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(auto-fill, minmax(240px, 1fr));
|
||||
}
|
||||
|
||||
.card-tag-labels li {
|
||||
margin: 10px;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.card-stacked {
|
||||
display: flex;
|
||||
flex-flow: row wrap;
|
||||
|
||||
&:hover ul.tools-list {
|
||||
display: inline;
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
.card-preview {
|
||||
max-width: 100px;
|
||||
max-height: 50px;
|
||||
margin-right: 10px;
|
||||
flex: 1;
|
||||
}
|
||||
|
||||
div.metadata {
|
||||
overflow: hidden;
|
||||
height: 1.5em;
|
||||
display: flex;
|
||||
|
||||
ul.tags {
|
||||
margin-left: 4px;
|
||||
}
|
||||
|
||||
.chip {
|
||||
background-color: variables.$blue-accent-color;
|
||||
padding: 0 7px;
|
||||
margin: auto 1px;
|
||||
border-radius: 6px;
|
||||
line-height: 22px;
|
||||
height: 22px;
|
||||
|
||||
a,
|
||||
i {
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
i.material-icons {
|
||||
float: right;
|
||||
font-size: 20px;
|
||||
line-height: 32px;
|
||||
padding-left: 8px;
|
||||
}
|
||||
}
|
||||
|
||||
@include mixin-reading-time {
|
||||
& {
|
||||
padding: 0 5px;
|
||||
flex-wrap: wrap;
|
||||
margin-left: auto;
|
||||
}
|
||||
|
||||
i.material-icons {
|
||||
font-size: 20px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
div.card-content {
|
||||
flex: 4;
|
||||
}
|
||||
|
||||
ul.tools-list {
|
||||
flex: 1;
|
||||
display: none;
|
||||
flex-basis: 5em;
|
||||
align-self: flex-end;
|
||||
float: right;
|
||||
max-width: 8em;
|
||||
}
|
||||
|
||||
.tags {
|
||||
display: inline-block;
|
||||
}
|
||||
}
|
||||
|
||||
.card.archived,
|
||||
.card-stacked.archived {
|
||||
opacity: 0.5;
|
||||
}
|
||||
|
||||
#content .collection .collection-item {
|
||||
min-height: 65px;
|
||||
height: auto;
|
||||
}
|
||||
|
||||
.quickstart .card .card-action a,
|
||||
.quickstart .card .card-action a:hover {
|
||||
color: #fff !important;
|
||||
}
|
||||
|
||||
.settings .tabs-container {
|
||||
padding-bottom: 15px;
|
||||
}
|
||||
|
||||
.settings .settings-checkbox-col {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.settings .settings-checkbox-label {
|
||||
margin-bottom: 20px;
|
||||
height: 3rem;
|
||||
}
|
||||
|
||||
.settings .settings-range-label {
|
||||
position: absolute;
|
||||
top: -14px;
|
||||
font-size: 0.8rem;
|
||||
}
|
||||
|
||||
.entries-row {
|
||||
display: grid;
|
||||
margin: 0.4rem 0 0;
|
||||
padding: 0 0.75rem;
|
||||
gap: 20px;
|
||||
}
|
||||
|
||||
.entry-card {
|
||||
display: flex;
|
||||
margin: 0;
|
||||
height: 100%;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
|
||||
.tools {
|
||||
display: flex;
|
||||
gap: 10px;
|
||||
}
|
||||
@ -1,150 +0,0 @@
|
||||
.dark-theme {
|
||||
body {
|
||||
background-color: #101010;
|
||||
}
|
||||
|
||||
#article,
|
||||
.card,
|
||||
.card-panel,
|
||||
.card .card-reveal,
|
||||
.card-stacked .preview:not(.preview--default),
|
||||
.card .preview:not(.preview--default),
|
||||
.collapsible-header,
|
||||
.collection,
|
||||
.dropdown-content,
|
||||
.sidenav,
|
||||
.sidenav .collapsible-body,
|
||||
.sidenav.sidenav-fixed .collapsible-body,
|
||||
.tabs {
|
||||
background-color: #131716;
|
||||
}
|
||||
|
||||
table.striped > tbody > tr:nth-child(2n+1),
|
||||
.dropdown-content li {
|
||||
background-color: #232323;
|
||||
}
|
||||
|
||||
.dropdown-content li:hover,
|
||||
.dropdown-content li.active,
|
||||
.dropdown-content li.selected,
|
||||
.pagination li:not(.active) a:hover,
|
||||
.pagination li:not(.active) a:active,
|
||||
.pagination li:not(.active) a:focus {
|
||||
background-color: #2c2c2c;
|
||||
}
|
||||
|
||||
.dropdown-content .divider {
|
||||
background-color: #383838;
|
||||
}
|
||||
|
||||
.collection {
|
||||
border-color: transparent;
|
||||
}
|
||||
|
||||
.collection .collection-item {
|
||||
border-color: #121212;
|
||||
}
|
||||
|
||||
.card:hover,
|
||||
.collection .collection-item:hover {
|
||||
background-color: #272727;
|
||||
}
|
||||
|
||||
#content,
|
||||
#article article,
|
||||
#article article h1,
|
||||
#article article h2,
|
||||
#article article h3,
|
||||
#article article h4,
|
||||
#article article h5,
|
||||
#article article h6,
|
||||
.dropdown-content li > a,
|
||||
.input-field input,
|
||||
.input-field input:focus,
|
||||
.results-item,
|
||||
.sidenav li > a,
|
||||
.sidenav li > a > i.material-icons {
|
||||
color: #dfdfdf;
|
||||
}
|
||||
|
||||
.cyan,
|
||||
.cyan.darken-1,
|
||||
.cyan.darken-2,
|
||||
.nav-panel-add,
|
||||
.nav-panel-search {
|
||||
background-color: #1d1d1d !important;
|
||||
}
|
||||
|
||||
.grey-text.text-darken-4,
|
||||
.nav-panel-item .add,
|
||||
.nav-panel-item .search,
|
||||
.nav-panels .close {
|
||||
color: #dfdfdf !important;
|
||||
}
|
||||
|
||||
.sidenav li.active {
|
||||
background-color: #2f2f2f;
|
||||
}
|
||||
|
||||
.mass-action-tags .mass-action-tags-input.mass-action-tags-input,
|
||||
.sidenav li:not(.logo) > a:hover,
|
||||
.sidenav .collapsible-header:hover,
|
||||
.sidenav.sidenav-fixed .collapsible-header:hover {
|
||||
background-color: #1d1d1d;
|
||||
}
|
||||
|
||||
#article {
|
||||
box-shadow: 0 0 10px #1d1d1d;
|
||||
}
|
||||
|
||||
.card,
|
||||
.collection .collection-item {
|
||||
background-color: #1d1d1d;
|
||||
}
|
||||
|
||||
.card-action {
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
.logo img,
|
||||
.preview.preview--default,
|
||||
.typo-logo {
|
||||
filter: invert(100%);
|
||||
}
|
||||
|
||||
.border-bottom,
|
||||
.collapsible,
|
||||
.collapsible-body,
|
||||
.collapsible-header {
|
||||
border-color: #222;
|
||||
}
|
||||
|
||||
.pagination li.active {
|
||||
background-color: #666;
|
||||
}
|
||||
|
||||
.hljs,
|
||||
#article pre {
|
||||
color: #abb2bf;
|
||||
background-color: #282c34;
|
||||
}
|
||||
|
||||
nav input {
|
||||
color: #abb2bf;
|
||||
}
|
||||
|
||||
input[type="url"]:not(.browser-default):disabled {
|
||||
color: #9e9e9e;
|
||||
}
|
||||
|
||||
.input-field.nav-panel-add.disabled,
|
||||
.input-field.nav-panel-add.disabled input {
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
@media only screen and (min-width: 992px) {
|
||||
#article {
|
||||
background-color: #101010;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,232 +0,0 @@
|
||||
@use "variables";
|
||||
|
||||
/* ==========================================================================
|
||||
* Entries
|
||||
* ========================================================================== */
|
||||
|
||||
.mass-action-toggle {
|
||||
display: inline-flex;
|
||||
background-color: transparent;
|
||||
border: none;
|
||||
cursor: pointer;
|
||||
|
||||
&:focus {
|
||||
background-color: transparent;
|
||||
}
|
||||
}
|
||||
|
||||
.mass-action {
|
||||
margin: 20px 5px 10px 20px;
|
||||
}
|
||||
|
||||
.mass-action-group {
|
||||
display: flex;
|
||||
padding: 3px;
|
||||
align-items: center;
|
||||
gap: 30px;
|
||||
}
|
||||
|
||||
.mass-action-button {
|
||||
height: 36px;
|
||||
line-height: 36px;
|
||||
padding: 0 0.7rem;
|
||||
|
||||
i {
|
||||
font-size: 1rem;
|
||||
}
|
||||
}
|
||||
|
||||
.mass-action-button--tags {
|
||||
border-radius: 2px 0 0 2px;
|
||||
}
|
||||
|
||||
.card-stacked .entry-checkbox {
|
||||
margin: 10px 15px 10px 5px;
|
||||
}
|
||||
|
||||
.card .entry-checkbox {
|
||||
position: absolute;
|
||||
display: flex;
|
||||
padding: 10px;
|
||||
inset: 0;
|
||||
justify-content: flex-end;
|
||||
align-items: start;
|
||||
background-color: rgb(0 172 193 / 20%);
|
||||
cursor: pointer;
|
||||
z-index: 10;
|
||||
}
|
||||
|
||||
.entries .entry-checkbox-input,
|
||||
.mass-action .entry-checkbox-input {
|
||||
position: relative;
|
||||
width: 20px;
|
||||
min-height: 25px;
|
||||
opacity: initial;
|
||||
cursor: pointer;
|
||||
z-index: 10;
|
||||
}
|
||||
|
||||
.toggle-checkbox:not(:checked) + .mass-action,
|
||||
.toggle-checkbox:not(:checked) + .mass-action-tags,
|
||||
.toggle-checkbox:not(:checked) ~ .entries .entry-checkbox,
|
||||
.toggle-checkbox:checked ~ .entries .card-preview {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.mass-action-tags {
|
||||
display: flex;
|
||||
margin-top: 10px;
|
||||
|
||||
.mass-action-tags-input.mass-action-tags-input {
|
||||
margin: 0;
|
||||
padding: 0 5px;
|
||||
height: 34px;
|
||||
background: white;
|
||||
border-bottom: 3px solid #c5ebef;
|
||||
}
|
||||
|
||||
.mass-action-tags-input.mass-action-tags-input.mass-action-tags-input:focus {
|
||||
border-bottom: 3px solid variables.$blue-accent-color;
|
||||
box-shadow: none;
|
||||
}
|
||||
}
|
||||
|
||||
.entries {
|
||||
list-style: none;
|
||||
}
|
||||
|
||||
.collection {
|
||||
margin: 5px 15px 0;
|
||||
padding: 0;
|
||||
|
||||
.collection-item {
|
||||
padding: 7px;
|
||||
height: 65px;
|
||||
}
|
||||
}
|
||||
|
||||
.results {
|
||||
display: flex;
|
||||
margin-bottom: 10px;
|
||||
padding: 1rem 1rem 0;
|
||||
flex-wrap: wrap;
|
||||
justify-content: space-between;
|
||||
}
|
||||
|
||||
.nb-results {
|
||||
display: inline-flex;
|
||||
margin-bottom: 20px;
|
||||
gap: 30px;
|
||||
}
|
||||
|
||||
.results-item {
|
||||
color: #444;
|
||||
}
|
||||
|
||||
.pagination {
|
||||
ul {
|
||||
display: flex;
|
||||
margin: 0;
|
||||
flex-wrap: wrap;
|
||||
justify-content: space-around;
|
||||
|
||||
.prev.disabled,
|
||||
.next.disabled {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
li {
|
||||
padding: 0;
|
||||
|
||||
&:not(.active) a:hover,
|
||||
&:not(.active) a:active,
|
||||
&:not(.active) a:focus {
|
||||
background-color: #e6e6e6;
|
||||
}
|
||||
|
||||
&:not(:last-of-type) {
|
||||
margin-right: 10px;
|
||||
}
|
||||
}
|
||||
|
||||
span,
|
||||
a {
|
||||
padding: 0 10px;
|
||||
height: 30px;
|
||||
display: block;
|
||||
line-height: 30px;
|
||||
}
|
||||
|
||||
.disabled {
|
||||
margin-right: 10px;
|
||||
margin-left: 10px;
|
||||
}
|
||||
|
||||
li.active span {
|
||||
padding: 0 10px;
|
||||
height: 30px;
|
||||
display: block;
|
||||
color: #fff;
|
||||
}
|
||||
}
|
||||
|
||||
.footer-text {
|
||||
margin: 0.7rem 0.5rem;
|
||||
}
|
||||
|
||||
.hidden {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.picker__date-display {
|
||||
display: none;
|
||||
}
|
||||
|
||||
footer {
|
||||
&.page-footer {
|
||||
margin-top: 10px;
|
||||
padding-top: 0;
|
||||
}
|
||||
|
||||
.row {
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
}
|
||||
|
||||
@media screen and (min-width: 993px) {
|
||||
.results {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
.nb-results {
|
||||
margin-bottom: 0;
|
||||
gap: 0;
|
||||
}
|
||||
|
||||
.mass-action-button {
|
||||
height: 24px;
|
||||
line-height: 24px;
|
||||
padding: 0 0.5rem;
|
||||
}
|
||||
|
||||
.mass-action-group {
|
||||
gap: 10px;
|
||||
}
|
||||
|
||||
.mass-action-tags {
|
||||
margin-top: 0;
|
||||
margin-left: 7px;
|
||||
flex-wrap: initial;
|
||||
}
|
||||
|
||||
.mass-action {
|
||||
display: flex;
|
||||
margin-top: 10px;
|
||||
align-items: center;
|
||||
|
||||
.mass-action-tags-input.mass-action-tags-input {
|
||||
height: 21px;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,15 +0,0 @@
|
||||
/* ==========================================================================
|
||||
* Filters slider
|
||||
* ========================================================================== */
|
||||
|
||||
#filters {
|
||||
button {
|
||||
padding: 0;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
div.with-checkbox {
|
||||
height: 3rem;
|
||||
margin-top: 0;
|
||||
}
|
||||
}
|
||||
@ -1,13 +0,0 @@
|
||||
/* ==========================================================================
|
||||
* Fonts
|
||||
* ========================================================================== */
|
||||
|
||||
/**
|
||||
* Icomoon
|
||||
*/
|
||||
@font-face {
|
||||
font-family: icomoon;
|
||||
src: url("~icomoon-free-npm/Font/IcoMoon-Free.ttf");
|
||||
font-weight: normal;
|
||||
font-style: normal;
|
||||
}
|
||||
@ -1,191 +0,0 @@
|
||||
/* ==========================================================================
|
||||
* Icons
|
||||
* ========================================================================== */
|
||||
|
||||
/**
|
||||
*
|
||||
* Material icons
|
||||
*
|
||||
*/
|
||||
.material-icons {
|
||||
font-family: "Material Icons";
|
||||
font-weight: normal;
|
||||
font-style: normal;
|
||||
font-size: 24px; /* Preferred icon size */
|
||||
width: 1em;
|
||||
height: 1em;
|
||||
display: inline-block;
|
||||
line-height: 1;
|
||||
text-transform: none;
|
||||
letter-spacing: normal;
|
||||
word-wrap: normal;
|
||||
white-space: nowrap;
|
||||
direction: ltr;
|
||||
user-select: none;
|
||||
|
||||
/* Support for all WebKit browsers. */
|
||||
-webkit-font-smoothing: antialiased;
|
||||
|
||||
/* Support for Safari and Chrome. */
|
||||
text-rendering: optimizelegibility;
|
||||
|
||||
/* Support for Firefox. */
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
|
||||
/* Support for IE. */
|
||||
font-feature-settings: "liga";
|
||||
|
||||
.md-18 {
|
||||
font-size: 18px;
|
||||
}
|
||||
|
||||
.md-24 {
|
||||
font-size: 24px;
|
||||
}
|
||||
|
||||
.md-36 {
|
||||
font-size: 36px;
|
||||
}
|
||||
|
||||
.md-48 {
|
||||
font-size: 48px;
|
||||
}
|
||||
|
||||
.md-dark {
|
||||
color: rgb(0 0 0 / 54%);
|
||||
|
||||
.md-inactive {
|
||||
color: rgb(0 0 0 / 26%);
|
||||
}
|
||||
}
|
||||
|
||||
.md-light {
|
||||
color: rgb(255 255 255 / 100%);
|
||||
|
||||
.md-inactive {
|
||||
color: rgb(255 255 255 / 30%);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* Icomoon icons
|
||||
*
|
||||
*/
|
||||
[class^="icon-"]::before,
|
||||
[class*=" icon-"]::before {
|
||||
font-family: icomoon;
|
||||
speak: none;
|
||||
font-style: normal;
|
||||
font-weight: normal;
|
||||
font-variant: normal;
|
||||
text-transform: none;
|
||||
line-height: 1;
|
||||
background-size: 24px;
|
||||
|
||||
/* Enable Ligatures ================ */
|
||||
letter-spacing: 0;
|
||||
font-feature-settings: "liga";
|
||||
}
|
||||
|
||||
.icon-eye::before {
|
||||
content: "\e9ce";
|
||||
}
|
||||
|
||||
.icon-no-eye::before {
|
||||
content: "\e9d1";
|
||||
}
|
||||
|
||||
.icon-calendar::before {
|
||||
content: "\e953";
|
||||
}
|
||||
|
||||
.icon-mail::before {
|
||||
content: "\ea86";
|
||||
}
|
||||
|
||||
.icon-time::before {
|
||||
content: "\e952";
|
||||
}
|
||||
|
||||
a.icon-image {
|
||||
background-repeat: no-repeat;
|
||||
padding-right: 0.4em !important;
|
||||
padding-left: 0 !important;
|
||||
margin-left: 25px;
|
||||
|
||||
&::before {
|
||||
content: "";
|
||||
display: block;
|
||||
width: 24px;
|
||||
height: 24px;
|
||||
float: left;
|
||||
margin: 7px 1.5px 0 0;
|
||||
}
|
||||
|
||||
&.diaspora::before {
|
||||
background: url("../img/icons/diaspora-icon--black.png") no-repeat center/80%;
|
||||
}
|
||||
|
||||
&.unmark::before {
|
||||
background: url("../img/icons/unmark-icon--black.png") no-repeat center/80%;
|
||||
}
|
||||
|
||||
&.linkding::before {
|
||||
background: url("../img/icons/linkding.svg") no-repeat center/80%;
|
||||
filter: grayscale(1);
|
||||
}
|
||||
|
||||
&.shaarli::before {
|
||||
background: url("../img/icons/shaarli.png") no-repeat center/80%;
|
||||
}
|
||||
|
||||
&.scuttle::before {
|
||||
background: url("../img/icons/scuttle.png") no-repeat center/80%;
|
||||
}
|
||||
}
|
||||
|
||||
.icon-google-plus2::before {
|
||||
content: "\ea89";
|
||||
}
|
||||
|
||||
.icon-facebook2::before {
|
||||
content: "\ea8d";
|
||||
}
|
||||
|
||||
.icon-twitter::before {
|
||||
content: "\ea96";
|
||||
}
|
||||
|
||||
.icon-apple::before {
|
||||
content: "\eabf";
|
||||
}
|
||||
|
||||
.icon-android::before {
|
||||
content: "\eac1";
|
||||
}
|
||||
|
||||
.icon-chrome::before {
|
||||
content: "\eae5";
|
||||
}
|
||||
|
||||
.icon-firefox::before {
|
||||
content: "\eae6";
|
||||
}
|
||||
|
||||
.icon-link::before {
|
||||
content: "\e9cb";
|
||||
}
|
||||
|
||||
footer [class^="icon-"],
|
||||
footer [class*=" icon-"] {
|
||||
font-size: 2em;
|
||||
transition: text-shadow 0.2s ease;
|
||||
padding-right: 10px;
|
||||
}
|
||||
|
||||
footer [class^="icon-"]:hover,
|
||||
footer [class*=" icon-"]:hover {
|
||||
text-shadow: 0 0 10px rgb(0 0 0 / 30%);
|
||||
}
|
||||
@ -1,54 +0,0 @@
|
||||
@use "variables";
|
||||
|
||||
/* ==========================================================================
|
||||
Layout
|
||||
========================================================================== */
|
||||
|
||||
body {
|
||||
display: flex;
|
||||
min-height: 100vh;
|
||||
flex-direction: column;
|
||||
background: #fafafa;
|
||||
|
||||
&.login main {
|
||||
padding: 0;
|
||||
min-height: 100vh;
|
||||
}
|
||||
}
|
||||
|
||||
.border-bottom {
|
||||
border-bottom: 1px solid #ddd;
|
||||
}
|
||||
|
||||
a {
|
||||
color: variables.$blue-accent-color;
|
||||
}
|
||||
|
||||
main,
|
||||
#content,
|
||||
.valign-wrapper {
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.typo-logo {
|
||||
max-width: 150px;
|
||||
}
|
||||
|
||||
#main {
|
||||
flex: 1 0 auto;
|
||||
|
||||
.logo {
|
||||
a {
|
||||
height: 100pt;
|
||||
}
|
||||
|
||||
img {
|
||||
height: 100pt;
|
||||
width: 100pt;
|
||||
}
|
||||
|
||||
&:hover {
|
||||
background: transparent;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,13 +0,0 @@
|
||||
/* Rules for sizing the icon. */
|
||||
.material-icons.md-18 { font-size: 18px; }
|
||||
.material-icons.md-24 { font-size: 24px; }
|
||||
.material-icons.md-36 { font-size: 36px; }
|
||||
.material-icons.md-48 { font-size: 48px; }
|
||||
|
||||
/* Rules for using icons as black on a light background. */
|
||||
.material-icons.md-dark { color: rgb(0 0 0 / 54%); }
|
||||
.material-icons.md-dark.md-inactive { color: rgb(0 0 0 / 26%); }
|
||||
|
||||
/* Rules for using icons as white on a dark background. */
|
||||
.material-icons.md-light { color: rgb(255 255 255 / 100%); }
|
||||
.material-icons.md-light.md-inactive { color: rgb(255 255 255 / 30%); }
|
||||
@ -1,193 +0,0 @@
|
||||
/* ==========================================================================
|
||||
Media queries
|
||||
========================================================================== */
|
||||
|
||||
@media only screen and (min-width: 450px) {
|
||||
.entries-row {
|
||||
grid-template-columns: repeat(auto-fill, minmax(340px, 1fr));
|
||||
}
|
||||
}
|
||||
|
||||
@media only screen and (min-width: 992px) {
|
||||
nav,
|
||||
.index main,
|
||||
footer {
|
||||
padding-left: 240px;
|
||||
}
|
||||
|
||||
.pagination {
|
||||
margin-left: auto;
|
||||
}
|
||||
}
|
||||
|
||||
@media screen and (min-width: 993px) {
|
||||
.entry main div#content {
|
||||
padding-left: 70px;
|
||||
}
|
||||
}
|
||||
|
||||
@media only screen and (max-width: 992px) {
|
||||
header,
|
||||
main,
|
||||
footer,
|
||||
nav {
|
||||
padding-left: 0;
|
||||
}
|
||||
|
||||
table {
|
||||
display: block;
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
iframe {
|
||||
max-width: 100%;
|
||||
height: auto;
|
||||
}
|
||||
|
||||
.nav-panels .action {
|
||||
padding-right: 0.75rem;
|
||||
}
|
||||
|
||||
.nav-panel-top {
|
||||
padding: 6px 0;
|
||||
}
|
||||
|
||||
.nav-panel-buttom {
|
||||
justify-content: space-between;
|
||||
}
|
||||
|
||||
#article {
|
||||
max-width: 35em;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
padding-bottom: 100px;
|
||||
font-size: 18px;
|
||||
|
||||
> header > h1 {
|
||||
font-size: 1.33em;
|
||||
}
|
||||
}
|
||||
|
||||
.reader-mode {
|
||||
width: 240px !important;
|
||||
|
||||
span {
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
|
||||
.tabs {
|
||||
display: inline-block;
|
||||
height: auto;
|
||||
}
|
||||
|
||||
.tab {
|
||||
min-width: 100%;
|
||||
}
|
||||
|
||||
.indicator {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.pagination li {
|
||||
margin-bottom: 0.5rem;
|
||||
|
||||
&.prev,
|
||||
&.next {
|
||||
width: auto;
|
||||
}
|
||||
}
|
||||
|
||||
.drag-target + .drag-target {
|
||||
height: 50%;
|
||||
}
|
||||
|
||||
.drag-target + .drag-target + .drag-target {
|
||||
top: 50%;
|
||||
}
|
||||
}
|
||||
|
||||
@media only screen and (min-width: 1200px) and (max-width: 1650px) {
|
||||
.row .col.l3 {
|
||||
width: 33.3333%;
|
||||
margin-left: 0;
|
||||
}
|
||||
}
|
||||
|
||||
@media only screen and (min-width: 993px) and (max-width: 1200px) {
|
||||
.row {
|
||||
.col.l1 {
|
||||
width: 25%;
|
||||
margin-left: 0;
|
||||
}
|
||||
|
||||
.col.l2 {
|
||||
width: 33.3333%;
|
||||
margin-left: 0;
|
||||
}
|
||||
|
||||
.col.l3 {
|
||||
width: 41.6667%;
|
||||
margin-left: 0;
|
||||
}
|
||||
|
||||
.col.l4 {
|
||||
width: 50%;
|
||||
margin-left: 0;
|
||||
}
|
||||
|
||||
.col.l5 {
|
||||
width: 58.333%;
|
||||
margin-left: 0;
|
||||
}
|
||||
|
||||
.col.l6 {
|
||||
width: 66.6667%;
|
||||
margin-left: 0;
|
||||
}
|
||||
|
||||
.col.l7 {
|
||||
width: 75%;
|
||||
margin-left: 0;
|
||||
}
|
||||
|
||||
.col.l8 {
|
||||
width: 83.3333%;
|
||||
margin-left: 0;
|
||||
}
|
||||
|
||||
.col.l9 {
|
||||
width: 91.6667%;
|
||||
margin-left: 0;
|
||||
}
|
||||
|
||||
.col.l10 {
|
||||
width: 100%;
|
||||
margin-left: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@media only screen and (max-width: 350px) {
|
||||
.nb-results {
|
||||
display: none;
|
||||
}
|
||||
|
||||
main ul.row {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.row .col {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.card-stacked div.metadata .reading-time {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
@media only print {
|
||||
body {
|
||||
display: block;
|
||||
}
|
||||
}
|
||||
@ -1,194 +0,0 @@
|
||||
/* ==========================================================================
|
||||
Nav
|
||||
========================================================================== */
|
||||
nav {
|
||||
height: auto;
|
||||
line-height: initial;
|
||||
}
|
||||
|
||||
nav {
|
||||
input {
|
||||
color: #aaa;
|
||||
}
|
||||
|
||||
ul a:hover {
|
||||
background-color: initial;
|
||||
}
|
||||
}
|
||||
|
||||
.nav-panel-item .sidenav-trigger {
|
||||
margin-left: 0;
|
||||
margin-right: 0.5rem;
|
||||
padding-left: 0.5rem;
|
||||
padding-right: 0.5rem;
|
||||
height: auto;
|
||||
line-height: 1;
|
||||
background-color: transparent;
|
||||
border: none;
|
||||
}
|
||||
|
||||
.nav-panel-item {
|
||||
display: flex;
|
||||
padding: 0.6rem 0.4rem 0.6rem 0.75rem;
|
||||
flex-wrap: wrap;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
|
||||
a {
|
||||
padding: 10px 15px;
|
||||
}
|
||||
}
|
||||
|
||||
.nav-panel-item .material-icons {
|
||||
height: auto;
|
||||
line-height: 1;
|
||||
}
|
||||
|
||||
.nav-input {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.nav-panel-buttom {
|
||||
display: flex;
|
||||
flex-grow: 1;
|
||||
justify-content: flex-end;
|
||||
}
|
||||
|
||||
.nav-panel-item .add,
|
||||
.nav-panel-item .search,
|
||||
.nav-panels .close {
|
||||
color: #444 !important;
|
||||
}
|
||||
|
||||
.nav-panels {
|
||||
transition: background 0.2s ease;
|
||||
|
||||
.action {
|
||||
margin: 0;
|
||||
font-size: 2.1rem;
|
||||
}
|
||||
|
||||
.input-field input {
|
||||
display: block;
|
||||
font-size: 1.2rem;
|
||||
line-height: inherit;
|
||||
height: 3rem;
|
||||
}
|
||||
|
||||
.input-field input:focus {
|
||||
border: 0;
|
||||
box-shadow: none;
|
||||
color: #444;
|
||||
}
|
||||
|
||||
/* materializecss override */
|
||||
.input-field.input-field input {
|
||||
margin-bottom: 0;
|
||||
border-bottom: none;
|
||||
}
|
||||
|
||||
.input-field.input-field input:focus {
|
||||
border-bottom: none;
|
||||
box-shadow: initial;
|
||||
}
|
||||
}
|
||||
|
||||
.nav-panel-top {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.input-field {
|
||||
&.nav-panel-item label {
|
||||
left: 1rem;
|
||||
}
|
||||
|
||||
&.nav-panel-item .close {
|
||||
color: transparent;
|
||||
cursor: pointer;
|
||||
font-size: 2rem;
|
||||
transition: 0.3s color;
|
||||
}
|
||||
|
||||
&.nav-panel-item {
|
||||
display: flex;
|
||||
flex: 1;
|
||||
flex-wrap: nowrap;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
&.nav-panel-add.disabled,
|
||||
&.nav-panel-add.disabled input {
|
||||
background-color: whitesmoke;
|
||||
}
|
||||
}
|
||||
|
||||
.nav-panel-add,
|
||||
.nav-panel-search {
|
||||
background-color: white;
|
||||
}
|
||||
|
||||
.nav-form-button {
|
||||
padding: 0;
|
||||
background-color: transparent;
|
||||
border: none;
|
||||
|
||||
&:focus {
|
||||
background-color: inherit;
|
||||
}
|
||||
}
|
||||
|
||||
.nav-form-button,
|
||||
.nav-panel-item .close {
|
||||
margin: 0 1%;
|
||||
}
|
||||
|
||||
.button-filters {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.button-export {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.entry-nav-top--sticky {
|
||||
position: sticky;
|
||||
top: 0;
|
||||
}
|
||||
|
||||
.dropdown-content {
|
||||
width: 100%;
|
||||
|
||||
li {
|
||||
min-height: auto;
|
||||
padding-right: 15px;
|
||||
}
|
||||
|
||||
li > a {
|
||||
display: flex;
|
||||
padding: 14px 10px;
|
||||
align-items: center;
|
||||
white-space: initial;
|
||||
}
|
||||
}
|
||||
|
||||
@media (min-width: 993px) {
|
||||
.toggle-add-url-container {
|
||||
flex-grow: 1;
|
||||
}
|
||||
|
||||
.toggle-add-url {
|
||||
display: flex;
|
||||
width: 100%;
|
||||
justify-content: end;
|
||||
}
|
||||
|
||||
.sidenav-trigger {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.dropdown-content {
|
||||
min-width: 300px;
|
||||
width: initial;
|
||||
}
|
||||
}
|
||||
@ -1,70 +0,0 @@
|
||||
@media print {
|
||||
/* ### Layout ### */
|
||||
|
||||
body {
|
||||
font-family: serif;
|
||||
background-color: #fff;
|
||||
}
|
||||
|
||||
@page {
|
||||
margin: 1cm;
|
||||
}
|
||||
|
||||
img {
|
||||
max-width: 100% !important;
|
||||
}
|
||||
|
||||
/* ### Content ### */
|
||||
|
||||
/* Hide useless blocks */
|
||||
body > header,
|
||||
body > footer,
|
||||
.entry-tools,
|
||||
header div,
|
||||
.messages,
|
||||
.entry + .results,
|
||||
.left-bar,
|
||||
.progress,
|
||||
.hide-on-large-only,
|
||||
.entry-info,
|
||||
.title-edit {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
main {
|
||||
padding-left: 0 !important;
|
||||
}
|
||||
|
||||
.article {
|
||||
margin: inherit !important;
|
||||
}
|
||||
|
||||
article {
|
||||
border: none !important;
|
||||
}
|
||||
|
||||
/* Add URL after links */
|
||||
.vieworiginal a::after {
|
||||
content: " (" attr(href) ")";
|
||||
}
|
||||
|
||||
/* Add explanation after abbr */
|
||||
abbr[title]::after {
|
||||
content: " (" attr(title) ")";
|
||||
}
|
||||
|
||||
/* Change border on current pager item */
|
||||
.pagination span.current {
|
||||
border-style: dashed;
|
||||
}
|
||||
|
||||
#main {
|
||||
width: 100%;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
#article {
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
@ -1,55 +0,0 @@
|
||||
/* ==========================================================================
|
||||
Sidenav
|
||||
========================================================================== */
|
||||
|
||||
.sidenav {
|
||||
width: 240px;
|
||||
|
||||
li {
|
||||
padding: 0;
|
||||
|
||||
&.logo > a:hover {
|
||||
background: initial;
|
||||
}
|
||||
|
||||
& > a > i.material-icons.theme-toggle-icon {
|
||||
float: none;
|
||||
margin-left: 0;
|
||||
}
|
||||
}
|
||||
|
||||
a {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
&.sidenav-fixed a {
|
||||
font-size: 13px;
|
||||
line-height: 44px;
|
||||
height: 44px;
|
||||
}
|
||||
|
||||
.collapsible-header,
|
||||
&.sidenav-fixed .collapsible-header {
|
||||
height: 45px;
|
||||
line-height: 44px;
|
||||
padding: 0 20px;
|
||||
}
|
||||
|
||||
> li.logo {
|
||||
line-height: 0;
|
||||
text-align: center;
|
||||
}
|
||||
}
|
||||
|
||||
.bold > a {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.items-number {
|
||||
float: right;
|
||||
}
|
||||
|
||||
.button-filters .sidenav-trigger,
|
||||
.button-export .sidenav-trigger {
|
||||
display: block;
|
||||
}
|
||||
@ -1,5 +0,0 @@
|
||||
/* ==========================================================================
|
||||
Variables
|
||||
========================================================================== */
|
||||
|
||||
$blue-accent-color: #00acc1;
|
||||
@ -1,40 +0,0 @@
|
||||
/* ==========================================================================
|
||||
* Various
|
||||
* ========================================================================== */
|
||||
|
||||
div.settings div.file-field {
|
||||
/* force height on non-input field in the settings page */
|
||||
div,
|
||||
ul {
|
||||
margin-top: 40px;
|
||||
}
|
||||
|
||||
/* but avoid to kill all file input */
|
||||
div {
|
||||
margin-top: inherit;
|
||||
}
|
||||
}
|
||||
|
||||
/* override materializecss pointer-event disabled on checkboxes */
|
||||
[type="checkbox"]:not(:checked),
|
||||
[type="checkbox"]:checked,
|
||||
.input-field label {
|
||||
pointer-events: initial;
|
||||
}
|
||||
|
||||
.input-field label.active {
|
||||
font-size: 1rem;
|
||||
}
|
||||
|
||||
nav .input-field input {
|
||||
margin: 0;
|
||||
padding-left: 0.5rem;
|
||||
}
|
||||
|
||||
.tabs {
|
||||
display: flex;
|
||||
}
|
||||
|
||||
.tab {
|
||||
flex: 1;
|
||||
}
|
||||
@ -1,19 +0,0 @@
|
||||
@use "material-icons";
|
||||
@use "variables";
|
||||
|
||||
/* Style */
|
||||
@use "article";
|
||||
@use "cards";
|
||||
@use "entries";
|
||||
@use "filters";
|
||||
@use "layout";
|
||||
@use "nav";
|
||||
@use "sidenav";
|
||||
@use "various";
|
||||
@use "dark_theme";
|
||||
|
||||
/* Tools */
|
||||
@use "fonts";
|
||||
@use "icons";
|
||||
@use "print";
|
||||
@use "media_queries";
|
||||
@ -1,426 +0,0 @@
|
||||
/* -------------------------- Reset ------------------- */
|
||||
|
||||
html,
|
||||
body,
|
||||
div,
|
||||
span,
|
||||
applet,
|
||||
object,
|
||||
iframe,
|
||||
h1,
|
||||
h2,
|
||||
h3,
|
||||
h4,
|
||||
h5,
|
||||
h6,
|
||||
p,
|
||||
blockquote,
|
||||
pre,
|
||||
a,
|
||||
abbr,
|
||||
acronym,
|
||||
address,
|
||||
big,
|
||||
cite,
|
||||
code,
|
||||
del,
|
||||
dfn,
|
||||
em,
|
||||
img,
|
||||
ins,
|
||||
kbd,
|
||||
q,
|
||||
s,
|
||||
samp,
|
||||
small,
|
||||
strike,
|
||||
strong,
|
||||
sub,
|
||||
sup,
|
||||
tt,
|
||||
b,
|
||||
u,
|
||||
i,
|
||||
dl,
|
||||
dt,
|
||||
dd,
|
||||
ol,
|
||||
ul,
|
||||
li,
|
||||
fieldset,
|
||||
form,
|
||||
label,
|
||||
legend,
|
||||
table,
|
||||
caption,
|
||||
tbody,
|
||||
tfoot,
|
||||
thead,
|
||||
tr,
|
||||
th,
|
||||
td,
|
||||
article,
|
||||
aside,
|
||||
canvas,
|
||||
details,
|
||||
embed,
|
||||
figure,
|
||||
figcaption,
|
||||
footer,
|
||||
header,
|
||||
hgroup,
|
||||
menu,
|
||||
nav,
|
||||
output,
|
||||
section,
|
||||
summary,
|
||||
time,
|
||||
mark,
|
||||
audio,
|
||||
video {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
border: 0;
|
||||
font-size: 100%;
|
||||
vertical-align: baseline;
|
||||
}
|
||||
|
||||
article,
|
||||
aside,
|
||||
details,
|
||||
figcaption,
|
||||
figure,
|
||||
footer,
|
||||
header,
|
||||
hgroup,
|
||||
menu,
|
||||
nav,
|
||||
section {
|
||||
display: block;
|
||||
}
|
||||
|
||||
body {
|
||||
line-height: 1;
|
||||
}
|
||||
|
||||
blockquote,
|
||||
q {
|
||||
quotes: none;
|
||||
}
|
||||
|
||||
blockquote::before,
|
||||
blockquote::after,
|
||||
q::before,
|
||||
q::after {
|
||||
content: "";
|
||||
content: none;
|
||||
}
|
||||
|
||||
table {
|
||||
border-collapse: collapse;
|
||||
border-spacing: 0;
|
||||
}
|
||||
|
||||
/* -------------------------- General properties ------------------- */
|
||||
|
||||
body {
|
||||
background-color: white;
|
||||
color: #444;
|
||||
font-family: Georgia;
|
||||
line-height: 1.7;
|
||||
-ms-content-zooming: none;
|
||||
margin-bottom: 64px;
|
||||
}
|
||||
|
||||
h1,
|
||||
h2,
|
||||
h3,
|
||||
h4,
|
||||
h5,
|
||||
h6 {
|
||||
font-weight: 600;
|
||||
margin: 0.2em 0;
|
||||
}
|
||||
|
||||
article h1,
|
||||
article h2,
|
||||
article h3,
|
||||
article h4,
|
||||
article h5,
|
||||
article h6 {
|
||||
text-align: left;
|
||||
line-height: 1.3;
|
||||
}
|
||||
|
||||
h1 {
|
||||
font-size: 1.4em;
|
||||
}
|
||||
|
||||
h2 {
|
||||
font-size: 1.3em;
|
||||
}
|
||||
|
||||
h3,
|
||||
h4 {
|
||||
font-size: 1.2em;
|
||||
}
|
||||
|
||||
h5,
|
||||
h6 {
|
||||
font-size: 1.1em;
|
||||
}
|
||||
|
||||
p {
|
||||
margin-bottom: 0.75em;
|
||||
}
|
||||
|
||||
b,
|
||||
strong {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
i,
|
||||
em {
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
a {
|
||||
color: #444;
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
a:active,
|
||||
a:hover {
|
||||
outline: 0;
|
||||
}
|
||||
|
||||
p,
|
||||
ul,
|
||||
ol,
|
||||
dl {
|
||||
margin: 0 0 1.75em;
|
||||
}
|
||||
|
||||
ul,
|
||||
ol {
|
||||
padding-left: 1.25em;
|
||||
}
|
||||
|
||||
li {
|
||||
padding-bottom: 0.2em;
|
||||
line-height: 1.6;
|
||||
}
|
||||
|
||||
li p:last-child,
|
||||
li li:last-child {
|
||||
margin-bottom: -0.2em;
|
||||
}
|
||||
|
||||
ul li:last-child,
|
||||
ol li:last-child {
|
||||
padding-bottom: 0;
|
||||
}
|
||||
|
||||
iframe,
|
||||
video {
|
||||
max-width: 100%;
|
||||
height: auto;
|
||||
}
|
||||
|
||||
mark {
|
||||
padding: 0 0.2em;
|
||||
}
|
||||
|
||||
mark a {
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
blockquote {
|
||||
font-style: italic;
|
||||
border-left: 0.25em solid black;
|
||||
margin-left: -20px;
|
||||
padding-left: 17px;
|
||||
margin-bottom: 0.5em;
|
||||
margin-top: 0.5em;
|
||||
}
|
||||
|
||||
blockquote cite {
|
||||
text-transform: uppercase;
|
||||
font-size: 0.8em;
|
||||
font-style: normal;
|
||||
}
|
||||
|
||||
blockquote cite::before {
|
||||
content: "—";
|
||||
margin-right: 0.5em;
|
||||
}
|
||||
|
||||
img {
|
||||
display: block;
|
||||
height: auto;
|
||||
margin-bottom: 0.5em;
|
||||
max-width: 100%;
|
||||
}
|
||||
|
||||
figure {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
figure figcaption {
|
||||
display: block;
|
||||
margin-top: 0.3em;
|
||||
font-style: italic;
|
||||
font-size: 0.8em;
|
||||
}
|
||||
|
||||
button {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
hr {
|
||||
display: block;
|
||||
height: 1px;
|
||||
border: solid #666;
|
||||
border-width: 1px 0 0;
|
||||
margin: 1.6em 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
small {
|
||||
font-size: 0.7em;
|
||||
}
|
||||
|
||||
dl {
|
||||
margin: 1.6em 0;
|
||||
}
|
||||
|
||||
dl dt {
|
||||
float: left;
|
||||
width: 11.25em;
|
||||
overflow: hidden;
|
||||
clear: left;
|
||||
text-align: right;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
font-weight: bold;
|
||||
margin-bottom: 1em;
|
||||
}
|
||||
|
||||
dl dd {
|
||||
margin-left: 12.5em;
|
||||
margin-bottom: 1em;
|
||||
}
|
||||
|
||||
pre {
|
||||
box-sizing: border-box;
|
||||
margin: 4em 0;
|
||||
border: 0.0625em solid #efefef;
|
||||
width: 100%;
|
||||
padding: 1em;
|
||||
font-family: Consolas, monospace;
|
||||
white-space: pre;
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
pre code {
|
||||
font-size: 0.8em;
|
||||
line-height: 1.6em;
|
||||
white-space: pre-wrap;
|
||||
background: transparent;
|
||||
border: none;
|
||||
padding: 0;
|
||||
vertical-align: inherit;
|
||||
}
|
||||
|
||||
code {
|
||||
padding: 0.125em 0.375em;
|
||||
margin: 0 0.2em;
|
||||
font-family: Consolas, monospace;
|
||||
font-size: 0.8em;
|
||||
white-space: pre;
|
||||
border: 1px solid lightgray;
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
audio,
|
||||
video {
|
||||
max-width: 43.75em;
|
||||
}
|
||||
|
||||
::selection,
|
||||
mark {
|
||||
background: #666;
|
||||
color: white;
|
||||
}
|
||||
|
||||
table {
|
||||
border-collapse: collapse;
|
||||
margin-bottom: 2em;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
th,
|
||||
td {
|
||||
padding: 0.25em;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
thead tr {
|
||||
text-transform: uppercase;
|
||||
font-size: 0.85em;
|
||||
letter-spacing: 1px;
|
||||
font-family: "Segoe UI", sans-serif;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
tbody tr:nth-child(2n+1) {
|
||||
background: rgb(0 0 0 / 10%);
|
||||
}
|
||||
|
||||
tbody {
|
||||
border: solid #999;
|
||||
border-width: 1px 0;
|
||||
}
|
||||
|
||||
figure {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
figure > * {
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
header {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.shared-by {
|
||||
margin-bottom: 1em;
|
||||
}
|
||||
|
||||
/* --------------------- Responsive design ------------------------- */
|
||||
|
||||
@media (max-width: 719px) {
|
||||
header > *:not(.preview),
|
||||
article {
|
||||
padding: 0 1em;
|
||||
}
|
||||
}
|
||||
|
||||
@media (min-width: 720px) {
|
||||
blockquote {
|
||||
margin-left: -1.4375em;
|
||||
padding-left: 1.25em;
|
||||
}
|
||||
|
||||
header {
|
||||
margin-top: 32px;
|
||||
}
|
||||
|
||||
.block {
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
max-width: 43.75em;
|
||||
padding: 0 1.25em;
|
||||
}
|
||||
}
|
||||
@ -1 +0,0 @@
|
||||
import './scss/share.scss';
|
||||
14
bin/console
14
bin/console
@ -3,20 +3,22 @@
|
||||
|
||||
use Symfony\Bundle\FrameworkBundle\Console\Application;
|
||||
use Symfony\Component\Console\Input\ArgvInput;
|
||||
use Symfony\Component\ErrorHandler\Debug;
|
||||
use Symfony\Component\Debug\Debug;
|
||||
|
||||
// if you don't want to setup permissions the proper way, just uncomment the following PHP line
|
||||
// read https://symfony.com/doc/current/setup.html#checking-symfony-application-configuration-and-setup
|
||||
// for more information
|
||||
// read http://symfony.com/doc/current/book/installation.html#configuration-and-setup for more information
|
||||
//umask(0000);
|
||||
|
||||
set_time_limit(0);
|
||||
|
||||
require __DIR__.'/../vendor/autoload.php';
|
||||
/**
|
||||
* @var Composer\Autoload\ClassLoader $loader
|
||||
*/
|
||||
$loader = require __DIR__.'/../app/autoload.php';
|
||||
|
||||
$input = new ArgvInput();
|
||||
$env = $input->getParameterOption(['--env', '-e'], getenv('SYMFONY_ENV') ?: 'dev', true);
|
||||
$debug = getenv('SYMFONY_DEBUG') !== '0' && !$input->hasParameterOption('--no-debug', true) && $env !== 'prod';
|
||||
$env = $input->getParameterOption(['--env', '-e'], getenv('SYMFONY_ENV') ?: 'dev');
|
||||
$debug = getenv('SYMFONY_DEBUG') !== '0' && !$input->hasParameterOption(['--no-debug', '']) && $env !== 'prod';
|
||||
|
||||
if ($debug) {
|
||||
Debug::enable();
|
||||
|
||||
1
bin/doctrine
Symbolic link
1
bin/doctrine
Symbolic link
@ -0,0 +1 @@
|
||||
../vendor/doctrine/orm/bin/doctrine
|
||||
1
bin/doctrine-dbal
Symbolic link
1
bin/doctrine-dbal
Symbolic link
@ -0,0 +1 @@
|
||||
../vendor/doctrine/dbal/bin/doctrine-dbal
|
||||
1
bin/doctrine-migrations
Symbolic link
1
bin/doctrine-migrations
Symbolic link
@ -0,0 +1 @@
|
||||
../vendor/doctrine/migrations/bin/doctrine-migrations
|
||||
1
bin/doctrine.php
Symbolic link
1
bin/doctrine.php
Symbolic link
@ -0,0 +1 @@
|
||||
../vendor/doctrine/orm/bin/doctrine.php
|
||||
1
bin/phpunit
Symbolic link
1
bin/phpunit
Symbolic link
@ -0,0 +1 @@
|
||||
../vendor/phpunit/phpunit/phpunit
|
||||
1
bin/security-checker
Symbolic link
1
bin/security-checker
Symbolic link
@ -0,0 +1 @@
|
||||
../vendor/sensiolabs/security-checker/security-checker
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user