Compare commits

..

61 Commits
2.0.0 ... 2.0.1

Author SHA1 Message Date
7189067d38 Change Travis configuration 2016-04-11 20:23:11 +02:00
de286dc3cd Release wallabag 2.0.1 2016-04-11 20:23:11 +02:00
41e79f9792 Merge pull request #1912 from wallabag/install-config
Move setup config outside setupAdmin
2016-04-11 20:16:49 +02:00
637dc4bb21 Move setup config outside setupAdmin
If user doesn't want to create a new admin (even if it's recommended) the internal config weren't created resulting in error when using the interface.
2016-04-11 19:37:29 +02:00
a83fbf4504 Merge pull request #1909 from wallabag/prepare-release-2.0.1
Prepare release 2.0.1
2016-04-11 14:14:25 +02:00
d098cb04a8 Prepare release 2.0.1 2016-04-11 11:13:02 +02:00
574d101561 Merge pull request #1902 from wallabag/v2-changelog
Add changelog
2016-04-10 23:13:21 +02:00
386d1120c3 Update changelog 2016-04-10 20:24:20 +02:00
15e9483323 Merge pull request #1823 from wallabag/translation-fa
Translation fa
2016-04-10 20:00:03 +02:00
c5dede8445 Merge pull request #1903 from wallabag/force-server-version
Force server version to avoid connexion error
2016-04-10 19:57:45 +02:00
e9497f6fc0 Merge pull request #1901 from wallabag/spanish
Update Spanish translation
2016-04-10 15:43:40 +02:00
c71d83b60c Merge pull request #1887 from wallabag/v2-duplicate-bookmarklet
Fix duplicate article when added via the bookmarklet
2016-04-10 15:37:33 +02:00
f642863ff2 Merge pull request #1895 from wallabag/v2-fix-entries-api
All the entries are fetched via GET /api/entries
2016-04-10 15:37:05 +02:00
69c21157ba Force server version to avoid connexion error
When installing a new project with MySQL, if the database doesn't exist before installation will fail because DBAL will try to get the server version by querying it.
And since this query is done using the default database connexion and since the database doesn't exist, DBAL can't connect to the server.
2016-04-10 15:34:32 +02:00
9b2fe57eb6 Add changelog 2016-04-10 15:12:54 +02:00
b351d0494b Fix FA translations indentation 2016-04-10 14:33:11 +02:00
6d0db75328 Update messages.fa.yml 2016-04-10 14:33:11 +02:00
615fc1d237 Merge pull request #1900 from wallabag/v2-remove-pt-empty-doc
Remove empty portugese documentation
2016-04-10 14:25:01 +02:00
61fcbe9f57 Fix typo in french documentation 2016-04-10 14:23:43 +02:00
eaec84fcd3 Uncommented translated ES lines
Also, turn yaml lint into a more versbose check
2016-04-10 14:21:42 +02:00
834efe84ac Change visibility of checkIfEntryAlreadyExists method to private 2016-04-10 14:20:39 +02:00
466c0c6684 Remove empty portugese documentation 2016-04-10 14:18:03 +02:00
661d5ae0cf Update messages.es.yml
On line 103, I'm not sure what symbol that is that looks like this (<<) but it looks smaller? Where is that? Should I just copy and paste it? And just to clarity, please look at line 101 too cause I'm not too sure if/how I change the stuff within <...> I stopped mid line in 103 just until I get clarification on this. Thanks.
2016-04-10 14:18:03 +02:00
dd4997d705 Update messages.es.yml 2016-04-10 14:17:35 +02:00
c29747357a Merge pull request #1899 from wallabag/v2-nginx-doc
Add documentation about importing large file into nginx
2016-04-10 14:15:38 +02:00
0135c98b24 Remove int cast 2016-04-10 14:15:21 +02:00
cea846d407 Add documentation about importing large file into nginx
Fix #1849: configuration to avoid 413 Request Entity Too Large.
2016-04-10 14:12:25 +02:00
54ecbb41d6 Merge pull request #1898 from wallabag/v2-fix-readingtime-display-material
Fix estimated reading time in material view
2016-04-10 14:12:13 +02:00
19a7ea2a44 Merge pull request #1896 from wallabag/v2-fix-internal-settings
Fix internal settings
2016-04-10 09:49:10 +02:00
2504fe46ed Merge pull request #1894 from wallabag/v2-fix-doc-link
Fix documentation link in developer page
2016-04-10 09:44:48 +02:00
82dbd47391 Merge pull request #1891 from wallabag/v2-fix-rules-typo
Fix typo on configuration page
2016-04-10 09:37:49 +02:00
7ead8a0d9d Fix estimated reading time in material view
Fix #1893
2016-04-10 08:48:53 +02:00
cb48a569e0 Fix internal settings
Fix #1867: remove download_picture setting and manage show_printlink in material theme
2016-04-09 21:34:50 +02:00
5c3ca4fe9e All the entries are fetched via GET /api/entries
Fix #1863: only the unread entries were fetched with GET /api/entries entrypoint. Now, all the entries are fetched
2016-04-09 21:13:56 +02:00
808f541ea9 Fix documentation link in developer page 2016-04-09 20:43:22 +02:00
7a2157b8d7 Fix typo on configuration page 2016-04-09 14:04:43 +02:00
b00a89e08f Refactor EntryController 2016-04-09 13:44:54 +02:00
015e4284f0 Merge pull request #1824 from wallabag/v2-alternative-env
Remove SMTP configuration environment overrides
2016-04-08 21:03:17 +02:00
f652f41dab Fix duplicate article when added via the bookmarklet 2016-04-08 15:41:05 +02:00
7704ef5d3f Add documentation 2016-04-08 14:09:31 +02:00
e969c2a7ef Merge pull request #1879 from wallabag/v2-tag-field-position
Move tag form in Material theme
2016-04-08 13:51:20 +02:00
5b732257db Merge pull request #1884 from wallabag/nicosomb-patch-1
Change the installation method in issue template
2016-04-08 13:50:22 +02:00
0c608f1183 Change the installation method in issue template 2016-04-08 13:14:47 +02:00
77b9db87b8 Merge pull request #1804 from wallabag/j0k3r-patch-1
Force user-agent for iansommerville.com
2016-04-08 11:18:44 +02:00
6a986910b6 Merge pull request #1868 from wallabag/v2-tagrule-baggy
Remove keyboard shortcut and add tagging rule panel in baggy
2016-04-07 14:10:08 +02:00
c6cbe75b2e Move tag form in Material theme 2016-04-07 13:47:35 +02:00
9479ae834c Lock ocramius/proxy-manager
To avoid problem with PHP < 7.0
2016-04-06 11:37:03 +02:00
c802181126 Documentation about wallabag API 2016-04-06 11:30:41 +02:00
8687bcd0c9 Remove keybaord shortcut and add tagging rule panel in baggy 2016-04-05 22:29:47 +02:00
4b0b77e4d7 Merge pull request #1862 from wallabag/v2-doc-import-wllbg1-cli
Add production environment for CLI import
2016-04-05 16:57:43 +02:00
e543d03fd7 Merge pull request #1861 from wallabag/v2-round-estimated-time
Round estimated time and add reading speed for Baggy
2016-04-05 16:18:26 +02:00
6d3a3cfcda Add production environment for CLI import 2016-04-05 15:45:59 +02:00
4a749cad8d Round estimated time and add reading speed for Baggy 2016-04-05 15:35:01 +02:00
3a7df76013 Merge pull request #1856 from wallabag/v2-doc-import-wllbg1-cli
Documentation about wallabag v1 CLI import
2016-04-05 13:49:40 +02:00
af47742dd0 Documentation about wallabag v1 CLI import 2016-04-05 13:46:59 +02:00
52d806ea6b Add migrate link in french documentation 2016-04-05 08:48:53 +02:00
48bb9675c1 Add migrate link in english documentation 2016-04-05 08:48:29 +02:00
6b82630838 Merge pull request #1840 from wallabag/v2-fix-archive-page-title
Fix Archive page title translation
2016-04-04 09:20:04 +02:00
b5cf84bdf6 Fix Archive page title translation 2016-04-04 08:00:31 +02:00
0bb5669cf6 Remove SMTP configuration environment overrides
SMTP configuration has been added in #1518 to use ParameterHandle's
env-map. But Symfony actually has a native way of allowing parameters to
be overriden from environment so rather than having to define a mapping
for each possible parameter, users can define any override in
parameters.yml:

> parameters:
>     database_host: %WALLABAG_DB_HOST%

and define an environment variable SYMFONY__WALLABAG_DB_HOST.

Links:
env-map: https://github.com/Incenteev/ParameterHandler#using-environment-variables-to-set-the-parameters
Symfony external parameters: http://symfony.com/doc/current/cookbook/configuration/external_parameters.html
2016-03-29 13:44:12 +02:00
e71c376db9 Force user-agent for iansommerville.com
When using the default User Agent, the website returns a 403. By forcing the User Agent for this domain, we got the proper behavior: a 200

Since we can't _append_ new user agent to the default graby configuration, we need to rewrite all the default config + the new one.

Fix #1801
2016-03-18 20:55:54 +01:00
43 changed files with 7114 additions and 439 deletions

View File

@ -6,7 +6,7 @@ Remember, this is _not_ a place to ask questions. For that, go to http://gitter.
### Environment
* wallabag version (or git revision) that exhibits the issue:
* How did you install wallabag? Via `composer create-project` or by downloading the package?
* How did you install wallabag? Via `git clone` or by downloading the package?
* Last wallabag version that did not exhibit the issue (if applicable):
* php version:
* OS:

View File

@ -54,8 +54,8 @@ before_install:
- if [[ $TRAVIS_REPO_SLUG = wallabag/wallabag ]]; then cp .composer-auth.json ~/.composer/auth.json; fi;
script:
- travis_wait composer install --no-interaction --no-progress --prefer-dist -o
- travis_wait composer update --no-interaction --no-progress
- ant prepare-$DB
- bin/phpunit -v
- if [ "$CS_FIXER" = "run" ]; then php bin/php-cs-fixer fix src/ --verbose --dry-run ; fi;
- if [ "$VALIDATE_TRANSLATION_FILE" = "run" ]; then php bin/console lint:yaml src/Wallabag/CoreBundle/Resources/translations ; fi;
- if [ "$VALIDATE_TRANSLATION_FILE" = "run" ]; then php bin/console lint:yaml src/Wallabag/CoreBundle/Resources/translations -v ; fi;

64
CHANGELOG.md Normal file
View File

@ -0,0 +1,64 @@
# Changelog
All notable changes to this project will be documented in this file. This project adheres to [Semantic Versioning](http://semver.org/).
## [2.0.1] - 2016-04-11
### Added
- [Documentation about importing large file](http://doc.wallabag.org/en/v2/user/installation.html#installing-on-nginx) into nginx. (Nicolas Lœuillet)
- [Documentation about wallabag API](http://doc.wallabag.org/en/v2/developer/api.html) (Nicolas Lœuillet)
- [#1861](https://github.com/wallabag/wallabag/pull/1861) Round estimated time and add reading speed for Baggy (Nicolas Lœuillet)
- [Documentation about wallabag v1 CLI import](http://doc.wallabag.org/en/v2/user/migration.html#import-via-command-line-interface-cli) (Nicolas Lœuillet)
- [Add migrate link](http://doc.wallabag.org/en/v2/user/migration.html) in documentation (Nicolas Lœuillet)
### Changed
- [#1823](https://github.com/wallabag/wallabag/pull/1823) Persian translation (Masoud Abkenar)
- [#1901](https://github.com/wallabag/wallabag/pull/1901) Spanish translation (Jeremy Benoist)
- [#1879](https://github.com/wallabag/wallabag/pull/1879) Move tag form in Material theme (Nicolas Lœuillet)
### Fixed
- [#1903](https://github.com/wallabag/wallabag/pull/1903) Force server version to avoid connection error (Jeremy Benoist)
- [#1887](https://github.com/wallabag/wallabag/pull/1887) Fix duplicate article when added via the bookmarklet (Nicolas Lœuillet)
- [#1895](https://github.com/wallabag/wallabag/pull/1895) API: All the entries are fetched via GET /api/entries (Nicolas Lœuillet)
- [#1898](https://github.com/wallabag/wallabag/pull/1898) Fix estimated reading time in material view #1893 (Nicolas Lœuillet)
- [#1896](https://github.com/wallabag/wallabag/pull/1896) remove download_picture setting and manage show_printlink in material theme #1867 (Nicolas Lœuillet)
- [#1894](https://github.com/wallabag/wallabag/pull/1894) Fix documentation link in developer page (Nicolas Lœuillet)
- [#1891](https://github.com/wallabag/wallabag/pull/1891) Fix typo on configuration page (Nicolas Lœuillet)
- [#1884](https://github.com/wallabag/wallabag/pull/1884) Change the installation method in issue template (Nicolas Lœuillet)
- [#1844](https://github.com/wallabag/wallabag/pull/1844) Lock ocramius/proxy-manager (Jeremy Benoist)
- [#1840](https://github.com/wallabag/wallabag/pull/1840) Fix Archive page title translation (Nicolas Lœuillet)
- [#1801](https://github.com/wallabag/wallabag/pull/1804) Force user-agent for iansommerville.com (Jeremy Benoist)
### Removed
- [#1900](https://github.com/wallabag/wallabag/pull/1900) Remove empty portugese documentation (Nicolas Lœuillet)
- [#1868](https://github.com/wallabag/wallabag/pull/1868) Remove keyboard shortcut and add tagging rule panel in baggy (Nicolas Lœuillet)
- [#1824](https://github.com/wallabag/wallabag/pull/1824) Remove SMTP configuration environment overrides (Mathieu Bruyen)
## [2.0.0] - 2016-04-03
### Added
* save an article, read it, favorite it, archive it. (Hopefully)
* annotations: In each article you read, you can write annotations. ([read the doc](http://doc.wallabag.org/en/v2/user/annotations.html))
* filter entries by reading time, domain name, creation date, status, etc.
* assign tags to entries
* edit article titles
* a REST API ([you can have a look to the documentation](http://v2.wallabag.org/api/doc))
* authorization via oAuth2
* a new default theme, called `material`
* RSS feeds (with ability to limit number of articles)
* create a new account from the config page (for super admin only)
* recover passwords from login page (you have to fill your email on config page)
* picture preview, if available, is displayed for each entry
* Public registration
* migration from wallabag v1/v2 (based on JSON export) ([read the doc](http://doc.wallabag.org/en/v2/user/import.html))
* migration from Pocket (it works, but we need to implement asynchronous import: if you have too many articles, it can fail) ([read the doc](http://doc.wallabag.org/en/v2/user/import.html))
* exports in many formats (PDF, JSON, EPUB, MOBI, XML, CSV and TXT).
* 2-Factor authentication via email ([read the doc](http://doc.wallabag.org/en/v2/user/configuration.html#two-factor-authentication))
* Tagging rule: create a rule to automatically assign tags to entries! ([read the doc](http://doc.wallabag.org/en/v2/user/configuration.html#tagging-rules))
* Occitan, German, French, Turkish, Persian, Romanian, Polish, Danish, Spanish and English translations
* Quickstart for beginners (when you don't have any entries)
* Internal settings for administrator (the account created during installation)
* For 3rd apps developers, a developer page is available to create API token

View File

@ -16,7 +16,7 @@ Then you can install wallabag by executing the following commands:
```
git clone https://github.com/wallabag/wallabag.git
cd wallabag
git checkout 2.0.0
git checkout 2.0.1
SYMFONY_ENV=prod composer install --no-dev -o --prefer-dist
php bin/console wallabag:install --env=prod
php bin/console server:run --env=prod

View File

@ -28,7 +28,7 @@ framework:
assets: ~
wallabag_core:
version: 2.0.0
version: 2.0.1
paypal_url: "https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=9UBA65LG3FX9Y&lc=gb"
languages:
en: 'English'
@ -82,6 +82,7 @@ doctrine:
password: "%database_password%"
charset: UTF8
path: "%database_path%"
server_version: 5.6
orm:
auto_generate_proxy_classes: "%kernel.debug%"

View File

@ -80,7 +80,8 @@
"paragonie/random_compat": "~1.0",
"craue/config-bundle": "~1.4",
"mnapoli/piwik-twig-extension": "^1.0",
"lexik/maintenance-bundle": "~2.1"
"lexik/maintenance-bundle": "~2.1",
"ocramius/proxy-manager": "1.*"
},
"require-dev": {
"doctrine/doctrine-fixtures-bundle": "~2.2",
@ -90,11 +91,8 @@
"fabpot/php-cs-fixer": "~1.9"
},
"scripts": {
"build-parameters": [
"Incenteev\\ParameterHandler\\ScriptHandler::buildParameters"
],
"post-cmd": [
"@build-parameters",
"Incenteev\\ParameterHandler\\ScriptHandler::buildParameters",
"Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::buildBootstrap",
"Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::clearCache",
"Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installAssets",
@ -116,13 +114,7 @@
"symfony-tests-dir": "tests",
"symfony-assets-install": "relative",
"incenteev-parameters": {
"file": "app/config/parameters.yml",
"env-map": {
"mailer_host": "WALLABAG_MAILER_HOST",
"mailer_user": "WALLABAG_MAILER_USER",
"mailer_password": "WALLABAG_MAILER_PASSWORD",
"secret": "WALLABAG_SECRET"
}
"file": "app/config/parameters.yml"
}
},
"autoload": {

6042
composer.lock generated Normal file

File diff suppressed because it is too large Load Diff

235
docs/en/developer/api.rst Normal file

File diff suppressed because one or more lines are too long

View File

@ -24,6 +24,7 @@ The main documentation for this application is organized into a couple sections:
:caption: User documentation
user/installation
user/migration
user/create_account
user/login
user/configuration
@ -41,7 +42,7 @@ The main documentation for this application is organized into a couple sections:
:maxdepth: 2
:caption: Developer documentation
developer/api
developer/docker
developer/translate
developer/maintenance
developer/releasing

View File

@ -50,7 +50,7 @@ To install wallabag itself, you must run these two commands:
git clone https://github.com/wallabag/wallabag.git
cd wallabag
git checkout 2.0.0
git checkout 2.0.1
SYMFONY_ENV=prod composer install --no-dev -o --prefer-dist
php bin/console wallabag:install --env=prod
@ -62,6 +62,11 @@ To start php's build-in server and test if everything did install correctly, you
And access wallabag at http://yourserverip:8000
.. note::
To define parameters with environment variables, you have to set these variables with ``SYMFONY__`` prefix. For example, ``SYMFONY__DATABASE_DRIVER``. You can have a look to the `Symfony documentation
<http://symfony.com/doc/current/cookbook/configuration/external_parameters.html>`__.
Installing on Apache
--------------------
@ -146,3 +151,7 @@ Assuming you install wallabag in the /var/www/wallabag folder, here's the recipe
}
After reloading or restarting nginx, you should now be able to access wallabag at http://domain.tld.
.. note::
When you want to import large file into wallabag, you need to add this line in your nginx configuration ``client_max_body_size XM; # allows file uploads up to X megabytes``.

View File

@ -24,6 +24,28 @@ After creating an user account on your new wallabag v2 instance, you must head o
:alt: Import from wallabag v1
:align: center
Import via command-line interface (CLI)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
If you have a CLI access on your web server, you can execute this command to import your wallabag v1 export:
::
bin/console wallabag:import-v1 1 ~/Downloads/wallabag-export-1-2016-04-05.json --env=prod
Please replace values:
* ``1`` is the user identifier in database (The ID of the first user created on wallabag is 1)
* ``~/Downloads/wallabag-export-1-2016-04-05.json`` is the path of your wallabag v1 export
You'll have this in return:
::
Start : 05-04-2016 11:36:07 ---
403 imported
0 already saved
End : 05-04-2016 11:36:09 ---
From wallabag 2.x
-----------------

235
docs/fr/developer/api.rst Normal file

File diff suppressed because one or more lines are too long

View File

@ -25,6 +25,7 @@ La documentation principale de cette application est découpée en plusieurs sec
:caption: Documentation utilisateur
user/installation
user/migration
user/create_account
user/login
user/configuration
@ -42,6 +43,7 @@ La documentation principale de cette application est découpée en plusieurs sec
:maxdepth: 2
:caption: Documentation développeur
developer/api
developer/docker
developer/translate
developer/maintenance

View File

@ -48,7 +48,7 @@ Pour installer wallabag, vous devez exécuter ces deux commandes :
git clone https://github.com/wallabag/wallabag.git
cd wallabag
git checkout 2.0.0
git checkout 2.0.1
SYMFONY_ENV=prod composer install --no-dev -o --prefer-dist
php bin/console wallabag:install --env=prod
@ -60,6 +60,11 @@ Pour démarrer le serveur interne à php et vérifier que tout s'est installé c
Et accéder wallabag à l'adresse http://lipdevotreserveur:8000
.. note::
Pour définir des paramètres via des variables d'environnement, vous pouvez les spécifier avec le préfixe ``SYMFONY__``. Par exemple, ``SYMFONY__DATABASE_DRIVER``. Vous pouvez lire `documentation Symfony
<http://symfony.com/doc/current/cookbook/configuration/external_parameters.html>`__ pour en savoir plus.
Installation avec Apache
------------------------
@ -144,3 +149,7 @@ En imaginant que vous vouliez installer wallabag dans le dossier /var/www/wallab
}
Après que vous ayez rechargé/redémarré Nginx, vous devriez pouvoir avoir accès à wallabag à l'adresse http://domain.tld.
.. note::
Si vous voulez importer un fichier important dans wallabag, vous devez ajouter cette ligne dans votre configuration nginx ``client_max_body_size XM; # allows file uploads up to X megabytes``.

View File

@ -24,6 +24,28 @@ Une fois que vous avez créé un compte utilisateur sur votre nouvelle instance
:alt: Import depuis wallabag v1
:align: center
Import via via la ligne de commande (CLI)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Si vous avez accès à la ligne de commandes de votre serveur web, vous pouvez exécuter cette commande pour import votre fichier wallabag v1 :
::
bin/console wallabag:import-v1 1 ~/Downloads/wallabag-export-1-2016-04-05.json --env=prod
Remplacez les valeurs :
* ``1`` est l'identifiant de votre utilisateur en base (l'ID de votre premier utilisateur créé sur wallabag est 1)
* ``~/Downloads/wallabag-export-1-2016-04-05.json`` est le chemin de votre export wallabag v1
Vous obtiendrez :
::
Start : 05-04-2016 11:36:07 ---
403 imported
0 already saved
End : 05-04-2016 11:36:09 ---
Depuis wallabag 2.x
-------------------

View File

@ -1,55 +0,0 @@
# -*- coding: utf-8 -*-
#
# wallabag documentation build configuration file, created by
# sphinx-quickstart on Fri Oct 16 06:47:23 2015.
import sys
import os
extensions = []
templates_path = ['_templates']
source_suffix = '.rst'
master_doc = 'index'
project = u'wallabag-pt'
copyright = u'2013-2016, Nicolas Lœuillet - MIT Licence'
version = '2.0.0'
release = version
exclude_patterns = ['_build']
pygments_style = 'sphinx'
html_theme = 'default'
html_static_path = ['_static']
htmlhelp_basename = 'wallabagfrdoc'
latex_elements = {
}
latex_documents = [
('index', 'wallabag-pt.tex', u'wallabag Documentation',
u'Nicolas Lœuillet', 'manual'),
]
man_pages = [
('index', 'wallabagpt', u'wallabag Documentation',
[u'Nicolas Lœuillet'], 1)
]
texinfo_documents = [
('index', 'wallabag', u'wallabag Documentation',
u'Nicolas Lœuillet', 'wallabag', 'wallabag is an opensource read-it-later.',
'Miscellaneous'),
]
##### Guzzle sphinx theme
import guzzle_sphinx_theme
html_translator_class = 'guzzle_sphinx_theme.HTMLTranslator'
html_theme_path = guzzle_sphinx_theme.html_theme_path()
html_theme = 'guzzle_sphinx_theme'
# Custom sidebar templates, maps document names to template names.
html_sidebars = {
'**': ['logo-text.html', 'globaltoc.html', 'searchbox.html']
}
# Register the theme as an extension to generate a sitemap.xml
extensions.append("guzzle_sphinx_theme")

View File

@ -1,36 +0,0 @@
wallabag documentation
======================
.. image:: ../img/wallabag.png
:alt: wallabag logo
:align: center
**wallabag** É uma aplicação "leia mais tarde": Ele salva páginas da web mantendo apenas o conteúdo. Elementos como ícones de navegação ou propaganda são deletedos.
A documentação principal desta aplicação é organizada em duas seções:
* :ref:`doc-usuario`
* :ref:`doc-desenvolvedor`
.. _user-docs:
.. toctree::
:maxdepth: 2
:caption: Documentação do usuário
user/criar_conta
user/login
user/configuração
user/primeiro_artigo
user/importar
user/baixar_artigos
user/filtros
user/tags
.. _dev-docs:
.. toctree::
:maxdepth: 2
:caption: Documentação do desenvolvedor
developer/docker

View File

@ -1,2 +0,0 @@
Sphinx>=1.3.0,<1.4.0
guzzle_sphinx_theme>=0.7.0,<0.8.0

View File

@ -43,8 +43,8 @@ class WallabagRestController extends FOSRestController
{
$this->validateAuthentication();
$isArchived = (int) $request->query->get('archive');
$isStarred = (int) $request->query->get('starred');
$isArchived = (null === $request->query->get('archive')) ? null : (bool) $request->query->get('archive');
$isStarred = (null === $request->query->get('starred')) ? null : (bool) $request->query->get('starred');
$sort = $request->query->get('sort', 'created');
$order = $request->query->get('order', 'desc');
$page = (int) $request->query->get('page', 1);
@ -52,7 +52,7 @@ class WallabagRestController extends FOSRestController
$pager = $this->getDoctrine()
->getRepository('WallabagCoreBundle:Entry')
->findEntries($this->getUser()->getId(), (bool) $isArchived, (bool) $isStarred, $sort, $order);
->findEntries($this->getUser()->getId(), $isArchived, $isStarred, $sort, $order);
$pager->setCurrentPage($page);
$pager->setMaxPerPage($perPage);

View File

@ -60,6 +60,7 @@ class InstallCommand extends ContainerAwareCommand
->checkRequirements()
->setupDatabase()
->setupAdmin()
->setupConfig()
->setupAsset()
;
@ -69,7 +70,7 @@ class InstallCommand extends ContainerAwareCommand
protected function checkRequirements()
{
$this->defaultOutput->writeln('<info><comment>Step 1 of 4.</comment> Checking system requirements.</info>');
$this->defaultOutput->writeln('<info><comment>Step 1 of 5.</comment> Checking system requirements.</info>');
$fulfilled = true;
@ -119,7 +120,7 @@ class InstallCommand extends ContainerAwareCommand
protected function setupDatabase()
{
$this->defaultOutput->writeln('<info><comment>Step 2 of 4.</comment> Setting up database.</info>');
$this->defaultOutput->writeln('<info><comment>Step 2 of 5.</comment> Setting up database.</info>');
// user want to reset everything? Don't care about what is already here
if (true === $this->defaultInput->getOption('reset')) {
@ -190,7 +191,7 @@ class InstallCommand extends ContainerAwareCommand
protected function setupAdmin()
{
$this->defaultOutput->writeln('<info><comment>Step 3 of 4.</comment> Administration setup.</info>');
$this->defaultOutput->writeln('<info><comment>Step 3 of 5.</comment> Administration setup.</info>');
$questionHelper = $this->getHelperSet()->get('question');
$question = new ConfirmationQuestion('Would you like to create a new admin user (recommended) ? (Y/n)', true);
@ -227,15 +228,20 @@ class InstallCommand extends ContainerAwareCommand
$em->persist($config);
$this->defaultOutput->writeln('');
return $this;
}
protected function setupConfig()
{
$this->defaultOutput->writeln('<info><comment>Step 4 of 5.</comment> Config setup.</info>');
$em = $this->getContainer()->get('doctrine.orm.entity_manager');
// cleanup before insert new stuff
$em->createQuery('DELETE FROM CraueConfigBundle:Setting')->execute();
$settings = [
[
'name' => 'download_pictures',
'value' => '1',
'section' => 'entry',
],
[
'name' => 'carrot',
'value' => '1',
@ -370,7 +376,7 @@ class InstallCommand extends ContainerAwareCommand
protected function setupAsset()
{
$this->defaultOutput->writeln('<info><comment>Step 4 of 4.</comment> Installing assets.</info>');
$this->defaultOutput->writeln('<info><comment>Step 5 of 5.</comment> Installing assets.</info>');
$this
->runCommand('assets:install')
@ -460,7 +466,13 @@ class InstallCommand extends ContainerAwareCommand
return false;
}
return in_array($databaseName, $schemaManager->listDatabases());
try {
return in_array($databaseName, $schemaManager->listDatabases());
} catch (\Doctrine\DBAL\Exception\ConnectionException $e) {
// it means we weren't able to get database list, assume the database doesn't exist
return false;
}
}
/**

View File

@ -49,8 +49,7 @@ class EntryController extends Controller
$form->handleRequest($request);
if ($form->isValid()) {
// check for existing entry, if it exists, redirect to it with a message
$existingEntry = $this->get('wallabag_core.entry_repository')->findByUrlAndUserId($entry->getUrl(), $this->getUser()->getId());
$existingEntry = $this->checkIfEntryAlreadyExists($entry);
if (false !== $existingEntry) {
$this->get('session')->getFlashBag()->add(
@ -86,7 +85,10 @@ class EntryController extends Controller
{
$entry = new Entry($this->getUser());
$entry->setUrl($request->get('url'));
$this->updateEntry($entry);
if (false === $this->checkIfEntryAlreadyExists($entry)) {
$this->updateEntry($entry);
}
return $this->redirect($this->generateUrl('homepage'));
}
@ -420,4 +422,16 @@ class EntryController extends Controller
throw $this->createAccessDeniedException('You can not access this entry.');
}
}
/**
* Check for existing entry, if it exists, redirect to it with a message.
*
* @param $entry
*
* @return array|bool
*/
private function checkIfEntryAlreadyExists($entry)
{
return $this->get('wallabag_core.entry_repository')->findByUrlAndUserId($entry->getUrl(), $this->getUser()->getId());
}
}

View File

@ -15,11 +15,6 @@ class LoadSettingData extends AbstractFixture implements OrderedFixtureInterface
public function load(ObjectManager $manager)
{
$settings = [
[
'name' => 'download_pictures',
'value' => '1',
'section' => 'entry',
],
[
'name' => 'carrot',
'value' => '1',

View File

@ -39,7 +39,22 @@ services:
wallabag_core.graby:
class: Graby\Graby
arguments:
- { error_message: "wallabag can't retrieve contents for this article. Please report this issue to us." }
-
error_message: "wallabag can't retrieve contents for this article. Please report this issue to us."
http_client:
user_agents:
'lifehacker.com': 'PHP/5.2'
'gawker.com': 'PHP/5.2'
'deadspin.com': 'PHP/5.2'
'kotaku.com': 'PHP/5.2'
'jezebel.com': 'PHP/5.2'
'io9.com': 'PHP/5.2'
'jalopnik.com': 'PHP/5.2'
'gizmodo.com': 'PHP/5.2'
'.wikipedia.org': 'Mozilla/5.2'
'.fok.nl': 'Googlebot/2.1'
'getpocket.com': 'PHP/5.2'
'iansommerville.com': 'PHP/5.2'
calls:
- [ setLogger, [ "@logger" ] ]
tags:

View File

@ -78,19 +78,6 @@ $.fn.ready(function() {
event.preventDefault();
});
/* ==========================================================================
Keyboard gestion
========================================================================== */
$(window).keydown(function(e){
if ( ( e.target.tagName.toLowerCase() !== 'input' && e.keyCode == 83 ) || (e.keyCode == 27 && $bagitForm.is(':visible') ) ) {
$bagit.removeClass("current");
$("#bagit-arrow").removeClass("arrow-down");
toggleSaveLinkForm();
return false;
}
});
/* ==========================================================================
Process all links inside an article
========================================================================== */

View File

@ -137,7 +137,7 @@ entry:
page_titles:
# unread: 'Unread entries'
# starred: 'Starred entries'
# archive: 'Archived entries'
# archived: 'Archived entries'
# filtered: 'Filtered entries'
list:
# number_on_the_page: '{0} There is no entry.|{1} There is one entry.|]1,Inf[ There are %count% entries.'
@ -338,6 +338,7 @@ developer:
# documentation: 'Documentation'
# how_to_first_app: 'How to create my first application'
# full_documentation: 'View full API documentation'
# list_methods: 'List API methods'
# clients:
# title: 'Clients'
# create_new: 'Create a new client'

View File

@ -137,7 +137,7 @@ entry:
page_titles:
unread: 'Ungelesene Einträge'
starred: 'Favorisierte Einträge'
archive: 'Archivierte Einträge'
archived: 'Archivierte Einträge'
filtered: 'Gefilterte Einträge'
list:
number_on_the_page: '{0} Es gibt keine Einträge.|{1} Es gibt einen Eintrag.|]1,Inf[ Es gibt %count% Einträge.'
@ -338,6 +338,7 @@ developer:
documentation: 'Dokumentation'
how_to_first_app: 'Wie erstelle ich meine erste Anwendung'
full_documentation: 'Komplette API-Dokumentation einsehen'
# list_methods: 'List API methods'
clients:
title: 'Clients'
create_new: 'Neuen Client erstellen'

View File

@ -137,7 +137,7 @@ entry:
page_titles:
unread: 'Unread entries'
starred: 'Starred entries'
archive: 'Archived entries'
archived: 'Archived entries'
filtered: 'Filtered entries'
list:
number_on_the_page: '{0} There is no entry.|{1} There is one entry.|]1,Inf[ There are %count% entries.'
@ -176,7 +176,7 @@ entry:
set_as_read: 'Mark as read'
set_as_unread: 'Mark as unread'
set_as_favorite: 'Favorite'
view_original_article: 'Orignal article'
view_original_article: 'Original article'
re_fetch_content: 'Re-fetch content'
delete: 'Delete'
add_a_tag: 'Add a tag'
@ -338,6 +338,7 @@ developer:
documentation: 'Documentation'
how_to_first_app: 'How to create my first application'
full_documentation: 'View full API documentation'
list_methods: 'List API methods'
clients:
title: 'Clients'
create_new: 'Create a new client'

View File

@ -19,9 +19,9 @@ menu:
unread: 'Sin leer'
starred: 'Favoritos'
archive: 'Archivo'
all_articles: 'Todos los artículos'
all_articles: 'Todos artículos'
config: 'Configuración'
tags: 'Tags'
tags: 'Etiquetas'
internal_settings: 'Configuración interna'
import: 'Importar'
howto: 'Ayuda'
@ -62,18 +62,18 @@ config:
items_per_page_label: 'Número de artículos por página'
language_label: 'Idioma'
reading_speed:
# label: 'Reading speed'
# help_message: 'You can use online tools to estimate your reading speed:'
# 100_word: 'I read ~100 words per minute'
# 200_word: 'I read ~200 words per minute'
# 300_word: 'I read ~300 words per minute'
# 400_word: 'I read ~400 words per minute'
label: 'Velocidad de leer'
help_message: 'Se puede usar las técnicas para calcular su velocidad de leer:'
100_word: 'Leo ~100 palabras por minuto'
200_word: 'Leo ~200 palabras por minuto'
300_word: 'Leo ~300 palabras por minuto'
400_word: 'Leo ~400 palabras por minuto'
form_rss:
description: 'Los feeds RSS de wallabag permiten leer los artículos guardados con su lector RSS favorito. Necesita generar un token primero'
token_label: 'RSS token'
# no_token: 'No token'
token_create: 'Crear token'
token_reset: 'Resetear token'
token_reset: 'Reiniciar token'
rss_links: 'URL de su feed RSS'
rss_link:
unread: 'sin leer'
@ -90,17 +90,17 @@ config:
new_password_label: 'Nueva contraseña'
repeat_new_password_label: 'Confirmar la nueva contraseña'
form_rules:
# if_label: 'if'
# then_tag_as_label: 'then tag as'
# delete_rule_label: 'delete'
if_label: 'si'
then_tag_as_label: 'Etiquete como'
delete_rule_label: 'Borre'
rule_label: 'Regla'
tags_label: 'Tags'
tags_label: 'Etiquetas'
faq:
title: 'FAQ'
tagging_rules_definition_title: '¿Qué significa reglas de etiquetado autómaticas?'
tagging_rules_definition_description: 'Son las reglas usadas por Wallabag para etiquetar automáticamente los nuevos artículos.<br />Cáda vez que un nuevo artículo es añadido, todas las reglas de etiquetado automáticas serán usadas para etiquetarlo, ayudandote a clasificar automáticamente los artículos.'
tagging_rules_definition_description: 'Son las reglas usadas por Wallabag para etiquetar automáticamente los nuevos artículos.<br />Cada vez que un nuevo artículo sea añadido, todas las reglas de etiquetado automáticas serán usadas para etiquetarlo, ayudándole a clasificar automáticamente los artículos.'
how_to_use_them_title: '¿Cómo se utilizan?'
# how_to_use_them_description: 'Let assume you want to tag new entries as « <i>short reading</i> » when the reading time is inferior to 3 minutes.<br />In that case, you should put « readingTime &lt;= 3 » in the <i>Rule</i> field and « <i>short reading</i> » in the <i>Tags</i> field.<br />Several tags can added simultaneously by separating them by a comma: « <i>short reading, must read</i> »<br />Complex rules can be written by using predefined operators: if « <i>readingTime &gt;= 5 AND domainName = "github.com"</i> » then tag as « <i>long reading, github </i> »'
how_to_use_them_description: 'Supongamos que quiere etiquetar nuevos artículos como « <i>lectura corta</i> » cuando el tiempo de leer sea menos de 3 minutos. <br /> En este caso, debe poner Let assume you want to tag new entries as « <i>short reading</i> » when the reading time is inferior to 3 minutes.<br />In that case, you should put « readingTime &lt;= 3 » in the <i>Rule</i> field and « <i>short reading</i> » in the <i>Tags</i> field.<br />Several tags can added simultaneously by separating them by a comma: « <i>short reading, must read</i> »<br />Complex rules can be written by using predefined operators: if « <i>readingTime &gt;= 5 AND domainName = "github.com"</i> » then tag as « <i>long reading, github </i> »'
variables_available_title: '¿Qué variables y operadores se pueden utilizar para escribir las reglas?'
variables_available_description: 'Las siguientes variables y operadores se pueden utilizar para crear las reglas de etiquetado automáticas:'
meaning: 'Significado'
@ -137,7 +137,7 @@ entry:
page_titles:
# unread: 'Unread entries'
# starred: 'Starred entries'
# archive: 'Archived entries'
# archived: 'Archived entries'
# filtered: 'Filtered entries'
list:
number_on_the_page: '{0} No hay artículos.|{1} Hay un artículo.|]1,Inf[ Hay %count% artículos.'
@ -301,9 +301,9 @@ quickstart:
gitter: 'En Gitter'
tag:
page_title: 'Tags'
page_title: 'Etiquetas'
list:
number_on_the_page: '{0} No hay ningun tag.|{1} Hay un tag.|]1,Inf[ Hay %count% tags.'
number_on_the_page: '{0} No hay ningun etiqueta.|{1} Hay un etiqueta.|]1,Inf[ Hay %count% etiquetas.'
import:
page_title: 'Importar'
@ -338,6 +338,7 @@ developer:
# documentation: 'Documentation'
# how_to_first_app: 'How to create my first application'
# full_documentation: 'View full API documentation'
# list_methods: 'List API methods'
# clients:
# title: 'Clients'
# create_new: 'Create a new client'

View File

@ -1,18 +1,18 @@
security:
login:
# page_title: 'Welcome to wallabag!'
page_title: 'به wallabag خوش آمدید!'
keep_logged_in: 'مرا به خاطر بسپار'
forgot_password: ' رمزتان را گم کرده‌اید؟'
submit: 'ورود'
# register: 'Register'
register: 'نام‌نویسی'
username: 'نام کاربری'
password: 'رمز'
# cancel: 'Cancel'
cancel: 'لغو'
resetting:
description: "نشانی ایمیل خود را بنویسید تا راهنمای تغییر رمز را برایتان بفرستیم."
register:
# page_title: 'Create an account'
# go_to_account: 'Go to your account'
page_title: 'حساب بسازید'
go_to_account: 'حساب خود را ببینید'
menu:
left:
@ -22,28 +22,28 @@ menu:
all_articles: 'همه'
config: 'پیکربندی'
tags: 'برچسب‌ها'
# internal_settings: 'Internal Settings'
# import: 'Import'
internal_settings: 'تنظیمات درونی'
import: 'درون‌ریزی'
howto: 'خودآموز'
# developer: 'Developer'
developer: 'سازندگان'
logout: 'خروج'
about: 'درباره'
search: 'جستجو'
# save_link: 'Save a link'
save_link: 'ذخیرهٔ یک پیوند'
back_to_unread: 'بازگشت به خوانده‌نشده‌ها'
top:
add_new_entry: 'افزودن مقالهٔ تازه'
search: 'جستجو'
filter_entries: 'فیلترکردن مقاله‌ها'
# export: 'Export'
export: 'برون‌بری'
search_form:
input_label: 'جستجوی خود را این‌جا بنویسید:'
footer:
wallabag:
# elsewhere: 'Take wallabag with you'
# social: 'Social'
# powered_by: 'powered by'
elsewhere: 'wallabag همراه شما'
social: 'شبکه‌های اجتماعی'
powered_by: 'توانمند با'
about: 'درباره'
config:
@ -53,7 +53,7 @@ config:
rss: 'آر-اس-اس'
user_info: 'اطلاعات کاربر'
password: 'رمز'
# rules: 'Tagging rules'
rules: 'برچسب‌گذاری خودکار'
new_user: 'افزودن کاربر'
form:
save: 'ذخیره'
@ -62,12 +62,12 @@ config:
items_per_page_label: 'تعداد مقاله در هر صفحه'
language_label: 'زبان'
reading_speed:
# label: 'Reading speed'
# help_message: 'You can use online tools to estimate your reading speed:'
# 100_word: 'I read ~100 words per minute'
# 200_word: 'I read ~200 words per minute'
# 300_word: 'I read ~300 words per minute'
# 400_word: 'I read ~400 words per minute'
label: 'سرعت خواندن'
help_message: 'سرعت خواندن‌تان را با ابزارهای آنلاین تخمین بزنید:'
100_word: 'من تقریباً ۱۰۰ واژه را در دقیقه می‌خوانم'
200_word: 'من تقریباً ۲۰۰ واژه را در دقیقه می‌خوانم'
300_word: 'من تقریباً ۳۰۰ واژه را در دقیقه می‌خوانم'
400_word: 'من تقریباً ۴۰۰ واژه را در دقیقه می‌خوانم'
form_rss:
description: 'با خوراک آر-اس-اس که wallabag در اختیارتان می‌گذارد، می‌توانید مقاله‌های ذخیره‌شده را در نرم‌افزار آر-اس-اس دلخواه خود بخوانید. برای این کار نخست باید یک کد بسازید.'
token_label: 'کد آر-اس-اس'
@ -81,23 +81,23 @@ config:
archive: 'بایگانی'
rss_limit: 'محدودیت آر-اس-اس'
form_user:
# two_factor_description: "Enabling two factor authentication means you'll receive an email with a code on every new untrusted connexion"
two_factor_description: "با فعال‌کردن تأیید ۲مرحله‌ای هر بار که اتصال تأییدنشده‌ای برقرار شد، به شما یک کد از راه ایمیل فرستاده می‌شود"
name_label: 'نام'
email_label: 'نشانی ایمیل'
# twoFactorAuthentication_label: 'Two factor authentication'
twoFactorAuthentication_label: 'تأیید ۲مرحله‌ای'
form_password:
old_password_label: 'رمز قدیمی'
new_password_label: 'رمز تازه'
repeat_new_password_label: 'رمز تازه را دوباره بنویسید'
form_rules:
# if_label: 'if'
# then_tag_as_label: 'then tag as'
# delete_rule_label: 'delete'
# rule_label: 'Rule'
# tags_label: 'Tags'
# faq:
# title: 'FAQ'
# tagging_rules_definition_title: 'What does « tagging rules » mean?'
if_label: 'اگر'
then_tag_as_label: 'این برچسب را بزن'
delete_rule_label: 'پاک کن'
rule_label: 'قانون'
tags_label: 'برچسب‌ها'
faq:
title: 'پرسش‌های متداول'
tagging_rules_definition_title: 'برچسب‌گذاری خودکار یعنی چه؟'
# tagging_rules_definition_description: 'They are rules used by Wallabag to automatically tag new entries.<br />Each time a new entry is added, all the tagging rules will be used to add the tags you configured, thus saving you the trouble to manually classify your entries.'
# how_to_use_them_title: 'How do I use them?'
# how_to_use_them_description: 'Let assume you want to tag new entries as « <i>short reading</i> » when the reading time is inferior to 3 minutes.<br />In that case, you should put « readingTime &lt;= 3 » in the <i>Rule</i> field and « <i>short reading</i> » in the <i>Tags</i> field.<br />Several tags can added simultaneously by separating them by a comma: « <i>short reading, must read</i> »<br />Complex rules can be written by using predefined operators: if « <i>readingTime &gt;= 5 AND domainName = "github.com"</i> » then tag as « <i>long reading, github </i> »'
@ -135,12 +135,12 @@ config:
entry:
page_titles:
# unread: 'Unread entries'
# starred: 'Starred entries'
# archive: 'Archived entries'
# filtered: 'Filtered entries'
unread: 'مقاله‌های خوانده‌نشده'
starred: 'مقاله‌های برگزیده'
archived: 'مقاله‌های بایگانی‌شده'
filtered: 'مقاله‌های فیلترشده'
list:
# number_on_the_page: '{0} There is no entry.|{1} There is one entry.|]1,Inf[ There are %count% entries.'
number_on_the_page: '{0} هیج مقاله‌ای نیست.|{1} یک مقاله هست.|]1,Inf[ %count% مقاله هست.'
reading_time: 'زمان تخمینی برای خواندن'
reading_time_minutes: 'زمان تخمینی برای خواندن: %readingTime% min'
reading_time_less_one_minute: 'زمان تخمینی برای خواندن: <small class="inferieur">&lt;</small> 1 min'
@ -148,7 +148,7 @@ entry:
toogle_as_read: 'خوانده‌شده/خوانده‌نشده'
toogle_as_star: 'برگزیده/نابرگزیده'
delete: 'پاک کردن'
# export_title: 'Export'
export_title: 'برون‌بری'
filters:
title: 'فیلتر'
status_label: 'وضعیت'
@ -171,35 +171,35 @@ entry:
filter: 'فیلتر'
view:
left_menu:
# back_to_top: 'Back to top'
back_to_top: 'بازگشت به بالای صفحه'
back_to_homepage: 'بازگشت'
set_as_read: 'خوانده‌شده'
# set_as_unread: 'Mark as unread'
set_as_unread: 'به عنوان خوانده‌نشده علامت بزن'
set_as_favorite: 'برگزیده'
view_original_article: 'مقالهٔ اصلی'
# re_fetch_content: 'Re-fetch content'
re_fetch_content: 'مقاله‌ها را دوباره دریافت کن'
delete: 'پاک کردن'
add_a_tag: 'افزودن برچسب'
share_content: 'هم‌رسانی'
share_email_label: 'نشانی ایمیل'
download: 'بارگیری'
# print: 'Print'
print: 'چاپ'
problem:
label: 'مشکلات؟'
description: 'آیا مقاله نادرست نشان داده شده؟'
edit_title: 'ویرایش عنوان'
original_article: 'original'
# annotations_on_the_entry: '{0} No annotations|{1} One annotation|]1,Inf[ %nbAnnotations% annotations'
original_article: 'اصلی'
annotations_on_the_entry: '{0} بدون حاشیه|{1} یک حاشیه|]1,Inf[ %nbحاشیه% annotations'
new:
page_title: 'ذخیرهٔ مقالهٔ تازه'
placeholder: 'http://website.com'
form_new:
# url_label: Url
url_label: نشانی
edit:
# page_title: 'Edit an entry'
# title_label: 'Title'
# url_label: 'Url'
# is_public_label: 'Public'
page_title: 'ویرایش مقاله'
title_label: 'عنوان'
url_label: 'نشانی'
is_public_label: 'عمومی'
save_label: 'ذخیره'
about:
@ -208,8 +208,8 @@ about:
who_behind_wallabag: 'سازندگان wallabag'
getting_help: 'گرفتن کمک'
helping: 'کمک‌کردن به wallabag'
# contributors: 'Contributors'
# third_party: 'Third-party libraries'
contributors: 'مشارکت‌کنندگان'
third_party: 'کتابخانه‌های نرم‌افزاری'
who_behind_wallabag:
developped_by: 'ساختهٔ'
website: 'وب‌گاه'
@ -227,15 +227,15 @@ about:
by_contributing_2: 'فهرست نیازمندی‌های ما در این صفحه است:'
by_paypal: 'از راه Paypal'
contributors:
# description: 'Thank you to contributors on wallabag web application'
description: 'از مشارکت شما در برنامهٔ وب wallabag ممنونیم.'
third_party:
# description: 'Here are the list of third-party libraries used in wallabag (with their licenses):'
# package: 'Package'
description: 'فهرست کتابخانه‌های نرم‌افزاری که در wallabag به کار رفته‌اند (به همراه پروانهٔ آن‌ها) :'
package: 'بسته'
license: 'پروانه'
howto:
page_title: 'خودآموز'
# page_description: 'There are several ways to save an article:'
page_description: 'راه‌های زیادی برای ذخیرهٔ مقاله‌ها هست:'
top_menu:
browser_addons: 'افزونه برای مرورگرها'
mobile_apps: 'برنامه‌های موبایل'
@ -255,82 +255,82 @@ howto:
description: 'این پیوند را به نوار بوک‌مارک مرورگرتان بکشید:'
quickstart:
# page_title: 'Quickstart'
# intro:
# title: 'Welcome to wallabag!'
# paragraph_1: "We'll accompany you to visit wallabag and show you some features which can interest you."
# paragraph_2: 'Follow us!'
# configure:
# title: 'Configure the application'
# language: 'Change language and design'
# rss: 'Enable RSS feeds'
# tagging_rules: 'Write rules to automatically tag your articles'
# admin:
# title: 'Administration'
# description: 'As an administrator, you have privileges on wallabag. You can:'
# new_user: 'Create a new user'
# analytics: 'Configure analytics'
# sharing: 'Enable some parameters about article sharing'
# export: 'Configure export'
# import: 'Configure import'
# first_steps:
# title: 'First steps'
# new_article: 'Save your first article'
# unread_articles: 'And classify it!'
# migrate:
# title: 'Migrate from an existing service'
# description: "Are you using another service? We'll help you to retrieve your data on wallabag."
# pocket: 'Migrate from Pocket'
# wallabag_v1: 'Migrate from wallabag v1'
# wallabag_v2: 'Migrate from wallabag v2'
# developer:
# title: 'Developers'
# create_application: 'Create your third application'
# docs:
# title: 'Full documentation'
# annotate: 'Annotate your article'
# export: 'Convert your articles into ePUB or PDF'
# search_filters: 'See how you can look for an article by using search engine and filters'
# fetching_errors: 'What can I do if an article encounters errors during fetching?'
# all_docs: 'And so many other articles!'
# support:
# title: 'Support'
# description: 'If you need some help, we are here for you.'
# github: 'On GitHub'
# email: 'By email'
# gitter: 'On Gitter'
page_title: 'Quickstart'
intro:
title: 'به wallabag خوش آمدید!!'
paragraph_1: "به شما کمک خواهیم کرد تا wallabag را بشناسید و با برخی از ویژگی‌های جالبش آشنا شوید"
paragraph_2: 'ادامه دهید!'
configure:
title: 'برنامه را تنظیم کنید'
language: 'زبان و نمای برنامه را تغییر دهید'
rss: 'خوراک آر-اس-اس را فعال کنید'
tagging_rules: 'قانون‌های برچسب‌گذاری خودکار مقاله‌هایتان را تعریف کنید'
admin:
title: 'مدیریت'
description: 'به عنوان مدیر، شما دسترسی‌های بیشتری به wallabag دارید. شما می‌توانید:'
new_user: 'کاربر تازه‌ای بسازید'
analytics: 'تحلیل‌های آماری را تنظیم کنید'
sharing: 'گزینه‌های مربوط به هم‌رسانی مقاله‌ها را فعال کنید'
export: 'برون‌سپاری را تنظیم کنید'
import: 'درون‌ریزی را تنظیم کنید'
first_steps:
title: 'گام نخست'
new_article: 'نخستین مقالهٔ خود را ذخیره کنید'
unread_articles: 'و آن را طبقه‌بندی کنید!'
migrate:
title: 'از سرویس قبلی خود به این‌جا مهاجرت کنید'
description: "آیا سرویس دیگری را به‌کار می‌برید؟ داده‌هایتان را به wallabag بیاورید.."
pocket: 'مهاجرت از Pocket'
wallabag_v1: 'مهاجرت از نسخهٔ یکم wallabag'
wallabag_v2: 'مهاجرت از نسخهٔ دوم wallabag'
developer:
title: 'برنامه‌نویسان'
create_application: 'برنامهٔ wallabag خود را بسازید'
docs:
title: 'راهنمای کامل'
annotate: 'روی مقاله‌هایتان یادداشت بگذارید'
export: 'مقاله‌هایتان را به قالب ePUB یا PDF دربیاورید'
search_filters: 'به کمک موتور جستجو و فیلترها به دنبال مقاله‌هایتان بگردید'
fetching_errors: 'اگر مقاله‌ای هنگام ذخیره‌ شدن به مشکل برخورد چه کار کنید؟'
all_docs: 'و بسیاری از موضوعات دیگر'
support:
title: 'پشتیبانی'
description: 'به کمک نیاز دارید؟ ما پشتیبان شما هستیم!'
github: 'روی گیت‌هاب'
email: 'با ایمیل'
gitter: 'روی گیتر'
tag:
page_title: 'برچسب‌ها'
list:
# number_on_the_page: '{0} There is no tag.|{1} There is one tag.|]1,Inf[ There are %count% tags.'
number_on_the_page: '{0} هیچ برچسبی نیست.|{1} یک برچسب هست.|]1,Inf[ %count% برچسب هست.'
import:
# page_title: 'Import'
# page_description: 'Welcome to wallabag importer. Please select your previous service that you want to migrate.'
# action:
# import_contents: 'Import contents'
# form:
# mark_as_read_title: 'Mark all as read?'
# mark_as_read_label: 'Mark all imported entries as read'
# file_label: 'File'
# save_label: 'Upload file'
# pocket:
# page_title: 'Import > Pocket'
# description: "This importer will import all your Pocket data. Pocket doesn't allow us to retrieve content from their service, so the readable content of each article will be re-fetched by wallabag."
# config_missing:
# description: "Pocket import isn't configured."
# admin_message: 'You need to define %keyurls%a pocket_consumer_key%keyurle%.'
# user_message: 'Your server admin needs to define an API Key for Pocket.'
# authorize_message: 'You can import your data from your Pocket account. You just have to click on the below button and authorize the application to connect to getpocket.com.'
# connect_to_pocket: 'Connect to Pocket and import data'
# wallabag_v1:
# page_title: 'Import > Wallabag v1'
# description: 'This importer will import all your wallabag v1 articles. On your config page, click on "JSON export" in the "Export your wallabag data" section. You will have a "wallabag-export-1-xxxx-xx-xx.json" file.'
# how_to: 'Please select your wallabag export and click on the below button to upload and import it.'
# wallabag_v2:
# page_title: 'Import > Wallabag v2'
# description: 'This importer will import all your wallabag v2 articles. Go to All articles, then, on the export sidebar, click on "JSON". You will have a "All articles.json" file.'
page_title: 'درون‌ریزی'
page_description: 'به درون‌ریز wallabag خوش آمدید. لطفاً سرویس قبلی خود را که می‌خواهید از آن مهاجرت کنید انتخاب کنید.'
action:
import_contents: 'درون‌ریزی مقاله‌ها'
form:
mark_as_read_title: 'علامت‌زدن همه به عنوان خوانده‌شده؟'
mark_as_read_label: 'همهٔ مقاله‌های درون‌ریزی شده را به عنوان خوانده‌شده علامت بزن'
file_label: 'پرونده'
save_label: 'بارگذاری پرونده'
pocket:
page_title: 'درون‌ریزی > Pocket'
description: "این برنامه همهٔ داده‌های Pocket شما را درون‌ریزی می‌کند. سرویس Pocket اجازه نمی‌دهد که متن مقاله‌ها را درون‌ریزی کنیم، بنابراین wallabag متن مقاله‌ها را دوباره از اینترنت دریافت می‌کند."
config_missing:
description: "درون‌ریزی از Pocket تنظیم نشده است."
admin_message: 'شما باید %keyurls%یک pocket_consumer_key%keyurle% تعریف کنید.'
user_message: 'مدیر سرور شما باید یک API Key برای Pocket تعریف کند.'
authorize_message: 'شما می‌توانید داده‌هایتان را از حساب Pocket خود درون‌ریزی کنید. روی دکمهٔ زیر کلیک کنید و به برنامه اجازه دهید تا به getpocket.com وصل شود.'
connect_to_pocket: 'به Pocket وصل شو و داده‌ها را دریافت کن'
wallabag_v1:
page_title: 'درون‌ریزی > Wallabag v1'
description: 'این برنامه همهٔ داده‌های شما را در نسخهٔ ۱ wallabag درون‌ریزی می‌کند. در صفحهٔ تنظیمات، روی "JSON export" در بخش "Export your wallabag data" کلیک کنید. با این کار شما پرونده‌ای به شکل "wallabag-export-1-xxxx-xx-xx.json" دریافت خواهید کرد.'
how_to: 'لطفاً پرونده را انتخاب کنید و روی دکمهٔ زیر کلیک کنید تا بارگذاری و درون‌ریزی شود.'
wallabag_v2:
page_title: 'درون‌ریزی > Wallabag v2'
description: 'این برنامه همهٔ داده‌های شما را در نسخهٔ ۲ wallabag درون‌ریزی می‌کند. به بخش «همهٔ مقاله‌ها» بروید و در بخش «برون‌ریزی» روی "JSON" کلیک کنید. با این کار شما پرونده‌ای به شکل "All articles.json" دریافت خواهید کرد.'
developer:
# page_title: 'Developer'
@ -338,6 +338,7 @@ developer:
# documentation: 'Documentation'
# how_to_first_app: 'How to create my first application'
# full_documentation: 'View full API documentation'
# list_methods: 'List API methods'
# clients:
# title: 'Clients'
# create_new: 'Create a new client'
@ -382,42 +383,42 @@ developer:
validator:
password_must_match: 'رمزها باید یکی باشند'
password_too_short: 'رمز شما باید ۸ حرف یا بیشتر باشد'
# password_wrong_value: 'Wrong value for your current password'
# item_per_page_too_high: 'This will certainly kill the app'
# rss_limit_too_hight: 'This will certainly kill the app'
password_wrong_value: 'رمز فعلی را اشتباه وارد کرده‌اید'
item_per_page_too_high: 'با این تعداد برنامه به فنا می‌رود'
rss_limit_too_hight: 'با این تعداد برنامه به فنا می‌رود'
flashes:
config:
notice:
config_saved: 'پیکربندی ذخیره شد. برخی از تنظیمات پس از این که قطع شدید اعمال می‌شود.'
password_updated: 'رمز به‌روز شد'
# password_not_updated_demo: "In demonstration mode, you can't change password for this user."
user_updated: 'اطلاعات به‌روز شد'
rss_updated: 'اطلاعات آر-اس-اس به‌روز شد'
# tagging_rules_updated: 'Tagging rules updated'
# tagging_rules_deleted: 'Tagging rule deleted'
# user_added: 'User "%username%" added'
# rss_token_updated: 'RSS token updated'
config_saved: 'پیکربندی ذخیره شد. برخی از تنظیمات پس از این که قطع شدید اعمال می‌شود.'
password_updated: 'رمز به‌روز شد'
password_not_updated_demo: "در حالت نمایشی نمی‌توانید رمز کاربر را عوض کنید."
user_updated: 'اطلاعات به‌روز شد'
rss_updated: 'اطلاعات آر-اس-اس به‌روز شد'
tagging_rules_updated: 'برچسب‌گذاری خودکار به‌روز شد'
tagging_rules_deleted: 'قانون برچسب‌گذاری پاک شد'
user_added: 'کابر "%username%" افزوده شد'
rss_token_updated: 'کد آر-اس-اس به‌روز شد'
entry:
notice:
# entry_already_saved: 'Entry already saved on %date%'
# entry_saved: 'Entry saved'
# entry_updated: 'Entry updated'
# entry_reloaded: 'Entry reloaded'
# entry_reload_failed: 'Failed to reload entry'
entry_archived: 'مقاله بایگانی شد'
entry_unarchived: 'مقاله از بایگانی درآمد'
entry_starred: 'مقاله برگزیده شد'
entry_unstarred: 'مقاله نابرگزیده شد'
entry_deleted: 'مقاله پاک شد'
entry_already_saved: 'این مقاله در تاریخ %date% ذخیره شده بود'
entry_saved: 'مقاله ذخیره شد'
entry_updated: 'مقاله به‌روز شد'
entry_reloaded: 'مقاله به‌روز شد'
entry_reload_failed: 'به‌روزرسانی مقاله شکست خورد'
entry_archived: 'مقاله بایگانی شد'
entry_unarchived: 'مقاله از بایگانی درآمد'
entry_starred: 'مقاله برگزیده شد'
entry_unstarred: 'مقاله نابرگزیده شد'
entry_deleted: 'مقاله پاک شد'
tag:
notice:
# tag_added: 'Tag added'
tag_added: 'برچسب افزوده شد'
import:
notice:
# failed: 'Import failed, please try again.'
# failed_on_file: 'Error while processing import. Please verify your import file.'
# summary: 'Import summary: %imported% imported, %skipped% already saved.'
failed: 'درون‌ریزی شکست خورد. لطفاً دوباره تلاش کنید.'
failed_on_file: 'خطا هنگام پردازش پروندهٔ ورودی. آیا پروندهٔ درون‌ریزی شده سالم است؟'
summary: 'گزارش درون‌ریزی: %imported% وارد شد, %skipped% از قبل ذخیره شده بود.'
developer:
notice:
# client_created: 'New client created.'

View File

@ -137,7 +137,7 @@ entry:
page_titles:
unread: 'Articles non lus'
starred: 'Articles favoris'
archive: 'Articles lus'
archived: 'Articles lus'
filtered: 'Articles filtrés'
list:
number_on_the_page: "{0} Il n'y a pas d'articles.|{1} Il y a un article.|]1,Inf[ Il y a %count% articles."
@ -338,6 +338,7 @@ developer:
documentation: 'Documentation'
how_to_first_app: 'Comment créer votre première application'
full_documentation: "Voir la documentation complète de l'API"
list_methods: "Lister toutes les méthodes de l'API"
clients:
title: 'Clients'
create_new: 'Créer une nouveau client'

View File

@ -137,7 +137,7 @@ entry:
page_titles:
unread: 'Articles pas legits'
starred: 'Articles favorits'
archive: 'Articles legits'
archived: 'Articles legits'
filtered: 'Articles filtrats'
list:
number_on_the_page: "{0} I a pas cap d'article.|{1} I a un article.|]1,Inf[ I a %count% articles."
@ -338,6 +338,7 @@ developer:
documentation: 'Documentacion'
how_to_first_app: 'Cossí crear vòstra primièra aplicacion'
full_documentation: "Veire la documentacion completa de l'API"
# list_methods: 'List API methods'
clients:
title: 'Clients'
create_new: 'Crear un novèl client'

View File

@ -137,7 +137,7 @@ entry:
page_titles:
unread: 'Nieprzeczytane wpisy'
starred: 'Wpisy oznaczone gwiazdką'
archive: 'Zarchiwizowane wpisy'
archived: 'Zarchiwizowane wpisy'
filtered: 'Odfiltrowane wpisy'
list:
number_on_the_page: '{0} Nie ma wpisów.|{1} Jest jeden wpis.|]1,Inf[ Są %count% wpisy.'
@ -338,6 +338,7 @@ developer:
documentation: 'Dokumentacja'
how_to_first_app: 'Jak stworzyć moją pierwszą aplikację'
full_documentation: 'Pokaż pełne API'
# list_methods: 'List API methods'
clients:
title: 'Klienci'
create_new: 'Utwórz nowego klienta'

View File

@ -137,7 +137,7 @@ entry:
page_titles:
# unread: 'Unread entries'
# starred: 'Starred entries'
# archive: 'Archived entries'
# archived: 'Archived entries'
# filtered: 'Filtered entries'
list:
# number_on_the_page: '{0} There is no entry.|{1} There is one entry.|]1,Inf[ There are %count% entries.'
@ -338,6 +338,7 @@ developer:
# documentation: 'Documentation'
# how_to_first_app: 'How to create my first application'
# full_documentation: 'View full API documentation'
# list_methods: 'List API methods'
# clients:
# title: 'Clients'
# create_new: 'Create a new client'

View File

@ -137,7 +137,7 @@ entry:
page_titles:
# unread: 'Unread entries'
# starred: 'Starred entries'
# archive: 'Archived entries'
# archived: 'Archived entries'
# filtered: 'Filtered entries'
list:
number_on_the_page: '{0} Herhangi bir makale yok.|{1} Burada bir adet makale var.|]1,Inf[ Burada %count% adet makale var.'
@ -338,6 +338,7 @@ developer:
# documentation: 'Documentation'
# how_to_first_app: 'How to create my first application'
# full_documentation: 'View full API documentation'
# list_methods: 'List API methods'
# clients:
# title: 'Clients'
# create_new: 'Create a new client'

View File

@ -49,7 +49,7 @@
<h2>{{ 'config.tab_menu.rss'|trans }}</h2>
{{ form_start(form.rss) }}
{{ form_start(form.rss) }}
{{ form_errors(form.rss) }}
<div class="row">
@ -169,7 +169,7 @@
{{ form_rest(form.pwd) }}
</form>
<h2>{{ 'config.tab_menu.rules'|trans }}}</h2>
<h2>{{ 'config.tab_menu.rules'|trans }}</h2>
<ul>
{% for tagging_rule in app.user.config.taggingRules %}
@ -183,7 +183,7 @@
{% endfor %}
</ul>
{{ form_start(form.new_tagging_rule) }}
{{ form_start(form.new_tagging_rule) }}
{{ form_errors(form.new_tagging_rule) }}
<fieldset class="w500p inline">
@ -205,6 +205,91 @@
{{ form_rest(form.new_tagging_rule) }}
</form>
<div class="row">
<div class="input-field col s12">
<h3>{{ 'config.form_rules.faq.title'|trans }}</h3>
<h4>{{ 'config.form_rules.faq.tagging_rules_definition_title'|trans }}</h4>
<p class="help">{{ 'config.form_rules.faq.tagging_rules_definition_description'|trans|raw }}</p>
<h4>{{ 'config.form_rules.faq.how_to_use_them_title'|trans }}</h4>
<p class="help">{{ 'config.form_rules.faq.how_to_use_them_description'|trans|raw }}</p>
<h4>{{ 'config.form_rules.faq.variables_available_title'|trans }}</h4>
<p class="help">
{{ 'config.form_rules.faq.variables_available_description'|trans }}
</p>
<table class="bordered">
<thead>
<tr>
<th>{{ 'config.form_rules.faq.variable_description.label'|trans }}</th>
<th>{{ 'config.form_rules.faq.meaning'|trans }}</th>
<th>{{ 'config.form_rules.faq.operator_description.label'|trans }}</th>
<th>{{ 'config.form_rules.faq.meaning'|trans }}</th>
</tr>
</thead>
<tbody>
<tr>
<td>title</td>
<td>{{ 'config.form_rules.faq.variable_description.title'|trans }}</td>
<td>&lt;=</td>
<td>{{ 'config.form_rules.faq.operator_description.less_than'|trans }}</td>
</tr>
<tr>
<td>url</td>
<td>{{ 'config.form_rules.faq.variable_description.url'|trans }}</td>
<td>&lt;</td>
<td>{{ 'config.form_rules.faq.operator_description.strictly_less_than'|trans }}</td>
</tr>
<tr>
<td>isArchived</td>
<td>{{ 'config.form_rules.faq.variable_description.isArchived'|trans }}</td>
<td>&gt;=</td>
<td>{{ 'config.form_rules.faq.operator_description.greater_than'|trans }}</td>
</tr>
<tr>
<td>isStarred</td>
<td>{{ 'config.form_rules.faq.variable_description.isStarred'|trans }}</td>
<td>&gt;</td>
<td>{{ 'config.form_rules.faq.operator_description.strictly_greater_than'|trans }}</td>
</tr>
<tr>
<td>content</td>
<td>{{ 'config.form_rules.faq.variable_description.content'|trans }}</td>
<td>=</td>
<td>{{ 'config.form_rules.faq.operator_description.equal_to'|trans }}</td>
</tr>
<tr>
<td>language</td>
<td>{{ 'config.form_rules.faq.variable_description.language'|trans }}</td>
<td>!=</td>
<td>{{ 'config.form_rules.faq.operator_description.not_equal_to'|trans }}</td>
</tr>
<tr>
<td>mimetype</td>
<td>{{ 'config.form_rules.faq.variable_description.mimetype'|trans }}</td>
<td>OR</td>
<td>{{ 'config.form_rules.faq.operator_description.or'|trans }}</td>
</tr>
<tr>
<td>readingTime</td>
<td>{{ 'config.form_rules.faq.variable_description.readingTime'|trans }}</td>
<td>AND</td>
<td>{{ 'config.form_rules.faq.operator_description.and'|trans }}</td>
</tr>
<tr>
<td>domainName</td>
<td>{{ 'config.form_rules.faq.variable_description.domainName'|trans }}</td>
<td>matches</td>
<td>{{ 'config.form_rules.faq.operator_description.matches'|trans|raw }}</td>
</tr>
</tbody>
</table>
</div>
</div>
{% if is_granted('ROLE_SUPER_ADMIN') %}
<h2>{{ 'config.tab_menu.new_user'|trans }}</h2>

View File

@ -14,7 +14,8 @@
<ul>
<li><a href="{{ path('developer_howto_firstapp') }}">{{ 'developer.how_to_first_app'|trans }}</a></li>
<li><a href="{{ path('nelmio_api_doc_index') }}">{{ 'developer.full_documentation'|trans }}</a></li>
<li><a href="http://doc.wallabag.org/en/v2/developer/api.html">{{ 'developer.full_documentation'|trans }}</a></li>
<li><a href="{{ path('nelmio_api_doc_index') }}">{{ 'developer.list_methods'|trans }}</a></li>
</ul>
<h4>{{ 'developer.clients.title'|trans }}</h4>

View File

@ -23,19 +23,17 @@
{% for entry in entries %}
<div id="entry-{{ entry.id|e }}" class="entry">
<h2><a href="{{ path('view', { 'id': entry.id }) }}">{{ entry.title|raw }}</a></h2>
{% if entry.readingTime > 0 %}
<div class="estimatedTime">
{% set readingTime = entry.readingTime / app.user.config.readingSpeed %}
<div class="estimatedTime">
<span class="tool reading-time">
{{ 'entry.list.reading_time_minutes'|trans({'%readingTime%': entry.readingTime}) }}
</span>
</div>
{% if readingTime > 0 %}
{{ 'entry.list.reading_time_minutes'|trans({'%readingTime%': readingTime|round}) }}
{% else %}
<div class="estimatedTime">
<span class="tool reading-time">
{{ 'entry.list.reading_time_less_one_minute'|trans|raw }}
</span>
</div>
{{ 'entry.list.reading_time_less_one_minute'|trans|raw }}
{% endif %}
</span>
</div>
<ul class="tools links">
<li><a title="{{ 'entry.list.toogle_as_read'|trans }}" class="tool icon-check icon {% if entry.isArchived == 0 %}archive-off{% else %}archive{% endif %}" href="{{ path('archive_entry', { 'id': entry.id }) }}"><span>{{ 'entry.list.toogle_as_read'|trans }}</span></a></li>

View File

@ -22,7 +22,7 @@
{% if craue_setting('share_shaarli') %}<li><a href="{{ craue_setting('shaarli_url') }}/index.php?post={{ entry.url|url_encode }}&amp;title={{ entry.title|url_encode }}" target="_blank" class="tool shaarli" title="shaarli"><span>shaarli</span></a></li>{% endif %}
{% if craue_setting('share_diaspora') %}<li><a href="{{ craue_setting('diaspora_url') }}/bookmarklet?url={{ entry.url|url_encode }}&title={{ entry.title|url_encode }}&notes=&v=1&noui=1&jump=doclose" target="_blank" class="tool diaspora icon-image icon-image--diaspora" title="diaspora"><span>diaspora</span></a></li>{% endif %}
{% if craue_setting('carrot') %}<li><a href="https://secure.carrot.org/GiveAndGetBack.do?url={{ entry.url|url_encode }}&title={{ entry.title|url_encode }}" class="tool carrot icon-image icon-image--carrot" target="_blank" title="carrot"><span>Carrot</span></a></li>{% endif %}
{% if craue_setting('show_printlink') %}<li><a title="{{ 'entry.view.left_menu.print'|trans }}" class="tool icon icon-print" href="javascript: window.print();"><span>{{ 'entry.view.left_menu.re_fetch_content'|trans }}</span></a></li>{% endif %}
{% if craue_setting('show_printlink') %}<li><a title="{{ 'entry.view.left_menu.print'|trans }}" class="tool icon icon-print" href="javascript: window.print();"><span>{{ 'entry.view.left_menu.print'|trans }}</span></a></li>{% endif %}
{% if craue_setting('export_epub') %}<li><a href="?epub&amp;method=id&amp;value={{ entry.id }}" title="Generate ePub file">EPUB</a></li>{% endif %}
{% if craue_setting('export_mobi') %}<li><a href="?mobi&amp;method=id&amp;value={{ entry.id }}" title="Generate Mobi file">MOBI</a></li>{% endif %}
{% if craue_setting('export_pdf') %}<li><a href="?pdf&amp;method=id&amp;value={{ entry.id }}" title="Generate PDF file">PDF</a></li>{% endif %}

View File

@ -250,75 +250,75 @@
<h5>{{ 'config.form_rules.faq.variables_available_title'|trans }}</h5>
<p class="help">
{{ 'config.form_rules.faq.variables_available_description'|trans }}
<table class="bordered">
<thead>
<tr>
<th>{{ 'config.form_rules.faq.variable_description.label'|trans }}</th>
<th>{{ 'config.form_rules.faq.meaning'|trans }}</th>
<th>{{ 'config.form_rules.faq.operator_description.label'|trans }}</th>
<th>{{ 'config.form_rules.faq.meaning'|trans }}</th>
</tr>
</thead>
<tbody>
<tr>
<td>title</td>
<td>{{ 'config.form_rules.faq.variable_description.title'|trans }}</td>
<td>&lt;=</td>
<td>{{ 'config.form_rules.faq.operator_description.less_than'|trans }}</td>
</tr>
<tr>
<td>url</td>
<td>{{ 'config.form_rules.faq.variable_description.url'|trans }}</td>
<td>&lt;</td>
<td>{{ 'config.form_rules.faq.operator_description.strictly_less_than'|trans }}</td>
</tr>
<tr>
<td>isArchived</td>
<td>{{ 'config.form_rules.faq.variable_description.isArchived'|trans }}</td>
<td>=&gt;</td>
<td>{{ 'config.form_rules.faq.operator_description.greater_than'|trans }}</td>
</tr>
<tr>
<td>isStarred</td>
<td>{{ 'config.form_rules.faq.variable_description.isStarred'|trans }}</td>
<td>&gt;</td>
<td>{{ 'config.form_rules.faq.operator_description.strictly_greater_than'|trans }}</td>
</tr>
<tr>
<td>content</td>
<td>{{ 'config.form_rules.faq.variable_description.content'|trans }}</td>
<td>=</td>
<td>{{ 'config.form_rules.faq.operator_description.equal_to'|trans }}</td>
</tr>
<tr>
<td>language</td>
<td>{{ 'config.form_rules.faq.variable_description.language'|trans }}</td>
<td>!=</td>
<td>{{ 'config.form_rules.faq.operator_description.not_equal_to'|trans }}</td>
</tr>
<tr>
<td>mimetype</td>
<td>{{ 'config.form_rules.faq.variable_description.mimetype'|trans }}</td>
<td>OR</td>
<td>{{ 'config.form_rules.faq.operator_description.or'|trans }}</td>
</tr>
<tr>
<td>readingTime</td>
<td>{{ 'config.form_rules.faq.variable_description.readingTime'|trans }}</td>
<td>AND</td>
<td>{{ 'config.form_rules.faq.operator_description.and'|trans }}</td>
</tr>
<tr>
<td>domainName</td>
<td>{{ 'config.form_rules.faq.variable_description.domainName'|trans }}</td>
<td>matches</td>
<td>{{ 'config.form_rules.faq.operator_description.matches'|trans|raw }}</td>
</tr>
</tbody>
</table>
</p>
<table class="bordered">
<thead>
<tr>
<th>{{ 'config.form_rules.faq.variable_description.label'|trans }}</th>
<th>{{ 'config.form_rules.faq.meaning'|trans }}</th>
<th>{{ 'config.form_rules.faq.operator_description.label'|trans }}</th>
<th>{{ 'config.form_rules.faq.meaning'|trans }}</th>
</tr>
</thead>
<tbody>
<tr>
<td>title</td>
<td>{{ 'config.form_rules.faq.variable_description.title'|trans }}</td>
<td>&lt;=</td>
<td>{{ 'config.form_rules.faq.operator_description.less_than'|trans }}</td>
</tr>
<tr>
<td>url</td>
<td>{{ 'config.form_rules.faq.variable_description.url'|trans }}</td>
<td>&lt;</td>
<td>{{ 'config.form_rules.faq.operator_description.strictly_less_than'|trans }}</td>
</tr>
<tr>
<td>isArchived</td>
<td>{{ 'config.form_rules.faq.variable_description.isArchived'|trans }}</td>
<td>&gt;=</td>
<td>{{ 'config.form_rules.faq.operator_description.greater_than'|trans }}</td>
</tr>
<tr>
<td>isStarred</td>
<td>{{ 'config.form_rules.faq.variable_description.isStarred'|trans }}</td>
<td>&gt;</td>
<td>{{ 'config.form_rules.faq.operator_description.strictly_greater_than'|trans }}</td>
</tr>
<tr>
<td>content</td>
<td>{{ 'config.form_rules.faq.variable_description.content'|trans }}</td>
<td>=</td>
<td>{{ 'config.form_rules.faq.operator_description.equal_to'|trans }}</td>
</tr>
<tr>
<td>language</td>
<td>{{ 'config.form_rules.faq.variable_description.language'|trans }}</td>
<td>!=</td>
<td>{{ 'config.form_rules.faq.operator_description.not_equal_to'|trans }}</td>
</tr>
<tr>
<td>mimetype</td>
<td>{{ 'config.form_rules.faq.variable_description.mimetype'|trans }}</td>
<td>OR</td>
<td>{{ 'config.form_rules.faq.operator_description.or'|trans }}</td>
</tr>
<tr>
<td>readingTime</td>
<td>{{ 'config.form_rules.faq.variable_description.readingTime'|trans }}</td>
<td>AND</td>
<td>{{ 'config.form_rules.faq.operator_description.and'|trans }}</td>
</tr>
<tr>
<td>domainName</td>
<td>{{ 'config.form_rules.faq.variable_description.domainName'|trans }}</td>
<td>matches</td>
<td>{{ 'config.form_rules.faq.operator_description.matches'|trans|raw }}</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>

View File

@ -14,7 +14,8 @@
<ul>
<li><a href="{{ path('developer_howto_firstapp') }}">{{ 'developer.how_to_first_app'|trans }}</a></li>
<li><a href="{{ path('nelmio_api_doc_index') }}">{{ 'developer.full_documentation'|trans }}</a></li>
<li><a href="http://doc.wallabag.org/en/v2/developer/api.html">{{ 'developer.full_documentation'|trans }}</a></li>
<li><a href="{{ path('nelmio_api_doc_index') }}">{{ 'developer.list_methods'|trans }}</a></li>
</ul>
<h4>{{ 'developer.clients.title'|trans }}</h4>

View File

@ -54,7 +54,7 @@
<span class="tool reading-time">
{% set readingTime = entry.readingTime / app.user.config.readingSpeed %}
{% if readingTime > 0 %}
{{ 'entry.list.reading_time_minutes'|trans({'%readingTime%': readingTime}) }}
{{ 'entry.list.reading_time_minutes'|trans({'%readingTime%': readingTime|round}) }}
{% else %}
{{ 'entry.list.reading_time_less_one_minute'|trans|raw }}
{% endif %}
@ -74,8 +74,7 @@
<div class="estimatedTime grey-text">
<span class="tool reading-time">
{{ 'entry.list.reading_time'|trans }}
{% if entry.readingTime > 0 %}{{ entry.readingTime }}{% else %}<small class="inferieur">&lt;</small> 1{% endif %} min
{% if readingTime > 0 %}{{ 'entry.list.reading_time_minutes'|trans({'%readingTime%': readingTime|round}) }}{% else %}{{ 'entry.list.reading_time_less_one_minute'|trans|raw }}{% endif %}
</span>
</div>

View File

@ -138,6 +138,17 @@
</div>
</li>
{% if craue_setting('show_printlink') %}
<li class="bold border-bottom hide-on-med-and-down">
<a class="waves-effect collapsible-header" title="{{ 'entry.view.left_menu.print'|trans }}" href="javascript: window.print();">
<i class="mdi-action-print small"></i>
<span>{{ 'entry.view.left_menu.print'|trans }}</span>
</a>
<div class="collapsible-body"></div>
</li>
{% endif %}
<li class="bold">
<a class="waves-effect collapsible-header">
<i class="mdi-file-file-download small"></i>
@ -192,14 +203,14 @@
{% endfor %}
</div>
{% if entry.previewPicture is not null %}
<div><img class="preview" src="{{ entry.previewPicture }}" alt="{{ entry.title|raw }}" /></div>
{% endif %}
<div class="input-field nav-panel-add-tag" style="display: none">
{{ render(controller( "WallabagCoreBundle:Tag:addTagForm", { 'id': entry.id } )) }}
</div>
{% if entry.previewPicture is not null %}
<div><img class="preview" src="{{ entry.previewPicture }}" alt="{{ entry.title|raw }}" /></div>
{% endif %}
</aside>
<article>
{{ entry.content | raw }}

View File

@ -67,10 +67,11 @@ class InstallCommandTest extends WallabagCoreTestCase
'command' => $command->getName(),
));
$this->assertContains('Step 1 of 4. Checking system requirements.', $tester->getDisplay());
$this->assertContains('Step 2 of 4. Setting up database.', $tester->getDisplay());
$this->assertContains('Step 3 of 4. Administration setup.', $tester->getDisplay());
$this->assertContains('Step 4 of 4. Installing assets.', $tester->getDisplay());
$this->assertContains('Checking system requirements.', $tester->getDisplay());
$this->assertContains('Setting up database.', $tester->getDisplay());
$this->assertContains('Administration setup.', $tester->getDisplay());
$this->assertContains('Config setup.', $tester->getDisplay());
$this->assertContains('Installing assets.', $tester->getDisplay());
}
public function testRunInstallCommandWithReset()
@ -97,11 +98,12 @@ class InstallCommandTest extends WallabagCoreTestCase
'--reset' => true,
));
$this->assertContains('Step 1 of 4. Checking system requirements.', $tester->getDisplay());
$this->assertContains('Step 2 of 4. Setting up database.', $tester->getDisplay());
$this->assertContains('Checking system requirements.', $tester->getDisplay());
$this->assertContains('Setting up database.', $tester->getDisplay());
$this->assertContains('Droping database, creating database and schema, clearing the cache', $tester->getDisplay());
$this->assertContains('Step 3 of 4. Administration setup.', $tester->getDisplay());
$this->assertContains('Step 4 of 4. Installing assets.', $tester->getDisplay());
$this->assertContains('Administration setup.', $tester->getDisplay());
$this->assertContains('Config setup.', $tester->getDisplay());
$this->assertContains('Installing assets.', $tester->getDisplay());
// we force to reset everything
$this->assertContains('Droping database, creating database and schema, clearing the cache', $tester->getDisplay());
@ -142,10 +144,11 @@ class InstallCommandTest extends WallabagCoreTestCase
'command' => $command->getName(),
));
$this->assertContains('Step 1 of 4. Checking system requirements.', $tester->getDisplay());
$this->assertContains('Step 2 of 4. Setting up database.', $tester->getDisplay());
$this->assertContains('Step 3 of 4. Administration setup.', $tester->getDisplay());
$this->assertContains('Step 4 of 4. Installing assets.', $tester->getDisplay());
$this->assertContains('Checking system requirements.', $tester->getDisplay());
$this->assertContains('Setting up database.', $tester->getDisplay());
$this->assertContains('Administration setup.', $tester->getDisplay());
$this->assertContains('Config setup.', $tester->getDisplay());
$this->assertContains('Installing assets.', $tester->getDisplay());
// the current database doesn't already exist
$this->assertContains('Creating database and schema, clearing the cache', $tester->getDisplay());
@ -179,10 +182,11 @@ class InstallCommandTest extends WallabagCoreTestCase
'command' => $command->getName(),
));
$this->assertContains('Step 1 of 4. Checking system requirements.', $tester->getDisplay());
$this->assertContains('Step 2 of 4. Setting up database.', $tester->getDisplay());
$this->assertContains('Step 3 of 4. Administration setup.', $tester->getDisplay());
$this->assertContains('Step 4 of 4. Installing assets.', $tester->getDisplay());
$this->assertContains('Checking system requirements.', $tester->getDisplay());
$this->assertContains('Setting up database.', $tester->getDisplay());
$this->assertContains('Administration setup.', $tester->getDisplay());
$this->assertContains('Config setup.', $tester->getDisplay());
$this->assertContains('Installing assets.', $tester->getDisplay());
$this->assertContains('Droping schema and creating schema', $tester->getDisplay());
}
@ -233,10 +237,11 @@ class InstallCommandTest extends WallabagCoreTestCase
'command' => $command->getName(),
));
$this->assertContains('Step 1 of 4. Checking system requirements.', $tester->getDisplay());
$this->assertContains('Step 2 of 4. Setting up database.', $tester->getDisplay());
$this->assertContains('Step 3 of 4. Administration setup.', $tester->getDisplay());
$this->assertContains('Step 4 of 4. Installing assets.', $tester->getDisplay());
$this->assertContains('Checking system requirements.', $tester->getDisplay());
$this->assertContains('Setting up database.', $tester->getDisplay());
$this->assertContains('Administration setup.', $tester->getDisplay());
$this->assertContains('Config setup.', $tester->getDisplay());
$this->assertContains('Installing assets.', $tester->getDisplay());
$this->assertContains('Creating schema', $tester->getDisplay());
}
@ -265,9 +270,10 @@ class InstallCommandTest extends WallabagCoreTestCase
'--no-interaction' => true,
));
$this->assertContains('Step 1 of 4. Checking system requirements.', $tester->getDisplay());
$this->assertContains('Step 2 of 4. Setting up database.', $tester->getDisplay());
$this->assertContains('Step 3 of 4. Administration setup.', $tester->getDisplay());
$this->assertContains('Step 4 of 4. Installing assets.', $tester->getDisplay());
$this->assertContains('Checking system requirements.', $tester->getDisplay());
$this->assertContains('Setting up database.', $tester->getDisplay());
$this->assertContains('Administration setup.', $tester->getDisplay());
$this->assertContains('Config setup.', $tester->getDisplay());
$this->assertContains('Installing assets.', $tester->getDisplay());
}
}