diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index c89411f38..7fdca652b 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,11 +1,11 @@ # How contributing ## You found a bug -Please [open a new issue](https://github.com/inthepoche/poche/issues/new). +Please [open a new issue](https://github.com/wallabag/demo.wallabag.org/issues/new). To fix the bug quickly, we need some infos: -* your poche version (in ./inc/poche/myconfig.inc.php) -* the link you want to poche and which causes problem +* your demo.wallabag.org version (in ./index.php) +* the link you want to save and which causes problem ## You want to fix a bug or to add a feature -Please fork poche and work with **the dev branch** only. Do not work on master branch. +Please fork wallabag and work with **the dev branch** only. **Do not work on master branch**. \ No newline at end of file diff --git a/CREDITS.md b/CREDITS.md index 6046a6aac..391f53c53 100644 --- a/CREDITS.md +++ b/CREDITS.md @@ -1,4 +1,4 @@ -poche is based on : +wallabag is based on : * PHP Readability https://bitbucket.org/fivefilters/php-readability * Full Text RSS http://code.fivefilters.org/full-text-rss/src * Encoding https://github.com/neitanod/forceutf8 @@ -10,6 +10,6 @@ poche is based on : * Flash messages https://github.com/plasticbrain/PHP-Flash-Messages * Pagination https://github.com/daveismyname/pagination -poche is developed by Nicolas Lœuillet under the Do What the Fuck You Want to Public License +wallabag is developed by Nicolas Lœuillet under the Do What the Fuck You Want to Public License -Contributors : https://github.com/inthepoche/poche/graphs/contributors \ No newline at end of file +Contributors : https://github.com/wallabag/wallabag/graphs/contributors \ No newline at end of file diff --git a/INSTALL.md b/INSTALL.md deleted file mode 100644 index df245ff0f..000000000 --- a/INSTALL.md +++ /dev/null @@ -1,3 +0,0 @@ -# Installing poche - -Read the full documentation here: http://doc.inthepoche.com/doku.php?id=users:begin:install diff --git a/TODO.md b/TODO.md deleted file mode 100644 index fdba2a514..000000000 --- a/TODO.md +++ /dev/null @@ -1,9 +0,0 @@ -# TODO - -* pouvoir annuler la suppression -* conventions codage ? phing ? vérifier error_log qui trainent -* phpDocumentor -* minifier css -* barre fixe d'admin sur la page d'un billet ? -* revoir export (export vers pocket &cie ? ) -* raccourcis clavier \ No newline at end of file diff --git a/inc/poche/Database.class.php b/inc/poche/Database.class.php index 04731821f..0457af691 100644 --- a/inc/poche/Database.class.php +++ b/inc/poche/Database.class.php @@ -1,9 +1,9 @@ + * @category wallabag + * @author Nicolas Lœuillet * @copyright 2013 * @license http://www.wtfpl.net/ see COPYING file */ @@ -165,9 +165,14 @@ class Database { } } - public function login($username, $password) { - $sql = "SELECT * FROM users WHERE username=? AND password=?"; - $query = $this->executeQuery($sql, array($username, $password)); + public function login($username, $password, $isauthenticated=false) { + if ($isauthenticated) { + $sql = "SELECT * FROM users WHERE username=?"; + $query = $this->executeQuery($sql, array($username)); + } else { + $sql = "SELECT * FROM users WHERE username=? AND password=?"; + $query = $this->executeQuery($sql, array($username, $password)); + } $login = $query->fetchAll(); $user = array(); @@ -193,7 +198,7 @@ class Database { public function updateUserConfig($userId, $key, $value) { $config = $this->getConfigUser($userId); - if (!isset ($user_config[$key])) { + if (! isset($config[$key])) { $sql = "INSERT INTO users_config (value, user_id, name) VALUES (?, ?, ?)"; } else { diff --git a/inc/poche/Poche.class.php b/inc/poche/Poche.class.php index 76a73be2b..4df90067d 100644 --- a/inc/poche/Poche.class.php +++ b/inc/poche/Poche.class.php @@ -1,9 +1,9 @@ + * @category wallabag + * @author Nicolas Lœuillet * @copyright 2013 * @license http://www.wtfpl.net/ see COPYING file */ @@ -22,15 +22,6 @@ class Poche private $currentTheme = ''; private $currentLanguage = ''; private $notInstalledMessage = array(); - - # @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() { @@ -110,7 +101,7 @@ class Poche $passTheme = TRUE; # 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.'; + $this->notInstalledMessage[] = 'Twig does not seem to be installed. Please initialize the Composer installation to automatically fetch dependencies. Have a look at the documentation.'; $passTheme = FALSE; } @@ -123,21 +114,26 @@ class Poche } # Check if the selected theme and its requirements are present - if ($this->getTheme() != '' && ! 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() . ')'; + $theme = $this->getTheme(); + + if ($theme != '' && ! is_dir(THEME . '/' . $theme)) { + $this->notInstalledMessage[] = 'The currently selected theme (' . $theme . ') does not seem to be properly installed (Missing directory: ' . THEME . '/' . $theme . ')'; self::$canRenderTemplates = false; $passTheme = 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() . ')'; + $themeInfo = $this->getThemeInfo($theme); + if (isset($themeInfo['requirements']) && is_array($themeInfo['requirements'])) { + foreach ($themeInfo['requirements'] as $requiredTheme) { + if (! is_dir(THEME . '/' . $requiredTheme)) { + $this->notInstalledMessage[] = 'The required "' . $requiredTheme . '" theme is missing for the current theme (' . $theme . ')'; - self::$canRenderTemplates = false; + self::$canRenderTemplates = false; - $passTheme = FALSE; + $passTheme = FALSE; + } } } @@ -193,32 +189,36 @@ class Poche private function initTpl() { $loaderChain = new Twig_Loader_Chain(); + $theme = $this->getTheme(); # 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())); + $loaderChain->addLoader(new Twig_Loader_Filesystem(THEME . '/' . $theme)); } 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)'); + die('The currently selected theme (' . $theme . ') does not seem to be properly installed (' . THEME . '/' . $theme .' 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() . ')'); + $themeInfo = $this->getThemeInfo($theme); + if (isset($themeInfo['requirements']) && is_array($themeInfo['requirements'])) { + foreach ($themeInfo['requirements'] as $requiredTheme) { + try { + $loaderChain->addLoader(new Twig_Loader_Filesystem(THEME . '/' . $requiredTheme)); + } catch (Twig_Error_Loader $e) { + # @todo isInstalled() should catch this, inject Twig later + die('The required "' . $requiredTheme . '" theme is missing for the current theme (' . $theme . ')'); + } } } if (DEBUG_POCHE) { - $twig_params = array(); + $twigParams = array(); } else { - $twig_params = array('cache' => CACHE); + $twigParams = array('cache' => CACHE); } - $this->tpl = new Twig_Environment($loaderChain, $twig_params); + $this->tpl = new Twig_Environment($loaderChain, $twigParams); $this->tpl->addExtension(new Twig_Extensions_Extension_I18n()); # filter to display domain name of an url @@ -234,7 +234,7 @@ class Poche $this->tpl->addFilter($filter); } - private function install() + private function install() { Tools::logm('poche still not installed'); echo $this->tpl->render('install.twig', array( @@ -265,34 +265,59 @@ class Poche return $this->currentTheme; } - public function getLanguage() { - return $this->currentLanguage; + /** + * Provides theme information by parsing theme.ini file if present in the theme's root directory. + * In all cases, the following data will be returned: + * - name: theme's name, or key if the theme is unnamed, + * - current: boolean informing if the theme is the current user theme. + * + * @param string $theme Theme key (directory name) + * @return array|boolean Theme information, or false if the theme doesn't exist. + */ + public function getThemeInfo($theme) { + if (!is_dir(THEME . '/' . $theme)) { + return false; + } + + $themeIniFile = THEME . '/' . $theme . '/theme.ini'; + $themeInfo = array(); + + if (is_file($themeIniFile) && is_readable($themeIniFile)) { + $themeInfo = parse_ini_file($themeIniFile); + } + + if ($themeInfo === false) { + $themeInfo = array(); + } + if (!isset($themeInfo['name'])) { + $themeInfo['name'] = $theme; + } + $themeInfo['current'] = ($theme === $this->getTheme()); + + return $themeInfo; } 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('..', '.'))) { + if (!is_dir(THEME . '/' . $theme) || in_array($theme, array('.', '..'))) { continue; } - - $current = false; - - if ($theme === $this->getTheme()) { - $current = true; - } - - $themes[] = array('name' => $theme, 'current' => $current); + + $themes[$theme] = $this->getThemeInfo($theme); } - - sort($themes); + return $themes; } + public function getLanguage() { + return $this->currentLanguage; + } + public function getInstalledLanguages() { $handle = opendir(LOCALE); $languages = array(); @@ -325,6 +350,22 @@ class Poche ); } + protected function getPageContent(Url $url) + { + $options = array('http' => array('user_agent' => 'poche')); + if (isset($_SERVER['AUTH_TYPE']) && "basic" === strtolower($_SERVER['AUTH_TYPE'])) { + $options['http']['header'] = sprintf( + "Authorization: Basic %s", + base64_encode( + sprintf('%s:%s', $_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW']) + ) + ); + } + $context = stream_context_create($options); + $json = file_get_contents(Tools::getPocheUrl() . '/inc/3rdparty/makefulltextfeed.php?url='.urlencode($url->getUrl()).'&max=5&links=preserve&exc=&format=json&submit=Create+Feed', false, $context); + return json_decode($json, true); + } + /** * Call action (mark as fav, archive, delete, etc.) */ @@ -333,11 +374,8 @@ class Poche switch ($action) { case 'add': - $options = array('http' => array('user_agent' => 'poche')); - $context = stream_context_create($options); - $json = file_get_contents(Tools::getPocheUrl() . '/inc/3rdparty/makefulltextfeed.php?url='.urlencode($url->getUrl()).'&max=5&links=preserve&exc=&format=json&submit=Create+Feed', false, $context); - $content = json_decode($json, true); - $title = $content['rss']['channel']['item']['title']; + $content = $this->getPageContent($url); + $title = ($content['rss']['channel']['item']['title'] != '') ? $content['rss']['channel']['item']['title'] : _('Untitled'); $body = $content['rss']['channel']['item']['description']; if ($this->store->add($url->getUrl(), $title, $body, $this->user->getId())) { @@ -586,8 +624,8 @@ class Poche $themes = $this->getInstalledThemes(); $actualTheme = false; - foreach ($themes as $theme) { - if ($theme['name'] == $_POST['theme']) { + foreach (array_keys($themes) as $theme) { + if ($theme == $_POST['theme']) { $actualTheme = true; break; } @@ -654,17 +692,17 @@ class Poche */ private function credentials() { if(isset($_SERVER['PHP_AUTH_USER'])) { - return array($_SERVER['PHP_AUTH_USER'],'php_auth'); + return array($_SERVER['PHP_AUTH_USER'],'php_auth',true); } if(!empty($_POST['login']) && !empty($_POST['password'])) { - return array($_POST['login'],$_POST['password']); + return array($_POST['login'],$_POST['password'],false); } if(isset($_SERVER['REMOTE_USER'])) { - return array($_SERVER['REMOTE_USER'],'http_auth'); + return array($_SERVER['REMOTE_USER'],'http_auth',true); } - return array(false,false); - } + return array(false,false,false); + } /** * checks if login & password are correct and save the user in session. @@ -675,18 +713,19 @@ class Poche */ public function login($referer) { - list($login,$password)=$this->credentials(); + list($login,$password,$isauthenticated)=$this->credentials(); if($login === false || $password === false) { $this->messages->add('e', _('login failed: you have to fill all fields')); Tools::logm('login failed'); Tools::redirect(); } if (!empty($login) && !empty($password)) { - $user = $this->store->login($login, Tools::encodeString($password . $login)); + $user = $this->store->login($login, Tools::encodeString($password . $login), $isauthenticated); if ($user != array()) { # Save login into Session - $longlastingsession = isset($_POST['longlastingsession']); - Session::login($user['username'], $user['password'], $login, Tools::encodeString($password . $login), $longlastingsession, array('poche_user' => new User($user))); + $longlastingsession = isset($_POST['longlastingsession']); + $passwordTest = ($isauthenticated) ? $user['password'] : Tools::encodeString($password . $login); + Session::login($user['username'], $user['password'], $login, $passwordTest, $longlastingsession, array('poche_user' => new User($user))); $this->messages->add('s', _('welcome to your poche')); Tools::logm('login successful'); Tools::redirect($referer); @@ -847,6 +886,52 @@ class Poche Tools::redirect(); } + /** + * import from Poche exported file + * @param string $targetFile the file used for importing + * @return boolean + */ + private function importFromPoche($targetFile) + { + $str_data = file_get_contents($targetFile); + $data = json_decode($str_data,true); + Tools::logm('starting import from Poche'); + + + $sequence = ''; + if (STORAGE == 'postgres') { + $sequence = 'entries_id_seq'; + } + + $count = 0; + foreach ($data as $value) { + + $url = new Url(base64_encode($value['url'])); + $favorite = ($value['is_fav'] == -1); + $archive = ($value['is_read'] == -1); + + # we can add the url + if (!is_null($url) && $url->isCorrect()) { + + $this->action('add', $url, 0, TRUE); + + $count++; + if ($favorite) { + $last_id = $this->store->getLastId($sequence); + $this->action('toggle_fav', $url, $last_id, TRUE); + } + if ($archive) { + $last_id = $this->store->getLastId($sequence); + $this->action('toggle_archive', $url, $last_id, TRUE); + } + } + + } + $this->messages->add('s', _('import from Poche completed. ' . $count . ' new links.')); + Tools::logm('import from Poche completed'); + Tools::redirect(); + } + /** * import datas into your poche * @param string $from name of the service to import : pocket, instapaper or readability @@ -858,7 +943,8 @@ class Poche $providers = array( 'pocket' => 'importFromPocket', 'readability' => 'importFromReadability', - 'instapaper' => 'importFromInstapaper' + 'instapaper' => 'importFromInstapaper', + 'poche' => 'importFromPoche', ); if (! isset($providers[$from])) { @@ -908,7 +994,7 @@ class Poche if (file_exists($cache_file) && (filemtime($cache_file) > (time() - 86400 ))) { $version = file_get_contents($cache_file); } else { - $version = file_get_contents('http://static.inthepoche.com/versions/' . $which); + $version = file_get_contents('http://static.wallabag.org/versions/' . $which); file_put_contents($cache_file, $version, LOCK_EX); } return $version; diff --git a/inc/poche/Tools.class.php b/inc/poche/Tools.class.php index 639165825..515a08aac 100644 --- a/inc/poche/Tools.class.php +++ b/inc/poche/Tools.class.php @@ -1,9 +1,9 @@ + * @category wallabag + * @author Nicolas Lœuillet * @copyright 2013 * @license http://www.wtfpl.net/ see COPYING file */ @@ -43,7 +43,9 @@ class Tools || (isset($_SERVER["SERVER_PORT"]) && $_SERVER["SERVER_PORT"] == '443') // HTTPS detection. || (isset($_SERVER["SERVER_PORT"]) //Custom HTTPS port detection - && $_SERVER["SERVER_PORT"] == SSL_PORT); + && $_SERVER["SERVER_PORT"] == SSL_PORT) + || (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) + && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https'); $serverport = (!isset($_SERVER["SERVER_PORT"]) || $_SERVER["SERVER_PORT"] == '80' diff --git a/inc/poche/Url.class.php b/inc/poche/Url.class.php index 8b3468c3a..aba236fa5 100644 --- a/inc/poche/Url.class.php +++ b/inc/poche/Url.class.php @@ -1,9 +1,9 @@ + * @category wallabag + * @author Nicolas Lœuillet * @copyright 2013 * @license http://www.wtfpl.net/ see COPYING file */ diff --git a/inc/poche/User.class.php b/inc/poche/User.class.php index 6dac78397..cc8bec650 100644 --- a/inc/poche/User.class.php +++ b/inc/poche/User.class.php @@ -1,9 +1,9 @@ + * @category wallabag + * @author Nicolas Lœuillet * @copyright 2013 * @license http://www.wtfpl.net/ see COPYING file */ diff --git a/inc/poche/config.inc.php.new b/inc/poche/config.inc.php.new index c60d4f800..39cb2f2f2 100755 --- a/inc/poche/config.inc.php.new +++ b/inc/poche/config.inc.php.new @@ -1,9 +1,9 @@ + * @category wallabag + * @author Nicolas Lœuillet * @copyright 2013 * @license http://www.wtfpl.net/ see COPYING file */ @@ -55,7 +55,9 @@ define ('PAGINATION', '10'); define ('POCKET_FILE', '/ril_export.html'); define ('READABILITY_FILE', '/readability'); define ('INSTAPAPER_FILE', '/instapaper-export.html'); +define ('POCHE_FILE', '/poche-export'); define ('IMPORT_POCKET_FILE', ROOT . POCKET_FILE); define ('IMPORT_READABILITY_FILE', ROOT . READABILITY_FILE); define ('IMPORT_INSTAPAPER_FILE', ROOT . INSTAPAPER_FILE); +define ('IMPORT_POCHE_FILE', ROOT . POCHE_FILE); \ No newline at end of file diff --git a/inc/poche/global.inc.php b/inc/poche/global.inc.php index 846699d3f..e2beade1f 100644 --- a/inc/poche/global.inc.php +++ b/inc/poche/global.inc.php @@ -1,9 +1,9 @@ + * @category wallabag + * @author Nicolas Lœuillet * @copyright 2013 * @license http://www.wtfpl.net/ see COPYING file */ diff --git a/inc/poche/pochePictures.php b/inc/poche/pochePictures.php index b0cfb9df8..e4b0b1608 100644 --- a/inc/poche/pochePictures.php +++ b/inc/poche/pochePictures.php @@ -1,9 +1,9 @@ + * @category wallabag + * @author Nicolas Lœuillet * @copyright 2013 * @license http://www.wtfpl.net/ see COPYING file */ diff --git a/index.php b/index.php index 4e86fe11d..9113f1932 100644 --- a/index.php +++ b/index.php @@ -1,14 +1,14 @@ + * @category wallabag + * @author Nicolas Lœuillet * @copyright 2013 * @license http://www.wtfpl.net/ see COPYING file */ -define ('POCHE', '1.3.0'); +define ('POCHE', '1.4.0'); require_once 'inc/poche/global.inc.php'; session_start(); diff --git a/install/mysql.sql b/install/mysql.sql index d16381d83..de5640e4a 100644 --- a/install/mysql.sql +++ b/install/mysql.sql @@ -9,8 +9,8 @@ CREATE TABLE IF NOT EXISTS `entries` ( `id` int(11) NOT NULL AUTO_INCREMENT, `title` varchar(255) NOT NULL, `url` varchar(255) NOT NULL, - `is_read` tinyint(1) NOT NULL, - `is_fav` tinyint(1) NOT NULL, + `is_read` tinyint(1) NOT NULL DEFAULT 0, + `is_fav` tinyint(1) NOT NULL DEFAULT 0, `content` blob NOT NULL, `user_id` int(11) NOT NULL, PRIMARY KEY (`id`) @@ -20,7 +20,7 @@ CREATE TABLE IF NOT EXISTS `users` ( `id` int(11) NOT NULL AUTO_INCREMENT, `username` varchar(255) NOT NULL, `password` varchar(255) NOT NULL, - `name` int(255) NOT NULL, + `name` varchar(255) NOT NULL, `email` varchar(255) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; diff --git a/themes/README.md b/themes/README.md deleted file mode 100644 index b5d925b46..000000000 --- a/themes/README.md +++ /dev/null @@ -1,31 +0,0 @@ -# poche-themes - -themes created by poche users - -## list of themes - -* dark ([preview](https://raw.github.com/inthepoche/poche/master/themes/dark/screenshot.jpg)) -* dmagenta ([preview](https://raw.github.com/inthepoche/poche/master/themes/dmagenta/screenshot.jpg)) -* solarized ([preview](https://raw.github.com/inthepoche/poche/master/themes/solarized/screenshot.jpg)) -* solarized-dark ([preview](https://raw.github.com/inthepoche/poche/master/themes/solarized-dark/screenshot.jpg)) - -## installation - -In your poche folder: - -``` -git submodule init -git submodule update -``` - -Then, in your config screen, select your favorite theme. - -That's all ! - -## create a theme - -Just have a look to this short documentation : http://doc.inthepoche.com/doku.php?id=designers:creating_theme - -## send a theme - -Send your theme by email at support@inthepoche.com. diff --git a/themes/courgette/README.md b/themes/courgette/README.md new file mode 100755 index 000000000..e13d39001 --- /dev/null +++ b/themes/courgette/README.md @@ -0,0 +1,3 @@ +# Courgette Theme + +theme created by Thomas LEBEAU alias Courgette http://thomaslebeau.fr/ \ No newline at end of file diff --git a/themes/courgette/_head.twig b/themes/courgette/_head.twig new file mode 100755 index 000000000..57b40f41c --- /dev/null +++ b/themes/courgette/_head.twig @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/themes/courgette/_menu.twig b/themes/courgette/_menu.twig new file mode 100755 index 000000000..85487f739 --- /dev/null +++ b/themes/courgette/_menu.twig @@ -0,0 +1,9 @@ + \ No newline at end of file diff --git a/themes/courgette/_top.twig b/themes/courgette/_top.twig new file mode 100755 index 000000000..792687c06 --- /dev/null +++ b/themes/courgette/_top.twig @@ -0,0 +1,9 @@ +
+

+ {% if view == 'home' %}{% block logo %}logo poche{% endblock %} + {% elseif view == 'fav' %}{{ block('logo') }} Favoris + {% elseif view == 'archive' %}{{ block('logo') }} Archive + {% else %}{{ block('logo') }} + {% endif %} +

+
\ No newline at end of file diff --git a/themes/courgette/config.twig b/themes/courgette/config.twig new file mode 100755 index 000000000..26da7289b --- /dev/null +++ b/themes/courgette/config.twig @@ -0,0 +1,82 @@ +{% 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 theme" %}

+
+
+
+ + +
+
+ +
+
+ + +
+ +

{% 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:" %} wallabag.org

+ + +

{% trans "Export your poche datas" %}

+

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

+
+{% endblock %} \ No newline at end of file diff --git a/themes/courgette/css/.DS_Store b/themes/courgette/css/.DS_Store new file mode 100644 index 000000000..c788a0934 Binary files /dev/null and b/themes/courgette/css/.DS_Store differ diff --git a/themes/courgette/css/font.css b/themes/courgette/css/font.css new file mode 100755 index 000000000..7c16cce4a --- /dev/null +++ b/themes/courgette/css/font.css @@ -0,0 +1,10 @@ +@font-face { + font-family: 'fontello'; + src: url('../font/fontello.eot?97381924'); + src: url('../font/fontello.eot?97381924#iefix') format('embedded-opentype'), + url('../font/fontello.woff?97381924') format('woff'), + url('../font/fontello.ttf?97381924') format('truetype'), + url('../font/fontello.svg?97381924#fontello') format('svg'); + font-weight: normal; + font-style: normal; +} \ No newline at end of file diff --git a/themes/courgette/css/knacss.css b/themes/courgette/css/knacss.css new file mode 100755 index 000000000..e69de29bb diff --git a/themes/courgette/css/messages.css b/themes/courgette/css/messages.css new file mode 100755 index 000000000..fe6fbbe80 --- /dev/null +++ b/themes/courgette/css/messages.css @@ -0,0 +1,75 @@ +.messages { + display: block; + clear: both; + width: 400px; + margin: 10px auto 10px; + padding: 10px 0; + -moz-border-radius: 4px; + border-radius: 4px; +} + +.messages a.closeMessage { + display: none; + float: right; + width: 16px; + height: 16px; + margin: -14px -8px 0 0; + 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 { + color: #c00 !important; + background: url(../img/messages/cross.png) no-repeat 0 50%; +} + +.messages.success { + border: 1px solid #6dc70c; + background: #e0fbcc; +} + +.messages.success p { + color: #2b6301 !important; + background: url(../img/messages/tick.png) no-repeat 0 50%; +} + +.messages.warning { + border: 1px solid #ebcd41; + color: #000; + background: #fffcd3; +} + +.messages.warning p { + color: #5f4e01; + background: url(../img/messages/warning.png) no-repeat 0 50%; +} + +.messages.information, +.messages.info { + border: 1px solid #82aee7; + background: #dfebfb; +} + +.messages.information p, +.messages.info p { + color: #064393; + background: url(../img/messages/help.png) no-repeat 0 50%; +} + +.messages.information a { + text-decoration: underline; +} \ No newline at end of file diff --git a/themes/courgette/css/print.css b/themes/courgette/css/print.css new file mode 100755 index 000000000..9aefa779e --- /dev/null +++ b/themes/courgette/css/print.css @@ -0,0 +1,48 @@ +/* ### Layout ### */ + +body { + font-family: Serif; + background-color: #fff; +} + +@page { + margin: 1cm; +} + +img { + max-width: 100% !important; +} + +/* ### Content ### */ + +/* Hide useless blocks */ +body > header, +#links, +#sort, +body > footer, +.top_link, +div.tools, +header div, +.messages, +.entrie + .results { + display: none !important; +} + +article { + border: none !important; +} + +/* Add URL after links */ +.vieworiginal a:after { + content: " (" attr(href) ")"; +} + +/* Add explanation after abbr */ +abbr[title]:after { + content: " (" attr(title) ")"; +} + +/* Change border on current pager item */ +.pagination span.current { + border-style: dashed; +} diff --git a/themes/courgette/css/style-default.css b/themes/courgette/css/style-default.css new file mode 100755 index 000000000..3377a75be --- /dev/null +++ b/themes/courgette/css/style-default.css @@ -0,0 +1,59 @@ +a.back span { + background-image: url('../img/default/left.png'); +} + +a.top span { + background-image: url('../img/default/top.png'); +} + +a.fav span, +a.fav-off span:hover { + background-image: url('../img/default/star-on.png'); +} + +a.fav span:hover, +a.fav-off span { + background-image: url('../img/default/star-off.png'); +} + +a.archive span, +a.archive-off span:hover { + background-image: url('../img/default/checkmark-on.png'); +} + +a.archive span:hover, +a.archive-off span { + background-image: url('../img/default/checkmark-off.png'); +} + +a.twitter span { + background-image: url('../img/default/twitter.png'); +} + +a.shaarli span { + background-image: url('../img/default/shaarli.png'); +} + +a.flattr span { + background-image: url('../img/default/flattr.png'); +} + +a.email span { + background-image: url('../img/default/envelop.png'); +} + +a.delete span { + background-image: url('../img/default/remove.png'); +} + +a.link span { + background-image: url('../img/default/link.png'); +} + +a.bad-display span { + background-image: url('../img/default/bad-display.png'); +} + +a.reading-time span { + background-image: url('../img/default/clock.png'); +} diff --git a/themes/courgette/css/style.css b/themes/courgette/css/style.css new file mode 100755 index 000000000..2ba16b717 --- /dev/null +++ b/themes/courgette/css/style.css @@ -0,0 +1,620 @@ +* { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +body { + margin: 10px; + font-family: 'Roboto',Verdana,Geneva,sans-serif; + font-size: 16px; + color: #000; +} + +h1 span { + color #FFF; + background: #000; + display: inline-block; + padding: 0.2em 1em 0.2em 1.2em; + font-size: 0.7em; + position: relative; + top: -1em; + left: -1em; +} + +h1 a { + color: #FFF; + text-decoration: none; +} + +#menu { + font-family: 'fontello'; + position:fixed; + z-index: 11; + top: 0.7em; + right: 0.5em; + border:0; + font-size: 2em; + background: #000; + color:#FFF; + height: 58px; + width: 58px; + line-height:58px; + border-radius:120px; +} + +#menu:hover, #menu:focus { + background: #FFF; + color:#000; + cursor: pointer; +} + +#menu span { + position: absolute; + top: -99999px; +} + +#menuContainer ul, #article_toolbar ul { + position:fixed; + top: 0; + left:0; + width: 100%; + padding: 0; + margin: 0; + text-align:center; + height:80px; +} + +/*Inspired by http://tympanus.net/Tutorials/AnimatedBorderMenus/index.html */ + +#menuContainer, #article_toolbar { + position: fixed; + top: 0; + left:0; + width: 100%; + height: 0; + overflow: hidden; + border-width:0; + border-style: solid; + border-color:#000; + background-color: transparent; + -webkit-transition: border-width 0.3s, background-color 0.3s, height 0s 0.3s; + -moz-transition: border-width 0.3s, background-color 0.3s, height 0s 0.3s; + transition: border-width 0.3s, background-color 0.3s, height 0s 0.3s; +} + +#article_toolbar ul { + padding: 1.7em; +} + +#menuContainer.open, #article_toolbar.open { + border-width:80px; + height: 100%; + background: rgba(0,0,0,0.5); + -webkit-transition: border-width 0.3s, background-color 0.3s; + -moz-transition: border-width 0.3s, background-color 0.3s; + transition: border-width 0.3s, background-color 0.3s; + z-index: 1; +} + +#links li, #article_toolbar li { + list-style: none; + display: inline-block; +} + +#links li a, #article_toolbar a { + color:#FFF; + display: block; + position:relative; + top: -200px; + -webkit-transition: top 0.3s ease; + -moz-transition: top 0.3s ease; + transition: top 0.3s ease; + padding:1.85em 1em; +} + +#links li a { + text-decoration:none; + text-transform:uppercase; +} + +#links li a:hover, #links li a:focus { + background: #FFF; + color:#000; +} + +#menuContainer.open li a, #article_toolbar.open a { + top: 0; + -webkit-transition: top 0.3s ease; + -moz-transition: top 0.3s ease; + transition: top 0.3s ease; + -webkit-transition-delay:0.25ms; + -moz-transition-delay:0.25ms; + transition-delay:0.25ms; +} + +#menuContainer.open li:nth-child(2) a { + -webkit-transition-delay:0.50ms; + -moz-transition-delay:0.50ms; + transition-delay:0.50ms; +} + +#menuContainer.open li:nth-child(3) a { + -webkit-transition-delay:1ms; + -moz-transition-delay:1ms; + transition-delay:1ms; +} + +#menuContainer.open li:nth-child(4) a { + -webkit-transition-delay:1.25ms; + -moz-transition-delay:1.25ms; + transition-delay:1.25ms; +} + +#menuContainer.open li:nth-child(5) a { + -webkit-transition-delay:1.55ms; + -moz-transition-delay:1.55ms; + transition-delay:1.55ms; +} + +#menu:before { + content: "\e801"; + display: block; + text-indent: 0; +} + +body > header { + position: fixed; + top: 0; + left: 1em; + z-index: 10; +} + +#main { + padding:6em; +} + +/* ========================================================================== + entrie + ========================================================================== */ + +.entrie, #article { + width: 45em; + margin: auto; + position:relative; + padding: 0 0 1em 0; + margin-bottom: 1.5em; +} + +#article a { + text-decoration: underline; + color:#000; +} + +#article a:hover, #article a:focus { + text-decoration: none; +} + +.entrie:after { + content:""; + position: absolute; + width: 100%; + height: 4px; + background: #000; + bottom:0; + left: -1em; +} + +.entrie p { + padding:0 0 0 1.5em; +} + +.entrie:before { + content:''; + position: absolute; + top: 0; + left: -1em; + width: 4px; + height: 100%; + background: #000; +} + +.entrie h2:after { + content:""; + display: block; + width: 0; + height: 0; + border-color: #000; + border-width:7px; + border-color:transparent transparent transparent #000; + border-style: solid; + position: absolute; + top: 0.8em; + right: -0.58em; +} + +.entrie h2 { + margin:0; + display: inline-block; + position: relative; + max-width: 78%; +} + +.entrie h2 a { + color:#000; + text-decoration:none; + display: block; + background: #000; + padding: 0.4em 1em; + color:#FFF; + margin-left: -0.5em; + -webkit-transition: all 0.3s ease-out; + -moz-transition: all 0.3s ease-out; + transition: all 0.3s ease-out; +} + +.entrie h2 a:hover, .entrie h2 a:focus { + padding:0.4em 1em 0.4em 2em; +} + +ul { + padding:0; + margin:0; +} + +ul li { + list-style: none; +} + +.tools { + display: inline-block; + margin-left: 1em; + vertical-align: top; + padding-top: 1em; +} + +.tools a span { + position:absolute; + top: -99999px; +} + +.tools li { + display: inline-block; +} + +.tools a { + display: block; + color:#FFF; + background: #000; + text-decoration:none; + height: 1.5em; + width: 1.5em; + text-align: center; + line-height:1.5em; + border-radius: 90px; +} + +.tools a:hover, .tools a:focus { + background: #FFF; + color:#000; +} + +.tools a:before { display: block; font-family: 'fontello'; } + + +.fav-off:before, .fav:before { content: '\e805'; } /* '' */ +.archive-off:before, .archive:before { content: '\e804'; } /* '' */ +.tools .archive, .tools .fav { + background: #FFF; + color:#000; +} +.link:before { content: '\e800'; } /* '' */ +.delete:before { content: '\e803'; } /* '' */ +.reading-time:before { content: '\e802'; } /* '' */ + +#article_toolbar a:before { + display: block; + font-family: 'fontello'; +} + +#article_toolbar a { + display: block; + color:#000; + background: #FFF; + text-decoration:none; + height: 1.5em; + width: 1.5em; + text-align: center; + line-height:1.5em; + border-radius: 90px; + padding: 0; +} + +#article_toolbar a:hover, #article_toolbar a:focus { + background: #000; + color:#FFF; +} + +#article_toolbar span { + position: absolute; + top: -99999px; +} + +.email:before { content: '\e80a'; } /* '' */ +.icon-check:before { content: '\e804'; } /* '' */ +.back:before { content: '\e806'; } /* '' */ +.bad-display:before { content: '\e808'; } /* '' */ +.twitter:before { content: '\e807'; } /* '' */ + +#article_toolbar .flattrli { + display: none; +} + +#article_toolbar li { + margin: 0 0 0 1em; +} + + +footer { + position: fixed; + bottom: 0; + width: 100%; + padding: 0 2%; + left: 0; + text-align:right; + font-size: 0.8em; + font-style: italic; + background: rgba(255,255,255,0.5); +} + +footer a { + color:#000; +} + +footer a:hover,footer a:focus { + text-decoration: none; +} + +footer p:first-child { + float:left; +} + +#loginForm fieldset { + border:5px solid #000; + padding: 1.5em; +} + +fieldset { + border:0; + padding: 0; +} + +#loginForm { + max-width: 25em; + margin: auto; +} + +#loginForm .row { + margin-bottom: 0.5em; +} + +form h2 { + margin-top: 0; +} + +form label { + width: 40%; + display: inline-block; +} + +form input[type="text"], form input[type="password"], form input[type='url'], form select { + border:1px solid #000; + padding:0.5em 1em; +} + +@media screen and (-webkit-min-device-pixel-ratio:0){ + form select{ + -webkit-appearance: none; + background: url(../img/bg-select.png) no-repeat right center; + padding-right: 2.2em; + border-radius: 0; + } +} + +form button, form input[type="submit"] { + background: #000; + color:#FFF; + border:0; + font-size:1em; + padding:0.5em 1em; + margin-top: 1em; + cursor: pointer; +} + +form button:hover, form button:focus, form input[type="submit"]:hover, form input[type="submit"]:focus { + background: #FFF; + color: #000; +} + +/* ========================================================================== + Config + ========================================================================== */ + +#config { + max-width: 60%; + margin: auto; +} + +#config a { + background: #000; + text-decoration: none; + color:#FFF; + padding: 0.2em 1em; +} + +#config .special { + background: none; + padding:0; + color: #000; +} + +#config a:hover, #config a:focus { + background: #FFF; + color:#000; +} + +#config li { + margin-bottom: 1em; +} + +#plainurl { + font-size: 1em; +} + +#config label { + width: 20%; +} + +.results { + max-width: 62.5%; + font-style:italic; + margin: 1em auto 2.5em; +} + +#sort { + max-width: 62.5%; + margin: 0 auto -2.5em; + text-align: right; + border-bottom:1px dotted #000; +} + +#sort li { + display: inline-block; + vertical-align: top; + position: relative; + top: -0.1em; + margin-left: 1em; +} + +#sort li img { + display: none; +} + +#sort a { + display: inline-block; + font-family: 'fontello'; + color:#000; + text-decoration: none; +} + +#sort a:hover, #sort a:focus { + text-decoration: underline; +} + +#sort a:before { + display: block; +} + +#sort li a:first-child:before { + content: '\e809'; +} + +#sort li a:first-child + a:before { + content: '\e80b'; +} + +@media screen and (max-width: 860px) { + .entrie, #article { + width: 30em; + } +} + +@media screen and (max-width: 650px) { + #menuContainer ul, #article_toolbar ul { + width: 120px; + height: 100%; + } + + body > header { + position: static; + } + + #main { + padding: 0 0.5em 6em; + } + + #menu { + display: none; + } + + #main:before { + content:none; + } + + #menuContainer, #article_toolbar, #menuContainer ul, #article_toolbar ul { + position: static; + width: 100%; + height: auto; + } + + #links li a, #article_toolbar a { + position: static; + color: #000; + } + + #links li a { + padding: 1em; + min-width: 120px; + text-align: left; + } + + #article_toolbar li { + margin-bottom: 1em; + margin-left: 0.5em; + } + +} + +@media screen and (max-width: 500px) { + .entrie, #article { + width: 17em; + } + .entrie h2 { + width: 100%; + max-width: none; + } + .entrie h2 a:hover, .entrie h2 a:focus { + padding-left: 1em; + background: #FFF; + color: #000; + } + .entrie h2:after { + content:none; + } + + .messages { + width: 100%!important; + } + + #sort { + margin: 3em auto 0; + max-width: none; + text-align: center; + } + #config { + margin: 7em auto 0; + max-width: none; + } + #config label { width: 100%; } + .results { + max-width: none; + margin-bottom: 1em; + } + + footer p:first-child { + float: none; + } + footer { + position:static; + } +} diff --git a/themes/courgette/error.twig b/themes/courgette/error.twig new file mode 100755 index 000000000..4d4db1f31 --- /dev/null +++ b/themes/courgette/error.twig @@ -0,0 +1,6 @@ +{% 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/themes/courgette/font/fontello.eot b/themes/courgette/font/fontello.eot new file mode 100644 index 000000000..3c5603ddd Binary files /dev/null and b/themes/courgette/font/fontello.eot differ diff --git a/themes/courgette/font/fontello.svg b/themes/courgette/font/fontello.svg new file mode 100644 index 000000000..0e0118ed6 --- /dev/null +++ b/themes/courgette/font/fontello.svg @@ -0,0 +1,23 @@ + + + +Copyright (C) 2013 by original authors @ fontello.com + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/themes/courgette/font/fontello.ttf b/themes/courgette/font/fontello.ttf new file mode 100644 index 000000000..1967dfaa4 Binary files /dev/null and b/themes/courgette/font/fontello.ttf differ diff --git a/themes/courgette/font/fontello.woff b/themes/courgette/font/fontello.woff new file mode 100644 index 000000000..c62afa548 Binary files /dev/null and b/themes/courgette/font/fontello.woff differ diff --git a/themes/courgette/home.twig b/themes/courgette/home.twig new file mode 100755 index 000000000..1367ebe83 --- /dev/null +++ b/themes/courgette/home.twig @@ -0,0 +1,49 @@ +{% 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) }}...

+
+ {% endfor %} + {% endif %} + {{ block('pager') }} +{% endblock %} \ No newline at end of file diff --git a/themes/courgette/img/apple-touch-icon-144x144-precomposed.png b/themes/courgette/img/apple-touch-icon-144x144-precomposed.png new file mode 100755 index 000000000..557b479ce Binary files /dev/null and b/themes/courgette/img/apple-touch-icon-144x144-precomposed.png differ diff --git a/themes/courgette/img/apple-touch-icon-72x72-precomposed.png b/themes/courgette/img/apple-touch-icon-72x72-precomposed.png new file mode 100755 index 000000000..e167d3a41 Binary files /dev/null and b/themes/courgette/img/apple-touch-icon-72x72-precomposed.png differ diff --git a/themes/courgette/img/apple-touch-icon.png b/themes/courgette/img/apple-touch-icon.png new file mode 100755 index 000000000..4d222fbac Binary files /dev/null and b/themes/courgette/img/apple-touch-icon.png differ diff --git a/themes/courgette/img/bg-select.png b/themes/courgette/img/bg-select.png new file mode 100644 index 000000000..3a77d0ebb Binary files /dev/null and b/themes/courgette/img/bg-select.png differ diff --git a/themes/courgette/img/default/backtotop.png b/themes/courgette/img/default/backtotop.png new file mode 100755 index 000000000..051238ef9 Binary files /dev/null and b/themes/courgette/img/default/backtotop.png differ diff --git a/themes/courgette/img/default/bad-display.png b/themes/courgette/img/default/bad-display.png new file mode 100755 index 000000000..6866799fc Binary files /dev/null and b/themes/courgette/img/default/bad-display.png differ diff --git a/themes/courgette/img/default/checkmark-off.png b/themes/courgette/img/default/checkmark-off.png new file mode 100755 index 000000000..3db5a06dc Binary files /dev/null and b/themes/courgette/img/default/checkmark-off.png differ diff --git a/themes/courgette/img/default/checkmark-on.png b/themes/courgette/img/default/checkmark-on.png new file mode 100755 index 000000000..cd3abb2c0 Binary files /dev/null and b/themes/courgette/img/default/checkmark-on.png differ diff --git a/themes/courgette/img/default/clock.png b/themes/courgette/img/default/clock.png new file mode 100755 index 000000000..6164e92bb Binary files /dev/null and b/themes/courgette/img/default/clock.png differ diff --git a/themes/courgette/img/default/down.png b/themes/courgette/img/default/down.png new file mode 100755 index 000000000..b9d536a7c Binary files /dev/null and b/themes/courgette/img/default/down.png differ diff --git a/themes/courgette/img/default/envelop.png b/themes/courgette/img/default/envelop.png new file mode 100755 index 000000000..6be1c8864 Binary files /dev/null and b/themes/courgette/img/default/envelop.png differ diff --git a/themes/courgette/img/default/flattr.png b/themes/courgette/img/default/flattr.png new file mode 100755 index 000000000..0404aaeaf Binary files /dev/null and b/themes/courgette/img/default/flattr.png differ diff --git a/themes/courgette/img/default/left.png b/themes/courgette/img/default/left.png new file mode 100755 index 000000000..a0a53631e Binary files /dev/null and b/themes/courgette/img/default/left.png differ diff --git a/themes/courgette/img/default/link.png b/themes/courgette/img/default/link.png new file mode 100755 index 000000000..db62819d5 Binary files /dev/null and b/themes/courgette/img/default/link.png differ diff --git a/themes/courgette/img/default/remove.png b/themes/courgette/img/default/remove.png new file mode 100755 index 000000000..f8ad56a3e Binary files /dev/null and b/themes/courgette/img/default/remove.png differ diff --git a/themes/courgette/img/default/shaarli.png b/themes/courgette/img/default/shaarli.png new file mode 100755 index 000000000..1eb30f60b Binary files /dev/null and b/themes/courgette/img/default/shaarli.png differ diff --git a/themes/courgette/img/default/star-off.png b/themes/courgette/img/default/star-off.png new file mode 100755 index 000000000..6a0133a79 Binary files /dev/null and b/themes/courgette/img/default/star-off.png differ diff --git a/themes/courgette/img/default/star-on.png b/themes/courgette/img/default/star-on.png new file mode 100755 index 000000000..a9f96eaac Binary files /dev/null and b/themes/courgette/img/default/star-on.png differ diff --git a/themes/courgette/img/default/top.png b/themes/courgette/img/default/top.png new file mode 100755 index 000000000..954a8c0ac Binary files /dev/null and b/themes/courgette/img/default/top.png differ diff --git a/themes/courgette/img/default/twitter.png b/themes/courgette/img/default/twitter.png new file mode 100755 index 000000000..cfcfe4195 Binary files /dev/null and b/themes/courgette/img/default/twitter.png differ diff --git a/themes/courgette/img/favicon.ico b/themes/courgette/img/favicon.ico new file mode 100755 index 000000000..0e9ff7795 Binary files /dev/null and b/themes/courgette/img/favicon.ico differ diff --git a/themes/courgette/img/logo.png b/themes/courgette/img/logo.png new file mode 100755 index 000000000..5305c77da Binary files /dev/null and b/themes/courgette/img/logo.png differ diff --git a/themes/courgette/img/logo.svg b/themes/courgette/img/logo.svg new file mode 100644 index 000000000..865da440d --- /dev/null +++ b/themes/courgette/img/logo.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/themes/courgette/img/messages/close.png b/themes/courgette/img/messages/close.png new file mode 100755 index 000000000..731aa018f Binary files /dev/null and b/themes/courgette/img/messages/close.png differ diff --git a/themes/courgette/img/messages/cross.png b/themes/courgette/img/messages/cross.png new file mode 100755 index 000000000..1514d51a3 Binary files /dev/null and b/themes/courgette/img/messages/cross.png differ diff --git a/themes/courgette/img/messages/help.png b/themes/courgette/img/messages/help.png new file mode 100755 index 000000000..5c870176d Binary files /dev/null and b/themes/courgette/img/messages/help.png differ diff --git a/themes/courgette/img/messages/tick.png b/themes/courgette/img/messages/tick.png new file mode 100755 index 000000000..a9925a06a Binary files /dev/null and b/themes/courgette/img/messages/tick.png differ diff --git a/themes/courgette/img/messages/warning.png b/themes/courgette/img/messages/warning.png new file mode 100755 index 000000000..628cf2dae Binary files /dev/null and b/themes/courgette/img/messages/warning.png differ diff --git a/themes/courgette/js/init.js b/themes/courgette/js/init.js new file mode 100755 index 000000000..dca839068 --- /dev/null +++ b/themes/courgette/js/init.js @@ -0,0 +1,6 @@ +$.fn.ready(function () { + $('#menu').on('click', function(){ + $('body').toggleClass('menuOpen'); + $('#menuContainer, #article_toolbar').toggleClass('open'); + }); +}) \ No newline at end of file diff --git a/themes/courgette/js/restoreScroll.js b/themes/courgette/js/restoreScroll.js new file mode 100755 index 000000000..331c9e196 --- /dev/null +++ b/themes/courgette/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/themes/courgette/layout.twig b/themes/courgette/layout.twig new file mode 100755 index 000000000..57c2cc982 --- /dev/null +++ b/themes/courgette/layout.twig @@ -0,0 +1,32 @@ + + + + + + + + + + + {% block title %}{% endblock %} - wallabag +{% include '_head.twig' %} +{% include '_bookmarklet.twig' %} + + + {% include '_top.twig' %} +
+ + {% block menu %}{% endblock %} + {% block precontent %}{% endblock %} + {% block messages %} + {% include '_messages.twig' %} + {% endblock %} +
+ {% block content %}{% endblock %} +
+
+{% include '_footer.twig' %} + + \ No newline at end of file diff --git a/themes/courgette/login.twig b/themes/courgette/login.twig new file mode 100755 index 000000000..1fec0fc94 --- /dev/null +++ b/themes/courgette/login.twig @@ -0,0 +1,32 @@ +{% extends "layout.twig" %} + +{% block title %}{% trans "login to your wallabag" %}{% endblock %} +{% block content %} +
+
+

{% trans "login to your wallabag" %}

+ {% if constant('MODE_DEMO') == 1 %}

{% trans "you are in demo mode, some features may be disabled." %}

{% endif %} +
+ + +
+ +
+ + +
+
+ +
+ + {% trans "(Do not check on public computers)" %} +
+
+
+ +
+
+ + +
+{% endblock %} \ No newline at end of file diff --git a/themes/courgette/screenshot.jpg b/themes/courgette/screenshot.jpg new file mode 100755 index 000000000..44ee4b630 Binary files /dev/null and b/themes/courgette/screenshot.jpg differ diff --git a/themes/courgette/theme.ini b/themes/courgette/theme.ini new file mode 100644 index 000000000..996d171f1 --- /dev/null +++ b/themes/courgette/theme.ini @@ -0,0 +1,3 @@ +name = Courgette +description = Responsive black and white theme especially adapted to smartphones. +requirements[] = default diff --git a/themes/courgette/view.twig b/themes/courgette/view.twig new file mode 100755 index 000000000..e80829eff --- /dev/null +++ b/themes/courgette/view.twig @@ -0,0 +1,45 @@ +{% extends "layout.twig" %} +{% block title %}{{ entry.title|raw }} ({{ entry.url | e | getDomain }}){% endblock %} +{% block content %} +
+ +
+
+
+

{{ entry.title|raw }}

+
+
+ {{ content | raw }} +
+
+ + +{% endblock %} \ No newline at end of file diff --git a/themes/dark/theme.ini b/themes/dark/theme.ini new file mode 100644 index 000000000..4b020d363 --- /dev/null +++ b/themes/dark/theme.ini @@ -0,0 +1,2 @@ +name = Dark +requirements[] = default diff --git a/themes/default/_bookmarklet.twig b/themes/default/_bookmarklet.twig index 2f3b2d165..2e3071ad6 100644 --- a/themes/default/_bookmarklet.twig +++ b/themes/default/_bookmarklet.twig @@ -1,3 +1,3 @@ \ No newline at end of file diff --git a/themes/default/_footer.twig b/themes/default/_footer.twig index 06148a57c..f837ae38e 100644 --- a/themes/default/_footer.twig +++ b/themes/default/_footer.twig @@ -1,4 +1,4 @@
-

{% trans "powered by" %} poche

+

{% trans "powered by" %} wallabag

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

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

{% endif %}
\ No newline at end of file diff --git a/themes/default/config.twig b/themes/default/config.twig index 10df726e0..df62520a7 100644 --- a/themes/default/config.twig +++ b/themes/default/config.twig @@ -6,10 +6,10 @@ {% endblock %} {% block content %}

{% trans "Poching links" %}

-

{% trans "There are several ways to poche a link:" %} (?)

+

{% trans "There are several ways to poche a link:" %} (?)

{% trans "Updating poche" %}

{% trans "Feeds" %}

@@ -38,6 +38,8 @@
  • {% trans "Favorites feed" %}
  • {% trans "Archive feed" %}
  • +

    {% trans "Your token:" %} {{token}}

    +

    {% trans "Your user id:" %} {{user_id}}

    {% trans "You can regenerate your token: generate!." %}

    {% endif %} @@ -47,8 +49,8 @@
    @@ -102,11 +104,12 @@

    {% trans "Import" %}

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

    -

    {% trans "More info in the official docs:" %} inthepoche.com

    +

    {% trans "More info in the official docs:" %} wallabag.org

    {% trans "Export your poche data" %}

    diff --git a/themes/default/error.twig b/themes/default/error.twig index 4cfc48240..528a09858 100644 --- a/themes/default/error.twig +++ b/themes/default/error.twig @@ -7,5 +7,8 @@
  • {{message}}
  • {% endfor %} -

    Don't forget the documentation.

    +

    Don't forget the documentation.

    +

    + {% trans "You can check your configuration here." %} +

    {% endblock %} diff --git a/themes/default/install.twig b/themes/default/install.twig index c4da09548..c89c7e47e 100644 --- a/themes/default/install.twig +++ b/themes/default/install.twig @@ -3,9 +3,9 @@ {% block content %}
    -

    {% trans "install your poche" %}

    +

    {% trans "install your wallabag" %}

    - {% 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 "wallabag is still not installed. Please fill the below form to install it. Don't hesitate to read the documentation on wallabag website." %}

    diff --git a/themes/default/layout.twig b/themes/default/layout.twig index fec7054ab..dfebc3eac 100644 --- a/themes/default/layout.twig +++ b/themes/default/layout.twig @@ -10,7 +10,7 @@ - {% block title %}{% endblock %} - poche + {% block title %}{% endblock %} - wallabag {% include '_head.twig' %} {% include '_bookmarklet.twig' %} diff --git a/themes/default/login.twig b/themes/default/login.twig index e2a9a9f52..bf6852406 100644 --- a/themes/default/login.twig +++ b/themes/default/login.twig @@ -1,11 +1,11 @@ {% extends "layout.twig" %} -{% block title %}{% trans "login to your poche" %}{% endblock %} +{% block title %}{% trans "login to your wallabag" %}{% endblock %} {% block content %} {% if http_auth == 0 %}

    -

    {% trans "Login to poche" %}

    +

    {% trans "Login to wallabag" %}

    {% if constant('MODE_DEMO') == 1 %}

    {% trans "you are in demo mode, some features may be disabled." %}

    {% endif %}
    diff --git a/themes/default/theme.ini b/themes/default/theme.ini new file mode 100644 index 000000000..9f3cfb6a3 --- /dev/null +++ b/themes/default/theme.ini @@ -0,0 +1 @@ +name = Default \ No newline at end of file diff --git a/themes/default/view.twig b/themes/default/view.twig index e4a2fe744..d09977a80 100644 --- a/themes/default/view.twig +++ b/themes/default/view.twig @@ -9,11 +9,11 @@
  • {% trans "Toggle mark as read" %}
  • {% trans "Toggle favorite" %}
  • {% trans "Delete" %}
  • - {% if constant('SHARE_TWITTER') == 1 %}
  • {% endif %} - {% if constant('SHARE_MAIL') == 1 %}
  • {% endif %} + {% 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') %}
  • {% trans "flattr" %}
  • {% elseif flattr.status == constant('FLATTRED') %}
  • {% trans "flattr" %}{{ flattr.numflattrs }}
  • {% endif %}{% endif %} -
  • {% trans "Does this article appear wrong?" %}
  • +
  • {% trans "Does this article appear wrong?" %}
  • diff --git a/themes/dmagenta/theme.ini b/themes/dmagenta/theme.ini new file mode 100644 index 000000000..24ff3c4a1 --- /dev/null +++ b/themes/dmagenta/theme.ini @@ -0,0 +1,2 @@ +name = Dark Magenta +requirements[] = default diff --git a/themes/solarized-dark/css/style-solarized-dark.css b/themes/solarized-dark/css/style-solarized-dark.css index 7ce8a5633..3b0feb2a5 100644 --- a/themes/solarized-dark/css/style-solarized-dark.css +++ b/themes/solarized-dark/css/style-solarized-dark.css @@ -42,7 +42,8 @@ body, body, a, a:hover, -a:visited { +a:visited, +td { color: #839496; } diff --git a/themes/solarized-dark/theme.ini b/themes/solarized-dark/theme.ini new file mode 100644 index 000000000..7b6b341ec --- /dev/null +++ b/themes/solarized-dark/theme.ini @@ -0,0 +1,2 @@ +name = Dark Solarized +requirements[] = default diff --git a/themes/solarized/css/style-solarized.css b/themes/solarized/css/style-solarized.css index 9286c7507..6058d0563 100644 --- a/themes/solarized/css/style-solarized.css +++ b/themes/solarized/css/style-solarized.css @@ -42,7 +42,8 @@ body, body, a, a:hover, -a:visited { +a:visited, +td { color: #657b83; } diff --git a/themes/solarized/theme.ini b/themes/solarized/theme.ini new file mode 100644 index 000000000..703997b9e --- /dev/null +++ b/themes/solarized/theme.ini @@ -0,0 +1,2 @@ +name = Solarized +requirements[] = default diff --git a/poche_compatibility_test.php b/wallabag_compatibility_test.php similarity index 98% rename from poche_compatibility_test.php rename to wallabag_compatibility_test.php index 42faaa2ce..fd2850420 100644 --- a/poche_compatibility_test.php +++ b/wallabag_compatibility_test.php @@ -1,5 +1,5 @@ =')); $pcre_ok = extension_loaded('pcre'); @@ -313,13 +313,13 @@ div.chunk {

    Bottom Line: Yes, you can!

    Your webhost has its act together!

    -

    You can download the latest version of from inthepoche.com.

    +

    You can download the latest version of from wallabag.org.

    Note: Passing this test does not guarantee that will run on your webhost — it only ensures that the basic requirements have been addressed. If you experience any problems, please let us know.

    Bottom Line: Yes, you can!

    For most feeds, it'll run with no problems. There are certain languages that you might have a hard time with though.

    -

    You can download the latest version of from inthepoche.com.

    +

    You can download the latest version of from wallabag.org.

    Note: Passing this test does not guarantee that will run on your webhost — it only ensures that the basic requirements have been addressed. If you experience any problems, please let us know.

    Bottom Line: We're sorry…