]> git.immae.eu Git - github/shaarli/Shaarli.git/commitdiff
Update thumbnail integration after rebasing the branch
authorArthurHoaro <arthur@hoa.ro>
Sat, 11 Nov 2017 13:01:21 +0000 (14:01 +0100)
committerArthurHoaro <arthur@hoa.ro>
Thu, 5 Jul 2018 18:31:35 +0000 (20:31 +0200)
21 files changed:
application/Thumbnailer.php
application/Updater.php
assets/common/js/picwall.js [deleted file]
assets/common/js/thumbnails.js [new file with mode: 0644]
assets/default/scss/shaarli.scss
composer.json
composer.lock
inc/languages/fr/LC_MESSAGES/shaarli.po
inc/web-thumbnailer.json
index.php
tests/ThumbnailerTest.php
tests/Updater/UpdaterTest.php
tests/utils/config/configJson.json.php
tests/utils/config/wt.json [new file with mode: 0644]
tpl/default/configure.html
tpl/default/linklist.html
tpl/default/page.header.html
tpl/default/picwall.html
tpl/vintage/linklist.html
tpl/vintage/picwall.html
webpack.config.js

index b669adaedef74afcbca8d80219901b91f8a12b7c..9cf5dacdfb573dddbe679c4465c5dd380d6b665d 100644 (file)
@@ -1,6 +1,11 @@
 <?php
 
+namespace Shaarli;
+
+use Shaarli\Config\ConfigManager;
+use WebThumbnailer\Exception\WebThumbnailerException;
 use WebThumbnailer\WebThumbnailer;
+use WebThumbnailer\Application\ConfigManager as WTConfigManager;
 
 /**
  * Class Thumbnailer
@@ -28,7 +33,7 @@ class Thumbnailer
     {
         $this->conf = $conf;
         $this->wt = new WebThumbnailer();
-        \WebThumbnailer\Application\ConfigManager::addFile('inc/web-thumbnailer.json');
+        WTConfigManager::addFile('inc/web-thumbnailer.json');
         $this->wt->maxWidth($this->conf->get('thumbnails.width'))
                  ->maxHeight($this->conf->get('thumbnails.height'))
                  ->crop(true)
@@ -44,6 +49,12 @@ class Thumbnailer
      */
     public function get($url)
     {
-        return $this->wt->thumbnail($url);
+        try {
+            return $this->wt->thumbnail($url);
+        } catch (WebThumbnailerException $e) {
+            // Exceptions are only thrown in debug mode.
+            error_log(get_class($e) .': '. $e->getMessage());
+            return false;
+        }
     }
 }
index dece2c020d297fdf13bf8773b76cb37895328025..6fbe3e000f6577d884a136cce911a05bdf424c4b 100644 (file)
@@ -480,7 +480,19 @@ class Updater
         }
 
         $this->conf->write($this->isLoggedIn);
+        return true;
+    }
 
+    /**
+     * * Move thumbnails management to WebThumbnailer, coming with new settings.
+     */
+    public function updateMethodWebThumbnailer()
+    {
+        $this->conf->set('thumbnails.enabled', $this->conf->get('thumbnail.enable_thumbnails', true));
+        $this->conf->set('thumbnails.width', 125);
+        $this->conf->set('thumbnails.height', 90);
+        $this->conf->remove('thumbnail');
+        $this->conf->write(true);
         return true;
     }
 }
diff --git a/assets/common/js/picwall.js b/assets/common/js/picwall.js
deleted file mode 100644 (file)
index 87a93fc..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-import Blazy from 'blazy';
-
-(() => {
-  const picwall = document.getElementById('picwall_container');
-  if (picwall != null) {
-    // Suppress ESLint error because that's how bLazy works
-    /* eslint-disable no-new */
-    new Blazy();
-  }
-})();
diff --git a/assets/common/js/thumbnails.js b/assets/common/js/thumbnails.js
new file mode 100644 (file)
index 0000000..c28322b
--- /dev/null
@@ -0,0 +1,7 @@
+import Blazy from 'blazy';
+
+(() => {
+  // Suppress ESLint error because that's how bLazy works
+  /* eslint-disable no-new */
+  new Blazy();
+})();
index 09d5efbefb19a0f1e6fb60ff3e664927b574203d..425a0490f2e69151bee7c54015bfb5cf5079739c 100644 (file)
@@ -146,6 +146,10 @@ body,
   background-color: $main-green;
 }
 
+.page-single-alert {
+  margin-top: 100px;
+}
+
 .anchor {
   &:target {
     padding-top: 40px;
index 983bf9e939417976b071b78c46e652b4b703ed89..bdf52fcc6eba9daeb9bcfec72ade2296cf08a652 100644 (file)
@@ -19,7 +19,7 @@
         "shaarli/netscape-bookmark-parser": "^2.0",
         "erusev/parsedown": "^1.6",
         "slim/slim": "^3.0",
-        "arthurhoaro/web-thumbnailer": "dev-master",
+        "arthurhoaro/web-thumbnailer": "^1.0",
         "pubsubhubbub/publisher": "dev-master",
         "gettext/gettext": "^4.4"
     },
index ee762c0e7f2df026045d272aa7295ba2615cf7a0..3f9ef7e2134044677928e6ccad885d44922cd8df 100644 (file)
@@ -4,8 +4,49 @@
         "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
         "This file is @generated automatically"
     ],
-    "content-hash": "308a35eab91602fbb449f2c669c445ed",
+    "content-hash": "efa8b74ec9a15bb8c18e4a36fd13d480",
     "packages": [
+        {
+            "name": "arthurhoaro/web-thumbnailer",
+            "version": "v1.0.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/ArthurHoaro/web-thumbnailer.git",
+                "reference": "10e2919c2aa0bf55f4593c8b05508a98c79d6706"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/ArthurHoaro/web-thumbnailer/zipball/10e2919c2aa0bf55f4593c8b05508a98c79d6706",
+                "reference": "10e2919c2aa0bf55f4593c8b05508a98c79d6706",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.6"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "5.2.*"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-0": {
+                    "WebThumbnailer\\": [
+                        "src/",
+                        "tests/"
+                    ]
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Arthur Hoaro",
+                    "homepage": "http://hoa.ro"
+                }
+            ],
+            "time": "2017-11-11T15:39:49+00:00"
+        },
         {
             "name": "container-interop/container-interop",
             "version": "1.2.0",
index 2ebeccbc2d4c9629033c1a52670860b0e46786f4..15c8b2bb850de936e0d0673fd894f36c3b879f33 100644 (file)
@@ -1,8 +1,8 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: Shaarli\n"
-"POT-Creation-Date: 2018-01-24 18:43+0100\n"
-"PO-Revision-Date: 2018-03-06 18:44+0100\n"
+"POT-Creation-Date: 2018-05-05 12:47+0200\n"
+"PO-Revision-Date: 2018-05-05 12:47+0200\n"
 "Last-Translator: \n"
 "Language-Team: Shaarli\n"
 "Language: fr_FR\n"
@@ -56,7 +56,7 @@ msgstr "Liens directs"
 
 #: application/FeedBuilder.php:153
 #: tmp/daily.b91ef64efc3688266305ea9b42e5017e.rtpl.php:88
-#: tmp/linklist.b91ef64efc3688266305ea9b42e5017e.rtpl.php:178
+#: tmp/linklist.b91ef64efc3688266305ea9b42e5017e.rtpl.php:177
 msgid "Permalink"
 msgstr "Permalien"
 
@@ -68,18 +68,22 @@ msgstr "Le fichier d'historique n'est pas accessible en lecture ou en écriture"
 msgid "Could not parse history file"
 msgstr "Format incorrect pour le fichier d'historique"
 
-#: application/Languages.php:161
+#: application/Languages.php:177
 msgid "Automatic"
 msgstr "Automatique"
 
-#: application/Languages.php:162
+#: application/Languages.php:178
 msgid "English"
 msgstr "Anglais"
 
-#: application/Languages.php:163
+#: application/Languages.php:179
 msgid "French"
 msgstr "Français"
 
+#: application/Languages.php:180
+msgid "German"
+msgstr "Allemand"
+
 #: application/LinkDB.php:136
 msgid "You are not authorized to add a link."
 msgstr "Vous n'êtes pas autorisé à ajouter un lien."
@@ -163,11 +167,11 @@ msgstr ""
 "a été importé avec succès en %d secondes : %d liens importés, %d liens "
 "écrasés, %d liens ignorés."
 
-#: application/PageBuilder.php:168
+#: application/PageBuilder.php:173
 msgid "The page you are trying to reach does not exist or has been deleted."
 msgstr "La page que vous essayez de consulter n'existe pas ou a été supprimée."
 
-#: application/PageBuilder.php:170
+#: application/PageBuilder.php:175
 msgid "404 Not Found"
 msgstr "404 Introuvable"
 
@@ -180,17 +184,17 @@ msgstr "Les fichiers de l'extension \"%s\" sont introuvables."
 msgid "Couldn't retrieve Updater class methods."
 msgstr "Impossible de récupérer les méthodes de la classe Updater."
 
-#: application/Updater.php:506
+#: application/Updater.php:544
 msgid "An error occurred while running the update "
 msgstr "Une erreur s'est produite lors de l'exécution de la mise à jour "
 
-#: application/Updater.php:546
+#: application/Updater.php:584
 msgid "Updates file path is not set, can't write updates."
 msgstr ""
 "Le chemin vers le fichier de mise à jour n'est pas défini, impossible "
 "d'écrire les mises à jour."
 
-#: application/Updater.php:551
+#: application/Updater.php:589
 msgid "Unable to write updates in "
 msgstr "Impossible d'écrire les mises à jour dans "
 
@@ -230,6 +234,7 @@ msgstr ""
 "Shaarli a les droits d'écriture dans le dossier dans lequel il est installé."
 
 #: application/config/ConfigManager.php:135
+#: application/config/ConfigManager.php:162
 msgid "Invalid setting key parameter. String expected, got: "
 msgstr "Clé de paramétrage invalide. Chaîne de caractères obtenue, attendu : "
 
@@ -251,135 +256,133 @@ msgstr "Vous n'êtes pas autorisé à modifier la configuration."
 msgid "Error accessing"
 msgstr "Une erreur s'est produite en accédant à"
 
-#: index.php:142
+#: index.php:143
 msgid "Shared links on "
 msgstr "Liens partagés sur "
 
-#: index.php:164
+#: index.php:165
 msgid "Insufficient permissions:"
 msgstr "Permissions insuffisantes :"
 
-#: index.php:303
+#: index.php:304
 msgid "I said: NO. You are banned for the moment. Go away."
 msgstr "NON. Vous êtes banni pour le moment. Revenez plus tard."
 
-#: index.php:368
+#: index.php:369
 msgid "Wrong login/password."
 msgstr "Nom d'utilisateur ou mot de passe incorrects."
 
-#: index.php:576 tmp/page.header.b91ef64efc3688266305ea9b42e5017e.rtpl.php:42
-#: tmp/page.header.cedf684561d925457130839629000a81.rtpl.php:42
+#: index.php:577 tmp/page.header.b91ef64efc3688266305ea9b42e5017e.rtpl.php:46
+#: tmp/page.header.cedf684561d925457130839629000a81.rtpl.php:46
 msgid "Daily"
 msgstr "Quotidien"
 
-#: index.php:681 tmp/loginform.b91ef64efc3688266305ea9b42e5017e.rtpl.php:28
+#: index.php:682 tmp/loginform.b91ef64efc3688266305ea9b42e5017e.rtpl.php:28
 #: tmp/loginform.b91ef64efc3688266305ea9b42e5017e.rtpl.php:44
-#: tmp/page.header.b91ef64efc3688266305ea9b42e5017e.rtpl.php:71
-#: tmp/page.header.b91ef64efc3688266305ea9b42e5017e.rtpl.php:95
-#: tmp/page.header.cedf684561d925457130839629000a81.rtpl.php:71
-#: tmp/page.header.cedf684561d925457130839629000a81.rtpl.php:95
+#: tmp/page.header.b91ef64efc3688266305ea9b42e5017e.rtpl.php:75
+#: tmp/page.header.b91ef64efc3688266305ea9b42e5017e.rtpl.php:99
+#: tmp/page.header.cedf684561d925457130839629000a81.rtpl.php:75
+#: tmp/page.header.cedf684561d925457130839629000a81.rtpl.php:99
 msgid "Login"
 msgstr "Connexion"
 
-#: index.php:722 tmp/page.header.b91ef64efc3688266305ea9b42e5017e.rtpl.php:39
-#: tmp/page.header.cedf684561d925457130839629000a81.rtpl.php:39
+#: index.php:750 tmp/page.header.b91ef64efc3688266305ea9b42e5017e.rtpl.php:41
+#: tmp/page.header.cedf684561d925457130839629000a81.rtpl.php:41
 msgid "Picture wall"
 msgstr "Mur d'images"
 
-#: index.php:770 tmp/page.header.b91ef64efc3688266305ea9b42e5017e.rtpl.php:36
+#: index.php:798 tmp/page.header.b91ef64efc3688266305ea9b42e5017e.rtpl.php:36
 #: tmp/page.header.cedf684561d925457130839629000a81.rtpl.php:36
 #: tmp/tag.cloud.b91ef64efc3688266305ea9b42e5017e.rtpl.php:19
 msgid "Tag cloud"
 msgstr "Nuage de tags"
 
-#: index.php:803 tmp/tag.list.b91ef64efc3688266305ea9b42e5017e.rtpl.php:19
+#: index.php:831 tmp/tag.list.b91ef64efc3688266305ea9b42e5017e.rtpl.php:19
 msgid "Tag list"
 msgstr "Liste des tags"
 
-#: index.php:1028 tmp/page.header.b91ef64efc3688266305ea9b42e5017e.rtpl.php:31
+#: index.php:1056 tmp/page.header.b91ef64efc3688266305ea9b42e5017e.rtpl.php:31
 #: tmp/page.header.cedf684561d925457130839629000a81.rtpl.php:31
 msgid "Tools"
 msgstr "Outils"
 
-#: index.php:1037
+#: index.php:1065
 msgid "You are not supposed to change a password on an Open Shaarli."
 msgstr ""
 "Vous n'êtes pas censé modifier le mot de passe d'un Shaarli en mode ouvert."
 
-#: index.php:1042 index.php:1084 index.php:1162 index.php:1193 index.php:1293
+#: index.php:1070 index.php:1112 index.php:1189 index.php:1220 index.php:1325
 msgid "Wrong token."
 msgstr "Jeton invalide."
 
-#: index.php:1047
+#: index.php:1075
 msgid "The old password is not correct."
 msgstr "L'ancien mot de passe est incorrect."
 
-#: index.php:1067
+#: index.php:1095
 msgid "Your password has been changed"
 msgstr "Votre mot de passe a été modifié"
 
-#: index.php:1072
+#: index.php:1100
 #: tmp/changepassword.b91ef64efc3688266305ea9b42e5017e.rtpl.php:13
 #: tmp/tools.b91ef64efc3688266305ea9b42e5017e.rtpl.php:29
 msgid "Change password"
 msgstr "Modification du mot de passe"
 
-#: index.php:1121
+#: index.php:1149
 msgid "Configuration was saved."
 msgstr "La configuration a été sauvegardé."
 
-#: index.php:1145 tmp/configure.b91ef64efc3688266305ea9b42e5017e.rtpl.php:24
+#: index.php:1172 tmp/configure.b91ef64efc3688266305ea9b42e5017e.rtpl.php:24
 msgid "Configure"
 msgstr "Configurer"
 
-#: index.php:1156 tmp/changetag.b91ef64efc3688266305ea9b42e5017e.rtpl.php:13
+#: index.php:1183 tmp/changetag.b91ef64efc3688266305ea9b42e5017e.rtpl.php:13
 #: tmp/tools.b91ef64efc3688266305ea9b42e5017e.rtpl.php:36
 msgid "Manage tags"
 msgstr "Gérer les tags"
 
-#: index.php:1174
+#: index.php:1201
 #, php-format
 msgid "The tag was removed from %d link."
 msgid_plural "The tag was removed from %d links."
 msgstr[0] "Le tag a été supprimé de %d lien."
 msgstr[1] "Le tag a été supprimé de %d liens."
 
-#: index.php:1175
+#: index.php:1202
 #, php-format
 msgid "The tag was renamed in %d link."
 msgid_plural "The tag was renamed in %d links."
 msgstr[0] "Le tag a été renommé dans %d lien."
 msgstr[1] "Le tag a été renommé dans %d liens."
 
-#: index.php:1183 tmp/addlink.b91ef64efc3688266305ea9b42e5017e.rtpl.php:13
+#: index.php:1210 tmp/addlink.b91ef64efc3688266305ea9b42e5017e.rtpl.php:13
 msgid "Shaare a new link"
 msgstr "Partager un nouveau lien"
 
-#: index.php:1353 tmp/editlink.b91ef64efc3688266305ea9b42e5017e.rtpl.php:14
-#: tmp/linklist.b91ef64efc3688266305ea9b42e5017e.rtpl.php:170
+#: index.php:1385 tmp/linklist.b91ef64efc3688266305ea9b42e5017e.rtpl.php:169
 msgid "Edit"
 msgstr "Modifier"
 
-#: index.php:1353 index.php:1418
-#: tmp/editlink.b91ef64efc3688266305ea9b42e5017e.rtpl.php:16
+#: index.php:1385 index.php:1455
 #: tmp/page.header.b91ef64efc3688266305ea9b42e5017e.rtpl.php:26
 #: tmp/page.header.cedf684561d925457130839629000a81.rtpl.php:26
 msgid "Shaare"
 msgstr "Shaare"
 
-#: index.php:1387
+#: index.php:1424
 msgid "Note: "
 msgstr "Note : "
 
-#: index.php:1427 tmp/export.b91ef64efc3688266305ea9b42e5017e.rtpl.php:65
+#: index.php:1464 tmp/export.b91ef64efc3688266305ea9b42e5017e.rtpl.php:65
 msgid "Export"
 msgstr "Exporter"
 
-#: index.php:1489 tmp/import.b91ef64efc3688266305ea9b42e5017e.rtpl.php:83
+#: index.php:1526 tmp/import.b91ef64efc3688266305ea9b42e5017e.rtpl.php:83
 msgid "Import"
 msgstr "Importer"
 
-#: index.php:1499
+#: index.php:1536
 #, php-format
 msgid ""
 "The file you are trying to upload is probably bigger than what this "
@@ -389,16 +392,16 @@ msgstr ""
 "le serveur web peut accepter (%s). Merci de l'envoyer en parties plus "
 "légères."
 
-#: index.php:1538 tmp/pluginsadmin.b91ef64efc3688266305ea9b42e5017e.rtpl.php:26
+#: index.php:1575 tmp/pluginsadmin.b91ef64efc3688266305ea9b42e5017e.rtpl.php:26
 #: tmp/tools.b91ef64efc3688266305ea9b42e5017e.rtpl.php:22
 msgid "Plugin administration"
 msgstr "Administration des extensions"
 
-#: index.php:1703
+#: index.php:1759
 msgid "Search: "
 msgstr "Recherche : "
 
-#: index.php:1930
+#: index.php:1798
 #, php-format
 msgid ""
 "<pre>Sessions do not seem to work correctly on your server.<br>Make sure the "
@@ -417,7 +420,7 @@ msgstr ""
 "cookies. Nous vous recommandons d'accéder à votre serveur depuis son adresse "
 "IP ou un <em>Fully Qualified Domain Name</em>.<br>"
 
-#: index.php:1940
+#: index.php:1808
 msgid "Click to try again."
 msgstr "Cliquer ici pour réessayer."
 
@@ -577,11 +580,11 @@ msgstr "URL de l'API Wallabag"
 msgid "Wallabag API version (1 or 2)"
 msgstr "Version de l'API Wallabag (1 ou 2)"
 
-#: tests/LanguagesTest.php:188 tests/LanguagesTest.php:201
+#: tests/LanguagesTest.php:214 tests/LanguagesTest.php:227
 #: tests/languages/fr/LanguagesFrTest.php:160
 #: tests/languages/fr/LanguagesFrTest.php:173
-#: tmp/page.header.b91ef64efc3688266305ea9b42e5017e.rtpl.php:81
-#: tmp/page.header.cedf684561d925457130839629000a81.rtpl.php:81
+#: tmp/page.header.b91ef64efc3688266305ea9b42e5017e.rtpl.php:85
+#: tmp/page.header.cedf684561d925457130839629000a81.rtpl.php:85
 msgid "Search"
 msgid_plural "Search"
 msgstr[0] "Rechercher"
@@ -625,8 +628,8 @@ msgid "Rename"
 msgstr "Renommer"
 
 #: tmp/changetag.b91ef64efc3688266305ea9b42e5017e.rtpl.php:35
-#: tmp/editlink.b91ef64efc3688266305ea9b42e5017e.rtpl.php:79
-#: tmp/linklist.b91ef64efc3688266305ea9b42e5017e.rtpl.php:172
+#: tmp/editlink.b91ef64efc3688266305ea9b42e5017e.rtpl.php:77
+#: tmp/linklist.b91ef64efc3688266305ea9b42e5017e.rtpl.php:171
 msgid "Delete"
 msgstr "Supprimer"
 
@@ -736,8 +739,29 @@ msgstr ""
 msgid "API secret"
 msgstr "Clé d'API secrète"
 
-#: tmp/configure.b91ef64efc3688266305ea9b42e5017e.rtpl.php:274
-#: tmp/editlink.b91ef64efc3688266305ea9b42e5017e.rtpl.php:74
+#: tmp/configure.b91ef64efc3688266305ea9b42e5017e.rtpl.php:277
+msgid "Enable thumbnails"
+msgstr "Activer les miniatures"
+
+#: tmp/configure.b91ef64efc3688266305ea9b42e5017e.rtpl.php:279
+msgid "Warning: "
+msgstr "Attention : "
+
+#: tmp/configure.b91ef64efc3688266305ea9b42e5017e.rtpl.php:281
+msgid "It's recommended to visit the picture wall after enabling this feature."
+msgstr ""
+"Il est recommandé de visiter le Mur d'images après avoir activé cette "
+"fonctionnalité."
+
+#: tmp/configure.b91ef64efc3688266305ea9b42e5017e.rtpl.php:283
+msgid ""
+"If you have a large database, the first retrieval may take a few minutes."
+msgstr ""
+"Si vous avez beaucoup de liens, la première récupération peut prendre "
+"plusieurs minutes."
+
+#: tmp/configure.b91ef64efc3688266305ea9b42e5017e.rtpl.php:297
+#: tmp/editlink.b91ef64efc3688266305ea9b42e5017e.rtpl.php:72
 #: tmp/pluginsadmin.b91ef64efc3688266305ea9b42e5017e.rtpl.php:139
 #: tmp/pluginsadmin.b91ef64efc3688266305ea9b42e5017e.rtpl.php:199
 msgid "Save"
@@ -763,25 +787,27 @@ msgstr "Tous les liens d'un jour sur une page."
 msgid "Next day"
 msgstr "Jour suivant"
 
-#: tpl/editlink.html
+#: tmp/editlink.b91ef64efc3688266305ea9b42e5017e.rtpl.php:14
 msgid "Edit Shaare"
 msgstr "Modifier le Shaare"
+
+#: tmp/editlink.b91ef64efc3688266305ea9b42e5017e.rtpl.php:14
 msgid "New Shaare"
 msgstr "Nouveau Shaare"
 
-#: tmp/editlink.b91ef64efc3688266305ea9b42e5017e.rtpl.php:25
+#: tmp/editlink.b91ef64efc3688266305ea9b42e5017e.rtpl.php:23
 msgid "Created:"
 msgstr "Création :"
 
-#: tmp/editlink.b91ef64efc3688266305ea9b42e5017e.rtpl.php:28
+#: tmp/editlink.b91ef64efc3688266305ea9b42e5017e.rtpl.php:26
 msgid "URL"
 msgstr "URL"
 
-#: tmp/editlink.b91ef64efc3688266305ea9b42e5017e.rtpl.php:34
+#: tmp/editlink.b91ef64efc3688266305ea9b42e5017e.rtpl.php:32
 msgid "Title"
 msgstr "Titre"
 
-#: tmp/editlink.b91ef64efc3688266305ea9b42e5017e.rtpl.php:40
+#: tmp/editlink.b91ef64efc3688266305ea9b42e5017e.rtpl.php:38
 #: tmp/pluginsadmin.b91ef64efc3688266305ea9b42e5017e.rtpl.php:42
 #: tmp/pluginsadmin.b91ef64efc3688266305ea9b42e5017e.rtpl.php:75
 #: tmp/pluginsadmin.b91ef64efc3688266305ea9b42e5017e.rtpl.php:99
@@ -789,17 +815,17 @@ msgstr "Titre"
 msgid "Description"
 msgstr "Description"
 
-#: tmp/editlink.b91ef64efc3688266305ea9b42e5017e.rtpl.php:46
+#: tmp/editlink.b91ef64efc3688266305ea9b42e5017e.rtpl.php:44
 msgid "Tags"
 msgstr "Tags"
 
-#: tmp/editlink.b91ef64efc3688266305ea9b42e5017e.rtpl.php:59
+#: tmp/editlink.b91ef64efc3688266305ea9b42e5017e.rtpl.php:57
 #: tmp/export.b91ef64efc3688266305ea9b42e5017e.rtpl.php:36
-#: tmp/linklist.b91ef64efc3688266305ea9b42e5017e.rtpl.php:168
+#: tmp/linklist.b91ef64efc3688266305ea9b42e5017e.rtpl.php:167
 msgid "Private"
 msgstr "Privé"
 
-#: tmp/editlink.b91ef64efc3688266305ea9b42e5017e.rtpl.php:74
+#: tmp/editlink.b91ef64efc3688266305ea9b42e5017e.rtpl.php:72
 msgid "Apply Changes"
 msgstr "Appliquer"
 
@@ -876,15 +902,15 @@ msgstr ""
 
 #: tmp/install.b91ef64efc3688266305ea9b42e5017e.rtpl.php:33
 #: tmp/loginform.b91ef64efc3688266305ea9b42e5017e.rtpl.php:30
-#: tmp/page.header.b91ef64efc3688266305ea9b42e5017e.rtpl.php:147
-#: tmp/page.header.cedf684561d925457130839629000a81.rtpl.php:147
+#: tmp/page.header.b91ef64efc3688266305ea9b42e5017e.rtpl.php:151
+#: tmp/page.header.cedf684561d925457130839629000a81.rtpl.php:151
 msgid "Username"
 msgstr "Nom d'utilisateur"
 
 #: tmp/install.b91ef64efc3688266305ea9b42e5017e.rtpl.php:48
 #: tmp/loginform.b91ef64efc3688266305ea9b42e5017e.rtpl.php:34
-#: tmp/page.header.b91ef64efc3688266305ea9b42e5017e.rtpl.php:148
-#: tmp/page.header.cedf684561d925457130839629000a81.rtpl.php:148
+#: tmp/page.header.b91ef64efc3688266305ea9b42e5017e.rtpl.php:152
+#: tmp/page.header.cedf684561d925457130839629000a81.rtpl.php:152
 msgid "Password"
 msgstr "Mot de passe"
 
@@ -901,28 +927,28 @@ msgid "Install"
 msgstr "Installer"
 
 #: tmp/linklist.b91ef64efc3688266305ea9b42e5017e.rtpl.php:14
-#: tmp/linklist.b91ef64efc3688266305ea9b42e5017e.rtpl.php:80
+#: tmp/linklist.b91ef64efc3688266305ea9b42e5017e.rtpl.php:79
 msgid "shaare"
 msgid_plural "shaares"
 msgstr[0] "shaare"
 msgstr[1] "shaares"
 
 #: tmp/linklist.b91ef64efc3688266305ea9b42e5017e.rtpl.php:18
-#: tmp/linklist.b91ef64efc3688266305ea9b42e5017e.rtpl.php:84
+#: tmp/linklist.b91ef64efc3688266305ea9b42e5017e.rtpl.php:83
 msgid "private link"
 msgid_plural "private links"
 msgstr[0] "lien privé"
 msgstr[1] "liens privés"
 
-#: tmp/linklist.b91ef64efc3688266305ea9b42e5017e.rtpl.php:31
-#: tmp/page.header.b91ef64efc3688266305ea9b42e5017e.rtpl.php:117
-#: tmp/page.header.cedf684561d925457130839629000a81.rtpl.php:117
+#: tmp/linklist.b91ef64efc3688266305ea9b42e5017e.rtpl.php:30
+#: tmp/page.header.b91ef64efc3688266305ea9b42e5017e.rtpl.php:121
+#: tmp/page.header.cedf684561d925457130839629000a81.rtpl.php:121
 msgid "Search text"
 msgstr "Recherche texte"
 
-#: tmp/linklist.b91ef64efc3688266305ea9b42e5017e.rtpl.php:38
-#: tmp/page.header.b91ef64efc3688266305ea9b42e5017e.rtpl.php:124
-#: tmp/page.header.cedf684561d925457130839629000a81.rtpl.php:124
+#: tmp/linklist.b91ef64efc3688266305ea9b42e5017e.rtpl.php:37
+#: tmp/page.header.b91ef64efc3688266305ea9b42e5017e.rtpl.php:128
+#: tmp/page.header.cedf684561d925457130839629000a81.rtpl.php:128
 #: tmp/tag.cloud.b91ef64efc3688266305ea9b42e5017e.rtpl.php:36
 #: tmp/tag.cloud.b91ef64efc3688266305ea9b42e5017e.rtpl.php:64
 #: tmp/tag.list.b91ef64efc3688266305ea9b42e5017e.rtpl.php:36
@@ -930,52 +956,52 @@ msgstr "Recherche texte"
 msgid "Filter by tag"
 msgstr "Filtrer par tag"
 
-#: tmp/linklist.b91ef64efc3688266305ea9b42e5017e.rtpl.php:111
+#: tmp/linklist.b91ef64efc3688266305ea9b42e5017e.rtpl.php:110
 msgid "Nothing found."
 msgstr "Aucun résultat."
 
-#: tmp/linklist.b91ef64efc3688266305ea9b42e5017e.rtpl.php:119
+#: tmp/linklist.b91ef64efc3688266305ea9b42e5017e.rtpl.php:118
 #, php-format
 msgid "%s result"
 msgid_plural "%s results"
 msgstr[0] "%s résultat"
 msgstr[1] "%s résultats"
 
-#: tmp/linklist.b91ef64efc3688266305ea9b42e5017e.rtpl.php:123
+#: tmp/linklist.b91ef64efc3688266305ea9b42e5017e.rtpl.php:122
 msgid "for"
 msgstr "pour"
 
-#: tmp/linklist.b91ef64efc3688266305ea9b42e5017e.rtpl.php:130
+#: tmp/linklist.b91ef64efc3688266305ea9b42e5017e.rtpl.php:129
 msgid "tagged"
 msgstr "taggé"
 
-#: tmp/linklist.b91ef64efc3688266305ea9b42e5017e.rtpl.php:134
+#: tmp/linklist.b91ef64efc3688266305ea9b42e5017e.rtpl.php:133
 msgid "Remove tag"
 msgstr "Retirer le tag"
 
-#: tmp/linklist.b91ef64efc3688266305ea9b42e5017e.rtpl.php:143
+#: tmp/linklist.b91ef64efc3688266305ea9b42e5017e.rtpl.php:142
 msgid "with status"
 msgstr "avec le statut"
 
-#: tmp/linklist.b91ef64efc3688266305ea9b42e5017e.rtpl.php:154
+#: tmp/linklist.b91ef64efc3688266305ea9b42e5017e.rtpl.php:153
 msgid "without any tag"
 msgstr "sans tag"
 
-#: tmp/linklist.b91ef64efc3688266305ea9b42e5017e.rtpl.php:174
+#: tmp/linklist.b91ef64efc3688266305ea9b42e5017e.rtpl.php:173
 #: tmp/page.footer.b91ef64efc3688266305ea9b42e5017e.rtpl.php:42
 #: tmp/page.footer.cedf684561d925457130839629000a81.rtpl.php:42
 msgid "Fold"
 msgstr "Replier"
 
-#: tmp/linklist.b91ef64efc3688266305ea9b42e5017e.rtpl.php:176
+#: tmp/linklist.b91ef64efc3688266305ea9b42e5017e.rtpl.php:175
 msgid "Edited: "
 msgstr "Modifié : "
 
-#: tmp/linklist.b91ef64efc3688266305ea9b42e5017e.rtpl.php:180
+#: tmp/linklist.b91ef64efc3688266305ea9b42e5017e.rtpl.php:179
 msgid "permalink"
 msgstr "permalien"
 
-#: tmp/linklist.b91ef64efc3688266305ea9b42e5017e.rtpl.php:182
+#: tmp/linklist.b91ef64efc3688266305ea9b42e5017e.rtpl.php:181
 msgid "Add tag"
 msgstr "Ajouter un tag"
 
@@ -1021,8 +1047,8 @@ msgstr ""
 "réessayer plus tard."
 
 #: tmp/loginform.b91ef64efc3688266305ea9b42e5017e.rtpl.php:41
-#: tmp/page.header.b91ef64efc3688266305ea9b42e5017e.rtpl.php:151
-#: tmp/page.header.cedf684561d925457130839629000a81.rtpl.php:151
+#: tmp/page.header.b91ef64efc3688266305ea9b42e5017e.rtpl.php:155
+#: tmp/page.header.cedf684561d925457130839629000a81.rtpl.php:155
 msgid "Remember me"
 msgstr "Rester connecté"
 
@@ -1053,35 +1079,40 @@ msgstr "Déplier tout"
 msgid "Are you sure you want to delete this link?"
 msgstr "Êtes-vous sûr de vouloir supprimer ce lien ?"
 
-#: tmp/page.header.b91ef64efc3688266305ea9b42e5017e.rtpl.php:61
-#: tmp/page.header.b91ef64efc3688266305ea9b42e5017e.rtpl.php:86
-#: tmp/page.header.cedf684561d925457130839629000a81.rtpl.php:61
-#: tmp/page.header.cedf684561d925457130839629000a81.rtpl.php:86
+#: tmp/page.header.b91ef64efc3688266305ea9b42e5017e.rtpl.php:65
+#: tmp/page.header.b91ef64efc3688266305ea9b42e5017e.rtpl.php:90
+#: tmp/page.header.cedf684561d925457130839629000a81.rtpl.php:65
+#: tmp/page.header.cedf684561d925457130839629000a81.rtpl.php:90
 msgid "RSS Feed"
 msgstr "Flux RSS"
 
-#: tmp/page.header.b91ef64efc3688266305ea9b42e5017e.rtpl.php:66
-#: tmp/page.header.b91ef64efc3688266305ea9b42e5017e.rtpl.php:102
-#: tmp/page.header.cedf684561d925457130839629000a81.rtpl.php:66
-#: tmp/page.header.cedf684561d925457130839629000a81.rtpl.php:102
+#: tmp/page.header.b91ef64efc3688266305ea9b42e5017e.rtpl.php:70
+#: tmp/page.header.b91ef64efc3688266305ea9b42e5017e.rtpl.php:106
+#: tmp/page.header.cedf684561d925457130839629000a81.rtpl.php:70
+#: tmp/page.header.cedf684561d925457130839629000a81.rtpl.php:106
 msgid "Logout"
 msgstr "Déconnexion"
 
-#: tmp/page.header.b91ef64efc3688266305ea9b42e5017e.rtpl.php:169
-#: tmp/page.header.cedf684561d925457130839629000a81.rtpl.php:169
+#: tmp/page.header.b91ef64efc3688266305ea9b42e5017e.rtpl.php:173
+#: tmp/page.header.cedf684561d925457130839629000a81.rtpl.php:173
 msgid "is available"
 msgstr "est disponible"
 
-#: tmp/page.header.b91ef64efc3688266305ea9b42e5017e.rtpl.php:176
-#: tmp/page.header.cedf684561d925457130839629000a81.rtpl.php:176
+#: tmp/page.header.b91ef64efc3688266305ea9b42e5017e.rtpl.php:180
+#: tmp/page.header.cedf684561d925457130839629000a81.rtpl.php:180
 msgid "Error"
 msgstr "Erreur"
 
-#: tmp/picwall.b91ef64efc3688266305ea9b42e5017e.rtpl.php:16
+#: tmp/picwall.b91ef64efc3688266305ea9b42e5017e.rtpl.php:14
+msgid "Picture wall unavailable (thumbnails are disabled)."
+msgstr ""
+"Le mur d'images n'est pas disponible (les miniatures sont désactivées)."
+
+#: tmp/picwall.b91ef64efc3688266305ea9b42e5017e.rtpl.php:25
 msgid "Picture Wall"
 msgstr "Mur d'images"
 
-#: tmp/picwall.b91ef64efc3688266305ea9b42e5017e.rtpl.php:16
+#: tmp/picwall.b91ef64efc3688266305ea9b42e5017e.rtpl.php:25
 msgid "pics"
 msgstr "images"
 
index 8a19f07053dc26b6c817bc838f17bb69add0d9d0..263529fdd7ad96a3ce5ea8bb4b42a1077c67e2c1 100644 (file)
@@ -3,7 +3,10 @@
     "default": {
       "_comment": "infinite cache",
       "cache_duration": -1,
-      "timeout": 60
+      "timeout": 10
+    },
+    "path": {
+      "cache": "cache/"
     }
   }
 }
\ No newline at end of file
index 28dfd3b473dbd3f7b39d61295a0ec055681afacd..899edd67a282bdcd89e5b0620112df3caf2fad9c 100644 (file)
--- a/index.php
+++ b/index.php
@@ -74,13 +74,13 @@ require_once 'application/Url.php';
 require_once 'application/Utils.php';
 require_once 'application/PluginManager.php';
 require_once 'application/Router.php';
-require_once 'application/Thumbnailer.php';
 require_once 'application/Updater.php';
-use \Shaarli\Languages;
-use \Shaarli\ThemeUtils;
 use \Shaarli\Config\ConfigManager;
+use \Shaarli\Languages;
 use \Shaarli\Security\LoginManager;
 use \Shaarli\Security\SessionManager;
+use \Shaarli\ThemeUtils;
+use \Shaarli\Thumbnailer;
 
 // Ensure the PHP version is supported
 try {
@@ -603,7 +603,7 @@ function renderPage($conf, $pluginManager, $LINKSDB, $history, $sessionManager,
     if ($targetPage == Router::$PAGE_PICWALL)
     {
         if (! $conf->get('thumbnails.enabled')) {
-            header('Location: ?');
+            $PAGE->renderPage('picwall');
             exit;
         }
 
@@ -614,23 +614,19 @@ function renderPage($conf, $pluginManager, $LINKSDB, $history, $sessionManager,
         $thumbnailer = new Thumbnailer($conf);
 
 
-        $cpt = 0;
+        $newThumbnailsCpt = 0;
         // Get only links which have a thumbnail.
-        foreach($links as $link)
+        foreach($links as $key => $link)
         {
-            $permalink='?'.$link['shorturl'];
             // Not a note,
             // and (never retrieved yet or no valid cache file)
             if ($link['url'][0] != '?'
                 && (! isset($link['thumbnail']) || ($link['thumbnail'] !== false && ! is_file($link['thumbnail'])))
             ) {
-                $link['thumbnail'] = $thumbnailer->get($link['url']);
-                // FIXME! we really need to get rid of ArrayAccess...
-                $item = $LINKSDB[$link['linkdate']];
-                $item['thumbnail'] = $link['thumbnail'];
-                $LINKSDB[$link['linkdate']] = $item;
-                $updateDB = true;
-                $cpt++;
+                $item = $LINKSDB[$key];
+                $item['thumbnail'] = $thumbnailer->get($link['url']);
+                $LINKSDB[$key] = $item;
+                $newThumbnailsCpt++;
             }
 
             if (isset($link['thumbnail']) && $link['thumbnail'] !== false) {
@@ -639,14 +635,13 @@ function renderPage($conf, $pluginManager, $LINKSDB, $history, $sessionManager,
 
             // If we retrieved new thumbnails, we update the database every 20 links.
             // Downloading everything the first time may take a very long time
-            if (!empty($updateDB) && $cpt == 20) {
+            if ($newThumbnailsCpt == 20) {
                 $LINKSDB->save($conf->get('resource.page_cache'));
-                $updateDB = false;
-                $cpt = 0;
+                $newThumbnailsCpt = 0;
             }
         }
 
-        if (!empty($updateDB)) {
+        if ($newThumbnailsCpt > 0) {
             $LINKSDB->save($conf->get('resource.page_cache'));
         }
 
@@ -1619,11 +1614,9 @@ function buildLinkList($PAGE, $LINKSDB, $conf, $pluginManager, $loginManager)
         if ($conf->get('thumbnails.enabled') && $link['url'][0] != '?'
             && (! isset($link['thumbnail']) || ($link['thumbnail'] !== false && ! is_file($link['thumbnail'])))
         ) {
-            $link['thumbnail'] = $thumbnailer->get($link['url']);
-            // FIXME! we really need to get rid of ArrayAccess...
-            $item = $LINKSDB[$keys[$i]];
-            $item['thumbnail'] = $link['thumbnail'];
-            $LINKSDB[$keys[$i]] = $item;
+            $elem = $LINKSDB[$keys[$i]];
+            $elem['thumbnail'] = $thumbnailer->get($link['url']);
+            $LINKSDB[$keys[$i]] = $elem;
             $updateDB = true;
         }
 
index db10932114a6f9f078ed99407a2b8273f3dee047..c04b8fb56021c5d18aa34528a24a60e15db51ea9 100644 (file)
@@ -1,7 +1,10 @@
 <?php
 
-require_once 'application/Thumbnailer.php';
-require_once 'application/config/ConfigManager.php';
+namespace Shaarli;
+
+use PHPUnit\Framework\TestCase;
+use Shaarli\Config\ConfigManager;
+use WebThumbnailer\Application\ConfigManager as WTConfigManager;
 
 /**
  * Class ThumbnailerTest
@@ -11,31 +14,48 @@ require_once 'application/config/ConfigManager.php';
  *   1. the thumbnailer library is itself tested
  *   2. we don't want to make too many external requests during the tests
  */
-class ThumbnailerTest extends PHPUnit_Framework_TestCase
+class ThumbnailerTest extends TestCase
 {
+    const WIDTH = 190;
+
+    const HEIGHT = 210;
+
     /**
-     * Test a thumbnail with a custom size.
+     * @var Thumbnailer;
      */
-    public function testThumbnailValid()
+    protected $thumbnailer;
+
+    public function setUp()
     {
         $conf = new ConfigManager('tests/utils/config/configJson');
-        $width = 200;
-        $height = 200;
-        $conf->set('thumbnails.width', $width);
-        $conf->set('thumbnails.height', $height);
+        $conf->set('thumbnails.width', self::WIDTH);
+        $conf->set('thumbnails.height', self::HEIGHT);
+        $conf->set('dev.debug', true);
+
+        $this->thumbnailer = new Thumbnailer($conf);
+        // cache files in the sandbox
+        WTConfigManager::addFile('tests/utils/config/wt.json');
+    }
+
+    public function tearDown()
+    {
+        $this->rrmdirContent('sandbox/');
+    }
 
-        $thumbnailer = new Thumbnailer($conf);
-        $thumb = $thumbnailer->get('https://github.com/shaarli/Shaarli/');
+    /**
+     * Test a thumbnail with a custom size.
+     */
+    public function testThumbnailValid()
+    {
+        $thumb = $this->thumbnailer->get('https://github.com/shaarli/Shaarli/');
         $this->assertNotFalse($thumb);
         $image = imagecreatefromstring(file_get_contents($thumb));
-        $this->assertEquals($width, imagesx($image));
-        $this->assertEquals($height, imagesy($image));
+        $this->assertEquals(self::WIDTH, imagesx($image));
+        $this->assertEquals(self::HEIGHT, imagesy($image));
     }
 
     /**
      * Test a thumbnail that can't be retrieved.
-     *
-     * @expectedException WebThumbnailer\Exception\ThumbnailNotFoundException
      */
     public function testThumbnailNotValid()
     {
@@ -48,4 +68,18 @@ class ThumbnailerTest extends PHPUnit_Framework_TestCase
 
         ini_set('error_log', $oldlog);
     }
+
+    protected function rrmdirContent($dir) {
+        if (is_dir($dir)) {
+            $objects = scandir($dir);
+            foreach ($objects as $object) {
+                if ($object != "." && $object != "..") {
+                    if (is_dir($dir."/".$object))
+                        $this->rrmdirContent($dir."/".$object);
+                    else
+                        unlink($dir."/".$object);
+                }
+            }
+        }
+    }
 }
index 94e3c7d307c4bb46f1e45d8cf523852ee3b7ba88..8b90fd5e1032aab84988aca65decc0f3a9721acc 100644 (file)
@@ -684,4 +684,19 @@ $GLOBALS[\'privateLinkByDefault\'] = true;';
         $this->assertEquals(4194304, $this->conf->get('general.download_max_size'));
         $this->assertEquals(3, $this->conf->get('general.download_timeout'));
     }
+
+    /**
+     * Test updateMethodAtomDefault with show_atom set to true.
+     * => nothing to do
+     */
+    public function testUpdateMethodWebThumbnailerEnabled()
+    {
+        $this->conf->set('thumbnail.enable_thumbnails', true);
+        $updater = new Updater([], [], $this->conf, true);
+        $this->assertTrue($updater->updateMethodWebThumbnailer());
+        $this->assertFalse($this->conf->exists('thumbnail'));
+        $this->assertTrue($this->conf->get('thumbnails.enabled'));
+        $this->assertEquals(125, $this->conf->get('thumbnails.width'));
+        $this->assertEquals(90, $this->conf->get('thumbnails.height'));
+    }
 }
index 3101b22599880e0278e1a5dd08df24f22ed1f6a9..061d4c283119605db6450cbbc6bd49a66b3d6737 100644 (file)
@@ -1,38 +1,84 @@
 <?php /*
 {
     "credentials": {
-        "login":"root",
-        "hash":"hash",
-        "salt":"salt"
+        "login": "root",
+        "hash": "hash",
+        "salt": "salt"
     },
     "security": {
-        "session_protection_disabled":false
+        "session_protection_disabled": false,
+        "ban_after": 4,
+        "ban_duration": 1800,
+        "open_shaarli": false,
+        "allowed_protocols": [
+            "ftp",
+            "ftps",
+            "magnet"
+        ]
     },
     "general": {
-        "timezone":"Europe\/Paris",
+        "timezone": "Europe\/Paris",
         "title": "Shaarli",
-        "header_link": "?"
+        "header_link": "?",
+        "links_per_page": 20,
+        "enabled_plugins": [
+            "qrcode"
+        ],
+        "default_note_title": "Note: "
     },
     "privacy": {
-        "default_private_links":true
+        "default_private_links": true,
+        "hide_public_links": false,
+        "force_login": false,
+        "hide_timestamps": false,
+        "remember_user_default": true
     },
     "redirector": {
-        "url":"lala"
+        "url": "lala",
+        "encode_url": true
     },
     "config": {
         "foo": "bar"
     },
     "resource": {
         "datastore": "tests\/utils\/config\/datastore.php",
-        "data_dir": "sandbox/",
-        "raintpl_tpl": "tpl/"
+        "data_dir": "sandbox\/",
+        "raintpl_tpl": "tpl\/",
+        "config": "data\/config.php",
+        "ban_file": "data\/ipbans.php",
+        "updates": "data\/updates.txt",
+        "log": "data\/log.txt",
+        "update_check": "data\/lastupdatecheck.txt",
+        "history": "data\/history.php",
+        "theme": "default",
+        "raintpl_tmp": "tmp\/",
+        "thumbnails_cache": "cache",
+        "page_cache": "pagecache"
     },
     "plugins": {
         "WALLABAG_VERSION": 1
     },
     "dev": {
         "debug": true
+    },
+    "thumbnails": {
+        "enabled": true,
+        "width": 125,
+        "height": 90
+    },
+    "updates": {
+        "check_updates": false,
+        "check_updates_branch": "stable",
+        "check_updates_interval": 86400
+    },
+    "feed": {
+        "rss_permalinks": true,
+        "show_atom": true
+    },
+    "translation": {
+        "language": "auto",
+        "mode": "php",
+        "extensions": []
     }
 }
-*/ ?>
-
+*/ ?>
\ No newline at end of file
diff --git a/tests/utils/config/wt.json b/tests/utils/config/wt.json
new file mode 100644 (file)
index 0000000..69ce49a
--- /dev/null
@@ -0,0 +1,12 @@
+{
+  "settings": {
+    "default": {
+      "_comment": "infinite cache",
+      "cache_duration": -1,
+      "timeout": 10
+    },
+    "path": {
+      "cache": "sandbox/"
+    }
+  }
+}
\ No newline at end of file
index a63c7ad33a6d8402423aebe90d51b5357c11de17..b91fc07ed07a0f8faa05cb0a77f969fe0d77686d 100644 (file)
           </div>
         </div>
       </div>
+      <div class="pure-g">
+        <div class="pure-u-lg-{$ratioLabel} pure-u-{$ratioLabelMobile}">
+          <div class="form-label">
+            <label for="enableThumbnails">
+              <span class="label-name">{'Enable thumbnails'|t}</span><br>
+              <span class="label-desc">
+                {'Warning: '|t}
+                {'It\'s recommended to visit the picture wall after enabling this feature.'|t}
+                {'If you have a large database, the first retrieval may take a few minutes.'|t}
+              </span>
+            </label>
+          </div>
+        </div>
+        <div class="pure-u-lg-{$ratioInput} pure-u-{$ratioInputMobile}">
+          <div class="form-input">
+            <input type="checkbox" name="enableThumbnails" id="enableThumbnails"
+                   {if="$thumbnails_enabled"}checked{/if}/>
+          </div>
+        </div>
+      </div>
       <div class="center">
         <input type="submit" value="{'Save'|t}" name="save">
       </div>
index 322cddd5341ec417cbfc9597bf199a629b7d6f9b..bf88e161b778c6181f219fb07d74048ce216669e 100644 (file)
 
         <div class="linklist-item linklist-item{if="$value.class"} {$value.class}{/if}" data-id="{$value.id}">
           <div class="linklist-item-title">
-            {$thumb=thumbnail($value.url)}
-            {if="$thumb!=false"}
-              <div class="linklist-item-thumbnail">{$thumb}</div>
+            {if="$thumbnails_enabled && !empty($value.thumbnail)"}
+              <div class="linklist-item-thumbnail">
+                <div class="thumbnail">
+                  <a href="{$value.real_url}">
+                  {ignore}RainTPL hack: put the 2 src on two different line to avoid path replace bug{/ignore}
+                  <img data-src="{$value.thumbnail}#" class="b-lazy"
+                    src="#"
+                    alt="thumbnail" width="{$thumbnails_width}" height="{$thumbnails_height}" />
+                  </a>
+                </div>
+              </div>
             {/if}
 
             {if="$is_logged_in"}
 </div>
 
 {include="page.footer"}
+<script src="js/thumbnails.min.js?v={$version_hash}"></script>
 </body>
 </html>
index 82568d635ca0db797b2daf609b7d1852d1142bf0..840e4352c4353e8e1568a0ea0fade2d5b991e3c9 100644 (file)
         <li class="pure-menu-item" id="shaarli-menu-tags">
           <a href="?do=tagcloud" class="pure-menu-link">{'Tag cloud'|t}</a>
         </li>
-        <li class="pure-menu-item" id="shaarli-menu-picwall">
-          <a href="?do=picwall{$searchcrits}" class="pure-menu-link">{'Picture wall'|t}</a>
-        </li>
+        {if="$thumbnails_enabled"}
+          <li class="pure-menu-item" id="shaarli-menu-picwall">
+            <a href="?do=picwall{$searchcrits}" class="pure-menu-link">{'Picture wall'|t}</a>
+          </li>
+        {/if}
         <li class="pure-menu-item" id="shaarli-menu-daily">
           <a href="?do=daily" class="pure-menu-link">{'Daily'|t}</a>
         </li>
index 2f7e03dc3bc0b127e254acb7f3acb82f86d9d986..1ea9c20a6282d5c89f5d923b822903be17c0ba4a 100644 (file)
@@ -5,41 +5,53 @@
 </head>
 <body>
 {include="page.header"}
+{if="!$thumbnails_enabled"}
+<div class="pure-g pure-alert pure-alert-warning page-single-alert">
+  <div class="pure-u-1 center">
+    {'Picture wall unavailable (thumbnails are disabled).'|t}
+  </div>
+</div>
+{else}
+  <div class="pure-g">
+    <div class="pure-u-lg-1-6 pure-u-1-24"></div>
+    <div class="pure-u-lg-2-3 pure-u-22-24 page-form page-visitor">
+      {$countPics=count($linksToDisplay)}
+      <h2 class="window-title">{'Picture Wall'|t} - {$countPics} {'pics'|t}</h2>
 
-<div class="pure-g">
-  <div class="pure-u-lg-1-6 pure-u-1-24"></div>
-  <div class="pure-u-lg-2-3 pure-u-22-24 page-form page-visitor">
-    {$countPics=count($linksToDisplay)}
-    <h2 class="window-title">{'Picture Wall'|t} - {$countPics} {'pics'|t}</h2>
-
-    <div id="plugin_zone_start_picwall" class="plugin_zone">
-      {loop="$plugin_start_zone"}
-        {$value}
-      {/loop}
-    </div>
+      <div id="plugin_zone_start_picwall" class="plugin_zone">
+        {loop="$plugin_start_zone"}
+          {$value}
+        {/loop}
+      </div>
 
-    <div id="picwall_container" class="picwall-container">
-      {loop="$linksToDisplay"}
-        <div class="picwall-pictureframe">
-          {$value.thumbnail}<a href="{$value.real_url}"><span class="info">{$value.title}</span></a>
-          {loop="$value.picwall_plugin"}
-            {$value}
-          {/loop}
-        </div>
-      {/loop}
-      <div class="clear"></div>
-    </div>
+      <div id="picwall_container" class="picwall-container">
+        {loop="$linksToDisplay"}
+          <div class="picwall_pictureframe">
+            {ignore}RainTPL hack: put the 2 src on two different line to avoid path replace bug{/ignore}
+            <img data-src="{$value.thumbnail}#" class="b-lazy"
+                 src="#"
+                 alt="thumbnail" width="{$thumbnails_width}" height="{$thumbnails_height}" />
+            <a href="{$value.real_url}"><span class="info">{$value.title}</span></a>
+            {loop="$value.picwall_plugin"}
+              {$value}
+            {/loop}
+          </div>
+        {/loop}
+        <div class="clear"></div>
+      </div>
 
-    <div id="plugin_zone_end_picwall" class="plugin_zone">
-      {loop="$plugin_end_zone"}
-        {$value}
-      {/loop}
+      <div id="plugin_zone_end_picwall" class="plugin_zone">
+        {loop="$plugin_end_zone"}
+          {$value}
+        {/loop}
+      </div>
     </div>
+    <div class="pure-u-lg-1-6 pure-u-1-24"></div>
   </div>
-</div>
+{/if}
 
 {include="page.footer"}
-<script src="js/picwall.min.js?v={$version_hash}"></script>
+<script src="js/thumbnails.min.js?v={$version_hash}"></script>
 </body>
 </html>
 
index 9bdafa8cd249ba162f27ed5ce5d316ce50a08878..3f202849db3313b91f26b32ef2d5deec3b019656 100644 (file)
 </div>
 
     {include="page.footer"}
+<script src="js/thumbnails.min.js"></script>
 
 </body>
 </html>
index 2ac11ec20ca57a0a1fe11fe9b7adb5ff6c2a6c2c..5f1d266ee1f15ddc7bc4f00403e968511d033b7d 100644 (file)
@@ -38,6 +38,6 @@
 
 {include="page.footer"}
 
-<script src="js/picwall.min.js"></script>
+<script src="js/thumbnails.min.js"></script>
 </body>
 </html>
index 94b7aa701b270a57f068a05800bac9d6e9964773..1fc5d01679efd433fd249c1bc0bdfecb0621d265 100644 (file)
@@ -23,7 +23,7 @@ const extractCssVintage = new ExtractTextPlugin({
 module.exports = [
   {
     entry: {
-      picwall: './assets/common/js/picwall.js',
+      thumbnails: './assets/common/js/thumbnails.js',
       pluginsadmin: './assets/default/js/plugins-admin.js',
       shaarli: [
         './assets/default/js/base.js',
@@ -96,7 +96,7 @@ module.exports = [
         './assets/vintage/css/reset.css',
         './assets/vintage/css/shaarli.css',
       ].concat(glob.sync('./assets/vintage/img/*')),
-      picwall: './assets/common/js/picwall.js',
+      thumbnails: './assets/common/js/thumbnails.js',
     },
     output: {
       filename: '[name].min.js',