aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--inc/3rdparty/site_config/standard/bastamag.net.txt10
-rw-r--r--inc/3rdparty/site_config/standard/bearmetal.eu.txt6
-rwxr-xr-xinc/3rdparty/site_config/standard/blog.cloudflare.com.txt8
-rw-r--r--inc/3rdparty/site_config/standard/blog.niqnutn.com.txt9
-rw-r--r--inc/3rdparty/site_config/standard/captaineconomics.fr.txt6
-rw-r--r--inc/3rdparty/site_config/standard/cloudacademy.com.txt6
-rw-r--r--inc/3rdparty/site_config/standard/codebase64.org.txt9
-rw-r--r--inc/3rdparty/site_config/standard/cyrille-borne.com.txt6
-rw-r--r--inc/3rdparty/site_config/standard/des-livres-pour-changer-de-vie.fr.txt6
-rw-r--r--inc/3rdparty/site_config/standard/espacepolitique.revues.org.txt10
-rw-r--r--inc/3rdparty/site_config/standard/frankdenneman.nl.txt2
-rw-r--r--inc/3rdparty/site_config/standard/frontburner.dmagazine.com.txt6
-rw-r--r--inc/3rdparty/site_config/standard/ganglia.info.txt2
-rw-r--r--inc/3rdparty/site_config/standard/gokulkrishh.github.io.txt6
-rw-r--r--inc/3rdparty/site_config/standard/hackersrepublic.org.txt6
-rw-r--r--inc/3rdparty/site_config/standard/iceblog.free.fr.txt7
-rw-r--r--inc/3rdparty/site_config/standard/iso.500px.com.txt6
-rw-r--r--inc/3rdparty/site_config/standard/it-connect.fr.txt9
-rw-r--r--inc/3rdparty/site_config/standard/jsforcats.com.txt6
-rw-r--r--inc/3rdparty/site_config/standard/lapin-blanc.blogs.docteo.net.txt6
-rw-r--r--inc/3rdparty/site_config/standard/lececil.org.txt6
-rw-r--r--inc/3rdparty/site_config/standard/metrocop.net.txt6
-rw-r--r--inc/3rdparty/site_config/standard/pérotin.com.txt6
-rwxr-xr-xinc/3rdparty/site_config/standard/reddit.com.txt6
-rw-r--r--inc/3rdparty/site_config/standard/spiil.org.txt6
-rw-r--r--inc/3rdparty/site_config/standard/yosko.net.txt6
-rwxr-xr-xinc/poche/Database.class.php144
-rwxr-xr-xinc/poche/Poche.class.php44
-rwxr-xr-xinstall/index.php13
-rw-r--r--locale/en_US.utf8/LC_MESSAGES/en_US.utf8.mobin21177 -> 21333 bytes
-rw-r--r--locale/en_US.utf8/LC_MESSAGES/en_US.utf8.po5
-rw-r--r--locale/fr_FR.utf8/LC_MESSAGES/fr_FR.utf8.mobin26939 -> 27096 bytes
-rw-r--r--locale/fr_FR.utf8/LC_MESSAGES/fr_FR.utf8.po209
-rw-r--r--themes/_global/js/keyboard.js13
-rwxr-xr-xthemes/baggy/config.twig2
-rwxr-xr-xthemes/default/config.twig2
36 files changed, 435 insertions, 165 deletions
diff --git a/inc/3rdparty/site_config/standard/bastamag.net.txt b/inc/3rdparty/site_config/standard/bastamag.net.txt
new file mode 100644
index 00000000..142c959c
--- /dev/null
+++ b/inc/3rdparty/site_config/standard/bastamag.net.txt
@@ -0,0 +1,10 @@
1# Generated by FiveFilters.org's web-based selection tool
2# Place this file inside your site_config/custom/ folder
3# Source: http://siteconfig.fivefilters.org/grab.php?url=http%3A%2F%2Fwww.bastamag.net%2FEncadrement-des-loyers-pourquoi-Anne-Hidalgo-ferait-bien-de-visiter-Vienne-l
4
5body: //div[@id='content']//article
6
7strip_id_or_class: appel-soutien
8strip_id_or_class: liste dossiers-content
9
10test_url: http://www.bastamag.net/Encadrement-des-loyers-pourquoi-Anne-Hidalgo-ferait-bien-de-visiter-Vienne-l
diff --git a/inc/3rdparty/site_config/standard/bearmetal.eu.txt b/inc/3rdparty/site_config/standard/bearmetal.eu.txt
new file mode 100644
index 00000000..44d34655
--- /dev/null
+++ b/inc/3rdparty/site_config/standard/bearmetal.eu.txt
@@ -0,0 +1,6 @@
1# Generated by FiveFilters.org's web-based selection tool
2# Place this file inside your site_config/custom/ folder
3# Source: http://siteconfig.fivefilters.org/grab.php?url=https%3A%2F%2Fbearmetal.eu%2Ftheden%2Fits-not-about-you%2F
4
5body: //div[contains(concat(' ',normalize-space(@class),' '),' entry-content ')]
6test_url: https://bearmetal.eu/theden/its-not-about-you/
diff --git a/inc/3rdparty/site_config/standard/blog.cloudflare.com.txt b/inc/3rdparty/site_config/standard/blog.cloudflare.com.txt
index db80a35f..9b7cf25c 100755
--- a/inc/3rdparty/site_config/standard/blog.cloudflare.com.txt
+++ b/inc/3rdparty/site_config/standard/blog.cloudflare.com.txt
@@ -3,7 +3,11 @@ title: substring-before(//title, '-')
3 3
4author: //a[ contains(@href, '/people') ] 4author: //a[ contains(@href, '/people') ]
5 5
6body: //div[ @class='post' ] 6body: //article[contains(concat(' ',normalize-space(@class),' '),' post ')]
7
8strip_id_or_class: section learn-more
9strip_id_or_class: section comments
10strip_id_or_class: disqus_thread
7 11
8# Date is impossible to retrieve since they use those stupid "fuzzy" dates, inserted through javascript, at posterous. 12# Date is impossible to retrieve since they use those stupid "fuzzy" dates, inserted through javascript, at posterous.
9test_url: http://blog.cloudflare.com/understanding-analytics-when-is-a-page-view-n \ No newline at end of file 13test_url: http://blog.cloudflare.com/understanding-analytics-when-is-a-page-view-n
diff --git a/inc/3rdparty/site_config/standard/blog.niqnutn.com.txt b/inc/3rdparty/site_config/standard/blog.niqnutn.com.txt
new file mode 100644
index 00000000..aa2f1865
--- /dev/null
+++ b/inc/3rdparty/site_config/standard/blog.niqnutn.com.txt
@@ -0,0 +1,9 @@
1# Generated by FiveFilters.org's web-based selection tool
2# Place this file inside your site_config/custom/ folder
3# Source: http://siteconfig.fivefilters.org/grab.php?url=http%3A%2F%2Fblog.niqnutn.com%2Farticle35%2Fsteganographie-l-art-de-dissimuler-un-message
4
5body: //article[contains(concat(' ',normalize-space(@class),' '),' article-content ')]//section
6
7strip_id_or_class: sommaire
8
9test_url: http://blog.niqnutn.com/article35/steganographie-l-art-de-dissimuler-un-message
diff --git a/inc/3rdparty/site_config/standard/captaineconomics.fr.txt b/inc/3rdparty/site_config/standard/captaineconomics.fr.txt
new file mode 100644
index 00000000..036e0281
--- /dev/null
+++ b/inc/3rdparty/site_config/standard/captaineconomics.fr.txt
@@ -0,0 +1,6 @@
1# Generated by FiveFilters.org's web-based selection tool
2# Place this file inside your site_config/custom/ folder
3# Source: http://siteconfig.fivefilters.org/grab.php?url=http%3A%2F%2Fwww.captaineconomics.fr%2F-les-immigres-recemment-arrives-en-france-qui-sont-ils-insee
4
5body: //div[contains(concat(' ',normalize-space(@class),' '),' post_content ')]
6test_url: http://www.captaineconomics.fr/-les-immigres-recemment-arrives-en-france-qui-sont-ils-insee
diff --git a/inc/3rdparty/site_config/standard/cloudacademy.com.txt b/inc/3rdparty/site_config/standard/cloudacademy.com.txt
new file mode 100644
index 00000000..f5b67840
--- /dev/null
+++ b/inc/3rdparty/site_config/standard/cloudacademy.com.txt
@@ -0,0 +1,6 @@
1# Generated by FiveFilters.org's web-based selection tool
2# Place this file inside your site_config/custom/ folder
3# Source: http://siteconfig.fivefilters.org/grab.php?url=http%3A%2F%2Fcloudacademy.com%2Fblog%2Fberkshelf-manage-chef-cookbooks%2F
4
5body: //div[contains(concat(' ',normalize-space(@class),' '),' entry-content ')]
6test_url: http://cloudacademy.com/blog/berkshelf-manage-chef-cookbooks/ \ No newline at end of file
diff --git a/inc/3rdparty/site_config/standard/codebase64.org.txt b/inc/3rdparty/site_config/standard/codebase64.org.txt
new file mode 100644
index 00000000..d992d2f1
--- /dev/null
+++ b/inc/3rdparty/site_config/standard/codebase64.org.txt
@@ -0,0 +1,9 @@
1# Generated by FiveFilters.org's web-based selection tool
2# Place this file inside your site_config/custom/ folder
3# Source: http://siteconfig.fivefilters.org/grab.php?url=http%3A%2F%2Fcodebase64.org%2Fdoku.php%3Fid%3Dbase%3Ademo_coding_introduction
4
5body: //div[contains(concat(' ',normalize-space(@class),' '),' page ')]
6
7strip_id_or_class: dw__toc
8
9test_url: http://codebase64.org/doku.php?id=base:demo_coding_introduction
diff --git a/inc/3rdparty/site_config/standard/cyrille-borne.com.txt b/inc/3rdparty/site_config/standard/cyrille-borne.com.txt
new file mode 100644
index 00000000..7b41aa0b
--- /dev/null
+++ b/inc/3rdparty/site_config/standard/cyrille-borne.com.txt
@@ -0,0 +1,6 @@
1# Generated by FiveFilters.org's web-based selection tool
2# Place this file inside your site_config/custom/ folder
3# Source: http://siteconfig.fivefilters.org/grab.php?url=http%3A%2F%2Fwww.cyrille-borne.com%2Farticle511%2Fun-an-de-zte-open-c-plus-tard
4
5body: //article//section
6test_url: http://www.cyrille-borne.com/article511/un-an-de-zte-open-c-plus-tard \ No newline at end of file
diff --git a/inc/3rdparty/site_config/standard/des-livres-pour-changer-de-vie.fr.txt b/inc/3rdparty/site_config/standard/des-livres-pour-changer-de-vie.fr.txt
new file mode 100644
index 00000000..56b0ea27
--- /dev/null
+++ b/inc/3rdparty/site_config/standard/des-livres-pour-changer-de-vie.fr.txt
@@ -0,0 +1,6 @@
1# Generated by FiveFilters.org's web-based selection tool
2# Place this file inside your site_config/custom/ folder
3# Source: http://siteconfig.fivefilters.org/grab.php?url=http%3A%2F%2Fwww.des-livres-pour-changer-de-vie.fr%2Fbit-literacy-2%2F
4
5body: //div[@id='getsocialmain']
6test_url: http://www.des-livres-pour-changer-de-vie.fr/bit-literacy-2/ \ No newline at end of file
diff --git a/inc/3rdparty/site_config/standard/espacepolitique.revues.org.txt b/inc/3rdparty/site_config/standard/espacepolitique.revues.org.txt
new file mode 100644
index 00000000..c4acb26e
--- /dev/null
+++ b/inc/3rdparty/site_config/standard/espacepolitique.revues.org.txt
@@ -0,0 +1,10 @@
1# Generated by FiveFilters.org's web-based selection tool
2# Place this file inside your site_config/custom/ folder
3# Source: http://siteconfig.fivefilters.org/grab.php?url=http%3A%2F%2Fespacepolitique.revues.org%2F284
4
5body: //div[@id='text']
6
7strip_id_or_class: paranumber
8strip_id_or_class: go-top
9
10test_url: http://espacepolitique.revues.org/284
diff --git a/inc/3rdparty/site_config/standard/frankdenneman.nl.txt b/inc/3rdparty/site_config/standard/frankdenneman.nl.txt
new file mode 100644
index 00000000..c6011002
--- /dev/null
+++ b/inc/3rdparty/site_config/standard/frankdenneman.nl.txt
@@ -0,0 +1,2 @@
1body: //*[(@class = "content")]
2test_url: http://frankdenneman.nl/
diff --git a/inc/3rdparty/site_config/standard/frontburner.dmagazine.com.txt b/inc/3rdparty/site_config/standard/frontburner.dmagazine.com.txt
new file mode 100644
index 00000000..73f44324
--- /dev/null
+++ b/inc/3rdparty/site_config/standard/frontburner.dmagazine.com.txt
@@ -0,0 +1,6 @@
1# Generated by FiveFilters.org's web-based selection tool
2# Place this file inside your site_config/custom/ folder
3# Source: http://siteconfig.fivefilters.org/grab.php?url=http%3A%2F%2Ffrontburner.dmagazine.com%2F2015%2F04%2F23%2Fthe-barrett-brown-review-of-arts-and-letters-and-jail-a-sign-of-things-to-come%2F
4
5body: //div[@id='article-body']
6test_url: http://frontburner.dmagazine.com/2015/04/23/the-barrett-brown-review-of-arts-and-letters-and-jail-a-sign-of-things-to-come/
diff --git a/inc/3rdparty/site_config/standard/ganglia.info.txt b/inc/3rdparty/site_config/standard/ganglia.info.txt
new file mode 100644
index 00000000..2ae27b48
--- /dev/null
+++ b/inc/3rdparty/site_config/standard/ganglia.info.txt
@@ -0,0 +1,2 @@
1body: //*[(@id = "mid")]
2test_url: http://ganglia.info/
diff --git a/inc/3rdparty/site_config/standard/gokulkrishh.github.io.txt b/inc/3rdparty/site_config/standard/gokulkrishh.github.io.txt
new file mode 100644
index 00000000..b395fa9e
--- /dev/null
+++ b/inc/3rdparty/site_config/standard/gokulkrishh.github.io.txt
@@ -0,0 +1,6 @@
1# Generated by FiveFilters.org's web-based selection tool
2# Place this file inside your site_config/custom/ folder
3# Source: http://siteconfig.fivefilters.org/grab.php?url=https%3A%2F%2Fgokulkrishh.github.io%2FJavascript-Guidelines%2F
4
5body: //section[contains(concat(' ',normalize-space(@class),' '),' main-content ')]
6test_url: https://gokulkrishh.github.io/Javascript-Guidelines/
diff --git a/inc/3rdparty/site_config/standard/hackersrepublic.org.txt b/inc/3rdparty/site_config/standard/hackersrepublic.org.txt
new file mode 100644
index 00000000..da01c213
--- /dev/null
+++ b/inc/3rdparty/site_config/standard/hackersrepublic.org.txt
@@ -0,0 +1,6 @@
1# Generated by FiveFilters.org's web-based selection tool
2# Place this file inside your site_config/custom/ folder
3# Source: http://siteconfig.fivefilters.org/grab.php?url=http%3A%2F%2Fwww.hackersrepublic.org%2Fculture-du-hacking%2Fune-histoire-de-privileges
4
5body: //div[contains(concat(' ',normalize-space(@class),' '),' field-name-body ')]//div[contains(concat(' ',normalize-space(@class),' '),' field-items ')]//div[contains(concat(' ',normalize-space(@class),' '),' field-item ') and (contains(concat(' ',normalize-space(@class),' '),' even '))]
6test_url: http://www.hackersrepublic.org/culture-du-hacking/une-histoire-de-privileges
diff --git a/inc/3rdparty/site_config/standard/iceblog.free.fr.txt b/inc/3rdparty/site_config/standard/iceblog.free.fr.txt
new file mode 100644
index 00000000..9d1ce214
--- /dev/null
+++ b/inc/3rdparty/site_config/standard/iceblog.free.fr.txt
@@ -0,0 +1,7 @@
1
2# Generated by FiveFilters.org's web-based selection tool
3# Place this file inside your site_config/custom/ folder
4# Source: http://siteconfig.fivefilters.org/grab.php?url=http%3A%2F%2Ficeblog.free.fr%2Findex.php%3Farticle102%2Fweb-histoire-geek-4
5
6body: //article//section
7test_url: http://iceblog.free.fr/index.php?article102/web-histoire-geek-4
diff --git a/inc/3rdparty/site_config/standard/iso.500px.com.txt b/inc/3rdparty/site_config/standard/iso.500px.com.txt
new file mode 100644
index 00000000..ffa29a1d
--- /dev/null
+++ b/inc/3rdparty/site_config/standard/iso.500px.com.txt
@@ -0,0 +1,6 @@
1# Generated by FiveFilters.org's web-based selection tool
2# Place this file inside your site_config/custom/ folder
3# Source: http://siteconfig.fivefilters.org/grab.php?url=https%3A%2F%2Fiso.500px.com%2Fhow-i-post-processed-the-most-successful-image-of-my-career%2F
4
5body: //div[contains(concat(' ',normalize-space(@class),' '),' post-content ')]
6test_url: https://iso.500px.com/how-i-post-processed-the-most-successful-image-of-my-career/
diff --git a/inc/3rdparty/site_config/standard/it-connect.fr.txt b/inc/3rdparty/site_config/standard/it-connect.fr.txt
new file mode 100644
index 00000000..80c95e68
--- /dev/null
+++ b/inc/3rdparty/site_config/standard/it-connect.fr.txt
@@ -0,0 +1,9 @@
1# Generated by FiveFilters.org's web-based selection tool
2# Place this file inside your site_config/custom/ folder
3# Source: http://siteconfig.fivefilters.org/grab.php?url=http%3A%2F%2Fwww.it-connect.fr%2Fdebuter-avec-docker-et-les-containers-sous-debian-8%2F
4
5body: //div[contains(concat(' ',normalize-space(@class),' '),' post_inner_wrapper ')]
6
7strip_id_or_class: toc_container
8
9test_url: http://www.it-connect.fr/debuter-avec-docker-et-les-containers-sous-debian-8/
diff --git a/inc/3rdparty/site_config/standard/jsforcats.com.txt b/inc/3rdparty/site_config/standard/jsforcats.com.txt
new file mode 100644
index 00000000..f2699ef1
--- /dev/null
+++ b/inc/3rdparty/site_config/standard/jsforcats.com.txt
@@ -0,0 +1,6 @@
1# Generated by FiveFilters.org's web-based selection tool
2# Place this file inside your site_config/custom/ folder
3# Source: http://siteconfig.fivefilters.org/grab.php?url=http%3A%2F%2Fjsforcats.com%2F
4
5body: //div[contains(concat(' ',normalize-space(@class),' '),' post-content ')]
6test_url: http://jsforcats.com/
diff --git a/inc/3rdparty/site_config/standard/lapin-blanc.blogs.docteo.net.txt b/inc/3rdparty/site_config/standard/lapin-blanc.blogs.docteo.net.txt
new file mode 100644
index 00000000..38835a90
--- /dev/null
+++ b/inc/3rdparty/site_config/standard/lapin-blanc.blogs.docteo.net.txt
@@ -0,0 +1,6 @@
1# Generated by FiveFilters.org's web-based selection tool
2# Place this file inside your site_config/custom/ folder
3# Source: http://siteconfig.fivefilters.org/grab.php?url=http%3A%2F%2Flapin-blanc.blogs.docteo.net%2F2015%2F01%2F20%2Flencadrement-doctoral-deviendrait-il-un-sujet-dactualite%2F
4
5body: //div[contains(concat(' ',normalize-space(@class),' '),' entry-content ')]
6test_url: http://lapin-blanc.blogs.docteo.net/2015/01/20/lencadrement-doctoral-deviendrait-il-un-sujet-dactualite/
diff --git a/inc/3rdparty/site_config/standard/lececil.org.txt b/inc/3rdparty/site_config/standard/lececil.org.txt
new file mode 100644
index 00000000..8a38bbf3
--- /dev/null
+++ b/inc/3rdparty/site_config/standard/lececil.org.txt
@@ -0,0 +1,6 @@
1# Generated by FiveFilters.org's web-based selection tool
2# Place this file inside your site_config/custom/ folder
3# Source: http://siteconfig.fivefilters.org/grab.php?url=http%3A%2F%2Fwww.lececil.org%2Fnode%2F7688
4
5body: //div[contains(concat(' ',normalize-space(@class),' '),' field-body ')]
6test_url: http://www.lececil.org/node/7688
diff --git a/inc/3rdparty/site_config/standard/metrocop.net.txt b/inc/3rdparty/site_config/standard/metrocop.net.txt
new file mode 100644
index 00000000..9535f125
--- /dev/null
+++ b/inc/3rdparty/site_config/standard/metrocop.net.txt
@@ -0,0 +1,6 @@
1# Generated by FiveFilters.org's web-based selection tool
2# Place this file inside your site_config/custom/ folder
3# Source: http://siteconfig.fivefilters.org/grab.php?url=http%3A%2F%2Fmetrocop.net%2Fmythic-comics%2Fissue-1%2F
4
5body: //div[contains(concat(' ',normalize-space(@class),' '),' entry ')]
6test_url: http://metrocop.net/mythic-comics/issue-1/
diff --git a/inc/3rdparty/site_config/standard/pérotin.com.txt b/inc/3rdparty/site_config/standard/pérotin.com.txt
new file mode 100644
index 00000000..7784fa4c
--- /dev/null
+++ b/inc/3rdparty/site_config/standard/pérotin.com.txt
@@ -0,0 +1,6 @@
1# Generated by FiveFilters.org's web-based selection tool
2# Place this file inside your site_config/custom/ folder
3# Source: http://siteconfig.fivefilters.org/grab.php?url=xn--protin-bva.com%2Fpost%2F2009%2F06%2F09%2FSAV-Free-un-sketch-kafkaien
4
5body: //div[contains(concat(' ',normalize-space(@class),' '),' post ')]
6test_url: http://xn--protin-bva.com/post/2009/06/09/SAV-Free-un-sketch-kafkaien
diff --git a/inc/3rdparty/site_config/standard/reddit.com.txt b/inc/3rdparty/site_config/standard/reddit.com.txt
index ba342c7c..c3f2d3e5 100755
--- a/inc/3rdparty/site_config/standard/reddit.com.txt
+++ b/inc/3rdparty/site_config/standard/reddit.com.txt
@@ -7,7 +7,9 @@ author: //p[@class="tagline"]/a
7# this doesn't work for some reason...? 7# this doesn't work for some reason...?
8date: //p[@class="tagline"]//@datetime 8date: //p[@class="tagline"]//@datetime
9 9
10body: (//div[contains(@class, 'noncollapsed')]//div[contains(@class, 'usertext-body')])[1] 10#body: (//div[contains(@class, 'noncollapsed')]//div[contains(@class, 'usertext-body')])[1]
11
12body: //div[contains(concat(' ',normalize-space(@class),' '),' usertext-body ') and (contains(concat(' ',normalize-space(@class),' '),' may-blank-within ')) and (contains(concat(' ',normalize-space(@class),' '),' md-container '))]//div[contains(concat(' ',normalize-space(@class),' '),' md ')]
11 13
12strip_id_or_class: tagline 14strip_id_or_class: tagline
13strip_id_or_class: unvotable-message 15strip_id_or_class: unvotable-message
@@ -18,4 +20,4 @@ single_page_link: //p[@class="title"]/a[contains(@href, 'http://')]
18 20
19test_url: http://www.reddit.com/r/truegaming/comments/wfe7r/i_wrote_about_the_problems_i_honestly_feel_that/ 21test_url: http://www.reddit.com/r/truegaming/comments/wfe7r/i_wrote_about_the_problems_i_honestly_feel_that/
20test_url: http://www.reddit.com/r/worldnews/comments/1as37r/twelve_north_korean_soldiers_attempting_to_defect/ 22test_url: http://www.reddit.com/r/worldnews/comments/1as37r/twelve_north_korean_soldiers_attempting_to_defect/
21test_url: http://www.reddit.com/r/WritingPrompts/comments/2786lw/wp_in_a_world_where_puns_are_illegal_one_man/chybk8e \ No newline at end of file 23test_url: http://www.reddit.com/r/WritingPrompts/comments/2786lw/wp_in_a_world_where_puns_are_illegal_one_man/chybk8e
diff --git a/inc/3rdparty/site_config/standard/spiil.org.txt b/inc/3rdparty/site_config/standard/spiil.org.txt
new file mode 100644
index 00000000..dd12fb88
--- /dev/null
+++ b/inc/3rdparty/site_config/standard/spiil.org.txt
@@ -0,0 +1,6 @@
1# Generated by FiveFilters.org's web-based selection tool
2# Place this file inside your site_config/custom/ folder
3# Source: http://siteconfig.fivefilters.org/grab.php?url=https%3A%2F%2Fwww.spiil.org%2Fguide-bonnes-pratiques-editeurs-de-presse-ligne
4
5body: //div[contains(concat(' ',normalize-space(@class),' '),' node-content ')]
6test_url: https://www.spiil.org/guide-bonnes-pratiques-editeurs-de-presse-ligne
diff --git a/inc/3rdparty/site_config/standard/yosko.net.txt b/inc/3rdparty/site_config/standard/yosko.net.txt
new file mode 100644
index 00000000..99e711e3
--- /dev/null
+++ b/inc/3rdparty/site_config/standard/yosko.net.txt
@@ -0,0 +1,6 @@
1# Generated by FiveFilters.org's web-based selection tool
2# Place this file inside your site_config/custom/ folder
3# Source: http://siteconfig.fivefilters.org/grab.php?url=http%3A%2F%2Fwww.yosko.net%2Farticle33%2Fsnippet-06-javascript-capturer-des-raccourcis-clavier-utilises-par-votre-navigateur
4
5body: //article//section
6test_url: http://www.yosko.net/article33/snippet-06-javascript-capturer-des-raccourcis-clavier-utilises-par-votre-navigateur
diff --git a/inc/poche/Database.class.php b/inc/poche/Database.class.php
index 7be7a394..7ec1602d 100755
--- a/inc/poche/Database.class.php
+++ b/inc/poche/Database.class.php
@@ -156,11 +156,14 @@ class Database {
156 { 156 {
157 $sql = "SELECT * FROM users_config WHERE user_id = ?"; 157 $sql = "SELECT * FROM users_config WHERE user_id = ?";
158 $query = $this->executeQuery($sql, array($id)); 158 $query = $this->executeQuery($sql, array($id));
159 $result = $query->fetchAll(); 159 $result = ($query) ? $query->fetchAll() : false;
160 $user_config = array(); 160 $user_config = false;
161 if ($query) {
162 $user_config = array();
161 163
162 foreach ($result as $key => $value) { 164 foreach ($result as $key => $value) {
163 $user_config[$value['name']] = $value['value']; 165 $user_config[$value['name']] = $value['value'];
166 }
164 } 167 }
165 168
166 return $user_config; 169 return $user_config;
@@ -171,11 +174,7 @@ class Database {
171 $sql = "SELECT * FROM users WHERE username=?"; 174 $sql = "SELECT * FROM users WHERE username=?";
172 $query = $this->executeQuery($sql, array($username)); 175 $query = $this->executeQuery($sql, array($username));
173 $login = $query->fetchAll(); 176 $login = $query->fetchAll();
174 if (isset($login[0])) { 177 return (isset($login[0]) && $query) ? true : false;
175 return true;
176 } else {
177 return false;
178 }
179 } 178 }
180 179
181 public function login($username, $password, $isauthenticated = FALSE) 180 public function login($username, $password, $isauthenticated = FALSE)
@@ -187,10 +186,10 @@ class Database {
187 $sql = "SELECT * FROM users WHERE username=? AND password=?"; 186 $sql = "SELECT * FROM users WHERE username=? AND password=?";
188 $query = $this->executeQuery($sql, array($username, $password)); 187 $query = $this->executeQuery($sql, array($username, $password));
189 } 188 }
190 $login = $query->fetchAll(); 189 $login = ($query) ? $query->fetchAll() : false;
191 190
192 $user = array(); 191 $user = array();
193 if (isset($login[0])) { 192 if ($login[0]) {
194 $user['id'] = $login[0]['id']; 193 $user['id'] = $login[0]['id'];
195 $user['username'] = $login[0]['username']; 194 $user['username'] = $login[0]['username'];
196 $user['password'] = $login[0]['password']; 195 $user['password'] = $login[0]['password'];
@@ -243,7 +242,7 @@ class Database {
243 { 242 {
244 $sql = 'SELECT count(*) FROM users'.( $username ? ' WHERE username=?' : ''); 243 $sql = 'SELECT count(*) FROM users'.( $username ? ' WHERE username=?' : '');
245 $query = $this->executeQuery($sql, ( $username ? array($username) : array())); 244 $query = $this->executeQuery($sql, ( $username ? array($username) : array()));
246 list($count) = $query->fetch(); 245 list($count) = ($query) ? $query->fetch() : false;
247 return $count; 246 return $count;
248 } 247 }
249 248
@@ -252,7 +251,7 @@ class Database {
252 $sql = "SELECT * FROM users WHERE id=?"; 251 $sql = "SELECT * FROM users WHERE id=?";
253 $query = $this->executeQuery($sql, array($userID)); 252 $query = $this->executeQuery($sql, array($userID));
254 $password = $query->fetchAll(); 253 $password = $query->fetchAll();
255 return isset($password[0]['password']) ? $password[0]['password'] : null; 254 return ($query) ? $password[0]['password'] : false;
256 } 255 }
257 256
258 public function deleteUserConfig($userID) 257 public function deleteUserConfig($userID)
@@ -260,18 +259,22 @@ class Database {
260 $sql_action = 'DELETE from users_config WHERE user_id=?'; 259 $sql_action = 'DELETE from users_config WHERE user_id=?';
261 $params_action = array($userID); 260 $params_action = array($userID);
262 $query = $this->executeQuery($sql_action, $params_action); 261 $query = $this->executeQuery($sql_action, $params_action);
263 return $query; 262 return ($query) ? $query : false;
264 } 263 }
265 264
266 public function deleteTagsEntriesAndEntries($userID) 265 public function deleteTagsEntriesAndEntries($userID)
267 { 266 {
268 $entries = $this->retrieveAll($userID); 267 $entries = $this->retrieveAll($userID);
269 foreach($entries as $entryid) { 268 if ($entries) {
270 $tags = $this->retrieveTagsByEntry($entryid); 269 foreach($entries as $entry) {
271 foreach($tags as $tag) { 270 $tags = $this->retrieveTagsByEntry($entry['id']);
272 $this->removeTagForEntry($entryid,$tags); 271 foreach($tags as $tag) {
272 $this->removeTagForEntry($entry['id'], $tags);
273 }
274 $this->deleteById($entryid,$userID);
273 } 275 }
274 $this->deleteById($entryid,$userID); 276 } else {
277 return false;
275 } 278 }
276 } 279 }
277 280
@@ -302,7 +305,7 @@ class Database {
302 $query = $this->executeQuery($sql, array($user_id)); 305 $query = $this->executeQuery($sql, array($user_id));
303 $entries = $query->fetchAll(); 306 $entries = $query->fetchAll();
304 307
305 return $entries; 308 return ($query) ? $entries : false;
306 } 309 }
307 310
308 public function retrieveUnfetchedEntriesCount($user_id) 311 public function retrieveUnfetchedEntriesCount($user_id)
@@ -320,44 +323,44 @@ class Database {
320 $query = $this->executeQuery($sql, array($user_id)); 323 $query = $this->executeQuery($sql, array($user_id));
321 $entries = $query->fetchAll(); 324 $entries = $query->fetchAll();
322 325
323 return $entries; 326 return ($query) ? $entries : false;
324 } 327 }
325 328
326 public function retrieveAllWithTags($user_id) 329 public function retrieveAllWithTags($user_id)
327 { 330 {
328 $entries = $this->retrieveAll($user_id); 331 $entries = $this->retrieveAll($user_id);
329 $count = count($entries); 332 if ($entries) {
330 for ($i = 0; $i < $count; $i++) { 333 $count = count($entries);
331 $tag_entries = $this->retrieveTagsByEntry($entries[$i]['id']); 334 for ($i = 0; $i < $count; $i++) {
332 $tags = []; 335 $tag_entries = $this->retrieveTagsByEntry($entries[$i]['id']);
333 foreach ($tag_entries as $tag) { 336 $tags = [];
334 $tags[] = $tag[1]; 337 foreach ($tag_entries as $tag) {
335 } 338 $tags[] = $tag[1];
336 $entries[$i]['tags'] = implode(',', $tags); 339 }
340 $entries[$i]['tags'] = implode(',', $tags);
341 }
337 } 342 }
338 return $entries; 343 return $entries;
339 } 344 }
340 345
341 public function retrieveOneById($id, $user_id) 346 public function retrieveOneById($id, $user_id)
342 { 347 {
343 $entry = NULL;
344 $sql = "SELECT * FROM entries WHERE id=? AND user_id=?"; 348 $sql = "SELECT * FROM entries WHERE id=? AND user_id=?";
345 $params = array(intval($id), $user_id); 349 $params = array(intval($id), $user_id);
346 $query = $this->executeQuery($sql, $params); 350 $query = $this->executeQuery($sql, $params);
347 $entry = $query->fetchAll(); 351 $entry = $query->fetchAll();
348 352
349 return isset($entry[0]) ? $entry[0] : null; 353 return ($query) ? $entry[0] : false;
350 } 354 }
351 355
352 public function retrieveOneByURL($url, $user_id) 356 public function retrieveOneByURL($url, $user_id)
353 { 357 {
354 $entry = NULL;
355 $sql = "SELECT * FROM entries WHERE url=? AND user_id=?"; 358 $sql = "SELECT * FROM entries WHERE url=? AND user_id=?";
356 $params = array($url, $user_id); 359 $params = array($url, $user_id);
357 $query = $this->executeQuery($sql, $params); 360 $query = $this->executeQuery($sql, $params);
358 $entry = $query->fetchAll(); 361 $entry = $query->fetchAll();
359 362
360 return isset($entry[0]) ? $entry[0] : null; 363 return ($query) ? $entry[0] : false;
361 } 364 }
362 365
363 public function reassignTags($old_entry_id, $new_entry_id) 366 public function reassignTags($old_entry_id, $new_entry_id)
@@ -395,7 +398,8 @@ class Database {
395 $query = $this->executeQuery($sql, $params); 398 $query = $this->executeQuery($sql, $params);
396 $entries = $query->fetchAll(); 399 $entries = $query->fetchAll();
397 400
398 return $entries; 401 return ($query) ? $entries : false;
402
399 } 403 }
400 404
401 public function getEntriesByViewCount($view, $user_id, $tag_id = 0) 405 public function getEntriesByViewCount($view, $user_id, $tag_id = 0)
@@ -422,7 +426,7 @@ class Database {
422 } 426 }
423 427
424 $query = $this->executeQuery($sql, $params); 428 $query = $this->executeQuery($sql, $params);
425 list($count) = $query->fetch(); 429 list($count) = ($query) ? $query->fetch() : array(false);
426 430
427 return $count; 431 return $count;
428 } 432 }
@@ -445,26 +449,34 @@ class Database {
445 $query = $this->executeQuery($sql, $params); 449 $query = $this->executeQuery($sql, $params);
446 $id = $query->fetchAll(); 450 $id = $query->fetchAll();
447 451
448 return $id; 452 return ($query) ? $id : false;
449 } 453 }
450 454
451 public function getPreviousArticle($id, $user_id) 455 public function getPreviousArticle($id, $user_id)
452 { 456 {
453 $sql = "SELECT id FROM entries WHERE id = (SELECT max(id) FROM entries WHERE id < ? AND is_read=0) AND user_id=? AND is_read=0"; 457 $sqlcondition = "is_read=0";
458 if (STORAGE == 'postgres') {
459 $sqlcondition = "is_read=false";
460 }
461 $sql = "SELECT id FROM entries WHERE id = (SELECT max(id) FROM entries WHERE id < ? AND " . $sqlcondition . ") AND user_id=? AND " . $sqlcondition;
454 $params = array($id, $user_id); 462 $params = array($id, $user_id);
455 $query = $this->executeQuery($sql, $params); 463 $query = $this->executeQuery($sql, $params);
456 $id_entry = $query->fetchAll(); 464 $id_entry = ($query) ? $query->fetchAll() : false;
457 $id = $id_entry[0][0]; 465 $id = ($query) ? $id_entry[0][0] : false;
458 return $id; 466 return $id;
459 } 467 }
460 468
461 public function getNextArticle($id, $user_id) 469 public function getNextArticle($id, $user_id)
462 { 470 {
463 $sql = "SELECT id FROM entries WHERE id = (SELECT min(id) FROM entries WHERE id > ? AND is_read=0) AND user_id=? AND is_read=0"; 471 $sqlcondition = "is_read=0";
472 if (STORAGE == 'postgres') {
473 $sqlcondition = "is_read=false";
474 }
475 $sql = "SELECT id FROM entries WHERE id = (SELECT min(id) FROM entries WHERE id > ? AND " . $sqlcondition . ") AND user_id=? AND " . $sqlcondition;
464 $params = array($id, $user_id); 476 $params = array($id, $user_id);
465 $query = $this->executeQuery($sql, $params); 477 $query = $this->executeQuery($sql, $params);
466 $id_entry = $query->fetchAll(); 478 $id_entry = ($query) ? $query->fetchAll() : false;
467 $id = $id_entry[0][0]; 479 $id = ($query) ? $id_entry[0][0] : false;
468 return $id; 480 return $id;
469 } 481 }
470 482
@@ -540,7 +552,7 @@ class Database {
540 $sql_action .= $this->getEntriesOrder().' ' . $limit; 552 $sql_action .= $this->getEntriesOrder().' ' . $limit;
541 $params_action = array($user_id, $search, $search, $search); 553 $params_action = array($user_id, $search, $search, $search);
542 $query = $this->executeQuery($sql_action, $params_action); 554 $query = $this->executeQuery($sql_action, $params_action);
543 return $query->fetchAll(); 555 return ($query) ? $query->fetchAll() : false;
544 } 556 }
545 557
546 public function retrieveAllTags($user_id, $term = NULL) 558 public function retrieveAllTags($user_id, $term = NULL)
@@ -553,23 +565,23 @@ class Database {
553 GROUP BY tags.id, tags.value 565 GROUP BY tags.id, tags.value
554 ORDER BY tags.value"; 566 ORDER BY tags.value";
555 $query = $this->executeQuery($sql, (($term)? array($user_id, strtolower('%'.$term.'%')) : array($user_id) )); 567 $query = $this->executeQuery($sql, (($term)? array($user_id, strtolower('%'.$term.'%')) : array($user_id) ));
556 $tags = $query->fetchAll(); 568 $tags = ($query) ? $query->fetchAll() : false;
557 569
558 return $tags; 570 return $tags;
559 } 571 }
560 572
561 public function retrieveTag($id, $user_id) 573 public function retrieveTag($id, $user_id)
562 { 574 {
563 $tag = NULL;
564 $sql = "SELECT DISTINCT tags.* FROM tags 575 $sql = "SELECT DISTINCT tags.* FROM tags
565 LEFT JOIN tags_entries ON tags_entries.tag_id=tags.id 576 LEFT JOIN tags_entries ON tags_entries.tag_id=tags.id
566 LEFT JOIN entries ON tags_entries.entry_id=entries.id 577 LEFT JOIN entries ON tags_entries.entry_id=entries.id
567 WHERE tags.id=? AND entries.user_id=?"; 578 WHERE tags.id=? AND entries.user_id=?";
568 $params = array(intval($id), $user_id); 579 $params = array(intval($id), $user_id);
569 $query = $this->executeQuery($sql, $params); 580 $query = $this->executeQuery($sql, $params);
570 $tag = $query->fetchAll(); 581 $tags = ($query) ? $query->fetchAll() : false;
582 $tag = ($query) ? $tags[0] : false;
571 583
572 return isset($tag[0]) ? $tag[0] : NULL; 584 return $tag[0];
573 } 585 }
574 586
575 public function retrieveEntriesByTag($tag_id, $user_id) 587 public function retrieveEntriesByTag($tag_id, $user_id)
@@ -579,7 +591,7 @@ class Database {
579 LEFT JOIN tags_entries ON tags_entries.entry_id=entries.id 591 LEFT JOIN tags_entries ON tags_entries.entry_id=entries.id
580 WHERE tags_entries.tag_id = ? AND entries.user_id=? ORDER by entries.id DESC"; 592 WHERE tags_entries.tag_id = ? AND entries.user_id=? ORDER by entries.id DESC";
581 $query = $this->executeQuery($sql, array($tag_id, $user_id)); 593 $query = $this->executeQuery($sql, array($tag_id, $user_id));
582 $entries = $query->fetchAll(); 594 $entries = ($query) ? $query->fetchAll() : false;
583 595
584 return $entries; 596 return $entries;
585 } 597 }
@@ -591,7 +603,7 @@ class Database {
591 LEFT JOIN tags_entries ON tags_entries.tag_id=tags.id 603 LEFT JOIN tags_entries ON tags_entries.tag_id=tags.id
592 WHERE tags_entries.entry_id = ?"; 604 WHERE tags_entries.entry_id = ?";
593 $query = $this->executeQuery($sql, array($entry_id)); 605 $query = $this->executeQuery($sql, array($entry_id));
594 $tags = $query->fetchAll(); 606 $tags = ($query) ? $query->fetchAll() : false;
595 607
596 return $tags; 608 return $tags;
597 } 609 }
@@ -601,38 +613,40 @@ class Database {
601 $sql_action = "DELETE FROM tags_entries WHERE tag_id=? AND entry_id=?"; 613 $sql_action = "DELETE FROM tags_entries WHERE tag_id=? AND entry_id=?";
602 $params_action = array($tag_id, $entry_id); 614 $params_action = array($tag_id, $entry_id);
603 $query = $this->executeQuery($sql_action, $params_action); 615 $query = $this->executeQuery($sql_action, $params_action);
604 return $query; 616 return ($query) ? $query : false;
605 } 617 }
606 618
607 public function cleanUnusedTag($tag_id) 619 public function cleanUnusedTag($tag_id)
608 { 620 {
609 $sql_action = "SELECT tags.* FROM tags JOIN tags_entries ON tags_entries.tag_id=tags.id WHERE tags.id=?"; 621 $sql_action = "SELECT tags.* FROM tags JOIN tags_entries ON tags_entries.tag_id=tags.id WHERE tags.id=?";
610 $query = $this->executeQuery($sql_action,array($tag_id)); 622 $query = $this->executeQuery($sql_action,array($tag_id));
611 $tagstokeep = $query->fetchAll(); 623 $tagstokeep = ($query) ? $query->fetchAll() : false;
612 $sql_action = "SELECT tags.* FROM tags LEFT JOIN tags_entries ON tags_entries.tag_id=tags.id WHERE tags.id=?"; 624 $sql_action = "SELECT tags.* FROM tags LEFT JOIN tags_entries ON tags_entries.tag_id=tags.id WHERE tags.id=?";
613 $query = $this->executeQuery($sql_action,array($tag_id)); 625 $query = $this->executeQuery($sql_action,array($tag_id));
614 $alltags = $query->fetchAll(); 626 $alltags = ($query) ? $query->fetchAll() : false;
615 627
616 foreach ($alltags as $tag) { 628 if ($tagstokeep && $alltags) {
617 if ($tag && !in_array($tag,$tagstokeep)) { 629 foreach ($alltags as $tag) {
618 $sql_action = "DELETE FROM tags WHERE id=?"; 630 if ($tag && !in_array($tag,$tagstokeep)) {
619 $params_action = array($tag[0]); 631 $sql_action = "DELETE FROM tags WHERE id=?";
620 $this->executeQuery($sql_action, $params_action); 632 $params_action = array($tag[0]);
621 return true; 633 $this->executeQuery($sql_action, $params_action);
634 return true;
635 }
622 } 636 }
637 } else {
638 return false;
623 } 639 }
624
625 } 640 }
626 641
627 public function retrieveTagByValue($value) 642 public function retrieveTagByValue($value)
628 { 643 {
629 $tag = NULL;
630 $sql = "SELECT * FROM tags WHERE value=?"; 644 $sql = "SELECT * FROM tags WHERE value=?";
631 $params = array($value); 645 $params = array($value);
632 $query = $this->executeQuery($sql, $params); 646 $query = $this->executeQuery($sql, $params);
633 $tag = $query->fetchAll(); 647 $tag = ($query) ? $query->fetchAll() : false;
634 648
635 return isset($tag[0]) ? $tag[0] : null; 649 return ($query) ? $tag[0] : false;
636 } 650 }
637 651
638 public function createTag($value) 652 public function createTag($value)
@@ -640,7 +654,7 @@ class Database {
640 $sql_action = 'INSERT INTO tags ( value ) VALUES (?)'; 654 $sql_action = 'INSERT INTO tags ( value ) VALUES (?)';
641 $params_action = array($value); 655 $params_action = array($value);
642 $query = $this->executeQuery($sql_action, $params_action); 656 $query = $this->executeQuery($sql_action, $params_action);
643 return $query; 657 return ($query) ? $query : false;
644 } 658 }
645 659
646 public function setTagToEntry($tag_id, $entry_id) 660 public function setTagToEntry($tag_id, $entry_id)
@@ -648,7 +662,7 @@ class Database {
648 $sql_action = 'INSERT INTO tags_entries ( tag_id, entry_id ) VALUES (?, ?)'; 662 $sql_action = 'INSERT INTO tags_entries ( tag_id, entry_id ) VALUES (?, ?)';
649 $params_action = array($tag_id, $entry_id); 663 $params_action = array($tag_id, $entry_id);
650 $query = $this->executeQuery($sql_action, $params_action); 664 $query = $this->executeQuery($sql_action, $params_action);
651 return $query; 665 return ($query) ? $query : false;
652 } 666 }
653 667
654 private function getEntriesOrder() 668 private function getEntriesOrder()
diff --git a/inc/poche/Poche.class.php b/inc/poche/Poche.class.php
index baa08788..ea196ce2 100755
--- a/inc/poche/Poche.class.php
+++ b/inc/poche/Poche.class.php
@@ -266,6 +266,15 @@ class Poche
266 } 266 }
267 foreach($entry_ids as $id) { 267 foreach($entry_ids as $id) {
268 $msg = 'delete link #' . $id; 268 $msg = 'delete link #' . $id;
269
270 // deleting tags and tags_entries
271 $tags = $this->store->retrieveTagsByEntry($id);
272 foreach ($tags as $tag) {
273 $this->store->removeTagForEntry($id, $tag['id']);
274 $this->store->cleanUnusedTag($tag['id']);
275 }
276
277 // deleting pictures
269 if ($this->store->deleteById($id, $this->user->getId())) { 278 if ($this->store->deleteById($id, $this->user->getId())) {
270 if (DOWNLOAD_PICTURES) { 279 if (DOWNLOAD_PICTURES) {
271 Picture::removeDirectory(ABS_PATH . $id); 280 Picture::removeDirectory(ABS_PATH . $id);
@@ -278,7 +287,7 @@ class Poche
278 } 287 }
279 Tools::logm($msg); 288 Tools::logm($msg);
280 } 289 }
281 Tools::redirect(); 290 Tools::redirect('?');
282 break; 291 break;
283 case 'toggle_fav' : 292 case 'toggle_fav' :
284 $this->store->favoriteById($id, $this->user->getId()); 293 $this->store->favoriteById($id, $this->user->getId());
@@ -441,6 +450,7 @@ class Poche
441 $token = $this->user->getConfigValue('token'); 450 $token = $this->user->getConfigValue('token');
442 $http_auth = (isset($_SERVER['PHP_AUTH_USER']) || isset($_SERVER['REMOTE_USER'])) ? true : false; 451 $http_auth = (isset($_SERVER['PHP_AUTH_USER']) || isset($_SERVER['REMOTE_USER'])) ? true : false;
443 $only_user = ($this->store->listUsers() > 1) ? false : true; 452 $only_user = ($this->store->listUsers() > 1) ? false : true;
453 $https = substr(Tools::getPocheUrl(), 0, 5) == 'https';
444 $tpl_vars = array( 454 $tpl_vars = array(
445 'themes' => $themes, 455 'themes' => $themes,
446 'languages' => $languages, 456 'languages' => $languages,
@@ -453,7 +463,8 @@ class Poche
453 'token' => $token, 463 'token' => $token,
454 'user_id' => $this->user->getId(), 464 'user_id' => $this->user->getId(),
455 'http_auth' => $http_auth, 465 'http_auth' => $http_auth,
456 'only_user' => $only_user 466 'only_user' => $only_user,
467 'https' => $https
457 ); 468 );
458 Tools::logm('config view'); 469 Tools::logm('config view');
459 break; 470 break;
@@ -590,7 +601,7 @@ class Poche
590 601
591 $count = $this->store->getEntriesByViewCount($view, $this->user->getId(), $id); 602 $count = $this->store->getEntriesByViewCount($view, $this->user->getId(), $id);
592 603
593 if ($count > 0) { 604 if ($count && $count > 0) {
594 $this->pagination->set_total($count); 605 $this->pagination->set_total($count);
595 $page_links = str_replace(array('previous', 'next'), array(_('previous'), _('next')), 606 $page_links = str_replace(array('previous', 'next'), array(_('previous'), _('next')),
596 $this->pagination->page_links('?view=' . $view . '&sort=' . $_SESSION['sort'] . (($id)?'&id='.$id:'') . '&' )); 607 $this->pagination->page_links('?view=' . $view . '&sort=' . $_SESSION['sort'] . (($id)?'&id='.$id:'') . '&' ));
@@ -894,14 +905,18 @@ class Poche
894 */ 905 */
895 public function export() 906 public function export()
896 { 907 {
897 $filename = "wallabag-export-".$this->user->getId()."-".date("Y-m-d").".json"; 908 $filename = "wallabag-export-".$this->user->getId()."-".date("Y-m-d").".json";
898 header('Content-Disposition: attachment; filename='.$filename); 909 header('Content-Disposition: attachment; filename='.$filename);
899 910
900 $entries = $this->store->retrieveAllWithTags($this->user->getId()); 911 $entries = $this->store->retrieveAllWithTags($this->user->getId());
901 echo $this->tpl->render('export.twig', array( 912 if ($entries) {
902 'export' => Tools::renderJson($entries), 913 echo $this->tpl->render('export.twig', array(
903 )); 914 'export' => Tools::renderJson($entries),
904 Tools::logm('export view'); 915 ));
916 Tools::logm('export view');
917 } else {
918 Tools::logm('error accessing database while exporting');
919 }
905 } 920 }
906 921
907 /** 922 /**
@@ -977,7 +992,7 @@ class Poche
977 if (0 == $limit) { 992 if (0 == $limit) {
978 $limit = count($entries); 993 $limit = count($entries);
979 } 994 }
980 if (count($entries) > 0) { 995 if ($entries && count($entries) > 0) {
981 for ($i = 0; $i < min(count($entries), $limit); $i++) { 996 for ($i = 0; $i < min(count($entries), $limit); $i++) {
982 $entry = $entries[$i]; 997 $entry = $entries[$i];
983 $newItem = $feed->createNewItem(); 998 $newItem = $feed->createNewItem();
@@ -989,7 +1004,10 @@ class Poche
989 $feed->addItem($newItem); 1004 $feed->addItem($newItem);
990 } 1005 }
991 } 1006 }
992 1007 else
1008 {
1009 Tools::logm("database error while generating feeds");
1010 }
993 $feed->genarateFeed(); 1011 $feed->genarateFeed();
994 exit; 1012 exit;
995 } 1013 }
diff --git a/install/index.php b/install/index.php
index bb351095..f5bce50d 100755
--- a/install/index.php
+++ b/install/index.php
@@ -94,10 +94,14 @@ else if (isset($_POST['install'])) {
94 $errors[] = 'Impossible to create the SQLite database file. Please check your file permissions.'; 94 $errors[] = 'Impossible to create the SQLite database file. Please check your file permissions.';
95 } 95 }
96 else { 96 else {
97 $db_path = 'sqlite:' . realpath('') . '/db/poche.sqlite'; 97 try {
98 $handle = new PDO($db_path); 98 $db_path = 'sqlite:' . realpath('') . '/db/poche.sqlite';
99 $handle->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 99 $handle = new PDO($db_path);
100 $sql_structure = ""; 100 $handle->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
101 $sql_structure = "";
102 } catch (PDOException $e) {
103 $errors[] = "SQLite has encountered an issue : " . $e->getMessage();
104 }
101 } 105 }
102 } else { 106 } else {
103 // MySQL and Postgre 107 // MySQL and Postgre
@@ -254,7 +258,6 @@ else if (isset($_POST['install'])) {
254 <link rel="apple-touch-icon-precomposed" sizes="144x144" href="themes/baggy/img/apple-touch-icon-144x144-precomposed.png"> 258 <link rel="apple-touch-icon-precomposed" sizes="144x144" href="themes/baggy/img/apple-touch-icon-144x144-precomposed.png">
255 <link rel="apple-touch-icon-precomposed" sizes="72x72" href="themes/baggy/img/apple-touch-icon-72x72-precomposed.png"> 259 <link rel="apple-touch-icon-precomposed" sizes="72x72" href="themes/baggy/img/apple-touch-icon-72x72-precomposed.png">
256 <link rel="apple-touch-icon-precomposed" href="themes/baggy/img/apple-touch-icon-precomposed.png"> 260 <link rel="apple-touch-icon-precomposed" href="themes/baggy/img/apple-touch-icon-precomposed.png">
257 <link href='//fonts.googleapis.com/css?family=PT+Sans:700' rel='stylesheet' type='text/css'>
258 <link rel="stylesheet" href="themes/baggy/css/ratatouille.css" media="all"> 261 <link rel="stylesheet" href="themes/baggy/css/ratatouille.css" media="all">
259 <link rel="stylesheet" href="themes/baggy/css/font.css" media="all"> 262 <link rel="stylesheet" href="themes/baggy/css/font.css" media="all">
260 <link rel="stylesheet" href="themes/baggy/css/main.css" media="all"> 263 <link rel="stylesheet" href="themes/baggy/css/main.css" media="all">
diff --git a/locale/en_US.utf8/LC_MESSAGES/en_US.utf8.mo b/locale/en_US.utf8/LC_MESSAGES/en_US.utf8.mo
index 2fcb356a..99e1ad59 100644
--- a/locale/en_US.utf8/LC_MESSAGES/en_US.utf8.mo
+++ b/locale/en_US.utf8/LC_MESSAGES/en_US.utf8.mo
Binary files differ
diff --git a/locale/en_US.utf8/LC_MESSAGES/en_US.utf8.po b/locale/en_US.utf8/LC_MESSAGES/en_US.utf8.po
index 2fe4b352..6fca6d79 100644
--- a/locale/en_US.utf8/LC_MESSAGES/en_US.utf8.po
+++ b/locale/en_US.utf8/LC_MESSAGES/en_US.utf8.po
@@ -9,7 +9,7 @@ msgstr ""
9"MIME-Version: 1.0\n" 9"MIME-Version: 1.0\n"
10"Content-Type: text/plain; charset=iso-8859-1\n" 10"Content-Type: text/plain; charset=iso-8859-1\n"
11"Content-Transfer-Encoding: 8bit\n" 11"Content-Transfer-Encoding: 8bit\n"
12"X-Generator: Poedit 1.7.5\n" 12"X-Generator: Poedit 1.5.4\n"
13 13
14msgid "wallabag, a read it later open source system" 14msgid "wallabag, a read it later open source system"
15msgstr "wallabag, a read it later open source system" 15msgstr "wallabag, a read it later open source system"
@@ -112,6 +112,9 @@ msgstr "Standard Firefox Add-On"
112msgid "Mozilla Services (Social API) Extension" 112msgid "Mozilla Services (Social API) Extension"
113msgstr "Mozilla Services (Social API) Extension" 113msgstr "Mozilla Services (Social API) Extension"
114 114
115msgid "Mozilla Services (Social API) Extension needs an https connection"
116msgstr "Mozilla Services (Social API) Extension needs an https connection"
117
115msgid "Chrome Extension" 118msgid "Chrome Extension"
116msgstr "Chrome Extension" 119msgstr "Chrome Extension"
117 120
diff --git a/locale/fr_FR.utf8/LC_MESSAGES/fr_FR.utf8.mo b/locale/fr_FR.utf8/LC_MESSAGES/fr_FR.utf8.mo
index f46ef600..626b0258 100644
--- a/locale/fr_FR.utf8/LC_MESSAGES/fr_FR.utf8.mo
+++ b/locale/fr_FR.utf8/LC_MESSAGES/fr_FR.utf8.mo
Binary files differ
diff --git a/locale/fr_FR.utf8/LC_MESSAGES/fr_FR.utf8.po b/locale/fr_FR.utf8/LC_MESSAGES/fr_FR.utf8.po
index e8ba1547..a5e7bcd1 100644
--- a/locale/fr_FR.utf8/LC_MESSAGES/fr_FR.utf8.po
+++ b/locale/fr_FR.utf8/LC_MESSAGES/fr_FR.utf8.po
@@ -12,7 +12,7 @@ msgstr ""
12"Content-Transfer-Encoding: 8bit\n" 12"Content-Transfer-Encoding: 8bit\n"
13"X-Poedit-KeywordsList: _;gettext;gettext_noop\n" 13"X-Poedit-KeywordsList: _;gettext;gettext_noop\n"
14"X-Poedit-SourceCharset: UTF-8\n" 14"X-Poedit-SourceCharset: UTF-8\n"
15"X-Generator: Poedit 1.7.5\n" 15"X-Generator: Poedit 1.5.4\n"
16"Plural-Forms: nplurals=2; plural=(n != 1);\n" 16"Plural-Forms: nplurals=2; plural=(n != 1);\n"
17 17
18msgid "wallabag, a read it later open source system" 18msgid "wallabag, a read it later open source system"
@@ -46,7 +46,8 @@ msgid "Login to wallabag"
46msgstr "Se connecter à wallabag" 46msgstr "Se connecter à wallabag"
47 47
48msgid "you are in demo mode, some features may be disabled." 48msgid "you are in demo mode, some features may be disabled."
49msgstr "vous êtes en mode démo, certaines fonctionnalités peuvent être désactivées." 49msgstr ""
50"vous êtes en mode démo, certaines fonctionnalités peuvent être désactivées."
50 51
51msgid "Username" 52msgid "Username"
52msgstr "Nom d'utilisateur" 53msgstr "Nom d'utilisateur"
@@ -82,7 +83,9 @@ msgid "Tag"
82msgstr "Tag" 83msgstr "Tag"
83 84
84msgid "No tags found. You must view an article to set tags for it." 85msgid "No tags found. You must view an article to set tags for it."
85msgstr "Pas de tags trouvés. Vous devez vous rendre sur un article pour choisir de lui associer des tags." 86msgstr ""
87"Pas de tags trouvés. Vous devez vous rendre sur un article pour choisir de "
88"lui associer des tags."
86 89
87msgid "No articles found." 90msgid "No articles found."
88msgstr "Aucun article trouvé." 91msgstr "Aucun article trouvé."
@@ -127,11 +130,12 @@ msgid "About wallabag"
127msgstr "À propos de wallabag" 130msgstr "À propos de wallabag"
128 131
129msgid "" 132msgid ""
130"wallabag is a read-it-later application: you can save a web page by keeping only content. Elements like " 133"wallabag is a read-it-later application: you can save a web page by keeping "
131"ads or menus are deleted." 134"only content. Elements like ads or menus are deleted."
132msgstr "" 135msgstr ""
133"wallabag est une application de lecture différée : vous pouvez sauver une page web et garder uniquement " 136"wallabag est une application de lecture différée : vous pouvez sauver une "
134"son contenu. Les élements comme les publicités ou les menus sont supprimés." 137"page web et garder uniquement son contenu. Les élements comme les publicités "
138"ou les menus sont supprimés."
135 139
136msgid "Project website" 140msgid "Project website"
137msgstr "Site web du projet" 141msgstr "Site web du projet"
@@ -167,11 +171,11 @@ msgid "Documentation"
167msgstr "Documentation" 171msgstr "Documentation"
168 172
169msgid "" 173msgid ""
170"<a href=\"docs/\">Offline documentation</a> and <a href=\"https://doc.wallabag.org/\">online " 174"<a href=\"docs/\">Offline documentation</a> and <a href=\"https://doc."
171"documentation</a> (up to date)" 175"wallabag.org/\">online documentation</a> (up to date)"
172msgstr "" 176msgstr ""
173"<a href=\"docs/\">Documentation hors-ligne</a> et <a href=\"https://doc.wallabag.org/\">documentation " 177"<a href=\"docs/\">Documentation hors-ligne</a> et <a href=\"https://doc."
174"en ligne</a> (à jour)" 178"wallabag.org/\">documentation en ligne</a> (à jour)"
175 179
176msgid "Helping wallabag" 180msgid "Helping wallabag"
177msgstr "Aider wallabag" 181msgstr "Aider wallabag"
@@ -206,6 +210,10 @@ msgstr "Add-On Firefox classique"
206msgid "Mozilla Services (Social API) Extension" 210msgid "Mozilla Services (Social API) Extension"
207msgstr "Extension Mozilla Services (Social API)" 211msgstr "Extension Mozilla Services (Social API)"
208 212
213msgid "Mozilla Services (Social API) Extension needs an https connection"
214msgstr ""
215"L'extension Mozilla Services (Social API) nécessite une connection https"
216
209msgid "Chrome Extension" 217msgid "Chrome Extension"
210msgstr "Extension Chrome" 218msgstr "Extension Chrome"
211 219
@@ -261,17 +269,19 @@ msgid "A more recent development version is available."
261msgstr "Une version de développement plus récente est disponible." 269msgstr "Une version de développement plus récente est disponible."
262 270
263msgid "You can clear cache to check the latest release." 271msgid "You can clear cache to check the latest release."
264msgstr "Vous pouvez vider le cache pour vérifier que vous avez la dernière version." 272msgstr ""
273"Vous pouvez vider le cache pour vérifier que vous avez la dernière version."
265 274
266msgid "Feeds" 275msgid "Feeds"
267msgstr "Flux" 276msgstr "Flux"
268 277
269msgid "" 278msgid ""
270"Your feed token is currently empty and must first be generated to enable feeds. Click <a href='?" 279"Your feed token is currently empty and must first be generated to enable "
271"feed&amp;action=generate'>here to generate it</a>." 280"feeds. Click <a href='?feed&amp;action=generate'>here to generate it</a>."
272msgstr "" 281msgstr ""
273"Votre jeton de flux est actuellement vide et doit d'abord être généré pour activer les flux. Cliquez <a " 282"Votre jeton de flux est actuellement vide et doit d'abord être généré pour "
274"href='?feed&amp;action=generate'>ici</a> pour le générer." 283"activer les flux. Cliquez <a href='?feed&amp;action=generate'>ici</a> pour "
284"le générer."
275 285
276msgid "Unread feed" 286msgid "Unread feed"
277msgstr "Flux des non lus" 287msgstr "Flux des non lus"
@@ -288,8 +298,12 @@ msgstr "Votre jeton :"
288msgid "Your user id:" 298msgid "Your user id:"
289msgstr "Votre ID utilisateur :" 299msgstr "Votre ID utilisateur :"
290 300
291msgid "You can regenerate your token: <a href='?feed&amp;action=generate'>generate!</a>." 301msgid ""
292msgstr "Vous pouvez regénérer votre jeton : <a href='?feed&amp;action=generate'>génération !</a>." 302"You can regenerate your token: <a href='?feed&amp;action=generate'>generate!"
303"</a>."
304msgstr ""
305"Vous pouvez regénérer votre jeton : <a href='?feed&amp;"
306"action=generate'>génération !</a>."
293 307
294msgid "Change your theme" 308msgid "Change your theme"
295msgstr "Changer votre thème" 309msgstr "Changer votre thème"
@@ -319,33 +333,38 @@ msgid "Import"
319msgstr "Importer" 333msgstr "Importer"
320 334
321msgid "" 335msgid ""
322"You can import your Pocket, Readability, Instapaper, Wallabag or any data in appropriate json or html " 336"You can import your Pocket, Readability, Instapaper, Wallabag or any data in "
323"format." 337"appropriate json or html format."
324msgstr "" 338msgstr ""
325"Vous pouvez importer depuis Pocket, Readability, Instapaper, wallabag, ou n'importe quel fichier au " 339"Vous pouvez importer depuis Pocket, Readability, Instapaper, wallabag, ou "
326"format JSON ou HTML approprié." 340"n'importe quel fichier au format JSON ou HTML approprié."
327 341
328msgid "" 342msgid ""
329"Please select export file on your computer and press \"Import\" button below. Wallabag will parse your " 343"Please select export file on your computer and press \"Import\" button "
330"file, insert all URLs and start fetching of articles if required." 344"below. Wallabag will parse your file, insert all URLs and start fetching of "
345"articles if required."
331msgstr "" 346msgstr ""
332"Sélectionnez le fichier à importer sur votre disque dur, et pressez le bouton « Importer » ci-dessous. " 347"Sélectionnez le fichier à importer sur votre disque dur, et pressez le "
333"wallabag analysera votre fichier, ajoutera toutes les URL trouvées et commencera à télécharger les " 348"bouton « Importer » ci-dessous. wallabag analysera votre fichier, ajoutera "
334"contenus si nécessaire." 349"toutes les URL trouvées et commencera à télécharger les contenus si "
350"nécessaire."
335 351
336msgid "" 352msgid ""
337"Fetching process is controlled by two constants in your config file: IMPORT_LIMIT (how many articles " 353"Fetching process is controlled by two constants in your config file: "
338"are fetched at once) and IMPORT_DELAY (delay between fetch of next batch of articles)." 354"IMPORT_LIMIT (how many articles are fetched at once) and IMPORT_DELAY (delay "
355"between fetch of next batch of articles)."
339msgstr "" 356msgstr ""
340"Le processus d'import peut être paramétré par deux constantes dans votre fichier de configuration : " 357"Le processus d'import peut être paramétré par deux constantes dans votre "
341"IMPORT_LIMIT (combien d'articles sont téléchargés à la fois) et IMPORT_DELAY (le délai entre le " 358"fichier de configuration : IMPORT_LIMIT (combien d'articles sont téléchargés "
342"téléchargement du prochain lot d'articles)." 359"à la fois) et IMPORT_DELAY (le délai entre le téléchargement du prochain lot "
360"d'articles)."
343 361
344msgid "File:" 362msgid "File:"
345msgstr "Fichier : " 363msgstr "Fichier : "
346 364
347msgid "You can click here to fetch content for articles with no content." 365msgid "You can click here to fetch content for articles with no content."
348msgstr "Vous pouvez cliquer ici pour télécharger le contenu des articles vides." 366msgstr ""
367"Vous pouvez cliquer ici pour télécharger le contenu des articles vides."
349 368
350msgid "Export your wallabag data" 369msgid "Export your wallabag data"
351msgstr "Exporter vos données de wallabag" 370msgstr "Exporter vos données de wallabag"
@@ -372,7 +391,8 @@ msgid "Delete Cache"
372msgstr "Vider le cache" 391msgstr "Vider le cache"
373 392
374msgid "Deleting the cache may help with display or other problems." 393msgid "Deleting the cache may help with display or other problems."
375msgstr "Vider le cache peut résoudre des problèmes d'affichage ou d'autres problèmes." 394msgstr ""
395"Vider le cache peut résoudre des problèmes d'affichage ou d'autres problèmes."
376 396
377msgid "Add user" 397msgid "Add user"
378msgstr "Ajouter un utilisateur" 398msgstr "Ajouter un utilisateur"
@@ -399,7 +419,9 @@ msgid "Delete account"
399msgstr "Supprimer le compte" 419msgstr "Supprimer le compte"
400 420
401msgid "You can delete your account by entering your password and validating." 421msgid "You can delete your account by entering your password and validating."
402msgstr "Vous pouvez supprimer votre compte en entrant votre mot de passe et en validant." 422msgstr ""
423"Vous pouvez supprimer votre compte en entrant votre mot de passe et en "
424"validant."
403 425
404msgid "Be careful, data will be erased forever (that is a very long time)." 426msgid "Be careful, data will be erased forever (that is a very long time)."
405msgstr "Attention, les données seront perdues pour toujours." 427msgstr "Attention, les données seront perdues pour toujours."
@@ -408,13 +430,16 @@ msgid "Type here your password"
408msgstr "Entrez votre mot de passe ici" 430msgstr "Entrez votre mot de passe ici"
409 431
410msgid "You are the only user, you cannot delete your own account." 432msgid "You are the only user, you cannot delete your own account."
411msgstr "Vous êtes l'unique utilisateur, vous ne pouvez pas supprimer votre compte." 433msgstr ""
434"Vous êtes l'unique utilisateur, vous ne pouvez pas supprimer votre compte."
412 435
413msgid "" 436msgid ""
414"To completely remove wallabag, delete the wallabag folder on your web server (and eventual databases)." 437"To completely remove wallabag, delete the wallabag folder on your web server "
438"(and eventual databases)."
415msgstr "" 439msgstr ""
416"Pour désinstaller complètement wallabag, supprimez le répertoire <code>wallabag</code> de votre serveur " 440"Pour désinstaller complètement wallabag, supprimez le répertoire "
417"Web (ainsi que les bases de données éventuelles)." 441"<code>wallabag</code> de votre serveur Web (ainsi que les bases de données "
442"éventuelles)."
418 443
419msgid "Save a link" 444msgid "Save a link"
420msgstr "Ajouter un lien" 445msgstr "Ajouter un lien"
@@ -522,7 +547,9 @@ msgid "a more recent development version is available."
522msgstr "une version de développement plus récente est disponible." 547msgstr "une version de développement plus récente est disponible."
523 548
524msgid "Please execute the import script locally, it can take a very long time." 549msgid "Please execute the import script locally, it can take a very long time."
525msgstr "Merci d'exécuter le script d'importation en local car cela peut prendre du temps." 550msgstr ""
551"Merci d'exécuter le script d'importation en local car cela peut prendre du "
552"temps."
526 553
527msgid "More infos in the official doc:" 554msgid "More infos in the official doc:"
528msgstr "Plus d'infos dans la documentation officielle :" 555msgstr "Plus d'infos dans la documentation officielle :"
@@ -589,11 +616,13 @@ msgid "install your wallabag"
589msgstr "installez votre wallabag" 616msgstr "installez votre wallabag"
590 617
591msgid "" 618msgid ""
592"wallabag is still not installed. Please fill the below form to install it. Don't hesitate to <a " 619"wallabag is still not installed. Please fill the below form to install it. "
593"href='http://doc.wallabag.org/'>read the documentation on wallabag website</a>." 620"Don't hesitate to <a href='http://doc.wallabag.org/'>read the documentation "
621"on wallabag website</a>."
594msgstr "" 622msgstr ""
595"wallabag n'est pas encore installé. Merci de remplir le formulaire suivant pour l'installer. N'hésitez " 623"wallabag n'est pas encore installé. Merci de remplir le formulaire suivant "
596"pas à <a href='http://doc.wallabag.org'>lire la documentation sur le site de wallabag</a>." 624"pour l'installer. N'hésitez pas à <a href='http://doc.wallabag.org'>lire la "
625"documentation sur le site de wallabag</a>."
597 626
598msgid "Repeat your password" 627msgid "Repeat your password"
599msgstr "Répétez votre mot de passe" 628msgstr "Répétez votre mot de passe"
@@ -601,8 +630,12 @@ msgstr "Répétez votre mot de passe"
601msgid "Install" 630msgid "Install"
602msgstr "Installer" 631msgstr "Installer"
603 632
604msgid "You can <a href='wallabag_compatibility_test.php'>check your configuration here</a>." 633msgid ""
605msgstr "Vous pouvez vérifier votre configuration <a href='wallabag_compatibility_test.php'>ici</a>." 634"You can <a href='wallabag_compatibility_test.php'>check your configuration "
635"here</a>."
636msgstr ""
637"Vous pouvez vérifier votre configuration <a "
638"href='wallabag_compatibility_test.php'>ici</a>."
606 639
607msgid "Tags" 640msgid "Tags"
608msgstr "Tags" 641msgstr "Tags"
@@ -641,9 +674,12 @@ msgid "Enter your search here"
641msgstr "Entrez votre recherche ici" 674msgstr "Entrez votre recherche ici"
642 675
643#, php-format 676#, php-format
644msgid "The new user %s has been installed. Do you want to <a href=\"?logout\">logout ?</a>" 677msgid ""
678"The new user %s has been installed. Do you want to <a href=\"?logout"
679"\">logout ?</a>"
645msgstr "" 680msgstr ""
646"Le nouvel utilisateur « %s » a été ajouté. Voulez-vous vous <a href=\"?logout\">déconnecter ?</a>" 681"Le nouvel utilisateur « %s » a été ajouté. Voulez-vous vous <a href=\"?"
682"logout\">déconnecter ?</a>"
647 683
648#, php-format 684#, php-format
649msgid "Error : An user with the name %s already exists !" 685msgid "Error : An user with the name %s already exists !"
@@ -657,7 +693,9 @@ msgid "Error : The password is wrong !"
657msgstr "Erreur : le mot de passe est incorrect !" 693msgstr "Erreur : le mot de passe est incorrect !"
658 694
659msgid "Error : You are the only user, you cannot delete your account !" 695msgid "Error : You are the only user, you cannot delete your account !"
660msgstr "Erreur : Vous êtes l'unique utilisateur, vous ne pouvez pas supprimer votre compte !" 696msgstr ""
697"Erreur : Vous êtes l'unique utilisateur, vous ne pouvez pas supprimer votre "
698"compte !"
661 699
662msgid "Untitled" 700msgid "Untitled"
663msgstr "Sans titre" 701msgstr "Sans titre"
@@ -689,8 +727,12 @@ msgstr "en mode démo, vous ne pouvez pas mettre à jour votre mot de passe"
689msgid "your password has been updated" 727msgid "your password has been updated"
690msgstr "votre mot de passe a été mis à jour" 728msgstr "votre mot de passe a été mis à jour"
691 729
692msgid "the two fields have to be filled & the password must be the same in the two fields" 730msgid ""
693msgstr "les deux champs doivent être remplis & le mot de passe doit être le même dans les deux" 731"the two fields have to be filled & the password must be the same in the two "
732"fields"
733msgstr ""
734"les deux champs doivent être remplis & le mot de passe doit être le même "
735"dans les deux"
694 736
695msgid "still using the \"" 737msgid "still using the \""
696msgstr "vous utilisez toujours \"" 738msgstr "vous utilisez toujours \""
@@ -826,11 +868,11 @@ msgid "Generate PDF file"
826msgstr "Générer fichier PDF" 868msgstr "Générer fichier PDF"
827 869
828msgid "" 870msgid ""
829"This can <b>take a while</b> and can <b>even fail</b> if you have too many articles, depending on your " 871"This can <b>take a while</b> and can <b>even fail</b> if you have too many "
830"server configuration." 872"articles, depending on your server configuration."
831msgstr "" 873msgstr ""
832"Ceci peut <b>prendre un moment</b> et même <b>échouer</b> si vous avez trop d'articles, selon la " 874"Ceci peut <b>prendre un moment</b> et même <b>échouer</b> si vous avez trop "
833"configuration matérielle de votre serveur." 875"d'articles, selon la configuration matérielle de votre serveur."
834 876
835msgid "Download the articles from this tag in an epub" 877msgid "Download the articles from this tag in an epub"
836msgstr "Télécharger les articles de ce tag dans un epub" 878msgstr "Télécharger les articles de ce tag dans un epub"
@@ -911,11 +953,12 @@ msgid "Produced by wallabag with PHPePub"
911msgstr "Produit par wallabag avec PHPePub" 953msgstr "Produit par wallabag avec PHPePub"
912 954
913msgid "" 955msgid ""
914"Please open <a href='https://github.com/wallabag/wallabag/issues'>an issue</a> if you have trouble with " 956"Please open <a href='https://github.com/wallabag/wallabag/issues'>an issue</"
915"the display of this E-Book on your device." 957"a> if you have trouble with the display of this E-Book on your device."
916msgstr "" 958msgstr ""
917"Merci d'ouvrir <a href='https://github.com/wallabag/wallabag/issues'>un ticket</a> si vous avez des " 959"Merci d'ouvrir <a href='https://github.com/wallabag/wallabag/issues'>un "
918"problèmes d'affichage de cet E-Book sur votre appareil." 960"ticket</a> si vous avez des problèmes d'affichage de cet E-Book sur votre "
961"appareil."
919 962
920msgid "Produced by wallabag with PHPMobi" 963msgid "Produced by wallabag with PHPMobi"
921msgstr "Produit par wallabag avec PHPMobi" 964msgstr "Produit par wallabag avec PHPMobi"
@@ -928,7 +971,8 @@ msgid "Hi, %1$s"
928msgstr "Salut, %1$s" 971msgstr "Salut, %1$s"
929 972
930msgid "Someone just created a wallabag account for you on %1$s." 973msgid "Someone just created a wallabag account for you on %1$s."
931msgstr "Quelqu'un vient juste de créer un compte wallabag pour vous à l'adresse %1$s." 974msgstr ""
975"Quelqu'un vient juste de créer un compte wallabag pour vous à l'adresse %1$s."
932 976
933msgid "You've just created a wallabag account on %1$s" 977msgid "You've just created a wallabag account on %1$s"
934msgstr "Vous venez juste de vous créer un compte wallabag sur %1$s" 978msgstr "Vous venez juste de vous créer un compte wallabag sur %1$s"
@@ -939,32 +983,49 @@ msgstr "Votre identifiant is %1$s."
939msgid "Have fun with it !" 983msgid "Have fun with it !"
940msgstr "Amusez-vous bien !" 984msgstr "Amusez-vous bien !"
941 985
942msgid "This is an automatically generated message, no one will answer if you respond to it." 986msgid ""
943msgstr "Ceci est un message généré automatiquement, personne ne vous répondra si vous y répondez." 987"This is an automatically generated message, no one will answer if you "
988"respond to it."
989msgstr ""
990"Ceci est un message généré automatiquement, personne ne vous répondra si "
991"vous y répondez."
944 992
945msgid "" 993msgid ""
946"Note : The password has been chosen by the person who created your account. Get in touch with that " 994"Note : The password has been chosen by the person who created your account. "
947"person to know your password and change it as soon as possible" 995"Get in touch with that person to know your password and change it as soon as "
996"possible"
948msgstr "" 997msgstr ""
949"Note : Votre mot de passe a été défini par la personne ayant créé votre compte. Vous devriez entrer en " 998"Note : Votre mot de passe a été défini par la personne ayant créé votre "
950"contact avec cette personne pour connaître votre mot de passe et le changer dès que possible" 999"compte. Vous devriez entrer en contact avec cette personne pour connaître "
1000"votre mot de passe et le changer dès que possible"
951 1001
952msgid "The new user %1$s has been sent an email at %2$s. You may have to check spam folder." 1002msgid ""
1003"The new user %1$s has been sent an email at %2$s. You may have to check spam "
1004"folder."
953msgstr "" 1005msgstr ""
954"Un email a été envoyé au nouvel utilisateur %1$s à l'adresse %2$s. Il peut être nécessaire de vérifier " 1006"Un email a été envoyé au nouvel utilisateur %1$s à l'adresse %2$s. Il peut "
955"le dossier des spams." 1007"être nécessaire de vérifier le dossier des spams."
956 1008
957msgid "A problem has been encountered while sending the confirmation email" 1009msgid "A problem has been encountered while sending the confirmation email"
958msgstr "Un problème a été rencontré lors de l'envoi de l'email de confirmation" 1010msgstr "Un problème a été rencontré lors de l'envoi de l'email de confirmation"
959 1011
960msgid "The server did not authorize sending a confirmation email, but the user was created." 1012msgid ""
961msgstr "Le serveur n'autorise pas l'envoi d'un email de confirmation, mais l'utilisateur a été créé." 1013"The server did not authorize sending a confirmation email, but the user was "
1014"created."
1015msgstr ""
1016"Le serveur n'autorise pas l'envoi d'un email de confirmation, mais "
1017"l'utilisateur a été créé."
962 1018
963msgid "The user was created, but no email was sent because email was not filled in" 1019msgid ""
964msgstr "L'utilisateur a été créé, mais aucun mail n'a été envoyé car l'email n'était pas renseigné" 1020"The user was created, but no email was sent because email was not filled in"
1021msgstr ""
1022"L'utilisateur a été créé, mais aucun mail n'a été envoyé car l'email n'était "
1023"pas renseigné"
965 1024
966msgid "Mail function is disabled. You can't send emails from your server" 1025msgid "Mail function is disabled. You can't send emails from your server"
967msgstr "La fonction mail est désactivée. Vous ne pouvez pas envoyer d'E-mails depuis votre serveur" 1026msgstr ""
1027"La fonction mail est désactivée. Vous ne pouvez pas envoyer d'E-mails depuis "
1028"votre serveur"
968 1029
969msgid "You didn't set your kindle's email adress !" 1030msgid "You didn't set your kindle's email adress !"
970msgstr "Vous n'avez pas renseigné l'adresse E-mail de votre Kindle !" 1031msgstr "Vous n'avez pas renseigné l'adresse E-mail de votre Kindle !"
diff --git a/themes/_global/js/keyboard.js b/themes/_global/js/keyboard.js
index 4469248d..04000f47 100644
--- a/themes/_global/js/keyboard.js
+++ b/themes/_global/js/keyboard.js
@@ -63,6 +63,9 @@ function actionArticle(id) {
63 case 77: 63 case 77:
64 markReadArticle(id); // m key letter 64 markReadArticle(id); // m key letter
65 break; 65 break;
66 case 78:
67 markReadAndNextArticle(id); // n letter
68 break;
66 } 69 }
67 70
68 }, false); 71 }, false);
@@ -86,6 +89,12 @@ function markReadArticle(id) {
86 } 89 }
87} 90}
88 91
92function markReadAndNextArticle(id) {
93 if (id) {
94 window.location = window.location.origin + window.location.pathname + '?action=archive_and_next&id=' + id;
95 }
96}
97
89function homeNavigation() { 98function homeNavigation() {
90 selectedArticle = $('.entrie:first'); 99 selectedArticle = $('.entrie:first');
91 window.addEventListener("keydown", function (event) { 100 window.addEventListener("keydown", function (event) {
@@ -144,5 +153,7 @@ function goSelectPrev(selectedArticle,number) {
144} 153}
145 154
146function enterArticle(selectedArticle) { 155function enterArticle(selectedArticle) {
147 window.location = selectedArticle.find('a:first').attr('href'); 156 if (!$("#bagit").hasClass("current")) {
157 window.location = selectedArticle.find('a:first').attr('href');
158 }
148} \ No newline at end of file 159} \ No newline at end of file
diff --git a/themes/baggy/config.twig b/themes/baggy/config.twig
index 2e40178e..6f55cd75 100755
--- a/themes/baggy/config.twig
+++ b/themes/baggy/config.twig
@@ -17,7 +17,7 @@
17 <h3>{% trans "Browser Addons" %}</h3> 17 <h3>{% trans "Browser Addons" %}</h3>
18 <ul> 18 <ul>
19 <li><a href="https://addons.mozilla.org/firefox/addon/wallabag/" target="_blank">{% trans "Standard Firefox Add-On" %}</a></li> 19 <li><a href="https://addons.mozilla.org/firefox/addon/wallabag/" target="_blank">{% trans "Standard Firefox Add-On" %}</a></li>
20 <li><button onclick="activateSocialFeature(this)">{% trans "Mozilla Services (Social API) Extension" %}</button></li> 20 {% if https %}<li><button onclick="activateSocialFeature(this)">{% trans "Mozilla Services (Social API) Extension" %}</button></li>{% else %}<li>{% trans "Mozilla Services (Social API) Extension needs an https connection" %}</li>{% endif %}
21 <li><a href="https://chrome.google.com/webstore/detail/wallabag/bepdcjnnkglfjehplaogpoonpffbdcdj" target="_blank">{% trans "Chrome Extension" %}</a></li> 21 <li><a href="https://chrome.google.com/webstore/detail/wallabag/bepdcjnnkglfjehplaogpoonpffbdcdj" target="_blank">{% trans "Chrome Extension" %}</a></li>
22 </ul> 22 </ul>
23 <h3>{% trans "Mobile Apps" %}</h3> 23 <h3>{% trans "Mobile Apps" %}</h3>
diff --git a/themes/default/config.twig b/themes/default/config.twig
index e39826c3..24e3e570 100755
--- a/themes/default/config.twig
+++ b/themes/default/config.twig
@@ -17,7 +17,7 @@
17 <h3>Browser Plugins</h3> 17 <h3>Browser Plugins</h3>
18 <ul> 18 <ul>
19 <li><a href="https://addons.mozilla.org/firefox/addon/wallabag/" target="_blank">{% trans "Standard Firefox Add-On" %}</a></li> 19 <li><a href="https://addons.mozilla.org/firefox/addon/wallabag/" target="_blank">{% trans "Standard Firefox Add-On" %}</a></li>
20 <li><button onclick="activateSocialFeature(this)">{% trans "Mozilla Services (Social API) Extension" %}</button></li> 20 {% if https %}<li><button onclick="activateSocialFeature(this)">{% trans "Mozilla Services (Social API) Extension" %}</button></li>{% else %}<li>{% trans "Mozilla Services (Social API) Extension needs an https connection" %}</li>{% endif %}
21 <li><a href="https://chrome.google.com/webstore/detail/wallabag/bepdcjnnkglfjehplaogpoonpffbdcdj" target="_blank">{% trans "Chrome Extension" %}</a></li> 21 <li><a href="https://chrome.google.com/webstore/detail/wallabag/bepdcjnnkglfjehplaogpoonpffbdcdj" target="_blank">{% trans "Chrome Extension" %}</a></li>
22 </ul> 22 </ul>
23 <h3>Mobile Apps</h3> 23 <h3>Mobile Apps</h3>