From b6b36e1b5a37cfddc025efdbd816acbde70eafb6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicolas=20L=C5=93uillet?= Date: Mon, 26 Aug 2013 17:18:08 +0200 Subject: fix bug #182: Wrong title on favorites and archives pages --- tpl/home.twig | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/tpl/home.twig b/tpl/home.twig index a2fa9a93..6b80c6ed 100644 --- a/tpl/home.twig +++ b/tpl/home.twig @@ -1,5 +1,13 @@ {% extends "layout.twig" %} -{% block title %}{% trans "home" %}{% endblock %} +{% block title %} +{% if view == 'fav' %} +{% trans "favoris" %} +{% elseif view == 'archive' %} +{% trans "archive" %} +{% else %} +{% trans "unread" %} +{% endif %} +{% endblock %} {% block menu %} {% include '_menu.twig' %} {% endblock %} -- cgit v1.2.3 From 6fb46003340dc96c3a9fa876949c39eb25f14773 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicolas=20L=C5=93uillet?= Date: Mon, 26 Aug 2013 17:38:01 +0200 Subject: fix bug #186: content was empty when enabling downloading pictures --- inc/poche/Poche.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/inc/poche/Poche.class.php b/inc/poche/Poche.class.php index 646193f7..bca8bfd5 100644 --- a/inc/poche/Poche.class.php +++ b/inc/poche/Poche.class.php @@ -166,7 +166,7 @@ class Poche } $last_id = $this->store->getLastId($sequence); if (DOWNLOAD_PICTURES) { - $content = filtre_picture($parametres_url['body'], $url->getUrl(), $last_id); + $content = filtre_picture($content['body'], $url->getUrl(), $last_id); Tools::logm('updating content article'); $this->store->updateContent($last_id, $content, $this->user->getId()); } -- cgit v1.2.3 From 5ebf6eeca1a1096efa3027fa082ec6b60a7ac1e0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicolas=20L=C5=93uillet?= Date: Tue, 27 Aug 2013 11:05:57 +0200 Subject: add configuration to parse bfmtv.com --- inc/3rdparty/site_config/custom/bfmtv.com.txt | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 inc/3rdparty/site_config/custom/bfmtv.com.txt diff --git a/inc/3rdparty/site_config/custom/bfmtv.com.txt b/inc/3rdparty/site_config/custom/bfmtv.com.txt new file mode 100644 index 00000000..0ff28d56 --- /dev/null +++ b/inc/3rdparty/site_config/custom/bfmtv.com.txt @@ -0,0 +1,6 @@ +title: //title +body: //h2 | //span[@class='masque'] | //article[@class='corps_article_right'] +prune: no +tidy: no + +test_url: http://www.bfmtv.com/societe/cigarette-electronique-dangers-588622.html \ No newline at end of file -- cgit v1.2.3 From 7d1778bbd20030dd37b47a87bfa10bff61f6457e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicolas=20L=C5=93uillet?= Date: Tue, 27 Aug 2013 12:52:35 +0200 Subject: config file for tldp.org --- inc/3rdparty/site_config/custom/tldp.org.txt | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 inc/3rdparty/site_config/custom/tldp.org.txt diff --git a/inc/3rdparty/site_config/custom/tldp.org.txt b/inc/3rdparty/site_config/custom/tldp.org.txt new file mode 100644 index 00000000..7dd5cdb5 --- /dev/null +++ b/inc/3rdparty/site_config/custom/tldp.org.txt @@ -0,0 +1,6 @@ +title: //title +body: //h2 | //p | //ul +prune: no +tidy: no + +test_url: http://www.tldp.org/HOWTO/Plug-and-Play-HOWTO-7.html \ No newline at end of file -- cgit v1.2.3 From 093f1efb213ce43e76ad7416eef347c80d8b0e17 Mon Sep 17 00:00:00 2001 From: NumEricR Date: Tue, 27 Aug 2013 02:14:15 +0200 Subject: Update comment --- inc/poche/Poche.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/inc/poche/Poche.class.php b/inc/poche/Poche.class.php index bca8bfd5..57e8b7b3 100644 --- a/inc/poche/Poche.class.php +++ b/inc/poche/Poche.class.php @@ -257,7 +257,7 @@ class Poche Tools::logm('error in view call : entry is null'); } break; - default: # home view + default: # home, favorites and archive views $entries = $this->store->getEntriesByView($view, $this->user->getId()); $this->pagination->set_total(count($entries)); $page_links = $this->pagination->page_links('?view=' . $view . '&sort=' . $_SESSION['sort'] . '&'); -- cgit v1.2.3 From 3eb049036e601c1978cf5f7f0d5be8c577933b72 Mon Sep 17 00:00:00 2001 From: NumEricR Date: Tue, 27 Aug 2013 16:02:25 +0200 Subject: Add warning message when there is no entry in current view --- inc/poche/Poche.class.php | 14 +++++++++----- tpl/home.twig | 8 ++++++-- 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/inc/poche/Poche.class.php b/inc/poche/Poche.class.php index 57e8b7b3..a8f64151 100644 --- a/inc/poche/Poche.class.php +++ b/inc/poche/Poche.class.php @@ -259,13 +259,17 @@ class Poche break; default: # home, favorites and archive views $entries = $this->store->getEntriesByView($view, $this->user->getId()); - $this->pagination->set_total(count($entries)); - $page_links = $this->pagination->page_links('?view=' . $view . '&sort=' . $_SESSION['sort'] . '&'); - $datas = $this->store->getEntriesByView($view, $this->user->getId(), $this->pagination->get_limit()); $tpl_vars = array( - 'entries' => $datas, - 'page_links' => $page_links, + 'entries' => '', + 'page_links' => '', ); + if (count($entries) > 0) { + $this->pagination->set_total(count($entries)); + $page_links = $this->pagination->page_links('?view=' . $view . '&sort=' . $_SESSION['sort'] . '&'); + $datas = $this->store->getEntriesByView($view, $this->user->getId(), $this->pagination->get_limit()); + $tpl_vars['entries'] = $datas; + $tpl_vars['page_links'] = $page_links; + } Tools::logm('display ' . $view . ' view'); break; } diff --git a/tpl/home.twig b/tpl/home.twig index 6b80c6ed..f51c34f2 100644 --- a/tpl/home.twig +++ b/tpl/home.twig @@ -19,7 +19,10 @@ {% endblock %} {% block content %} {{ page_links | raw }} - {% for entry in entries %} + {% if entries is empty %} +

{% trans "No link available here!" %}

+ {% else %} + {% for entry in entries %}

{{ entry.title|raw }}

- {% endfor %} + {% endfor %} + {% endif %} {{ page_links | raw }} {% endblock %} \ No newline at end of file -- cgit v1.2.3 From 7f9f5281e5fe6dd92c810f7945c7761ca17fd2e6 Mon Sep 17 00:00:00 2001 From: NumEricR Date: Wed, 28 Aug 2013 19:12:11 +0200 Subject: Add number of results next to pager --- inc/poche/Poche.class.php | 2 ++ tpl/css/style.css | 21 ++++++++++++++++++--- tpl/home.twig | 11 +++++++++-- 3 files changed, 29 insertions(+), 5 deletions(-) diff --git a/inc/poche/Poche.class.php b/inc/poche/Poche.class.php index a8f64151..89e94a3a 100644 --- a/inc/poche/Poche.class.php +++ b/inc/poche/Poche.class.php @@ -262,6 +262,7 @@ class Poche $tpl_vars = array( 'entries' => '', 'page_links' => '', + 'nb_results' => '', ); if (count($entries) > 0) { $this->pagination->set_total(count($entries)); @@ -269,6 +270,7 @@ class Poche $datas = $this->store->getEntriesByView($view, $this->user->getId(), $this->pagination->get_limit()); $tpl_vars['entries'] = $datas; $tpl_vars['page_links'] = $page_links; + $tpl_vars['nb_results'] = count($entries); } Tools::logm('display ' . $view . ' view'); break; diff --git a/tpl/css/style.css b/tpl/css/style.css index 7633534c..f07072a7 100644 --- a/tpl/css/style.css +++ b/tpl/css/style.css @@ -98,6 +98,10 @@ a, a:hover, a:visited { #main #content .entrie { border-bottom: 1px dashed #222; } +/* First entry */ +#main #content .results + .entrie { + clear: both; +} #main .entrie .tools { list-style-type: none; @@ -189,11 +193,22 @@ a, a:hover, a:visited { } -/* Pagination */ -.pagination { - clear: both; +.results { + overflow: hidden; padding-bottom: 20px; padding-top: 10px; +} + +.nb-results { + float: left; + font-size: 0.9em; + line-height: 24px; + vertical-align: middle; +} + +/* Pagination */ +.pagination { + float: right; text-align: right; } .pagination a { diff --git a/tpl/home.twig b/tpl/home.twig index f51c34f2..db4e0888 100644 --- a/tpl/home.twig +++ b/tpl/home.twig @@ -18,10 +18,17 @@ {% endblock %} {% block content %} - {{ page_links | raw }} {% if entries is empty %}

{% trans "No link available here!" %}

{% else %} + {% block pager %} + {% if nb_results > 1 %} +
+
{{ nb_results }} {% trans "results" %}
+ {{ page_links | raw }} +
+ {% endif %} + {% endblock %} {% for entry in entries %}

{{ entry.title|raw }}

@@ -36,5 +43,5 @@
{% endfor %} {% endif %} - {{ page_links | raw }} + {{ block('pager') }} {% endblock %} \ No newline at end of file -- cgit v1.2.3 From 876bb3af42b1628e162492bcd95939e32ce1a661 Mon Sep 17 00:00:00 2001 From: NumEricR Date: Fri, 30 Aug 2013 15:31:33 +0200 Subject: Remove on login and home views useless link "back to home" --- tpl/_top.twig | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/tpl/_top.twig b/tpl/_top.twig index ae01cc3f..dc20081e 100644 --- a/tpl/_top.twig +++ b/tpl/_top.twig @@ -1,3 +1,7 @@
-

logo poche

+

+ {% if view == 'home' %}{% block logo %}logo poche{% endblock %} + {% else %}{{ block('logo') }} + {% endif %} +

\ No newline at end of file -- cgit v1.2.3 From 08a12b6dbbbdff54ffd93c6c8ed3608f0c99e34e Mon Sep 17 00:00:00 2001 From: NumEricR Date: Thu, 5 Sep 2013 22:01:15 +0200 Subject: Hide disabled pagination links --- tpl/css/style.css | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/tpl/css/style.css b/tpl/css/style.css index 7633534c..5aca9aec 100644 --- a/tpl/css/style.css +++ b/tpl/css/style.css @@ -221,12 +221,7 @@ a, a:hover, a:visited { margin: 2px; } .pagination .disabled { - border: 1px solid #eee; - color: #ddd; - margin: 2px; - padding: 4px 8px; - font-size: 11px; - font-weight: bold; + display: none; } #bookmarklet { -- cgit v1.2.3 From 2edde7fe337a8502ee5d37ae0b76f76295864b7c Mon Sep 17 00:00:00 2001 From: NumEricR Date: Thu, 5 Sep 2013 22:16:36 +0200 Subject: Display sort links only if there is at least 2 articles in current list --- tpl/home.twig | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tpl/home.twig b/tpl/home.twig index f51c34f2..f44e040e 100644 --- a/tpl/home.twig +++ b/tpl/home.twig @@ -12,10 +12,12 @@ {% include '_menu.twig' %} {% endblock %} {% block precontent %} + {% if entries|length > 1 %}
  • {% trans {% trans "by date" %} {% trans
  • {% trans {% trans "by title" %} {% trans
+ {% endif %} {% endblock %} {% block content %} {{ page_links | raw }} -- cgit v1.2.3 From a32231274060ec2de453124117518458c4fa00df Mon Sep 17 00:00:00 2001 From: Thomas Citharel Date: Sun, 8 Sep 2013 20:54:11 +0200 Subject: Implemented Flattr changes Added a button to say if the article is flattrable or not and how many people have flattred this object. --- inc/poche/Poche.class.php | 59 +++++++++++++++++++++++++++++++++++++++++++++-- tpl/view.twig | 1 + 2 files changed, 58 insertions(+), 2 deletions(-) diff --git a/inc/poche/Poche.class.php b/inc/poche/Poche.class.php index a8f64151..5dab10df 100644 --- a/inc/poche/Poche.class.php +++ b/inc/poche/Poche.class.php @@ -247,10 +247,15 @@ class Poche $tidy = tidy_parse_string($content, array('indent'=>true, 'show-body-only' => true), 'UTF8'); $tidy->cleanRepair(); $content = $tidy->value; - } + + // flattr checking + $flattr = new FlattrItem(); + $flattr->checkitem($entry['url']); + $tpl_vars = array( 'entry' => $entry, 'content' => $content, + 'flattr' => $flattr, ); } else { @@ -558,4 +563,54 @@ class Poche } return $version; } -} \ No newline at end of file +} + +/* class for Flattr querying. Should be put in a separate file +* Or maybe just create an array instead of a complete class... My mistake. :-° +*/ +class FlattrItem{ + public $status; + public $urltoflattr; + public $flattrItemURL; + public $numflattrs; + + public function checkitem($urltoflattr){ + $this->cacheflattrfile($urltoflattr); + $flattrResponse = file_get_contents("cache/flattr/".base64_encode($urltoflattr).".cache"); + var_dump($flattrResponse); + if($flattrResponse != FALSE){ + $result = json_decode($flattrResponse); + if (isset($result->message)){ + if ($result->message == "flattrable"){ + $this->status = "flattrable"; + } + } + elseif ($result->link) { + $this->status = "flattred"; + $this->flattrItemURL = $result->link; + $this->numflattrs = $result->flattrs_user_count; + } + else{ + $this->status = "not flattrable"; + } + } + else + { + $this->status = "FLATTR_ERR_CONNECTION"; + } + } + + private function cacheflattrfile($urltoflattr){ + if (!is_dir('cache/flattr')){ + mkdir('./cache/flattr', 0700); + } + // 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 + if ((!file_exists("cache/flattr/".base64_encode($urltoflattr).".cache")) || (time() - filemtime("cache/flattr/".base64_encode($urltoflattr).".cache") > 86400)) + { + $askForFlattr = Tools::getFile("https://api.flattr.com/rest/v2/things/lookup/?url=".$urltoflattr); + $flattrCacheFile = fopen("cache/flattr/".base64_encode($urltoflattr).".cache", 'w+'); + fwrite($flattrCacheFile, $askForFlattr); + fclose($flattrCacheFile); + } + } +} diff --git a/tpl/view.twig b/tpl/view.twig index 28508772..7b15c7c7 100644 --- a/tpl/view.twig +++ b/tpl/view.twig @@ -31,6 +31,7 @@ {% if constant('SHARE_TWITTER') == 1 %}
  • {% endif %} {% if constant('SHARE_MAIL') == 1 %}
  • {% endif %} {% if constant('SHARE_SHAARLI') == 1 %}
  • {% trans "shaarli" %}
  • {% endif %} +
  • {% if flattr.status == "flattrable" %} This thing is flattrable !{% elseif flattr.status == "flattred" %} This thing has already been flattred by {{ flattr.numflattrs }} users and can be flattred !{% else %}This article cannot be flattred{% endif %}
  • {% trans "this article appears wrong?" %} {% trans "create an issue" %} {% trans "or" %} {% trans "contact us by mail" %}

    -- cgit v1.2.3 From 693b3f86776ae236d69ac6ed085b5e46b9054642 Mon Sep 17 00:00:00 2001 From: Thomas Citharel Date: Sun, 8 Sep 2013 21:07:59 +0200 Subject: Implemented Add Button Added a button to add an URL when directly into Poche. If JS isn't enabled, nothing happens. --- inc/poche/Poche.class.php | 5 +++++ index.php | 3 +++ tpl/_menu.twig | 11 ++++++++++- tpl/css/style.css | 13 +++++++++++++ tpl/js/poche.js | 2 ++ tpl/layout.twig | 1 + 6 files changed, 34 insertions(+), 1 deletion(-) create mode 100644 tpl/js/poche.js diff --git a/inc/poche/Poche.class.php b/inc/poche/Poche.class.php index a8f64151..a7479ad8 100644 --- a/inc/poche/Poche.class.php +++ b/inc/poche/Poche.class.php @@ -558,4 +558,9 @@ class Poche } return $version; } + + function convertURLToBase64($plainurl){ + $convertedURL = base64_encode($plainurl); + $this->action('add', new Url($convertedURL)) + } } \ No newline at end of file diff --git a/index.php b/index.php index 5f43b740..e81a9247 100644 --- a/index.php +++ b/index.php @@ -44,6 +44,9 @@ elseif (isset($_GET['export'])) { $poche->export(); } +if (isset($_GET['plainurl'])){ + $poche->convertURLToBase64($_GET['plainurl']);} + # vars to send to templates $tpl_vars = array( 'referer' => $referer, diff --git a/tpl/_menu.twig b/tpl/_menu.twig index 699d6a0c..8341c49c 100644 --- a/tpl/_menu.twig +++ b/tpl/_menu.twig @@ -4,4 +4,13 @@
  • {% trans "archive" %}
  • {% trans "config" %}
  • {% trans "logout" %}
  • - \ No newline at end of file +
  • {% trans "addlink" %}
  • +
  • {% trans "logout" %}
  • + +
    +
    +
    + + +
    +
    \ No newline at end of file diff --git a/tpl/css/style.css b/tpl/css/style.css index 7633534c..808e4b69 100644 --- a/tpl/css/style.css +++ b/tpl/css/style.css @@ -257,3 +257,16 @@ footer { .reading-time { font-size: 0.8em; } + +#inputform{ ++ display: none; ++ text-align:center; ++ max-width:300px; ++ margin-left:auto; ++ margin-right:auto; ++ margin-top:5px; ++ background-color: rgba(0, 0, 0, 0.9); ++ opacity:0.8; ++ color:white; ++ border-radius: 3px; ++} \ No newline at end of file diff --git a/tpl/js/poche.js b/tpl/js/poche.js new file mode 100644 index 00000000..c2e02f9c --- /dev/null +++ b/tpl/js/poche.js @@ -0,0 +1,2 @@ +function showinput(){ +$('#inputform').fadeIn('fast');} \ No newline at end of file diff --git a/tpl/layout.twig b/tpl/layout.twig index 07ca231c..b2484019 100644 --- a/tpl/layout.twig +++ b/tpl/layout.twig @@ -12,6 +12,7 @@ {% block title %}{% endblock %} - poche {% include '_head.twig' %} + {% include '_bookmarklet.twig' %} -- cgit v1.2.3 From d5ce28df67fcddfb957ce28424f3e5751f433695 Mon Sep 17 00:00:00 2001 From: Thomas Citharel Date: Sun, 8 Sep 2013 21:26:30 +0200 Subject: Fixed bugs due to migration --- inc/poche/Poche.class.php | 2 +- tpl/_menu.twig | 1 - tpl/css/style.css | 22 +++++++++++----------- 3 files changed, 12 insertions(+), 13 deletions(-) diff --git a/inc/poche/Poche.class.php b/inc/poche/Poche.class.php index a7479ad8..4fe938fb 100644 --- a/inc/poche/Poche.class.php +++ b/inc/poche/Poche.class.php @@ -561,6 +561,6 @@ class Poche function convertURLToBase64($plainurl){ $convertedURL = base64_encode($plainurl); - $this->action('add', new Url($convertedURL)) + $this->action('add', new Url($convertedURL)); } } \ No newline at end of file diff --git a/tpl/_menu.twig b/tpl/_menu.twig index 8341c49c..b39ce35f 100644 --- a/tpl/_menu.twig +++ b/tpl/_menu.twig @@ -3,7 +3,6 @@
  • {% trans "favorites" %}
  • {% trans "archive" %}
  • {% trans "config" %}
  • -
  • {% trans "logout" %}
  • {% trans "addlink" %}
  • {% trans "logout" %}
  • diff --git a/tpl/css/style.css b/tpl/css/style.css index 808e4b69..7d2c143f 100644 --- a/tpl/css/style.css +++ b/tpl/css/style.css @@ -259,14 +259,14 @@ footer { } #inputform{ -+ display: none; -+ text-align:center; -+ max-width:300px; -+ margin-left:auto; -+ margin-right:auto; -+ margin-top:5px; -+ background-color: rgba(0, 0, 0, 0.9); -+ opacity:0.8; -+ color:white; -+ border-radius: 3px; -+} \ No newline at end of file + display: none; + text-align:center; + max-width:300px; + margin-left:auto; + margin-right:auto; + margin-top:5px; + background-color: rgba(0, 0, 0, 0.9); + opacity:0.8; + color:white; + border-radius: 3px; +} \ No newline at end of file -- cgit v1.2.3 From af1d2792263d45c5ffea2e5485dd81bf59b7bded Mon Sep 17 00:00:00 2001 From: Thomas Citharel Date: Sun, 8 Sep 2013 21:52:01 +0200 Subject: Fixed errors and changed source of flattrs Fixed errors, and the number displayed is no longer the number of peope who has flattred an article, but the number of flattrs he has got. --- inc/poche/Poche.class.php | 16 ++++++++-------- tpl/view.twig | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/inc/poche/Poche.class.php b/inc/poche/Poche.class.php index 5dab10df..8b24e5cd 100644 --- a/inc/poche/Poche.class.php +++ b/inc/poche/Poche.class.php @@ -249,20 +249,21 @@ class Poche $content = $tidy->value; // flattr checking - $flattr = new FlattrItem(); - $flattr->checkitem($entry['url']); + $flattr = new FlattrItem(); + $flattr->checkitem($entry['url']); - $tpl_vars = array( + $tpl_vars = array( 'entry' => $entry, 'content' => $content, - 'flattr' => $flattr, - ); + 'flattr' => $flattr + ); + } } else { Tools::logm('error in view call : entry is null'); } break; - default: # home, favorites and archive views + default : // home, favorites and archive views $entries = $this->store->getEntriesByView($view, $this->user->getId()); $tpl_vars = array( 'entries' => '', @@ -577,7 +578,6 @@ class FlattrItem{ public function checkitem($urltoflattr){ $this->cacheflattrfile($urltoflattr); $flattrResponse = file_get_contents("cache/flattr/".base64_encode($urltoflattr).".cache"); - var_dump($flattrResponse); if($flattrResponse != FALSE){ $result = json_decode($flattrResponse); if (isset($result->message)){ @@ -588,7 +588,7 @@ class FlattrItem{ elseif ($result->link) { $this->status = "flattred"; $this->flattrItemURL = $result->link; - $this->numflattrs = $result->flattrs_user_count; + $this->numflattrs = $result->flattrs; } else{ $this->status = "not flattrable"; diff --git a/tpl/view.twig b/tpl/view.twig index 7b15c7c7..c101db0a 100644 --- a/tpl/view.twig +++ b/tpl/view.twig @@ -31,7 +31,7 @@ {% if constant('SHARE_TWITTER') == 1 %}
  • {% endif %} {% if constant('SHARE_MAIL') == 1 %}
  • {% endif %} {% if constant('SHARE_SHAARLI') == 1 %}
  • {% trans "shaarli" %}
  • {% endif %} -
  • {% if flattr.status == "flattrable" %} This thing is flattrable !{% elseif flattr.status == "flattred" %} This thing has already been flattred by {{ flattr.numflattrs }} users and can be flattred !{% else %}This article cannot be flattred{% endif %}
  • +
  • {% if flattr.status == "flattrable" %} This thing is flattrable !{% elseif flattr.status == "flattred" %} This thing has already been flattred {{ flattr.numflattrs }} times and can be flattred !{% else %}This article cannot be flattred{% endif %}
  • {% trans "this article appears wrong?" %} {% trans "create an issue" %} {% trans "or" %} {% trans "contact us by mail" %}

    -- cgit v1.2.3 From ce4a1dcc193d3124fc51c4942137621d3d806a19 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicolas=20L=C5=93uillet?= Date: Tue, 10 Sep 2013 14:41:58 +0200 Subject: changes to add url directly from poche --- inc/poche/Poche.class.php | 7 +------ index.php | 7 ++++--- tpl/_menu.twig | 12 ++---------- tpl/config.twig | 15 ++++++++------- tpl/css/style.css | 3 ++- tpl/layout.twig | 1 - 6 files changed, 17 insertions(+), 28 deletions(-) diff --git a/inc/poche/Poche.class.php b/inc/poche/Poche.class.php index 4fe938fb..5030c9aa 100644 --- a/inc/poche/Poche.class.php +++ b/inc/poche/Poche.class.php @@ -182,7 +182,7 @@ class Poche } if (!$import) { - Tools::redirect(); + Tools::redirect('?view=home'); } break; case 'delete': @@ -558,9 +558,4 @@ class Poche } return $version; } - - function convertURLToBase64($plainurl){ - $convertedURL = base64_encode($plainurl); - $this->action('add', new Url($convertedURL)); - } } \ No newline at end of file diff --git a/index.php b/index.php index e81a9247..7b775c41 100644 --- a/index.php +++ b/index.php @@ -43,9 +43,10 @@ elseif (isset($_GET['import'])) { elseif (isset($_GET['export'])) { $poche->export(); } - -if (isset($_GET['plainurl'])){ - $poche->convertURLToBase64($_GET['plainurl']);} +elseif (isset($_GET['plainurl']) && !empty($_GET['plainurl'])) { + $plain_url = new Url(base64_encode($_GET['plainurl'])); + $poche->action('add', $plain_url); +} # vars to send to templates $tpl_vars = array( diff --git a/tpl/_menu.twig b/tpl/_menu.twig index b39ce35f..523d63cc 100644 --- a/tpl/_menu.twig +++ b/tpl/_menu.twig @@ -3,13 +3,5 @@
  • {% trans "favorites" %}
  • {% trans "archive" %}
  • {% trans "config" %}
  • -
  • {% trans "addlink" %}
  • -
  • {% trans "logout" %}
  • - -
    -
    -
    - - -
    -
    \ No newline at end of file +
  • {% trans "logout" %}
  • + \ No newline at end of file diff --git a/tpl/config.twig b/tpl/config.twig index c838c319..e24e58d4 100644 --- a/tpl/config.twig +++ b/tpl/config.twig @@ -2,13 +2,7 @@ {% block title %}{% trans "config" %}{% endblock %} {% block menu %} - +{% include '_menu.twig' %} {% endblock %} {% block content %}

    {% trans "Poching a link" %}

    @@ -17,6 +11,13 @@
  • firefox: download the extension
  • chrome: download the extension
  • android: download the application
  • +
  • +
    + + + +
    +
  • bookmarklet: drag & drop this link to your bookmarks bar {% trans "poche it!" %}
  • diff --git a/tpl/css/style.css b/tpl/css/style.css index 7d2c143f..d644814d 100644 --- a/tpl/css/style.css +++ b/tpl/css/style.css @@ -258,13 +258,14 @@ footer { font-size: 0.8em; } -#inputform{ +#inputform { display: none; text-align:center; max-width:300px; margin-left:auto; margin-right:auto; margin-top:5px; + padding-bottom: 5px; background-color: rgba(0, 0, 0, 0.9); opacity:0.8; color:white; diff --git a/tpl/layout.twig b/tpl/layout.twig index b2484019..07ca231c 100644 --- a/tpl/layout.twig +++ b/tpl/layout.twig @@ -12,7 +12,6 @@ {% block title %}{% endblock %} - poche {% include '_head.twig' %} - {% include '_bookmarklet.twig' %} -- cgit v1.2.3 From 3c33e40b614db7d14fec1d9b87963def4fac46a5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicolas=20L=C5=93uillet?= Date: Tue, 10 Sep 2013 15:43:01 +0200 Subject: change email address in header --- inc/poche/config.inc.php | 5 +---- inc/poche/define.inc.php | 2 +- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/inc/poche/config.inc.php b/inc/poche/config.inc.php index a1917295..2268808e 100755 --- a/inc/poche/config.inc.php +++ b/inc/poche/config.inc.php @@ -3,7 +3,7 @@ * poche, a read it later open source system * * @category poche - * @author Nicolas Lœuillet + * @author Nicolas Lœuillet * @copyright 2013 * @license http://www.wtfpl.net/ see COPYING file */ @@ -15,9 +15,6 @@ if (!file_exists(__DIR__ . '/../../vendor/autoload.php')) { die('Twig does not seem installed. Have a look at the documentation.'); } -// if (file_exists(__DIR__ . '/../../inc/poche/myconfig.inc.php')) { - // require_once __DIR__ . '/../../inc/poche/myconfig.inc.php'; -// } require_once __DIR__ . '/../../inc/poche/User.class.php'; require_once __DIR__ . '/../../inc/poche/Url.class.php'; require_once __DIR__ . '/../../inc/3rdparty/class.messages.php'; diff --git a/inc/poche/define.inc.php b/inc/poche/define.inc.php index 3f667430..53c275dd 100644 --- a/inc/poche/define.inc.php +++ b/inc/poche/define.inc.php @@ -3,7 +3,7 @@ * poche, a read it later open source system * * @category poche - * @author Nicolas Lœuillet + * @author Nicolas Lœuillet * @copyright 2013 * @license http://www.wtfpl.net/ see COPYING file */ -- cgit v1.2.3 From d11e2bcf48badc1da0e3914eec49d9ab1d781f4d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicolas=20L=C5=93uillet?= Date: Tue, 10 Sep 2013 15:46:05 +0200 Subject: change doc url --- inc/poche/config.inc.php | 2 +- tpl/config.twig | 8 ++++---- tpl/error.twig | 2 +- tpl/install.twig | 2 +- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/inc/poche/config.inc.php b/inc/poche/config.inc.php index 2268808e..7f1b8c92 100755 --- a/inc/poche/config.inc.php +++ b/inc/poche/config.inc.php @@ -12,7 +12,7 @@ require_once __DIR__ . '/../../inc/poche/define.inc.php'; # /!\ Be careful if you change the lines below /!\ if (!file_exists(__DIR__ . '/../../vendor/autoload.php')) { - die('Twig does not seem installed. Have a look at the documentation.'); + die('Twig does not seem installed. Have a look at the documentation.'); } require_once __DIR__ . '/../../inc/poche/User.class.php'; diff --git a/tpl/config.twig b/tpl/config.twig index e24e58d4..70788876 100644 --- a/tpl/config.twig +++ b/tpl/config.twig @@ -6,7 +6,7 @@ {% endblock %} {% block content %}

    {% trans "Poching a link" %}

    -

    You can poche a link by several methods: (?)

    +

    You can poche a link by several methods: (?)

    • firefox: download the extension
    • chrome: download the extension
    • @@ -24,8 +24,8 @@

      {% trans "Updating poche" %}

      {% trans "Change your password" %}

      @@ -49,7 +49,7 @@

      {% trans "Import" %}

      {% trans "Please execute the import script locally, it can take a very long time." %}

      -

      {% trans "More infos in the official doc:" %} inthepoche.com

      +

      {% trans "More infos in the official doc:" %} inthepoche.com

      • {% trans "import from Pocket" %} (you must have a "{{ constant('IMPORT_POCKET_FILE')}}" file on your server)
      • {% trans "import from Readability" %} (you must have a "{{constant('IMPORT_READABILITY_FILE')}}" file on your server)
      • diff --git a/tpl/error.twig b/tpl/error.twig index 14c49925..c829d12b 100644 --- a/tpl/error.twig +++ b/tpl/error.twig @@ -2,5 +2,5 @@ {% block title %}{% trans "plop" %}{% endblock %} {% block content %} {{ msg|raw }} -

        Don't forget the documentation.

        +

        Don't forget the documentation.

        {% endblock %} \ No newline at end of file diff --git a/tpl/install.twig b/tpl/install.twig index afb5b0f6..6e85e5cb 100644 --- a/tpl/install.twig +++ b/tpl/install.twig @@ -5,7 +5,7 @@

        {% trans "install your poche" %}

        - {% trans "poche is still not installed. Please fill the below form to install it. Don't hesitate to read the documentation on poche website." %} + {% trans "poche is still not installed. Please fill the below form to install it. Don't hesitate to read the documentation on poche website." %}

        -- cgit v1.2.3 From d143cae25a42830e795d43cdcfaecd25e459915c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicolas=20L=C5=93uillet?= Date: Tue, 10 Sep 2013 15:47:09 +0200 Subject: remove comments in poche_compatibility_test --- poche_compatibility_test.php | 14 -------------- 1 file changed, 14 deletions(-) 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 @@ =')); -- cgit v1.2.3 From 964481d023676bee964141a1d14f638995ac8d30 Mon Sep 17 00:00:00 2001 From: Thomas Citharel Date: Tue, 10 Sep 2013 18:23:56 +0200 Subject: Fixed bugs, added a flattr button and an option There's a button and an option in define.inc.php to show the button or not. --- inc/poche/Poche.class.php | 2 +- inc/poche/define.inc.php | 3 ++- tpl/css/style-light.css | 4 ++++ tpl/img/light/flattr.png | Bin 0 -> 3521 bytes tpl/view.twig | 3 ++- 5 files changed, 9 insertions(+), 3 deletions(-) create mode 100644 tpl/img/light/flattr.png diff --git a/inc/poche/Poche.class.php b/inc/poche/Poche.class.php index 8b24e5cd..b0efe69a 100644 --- a/inc/poche/Poche.class.php +++ b/inc/poche/Poche.class.php @@ -602,7 +602,7 @@ class FlattrItem{ private function cacheflattrfile($urltoflattr){ if (!is_dir('cache/flattr')){ - mkdir('./cache/flattr', 0700); + mkdir('./cache/flattr', 0777); } // 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 if ((!file_exists("cache/flattr/".base64_encode($urltoflattr).".cache")) || (time() - filemtime("cache/flattr/".base64_encode($urltoflattr).".cache") > 86400)) diff --git a/inc/poche/define.inc.php b/inc/poche/define.inc.php index 3f667430..62777282 100644 --- a/inc/poche/define.inc.php +++ b/inc/poche/define.inc.php @@ -20,8 +20,9 @@ define ('DEBUG_POCHE', FALSE); define ('DOWNLOAD_PICTURES', FALSE); define ('SHARE_TWITTER', TRUE); define ('SHARE_MAIL', TRUE); -define ('SHARE_SHAARLI', FALSE); +define ('SHARE_SHAARLI', TRUE); define ('SHAARLI_URL', 'http://myshaarliurl.com'); +define ('FLATTR', TRUE); define ('ABS_PATH', 'assets/'); define ('TPL', __DIR__ . '/../../tpl'); define ('LOCALE', __DIR__ . '/../../locale'); diff --git a/tpl/css/style-light.css b/tpl/css/style-light.css index e2788a1c..224ef182 100644 --- a/tpl/css/style-light.css +++ b/tpl/css/style-light.css @@ -48,6 +48,10 @@ a.shaarli span { background: url('../img/light/shaarli.png') no-repeat; } +a.flattr span { + background: url('../img/light/flattr.png'); +} + a.email span { background: url('../img/light/envelop.png') no-repeat; } diff --git a/tpl/img/light/flattr.png b/tpl/img/light/flattr.png new file mode 100644 index 00000000..d9007c0c Binary files /dev/null and b/tpl/img/light/flattr.png differ diff --git a/tpl/view.twig b/tpl/view.twig index c101db0a..283cfb5b 100644 --- a/tpl/view.twig +++ b/tpl/view.twig @@ -11,6 +11,7 @@ {% if constant('SHARE_TWITTER') == 1 %}

      • {% endif %} {% if constant('SHARE_MAIL') == 1 %}
      • {% endif %} {% if constant('SHARE_SHAARLI') == 1 %}
      • {% trans "shaarli" %}
      • {% endif %} + {% if constant('FLATTR') == 1 %}{% if flattr.status == "flattrable" %}
      • flattr
      • {% elseif flattr.status == "flattred" %}
      • flattr{{ flattr.numflattrs }}
      • {% else %}{% endif %}{% endif %}
      @@ -31,7 +32,7 @@ {% if constant('SHARE_TWITTER') == 1 %}
    • {% endif %} {% if constant('SHARE_MAIL') == 1 %}
    • {% endif %} {% if constant('SHARE_SHAARLI') == 1 %}
    • {% trans "shaarli" %}
    • {% endif %} -
    • {% if flattr.status == "flattrable" %} This thing is flattrable !{% elseif flattr.status == "flattred" %} This thing has already been flattred {{ flattr.numflattrs }} times and can be flattred !{% else %}This article cannot be flattred{% endif %}
    • + {% if constant('FLATTR') == 1 %}{% if flattr.status == "flattrable" %}
    • flattr
    • {% elseif flattr.status == "flattred" %}
    • flattr{{ flattr.numflattrs }}
    • {% else %}{% endif %}{% endif %}

    {% trans "this article appears wrong?" %} {% trans "create an issue" %} {% trans "or" %} {% trans "contact us by mail" %}

    -- cgit v1.2.3 From f16b0747a45bfd91de03d22ecd7dbe70bf3d98a1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicolas=20L=C5=93uillet?= Date: Tue, 10 Sep 2013 18:28:17 +0200 Subject: remove site_config to manage them by a submodule --- inc/3rdparty/site_config/README.txt | 6 ------ inc/3rdparty/site_config/custom/bfmtv.com.txt | 6 ------ inc/3rdparty/site_config/custom/inthepoche.com.txt | 7 ------- inc/3rdparty/site_config/custom/tldp.org.txt | 6 ------ inc/3rdparty/site_config/index.php | 3 --- inc/3rdparty/site_config/standard/.wikipedia.org.txt | 19 ------------------- inc/3rdparty/site_config/standard/index.php | 3 --- inc/3rdparty/site_config/standard/version.php | 2 -- 8 files changed, 52 deletions(-) delete mode 100644 inc/3rdparty/site_config/README.txt delete mode 100644 inc/3rdparty/site_config/custom/bfmtv.com.txt delete mode 100644 inc/3rdparty/site_config/custom/inthepoche.com.txt delete mode 100644 inc/3rdparty/site_config/custom/tldp.org.txt delete mode 100644 inc/3rdparty/site_config/index.php delete mode 100644 inc/3rdparty/site_config/standard/.wikipedia.org.txt delete mode 100644 inc/3rdparty/site_config/standard/index.php delete mode 100644 inc/3rdparty/site_config/standard/version.php 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 @@ -Full-Text RSS Site Patterns ---------------------------- - -Site patterns allow you to specify what should be extracted from specific sites. - -Please 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/bfmtv.com.txt b/inc/3rdparty/site_config/custom/bfmtv.com.txt deleted file mode 100644 index 0ff28d56..00000000 --- a/inc/3rdparty/site_config/custom/bfmtv.com.txt +++ /dev/null @@ -1,6 +0,0 @@ -title: //title -body: //h2 | //span[@class='masque'] | //article[@class='corps_article_right'] -prune: no -tidy: no - -test_url: http://www.bfmtv.com/societe/cigarette-electronique-dangers-588622.html \ 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 @@ -title: //title -body: //div[@class='post-content'] - -prune: no -tidy: no - -test_url: http://www.inthepoche.com/?post/poche-hosting \ No newline at end of file diff --git a/inc/3rdparty/site_config/custom/tldp.org.txt b/inc/3rdparty/site_config/custom/tldp.org.txt deleted file mode 100644 index 7dd5cdb5..00000000 --- a/inc/3rdparty/site_config/custom/tldp.org.txt +++ /dev/null @@ -1,6 +0,0 @@ -title: //title -body: //h2 | //p | //ul -prune: no -tidy: no - -test_url: http://www.tldp.org/HOWTO/Plug-and-Play-HOWTO-7.html \ 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 @@ - \ 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 @@ -title: //h1[@id='firstHeading'] -body: //div[@id = 'bodyContent'] -strip_id_or_class: editsection -#strip_id_or_class: toc -strip_id_or_class: vertical-navbox -strip: //table[@id='toc'] -strip: //div[@id='catlinks'] -strip: //div[@id='jump-to-nav'] -strip: //div[@class='thumbcaption']//div[@class='magnify'] -strip: //table[@class='navbox'] -strip: //table[contains(@class, 'infobox')] -strip: //div[@class='dablink'] -strip: //div[@id='contentSub'] -strip: //table[contains(@class, 'metadata')] -strip: //*[contains(@class, 'noprint')] -strip: //span[@title='pronunciation:'] -prune: no -tidy: no -test_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 @@ - \ 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 @@ - Date: Tue, 10 Sep 2013 18:50:42 +0200 Subject: add site_config submodule --- .gitmodules | 3 +++ inc/3rdparty/site_config | 1 + 2 files changed, 4 insertions(+) create mode 100644 .gitmodules create mode 160000 inc/3rdparty/site_config diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 00000000..fcc2e52c --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "inc/3rdparty/site_config"] + path = inc/3rdparty/site_config + url = git://github.com/inthepoche/site_config.git diff --git a/inc/3rdparty/site_config b/inc/3rdparty/site_config new file mode 160000 index 00000000..fe9f0d3f --- /dev/null +++ b/inc/3rdparty/site_config @@ -0,0 +1 @@ +Subproject commit fe9f0d3f60d44a8701f3ecab0c4077a4ed39bfe8 -- cgit v1.2.3 From 9074534c935d852bd66133b56a769ff69ac9f58f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicolas=20L=C5=93uillet?= Date: Tue, 10 Sep 2013 22:19:34 +0200 Subject: fix flattr span --- tpl/view.twig | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tpl/view.twig b/tpl/view.twig index ee16afa6..e51b79bc 100644 --- a/tpl/view.twig +++ b/tpl/view.twig @@ -11,7 +11,7 @@ {% if constant('SHARE_TWITTER') == 1 %}
  • {% endif %} {% if constant('SHARE_MAIL') == 1 %}
  • {% endif %} {% if constant('SHARE_SHAARLI') == 1 %}
  • {% trans "shaarli" %}
  • {% endif %} - {% if constant('FLATTR') == 1 %}{% if flattr.status == constant('FLATTRABLE') %}
  • flattr
  • {% elseif flattr.status == constant('FLATTRED') %}
  • flattr{{ flattr.numflattrs }}
  • {% endif %}{% endif %} + {% if constant('FLATTR') == 1 %}{% if flattr.status == constant('FLATTRABLE') %}
  • flattr
  • {% elseif flattr.status == constant('FLATTRED') %}
  • {% trans "flattr" %}{{ flattr.numflattrs }}
  • {% endif %}{% endif %}
    @@ -32,7 +32,7 @@ {% if constant('SHARE_TWITTER') == 1 %}
  • {% endif %} {% if constant('SHARE_MAIL') == 1 %}
  • {% endif %} {% if constant('SHARE_SHAARLI') == 1 %}
  • {% trans "shaarli" %}
  • {% endif %} - {% if constant('FLATTR') == 1 %}{% if flattr.status == constant('FLATTRABLE') %}
  • flattr
  • {% elseif flattr.status == constant('FLATTRED') %}
  • flattr{{ flattr.numflattrs }}
  • {% endif %}{% endif %} + {% if constant('FLATTR') == 1 %}{% if flattr.status == constant('FLATTRABLE') %}
  • flattr
  • {% elseif flattr.status == constant('FLATTRED') %}
  • {% trans "flattr" %}{{ flattr.numflattrs }}
  • {% endif %}{% endif %}

    {% trans "this article appears wrong?" %} {% trans "create an issue" %} {% trans "or" %} {% trans "contact us by mail" %}

    -- cgit v1.2.3 From 7eb64927cc8936f4b1ee7f76c3a8058044bb587c Mon Sep 17 00:00:00 2001 From: NumEricR Date: Tue, 10 Sep 2013 23:52:28 +0200 Subject: Move icons no-repeat into common style --- tpl/css/style-light.css | 34 ++++++++++++++-------------------- tpl/css/style.css | 17 +++++++++++++++++ 2 files changed, 31 insertions(+), 20 deletions(-) diff --git a/tpl/css/style-light.css b/tpl/css/style-light.css index 224ef182..a85961c9 100644 --- a/tpl/css/style-light.css +++ b/tpl/css/style-light.css @@ -1,51 +1,45 @@ - a.back span { - background: url('../img/light/left.png') no-repeat; + background: url('../img/light/left.png'); } a.top span { - background: url('../img/light/top.png') no-repeat; + background: url('../img/light/top.png'); } - a.fav span { - background: url('../img/light/star-on.png') no-repeat; + background: url('../img/light/star-on.png'); } - a.fav span:hover { - background: url('../img/light/star-off.png') no-repeat; + background: url('../img/light/star-off.png'); } a.fav-off span { - background: url('../img/light/star-off.png') no-repeat; + background: url('../img/light/star-off.png'); } - a.fav-off span:hover { - background: url('../img/light/star-on.png') no-repeat; + background: url('../img/light/star-on.png'); } a.archive span { - background: url('../img/light/checkmark-on.png') no-repeat; + background: url('../img/light/checkmark-on.png'); } - a.archive span:hover { - background: url('../img/light/checkmark-off.png') no-repeat; + background: url('../img/light/checkmark-off.png'); } a.archive-off span { - background: url('../img/light/checkmark-off.png') no-repeat; + background: url('../img/light/checkmark-off.png'); } - a.archive-off span:hover { - background: url('../img/light/checkmark-on.png') no-repeat; + background: url('../img/light/checkmark-on.png'); } a.twitter span { - background: url('../img/light/twitter.png') no-repeat; + background: url('../img/light/twitter.png'); } a.shaarli span { - background: url('../img/light/shaarli.png') no-repeat; + background: url('../img/light/shaarli.png'); } a.flattr span { @@ -53,9 +47,9 @@ a.flattr span { } a.email span { - background: url('../img/light/envelop.png') no-repeat; + background: url('../img/light/envelop.png'); } a.delete span { - background: url('../img/light/remove.png') no-repeat; + background: url('../img/light/remove.png'); } \ No newline at end of file diff --git a/tpl/css/style.css b/tpl/css/style.css index c056429d..bb99ca4c 100644 --- a/tpl/css/style.css +++ b/tpl/css/style.css @@ -281,3 +281,20 @@ footer { color:white; border-radius: 3px; } + +a.back span, +a.top span, +a.fav span, +a.fav span:hover, +a.fav-off span, +a.fav-off span:hover, +a.archive span, +a.archive span:hover, +a.archive-off span, +a.archive-off span:hover, +a.twitter span, +a.flattr span, +a.email span, +a.delete span { + background-repeat: no-repeat; +} -- cgit v1.2.3 From a0fd7c5b4467adbc85244909663b3fd6bc160b14 Mon Sep 17 00:00:00 2001 From: NumEricR Date: Tue, 10 Sep 2013 23:54:40 +0200 Subject: Format CSS code --- tpl/css/style.css | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/tpl/css/style.css b/tpl/css/style.css index bb99ca4c..d60b443c 100644 --- a/tpl/css/style.css +++ b/tpl/css/style.css @@ -270,15 +270,15 @@ footer { #inputform { display: none; - text-align:center; - max-width:300px; - margin-left:auto; - margin-right:auto; - margin-top:5px; + text-align: center; + max-width: 300px; + margin-left: auto; + margin-right: auto; + margin-top: 5px; padding-bottom: 5px; background-color: rgba(0, 0, 0, 0.9); - opacity:0.8; - color:white; + opacity: 0.8; + color: #fff; border-radius: 3px; } -- cgit v1.2.3 From 8ca368e7e382446f2333326fce8fb5f0e8955bc1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicolas=20L=C5=93uillet?= Date: Wed, 11 Sep 2013 06:40:29 +0200 Subject: fix flattr span --- tpl/view.twig | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tpl/view.twig b/tpl/view.twig index e51b79bc..2b6d91d5 100644 --- a/tpl/view.twig +++ b/tpl/view.twig @@ -11,7 +11,7 @@ {% if constant('SHARE_TWITTER') == 1 %}
  • {% endif %} {% if constant('SHARE_MAIL') == 1 %}
  • {% endif %} {% if constant('SHARE_SHAARLI') == 1 %}
  • {% trans "shaarli" %}
  • {% endif %} - {% if constant('FLATTR') == 1 %}{% if flattr.status == constant('FLATTRABLE') %}
  • flattr
  • {% elseif flattr.status == constant('FLATTRED') %}
  • {% trans "flattr" %}{{ flattr.numflattrs }}
  • {% endif %}{% endif %} + {% if constant('FLATTR') == 1 %}{% if flattr.status == constant('FLATTRABLE') %}
  • {% trans "flattr" %}
  • {% elseif flattr.status == constant('FLATTRED') %}
  • {% trans "flattr" %}{{ flattr.numflattrs }}
  • {% endif %}{% endif %}
    @@ -32,7 +32,7 @@ {% if constant('SHARE_TWITTER') == 1 %}
  • {% endif %} {% if constant('SHARE_MAIL') == 1 %}
  • {% endif %} {% if constant('SHARE_SHAARLI') == 1 %}
  • {% trans "shaarli" %}
  • {% endif %} - {% if constant('FLATTR') == 1 %}{% if flattr.status == constant('FLATTRABLE') %}
  • flattr
  • {% elseif flattr.status == constant('FLATTRED') %}
  • {% trans "flattr" %}{{ flattr.numflattrs }}
  • {% endif %}{% endif %} + {% if constant('FLATTR') == 1 %}{% if flattr.status == constant('FLATTRABLE') %}
  • {% trans "flattr" %}
  • {% elseif flattr.status == constant('FLATTRED') %}
  • {% trans "flattr" %}{{ flattr.numflattrs }}
  • {% endif %}{% endif %}

    {% trans "this article appears wrong?" %} {% trans "create an issue" %} {% trans "or" %} {% trans "contact us by mail" %}

    -- cgit v1.2.3 From 660b998eb7c9d1c7ba3ae5f61040084d7df6b6df Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicolas=20L=C5=93uillet?= Date: Thu, 12 Sep 2013 12:28:22 +0200 Subject: add english language --- locale/en_EN.utf8/LC_MESSAGES/en_EN.utf8.mo | Bin 0 -> 315 bytes locale/en_EN.utf8/LC_MESSAGES/en_EN.utf8.po | 224 ++++++++++++++++++++++++++++ 2 files changed, 224 insertions(+) create mode 100644 locale/en_EN.utf8/LC_MESSAGES/en_EN.utf8.mo create mode 100644 locale/en_EN.utf8/LC_MESSAGES/en_EN.utf8.po 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..ce18cd52 Binary files /dev/null and b/locale/en_EN.utf8/LC_MESSAGES/en_EN.utf8.mo 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..92f6939c --- /dev/null +++ b/locale/en_EN.utf8/LC_MESSAGES/en_EN.utf8.po @@ -0,0 +1,224 @@ +msgid "" +msgstr "" +"Project-Id-Version: \n" +"POT-Creation-Date: \n" +"PO-Revision-Date: \n" +"Last-Translator: Nicolas Lœuillet \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 1.5.4\n" + +msgid "config" +msgstr "" + +msgid "Poching a link" +msgstr "" + +msgid "read the documentation" +msgstr "" + +msgid "by filling this field" +msgstr "" + +msgid "poche it!" +msgstr "" + +msgid "Updating poche" +msgstr "" + +msgid "your version" +msgstr "" + +msgid "latest stable version" +msgstr "" + +msgid "a more recent stable version is available." +msgstr "" + +msgid "you are up to date." +msgstr "" + +msgid "latest dev version" +msgstr "" + +msgid "a more recent development version is available." +msgstr "" + +msgid "Change your password" +msgstr "" + +msgid "New password:" +msgstr "" + +msgid "Password" +msgstr "" + +msgid "Repeat your new password:" +msgstr "" + +msgid "Update" +msgstr "" + +msgid "Import" +msgstr "" + +msgid "Please execute the import script locally, it can take a very long time." +msgstr "" + +msgid "More infos in the official doc:" +msgstr "" + +msgid "import from Pocket" +msgstr "" + +msgid "import from Readability" +msgstr "" + +msgid "import from Instapaper" +msgstr "" + +msgid "Export your poche datas" +msgstr "" + +msgid "Click here" +msgstr "" + +msgid "to export your poche datas." +msgstr "" + +msgid "back to home" +msgstr "" + +msgid "installation" +msgstr "" + +msgid "install your poche" +msgstr "" + +msgid "" +"poche is still not installed. Please fill the below form to install it. " +"Don't hesitate to read the documentation " +"on poche website." +msgstr "" + +msgid "Login" +msgstr "" + +msgid "Repeat your password" +msgstr "" + +msgid "Install" +msgstr "" + +msgid "back to top" +msgstr "" + +msgid "favoris" +msgstr "" + +msgid "archive" +msgstr "" + +msgid "unread" +msgstr "" + +msgid "by date asc" +msgstr "" + +msgid "by date" +msgstr "" + +msgid "by date desc" +msgstr "" + +msgid "by title asc" +msgstr "" + +msgid "by title" +msgstr "" + +msgid "by title desc" +msgstr "" + +msgid "No link available here!" +msgstr "" + +msgid "toggle mark as read" +msgstr "" + +msgid "toggle favorite" +msgstr "" + +msgid "delete" +msgstr "" + +msgid "original" +msgstr "" + +msgid "results" +msgstr "" + +msgid "tweet" +msgstr "" + +msgid "email" +msgstr "" + +msgid "shaarli" +msgstr "" + +msgid "flattr" +msgstr "" + +msgid "this article appears wrong?" +msgstr "" + +msgid "create an issue" +msgstr "" + +msgid "or" +msgstr "" + +msgid "contact us by mail" +msgstr "" + +msgid "plop" +msgstr "" + +msgid "home" +msgstr "" + +msgid "favorites" +msgstr "" + +msgid "logout" +msgstr "" + +msgid "powered by" +msgstr "" + +msgid "debug mode is on so cache is off." +msgstr "" + +msgid "your poche version:" +msgstr "" + +msgid "storage:" +msgstr "" + +msgid "login to your poche" +msgstr "" + +msgid "you are in demo mode, some features may be disabled." +msgstr "" + +msgid "Stay signed in" +msgstr "" + +msgid "(Do not check on public computers)" +msgstr "" + +msgid "Sign in" +msgstr "" -- cgit v1.2.3 From b9e0514783e83588a388670789291dce2cb482f1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicolas=20L=C5=93uillet?= Date: Thu, 12 Sep 2013 13:24:09 +0200 Subject: update locale files --- locale/de_DE.utf8/LC_MESSAGES/de_DE.utf8.mo | Bin 5799 -> 4216 bytes locale/de_DE.utf8/LC_MESSAGES/de_DE.utf8.po | 337 ++++++++------------------ locale/en_EN.utf8/LC_MESSAGES/en_EN.utf8.mo | Bin 315 -> 4487 bytes locale/en_EN.utf8/LC_MESSAGES/en_EN.utf8.po | 140 +++++------ locale/es_ES.utf8/LC_MESSAGES/es_ES.utf8.mo | Bin 5728 -> 4198 bytes locale/es_ES.utf8/LC_MESSAGES/es_ES.utf8.po | 350 ++++++++------------------- locale/fr_FR.utf8/LC_MESSAGES/fr_FR.utf8.mo | Bin 5706 -> 4813 bytes locale/fr_FR.utf8/LC_MESSAGES/fr_FR.utf8.po | 356 ++++++++-------------------- 8 files changed, 368 insertions(+), 815 deletions(-) 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 Binary files a/locale/de_DE.utf8/LC_MESSAGES/de_DE.utf8.mo and b/locale/de_DE.utf8/LC_MESSAGES/de_DE.utf8.mo 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 @@ -# -# Translators: -# HLFH , 2013 msgid "" msgstr "" -"Project-Id-Version: poche\n" -"POT-Creation-Date: 2013-08-06 08:35+0100\n" -"PO-Revision-Date: 2013-08-23 17:42+0100\n" +"Project-Id-Version: \n" +"POT-Creation-Date: \n" +"PO-Revision-Date: \n" "Last-Translator: Nicolas Lœuillet \n" -"Language-Team: German (http://www.transifex.com/projects/p/poche/language/" -"de/)\n" +"Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: de\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Poedit 1.5.4\n" -"X-Poedit-Basepath: /\n" -"X-Poedit-KeywordsList: _;gettext;gettext_noop\n" -"X-Poedit-SourceCharset: UTF-8\n" -"X-Poedit-SearchPath-0: /var/www/poche-i18n\n" - -#: /var/www/poche-i18n/index.php:43 -msgid "poche, a read it later open source system" -msgstr "Poche, eine Opensourcelösung, um später zu lesen" - -#: /var/www/poche-i18n/inc/poche/Poche.class.php:101 -msgid "the link has been added successfully" -msgstr "der Link wurde erfolgreich hinzugefügt" - -#: /var/www/poche-i18n/inc/poche/Poche.class.php:104 -msgid "error during insertion : the link wasn't added" -msgstr "Fehler beim Einfügen: der Link wurde nicht hinzugefügt" - -#: /var/www/poche-i18n/inc/poche/Poche.class.php:109 -msgid "error during fetching content : the link wasn't added" -msgstr "Fehler beim Abrufen der Inhalte: der Link wurde nicht hinzugefügt" - -#: /var/www/poche-i18n/inc/poche/Poche.class.php:119 -msgid "the link has been deleted successfully" -msgstr "der Link wurde erfolgreich gelöscht" - -#: /var/www/poche-i18n/inc/poche/Poche.class.php:123 -msgid "the link wasn't deleted" -msgstr "der Link wurde nicht gelöscht" - -#: /var/www/poche-i18n/inc/poche/Tools.class.php:18 -msgid "Oops, it seems you don't have PHP 5." -msgstr "Hoppla, scheint es, dass PHP 5 nicht installiert ist." - -#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:32 -#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:70 -#: /var/www/poche-i18n/cache/76/a4/e7c21f2e0ba29104fc654cd8ba41.php:50 + msgid "config" msgstr "Konfig" -#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:46 -#: /var/www/poche-i18n/cache/7a/1e/68e6b4aec1301ae024cc85232e7c.php:31 -#: /var/www/poche-i18n/cache/76/a4/e7c21f2e0ba29104fc654cd8ba41.php:26 -#: /var/www/poche-i18n/cache/dd/a8/530129765655dcde0a70a31a78b6.php:34 -msgid "home" -msgstr "Hause" - -#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:54 -#: /var/www/poche-i18n/cache/76/a4/e7c21f2e0ba29104fc654cd8ba41.php:34 -msgid "favorites" -msgstr "Favoriten" - -#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:62 -#: /var/www/poche-i18n/cache/76/a4/e7c21f2e0ba29104fc654cd8ba41.php:42 -msgid "archive" -msgstr "Archive" - -#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:74 -#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:76 -#: /var/www/poche-i18n/cache/76/a4/e7c21f2e0ba29104fc654cd8ba41.php:54 -#: /var/www/poche-i18n/cache/76/a4/e7c21f2e0ba29104fc654cd8ba41.php:56 -msgid "logout" -msgstr "Trennung" - -#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:87 -msgid "Bookmarklet" -msgstr "Bookmarklet" - -#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:91 -msgid "" -"Thanks to the bookmarklet, you will be able to easily add a link to your " -"poche." +msgid "Poching a link" msgstr "" -"Mit dem Bookmarklet, können Sie ganz einfach einen Link in Poche hinzufügen." -#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:93 -msgid "Have a look to this documentation:" -msgstr "Werfen Sie einen Blick in die Dokumentation:" +msgid "read the documentation" +msgstr "" -#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:97 -msgid "Drag & drop this link to your bookmarks bar and have fun with poche." +msgid "by filling this field" msgstr "" -"Ziehen / Ablegen Sie diesen Link in die Lesezeichenleiste Ihres Browsers und " -"genießen Sie mit Poche." -#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:103 msgid "poche it!" msgstr "Pochert es!" -#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:108 msgid "Updating poche" -msgstr "Poche aktualisieren " +msgstr "Poche aktualisieren" -#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:113 msgid "your version" msgstr "Ihre Version" -#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:119 msgid "latest stable version" msgstr "letzte stabile Version" -#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:125 msgid "a more recent stable version is available." msgstr "eine neuere stabile Version ist verfügbar." -#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:128 -#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:142 msgid "you are up to date." msgstr "Sie sind auf den neuesten Stand." -#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:133 msgid "latest dev version" msgstr "letzte Entwicklungsversion" -#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:139 msgid "a more recent development version is available." msgstr "eine neuere Entwicklungsversion ist verfügbar." -#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:150 msgid "Change your password" msgstr "Ihr Passwort ändern" -#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:157 msgid "New password:" msgstr "Neues Passwort:" -#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:161 -#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:171 -#: /var/www/poche-i18n/cache/d4/28/e0d08991ec2d8a7b133505e7c651.php:60 -#: /var/www/poche-i18n/cache/ae/26/05eb67771213c16bd8c9aaf2d2c4.php:68 msgid "Password" msgstr "Passwort" -#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:167 msgid "Repeat your new password:" msgstr "neues Passwort wiederholen:" -#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:177 msgid "Update" msgstr "Aktualisieren" -#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:193 msgid "Import" msgstr "Import" -#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:197 msgid "Please execute the import script locally, it can take a very long time." msgstr "" "Wir danken Ihnen, den Import in lokal zu ausführen, kann es einige Zeit " "dauern." -#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:201 msgid "More infos in the official doc:" msgstr "Mehr Informationen auf der offiziellen Dokumentation:" -#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:206 msgid "import from Pocket" -msgstr "Der Import aus Pocket ist abgeschlossen." +msgstr "import aus Pocket" -#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:210 msgid "import from Readability" -msgstr "Der Import aus Readability ist abgeschlossen." +msgstr "import aus Readability" -#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:214 msgid "import from Instapaper" -msgstr "Import aus Instapaper" +msgstr "import aus Instapaper" -#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:220 msgid "Export your poche datas" msgstr "Exportieren Sie Ihre Daten aus Poche." -#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:224 msgid "Click here" msgstr "klicken Sie hier" -#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:226 msgid "to export your poche datas." msgstr "um Ihre Daten aus Poche zu exportieren." -#: /var/www/poche-i18n/cache/7a/1e/68e6b4aec1301ae024cc85232e7c.php:46 -#: /var/www/poche-i18n/cache/7a/1e/68e6b4aec1301ae024cc85232e7c.php:139 -#: /var/www/poche-i18n/cache/30/97/b548692380c89d047a16cec7af79.php:22 msgid "back to home" msgstr "züruck zur Hauptseite" -#: /var/www/poche-i18n/cache/7a/1e/68e6b4aec1301ae024cc85232e7c.php:50 -#: /var/www/poche-i18n/cache/7a/1e/68e6b4aec1301ae024cc85232e7c.php:147 -#: /var/www/poche-i18n/cache/dd/a8/530129765655dcde0a70a31a78b6.php:119 -msgid "toggle mark as read" -msgstr "als gelesen markieren" - -#: /var/www/poche-i18n/cache/7a/1e/68e6b4aec1301ae024cc85232e7c.php:60 -#: /var/www/poche-i18n/cache/7a/1e/68e6b4aec1301ae024cc85232e7c.php:157 -#: /var/www/poche-i18n/cache/dd/a8/530129765655dcde0a70a31a78b6.php:129 -msgid "toggle favorite" -msgstr "Favorit" - -#: /var/www/poche-i18n/cache/7a/1e/68e6b4aec1301ae024cc85232e7c.php:70 -#: /var/www/poche-i18n/cache/7a/1e/68e6b4aec1301ae024cc85232e7c.php:167 -#: /var/www/poche-i18n/cache/dd/a8/530129765655dcde0a70a31a78b6.php:139 -msgid "delete" -msgstr "löschen" - -#: /var/www/poche-i18n/cache/7a/1e/68e6b4aec1301ae024cc85232e7c.php:82 -#: /var/www/poche-i18n/cache/7a/1e/68e6b4aec1301ae024cc85232e7c.php:179 -msgid "tweet" -msgstr "twittern" - -#: /var/www/poche-i18n/cache/7a/1e/68e6b4aec1301ae024cc85232e7c.php:93 -#: /var/www/poche-i18n/cache/7a/1e/68e6b4aec1301ae024cc85232e7c.php:190 -msgid "email" -msgstr "senden per E-Mail" - -#: /var/www/poche-i18n/cache/7a/1e/68e6b4aec1301ae024cc85232e7c.php:109 -#: /var/www/poche-i18n/cache/7a/1e/68e6b4aec1301ae024cc85232e7c.php:125 -#: /var/www/poche-i18n/cache/dd/a8/530129765655dcde0a70a31a78b6.php:153 -msgid "original" -msgstr "Original" - -#: /var/www/poche-i18n/cache/7a/1e/68e6b4aec1301ae024cc85232e7c.php:143 -msgid "back to top" -msgstr "zurück nach oben" - -#: /var/www/poche-i18n/cache/7a/1e/68e6b4aec1301ae024cc85232e7c.php:198 -msgid "this article appears wrong?" -msgstr "dieser Artikel erscheint falsch?" - -#: /var/www/poche-i18n/cache/7a/1e/68e6b4aec1301ae024cc85232e7c.php:200 -msgid "create an issue" -msgstr "ein Ticket erstellen" - -#: /var/www/poche-i18n/cache/7a/1e/68e6b4aec1301ae024cc85232e7c.php:202 -msgid "or" -msgstr "oder" - -#: /var/www/poche-i18n/cache/7a/1e/68e6b4aec1301ae024cc85232e7c.php:206 -msgid "contact us by mail" -msgstr "kontaktieren Sie uns per E-Mail" - -#: /var/www/poche-i18n/cache/88/8a/ee3b7080c13204391c14947a0c2c.php:22 -msgid "powered by" -msgstr "bereitgestellt von" - -#: /var/www/poche-i18n/cache/d4/28/e0d08991ec2d8a7b133505e7c651.php:31 msgid "installation" msgstr "Installierung" -#: /var/www/poche-i18n/cache/d4/28/e0d08991ec2d8a7b133505e7c651.php:42 msgid "install your poche" msgstr "installieren Sie Poche" -#: /var/www/poche-i18n/cache/d4/28/e0d08991ec2d8a7b133505e7c651.php:47 msgid "" "poche is still not installed. Please fill the below form to install it. " -"Don't hesitate to read " -"the documentation on poche website." +"Don't hesitate to read the documentation " +"on poche website." msgstr "" "Poche ist noch nicht installiert. Wir danken Ihnen, die Felder unten zu " -"befüllen, um es zu machen. Zögern sie nicht, die Dokumentation auf der Website von Poche zu lesen." +"befüllen, um es zu machen. Zögern sie nicht, die Dokumentation auf der Website von Poche zu lesen." -#: /var/www/poche-i18n/cache/d4/28/e0d08991ec2d8a7b133505e7c651.php:53 -#: /var/www/poche-i18n/cache/ae/26/05eb67771213c16bd8c9aaf2d2c4.php:55 msgid "Login" msgstr "Benutzername" -#: /var/www/poche-i18n/cache/d4/28/e0d08991ec2d8a7b133505e7c651.php:67 msgid "Repeat your password" msgstr "Wiederholen Sie Ihr Passwort" -#: /var/www/poche-i18n/cache/d4/28/e0d08991ec2d8a7b133505e7c651.php:74 msgid "Install" msgstr "Installieren" -#: /var/www/poche-i18n/cache/ae/26/05eb67771213c16bd8c9aaf2d2c4.php:31 -#: /var/www/poche-i18n/cache/ae/26/05eb67771213c16bd8c9aaf2d2c4.php:42 -msgid "login to your poche" -msgstr "Verbinden zu Poche" - -#: /var/www/poche-i18n/cache/ae/26/05eb67771213c16bd8c9aaf2d2c4.php:48 -msgid "you are in demo mode, some features may be disabled." -msgstr "Sie sind im Demomodus, können einige Funktionen deaktiviert werden." +msgid "back to top" +msgstr "zurück nach oben" -#: /var/www/poche-i18n/cache/ae/26/05eb67771213c16bd8c9aaf2d2c4.php:80 -msgid "Stay signed in" -msgstr "bleiben Sie verbunden" +msgid "favoris" +msgstr "" -#: /var/www/poche-i18n/cache/ae/26/05eb67771213c16bd8c9aaf2d2c4.php:86 -msgid "(Do not check on public computers)" -msgstr "(nicht auf einem öffentlichen Computer überprüfen)" +msgid "archive" +msgstr "Archive" -#: /var/www/poche-i18n/cache/ae/26/05eb67771213c16bd8c9aaf2d2c4.php:93 -msgid "Sign in" -msgstr "Einloggen" +msgid "unread" +msgstr "" -#: /var/www/poche-i18n/cache/dd/a8/530129765655dcde0a70a31a78b6.php:55 -#: /var/www/poche-i18n/cache/dd/a8/530129765655dcde0a70a31a78b6.php:57 msgid "by date asc" msgstr "nach Datum asc" -#: /var/www/poche-i18n/cache/dd/a8/530129765655dcde0a70a31a78b6.php:59 msgid "by date" msgstr "nach Datum" -#: /var/www/poche-i18n/cache/dd/a8/530129765655dcde0a70a31a78b6.php:65 -#: /var/www/poche-i18n/cache/dd/a8/530129765655dcde0a70a31a78b6.php:67 msgid "by date desc" msgstr "nach Datum desc" -#: /var/www/poche-i18n/cache/dd/a8/530129765655dcde0a70a31a78b6.php:75 -#: /var/www/poche-i18n/cache/dd/a8/530129765655dcde0a70a31a78b6.php:77 msgid "by title asc" msgstr "nach Titel asc" -#: /var/www/poche-i18n/cache/dd/a8/530129765655dcde0a70a31a78b6.php:79 msgid "by title" msgstr "nach Titel" -#: /var/www/poche-i18n/cache/dd/a8/530129765655dcde0a70a31a78b6.php:85 -#: /var/www/poche-i18n/cache/dd/a8/530129765655dcde0a70a31a78b6.php:87 msgid "by title desc" msgstr "nach Titel desc" -#~ msgid "Please choose between Pocket & Readabilty :" -#~ msgstr "Merci de choisir entre Pocket & Readability :" +msgid "No link available here!" +msgstr "" + +msgid "toggle mark as read" +msgstr "als gelesen markieren" + +msgid "toggle favorite" +msgstr "Favorit" + +msgid "delete" +msgstr "löschen" -#~ msgid "Bye bye Pocket, let's go !" -#~ msgstr "Bye bye Pocket, en route !" +msgid "original" +msgstr "Original" -#~ msgid "Bye bye Readability, let's go !" -#~ msgstr "Bye bye Readability, en route !" +msgid "results" +msgstr "" -#~ msgid "Welcome to poche !" -#~ msgstr "Bienvenue dans poche !" +msgid "tweet" +msgstr "twittern" -#~ msgid "Error with the import." -#~ msgstr "Erreur durant l'import." +msgid "email" +msgstr "senden per E-Mail" -#~ msgid "Wrong token." -#~ msgstr "Mauvais jeton." +msgid "shaarli" +msgstr "shaarli" -#~ msgid "Login failed !" -#~ msgstr "Connexion échouée." +msgid "flattr" +msgstr "flattr" -#~ msgid "your password has been updated" -#~ msgstr "Votre mot de passe a été mis à jour. " +msgid "this article appears wrong?" +msgstr "dieser Artikel erscheint falsch?" -#~ msgid "in demo mode, you can't update password" -#~ msgstr "En mode démo, le mot de passe ne peut être modifié." +msgid "create an issue" +msgstr "ein Ticket erstellen" -#~ msgid "" -#~ "your password can't be empty and you have to repeat it in the second field" -#~ msgstr "" -#~ "Votre mot de passe ne peut être vide et vous devez le répéter dans le " -#~ "second champ." +msgid "or" +msgstr "oder" -#~ msgid "error during url preparation : the link wasn't added" -#~ msgstr "erreur durant l'insertion : le lien n'a pas été ajouté" +msgid "contact us by mail" +msgstr "kontaktieren Sie uns per E-Mail" -#~ msgid "error during url preparation : the link is not valid" -#~ msgstr "erreur durant la préparation de l'URL : le lien n'est pas valide" +msgid "plop" +msgstr "plop" -#~ msgid "TEST" -#~ msgstr "NICOLAS" +msgid "home" +msgstr "Hause" + +msgid "favorites" +msgstr "Favoriten" + +msgid "logout" +msgstr "Trennung" + +msgid "powered by" +msgstr "bereitgestellt von" + +msgid "debug mode is on so cache is off." +msgstr "" + +msgid "your poche version:" +msgstr "" + +msgid "storage:" +msgstr "" + +msgid "login to your poche" +msgstr "Verbinden zu Poche" + +msgid "you are in demo mode, some features may be disabled." +msgstr "Sie sind im Demomodus, können einige Funktionen deaktiviert werden." + +msgid "Stay signed in" +msgstr "bleiben Sie verbunden" + +msgid "(Do not check on public computers)" +msgstr "(nicht auf einem öffentlichen Computer überprüfen)" + +msgid "Sign in" +msgstr "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 index ce18cd52..f387889d 100644 Binary files a/locale/en_EN.utf8/LC_MESSAGES/en_EN.utf8.mo and b/locale/en_EN.utf8/LC_MESSAGES/en_EN.utf8.mo 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 index 92f6939c..8e56560d 100644 --- a/locale/en_EN.utf8/LC_MESSAGES/en_EN.utf8.po +++ b/locale/en_EN.utf8/LC_MESSAGES/en_EN.utf8.po @@ -11,214 +11,218 @@ msgstr "" "X-Generator: Poedit 1.5.4\n" msgid "config" -msgstr "" +msgstr "config" msgid "Poching a link" -msgstr "" +msgstr "Poching a link" msgid "read the documentation" -msgstr "" +msgstr "read the documentation" msgid "by filling this field" -msgstr "" +msgstr "by filling this field" msgid "poche it!" -msgstr "" +msgstr "poche it!" msgid "Updating poche" -msgstr "" +msgstr "Updating poche" msgid "your version" -msgstr "" +msgstr "your version" msgid "latest stable version" -msgstr "" +msgstr "latest stable version" msgid "a more recent stable version is available." -msgstr "" +msgstr "a more recent stable version is available." msgid "you are up to date." -msgstr "" +msgstr "you are up to date." msgid "latest dev version" -msgstr "" +msgstr "latest dev version" msgid "a more recent development version is available." -msgstr "" +msgstr "a more recent development version is available." msgid "Change your password" -msgstr "" +msgstr "Change your password" msgid "New password:" -msgstr "" +msgstr "New password:" msgid "Password" -msgstr "" +msgstr "Password" msgid "Repeat your new password:" -msgstr "" +msgstr "Repeat your new password:" msgid "Update" -msgstr "" +msgstr "Update" msgid "Import" -msgstr "" +msgstr "Import" msgid "Please execute the import script locally, it can take a very long time." msgstr "" +"Please execute the import script locally, it can take a very long time." msgid "More infos in the official doc:" -msgstr "" +msgstr "More infos in the official doc:" msgid "import from Pocket" -msgstr "" +msgstr "import from Pocket" msgid "import from Readability" -msgstr "" +msgstr "import from Readability" msgid "import from Instapaper" -msgstr "" +msgstr "import from Instapaper" msgid "Export your poche datas" -msgstr "" +msgstr "Export your poche datas" msgid "Click here" -msgstr "" +msgstr "Click here" msgid "to export your poche datas." -msgstr "" +msgstr "to export your poche datas." msgid "back to home" -msgstr "" +msgstr "back to home" msgid "installation" -msgstr "" +msgstr "installation" msgid "install your poche" -msgstr "" +msgstr "install your poche" msgid "" "poche is still not installed. Please fill the below form to install it. " "Don't hesitate to read the documentation " "on poche website." msgstr "" +"poche is still not installed. Please fill the below form to install it. " +"Don't hesitate to read the documentation " +"on poche website." msgid "Login" -msgstr "" +msgstr "Login" msgid "Repeat your password" -msgstr "" +msgstr "Repeat your password" msgid "Install" -msgstr "" +msgstr "Install" msgid "back to top" -msgstr "" +msgstr "back to top" msgid "favoris" -msgstr "" +msgstr "favoris" msgid "archive" -msgstr "" +msgstr "archive" msgid "unread" -msgstr "" +msgstr "unread" msgid "by date asc" -msgstr "" +msgstr "by date asc" msgid "by date" -msgstr "" +msgstr "by date" msgid "by date desc" -msgstr "" +msgstr "by date desc" msgid "by title asc" -msgstr "" +msgstr "by title asc" msgid "by title" -msgstr "" +msgstr "by title" msgid "by title desc" -msgstr "" +msgstr "by title desc" msgid "No link available here!" -msgstr "" +msgstr "No link available here!" msgid "toggle mark as read" -msgstr "" +msgstr "toggle mark as read" msgid "toggle favorite" -msgstr "" +msgstr "toggle favorite" msgid "delete" -msgstr "" +msgstr "delete" msgid "original" -msgstr "" +msgstr "original" msgid "results" -msgstr "" +msgstr "results" msgid "tweet" -msgstr "" +msgstr "tweet" msgid "email" -msgstr "" +msgstr "email" msgid "shaarli" -msgstr "" +msgstr "shaarli" msgid "flattr" -msgstr "" +msgstr "flattr" msgid "this article appears wrong?" -msgstr "" +msgstr "this article appears wrong?" msgid "create an issue" -msgstr "" +msgstr "create an issue" msgid "or" -msgstr "" +msgstr "or" msgid "contact us by mail" -msgstr "" +msgstr "contact us by mail" msgid "plop" -msgstr "" +msgstr "plop" msgid "home" -msgstr "" +msgstr "home" msgid "favorites" -msgstr "" +msgstr "favorites" msgid "logout" -msgstr "" +msgstr "logout" msgid "powered by" -msgstr "" +msgstr "powered by" msgid "debug mode is on so cache is off." -msgstr "" +msgstr "debug mode is on so cache is off." msgid "your poche version:" -msgstr "" +msgstr "your poche version:" msgid "storage:" -msgstr "" +msgstr "storage:" msgid "login to your poche" -msgstr "" +msgstr "login to your poche" msgid "you are in demo mode, some features may be disabled." -msgstr "" +msgstr "you are in demo mode, some features may be disabled." msgid "Stay signed in" -msgstr "" +msgstr "Stay signed in" msgid "(Do not check on public computers)" -msgstr "" +msgstr "(Do not check on public computers)" msgid "Sign in" -msgstr "" +msgstr "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 Binary files a/locale/es_ES.utf8/LC_MESSAGES/es_ES.utf8.mo and b/locale/es_ES.utf8/LC_MESSAGES/es_ES.utf8.mo 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 @@ -# -# Translators: -# Nitche , 2013 msgid "" msgstr "" -"Project-Id-Version: poche\n" -"POT-Creation-Date: 2013-08-06 08:35+0100\n" -"PO-Revision-Date: 2013-08-16 19:09+0100\n" +"Project-Id-Version: \n" +"POT-Creation-Date: \n" +"PO-Revision-Date: \n" "Last-Translator: Nicolas Lœuillet \n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/poche/language/" -"es/)\n" +"Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Poedit 1.5.4\n" -"X-Poedit-Basepath: /\n" -"X-Poedit-KeywordsList: _;gettext;gettext_noop\n" -"X-Poedit-SourceCharset: UTF-8\n" -"X-Poedit-SearchPath-0: /var/www/poche-i18n\n" -#: /var/www/poche-i18n/index.php:43 -msgid "poche, a read it later open source system" -msgstr "poche, a read it later open source system" - -#: /var/www/poche-i18n/inc/poche/Poche.class.php:101 -msgid "the link has been added successfully" -msgstr "el enlace a sido agregado con éxito" - -#: /var/www/poche-i18n/inc/poche/Poche.class.php:104 -msgid "error during insertion : the link wasn't added" -msgstr "error en la inserción : el enlace no ha sido agregado" - -#: /var/www/poche-i18n/inc/poche/Poche.class.php:109 -msgid "error during fetching content : the link wasn't added" -msgstr "" -"error durante la recuperación del contenido : el enlace no a sido agregado" - -#: /var/www/poche-i18n/inc/poche/Poche.class.php:119 -msgid "the link has been deleted successfully" -msgstr "el enlace a sido suprimido con éxito" - -#: /var/www/poche-i18n/inc/poche/Poche.class.php:123 -msgid "the link wasn't deleted" -msgstr "el enlace no ha sido suprimido" - -#: /var/www/poche-i18n/inc/poche/Tools.class.php:18 -msgid "Oops, it seems you don't have PHP 5." -msgstr "Parece que PHP 5 no está instalado" - -#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:32 -#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:70 -#: /var/www/poche-i18n/cache/76/a4/e7c21f2e0ba29104fc654cd8ba41.php:50 msgid "config" msgstr "configuración" -#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:46 -#: /var/www/poche-i18n/cache/7a/1e/68e6b4aec1301ae024cc85232e7c.php:31 -#: /var/www/poche-i18n/cache/76/a4/e7c21f2e0ba29104fc654cd8ba41.php:26 -#: /var/www/poche-i18n/cache/dd/a8/530129765655dcde0a70a31a78b6.php:34 -msgid "home" -msgstr "inicio" - -#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:54 -#: /var/www/poche-i18n/cache/76/a4/e7c21f2e0ba29104fc654cd8ba41.php:34 -msgid "favorites" -msgstr "favoritos" - -#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:62 -#: /var/www/poche-i18n/cache/76/a4/e7c21f2e0ba29104fc654cd8ba41.php:42 -msgid "archive" -msgstr "archivos" - -#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:74 -#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:76 -#: /var/www/poche-i18n/cache/76/a4/e7c21f2e0ba29104fc654cd8ba41.php:54 -#: /var/www/poche-i18n/cache/76/a4/e7c21f2e0ba29104fc654cd8ba41.php:56 -msgid "logout" -msgstr "desconexión " - -#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:87 -msgid "Bookmarklet" -msgstr "Bookmarklet" - -#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:91 -msgid "" -"Thanks to the bookmarklet, you will be able to easily add a link to your " -"poche." +msgid "Poching a link" msgstr "" -"Gracias a tu bookmarklet, puedes agregar fácilmente un enlace en tu bolsillo" -#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:93 -msgid "Have a look to this documentation:" -msgstr "échale un ojo a la documentación :" +msgid "read the documentation" +msgstr "" -#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:97 -msgid "Drag & drop this link to your bookmarks bar and have fun with poche." +msgid "by filling this field" msgstr "" -"Arrastra y suelta ese enlace en tu barra de favoritos en tu navegador y " -"disfruta de tu poche." -#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:103 msgid "poche it!" msgstr "pochéalo!" -#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:108 msgid "Updating poche" msgstr "Actualizar" -#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:113 msgid "your version" msgstr "su versión" -#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:119 msgid "latest stable version" msgstr "ultima versión estable" -#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:125 msgid "a more recent stable version is available." -msgstr "una versión estable más reciente está disponible" +msgstr "una versión estable más reciente está disponible." -#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:128 -#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:142 msgid "you are up to date." -msgstr "estás al día" +msgstr "estás al día." -#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:133 msgid "latest dev version" msgstr "ultima versión de desarollo" -#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:139 msgid "a more recent development version is available." -msgstr "una versión de desarollo más reciente está disponible" +msgstr "una versión de desarollo más reciente está disponible." -#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:150 msgid "Change your password" msgstr "Modificar tu contraseña" -#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:157 msgid "New password:" msgstr "Nueva contraseña :" -#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:161 -#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:171 -#: /var/www/poche-i18n/cache/d4/28/e0d08991ec2d8a7b133505e7c651.php:60 -#: /var/www/poche-i18n/cache/ae/26/05eb67771213c16bd8c9aaf2d2c4.php:68 msgid "Password" msgstr "Contraseña" -#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:167 msgid "Repeat your new password:" msgstr "Repetir la nueva contraseña :" -#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:177 msgid "Update" msgstr "Poner al día" -#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:193 msgid "Import" msgstr "Importar" -#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:197 msgid "Please execute the import script locally, it can take a very long time." msgstr "" "Gracias por ejecutar la importación en local, esto puede demorar un tiempo" -#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:201 msgid "More infos in the official doc:" msgstr "Más información en la documentación oficial :" -#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:206 msgid "import from Pocket" -msgstr "la importación desde Pocket está terminada" +msgstr "importación desde Pocket" -#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:210 msgid "import from Readability" -msgstr "la importación desde Readability está terminada" +msgstr "importación desde Readability" -#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:214 msgid "import from Instapaper" -msgstr "Importar desde Instapaper" +msgstr "importación desde Instapaper" -#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:220 msgid "Export your poche datas" msgstr "Exportar sus datos de poche" -#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:224 msgid "Click here" msgstr "Haga clic aquí" -#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:226 msgid "to export your poche datas." -msgstr "Para exportar sus datos de poche" +msgstr "para exportar sus datos de poche." -#: /var/www/poche-i18n/cache/7a/1e/68e6b4aec1301ae024cc85232e7c.php:46 -#: /var/www/poche-i18n/cache/7a/1e/68e6b4aec1301ae024cc85232e7c.php:139 -#: /var/www/poche-i18n/cache/30/97/b548692380c89d047a16cec7af79.php:22 msgid "back to home" msgstr "volver a la pagina de inicio" -#: /var/www/poche-i18n/cache/7a/1e/68e6b4aec1301ae024cc85232e7c.php:50 -#: /var/www/poche-i18n/cache/7a/1e/68e6b4aec1301ae024cc85232e7c.php:147 -#: /var/www/poche-i18n/cache/dd/a8/530129765655dcde0a70a31a78b6.php:119 -msgid "toggle mark as read" -msgstr "marcar como leído" - -#: /var/www/poche-i18n/cache/7a/1e/68e6b4aec1301ae024cc85232e7c.php:60 -#: /var/www/poche-i18n/cache/7a/1e/68e6b4aec1301ae024cc85232e7c.php:157 -#: /var/www/poche-i18n/cache/dd/a8/530129765655dcde0a70a31a78b6.php:129 -msgid "toggle favorite" -msgstr "favorito" - -#: /var/www/poche-i18n/cache/7a/1e/68e6b4aec1301ae024cc85232e7c.php:70 -#: /var/www/poche-i18n/cache/7a/1e/68e6b4aec1301ae024cc85232e7c.php:167 -#: /var/www/poche-i18n/cache/dd/a8/530129765655dcde0a70a31a78b6.php:139 -msgid "delete" -msgstr "suprimir" - -#: /var/www/poche-i18n/cache/7a/1e/68e6b4aec1301ae024cc85232e7c.php:82 -#: /var/www/poche-i18n/cache/7a/1e/68e6b4aec1301ae024cc85232e7c.php:179 -msgid "tweet" -msgstr "tweetear" - -#: /var/www/poche-i18n/cache/7a/1e/68e6b4aec1301ae024cc85232e7c.php:93 -#: /var/www/poche-i18n/cache/7a/1e/68e6b4aec1301ae024cc85232e7c.php:190 -msgid "email" -msgstr "enviar por mail" - -#: /var/www/poche-i18n/cache/7a/1e/68e6b4aec1301ae024cc85232e7c.php:109 -#: /var/www/poche-i18n/cache/7a/1e/68e6b4aec1301ae024cc85232e7c.php:125 -#: /var/www/poche-i18n/cache/dd/a8/530129765655dcde0a70a31a78b6.php:153 -msgid "original" -msgstr "original" - -#: /var/www/poche-i18n/cache/7a/1e/68e6b4aec1301ae024cc85232e7c.php:143 -msgid "back to top" -msgstr "volver arriba" - -#: /var/www/poche-i18n/cache/7a/1e/68e6b4aec1301ae024cc85232e7c.php:198 -msgid "this article appears wrong?" -msgstr "este articulo no se ve bien ?" - -#: /var/www/poche-i18n/cache/7a/1e/68e6b4aec1301ae024cc85232e7c.php:200 -msgid "create an issue" -msgstr "crear un ticket" - -#: /var/www/poche-i18n/cache/7a/1e/68e6b4aec1301ae024cc85232e7c.php:202 -msgid "or" -msgstr "o" - -#: /var/www/poche-i18n/cache/7a/1e/68e6b4aec1301ae024cc85232e7c.php:206 -msgid "contact us by mail" -msgstr "contactarnos por mail" - -#: /var/www/poche-i18n/cache/88/8a/ee3b7080c13204391c14947a0c2c.php:22 -msgid "powered by" -msgstr "propulsado por" - -#: /var/www/poche-i18n/cache/d4/28/e0d08991ec2d8a7b133505e7c651.php:31 msgid "installation" msgstr "instalacion" -#: /var/www/poche-i18n/cache/d4/28/e0d08991ec2d8a7b133505e7c651.php:42 msgid "install your poche" msgstr "instala tu poche" -#: /var/www/poche-i18n/cache/d4/28/e0d08991ec2d8a7b133505e7c651.php:47 msgid "" "poche is still not installed. Please fill the below form to install it. " -"Don't hesitate to read " -"the documentation on poche website." +"Don't hesitate to read the documentation " +"on poche website." msgstr "" "poche todavia no està instalado. Gracias de llenar los campos siguientes " -"para instalarlo. No dudes de leer la documentacion en el sitio de poche." +"para instalarlo. No dudes de leer la " +"documentacion en el sitio de poche." -#: /var/www/poche-i18n/cache/d4/28/e0d08991ec2d8a7b133505e7c651.php:53 -#: /var/www/poche-i18n/cache/ae/26/05eb67771213c16bd8c9aaf2d2c4.php:55 msgid "Login" msgstr "Nombre de usuario" -#: /var/www/poche-i18n/cache/d4/28/e0d08991ec2d8a7b133505e7c651.php:67 msgid "Repeat your password" -msgstr "repita su contraseña" +msgstr "Repita su contraseña" -#: /var/www/poche-i18n/cache/d4/28/e0d08991ec2d8a7b133505e7c651.php:74 msgid "Install" msgstr "Instalar" -#: /var/www/poche-i18n/cache/ae/26/05eb67771213c16bd8c9aaf2d2c4.php:31 -#: /var/www/poche-i18n/cache/ae/26/05eb67771213c16bd8c9aaf2d2c4.php:42 -msgid "login to your poche" -msgstr "conectarse a tu poche" +msgid "back to top" +msgstr "volver arriba" -#: /var/www/poche-i18n/cache/ae/26/05eb67771213c16bd8c9aaf2d2c4.php:48 -msgid "you are in demo mode, some features may be disabled." +msgid "favoris" msgstr "" -"este es el modo de demostración, algunas funcionalidades pueden estar " -"desactivadas." - -#: /var/www/poche-i18n/cache/ae/26/05eb67771213c16bd8c9aaf2d2c4.php:80 -msgid "Stay signed in" -msgstr "seguir conectado" -#: /var/www/poche-i18n/cache/ae/26/05eb67771213c16bd8c9aaf2d2c4.php:86 -msgid "(Do not check on public computers)" -msgstr "(no marcar en un ordenador publico)" +msgid "archive" +msgstr "archivos" -#: /var/www/poche-i18n/cache/ae/26/05eb67771213c16bd8c9aaf2d2c4.php:93 -msgid "Sign in" -msgstr "conectarse" +msgid "unread" +msgstr "" -#: /var/www/poche-i18n/cache/dd/a8/530129765655dcde0a70a31a78b6.php:55 -#: /var/www/poche-i18n/cache/dd/a8/530129765655dcde0a70a31a78b6.php:57 msgid "by date asc" msgstr "por fecha ascendiente" -#: /var/www/poche-i18n/cache/dd/a8/530129765655dcde0a70a31a78b6.php:59 msgid "by date" msgstr "por fecha" -#: /var/www/poche-i18n/cache/dd/a8/530129765655dcde0a70a31a78b6.php:65 -#: /var/www/poche-i18n/cache/dd/a8/530129765655dcde0a70a31a78b6.php:67 msgid "by date desc" msgstr "por fecha descendiente" -#: /var/www/poche-i18n/cache/dd/a8/530129765655dcde0a70a31a78b6.php:75 -#: /var/www/poche-i18n/cache/dd/a8/530129765655dcde0a70a31a78b6.php:77 msgid "by title asc" msgstr "por titulo ascendiente" -#: /var/www/poche-i18n/cache/dd/a8/530129765655dcde0a70a31a78b6.php:79 msgid "by title" -msgstr "por titulo" +msgstr "por fecha" -#: /var/www/poche-i18n/cache/dd/a8/530129765655dcde0a70a31a78b6.php:85 -#: /var/www/poche-i18n/cache/dd/a8/530129765655dcde0a70a31a78b6.php:87 msgid "by title desc" -msgstr "por titulo descendiente" +msgstr "por fecha descendiente" + +msgid "No link available here!" +msgstr "" + +msgid "toggle mark as read" +msgstr "marcar como leído" + +msgid "toggle favorite" +msgstr "favorito" -#~ msgid "Please choose between Pocket & Readabilty :" -#~ msgstr "Merci de choisir entre Pocket & Readability :" +msgid "delete" +msgstr "suprimir" -#~ msgid "Bye bye Pocket, let's go !" -#~ msgstr "Bye bye Pocket, en route !" +msgid "original" +msgstr "original" -#~ msgid "Bye bye Readability, let's go !" -#~ msgstr "Bye bye Readability, en route !" +msgid "results" +msgstr "" -#~ msgid "Welcome to poche !" -#~ msgstr "Bienvenue dans poche !" +msgid "tweet" +msgstr "tweetear" -#~ msgid "Error with the import." -#~ msgstr "Erreur durant l'import." +msgid "email" +msgstr "enviar por mail" -#~ msgid "Wrong token." -#~ msgstr "Mauvais jeton." +msgid "shaarli" +msgstr "shaarli" -#~ msgid "Login failed !" -#~ msgstr "Connexion échouée." +msgid "flattr" +msgstr "flattr" -#~ msgid "your password has been updated" -#~ msgstr "Votre mot de passe a été mis à jour. " +msgid "this article appears wrong?" +msgstr "este articulo no se ve bien ?" -#~ msgid "in demo mode, you can't update password" -#~ msgstr "En mode démo, le mot de passe ne peut être modifié." +msgid "create an issue" +msgstr "crear un ticket" -#~ msgid "" -#~ "your password can't be empty and you have to repeat it in the second field" -#~ msgstr "" -#~ "Votre mot de passe ne peut être vide et vous devez le répéter dans le " -#~ "second champ." +msgid "or" +msgstr "o" -#~ msgid "error during url preparation : the link wasn't added" -#~ msgstr "erreur durant l'insertion : le lien n'a pas été ajouté" +msgid "contact us by mail" +msgstr "contactarnos por mail" -#~ msgid "error during url preparation : the link is not valid" -#~ msgstr "erreur durant la préparation de l'URL : le lien n'est pas valide" +msgid "plop" +msgstr "plop" -#~ msgid "TEST" -#~ msgstr "NICOLAS" +msgid "home" +msgstr "inicio" + +msgid "favorites" +msgstr "favoritos" + +msgid "logout" +msgstr "desconexión" + +msgid "powered by" +msgstr "propulsado por" + +msgid "debug mode is on so cache is off." +msgstr "" + +msgid "your poche version:" +msgstr "" + +msgid "storage:" +msgstr "" + +msgid "login to your poche" +msgstr "conectarse a tu poche" + +msgid "you are in demo mode, some features may be disabled." +msgstr "" +"este es el modo de demostración, algunas funcionalidades pueden estar " +"desactivadas." + +msgid "Stay signed in" +msgstr "seguir conectado" + +msgid "(Do not check on public computers)" +msgstr "(no marcar en un ordenador publico)" + +msgid "Sign in" +msgstr "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 Binary files a/locale/fr_FR.utf8/LC_MESSAGES/fr_FR.utf8.mo and b/locale/fr_FR.utf8/LC_MESSAGES/fr_FR.utf8.mo 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 @@ msgid "" msgstr "" -"Project-Id-Version: poche\n" -"POT-Creation-Date: 2013-08-06 08:35+0100\n" -"PO-Revision-Date: 2013-08-24 10:25+0100\n" -"Last-Translator: Eric R (NumEricR)\n" -"Language-Team: poche \n" -"Language: Français\n" +"Project-Id-Version: \n" +"POT-Creation-Date: \n" +"PO-Revision-Date: \n" +"Last-Translator: Nicolas Lœuillet \n" +"Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 1.5.7\n" -"X-Poedit-KeywordsList: _;gettext;gettext_noop\n" -"X-Poedit-Basepath: /\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" -"X-Poedit-SourceCharset: UTF-8\n" -"X-Poedit-SearchPath-0: /var/www/poche-i18n\n" - -#: /var/www/poche-i18n/index.php:43 -msgid "poche, a read it later open source system" -msgstr "poche, a read it later open source system" - -#: /var/www/poche-i18n/inc/poche/Poche.class.php:101 -msgid "the link has been added successfully" -msgstr "le lien a été ajouté avec succès" - -#: /var/www/poche-i18n/inc/poche/Poche.class.php:104 -msgid "error during insertion : the link wasn't added" -msgstr "erreur durant l'insertion : le lien n'a pas été ajouté" - -#: /var/www/poche-i18n/inc/poche/Poche.class.php:109 -msgid "error during fetching content : the link wasn't added" -msgstr "erreur durant la récupération du contenu : le lien n'a pas été ajouté" - -#: /var/www/poche-i18n/inc/poche/Poche.class.php:119 -msgid "the link has been deleted successfully" -msgstr "le lien a été supprimé avec succès" - -#: /var/www/poche-i18n/inc/poche/Poche.class.php:123 -msgid "the link wasn't deleted" -msgstr "le lien n'a pas été supprimé" - -#: /var/www/poche-i18n/inc/poche/Tools.class.php:18 -msgid "Oops, it seems you don't have PHP 5." -msgstr "Oups, il semblerait que PHP 5 ne soit pas installé. " - -#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:32 -#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:70 -#: /var/www/poche-i18n/cache/76/a4/e7c21f2e0ba29104fc654cd8ba41.php:50 -msgid "config" -msgstr "config" - -#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:46 -#: /var/www/poche-i18n/cache/7a/1e/68e6b4aec1301ae024cc85232e7c.php:31 -#: /var/www/poche-i18n/cache/76/a4/e7c21f2e0ba29104fc654cd8ba41.php:26 -#: /var/www/poche-i18n/cache/dd/a8/530129765655dcde0a70a31a78b6.php:34 -msgid "home" -msgstr "accueil" - -#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:54 -#: /var/www/poche-i18n/cache/76/a4/e7c21f2e0ba29104fc654cd8ba41.php:34 -msgid "favorites" -msgstr "favoris" +"X-Generator: Poedit 1.5.4\n" -#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:62 -#: /var/www/poche-i18n/cache/76/a4/e7c21f2e0ba29104fc654cd8ba41.php:42 -msgid "archive" -msgstr "archives" - -#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:74 -#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:76 -#: /var/www/poche-i18n/cache/76/a4/e7c21f2e0ba29104fc654cd8ba41.php:54 -#: /var/www/poche-i18n/cache/76/a4/e7c21f2e0ba29104fc654cd8ba41.php:56 -msgid "logout" -msgstr "déconnexion" - -#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:87 -msgid "Bookmarklet" -msgstr "Bookmarklet" +msgid "config" +msgstr "configuration" -#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:91 -msgid "" -"Thanks to the bookmarklet, you will be able to easily add a link to your " -"poche." -msgstr "" -"Grâce au bookmarklet, vous pouvez ajouter facilement un lien dans votre " -"poche." +msgid "Poching a link" +msgstr "Pocher un lien" -#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:93 -msgid "Have a look to this documentation:" -msgstr "Jetez un œil à la documentation :" +msgid "read the documentation" +msgstr "lisez la documentation" -#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:97 -msgid "Drag & drop this link to your bookmarks bar and have fun with poche." -msgstr "" -"Glissez / déposez ce lien dans votre barre de favoris de votre navigateur et " -"prenez du bon temps avec poche." +msgid "by filling this field" +msgstr "en remplissant ce champ" -#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:103 msgid "poche it!" -msgstr "poche-le !" +msgstr "pochez-le !" -#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:108 msgid "Updating poche" msgstr "Mettre à jour poche" -#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:113 msgid "your version" msgstr "votre version" -#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:119 msgid "latest stable version" msgstr "dernière version stable" -#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:125 msgid "a more recent stable version is available." msgstr "une version stable plus récente est disponible." -#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:128 -#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:142 msgid "you are up to date." msgstr "vous êtes à jour." -#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:133 msgid "latest dev version" msgstr "dernière version de développement" -#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:139 msgid "a more recent development version is available." msgstr "une version de développement plus récente est disponible." -#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:150 msgid "Change your password" msgstr "Modifier votre mot de passe" -#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:157 msgid "New password:" msgstr "Nouveau mot de passe :" -#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:161 -#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:171 -#: /var/www/poche-i18n/cache/d4/28/e0d08991ec2d8a7b133505e7c651.php:60 -#: /var/www/poche-i18n/cache/ae/26/05eb67771213c16bd8c9aaf2d2c4.php:68 msgid "Password" msgstr "Mot de passe" -#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:167 msgid "Repeat your new password:" -msgstr "Répétez le nouveau mot de passe :" +msgstr "Répétez votre nouveau mot de passe :" -#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:177 msgid "Update" msgstr "Mettre à jour" -#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:193 msgid "Import" -msgstr "Import" +msgstr "Importer" -#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:197 msgid "Please execute the import script locally, it can take a very long time." -msgstr "Merci d'exécuter l'import en local, cela peut prendre du temps. " +msgstr "Merci d'exécuter l'import en local, cela peut prendre du temps." -#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:201 msgid "More infos in the official doc:" -msgstr "Plus d'infos sur la documentation officielle :" +msgstr "Plus d'infos sur la documentation officielle" -#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:206 msgid "import from Pocket" -msgstr "l'import depuis Pocket est terminé." +msgstr "import depuis Pocket" -#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:210 msgid "import from Readability" -msgstr "l'import depuis Readability est terminé." +msgstr "import depuis Readability" -#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:214 msgid "import from Instapaper" -msgstr "Import depuis Instapaper" +msgstr "import depuis Instapaper" -#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:220 msgid "Export your poche datas" msgstr "Exporter vos données de poche" -#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:224 msgid "Click here" msgstr "Cliquez-ici" -#: /var/www/poche-i18n/cache/c9/b0/845a8dc93165e6c00b6b43068799.php:226 msgid "to export your poche datas." msgstr "pour exporter vos données de poche." -#: /var/www/poche-i18n/cache/7a/1e/68e6b4aec1301ae024cc85232e7c.php:46 -#: /var/www/poche-i18n/cache/7a/1e/68e6b4aec1301ae024cc85232e7c.php:139 -#: /var/www/poche-i18n/cache/30/97/b548692380c89d047a16cec7af79.php:22 msgid "back to home" msgstr "retour à l'accueil" -#: /var/www/poche-i18n/cache/7a/1e/68e6b4aec1301ae024cc85232e7c.php:50 -#: /var/www/poche-i18n/cache/7a/1e/68e6b4aec1301ae024cc85232e7c.php:147 -#: /var/www/poche-i18n/cache/dd/a8/530129765655dcde0a70a31a78b6.php:119 -msgid "toggle mark as read" -msgstr "marquer comme lu" - -#: /var/www/poche-i18n/cache/7a/1e/68e6b4aec1301ae024cc85232e7c.php:60 -#: /var/www/poche-i18n/cache/7a/1e/68e6b4aec1301ae024cc85232e7c.php:157 -#: /var/www/poche-i18n/cache/dd/a8/530129765655dcde0a70a31a78b6.php:129 -msgid "toggle favorite" -msgstr "favori" - -#: /var/www/poche-i18n/cache/7a/1e/68e6b4aec1301ae024cc85232e7c.php:70 -#: /var/www/poche-i18n/cache/7a/1e/68e6b4aec1301ae024cc85232e7c.php:167 -#: /var/www/poche-i18n/cache/dd/a8/530129765655dcde0a70a31a78b6.php:139 -msgid "delete" -msgstr "supprimer" - -#: /var/www/poche-i18n/cache/7a/1e/68e6b4aec1301ae024cc85232e7c.php:82 -#: /var/www/poche-i18n/cache/7a/1e/68e6b4aec1301ae024cc85232e7c.php:179 -msgid "tweet" -msgstr "tweeter" - -#: /var/www/poche-i18n/cache/7a/1e/68e6b4aec1301ae024cc85232e7c.php:93 -#: /var/www/poche-i18n/cache/7a/1e/68e6b4aec1301ae024cc85232e7c.php:190 -msgid "email" -msgstr "envoyer par email" - -#: /var/www/poche-i18n/cache/7a/1e/68e6b4aec1301ae024cc85232e7c.php:109 -#: /var/www/poche-i18n/cache/7a/1e/68e6b4aec1301ae024cc85232e7c.php:125 -#: /var/www/poche-i18n/cache/dd/a8/530129765655dcde0a70a31a78b6.php:153 -msgid "original" -msgstr "original" - -#: /var/www/poche-i18n/cache/7a/1e/68e6b4aec1301ae024cc85232e7c.php:143 -msgid "back to top" -msgstr "retour en haut de page" - -#: /var/www/poche-i18n/cache/7a/1e/68e6b4aec1301ae024cc85232e7c.php:198 -msgid "this article appears wrong?" -msgstr "cet article s'affiche mal ?" - -#: /var/www/poche-i18n/cache/7a/1e/68e6b4aec1301ae024cc85232e7c.php:200 -msgid "create an issue" -msgstr "créer un ticket" - -#: /var/www/poche-i18n/cache/7a/1e/68e6b4aec1301ae024cc85232e7c.php:202 -msgid "or" -msgstr "ou" - -#: /var/www/poche-i18n/cache/7a/1e/68e6b4aec1301ae024cc85232e7c.php:206 -msgid "contact us by mail" -msgstr "contactez-nous par email" - -#: /var/www/poche-i18n/cache/88/8a/ee3b7080c13204391c14947a0c2c.php:22 -msgid "powered by" -msgstr "propulsé par" - -#: /var/www/poche-i18n/cache/d4/28/e0d08991ec2d8a7b133505e7c651.php:31 msgid "installation" msgstr "installation" -#: /var/www/poche-i18n/cache/d4/28/e0d08991ec2d8a7b133505e7c651.php:42 msgid "install your poche" msgstr "installez votre poche" -#: /var/www/poche-i18n/cache/d4/28/e0d08991ec2d8a7b133505e7c651.php:47 msgid "" "poche is still not installed. Please fill the below form to install it. " -"Don't hesitate to read " -"the documentation on poche website." +"Don't hesitate to read the documentation " +"on poche website." msgstr "" -"poche n'est pas encore installé. Merci de remplir les champs ci-dessous pour " -"l'installer. N'hésitez pas à lire la documentation sur le site de poche." +"poche n'est pas encore installé. Merci de remplir le formulaire suivant pour " +"l'installer. N'hésitez pas à lire la " +"documentation sur le site de poche." -#: /var/www/poche-i18n/cache/d4/28/e0d08991ec2d8a7b133505e7c651.php:53 -#: /var/www/poche-i18n/cache/ae/26/05eb67771213c16bd8c9aaf2d2c4.php:55 msgid "Login" msgstr "Nom d'utilisateur" -#: /var/www/poche-i18n/cache/d4/28/e0d08991ec2d8a7b133505e7c651.php:67 msgid "Repeat your password" msgstr "Répétez votre mot de passe" -#: /var/www/poche-i18n/cache/d4/28/e0d08991ec2d8a7b133505e7c651.php:74 msgid "Install" msgstr "Installer" -#: /var/www/poche-i18n/cache/ae/26/05eb67771213c16bd8c9aaf2d2c4.php:31 -#: /var/www/poche-i18n/cache/ae/26/05eb67771213c16bd8c9aaf2d2c4.php:42 -msgid "login to your poche" -msgstr "Se connecter à votre poche" - -#: /var/www/poche-i18n/cache/ae/26/05eb67771213c16bd8c9aaf2d2c4.php:48 -msgid "you are in demo mode, some features may be disabled." -msgstr "" -"vous êtes en mode démo, certaines fonctionnalités sont peut-être désactivées." +msgid "back to top" +msgstr "retour en haut de page" -#: /var/www/poche-i18n/cache/ae/26/05eb67771213c16bd8c9aaf2d2c4.php:80 -msgid "Stay signed in" -msgstr "rester connecté" +msgid "favoris" +msgstr "favoris" -#: /var/www/poche-i18n/cache/ae/26/05eb67771213c16bd8c9aaf2d2c4.php:86 -msgid "(Do not check on public computers)" -msgstr "(à ne pas cocher sur un ordinateur public)" +msgid "archive" +msgstr "archive" -#: /var/www/poche-i18n/cache/ae/26/05eb67771213c16bd8c9aaf2d2c4.php:93 -msgid "Sign in" -msgstr "Se connecter" +msgid "unread" +msgstr "non lus" -#: /var/www/poche-i18n/cache/dd/a8/530129765655dcde0a70a31a78b6.php:55 -#: /var/www/poche-i18n/cache/dd/a8/530129765655dcde0a70a31a78b6.php:57 msgid "by date asc" msgstr "par date asc" -#: /var/www/poche-i18n/cache/dd/a8/530129765655dcde0a70a31a78b6.php:59 msgid "by date" msgstr "par date" -#: /var/www/poche-i18n/cache/dd/a8/530129765655dcde0a70a31a78b6.php:65 -#: /var/www/poche-i18n/cache/dd/a8/530129765655dcde0a70a31a78b6.php:67 msgid "by date desc" msgstr "par date desc" -#: /var/www/poche-i18n/cache/dd/a8/530129765655dcde0a70a31a78b6.php:75 -#: /var/www/poche-i18n/cache/dd/a8/530129765655dcde0a70a31a78b6.php:77 msgid "by title asc" msgstr "par titre asc" -#: /var/www/poche-i18n/cache/dd/a8/530129765655dcde0a70a31a78b6.php:79 msgid "by title" msgstr "par titre" -#: /var/www/poche-i18n/cache/dd/a8/530129765655dcde0a70a31a78b6.php:85 -#: /var/www/poche-i18n/cache/dd/a8/530129765655dcde0a70a31a78b6.php:87 msgid "by title desc" msgstr "par titre desc" -#~ msgid "Please choose between Pocket & Readabilty :" -#~ msgstr "Merci de choisir entre Pocket & Readability :" +msgid "No link available here!" +msgstr "Aucun lien n'est disponible ici !" + +msgid "toggle mark as read" +msgstr "marquer comme lu / non lu" + +msgid "toggle favorite" +msgstr "marquer comme favori" + +msgid "delete" +msgstr "supprimer" -#~ msgid "Bye bye Pocket, let's go !" -#~ msgstr "Bye bye Pocket, en route !" +msgid "original" +msgstr "original" -#~ msgid "Bye bye Readability, let's go !" -#~ msgstr "Bye bye Readability, en route !" +msgid "results" +msgstr "résultats" -#~ msgid "Welcome to poche !" -#~ msgstr "Bienvenue dans poche !" +msgid "tweet" +msgstr "tweet" -#~ msgid "Error with the import." -#~ msgstr "Erreur durant l'import." +msgid "email" +msgstr "email" -#~ msgid "Wrong token." -#~ msgstr "Mauvais jeton." +msgid "shaarli" +msgstr "shaarli" -#~ msgid "Login failed !" -#~ msgstr "Connexion échouée." +msgid "flattr" +msgstr "flattr" -#~ msgid "your password has been updated" -#~ msgstr "Votre mot de passe a été mis à jour. " +msgid "this article appears wrong?" +msgstr "cet article s'affiche mal ?" -#~ msgid "in demo mode, you can't update password" -#~ msgstr "En mode démo, le mot de passe ne peut être modifié." +msgid "create an issue" +msgstr "créez un ticket" -#~ msgid "" -#~ "your password can't be empty and you have to repeat it in the second field" -#~ msgstr "" -#~ "Votre mot de passe ne peut être vide et vous devez le répéter dans le " -#~ "second champ." +msgid "or" +msgstr "ou" -#~ msgid "error during url preparation : the link wasn't added" -#~ msgstr "erreur durant l'insertion : le lien n'a pas été ajouté" +msgid "contact us by mail" +msgstr "contactez-nous par email" -#~ msgid "error during url preparation : the link is not valid" -#~ msgstr "erreur durant la préparation de l'URL : le lien n'est pas valide" +msgid "plop" +msgstr "plop" -#~ msgid "TEST" -#~ msgstr "NICOLAS" +msgid "home" +msgstr "accueil" + +msgid "favorites" +msgstr "favoris" + +msgid "logout" +msgstr "déconnexion" + +msgid "powered by" +msgstr "propulsé par" + +msgid "debug mode is on so cache is off." +msgstr "le mode de debug est actif, le cache est donc désactivé." + +msgid "your poche version:" +msgstr "votre version de poche :" + +msgid "storage:" +msgstr "stockage :" + +msgid "login to your poche" +msgstr "se connecter à votre poche" + +msgid "you are in demo mode, some features may be disabled." +msgstr "" +"vous êtes en mode démo, certaines fonctionnalités peuvent être désactivées." + +msgid "Stay signed in" +msgstr "Rester connecté" + +msgid "(Do not check on public computers)" +msgstr "(ne pas cocher sur un ordinateur public)" + +msgid "Sign in" +msgstr "Se connecter" -- cgit v1.2.3 From 084ec2a63df90b775195ad874f8fc0d7fbefbc93 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicolas=20L=C5=93uillet?= Date: Thu, 12 Sep 2013 14:26:30 +0200 Subject: change strings for gettext --- tpl/config.twig | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/tpl/config.twig b/tpl/config.twig index 70788876..f125c99f 100644 --- a/tpl/config.twig +++ b/tpl/config.twig @@ -6,11 +6,11 @@ {% endblock %} {% block content %}

    {% trans "Poching a link" %}

    -

    You can poche a link by several methods: (?)

    +

    {% trans "You can poche a link by several methods:" %} (?)

    {% trans "Updating poche" %}

    @@ -51,9 +51,9 @@

    {% trans "Please execute the import script locally, it can take a very long time." %}

    {% trans "More infos in the official doc:" %} inthepoche.com

    {% trans "Export your poche datas" %}

    -- cgit v1.2.3 From b9523a0ba09b5641e93fcd8300dd1a9f5145da2d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicolas=20L=C5=93uillet?= Date: Thu, 12 Sep 2013 19:28:59 +0200 Subject: fix bug #209: titles with colon bad parsed --- inc/poche/PocheReadability.php | 46 ++++++++++++++++++++++++++++++++++++++++++ inc/poche/Url.class.php | 2 +- inc/poche/config.inc.php | 10 ++------- 3 files changed, 49 insertions(+), 9 deletions(-) create mode 100644 inc/poche/PocheReadability.php 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 @@ +getInnerText($this->dom->getElementsByTagName('title')->item(0)); + } catch(Exception $e) {} + + if (preg_match('/ [\|\-] /', $curTitle)) + { + $curTitle = preg_replace('/(.*)[\|\-] .*/i', '$1', $origTitle); + + if (count(explode(' ', $curTitle)) < 3) { + $curTitle = preg_replace('/[^\|\-]*[\|\-](.*)/i', '$1', $origTitle); + } + } + else if(strlen($curTitle) > 150 || strlen($curTitle) < 15) + { + $hOnes = $this->dom->getElementsByTagName('h1'); + if($hOnes->length == 1) + { + $curTitle = $this->getInnerText($hOnes->item(0)); + } + } + + $curTitle = trim($curTitle); + + if (count(explode(' ', $curTitle)) <= 4) { + $curTitle = $origTitle; + } + + $articleTitle = $this->dom->createElement('h1'); + $articleTitle->innerHTML = $curTitle; + + return $articleTitle; + } +} \ 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 } if (isset($splink)) { // Build DOM tree from HTML - $readability = new Readability($html, $url); + $readability = new PocheReadability($html, $url); $xpath = new DOMXPath($readability->dom); // Loop through single_page_link xpath expressions $single_page_url = null; diff --git a/inc/poche/config.inc.php b/inc/poche/config.inc.php index 45526695..aaa26af8 100755 --- a/inc/poche/config.inc.php +++ b/inc/poche/config.inc.php @@ -20,6 +20,7 @@ require_once __DIR__ . '/../../inc/poche/Url.class.php'; require_once __DIR__ . '/../../inc/3rdparty/class.messages.php'; require_once __DIR__ . '/../../inc/poche/Poche.class.php'; require_once __DIR__ . '/../../inc/3rdparty/Readability.php'; +require_once __DIR__ . '/../../inc/poche/PocheReadability.php'; require_once __DIR__ . '/../../inc/3rdparty/Encoding.php'; require_once __DIR__ . '/../../inc/poche/Database.class.php'; require_once __DIR__ . '/../../vendor/autoload.php'; @@ -47,11 +48,4 @@ if (!ini_get('date.timezone') || !@date_default_timezone_set(ini_get('date.timez date_default_timezone_set('UTC'); } -$poche = new Poche(); -#XSRF protection with token -// if (!empty($_POST)) { -// if (!Session::isToken($_POST['token'])) { -// die(_('Wrong token')); -// } -// unset($_SESSION['tokens']); -// } \ No newline at end of file +$poche = new Poche(); \ No newline at end of file -- cgit v1.2.3 From 1a08e7b6f6f4dead5556435033e8ac7634144ae0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicolas=20L=C5=93uillet?= Date: Fri, 13 Sep 2013 09:01:33 +0200 Subject: titles with colon bad parsed --- inc/3rdparty/content-extractor/ContentExtractor.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 } // load and parse html - $this->readability = new Readability($html, $url); + $this->readability = new PocheReadability($html, $url); // we use xpath to find elements in the given HTML document // see http://en.wikipedia.org/wiki/XPath_1.0 -- cgit v1.2.3 From 48207b6814eeaef30a0baf64c3ed1e1d148de6fe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicolas=20L=C5=93uillet?= Date: Fri, 13 Sep 2013 10:29:03 +0200 Subject: remove poche.js --- tpl/js/poche.js | 2 -- 1 file changed, 2 deletions(-) delete mode 100644 tpl/js/poche.js diff --git a/tpl/js/poche.js b/tpl/js/poche.js deleted file mode 100644 index c2e02f9c..00000000 --- a/tpl/js/poche.js +++ /dev/null @@ -1,2 +0,0 @@ -function showinput(){ -$('#inputform').fadeIn('fast');} \ No newline at end of file -- cgit v1.2.3 From 10ab20d8e21b2fa3f4d8e86909a7cb4d0d9a84d2 Mon Sep 17 00:00:00 2001 From: NumEricR Date: Mon, 26 Aug 2013 22:21:22 +0200 Subject: Fix missing lang in html tag of update pages --- install/update.php | 2 +- install/update_to_1beta3.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) 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(); - + updating poche 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'; - + updating poche -- cgit v1.2.3 From 1b2abab6ddbb3460b8981a296fe04477a42801b3 Mon Sep 17 00:00:00 2001 From: NumEricR Date: Mon, 26 Aug 2013 22:25:03 +0200 Subject: Add lang attribute in html tag --- inc/poche/Tools.class.php | 5 +++++ index.php | 1 + tpl/layout.twig | 1 + 3 files changed, 7 insertions(+) diff --git a/inc/poche/Tools.class.php b/inc/poche/Tools.class.php index 3a792d43..1ab90be1 100644 --- a/inc/poche/Tools.class.php +++ b/inc/poche/Tools.class.php @@ -248,4 +248,9 @@ class Tools fclose($fp); } } + + public static function getDocLanguage($userlanguage) { + $lang = explode('.', $userlanguage); + return str_replace('_', '-', $lang[0]); + } } \ No newline at end of file diff --git a/index.php b/index.php index 7b775c41..52a400a8 100644 --- a/index.php +++ b/index.php @@ -50,6 +50,7 @@ elseif (isset($_GET['plainurl']) && !empty($_GET['plainurl'])) { # vars to send to templates $tpl_vars = array( + 'lang' => Tools::getDocLanguage($poche->user->getConfigValue('language')), 'referer' => $referer, 'view' => $view, 'poche_url' => Tools::getPocheUrl(), diff --git a/tpl/layout.twig b/tpl/layout.twig index 07ca231c..bb20075a 100644 --- a/tpl/layout.twig +++ b/tpl/layout.twig @@ -4,6 +4,7 @@ + -- cgit v1.2.3 From d081f272b0b63cdf86ab7666747b63dbff7f068e Mon Sep 17 00:00:00 2001 From: NumEricR Date: Mon, 26 Aug 2013 22:27:51 +0200 Subject: Use dynamic lang value in IE conditional comments --- tpl/layout.twig | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/tpl/layout.twig b/tpl/layout.twig index bb20075a..fec7054a 100644 --- a/tpl/layout.twig +++ b/tpl/layout.twig @@ -1,9 +1,8 @@ - - - - - + + + + -- cgit v1.2.3 From a8778dc23e60e65b47e2aae5d4cdf92660ee4c02 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicolas=20L=C5=93uillet?= Date: Tue, 17 Sep 2013 13:27:16 +0200 Subject: fix bug #105: Scroll position save / sync --- tpl/js/restoreScroll.js | 25 +++++++++++++++++++++++++ tpl/view.twig | 19 +++++++++++++++++++ 2 files changed, 44 insertions(+) create mode 100644 tpl/js/restoreScroll.js diff --git a/tpl/js/restoreScroll.js b/tpl/js/restoreScroll.js new file mode 100644 index 00000000..331c9e19 --- /dev/null +++ b/tpl/js/restoreScroll.js @@ -0,0 +1,25 @@ +function supportsLocalStorage() { + try { + return 'localStorage' in window && window['localStorage'] !== null; + } catch (e) { + return false; + } +} + +function savePercent(id, percent) { + if (!supportsLocalStorage()) { return false; } + localStorage["poche.article." + id + ".percent"] = percent; + return true; +} + +function retrievePercent(id) { + if (!supportsLocalStorage()) { return false; } + + var bheight = $(document).height(); + var percent = localStorage["poche.article." + id + ".percent"]; + var scroll = bheight * percent; + + $('html,body').animate({scrollTop: scroll}, 'fast'); + + return true; +} \ No newline at end of file diff --git a/tpl/view.twig b/tpl/view.twig index 2b6d91d5..f9405f45 100644 --- a/tpl/view.twig +++ b/tpl/view.twig @@ -37,4 +37,23 @@

    {% trans "this article appears wrong?" %} {% trans "create an issue" %} {% trans "or" %} {% trans "contact us by mail" %}

    + + {% endblock %} \ No newline at end of file -- cgit v1.2.3 From f6597c7cb90e9bfa96f01f5f78f98cd72696da55 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicolas=20L=C5=93uillet?= Date: Tue, 17 Sep 2013 14:48:16 +0200 Subject: fix bug #127: update session class --- inc/3rdparty/Session.class.php | 283 +++++++++++++++++++++++++++++++---------- inc/poche/Poche.class.php | 1 + inc/poche/config.inc.php | 10 +- 3 files changed, 223 insertions(+), 71 deletions(-) diff --git a/inc/3rdparty/Session.class.php b/inc/3rdparty/Session.class.php index 3162f507..08126bad 100644 --- a/inc/3rdparty/Session.class.php +++ b/inc/3rdparty/Session.class.php @@ -1,136 +1,279 @@ $value) { - $_SESSION[$key] = $value; - } - if ($login==$login_test && $password==$password_test){ - // generate unique random number to sign forms (HMAC) - $_SESSION['uid'] = sha1(uniqid('',true).'_'.mt_rand()); - $_SESSION['info']=Session::_allInfos(); - $_SESSION['username']=$login; - // Set session expiration. - $_SESSION['expires_on']=time()+Session::$inactivity_timeout; - return true; + self::banInit(); + if (self::banCanLogin()) { + if ($login === $loginTest && $password === $passwordTest) { + self::banLoginOk(); + // Generate unique random number to sign forms (HMAC) + $_SESSION['uid'] = sha1(uniqid('', true).'_'.mt_rand()); + $_SESSION['ip'] = self::_allIPs(); + $_SESSION['username'] = $login; + // Set session expiration. + $_SESSION['expires_on'] = time() + self::$inactivityTimeout; + + foreach ($pValues as $key => $value) { + $_SESSION[$key] = $value; + } + + return true; + } + self::banLoginFailed(); } + return false; } - // Force logout + /** + * Unset SESSION variable to force logout + */ public static function logout() { - unset($_SESSION['uid'],$_SESSION['info'],$_SESSION['expires_on'],$_SESSION['tokens'], $_SESSION['login'], $_SESSION['pass'], $_SESSION['poche_user']); + unset($_SESSION['uid'], $_SESSION['ip'], $_SESSION['expires_on']); } - // Make sure user is logged in. + /** + * Make sure user is logged in. + * + * @return true|false True if user is logged in, false otherwise + */ public static function isLogged() { if (!isset ($_SESSION['uid']) - || $_SESSION['info']!=Session::_allInfos() - || time()>=$_SESSION['expires_on']){ - Session::logout(); + || (self::$disableSessionProtection === false + && $_SESSION['ip'] !== self::_allIPs()) + || time() >= $_SESSION['expires_on']) { + self::logout(); + return false; } // User accessed a page : Update his/her session expiration date. - $_SESSION['expires_on']=time()+Session::$inactivity_timeout; + $_SESSION['expires_on'] = time() + self::$inactivityTimeout; + if (!empty($_SESSION['longlastingsession'])) { + $_SESSION['expires_on'] += $_SESSION['longlastingsession']; + } + return true; } - // Returns a token. - public static function getToken() + /** + * Create a token, store it in SESSION and return it + * + * @param string $salt to prevent birthday attack + * + * @return string Token created + */ + public static function getToken($salt = '') { - if (!isset($_SESSION['tokens'])){ + if (!isset($_SESSION['tokens'])) { $_SESSION['tokens']=array(); } // We generate a random string and store it on the server side. - $rnd = sha1(uniqid('',true).'_'.mt_rand()); + $rnd = sha1(uniqid('', true).'_'.mt_rand().$salt); $_SESSION['tokens'][$rnd]=1; + return $rnd; } - // Tells if a token is ok. Using this function will destroy the token. - // return true if token is ok. + /** + * Tells if a token is ok. Using this function will destroy the token. + * + * @param string $token Token to test + * + * @return true|false True if token is correct, false otherwise + */ public static function isToken($token) { - if (isset($_SESSION['tokens'][$token])) - { + if (isset($_SESSION['tokens'][$token])) { unset($_SESSION['tokens'][$token]); // Token is used: destroy it. + return true; // Token is ok. } + return false; // Wrong token, or already used. } -} \ No newline at end of file + + /** + * Signal a failed login. Will ban the IP if too many failures: + */ + public static function banLoginFailed() + { + if (self::$banFile !== '') { + $ip = $_SERVER["REMOTE_ADDR"]; + $gb = $GLOBALS['IPBANS']; + + if (!isset($gb['FAILURES'][$ip])) { + $gb['FAILURES'][$ip] = 0; + } + $gb['FAILURES'][$ip]++; + if ($gb['FAILURES'][$ip] > (self::$banAfter - 1)) { + $gb['BANS'][$ip]= time() + self::$banDuration; + } + + $GLOBALS['IPBANS'] = $gb; + file_put_contents(self::$banFile, ""); + } + } + + /** + * Signals a successful login. Resets failed login counter. + */ + public static function banLoginOk() + { + if (self::$banFile !== '') { + $ip = $_SERVER["REMOTE_ADDR"]; + $gb = $GLOBALS['IPBANS']; + unset($gb['FAILURES'][$ip]); unset($gb['BANS'][$ip]); + $GLOBALS['IPBANS'] = $gb; + file_put_contents(self::$banFile, ""); + } + } + + /** + * Ban init + */ + public static function banInit() + { + if (self::$banFile !== '') { + if (!is_file(self::$banFile)) { + file_put_contents(self::$banFile, "array(), 'BANS'=>array()), true).";\n?>"); + } + include self::$banFile; + } + } + + /** + * Checks if the user CAN login. If 'true', the user can try to login. + * + * @return boolean true if user is banned, false otherwise + */ + public static function banCanLogin() + { + if (self::$banFile !== '') { + $ip = $_SERVER["REMOTE_ADDR"]; + $gb = $GLOBALS['IPBANS']; + if (isset($gb['BANS'][$ip])) { + // User is banned. Check if the ban has expired: + if ($gb['BANS'][$ip] <= time()) { + // Ban expired, user can try to login again. + unset($gb['FAILURES'][$ip]); + unset($gb['BANS'][$ip]); + file_put_contents(self::$banFile, ""); + + return true; // Ban has expired, user can login. + } + + return false; // User is banned. + } + } + + return true; // User is not banned. + } +} diff --git a/inc/poche/Poche.class.php b/inc/poche/Poche.class.php index 9db4a034..2f0f7038 100644 --- a/inc/poche/Poche.class.php +++ b/inc/poche/Poche.class.php @@ -93,6 +93,7 @@ class Poche private function init() { Tools::initPhp(); + Session::$sessionName = 'poche'; Session::init(); if (isset($_SESSION['poche_user']) && $_SESSION['poche_user'] != array()) { diff --git a/inc/poche/config.inc.php b/inc/poche/config.inc.php index aaa26af8..9247c292 100755 --- a/inc/poche/config.inc.php +++ b/inc/poche/config.inc.php @@ -48,4 +48,12 @@ if (!ini_get('date.timezone') || !@date_default_timezone_set(ini_get('date.timez date_default_timezone_set('UTC'); } -$poche = new Poche(); \ No newline at end of file +$poche = new Poche(); + +#XSRF protection with token +if (!empty($_POST)) { + if (!Session::isToken($_POST['token'])) { + die(_('Wrong token')); + } + unset($_SESSION['tokens']); +} \ No newline at end of file -- cgit v1.2.3 From 0d64be15de12cd949fc9b9d2b8352a1815da965a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicolas=20L=C5=93uillet?= Date: Wed, 18 Sep 2013 09:25:28 +0200 Subject: remove csrf check --- inc/poche/config.inc.php | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/inc/poche/config.inc.php b/inc/poche/config.inc.php index 9247c292..aaa26af8 100755 --- a/inc/poche/config.inc.php +++ b/inc/poche/config.inc.php @@ -48,12 +48,4 @@ if (!ini_get('date.timezone') || !@date_default_timezone_set(ini_get('date.timez date_default_timezone_set('UTC'); } -$poche = new Poche(); - -#XSRF protection with token -if (!empty($_POST)) { - if (!Session::isToken($_POST['token'])) { - die(_('Wrong token')); - } - unset($_SESSION['tokens']); -} \ No newline at end of file +$poche = new Poche(); \ No newline at end of file -- cgit v1.2.3 From 705250b93dc71ae91d3c305b51e7a20611873805 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicolas=20L=C5=93uillet?= Date: Fri, 20 Sep 2013 09:32:49 +0200 Subject: fixes with new session class --- inc/3rdparty/Session.class.php | 2 +- inc/poche/Poche.class.php | 9 --------- 2 files changed, 1 insertion(+), 10 deletions(-) diff --git a/inc/3rdparty/Session.class.php b/inc/3rdparty/Session.class.php index 08126bad..df913a06 100644 --- a/inc/3rdparty/Session.class.php +++ b/inc/3rdparty/Session.class.php @@ -136,7 +136,7 @@ class Session */ public static function logout() { - unset($_SESSION['uid'], $_SESSION['ip'], $_SESSION['expires_on']); + unset($_SESSION['uid'],$_SESSION['ip'],$_SESSION['expires_on'],$_SESSION['tokens'], $_SESSION['login'], $_SESSION['pass'], $_SESSION['poche_user']); } /** diff --git a/inc/poche/Poche.class.php b/inc/poche/Poche.class.php index 2f0f7038..8770c7f7 100644 --- a/inc/poche/Poche.class.php +++ b/inc/poche/Poche.class.php @@ -331,16 +331,7 @@ class Poche if ($user != array()) { # Save login into Session Session::login($user['username'], $user['password'], $_POST['login'], Tools::encodeString($_POST['password'] . $_POST['login']), array('poche_user' => new User($user))); - $this->messages->add('s', _('welcome to your poche')); - if (!empty($_POST['longlastingsession'])) { - $_SESSION['longlastingsession'] = 31536000; - $_SESSION['expires_on'] = time() + $_SESSION['longlastingsession']; - session_set_cookie_params($_SESSION['longlastingsession']); - } else { - session_set_cookie_params(0); - } - session_regenerate_id(true); Tools::logm('login successful'); Tools::redirect($referer); } -- cgit v1.2.3 From 00dbaf90bc44ef3ed0abaebb15307756e054a027 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicolas=20L=C5=93uillet?= Date: Fri, 20 Sep 2013 10:21:39 +0200 Subject: merge #224 --- .gitignore | 2 +- .gitmodules | 5 +- inc/3rdparty/site_config | 1 - inc/poche/Database.class.php | 16 +- inc/poche/Poche.class.php | 293 +++++++++++++++++----- inc/poche/Tools.class.php | 40 ++- inc/poche/config.inc.php | 89 +++---- inc/poche/config.inc.php.new | 56 +++++ inc/poche/global.inc.php | 72 ++++++ index.php | 62 +++-- themes | 1 + tpl/_bookmarklet.twig | 3 - tpl/_footer.twig | 4 - tpl/_head.twig | 12 - tpl/_menu.twig | 7 - tpl/_messages.twig | 1 - tpl/_top.twig | 7 - tpl/config.twig | 61 ----- tpl/css/knacss.css | 1 - tpl/css/messages.css | 13 - tpl/css/print.css | 19 -- tpl/css/style-light.css | 55 ----- tpl/css/style.css | 300 ----------------------- tpl/error.twig | 6 - tpl/export.twig | 1 - tpl/home.twig | 49 ---- tpl/img/apple-touch-icon-144x144-precomposed.png | Bin 7349 -> 0 bytes tpl/img/apple-touch-icon-72x72-precomposed.png | Bin 6168 -> 0 bytes tpl/img/apple-touch-icon.png | Bin 5803 -> 0 bytes tpl/img/favicon.ico | Bin 346 -> 0 bytes tpl/img/light/backtotop.png | Bin 326 -> 0 bytes tpl/img/light/checkmark-off.png | Bin 277 -> 0 bytes tpl/img/light/checkmark-on.png | Bin 235 -> 0 bytes tpl/img/light/down.png | Bin 216 -> 0 bytes tpl/img/light/envelop.png | Bin 285 -> 0 bytes tpl/img/light/flattr.png | Bin 3521 -> 0 bytes tpl/img/light/left.png | Bin 196 -> 0 bytes tpl/img/light/remove.png | Bin 252 -> 0 bytes tpl/img/light/shaarli.png | Bin 729 -> 0 bytes tpl/img/light/star-off.png | Bin 314 -> 0 bytes tpl/img/light/star-on.png | Bin 281 -> 0 bytes tpl/img/light/top.png | Bin 212 -> 0 bytes tpl/img/light/twitter.png | Bin 297 -> 0 bytes tpl/img/logo.png | Bin 1350 -> 0 bytes tpl/img/messages/close.png | Bin 662 -> 0 bytes tpl/img/messages/cross.png | Bin 655 -> 0 bytes tpl/img/messages/help.png | Bin 786 -> 0 bytes tpl/img/messages/tick.png | Bin 537 -> 0 bytes tpl/img/messages/warning.png | Bin 666 -> 0 bytes tpl/install.twig | 28 --- tpl/js/jquery-2.0.3.min.js | 6 - tpl/js/restoreScroll.js | 25 -- tpl/layout.twig | 31 --- tpl/login.twig | 32 --- tpl/view.twig | 59 ----- 55 files changed, 476 insertions(+), 881 deletions(-) delete mode 160000 inc/3rdparty/site_config create mode 100755 inc/poche/config.inc.php.new create mode 100644 inc/poche/global.inc.php create mode 160000 themes delete mode 100644 tpl/_bookmarklet.twig delete mode 100644 tpl/_footer.twig delete mode 100644 tpl/_head.twig delete mode 100644 tpl/_menu.twig delete mode 100644 tpl/_messages.twig delete mode 100644 tpl/_top.twig delete mode 100644 tpl/config.twig delete mode 100644 tpl/css/knacss.css delete mode 100755 tpl/css/messages.css delete mode 100644 tpl/css/print.css delete mode 100644 tpl/css/style-light.css delete mode 100644 tpl/css/style.css delete mode 100644 tpl/error.twig delete mode 100644 tpl/export.twig delete mode 100644 tpl/home.twig delete mode 100644 tpl/img/apple-touch-icon-144x144-precomposed.png delete mode 100644 tpl/img/apple-touch-icon-72x72-precomposed.png delete mode 100644 tpl/img/apple-touch-icon.png delete mode 100644 tpl/img/favicon.ico delete mode 100755 tpl/img/light/backtotop.png delete mode 100644 tpl/img/light/checkmark-off.png delete mode 100644 tpl/img/light/checkmark-on.png delete mode 100644 tpl/img/light/down.png delete mode 100755 tpl/img/light/envelop.png delete mode 100644 tpl/img/light/flattr.png delete mode 100755 tpl/img/light/left.png delete mode 100644 tpl/img/light/remove.png delete mode 100644 tpl/img/light/shaarli.png delete mode 100644 tpl/img/light/star-off.png delete mode 100644 tpl/img/light/star-on.png delete mode 100755 tpl/img/light/top.png delete mode 100755 tpl/img/light/twitter.png delete mode 100644 tpl/img/logo.png delete mode 100755 tpl/img/messages/close.png delete mode 100755 tpl/img/messages/cross.png delete mode 100755 tpl/img/messages/help.png delete mode 100755 tpl/img/messages/tick.png delete mode 100755 tpl/img/messages/warning.png delete mode 100644 tpl/install.twig delete mode 100644 tpl/js/jquery-2.0.3.min.js delete mode 100644 tpl/js/restoreScroll.js delete mode 100644 tpl/layout.twig delete mode 100644 tpl/login.twig delete mode 100644 tpl/view.twig diff --git a/.gitignore b/.gitignore index 25818a8d..b73c4b40 100644 --- a/.gitignore +++ b/.gitignore @@ -5,4 +5,4 @@ composer.phar db/poche.sqlite output phpdoc* -inc/poche/myconfig.inc.php \ No newline at end of file +inc/poche/config.inc.php \ No newline at end of file diff --git a/.gitmodules b/.gitmodules index fcc2e52c..9e7ad725 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,6 @@ [submodule "inc/3rdparty/site_config"] path = inc/3rdparty/site_config - url = git://github.com/inthepoche/site_config.git + url = git@github.com:inthepoche/site_config.git +[submodule "themes"] + path = themes + url = git@github.com:inthepoche/poche-themes.git diff --git a/inc/3rdparty/site_config b/inc/3rdparty/site_config deleted file mode 160000 index fe9f0d3f..00000000 --- a/inc/3rdparty/site_config +++ /dev/null @@ -1 +0,0 @@ -Subproject commit fe9f0d3f60d44a8701f3ecab0c4077a4ed39bfe8 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 { $id_user = intval($this->getLastId($sequence)); $sql = 'INSERT INTO users_config ( user_id, name, value ) VALUES (?, ?, ?)'; - $params = array($id_user, 'pager', '10'); + $params = array($id_user, 'pager', PAGINATION); $query = $this->executeQuery($sql, $params); $sql = 'INSERT INTO users_config ( user_id, name, value ) VALUES (?, ?, ?)'; - $params = array($id_user, 'language', 'en_EN.UTF8'); + $params = array($id_user, 'language', LANG); + $query = $this->executeQuery($sql, $params); + + $sql = 'INSERT INTO users_config ( user_id, name, value ) VALUES (?, ?, ?)'; + $params = array($id_user, 'theme', DEFAULT_THEME); $query = $this->executeQuery($sql, $params); return TRUE; @@ -101,10 +105,16 @@ class Database { return $user; } - public function updatePassword($id, $password) + public function updatePassword($userId, $password) { $sql_update = "UPDATE users SET password=? WHERE id=?"; $params_update = array($password, $id); + $this->updateUserConfig($userId, 'password', $password); + } + + public function updateUserConfig($userId, $key, $value) { + $sql_update = "UPDATE users_config SET `value`=? WHERE `user_id`=? AND `name`=?"; + $params_update = array($value, $userId, $key); $query = $this->executeQuery($sql_update, $params_update); } diff --git a/inc/poche/Poche.class.php b/inc/poche/Poche.class.php index 8770c7f7..67fbd529 100644 --- a/inc/poche/Poche.class.php +++ b/inc/poche/Poche.class.php @@ -10,77 +10,200 @@ class Poche { + public static $canRenderTemplates = true; + public static $configFileAvailable = true; + public $user; public $store; public $tpl; public $messages; public $pagination; - - function __construct() + + private $currentTheme = ''; + private $notInstalledMessage = ''; + + # @todo make this dynamic (actually install themes and save them in the database including author information et cetera) + private $installedThemes = array( + 'default' => array('requires' => array()), + 'dark' => array('requires' => array('default')), + 'dmagenta' => array('requires' => array('default')), + 'solarized' => array('requires' => array('default')), + 'solarized-dark' => array('requires' => array('default')) + ); + + public function __construct() { + if (! $this->configFileIsAvailable()) { + return; + } + + $this->init(); + + if (! $this->themeIsInstalled()) { + return; + } + $this->initTpl(); - if (!$this->checkBeforeInstall()) { - exit; + + if (! $this->systemIsInstalled()) { + return; } + $this->store = new Database(); - $this->init(); $this->messages = new Messages(); # installation - if(!$this->store->isInstalled()) - { + if (! $this->store->isInstalled()) { $this->install(); } } + + private function init() + { + Tools::initPhp(); + Session::$sessionName = 'poche'; + Session::init(); + + if (isset($_SESSION['poche_user']) && $_SESSION['poche_user'] != array()) { + $this->user = $_SESSION['poche_user']; + } else { + # fake user, just for install & login screens + $this->user = new User(); + $this->user->setConfig($this->getDefaultConfig()); + } + + # l10n + $language = $this->user->getConfigValue('language'); + putenv('LC_ALL=' . $language); + setlocale(LC_ALL, $language); + bindtextdomain($language, LOCALE); + textdomain($language); + + # Pagination + $this->pagination = new Paginator($this->user->getConfigValue('pager'), 'p'); + + # Set up theme + $themeDirectory = $this->user->getConfigValue('theme'); + + if ($themeDirectory === false) { + $themeDirectory = DEFAULT_THEME; + } + + $this->currentTheme = $themeDirectory; + } + + public function configFileIsAvailable() { + if (! self::$configFileAvailable) { + $this->notInstalledMessage = 'You have to rename inc/poche/config.inc.php.new to inc/poche/config.inc.php.'; + + return false; + } + return true; + } + + public function themeIsInstalled() { + # Twig is an absolute requirement for Poche to function. Abort immediately if the Composer installer hasn't been run yet + if (! self::$canRenderTemplates) { + $this->notInstalledMessage = 'Twig does not seem to be installed. Please initialize the Composer installation to automatically fetch dependencies. Have a look at the documentation.'; + + return false; + } + + # Check if the selected theme and its requirements are present + if (! is_dir(THEME . '/' . $this->getTheme())) { + $this->notInstalledMessage = 'The currently selected theme (' . $this->getTheme() . ') does not seem to be properly installed (Missing directory: ' . THEME . '/' . $this->getTheme() . ')'; + + self::$canRenderTemplates = false; + + return false; + } + + foreach ($this->installedThemes[$this->getTheme()]['requires'] as $requiredTheme) { + if (! is_dir(THEME . '/' . $requiredTheme)) { + $this->notInstalledMessage = 'The required "' . $requiredTheme . '" theme is missing for the current theme (' . $this->getTheme() . ')'; + + self::$canRenderTemplates = false; + + return false; + } + } + + return true; + } + /** * all checks before installation. + * @todo move HTML to template * @return boolean */ - private function checkBeforeInstall() + public function systemIsInstalled() { $msg = ''; - $allIsGood = TRUE; - - if (!is_writable(CACHE)) { + + $configSalt = defined('SALT') ? constant('SALT') : ''; + + if (empty($configSalt)) { + $msg = '

    error

    You have not yet filled in the SALT value in the config.inc.php file.

    '; + } else if (! is_writable(CACHE)) { Tools::logm('you don\'t have write access on cache directory'); - die('You don\'t have write access on cache directory.'); - } - else if (file_exists('./install/update.php') && !DEBUG_POCHE) { + $msg = '

    error

    You don\'t have write access on cache directory.

    '; + } else if (STORAGE == 'sqlite' && ! file_exists(STORAGE_SQLITE)) { + Tools::logm('sqlite file doesn\'t exist'); + $msg = '

    error

    sqlite file doesn\'t exist, you can find it in install folder.

    '; + } else if (file_exists(ROOT . '/install/update.php') && ! DEBUG_POCHE) { $msg = '

    setup

    It\'s your first time here? Please copy /install/poche.sqlite in db folder. Then, delete install folder.
    If you have already installed poche, an update is needed by clicking here.

    '; - $allIsGood = FALSE; - } - else if (file_exists('./install') && !DEBUG_POCHE) { + } else if (is_dir(ROOT . '/install') && ! DEBUG_POCHE) { $msg = '

    setup

    If you want to update your poche, you just have to delete /install folder.
    To install your poche with sqlite, copy /install/poche.sqlite in /db and delete the folder /install. you have to delete the /install folder before using poche.

    '; - $allIsGood = FALSE; - } - else if (STORAGE == 'sqlite' && !is_writable(STORAGE_SQLITE)) { + } else if (STORAGE == 'sqlite' && ! is_writable(STORAGE_SQLITE)) { Tools::logm('you don\'t have write access on sqlite file'); $msg = '

    error

    You don\'t have write access on sqlite file.

    '; - $allIsGood = FALSE; } - - if (!$allIsGood) { - echo $this->tpl->render('error.twig', array( - 'msg' => $msg - )); + + if (! empty($msg)) { + $this->notInstalledMessage = $msg; + + return false; } - return $allIsGood; + return true; + } + + public function getNotInstalledMessage() { + return $this->notInstalledMessage; } private function initTpl() { - # template engine - $loader = new Twig_Loader_Filesystem(TPL); + $loaderChain = new Twig_Loader_Chain(); + + # add the current theme as first to the loader chain so Twig will look there first for overridden template files + try { + $loaderChain->addLoader(new Twig_Loader_Filesystem(THEME . '/' . $this->getTheme())); + } catch (Twig_Error_Loader $e) { + # @todo isInstalled() should catch this, inject Twig later + die('The currently selected theme (' . $this->getTheme() . ') does not seem to be properly installed (' . THEME . '/' . $this->getTheme() .' is missing)'); + } + + # add all required themes to the loader chain + foreach ($this->installedThemes[$this->getTheme()]['requires'] as $requiredTheme) { + try { + $loaderChain->addLoader(new Twig_Loader_Filesystem(THEME . '/' . DEFAULT_THEME)); + } catch (Twig_Error_Loader $e) { + # @todo isInstalled() should catch this, inject Twig later + die('The required "' . $requiredTheme . '" theme is missing for the current theme (' . $this->getTheme() . ')'); + } + } + if (DEBUG_POCHE) { $twig_params = array(); - } - else { + } else { $twig_params = array('cache' => CACHE); } - $this->tpl = new Twig_Environment($loader, $twig_params); + + $this->tpl = new Twig_Environment($loaderChain, $twig_params); $this->tpl->addExtension(new Twig_Extensions_Extension_I18n()); + # filter to display domain name of an url $filter = new Twig_SimpleFilter('getDomain', 'Tools::getDomain'); $this->tpl->addFilter($filter); @@ -88,39 +211,19 @@ class Poche # filter for reading time $filter = new Twig_SimpleFilter('getReadingTime', 'Tools::getReadingTime'); $this->tpl->addFilter($filter); - } - - private function init() - { - Tools::initPhp(); - Session::$sessionName = 'poche'; - Session::init(); - - if (isset($_SESSION['poche_user']) && $_SESSION['poche_user'] != array()) { - $this->user = $_SESSION['poche_user']; - } - else { - # fake user, just for install & login screens - $this->user = new User(); - $this->user->setConfig($this->getDefaultConfig()); - } - - # l10n - $language = $this->user->getConfigValue('language'); - putenv('LC_ALL=' . $language); - setlocale(LC_ALL, $language); - bindtextdomain($language, LOCALE); - textdomain($language); - - # Pagination - $this->pagination = new Paginator($this->user->getConfigValue('pager'), 'p'); + + # filter for simple filenames in config view + $filter = new Twig_SimpleFilter('getPrettyFilename', function($string) { return str_replace(ROOT, '', $string); }); + $this->tpl->addFilter($filter); } private function install() { Tools::logm('poche still not installed'); echo $this->tpl->render('install.twig', array( - 'token' => Session::getToken() + 'token' => Session::getToken(), + 'theme' => $this->getTheme(), + 'poche_url' => Tools::getPocheUrl() )); if (isset($_GET['install'])) { if (($_POST['password'] == $_POST['password_repeat']) @@ -140,13 +243,41 @@ class Poche } exit(); } + + public function getTheme() { + return $this->currentTheme; + } + + public function getInstalledThemes() { + $handle = opendir(THEME); + $themes = array(); + + while (($theme = readdir($handle)) !== false) { + # Themes are stored in a directory, so all directory names are themes + # @todo move theme installation data to database + if (! is_dir(THEME . '/' . $theme) || in_array($theme, array('..', '.'))) { + continue; + } + + $current = false; + + if ($theme === $this->getTheme()) { + $current = true; + } + + $themes[] = array('name' => $theme, 'current' => $current); + } + + return $themes; + } public function getDefaultConfig() - { + { return array( 'pager' => PAGINATION, 'language' => LANG, - ); + 'theme' => DEFAULT_THEME + ); } /** @@ -231,7 +362,9 @@ class Poche $prod = $this->getPocheVersion('prod'); $compare_dev = version_compare(POCHE_VERSION, $dev); $compare_prod = version_compare(POCHE_VERSION, $prod); + $themes = $this->getInstalledThemes(); $tpl_vars = array( + 'themes' => $themes, 'dev' => $dev, 'prod' => $prod, 'compare_dev' => $compare_dev, @@ -316,6 +449,44 @@ class Poche } } } + + public function updateTheme() + { + # no data + if (empty($_POST['theme'])) { + } + + # we are not going to change it to the current theme... + if ($_POST['theme'] == $this->getTheme()) { + $this->messages->add('w', _('still using the "' . $this->getTheme() . '" theme!')); + Tools::redirect('?view=config'); + } + + $themes = $this->getInstalledThemes(); + $actualTheme = false; + + foreach ($themes as $theme) { + if ($theme['name'] == $_POST['theme']) { + $actualTheme = true; + break; + } + } + + if (! $actualTheme) { + $this->messages->add('e', _('that theme does not seem to be installed')); + Tools::redirect('?view=config'); + } + + $this->store->updateUserConfig($this->user->getId(), 'theme', $_POST['theme']); + $this->messages->add('s', _('you have changed your theme preferences')); + + $currentConfig = $_SESSION['poche_user']->config; + $currentConfig['theme'] = $_POST['theme']; + + $_SESSION['poche_user']->setConfig($currentConfig); + + Tools::redirect('?view=config'); + } /** * checks if login & password are correct and save the user in session. diff --git a/inc/poche/Tools.class.php b/inc/poche/Tools.class.php index 1ab90be1..8eb988f4 100644 --- a/inc/poche/Tools.class.php +++ b/inc/poche/Tools.class.php @@ -84,9 +84,9 @@ class Tools public static function getTplFile($view) { - $tpl_file = 'home.twig'; - switch ($view) - { + $default_tpl = 'home.twig'; + + switch ($view) { case 'install': $tpl_file = 'install.twig'; break; @@ -102,9 +102,20 @@ class Tools case 'view': $tpl_file = 'view.twig'; break; + + case 'login': + $tpl_file = 'login.twig'; + break; + + case 'error': + $tpl_file = 'error.twig'; + break; + default: - break; + $tpl_file = $default_tpl; + break; } + return $tpl_file; } @@ -228,27 +239,6 @@ class Tools return $minutes; } - - public static function createMyConfig() - { - $myconfig_file = './inc/poche/myconfig.inc.php'; - - if (!is_writable('./inc/poche/')) { - self::logm('you don\'t have write access to create ./inc/poche/myconfig.inc.php'); - die('You don\'t have write access to create ./inc/poche/myconfig.inc.php.'); - } - - if (!file_exists($myconfig_file)) - { - $fp = fopen($myconfig_file, 'w'); - fwrite($fp, ' + * @author Nicolas Lœuillet * @copyright 2013 * @license http://www.wtfpl.net/ see COPYING file */ -require_once __DIR__ . '/../../inc/poche/define.inc.php'; - -# /!\ Be careful if you change the lines below /!\ -if (!file_exists(__DIR__ . '/../../vendor/autoload.php')) { - die('Twig does not seem installed. Have a look at the documentation.'); -} - -require_once __DIR__ . '/../../inc/poche/User.class.php'; -require_once __DIR__ . '/../../inc/poche/Url.class.php'; -require_once __DIR__ . '/../../inc/3rdparty/class.messages.php'; -require_once __DIR__ . '/../../inc/poche/Poche.class.php'; -require_once __DIR__ . '/../../inc/3rdparty/Readability.php'; -require_once __DIR__ . '/../../inc/poche/PocheReadability.php'; -require_once __DIR__ . '/../../inc/3rdparty/Encoding.php'; -require_once __DIR__ . '/../../inc/poche/Database.class.php'; -require_once __DIR__ . '/../../vendor/autoload.php'; -require_once __DIR__ . '/../../inc/3rdparty/simple_html_dom.php'; -require_once __DIR__ . '/../../inc/3rdparty/paginator.php'; -require_once __DIR__ . '/../../inc/3rdparty/Session.class.php'; - -require_once __DIR__ . '/../../inc/3rdparty/simplepie/SimplePieAutoloader.php'; -require_once __DIR__ . '/../../inc/3rdparty/simplepie/SimplePie/Core.php'; -require_once __DIR__ . '/../../inc/3rdparty/content-extractor/ContentExtractor.php'; -require_once __DIR__ . '/../../inc/3rdparty/content-extractor/SiteConfig.php'; -require_once __DIR__ . '/../../inc/3rdparty/humble-http-agent/HumbleHttpAgent.php'; -require_once __DIR__ . '/../../inc/3rdparty/humble-http-agent/SimplePie_HumbleHttpAgent.php'; -require_once __DIR__ . '/../../inc/3rdparty/humble-http-agent/CookieJar.php'; -require_once __DIR__ . '/../../inc/3rdparty/feedwriter/FeedItem.php'; -require_once __DIR__ . '/../../inc/3rdparty/feedwriter/FeedWriter.php'; -require_once __DIR__ . '/../../inc/3rdparty/feedwriter/DummySingleItemFeed.php'; -require_once __DIR__ . '/../../inc/3rdparty/FlattrItem.class.php'; - -if (DOWNLOAD_PICTURES) { - require_once __DIR__ . '/../../inc/poche/pochePictures.php'; -} - -if (!ini_get('date.timezone') || !@date_default_timezone_set(ini_get('date.timezone'))) { - date_default_timezone_set('UTC'); -} - -$poche = new Poche(); \ No newline at end of file +define ('SALT', ''); # put a strong string here +define ('LANG', 'en_EN.utf8'); + +define ('STORAGE', 'sqlite'); # postgres, mysql or sqlite + +define ('STORAGE_SQLITE', ROOT . '/db/poche.sqlite'); # if you are using sqlite, where the database file is located + +# only for postgres & mysql +define ('STORAGE_SERVER', 'localhost'); +define ('STORAGE_DB', 'poche'); +define ('STORAGE_USER', 'poche'); +define ('STORAGE_PASSWORD', 'poche'); + +################################################################################# +# Do not trespass unless you know what you are doing +################################################################################# + +define ('MODE_DEMO', FALSE); +define ('DEBUG_POCHE', true); +define ('DOWNLOAD_PICTURES', FALSE); +define ('CONVERT_LINKS_FOOTNOTES', FALSE); +define ('REVERT_FORCED_PARAGRAPH_ELEMENTS', FALSE); +define ('SHARE_TWITTER', TRUE); +define ('SHARE_MAIL', TRUE); +define ('SHARE_SHAARLI', FALSE); +define ('SHAARLI_URL', 'http://myshaarliurl.com'); +define ('FLATTR', TRUE); +define ('FLATTR_API', 'https://api.flattr.com/rest/v2/things/lookup/?url='); +define ('NOT_FLATTRABLE', '0'); +define ('FLATTRABLE', '1'); +define ('FLATTRED', '2'); +define ('ABS_PATH', 'assets/'); + +define ('DEFAULT_THEME', 'default'); + +define ('THEME', ROOT . '/themes'); +define ('LOCALE', ROOT . '/locale'); +define ('CACHE', ROOT . '/cache'); + +define ('PAGINATION', '10'); + +define ('POCHE_VERSION', '1.0-beta5'); + +define ('IMPORT_POCKET_FILE', ROOT . '/ril_export.html'); +define ('IMPORT_READABILITY_FILE', ROOT . '/readability'); +define ('IMPORT_INSTAPAPER_FILE', ROOT . '/instapaper-export.html'); \ 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..5c304d14 --- /dev/null +++ b/inc/poche/config.inc.php.new @@ -0,0 +1,56 @@ + + * @copyright 2013 + * @license http://www.wtfpl.net/ see COPYING file + */ + +define ('SALT', ''); # put a strong string here +define ('LANG', 'en_EN.utf8'); + +define ('STORAGE', 'sqlite'); # postgres, mysql or sqlite + +define ('STORAGE_SQLITE', ROOT . '/db/poche.sqlite'); # if you are using sqlite, where the database file is located + +# only for postgres & mysql +define ('STORAGE_SERVER', 'localhost'); +define ('STORAGE_DB', 'poche'); +define ('STORAGE_USER', 'poche'); +define ('STORAGE_PASSWORD', 'poche'); + +################################################################################# +# Do not trespass unless you know what you are doing +################################################################################# + +define ('MODE_DEMO', FALSE); +define ('DEBUG_POCHE', true); +define ('DOWNLOAD_PICTURES', FALSE); +define ('CONVERT_LINKS_FOOTNOTES', FALSE); +define ('REVERT_FORCED_PARAGRAPH_ELEMENTS', FALSE); +define ('SHARE_TWITTER', TRUE); +define ('SHARE_MAIL', TRUE); +define ('SHARE_SHAARLI', FALSE); +define ('SHAARLI_URL', 'http://myshaarliurl.com'); +define ('FLATTR', TRUE); +define ('FLATTR_API', 'https://api.flattr.com/rest/v2/things/lookup/?url='); +define ('NOT_FLATTRABLE', '0'); +define ('FLATTRABLE', '1'); +define ('FLATTRED', '2'); +define ('ABS_PATH', 'assets/'); + +define ('DEFAULT_THEME', 'default'); + +define ('THEME', ROOT . '/themes'); +define ('LOCALE', ROOT . '/locale'); +define ('CACHE', ROOT . '/cache'); + +define ('PAGINATION', '10'); + +define ('POCHE_VERSION', '1.0-beta5'); + +define ('IMPORT_POCKET_FILE', ROOT . '/ril_export.html'); +define ('IMPORT_READABILITY_FILE', ROOT . '/readability'); +define ('IMPORT_INSTAPAPER_FILE', ROOT . '/instapaper-export.html'); \ No newline at end of file diff --git a/inc/poche/global.inc.php b/inc/poche/global.inc.php new file mode 100644 index 00000000..2437d065 --- /dev/null +++ b/inc/poche/global.inc.php @@ -0,0 +1,72 @@ + + * @copyright 2013 + * @license http://www.wtfpl.net/ see COPYING file + */ + +# the poche system root directory (/inc) +define('INCLUDES', dirname(__FILE__) . '/..'); + +# the poche root directory +define('ROOT', INCLUDES . '/..'); + +require_once INCLUDES . '/poche/Tools.class.php'; +require_once INCLUDES . '/poche/User.class.php'; +require_once INCLUDES . '/poche/Url.class.php'; +require_once INCLUDES . '/3rdparty/class.messages.php'; +require_once INCLUDES . '/poche/Poche.class.php'; + +require_once INCLUDES . '/3rdparty/Readability.php'; +require_once INCLUDES . '/poche/PocheReadability.php'; + +require_once INCLUDES . '/3rdparty/Encoding.php'; +require_once INCLUDES . '/poche/Database.class.php'; +require_once INCLUDES . '/3rdparty/simple_html_dom.php'; +require_once INCLUDES . '/3rdparty/paginator.php'; +require_once INCLUDES . '/3rdparty/Session.class.php'; + +require_once INCLUDES . '/3rdparty/simplepie/SimplePieAutoloader.php'; +require_once INCLUDES . '/3rdparty/simplepie/SimplePie/Core.php'; +require_once INCLUDES . '/3rdparty/content-extractor/ContentExtractor.php'; +require_once INCLUDES . '/3rdparty/content-extractor/SiteConfig.php'; +require_once INCLUDES . '/3rdparty/humble-http-agent/HumbleHttpAgent.php'; +require_once INCLUDES . '/3rdparty/humble-http-agent/SimplePie_HumbleHttpAgent.php'; +require_once INCLUDES . '/3rdparty/humble-http-agent/CookieJar.php'; +require_once INCLUDES . '/3rdparty/feedwriter/FeedItem.php'; +require_once INCLUDES . '/3rdparty/feedwriter/FeedWriter.php'; +require_once INCLUDES . '/3rdparty/feedwriter/DummySingleItemFeed.php'; +require_once INCLUDES . '/3rdparty/FlattrItem.class.php'; + +# Composer its autoloader for automatically loading Twig +if (! file_exists(ROOT . '/vendor/autoload.php')) { + Poche::$canRenderTemplates = false; +} else { + require_once ROOT . '/vendor/autoload.php'; +} + +# system configuration; database credentials et cetera +if (! file_exists(INCLUDES . '/poche/config.inc.php')) { + Poche::$configFileAvailable = false; +} else { + require_once INCLUDES . '/poche/config.inc.php'; +} + +if (Poche::$configFileAvailable && DOWNLOAD_PICTURES) { + require_once INCLUDES . '/poche/pochePictures.php'; +} + +if (!ini_get('date.timezone') || !@date_default_timezone_set(ini_get('date.timezone'))) { + date_default_timezone_set('UTC'); +} + +#XSRF protection with token +if (!empty($_POST)) { + if (!Session::isToken($_POST['token'])) { + die(_('Wrong token')); + } + unset($_SESSION['token']); +} \ No newline at end of file diff --git a/index.php b/index.php index 52a400a8..4aebfe10 100644 --- a/index.php +++ b/index.php @@ -8,13 +8,11 @@ * @license http://www.wtfpl.net/ see COPYING file */ -if (file_exists(__DIR__ . '/inc/poche/myconfig.inc.php')) { - require_once __DIR__ . '/inc/poche/myconfig.inc.php'; -} -require_once './inc/poche/Tools.class.php'; -Tools::createMyConfig(); +require_once 'inc/poche/global.inc.php'; -include dirname(__FILE__).'/inc/poche/config.inc.php'; +# Start Poche +$poche = new Poche(); +$notInstalledMessage = $poche -> getNotInstalledMessage(); # Parse GET & REFERER vars $referer = empty($_SERVER['HTTP_REFERER']) ? '' : $_SERVER['HTTP_REFERER']; @@ -24,47 +22,57 @@ $id = Tools::checkVar('id'); $_SESSION['sort'] = Tools::checkVar('sort', 'id'); $url = new Url((isset ($_GET['url'])) ? $_GET['url'] : ''); +# vars to _always_ send to templates +$tpl_vars = array( + 'referer' => $referer, + 'view' => $view, + 'poche_url' => Tools::getPocheUrl(), + 'title' => _('poche, a read it later open source system'), + 'token' => Session::getToken(), + 'theme' => $poche->getTheme() +); + +if (! empty($notInstalledMessage)) { + if (! Poche::$canRenderTemplates || ! Poche::$configFileAvailable) { + # We cannot use Twig to display the error message + die($notInstalledMessage); + } else { + # Twig is installed, put the error message in the template + $tpl_file = Tools::getTplFile('error'); + $tpl_vars = array_merge($tpl_vars, array('msg' => $poche->getNotInstalledMessage())); + echo $poche->tpl->render($tpl_file, $tpl_vars); + exit; + } +} + # poche actions if (isset($_GET['login'])) { # hello you $poche->login($referer); -} -elseif (isset($_GET['logout'])) { +} elseif (isset($_GET['logout'])) { # see you soon ! $poche->logout(); -} -elseif (isset($_GET['config'])) { +} elseif (isset($_GET['config'])) { # Update password $poche->updatePassword(); -} -elseif (isset($_GET['import'])) { +} elseif (isset($_GET['import'])) { $import = $poche->import($_GET['from']); -} -elseif (isset($_GET['export'])) { +} elseif (isset($_GET['export'])) { $poche->export(); +} elseif (isset($_GET['updatetheme'])) { + $poche->updateTheme(); } elseif (isset($_GET['plainurl']) && !empty($_GET['plainurl'])) { $plain_url = new Url(base64_encode($_GET['plainurl'])); $poche->action('add', $plain_url); } -# vars to send to templates -$tpl_vars = array( - 'lang' => Tools::getDocLanguage($poche->user->getConfigValue('language')), - 'referer' => $referer, - 'view' => $view, - 'poche_url' => Tools::getPocheUrl(), - 'title' => _('poche, a read it later open source system'), - 'token' => Session::getToken(), -); - if (Session::isLogged()) { $poche->action($action, $url, $id); $tpl_file = Tools::getTplFile($view); $tpl_vars = array_merge($tpl_vars, $poche->displayView($view, $id)); -} -else { - $tpl_file = 'login.twig'; +} else { + $tpl_file = Tools::getTplFile('login'); } # because messages can be added in $poche->action(), we have to add this entry now (we can add it before) diff --git a/themes b/themes new file mode 160000 index 00000000..e124e424 --- /dev/null +++ b/themes @@ -0,0 +1 @@ +Subproject commit e124e4241ab374f2d825891377e5c4011d48edf0 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 @@ - \ 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 @@ -
    -

    {% trans "powered by" %} poche

    - {% if constant('DEBUG_POCHE') == 1 %}

    {% trans "debug mode is on so cache is off." %} {% trans "your poche version:" %}{{constant('POCHE_VERSION')}}. {% trans "storage:" %} {{constant('STORAGE')}}

    {% endif %} -
    \ 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 @@ - - - - - - - - - - - - \ No newline at end of file diff --git a/tpl/_menu.twig b/tpl/_menu.twig deleted file mode 100644 index 523d63cc..00000000 --- a/tpl/_menu.twig +++ /dev/null @@ -1,7 +0,0 @@ - \ 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 @@ - {{ messages | raw }} \ No newline at end of file diff --git a/tpl/_top.twig b/tpl/_top.twig deleted file mode 100644 index dc20081e..00000000 --- a/tpl/_top.twig +++ /dev/null @@ -1,7 +0,0 @@ -
    -

    - {% if view == 'home' %}{% block logo %}logo poche{% endblock %} - {% else %}{{ block('logo') }} - {% endif %} -

    -
    \ No newline at end of file diff --git a/tpl/config.twig b/tpl/config.twig deleted file mode 100644 index f125c99f..00000000 --- a/tpl/config.twig +++ /dev/null @@ -1,61 +0,0 @@ -{% extends "layout.twig" %} - -{% block title %}{% trans "config" %}{% endblock %} -{% block menu %} -{% include '_menu.twig' %} -{% endblock %} -{% block content %} -

    {% trans "Poching a link" %}

    -

    {% trans "You can poche a link by several methods:" %} (?)

    - - -

    {% trans "Updating poche" %}

    - - -

    {% trans "Change your password" %}

    -
    -
    -
    - - -
    -
    - - -
    -
    - -
    -
    - - -
    - -

    {% trans "Import" %}

    -

    {% trans "Please execute the import script locally, it can take a very long time." %}

    -

    {% trans "More infos in the official doc:" %} inthepoche.com

    - - -

    {% trans "Export your poche datas" %}

    -

    {% trans "Click here" %} {% trans "to export your poche datas." %}

    -{% 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 @@ -html{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 @@ -.messages { width: 400px; -moz-border-radius: 4px; border-radius: 4px; display: block; padding: 10px 0; margin: 10px auto 10px; clear: both; } -.messages a.closeMessage { margin: -14px -8px 0 0; display:none; width: 16px; height: 16px; float: right; background: url(../img/messages/close.png) no-repeat; } -/*.messages:hover a.closeMessage { visibility:visible; }*/ -.messages p { margin: 3px 0 3px 10px !important; padding: 0 10px 0 23px !important; font-size: 14px; line-height: 16px; } -.messages.error { border: 1px solid #C42608; color: #c00 !important; background: #FFF0EF; } -.messages.error p { background: url(../img/messages/cross.png ) no-repeat 0px 50%; color:#c00 !important; } -.messages.success {background: #E0FBCC; border: 1px solid #6DC70C; } -.messages.success p { background: url(../img/messages/tick.png) no-repeat 0px 50%; color: #2B6301 !important; } -.messages.warning { background: #FFFCD3; border: 1px solid #EBCD41; color: #000; } -.messages.warning p { background: url(../img/messages/warning.png ) no-repeat 0px 50%; color: #5F4E01; } -.messages.information, .messages.info { background: #DFEBFB; border: 1px solid #82AEE7; } -.messages.information p, .messages.info p { background: url(../img/messages/help.png ) no-repeat 0px 50%; color: #064393; } -.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 @@ -body > header, -body > footer, -a.top_link, -div.tools, -header div -{ - display: none !important; -} - -article -{ - border: none !important; -} - -div.vieworiginal a::after -{ - margin-left: 5px; - content: "("attr(href)")"; -} diff --git a/tpl/css/style-light.css b/tpl/css/style-light.css deleted file mode 100644 index a85961c9..00000000 --- a/tpl/css/style-light.css +++ /dev/null @@ -1,55 +0,0 @@ -a.back span { - background: url('../img/light/left.png'); -} - -a.top span { - background: url('../img/light/top.png'); -} - -a.fav span { - background: url('../img/light/star-on.png'); -} -a.fav span:hover { - background: url('../img/light/star-off.png'); -} - -a.fav-off span { - background: url('../img/light/star-off.png'); -} -a.fav-off span:hover { - background: url('../img/light/star-on.png'); -} - -a.archive span { - background: url('../img/light/checkmark-on.png'); -} -a.archive span:hover { - background: url('../img/light/checkmark-off.png'); -} - -a.archive-off span { - background: url('../img/light/checkmark-off.png'); -} -a.archive-off span:hover { - background: url('../img/light/checkmark-on.png'); -} - -a.twitter span { - background: url('../img/light/twitter.png'); -} - -a.shaarli span { - background: url('../img/light/shaarli.png'); -} - -a.flattr span { - background: url('../img/light/flattr.png'); -} - -a.email span { - background: url('../img/light/envelop.png'); -} - -a.delete span { - background: url('../img/light/remove.png'); -} \ No newline at end of file diff --git a/tpl/css/style.css b/tpl/css/style.css deleted file mode 100644 index d60b443c..00000000 --- a/tpl/css/style.css +++ /dev/null @@ -1,300 +0,0 @@ -body { - font-size: 16px; - font-family: 'Roboto', Verdana, Geneva, sans-serif; - margin: 10px; - color: #000; -} - -header { - text-align: center; -} - -header h1 { - font-size: 1.3em; -} - -a, a:hover, a:visited { - color: #000; -} - -.bouton { - background-color: #000; - color: #fff; - border: none; - border-radius: 2px; -} -.bouton:hover { - background-color: #222; - color: #f1f1f1; - cursor: pointer; -} - -#main { - margin: 0 auto; -} - -#main #links { - padding: 0; - list-style-type: none; - text-align: center; - font-size: 0.9em; -} - -#main #links li { - display: inline; -} - -#main #links li .current { - background-color: #000; - color: #fff; - -webkit-border-radius: 2px; - border-radius: 2px; -} - -#main #sort { - padding: 0; - list-style-type: none; - text-align: center; - opacity: 0.5; -} - -#main #sort li { - display: inline; - font-size: 0.9em; -} - -#main #sort img:hover { - cursor: pointer; -} - -#links a { - text-decoration: none; - padding: 5px 10px; -} -#links a:hover { - background-color: #040707; - color: #F1F1F1; - -webkit-border-radius: 2px; - border-radius: 2px; -} - -/*** ***/ -/*** LINKS DISPLAY ***/ - -#main .tool { - text-decoration: none; - cursor: pointer; -} - -#main #content { - margin-top: 20px; -} - -#main #content h2 { - font-size: 1.3em; - text-decoration: none; -} - -#main #content .entrie { - border-bottom: 1px dashed #222; -} -/* First entry */ -#main #content .results + .entrie { - clear: both; -} - -#main .entrie .tools { - list-style-type: none; -} - -#main .entrie .tools + p { - min-height: 5.5em; -} - -/* -#main .entrie .tools li { - display: inline; -} -*/ - -.tools { - float: right; - text-align: right; - opacity: 0.5; -} - -.tools p { - font-size: 0.8em; -} - -/* -.tools ul { - padding: 0; margin: 0; - list-style-type: none; -} - -.tools ul li { - line-height: 20px; -} - -.tools .tool { - cursor: pointer; -}*/ - -#main .entrie .tools .tool span, #article .tools .tool span { - display: inline-block; - width: 16px; - height: 16px; - /* Hide textual content */ - text-indent: -9999px; - text-align: left; - overflow: hidden; -} - - -/*** ***/ -/*** ARTICLE PAGE ***/ - -#article { - margin: 0 auto; -} - -#article header, #article article { - border-bottom: 1px solid #222; -} - -#article header { - text-align: left; -} - -#article header a { - text-decoration: none; -} - -.vieworiginal a, .vieworiginal a:hover, .vieworiginal a:visited { - text-decoration: none; - color: #888; -} - -.backhome { - display: inline; -} - -#article .tools { - position: relative; - display: inline; - top: 0; - right: 0; - width: 100%; -} - -#article .tools ul li { - display: inline; -} - - -.results { - overflow: hidden; - padding-bottom: 20px; - padding-top: 10px; -} - -.nb-results { - float: left; - font-size: 0.9em; - line-height: 24px; - vertical-align: middle; -} - -/* Pagination */ -.pagination { - float: right; - text-align: right; -} -.pagination a { - border: 1px solid #d5d5d5; - color: #333; - font-size: 11px; - font-weight: bold; - height: 25px; - padding: 4px 8px; - text-decoration: none; - margin: 2px; -} -.pagination a:hover, .pagination a:active { - background-color: #efefef; -} -.pagination .current { - background-color: #ccc; - border: 1px solid #d5d5d5; - color: #000; - font-size: 11px; - font-weight: bold; - height: 25px; - padding: 4px 8px; - text-decoration: none; - margin: 2px; -} -.pagination .disabled { - display: none; -} - -#bookmarklet { - padding: 5px; - border: 1px dashed #808080; - background: #fff; - cursor: move; -} - -.top_link { - position: fixed; - right: 15px; - bottom: 15px; - display: none; - padding: 20px; - background: #ccc; - -moz-border-radius: 40px; - -webkit-border-radius: 40px; - border-radius: 40px; - opacity: 0.9; - z-index: 2000; -} - -footer { - clear: both; -} - -.reading-time { - font-size: 0.8em; -} - -#inputform { - display: none; - text-align: center; - max-width: 300px; - margin-left: auto; - margin-right: auto; - margin-top: 5px; - padding-bottom: 5px; - background-color: rgba(0, 0, 0, 0.9); - opacity: 0.8; - color: #fff; - border-radius: 3px; -} - -a.back span, -a.top span, -a.fav span, -a.fav span:hover, -a.fav-off span, -a.fav-off span:hover, -a.archive span, -a.archive span:hover, -a.archive-off span, -a.archive-off span:hover, -a.twitter span, -a.flattr span, -a.email span, -a.delete span { - background-repeat: no-repeat; -} diff --git a/tpl/error.twig b/tpl/error.twig deleted file mode 100644 index c829d12b..00000000 --- a/tpl/error.twig +++ /dev/null @@ -1,6 +0,0 @@ -{% extends "layout.twig" %} -{% block title %}{% trans "plop" %}{% endblock %} -{% block content %} - {{ msg|raw }} -

    Don't forget the documentation.

    -{% 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 @@ -{{ export }} \ No newline at end of file diff --git a/tpl/home.twig b/tpl/home.twig deleted file mode 100644 index 771c36c5..00000000 --- a/tpl/home.twig +++ /dev/null @@ -1,49 +0,0 @@ -{% extends "layout.twig" %} -{% block title %} -{% if view == 'fav' %} -{% trans "favoris" %} -{% elseif view == 'archive' %} -{% trans "archive" %} -{% else %} -{% trans "unread" %} -{% endif %} -{% endblock %} -{% block menu %} -{% include '_menu.twig' %} -{% endblock %} -{% block precontent %} - {% if entries|length > 1 %} -
      -
    • {% trans {% trans "by date" %} {% trans
    • -
    • {% trans {% trans "by title" %} {% trans
    • -
    - {% endif %} -{% endblock %} -{% block content %} - {% if entries is empty %} -

    {% trans "No link available here!" %}

    - {% else %} - {% block pager %} - {% if nb_results > 1 %} -
    -
    {{ nb_results }} {% trans "results" %}
    - {{ page_links | raw }} -
    - {% endif %} - {% endblock %} - {% for entry in entries %} -
    -

    {{ entry.title|raw }}

    - -

    {{ entry.content|striptags|slice(0, 300) }}...

    -

    {{ entry.url | e | getDomain }}

    -
    - {% endfor %} - {% endif %} - {{ block('pager') }} -{% 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 Binary files a/tpl/img/apple-touch-icon-144x144-precomposed.png and /dev/null 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 Binary files a/tpl/img/apple-touch-icon-72x72-precomposed.png and /dev/null differ diff --git a/tpl/img/apple-touch-icon.png b/tpl/img/apple-touch-icon.png deleted file mode 100644 index 4d222fba..00000000 Binary files a/tpl/img/apple-touch-icon.png and /dev/null differ diff --git a/tpl/img/favicon.ico b/tpl/img/favicon.ico deleted file mode 100644 index 0e9ff779..00000000 Binary files a/tpl/img/favicon.ico and /dev/null differ diff --git a/tpl/img/light/backtotop.png b/tpl/img/light/backtotop.png deleted file mode 100755 index 051238ef..00000000 Binary files a/tpl/img/light/backtotop.png and /dev/null differ diff --git a/tpl/img/light/checkmark-off.png b/tpl/img/light/checkmark-off.png deleted file mode 100644 index 3db5a06d..00000000 Binary files a/tpl/img/light/checkmark-off.png and /dev/null differ diff --git a/tpl/img/light/checkmark-on.png b/tpl/img/light/checkmark-on.png deleted file mode 100644 index cd3abb2c..00000000 Binary files a/tpl/img/light/checkmark-on.png and /dev/null differ diff --git a/tpl/img/light/down.png b/tpl/img/light/down.png deleted file mode 100644 index b9d536a7..00000000 Binary files a/tpl/img/light/down.png and /dev/null differ diff --git a/tpl/img/light/envelop.png b/tpl/img/light/envelop.png deleted file mode 100755 index 6be1c886..00000000 Binary files a/tpl/img/light/envelop.png and /dev/null differ diff --git a/tpl/img/light/flattr.png b/tpl/img/light/flattr.png deleted file mode 100644 index d9007c0c..00000000 Binary files a/tpl/img/light/flattr.png and /dev/null differ diff --git a/tpl/img/light/left.png b/tpl/img/light/left.png deleted file mode 100755 index a0a53631..00000000 Binary files a/tpl/img/light/left.png and /dev/null differ diff --git a/tpl/img/light/remove.png b/tpl/img/light/remove.png deleted file mode 100644 index f8ad56a3..00000000 Binary files a/tpl/img/light/remove.png and /dev/null differ diff --git a/tpl/img/light/shaarli.png b/tpl/img/light/shaarli.png deleted file mode 100644 index 1eb30f60..00000000 Binary files a/tpl/img/light/shaarli.png and /dev/null differ diff --git a/tpl/img/light/star-off.png b/tpl/img/light/star-off.png deleted file mode 100644 index 6a0133a7..00000000 Binary files a/tpl/img/light/star-off.png and /dev/null differ diff --git a/tpl/img/light/star-on.png b/tpl/img/light/star-on.png deleted file mode 100644 index a9f96eaa..00000000 Binary files a/tpl/img/light/star-on.png and /dev/null differ diff --git a/tpl/img/light/top.png b/tpl/img/light/top.png deleted file mode 100755 index 954a8c0a..00000000 Binary files a/tpl/img/light/top.png and /dev/null differ diff --git a/tpl/img/light/twitter.png b/tpl/img/light/twitter.png deleted file mode 100755 index cfcfe419..00000000 Binary files a/tpl/img/light/twitter.png and /dev/null differ diff --git a/tpl/img/logo.png b/tpl/img/logo.png deleted file mode 100644 index 5305c77d..00000000 Binary files a/tpl/img/logo.png and /dev/null differ diff --git a/tpl/img/messages/close.png b/tpl/img/messages/close.png deleted file mode 100755 index 731aa018..00000000 Binary files a/tpl/img/messages/close.png and /dev/null differ diff --git a/tpl/img/messages/cross.png b/tpl/img/messages/cross.png deleted file mode 100755 index 1514d51a..00000000 Binary files a/tpl/img/messages/cross.png and /dev/null differ diff --git a/tpl/img/messages/help.png b/tpl/img/messages/help.png deleted file mode 100755 index 5c870176..00000000 Binary files a/tpl/img/messages/help.png and /dev/null differ diff --git a/tpl/img/messages/tick.png b/tpl/img/messages/tick.png deleted file mode 100755 index a9925a06..00000000 Binary files a/tpl/img/messages/tick.png and /dev/null differ diff --git a/tpl/img/messages/warning.png b/tpl/img/messages/warning.png deleted file mode 100755 index 628cf2da..00000000 Binary files a/tpl/img/messages/warning.png and /dev/null differ diff --git a/tpl/install.twig b/tpl/install.twig deleted file mode 100644 index 6e85e5cb..00000000 --- a/tpl/install.twig +++ /dev/null @@ -1,28 +0,0 @@ -{% extends "layout.twig" %} -{% block title %}{% trans "installation" %}{% endblock %} -{% block content %} -
    -
    -

    {% trans "install your poche" %}

    -

    - {% trans "poche is still not installed. Please fill the below form to install it. Don't hesitate to read the documentation on poche website." %} -

    -

    - - -

    -

    - - -

    -

    - - -

    -

    - -

    -
    - -
    -{% 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 @@ -/*! jQuery v2.0.3 | (c) 2005, 2013 jQuery Foundation, Inc. | jquery.org/license -//@ sourceMappingURL=jquery-2.0.3.min.map -*/ -(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="
    ",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="",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="","#"===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="",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) -};"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*\s*$/g,ct={option:[1,""],thead:[1,"","
    "],col:[2,"","
    "],tr:[2,"","
    "],td:[3,"","
    "],_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>");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>")+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("