Compare commits

..

24 Commits

Author SHA1 Message Date
c0d4c895a4 Merge pull request #1211 from goofy-bz/patch-4
Update fr_FR.utf8.po
2015-06-07 01:31:53 +02:00
4687c44602 Update fr_FR.utf8.po
minor typofix "utilisateur"
2015-06-07 01:22:42 +02:00
c56d1f21e3 Merge pull request #1207 from vpmalley/dev
issue #1203: fixing tag export
2015-06-06 17:02:55 +02:00
22a46267be implemented lots of keyboard shortcuts 2015-06-06 16:39:10 +02:00
63fc40ff84 [1005] fixing redirection when deleting archived article 2015-06-02 15:29:44 -04:00
900f2a9160 Merge remote-tracking branch 'upstream/dev' into dev 2015-06-02 11:09:37 -04:00
f9c8087f78 [1203] fixing tag export 2015-06-02 11:09:28 -04:00
ddbb2308a3 check that URL are real ones before importing them (for instance, avoid bookmarklets) 2015-05-30 18:11:00 +02:00
3a690fad55 declare function correctly 2015-05-25 20:44:22 +02:00
12b97d6757 hide article until import is finished 2015-05-25 20:41:39 +02:00
f0a819a968 added commentsand fixed something forgotten 2015-05-22 20:09:23 +02:00
d31766300a added Firefox-bookmarks format import mode 2015-05-22 19:29:12 +02:00
9730853564 revert session destroy to avoid warning 2015-05-22 18:54:55 +02:00
7106983464 Merge pull request #1200 from wallabag/fix-relaunch-import
fix restart of import
2015-05-22 18:51:27 +02:00
2c83940270 fix restart of import 2015-05-19 21:11:19 +02:00
251fa4af94 add forgotten icons 2015-05-15 10:45:11 +02:00
727c35d809 bring to all themes social services and link them to new doc 2015-05-12 16:05:57 +02:00
090957fe3e added Mozilla Social API Sharing method - better late than ever 2015-05-12 15:46:39 +02:00
63fd39c326 just make sure this variable is gone for #1114 2015-05-09 19:17:24 +02:00
8d543d115a added message for #1079 2015-05-09 18:55:20 +02:00
02d4ab1a60 fix sessions lasting through reinstallations, they are now deleted 2015-05-09 18:30:28 +02:00
dc20ddf9b8 version 1.9.1 2015-05-09 17:52:21 +02:00
8b90a8157e use keydown instead of keypress for Chrome compatibility 2015-05-09 17:51:17 +02:00
fdda9fd9a3 fix installation error on wrong credentials (#1175 and #1114) 2015-04-08 16:55:07 +02:00
24 changed files with 455 additions and 201 deletions

View File

@ -323,6 +323,21 @@ class Database {
return $entries;
}
public function retrieveAllWithTags($user_id)
{
$entries = $this->retrieveAll($user_id);
$count = count($entries);
for ($i = 0; $i < $count; $i++) {
$tag_entries = $this->retrieveTagsByEntry($entries[$i]['id']);
$tags = [];
foreach ($tag_entries as $tag) {
$tags[] = $tag[1];
}
$entries[$i]['tags'] = implode(',', $tags);
}
return $entries;
}
public function retrieveOneById($id, $user_id)
{
$entry = NULL;

View File

@ -278,7 +278,7 @@ class Poche
}
Tools::logm($msg);
}
Tools::redirect('?');
Tools::redirect();
break;
case 'toggle_fav' :
$this->store->favoriteById($id, $this->user->getId());
@ -732,23 +732,45 @@ class Poche
$html->load_file($_FILES['file']['tmp_name']);
$data = array();
$read = 0;
foreach (array('ol','ul') as $list) {
foreach ($html->find($list) as $ul) {
foreach ($ul->find('li') as $li) {
$tmpEntry = array();
$a = $li->find('a');
$tmpEntry['url'] = $a[0]->href;
$tmpEntry['tags'] = $a[0]->tags;
$tmpEntry['is_read'] = $read;
if ($tmpEntry['url']) {
$data[] = $tmpEntry;
if (Tools::get_doctype($html)->innertext == "<!DOCTYPE NETSCAPE-Bookmark-file-1>") {
// Firefox-bookmarks HTML
foreach (array('DL','ul') as $list) {
foreach ($html->find($list) as $ul) {
foreach ($ul->find('DT') as $li) {
$tmpEntry = array();
$a = $li->find('A');
$tmpEntry['url'] = $a[0]->href;
$tmpEntry['tags'] = $a[0]->tags;
$tmpEntry['is_read'] = $read;
if ($tmpEntry['url']) {
$data[] = $tmpEntry;
}
}
}
# the second <ol/ul> is for read links
$read = ((sizeof($data) && $read)?0:1);
# the second <ol/ul> is for read links
$read = ((sizeof($data) && $read)?0:1);
}
}
}
}
} else {
// regular HTML
foreach (array('ol','ul') as $list) {
foreach ($html->find($list) as $ul) {
foreach ($ul->find('li') as $li) {
$tmpEntry = array();
$a = $li->find('a');
$tmpEntry['url'] = $a[0]->href;
$tmpEntry['tags'] = $a[0]->tags;
$tmpEntry['is_read'] = $read;
if ($tmpEntry['url']) {
$data[] = $tmpEntry;
}
}
# the second <ol/ul> is for read links
$read = ((sizeof($data) && $read)?0:1);
}
}
}
}
// for readability structure
@ -766,7 +788,7 @@ class Poche
$urlsInserted = array(); //urls of articles inserted
foreach($data as $record) {
$url = trim(isset($record['article__url']) ? $record['article__url'] : (isset($record['url']) ? $record['url'] : ''));
if ($url and !in_array($url, $urlsInserted)) {
if (filter_var($url, FILTER_VALIDATE_URL) and !in_array($url, $urlsInserted)) {
$title = (isset($record['title']) ? $record['title'] : _('Untitled - Import - ') . '</a> <a href="./?import">' . _('click to finish import') . '</a><a>');
$body = (isset($record['content']) ? $record['content'] : '');
$isRead = (isset($record['is_read']) ? intval($record['is_read']) : (isset($record['archive']) ? intval($record['archive']) : 0));
@ -874,7 +896,7 @@ class Poche
$filename = "wallabag-export-".$this->user->getId()."-".date("Y-m-d").".json";
header('Content-Disposition: attachment; filename='.$filename);
$entries = $this->store->retrieveAll($this->user->getId());
$entries = $this->store->retrieveAllWithTags($this->user->getId());
echo $this->tpl->render('export.twig', array(
'export' => Tools::renderJson($entries),
));

View File

@ -141,7 +141,7 @@ class Routing
$pdf->producePDF();
} elseif (isset($_GET['import'])) {
$import = $this->wallabag->import();
$tplVars = array_merge($this->vars, $import);
$this->vars = array_merge($this->vars, $import);
} elseif (isset($_GET['empty-cache'])) {
Tools::emptyCache();
} elseif (isset($_GET['export'])) {

View File

@ -420,4 +420,23 @@ final class Tools
return str_replace('+', '', $token);
}
/**
*
* Returns the doctype for an HTML document (used for Mozilla Bookmarks)
* @param simple_html_dom $doc
* @return doctype $el
*
*/
public static function get_doctype($doc)
{
$els = $doc->find('unknown');
foreach ($els as $e => $el)
if ($el->parent()->tag == 'root')
return $el;
return NULL;
}
}

View File

@ -8,7 +8,7 @@
* @license http://opensource.org/licenses/MIT see COPYING file
*/
define ('POCHE', '1.9.0');
define ('POCHE', '1.9.1');
require 'check_essentials.php';
require 'check_setup.php';
require_once 'inc/poche/global.inc.php';

View File

@ -16,6 +16,27 @@ $email = "";
require_once('install_functions.php');
// Start by destroying session to avoid wrong logins from previous installations
// cookie part
$cookiedir = '';
if (dirname($_SERVER['SCRIPT_NAME'])!='/') {
$cookiedir = dirname($_SERVER["SCRIPT_NAME"]).'/';
}
if (isset($_SERVER['HTTP_COOKIE'])) {
$cookies = explode(';', $_SERVER['HTTP_COOKIE']);
foreach($cookies as $cookie) {
$parts = explode('=', $cookie);
$name = trim($parts[0]);
setcookie($name, '', time()-1000);
setcookie($name, '', time()-1000, $cookiedir);
}
}
// session part
if (isset($_SESSION['poche_user'])) {
unset($_SESSION['poche_user']);
}
if (isset($_GET['clean'])) {
if (is_dir('install')){
delTree('install', true);
@ -144,16 +165,43 @@ else if (isset($_POST['install'])) {
$sql_structure = file_get_contents('install/postgres.sql');
}
// create database structure
$query = $handle->exec($sql_structure);
if (!$handle) {
$continue = false;
$errors[] = "Couldn't connect to your database server. Please check credentials.";
} else {
$query = $handle->exec($sql_structure);
$usertest = executeQuery($handle,"SELECT * from users WHERE username = ?", array($username));
if (!empty($usertest)) {
$continue = false;
$errors[] = "An user already exists with this username in database.";
}
$usertest = executeQuery($handle,"SELECT * from users WHERE username = ?", array($username));
if (!empty($usertest)) {
$continue = false;
$errors[] = "An user already exists with this username in database.";
}
}
} catch (PDOException $e) {
$errors[] = $e->getMessage();
/* Error codes :
/ 7 : PostgreSQL issues
/ 1045 : Access denied to the user : user doesn't exists
/ 1044 : Access denied to the user : user doesn't have the rights to connect to this database
/ 2005 : Unknown database server
*/
switch ($e->getCode()) {
case 7:
$errors[] = "PostgreSQL has encountered an issue : " . $e->getMessage();
break;
case 1045:
$errors[] = "The password for this user is incorrect, or this user doesn't exist.";
break;
case 1044:
$errors[] = "The user isn't allowed to use this database.";
break;
case 2005:
$errors[] = "The server can't be reached.";
break;
default:
$errors[] = "A error happened while connecting to your database : " . $e->getMessage();
break;
}
$continue = false;
}
}

View File

@ -110,4 +110,4 @@ function executeQuery($handle, $sql, $params) {
}
}
?>
?>

View File

@ -9,7 +9,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=iso-8859-1\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 1.5.4\n"
"X-Generator: Poedit 1.7.5\n"
msgid "wallabag, a read it later open source system"
msgstr "wallabag, a read it later open source system"
@ -106,8 +106,11 @@ msgstr "Read the documentation"
msgid "download the extension"
msgstr "Download the extension"
msgid "Firefox Add-On"
msgstr "Firefox Add-On"
msgid "Standard Firefox Add-On"
msgstr "Standard Firefox Add-On"
msgid "Mozilla Services (Social API) Extension"
msgstr "Mozilla Services (Social API) Extension"
msgid "Chrome Extension"
msgstr "Chrome Extension"
@ -320,6 +323,9 @@ msgstr "Add tags:"
msgid "no tags"
msgstr "no tags"
msgid "No tags found. You must view an article to set tags for it."
msgstr "No tags found. You must view an article to set tags for it."
msgid "The tag has been applied successfully"
msgstr "The tag has been applied successfully"

View File

@ -12,7 +12,7 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"X-Poedit-KeywordsList: _;gettext;gettext_noop\n"
"X-Poedit-SourceCharset: UTF-8\n"
"X-Generator: Poedit 1.5.4\n"
"X-Generator: Poedit 1.7.5\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
msgid "wallabag, a read it later open source system"
@ -46,8 +46,7 @@ msgid "Login to wallabag"
msgstr "Se connecter à wallabag"
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."
msgstr "vous êtes en mode démo, certaines fonctionnalités peuvent être désactivées."
msgid "Username"
msgstr "Nom d'utilisateur"
@ -82,6 +81,9 @@ msgstr "non lus"
msgid "Tag"
msgstr "Tag"
msgid "No tags found. You must view an article to set tags for it."
msgstr "Pas de tags trouvés. Vous devez vous rendre sur un article pour choisir de lui associer des tags."
msgid "No articles found."
msgstr "Aucun article trouvé."
@ -125,12 +127,11 @@ msgid "About wallabag"
msgstr "À propos de wallabag"
msgid ""
"wallabag is a read-it-later application: you can save a web page by keeping "
"only content. Elements like ads or menus are deleted."
"wallabag is a read-it-later application: you can save a web page by keeping only content. Elements like "
"ads or menus are deleted."
msgstr ""
"wallabag est une application de lecture différée : vous pouvez sauver une "
"page web et garder uniquement son contenu. Les élements comme les publicités "
"ou les menus sont supprimés."
"wallabag est une application de lecture différée : vous pouvez sauver une page web et garder uniquement "
"son contenu. Les élements comme les publicités ou les menus sont supprimés."
msgid "Project website"
msgstr "Site web du projet"
@ -166,11 +167,11 @@ msgid "Documentation"
msgstr "Documentation"
msgid ""
"<a href=\"docs/\">Offline documentation</a> and <a href=\"https://doc."
"wallabag.org/\">online documentation</a> (up to date)"
"<a href=\"docs/\">Offline documentation</a> and <a href=\"https://doc.wallabag.org/\">online "
"documentation</a> (up to date)"
msgstr ""
"<a href=\"docs/\">Documentation hors-ligne</a> et <a href=\"https://doc."
"wallabag.org/\">documentation en ligne</a> (à jour)"
"<a href=\"docs/\">Documentation hors-ligne</a> et <a href=\"https://doc.wallabag.org/\">documentation "
"en ligne</a> (à jour)"
msgid "Helping wallabag"
msgstr "Aider wallabag"
@ -199,8 +200,11 @@ msgstr "lisez la documentation"
msgid "download the extension"
msgstr "téléchargez l'extension"
msgid "Firefox Add-On"
msgstr "Add-On Firefox"
msgid "Standard Firefox Add-On"
msgstr "Add-On Firefox classique"
msgid "Mozilla Services (Social API) Extension"
msgstr "Extension Mozilla Services (Social API)"
msgid "Chrome Extension"
msgstr "Extension Chrome"
@ -257,19 +261,17 @@ msgid "A more recent development version is available."
msgstr "Une version de développement plus récente est disponible."
msgid "You can clear cache to check the latest release."
msgstr ""
"Vous pouvez vider le cache pour vérifier que vous avez la dernière version."
msgstr "Vous pouvez vider le cache pour vérifier que vous avez la dernière version."
msgid "Feeds"
msgstr "Flux"
msgid ""
"Your feed token is currently empty and must first be generated to enable "
"feeds. Click <a href='?feed&amp;action=generate'>here to generate it</a>."
"Your feed token is currently empty and must first be generated to enable feeds. Click <a href='?"
"feed&amp;action=generate'>here to generate it</a>."
msgstr ""
"Votre jeton de flux est actuellement vide et doit d'abord être généré pour "
"activer les flux. Cliquez <a href='?feed&amp;action=generate'>ici</a> pour "
"le générer."
"Votre jeton de flux est actuellement vide et doit d'abord être généré pour activer les flux. Cliquez <a "
"href='?feed&amp;action=generate'>ici</a> pour le générer."
msgid "Unread feed"
msgstr "Flux des non lus"
@ -286,12 +288,8 @@ msgstr "Votre jeton :"
msgid "Your user id:"
msgstr "Votre ID utilisateur :"
msgid ""
"You can regenerate your token: <a href='?feed&amp;action=generate'>generate!"
"</a>."
msgstr ""
"Vous pouvez regénérer votre jeton : <a href='?feed&amp;"
"action=generate'>génération !</a>."
msgid "You can regenerate your token: <a href='?feed&amp;action=generate'>generate!</a>."
msgstr "Vous pouvez regénérer votre jeton : <a href='?feed&amp;action=generate'>génération !</a>."
msgid "Change your theme"
msgstr "Changer votre thème"
@ -321,38 +319,33 @@ msgid "Import"
msgstr "Importer"
msgid ""
"You can import your Pocket, Readability, Instapaper, Wallabag or any data in "
"appropriate json or html format."
"You can import your Pocket, Readability, Instapaper, Wallabag or any data in appropriate json or html "
"format."
msgstr ""
"Vous pouvez importer depuis Pocket, Readability, Instapaper, wallabag, ou "
"n'importe quel fichier au format JSON ou HTML approprié."
"Vous pouvez importer depuis Pocket, Readability, Instapaper, wallabag, ou n'importe quel fichier au "
"format JSON ou HTML approprié."
msgid ""
"Please select export file on your computer and press \"Import\" button "
"below. Wallabag will parse your file, insert all URLs and start fetching of "
"articles if required."
"Please select export file on your computer and press \"Import\" button below. Wallabag will parse your "
"file, insert all URLs and start fetching of articles if required."
msgstr ""
"Sélectionnez le fichier à importer sur votre disque dur, et pressez le "
"bouton « Importer » ci-dessous. wallabag analysera votre fichier, ajoutera "
"toutes les URL trouvées et commencera à télécharger les contenus si "
"nécessaire."
"Sélectionnez le fichier à importer sur votre disque dur, et pressez le bouton « Importer » ci-dessous. "
"wallabag analysera votre fichier, ajoutera toutes les URL trouvées et commencera à télécharger les "
"contenus si nécessaire."
msgid ""
"Fetching process is controlled by two constants in your config file: "
"IMPORT_LIMIT (how many articles are fetched at once) and IMPORT_DELAY (delay "
"between fetch of next batch of articles)."
"Fetching process is controlled by two constants in your config file: IMPORT_LIMIT (how many articles "
"are fetched at once) and IMPORT_DELAY (delay between fetch of next batch of articles)."
msgstr ""
"Le processus d'import peut être paramétré par deux constantes dans votre "
"fichier de configuration : IMPORT_LIMIT (combien d'articles sont téléchargés "
"à la fois) et IMPORT_DELAY (le délai entre le téléchargement du prochain lot "
"d'articles)."
"Le processus d'import peut être paramétré par deux constantes dans votre fichier de configuration : "
"IMPORT_LIMIT (combien d'articles sont téléchargés à la fois) et IMPORT_DELAY (le délai entre le "
"téléchargement du prochain lot d'articles)."
msgid "File:"
msgstr "Fichier : "
msgid "You can click here to fetch content for articles with no content."
msgstr ""
"Vous pouvez cliquer ici pour télécharger le contenu des articles vides."
msgstr "Vous pouvez cliquer ici pour télécharger le contenu des articles vides."
msgid "Export your wallabag data"
msgstr "Exporter vos données de wallabag"
@ -379,8 +372,7 @@ msgid "Delete Cache"
msgstr "Vider le cache"
msgid "Deleting the cache may help with display or other problems."
msgstr ""
"Vider le cache peut résoudre des problèmes d'affichage ou d'autres problèmes."
msgstr "Vider le cache peut résoudre des problèmes d'affichage ou d'autres problèmes."
msgid "Add user"
msgstr "Ajouter un utilisateur"
@ -407,9 +399,7 @@ msgid "Delete account"
msgstr "Supprimer le compte"
msgid "You can delete your account by entering your password and validating."
msgstr ""
"Vous pouvez supprimer votre compte en entrant votre mot de passe et en "
"validant."
msgstr "Vous pouvez supprimer votre compte en entrant votre mot de passe et en validant."
msgid "Be careful, data will be erased forever (that is a very long time)."
msgstr "Attention, les données seront perdues pour toujours."
@ -418,16 +408,13 @@ msgid "Type here your password"
msgstr "Entrez votre mot de passe ici"
msgid "You are the only user, you cannot delete your own account."
msgstr ""
"Vous êtes l'unique utilisateur, vous ne pouvez pas supprimer votre compte."
msgstr "Vous êtes l'unique utilisateur, vous ne pouvez pas supprimer votre compte."
msgid ""
"To completely remove wallabag, delete the wallabag folder on your web server "
"(and eventual databases)."
"To completely remove wallabag, delete the wallabag folder on your web server (and eventual databases)."
msgstr ""
"Pour désinstaller complètement wallabag, supprimez le répertoire "
"<code>wallabag</code> de votre serveur Web (ainsi que les bases de données "
"éventuelles)."
"Pour désinstaller complètement wallabag, supprimez le répertoire <code>wallabag</code> de votre serveur "
"Web (ainsi que les bases de données éventuelles)."
msgid "Save a link"
msgstr "Ajouter un lien"
@ -535,9 +522,7 @@ msgid "a more recent development version is available."
msgstr "une version de développement plus récente est disponible."
msgid "Please execute the import script locally, it can take a very long time."
msgstr ""
"Merci d'exécuter le script d'importation en local car cela peut prendre du "
"temps."
msgstr "Merci d'exécuter le script d'importation en local car cela peut prendre du temps."
msgid "More infos in the official doc:"
msgstr "Plus d'infos dans la documentation officielle :"
@ -604,13 +589,11 @@ msgid "install your wallabag"
msgstr "installez votre wallabag"
msgid ""
"wallabag is still not installed. Please fill the below form to install it. "
"Don't hesitate to <a href='http://doc.wallabag.org/'>read the documentation "
"on wallabag website</a>."
"wallabag is still not installed. Please fill the below form to install it. Don't hesitate to <a "
"href='http://doc.wallabag.org/'>read the documentation on wallabag website</a>."
msgstr ""
"wallabag n'est pas encore installé. Merci de remplir le formulaire suivant "
"pour l'installer. N'hésitez pas à <a href='http://doc.wallabag.org'>lire la "
"documentation sur le site de wallabag</a>."
"wallabag n'est pas encore installé. Merci de remplir le formulaire suivant pour l'installer. N'hésitez "
"pas à <a href='http://doc.wallabag.org'>lire la documentation sur le site de wallabag</a>."
msgid "Repeat your password"
msgstr "Répétez votre mot de passe"
@ -618,12 +601,8 @@ msgstr "Répétez votre mot de passe"
msgid "Install"
msgstr "Installer"
msgid ""
"You can <a href='wallabag_compatibility_test.php'>check your configuration "
"here</a>."
msgstr ""
"Vous pouvez vérifier votre configuration <a "
"href='wallabag_compatibility_test.php'>ici</a>."
msgid "You can <a href='wallabag_compatibility_test.php'>check your configuration here</a>."
msgstr "Vous pouvez vérifier votre configuration <a href='wallabag_compatibility_test.php'>ici</a>."
msgid "Tags"
msgstr "Tags"
@ -662,12 +641,9 @@ msgid "Enter your search here"
msgstr "Entrez votre recherche ici"
#, php-format
msgid ""
"The new user %s has been installed. Do you want to <a href=\"?logout"
"\">logout ?</a>"
msgid "The new user %s has been installed. Do you want to <a href=\"?logout\">logout ?</a>"
msgstr ""
"Le nouvel utilisateur « %s » a été ajouté. Voulez-vous vous <a href=\"?"
"logout\">déconnecter ?</a>"
"Le nouvel utilisateur « %s » a été ajouté. Voulez-vous vous <a href=\"?logout\">déconnecter ?</a>"
#, php-format
msgid "Error : An user with the name %s already exists !"
@ -681,9 +657,7 @@ msgid "Error : The password is wrong !"
msgstr "Erreur : le mot de passe est incorrect !"
msgid "Error : You are the only user, you cannot delete your account !"
msgstr ""
"Erreur : Vous êtes l'unique utilisateur, vous ne pouvez pas supprimer votre "
"compte !"
msgstr "Erreur : Vous êtes l'unique utilisateur, vous ne pouvez pas supprimer votre compte !"
msgid "Untitled"
msgstr "Sans titre"
@ -715,12 +689,8 @@ msgstr "en mode démo, vous ne pouvez pas mettre à jour votre mot de passe"
msgid "your password has been updated"
msgstr "votre mot de passe a été mis à jour"
msgid ""
"the two fields have to be filled & the password must be the same in the two "
"fields"
msgstr ""
"les deux champs doivent être remplis & le mot de passe doit être le même "
"dans les deux"
msgid "the two fields have to be filled & the password must be the same in the two fields"
msgstr "les deux champs doivent être remplis & le mot de passe doit être le même dans les deux"
msgid "still using the \""
msgstr "vous utilisez toujours \""
@ -856,11 +826,11 @@ msgid "Generate PDF file"
msgstr "Générer fichier PDF"
msgid ""
"This can <b>take a while</b> and can <b>even fail</b> if you have too many "
"articles, depending on your server configuration."
"This can <b>take a while</b> and can <b>even fail</b> if you have too many articles, depending on your "
"server configuration."
msgstr ""
"Ceci peut <b>prendre un moment</b> et même <b>échouer</b> si vous avez trop "
"d'articles, selon la configuration matérielle de votre serveur."
"Ceci peut <b>prendre un moment</b> et même <b>échouer</b> si vous avez trop d'articles, selon la "
"configuration matérielle de votre serveur."
msgid "Download the articles from this tag in an epub"
msgstr "Télécharger les articles de ce tag dans un epub"
@ -941,12 +911,11 @@ msgid "Produced by wallabag with PHPePub"
msgstr "Produit par wallabag avec PHPePub"
msgid ""
"Please open <a href='https://github.com/wallabag/wallabag/issues'>an issue</"
"a> if you have trouble with the display of this E-Book on your device."
"Please open <a href='https://github.com/wallabag/wallabag/issues'>an issue</a> if you have trouble with "
"the display of this E-Book on your device."
msgstr ""
"Merci d'ouvrir <a href='https://github.com/wallabag/wallabag/issues'>un "
"ticket</a> si vous avez des problèmes d'affichage de cet E-Book sur votre "
"appareil."
"Merci d'ouvrir <a href='https://github.com/wallabag/wallabag/issues'>un ticket</a> si vous avez des "
"problèmes d'affichage de cet E-Book sur votre appareil."
msgid "Produced by wallabag with PHPMobi"
msgstr "Produit par wallabag avec PHPMobi"
@ -959,8 +928,7 @@ msgid "Hi, %1$s"
msgstr "Salut, %1$s"
msgid "Someone just created a wallabag account for you on %1$s."
msgstr ""
"Quelqu'un vient juste de créer un compte wallabag pour vous à l'adresse %1$s."
msgstr "Quelqu'un vient juste de créer un compte wallabag pour vous à l'adresse %1$s."
msgid "You've just created a wallabag account on %1$s"
msgstr "Vous venez juste de vous créer un compte wallabag sur %1$s"
@ -971,49 +939,32 @@ msgstr "Votre identifiant is %1$s."
msgid "Have fun with it !"
msgstr "Amusez-vous bien !"
msgid ""
"This is an automatically generated message, no one will answer if you "
"respond to it."
msgstr ""
"Ceci est un message généré automatiquement, personne ne vous répondra si "
"vous y répondez."
msgid "This is an automatically generated message, no one will answer if you respond to it."
msgstr "Ceci est un message généré automatiquement, personne ne vous répondra si vous y répondez."
msgid ""
"Note : The password has been chosen by the person who created your account. "
"Get in touch with that person to know your password and change it as soon as "
"possible"
"Note : The password has been chosen by the person who created your account. Get in touch with that "
"person to know your password and change it as soon as possible"
msgstr ""
"Note : Votre mot de passe a été défini par la personne ayant créé votre "
"compte. Vous devriez entrer en contact avec cette personne pour connaître "
"votre mot de passe et le changer dès que possible"
"Note : Votre mot de passe a été défini par la personne ayant créé votre compte. Vous devriez entrer en "
"contact avec cette personne pour connaître votre mot de passe et le changer dès que possible"
msgid ""
"The new user %1$s has been sent an email at %2$s. You may have to check spam "
"folder."
msgid "The new user %1$s has been sent an email at %2$s. You may have to check spam folder."
msgstr ""
"Un email a été envoyé au nouvel utiliateur %1$s à l'adresse %2$s. Il peut "
"être nécessaire de vérifier le dossier des spams."
"Un email a été envoyé au nouvel utilisateur %1$s à l'adresse %2$s. Il peut être nécessaire de vérifier "
"le dossier des spams."
msgid "A problem has been encountered while sending the confirmation email"
msgstr "Un problème a été rencontré lors de l'envoi de l'email de confirmation"
msgid ""
"The server did not authorize sending a confirmation email, but the user was "
"created."
msgstr ""
"Le serveur n'autorise pas l'envoi d'un email de confirmation, mais "
"l'utilisateur a été créé."
msgid "The server did not authorize sending a confirmation email, but the user was created."
msgstr "Le serveur n'autorise pas l'envoi d'un email de confirmation, mais l'utilisateur a été créé."
msgid ""
"The user was created, but no email was sent because email was not filled in"
msgstr ""
"L'utilisateur a été créé, mais aucun mail n'a été envoyé car l'email n'était "
"pas renseigné"
msgid "The user was created, but no email was sent because email was not filled in"
msgstr "L'utilisateur a été créé, mais aucun mail n'a été envoyé car l'email n'était pas renseigné"
msgid "Mail function is disabled. You can't send emails from your server"
msgstr ""
"La fonction mail est désactivée. Vous ne pouvez pas envoyer d'E-mails depuis "
"votre serveur"
msgstr "La fonction mail est désactivée. Vous ne pouvez pas envoyer d'E-mails depuis votre serveur"
msgid "You didn't set your kindle's email adress !"
msgstr "Vous n'avez pas renseigné l'adresse E-mail de votre Kindle !"

Binary file not shown.

After

Width:  |  Height:  |  Size: 337 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 675 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

View File

@ -1,14 +1,29 @@
/**
* @desc Navigate with Keyboard from an article to another on an article's page
* @param string leftURL - URL of the article on the left
* @param string rightURL - URL of the article on the right
*/
function navigateKeyboard(leftURL, rightURL) {
window.addEventListener("keypress", function (event) {
window.addEventListener("keydown", function (event) {
var key = event.which || event.keyCode; // event.keyCode is used for IE8 and earlier versions
switch (key) {
case 37:
goLeft(leftURL);
goLeft(leftURL); // left arrow
break;
case 72:
goLeft(leftURL); // h letter (vim style)
break;
case 39:
goRight(rightURL);
goRight(rightURL); // right arrow
break;
case 76:
goRight(rightURL); // l letter (vim style)
break;
case 8:
window.history.back();
}
}, false);
@ -24,4 +39,116 @@ function goRight(rightURL) {
if (rightURL != "?view=view&id=") {
window.location = window.location.origin + window.location.pathname + rightURL;
}
}
/**
* @desc Do actions with Keyboard on an article's page
* @param number id - ID of the current article
*/
function actionArticle(id) {
window.addEventListener("keydown", function (event) {
var key = event.which || event.keyCode; // event.keyCode is used for IE8 and earlier versions
switch (key) {
case 46:
deleteArticle(id); // delete key
break;
case 68:
deleteArticle(id); // d key letter
break;
case 70:
favoriteArticle(id); // f key letter
break;
case 77:
markReadArticle(id); // m key letter
break;
}
}, false);
}
function deleteArticle(id) {
if (id) {
window.location = window.location.origin + window.location.pathname + '?action=delete&id=' + id;
}
}
function favoriteArticle(id) {
if (id) {
window.location = window.location.origin + window.location.pathname + '?action=toggle_fav&id=' + id;
}
}
function markReadArticle(id) {
if (id) {
window.location = window.location.origin + window.location.pathname + '?action=toggle_archive&id=' + id;
}
}
function homeNavigation() {
selectedArticle = $('.entrie:first');
console.log("selected first article");
window.addEventListener("keydown", function (event) {
var key = event.which || event.keyCode; // event.keyCode is used for IE8 and earlier versions
switch (key) {
case 37: // left arrow
selectedArticle = goSelectPrev(selectedArticle,1);
break;
case 72: // h letter (vim style)
selectedArticle = goSelectPrev(selectedArticle,1);
break;
case 39: // right arrow
selectedArticle = goSelectNext(selectedArticle,1);
break;
case 76: // l letter (vim style)
selectedArticle = goSelectNext(selectedArticle,1);
break;
case 13: // enter into article
enterArticle(selectedArticle);
break;
case 74: // j letter key
selectedArticle = goSelectNext(selectedArticle,3);
break;
case 40: // down arrow
selectedArticle = goSelectNext(selectedArticle,3);
break;
case 75: // k letter key
selectedArticle = goSelectNext(selectedArticle,3);
break;
case 38: // up arrow
selectedArticle = goSelectNext(selectedArticle,3);
break;
}
}, false);
}
function goSelectNext(selectedArticle,number) {
if (selectedArticle.next().length) {
selectedArticle.removeClass("eselected");
selectedArticle = selectedArticle.next();
selectedArticle.addClass("eselected");
console.log("Changed selected to next");
console.log("selectedArticle is now " + selectedArticle.attr("id"));
}
return selectedArticle;
}
function goSelectPrev(selectedArticle,number) {
if (selectedArticle.prev().length) {
selectedArticle.removeClass("eselected");
selectedArticle = selectedArticle.prev();
selectedArticle.addClass("eselected");
console.log("Changed selected to previous");
console.log("selectedArticle is now " + selectedArticle.attr("id"));
}
return selectedArticle;
}
function enterArticle(selectedArticle) {
window.location = selectedArticle.find('a:first').attr('href');
}

View File

@ -39,3 +39,33 @@
<script src="{{ poche_url }}themes/_global/js/popupForm.js"></script>
<script src="{{ poche_url }}themes/_global/js/keyboard.js"></script>
<script src="{{ poche_url }}themes/{{theme}}/js/closeMessage.js"></script>
<!-- Enable Firefox Social Services
script put there because of the call to poche_url -->
<script>
var baseurl = "{{ poche_url }}";
console.log(baseurl);
var data = {
"name": "wallabag",
"iconURL": baseurl + "/themes/_global/img/appicon/firefox-service-icon-16.png",
"icon32URL": baseurl + "/themes/_global/img/appicon/firefox-service-icon-32.png",
"icon64URL": baseurl + "/themes/_global/img/appicon/firefox-service-icon-64.png",
"shareURL": baseurl + "/index.php?action=add&plainurl=%{url}",
"description": "wallabag Extension for Firefox - The (soon to become) best way to save articles, videos and more",
"author": "Thomas Citharel",
"homepageURL": "http://doc.wallabag.org/en/User/save_your_first_article.html#firefox-social-api-service",
"origin": "https://wallabag.org",
"postActivationURL": "http://doc.wallabag.org/en/User/save_your_first_article.html#firefox-social-api-service",
"version": "0.1"
};
function activateSocialFeature(node) {
var event = new CustomEvent("ActivateSocialFeature");
node.setAttribute("data-service", JSON.stringify(data));
node.dispatchEvent(event);
}
</script>

View File

@ -16,7 +16,8 @@
</p>
<h3>{% trans "Browser Addons" %}</h3>
<ul>
<li><a href="https://addons.mozilla.org/firefox/addon/wallabag/" target="_blank">{% trans "Firefox Add-On" %}</a></li>
<li><a href="https://addons.mozilla.org/firefox/addon/wallabag/" target="_blank">{% trans "Standard Firefox Add-On" %}</a></li>
<li><button onclick="activateSocialFeature(this)">{% trans "Mozilla Services (Social API) Extension" %}</button></li>
<li><a href="https://chrome.google.com/webstore/detail/wallabag/bepdcjnnkglfjehplaogpoonpffbdcdj" target="_blank">{% trans "Chrome Extension" %}</a></li>
</ul>
<h3>{% trans "Mobile Apps" %}</h3>

View File

@ -399,19 +399,19 @@ footer a {
transition: all 0.5s ease;
}
.entrie:hover {
.entrie:hover, .eselected {
box-shadow: 0 3px 10px rgba(0,0,0,1);
}
.entrie:hover:after {
.entrie:hover:after, .eselected:after {
height: 40px;
}
.entrie:hover:before {
.entrie:hover:before, .eselected:before {
bottom: 2.4em;
}
.entrie:hover h2 a {
.entrie:hover h2 a, .eselected h2 a {
color: #666;
}
@ -421,9 +421,9 @@ footer a {
line-height: 1.2;
}
.entrie h2:after {
content: none;
}
.entrie h2:after {
content: none;
}
.entrie h2 a {
@ -437,16 +437,6 @@ footer a {
-o-transition: all 0.5s ease;
transition: all 0.5s ease;
}
/*
.entrie h2 a:after {
content: "";
position: absolute;
top: 0;
width: 100%;
height: 100%;
left: 0;
}
*/
.entrie p {
color: #666;
@ -454,12 +444,8 @@ footer a {
line-height: 1.7;
}
.entrie h2 a:first-letter {
text-transform: uppercase;
}
.entrie:hover .tools {
bottom: 0;
.entrie h2 a:first-letter {
text-transform: uppercase;
}
.entrie .tools {
@ -477,20 +463,25 @@ footer a {
transition: all 0.5s ease;
}
.entrie .tools a {
color: #666;
text-decoration: none;
display: block;
padding: 0.4em;
}
.entrie:hover .tools, .eselected .tools {
bottom: 0;
}
.entrie .tools a:hover {
color: #FFF;
}
.entrie .tools li {
display: inline-block;
}
.entrie .tools a {
color: #666;
text-decoration: none;
display: block;
padding: 0.4em;
}
.entrie .tools a:hover {
color: #FFF;
}
.entrie .tools li {
display: inline-block;
}
.entrie:nth-child(3n+1) {
margin-left: 0;

View File

@ -107,4 +107,8 @@
{% if constant('PDF') == 1 %}<a title="{% trans "Download the articles from this category in a pdf file" %}" href="./?pdf&amp;method=category&amp;value={{ view }}">{% trans "Download as PDF" %}</a>{% endif %}
{% endif %}
{% endif %}
<script type="text/javascript">
homeNavigation();
</script>
{% endblock %}

View File

@ -6,8 +6,12 @@
{% block content %}
<h2>{% trans "Tags" %}</h2>
<ul class="list-tags">
{% if tags is not empty %}
{% for tag in tags %}<li>{% if token != '' %}<a class="icon icon-rss" href="?feed&amp;type=tag&amp;user_id={{ user_id }}&amp;tag_id={{ tag.id }}&amp;token={{ token }}" target="_blank"><span>rss</span></a>{% endif %} <a href="./?view=tag&amp;id={{ tag.id }}">{{ tag.value }}</a> ({{ tag.entriescount }})
</li>
{% endfor %}
{% else %}
{% trans "No tags found. You must view an article to set tags for it." %}
{% endif %}
</ul>
{% endblock %}

View File

@ -111,6 +111,9 @@
// Use left and right arrow to navigate on with keyboard
navigateKeyboard('?view=view&id={{ navigate.nextid|e }}','?view=view&id={{ navigate.previousid|e }}');
// use keyboard to do actions
actionArticle('{{ entry.id|e }}');
// swipe to right or left on mobile to navigate
$('article').on("swiperight", function(){
goLeft('?view=view&id={{ navigate.nextid|e }}');

View File

@ -36,3 +36,33 @@
<script src="{{ poche_url }}themes/_global/js/saveLink.js"></script>
<script src="{{ poche_url }}themes/_global/js/keyboard.js"></script>
<script src="{{ poche_url }}themes/_global/js/popupForm.js"></script>
<!-- Enable Firefox Social Services
script put there because of the call to poche_url -->
<script>
var baseurl = "{{ poche_url }}";
console.log(baseurl);
var data = {
"name": "wallabag",
"iconURL": baseurl + "/themes/_global/img/appicon/firefox-service-icon-16.png",
"icon32URL": baseurl + "/themes/_global/img/appicon/firefox-service-icon-32.png",
"icon64URL": baseurl + "/themes/_global/img/appicon/firefox-service-icon-64.png",
"shareURL": baseurl + "/index.php?action=add&plainurl=%{url}",
"description": "wallabag Extension for Firefox - The (soon to become) best way to save articles, videos and more",
"author": "Thomas Citharel",
"homepageURL": "http://doc.wallabag.org/en/User/save_your_first_article.html#firefox-social-api-service",
"origin": "https://wallabag.org",
"postActivationURL": "http://doc.wallabag.org/en/User/save_your_first_article.html#firefox-social-api-service",
"version": "0.1"
};
function activateSocialFeature(node) {
var event = new CustomEvent("ActivateSocialFeature");
node.setAttribute("data-service", JSON.stringify(data));
node.dispatchEvent(event);
}
</script>

View File

@ -2,11 +2,13 @@
<!--
$(document).ready(function() {
$("body").css("cursor", "wait");
$("#content").css("display", "none");
setTimeout(function(){
window.location = './?import';
}, {{ import.delay }} );
});
//-->
</script>
<div class="messages warning">

View File

@ -16,7 +16,8 @@
</p>
<h3>Browser Plugins</h3>
<ul>
<li><a href="https://addons.mozilla.org/firefox/addon/wallabag/" target="_blank">{% trans "Firefox Add-On" %}</a></li>
<li><a href="https://addons.mozilla.org/firefox/addon/wallabag/" target="_blank">{% trans "Standard Firefox Add-On" %}</a></li>
<li><button onclick="activateSocialFeature(this)">{% trans "Mozilla Services (Social API) Extension" %}</button></li>
<li><a href="https://chrome.google.com/webstore/detail/wallabag/bepdcjnnkglfjehplaogpoonpffbdcdj" target="_blank">{% trans "Chrome Extension" %}</a></li>
</ul>
<h3>Mobile Apps</h3>