aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorNicolas LÅ“uillet <nicolas.loeuillet@gmail.com>2013-09-20 04:36:35 -0700
committerNicolas LÅ“uillet <nicolas.loeuillet@gmail.com>2013-09-20 04:36:35 -0700
commit79026b73a804d1fe3715c3edf5bc2cfb1e56732c (patch)
tree225136afe844ad0b1c3fef443fcea86fe54384e5
parentc51be6b697da573cdcf0788eb8617130ce5517a4 (diff)
parent6a6c1c1172f3c6167d360a2322335ea91e94a3ff (diff)
downloadwallabag-79026b73a804d1fe3715c3edf5bc2cfb1e56732c.tar.gz
wallabag-79026b73a804d1fe3715c3edf5bc2cfb1e56732c.tar.zst
wallabag-79026b73a804d1fe3715c3edf5bc2cfb1e56732c.zip
Merge pull request #226 from inthepoche/dev1.0-beta5
beta5
-rw-r--r--.gitignore2
-rw-r--r--.gitmodules6
-rw-r--r--inc/3rdparty/FlattrItem.class.php49
-rw-r--r--inc/3rdparty/Session.class.php283
-rw-r--r--[-rwxr-xr-x]inc/3rdparty/class.messages.php0
-rw-r--r--inc/3rdparty/content-extractor/ContentExtractor.php2
-rw-r--r--inc/3rdparty/site_config/README.txt6
-rw-r--r--inc/3rdparty/site_config/custom/inthepoche.com.txt7
-rw-r--r--inc/3rdparty/site_config/index.php3
-rw-r--r--inc/3rdparty/site_config/standard/.wikipedia.org.txt19
-rw-r--r--inc/3rdparty/site_config/standard/index.php3
-rw-r--r--inc/3rdparty/site_config/standard/version.php2
-rw-r--r--inc/poche/Database.class.php16
-rw-r--r--inc/poche/Poche.class.php335
-rw-r--r--inc/poche/PocheReadability.php46
-rw-r--r--inc/poche/Tools.class.php41
-rw-r--r--inc/poche/Url.class.php2
-rwxr-xr-xinc/poche/config.inc.php59
-rwxr-xr-xinc/poche/config.inc.php.new56
-rw-r--r--inc/poche/define.inc.php7
-rw-r--r--inc/poche/global.inc.php64
-rw-r--r--index.php65
-rw-r--r--install/update.php2
-rw-r--r--install/update_to_1beta3.php2
-rw-r--r--locale/de_DE.utf8/LC_MESSAGES/de_DE.utf8.mobin5799 -> 4216 bytes
-rw-r--r--locale/de_DE.utf8/LC_MESSAGES/de_DE.utf8.po337
-rw-r--r--locale/en_EN.utf8/LC_MESSAGES/en_EN.utf8.mobin0 -> 4487 bytes
-rw-r--r--locale/en_EN.utf8/LC_MESSAGES/en_EN.utf8.po228
-rw-r--r--locale/es_ES.utf8/LC_MESSAGES/es_ES.utf8.mobin5728 -> 4198 bytes
-rw-r--r--locale/es_ES.utf8/LC_MESSAGES/es_ES.utf8.po350
-rw-r--r--locale/fr_FR.utf8/LC_MESSAGES/fr_FR.utf8.mobin5706 -> 4813 bytes
-rw-r--r--locale/fr_FR.utf8/LC_MESSAGES/fr_FR.utf8.po356
-rw-r--r--poche_compatibility_test.php14
m---------themes0
-rw-r--r--tpl/_bookmarklet.twig3
-rw-r--r--tpl/_footer.twig4
-rw-r--r--tpl/_head.twig12
-rw-r--r--tpl/_menu.twig7
-rw-r--r--tpl/_messages.twig1
-rw-r--r--tpl/_top.twig3
-rw-r--r--tpl/config.twig60
-rw-r--r--tpl/css/knacss.css1
-rwxr-xr-xtpl/css/messages.css13
-rw-r--r--tpl/css/print.css19
-rw-r--r--tpl/css/style-light.css57
-rw-r--r--tpl/css/style.css259
-rw-r--r--tpl/error.twig6
-rw-r--r--tpl/export.twig1
-rw-r--r--tpl/home.twig28
-rw-r--r--tpl/img/apple-touch-icon-144x144-precomposed.pngbin7349 -> 0 bytes
-rw-r--r--tpl/img/apple-touch-icon-72x72-precomposed.pngbin6168 -> 0 bytes
-rw-r--r--tpl/img/apple-touch-icon.pngbin5803 -> 0 bytes
-rw-r--r--tpl/img/favicon.icobin346 -> 0 bytes
-rwxr-xr-xtpl/img/light/backtotop.pngbin326 -> 0 bytes
-rw-r--r--tpl/img/light/checkmark-off.pngbin277 -> 0 bytes
-rw-r--r--tpl/img/light/checkmark-on.pngbin235 -> 0 bytes
-rw-r--r--tpl/img/light/down.pngbin216 -> 0 bytes
-rwxr-xr-xtpl/img/light/envelop.pngbin285 -> 0 bytes
-rwxr-xr-xtpl/img/light/left.pngbin196 -> 0 bytes
-rw-r--r--tpl/img/light/remove.pngbin252 -> 0 bytes
-rw-r--r--tpl/img/light/shaarli.pngbin729 -> 0 bytes
-rw-r--r--tpl/img/light/star-off.pngbin314 -> 0 bytes
-rw-r--r--tpl/img/light/star-on.pngbin281 -> 0 bytes
-rwxr-xr-xtpl/img/light/top.pngbin212 -> 0 bytes
-rwxr-xr-xtpl/img/light/twitter.pngbin297 -> 0 bytes
-rw-r--r--tpl/img/logo.pngbin1350 -> 0 bytes
-rwxr-xr-xtpl/img/messages/close.pngbin662 -> 0 bytes
-rwxr-xr-xtpl/img/messages/cross.pngbin655 -> 0 bytes
-rwxr-xr-xtpl/img/messages/help.pngbin786 -> 0 bytes
-rwxr-xr-xtpl/img/messages/tick.pngbin537 -> 0 bytes
-rwxr-xr-xtpl/img/messages/warning.pngbin666 -> 0 bytes
-rw-r--r--tpl/install.twig28
-rw-r--r--tpl/js/jquery-2.0.3.min.js6
-rw-r--r--tpl/layout.twig31
-rw-r--r--tpl/login.twig32
-rw-r--r--tpl/view.twig38
76 files changed, 1294 insertions, 1677 deletions
diff --git a/.gitignore b/.gitignore
index 25818a8d..b73c4b40 100644
--- a/.gitignore
+++ b/.gitignore
@@ -5,4 +5,4 @@ composer.phar
5db/poche.sqlite 5db/poche.sqlite
6output 6output
7phpdoc* 7phpdoc*
8inc/poche/myconfig.inc.php \ No newline at end of file 8inc/poche/config.inc.php \ No newline at end of file
diff --git a/.gitmodules b/.gitmodules
new file mode 100644
index 00000000..bbdd8495
--- /dev/null
+++ b/.gitmodules
@@ -0,0 +1,6 @@
1[submodule "inc/3rdparty/site_config"]
2 path = inc/3rdparty/site_config
3 url = git@github.com:inthepoche/site_config.git
4[submodule "themes"]
5 path = themes
6 url = git://github.com/inthepoche/poche-themes.git
diff --git a/inc/3rdparty/FlattrItem.class.php b/inc/3rdparty/FlattrItem.class.php
new file mode 100644
index 00000000..c940fcd6
--- /dev/null
+++ b/inc/3rdparty/FlattrItem.class.php
@@ -0,0 +1,49 @@
1<?php
2/*
3* Class for Flattr querying
4*/
5class FlattrItem {
6
7 public $status;
8 public $urltoflattr;
9 public $flattrItemURL;
10 public $numflattrs;
11
12 public function checkItem($urltoflattr) {
13 $this->cacheflattrfile($urltoflattr);
14 $flattrResponse = file_get_contents(CACHE . "/flattr/".base64_encode($urltoflattr).".cache");
15 if($flattrResponse != FALSE) {
16 $result = json_decode($flattrResponse);
17 if (isset($result->message)){
18 if ($result->message == "flattrable") {
19 $this->status = FLATTRABLE;
20 }
21 }
22 elseif ($result->link) {
23 $this->status = FLATTRED;
24 $this->flattrItemURL = $result->link;
25 $this->numflattrs = $result->flattrs;
26 }
27 else {
28 $this->status = NOT_FLATTRABLE;
29 }
30 }
31 else {
32 $this->status = "FLATTR_ERR_CONNECTION";
33 }
34 }
35
36 private function cacheflattrfile($urltoflattr) {
37 if (!is_dir(CACHE . '/flattr')) {
38 mkdir(CACHE . '/flattr', 0777);
39 }
40
41 // if a cache flattr file for this url already exists and it's been less than one day than it have been updated, see in /cache
42 if ((!file_exists(CACHE . "/flattr/".base64_encode($urltoflattr).".cache")) || (time() - filemtime(CACHE . "/flattr/".base64_encode($urltoflattr).".cache") > 86400)) {
43 $askForFlattr = Tools::getFile(FLATTR_API . $urltoflattr);
44 $flattrCacheFile = fopen(CACHE . "/flattr/".base64_encode($urltoflattr).".cache", 'w+');
45 fwrite($flattrCacheFile, $askForFlattr);
46 fclose($flattrCacheFile);
47 }
48 }
49} \ No newline at end of file
diff --git a/inc/3rdparty/Session.class.php b/inc/3rdparty/Session.class.php
index 3162f507..df913a06 100644
--- a/inc/3rdparty/Session.class.php
+++ b/inc/3rdparty/Session.class.php
@@ -1,136 +1,279 @@
1<?php 1<?php
2/** 2/**
3 * Session management class 3 * Session management class
4 *
4 * http://www.developpez.net/forums/d51943/php/langage/sessions/ 5 * http://www.developpez.net/forums/d51943/php/langage/sessions/
5 * http://sebsauvage.net/wiki/doku.php?id=php:session 6 * http://sebsauvage.net/wiki/doku.php?id=php:session
6 * http://sebsauvage.net/wiki/doku.php?id=php:shaarli 7 * http://sebsauvage.net/wiki/doku.php?id=php:shaarli
7 * 8 *
8 * Features: 9 * Features:
9 * - Everything is stored on server-side (we do not trust client-side data, 10 * - Everything is stored on server-side (we do not trust client-side data,
10 * such as cookie expiration) 11 * such as cookie expiration)
11 * - IP addresses + user agent are checked on each access to prevent session 12 * - IP addresses are checked on each access to prevent session cookie hijacking
12 * cookie hijacking (such as Firesheep) 13 * (such as Firesheep)
13 * - Session expires on user inactivity (Session expiration date is 14 * - Session expires on user inactivity (Session expiration date is
14 * automatically updated everytime the user accesses a page.) 15 * automatically updated everytime the user accesses a page.)
15 * - A unique secret key is generated on server-side for this session 16 * - A unique secret key is generated on server-side for this session
16 * (and never sent over the wire) which can be used 17 * (and never sent over the wire) which can be used to sign forms (HMAC)
17 * to sign forms (HMAC) (See $_SESSION['uid'] ) 18 * (See $_SESSION['uid'])
18 * - Token management to prevent XSRF attacks. 19 * - Token management to prevent XSRF attacks
20 * - Brute force protection with ban management
19 * 21 *
20 * TODO: 22 * TODOs
21 * - log login fail 23 * - Replace globals with variables in Session class
22 * - prevent brute force (ban IP)
23 * 24 *
24 * HOWTOUSE: 25 * How to use:
25 * - Just call Session::init(); to initialize session and 26 * - http://tontof.net/kriss/php5/session
26 * check if connected with Session::isLogged()
27 */ 27 */
28
29class Session 28class Session
30{ 29{
30 // Personnalize PHP session name
31 public static $sessionName = '';
31 // If the user does not access any page within this time, 32 // If the user does not access any page within this time,
32 // his/her session is considered expired (in seconds). 33 // his/her session is considered expired (3600 sec. = 1 hour)
33 public static $inactivity_timeout = 3600; 34 public static $inactivityTimeout = 3600;
34 private static $_instance; 35 // If you get disconnected often or if your IP address changes often.
36 // Let you disable session cookie hijacking protection
37 public static $disableSessionProtection = false;
38 // Ban IP after this many failures.
39 public static $banAfter = 4;
40 // Ban duration for IP address after login failures (in seconds).
41 // (1800 sec. = 30 minutes)
42 public static $banDuration = 1800;
43 // File storage for failures and bans. If empty, no ban management.
44 public static $banFile = '';
35 45
36 // constructor 46 /**
37 private function __construct() 47 * Initialize session
48 */
49 public static function init()
38 { 50 {
51 // Force cookie path (but do not change lifetime)
52 $cookie = session_get_cookie_params();
53 // Default cookie expiration and path.
54 $cookiedir = '';
55 if (dirname($_SERVER['SCRIPT_NAME'])!='/') {
56 $cookiedir = dirname($_SERVER["SCRIPT_NAME"]).'/';
57 }
58 $ssl = false;
59 if (isset($_SERVER["HTTPS"]) && $_SERVER["HTTPS"] == "on") {
60 $ssl = true;
61 }
62 session_set_cookie_params($cookie['lifetime'], $cookiedir, $_SERVER['HTTP_HOST'], $ssl);
39 // Use cookies to store session. 63 // Use cookies to store session.
40 ini_set('session.use_cookies', 1); 64 ini_set('session.use_cookies', 1);
41 // Force cookies for session (phpsessionID forbidden in URL) 65 // Force cookies for session (phpsessionID forbidden in URL)
42 ini_set('session.use_only_cookies', 1); 66 ini_set('session.use_only_cookies', 1);
43 if (!session_id()){ 67 if (!session_id()) {
44 // Prevent php to use sessionID in URL if cookies are disabled. 68 // Prevent php to use sessionID in URL if cookies are disabled.
45 ini_set('session.use_trans_sid', false); 69 ini_set('session.use_trans_sid', false);
46 session_start('poche'); 70 if (!empty(self::$sessionName)) {
71 session_name(self::$sessionName);
72 }
73 session_start();
47 } 74 }
48 } 75 }
49 76
50 // initialize session 77 /**
51 public static function init() 78 * Returns the IP address
79 * (Used to prevent session cookie hijacking.)
80 *
81 * @return string IP addresses
82 */
83 private static function _allIPs()
52 { 84 {
53 if (!isset(self::$_instance)) { 85 $ip = $_SERVER["REMOTE_ADDR"];
54 self::$_instance = new Session(); 86 $ip.= isset($_SERVER['HTTP_X_FORWARDED_FOR']) ? '_'.$_SERVER['HTTP_X_FORWARDED_FOR'] : '';
55 } 87 $ip.= isset($_SERVER['HTTP_CLIENT_IP']) ? '_'.$_SERVER['HTTP_CLIENT_IP'] : '';
56 }
57 88
58 // Returns the IP address, user agent and language of the client 89 return $ip;
59 // (Used to prevent session cookie hijacking.)
60 private static function _allInfos()
61 {
62 $infos = $_SERVER["REMOTE_ADDR"];
63 if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
64 $infos.=$_SERVER['HTTP_X_FORWARDED_FOR'];
65 }
66 if (isset($_SERVER['HTTP_CLIENT_IP'])) {
67 $infos.='_'.$_SERVER['HTTP_CLIENT_IP'];
68 }
69 $infos.='_'.$_SERVER['HTTP_USER_AGENT'];
70 $infos.='_'.$_SERVER['HTTP_ACCEPT_LANGUAGE'];
71 return sha1($infos);
72 } 90 }
73 91
74 // Check that user/password is correct and init some SESSION variables. 92 /**
75 public static function login($login,$password,$login_test,$password_test, 93 * Check that user/password is correct and then init some SESSION variables.
76 $pValues = array()) 94 *
95 * @param string $login Login reference
96 * @param string $password Password reference
97 * @param string $loginTest Login to compare with login reference
98 * @param string $passwordTest Password to compare with password reference
99 * @param array $pValues Array of variables to store in SESSION
100 *
101 * @return true|false True if login and password are correct, false
102 * otherwise
103 */
104 public static function login (
105 $login,
106 $password,
107 $loginTest,
108 $passwordTest,
109 $pValues = array())
77 { 110 {
78 foreach ($pValues as $key => $value) { 111 self::banInit();
79 $_SESSION[$key] = $value; 112 if (self::banCanLogin()) {
80 } 113 if ($login === $loginTest && $password === $passwordTest) {
81 if ($login==$login_test && $password==$password_test){ 114 self::banLoginOk();
82 // generate unique random number to sign forms (HMAC) 115 // Generate unique random number to sign forms (HMAC)
83 $_SESSION['uid'] = sha1(uniqid('',true).'_'.mt_rand()); 116 $_SESSION['uid'] = sha1(uniqid('', true).'_'.mt_rand());
84 $_SESSION['info']=Session::_allInfos(); 117 $_SESSION['ip'] = self::_allIPs();
85 $_SESSION['username']=$login; 118 $_SESSION['username'] = $login;
86 // Set session expiration. 119 // Set session expiration.
87 $_SESSION['expires_on']=time()+Session::$inactivity_timeout; 120 $_SESSION['expires_on'] = time() + self::$inactivityTimeout;
88 return true; 121
122 foreach ($pValues as $key => $value) {
123 $_SESSION[$key] = $value;
124 }
125
126 return true;
127 }
128 self::banLoginFailed();
89 } 129 }
130
90 return false; 131 return false;
91 } 132 }
92 133
93 // Force logout 134 /**
135 * Unset SESSION variable to force logout
136 */
94 public static function logout() 137 public static function logout()
95 { 138 {
96 unset($_SESSION['uid'],$_SESSION['info'],$_SESSION['expires_on'],$_SESSION['tokens'], $_SESSION['login'], $_SESSION['pass'], $_SESSION['poche_user']); 139 unset($_SESSION['uid'],$_SESSION['ip'],$_SESSION['expires_on'],$_SESSION['tokens'], $_SESSION['login'], $_SESSION['pass'], $_SESSION['poche_user']);
97 } 140 }
98 141
99 // Make sure user is logged in. 142 /**
143 * Make sure user is logged in.
144 *
145 * @return true|false True if user is logged in, false otherwise
146 */
100 public static function isLogged() 147 public static function isLogged()
101 { 148 {
102 if (!isset ($_SESSION['uid']) 149 if (!isset ($_SESSION['uid'])
103 || $_SESSION['info']!=Session::_allInfos() 150 || (self::$disableSessionProtection === false
104 || time()>=$_SESSION['expires_on']){ 151 && $_SESSION['ip'] !== self::_allIPs())
105 Session::logout(); 152 || time() >= $_SESSION['expires_on']) {
153 self::logout();
154
106 return false; 155 return false;
107 } 156 }
108 // User accessed a page : Update his/her session expiration date. 157 // User accessed a page : Update his/her session expiration date.
109 $_SESSION['expires_on']=time()+Session::$inactivity_timeout; 158 $_SESSION['expires_on'] = time() + self::$inactivityTimeout;
159 if (!empty($_SESSION['longlastingsession'])) {
160 $_SESSION['expires_on'] += $_SESSION['longlastingsession'];
161 }
162
110 return true; 163 return true;
111 } 164 }
112 165
113 // Returns a token. 166 /**
114 public static function getToken() 167 * Create a token, store it in SESSION and return it
168 *
169 * @param string $salt to prevent birthday attack
170 *
171 * @return string Token created
172 */
173 public static function getToken($salt = '')
115 { 174 {
116 if (!isset($_SESSION['tokens'])){ 175 if (!isset($_SESSION['tokens'])) {
117 $_SESSION['tokens']=array(); 176 $_SESSION['tokens']=array();
118 } 177 }
119 // We generate a random string and store it on the server side. 178 // We generate a random string and store it on the server side.
120 $rnd = sha1(uniqid('',true).'_'.mt_rand()); 179 $rnd = sha1(uniqid('', true).'_'.mt_rand().$salt);
121 $_SESSION['tokens'][$rnd]=1; 180 $_SESSION['tokens'][$rnd]=1;
181
122 return $rnd; 182 return $rnd;
123 } 183 }
124 184
125 // Tells if a token is ok. Using this function will destroy the token. 185 /**
126 // return true if token is ok. 186 * Tells if a token is ok. Using this function will destroy the token.
187 *
188 * @param string $token Token to test
189 *
190 * @return true|false True if token is correct, false otherwise
191 */
127 public static function isToken($token) 192 public static function isToken($token)
128 { 193 {
129 if (isset($_SESSION['tokens'][$token])) 194 if (isset($_SESSION['tokens'][$token])) {
130 {
131 unset($_SESSION['tokens'][$token]); // Token is used: destroy it. 195 unset($_SESSION['tokens'][$token]); // Token is used: destroy it.
196
132 return true; // Token is ok. 197 return true; // Token is ok.
133 } 198 }
199
134 return false; // Wrong token, or already used. 200 return false; // Wrong token, or already used.
135 } 201 }
136} \ No newline at end of file 202
203 /**
204 * Signal a failed login. Will ban the IP if too many failures:
205 */
206 public static function banLoginFailed()
207 {
208 if (self::$banFile !== '') {
209 $ip = $_SERVER["REMOTE_ADDR"];
210 $gb = $GLOBALS['IPBANS'];
211
212 if (!isset($gb['FAILURES'][$ip])) {
213 $gb['FAILURES'][$ip] = 0;
214 }
215 $gb['FAILURES'][$ip]++;
216 if ($gb['FAILURES'][$ip] > (self::$banAfter - 1)) {
217 $gb['BANS'][$ip]= time() + self::$banDuration;
218 }
219
220 $GLOBALS['IPBANS'] = $gb;
221 file_put_contents(self::$banFile, "<?php\n\$GLOBALS['IPBANS']=".var_export($gb, true).";\n?>");
222 }
223 }
224
225 /**
226 * Signals a successful login. Resets failed login counter.
227 */
228 public static function banLoginOk()
229 {
230 if (self::$banFile !== '') {
231 $ip = $_SERVER["REMOTE_ADDR"];
232 $gb = $GLOBALS['IPBANS'];
233 unset($gb['FAILURES'][$ip]); unset($gb['BANS'][$ip]);
234 $GLOBALS['IPBANS'] = $gb;
235 file_put_contents(self::$banFile, "<?php\n\$GLOBALS['IPBANS']=".var_export($gb, true).";\n?>");
236 }
237 }
238
239 /**
240 * Ban init
241 */
242 public static function banInit()
243 {
244 if (self::$banFile !== '') {
245 if (!is_file(self::$banFile)) {
246 file_put_contents(self::$banFile, "<?php\n\$GLOBALS['IPBANS']=".var_export(array('FAILURES'=>array(), 'BANS'=>array()), true).";\n?>");
247 }
248 include self::$banFile;
249 }
250 }
251
252 /**
253 * Checks if the user CAN login. If 'true', the user can try to login.
254 *
255 * @return boolean true if user is banned, false otherwise
256 */
257 public static function banCanLogin()
258 {
259 if (self::$banFile !== '') {
260 $ip = $_SERVER["REMOTE_ADDR"];
261 $gb = $GLOBALS['IPBANS'];
262 if (isset($gb['BANS'][$ip])) {
263 // User is banned. Check if the ban has expired:
264 if ($gb['BANS'][$ip] <= time()) {
265 // Ban expired, user can try to login again.
266 unset($gb['FAILURES'][$ip]);
267 unset($gb['BANS'][$ip]);
268 file_put_contents(self::$banFile, "<?php\n\$GLOBALS['IPBANS']=".var_export($gb, true).";\n?>");
269
270 return true; // Ban has expired, user can login.
271 }
272
273 return false; // User is banned.
274 }
275 }
276
277 return true; // User is not banned.
278 }
279}
diff --git a/inc/3rdparty/class.messages.php b/inc/3rdparty/class.messages.php
index e60bd3a1..e60bd3a1 100755..100644
--- a/inc/3rdparty/class.messages.php
+++ b/inc/3rdparty/class.messages.php
diff --git a/inc/3rdparty/content-extractor/ContentExtractor.php b/inc/3rdparty/content-extractor/ContentExtractor.php
index db371c6a..26878392 100644
--- a/inc/3rdparty/content-extractor/ContentExtractor.php
+++ b/inc/3rdparty/content-extractor/ContentExtractor.php
@@ -138,7 +138,7 @@ class ContentExtractor
138 } 138 }
139 139
140 // load and parse html 140 // load and parse html
141 $this->readability = new Readability($html, $url); 141 $this->readability = new PocheReadability($html, $url);
142 142
143 // we use xpath to find elements in the given HTML document 143 // we use xpath to find elements in the given HTML document
144 // see http://en.wikipedia.org/wiki/XPath_1.0 144 // see http://en.wikipedia.org/wiki/XPath_1.0
diff --git a/inc/3rdparty/site_config/README.txt b/inc/3rdparty/site_config/README.txt
deleted file mode 100644
index 0aff456b..00000000
--- a/inc/3rdparty/site_config/README.txt
+++ /dev/null
@@ -1,6 +0,0 @@
1Full-Text RSS Site Patterns
2---------------------------
3
4Site patterns allow you to specify what should be extracted from specific sites.
5
6Please see http://help.fivefilters.org/customer/portal/articles/223153-site-patterns for more information. \ No newline at end of file
diff --git a/inc/3rdparty/site_config/custom/inthepoche.com.txt b/inc/3rdparty/site_config/custom/inthepoche.com.txt
deleted file mode 100644
index ede74b97..00000000
--- a/inc/3rdparty/site_config/custom/inthepoche.com.txt
+++ /dev/null
@@ -1,7 +0,0 @@
1title: //title
2body: //div[@class='post-content']
3
4prune: no
5tidy: no
6
7test_url: http://www.inthepoche.com/?post/poche-hosting \ No newline at end of file
diff --git a/inc/3rdparty/site_config/index.php b/inc/3rdparty/site_config/index.php
deleted file mode 100644
index a3d5f739..00000000
--- a/inc/3rdparty/site_config/index.php
+++ /dev/null
@@ -1,3 +0,0 @@
1<?php
2// this is here to prevent directory listing over the web
3?> \ No newline at end of file
diff --git a/inc/3rdparty/site_config/standard/.wikipedia.org.txt b/inc/3rdparty/site_config/standard/.wikipedia.org.txt
deleted file mode 100644
index 8b98ae4b..00000000
--- a/inc/3rdparty/site_config/standard/.wikipedia.org.txt
+++ /dev/null
@@ -1,19 +0,0 @@
1title: //h1[@id='firstHeading']
2body: //div[@id = 'bodyContent']
3strip_id_or_class: editsection
4#strip_id_or_class: toc
5strip_id_or_class: vertical-navbox
6strip: //table[@id='toc']
7strip: //div[@id='catlinks']
8strip: //div[@id='jump-to-nav']
9strip: //div[@class='thumbcaption']//div[@class='magnify']
10strip: //table[@class='navbox']
11strip: //table[contains(@class, 'infobox')]
12strip: //div[@class='dablink']
13strip: //div[@id='contentSub']
14strip: //table[contains(@class, 'metadata')]
15strip: //*[contains(@class, 'noprint')]
16strip: //span[@title='pronunciation:']
17prune: no
18tidy: no
19test_url: http://en.wikipedia.org/wiki/Christopher_Lloyd \ No newline at end of file
diff --git a/inc/3rdparty/site_config/standard/index.php b/inc/3rdparty/site_config/standard/index.php
deleted file mode 100644
index a3d5f739..00000000
--- a/inc/3rdparty/site_config/standard/index.php
+++ /dev/null
@@ -1,3 +0,0 @@
1<?php
2// this is here to prevent directory listing over the web
3?> \ No newline at end of file
diff --git a/inc/3rdparty/site_config/standard/version.php b/inc/3rdparty/site_config/standard/version.php
deleted file mode 100644
index e61807ed..00000000
--- a/inc/3rdparty/site_config/standard/version.php
+++ /dev/null
@@ -1,2 +0,0 @@
1<?php
2return 1; \ No newline at end of file
diff --git a/inc/poche/Database.class.php b/inc/poche/Database.class.php
index 84916b83..4d664992 100644
--- a/inc/poche/Database.class.php
+++ b/inc/poche/Database.class.php
@@ -60,11 +60,15 @@ class Database {
60 $id_user = intval($this->getLastId($sequence)); 60 $id_user = intval($this->getLastId($sequence));
61 61
62 $sql = 'INSERT INTO users_config ( user_id, name, value ) VALUES (?, ?, ?)'; 62 $sql = 'INSERT INTO users_config ( user_id, name, value ) VALUES (?, ?, ?)';
63 $params = array($id_user, 'pager', '10'); 63 $params = array($id_user, 'pager', PAGINATION);
64 $query = $this->executeQuery($sql, $params); 64 $query = $this->executeQuery($sql, $params);
65 65
66 $sql = 'INSERT INTO users_config ( user_id, name, value ) VALUES (?, ?, ?)'; 66 $sql = 'INSERT INTO users_config ( user_id, name, value ) VALUES (?, ?, ?)';
67 $params = array($id_user, 'language', 'en_EN.UTF8'); 67 $params = array($id_user, 'language', LANG);
68 $query = $this->executeQuery($sql, $params);
69
70 $sql = 'INSERT INTO users_config ( user_id, name, value ) VALUES (?, ?, ?)';
71 $params = array($id_user, 'theme', DEFAULT_THEME);
68 $query = $this->executeQuery($sql, $params); 72 $query = $this->executeQuery($sql, $params);
69 73
70 return TRUE; 74 return TRUE;
@@ -101,10 +105,16 @@ class Database {
101 return $user; 105 return $user;
102 } 106 }
103 107
104 public function updatePassword($id, $password) 108 public function updatePassword($userId, $password)
105 { 109 {
106 $sql_update = "UPDATE users SET password=? WHERE id=?"; 110 $sql_update = "UPDATE users SET password=? WHERE id=?";
107 $params_update = array($password, $id); 111 $params_update = array($password, $id);
112 $this->updateUserConfig($userId, 'password', $password);
113 }
114
115 public function updateUserConfig($userId, $key, $value) {
116 $sql_update = "UPDATE users_config SET `value`=? WHERE `user_id`=? AND `name`=?";
117 $params_update = array($value, $userId, $key);
108 $query = $this->executeQuery($sql_update, $params_update); 118 $query = $this->executeQuery($sql_update, $params_update);
109 } 119 }
110 120
diff --git a/inc/poche/Poche.class.php b/inc/poche/Poche.class.php
index 646193f7..18860ddc 100644
--- a/inc/poche/Poche.class.php
+++ b/inc/poche/Poche.class.php
@@ -10,77 +10,200 @@
10 10
11class Poche 11class Poche
12{ 12{
13 public static $canRenderTemplates = true;
14 public static $configFileAvailable = true;
15
13 public $user; 16 public $user;
14 public $store; 17 public $store;
15 public $tpl; 18 public $tpl;
16 public $messages; 19 public $messages;
17 public $pagination; 20 public $pagination;
18 21
19 function __construct() 22 private $currentTheme = '';
23 private $notInstalledMessage = '';
24
25 # @todo make this dynamic (actually install themes and save them in the database including author information et cetera)
26 private $installedThemes = array(
27 'default' => array('requires' => array()),
28 'dark' => array('requires' => array('default')),
29 'dmagenta' => array('requires' => array('default')),
30 'solarized' => array('requires' => array('default')),
31 'solarized-dark' => array('requires' => array('default'))
32 );
33
34 public function __construct()
20 { 35 {
36 if (! $this->configFileIsAvailable()) {
37 return;
38 }
39
40 $this->init();
41
42 if (! $this->themeIsInstalled()) {
43 return;
44 }
45
21 $this->initTpl(); 46 $this->initTpl();
22 if (!$this->checkBeforeInstall()) { 47
23 exit; 48 if (! $this->systemIsInstalled()) {
49 return;
24 } 50 }
51
25 $this->store = new Database(); 52 $this->store = new Database();
26 $this->init();
27 $this->messages = new Messages(); 53 $this->messages = new Messages();
28 54
29 # installation 55 # installation
30 if(!$this->store->isInstalled()) 56 if (! $this->store->isInstalled()) {
31 {
32 $this->install(); 57 $this->install();
33 } 58 }
34 } 59 }
60
61 private function init()
62 {
63 Tools::initPhp();
64 Session::$sessionName = 'poche';
65 Session::init();
35 66
67 if (isset($_SESSION['poche_user']) && $_SESSION['poche_user'] != array()) {
68 $this->user = $_SESSION['poche_user'];
69 } else {
70 # fake user, just for install & login screens
71 $this->user = new User();
72 $this->user->setConfig($this->getDefaultConfig());
73 }
74
75 # l10n
76 $language = $this->user->getConfigValue('language');
77 putenv('LC_ALL=' . $language);
78 setlocale(LC_ALL, $language);
79 bindtextdomain($language, LOCALE);
80 textdomain($language);
81
82 # Pagination
83 $this->pagination = new Paginator($this->user->getConfigValue('pager'), 'p');
84
85 # Set up theme
86 $themeDirectory = $this->user->getConfigValue('theme');
87
88 if ($themeDirectory === false) {
89 $themeDirectory = DEFAULT_THEME;
90 }
91
92 $this->currentTheme = $themeDirectory;
93 }
94
95 public function configFileIsAvailable() {
96 if (! self::$configFileAvailable) {
97 $this->notInstalledMessage = 'You have to rename <strong>inc/poche/config.inc.php.new</strong> to <strong>inc/poche/config.inc.php</strong>.';
98
99 return false;
100 }
101
102 return true;
103 }
104
105 public function themeIsInstalled() {
106 # Twig is an absolute requirement for Poche to function. Abort immediately if the Composer installer hasn't been run yet
107 if (! self::$canRenderTemplates) {
108 $this->notInstalledMessage = 'Twig does not seem to be installed. Please initialize the Composer installation to automatically fetch dependencies. Have a look at <a href="http://inthepoche.com/?pages/Documentation">the documentation.</a>';
109
110 return false;
111 }
112
113 # Check if the selected theme and its requirements are present
114 if (! is_dir(THEME . '/' . $this->getTheme())) {
115 $this->notInstalledMessage = 'The currently selected theme (' . $this->getTheme() . ') does not seem to be properly installed (Missing directory: ' . THEME . '/' . $this->getTheme() . ')';
116
117 self::$canRenderTemplates = false;
118
119 return false;
120 }
121
122 foreach ($this->installedThemes[$this->getTheme()]['requires'] as $requiredTheme) {
123 if (! is_dir(THEME . '/' . $requiredTheme)) {
124 $this->notInstalledMessage = 'The required "' . $requiredTheme . '" theme is missing for the current theme (' . $this->getTheme() . ')';
125
126 self::$canRenderTemplates = false;
127
128 return false;
129 }
130 }
131
132 return true;
133 }
134
36 /** 135 /**
37 * all checks before installation. 136 * all checks before installation.
137 * @todo move HTML to template
38 * @return boolean 138 * @return boolean
39 */ 139 */
40 private function checkBeforeInstall() 140 public function systemIsInstalled()
41 { 141 {
42 $msg = ''; 142 $msg = '';
43 $allIsGood = TRUE; 143
44 144 $configSalt = defined('SALT') ? constant('SALT') : '';
45 if (!is_writable(CACHE)) { 145
146 if (empty($configSalt)) {
147 $msg = '<h1>error</h1><p>You have not yet filled in the SALT value in the config.inc.php file.</p>';
148 } else if (! is_writable(CACHE)) {
46 Tools::logm('you don\'t have write access on cache directory'); 149 Tools::logm('you don\'t have write access on cache directory');
47 die('You don\'t have write access on cache directory.'); 150 $msg = '<h1>error</h1><p>You don\'t have write access on cache directory.</p>';
48 } 151 } else if (STORAGE == 'sqlite' && ! file_exists(STORAGE_SQLITE)) {
49 else if (file_exists('./install/update.php') && !DEBUG_POCHE) { 152 Tools::logm('sqlite file doesn\'t exist');
153 $msg = '<h1>error</h1><p>sqlite file doesn\'t exist, you can find it in install folder. Copy it in /db folder.</p>';
154 } else if (file_exists(ROOT . '/install/update.php') && ! DEBUG_POCHE) {
50 $msg = '<h1>setup</h1><p><strong>It\'s your first time here?</strong> Please copy /install/poche.sqlite in db folder. Then, delete install folder.<br /><strong>If you have already installed poche</strong>, an update is needed <a href="install/update.php">by clicking here</a>.</p>'; 155 $msg = '<h1>setup</h1><p><strong>It\'s your first time here?</strong> Please copy /install/poche.sqlite in db folder. Then, delete install folder.<br /><strong>If you have already installed poche</strong>, an update is needed <a href="install/update.php">by clicking here</a>.</p>';
51 $allIsGood = FALSE; 156 } else if (is_dir(ROOT . '/install') && ! DEBUG_POCHE) {
52 }
53 else if (file_exists('./install') && !DEBUG_POCHE) {
54 $msg = '<h1>setup</h1><p><strong>If you want to update your poche</strong>, you just have to delete /install folder. <br /><strong>To install your poche with sqlite</strong>, copy /install/poche.sqlite in /db and delete the folder /install. you have to delete the /install folder before using poche.</p>'; 157 $msg = '<h1>setup</h1><p><strong>If you want to update your poche</strong>, you just have to delete /install folder. <br /><strong>To install your poche with sqlite</strong>, copy /install/poche.sqlite in /db and delete the folder /install. you have to delete the /install folder before using poche.</p>';
55 $allIsGood = FALSE; 158 } else if (STORAGE == 'sqlite' && ! is_writable(STORAGE_SQLITE)) {
56 }
57 else if (STORAGE == 'sqlite' && !is_writable(STORAGE_SQLITE)) {
58 Tools::logm('you don\'t have write access on sqlite file'); 159 Tools::logm('you don\'t have write access on sqlite file');
59 $msg = '<h1>error</h1><p>You don\'t have write access on sqlite file.</p>'; 160 $msg = '<h1>error</h1><p>You don\'t have write access on sqlite file.</p>';
60 $allIsGood = FALSE;
61 } 161 }
62 162
63 if (!$allIsGood) { 163 if (! empty($msg)) {
64 echo $this->tpl->render('error.twig', array( 164 $this->notInstalledMessage = $msg;
65 'msg' => $msg 165
66 )); 166 return false;
67 } 167 }
68 168
69 return $allIsGood; 169 return true;
170 }
171
172 public function getNotInstalledMessage() {
173 return $this->notInstalledMessage;
70 } 174 }
71 175
72 private function initTpl() 176 private function initTpl()
73 { 177 {
74 # template engine 178 $loaderChain = new Twig_Loader_Chain();
75 $loader = new Twig_Loader_Filesystem(TPL); 179
180 # add the current theme as first to the loader chain so Twig will look there first for overridden template files
181 try {
182 $loaderChain->addLoader(new Twig_Loader_Filesystem(THEME . '/' . $this->getTheme()));
183 } catch (Twig_Error_Loader $e) {
184 # @todo isInstalled() should catch this, inject Twig later
185 die('The currently selected theme (' . $this->getTheme() . ') does not seem to be properly installed (' . THEME . '/' . $this->getTheme() .' is missing)');
186 }
187
188 # add all required themes to the loader chain
189 foreach ($this->installedThemes[$this->getTheme()]['requires'] as $requiredTheme) {
190 try {
191 $loaderChain->addLoader(new Twig_Loader_Filesystem(THEME . '/' . DEFAULT_THEME));
192 } catch (Twig_Error_Loader $e) {
193 # @todo isInstalled() should catch this, inject Twig later
194 die('The required "' . $requiredTheme . '" theme is missing for the current theme (' . $this->getTheme() . ')');
195 }
196 }
197
76 if (DEBUG_POCHE) { 198 if (DEBUG_POCHE) {
77 $twig_params = array(); 199 $twig_params = array();
78 } 200 } else {
79 else {
80 $twig_params = array('cache' => CACHE); 201 $twig_params = array('cache' => CACHE);
81 } 202 }
82 $this->tpl = new Twig_Environment($loader, $twig_params); 203
204 $this->tpl = new Twig_Environment($loaderChain, $twig_params);
83 $this->tpl->addExtension(new Twig_Extensions_Extension_I18n()); 205 $this->tpl->addExtension(new Twig_Extensions_Extension_I18n());
206
84 # filter to display domain name of an url 207 # filter to display domain name of an url
85 $filter = new Twig_SimpleFilter('getDomain', 'Tools::getDomain'); 208 $filter = new Twig_SimpleFilter('getDomain', 'Tools::getDomain');
86 $this->tpl->addFilter($filter); 209 $this->tpl->addFilter($filter);
@@ -88,38 +211,19 @@ class Poche
88 # filter for reading time 211 # filter for reading time
89 $filter = new Twig_SimpleFilter('getReadingTime', 'Tools::getReadingTime'); 212 $filter = new Twig_SimpleFilter('getReadingTime', 'Tools::getReadingTime');
90 $this->tpl->addFilter($filter); 213 $this->tpl->addFilter($filter);
91 } 214
92 215 # filter for simple filenames in config view
93 private function init() 216 $filter = new Twig_SimpleFilter('getPrettyFilename', function($string) { return str_replace(ROOT, '', $string); });
94 { 217 $this->tpl->addFilter($filter);
95 Tools::initPhp();
96 Session::init();
97
98 if (isset($_SESSION['poche_user']) && $_SESSION['poche_user'] != array()) {
99 $this->user = $_SESSION['poche_user'];
100 }
101 else {
102 # fake user, just for install & login screens
103 $this->user = new User();
104 $this->user->setConfig($this->getDefaultConfig());
105 }
106
107 # l10n
108 $language = $this->user->getConfigValue('language');
109 putenv('LC_ALL=' . $language);
110 setlocale(LC_ALL, $language);
111 bindtextdomain($language, LOCALE);
112 textdomain($language);
113
114 # Pagination
115 $this->pagination = new Paginator($this->user->getConfigValue('pager'), 'p');
116 } 218 }
117 219
118 private function install() 220 private function install()
119 { 221 {
120 Tools::logm('poche still not installed'); 222 Tools::logm('poche still not installed');
121 echo $this->tpl->render('install.twig', array( 223 echo $this->tpl->render('install.twig', array(
122 'token' => Session::getToken() 224 'token' => Session::getToken(),
225 'theme' => $this->getTheme(),
226 'poche_url' => Tools::getPocheUrl()
123 )); 227 ));
124 if (isset($_GET['install'])) { 228 if (isset($_GET['install'])) {
125 if (($_POST['password'] == $_POST['password_repeat']) 229 if (($_POST['password'] == $_POST['password_repeat'])
@@ -139,13 +243,41 @@ class Poche
139 } 243 }
140 exit(); 244 exit();
141 } 245 }
246
247 public function getTheme() {
248 return $this->currentTheme;
249 }
250
251 public function getInstalledThemes() {
252 $handle = opendir(THEME);
253 $themes = array();
254
255 while (($theme = readdir($handle)) !== false) {
256 # Themes are stored in a directory, so all directory names are themes
257 # @todo move theme installation data to database
258 if (! is_dir(THEME . '/' . $theme) || in_array($theme, array('..', '.'))) {
259 continue;
260 }
261
262 $current = false;
263
264 if ($theme === $this->getTheme()) {
265 $current = true;
266 }
267
268 $themes[] = array('name' => $theme, 'current' => $current);
269 }
270
271 return $themes;
272 }
142 273
143 public function getDefaultConfig() 274 public function getDefaultConfig()
144 { 275 {
145 return array( 276 return array(
146 'pager' => PAGINATION, 277 'pager' => PAGINATION,
147 'language' => LANG, 278 'language' => LANG,
148 ); 279 'theme' => DEFAULT_THEME
280 );
149 } 281 }
150 282
151 /** 283 /**
@@ -166,7 +298,7 @@ class Poche
166 } 298 }
167 $last_id = $this->store->getLastId($sequence); 299 $last_id = $this->store->getLastId($sequence);
168 if (DOWNLOAD_PICTURES) { 300 if (DOWNLOAD_PICTURES) {
169 $content = filtre_picture($parametres_url['body'], $url->getUrl(), $last_id); 301 $content = filtre_picture($content['body'], $url->getUrl(), $last_id);
170 Tools::logm('updating content article'); 302 Tools::logm('updating content article');
171 $this->store->updateContent($last_id, $content, $this->user->getId()); 303 $this->store->updateContent($last_id, $content, $this->user->getId());
172 } 304 }
@@ -182,7 +314,7 @@ class Poche
182 } 314 }
183 315
184 if (!$import) { 316 if (!$import) {
185 Tools::redirect(); 317 Tools::redirect('?view=home');
186 } 318 }
187 break; 319 break;
188 case 'delete': 320 case 'delete':
@@ -230,7 +362,9 @@ class Poche
230 $prod = $this->getPocheVersion('prod'); 362 $prod = $this->getPocheVersion('prod');
231 $compare_dev = version_compare(POCHE_VERSION, $dev); 363 $compare_dev = version_compare(POCHE_VERSION, $dev);
232 $compare_prod = version_compare(POCHE_VERSION, $prod); 364 $compare_prod = version_compare(POCHE_VERSION, $prod);
365 $themes = $this->getInstalledThemes();
233 $tpl_vars = array( 366 $tpl_vars = array(
367 'themes' => $themes,
234 'dev' => $dev, 368 'dev' => $dev,
235 'prod' => $prod, 369 'prod' => $prod,
236 'compare_dev' => $compare_dev, 370 'compare_dev' => $compare_dev,
@@ -247,25 +381,37 @@ class Poche
247 $tidy = tidy_parse_string($content, array('indent'=>true, 'show-body-only' => true), 'UTF8'); 381 $tidy = tidy_parse_string($content, array('indent'=>true, 'show-body-only' => true), 'UTF8');
248 $tidy->cleanRepair(); 382 $tidy->cleanRepair();
249 $content = $tidy->value; 383 $content = $tidy->value;
250 } 384
251 $tpl_vars = array( 385 # flattr checking
386 $flattr = new FlattrItem();
387 $flattr->checkItem($entry['url']);
388
389 $tpl_vars = array(
252 'entry' => $entry, 390 'entry' => $entry,
253 'content' => $content, 391 'content' => $content,
254 ); 392 'flattr' => $flattr
393 );
394 }
255 } 395 }
256 else { 396 else {
257 Tools::logm('error in view call : entry is null'); 397 Tools::logm('error in view call : entry is null');
258 } 398 }
259 break; 399 break;
260 default: # home view 400 default: # home, favorites and archive views
261 $entries = $this->store->getEntriesByView($view, $this->user->getId()); 401 $entries = $this->store->getEntriesByView($view, $this->user->getId());
262 $this->pagination->set_total(count($entries));
263 $page_links = $this->pagination->page_links('?view=' . $view . '&sort=' . $_SESSION['sort'] . '&');
264 $datas = $this->store->getEntriesByView($view, $this->user->getId(), $this->pagination->get_limit());
265 $tpl_vars = array( 402 $tpl_vars = array(
266 'entries' => $datas, 403 'entries' => '',
267 'page_links' => $page_links, 404 'page_links' => '',
405 'nb_results' => '',
268 ); 406 );
407 if (count($entries) > 0) {
408 $this->pagination->set_total(count($entries));
409 $page_links = $this->pagination->page_links('?view=' . $view . '&sort=' . $_SESSION['sort'] . '&');
410 $datas = $this->store->getEntriesByView($view, $this->user->getId(), $this->pagination->get_limit());
411 $tpl_vars['entries'] = $datas;
412 $tpl_vars['page_links'] = $page_links;
413 $tpl_vars['nb_results'] = count($entries);
414 }
269 Tools::logm('display ' . $view . ' view'); 415 Tools::logm('display ' . $view . ' view');
270 break; 416 break;
271 } 417 }
@@ -303,6 +449,44 @@ class Poche
303 } 449 }
304 } 450 }
305 } 451 }
452
453 public function updateTheme()
454 {
455 # no data
456 if (empty($_POST['theme'])) {
457 }
458
459 # we are not going to change it to the current theme...
460 if ($_POST['theme'] == $this->getTheme()) {
461 $this->messages->add('w', _('still using the "' . $this->getTheme() . '" theme!'));
462 Tools::redirect('?view=config');
463 }
464
465 $themes = $this->getInstalledThemes();
466 $actualTheme = false;
467
468 foreach ($themes as $theme) {
469 if ($theme['name'] == $_POST['theme']) {
470 $actualTheme = true;
471 break;
472 }
473 }
474
475 if (! $actualTheme) {
476 $this->messages->add('e', _('that theme does not seem to be installed'));
477 Tools::redirect('?view=config');
478 }
479
480 $this->store->updateUserConfig($this->user->getId(), 'theme', $_POST['theme']);
481 $this->messages->add('s', _('you have changed your theme preferences'));
482
483 $currentConfig = $_SESSION['poche_user']->config;
484 $currentConfig['theme'] = $_POST['theme'];
485
486 $_SESSION['poche_user']->setConfig($currentConfig);
487
488 Tools::redirect('?view=config');
489 }
306 490
307 /** 491 /**
308 * checks if login & password are correct and save the user in session. 492 * checks if login & password are correct and save the user in session.
@@ -318,16 +502,7 @@ class Poche
318 if ($user != array()) { 502 if ($user != array()) {
319 # Save login into Session 503 # Save login into Session
320 Session::login($user['username'], $user['password'], $_POST['login'], Tools::encodeString($_POST['password'] . $_POST['login']), array('poche_user' => new User($user))); 504 Session::login($user['username'], $user['password'], $_POST['login'], Tools::encodeString($_POST['password'] . $_POST['login']), array('poche_user' => new User($user)));
321
322 $this->messages->add('s', _('welcome to your poche')); 505 $this->messages->add('s', _('welcome to your poche'));
323 if (!empty($_POST['longlastingsession'])) {
324 $_SESSION['longlastingsession'] = 31536000;
325 $_SESSION['expires_on'] = time() + $_SESSION['longlastingsession'];
326 session_set_cookie_params($_SESSION['longlastingsession']);
327 } else {
328 session_set_cookie_params(0);
329 }
330 session_regenerate_id(true);
331 Tools::logm('login successful'); 506 Tools::logm('login successful');
332 Tools::redirect($referer); 507 Tools::redirect($referer);
333 } 508 }
diff --git a/inc/poche/PocheReadability.php b/inc/poche/PocheReadability.php
new file mode 100644
index 00000000..48ae90d0
--- /dev/null
+++ b/inc/poche/PocheReadability.php
@@ -0,0 +1,46 @@
1<?php
2
3class PocheReadability extends Readability
4{
5 /**
6 * Get the article title as an H1.
7 *
8 * @return DOMElement
9 */
10 protected function getArticleTitle() {
11 $curTitle = '';
12 $origTitle = '';
13
14 try {
15 $curTitle = $origTitle = $this->getInnerText($this->dom->getElementsByTagName('title')->item(0));
16 } catch(Exception $e) {}
17
18 if (preg_match('/ [\|\-] /', $curTitle))
19 {
20 $curTitle = preg_replace('/(.*)[\|\-] .*/i', '$1', $origTitle);
21
22 if (count(explode(' ', $curTitle)) < 3) {
23 $curTitle = preg_replace('/[^\|\-]*[\|\-](.*)/i', '$1', $origTitle);
24 }
25 }
26 else if(strlen($curTitle) > 150 || strlen($curTitle) < 15)
27 {
28 $hOnes = $this->dom->getElementsByTagName('h1');
29 if($hOnes->length == 1)
30 {
31 $curTitle = $this->getInnerText($hOnes->item(0));
32 }
33 }
34
35 $curTitle = trim($curTitle);
36
37 if (count(explode(' ', $curTitle)) <= 4) {
38 $curTitle = $origTitle;
39 }
40
41 $articleTitle = $this->dom->createElement('h1');
42 $articleTitle->innerHTML = $curTitle;
43
44 return $articleTitle;
45 }
46} \ No newline at end of file
diff --git a/inc/poche/Tools.class.php b/inc/poche/Tools.class.php
index 3a792d43..8eb988f4 100644
--- a/inc/poche/Tools.class.php
+++ b/inc/poche/Tools.class.php
@@ -84,9 +84,9 @@ class Tools
84 84
85 public static function getTplFile($view) 85 public static function getTplFile($view)
86 { 86 {
87 $tpl_file = 'home.twig'; 87 $default_tpl = 'home.twig';
88 switch ($view) 88
89 { 89 switch ($view) {
90 case 'install': 90 case 'install':
91 $tpl_file = 'install.twig'; 91 $tpl_file = 'install.twig';
92 break; 92 break;
@@ -102,9 +102,20 @@ class Tools
102 case 'view': 102 case 'view':
103 $tpl_file = 'view.twig'; 103 $tpl_file = 'view.twig';
104 break; 104 break;
105
106 case 'login':
107 $tpl_file = 'login.twig';
108 break;
109
110 case 'error':
111 $tpl_file = 'error.twig';
112 break;
113
105 default: 114 default:
106 break; 115 $tpl_file = $default_tpl;
116 break;
107 } 117 }
118
108 return $tpl_file; 119 return $tpl_file;
109 } 120 }
110 121
@@ -228,24 +239,8 @@ class Tools
228 return $minutes; 239 return $minutes;
229 } 240 }
230 241
231 242 public static function getDocLanguage($userlanguage) {
232 public static function createMyConfig() 243 $lang = explode('.', $userlanguage);
233 { 244 return str_replace('_', '-', $lang[0]);
234 $myconfig_file = './inc/poche/myconfig.inc.php';
235
236 if (!is_writable('./inc/poche/')) {
237 self::logm('you don\'t have write access to create ./inc/poche/myconfig.inc.php');
238 die('You don\'t have write access to create ./inc/poche/myconfig.inc.php.');
239 }
240
241 if (!file_exists($myconfig_file))
242 {
243 $fp = fopen($myconfig_file, 'w');
244 fwrite($fp, '<?php'."\r\n");
245 fwrite($fp, "define ('POCHE_VERSION', '1.0-beta4');" . "\r\n");
246 fwrite($fp, "define ('SALT', '" . md5(time() . $_SERVER['SCRIPT_FILENAME'] . rand()) . "');" . "\r\n");
247 fwrite($fp, "define ('LANG', 'en_EN.utf8');" . "\r\n");
248 fclose($fp);
249 }
250 } 245 }
251} \ No newline at end of file 246} \ No newline at end of file
diff --git a/inc/poche/Url.class.php b/inc/poche/Url.class.php
index 5a893014..600a2166 100644
--- a/inc/poche/Url.class.php
+++ b/inc/poche/Url.class.php
@@ -354,7 +354,7 @@ class Url
354 } 354 }
355 if (isset($splink)) { 355 if (isset($splink)) {
356 // Build DOM tree from HTML 356 // Build DOM tree from HTML
357 $readability = new Readability($html, $url); 357 $readability = new PocheReadability($html, $url);
358 $xpath = new DOMXPath($readability->dom); 358 $xpath = new DOMXPath($readability->dom);
359 // Loop through single_page_link xpath expressions 359 // Loop through single_page_link xpath expressions
360 $single_page_url = null; 360 $single_page_url = null;
diff --git a/inc/poche/config.inc.php b/inc/poche/config.inc.php
deleted file mode 100755
index a1917295..00000000
--- a/inc/poche/config.inc.php
+++ /dev/null
@@ -1,59 +0,0 @@
1<?php
2/**
3 * poche, a read it later open source system
4 *
5 * @category poche
6 * @author Nicolas LÅ“uillet <nicolas@loeuillet.org>
7 * @copyright 2013
8 * @license http://www.wtfpl.net/ see COPYING file
9 */
10
11require_once __DIR__ . '/../../inc/poche/define.inc.php';
12
13# /!\ Be careful if you change the lines below /!\
14if (!file_exists(__DIR__ . '/../../vendor/autoload.php')) {
15 die('Twig does not seem installed. Have a look at <a href="http://inthepoche.com/?pages/Documentation">the documentation.</a>');
16}
17
18// if (file_exists(__DIR__ . '/../../inc/poche/myconfig.inc.php')) {
19 // require_once __DIR__ . '/../../inc/poche/myconfig.inc.php';
20// }
21require_once __DIR__ . '/../../inc/poche/User.class.php';
22require_once __DIR__ . '/../../inc/poche/Url.class.php';
23require_once __DIR__ . '/../../inc/3rdparty/class.messages.php';
24require_once __DIR__ . '/../../inc/poche/Poche.class.php';
25require_once __DIR__ . '/../../inc/3rdparty/Readability.php';
26require_once __DIR__ . '/../../inc/3rdparty/Encoding.php';
27require_once __DIR__ . '/../../inc/poche/Database.class.php';
28require_once __DIR__ . '/../../vendor/autoload.php';
29require_once __DIR__ . '/../../inc/3rdparty/simple_html_dom.php';
30require_once __DIR__ . '/../../inc/3rdparty/paginator.php';
31require_once __DIR__ . '/../../inc/3rdparty/Session.class.php';
32
33require_once __DIR__ . '/../../inc/3rdparty/simplepie/SimplePieAutoloader.php';
34require_once __DIR__ . '/../../inc/3rdparty/simplepie/SimplePie/Core.php';
35require_once __DIR__ . '/../../inc/3rdparty/content-extractor/ContentExtractor.php';
36require_once __DIR__ . '/../../inc/3rdparty/content-extractor/SiteConfig.php';
37require_once __DIR__ . '/../../inc/3rdparty/humble-http-agent/HumbleHttpAgent.php';
38require_once __DIR__ . '/../../inc/3rdparty/humble-http-agent/SimplePie_HumbleHttpAgent.php';
39require_once __DIR__ . '/../../inc/3rdparty/humble-http-agent/CookieJar.php';
40require_once __DIR__ . '/../../inc/3rdparty/feedwriter/FeedItem.php';
41require_once __DIR__ . '/../../inc/3rdparty/feedwriter/FeedWriter.php';
42require_once __DIR__ . '/../../inc/3rdparty/feedwriter/DummySingleItemFeed.php';
43
44if (DOWNLOAD_PICTURES) {
45 require_once __DIR__ . '/../../inc/poche/pochePictures.php';
46}
47
48if (!ini_get('date.timezone') || !@date_default_timezone_set(ini_get('date.timezone'))) {
49 date_default_timezone_set('UTC');
50}
51
52$poche = new Poche();
53#XSRF protection with token
54// if (!empty($_POST)) {
55// if (!Session::isToken($_POST['token'])) {
56// die(_('Wrong token'));
57// }
58// unset($_SESSION['tokens']);
59// } \ No newline at end of file
diff --git a/inc/poche/config.inc.php.new b/inc/poche/config.inc.php.new
new file mode 100755
index 00000000..48cc5783
--- /dev/null
+++ b/inc/poche/config.inc.php.new
@@ -0,0 +1,56 @@
1<?php
2/**
3 * poche, a read it later open source system
4 *
5 * @category poche
6 * @author Nicolas LÅ“uillet <support@inthepoche.com>
7 * @copyright 2013
8 * @license http://www.wtfpl.net/ see COPYING file
9 */
10
11define ('SALT', ''); # put a strong string here
12define ('LANG', 'en_EN.utf8');
13
14define ('STORAGE', 'sqlite'); # postgres, mysql or sqlite
15
16define ('STORAGE_SQLITE', ROOT . '/db/poche.sqlite'); # if you are using sqlite, where the database file is located
17
18# only for postgres & mysql
19define ('STORAGE_SERVER', 'localhost');
20define ('STORAGE_DB', 'poche');
21define ('STORAGE_USER', 'poche');
22define ('STORAGE_PASSWORD', 'poche');
23
24#################################################################################
25# Do not trespass unless you know what you are doing
26#################################################################################
27
28define ('MODE_DEMO', FALSE);
29define ('DEBUG_POCHE', true);
30define ('DOWNLOAD_PICTURES', FALSE);
31define ('CONVERT_LINKS_FOOTNOTES', FALSE);
32define ('REVERT_FORCED_PARAGRAPH_ELEMENTS', FALSE);
33define ('SHARE_TWITTER', TRUE);
34define ('SHARE_MAIL', TRUE);
35define ('SHARE_SHAARLI', FALSE);
36define ('SHAARLI_URL', 'http://myshaarliurl.com');
37define ('FLATTR', TRUE);
38define ('FLATTR_API', 'https://api.flattr.com/rest/v2/things/lookup/?url=');
39define ('NOT_FLATTRABLE', '0');
40define ('FLATTRABLE', '1');
41define ('FLATTRED', '2');
42define ('ABS_PATH', 'assets/');
43
44define ('DEFAULT_THEME', 'default');
45
46define ('THEME', ROOT . '/themes');
47define ('LOCALE', ROOT . '/locale');
48define ('CACHE', ROOT . '/cache');
49
50define ('PAGINATION', '10');
51
52define ('POCHE_VERSION', '1.0-beta5');
53
54define ('IMPORT_POCKET_FILE', ROOT . '/ril_export.html');
55define ('IMPORT_READABILITY_FILE', ROOT . '/readability');
56define ('IMPORT_INSTAPAPER_FILE', ROOT . '/instapaper-export.html'); \ No newline at end of file
diff --git a/inc/poche/define.inc.php b/inc/poche/define.inc.php
index 3f667430..40f77b5c 100644
--- a/inc/poche/define.inc.php
+++ b/inc/poche/define.inc.php
@@ -3,7 +3,7 @@
3 * poche, a read it later open source system 3 * poche, a read it later open source system
4 * 4 *
5 * @category poche 5 * @category poche
6 * @author Nicolas LÅ“uillet <nicolas@loeuillet.org> 6 * @author Nicolas LÅ“uillet <support@inthepoche.com>
7 * @copyright 2013 7 * @copyright 2013
8 * @license http://www.wtfpl.net/ see COPYING file 8 * @license http://www.wtfpl.net/ see COPYING file
9 */ 9 */
@@ -22,6 +22,11 @@ define ('SHARE_TWITTER', TRUE);
22define ('SHARE_MAIL', TRUE); 22define ('SHARE_MAIL', TRUE);
23define ('SHARE_SHAARLI', FALSE); 23define ('SHARE_SHAARLI', FALSE);
24define ('SHAARLI_URL', 'http://myshaarliurl.com'); 24define ('SHAARLI_URL', 'http://myshaarliurl.com');
25define ('FLATTR', TRUE);
26define ('FLATTR_API', 'https://api.flattr.com/rest/v2/things/lookup/?url=');
27define ('NOT_FLATTRABLE', '0');
28define ('FLATTRABLE', '1');
29define ('FLATTRED', '2');
25define ('ABS_PATH', 'assets/'); 30define ('ABS_PATH', 'assets/');
26define ('TPL', __DIR__ . '/../../tpl'); 31define ('TPL', __DIR__ . '/../../tpl');
27define ('LOCALE', __DIR__ . '/../../locale'); 32define ('LOCALE', __DIR__ . '/../../locale');
diff --git a/inc/poche/global.inc.php b/inc/poche/global.inc.php
new file mode 100644
index 00000000..65a026a7
--- /dev/null
+++ b/inc/poche/global.inc.php
@@ -0,0 +1,64 @@
1<?php
2/**
3 * poche, a read it later open source system
4 *
5 * @category poche
6 * @author Nicolas LÅ“uillet <support@inthepoche.com>
7 * @copyright 2013
8 * @license http://www.wtfpl.net/ see COPYING file
9 */
10
11# the poche system root directory (/inc)
12define('INCLUDES', dirname(__FILE__) . '/..');
13
14# the poche root directory
15define('ROOT', INCLUDES . '/..');
16
17require_once INCLUDES . '/poche/Tools.class.php';
18require_once INCLUDES . '/poche/User.class.php';
19require_once INCLUDES . '/poche/Url.class.php';
20require_once INCLUDES . '/3rdparty/class.messages.php';
21require_once INCLUDES . '/poche/Poche.class.php';
22
23require_once INCLUDES . '/3rdparty/Readability.php';
24require_once INCLUDES . '/poche/PocheReadability.php';
25
26require_once INCLUDES . '/3rdparty/Encoding.php';
27require_once INCLUDES . '/poche/Database.class.php';
28require_once INCLUDES . '/3rdparty/simple_html_dom.php';
29require_once INCLUDES . '/3rdparty/paginator.php';
30require_once INCLUDES . '/3rdparty/Session.class.php';
31
32require_once INCLUDES . '/3rdparty/simplepie/SimplePieAutoloader.php';
33require_once INCLUDES . '/3rdparty/simplepie/SimplePie/Core.php';
34require_once INCLUDES . '/3rdparty/content-extractor/ContentExtractor.php';
35require_once INCLUDES . '/3rdparty/content-extractor/SiteConfig.php';
36require_once INCLUDES . '/3rdparty/humble-http-agent/HumbleHttpAgent.php';
37require_once INCLUDES . '/3rdparty/humble-http-agent/SimplePie_HumbleHttpAgent.php';
38require_once INCLUDES . '/3rdparty/humble-http-agent/CookieJar.php';
39require_once INCLUDES . '/3rdparty/feedwriter/FeedItem.php';
40require_once INCLUDES . '/3rdparty/feedwriter/FeedWriter.php';
41require_once INCLUDES . '/3rdparty/feedwriter/DummySingleItemFeed.php';
42require_once INCLUDES . '/3rdparty/FlattrItem.class.php';
43
44# Composer its autoloader for automatically loading Twig
45if (! file_exists(ROOT . '/vendor/autoload.php')) {
46 Poche::$canRenderTemplates = false;
47} else {
48 require_once ROOT . '/vendor/autoload.php';
49}
50
51# system configuration; database credentials et cetera
52if (! file_exists(INCLUDES . '/poche/config.inc.php')) {
53 Poche::$configFileAvailable = false;
54} else {
55 require_once INCLUDES . '/poche/config.inc.php';
56}
57
58if (Poche::$configFileAvailable && DOWNLOAD_PICTURES) {
59 require_once INCLUDES . '/poche/pochePictures.php';
60}
61
62if (!ini_get('date.timezone') || !@date_default_timezone_set(ini_get('date.timezone'))) {
63 date_default_timezone_set('UTC');
64} \ No newline at end of file
diff --git a/index.php b/index.php
index 5f43b740..4aebfe10 100644
--- a/index.php
+++ b/index.php
@@ -8,13 +8,11 @@
8 * @license http://www.wtfpl.net/ see COPYING file 8 * @license http://www.wtfpl.net/ see COPYING file
9 */ 9 */
10 10
11if (file_exists(__DIR__ . '/inc/poche/myconfig.inc.php')) { 11require_once 'inc/poche/global.inc.php';
12 require_once __DIR__ . '/inc/poche/myconfig.inc.php';
13}
14require_once './inc/poche/Tools.class.php';
15Tools::createMyConfig();
16 12
17include dirname(__FILE__).'/inc/poche/config.inc.php'; 13# Start Poche
14$poche = new Poche();
15$notInstalledMessage = $poche -> getNotInstalledMessage();
18 16
19# Parse GET & REFERER vars 17# Parse GET & REFERER vars
20$referer = empty($_SERVER['HTTP_REFERER']) ? '' : $_SERVER['HTTP_REFERER']; 18$referer = empty($_SERVER['HTTP_REFERER']) ? '' : $_SERVER['HTTP_REFERER'];
@@ -24,42 +22,57 @@ $id = Tools::checkVar('id');
24$_SESSION['sort'] = Tools::checkVar('sort', 'id'); 22$_SESSION['sort'] = Tools::checkVar('sort', 'id');
25$url = new Url((isset ($_GET['url'])) ? $_GET['url'] : ''); 23$url = new Url((isset ($_GET['url'])) ? $_GET['url'] : '');
26 24
25# vars to _always_ send to templates
26$tpl_vars = array(
27 'referer' => $referer,
28 'view' => $view,
29 'poche_url' => Tools::getPocheUrl(),
30 'title' => _('poche, a read it later open source system'),
31 'token' => Session::getToken(),
32 'theme' => $poche->getTheme()
33);
34
35if (! empty($notInstalledMessage)) {
36 if (! Poche::$canRenderTemplates || ! Poche::$configFileAvailable) {
37 # We cannot use Twig to display the error message
38 die($notInstalledMessage);
39 } else {
40 # Twig is installed, put the error message in the template
41 $tpl_file = Tools::getTplFile('error');
42 $tpl_vars = array_merge($tpl_vars, array('msg' => $poche->getNotInstalledMessage()));
43 echo $poche->tpl->render($tpl_file, $tpl_vars);
44 exit;
45 }
46}
47
27# poche actions 48# poche actions
28if (isset($_GET['login'])) { 49if (isset($_GET['login'])) {
29 # hello you 50 # hello you
30 $poche->login($referer); 51 $poche->login($referer);
31} 52} elseif (isset($_GET['logout'])) {
32elseif (isset($_GET['logout'])) {
33 # see you soon ! 53 # see you soon !
34 $poche->logout(); 54 $poche->logout();
35} 55} elseif (isset($_GET['config'])) {
36elseif (isset($_GET['config'])) {
37 # Update password 56 # Update password
38 $poche->updatePassword(); 57 $poche->updatePassword();
39} 58} elseif (isset($_GET['import'])) {
40elseif (isset($_GET['import'])) {
41 $import = $poche->import($_GET['from']); 59 $import = $poche->import($_GET['from']);
42} 60} elseif (isset($_GET['export'])) {
43elseif (isset($_GET['export'])) {
44 $poche->export(); 61 $poche->export();
62} elseif (isset($_GET['updatetheme'])) {
63 $poche->updateTheme();
64}
65elseif (isset($_GET['plainurl']) && !empty($_GET['plainurl'])) {
66 $plain_url = new Url(base64_encode($_GET['plainurl']));
67 $poche->action('add', $plain_url);
45} 68}
46
47# vars to send to templates
48$tpl_vars = array(
49 'referer' => $referer,
50 'view' => $view,
51 'poche_url' => Tools::getPocheUrl(),
52 'title' => _('poche, a read it later open source system'),
53 'token' => Session::getToken(),
54);
55 69
56if (Session::isLogged()) { 70if (Session::isLogged()) {
57 $poche->action($action, $url, $id); 71 $poche->action($action, $url, $id);
58 $tpl_file = Tools::getTplFile($view); 72 $tpl_file = Tools::getTplFile($view);
59 $tpl_vars = array_merge($tpl_vars, $poche->displayView($view, $id)); 73 $tpl_vars = array_merge($tpl_vars, $poche->displayView($view, $id));
60} 74} else {
61else { 75 $tpl_file = Tools::getTplFile('login');
62 $tpl_file = 'login.twig';
63} 76}
64 77
65# because messages can be added in $poche->action(), we have to add this entry now (we can add it before) 78# because messages can be added in $poche->action(), we have to add this entry now (we can add it before)
diff --git a/install/update.php b/install/update.php
index 1deaf7f3..9548d334 100644
--- a/install/update.php
+++ b/install/update.php
@@ -10,7 +10,7 @@ $store = new Database();
10<!--[if lte IE 7]> <html class="no-js ie7 ie67 ie678" lang="en"> <![endif]--> 10<!--[if lte IE 7]> <html class="no-js ie7 ie67 ie678" lang="en"> <![endif]-->
11<!--[if IE 8]> <html class="no-js ie8 ie678" lang="en"> <![endif]--> 11<!--[if IE 8]> <html class="no-js ie8 ie678" lang="en"> <![endif]-->
12<!--[if gt IE 8]><!--> <html class="no-js" lang="en"> <!--<![endif]--> 12<!--[if gt IE 8]><!--> <html class="no-js" lang="en"> <!--<![endif]-->
13<html> 13<html lang="en">
14 <head> 14 <head>
15 <meta charset="utf-8"> 15 <meta charset="utf-8">
16 <title>updating poche</title> 16 <title>updating poche</title>
diff --git a/install/update_to_1beta3.php b/install/update_to_1beta3.php
index 8c93af6d..e0da1590 100644
--- a/install/update_to_1beta3.php
+++ b/install/update_to_1beta3.php
@@ -10,7 +10,7 @@ $old_salt = '464v54gLLw928uz4zUBqkRJeiPY68zCX';
10<!--[if lte IE 7]> <html class="no-js ie7 ie67 ie678" lang="en"> <![endif]--> 10<!--[if lte IE 7]> <html class="no-js ie7 ie67 ie678" lang="en"> <![endif]-->
11<!--[if IE 8]> <html class="no-js ie8 ie678" lang="en"> <![endif]--> 11<!--[if IE 8]> <html class="no-js ie8 ie678" lang="en"> <![endif]-->
12<!--[if gt IE 8]><!--> <html class="no-js" lang="en"> <!--<![endif]--> 12<!--[if gt IE 8]><!--> <html class="no-js" lang="en"> <!--<![endif]-->
13<html> 13<html lang="en">
14 <head> 14 <head>
15 <meta charset="utf-8"> 15 <meta charset="utf-8">
16 <title>updating poche</title> 16 <title>updating poche</title>
diff --git a/locale/de_DE.utf8/LC_MESSAGES/de_DE.utf8.mo b/locale/de_DE.utf8/LC_MESSAGES/de_DE.utf8.mo
index 3afc2b32..54626a55 100644
--- a/locale/de_DE.utf8/LC_MESSAGES/de_DE.utf8.mo
+++ b/locale/de_DE.utf8/LC_MESSAGES/de_DE.utf8.mo
Binary files differ
diff --git a/locale/de_DE.utf8/LC_MESSAGES/de_DE.utf8.po b/locale/de_DE.utf8/LC_MESSAGES/de_DE.utf8.po
index fafe516c..2de43b41 100644
--- a/locale/de_DE.utf8/LC_MESSAGES/de_DE.utf8.po
+++ b/locale/de_DE.utf8/LC_MESSAGES/de_DE.utf8.po
@@ -1,380 +1,229 @@
1#
2# Translators:
3# HLFH <gaspard.dhautefeuille@gmail.com>, 2013
4msgid "" 1msgid ""
5msgstr "" 2msgstr ""
6"Project-Id-Version: poche\n" 3"Project-Id-Version: \n"
7"POT-Creation-Date: 2013-08-06 08:35+0100\n" 4"POT-Creation-Date: \n"
8"PO-Revision-Date: 2013-08-23 17:42+0100\n" 5"PO-Revision-Date: \n"
9"Last-Translator: Nicolas LÅ“uillet <nicolas.loeuillet@gmail.com>\n" 6"Last-Translator: Nicolas LÅ“uillet <nicolas.loeuillet@gmail.com>\n"
10"Language-Team: German (http://www.transifex.com/projects/p/poche/language/" 7"Language-Team: \n"
11"de/)\n"
12"MIME-Version: 1.0\n" 8"MIME-Version: 1.0\n"
13"Content-Type: text/plain; charset=UTF-8\n" 9"Content-Type: text/plain; charset=UTF-8\n"
14"Content-Transfer-Encoding: 8bit\n" 10"Content-Transfer-Encoding: 8bit\n"
15"Language: de\n"
16"Plural-Forms: nplurals=2; plural=(n != 1);\n"
17"X-Generator: Poedit 1.5.4\n" 11"X-Generator: Poedit 1.5.4\n"
18"X-Poedit-Basepath: /\n" 12
19"X-Poedit-KeywordsList: _;gettext;gettext_noop\n"
20"X-Poedit-SourceCharset: UTF-8\n"
21"X-Poedit-SearchPath-0: /var/www/poche-i18n\n"
22
23#: /var/www/poche-i18n/index.php:43
24msgid "poche, a read it later open source system"
25msgstr "Poche, eine Opensourcelösung, um später zu lesen"
26
27#: /var/www/poche-i18n/inc/poche/Poche.class.php:101
28msgid "the link has been added successfully"
29msgstr "der Link wurde erfolgreich hinzugefügt"
30
31#: /var/www/poche-i18n/inc/poche/Poche.class.php:104
32msgid "error during insertion : the link wasn't added"
33msgstr "Fehler beim Einfügen: der Link wurde nicht hinzugefügt"
34
35#: /var/www/poche-i18n/inc/poche/Poche.class.php:109
36msgid "error during fetching content : the link wasn't added"
37msgstr "Fehler beim Abrufen der Inhalte: der Link wurde nicht hinzugefügt"
38
39#: /var/www/poche-i18n/inc/poche/Poche.class.php:119
40msgid "the link has been deleted successfully"
41msgstr "der Link wurde erfolgreich gelöscht"
42
43#: /var/www/poche-i18n/inc/poche/Poche.class.php:123
44msgid "the link wasn't deleted"
45msgstr "der Link wurde nicht gelöscht"
46
47#: /var/www/poche-i18n/inc/poche/Tools.class.php:18
48msgid "Oops, it seems you don't have PHP 5."
49msgstr "Hoppla, scheint es, dass PHP 5 nicht installiert ist."
50
51#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:32
52#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:70
53#: /var/www/poche-i18n/cache/76/a4/e7c21f2e0ba29104fc654cd8ba41.php:50
54msgid "config" 13msgid "config"
55msgstr "Konfig" 14msgstr "Konfig"
56 15
57#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:46 16msgid "Poching a link"
58#: /var/www/poche-i18n/cache/7a/1e/68e6b4aec1301ae024cc85232e7c.php:31
59#: /var/www/poche-i18n/cache/76/a4/e7c21f2e0ba29104fc654cd8ba41.php:26
60#: /var/www/poche-i18n/cache/dd/a8/530129765655dcde0a70a31a78b6.php:34
61msgid "home"
62msgstr "Hause"
63
64#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:54
65#: /var/www/poche-i18n/cache/76/a4/e7c21f2e0ba29104fc654cd8ba41.php:34
66msgid "favorites"
67msgstr "Favoriten"
68
69#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:62
70#: /var/www/poche-i18n/cache/76/a4/e7c21f2e0ba29104fc654cd8ba41.php:42
71msgid "archive"
72msgstr "Archive"
73
74#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:74
75#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:76
76#: /var/www/poche-i18n/cache/76/a4/e7c21f2e0ba29104fc654cd8ba41.php:54
77#: /var/www/poche-i18n/cache/76/a4/e7c21f2e0ba29104fc654cd8ba41.php:56
78msgid "logout"
79msgstr "Trennung"
80
81#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:87
82msgid "Bookmarklet"
83msgstr "Bookmarklet"
84
85#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:91
86msgid ""
87"Thanks to the bookmarklet, you will be able to easily add a link to your "
88"poche."
89msgstr "" 17msgstr ""
90"Mit dem Bookmarklet, können Sie ganz einfach einen Link in Poche hinzufügen."
91 18
92#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:93 19msgid "read the documentation"
93msgid "Have a look to this documentation:" 20msgstr ""
94msgstr "Werfen Sie einen Blick in die Dokumentation:"
95 21
96#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:97 22msgid "by filling this field"
97msgid "Drag & drop this link to your bookmarks bar and have fun with poche."
98msgstr "" 23msgstr ""
99"Ziehen / Ablegen Sie diesen Link in die Lesezeichenleiste Ihres Browsers und "
100"genießen Sie mit Poche."
101 24
102#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:103
103msgid "poche it!" 25msgid "poche it!"
104msgstr "Pochert es!" 26msgstr "Pochert es!"
105 27
106#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:108
107msgid "Updating poche" 28msgid "Updating poche"
108msgstr "Poche aktualisieren " 29msgstr "Poche aktualisieren"
109 30
110#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:113
111msgid "your version" 31msgid "your version"
112msgstr "Ihre Version" 32msgstr "Ihre Version"
113 33
114#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:119
115msgid "latest stable version" 34msgid "latest stable version"
116msgstr "letzte stabile Version" 35msgstr "letzte stabile Version"
117 36
118#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:125
119msgid "a more recent stable version is available." 37msgid "a more recent stable version is available."
120msgstr "eine neuere stabile Version ist verfügbar." 38msgstr "eine neuere stabile Version ist verfügbar."
121 39
122#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:128
123#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:142
124msgid "you are up to date." 40msgid "you are up to date."
125msgstr "Sie sind auf den neuesten Stand." 41msgstr "Sie sind auf den neuesten Stand."
126 42
127#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:133
128msgid "latest dev version" 43msgid "latest dev version"
129msgstr "letzte Entwicklungsversion" 44msgstr "letzte Entwicklungsversion"
130 45
131#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:139
132msgid "a more recent development version is available." 46msgid "a more recent development version is available."
133msgstr "eine neuere Entwicklungsversion ist verfügbar." 47msgstr "eine neuere Entwicklungsversion ist verfügbar."
134 48
135#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:150
136msgid "Change your password" 49msgid "Change your password"
137msgstr "Ihr Passwort ändern" 50msgstr "Ihr Passwort ändern"
138 51
139#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:157
140msgid "New password:" 52msgid "New password:"
141msgstr "Neues Passwort:" 53msgstr "Neues Passwort:"
142 54
143#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:161
144#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:171
145#: /var/www/poche-i18n/cache/d4/28/e0d08991ec2d8a7b133505e7c651.php:60
146#: /var/www/poche-i18n/cache/ae/26/05eb67771213c16bd8c9aaf2d2c4.php:68
147msgid "Password" 55msgid "Password"
148msgstr "Passwort" 56msgstr "Passwort"
149 57
150#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:167
151msgid "Repeat your new password:" 58msgid "Repeat your new password:"
152msgstr "neues Passwort wiederholen:" 59msgstr "neues Passwort wiederholen:"
153 60
154#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:177
155msgid "Update" 61msgid "Update"
156msgstr "Aktualisieren" 62msgstr "Aktualisieren"
157 63
158#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:193
159msgid "Import" 64msgid "Import"
160msgstr "Import" 65msgstr "Import"
161 66
162#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:197
163msgid "Please execute the import script locally, it can take a very long time." 67msgid "Please execute the import script locally, it can take a very long time."
164msgstr "" 68msgstr ""
165"Wir danken Ihnen, den Import in lokal zu ausführen, kann es einige Zeit " 69"Wir danken Ihnen, den Import in lokal zu ausführen, kann es einige Zeit "
166"dauern." 70"dauern."
167 71
168#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:201
169msgid "More infos in the official doc:" 72msgid "More infos in the official doc:"
170msgstr "Mehr Informationen auf der offiziellen Dokumentation:" 73msgstr "Mehr Informationen auf der offiziellen Dokumentation:"
171 74
172#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:206
173msgid "import from Pocket" 75msgid "import from Pocket"
174msgstr "Der Import aus Pocket ist abgeschlossen." 76msgstr "import aus Pocket"
175 77
176#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:210
177msgid "import from Readability" 78msgid "import from Readability"
178msgstr "Der Import aus Readability ist abgeschlossen." 79msgstr "import aus Readability"
179 80
180#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:214
181msgid "import from Instapaper" 81msgid "import from Instapaper"
182msgstr "Import aus Instapaper" 82msgstr "import aus Instapaper"
183 83
184#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:220
185msgid "Export your poche datas" 84msgid "Export your poche datas"
186msgstr "Exportieren Sie Ihre Daten aus Poche." 85msgstr "Exportieren Sie Ihre Daten aus Poche."
187 86
188#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:224
189msgid "Click here" 87msgid "Click here"
190msgstr "klicken Sie hier" 88msgstr "klicken Sie hier"
191 89
192#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:226
193msgid "to export your poche datas." 90msgid "to export your poche datas."
194msgstr "um Ihre Daten aus Poche zu exportieren." 91msgstr "um Ihre Daten aus Poche zu exportieren."
195 92
196#: /var/www/poche-i18n/cache/7a/1e/68e6b4aec1301ae024cc85232e7c.php:46
197#: /var/www/poche-i18n/cache/7a/1e/68e6b4aec1301ae024cc85232e7c.php:139
198#: /var/www/poche-i18n/cache/30/97/b548692380c89d047a16cec7af79.php:22
199msgid "back to home" 93msgid "back to home"
200msgstr "züruck zur Hauptseite" 94msgstr "züruck zur Hauptseite"
201 95
202#: /var/www/poche-i18n/cache/7a/1e/68e6b4aec1301ae024cc85232e7c.php:50
203#: /var/www/poche-i18n/cache/7a/1e/68e6b4aec1301ae024cc85232e7c.php:147
204#: /var/www/poche-i18n/cache/dd/a8/530129765655dcde0a70a31a78b6.php:119
205msgid "toggle mark as read"
206msgstr "als gelesen markieren"
207
208#: /var/www/poche-i18n/cache/7a/1e/68e6b4aec1301ae024cc85232e7c.php:60
209#: /var/www/poche-i18n/cache/7a/1e/68e6b4aec1301ae024cc85232e7c.php:157
210#: /var/www/poche-i18n/cache/dd/a8/530129765655dcde0a70a31a78b6.php:129
211msgid "toggle favorite"
212msgstr "Favorit"
213
214#: /var/www/poche-i18n/cache/7a/1e/68e6b4aec1301ae024cc85232e7c.php:70
215#: /var/www/poche-i18n/cache/7a/1e/68e6b4aec1301ae024cc85232e7c.php:167
216#: /var/www/poche-i18n/cache/dd/a8/530129765655dcde0a70a31a78b6.php:139
217msgid "delete"
218msgstr "löschen"
219
220#: /var/www/poche-i18n/cache/7a/1e/68e6b4aec1301ae024cc85232e7c.php:82
221#: /var/www/poche-i18n/cache/7a/1e/68e6b4aec1301ae024cc85232e7c.php:179
222msgid "tweet"
223msgstr "twittern"
224
225#: /var/www/poche-i18n/cache/7a/1e/68e6b4aec1301ae024cc85232e7c.php:93
226#: /var/www/poche-i18n/cache/7a/1e/68e6b4aec1301ae024cc85232e7c.php:190
227msgid "email"
228msgstr "senden per E-Mail"
229
230#: /var/www/poche-i18n/cache/7a/1e/68e6b4aec1301ae024cc85232e7c.php:109
231#: /var/www/poche-i18n/cache/7a/1e/68e6b4aec1301ae024cc85232e7c.php:125
232#: /var/www/poche-i18n/cache/dd/a8/530129765655dcde0a70a31a78b6.php:153
233msgid "original"
234msgstr "Original"
235
236#: /var/www/poche-i18n/cache/7a/1e/68e6b4aec1301ae024cc85232e7c.php:143
237msgid "back to top"
238msgstr "zurück nach oben"
239
240#: /var/www/poche-i18n/cache/7a/1e/68e6b4aec1301ae024cc85232e7c.php:198
241msgid "this article appears wrong?"
242msgstr "dieser Artikel erscheint falsch?"
243
244#: /var/www/poche-i18n/cache/7a/1e/68e6b4aec1301ae024cc85232e7c.php:200
245msgid "create an issue"
246msgstr "ein Ticket erstellen"
247
248#: /var/www/poche-i18n/cache/7a/1e/68e6b4aec1301ae024cc85232e7c.php:202
249msgid "or"
250msgstr "oder"
251
252#: /var/www/poche-i18n/cache/7a/1e/68e6b4aec1301ae024cc85232e7c.php:206
253msgid "contact us by mail"
254msgstr "kontaktieren Sie uns per E-Mail"
255
256#: /var/www/poche-i18n/cache/88/8a/ee3b7080c13204391c14947a0c2c.php:22
257msgid "powered by"
258msgstr "bereitgestellt von"
259
260#: /var/www/poche-i18n/cache/d4/28/e0d08991ec2d8a7b133505e7c651.php:31
261msgid "installation" 96msgid "installation"
262msgstr "Installierung" 97msgstr "Installierung"
263 98
264#: /var/www/poche-i18n/cache/d4/28/e0d08991ec2d8a7b133505e7c651.php:42
265msgid "install your poche" 99msgid "install your poche"
266msgstr "installieren Sie Poche" 100msgstr "installieren Sie Poche"
267 101
268#: /var/www/poche-i18n/cache/d4/28/e0d08991ec2d8a7b133505e7c651.php:47
269msgid "" 102msgid ""
270"poche is still not installed. Please fill the below form to install it. " 103"poche is still not installed. Please fill the below form to install it. "
271"Don't hesitate to <a href='http://inthepoche.com/?pages/Documentation'>read " 104"Don't hesitate to <a href='http://inthepoche.com/doc'>read the documentation "
272"the documentation on poche website</a>." 105"on poche website</a>."
273msgstr "" 106msgstr ""
274"Poche ist noch nicht installiert. Wir danken Ihnen, die Felder unten zu " 107"Poche ist noch nicht installiert. Wir danken Ihnen, die Felder unten zu "
275"befüllen, um es zu machen. Zögern sie nicht, <a href='http://inthepoche.com/?" 108"befüllen, um es zu machen. Zögern sie nicht, <a href='http://inthepoche.com/"
276"pages/Documentation'> die Dokumentation auf der Website von Poche zu lesen." 109"doc'>die Dokumentation auf der Website von Poche zu lesen."
277 110
278#: /var/www/poche-i18n/cache/d4/28/e0d08991ec2d8a7b133505e7c651.php:53
279#: /var/www/poche-i18n/cache/ae/26/05eb67771213c16bd8c9aaf2d2c4.php:55
280msgid "Login" 111msgid "Login"
281msgstr "Benutzername" 112msgstr "Benutzername"
282 113
283#: /var/www/poche-i18n/cache/d4/28/e0d08991ec2d8a7b133505e7c651.php:67
284msgid "Repeat your password" 114msgid "Repeat your password"
285msgstr "Wiederholen Sie Ihr Passwort" 115msgstr "Wiederholen Sie Ihr Passwort"
286 116
287#: /var/www/poche-i18n/cache/d4/28/e0d08991ec2d8a7b133505e7c651.php:74
288msgid "Install" 117msgid "Install"
289msgstr "Installieren" 118msgstr "Installieren"
290 119
291#: /var/www/poche-i18n/cache/ae/26/05eb67771213c16bd8c9aaf2d2c4.php:31 120msgid "back to top"
292#: /var/www/poche-i18n/cache/ae/26/05eb67771213c16bd8c9aaf2d2c4.php:42 121msgstr "zurück nach oben"
293msgid "login to your poche"
294msgstr "Verbinden zu Poche"
295
296#: /var/www/poche-i18n/cache/ae/26/05eb67771213c16bd8c9aaf2d2c4.php:48
297msgid "you are in demo mode, some features may be disabled."
298msgstr "Sie sind im Demomodus, können einige Funktionen deaktiviert werden."
299 122
300#: /var/www/poche-i18n/cache/ae/26/05eb67771213c16bd8c9aaf2d2c4.php:80 123msgid "favoris"
301msgid "Stay signed in" 124msgstr ""
302msgstr "bleiben Sie verbunden"
303 125
304#: /var/www/poche-i18n/cache/ae/26/05eb67771213c16bd8c9aaf2d2c4.php:86 126msgid "archive"
305msgid "(Do not check on public computers)" 127msgstr "Archive"
306msgstr "(nicht auf einem öffentlichen Computer überprüfen)"
307 128
308#: /var/www/poche-i18n/cache/ae/26/05eb67771213c16bd8c9aaf2d2c4.php:93 129msgid "unread"
309msgid "Sign in" 130msgstr ""
310msgstr "Einloggen"
311 131
312#: /var/www/poche-i18n/cache/dd/a8/530129765655dcde0a70a31a78b6.php:55
313#: /var/www/poche-i18n/cache/dd/a8/530129765655dcde0a70a31a78b6.php:57
314msgid "by date asc" 132msgid "by date asc"
315msgstr "nach Datum asc" 133msgstr "nach Datum asc"
316 134
317#: /var/www/poche-i18n/cache/dd/a8/530129765655dcde0a70a31a78b6.php:59
318msgid "by date" 135msgid "by date"
319msgstr "nach Datum" 136msgstr "nach Datum"
320 137
321#: /var/www/poche-i18n/cache/dd/a8/530129765655dcde0a70a31a78b6.php:65
322#: /var/www/poche-i18n/cache/dd/a8/530129765655dcde0a70a31a78b6.php:67
323msgid "by date desc" 138msgid "by date desc"
324msgstr "nach Datum desc" 139msgstr "nach Datum desc"
325 140
326#: /var/www/poche-i18n/cache/dd/a8/530129765655dcde0a70a31a78b6.php:75
327#: /var/www/poche-i18n/cache/dd/a8/530129765655dcde0a70a31a78b6.php:77
328msgid "by title asc" 141msgid "by title asc"
329msgstr "nach Titel asc" 142msgstr "nach Titel asc"
330 143
331#: /var/www/poche-i18n/cache/dd/a8/530129765655dcde0a70a31a78b6.php:79
332msgid "by title" 144msgid "by title"
333msgstr "nach Titel" 145msgstr "nach Titel"
334 146
335#: /var/www/poche-i18n/cache/dd/a8/530129765655dcde0a70a31a78b6.php:85
336#: /var/www/poche-i18n/cache/dd/a8/530129765655dcde0a70a31a78b6.php:87
337msgid "by title desc" 147msgid "by title desc"
338msgstr "nach Titel desc" 148msgstr "nach Titel desc"
339 149
340#~ msgid "Please choose between Pocket & Readabilty :" 150msgid "No link available here!"
341#~ msgstr "Merci de choisir entre Pocket & Readability :" 151msgstr ""
152
153msgid "toggle mark as read"
154msgstr "als gelesen markieren"
155
156msgid "toggle favorite"
157msgstr "Favorit"
158
159msgid "delete"
160msgstr "löschen"
342 161
343#~ msgid "Bye bye Pocket, let's go !" 162msgid "original"
344#~ msgstr "Bye bye Pocket, en route !" 163msgstr "Original"
345 164
346#~ msgid "Bye bye Readability, let's go !" 165msgid "results"
347#~ msgstr "Bye bye Readability, en route !" 166msgstr ""
348 167
349#~ msgid "Welcome to poche !" 168msgid "tweet"
350#~ msgstr "Bienvenue dans poche !" 169msgstr "twittern"
351 170
352#~ msgid "Error with the import." 171msgid "email"
353#~ msgstr "Erreur durant l'import." 172msgstr "senden per E-Mail"
354 173
355#~ msgid "Wrong token." 174msgid "shaarli"
356#~ msgstr "Mauvais jeton." 175msgstr "shaarli"
357 176
358#~ msgid "Login failed !" 177msgid "flattr"
359#~ msgstr "Connexion échouée." 178msgstr "flattr"
360 179
361#~ msgid "your password has been updated" 180msgid "this article appears wrong?"
362#~ msgstr "Votre mot de passe a été mis à jour. " 181msgstr "dieser Artikel erscheint falsch?"
363 182
364#~ msgid "in demo mode, you can't update password" 183msgid "create an issue"
365#~ msgstr "En mode démo, le mot de passe ne peut être modifié." 184msgstr "ein Ticket erstellen"
366 185
367#~ msgid "" 186msgid "or"
368#~ "your password can't be empty and you have to repeat it in the second field" 187msgstr "oder"
369#~ msgstr ""
370#~ "Votre mot de passe ne peut être vide et vous devez le répéter dans le "
371#~ "second champ."
372 188
373#~ msgid "error during url preparation : the link wasn't added" 189msgid "contact us by mail"
374#~ msgstr "erreur durant l'insertion : le lien n'a pas été ajouté" 190msgstr "kontaktieren Sie uns per E-Mail"
375 191
376#~ msgid "error during url preparation : the link is not valid" 192msgid "plop"
377#~ msgstr "erreur durant la préparation de l'URL : le lien n'est pas valide" 193msgstr "plop"
378 194
379#~ msgid "TEST" 195msgid "home"
380#~ msgstr "NICOLAS" 196msgstr "Hause"
197
198msgid "favorites"
199msgstr "Favoriten"
200
201msgid "logout"
202msgstr "Trennung"
203
204msgid "powered by"
205msgstr "bereitgestellt von"
206
207msgid "debug mode is on so cache is off."
208msgstr ""
209
210msgid "your poche version:"
211msgstr ""
212
213msgid "storage:"
214msgstr ""
215
216msgid "login to your poche"
217msgstr "Verbinden zu Poche"
218
219msgid "you are in demo mode, some features may be disabled."
220msgstr "Sie sind im Demomodus, können einige Funktionen deaktiviert werden."
221
222msgid "Stay signed in"
223msgstr "bleiben Sie verbunden"
224
225msgid "(Do not check on public computers)"
226msgstr "(nicht auf einem öffentlichen Computer überprüfen)"
227
228msgid "Sign in"
229msgstr "Einloggen"
diff --git a/locale/en_EN.utf8/LC_MESSAGES/en_EN.utf8.mo b/locale/en_EN.utf8/LC_MESSAGES/en_EN.utf8.mo
new file mode 100644
index 00000000..f387889d
--- /dev/null
+++ b/locale/en_EN.utf8/LC_MESSAGES/en_EN.utf8.mo
Binary files differ
diff --git a/locale/en_EN.utf8/LC_MESSAGES/en_EN.utf8.po b/locale/en_EN.utf8/LC_MESSAGES/en_EN.utf8.po
new file mode 100644
index 00000000..8e56560d
--- /dev/null
+++ b/locale/en_EN.utf8/LC_MESSAGES/en_EN.utf8.po
@@ -0,0 +1,228 @@
1msgid ""
2msgstr ""
3"Project-Id-Version: \n"
4"POT-Creation-Date: \n"
5"PO-Revision-Date: \n"
6"Last-Translator: Nicolas LÅ“uillet <nicolas.loeuillet@gmail.com>\n"
7"Language-Team: \n"
8"MIME-Version: 1.0\n"
9"Content-Type: text/plain; charset=UTF-8\n"
10"Content-Transfer-Encoding: 8bit\n"
11"X-Generator: Poedit 1.5.4\n"
12
13msgid "config"
14msgstr "config"
15
16msgid "Poching a link"
17msgstr "Poching a link"
18
19msgid "read the documentation"
20msgstr "read the documentation"
21
22msgid "by filling this field"
23msgstr "by filling this field"
24
25msgid "poche it!"
26msgstr "poche it!"
27
28msgid "Updating poche"
29msgstr "Updating poche"
30
31msgid "your version"
32msgstr "your version"
33
34msgid "latest stable version"
35msgstr "latest stable version"
36
37msgid "a more recent stable version is available."
38msgstr "a more recent stable version is available."
39
40msgid "you are up to date."
41msgstr "you are up to date."
42
43msgid "latest dev version"
44msgstr "latest dev version"
45
46msgid "a more recent development version is available."
47msgstr "a more recent development version is available."
48
49msgid "Change your password"
50msgstr "Change your password"
51
52msgid "New password:"
53msgstr "New password:"
54
55msgid "Password"
56msgstr "Password"
57
58msgid "Repeat your new password:"
59msgstr "Repeat your new password:"
60
61msgid "Update"
62msgstr "Update"
63
64msgid "Import"
65msgstr "Import"
66
67msgid "Please execute the import script locally, it can take a very long time."
68msgstr ""
69"Please execute the import script locally, it can take a very long time."
70
71msgid "More infos in the official doc:"
72msgstr "More infos in the official doc:"
73
74msgid "import from Pocket"
75msgstr "import from Pocket"
76
77msgid "import from Readability"
78msgstr "import from Readability"
79
80msgid "import from Instapaper"
81msgstr "import from Instapaper"
82
83msgid "Export your poche datas"
84msgstr "Export your poche datas"
85
86msgid "Click here"
87msgstr "Click here"
88
89msgid "to export your poche datas."
90msgstr "to export your poche datas."
91
92msgid "back to home"
93msgstr "back to home"
94
95msgid "installation"
96msgstr "installation"
97
98msgid "install your poche"
99msgstr "install your poche"
100
101msgid ""
102"poche is still not installed. Please fill the below form to install it. "
103"Don't hesitate to <a href='http://inthepoche.com/doc'>read the documentation "
104"on poche website</a>."
105msgstr ""
106"poche is still not installed. Please fill the below form to install it. "
107"Don't hesitate to <a href='http://inthepoche.com/doc'>read the documentation "
108"on poche website</a>."
109
110msgid "Login"
111msgstr "Login"
112
113msgid "Repeat your password"
114msgstr "Repeat your password"
115
116msgid "Install"
117msgstr "Install"
118
119msgid "back to top"
120msgstr "back to top"
121
122msgid "favoris"
123msgstr "favoris"
124
125msgid "archive"
126msgstr "archive"
127
128msgid "unread"
129msgstr "unread"
130
131msgid "by date asc"
132msgstr "by date asc"
133
134msgid "by date"
135msgstr "by date"
136
137msgid "by date desc"
138msgstr "by date desc"
139
140msgid "by title asc"
141msgstr "by title asc"
142
143msgid "by title"
144msgstr "by title"
145
146msgid "by title desc"
147msgstr "by title desc"
148
149msgid "No link available here!"
150msgstr "No link available here!"
151
152msgid "toggle mark as read"
153msgstr "toggle mark as read"
154
155msgid "toggle favorite"
156msgstr "toggle favorite"
157
158msgid "delete"
159msgstr "delete"
160
161msgid "original"
162msgstr "original"
163
164msgid "results"
165msgstr "results"
166
167msgid "tweet"
168msgstr "tweet"
169
170msgid "email"
171msgstr "email"
172
173msgid "shaarli"
174msgstr "shaarli"
175
176msgid "flattr"
177msgstr "flattr"
178
179msgid "this article appears wrong?"
180msgstr "this article appears wrong?"
181
182msgid "create an issue"
183msgstr "create an issue"
184
185msgid "or"
186msgstr "or"
187
188msgid "contact us by mail"
189msgstr "contact us by mail"
190
191msgid "plop"
192msgstr "plop"
193
194msgid "home"
195msgstr "home"
196
197msgid "favorites"
198msgstr "favorites"
199
200msgid "logout"
201msgstr "logout"
202
203msgid "powered by"
204msgstr "powered by"
205
206msgid "debug mode is on so cache is off."
207msgstr "debug mode is on so cache is off."
208
209msgid "your poche version:"
210msgstr "your poche version:"
211
212msgid "storage:"
213msgstr "storage:"
214
215msgid "login to your poche"
216msgstr "login to your poche"
217
218msgid "you are in demo mode, some features may be disabled."
219msgstr "you are in demo mode, some features may be disabled."
220
221msgid "Stay signed in"
222msgstr "Stay signed in"
223
224msgid "(Do not check on public computers)"
225msgstr "(Do not check on public computers)"
226
227msgid "Sign in"
228msgstr "Sign in"
diff --git a/locale/es_ES.utf8/LC_MESSAGES/es_ES.utf8.mo b/locale/es_ES.utf8/LC_MESSAGES/es_ES.utf8.mo
index aa3d4182..0122cebc 100644
--- a/locale/es_ES.utf8/LC_MESSAGES/es_ES.utf8.mo
+++ b/locale/es_ES.utf8/LC_MESSAGES/es_ES.utf8.mo
Binary files differ
diff --git a/locale/es_ES.utf8/LC_MESSAGES/es_ES.utf8.po b/locale/es_ES.utf8/LC_MESSAGES/es_ES.utf8.po
index 236297d7..225cc52b 100644
--- a/locale/es_ES.utf8/LC_MESSAGES/es_ES.utf8.po
+++ b/locale/es_ES.utf8/LC_MESSAGES/es_ES.utf8.po
@@ -1,382 +1,230 @@
1#
2# Translators:
3# Nitche <nicolas.canseco@gmail.com>, 2013
4msgid "" 1msgid ""
5msgstr "" 2msgstr ""
6"Project-Id-Version: poche\n" 3"Project-Id-Version: \n"
7"POT-Creation-Date: 2013-08-06 08:35+0100\n" 4"POT-Creation-Date: \n"
8"PO-Revision-Date: 2013-08-16 19:09+0100\n" 5"PO-Revision-Date: \n"
9"Last-Translator: Nicolas LÅ“uillet <nicolas.loeuillet@gmail.com>\n" 6"Last-Translator: Nicolas LÅ“uillet <nicolas.loeuillet@gmail.com>\n"
10"Language-Team: Spanish (http://www.transifex.com/projects/p/poche/language/" 7"Language-Team: \n"
11"es/)\n"
12"MIME-Version: 1.0\n" 8"MIME-Version: 1.0\n"
13"Content-Type: text/plain; charset=UTF-8\n" 9"Content-Type: text/plain; charset=UTF-8\n"
14"Content-Transfer-Encoding: 8bit\n" 10"Content-Transfer-Encoding: 8bit\n"
15"Language: es\n"
16"Plural-Forms: nplurals=2; plural=(n != 1);\n"
17"X-Generator: Poedit 1.5.4\n" 11"X-Generator: Poedit 1.5.4\n"
18"X-Poedit-Basepath: /\n"
19"X-Poedit-KeywordsList: _;gettext;gettext_noop\n"
20"X-Poedit-SourceCharset: UTF-8\n"
21"X-Poedit-SearchPath-0: /var/www/poche-i18n\n"
22 12
23#: /var/www/poche-i18n/index.php:43
24msgid "poche, a read it later open source system"
25msgstr "poche, a read it later open source system"
26
27#: /var/www/poche-i18n/inc/poche/Poche.class.php:101
28msgid "the link has been added successfully"
29msgstr "el enlace a sido agregado con éxito"
30
31#: /var/www/poche-i18n/inc/poche/Poche.class.php:104
32msgid "error during insertion : the link wasn't added"
33msgstr "error en la inserción : el enlace no ha sido agregado"
34
35#: /var/www/poche-i18n/inc/poche/Poche.class.php:109
36msgid "error during fetching content : the link wasn't added"
37msgstr ""
38"error durante la recuperación del contenido : el enlace no a sido agregado"
39
40#: /var/www/poche-i18n/inc/poche/Poche.class.php:119
41msgid "the link has been deleted successfully"
42msgstr "el enlace a sido suprimido con éxito"
43
44#: /var/www/poche-i18n/inc/poche/Poche.class.php:123
45msgid "the link wasn't deleted"
46msgstr "el enlace no ha sido suprimido"
47
48#: /var/www/poche-i18n/inc/poche/Tools.class.php:18
49msgid "Oops, it seems you don't have PHP 5."
50msgstr "Parece que PHP 5 no está instalado"
51
52#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:32
53#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:70
54#: /var/www/poche-i18n/cache/76/a4/e7c21f2e0ba29104fc654cd8ba41.php:50
55msgid "config" 13msgid "config"
56msgstr "configuración" 14msgstr "configuración"
57 15
58#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:46 16msgid "Poching a link"
59#: /var/www/poche-i18n/cache/7a/1e/68e6b4aec1301ae024cc85232e7c.php:31
60#: /var/www/poche-i18n/cache/76/a4/e7c21f2e0ba29104fc654cd8ba41.php:26
61#: /var/www/poche-i18n/cache/dd/a8/530129765655dcde0a70a31a78b6.php:34
62msgid "home"
63msgstr "inicio"
64
65#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:54
66#: /var/www/poche-i18n/cache/76/a4/e7c21f2e0ba29104fc654cd8ba41.php:34
67msgid "favorites"
68msgstr "favoritos"
69
70#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:62
71#: /var/www/poche-i18n/cache/76/a4/e7c21f2e0ba29104fc654cd8ba41.php:42
72msgid "archive"
73msgstr "archivos"
74
75#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:74
76#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:76
77#: /var/www/poche-i18n/cache/76/a4/e7c21f2e0ba29104fc654cd8ba41.php:54
78#: /var/www/poche-i18n/cache/76/a4/e7c21f2e0ba29104fc654cd8ba41.php:56
79msgid "logout"
80msgstr "desconexión "
81
82#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:87
83msgid "Bookmarklet"
84msgstr "Bookmarklet"
85
86#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:91
87msgid ""
88"Thanks to the bookmarklet, you will be able to easily add a link to your "
89"poche."
90msgstr "" 17msgstr ""
91"Gracias a tu bookmarklet, puedes agregar fácilmente un enlace en tu bolsillo"
92 18
93#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:93 19msgid "read the documentation"
94msgid "Have a look to this documentation:" 20msgstr ""
95msgstr "échale un ojo a la documentación :"
96 21
97#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:97 22msgid "by filling this field"
98msgid "Drag & drop this link to your bookmarks bar and have fun with poche."
99msgstr "" 23msgstr ""
100"Arrastra y suelta ese enlace en tu barra de favoritos en tu navegador y "
101"disfruta de tu poche."
102 24
103#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:103
104msgid "poche it!" 25msgid "poche it!"
105msgstr "pochéalo!" 26msgstr "pochéalo!"
106 27
107#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:108
108msgid "Updating poche" 28msgid "Updating poche"
109msgstr "Actualizar" 29msgstr "Actualizar"
110 30
111#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:113
112msgid "your version" 31msgid "your version"
113msgstr "su versión" 32msgstr "su versión"
114 33
115#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:119
116msgid "latest stable version" 34msgid "latest stable version"
117msgstr "ultima versión estable" 35msgstr "ultima versión estable"
118 36
119#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:125
120msgid "a more recent stable version is available." 37msgid "a more recent stable version is available."
121msgstr "una versión estable más reciente está disponible" 38msgstr "una versión estable más reciente está disponible."
122 39
123#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:128
124#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:142
125msgid "you are up to date." 40msgid "you are up to date."
126msgstr "estás al día" 41msgstr "estás al día."
127 42
128#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:133
129msgid "latest dev version" 43msgid "latest dev version"
130msgstr "ultima versión de desarollo" 44msgstr "ultima versión de desarollo"
131 45
132#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:139
133msgid "a more recent development version is available." 46msgid "a more recent development version is available."
134msgstr "una versión de desarollo más reciente está disponible" 47msgstr "una versión de desarollo más reciente está disponible."
135 48
136#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:150
137msgid "Change your password" 49msgid "Change your password"
138msgstr "Modificar tu contraseña" 50msgstr "Modificar tu contraseña"
139 51
140#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:157
141msgid "New password:" 52msgid "New password:"
142msgstr "Nueva contraseña :" 53msgstr "Nueva contraseña :"
143 54
144#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:161
145#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:171
146#: /var/www/poche-i18n/cache/d4/28/e0d08991ec2d8a7b133505e7c651.php:60
147#: /var/www/poche-i18n/cache/ae/26/05eb67771213c16bd8c9aaf2d2c4.php:68
148msgid "Password" 55msgid "Password"
149msgstr "Contraseña" 56msgstr "Contraseña"
150 57
151#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:167
152msgid "Repeat your new password:" 58msgid "Repeat your new password:"
153msgstr "Repetir la nueva contraseña :" 59msgstr "Repetir la nueva contraseña :"
154 60
155#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:177
156msgid "Update" 61msgid "Update"
157msgstr "Poner al día" 62msgstr "Poner al día"
158 63
159#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:193
160msgid "Import" 64msgid "Import"
161msgstr "Importar" 65msgstr "Importar"
162 66
163#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:197
164msgid "Please execute the import script locally, it can take a very long time." 67msgid "Please execute the import script locally, it can take a very long time."
165msgstr "" 68msgstr ""
166"Gracias por ejecutar la importación en local, esto puede demorar un tiempo" 69"Gracias por ejecutar la importación en local, esto puede demorar un tiempo"
167 70
168#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:201
169msgid "More infos in the official doc:" 71msgid "More infos in the official doc:"
170msgstr "Más información en la documentación oficial :" 72msgstr "Más información en la documentación oficial :"
171 73
172#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:206
173msgid "import from Pocket" 74msgid "import from Pocket"
174msgstr "la importación desde Pocket está terminada" 75msgstr "importación desde Pocket"
175 76
176#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:210
177msgid "import from Readability" 77msgid "import from Readability"
178msgstr "la importación desde Readability está terminada" 78msgstr "importación desde Readability"
179 79
180#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:214
181msgid "import from Instapaper" 80msgid "import from Instapaper"
182msgstr "Importar desde Instapaper" 81msgstr "importación desde Instapaper"
183 82
184#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:220
185msgid "Export your poche datas" 83msgid "Export your poche datas"
186msgstr "Exportar sus datos de poche" 84msgstr "Exportar sus datos de poche"
187 85
188#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:224
189msgid "Click here" 86msgid "Click here"
190msgstr "Haga clic aquí" 87msgstr "Haga clic aquí"
191 88
192#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:226
193msgid "to export your poche datas." 89msgid "to export your poche datas."
194msgstr "Para exportar sus datos de poche" 90msgstr "para exportar sus datos de poche."
195 91
196#: /var/www/poche-i18n/cache/7a/1e/68e6b4aec1301ae024cc85232e7c.php:46
197#: /var/www/poche-i18n/cache/7a/1e/68e6b4aec1301ae024cc85232e7c.php:139
198#: /var/www/poche-i18n/cache/30/97/b548692380c89d047a16cec7af79.php:22
199msgid "back to home" 92msgid "back to home"
200msgstr "volver a la pagina de inicio" 93msgstr "volver a la pagina de inicio"
201 94
202#: /var/www/poche-i18n/cache/7a/1e/68e6b4aec1301ae024cc85232e7c.php:50
203#: /var/www/poche-i18n/cache/7a/1e/68e6b4aec1301ae024cc85232e7c.php:147
204#: /var/www/poche-i18n/cache/dd/a8/530129765655dcde0a70a31a78b6.php:119
205msgid "toggle mark as read"
206msgstr "marcar como leído"
207
208#: /var/www/poche-i18n/cache/7a/1e/68e6b4aec1301ae024cc85232e7c.php:60
209#: /var/www/poche-i18n/cache/7a/1e/68e6b4aec1301ae024cc85232e7c.php:157
210#: /var/www/poche-i18n/cache/dd/a8/530129765655dcde0a70a31a78b6.php:129
211msgid "toggle favorite"
212msgstr "favorito"
213
214#: /var/www/poche-i18n/cache/7a/1e/68e6b4aec1301ae024cc85232e7c.php:70
215#: /var/www/poche-i18n/cache/7a/1e/68e6b4aec1301ae024cc85232e7c.php:167
216#: /var/www/poche-i18n/cache/dd/a8/530129765655dcde0a70a31a78b6.php:139
217msgid "delete"
218msgstr "suprimir"
219
220#: /var/www/poche-i18n/cache/7a/1e/68e6b4aec1301ae024cc85232e7c.php:82
221#: /var/www/poche-i18n/cache/7a/1e/68e6b4aec1301ae024cc85232e7c.php:179
222msgid "tweet"
223msgstr "tweetear"
224
225#: /var/www/poche-i18n/cache/7a/1e/68e6b4aec1301ae024cc85232e7c.php:93
226#: /var/www/poche-i18n/cache/7a/1e/68e6b4aec1301ae024cc85232e7c.php:190
227msgid "email"
228msgstr "enviar por mail"
229
230#: /var/www/poche-i18n/cache/7a/1e/68e6b4aec1301ae024cc85232e7c.php:109
231#: /var/www/poche-i18n/cache/7a/1e/68e6b4aec1301ae024cc85232e7c.php:125
232#: /var/www/poche-i18n/cache/dd/a8/530129765655dcde0a70a31a78b6.php:153
233msgid "original"
234msgstr "original"
235
236#: /var/www/poche-i18n/cache/7a/1e/68e6b4aec1301ae024cc85232e7c.php:143
237msgid "back to top"
238msgstr "volver arriba"
239
240#: /var/www/poche-i18n/cache/7a/1e/68e6b4aec1301ae024cc85232e7c.php:198
241msgid "this article appears wrong?"
242msgstr "este articulo no se ve bien ?"
243
244#: /var/www/poche-i18n/cache/7a/1e/68e6b4aec1301ae024cc85232e7c.php:200
245msgid "create an issue"
246msgstr "crear un ticket"
247
248#: /var/www/poche-i18n/cache/7a/1e/68e6b4aec1301ae024cc85232e7c.php:202
249msgid "or"
250msgstr "o"
251
252#: /var/www/poche-i18n/cache/7a/1e/68e6b4aec1301ae024cc85232e7c.php:206
253msgid "contact us by mail"
254msgstr "contactarnos por mail"
255
256#: /var/www/poche-i18n/cache/88/8a/ee3b7080c13204391c14947a0c2c.php:22
257msgid "powered by"
258msgstr "propulsado por"
259
260#: /var/www/poche-i18n/cache/d4/28/e0d08991ec2d8a7b133505e7c651.php:31
261msgid "installation" 95msgid "installation"
262msgstr "instalacion" 96msgstr "instalacion"
263 97
264#: /var/www/poche-i18n/cache/d4/28/e0d08991ec2d8a7b133505e7c651.php:42
265msgid "install your poche" 98msgid "install your poche"
266msgstr "instala tu poche" 99msgstr "instala tu poche"
267 100
268#: /var/www/poche-i18n/cache/d4/28/e0d08991ec2d8a7b133505e7c651.php:47
269msgid "" 101msgid ""
270"poche is still not installed. Please fill the below form to install it. " 102"poche is still not installed. Please fill the below form to install it. "
271"Don't hesitate to <a href='http://inthepoche.com/?pages/Documentation'>read " 103"Don't hesitate to <a href='http://inthepoche.com/doc'>read the documentation "
272"the documentation on poche website</a>." 104"on poche website</a>."
273msgstr "" 105msgstr ""
274"poche todavia no està instalado. Gracias de llenar los campos siguientes " 106"poche todavia no està instalado. Gracias de llenar los campos siguientes "
275"para instalarlo. No dudes de <a href='http://inthepoche.com/?pages/" 107"para instalarlo. No dudes de <a href='http://inthepoche.com/doc'>leer la "
276"Documentation'>leer la documentacion en el sitio de poche</a>." 108"documentacion en el sitio de poche</a>."
277 109
278#: /var/www/poche-i18n/cache/d4/28/e0d08991ec2d8a7b133505e7c651.php:53
279#: /var/www/poche-i18n/cache/ae/26/05eb67771213c16bd8c9aaf2d2c4.php:55
280msgid "Login" 110msgid "Login"
281msgstr "Nombre de usuario" 111msgstr "Nombre de usuario"
282 112
283#: /var/www/poche-i18n/cache/d4/28/e0d08991ec2d8a7b133505e7c651.php:67
284msgid "Repeat your password" 113msgid "Repeat your password"
285msgstr "repita su contraseña" 114msgstr "Repita su contraseña"
286 115
287#: /var/www/poche-i18n/cache/d4/28/e0d08991ec2d8a7b133505e7c651.php:74
288msgid "Install" 116msgid "Install"
289msgstr "Instalar" 117msgstr "Instalar"
290 118
291#: /var/www/poche-i18n/cache/ae/26/05eb67771213c16bd8c9aaf2d2c4.php:31 119msgid "back to top"
292#: /var/www/poche-i18n/cache/ae/26/05eb67771213c16bd8c9aaf2d2c4.php:42 120msgstr "volver arriba"
293msgid "login to your poche"
294msgstr "conectarse a tu poche"
295 121
296#: /var/www/poche-i18n/cache/ae/26/05eb67771213c16bd8c9aaf2d2c4.php:48 122msgid "favoris"
297msgid "you are in demo mode, some features may be disabled."
298msgstr "" 123msgstr ""
299"este es el modo de demostración, algunas funcionalidades pueden estar "
300"desactivadas."
301
302#: /var/www/poche-i18n/cache/ae/26/05eb67771213c16bd8c9aaf2d2c4.php:80
303msgid "Stay signed in"
304msgstr "seguir conectado"
305 124
306#: /var/www/poche-i18n/cache/ae/26/05eb67771213c16bd8c9aaf2d2c4.php:86 125msgid "archive"
307msgid "(Do not check on public computers)" 126msgstr "archivos"
308msgstr "(no marcar en un ordenador publico)"
309 127
310#: /var/www/poche-i18n/cache/ae/26/05eb67771213c16bd8c9aaf2d2c4.php:93 128msgid "unread"
311msgid "Sign in" 129msgstr ""
312msgstr "conectarse"
313 130
314#: /var/www/poche-i18n/cache/dd/a8/530129765655dcde0a70a31a78b6.php:55
315#: /var/www/poche-i18n/cache/dd/a8/530129765655dcde0a70a31a78b6.php:57
316msgid "by date asc" 131msgid "by date asc"
317msgstr "por fecha ascendiente" 132msgstr "por fecha ascendiente"
318 133
319#: /var/www/poche-i18n/cache/dd/a8/530129765655dcde0a70a31a78b6.php:59
320msgid "by date" 134msgid "by date"
321msgstr "por fecha" 135msgstr "por fecha"
322 136
323#: /var/www/poche-i18n/cache/dd/a8/530129765655dcde0a70a31a78b6.php:65
324#: /var/www/poche-i18n/cache/dd/a8/530129765655dcde0a70a31a78b6.php:67
325msgid "by date desc" 137msgid "by date desc"
326msgstr "por fecha descendiente" 138msgstr "por fecha descendiente"
327 139
328#: /var/www/poche-i18n/cache/dd/a8/530129765655dcde0a70a31a78b6.php:75
329#: /var/www/poche-i18n/cache/dd/a8/530129765655dcde0a70a31a78b6.php:77
330msgid "by title asc" 140msgid "by title asc"
331msgstr "por titulo ascendiente" 141msgstr "por titulo ascendiente"
332 142
333#: /var/www/poche-i18n/cache/dd/a8/530129765655dcde0a70a31a78b6.php:79
334msgid "by title" 143msgid "by title"
335msgstr "por titulo" 144msgstr "por fecha"
336 145
337#: /var/www/poche-i18n/cache/dd/a8/530129765655dcde0a70a31a78b6.php:85
338#: /var/www/poche-i18n/cache/dd/a8/530129765655dcde0a70a31a78b6.php:87
339msgid "by title desc" 146msgid "by title desc"
340msgstr "por titulo descendiente" 147msgstr "por fecha descendiente"
148
149msgid "No link available here!"
150msgstr ""
151
152msgid "toggle mark as read"
153msgstr "marcar como leído"
154
155msgid "toggle favorite"
156msgstr "favorito"
341 157
342#~ msgid "Please choose between Pocket & Readabilty :" 158msgid "delete"
343#~ msgstr "Merci de choisir entre Pocket & Readability :" 159msgstr "suprimir"
344 160
345#~ msgid "Bye bye Pocket, let's go !" 161msgid "original"
346#~ msgstr "Bye bye Pocket, en route !" 162msgstr "original"
347 163
348#~ msgid "Bye bye Readability, let's go !" 164msgid "results"
349#~ msgstr "Bye bye Readability, en route !" 165msgstr ""
350 166
351#~ msgid "Welcome to poche !" 167msgid "tweet"
352#~ msgstr "Bienvenue dans poche !" 168msgstr "tweetear"
353 169
354#~ msgid "Error with the import." 170msgid "email"
355#~ msgstr "Erreur durant l'import." 171msgstr "enviar por mail"
356 172
357#~ msgid "Wrong token." 173msgid "shaarli"
358#~ msgstr "Mauvais jeton." 174msgstr "shaarli"
359 175
360#~ msgid "Login failed !" 176msgid "flattr"
361#~ msgstr "Connexion échouée." 177msgstr "flattr"
362 178
363#~ msgid "your password has been updated" 179msgid "this article appears wrong?"
364#~ msgstr "Votre mot de passe a été mis à jour. " 180msgstr "este articulo no se ve bien ?"
365 181
366#~ msgid "in demo mode, you can't update password" 182msgid "create an issue"
367#~ msgstr "En mode démo, le mot de passe ne peut être modifié." 183msgstr "crear un ticket"
368 184
369#~ msgid "" 185msgid "or"
370#~ "your password can't be empty and you have to repeat it in the second field" 186msgstr "o"
371#~ msgstr ""
372#~ "Votre mot de passe ne peut être vide et vous devez le répéter dans le "
373#~ "second champ."
374 187
375#~ msgid "error during url preparation : the link wasn't added" 188msgid "contact us by mail"
376#~ msgstr "erreur durant l'insertion : le lien n'a pas été ajouté" 189msgstr "contactarnos por mail"
377 190
378#~ msgid "error during url preparation : the link is not valid" 191msgid "plop"
379#~ msgstr "erreur durant la préparation de l'URL : le lien n'est pas valide" 192msgstr "plop"
380 193
381#~ msgid "TEST" 194msgid "home"
382#~ msgstr "NICOLAS" 195msgstr "inicio"
196
197msgid "favorites"
198msgstr "favoritos"
199
200msgid "logout"
201msgstr "desconexión"
202
203msgid "powered by"
204msgstr "propulsado por"
205
206msgid "debug mode is on so cache is off."
207msgstr ""
208
209msgid "your poche version:"
210msgstr ""
211
212msgid "storage:"
213msgstr ""
214
215msgid "login to your poche"
216msgstr "conectarse a tu poche"
217
218msgid "you are in demo mode, some features may be disabled."
219msgstr ""
220"este es el modo de demostración, algunas funcionalidades pueden estar "
221"desactivadas."
222
223msgid "Stay signed in"
224msgstr "seguir conectado"
225
226msgid "(Do not check on public computers)"
227msgstr "(no marcar en un ordenador publico)"
228
229msgid "Sign in"
230msgstr "conectarse"
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 ec72b830..e3baaaa1 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 a643f6e3..779aadae 100644
--- a/locale/fr_FR.utf8/LC_MESSAGES/fr_FR.utf8.po
+++ b/locale/fr_FR.utf8/LC_MESSAGES/fr_FR.utf8.po
@@ -1,376 +1,228 @@
1msgid "" 1msgid ""
2msgstr "" 2msgstr ""
3"Project-Id-Version: poche\n" 3"Project-Id-Version: \n"
4"POT-Creation-Date: 2013-08-06 08:35+0100\n" 4"POT-Creation-Date: \n"
5"PO-Revision-Date: 2013-08-24 10:25+0100\n" 5"PO-Revision-Date: \n"
6"Last-Translator: Eric R (NumEricR)\n" 6"Last-Translator: Nicolas LÅ“uillet <nicolas.loeuillet@gmail.com>\n"
7"Language-Team: poche <support@inthepoche.com>\n" 7"Language-Team: \n"
8"Language: Français\n"
9"MIME-Version: 1.0\n" 8"MIME-Version: 1.0\n"
10"Content-Type: text/plain; charset=UTF-8\n" 9"Content-Type: text/plain; charset=UTF-8\n"
11"Content-Transfer-Encoding: 8bit\n" 10"Content-Transfer-Encoding: 8bit\n"
12"X-Generator: Poedit 1.5.7\n" 11"X-Generator: Poedit 1.5.4\n"
13"X-Poedit-KeywordsList: _;gettext;gettext_noop\n"
14"X-Poedit-Basepath: /\n"
15"Plural-Forms: nplurals=2; plural=(n > 1);\n"
16"X-Poedit-SourceCharset: UTF-8\n"
17"X-Poedit-SearchPath-0: /var/www/poche-i18n\n"
18
19#: /var/www/poche-i18n/index.php:43
20msgid "poche, a read it later open source system"
21msgstr "poche, a read it later open source system"
22
23#: /var/www/poche-i18n/inc/poche/Poche.class.php:101
24msgid "the link has been added successfully"
25msgstr "le lien a été ajouté avec succès"
26
27#: /var/www/poche-i18n/inc/poche/Poche.class.php:104
28msgid "error during insertion : the link wasn't added"
29msgstr "erreur durant l'insertion : le lien n'a pas été ajouté"
30
31#: /var/www/poche-i18n/inc/poche/Poche.class.php:109
32msgid "error during fetching content : the link wasn't added"
33msgstr "erreur durant la récupération du contenu : le lien n'a pas été ajouté"
34
35#: /var/www/poche-i18n/inc/poche/Poche.class.php:119
36msgid "the link has been deleted successfully"
37msgstr "le lien a été supprimé avec succès"
38
39#: /var/www/poche-i18n/inc/poche/Poche.class.php:123
40msgid "the link wasn't deleted"
41msgstr "le lien n'a pas été supprimé"
42
43#: /var/www/poche-i18n/inc/poche/Tools.class.php:18
44msgid "Oops, it seems you don't have PHP 5."
45msgstr "Oups, il semblerait que PHP 5 ne soit pas installé. "
46
47#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:32
48#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:70
49#: /var/www/poche-i18n/cache/76/a4/e7c21f2e0ba29104fc654cd8ba41.php:50
50msgid "config"
51msgstr "config"
52
53#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:46
54#: /var/www/poche-i18n/cache/7a/1e/68e6b4aec1301ae024cc85232e7c.php:31
55#: /var/www/poche-i18n/cache/76/a4/e7c21f2e0ba29104fc654cd8ba41.php:26
56#: /var/www/poche-i18n/cache/dd/a8/530129765655dcde0a70a31a78b6.php:34
57msgid "home"
58msgstr "accueil"
59
60#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:54
61#: /var/www/poche-i18n/cache/76/a4/e7c21f2e0ba29104fc654cd8ba41.php:34
62msgid "favorites"
63msgstr "favoris"
64 12
65#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:62 13msgid "config"
66#: /var/www/poche-i18n/cache/76/a4/e7c21f2e0ba29104fc654cd8ba41.php:42 14msgstr "configuration"
67msgid "archive"
68msgstr "archives"
69
70#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:74
71#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:76
72#: /var/www/poche-i18n/cache/76/a4/e7c21f2e0ba29104fc654cd8ba41.php:54
73#: /var/www/poche-i18n/cache/76/a4/e7c21f2e0ba29104fc654cd8ba41.php:56
74msgid "logout"
75msgstr "déconnexion"
76
77#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:87
78msgid "Bookmarklet"
79msgstr "Bookmarklet"
80 15
81#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:91 16msgid "Poching a link"
82msgid "" 17msgstr "Pocher un lien"
83"Thanks to the bookmarklet, you will be able to easily add a link to your "
84"poche."
85msgstr ""
86"Grâce au bookmarklet, vous pouvez ajouter facilement un lien dans votre "
87"poche."
88 18
89#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:93 19msgid "read the documentation"
90msgid "Have a look to this documentation:" 20msgstr "lisez la documentation"
91msgstr "Jetez un œil à la documentation :"
92 21
93#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:97 22msgid "by filling this field"
94msgid "Drag & drop this link to your bookmarks bar and have fun with poche." 23msgstr "en remplissant ce champ"
95msgstr ""
96"Glissez / déposez ce lien dans votre barre de favoris de votre navigateur et "
97"prenez du bon temps avec poche."
98 24
99#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:103
100msgid "poche it!" 25msgid "poche it!"
101msgstr "poche-le !" 26msgstr "pochez-le !"
102 27
103#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:108
104msgid "Updating poche" 28msgid "Updating poche"
105msgstr "Mettre à jour poche" 29msgstr "Mettre à jour poche"
106 30
107#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:113
108msgid "your version" 31msgid "your version"
109msgstr "votre version" 32msgstr "votre version"
110 33
111#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:119
112msgid "latest stable version" 34msgid "latest stable version"
113msgstr "dernière version stable" 35msgstr "dernière version stable"
114 36
115#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:125
116msgid "a more recent stable version is available." 37msgid "a more recent stable version is available."
117msgstr "une version stable plus récente est disponible." 38msgstr "une version stable plus récente est disponible."
118 39
119#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:128
120#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:142
121msgid "you are up to date." 40msgid "you are up to date."
122msgstr "vous êtes à jour." 41msgstr "vous êtes à jour."
123 42
124#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:133
125msgid "latest dev version" 43msgid "latest dev version"
126msgstr "dernière version de développement" 44msgstr "dernière version de développement"
127 45
128#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:139
129msgid "a more recent development version is available." 46msgid "a more recent development version is available."
130msgstr "une version de développement plus récente est disponible." 47msgstr "une version de développement plus récente est disponible."
131 48
132#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:150
133msgid "Change your password" 49msgid "Change your password"
134msgstr "Modifier votre mot de passe" 50msgstr "Modifier votre mot de passe"
135 51
136#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:157
137msgid "New password:" 52msgid "New password:"
138msgstr "Nouveau mot de passe :" 53msgstr "Nouveau mot de passe :"
139 54
140#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:161
141#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:171
142#: /var/www/poche-i18n/cache/d4/28/e0d08991ec2d8a7b133505e7c651.php:60
143#: /var/www/poche-i18n/cache/ae/26/05eb67771213c16bd8c9aaf2d2c4.php:68
144msgid "Password" 55msgid "Password"
145msgstr "Mot de passe" 56msgstr "Mot de passe"
146 57
147#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:167
148msgid "Repeat your new password:" 58msgid "Repeat your new password:"
149msgstr "Répétez le nouveau mot de passe :" 59msgstr "Répétez votre nouveau mot de passe :"
150 60
151#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:177
152msgid "Update" 61msgid "Update"
153msgstr "Mettre à jour" 62msgstr "Mettre à jour"
154 63
155#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:193
156msgid "Import" 64msgid "Import"
157msgstr "Import" 65msgstr "Importer"
158 66
159#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:197
160msgid "Please execute the import script locally, it can take a very long time." 67msgid "Please execute the import script locally, it can take a very long time."
161msgstr "Merci d'exécuter l'import en local, cela peut prendre du temps. " 68msgstr "Merci d'exécuter l'import en local, cela peut prendre du temps."
162 69
163#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:201
164msgid "More infos in the official doc:" 70msgid "More infos in the official doc:"
165msgstr "Plus d'infos sur la documentation officielle :" 71msgstr "Plus d'infos sur la documentation officielle"
166 72
167#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:206
168msgid "import from Pocket" 73msgid "import from Pocket"
169msgstr "l'import depuis Pocket est terminé." 74msgstr "import depuis Pocket"
170 75
171#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:210
172msgid "import from Readability" 76msgid "import from Readability"
173msgstr "l'import depuis Readability est terminé." 77msgstr "import depuis Readability"
174 78
175#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:214
176msgid "import from Instapaper" 79msgid "import from Instapaper"
177msgstr "Import depuis Instapaper" 80msgstr "import depuis Instapaper"
178 81
179#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:220
180msgid "Export your poche datas" 82msgid "Export your poche datas"
181msgstr "Exporter vos données de poche" 83msgstr "Exporter vos données de poche"
182 84
183#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:224
184msgid "Click here" 85msgid "Click here"
185msgstr "Cliquez-ici" 86msgstr "Cliquez-ici"
186 87
187#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:226
188msgid "to export your poche datas." 88msgid "to export your poche datas."
189msgstr "pour exporter vos données de poche." 89msgstr "pour exporter vos données de poche."
190 90
191#: /var/www/poche-i18n/cache/7a/1e/68e6b4aec1301ae024cc85232e7c.php:46
192#: /var/www/poche-i18n/cache/7a/1e/68e6b4aec1301ae024cc85232e7c.php:139
193#: /var/www/poche-i18n/cache/30/97/b548692380c89d047a16cec7af79.php:22
194msgid "back to home" 91msgid "back to home"
195msgstr "retour à l'accueil" 92msgstr "retour à l'accueil"
196 93
197#: /var/www/poche-i18n/cache/7a/1e/68e6b4aec1301ae024cc85232e7c.php:50
198#: /var/www/poche-i18n/cache/7a/1e/68e6b4aec1301ae024cc85232e7c.php:147
199#: /var/www/poche-i18n/cache/dd/a8/530129765655dcde0a70a31a78b6.php:119
200msgid "toggle mark as read"
201msgstr "marquer comme lu"
202
203#: /var/www/poche-i18n/cache/7a/1e/68e6b4aec1301ae024cc85232e7c.php:60
204#: /var/www/poche-i18n/cache/7a/1e/68e6b4aec1301ae024cc85232e7c.php:157
205#: /var/www/poche-i18n/cache/dd/a8/530129765655dcde0a70a31a78b6.php:129
206msgid "toggle favorite"
207msgstr "favori"
208
209#: /var/www/poche-i18n/cache/7a/1e/68e6b4aec1301ae024cc85232e7c.php:70
210#: /var/www/poche-i18n/cache/7a/1e/68e6b4aec1301ae024cc85232e7c.php:167
211#: /var/www/poche-i18n/cache/dd/a8/530129765655dcde0a70a31a78b6.php:139
212msgid "delete"
213msgstr "supprimer"
214
215#: /var/www/poche-i18n/cache/7a/1e/68e6b4aec1301ae024cc85232e7c.php:82
216#: /var/www/poche-i18n/cache/7a/1e/68e6b4aec1301ae024cc85232e7c.php:179
217msgid "tweet"
218msgstr "tweeter"
219
220#: /var/www/poche-i18n/cache/7a/1e/68e6b4aec1301ae024cc85232e7c.php:93
221#: /var/www/poche-i18n/cache/7a/1e/68e6b4aec1301ae024cc85232e7c.php:190
222msgid "email"
223msgstr "envoyer par email"
224
225#: /var/www/poche-i18n/cache/7a/1e/68e6b4aec1301ae024cc85232e7c.php:109
226#: /var/www/poche-i18n/cache/7a/1e/68e6b4aec1301ae024cc85232e7c.php:125
227#: /var/www/poche-i18n/cache/dd/a8/530129765655dcde0a70a31a78b6.php:153
228msgid "original"
229msgstr "original"
230
231#: /var/www/poche-i18n/cache/7a/1e/68e6b4aec1301ae024cc85232e7c.php:143
232msgid "back to top"
233msgstr "retour en haut de page"
234
235#: /var/www/poche-i18n/cache/7a/1e/68e6b4aec1301ae024cc85232e7c.php:198
236msgid "this article appears wrong?"
237msgstr "cet article s'affiche mal ?"
238
239#: /var/www/poche-i18n/cache/7a/1e/68e6b4aec1301ae024cc85232e7c.php:200
240msgid "create an issue"
241msgstr "créer un ticket"
242
243#: /var/www/poche-i18n/cache/7a/1e/68e6b4aec1301ae024cc85232e7c.php:202
244msgid "or"
245msgstr "ou"
246
247#: /var/www/poche-i18n/cache/7a/1e/68e6b4aec1301ae024cc85232e7c.php:206
248msgid "contact us by mail"
249msgstr "contactez-nous par email"
250
251#: /var/www/poche-i18n/cache/88/8a/ee3b7080c13204391c14947a0c2c.php:22
252msgid "powered by"
253msgstr "propulsé par"
254
255#: /var/www/poche-i18n/cache/d4/28/e0d08991ec2d8a7b133505e7c651.php:31
256msgid "installation" 94msgid "installation"
257msgstr "installation" 95msgstr "installation"
258 96
259#: /var/www/poche-i18n/cache/d4/28/e0d08991ec2d8a7b133505e7c651.php:42
260msgid "install your poche" 97msgid "install your poche"
261msgstr "installez votre poche" 98msgstr "installez votre poche"
262 99
263#: /var/www/poche-i18n/cache/d4/28/e0d08991ec2d8a7b133505e7c651.php:47
264msgid "" 100msgid ""
265"poche is still not installed. Please fill the below form to install it. " 101"poche is still not installed. Please fill the below form to install it. "
266"Don't hesitate to <a href='http://inthepoche.com/?pages/Documentation'>read " 102"Don't hesitate to <a href='http://inthepoche.com/doc'>read the documentation "
267"the documentation on poche website</a>." 103"on poche website</a>."
268msgstr "" 104msgstr ""
269"poche n'est pas encore installé. Merci de remplir les champs ci-dessous pour " 105"poche n'est pas encore installé. Merci de remplir le formulaire suivant pour "
270"l'installer. N'hésitez pas à <a href='http://inthepoche.com/?pages/" 106"l'installer. N'hésitez pas à <a href='http://inthepoche.com/doc'>lire la "
271"Documentation'>lire la documentation sur le site de poche</a>." 107"documentation sur le site de poche</a>."
272 108
273#: /var/www/poche-i18n/cache/d4/28/e0d08991ec2d8a7b133505e7c651.php:53
274#: /var/www/poche-i18n/cache/ae/26/05eb67771213c16bd8c9aaf2d2c4.php:55
275msgid "Login" 109msgid "Login"
276msgstr "Nom d'utilisateur" 110msgstr "Nom d'utilisateur"
277 111
278#: /var/www/poche-i18n/cache/d4/28/e0d08991ec2d8a7b133505e7c651.php:67
279msgid "Repeat your password" 112msgid "Repeat your password"
280msgstr "Répétez votre mot de passe" 113msgstr "Répétez votre mot de passe"
281 114
282#: /var/www/poche-i18n/cache/d4/28/e0d08991ec2d8a7b133505e7c651.php:74
283msgid "Install" 115msgid "Install"
284msgstr "Installer" 116msgstr "Installer"
285 117
286#: /var/www/poche-i18n/cache/ae/26/05eb67771213c16bd8c9aaf2d2c4.php:31 118msgid "back to top"
287#: /var/www/poche-i18n/cache/ae/26/05eb67771213c16bd8c9aaf2d2c4.php:42 119msgstr "retour en haut de page"
288msgid "login to your poche"
289msgstr "Se connecter à votre poche"
290
291#: /var/www/poche-i18n/cache/ae/26/05eb67771213c16bd8c9aaf2d2c4.php:48
292msgid "you are in demo mode, some features may be disabled."
293msgstr ""
294"vous êtes en mode démo, certaines fonctionnalités sont peut-être désactivées."
295 120
296#: /var/www/poche-i18n/cache/ae/26/05eb67771213c16bd8c9aaf2d2c4.php:80 121msgid "favoris"
297msgid "Stay signed in" 122msgstr "favoris"
298msgstr "rester connecté"
299 123
300#: /var/www/poche-i18n/cache/ae/26/05eb67771213c16bd8c9aaf2d2c4.php:86 124msgid "archive"
301msgid "(Do not check on public computers)" 125msgstr "archive"
302msgstr "(à ne pas cocher sur un ordinateur public)"
303 126
304#: /var/www/poche-i18n/cache/ae/26/05eb67771213c16bd8c9aaf2d2c4.php:93 127msgid "unread"
305msgid "Sign in" 128msgstr "non lus"
306msgstr "Se connecter"
307 129
308#: /var/www/poche-i18n/cache/dd/a8/530129765655dcde0a70a31a78b6.php:55
309#: /var/www/poche-i18n/cache/dd/a8/530129765655dcde0a70a31a78b6.php:57
310msgid "by date asc" 130msgid "by date asc"
311msgstr "par date asc" 131msgstr "par date asc"
312 132
313#: /var/www/poche-i18n/cache/dd/a8/530129765655dcde0a70a31a78b6.php:59
314msgid "by date" 133msgid "by date"
315msgstr "par date" 134msgstr "par date"
316 135
317#: /var/www/poche-i18n/cache/dd/a8/530129765655dcde0a70a31a78b6.php:65
318#: /var/www/poche-i18n/cache/dd/a8/530129765655dcde0a70a31a78b6.php:67
319msgid "by date desc" 136msgid "by date desc"
320msgstr "par date desc" 137msgstr "par date desc"
321 138
322#: /var/www/poche-i18n/cache/dd/a8/530129765655dcde0a70a31a78b6.php:75
323#: /var/www/poche-i18n/cache/dd/a8/530129765655dcde0a70a31a78b6.php:77
324msgid "by title asc" 139msgid "by title asc"
325msgstr "par titre asc" 140msgstr "par titre asc"
326 141
327#: /var/www/poche-i18n/cache/dd/a8/530129765655dcde0a70a31a78b6.php:79
328msgid "by title" 142msgid "by title"
329msgstr "par titre" 143msgstr "par titre"
330 144
331#: /var/www/poche-i18n/cache/dd/a8/530129765655dcde0a70a31a78b6.php:85
332#: /var/www/poche-i18n/cache/dd/a8/530129765655dcde0a70a31a78b6.php:87
333msgid "by title desc" 145msgid "by title desc"
334msgstr "par titre desc" 146msgstr "par titre desc"
335 147
336#~ msgid "Please choose between Pocket & Readabilty :" 148msgid "No link available here!"
337#~ msgstr "Merci de choisir entre Pocket & Readability :" 149msgstr "Aucun lien n'est disponible ici !"
150
151msgid "toggle mark as read"
152msgstr "marquer comme lu / non lu"
153
154msgid "toggle favorite"
155msgstr "marquer comme favori"
156
157msgid "delete"
158msgstr "supprimer"
338 159
339#~ msgid "Bye bye Pocket, let's go !" 160msgid "original"
340#~ msgstr "Bye bye Pocket, en route !" 161msgstr "original"
341 162
342#~ msgid "Bye bye Readability, let's go !" 163msgid "results"
343#~ msgstr "Bye bye Readability, en route !" 164msgstr "résultats"
344 165
345#~ msgid "Welcome to poche !" 166msgid "tweet"
346#~ msgstr "Bienvenue dans poche !" 167msgstr "tweet"
347 168
348#~ msgid "Error with the import." 169msgid "email"
349#~ msgstr "Erreur durant l'import." 170msgstr "email"
350 171
351#~ msgid "Wrong token." 172msgid "shaarli"
352#~ msgstr "Mauvais jeton." 173msgstr "shaarli"
353 174
354#~ msgid "Login failed !" 175msgid "flattr"
355#~ msgstr "Connexion échouée." 176msgstr "flattr"
356 177
357#~ msgid "your password has been updated" 178msgid "this article appears wrong?"
358#~ msgstr "Votre mot de passe a été mis à jour. " 179msgstr "cet article s'affiche mal ?"
359 180
360#~ msgid "in demo mode, you can't update password" 181msgid "create an issue"
361#~ msgstr "En mode démo, le mot de passe ne peut être modifié." 182msgstr "créez un ticket"
362 183
363#~ msgid "" 184msgid "or"
364#~ "your password can't be empty and you have to repeat it in the second field" 185msgstr "ou"
365#~ msgstr ""
366#~ "Votre mot de passe ne peut être vide et vous devez le répéter dans le "
367#~ "second champ."
368 186
369#~ msgid "error during url preparation : the link wasn't added" 187msgid "contact us by mail"
370#~ msgstr "erreur durant l'insertion : le lien n'a pas été ajouté" 188msgstr "contactez-nous par email"
371 189
372#~ msgid "error during url preparation : the link is not valid" 190msgid "plop"
373#~ msgstr "erreur durant la préparation de l'URL : le lien n'est pas valide" 191msgstr "plop"
374 192
375#~ msgid "TEST" 193msgid "home"
376#~ msgstr "NICOLAS" 194msgstr "accueil"
195
196msgid "favorites"
197msgstr "favoris"
198
199msgid "logout"
200msgstr "déconnexion"
201
202msgid "powered by"
203msgstr "propulsé par"
204
205msgid "debug mode is on so cache is off."
206msgstr "le mode de debug est actif, le cache est donc désactivé."
207
208msgid "your poche version:"
209msgstr "votre version de poche :"
210
211msgid "storage:"
212msgstr "stockage :"
213
214msgid "login to your poche"
215msgstr "se connecter à votre poche"
216
217msgid "you are in demo mode, some features may be disabled."
218msgstr ""
219"vous êtes en mode démo, certaines fonctionnalités peuvent être désactivées."
220
221msgid "Stay signed in"
222msgstr "Rester connecté"
223
224msgid "(Do not check on public computers)"
225msgstr "(ne pas cocher sur un ordinateur public)"
226
227msgid "Sign in"
228msgstr "Se connecter"
diff --git a/poche_compatibility_test.php b/poche_compatibility_test.php
index 7c85a583..be4fd6f8 100644
--- a/poche_compatibility_test.php
+++ b/poche_compatibility_test.php
@@ -1,18 +1,4 @@
1<?php 1<?php
2/*
3FULL-TEXT-RSS V2 COMPATIBILITY TEST
4
51) Upload ftr_compatibility_test.php to the web-accessible root of your website.
6For example, if your website is www.example.com, upload it so that you can get
7to it at www.example.com/ftr_compatibility_test.php
8
92) Open your web browser and go to the page you just uploaded.
10
11Note: This compatibility test has been borrowed (and slightly adapted) from the one supplied by
12SimplePie.org. We have kept most of their checks intact as we use SimplePie in our application.
13http://github.com/simplepie/simplepie/tree/master/compatibility_test/
14*/
15
16$app_name = 'poche 1.0'; 2$app_name = 'poche 1.0';
17 3
18$php_ok = (function_exists('version_compare') && version_compare(phpversion(), '5.2.0', '>=')); 4$php_ok = (function_exists('version_compare') && version_compare(phpversion(), '5.2.0', '>='));
diff --git a/themes b/themes
new file mode 160000
Subproject 689dcedf8d6c7cf5e8424654fef4fd9687288dc
diff --git a/tpl/_bookmarklet.twig b/tpl/_bookmarklet.twig
deleted file mode 100644
index 2f3b2d16..00000000
--- a/tpl/_bookmarklet.twig
+++ /dev/null
@@ -1,3 +0,0 @@
1 <script type="text/javascript">
2 top["bookmarklet-url@inthepoche.com"]=""+"<!DOCTYPE html>"+"<html>"+"<head>"+"<title>poche it !</title>"+'<link rel="icon" href="{{poche_url}}tpl/img/favicon.ico" />'+"</head>"+"<body>"+"<script>"+"window.onload=function(){"+"window.setTimeout(function(){"+"history.back();"+"},250);"+"};"+"</scr"+"ipt>"+"</body>"+"</html>"
3 </script> \ No newline at end of file
diff --git a/tpl/_footer.twig b/tpl/_footer.twig
deleted file mode 100644
index 6891756a..00000000
--- a/tpl/_footer.twig
+++ /dev/null
@@ -1,4 +0,0 @@
1 <footer class="w600p center mt3 smaller txtright">
2 <p>{% trans "powered by" %} <a href="http://inthepoche.com">poche</a></p>
3 {% if constant('DEBUG_POCHE') == 1 %}<p><strong>{% trans "debug mode is on so cache is off." %} {% trans "your poche version:" %}{{constant('POCHE_VERSION')}}. {% trans "storage:" %} {{constant('STORAGE')}}</strong></p>{% endif %}
4 </footer> \ No newline at end of file
diff --git a/tpl/_head.twig b/tpl/_head.twig
deleted file mode 100644
index cab317a8..00000000
--- a/tpl/_head.twig
+++ /dev/null
@@ -1,12 +0,0 @@
1 <link rel="shortcut icon" type="image/x-icon" href="./tpl/img/favicon.ico" />
2 <link rel="apple-touch-icon-precomposed" sizes="144x144" href="./tpl/img/apple-touch-icon-144x144-precomposed.png">
3 <link rel="apple-touch-icon-precomposed" sizes="72x72" href="./tpl/img/apple-touch-icon-72x72-precomposed.png">
4 <link rel="apple-touch-icon-precomposed" href="./tpl/img/apple-touch-icon-precomposed.png">
5 <link rel="stylesheet" href="./tpl/css/knacss.css" media="all">
6 <link rel="stylesheet" href="./tpl/css/style.css" media="all">
7 <link rel="stylesheet" href="./tpl/css/style-{{ constant('THEME') }}.css" media="all" title="{{ constant('THEME') }} theme">
8 <link rel="stylesheet" href="./tpl/css/messages.css" media="all">
9 <link rel="stylesheet" href="./tpl/css/print.css" media="print">
10 <link href='//fonts.googleapis.com/css?family=Roboto' rel='stylesheet' type='text/css'>
11 <script src="./tpl/js/jquery-2.0.3.min.js"></script>
12 <script type="text/javascript">$(document).ready(function(){$("body").prepend('<a href="#top" class="top_link" title="{% trans "back to top" %}"><img src="./tpl/img/{{ constant("THEME") }}/backtotop.png" alt={% trans "back to top" %}"/></a>');$(window).scroll(function(){posScroll=$(document).scrollTop();if(posScroll>=400)$(".top_link").fadeIn(600);else $(".top_link").fadeOut(600)})})</script> \ No newline at end of file
diff --git a/tpl/_menu.twig b/tpl/_menu.twig
deleted file mode 100644
index 699d6a0c..00000000
--- a/tpl/_menu.twig
+++ /dev/null
@@ -1,7 +0,0 @@
1 <ul id="links">
2 <li><a href="./" {% if view == 'home' %}class="current"{% endif %}>{% trans "home" %}</a></li>
3 <li><a href="./?view=fav" {% if view == 'fav' %}class="current"{% endif %}>{% trans "favorites" %}</a></li>
4 <li><a href="./?view=archive" {% if view == 'archive' %}class="current"{% endif %}>{% trans "archive" %}</a></li>
5 <li><a href="./?view=config" {% if view == 'config' %}class="current"{% endif %}>{% trans "config" %}</a></li>
6 <li><a href="./?logout" title="{% trans "logout" %}">{% trans "logout" %}</a></li>
7 </ul> \ No newline at end of file
diff --git a/tpl/_messages.twig b/tpl/_messages.twig
deleted file mode 100644
index 679aa098..00000000
--- a/tpl/_messages.twig
+++ /dev/null
@@ -1 +0,0 @@
1 {{ messages | raw }} \ No newline at end of file
diff --git a/tpl/_top.twig b/tpl/_top.twig
deleted file mode 100644
index ae01cc3f..00000000
--- a/tpl/_top.twig
+++ /dev/null
@@ -1,3 +0,0 @@
1 <header class="w600p center mbm">
2 <h1><a href="./" title="{% trans "back to home" %}" ><img src="./tpl/img/logo.png" alt="logo poche" /></a></h1>
3 </header> \ No newline at end of file
diff --git a/tpl/config.twig b/tpl/config.twig
deleted file mode 100644
index c838c319..00000000
--- a/tpl/config.twig
+++ /dev/null
@@ -1,60 +0,0 @@
1{% extends "layout.twig" %}
2
3{% block title %}{% trans "config" %}{% endblock %}
4{% block menu %}
5 <ul id="links">
6 <li><a href="./" {% if view == 'home' %}class="current"{% endif %}>{% trans "home" %}</a></li>
7 <li><a href="./?view=fav" {% if view == 'fav' %}class="current"{% endif %}>{% trans "favorites" %}</a></li>
8 <li><a href="./?view=archive" {% if view == 'archive' %}class="current"{% endif %}>{% trans "archive" %}</a></li>
9 <li><a href="./?view=config" {% if view == 'config' %}class="current"{% endif %}>{% trans "config" %}</a></li>
10 <li><a href="./?logout" title="{% trans "logout" %}">{% trans "logout" %}</a></li>
11 </ul>
12{% endblock %}
13{% block content %}
14 <h2>{% trans "Poching a link" %}</h2>
15 <p>You can poche a link by several methods: (<a href="http://www.inthepoche.com/?pages/Documentation" title="{% trans "read the documentation" %}">?</a>)</p>
16 <ul>
17 <li>firefox: <a href="https://bitbucket.org/jogaulupeau/poche/downloads/poche.xpi" title="download the firefox extension">download the extension</a></li>
18 <li>chrome: <a href="https://bitbucket.org/jogaulupeau/poche/downloads/poche.crx" title="download the chrome extension">download the extension</a></li>
19 <li>android: <a href="https://bitbucket.org/jogaulupeau/poche/downloads/Poche.apk" title="download the application">download the application</a></li>
20 <li>bookmarklet: drag & drop this link to your bookmarks bar <a id="bookmarklet" ondragend="this.click();" title="i am a bookmarklet, use me !" href="javascript:if(top['bookmarklet-url@inthepoche.com']){top['bookmarklet-url@inthepoche.com'];}else{(function(){var%20url%20=%20location.href%20||%20url;window.open('{{ poche_url }}?action=add&url='%20+%20btoa(url),'_self');})();void(0);}">{% trans "poche it!" %}</a></li>
21 </ul>
22
23 <h2>{% trans "Updating poche" %}</h2>
24 <ul>
25 <li>{% trans "your version" %} : <strong>{{ constant('POCHE_VERSION') }}</strong></li>
26 <li>{% trans "latest stable version" %} : {{ prod }}. {% if compare_prod == -1 %}<strong><a href="http://inthepoche.com/?pages/T%C3%A9l%C3%A9charger-poche">{% trans "a more recent stable version is available." %}</a></strong>{% else %}{% trans "you are up to date." %}{% endif %}</li>
27 {% if constant('DEBUG_POCHE') == 1 %}<li>{% trans "latest dev version" %} : {{ dev }}. {% if compare_dev == -1 %}<strong><a href="http://inthepoche.com/?pages/T%C3%A9l%C3%A9charger-poche">{% trans "a more recent development version is available." %}</a></strong>{% else %}{% trans "you are up to date." %}{% endif %}</li>{% endif %}
28 </ul>
29
30 <h2>{% trans "Change your password" %}</h2>
31 <form method="post" action="?config" name="loginform">
32 <fieldset class="w500p">
33 <div class="row">
34 <label class="col w150p" for="password">{% trans "New password:" %}</label>
35 <input class="col" type="password" id="password" name="password" placeholder="{% trans "Password" %}" tabindex="2">
36 </div>
37 <div class="row">
38 <label class="col w150p" for="password_repeat">{% trans "Repeat your new password:" %}</label>
39 <input class="col" type="password" id="password_repeat" name="password_repeat" placeholder="{% trans "Password" %}" tabindex="3">
40 </div>
41 <div class="row mts txtcenter">
42 <button class="bouton" type="submit" tabindex="4">{% trans "Update" %}</button>
43 </div>
44 </fieldset>
45 <input type="hidden" name="returnurl" value="{{ referer }}">
46 <input type="hidden" name="token" value="{{ token }}">
47 </form>
48
49 <h2>{% trans "Import" %}</h2>
50 <p>{% trans "Please execute the import script locally, it can take a very long time." %}</p>
51 <p>{% trans "More infos in the official doc:" %} <a href="http://inthepoche.com/?pages/Documentation">inthepoche.com</a></p>
52 <ul>
53 <li><a href="./?import&from=pocket">{% trans "import from Pocket" %}</a> (you must have a "{{ constant('IMPORT_POCKET_FILE')}}" file on your server)</li>
54 <li><a href="./?import&from=readability">{% trans "import from Readability" %}</a> (you must have a "{{constant('IMPORT_READABILITY_FILE')}}" file on your server)</li>
55 <li><a href="./?import&from=instapaper">{% trans "import from Instapaper" %}</a> (you must have a "{{constant('IMPORT_INSTAPAPER_FILE')}}" file on your server)</li>
56 </ul>
57
58 <h2>{% trans "Export your poche datas" %}</h2>
59 <p><a href="./?export" target="_blank">{% trans "Click here" %}</a> {% trans "to export your poche datas." %}</p>
60{% endblock %} \ No newline at end of file
diff --git a/tpl/css/knacss.css b/tpl/css/knacss.css
deleted file mode 100644
index ca0696b7..00000000
--- a/tpl/css/knacss.css
+++ /dev/null
@@ -1 +0,0 @@
1html{font-size:62.5%}body{font-family:"Century Gothic",helvetica,arial,sans-serif;font-size:1.4em;line-height:1.5;color:#000;background-color:#FFF}p,ul,ol,dl,blockquote,pre,td,th,label,textarea,caption,details,figure,hgroup{margin:.75em 0 0;font-size:1em;line-height:1.5}h1,.h1-like{margin:.8077em 0 0 0;font-size:1.8571em;font-weight:normal;line-height:1.6154em}h2,.h2-like{margin:.875em 0 0 0;font-size:1.7143em;font-weight:normal;line-height:1.75em}h3,.h3-like{margin:.9545em 0 0 0;font-size:1.5714em;font-weight:normal;line-height:1.909em}h4,.h4-like{margin:1.05em 0 0 0;font-size:1.4286em;font-weight:normal;line-height:1.05em}h5,.h5-like{margin:1.1667em 0 0 0;font-size:1.2857em;font-weight:normal;line-height:1.1667em}h6,.h6-like{margin:1.3125em 0 0 0;font-size:1.1429em;font-weight:normal;line-height:1.3125em}.smaller{font-size:.7143em}.small{font-size:.8571em}.big{font-size:1.1429em}.bigger{font-size:1.2857em}.biggest{font-size:1.4286em}html,body,textarea,figure,label{margin:0;padding:0}ul,ol{padding-left:2em}code,pre,samp,kbd{font-family:consolas,'DejaVu Sans Mono',courier,monospace;line-height:1em;white-space:pre-wrap}code,kbd,mark{border-radius:2px}em{font-style:italic}strong{font-weight:bold}kbd{padding:0 2px;border:1px solid #999}code{padding:2px 4px;color:#B11;background:rgba(0,0,0,.04)}mark{padding:2px 4px;background:#FF0}table{margin-bottom:1.5em}p:first-child,ul:first-child,ol:first-child,dl:first-child,blockquote:first-child,pre:first-child,h1:first-child,h2:first-child,h3:first-child,h4:first-child,h5:first-child,h6:first-child{margin-top:0}li p,li ul,li ol{margin-top:0;margin-bottom:0}img,table,td,blockquote,code,pre,textarea,input,video{max-width:100%}div,textarea,table,td,th,code,pre,samp{word-wrap:break-word;-webkit-hyphens:auto;-moz-hyphens:auto;-ms-hyphens:auto;-o-hyphens:auto;hyphens:auto}img{height:auto;vertical-align:middle}#map_canvas img,.gmnoprint img{max-width:none}a img{border:0}body > script{display:none !important}.skip-links{position:absolute}.skip-links a{position:absolute;left:-7000px;padding:.5em;text-decoration:none;color:#FFF;background:#000}.skip-links a:focus{position:static}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.mod,.item{overflow:hidden}.row{display:table;width:100%;table-layout:fixed}.row > *,.col{display:table-cell;vertical-align:top}.clear,.line,.row{clear:both}.clearfix:after,.line:after,.mod:after{content:"";display:table;clear:both}.left{float:left}img.left{margin-right:1em}.right{float:right}img.right{margin-left:1em}img.left,img.right{margin-bottom:5px}.center{margin-right:auto;margin-left:auto}.txtleft{text-align:left}.txtright{text-align:right}.txtcenter{text-align:center}.inbl{display:inline-block;margin-right:-.25em;vertical-align:top}.w10{width:10%}.w20{width:20%}.w25{width:25%}.w30{width:30%}.w33{width:33.333%}.w40{width:40%}.w50{width:50%}.w60{width:60%}.w66{width:66.666%}.w70{width:70%}.w75{width:75%}.w80{width:80%}.w90{width:90%}.w100{width:100%}.w50p{width:50px}.w100p{width:100px}.w150p{width:150px}.w200p{width:200px}.w300p{width:300px}.w400p{width:400px}.w500p{width:500px}.w600p{width:600px}.w700p{width:700px}.w800p{width:800px}.w960p{width:960px}.mw960p{max-width:960px}.m-reset,.ma0{margin:0 !important}.p-reset,.pa0{padding:0 !important}.ma1,.mas{margin:10px !important}.ma2,.mam{margin:20px !important}.ma3,.mal{margin:30px !important}.pa1,.pas{padding:10px}.pa2,.pam{padding:20px}.pa3,.pal{padding:30px}.mt0,.mtn{margin-top:0 !important}.mt1,.mts{margin-top:10px !important}.mt2,.mtm{margin-top:20px !important}.mt3,.mtl{margin-top:30px !important}.mr0,.mrn{margin-right:0}.mr1,.mrs{margin-right:10px}.mr2,.mrm{margin-right:20px}.mr3,.mrl{margin-right:30px}.mb0,.mbn{margin-bottom:0 !important}.mb1,.mbs{margin-bottom:10px !important}.mb2,.mbm{margin-bottom:20px !important}.mb3,.mbl{margin-bottom:30px !important}.ml0,.mln{margin-left:0}.ml1,.mls{margin-left:10px}.ml2,.mlm{margin-left:20px}.ml3,.mll{margin-left:30px}.pt0,.ptn{padding-top:0}.pt1,.pts{padding-top:10px}.pt2,.ptm{padding-top:20px}.pt3,.ptl{padding-top:30px}.pr0,.prn{padding-right:0}.pr1,.prs{padding-right:10px}.pr2,.prm{padding-right:20px}.pr3,.prl{padding-right:30px}.pb0,.pbn{padding-bottom:0}.pb1,.pbs{padding-bottom:10px}.pb2,.pbm{padding-bottom:20px}.pb3,.pbl{padding-bottom:30px}.pl0,.pln{padding-left:0}.pl1,.pls{padding-left:10px}.pl2,.plm{padding-left:20px}.pl3,.pll{padding-left:30px}.visually-hidden{position:absolute;left:-7000px;overflow:hidden}[dir=rtl] .visually-hidden{right:-7000px;left:auto}.desktop-hidden{display:none}form,fieldset{border:none}input,button,select,label,.btn{font-family:inherit;vertical-align:middle}textarea{font-family:inherit;resize:vertical}.ie67 .clearfix,.ie67 .line,.ie67 .mod,.ie67 .row,.ie67 .col{zoom:1}.ie67 .btn,.ie67 .col,.ie67 .inbl{display:inline;zoom:1}.ie8 img{width:auto}@media print{p,blockquote{orphans:2;widows:2}blockquote,ul,ol{page-break-inside:avoid}h1,h2,h3,caption{page-break-after:avoid}}@media(orientation:landscape)and(max-device-width:768px){html,body{-webkit-text-size-adjust:100%}}[class*=grid] > *{float:left}[class*=grid] > * + *{margin-left:2%}.grid2 > *{width:49%}.grid3 > *{width:32%}.grid4 > *{width:23.5%}.grid5 > *{width:18.4%}.grid6 > *{width:15%}.grid2-1 > *:first-child,.grid1-2 > * + *{width:66%}.grid1-2 > *:first-child,.grid2-1 > * + *{width:32%}.grid1-3 > *:first-child,.grid3-1 > * + *{width:23.5%}.grid3-1 > *:first-child,.grid1-3 > * + *{width:74.5%}table,.table{max-width:100%;border-collapse:collapse;table-layout:fixed;vertical-align:top}table{width:100%}.table{display:table}caption{padding:10px;font-style:italic;color:#555}table{border:1px solid #CCC}tr > * + *{border-left:1px solid #CCC}th,td{padding:.3em .8em;border-bottom:1px solid #CCC;text-align:left}td{color:#333}.alternate{border:0}.alternate tbody{border:1px solid #CCC}.alternate thead tr > * + *{border-left:0}.alternate tbody tr > * + *{border-left:1px solid #CCC}.alternate-vert{border:0;border-right:1px solid #CCC}.alternate-vert tr >:first-child{border-bottom:0}.alternate-vert tr > * + *{border-top:1px solid #CCC}.striped tbody tr:nth-child(odd){background:#EEE;background:rgba(0,0,0,.05)}.striped-vert tr >:first-child{background:#EEE;background:rgba(0,0,0,.05)}.btn{display:inline-block}label{display:inline-block;vertical-align:middle;cursor:pointer}legend{border:0;white-space:normal}button,input,select{margin:0;font-family:"Century Gothic",helvetica,arial,sans-serif;font-size:100%;vertical-align:middle}textarea{min-height:5em;overflow:auto;font-size:1.75em;vertical-align:top;resize:vertical}}ol.styled{counter-reset:styled}ol.styled > li{counter-increment:styled;margin-bottom:.3em;list-style-type:none}ol.styled > li:before{content:counter(styled);display:inline-block;width:1em;height:1em;margin-right:.4em;padding:2px;border-radius:50%;text-align:center;text-indent:-.1em;font-size:.9em;line-height:1;vertical-align:middle;color:#FFF;background:rgba(0,0,0,.5)}@media(min-width:1280px){.large-hidden,.tablet-hidden{display:none !important}.large-visible{display:block !important}.large-no-float{float:none}.large-inbl{display:inline-block;float:none;vertical-align:top}.large-row{display:table;width:100% !important;table-layout:fixed}.large-col{display:table-cell;vertical-align:top}.large-w25{width:25% !important}.large-w33{width:33.3333% !important}.large-w50{width:50% !important}.large-w66{width:66.6666% !important}.large-w75{width:75% !important}.large-w100{display:block !important;float:none !important;clear:none !important;width:auto !important;margin-right:0 !important;margin-left:0 !important;border:0}.large-ma0,.large-man{margin:0 !important}}@media(max-width:768px){.w60,.w66,.w70,.w75,.w80,.w90,.w100,.w600p,.w700p,.w800p,.w960p,.mw960p,.medium-wauto{width:auto}.medium-hidden,.tablet-hidden{display:none !important}.medium-visible{display:block !important}.medium-no-float{float:none}.medium-inbl{display:inline-block;float:none;vertical-align:top}.medium-row{display:table;width:100% !important;table-layout:fixed}.medium-col{display:table-cell;vertical-align:top}.medium-w25{width:25% !important}.medium-w33{width:33.3333% !important}.medium-w50{width:50% !important}.medium-w66{width:66.6666% !important}.medium-w75{width:75% !important}.medium-w100{display:block !important;float:none !important;clear:none !important;width:auto !important;margin-right:0 !important;margin-left:0 !important;border:0}.medium-ma0,.medium-man{margin:0 !important}.grid4 > *{width:49% !important}.grid4 >:first-child + * + *{margin-left:0 !important}.grid6 > *{width:32% !important}.grid6 >:first-child + * + * + *{margin-left:0 !important}}@media(max-width:640px){.mod,.item,.col,fieldset{display:block !important;float:none !important;clear:none !important;width:auto !important;margin-right:0 !important;margin-left:0 !important;border:0}.w30,.w33,.w40,.w50,.w300p,.w400p,.w500p{width:auto}.row{display:block !important;width:100% !important}.tiny-hidden,.phone-hidden{display:none !important}.tiny-visible{display:block !important}.tiny-no-float{float:none}.tiny-inbl{display:inline-block;float:none;vertical-align:top}.tiny-row{display:table;width:100% !important;table-layout:fixed}.tiny-col{display:table-cell;vertical-align:top}th,td{display:block !important;width:auto !important;text-align:left !important}thead{display:none}.tiny-w25{width:25% !important}.tiny-w33{width:33.3333% !important}.tiny-w50{width:50% !important}.tiny-w66{width:66.6666% !important}.tiny-w75{width:75% !important}.tiny-w100{display:block !important;float:none !important;clear:none !important;width:auto !important;margin-right:0 !important;margin-left:0 !important;border:0}.tiny-ma0,.tiny-man{margin:0 !important}} \ No newline at end of file
diff --git a/tpl/css/messages.css b/tpl/css/messages.css
deleted file mode 100755
index 9222bb88..00000000
--- a/tpl/css/messages.css
+++ /dev/null
@@ -1,13 +0,0 @@
1.messages { width: 400px; -moz-border-radius: 4px; border-radius: 4px; display: block; padding: 10px 0; margin: 10px auto 10px; clear: both; }
2.messages a.closeMessage { margin: -14px -8px 0 0; display:none; width: 16px; height: 16px; float: right; background: url(../img/messages/close.png) no-repeat; }
3/*.messages:hover a.closeMessage { visibility:visible; }*/
4.messages p { margin: 3px 0 3px 10px !important; padding: 0 10px 0 23px !important; font-size: 14px; line-height: 16px; }
5.messages.error { border: 1px solid #C42608; color: #c00 !important; background: #FFF0EF; }
6.messages.error p { background: url(../img/messages/cross.png ) no-repeat 0px 50%; color:#c00 !important; }
7.messages.success {background: #E0FBCC; border: 1px solid #6DC70C; }
8.messages.success p { background: url(../img/messages/tick.png) no-repeat 0px 50%; color: #2B6301 !important; }
9.messages.warning { background: #FFFCD3; border: 1px solid #EBCD41; color: #000; }
10.messages.warning p { background: url(../img/messages/warning.png ) no-repeat 0px 50%; color: #5F4E01; }
11.messages.information, .messages.info { background: #DFEBFB; border: 1px solid #82AEE7; }
12.messages.information p, .messages.info p { background: url(../img/messages/help.png ) no-repeat 0px 50%; color: #064393; }
13.messages.information a { text-decoration: underline; } \ No newline at end of file
diff --git a/tpl/css/print.css b/tpl/css/print.css
deleted file mode 100644
index a3b0a599..00000000
--- a/tpl/css/print.css
+++ /dev/null
@@ -1,19 +0,0 @@
1body > header,
2body > footer,
3a.top_link,
4div.tools,
5header div
6{
7 display: none !important;
8}
9
10article
11{
12 border: none !important;
13}
14
15div.vieworiginal a::after
16{
17 margin-left: 5px;
18 content: "("attr(href)")";
19}
diff --git a/tpl/css/style-light.css b/tpl/css/style-light.css
deleted file mode 100644
index e2788a1c..00000000
--- a/tpl/css/style-light.css
+++ /dev/null
@@ -1,57 +0,0 @@
1
2a.back span {
3 background: url('../img/light/left.png') no-repeat;
4}
5
6a.top span {
7 background: url('../img/light/top.png') no-repeat;
8}
9
10
11a.fav span {
12 background: url('../img/light/star-on.png') no-repeat;
13}
14
15a.fav span:hover {
16 background: url('../img/light/star-off.png') no-repeat;
17}
18
19a.fav-off span {
20 background: url('../img/light/star-off.png') no-repeat;
21}
22
23a.fav-off span:hover {
24 background: url('../img/light/star-on.png') no-repeat;
25}
26
27a.archive span {
28 background: url('../img/light/checkmark-on.png') no-repeat;
29}
30
31a.archive span:hover {
32 background: url('../img/light/checkmark-off.png') no-repeat;
33}
34
35a.archive-off span {
36 background: url('../img/light/checkmark-off.png') no-repeat;
37}
38
39a.archive-off span:hover {
40 background: url('../img/light/checkmark-on.png') no-repeat;
41}
42
43a.twitter span {
44 background: url('../img/light/twitter.png') no-repeat;
45}
46
47a.shaarli span {
48 background: url('../img/light/shaarli.png') no-repeat;
49}
50
51a.email span {
52 background: url('../img/light/envelop.png') no-repeat;
53}
54
55a.delete span {
56 background: url('../img/light/remove.png') no-repeat;
57} \ No newline at end of file
diff --git a/tpl/css/style.css b/tpl/css/style.css
deleted file mode 100644
index 7633534c..00000000
--- a/tpl/css/style.css
+++ /dev/null
@@ -1,259 +0,0 @@
1body {
2 font-size: 16px;
3 font-family: 'Roboto', Verdana, Geneva, sans-serif;
4 margin: 10px;
5 color: #000;
6}
7
8header {
9 text-align: center;
10}
11
12header h1 {
13 font-size: 1.3em;
14}
15
16a, a:hover, a:visited {
17 color: #000;
18}
19
20.bouton {
21 background-color: #000;
22 color: #fff;
23 border: none;
24 border-radius: 2px;
25}
26.bouton:hover {
27 background-color: #222;
28 color: #f1f1f1;
29 cursor: pointer;
30}
31
32#main {
33 margin: 0 auto;
34}
35
36#main #links {
37 padding: 0;
38 list-style-type: none;
39 text-align: center;
40 font-size: 0.9em;
41}
42
43#main #links li {
44 display: inline;
45}
46
47#main #links li .current {
48 background-color: #000;
49 color: #fff;
50 -webkit-border-radius: 2px;
51 border-radius: 2px;
52}
53
54#main #sort {
55 padding: 0;
56 list-style-type: none;
57 text-align: center;
58 opacity: 0.5;
59}
60
61#main #sort li {
62 display: inline;
63 font-size: 0.9em;
64}
65
66#main #sort img:hover {
67 cursor: pointer;
68}
69
70#links a {
71 text-decoration: none;
72 padding: 5px 10px;
73}
74#links a:hover {
75 background-color: #040707;
76 color: #F1F1F1;
77 -webkit-border-radius: 2px;
78 border-radius: 2px;
79}
80
81/*** ***/
82/*** LINKS DISPLAY ***/
83
84#main .tool {
85 text-decoration: none;
86 cursor: pointer;
87}
88
89#main #content {
90 margin-top: 20px;
91}
92
93#main #content h2 {
94 font-size: 1.3em;
95 text-decoration: none;
96}
97
98#main #content .entrie {
99 border-bottom: 1px dashed #222;
100}
101
102#main .entrie .tools {
103 list-style-type: none;
104}
105
106#main .entrie .tools + p {
107 min-height: 5.5em;
108}
109
110/*
111#main .entrie .tools li {
112 display: inline;
113}
114*/
115
116.tools {
117 float: right;
118 text-align: right;
119 opacity: 0.5;
120}
121
122.tools p {
123 font-size: 0.8em;
124}
125
126/*
127.tools ul {
128 padding: 0; margin: 0;
129 list-style-type: none;
130}
131
132.tools ul li {
133 line-height: 20px;
134}
135
136.tools .tool {
137 cursor: pointer;
138}*/
139
140#main .entrie .tools .tool span, #article .tools .tool span {
141 display: inline-block;
142 width: 16px;
143 height: 16px;
144 /* Hide textual content */
145 text-indent: -9999px;
146 text-align: left;
147 overflow: hidden;
148}
149
150
151/*** ***/
152/*** ARTICLE PAGE ***/
153
154#article {
155 margin: 0 auto;
156}
157
158#article header, #article article {
159 border-bottom: 1px solid #222;
160}
161
162#article header {
163 text-align: left;
164}
165
166#article header a {
167 text-decoration: none;
168}
169
170.vieworiginal a, .vieworiginal a:hover, .vieworiginal a:visited {
171 text-decoration: none;
172 color: #888;
173}
174
175.backhome {
176 display: inline;
177}
178
179#article .tools {
180 position: relative;
181 display: inline;
182 top: 0;
183 right: 0;
184 width: 100%;
185}
186
187#article .tools ul li {
188 display: inline;
189}
190
191
192/* Pagination */
193.pagination {
194 clear: both;
195 padding-bottom: 20px;
196 padding-top: 10px;
197 text-align: right;
198}
199.pagination a {
200 border: 1px solid #d5d5d5;
201 color: #333;
202 font-size: 11px;
203 font-weight: bold;
204 height: 25px;
205 padding: 4px 8px;
206 text-decoration: none;
207 margin: 2px;
208}
209.pagination a:hover, .pagination a:active {
210 background-color: #efefef;
211}
212.pagination .current {
213 background-color: #ccc;
214 border: 1px solid #d5d5d5;
215 color: #000;
216 font-size: 11px;
217 font-weight: bold;
218 height: 25px;
219 padding: 4px 8px;
220 text-decoration: none;
221 margin: 2px;
222}
223.pagination .disabled {
224 border: 1px solid #eee;
225 color: #ddd;
226 margin: 2px;
227 padding: 4px 8px;
228 font-size: 11px;
229 font-weight: bold;
230}
231
232#bookmarklet {
233 padding: 5px;
234 border: 1px dashed #808080;
235 background: #fff;
236 cursor: move;
237}
238
239.top_link {
240 position: fixed;
241 right: 15px;
242 bottom: 15px;
243 display: none;
244 padding: 20px;
245 background: #ccc;
246 -moz-border-radius: 40px;
247 -webkit-border-radius: 40px;
248 border-radius: 40px;
249 opacity: 0.9;
250 z-index: 2000;
251}
252
253footer {
254 clear: both;
255}
256
257.reading-time {
258 font-size: 0.8em;
259}
diff --git a/tpl/error.twig b/tpl/error.twig
deleted file mode 100644
index 14c49925..00000000
--- a/tpl/error.twig
+++ /dev/null
@@ -1,6 +0,0 @@
1{% extends "layout.twig" %}
2{% block title %}{% trans "plop" %}{% endblock %}
3{% block content %}
4 {{ msg|raw }}
5 <p>Don't forget <a href="http://inthepoche.com/?pages/Documentation">the documentation</a>.</p>
6{% endblock %} \ No newline at end of file
diff --git a/tpl/export.twig b/tpl/export.twig
deleted file mode 100644
index 4adb9540..00000000
--- a/tpl/export.twig
+++ /dev/null
@@ -1 +0,0 @@
1{{ export }} \ No newline at end of file
diff --git a/tpl/home.twig b/tpl/home.twig
deleted file mode 100644
index a2fa9a93..00000000
--- a/tpl/home.twig
+++ /dev/null
@@ -1,28 +0,0 @@
1{% extends "layout.twig" %}
2{% block title %}{% trans "home" %}{% endblock %}
3{% block menu %}
4{% include '_menu.twig' %}
5{% endblock %}
6{% block precontent %}
7 <ul id="sort">
8 <li><a href="./?sort=ia&amp;view={{ view }}"><img src="./tpl/img/{{ constant('THEME') }}/top.png" alt="{% trans "by date asc" %}" title="{% trans "by date asc" %}" /></a> {% trans "by date" %} <a href="./?sort=id&amp;view={{ view }}"><img src="./tpl/img/{{ constant('THEME') }}/down.png" alt="{% trans "by date desc" %}" title="{% trans "by date desc" %}" /></a></li>
9 <li><a href="./?sort=ta&amp;view={{ view }}"><img src="./tpl/img/{{ constant('THEME') }}/top.png" alt="{% trans "by title asc" %}" title="{% trans "by title asc" %}" /></a> {% trans "by title" %} <a href="./?sort=td&amp;view={{ view }}"><img src="./tpl/img/{{ constant('THEME') }}/down.png" alt="{% trans "by title desc" %}" title="{% trans "by title desc" %}" /></a></li>
10 </ul>
11{% endblock %}
12{% block content %}
13 {{ page_links | raw }}
14 {% for entry in entries %}
15 <div id="entry-{{ entry.id|e }}" class="entrie">
16 <h2><a href="index.php?view=view&amp;id={{ entry.id|e }}">{{ entry.title|raw }}</a></h2>
17 <ul class="tools">
18 <li><a title="{% trans "toggle mark as read" %}" class="tool archive {% if entry.is_read == 0 %}archive-off{% endif %}" href="./?action=toggle_archive&amp;id={{ entry.id|e }}"><span>{% trans "toggle mark as read" %}</span></a></li>
19 <li><a title="{% trans "toggle favorite" %}" class="tool fav {% if entry.is_fav == 0 %}fav-off{% endif %}" href="./?action=toggle_fav&amp;id={{ entry.id|e }}"><span>{% trans "toggle favorite" %}</span></a></li>
20 <li><a title="{% trans "delete" %}" class="tool delete" href="./?action=delete&amp;id={{ entry.id|e }}"><span>{% trans "delete" %}</span></a></li>
21 <li class="reading-time">{{ entry.content| getReadingTime }} min</li>
22 </ul>
23 <p>{{ entry.content|striptags|slice(0, 300) }}...</p>
24 <p class="vieworiginal txtright small"><a href="{{ entry.url|e }}" target="_blank" title="{% trans "original" %} : {{ entry.title|e }}">{{ entry.url | e | getDomain }}</a></p>
25 </div>
26 {% endfor %}
27 {{ page_links | raw }}
28{% endblock %} \ No newline at end of file
diff --git a/tpl/img/apple-touch-icon-144x144-precomposed.png b/tpl/img/apple-touch-icon-144x144-precomposed.png
deleted file mode 100644
index 557b479c..00000000
--- a/tpl/img/apple-touch-icon-144x144-precomposed.png
+++ /dev/null
Binary files differ
diff --git a/tpl/img/apple-touch-icon-72x72-precomposed.png b/tpl/img/apple-touch-icon-72x72-precomposed.png
deleted file mode 100644
index e167d3a4..00000000
--- a/tpl/img/apple-touch-icon-72x72-precomposed.png
+++ /dev/null
Binary files differ
diff --git a/tpl/img/apple-touch-icon.png b/tpl/img/apple-touch-icon.png
deleted file mode 100644
index 4d222fba..00000000
--- a/tpl/img/apple-touch-icon.png
+++ /dev/null
Binary files differ
diff --git a/tpl/img/favicon.ico b/tpl/img/favicon.ico
deleted file mode 100644
index 0e9ff779..00000000
--- a/tpl/img/favicon.ico
+++ /dev/null
Binary files differ
diff --git a/tpl/img/light/backtotop.png b/tpl/img/light/backtotop.png
deleted file mode 100755
index 051238ef..00000000
--- a/tpl/img/light/backtotop.png
+++ /dev/null
Binary files differ
diff --git a/tpl/img/light/checkmark-off.png b/tpl/img/light/checkmark-off.png
deleted file mode 100644
index 3db5a06d..00000000
--- a/tpl/img/light/checkmark-off.png
+++ /dev/null
Binary files differ
diff --git a/tpl/img/light/checkmark-on.png b/tpl/img/light/checkmark-on.png
deleted file mode 100644
index cd3abb2c..00000000
--- a/tpl/img/light/checkmark-on.png
+++ /dev/null
Binary files differ
diff --git a/tpl/img/light/down.png b/tpl/img/light/down.png
deleted file mode 100644
index b9d536a7..00000000
--- a/tpl/img/light/down.png
+++ /dev/null
Binary files differ
diff --git a/tpl/img/light/envelop.png b/tpl/img/light/envelop.png
deleted file mode 100755
index 6be1c886..00000000
--- a/tpl/img/light/envelop.png
+++ /dev/null
Binary files differ
diff --git a/tpl/img/light/left.png b/tpl/img/light/left.png
deleted file mode 100755
index a0a53631..00000000
--- a/tpl/img/light/left.png
+++ /dev/null
Binary files differ
diff --git a/tpl/img/light/remove.png b/tpl/img/light/remove.png
deleted file mode 100644
index f8ad56a3..00000000
--- a/tpl/img/light/remove.png
+++ /dev/null
Binary files differ
diff --git a/tpl/img/light/shaarli.png b/tpl/img/light/shaarli.png
deleted file mode 100644
index 1eb30f60..00000000
--- a/tpl/img/light/shaarli.png
+++ /dev/null
Binary files differ
diff --git a/tpl/img/light/star-off.png b/tpl/img/light/star-off.png
deleted file mode 100644
index 6a0133a7..00000000
--- a/tpl/img/light/star-off.png
+++ /dev/null
Binary files differ
diff --git a/tpl/img/light/star-on.png b/tpl/img/light/star-on.png
deleted file mode 100644
index a9f96eaa..00000000
--- a/tpl/img/light/star-on.png
+++ /dev/null
Binary files differ
diff --git a/tpl/img/light/top.png b/tpl/img/light/top.png
deleted file mode 100755
index 954a8c0a..00000000
--- a/tpl/img/light/top.png
+++ /dev/null
Binary files differ
diff --git a/tpl/img/light/twitter.png b/tpl/img/light/twitter.png
deleted file mode 100755
index cfcfe419..00000000
--- a/tpl/img/light/twitter.png
+++ /dev/null
Binary files differ
diff --git a/tpl/img/logo.png b/tpl/img/logo.png
deleted file mode 100644
index 5305c77d..00000000
--- a/tpl/img/logo.png
+++ /dev/null
Binary files differ
diff --git a/tpl/img/messages/close.png b/tpl/img/messages/close.png
deleted file mode 100755
index 731aa018..00000000
--- a/tpl/img/messages/close.png
+++ /dev/null
Binary files differ
diff --git a/tpl/img/messages/cross.png b/tpl/img/messages/cross.png
deleted file mode 100755
index 1514d51a..00000000
--- a/tpl/img/messages/cross.png
+++ /dev/null
Binary files differ
diff --git a/tpl/img/messages/help.png b/tpl/img/messages/help.png
deleted file mode 100755
index 5c870176..00000000
--- a/tpl/img/messages/help.png
+++ /dev/null
Binary files differ
diff --git a/tpl/img/messages/tick.png b/tpl/img/messages/tick.png
deleted file mode 100755
index a9925a06..00000000
--- a/tpl/img/messages/tick.png
+++ /dev/null
Binary files differ
diff --git a/tpl/img/messages/warning.png b/tpl/img/messages/warning.png
deleted file mode 100755
index 628cf2da..00000000
--- a/tpl/img/messages/warning.png
+++ /dev/null
Binary files differ
diff --git a/tpl/install.twig b/tpl/install.twig
deleted file mode 100644
index afb5b0f6..00000000
--- a/tpl/install.twig
+++ /dev/null
@@ -1,28 +0,0 @@
1{% extends "layout.twig" %}
2{% block title %}{% trans "installation" %}{% endblock %}
3{% block content %}
4 <form method="post" action="?install" name="loginform">
5 <fieldset class="w500p center">
6 <h2 class="mbs txtcenter">{% trans "install your poche" %}</h2>
7 <p>
8 {% trans "poche is still not installed. Please fill the below form to install it. Don't hesitate to <a href='http://inthepoche.com/?pages/Documentation'>read the documentation on poche website</a>." %}
9 </p>
10 <p class="row">
11 <label class="col w150p" for="login">{% trans "Login" %}</label>
12 <input class="col" type="text" id="login" name="login" placeholder="Login" tabindex="1" autofocus />
13 </p>
14 <p class="row">
15 <label class="col w150p" for="password">{% trans "Password" %}</label>
16 <input class="col" type="password" id="password" name="password" placeholder="Password" tabindex="2">
17 </p>
18 <p class="row">
19 <label class="col w150p" for="password_repeat">{% trans "Repeat your password" %}</label>
20 <input class="col" type="password" id="password_repeat" name="password_repeat" placeholder="Password" tabindex="3">
21 </p>
22 <p class="row mts txtcenter">
23 <button class="bouton" type="submit" tabindex="4">{% trans "Install" %}</button>
24 </p>
25 </fieldset>
26 <input type="hidden" name="token" value="{{ token }}">
27 </form>
28{% endblock %} \ No newline at end of file
diff --git a/tpl/js/jquery-2.0.3.min.js b/tpl/js/jquery-2.0.3.min.js
deleted file mode 100644
index 2be209dd..00000000
--- a/tpl/js/jquery-2.0.3.min.js
+++ /dev/null
@@ -1,6 +0,0 @@
1/*! jQuery v2.0.3 | (c) 2005, 2013 jQuery Foundation, Inc. | jquery.org/license
2//@ sourceMappingURL=jquery-2.0.3.min.map
3*/
4(function(e,undefined){var t,n,r=typeof undefined,i=e.location,o=e.document,s=o.documentElement,a=e.jQuery,u=e.$,l={},c=[],p="2.0.3",f=c.concat,h=c.push,d=c.slice,g=c.indexOf,m=l.toString,y=l.hasOwnProperty,v=p.trim,x=function(e,n){return new x.fn.init(e,n,t)},b=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,w=/\S+/g,T=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,C=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,k=/^-ms-/,N=/-([\da-z])/gi,E=function(e,t){return t.toUpperCase()},S=function(){o.removeEventListener("DOMContentLoaded",S,!1),e.removeEventListener("load",S,!1),x.ready()};x.fn=x.prototype={jquery:p,constructor:x,init:function(e,t,n){var r,i;if(!e)return this;if("string"==typeof e){if(r="<"===e.charAt(0)&&">"===e.charAt(e.length-1)&&e.length>=3?[null,e,null]:T.exec(e),!r||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof x?t[0]:t,x.merge(this,x.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:o,!0)),C.test(r[1])&&x.isPlainObject(t))for(r in t)x.isFunction(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return i=o.getElementById(r[2]),i&&i.parentNode&&(this.length=1,this[0]=i),this.context=o,this.selector=e,this}return e.nodeType?(this.context=this[0]=e,this.length=1,this):x.isFunction(e)?n.ready(e):(e.selector!==undefined&&(this.selector=e.selector,this.context=e.context),x.makeArray(e,this))},selector:"",length:0,toArray:function(){return d.call(this)},get:function(e){return null==e?this.toArray():0>e?this[this.length+e]:this[e]},pushStack:function(e){var t=x.merge(this.constructor(),e);return t.prevObject=this,t.context=this.context,t},each:function(e,t){return x.each(this,e,t)},ready:function(e){return x.ready.promise().done(e),this},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(0>e?t:0);return this.pushStack(n>=0&&t>n?[this[n]]:[])},map:function(e){return this.pushStack(x.map(this,function(t,n){return e.call(t,n,t)}))},end:function(){return this.prevObject||this.constructor(null)},push:h,sort:[].sort,splice:[].splice},x.fn.init.prototype=x.fn,x.extend=x.fn.extend=function(){var e,t,n,r,i,o,s=arguments[0]||{},a=1,u=arguments.length,l=!1;for("boolean"==typeof s&&(l=s,s=arguments[1]||{},a=2),"object"==typeof s||x.isFunction(s)||(s={}),u===a&&(s=this,--a);u>a;a++)if(null!=(e=arguments[a]))for(t in e)n=s[t],r=e[t],s!==r&&(l&&r&&(x.isPlainObject(r)||(i=x.isArray(r)))?(i?(i=!1,o=n&&x.isArray(n)?n:[]):o=n&&x.isPlainObject(n)?n:{},s[t]=x.extend(l,o,r)):r!==undefined&&(s[t]=r));return s},x.extend({expando:"jQuery"+(p+Math.random()).replace(/\D/g,""),noConflict:function(t){return e.$===x&&(e.$=u),t&&e.jQuery===x&&(e.jQuery=a),x},isReady:!1,readyWait:1,holdReady:function(e){e?x.readyWait++:x.ready(!0)},ready:function(e){(e===!0?--x.readyWait:x.isReady)||(x.isReady=!0,e!==!0&&--x.readyWait>0||(n.resolveWith(o,[x]),x.fn.trigger&&x(o).trigger("ready").off("ready")))},isFunction:function(e){return"function"===x.type(e)},isArray:Array.isArray,isWindow:function(e){return null!=e&&e===e.window},isNumeric:function(e){return!isNaN(parseFloat(e))&&isFinite(e)},type:function(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?l[m.call(e)]||"object":typeof e},isPlainObject:function(e){if("object"!==x.type(e)||e.nodeType||x.isWindow(e))return!1;try{if(e.constructor&&!y.call(e.constructor.prototype,"isPrototypeOf"))return!1}catch(t){return!1}return!0},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},error:function(e){throw Error(e)},parseHTML:function(e,t,n){if(!e||"string"!=typeof e)return null;"boolean"==typeof t&&(n=t,t=!1),t=t||o;var r=C.exec(e),i=!n&&[];return r?[t.createElement(r[1])]:(r=x.buildFragment([e],t,i),i&&x(i).remove(),x.merge([],r.childNodes))},parseJSON:JSON.parse,parseXML:function(e){var t,n;if(!e||"string"!=typeof e)return null;try{n=new DOMParser,t=n.parseFromString(e,"text/xml")}catch(r){t=undefined}return(!t||t.getElementsByTagName("parsererror").length)&&x.error("Invalid XML: "+e),t},noop:function(){},globalEval:function(e){var t,n=eval;e=x.trim(e),e&&(1===e.indexOf("use strict")?(t=o.createElement("script"),t.text=e,o.head.appendChild(t).parentNode.removeChild(t)):n(e))},camelCase:function(e){return e.replace(k,"ms-").replace(N,E)},nodeName:function(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()},each:function(e,t,n){var r,i=0,o=e.length,s=j(e);if(n){if(s){for(;o>i;i++)if(r=t.apply(e[i],n),r===!1)break}else for(i in e)if(r=t.apply(e[i],n),r===!1)break}else if(s){for(;o>i;i++)if(r=t.call(e[i],i,e[i]),r===!1)break}else for(i in e)if(r=t.call(e[i],i,e[i]),r===!1)break;return e},trim:function(e){return null==e?"":v.call(e)},makeArray:function(e,t){var n=t||[];return null!=e&&(j(Object(e))?x.merge(n,"string"==typeof e?[e]:e):h.call(n,e)),n},inArray:function(e,t,n){return null==t?-1:g.call(t,e,n)},merge:function(e,t){var n=t.length,r=e.length,i=0;if("number"==typeof n)for(;n>i;i++)e[r++]=t[i];else while(t[i]!==undefined)e[r++]=t[i++];return e.length=r,e},grep:function(e,t,n){var r,i=[],o=0,s=e.length;for(n=!!n;s>o;o++)r=!!t(e[o],o),n!==r&&i.push(e[o]);return i},map:function(e,t,n){var r,i=0,o=e.length,s=j(e),a=[];if(s)for(;o>i;i++)r=t(e[i],i,n),null!=r&&(a[a.length]=r);else for(i in e)r=t(e[i],i,n),null!=r&&(a[a.length]=r);return f.apply([],a)},guid:1,proxy:function(e,t){var n,r,i;return"string"==typeof t&&(n=e[t],t=e,e=n),x.isFunction(e)?(r=d.call(arguments,2),i=function(){return e.apply(t||this,r.concat(d.call(arguments)))},i.guid=e.guid=e.guid||x.guid++,i):undefined},access:function(e,t,n,r,i,o,s){var a=0,u=e.length,l=null==n;if("object"===x.type(n)){i=!0;for(a in n)x.access(e,t,a,n[a],!0,o,s)}else if(r!==undefined&&(i=!0,x.isFunction(r)||(s=!0),l&&(s?(t.call(e,r),t=null):(l=t,t=function(e,t,n){return l.call(x(e),n)})),t))for(;u>a;a++)t(e[a],n,s?r:r.call(e[a],a,t(e[a],n)));return i?e:l?t.call(e):u?t(e[0],n):o},now:Date.now,swap:function(e,t,n,r){var i,o,s={};for(o in t)s[o]=e.style[o],e.style[o]=t[o];i=n.apply(e,r||[]);for(o in t)e.style[o]=s[o];return i}}),x.ready.promise=function(t){return n||(n=x.Deferred(),"complete"===o.readyState?setTimeout(x.ready):(o.addEventListener("DOMContentLoaded",S,!1),e.addEventListener("load",S,!1))),n.promise(t)},x.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(e,t){l["[object "+t+"]"]=t.toLowerCase()});function j(e){var t=e.length,n=x.type(e);return x.isWindow(e)?!1:1===e.nodeType&&t?!0:"array"===n||"function"!==n&&(0===t||"number"==typeof t&&t>0&&t-1 in e)}t=x(o),function(e,undefined){var t,n,r,i,o,s,a,u,l,c,p,f,h,d,g,m,y,v="sizzle"+-new Date,b=e.document,w=0,T=0,C=st(),k=st(),N=st(),E=!1,S=function(e,t){return e===t?(E=!0,0):0},j=typeof undefined,D=1<<31,A={}.hasOwnProperty,L=[],q=L.pop,H=L.push,O=L.push,F=L.slice,P=L.indexOf||function(e){var t=0,n=this.length;for(;n>t;t++)if(this[t]===e)return t;return-1},R="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",M="[\\x20\\t\\r\\n\\f]",W="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",$=W.replace("w","w#"),B="\\["+M+"*("+W+")"+M+"*(?:([*^$|!~]?=)"+M+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+$+")|)|)"+M+"*\\]",I=":("+W+")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|"+B.replace(3,8)+")*)|.*)\\)|)",z=RegExp("^"+M+"+|((?:^|[^\\\\])(?:\\\\.)*)"+M+"+$","g"),_=RegExp("^"+M+"*,"+M+"*"),X=RegExp("^"+M+"*([>+~]|"+M+")"+M+"*"),U=RegExp(M+"*[+~]"),Y=RegExp("="+M+"*([^\\]'\"]*)"+M+"*\\]","g"),V=RegExp(I),G=RegExp("^"+$+"$"),J={ID:RegExp("^#("+W+")"),CLASS:RegExp("^\\.("+W+")"),TAG:RegExp("^("+W.replace("w","w*")+")"),ATTR:RegExp("^"+B),PSEUDO:RegExp("^"+I),CHILD:RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:RegExp("^(?:"+R+")$","i"),needsContext:RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Q=/^[^{]+\{\s*\[native \w/,K=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,Z=/^(?:input|select|textarea|button)$/i,et=/^h\d$/i,tt=/'|\\/g,nt=RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),rt=function(e,t,n){var r="0x"+t-65536;return r!==r||n?t:0>r?String.fromCharCode(r+65536):String.fromCharCode(55296|r>>10,56320|1023&r)};try{O.apply(L=F.call(b.childNodes),b.childNodes),L[b.childNodes.length].nodeType}catch(it){O={apply:L.length?function(e,t){H.apply(e,F.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function ot(e,t,r,i){var o,s,a,u,l,f,g,m,x,w;if((t?t.ownerDocument||t:b)!==p&&c(t),t=t||p,r=r||[],!e||"string"!=typeof e)return r;if(1!==(u=t.nodeType)&&9!==u)return[];if(h&&!i){if(o=K.exec(e))if(a=o[1]){if(9===u){if(s=t.getElementById(a),!s||!s.parentNode)return r;if(s.id===a)return r.push(s),r}else if(t.ownerDocument&&(s=t.ownerDocument.getElementById(a))&&y(t,s)&&s.id===a)return r.push(s),r}else{if(o[2])return O.apply(r,t.getElementsByTagName(e)),r;if((a=o[3])&&n.getElementsByClassName&&t.getElementsByClassName)return O.apply(r,t.getElementsByClassName(a)),r}if(n.qsa&&(!d||!d.test(e))){if(m=g=v,x=t,w=9===u&&e,1===u&&"object"!==t.nodeName.toLowerCase()){f=gt(e),(g=t.getAttribute("id"))?m=g.replace(tt,"\\$&"):t.setAttribute("id",m),m="[id='"+m+"'] ",l=f.length;while(l--)f[l]=m+mt(f[l]);x=U.test(e)&&t.parentNode||t,w=f.join(",")}if(w)try{return O.apply(r,x.querySelectorAll(w)),r}catch(T){}finally{g||t.removeAttribute("id")}}}return kt(e.replace(z,"$1"),t,r,i)}function st(){var e=[];function t(n,r){return e.push(n+=" ")>i.cacheLength&&delete t[e.shift()],t[n]=r}return t}function at(e){return e[v]=!0,e}function ut(e){var t=p.createElement("div");try{return!!e(t)}catch(n){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function lt(e,t){var n=e.split("|"),r=e.length;while(r--)i.attrHandle[n[r]]=t}function ct(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&(~t.sourceIndex||D)-(~e.sourceIndex||D);if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function pt(e){return function(t){var n=t.nodeName.toLowerCase();return"input"===n&&t.type===e}}function ft(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function ht(e){return at(function(t){return t=+t,at(function(n,r){var i,o=e([],n.length,t),s=o.length;while(s--)n[i=o[s]]&&(n[i]=!(r[i]=n[i]))})})}s=ot.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return t?"HTML"!==t.nodeName:!1},n=ot.support={},c=ot.setDocument=function(e){var t=e?e.ownerDocument||e:b,r=t.defaultView;return t!==p&&9===t.nodeType&&t.documentElement?(p=t,f=t.documentElement,h=!s(t),r&&r.attachEvent&&r!==r.top&&r.attachEvent("onbeforeunload",function(){c()}),n.attributes=ut(function(e){return e.className="i",!e.getAttribute("className")}),n.getElementsByTagName=ut(function(e){return e.appendChild(t.createComment("")),!e.getElementsByTagName("*").length}),n.getElementsByClassName=ut(function(e){return e.innerHTML="<div class='a'></div><div class='a i'></div>",e.firstChild.className="i",2===e.getElementsByClassName("i").length}),n.getById=ut(function(e){return f.appendChild(e).id=v,!t.getElementsByName||!t.getElementsByName(v).length}),n.getById?(i.find.ID=function(e,t){if(typeof t.getElementById!==j&&h){var n=t.getElementById(e);return n&&n.parentNode?[n]:[]}},i.filter.ID=function(e){var t=e.replace(nt,rt);return function(e){return e.getAttribute("id")===t}}):(delete i.find.ID,i.filter.ID=function(e){var t=e.replace(nt,rt);return function(e){var n=typeof e.getAttributeNode!==j&&e.getAttributeNode("id");return n&&n.value===t}}),i.find.TAG=n.getElementsByTagName?function(e,t){return typeof t.getElementsByTagName!==j?t.getElementsByTagName(e):undefined}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},i.find.CLASS=n.getElementsByClassName&&function(e,t){return typeof t.getElementsByClassName!==j&&h?t.getElementsByClassName(e):undefined},g=[],d=[],(n.qsa=Q.test(t.querySelectorAll))&&(ut(function(e){e.innerHTML="<select><option selected=''></option></select>",e.querySelectorAll("[selected]").length||d.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll(":checked").length||d.push(":checked")}),ut(function(e){var n=t.createElement("input");n.setAttribute("type","hidden"),e.appendChild(n).setAttribute("t",""),e.querySelectorAll("[t^='']").length&&d.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll(":enabled").length||d.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),d.push(",.*:")})),(n.matchesSelector=Q.test(m=f.webkitMatchesSelector||f.mozMatchesSelector||f.oMatchesSelector||f.msMatchesSelector))&&ut(function(e){n.disconnectedMatch=m.call(e,"div"),m.call(e,"[s!='']:x"),g.push("!=",I)}),d=d.length&&RegExp(d.join("|")),g=g.length&&RegExp(g.join("|")),y=Q.test(f.contains)||f.compareDocumentPosition?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},S=f.compareDocumentPosition?function(e,r){if(e===r)return E=!0,0;var i=r.compareDocumentPosition&&e.compareDocumentPosition&&e.compareDocumentPosition(r);return i?1&i||!n.sortDetached&&r.compareDocumentPosition(e)===i?e===t||y(b,e)?-1:r===t||y(b,r)?1:l?P.call(l,e)-P.call(l,r):0:4&i?-1:1:e.compareDocumentPosition?-1:1}:function(e,n){var r,i=0,o=e.parentNode,s=n.parentNode,a=[e],u=[n];if(e===n)return E=!0,0;if(!o||!s)return e===t?-1:n===t?1:o?-1:s?1:l?P.call(l,e)-P.call(l,n):0;if(o===s)return ct(e,n);r=e;while(r=r.parentNode)a.unshift(r);r=n;while(r=r.parentNode)u.unshift(r);while(a[i]===u[i])i++;return i?ct(a[i],u[i]):a[i]===b?-1:u[i]===b?1:0},t):p},ot.matches=function(e,t){return ot(e,null,null,t)},ot.matchesSelector=function(e,t){if((e.ownerDocument||e)!==p&&c(e),t=t.replace(Y,"='$1']"),!(!n.matchesSelector||!h||g&&g.test(t)||d&&d.test(t)))try{var r=m.call(e,t);if(r||n.disconnectedMatch||e.document&&11!==e.document.nodeType)return r}catch(i){}return ot(t,p,null,[e]).length>0},ot.contains=function(e,t){return(e.ownerDocument||e)!==p&&c(e),y(e,t)},ot.attr=function(e,t){(e.ownerDocument||e)!==p&&c(e);var r=i.attrHandle[t.toLowerCase()],o=r&&A.call(i.attrHandle,t.toLowerCase())?r(e,t,!h):undefined;return o===undefined?n.attributes||!h?e.getAttribute(t):(o=e.getAttributeNode(t))&&o.specified?o.value:null:o},ot.error=function(e){throw Error("Syntax error, unrecognized expression: "+e)},ot.uniqueSort=function(e){var t,r=[],i=0,o=0;if(E=!n.detectDuplicates,l=!n.sortStable&&e.slice(0),e.sort(S),E){while(t=e[o++])t===e[o]&&(i=r.push(o));while(i--)e.splice(r[i],1)}return e},o=ot.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=o(e)}else if(3===i||4===i)return e.nodeValue}else for(;t=e[r];r++)n+=o(t);return n},i=ot.selectors={cacheLength:50,createPseudo:at,match:J,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(nt,rt),e[3]=(e[4]||e[5]||"").replace(nt,rt),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||ot.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&ot.error(e[0]),e},PSEUDO:function(e){var t,n=!e[5]&&e[2];return J.CHILD.test(e[0])?null:(e[3]&&e[4]!==undefined?e[2]=e[4]:n&&V.test(n)&&(t=gt(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(nt,rt).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=C[e+" "];return t||(t=RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&C(e,function(e){return t.test("string"==typeof e.className&&e.className||typeof e.getAttribute!==j&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r){var i=ot.attr(r,e);return null==i?"!="===t:t?(i+="","="===t?i===n:"!="===t?i!==n:"^="===t?n&&0===i.indexOf(n):"*="===t?n&&i.indexOf(n)>-1:"$="===t?n&&i.slice(-n.length)===n:"~="===t?(" "+i+" ").indexOf(n)>-1:"|="===t?i===n||i.slice(0,n.length+1)===n+"-":!1):!0}},CHILD:function(e,t,n,r,i){var o="nth"!==e.slice(0,3),s="last"!==e.slice(-4),a="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,u){var l,c,p,f,h,d,g=o!==s?"nextSibling":"previousSibling",m=t.parentNode,y=a&&t.nodeName.toLowerCase(),x=!u&&!a;if(m){if(o){while(g){p=t;while(p=p[g])if(a?p.nodeName.toLowerCase()===y:1===p.nodeType)return!1;d=g="only"===e&&!d&&"nextSibling"}return!0}if(d=[s?m.firstChild:m.lastChild],s&&x){c=m[v]||(m[v]={}),l=c[e]||[],h=l[0]===w&&l[1],f=l[0]===w&&l[2],p=h&&m.childNodes[h];while(p=++h&&p&&p[g]||(f=h=0)||d.pop())if(1===p.nodeType&&++f&&p===t){c[e]=[w,h,f];break}}else if(x&&(l=(t[v]||(t[v]={}))[e])&&l[0]===w)f=l[1];else while(p=++h&&p&&p[g]||(f=h=0)||d.pop())if((a?p.nodeName.toLowerCase()===y:1===p.nodeType)&&++f&&(x&&((p[v]||(p[v]={}))[e]=[w,f]),p===t))break;return f-=i,f===r||0===f%r&&f/r>=0}}},PSEUDO:function(e,t){var n,r=i.pseudos[e]||i.setFilters[e.toLowerCase()]||ot.error("unsupported pseudo: "+e);return r[v]?r(t):r.length>1?(n=[e,e,"",t],i.setFilters.hasOwnProperty(e.toLowerCase())?at(function(e,n){var i,o=r(e,t),s=o.length;while(s--)i=P.call(e,o[s]),e[i]=!(n[i]=o[s])}):function(e){return r(e,0,n)}):r}},pseudos:{not:at(function(e){var t=[],n=[],r=a(e.replace(z,"$1"));return r[v]?at(function(e,t,n,i){var o,s=r(e,null,i,[]),a=e.length;while(a--)(o=s[a])&&(e[a]=!(t[a]=o))}):function(e,i,o){return t[0]=e,r(t,null,o,n),!n.pop()}}),has:at(function(e){return function(t){return ot(e,t).length>0}}),contains:at(function(e){return function(t){return(t.textContent||t.innerText||o(t)).indexOf(e)>-1}}),lang:at(function(e){return G.test(e||"")||ot.error("unsupported lang: "+e),e=e.replace(nt,rt).toLowerCase(),function(t){var n;do if(n=h?t.lang:t.getAttribute("xml:lang")||t.getAttribute("lang"))return n=n.toLowerCase(),n===e||0===n.indexOf(e+"-");while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===f},focus:function(e){return e===p.activeElement&&(!p.hasFocus||p.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:function(e){return e.disabled===!1},disabled:function(e){return e.disabled===!0},checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,e.selected===!0},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeName>"@"||3===e.nodeType||4===e.nodeType)return!1;return!0},parent:function(e){return!i.pseudos.empty(e)},header:function(e){return et.test(e.nodeName)},input:function(e){return Z.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||t.toLowerCase()===e.type)},first:ht(function(){return[0]}),last:ht(function(e,t){return[t-1]}),eq:ht(function(e,t,n){return[0>n?n+t:n]}),even:ht(function(e,t){var n=0;for(;t>n;n+=2)e.push(n);return e}),odd:ht(function(e,t){var n=1;for(;t>n;n+=2)e.push(n);return e}),lt:ht(function(e,t,n){var r=0>n?n+t:n;for(;--r>=0;)e.push(r);return e}),gt:ht(function(e,t,n){var r=0>n?n+t:n;for(;t>++r;)e.push(r);return e})}},i.pseudos.nth=i.pseudos.eq;for(t in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})i.pseudos[t]=pt(t);for(t in{submit:!0,reset:!0})i.pseudos[t]=ft(t);function dt(){}dt.prototype=i.filters=i.pseudos,i.setFilters=new dt;function gt(e,t){var n,r,o,s,a,u,l,c=k[e+" "];if(c)return t?0:c.slice(0);a=e,u=[],l=i.preFilter;while(a){(!n||(r=_.exec(a)))&&(r&&(a=a.slice(r[0].length)||a),u.push(o=[])),n=!1,(r=X.exec(a))&&(n=r.shift(),o.push({value:n,type:r[0].replace(z," ")}),a=a.slice(n.length));for(s in i.filter)!(r=J[s].exec(a))||l[s]&&!(r=l[s](r))||(n=r.shift(),o.push({value:n,type:s,matches:r}),a=a.slice(n.length));if(!n)break}return t?a.length:a?ot.error(e):k(e,u).slice(0)}function mt(e){var t=0,n=e.length,r="";for(;n>t;t++)r+=e[t].value;return r}function yt(e,t,n){var i=t.dir,o=n&&"parentNode"===i,s=T++;return t.first?function(t,n,r){while(t=t[i])if(1===t.nodeType||o)return e(t,n,r)}:function(t,n,a){var u,l,c,p=w+" "+s;if(a){while(t=t[i])if((1===t.nodeType||o)&&e(t,n,a))return!0}else while(t=t[i])if(1===t.nodeType||o)if(c=t[v]||(t[v]={}),(l=c[i])&&l[0]===p){if((u=l[1])===!0||u===r)return u===!0}else if(l=c[i]=[p],l[1]=e(t,n,a)||r,l[1]===!0)return!0}}function vt(e){return e.length>1?function(t,n,r){var i=e.length;while(i--)if(!e[i](t,n,r))return!1;return!0}:e[0]}function xt(e,t,n,r,i){var o,s=[],a=0,u=e.length,l=null!=t;for(;u>a;a++)(o=e[a])&&(!n||n(o,r,i))&&(s.push(o),l&&t.push(a));return s}function bt(e,t,n,r,i,o){return r&&!r[v]&&(r=bt(r)),i&&!i[v]&&(i=bt(i,o)),at(function(o,s,a,u){var l,c,p,f=[],h=[],d=s.length,g=o||Ct(t||"*",a.nodeType?[a]:a,[]),m=!e||!o&&t?g:xt(g,f,e,a,u),y=n?i||(o?e:d||r)?[]:s:m;if(n&&n(m,y,a,u),r){l=xt(y,h),r(l,[],a,u),c=l.length;while(c--)(p=l[c])&&(y[h[c]]=!(m[h[c]]=p))}if(o){if(i||e){if(i){l=[],c=y.length;while(c--)(p=y[c])&&l.push(m[c]=p);i(null,y=[],l,u)}c=y.length;while(c--)(p=y[c])&&(l=i?P.call(o,p):f[c])>-1&&(o[l]=!(s[l]=p))}}else y=xt(y===s?y.splice(d,y.length):y),i?i(null,s,y,u):O.apply(s,y)})}function wt(e){var t,n,r,o=e.length,s=i.relative[e[0].type],a=s||i.relative[" "],l=s?1:0,c=yt(function(e){return e===t},a,!0),p=yt(function(e){return P.call(t,e)>-1},a,!0),f=[function(e,n,r){return!s&&(r||n!==u)||((t=n).nodeType?c(e,n,r):p(e,n,r))}];for(;o>l;l++)if(n=i.relative[e[l].type])f=[yt(vt(f),n)];else{if(n=i.filter[e[l].type].apply(null,e[l].matches),n[v]){for(r=++l;o>r;r++)if(i.relative[e[r].type])break;return bt(l>1&&vt(f),l>1&&mt(e.slice(0,l-1).concat({value:" "===e[l-2].type?"*":""})).replace(z,"$1"),n,r>l&&wt(e.slice(l,r)),o>r&&wt(e=e.slice(r)),o>r&&mt(e))}f.push(n)}return vt(f)}function Tt(e,t){var n=0,o=t.length>0,s=e.length>0,a=function(a,l,c,f,h){var d,g,m,y=[],v=0,x="0",b=a&&[],T=null!=h,C=u,k=a||s&&i.find.TAG("*",h&&l.parentNode||l),N=w+=null==C?1:Math.random()||.1;for(T&&(u=l!==p&&l,r=n);null!=(d=k[x]);x++){if(s&&d){g=0;while(m=e[g++])if(m(d,l,c)){f.push(d);break}T&&(w=N,r=++n)}o&&((d=!m&&d)&&v--,a&&b.push(d))}if(v+=x,o&&x!==v){g=0;while(m=t[g++])m(b,y,l,c);if(a){if(v>0)while(x--)b[x]||y[x]||(y[x]=q.call(f));y=xt(y)}O.apply(f,y),T&&!a&&y.length>0&&v+t.length>1&&ot.uniqueSort(f)}return T&&(w=N,u=C),b};return o?at(a):a}a=ot.compile=function(e,t){var n,r=[],i=[],o=N[e+" "];if(!o){t||(t=gt(e)),n=t.length;while(n--)o=wt(t[n]),o[v]?r.push(o):i.push(o);o=N(e,Tt(i,r))}return o};function Ct(e,t,n){var r=0,i=t.length;for(;i>r;r++)ot(e,t[r],n);return n}function kt(e,t,r,o){var s,u,l,c,p,f=gt(e);if(!o&&1===f.length){if(u=f[0]=f[0].slice(0),u.length>2&&"ID"===(l=u[0]).type&&n.getById&&9===t.nodeType&&h&&i.relative[u[1].type]){if(t=(i.find.ID(l.matches[0].replace(nt,rt),t)||[])[0],!t)return r;e=e.slice(u.shift().value.length)}s=J.needsContext.test(e)?0:u.length;while(s--){if(l=u[s],i.relative[c=l.type])break;if((p=i.find[c])&&(o=p(l.matches[0].replace(nt,rt),U.test(u[0].type)&&t.parentNode||t))){if(u.splice(s,1),e=o.length&&mt(u),!e)return O.apply(r,o),r;break}}}return a(e,f)(o,t,!h,r,U.test(e)),r}n.sortStable=v.split("").sort(S).join("")===v,n.detectDuplicates=E,c(),n.sortDetached=ut(function(e){return 1&e.compareDocumentPosition(p.createElement("div"))}),ut(function(e){return e.innerHTML="<a href='#'></a>","#"===e.firstChild.getAttribute("href")})||lt("type|href|height|width",function(e,t,n){return n?undefined:e.getAttribute(t,"type"===t.toLowerCase()?1:2)}),n.attributes&&ut(function(e){return e.innerHTML="<input/>",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||lt("value",function(e,t,n){return n||"input"!==e.nodeName.toLowerCase()?undefined:e.defaultValue}),ut(function(e){return null==e.getAttribute("disabled")})||lt(R,function(e,t,n){var r;return n?undefined:(r=e.getAttributeNode(t))&&r.specified?r.value:e[t]===!0?t.toLowerCase():null}),x.find=ot,x.expr=ot.selectors,x.expr[":"]=x.expr.pseudos,x.unique=ot.uniqueSort,x.text=ot.getText,x.isXMLDoc=ot.isXML,x.contains=ot.contains}(e);var D={};function A(e){var t=D[e]={};return x.each(e.match(w)||[],function(e,n){t[n]=!0}),t}x.Callbacks=function(e){e="string"==typeof e?D[e]||A(e):x.extend({},e);var t,n,r,i,o,s,a=[],u=!e.once&&[],l=function(p){for(t=e.memory&&p,n=!0,s=i||0,i=0,o=a.length,r=!0;a&&o>s;s++)if(a[s].apply(p[0],p[1])===!1&&e.stopOnFalse){t=!1;break}r=!1,a&&(u?u.length&&l(u.shift()):t?a=[]:c.disable())},c={add:function(){if(a){var n=a.length;(function s(t){x.each(t,function(t,n){var r=x.type(n);"function"===r?e.unique&&c.has(n)||a.push(n):n&&n.length&&"string"!==r&&s(n)})})(arguments),r?o=a.length:t&&(i=n,l(t))}return this},remove:function(){return a&&x.each(arguments,function(e,t){var n;while((n=x.inArray(t,a,n))>-1)a.splice(n,1),r&&(o>=n&&o--,s>=n&&s--)}),this},has:function(e){return e?x.inArray(e,a)>-1:!(!a||!a.length)},empty:function(){return a=[],o=0,this},disable:function(){return a=u=t=undefined,this},disabled:function(){return!a},lock:function(){return u=undefined,t||c.disable(),this},locked:function(){return!u},fireWith:function(e,t){return!a||n&&!u||(t=t||[],t=[e,t.slice?t.slice():t],r?u.push(t):l(t)),this},fire:function(){return c.fireWith(this,arguments),this},fired:function(){return!!n}};return c},x.extend({Deferred:function(e){var t=[["resolve","done",x.Callbacks("once memory"),"resolved"],["reject","fail",x.Callbacks("once memory"),"rejected"],["notify","progress",x.Callbacks("memory")]],n="pending",r={state:function(){return n},always:function(){return i.done(arguments).fail(arguments),this},then:function(){var e=arguments;return x.Deferred(function(n){x.each(t,function(t,o){var s=o[0],a=x.isFunction(e[t])&&e[t];i[o[1]](function(){var e=a&&a.apply(this,arguments);e&&x.isFunction(e.promise)?e.promise().done(n.resolve).fail(n.reject).progress(n.notify):n[s+"With"](this===r?n.promise():this,a?[e]:arguments)})}),e=null}).promise()},promise:function(e){return null!=e?x.extend(e,r):r}},i={};return r.pipe=r.then,x.each(t,function(e,o){var s=o[2],a=o[3];r[o[1]]=s.add,a&&s.add(function(){n=a},t[1^e][2].disable,t[2][2].lock),i[o[0]]=function(){return i[o[0]+"With"](this===i?r:this,arguments),this},i[o[0]+"With"]=s.fireWith}),r.promise(i),e&&e.call(i,i),i},when:function(e){var t=0,n=d.call(arguments),r=n.length,i=1!==r||e&&x.isFunction(e.promise)?r:0,o=1===i?e:x.Deferred(),s=function(e,t,n){return function(r){t[e]=this,n[e]=arguments.length>1?d.call(arguments):r,n===a?o.notifyWith(t,n):--i||o.resolveWith(t,n)}},a,u,l;if(r>1)for(a=Array(r),u=Array(r),l=Array(r);r>t;t++)n[t]&&x.isFunction(n[t].promise)?n[t].promise().done(s(t,l,n)).fail(o.reject).progress(s(t,u,a)):--i;return i||o.resolveWith(l,n),o.promise()}}),x.support=function(t){var n=o.createElement("input"),r=o.createDocumentFragment(),i=o.createElement("div"),s=o.createElement("select"),a=s.appendChild(o.createElement("option"));return n.type?(n.type="checkbox",t.checkOn=""!==n.value,t.optSelected=a.selected,t.reliableMarginRight=!0,t.boxSizingReliable=!0,t.pixelPosition=!1,n.checked=!0,t.noCloneChecked=n.cloneNode(!0).checked,s.disabled=!0,t.optDisabled=!a.disabled,n=o.createElement("input"),n.value="t",n.type="radio",t.radioValue="t"===n.value,n.setAttribute("checked","t"),n.setAttribute("name","t"),r.appendChild(n),t.checkClone=r.cloneNode(!0).cloneNode(!0).lastChild.checked,t.focusinBubbles="onfocusin"in e,i.style.backgroundClip="content-box",i.cloneNode(!0).style.backgroundClip="",t.clearCloneStyle="content-box"===i.style.backgroundClip,x(function(){var n,r,s="padding:0;margin:0;border:0;display:block;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box",a=o.getElementsByTagName("body")[0];a&&(n=o.createElement("div"),n.style.cssText="border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px",a.appendChild(n).appendChild(i),i.innerHTML="",i.style.cssText="-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%",x.swap(a,null!=a.style.zoom?{zoom:1}:{},function(){t.boxSizing=4===i.offsetWidth}),e.getComputedStyle&&(t.pixelPosition="1%"!==(e.getComputedStyle(i,null)||{}).top,t.boxSizingReliable="4px"===(e.getComputedStyle(i,null)||{width:"4px"}).width,r=i.appendChild(o.createElement("div")),r.style.cssText=i.style.cssText=s,r.style.marginRight=r.style.width="0",i.style.width="1px",t.reliableMarginRight=!parseFloat((e.getComputedStyle(r,null)||{}).marginRight)),a.removeChild(n))}),t):t}({});var L,q,H=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/,O=/([A-Z])/g;function F(){Object.defineProperty(this.cache={},0,{get:function(){return{}}}),this.expando=x.expando+Math.random()}F.uid=1,F.accepts=function(e){return e.nodeType?1===e.nodeType||9===e.nodeType:!0},F.prototype={key:function(e){if(!F.accepts(e))return 0;var t={},n=e[this.expando];if(!n){n=F.uid++;try{t[this.expando]={value:n},Object.defineProperties(e,t)}catch(r){t[this.expando]=n,x.extend(e,t)}}return this.cache[n]||(this.cache[n]={}),n},set:function(e,t,n){var r,i=this.key(e),o=this.cache[i];if("string"==typeof t)o[t]=n;else if(x.isEmptyObject(o))x.extend(this.cache[i],t);else for(r in t)o[r]=t[r];return o},get:function(e,t){var n=this.cache[this.key(e)];return t===undefined?n:n[t]},access:function(e,t,n){var r;return t===undefined||t&&"string"==typeof t&&n===undefined?(r=this.get(e,t),r!==undefined?r:this.get(e,x.camelCase(t))):(this.set(e,t,n),n!==undefined?n:t)},remove:function(e,t){var n,r,i,o=this.key(e),s=this.cache[o];if(t===undefined)this.cache[o]={};else{x.isArray(t)?r=t.concat(t.map(x.camelCase)):(i=x.camelCase(t),t in s?r=[t,i]:(r=i,r=r in s?[r]:r.match(w)||[])),n=r.length;while(n--)delete s[r[n]]}},hasData:function(e){return!x.isEmptyObject(this.cache[e[this.expando]]||{})},discard:function(e){e[this.expando]&&delete this.cache[e[this.expando]]}},L=new F,q=new F,x.extend({acceptData:F.accepts,hasData:function(e){return L.hasData(e)||q.hasData(e)},data:function(e,t,n){return L.access(e,t,n)},removeData:function(e,t){L.remove(e,t)},_data:function(e,t,n){return q.access(e,t,n)},_removeData:function(e,t){q.remove(e,t)}}),x.fn.extend({data:function(e,t){var n,r,i=this[0],o=0,s=null;if(e===undefined){if(this.length&&(s=L.get(i),1===i.nodeType&&!q.get(i,"hasDataAttrs"))){for(n=i.attributes;n.length>o;o++)r=n[o].name,0===r.indexOf("data-")&&(r=x.camelCase(r.slice(5)),P(i,r,s[r]));q.set(i,"hasDataAttrs",!0)}return s}return"object"==typeof e?this.each(function(){L.set(this,e)}):x.access(this,function(t){var n,r=x.camelCase(e);if(i&&t===undefined){if(n=L.get(i,e),n!==undefined)return n;if(n=L.get(i,r),n!==undefined)return n;if(n=P(i,r,undefined),n!==undefined)return n}else this.each(function(){var n=L.get(this,r);L.set(this,r,t),-1!==e.indexOf("-")&&n!==undefined&&L.set(this,e,t)})},null,t,arguments.length>1,null,!0)},removeData:function(e){return this.each(function(){L.remove(this,e)})}});function P(e,t,n){var r;if(n===undefined&&1===e.nodeType)if(r="data-"+t.replace(O,"-$1").toLowerCase(),n=e.getAttribute(r),"string"==typeof n){try{n="true"===n?!0:"false"===n?!1:"null"===n?null:+n+""===n?+n:H.test(n)?JSON.parse(n):n}catch(i){}L.set(e,t,n)}else n=undefined;return n}x.extend({queue:function(e,t,n){var r;return e?(t=(t||"fx")+"queue",r=q.get(e,t),n&&(!r||x.isArray(n)?r=q.access(e,t,x.makeArray(n)):r.push(n)),r||[]):undefined},dequeue:function(e,t){t=t||"fx";var n=x.queue(e,t),r=n.length,i=n.shift(),o=x._queueHooks(e,t),s=function(){x.dequeue(e,t)
5};"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,s,o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return q.get(e,n)||q.access(e,n,{empty:x.Callbacks("once memory").add(function(){q.remove(e,[t+"queue",n])})})}}),x.fn.extend({queue:function(e,t){var n=2;return"string"!=typeof e&&(t=e,e="fx",n--),n>arguments.length?x.queue(this[0],e):t===undefined?this:this.each(function(){var n=x.queue(this,e,t);x._queueHooks(this,e),"fx"===e&&"inprogress"!==n[0]&&x.dequeue(this,e)})},dequeue:function(e){return this.each(function(){x.dequeue(this,e)})},delay:function(e,t){return e=x.fx?x.fx.speeds[e]||e:e,t=t||"fx",this.queue(t,function(t,n){var r=setTimeout(t,e);n.stop=function(){clearTimeout(r)}})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,t){var n,r=1,i=x.Deferred(),o=this,s=this.length,a=function(){--r||i.resolveWith(o,[o])};"string"!=typeof e&&(t=e,e=undefined),e=e||"fx";while(s--)n=q.get(o[s],e+"queueHooks"),n&&n.empty&&(r++,n.empty.add(a));return a(),i.promise(t)}});var R,M,W=/[\t\r\n\f]/g,$=/\r/g,B=/^(?:input|select|textarea|button)$/i;x.fn.extend({attr:function(e,t){return x.access(this,x.attr,e,t,arguments.length>1)},removeAttr:function(e){return this.each(function(){x.removeAttr(this,e)})},prop:function(e,t){return x.access(this,x.prop,e,t,arguments.length>1)},removeProp:function(e){return this.each(function(){delete this[x.propFix[e]||e]})},addClass:function(e){var t,n,r,i,o,s=0,a=this.length,u="string"==typeof e&&e;if(x.isFunction(e))return this.each(function(t){x(this).addClass(e.call(this,t,this.className))});if(u)for(t=(e||"").match(w)||[];a>s;s++)if(n=this[s],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(W," "):" ")){o=0;while(i=t[o++])0>r.indexOf(" "+i+" ")&&(r+=i+" ");n.className=x.trim(r)}return this},removeClass:function(e){var t,n,r,i,o,s=0,a=this.length,u=0===arguments.length||"string"==typeof e&&e;if(x.isFunction(e))return this.each(function(t){x(this).removeClass(e.call(this,t,this.className))});if(u)for(t=(e||"").match(w)||[];a>s;s++)if(n=this[s],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(W," "):"")){o=0;while(i=t[o++])while(r.indexOf(" "+i+" ")>=0)r=r.replace(" "+i+" "," ");n.className=e?x.trim(r):""}return this},toggleClass:function(e,t){var n=typeof e;return"boolean"==typeof t&&"string"===n?t?this.addClass(e):this.removeClass(e):x.isFunction(e)?this.each(function(n){x(this).toggleClass(e.call(this,n,this.className,t),t)}):this.each(function(){if("string"===n){var t,i=0,o=x(this),s=e.match(w)||[];while(t=s[i++])o.hasClass(t)?o.removeClass(t):o.addClass(t)}else(n===r||"boolean"===n)&&(this.className&&q.set(this,"__className__",this.className),this.className=this.className||e===!1?"":q.get(this,"__className__")||"")})},hasClass:function(e){var t=" "+e+" ",n=0,r=this.length;for(;r>n;n++)if(1===this[n].nodeType&&(" "+this[n].className+" ").replace(W," ").indexOf(t)>=0)return!0;return!1},val:function(e){var t,n,r,i=this[0];{if(arguments.length)return r=x.isFunction(e),this.each(function(n){var i;1===this.nodeType&&(i=r?e.call(this,n,x(this).val()):e,null==i?i="":"number"==typeof i?i+="":x.isArray(i)&&(i=x.map(i,function(e){return null==e?"":e+""})),t=x.valHooks[this.type]||x.valHooks[this.nodeName.toLowerCase()],t&&"set"in t&&t.set(this,i,"value")!==undefined||(this.value=i))});if(i)return t=x.valHooks[i.type]||x.valHooks[i.nodeName.toLowerCase()],t&&"get"in t&&(n=t.get(i,"value"))!==undefined?n:(n=i.value,"string"==typeof n?n.replace($,""):null==n?"":n)}}}),x.extend({valHooks:{option:{get:function(e){var t=e.attributes.value;return!t||t.specified?e.value:e.text}},select:{get:function(e){var t,n,r=e.options,i=e.selectedIndex,o="select-one"===e.type||0>i,s=o?null:[],a=o?i+1:r.length,u=0>i?a:o?i:0;for(;a>u;u++)if(n=r[u],!(!n.selected&&u!==i||(x.support.optDisabled?n.disabled:null!==n.getAttribute("disabled"))||n.parentNode.disabled&&x.nodeName(n.parentNode,"optgroup"))){if(t=x(n).val(),o)return t;s.push(t)}return s},set:function(e,t){var n,r,i=e.options,o=x.makeArray(t),s=i.length;while(s--)r=i[s],(r.selected=x.inArray(x(r).val(),o)>=0)&&(n=!0);return n||(e.selectedIndex=-1),o}}},attr:function(e,t,n){var i,o,s=e.nodeType;if(e&&3!==s&&8!==s&&2!==s)return typeof e.getAttribute===r?x.prop(e,t,n):(1===s&&x.isXMLDoc(e)||(t=t.toLowerCase(),i=x.attrHooks[t]||(x.expr.match.bool.test(t)?M:R)),n===undefined?i&&"get"in i&&null!==(o=i.get(e,t))?o:(o=x.find.attr(e,t),null==o?undefined:o):null!==n?i&&"set"in i&&(o=i.set(e,n,t))!==undefined?o:(e.setAttribute(t,n+""),n):(x.removeAttr(e,t),undefined))},removeAttr:function(e,t){var n,r,i=0,o=t&&t.match(w);if(o&&1===e.nodeType)while(n=o[i++])r=x.propFix[n]||n,x.expr.match.bool.test(n)&&(e[r]=!1),e.removeAttribute(n)},attrHooks:{type:{set:function(e,t){if(!x.support.radioValue&&"radio"===t&&x.nodeName(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},propFix:{"for":"htmlFor","class":"className"},prop:function(e,t,n){var r,i,o,s=e.nodeType;if(e&&3!==s&&8!==s&&2!==s)return o=1!==s||!x.isXMLDoc(e),o&&(t=x.propFix[t]||t,i=x.propHooks[t]),n!==undefined?i&&"set"in i&&(r=i.set(e,n,t))!==undefined?r:e[t]=n:i&&"get"in i&&null!==(r=i.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){return e.hasAttribute("tabindex")||B.test(e.nodeName)||e.href?e.tabIndex:-1}}}}),M={set:function(e,t,n){return t===!1?x.removeAttr(e,n):e.setAttribute(n,n),n}},x.each(x.expr.match.bool.source.match(/\w+/g),function(e,t){var n=x.expr.attrHandle[t]||x.find.attr;x.expr.attrHandle[t]=function(e,t,r){var i=x.expr.attrHandle[t],o=r?undefined:(x.expr.attrHandle[t]=undefined)!=n(e,t,r)?t.toLowerCase():null;return x.expr.attrHandle[t]=i,o}}),x.support.optSelected||(x.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null}}),x.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){x.propFix[this.toLowerCase()]=this}),x.each(["radio","checkbox"],function(){x.valHooks[this]={set:function(e,t){return x.isArray(t)?e.checked=x.inArray(x(e).val(),t)>=0:undefined}},x.support.checkOn||(x.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})});var I=/^key/,z=/^(?:mouse|contextmenu)|click/,_=/^(?:focusinfocus|focusoutblur)$/,X=/^([^.]*)(?:\.(.+)|)$/;function U(){return!0}function Y(){return!1}function V(){try{return o.activeElement}catch(e){}}x.event={global:{},add:function(e,t,n,i,o){var s,a,u,l,c,p,f,h,d,g,m,y=q.get(e);if(y){n.handler&&(s=n,n=s.handler,o=s.selector),n.guid||(n.guid=x.guid++),(l=y.events)||(l=y.events={}),(a=y.handle)||(a=y.handle=function(e){return typeof x===r||e&&x.event.triggered===e.type?undefined:x.event.dispatch.apply(a.elem,arguments)},a.elem=e),t=(t||"").match(w)||[""],c=t.length;while(c--)u=X.exec(t[c])||[],d=m=u[1],g=(u[2]||"").split(".").sort(),d&&(f=x.event.special[d]||{},d=(o?f.delegateType:f.bindType)||d,f=x.event.special[d]||{},p=x.extend({type:d,origType:m,data:i,handler:n,guid:n.guid,selector:o,needsContext:o&&x.expr.match.needsContext.test(o),namespace:g.join(".")},s),(h=l[d])||(h=l[d]=[],h.delegateCount=0,f.setup&&f.setup.call(e,i,g,a)!==!1||e.addEventListener&&e.addEventListener(d,a,!1)),f.add&&(f.add.call(e,p),p.handler.guid||(p.handler.guid=n.guid)),o?h.splice(h.delegateCount++,0,p):h.push(p),x.event.global[d]=!0);e=null}},remove:function(e,t,n,r,i){var o,s,a,u,l,c,p,f,h,d,g,m=q.hasData(e)&&q.get(e);if(m&&(u=m.events)){t=(t||"").match(w)||[""],l=t.length;while(l--)if(a=X.exec(t[l])||[],h=g=a[1],d=(a[2]||"").split(".").sort(),h){p=x.event.special[h]||{},h=(r?p.delegateType:p.bindType)||h,f=u[h]||[],a=a[2]&&RegExp("(^|\\.)"+d.join("\\.(?:.*\\.|)")+"(\\.|$)"),s=o=f.length;while(o--)c=f[o],!i&&g!==c.origType||n&&n.guid!==c.guid||a&&!a.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(f.splice(o,1),c.selector&&f.delegateCount--,p.remove&&p.remove.call(e,c));s&&!f.length&&(p.teardown&&p.teardown.call(e,d,m.handle)!==!1||x.removeEvent(e,h,m.handle),delete u[h])}else for(h in u)x.event.remove(e,h+t[l],n,r,!0);x.isEmptyObject(u)&&(delete m.handle,q.remove(e,"events"))}},trigger:function(t,n,r,i){var s,a,u,l,c,p,f,h=[r||o],d=y.call(t,"type")?t.type:t,g=y.call(t,"namespace")?t.namespace.split("."):[];if(a=u=r=r||o,3!==r.nodeType&&8!==r.nodeType&&!_.test(d+x.event.triggered)&&(d.indexOf(".")>=0&&(g=d.split("."),d=g.shift(),g.sort()),c=0>d.indexOf(":")&&"on"+d,t=t[x.expando]?t:new x.Event(d,"object"==typeof t&&t),t.isTrigger=i?2:3,t.namespace=g.join("."),t.namespace_re=t.namespace?RegExp("(^|\\.)"+g.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,t.result=undefined,t.target||(t.target=r),n=null==n?[t]:x.makeArray(n,[t]),f=x.event.special[d]||{},i||!f.trigger||f.trigger.apply(r,n)!==!1)){if(!i&&!f.noBubble&&!x.isWindow(r)){for(l=f.delegateType||d,_.test(l+d)||(a=a.parentNode);a;a=a.parentNode)h.push(a),u=a;u===(r.ownerDocument||o)&&h.push(u.defaultView||u.parentWindow||e)}s=0;while((a=h[s++])&&!t.isPropagationStopped())t.type=s>1?l:f.bindType||d,p=(q.get(a,"events")||{})[t.type]&&q.get(a,"handle"),p&&p.apply(a,n),p=c&&a[c],p&&x.acceptData(a)&&p.apply&&p.apply(a,n)===!1&&t.preventDefault();return t.type=d,i||t.isDefaultPrevented()||f._default&&f._default.apply(h.pop(),n)!==!1||!x.acceptData(r)||c&&x.isFunction(r[d])&&!x.isWindow(r)&&(u=r[c],u&&(r[c]=null),x.event.triggered=d,r[d](),x.event.triggered=undefined,u&&(r[c]=u)),t.result}},dispatch:function(e){e=x.event.fix(e);var t,n,r,i,o,s=[],a=d.call(arguments),u=(q.get(this,"events")||{})[e.type]||[],l=x.event.special[e.type]||{};if(a[0]=e,e.delegateTarget=this,!l.preDispatch||l.preDispatch.call(this,e)!==!1){s=x.event.handlers.call(this,e,u),t=0;while((i=s[t++])&&!e.isPropagationStopped()){e.currentTarget=i.elem,n=0;while((o=i.handlers[n++])&&!e.isImmediatePropagationStopped())(!e.namespace_re||e.namespace_re.test(o.namespace))&&(e.handleObj=o,e.data=o.data,r=((x.event.special[o.origType]||{}).handle||o.handler).apply(i.elem,a),r!==undefined&&(e.result=r)===!1&&(e.preventDefault(),e.stopPropagation()))}return l.postDispatch&&l.postDispatch.call(this,e),e.result}},handlers:function(e,t){var n,r,i,o,s=[],a=t.delegateCount,u=e.target;if(a&&u.nodeType&&(!e.button||"click"!==e.type))for(;u!==this;u=u.parentNode||this)if(u.disabled!==!0||"click"!==e.type){for(r=[],n=0;a>n;n++)o=t[n],i=o.selector+" ",r[i]===undefined&&(r[i]=o.needsContext?x(i,this).index(u)>=0:x.find(i,this,null,[u]).length),r[i]&&r.push(o);r.length&&s.push({elem:u,handlers:r})}return t.length>a&&s.push({elem:this,handlers:t.slice(a)}),s},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(e,t){return null==e.which&&(e.which=null!=t.charCode?t.charCode:t.keyCode),e}},mouseHooks:{props:"button buttons clientX clientY offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(e,t){var n,r,i,s=t.button;return null==e.pageX&&null!=t.clientX&&(n=e.target.ownerDocument||o,r=n.documentElement,i=n.body,e.pageX=t.clientX+(r&&r.scrollLeft||i&&i.scrollLeft||0)-(r&&r.clientLeft||i&&i.clientLeft||0),e.pageY=t.clientY+(r&&r.scrollTop||i&&i.scrollTop||0)-(r&&r.clientTop||i&&i.clientTop||0)),e.which||s===undefined||(e.which=1&s?1:2&s?3:4&s?2:0),e}},fix:function(e){if(e[x.expando])return e;var t,n,r,i=e.type,s=e,a=this.fixHooks[i];a||(this.fixHooks[i]=a=z.test(i)?this.mouseHooks:I.test(i)?this.keyHooks:{}),r=a.props?this.props.concat(a.props):this.props,e=new x.Event(s),t=r.length;while(t--)n=r[t],e[n]=s[n];return e.target||(e.target=o),3===e.target.nodeType&&(e.target=e.target.parentNode),a.filter?a.filter(e,s):e},special:{load:{noBubble:!0},focus:{trigger:function(){return this!==V()&&this.focus?(this.focus(),!1):undefined},delegateType:"focusin"},blur:{trigger:function(){return this===V()&&this.blur?(this.blur(),!1):undefined},delegateType:"focusout"},click:{trigger:function(){return"checkbox"===this.type&&this.click&&x.nodeName(this,"input")?(this.click(),!1):undefined},_default:function(e){return x.nodeName(e.target,"a")}},beforeunload:{postDispatch:function(e){e.result!==undefined&&(e.originalEvent.returnValue=e.result)}}},simulate:function(e,t,n,r){var i=x.extend(new x.Event,n,{type:e,isSimulated:!0,originalEvent:{}});r?x.event.trigger(i,null,t):x.event.dispatch.call(t,i),i.isDefaultPrevented()&&n.preventDefault()}},x.removeEvent=function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n,!1)},x.Event=function(e,t){return this instanceof x.Event?(e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||e.getPreventDefault&&e.getPreventDefault()?U:Y):this.type=e,t&&x.extend(this,t),this.timeStamp=e&&e.timeStamp||x.now(),this[x.expando]=!0,undefined):new x.Event(e,t)},x.Event.prototype={isDefaultPrevented:Y,isPropagationStopped:Y,isImmediatePropagationStopped:Y,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=U,e&&e.preventDefault&&e.preventDefault()},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=U,e&&e.stopPropagation&&e.stopPropagation()},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=U,this.stopPropagation()}},x.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(e,t){x.event.special[e]={delegateType:t,bindType:t,handle:function(e){var n,r=this,i=e.relatedTarget,o=e.handleObj;return(!i||i!==r&&!x.contains(r,i))&&(e.type=o.origType,n=o.handler.apply(this,arguments),e.type=t),n}}}),x.support.focusinBubbles||x.each({focus:"focusin",blur:"focusout"},function(e,t){var n=0,r=function(e){x.event.simulate(t,e.target,x.event.fix(e),!0)};x.event.special[t]={setup:function(){0===n++&&o.addEventListener(e,r,!0)},teardown:function(){0===--n&&o.removeEventListener(e,r,!0)}}}),x.fn.extend({on:function(e,t,n,r,i){var o,s;if("object"==typeof e){"string"!=typeof t&&(n=n||t,t=undefined);for(s in e)this.on(s,t,n,e[s],i);return this}if(null==n&&null==r?(r=t,n=t=undefined):null==r&&("string"==typeof t?(r=n,n=undefined):(r=n,n=t,t=undefined)),r===!1)r=Y;else if(!r)return this;return 1===i&&(o=r,r=function(e){return x().off(e),o.apply(this,arguments)},r.guid=o.guid||(o.guid=x.guid++)),this.each(function(){x.event.add(this,e,r,n,t)})},one:function(e,t,n,r){return this.on(e,t,n,r,1)},off:function(e,t,n){var r,i;if(e&&e.preventDefault&&e.handleObj)return r=e.handleObj,x(e.delegateTarget).off(r.namespace?r.origType+"."+r.namespace:r.origType,r.selector,r.handler),this;if("object"==typeof e){for(i in e)this.off(i,t,e[i]);return this}return(t===!1||"function"==typeof t)&&(n=t,t=undefined),n===!1&&(n=Y),this.each(function(){x.event.remove(this,e,n,t)})},trigger:function(e,t){return this.each(function(){x.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];return n?x.event.trigger(e,t,n,!0):undefined}});var G=/^.[^:#\[\.,]*$/,J=/^(?:parents|prev(?:Until|All))/,Q=x.expr.match.needsContext,K={children:!0,contents:!0,next:!0,prev:!0};x.fn.extend({find:function(e){var t,n=[],r=this,i=r.length;if("string"!=typeof e)return this.pushStack(x(e).filter(function(){for(t=0;i>t;t++)if(x.contains(r[t],this))return!0}));for(t=0;i>t;t++)x.find(e,r[t],n);return n=this.pushStack(i>1?x.unique(n):n),n.selector=this.selector?this.selector+" "+e:e,n},has:function(e){var t=x(e,this),n=t.length;return this.filter(function(){var e=0;for(;n>e;e++)if(x.contains(this,t[e]))return!0})},not:function(e){return this.pushStack(et(this,e||[],!0))},filter:function(e){return this.pushStack(et(this,e||[],!1))},is:function(e){return!!et(this,"string"==typeof e&&Q.test(e)?x(e):e||[],!1).length},closest:function(e,t){var n,r=0,i=this.length,o=[],s=Q.test(e)||"string"!=typeof e?x(e,t||this.context):0;for(;i>r;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(11>n.nodeType&&(s?s.index(n)>-1:1===n.nodeType&&x.find.matchesSelector(n,e))){n=o.push(n);break}return this.pushStack(o.length>1?x.unique(o):o)},index:function(e){return e?"string"==typeof e?g.call(x(e),this[0]):g.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){var n="string"==typeof e?x(e,t):x.makeArray(e&&e.nodeType?[e]:e),r=x.merge(this.get(),n);return this.pushStack(x.unique(r))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}});function Z(e,t){while((e=e[t])&&1!==e.nodeType);return e}x.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return x.dir(e,"parentNode")},parentsUntil:function(e,t,n){return x.dir(e,"parentNode",n)},next:function(e){return Z(e,"nextSibling")},prev:function(e){return Z(e,"previousSibling")},nextAll:function(e){return x.dir(e,"nextSibling")},prevAll:function(e){return x.dir(e,"previousSibling")},nextUntil:function(e,t,n){return x.dir(e,"nextSibling",n)},prevUntil:function(e,t,n){return x.dir(e,"previousSibling",n)},siblings:function(e){return x.sibling((e.parentNode||{}).firstChild,e)},children:function(e){return x.sibling(e.firstChild)},contents:function(e){return e.contentDocument||x.merge([],e.childNodes)}},function(e,t){x.fn[e]=function(n,r){var i=x.map(this,t,n);return"Until"!==e.slice(-5)&&(r=n),r&&"string"==typeof r&&(i=x.filter(r,i)),this.length>1&&(K[e]||x.unique(i),J.test(e)&&i.reverse()),this.pushStack(i)}}),x.extend({filter:function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?x.find.matchesSelector(r,e)?[r]:[]:x.find.matches(e,x.grep(t,function(e){return 1===e.nodeType}))},dir:function(e,t,n){var r=[],i=n!==undefined;while((e=e[t])&&9!==e.nodeType)if(1===e.nodeType){if(i&&x(e).is(n))break;r.push(e)}return r},sibling:function(e,t){var n=[];for(;e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n}});function et(e,t,n){if(x.isFunction(t))return x.grep(e,function(e,r){return!!t.call(e,r,e)!==n});if(t.nodeType)return x.grep(e,function(e){return e===t!==n});if("string"==typeof t){if(G.test(t))return x.filter(t,e,n);t=x.filter(t,e)}return x.grep(e,function(e){return g.call(t,e)>=0!==n})}var tt=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,nt=/<([\w:]+)/,rt=/<|&#?\w+;/,it=/<(?:script|style|link)/i,ot=/^(?:checkbox|radio)$/i,st=/checked\s*(?:[^=]|=\s*.checked.)/i,at=/^$|\/(?:java|ecma)script/i,ut=/^true\/(.*)/,lt=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,ct={option:[1,"<select multiple='multiple'>","</select>"],thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};ct.optgroup=ct.option,ct.tbody=ct.tfoot=ct.colgroup=ct.caption=ct.thead,ct.th=ct.td,x.fn.extend({text:function(e){return x.access(this,function(e){return e===undefined?x.text(this):this.empty().append((this[0]&&this[0].ownerDocument||o).createTextNode(e))},null,e,arguments.length)},append:function(){return this.domManip(arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=pt(this,e);t.appendChild(e)}})},prepend:function(){return this.domManip(arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=pt(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return this.domManip(arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return this.domManip(arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},remove:function(e,t){var n,r=e?x.filter(e,this):this,i=0;for(;null!=(n=r[i]);i++)t||1!==n.nodeType||x.cleanData(mt(n)),n.parentNode&&(t&&x.contains(n.ownerDocument,n)&&dt(mt(n,"script")),n.parentNode.removeChild(n));return this},empty:function(){var e,t=0;for(;null!=(e=this[t]);t++)1===e.nodeType&&(x.cleanData(mt(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null==e?!1:e,t=null==t?e:t,this.map(function(){return x.clone(this,e,t)})},html:function(e){return x.access(this,function(e){var t=this[0]||{},n=0,r=this.length;if(e===undefined&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!it.test(e)&&!ct[(nt.exec(e)||["",""])[1].toLowerCase()]){e=e.replace(tt,"<$1></$2>");try{for(;r>n;n++)t=this[n]||{},1===t.nodeType&&(x.cleanData(mt(t,!1)),t.innerHTML=e);t=0}catch(i){}}t&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var e=x.map(this,function(e){return[e.nextSibling,e.parentNode]}),t=0;return this.domManip(arguments,function(n){var r=e[t++],i=e[t++];i&&(r&&r.parentNode!==i&&(r=this.nextSibling),x(this).remove(),i.insertBefore(n,r))},!0),t?this:this.remove()},detach:function(e){return this.remove(e,!0)},domManip:function(e,t,n){e=f.apply([],e);var r,i,o,s,a,u,l=0,c=this.length,p=this,h=c-1,d=e[0],g=x.isFunction(d);if(g||!(1>=c||"string"!=typeof d||x.support.checkClone)&&st.test(d))return this.each(function(r){var i=p.eq(r);g&&(e[0]=d.call(this,r,i.html())),i.domManip(e,t,n)});if(c&&(r=x.buildFragment(e,this[0].ownerDocument,!1,!n&&this),i=r.firstChild,1===r.childNodes.length&&(r=i),i)){for(o=x.map(mt(r,"script"),ft),s=o.length;c>l;l++)a=r,l!==h&&(a=x.clone(a,!0,!0),s&&x.merge(o,mt(a,"script"))),t.call(this[l],a,l);if(s)for(u=o[o.length-1].ownerDocument,x.map(o,ht),l=0;s>l;l++)a=o[l],at.test(a.type||"")&&!q.access(a,"globalEval")&&x.contains(u,a)&&(a.src?x._evalUrl(a.src):x.globalEval(a.textContent.replace(lt,"")))}return this}}),x.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,t){x.fn[e]=function(e){var n,r=[],i=x(e),o=i.length-1,s=0;for(;o>=s;s++)n=s===o?this:this.clone(!0),x(i[s])[t](n),h.apply(r,n.get());return this.pushStack(r)}}),x.extend({clone:function(e,t,n){var r,i,o,s,a=e.cloneNode(!0),u=x.contains(e.ownerDocument,e);if(!(x.support.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||x.isXMLDoc(e)))for(s=mt(a),o=mt(e),r=0,i=o.length;i>r;r++)yt(o[r],s[r]);if(t)if(n)for(o=o||mt(e),s=s||mt(a),r=0,i=o.length;i>r;r++)gt(o[r],s[r]);else gt(e,a);return s=mt(a,"script"),s.length>0&&dt(s,!u&&mt(e,"script")),a},buildFragment:function(e,t,n,r){var i,o,s,a,u,l,c=0,p=e.length,f=t.createDocumentFragment(),h=[];for(;p>c;c++)if(i=e[c],i||0===i)if("object"===x.type(i))x.merge(h,i.nodeType?[i]:i);else if(rt.test(i)){o=o||f.appendChild(t.createElement("div")),s=(nt.exec(i)||["",""])[1].toLowerCase(),a=ct[s]||ct._default,o.innerHTML=a[1]+i.replace(tt,"<$1></$2>")+a[2],l=a[0];while(l--)o=o.lastChild;x.merge(h,o.childNodes),o=f.firstChild,o.textContent=""}else h.push(t.createTextNode(i));f.textContent="",c=0;while(i=h[c++])if((!r||-1===x.inArray(i,r))&&(u=x.contains(i.ownerDocument,i),o=mt(f.appendChild(i),"script"),u&&dt(o),n)){l=0;while(i=o[l++])at.test(i.type||"")&&n.push(i)}return f},cleanData:function(e){var t,n,r,i,o,s,a=x.event.special,u=0;for(;(n=e[u])!==undefined;u++){if(F.accepts(n)&&(o=n[q.expando],o&&(t=q.cache[o]))){if(r=Object.keys(t.events||{}),r.length)for(s=0;(i=r[s])!==undefined;s++)a[i]?x.event.remove(n,i):x.removeEvent(n,i,t.handle);q.cache[o]&&delete q.cache[o]}delete L.cache[n[L.expando]]}},_evalUrl:function(e){return x.ajax({url:e,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})}});function pt(e,t){return x.nodeName(e,"table")&&x.nodeName(1===t.nodeType?t:t.firstChild,"tr")?e.getElementsByTagName("tbody")[0]||e.appendChild(e.ownerDocument.createElement("tbody")):e}function ft(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function ht(e){var t=ut.exec(e.type);return t?e.type=t[1]:e.removeAttribute("type"),e}function dt(e,t){var n=e.length,r=0;for(;n>r;r++)q.set(e[r],"globalEval",!t||q.get(t[r],"globalEval"))}function gt(e,t){var n,r,i,o,s,a,u,l;if(1===t.nodeType){if(q.hasData(e)&&(o=q.access(e),s=q.set(t,o),l=o.events)){delete s.handle,s.events={};for(i in l)for(n=0,r=l[i].length;r>n;n++)x.event.add(t,i,l[i][n])}L.hasData(e)&&(a=L.access(e),u=x.extend({},a),L.set(t,u))}}function mt(e,t){var n=e.getElementsByTagName?e.getElementsByTagName(t||"*"):e.querySelectorAll?e.querySelectorAll(t||"*"):[];return t===undefined||t&&x.nodeName(e,t)?x.merge([e],n):n}function yt(e,t){var n=t.nodeName.toLowerCase();"input"===n&&ot.test(e.type)?t.checked=e.checked:("input"===n||"textarea"===n)&&(t.defaultValue=e.defaultValue)}x.fn.extend({wrapAll:function(e){var t;return x.isFunction(e)?this.each(function(t){x(this).wrapAll(e.call(this,t))}):(this[0]&&(t=x(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstElementChild)e=e.firstElementChild;return e}).append(this)),this)},wrapInner:function(e){return x.isFunction(e)?this.each(function(t){x(this).wrapInner(e.call(this,t))}):this.each(function(){var t=x(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=x.isFunction(e);return this.each(function(n){x(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(){return this.parent().each(function(){x.nodeName(this,"body")||x(this).replaceWith(this.childNodes)}).end()}});var vt,xt,bt=/^(none|table(?!-c[ea]).+)/,wt=/^margin/,Tt=RegExp("^("+b+")(.*)$","i"),Ct=RegExp("^("+b+")(?!px)[a-z%]+$","i"),kt=RegExp("^([+-])=("+b+")","i"),Nt={BODY:"block"},Et={position:"absolute",visibility:"hidden",display:"block"},St={letterSpacing:0,fontWeight:400},jt=["Top","Right","Bottom","Left"],Dt=["Webkit","O","Moz","ms"];function At(e,t){if(t in e)return t;var n=t.charAt(0).toUpperCase()+t.slice(1),r=t,i=Dt.length;while(i--)if(t=Dt[i]+n,t in e)return t;return r}function Lt(e,t){return e=t||e,"none"===x.css(e,"display")||!x.contains(e.ownerDocument,e)}function qt(t){return e.getComputedStyle(t,null)}function Ht(e,t){var n,r,i,o=[],s=0,a=e.length;for(;a>s;s++)r=e[s],r.style&&(o[s]=q.get(r,"olddisplay"),n=r.style.display,t?(o[s]||"none"!==n||(r.style.display=""),""===r.style.display&&Lt(r)&&(o[s]=q.access(r,"olddisplay",Rt(r.nodeName)))):o[s]||(i=Lt(r),(n&&"none"!==n||!i)&&q.set(r,"olddisplay",i?n:x.css(r,"display"))));for(s=0;a>s;s++)r=e[s],r.style&&(t&&"none"!==r.style.display&&""!==r.style.display||(r.style.display=t?o[s]||"":"none"));return e}x.fn.extend({css:function(e,t){return x.access(this,function(e,t,n){var r,i,o={},s=0;if(x.isArray(t)){for(r=qt(e),i=t.length;i>s;s++)o[t[s]]=x.css(e,t[s],!1,r);return o}return n!==undefined?x.style(e,t,n):x.css(e,t)},e,t,arguments.length>1)},show:function(){return Ht(this,!0)},hide:function(){return Ht(this)},toggle:function(e){return"boolean"==typeof e?e?this.show():this.hide():this.each(function(){Lt(this)?x(this).show():x(this).hide()})}}),x.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=vt(e,"opacity");return""===n?"1":n}}}},cssNumber:{columnCount:!0,fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":"cssFloat"},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var i,o,s,a=x.camelCase(t),u=e.style;return t=x.cssProps[a]||(x.cssProps[a]=At(u,a)),s=x.cssHooks[t]||x.cssHooks[a],n===undefined?s&&"get"in s&&(i=s.get(e,!1,r))!==undefined?i:u[t]:(o=typeof n,"string"===o&&(i=kt.exec(n))&&(n=(i[1]+1)*i[2]+parseFloat(x.css(e,t)),o="number"),null==n||"number"===o&&isNaN(n)||("number"!==o||x.cssNumber[a]||(n+="px"),x.support.clearCloneStyle||""!==n||0!==t.indexOf("background")||(u[t]="inherit"),s&&"set"in s&&(n=s.set(e,n,r))===undefined||(u[t]=n)),undefined)}},css:function(e,t,n,r){var i,o,s,a=x.camelCase(t);return t=x.cssProps[a]||(x.cssProps[a]=At(e.style,a)),s=x.cssHooks[t]||x.cssHooks[a],s&&"get"in s&&(i=s.get(e,!0,n)),i===undefined&&(i=vt(e,t,r)),"normal"===i&&t in St&&(i=St[t]),""===n||n?(o=parseFloat(i),n===!0||x.isNumeric(o)?o||0:i):i}}),vt=function(e,t,n){var r,i,o,s=n||qt(e),a=s?s.getPropertyValue(t)||s[t]:undefined,u=e.style;return s&&(""!==a||x.contains(e.ownerDocument,e)||(a=x.style(e,t)),Ct.test(a)&&wt.test(t)&&(r=u.width,i=u.minWidth,o=u.maxWidth,u.minWidth=u.maxWidth=u.width=a,a=s.width,u.width=r,u.minWidth=i,u.maxWidth=o)),a};function Ot(e,t,n){var r=Tt.exec(t);return r?Math.max(0,r[1]-(n||0))+(r[2]||"px"):t}function Ft(e,t,n,r,i){var o=n===(r?"border":"content")?4:"width"===t?1:0,s=0;for(;4>o;o+=2)"margin"===n&&(s+=x.css(e,n+jt[o],!0,i)),r?("content"===n&&(s-=x.css(e,"padding"+jt[o],!0,i)),"margin"!==n&&(s-=x.css(e,"border"+jt[o]+"Width",!0,i))):(s+=x.css(e,"padding"+jt[o],!0,i),"padding"!==n&&(s+=x.css(e,"border"+jt[o]+"Width",!0,i)));return s}function Pt(e,t,n){var r=!0,i="width"===t?e.offsetWidth:e.offsetHeight,o=qt(e),s=x.support.boxSizing&&"border-box"===x.css(e,"boxSizing",!1,o);if(0>=i||null==i){if(i=vt(e,t,o),(0>i||null==i)&&(i=e.style[t]),Ct.test(i))return i;r=s&&(x.support.boxSizingReliable||i===e.style[t]),i=parseFloat(i)||0}return i+Ft(e,t,n||(s?"border":"content"),r,o)+"px"}function Rt(e){var t=o,n=Nt[e];return n||(n=Mt(e,t),"none"!==n&&n||(xt=(xt||x("<iframe frameborder='0' width='0' height='0'/>").css("cssText","display:block !important")).appendTo(t.documentElement),t=(xt[0].contentWindow||xt[0].contentDocument).document,t.write("<!doctype html><html><body>"),t.close(),n=Mt(e,t),xt.detach()),Nt[e]=n),n}function Mt(e,t){var n=x(t.createElement(e)).appendTo(t.body),r=x.css(n[0],"display");return n.remove(),r}x.each(["height","width"],function(e,t){x.cssHooks[t]={get:function(e,n,r){return n?0===e.offsetWidth&&bt.test(x.css(e,"display"))?x.swap(e,Et,function(){return Pt(e,t,r)}):Pt(e,t,r):undefined},set:function(e,n,r){var i=r&&qt(e);return Ot(e,n,r?Ft(e,t,r,x.support.boxSizing&&"border-box"===x.css(e,"boxSizing",!1,i),i):0)}}}),x(function(){x.support.reliableMarginRight||(x.cssHooks.marginRight={get:function(e,t){return t?x.swap(e,{display:"inline-block"},vt,[e,"marginRight"]):undefined}}),!x.support.pixelPosition&&x.fn.position&&x.each(["top","left"],function(e,t){x.cssHooks[t]={get:function(e,n){return n?(n=vt(e,t),Ct.test(n)?x(e).position()[t]+"px":n):undefined}}})}),x.expr&&x.expr.filters&&(x.expr.filters.hidden=function(e){return 0>=e.offsetWidth&&0>=e.offsetHeight},x.expr.filters.visible=function(e){return!x.expr.filters.hidden(e)}),x.each({margin:"",padding:"",border:"Width"},function(e,t){x.cssHooks[e+t]={expand:function(n){var r=0,i={},o="string"==typeof n?n.split(" "):[n];for(;4>r;r++)i[e+jt[r]+t]=o[r]||o[r-2]||o[0];return i}},wt.test(e)||(x.cssHooks[e+t].set=Ot)});var Wt=/%20/g,$t=/\[\]$/,Bt=/\r?\n/g,It=/^(?:submit|button|image|reset|file)$/i,zt=/^(?:input|select|textarea|keygen)/i;x.fn.extend({serialize:function(){return x.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=x.prop(this,"elements");return e?x.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!x(this).is(":disabled")&&zt.test(this.nodeName)&&!It.test(e)&&(this.checked||!ot.test(e))}).map(function(e,t){var n=x(this).val();return null==n?null:x.isArray(n)?x.map(n,function(e){return{name:t.name,value:e.replace(Bt,"\r\n")}}):{name:t.name,value:n.replace(Bt,"\r\n")}}).get()}}),x.param=function(e,t){var n,r=[],i=function(e,t){t=x.isFunction(t)?t():null==t?"":t,r[r.length]=encodeURIComponent(e)+"="+encodeURIComponent(t)};if(t===undefined&&(t=x.ajaxSettings&&x.ajaxSettings.traditional),x.isArray(e)||e.jquery&&!x.isPlainObject(e))x.each(e,function(){i(this.name,this.value)});else for(n in e)_t(n,e[n],t,i);return r.join("&").replace(Wt,"+")};function _t(e,t,n,r){var i;if(x.isArray(t))x.each(t,function(t,i){n||$t.test(e)?r(e,i):_t(e+"["+("object"==typeof i?t:"")+"]",i,n,r)});else if(n||"object"!==x.type(t))r(e,t);else for(i in t)_t(e+"["+i+"]",t[i],n,r)}x.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(e,t){x.fn[t]=function(e,n){return arguments.length>0?this.on(t,null,e,n):this.trigger(t)}}),x.fn.extend({hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)},bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)
6},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)}});var Xt,Ut,Yt=x.now(),Vt=/\?/,Gt=/#.*$/,Jt=/([?&])_=[^&]*/,Qt=/^(.*?):[ \t]*([^\r\n]*)$/gm,Kt=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Zt=/^(?:GET|HEAD)$/,en=/^\/\//,tn=/^([\w.+-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,nn=x.fn.load,rn={},on={},sn="*/".concat("*");try{Ut=i.href}catch(an){Ut=o.createElement("a"),Ut.href="",Ut=Ut.href}Xt=tn.exec(Ut.toLowerCase())||[];function un(e){return function(t,n){"string"!=typeof t&&(n=t,t="*");var r,i=0,o=t.toLowerCase().match(w)||[];if(x.isFunction(n))while(r=o[i++])"+"===r[0]?(r=r.slice(1)||"*",(e[r]=e[r]||[]).unshift(n)):(e[r]=e[r]||[]).push(n)}}function ln(e,t,n,r){var i={},o=e===on;function s(a){var u;return i[a]=!0,x.each(e[a]||[],function(e,a){var l=a(t,n,r);return"string"!=typeof l||o||i[l]?o?!(u=l):undefined:(t.dataTypes.unshift(l),s(l),!1)}),u}return s(t.dataTypes[0])||!i["*"]&&s("*")}function cn(e,t){var n,r,i=x.ajaxSettings.flatOptions||{};for(n in t)t[n]!==undefined&&((i[n]?e:r||(r={}))[n]=t[n]);return r&&x.extend(!0,e,r),e}x.fn.load=function(e,t,n){if("string"!=typeof e&&nn)return nn.apply(this,arguments);var r,i,o,s=this,a=e.indexOf(" ");return a>=0&&(r=e.slice(a),e=e.slice(0,a)),x.isFunction(t)?(n=t,t=undefined):t&&"object"==typeof t&&(i="POST"),s.length>0&&x.ajax({url:e,type:i,dataType:"html",data:t}).done(function(e){o=arguments,s.html(r?x("<div>").append(x.parseHTML(e)).find(r):e)}).complete(n&&function(e,t){s.each(n,o||[e.responseText,t,e])}),this},x.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){x.fn[t]=function(e){return this.on(t,e)}}),x.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Ut,type:"GET",isLocal:Kt.test(Xt[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":sn,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":x.parseJSON,"text xml":x.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?cn(cn(e,x.ajaxSettings),t):cn(x.ajaxSettings,e)},ajaxPrefilter:un(rn),ajaxTransport:un(on),ajax:function(e,t){"object"==typeof e&&(t=e,e=undefined),t=t||{};var n,r,i,o,s,a,u,l,c=x.ajaxSetup({},t),p=c.context||c,f=c.context&&(p.nodeType||p.jquery)?x(p):x.event,h=x.Deferred(),d=x.Callbacks("once memory"),g=c.statusCode||{},m={},y={},v=0,b="canceled",T={readyState:0,getResponseHeader:function(e){var t;if(2===v){if(!o){o={};while(t=Qt.exec(i))o[t[1].toLowerCase()]=t[2]}t=o[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return 2===v?i:null},setRequestHeader:function(e,t){var n=e.toLowerCase();return v||(e=y[n]=y[n]||e,m[e]=t),this},overrideMimeType:function(e){return v||(c.mimeType=e),this},statusCode:function(e){var t;if(e)if(2>v)for(t in e)g[t]=[g[t],e[t]];else T.always(e[T.status]);return this},abort:function(e){var t=e||b;return n&&n.abort(t),k(0,t),this}};if(h.promise(T).complete=d.add,T.success=T.done,T.error=T.fail,c.url=((e||c.url||Ut)+"").replace(Gt,"").replace(en,Xt[1]+"//"),c.type=t.method||t.type||c.method||c.type,c.dataTypes=x.trim(c.dataType||"*").toLowerCase().match(w)||[""],null==c.crossDomain&&(a=tn.exec(c.url.toLowerCase()),c.crossDomain=!(!a||a[1]===Xt[1]&&a[2]===Xt[2]&&(a[3]||("http:"===a[1]?"80":"443"))===(Xt[3]||("http:"===Xt[1]?"80":"443")))),c.data&&c.processData&&"string"!=typeof c.data&&(c.data=x.param(c.data,c.traditional)),ln(rn,c,t,T),2===v)return T;u=c.global,u&&0===x.active++&&x.event.trigger("ajaxStart"),c.type=c.type.toUpperCase(),c.hasContent=!Zt.test(c.type),r=c.url,c.hasContent||(c.data&&(r=c.url+=(Vt.test(r)?"&":"?")+c.data,delete c.data),c.cache===!1&&(c.url=Jt.test(r)?r.replace(Jt,"$1_="+Yt++):r+(Vt.test(r)?"&":"?")+"_="+Yt++)),c.ifModified&&(x.lastModified[r]&&T.setRequestHeader("If-Modified-Since",x.lastModified[r]),x.etag[r]&&T.setRequestHeader("If-None-Match",x.etag[r])),(c.data&&c.hasContent&&c.contentType!==!1||t.contentType)&&T.setRequestHeader("Content-Type",c.contentType),T.setRequestHeader("Accept",c.dataTypes[0]&&c.accepts[c.dataTypes[0]]?c.accepts[c.dataTypes[0]]+("*"!==c.dataTypes[0]?", "+sn+"; q=0.01":""):c.accepts["*"]);for(l in c.headers)T.setRequestHeader(l,c.headers[l]);if(c.beforeSend&&(c.beforeSend.call(p,T,c)===!1||2===v))return T.abort();b="abort";for(l in{success:1,error:1,complete:1})T[l](c[l]);if(n=ln(on,c,t,T)){T.readyState=1,u&&f.trigger("ajaxSend",[T,c]),c.async&&c.timeout>0&&(s=setTimeout(function(){T.abort("timeout")},c.timeout));try{v=1,n.send(m,k)}catch(C){if(!(2>v))throw C;k(-1,C)}}else k(-1,"No Transport");function k(e,t,o,a){var l,m,y,b,w,C=t;2!==v&&(v=2,s&&clearTimeout(s),n=undefined,i=a||"",T.readyState=e>0?4:0,l=e>=200&&300>e||304===e,o&&(b=pn(c,T,o)),b=fn(c,b,T,l),l?(c.ifModified&&(w=T.getResponseHeader("Last-Modified"),w&&(x.lastModified[r]=w),w=T.getResponseHeader("etag"),w&&(x.etag[r]=w)),204===e||"HEAD"===c.type?C="nocontent":304===e?C="notmodified":(C=b.state,m=b.data,y=b.error,l=!y)):(y=C,(e||!C)&&(C="error",0>e&&(e=0))),T.status=e,T.statusText=(t||C)+"",l?h.resolveWith(p,[m,C,T]):h.rejectWith(p,[T,C,y]),T.statusCode(g),g=undefined,u&&f.trigger(l?"ajaxSuccess":"ajaxError",[T,c,l?m:y]),d.fireWith(p,[T,C]),u&&(f.trigger("ajaxComplete",[T,c]),--x.active||x.event.trigger("ajaxStop")))}return T},getJSON:function(e,t,n){return x.get(e,t,n,"json")},getScript:function(e,t){return x.get(e,undefined,t,"script")}}),x.each(["get","post"],function(e,t){x[t]=function(e,n,r,i){return x.isFunction(n)&&(i=i||r,r=n,n=undefined),x.ajax({url:e,type:t,dataType:i,data:n,success:r})}});function pn(e,t,n){var r,i,o,s,a=e.contents,u=e.dataTypes;while("*"===u[0])u.shift(),r===undefined&&(r=e.mimeType||t.getResponseHeader("Content-Type"));if(r)for(i in a)if(a[i]&&a[i].test(r)){u.unshift(i);break}if(u[0]in n)o=u[0];else{for(i in n){if(!u[0]||e.converters[i+" "+u[0]]){o=i;break}s||(s=i)}o=o||s}return o?(o!==u[0]&&u.unshift(o),n[o]):undefined}function fn(e,t,n,r){var i,o,s,a,u,l={},c=e.dataTypes.slice();if(c[1])for(s in e.converters)l[s.toLowerCase()]=e.converters[s];o=c.shift();while(o)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!u&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u=o,o=c.shift())if("*"===o)o=u;else if("*"!==u&&u!==o){if(s=l[u+" "+o]||l["* "+o],!s)for(i in l)if(a=i.split(" "),a[1]===o&&(s=l[u+" "+a[0]]||l["* "+a[0]])){s===!0?s=l[i]:l[i]!==!0&&(o=a[0],c.unshift(a[1]));break}if(s!==!0)if(s&&e["throws"])t=s(t);else try{t=s(t)}catch(p){return{state:"parsererror",error:s?p:"No conversion from "+u+" to "+o}}}return{state:"success",data:t}}x.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(e){return x.globalEval(e),e}}}),x.ajaxPrefilter("script",function(e){e.cache===undefined&&(e.cache=!1),e.crossDomain&&(e.type="GET")}),x.ajaxTransport("script",function(e){if(e.crossDomain){var t,n;return{send:function(r,i){t=x("<script>").prop({async:!0,charset:e.scriptCharset,src:e.url}).on("load error",n=function(e){t.remove(),n=null,e&&i("error"===e.type?404:200,e.type)}),o.head.appendChild(t[0])},abort:function(){n&&n()}}}});var hn=[],dn=/(=)\?(?=&|$)|\?\?/;x.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=hn.pop()||x.expando+"_"+Yt++;return this[e]=!0,e}}),x.ajaxPrefilter("json jsonp",function(t,n,r){var i,o,s,a=t.jsonp!==!1&&(dn.test(t.url)?"url":"string"==typeof t.data&&!(t.contentType||"").indexOf("application/x-www-form-urlencoded")&&dn.test(t.data)&&"data");return a||"jsonp"===t.dataTypes[0]?(i=t.jsonpCallback=x.isFunction(t.jsonpCallback)?t.jsonpCallback():t.jsonpCallback,a?t[a]=t[a].replace(dn,"$1"+i):t.jsonp!==!1&&(t.url+=(Vt.test(t.url)?"&":"?")+t.jsonp+"="+i),t.converters["script json"]=function(){return s||x.error(i+" was not called"),s[0]},t.dataTypes[0]="json",o=e[i],e[i]=function(){s=arguments},r.always(function(){e[i]=o,t[i]&&(t.jsonpCallback=n.jsonpCallback,hn.push(i)),s&&x.isFunction(o)&&o(s[0]),s=o=undefined}),"script"):undefined}),x.ajaxSettings.xhr=function(){try{return new XMLHttpRequest}catch(e){}};var gn=x.ajaxSettings.xhr(),mn={0:200,1223:204},yn=0,vn={};e.ActiveXObject&&x(e).on("unload",function(){for(var e in vn)vn[e]();vn=undefined}),x.support.cors=!!gn&&"withCredentials"in gn,x.support.ajax=gn=!!gn,x.ajaxTransport(function(e){var t;return x.support.cors||gn&&!e.crossDomain?{send:function(n,r){var i,o,s=e.xhr();if(s.open(e.type,e.url,e.async,e.username,e.password),e.xhrFields)for(i in e.xhrFields)s[i]=e.xhrFields[i];e.mimeType&&s.overrideMimeType&&s.overrideMimeType(e.mimeType),e.crossDomain||n["X-Requested-With"]||(n["X-Requested-With"]="XMLHttpRequest");for(i in n)s.setRequestHeader(i,n[i]);t=function(e){return function(){t&&(delete vn[o],t=s.onload=s.onerror=null,"abort"===e?s.abort():"error"===e?r(s.status||404,s.statusText):r(mn[s.status]||s.status,s.statusText,"string"==typeof s.responseText?{text:s.responseText}:undefined,s.getAllResponseHeaders()))}},s.onload=t(),s.onerror=t("error"),t=vn[o=yn++]=t("abort"),s.send(e.hasContent&&e.data||null)},abort:function(){t&&t()}}:undefined});var xn,bn,wn=/^(?:toggle|show|hide)$/,Tn=RegExp("^(?:([+-])=|)("+b+")([a-z%]*)$","i"),Cn=/queueHooks$/,kn=[An],Nn={"*":[function(e,t){var n=this.createTween(e,t),r=n.cur(),i=Tn.exec(t),o=i&&i[3]||(x.cssNumber[e]?"":"px"),s=(x.cssNumber[e]||"px"!==o&&+r)&&Tn.exec(x.css(n.elem,e)),a=1,u=20;if(s&&s[3]!==o){o=o||s[3],i=i||[],s=+r||1;do a=a||".5",s/=a,x.style(n.elem,e,s+o);while(a!==(a=n.cur()/r)&&1!==a&&--u)}return i&&(s=n.start=+s||+r||0,n.unit=o,n.end=i[1]?s+(i[1]+1)*i[2]:+i[2]),n}]};function En(){return setTimeout(function(){xn=undefined}),xn=x.now()}function Sn(e,t,n){var r,i=(Nn[t]||[]).concat(Nn["*"]),o=0,s=i.length;for(;s>o;o++)if(r=i[o].call(n,t,e))return r}function jn(e,t,n){var r,i,o=0,s=kn.length,a=x.Deferred().always(function(){delete u.elem}),u=function(){if(i)return!1;var t=xn||En(),n=Math.max(0,l.startTime+l.duration-t),r=n/l.duration||0,o=1-r,s=0,u=l.tweens.length;for(;u>s;s++)l.tweens[s].run(o);return a.notifyWith(e,[l,o,n]),1>o&&u?n:(a.resolveWith(e,[l]),!1)},l=a.promise({elem:e,props:x.extend({},t),opts:x.extend(!0,{specialEasing:{}},n),originalProperties:t,originalOptions:n,startTime:xn||En(),duration:n.duration,tweens:[],createTween:function(t,n){var r=x.Tween(e,l.opts,t,n,l.opts.specialEasing[t]||l.opts.easing);return l.tweens.push(r),r},stop:function(t){var n=0,r=t?l.tweens.length:0;if(i)return this;for(i=!0;r>n;n++)l.tweens[n].run(1);return t?a.resolveWith(e,[l,t]):a.rejectWith(e,[l,t]),this}}),c=l.props;for(Dn(c,l.opts.specialEasing);s>o;o++)if(r=kn[o].call(l,e,c,l.opts))return r;return x.map(c,Sn,l),x.isFunction(l.opts.start)&&l.opts.start.call(e,l),x.fx.timer(x.extend(u,{elem:e,anim:l,queue:l.opts.queue})),l.progress(l.opts.progress).done(l.opts.done,l.opts.complete).fail(l.opts.fail).always(l.opts.always)}function Dn(e,t){var n,r,i,o,s;for(n in e)if(r=x.camelCase(n),i=t[r],o=e[n],x.isArray(o)&&(i=o[1],o=e[n]=o[0]),n!==r&&(e[r]=o,delete e[n]),s=x.cssHooks[r],s&&"expand"in s){o=s.expand(o),delete e[r];for(n in o)n in e||(e[n]=o[n],t[n]=i)}else t[r]=i}x.Animation=x.extend(jn,{tweener:function(e,t){x.isFunction(e)?(t=e,e=["*"]):e=e.split(" ");var n,r=0,i=e.length;for(;i>r;r++)n=e[r],Nn[n]=Nn[n]||[],Nn[n].unshift(t)},prefilter:function(e,t){t?kn.unshift(e):kn.push(e)}});function An(e,t,n){var r,i,o,s,a,u,l=this,c={},p=e.style,f=e.nodeType&&Lt(e),h=q.get(e,"fxshow");n.queue||(a=x._queueHooks(e,"fx"),null==a.unqueued&&(a.unqueued=0,u=a.empty.fire,a.empty.fire=function(){a.unqueued||u()}),a.unqueued++,l.always(function(){l.always(function(){a.unqueued--,x.queue(e,"fx").length||a.empty.fire()})})),1===e.nodeType&&("height"in t||"width"in t)&&(n.overflow=[p.overflow,p.overflowX,p.overflowY],"inline"===x.css(e,"display")&&"none"===x.css(e,"float")&&(p.display="inline-block")),n.overflow&&(p.overflow="hidden",l.always(function(){p.overflow=n.overflow[0],p.overflowX=n.overflow[1],p.overflowY=n.overflow[2]}));for(r in t)if(i=t[r],wn.exec(i)){if(delete t[r],o=o||"toggle"===i,i===(f?"hide":"show")){if("show"!==i||!h||h[r]===undefined)continue;f=!0}c[r]=h&&h[r]||x.style(e,r)}if(!x.isEmptyObject(c)){h?"hidden"in h&&(f=h.hidden):h=q.access(e,"fxshow",{}),o&&(h.hidden=!f),f?x(e).show():l.done(function(){x(e).hide()}),l.done(function(){var t;q.remove(e,"fxshow");for(t in c)x.style(e,t,c[t])});for(r in c)s=Sn(f?h[r]:0,r,l),r in h||(h[r]=s.start,f&&(s.end=s.start,s.start="width"===r||"height"===r?1:0))}}function Ln(e,t,n,r,i){return new Ln.prototype.init(e,t,n,r,i)}x.Tween=Ln,Ln.prototype={constructor:Ln,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||"swing",this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(x.cssNumber[n]?"":"px")},cur:function(){var e=Ln.propHooks[this.prop];return e&&e.get?e.get(this):Ln.propHooks._default.get(this)},run:function(e){var t,n=Ln.propHooks[this.prop];return this.pos=t=this.options.duration?x.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):Ln.propHooks._default.set(this),this}},Ln.prototype.init.prototype=Ln.prototype,Ln.propHooks={_default:{get:function(e){var t;return null==e.elem[e.prop]||e.elem.style&&null!=e.elem.style[e.prop]?(t=x.css(e.elem,e.prop,""),t&&"auto"!==t?t:0):e.elem[e.prop]},set:function(e){x.fx.step[e.prop]?x.fx.step[e.prop](e):e.elem.style&&(null!=e.elem.style[x.cssProps[e.prop]]||x.cssHooks[e.prop])?x.style(e.elem,e.prop,e.now+e.unit):e.elem[e.prop]=e.now}}},Ln.propHooks.scrollTop=Ln.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},x.each(["toggle","show","hide"],function(e,t){var n=x.fn[t];x.fn[t]=function(e,r,i){return null==e||"boolean"==typeof e?n.apply(this,arguments):this.animate(qn(t,!0),e,r,i)}}),x.fn.extend({fadeTo:function(e,t,n,r){return this.filter(Lt).css("opacity",0).show().end().animate({opacity:t},e,n,r)},animate:function(e,t,n,r){var i=x.isEmptyObject(e),o=x.speed(t,n,r),s=function(){var t=jn(this,x.extend({},e),o);(i||q.get(this,"finish"))&&t.stop(!0)};return s.finish=s,i||o.queue===!1?this.each(s):this.queue(o.queue,s)},stop:function(e,t,n){var r=function(e){var t=e.stop;delete e.stop,t(n)};return"string"!=typeof e&&(n=t,t=e,e=undefined),t&&e!==!1&&this.queue(e||"fx",[]),this.each(function(){var t=!0,i=null!=e&&e+"queueHooks",o=x.timers,s=q.get(this);if(i)s[i]&&s[i].stop&&r(s[i]);else for(i in s)s[i]&&s[i].stop&&Cn.test(i)&&r(s[i]);for(i=o.length;i--;)o[i].elem!==this||null!=e&&o[i].queue!==e||(o[i].anim.stop(n),t=!1,o.splice(i,1));(t||!n)&&x.dequeue(this,e)})},finish:function(e){return e!==!1&&(e=e||"fx"),this.each(function(){var t,n=q.get(this),r=n[e+"queue"],i=n[e+"queueHooks"],o=x.timers,s=r?r.length:0;for(n.finish=!0,x.queue(this,e,[]),i&&i.stop&&i.stop.call(this,!0),t=o.length;t--;)o[t].elem===this&&o[t].queue===e&&(o[t].anim.stop(!0),o.splice(t,1));for(t=0;s>t;t++)r[t]&&r[t].finish&&r[t].finish.call(this);delete n.finish})}});function qn(e,t){var n,r={height:e},i=0;for(t=t?1:0;4>i;i+=2-t)n=jt[i],r["margin"+n]=r["padding"+n]=e;return t&&(r.opacity=r.width=e),r}x.each({slideDown:qn("show"),slideUp:qn("hide"),slideToggle:qn("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,t){x.fn[e]=function(e,n,r){return this.animate(t,e,n,r)}}),x.speed=function(e,t,n){var r=e&&"object"==typeof e?x.extend({},e):{complete:n||!n&&t||x.isFunction(e)&&e,duration:e,easing:n&&t||t&&!x.isFunction(t)&&t};return r.duration=x.fx.off?0:"number"==typeof r.duration?r.duration:r.duration in x.fx.speeds?x.fx.speeds[r.duration]:x.fx.speeds._default,(null==r.queue||r.queue===!0)&&(r.queue="fx"),r.old=r.complete,r.complete=function(){x.isFunction(r.old)&&r.old.call(this),r.queue&&x.dequeue(this,r.queue)},r},x.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2}},x.timers=[],x.fx=Ln.prototype.init,x.fx.tick=function(){var e,t=x.timers,n=0;for(xn=x.now();t.length>n;n++)e=t[n],e()||t[n]!==e||t.splice(n--,1);t.length||x.fx.stop(),xn=undefined},x.fx.timer=function(e){e()&&x.timers.push(e)&&x.fx.start()},x.fx.interval=13,x.fx.start=function(){bn||(bn=setInterval(x.fx.tick,x.fx.interval))},x.fx.stop=function(){clearInterval(bn),bn=null},x.fx.speeds={slow:600,fast:200,_default:400},x.fx.step={},x.expr&&x.expr.filters&&(x.expr.filters.animated=function(e){return x.grep(x.timers,function(t){return e===t.elem}).length}),x.fn.offset=function(e){if(arguments.length)return e===undefined?this:this.each(function(t){x.offset.setOffset(this,e,t)});var t,n,i=this[0],o={top:0,left:0},s=i&&i.ownerDocument;if(s)return t=s.documentElement,x.contains(t,i)?(typeof i.getBoundingClientRect!==r&&(o=i.getBoundingClientRect()),n=Hn(s),{top:o.top+n.pageYOffset-t.clientTop,left:o.left+n.pageXOffset-t.clientLeft}):o},x.offset={setOffset:function(e,t,n){var r,i,o,s,a,u,l,c=x.css(e,"position"),p=x(e),f={};"static"===c&&(e.style.position="relative"),a=p.offset(),o=x.css(e,"top"),u=x.css(e,"left"),l=("absolute"===c||"fixed"===c)&&(o+u).indexOf("auto")>-1,l?(r=p.position(),s=r.top,i=r.left):(s=parseFloat(o)||0,i=parseFloat(u)||0),x.isFunction(t)&&(t=t.call(e,n,a)),null!=t.top&&(f.top=t.top-a.top+s),null!=t.left&&(f.left=t.left-a.left+i),"using"in t?t.using.call(e,f):p.css(f)}},x.fn.extend({position:function(){if(this[0]){var e,t,n=this[0],r={top:0,left:0};return"fixed"===x.css(n,"position")?t=n.getBoundingClientRect():(e=this.offsetParent(),t=this.offset(),x.nodeName(e[0],"html")||(r=e.offset()),r.top+=x.css(e[0],"borderTopWidth",!0),r.left+=x.css(e[0],"borderLeftWidth",!0)),{top:t.top-r.top-x.css(n,"marginTop",!0),left:t.left-r.left-x.css(n,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent||s;while(e&&!x.nodeName(e,"html")&&"static"===x.css(e,"position"))e=e.offsetParent;return e||s})}}),x.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,n){var r="pageYOffset"===n;x.fn[t]=function(i){return x.access(this,function(t,i,o){var s=Hn(t);return o===undefined?s?s[n]:t[i]:(s?s.scrollTo(r?e.pageXOffset:o,r?o:e.pageYOffset):t[i]=o,undefined)},t,i,arguments.length,null)}});function Hn(e){return x.isWindow(e)?e:9===e.nodeType&&e.defaultView}x.each({Height:"height",Width:"width"},function(e,t){x.each({padding:"inner"+e,content:t,"":"outer"+e},function(n,r){x.fn[r]=function(r,i){var o=arguments.length&&(n||"boolean"!=typeof r),s=n||(r===!0||i===!0?"margin":"border");return x.access(this,function(t,n,r){var i;return x.isWindow(t)?t.document.documentElement["client"+e]:9===t.nodeType?(i=t.documentElement,Math.max(t.body["scroll"+e],i["scroll"+e],t.body["offset"+e],i["offset"+e],i["client"+e])):r===undefined?x.css(t,n,s):x.style(t,n,r,s)},t,o?r:undefined,o,null)}})}),x.fn.size=function(){return this.length},x.fn.andSelf=x.fn.addBack,"object"==typeof module&&module&&"object"==typeof module.exports?module.exports=x:"function"==typeof define&&define.amd&&define("jquery",[],function(){return x}),"object"==typeof e&&"object"==typeof e.document&&(e.jQuery=e.$=x)})(window);
diff --git a/tpl/layout.twig b/tpl/layout.twig
deleted file mode 100644
index 07ca231c..00000000
--- a/tpl/layout.twig
+++ /dev/null
@@ -1,31 +0,0 @@
1<!DOCTYPE html>
2<!--[if lte IE 6]><html class="no-js ie6 ie67 ie678" lang="en"><![endif]-->
3<!--[if lte IE 7]><html class="no-js ie7 ie67 ie678" lang="en"><![endif]-->
4<!--[if IE 8]><html class="no-js ie8 ie678" lang="en"><![endif]-->
5<!--[if gt IE 8]><html class="no-js" lang="en"><![endif]-->
6<html>
7 <head>
8 <meta name="viewport" content="initial-scale=1.0">
9 <meta charset="utf-8">
10 <!--[if IE]>
11 <meta http-equiv="X-UA-Compatible" content="IE=10">
12 <![endif]-->
13 <title>{% block title %}{% endblock %} - poche</title>
14{% include '_head.twig' %}
15{% include '_bookmarklet.twig' %}
16 </head>
17 <body>
18 {% include '_top.twig' %}
19 <div id="main">
20 {% block menu %}{% endblock %}
21 {% block precontent %}{% endblock %}
22 {% block messages %}
23 {% include '_messages.twig' %}
24 {% endblock %}
25 <div id="content" class="w600p center">
26 {% block content %}{% endblock %}
27 </div>
28 </div>
29{% include '_footer.twig' %}
30 </body>
31</html> \ No newline at end of file
diff --git a/tpl/login.twig b/tpl/login.twig
deleted file mode 100644
index b24674e2..00000000
--- a/tpl/login.twig
+++ /dev/null
@@ -1,32 +0,0 @@
1{% extends "layout.twig" %}
2
3{% block title %}{% trans "login to your poche" %}{% endblock %}
4{% block content %}
5 <form method="post" action="?login" name="loginform">
6 <fieldset class="w500p center">
7 <h2 class="mbs txtcenter">{% trans "login to your poche" %}</h2>
8 {% if constant('MODE_DEMO') == 1 %}<p>{% trans "you are in demo mode, some features may be disabled." %}</p>{% endif %}
9 <div class="row">
10 <label class="col w150p" for="login">{% trans "Login" %}</label>
11 <input class="col" type="text" id="login" name="login" placeholder="Login" tabindex="1" autofocus {% if constant('MODE_DEMO') == 1 %}value="poche"{% endif %} />
12 </div>
13
14 <div class="row">
15 <label class="col w150p" for="password">{% trans "Password" %}</label>
16 <input class="col" type="password" id="password" name="password" placeholder="Password" tabindex="2" {% if constant('MODE_DEMO') == 1 %}value="poche"{% endif %} />
17 </div>
18 <div class="row">
19 <label class="col w150p" for="longlastingsession">{% trans "Stay signed in" %}</label>
20 <div class="col">
21 <input type="checkbox" id="longlastingsession" name="longlastingsession" tabindex="3">
22 <small class="inbl">{% trans "(Do not check on public computers)" %}</small>
23 </div>
24 </div>
25 <div class="row mts txtcenter">
26 <button class="bouton" type="submit" tabindex="4">{% trans "Sign in" %}</button>
27 </div>
28 </fieldset>
29 <input type="hidden" name="returnurl" value="{{ referer }}">
30 <input type="hidden" name="token" value="{{ token }}">
31 </form>
32{% endblock %} \ No newline at end of file
diff --git a/tpl/view.twig b/tpl/view.twig
deleted file mode 100644
index 28508772..00000000
--- a/tpl/view.twig
+++ /dev/null
@@ -1,38 +0,0 @@
1{% extends "layout.twig" %}
2{% block title %}{{ entry.title|raw }} ({{ entry.url | e | getDomain }}){% endblock %}
3{% block content %}
4 <div id="article">
5 <div class="tools">
6 <ul class="tools">
7 <li><a href="./" title="{% trans "back to home" %}" class="tool back"><span>{% trans "back to home" %}</span></a></li>
8 <li><a title="{% trans "toggle mark as read" %}" class="tool archive {% if entry.is_read == 0 %}archive-off{% endif %}" href="./?action=toggle_archive&amp;id={{ entry.id|e }}"><span>{% trans "toggle mark as read" %}</span></a></li>
9 <li><a title="{% trans "toggle favorite" %}" class="tool fav {% if entry.is_fav == 0 %}fav-off{% endif %}" href="./?action=toggle_fav&amp;id={{ entry.id|e }}"><span>{% trans "toggle favorite" %}</span></a></li>
10 <li><a title="{% trans "delete" %}" class="tool delete" href="./?action=delete&amp;id={{ entry.id|e }}"><span>{% trans "delete" %}</span></a></li>
11 {% if constant('SHARE_TWITTER') == 1 %}<li><a href="https://twitter.com/home?status={{entry.title|url_encode}}%20{{ entry.url|url_encode }}%20via%20@getpoche" target="_blank" class="tool twitter" title="{% trans "tweet" %}"><span>{% trans "tweet" %}</span></a></li>{% endif %}
12 {% if constant('SHARE_MAIL') == 1 %}<li><a href="mailto:?subject={{ entry.title|url_encode }}&amp;body={{ entry.url|url_encode }}%20via%20@getpoche" class="tool email" title="{% trans "email" %}"><span>{% trans "email" %}</span></a></li>{% endif %}
13 {% if constant('SHARE_SHAARLI') == 1 %}<li><a href="{{ constant('SHAARLI_URL') }}/index.php?post={{ entry.url|url_encode }}&amp;title={{ entry.title|url_encode }}" target="_blank" class="tool shaarli" title="{% trans "shaarli" %}"><span>{% trans "shaarli" %}</span></a></li>{% endif %}
14 </ul>
15 </div>
16 <header class="mbm">
17 <h1>{{ entry.title|raw }}</h1>
18 <div class="vieworiginal txtright small"><a href="{{ entry.url|e }}" target="_blank" title="{% trans "original" %} : {{ entry.title|e }}">{{ entry.url | e | getDomain }}</a></div>
19 </header>
20 <article>
21 {{ content | raw }}
22 <div class="vieworiginal txtright small"><a href="{{ entry.url|e }}" target="_blank" title="{% trans "original" %} : {{ entry.title|e }}">{{ entry.url | e | getDomain }}</a></div>
23 </article>
24 <div class="tools">
25 <ul class="tools">
26 <li><a href="./?" title="{% trans "back to home" %}" class="tool back"><span>{% trans "back to home" %}</span></a></li>
27 <li><a href="#top" title="{% trans "back to top" %}" class="tool top"><span>{% trans "back to top" %}</span></a></li>
28 <li><a title="{% trans "toggle mark as read" %}" class="tool archive {% if entry.is_read == 0 %}archive-off{% endif %}" href="./?action=toggle_archive&amp;id={{ entry.id|e }}"><span>{% trans "toggle mark as read" %}</span></a></li>
29 <li><a title="{% trans "toggle favorite" %}" class="tool fav {% if entry.is_fav == 0 %}fav-off{% endif %}" href="./?action=toggle_fav&amp;id={{ entry.id|e }}"><span>{% trans "toggle favorite" %}</span></a></li>
30 <li><a title="{% trans "delete" %}" class="tool delete" href="./?action=delete&amp;id={{ entry.id|e }}"><span>{% trans "delete" %}</span></a></li>
31 {% if constant('SHARE_TWITTER') == 1 %}<li><a href="https://twitter.com/home?status={{entry.title|url_encode}}%20{{ entry.url|url_encode }}%20via%20@getpoche" target="_blank" class="tool twitter" title="{% trans "tweet" %}"><span>{% trans "tweet" %}</span></a></li>{% endif %}
32 {% if constant('SHARE_MAIL') == 1 %}<li><a href="mailto:?subject={{ entry.title|url_encode }}&amp;body={{ entry.url|url_encode }}%20via%20@getpoche" class="tool email" title="{% trans "email" %}"><span>{% trans "email" %}</span></a></li>{% endif %}
33 {% if constant('SHARE_SHAARLI') == 1 %}<li><a href="{{ constant('SHAARLI_URL') }}/index.php?post={{ entry.url|url_encode }}&amp;title={{ entry.title|url_encode }}" target="_blank" class="tool shaarli" title="{% trans "shaarli" %}"><span>{% trans "shaarli" %}</span></a></li>{% endif %}
34 </ul>
35 <p>{% trans "this article appears wrong?" %} <a href="https://github.com/inthepoche/poche/issues/new">{% trans "create an issue" %}</a> {% trans "or" %} <a href="mailto:support@inthepoche.com?subject=Wrong%20display%20in%20poche&amp;body={{ entry.url|url_encode }}">{% trans "contact us by mail" %}</a></p>
36 </div>
37 </div>
38{% endblock %} \ No newline at end of file