aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--.readthedocs.yml15
-rw-r--r--AUTHORS13
-rw-r--r--CHANGELOG.md5
-rw-r--r--README.md2
-rw-r--r--application/Router.php6
-rw-r--r--assets/default/js/base.js22
-rw-r--r--assets/default/scss/shaarli.scss12
-rw-r--r--doc/md/Download-and-Installation.md6
-rw-r--r--inc/languages/fr/LC_MESSAGES/shaarli.po3
-rw-r--r--index.php47
-rw-r--r--tpl/default/linklist.html37
-rw-r--r--tpl/default/linklist.paging.html24
-rw-r--r--tpl/default/page.footer.html4
-rw-r--r--tpl/default/page.header.html31
-rw-r--r--tpl/default/tag.sort.html6
15 files changed, 176 insertions, 57 deletions
diff --git a/.readthedocs.yml b/.readthedocs.yml
new file mode 100644
index 00000000..09e5a6a5
--- /dev/null
+++ b/.readthedocs.yml
@@ -0,0 +1,15 @@
1# .readthedocs.yml
2# Read the Docs configuration file
3# See https://docs.readthedocs.io/en/stable/config-file/v2.html for details
4
5# Required
6version: 2
7
8# Build documentation with MkDocs
9mkdocs:
10 configuration: mkdocs.yml
11
12# Optionally set the version of Python and requirements required to build your docs
13# https://github.com/rtfd/readthedocs.org/issues/5250
14python:
15 version: 3.5 \ No newline at end of file
diff --git a/AUTHORS b/AUTHORS
index db23ad32..7fa2734a 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -1,13 +1,15 @@
1 687 ArthurHoaro <arthur@hoa.ro> 1 734 ArthurHoaro <arthur@hoa.ro>
2 355 VirtualTam <virtualtam@flibidi.net> 2 400 VirtualTam <virtualtam@flibidi.net>
3 195 nodiscc <nodiscc@gmail.com> 3 215 nodiscc <nodiscc@gmail.com>
4 56 Sébastien Sauvage <sebsauvage@sebsauvage.net> 4 56 Sébastien Sauvage <sebsauvage@sebsauvage.net>
5 15 Florian Eula <eula.florian@gmail.com> 5 15 Florian Eula <eula.florian@gmail.com>
6 13 Emilien Klein <emilien@klein.st> 6 13 Emilien Klein <emilien@klein.st>
7 12 Nicolas Danelon <hi@nicolasmd.com.ar> 7 12 Nicolas Danelon <hi@nicolasmd.com.ar>
8 9 Willi Eggeling <thewilli@gmail.com> 8 9 Willi Eggeling <thewilli@gmail.com>
9 8 Christophe HENRY <christophe.henry@sbgodin.fr> 9 8 Christophe HENRY <christophe.henry@sbgodin.fr>
10 7 Luce Carević <lcarevic@access42.net>
10 6 B. van Berkum <dev@dotmpe.com> 11 6 B. van Berkum <dev@dotmpe.com>
12 6 llune <llune@users.noreply.github.com>
11 5 Lucas Cimon <lucas.cimon@gmail.com> 13 5 Lucas Cimon <lucas.cimon@gmail.com>
12 5 Mark Schmitz <kramred@gmail.com> 14 5 Mark Schmitz <kramred@gmail.com>
13 5 kalvn <kalvnthereal@gmail.com> 15 5 kalvn <kalvnthereal@gmail.com>
@@ -15,7 +17,7 @@
15 4 David Sferruzza <david.sferruzza@gmail.com> 17 4 David Sferruzza <david.sferruzza@gmail.com>
16 4 Immánuel Fodor <immanuelfactor+github@gmail.com> 18 4 Immánuel Fodor <immanuelfactor+github@gmail.com>
17 3 Teromene <teromene@teromene.fr> 19 3 Teromene <teromene@teromene.fr>
18 3 llune <llune@users.noreply.github.com> 20 2 Alexandre G.-Raymond <alex@ndre.gr>
19 2 Chris Kuethe <chris.kuethe@gmail.com> 21 2 Chris Kuethe <chris.kuethe@gmail.com>
20 2 Felix Bartels <felix@host-consultants.de> 22 2 Felix Bartels <felix@host-consultants.de>
21 2 Knah Tsaeb <Knah-Tsaeb@knah-tsaeb.org> 23 2 Knah Tsaeb <Knah-Tsaeb@knah-tsaeb.org>
@@ -27,11 +29,12 @@
27 2 julienCXX <software@chmodplusx.eu> 29 2 julienCXX <software@chmodplusx.eu>
28 2 philipp-r <philipp-r@users.noreply.github.com> 30 2 philipp-r <philipp-r@users.noreply.github.com>
29 2 pips <pips@e5150.fr> 31 2 pips <pips@e5150.fr>
32 2 trailjeep <trailjeep@gmail.com>
30 1 Adrien Oliva <adrien.oliva@yapbreak.fr> 33 1 Adrien Oliva <adrien.oliva@yapbreak.fr>
31 1 Adrien le Maire <adrien@alemaire.be> 34 1 Adrien le Maire <adrien@alemaire.be>
32 1 Alexandre G.-Raymond <alex@ndre.gr>
33 1 Alexis J <alexis@effingo.be> 35 1 Alexis J <alexis@effingo.be>
34 1 Angristan <angristan@users.noreply.github.com> 36 1 Angristan <angristan@users.noreply.github.com>
37 1 Bish Erbas <42714627+bisherbas@users.noreply.github.com>
35 1 BoboTiG <bobotig@gmail.com> 38 1 BoboTiG <bobotig@gmail.com>
36 1 Bronco <bronco@warriordudimanche.net> 39 1 Bronco <bronco@warriordudimanche.net>
37 1 Buster One <37770318+buster-one@users.noreply.github.com> 40 1 Buster One <37770318+buster-one@users.noreply.github.com>
diff --git a/CHANGELOG.md b/CHANGELOG.md
index ada0f109..865e0370 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -5,6 +5,11 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/)
5and this project adheres to [Semantic Versioning](http://semver.org/). 5and this project adheres to [Semantic Versioning](http://semver.org/).
6 6
7 7
8## [v0.10.4](https://github.com/shaarli/Shaarli/releases/tag/v0.10.4) - 2019-04-16
9### Fixed
10- Fix thumbnails disabling if PHP GD is not installed
11- Fix a warning if links sticky status isn't set
12
8## [v0.10.3](https://github.com/shaarli/Shaarli/releases/tag/v0.10.3) - 2019-02-23 13## [v0.10.3](https://github.com/shaarli/Shaarli/releases/tag/v0.10.3) - 2019-02-23
9### Added 14### Added
10- Add OpenGraph metadata tags on permalink page 15- Add OpenGraph metadata tags on permalink page
diff --git a/README.md b/README.md
index ea2c8176..21f2eae7 100644
--- a/README.md
+++ b/README.md
@@ -9,7 +9,7 @@ _It is designed to be personal (single-user), fast and handy._
9[![](https://img.shields.io/badge/stable-v0.9.7-blue.svg)](https://github.com/shaarli/Shaarli/releases/tag/v0.9.7) 9[![](https://img.shields.io/badge/stable-v0.9.7-blue.svg)](https://github.com/shaarli/Shaarli/releases/tag/v0.9.7)
10[![](https://img.shields.io/travis/shaarli/Shaarli/stable.svg?label=stable)](https://travis-ci.org/shaarli/Shaarli) 10[![](https://img.shields.io/travis/shaarli/Shaarli/stable.svg?label=stable)](https://travis-ci.org/shaarli/Shaarli)
11&bull; 11&bull;
12[![](https://img.shields.io/badge/latest-v0.10.3-blue.svg)](https://github.com/shaarli/Shaarli/releases/tag/v0.10.3) 12[![](https://img.shields.io/badge/latest-v0.10.4-blue.svg)](https://github.com/shaarli/Shaarli/releases/tag/v0.10.4)
13[![](https://img.shields.io/travis/shaarli/Shaarli/latest.svg?label=latest)](https://travis-ci.org/shaarli/Shaarli) 13[![](https://img.shields.io/travis/shaarli/Shaarli/latest.svg?label=latest)](https://travis-ci.org/shaarli/Shaarli)
14&bull; 14&bull;
15[![](https://img.shields.io/badge/master-v0.11.x-blue.svg)](https://github.com/shaarli/Shaarli) 15[![](https://img.shields.io/badge/master-v0.11.x-blue.svg)](https://github.com/shaarli/Shaarli)
diff --git a/application/Router.php b/application/Router.php
index 05877acd..d7187487 100644
--- a/application/Router.php
+++ b/application/Router.php
@@ -38,6 +38,8 @@ class Router
38 38
39 public static $PAGE_DELETELINK = 'delete_link'; 39 public static $PAGE_DELETELINK = 'delete_link';
40 40
41 public static $PAGE_CHANGE_VISIBILITY = 'change_visibility';
42
41 public static $PAGE_PINLINK = 'pin'; 43 public static $PAGE_PINLINK = 'pin';
42 44
43 public static $PAGE_EXPORT = 'export'; 45 public static $PAGE_EXPORT = 'export';
@@ -149,6 +151,10 @@ class Router
149 return self::$PAGE_DELETELINK; 151 return self::$PAGE_DELETELINK;
150 } 152 }
151 153
154 if (isset($get[self::$PAGE_CHANGE_VISIBILITY])) {
155 return self::$PAGE_CHANGE_VISIBILITY;
156 }
157
152 if (startsWith($query, 'do=' . self::$PAGE_PINLINK)) { 158 if (startsWith($query, 'do=' . self::$PAGE_PINLINK)) {
153 return self::$PAGE_PINLINK; 159 return self::$PAGE_PINLINK;
154 } 160 }
diff --git a/assets/default/js/base.js b/assets/default/js/base.js
index 99e03370..d5c29c69 100644
--- a/assets/default/js/base.js
+++ b/assets/default/js/base.js
@@ -466,6 +466,28 @@ function init(description) {
466 }); 466 });
467 } 467 }
468 468
469 const changeVisibilityButtons = document.querySelectorAll('.actions-change-visibility');
470 if (changeVisibilityButtons != null && token != null) {
471 [...changeVisibilityButtons].forEach((button) => {
472 button.addEventListener('click', (event) => {
473 event.preventDefault();
474 const visibility = event.target.getAttribute('data-visibility');
475
476 const links = [];
477 const linkCheckedCheckboxes = document.querySelectorAll('.link-checkbox:checked');
478 [...linkCheckedCheckboxes].forEach((checkbox) => {
479 links.push({
480 id: checkbox.value,
481 title: document.querySelector(`.linklist-item[data-id="${checkbox.value}"] .linklist-link`).innerHTML,
482 });
483 });
484
485 const ids = links.map(item => item.id);
486 window.location = `?change_visibility&token=${token.value}&newVisibility=${visibility}&ids=${ids.join('+')}`;
487 });
488 });
489 }
490
469 /** 491 /**
470 * Select all button 492 * Select all button
471 */ 493 */
diff --git a/assets/default/scss/shaarli.scss b/assets/default/scss/shaarli.scss
index b14052ed..a529f01c 100644
--- a/assets/default/scss/shaarli.scss
+++ b/assets/default/scss/shaarli.scss
@@ -716,11 +716,19 @@ body,
716 } 716 }
717 } 717 }
718 718
719 .label {
720 font-family: Arial, sans-serif;
721 font-size: .65em;
722 }
723
719 .label-private { 724 .label-private {
720 border: solid 1px $orange; 725 border: solid 1px $orange;
721 color: $orange; 726 color: $orange;
722 font-family: Arial, sans-serif; 727 }
723 font-size: .65em; 728
729 .label-sticky {
730 border: solid 1px $blue;
731 color: $blue;
724 } 732 }
725} 733}
726 734
diff --git a/doc/md/Download-and-Installation.md b/doc/md/Download-and-Installation.md
index 1c4ad947..8c9e8a32 100644
--- a/doc/md/Download-and-Installation.md
+++ b/doc/md/Download-and-Installation.md
@@ -24,11 +24,11 @@ Using one of the following methods:
24 24
25In most cases, you should download the latest Shaarli release from the [releases](https://github.com/shaarli/Shaarli/releases) page. Download our **shaarli-full** archive to include dependencies. 25In most cases, you should download the latest Shaarli release from the [releases](https://github.com/shaarli/Shaarli/releases) page. Download our **shaarli-full** archive to include dependencies.
26 26
27The current latest released version is `v0.10.3` 27The current latest released version is `v0.10.4`
28 28
29```bash 29```bash
30$ wget https://github.com/shaarli/Shaarli/releases/download/v0.10.3/shaarli-v0.10.3-full.zip 30$ wget https://github.com/shaarli/Shaarli/releases/download/v0.10.4/shaarli-v0.10.4-full.zip
31$ unzip shaarli-v0.10.3-full.zip 31$ unzip shaarli-v0.10.4-full.zip
32$ mv Shaarli /path/to/shaarli/ 32$ mv Shaarli /path/to/shaarli/
33``` 33```
34 34
diff --git a/inc/languages/fr/LC_MESSAGES/shaarli.po b/inc/languages/fr/LC_MESSAGES/shaarli.po
index 102c80da..649f6dd5 100644
--- a/inc/languages/fr/LC_MESSAGES/shaarli.po
+++ b/inc/languages/fr/LC_MESSAGES/shaarli.po
@@ -1255,6 +1255,9 @@ msgstr ""
1255#~ msgid "Selection" 1255#~ msgid "Selection"
1256#~ msgstr "Choisir" 1256#~ msgstr "Choisir"
1257 1257
1258#~ msgid "Select all"
1259#~ msgstr "Tout sélectionner"
1260
1258#~ msgid "Public" 1261#~ msgid "Public"
1259#~ msgstr "Publics" 1262#~ msgstr "Publics"
1260 1263
diff --git a/index.php b/index.php
index a96c9cfd..68e0364c 100644
--- a/index.php
+++ b/index.php
@@ -1266,6 +1266,51 @@ function renderPage($conf, $pluginManager, $LINKSDB, $history, $sessionManager,
1266 exit; 1266 exit;
1267 } 1267 }
1268 1268
1269 // -------- User clicked either "Set public" or "Set private" bulk operation
1270 if ($targetPage == Router::$PAGE_CHANGE_VISIBILITY) {
1271 if (! $sessionManager->checkToken($_GET['token'])) {
1272 die(t('Wrong token.'));
1273 }
1274
1275 $ids = trim($_GET['ids']);
1276 if (strpos($ids, ' ') !== false) {
1277 // multiple, space-separated ids provided
1278 $ids = array_values(array_filter(preg_split('/\s+/', escape($ids))));
1279 } else {
1280 // only a single id provided
1281 $ids = [$ids];
1282 }
1283
1284 // assert at least one id is given
1285 if (!count($ids)) {
1286 die('no id provided');
1287 }
1288 // assert that the visibility is valid
1289 if (!isset($_GET['newVisibility']) || !in_array($_GET['newVisibility'], ['public', 'private'])) {
1290 die('invalid visibility');
1291 } else {
1292 $private = $_GET['newVisibility'] === 'private';
1293 }
1294 foreach ($ids as $id) {
1295 $id = (int) escape($id);
1296 $link = $LINKSDB[$id];
1297 $link['private'] = $private;
1298 $pluginManager->executeHooks('save_link', $link);
1299 $LINKSDB[$id] = $link;
1300 }
1301 $LINKSDB->save($conf->get('resource.page_cache')); // save to disk
1302
1303 $location = '?';
1304 if (isset($_SERVER['HTTP_REFERER'])) {
1305 $location = generateLocation(
1306 $_SERVER['HTTP_REFERER'],
1307 $_SERVER['HTTP_HOST']
1308 );
1309 }
1310 header('Location: ' . $location); // After deleting the link, redirect to appropriate location
1311 exit;
1312 }
1313
1269 // -------- User clicked the "EDIT" button on a link: Display link edit form. 1314 // -------- User clicked the "EDIT" button on a link: Display link edit form.
1270 if (isset($_GET['edit_link'])) { 1315 if (isset($_GET['edit_link'])) {
1271 $id = (int) escape($_GET['edit_link']); 1316 $id = (int) escape($_GET['edit_link']);
@@ -1888,7 +1933,7 @@ $app->group('/api/v1', function () {
1888 $this->put('/tags/{tagName:[\w]+}', '\Shaarli\Api\Controllers\Tags:putTag')->setName('putTag'); 1933 $this->put('/tags/{tagName:[\w]+}', '\Shaarli\Api\Controllers\Tags:putTag')->setName('putTag');
1889 $this->delete('/tags/{tagName:[\w]+}', '\Shaarli\Api\Controllers\Tags:deleteTag')->setName('deleteTag'); 1934 $this->delete('/tags/{tagName:[\w]+}', '\Shaarli\Api\Controllers\Tags:deleteTag')->setName('deleteTag');
1890 1935
1891 $this->get('/history', '\Shaarli\Api\Controllers\History:getHistory')->setName('getHistory'); 1936 $this->get('/history', '\Shaarli\Api\Controllers\HistoryController:getHistory')->setName('getHistory');
1892})->add('\Shaarli\Api\ApiMiddleware'); 1937})->add('\Shaarli\Api\ApiMiddleware');
1893 1938
1894$response = $app->run(true); 1939$response = $app->run(true);
diff --git a/tpl/default/linklist.html b/tpl/default/linklist.html
index d7005c21..a2aaac82 100644
--- a/tpl/default/linklist.html
+++ b/tpl/default/linklist.html
@@ -94,7 +94,7 @@
94 {'tagged'|t} 94 {'tagged'|t}
95 {loop="$exploded_tags"} 95 {loop="$exploded_tags"}
96 <span class="label label-tag" title="{'Remove tag'|t}"> 96 <span class="label label-tag" title="{'Remove tag'|t}">
97 <a href="?removetag={function="urlencode($value)"}">{$value}<span class="remove"><i class="fa fa-times"></i></span></a> 97 <a href="?removetag={function="urlencode($value)"}">{$value}<span class="remove"><i class="fa fa-times" aria-hidden="true"></i></span></a>
98 </span> 98 </span>
99 {/loop} 99 {/loop}
100 {/if} 100 {/if}
@@ -146,13 +146,14 @@
146 </div> 146 </div>
147 {/if} 147 {/if}
148 148
149 {if="$is_logged_in"} 149 <div class="linklist-item-editbuttons">
150 <div class="linklist-item-editbuttons"> 150 {if="$value.sticky"}
151 {if="$value.private"} 151 <span class="label label-sticky">{$strSticky}</span>
152 <span class="label label-private">{$strPrivate}</span> 152 {/if}
153 {/if} 153 {if="$value.private"}
154 </div> 154 <span class="label label-private">{$strPrivate}</span>
155 {/if} 155 {/if}
156 </div>
156 157
157 <h2> 158 <h2>
158 <a href="{$value.real_url}"> 159 <a href="{$value.real_url}">
@@ -195,18 +196,18 @@
195 <input type="checkbox" class="link-checkbox" value="{$value.id}"> 196 <input type="checkbox" class="link-checkbox" value="{$value.id}">
196 </span> 197 </span>
197 <span class="linklist-item-infos-controls-item ctrl-edit"> 198 <span class="linklist-item-infos-controls-item ctrl-edit">
198 <a href="?edit_link={$value.id}" title="{$strEdit}"><i class="fa fa-pencil-square-o edit-link"></i></a> 199 <a href="?edit_link={$value.id}" aria-label="{$strEdit}" title="{$strEdit}"><i class="fa fa-pencil-square-o edit-link" aria-hidden="true"></i></a>
199 </span> 200 </span>
200 <span class="linklist-item-infos-controls-item ctrl-delete"> 201 <span class="linklist-item-infos-controls-item ctrl-delete">
201 <a href="?delete_link&amp;lf_linkdate={$value.id}&amp;token={$token}" 202 <a href="?delete_link&amp;lf_linkdate={$value.id}&amp;token={$token}" aria-label="{$strDelete}"
202 title="{$strDelete}" class="delete-link pure-u-0 pure-u-lg-visible confirm-delete"> 203 title="{$strDelete}" class="delete-link pure-u-0 pure-u-lg-visible confirm-delete">
203 <i class="fa fa-trash"></i> 204 <i class="fa fa-trash" aria-hidden="true"></i>
204 </a> 205 </a>
205 </span> 206 </span>
206 <span class="linklist-item-infos-controls-item ctrl-pin"> 207 <span class="linklist-item-infos-controls-item ctrl-pin">
207 <a href="?do=pin&amp;id={$value.id}&amp;token={$token}" 208 <a href="?do=pin&amp;id={$value.id}&amp;token={$token}"
208 title="{$strToggleSticky}" class="pin-link {if="$value.sticky"}pinned-link{/if} pure-u-0 pure-u-lg-visible"> 209 title="{$strToggleSticky}" aria-label="{$strToggleSticky}" class="pin-link {if="$value.sticky"}pinned-link{/if} pure-u-0 pure-u-lg-visible">
209 <i class="fa fa-thumb-tack"></i> 210 <i class="fa fa-thumb-tack" aria-hidden="true"></i>
210 </a> 211 </a>
211 </span> 212 </span>
212 </div> 213 </div>
@@ -248,10 +249,10 @@
248 {ignore}do not add space or line break between these div - Firefox issue{/ignore} 249 {ignore}do not add space or line break between these div - Firefox issue{/ignore}
249 class="linklist-item-infos-url pure-u-lg-5-12 pure-u-1"> 250 class="linklist-item-infos-url pure-u-lg-5-12 pure-u-1">
250 <a href="{$value.real_url}" title="{$value.title}"> 251 <a href="{$value.real_url}" title="{$value.title}">
251 <i class="fa fa-link"></i> {$value.url} 252 <i class="fa fa-link" aria-hidden="true"></i> {$value.url}
252 </a> 253 </a>
253 <div class="linklist-item-buttons pure-u-0 pure-u-lg-visible"> 254 <div class="linklist-item-buttons pure-u-0 pure-u-lg-visible">
254 <a href="#" title="{$strFold}" class="fold-button"><i class="fa fa-chevron-up"></i></a> 255 <a href="#" aria-label="{$strFold}" title="{$strFold}" class="fold-button"><i class="fa fa-chevron-up" aria-hidden="true"></i></a>
255 </div> 256 </div>
256 </div> 257 </div>
257 <div class="mobile-buttons pure-u-1 pure-u-lg-0"> 258 <div class="mobile-buttons pure-u-1 pure-u-lg-0">
@@ -264,12 +265,12 @@
264 {/if} 265 {/if}
265 {if="$is_logged_in"} 266 {if="$is_logged_in"}
266 &middot; 267 &middot;
267 <a href="?delete_link&amp;lf_linkdate={$value.id}&amp;token={$token}" 268 <a href="?delete_link&amp;lf_linkdate={$value.id}&amp;token={$token}" aria-label="{$strDelete}"
268 title="{$strDelete}" class="delete-link confirm-delete"> 269 title="{$strDelete}" class="delete-link confirm-delete">
269 <i class="fa fa-trash"></i> 270 <i class="fa fa-trash" aria-hidden="true"></i>
270 </a> 271 </a>
271 &middot; 272 &middot;
272 <a href="?edit_link={$value.id}" title="{$strEdit}"><i class="fa fa-pencil-square-o edit-link"></i></a> 273 <a href="?edit_link={$value.id}" aria-label="{$strEdit}" title="{$strEdit}"><i class="fa fa-pencil-square-o edit-link" aria-hidden="true"></i></a>
273 {/if} 274 {/if}
274 </div> 275 </div>
275 </div> 276 </div>
diff --git a/tpl/default/linklist.paging.html b/tpl/default/linklist.paging.html
index fe665a84..4e50495a 100644
--- a/tpl/default/linklist.paging.html
+++ b/tpl/default/linklist.paging.html
@@ -6,21 +6,21 @@
6 {'Filters'|t} 6 {'Filters'|t}
7 </span> 7 </span>
8 {if="$is_logged_in"} 8 {if="$is_logged_in"}
9 <a href="?visibility=private" title="{'Only display private links'|t}" 9 <a href="?visibility=private" aria-label="{'Only display private links'|t}" title="{'Only display private links'|t}"
10 class="{if="$visibility==='private'"}filter-on{else}filter-off{/if}" 10 class="{if="$visibility==='private'"}filter-on{else}filter-off{/if}"
11 ><i class="fa fa-user-secret"></i></a> 11 ><i class="fa fa-user-secret" aria-hidden="true"></i></a>
12 <a href="?visibility=public" title="{'Only display public links'|t}" 12 <a href="?visibility=public" aria-label="{'Only display public links'|t}" title="{'Only display public links'|t}"
13 class="{if="$visibility==='public'"}filter-on{else}filter-off{/if}" 13 class="{if="$visibility==='public'"}filter-on{else}filter-off{/if}"
14 ><i class="fa fa-globe"></i></a> 14 ><i class="fa fa-globe" aria-hidden="true"></i></a>
15 {/if} 15 {/if}
16 <a href="?untaggedonly" title="{'Filter untagged links'|t}" 16 <a href="?untaggedonly" aria-label="{'Filter untagged links'|t}" title="{'Filter untagged links'|t}"
17 class={if="$untaggedonly"}"filter-on"{else}"filter-off"{/if} 17 class={if="$untaggedonly"}"filter-on"{else}"filter-off"{/if}
18 ><i class="fa fa-tag"></i></a> 18 ><i class="fa fa-tag" aria-hidden="true"></i></a>
19 <a href="#" title="{'Select all'|t}" 19 <a href="#" aria-label="{'Select all'|t}" title="{'Select all'|t}"
20 class="filter-off select-all-button" 20 class="filter-off select-all-button"
21 ><i class="fa fa-check-square-o"></i></a> 21 ><i class="fa fa-check-square-o" aria-hidden="true"></i></a>
22 <a href="#" class="filter-off fold-all pure-u-lg-0" title="{'Fold all'|t}"> 22 <a href="#" class="filter-off fold-all pure-u-lg-0" aria-label="{'Fold all'|t}" title="{'Fold all'|t}">
23 <i class="fa fa-chevron-up"></i> 23 <i class="fa fa-chevron-up" aria-hidden="true"></i>
24 </a> 24 </a>
25 {loop="$action_plugin"} 25 {loop="$action_plugin"}
26 {$value.attr.class=isset($value.attr.class) ? $value.attr.class : ''} 26 {$value.attr.class=isset($value.attr.class) ? $value.attr.class : ''}
@@ -59,8 +59,8 @@
59 <form method="GET" class="pure-u-0 pure-u-lg-visible"> 59 <form method="GET" class="pure-u-0 pure-u-lg-visible">
60 <input type="text" name="linksperpage" placeholder="133"> 60 <input type="text" name="linksperpage" placeholder="133">
61 </form> 61 </form>
62 <a href="#" class="filter-off fold-all pure-u-0 pure-u-lg-visible" title="{'Fold all'|t}"> 62 <a href="#" class="filter-off fold-all pure-u-0 pure-u-lg-visible" aria-label="{'Fold all'|t}" title="{'Fold all'|t}">
63 <i class="fa fa-chevron-up"></i> 63 <i class="fa fa-chevron-up" aria-hidden="true"></i>
64 </a> 64 </a>
65 </div> 65 </div>
66 </div> 66 </div>
diff --git a/tpl/default/page.footer.html b/tpl/default/page.footer.html
index 5af39be7..f7ae2b84 100644
--- a/tpl/default/page.footer.html
+++ b/tpl/default/page.footer.html
@@ -2,7 +2,7 @@
2 2
3<div class="pure-g"> 3<div class="pure-g">
4 <div class="pure-u-2-24"></div> 4 <div class="pure-u-2-24"></div>
5 <div id="footer" class="pure-u-20-24 footer-container"> 5 <footer id="footer" class="pure-u-20-24 footer-container" role="contentinfo">
6 <strong><a href="https://github.com/shaarli/Shaarli">Shaarli</a></strong> 6 <strong><a href="https://github.com/shaarli/Shaarli">Shaarli</a></strong>
7 {if="$is_logged_in===true"} 7 {if="$is_logged_in===true"}
8 {$version} 8 {$version}
@@ -13,7 +13,7 @@
13 {loop="$plugins_footer.text"} 13 {loop="$plugins_footer.text"}
14 {$value} 14 {$value}
15 {/loop} 15 {/loop}
16 </div> 16 </footer>
17 <div class="pure-u-2-24"></div> 17 <div class="pure-u-2-24"></div>
18</div> 18</div>
19 19
diff --git a/tpl/default/page.header.html b/tpl/default/page.header.html
index 4f6dd4d8..2832ebbb 100644
--- a/tpl/default/page.header.html
+++ b/tpl/default/page.header.html
@@ -20,7 +20,7 @@
20 {if="$is_logged_in || $openshaarli"} 20 {if="$is_logged_in || $openshaarli"}
21 <li class="pure-menu-item"> 21 <li class="pure-menu-item">
22 <a href="?do=addlink" class="pure-menu-link" id="shaarli-menu-shaare"> 22 <a href="?do=addlink" class="pure-menu-link" id="shaarli-menu-shaare">
23 <i class="fa fa-plus" ></i> {'Shaare'|t} 23 <i class="fa fa-plus" aria-hidden="true"></i> {'Shaare'|t}
24 </a> 24 </a>
25 </li> 25 </li>
26 <li class="pure-menu-item" id="shaarli-menu-tools"> 26 <li class="pure-menu-item" id="shaarli-menu-tools">
@@ -67,27 +67,27 @@
67 <li class="pure-menu-item" id="shaarli-menu-desktop-search"> 67 <li class="pure-menu-item" id="shaarli-menu-desktop-search">
68 <a href="#" class="pure-menu-link subheader-opener" 68 <a href="#" class="pure-menu-link subheader-opener"
69 data-open-id="search" 69 data-open-id="search"
70 id="search-button" title="{'Search'|t}"> 70 id="search-button" aria-label="{'Search'|t}" title="{'Search'|t}">
71 <i class="fa fa-search"></i> 71 <i class="fa fa-search" aria-hidden="true"></i>
72 </a> 72 </a>
73 </li> 73 </li>
74 <li class="pure-menu-item" id="shaarli-menu-desktop-rss"> 74 <li class="pure-menu-item" id="shaarli-menu-desktop-rss">
75 <a href="?do={$feed_type}{$searchcrits}" class="pure-menu-link" title="{'RSS Feed'|t}"> 75 <a href="?do={$feed_type}{$searchcrits}" class="pure-menu-link" title="{'RSS Feed'|t}" aria-label="{'RSS Feed'|t}">
76 <i class="fa fa-rss"></i> 76 <i class="fa fa-rss" aria-hidden="true"></i>
77 </a> 77 </a>
78 </li> 78 </li>
79 {if="!$is_logged_in"} 79 {if="!$is_logged_in"}
80 <li class="pure-menu-item" id="shaarli-menu-desktop-login"> 80 <li class="pure-menu-item" id="shaarli-menu-desktop-login">
81 <a href="?do=login" class="pure-menu-link" 81 <a href="?do=login" class="pure-menu-link"
82 data-open-id="header-login-form" 82 data-open-id="header-login-form"
83 id="login-button" title="{'Login'|t}"> 83 id="login-button" aria-label="{'Login'|t}" title="{'Login'|t}">
84 <i class="fa fa-user"></i> 84 <i class="fa fa-user" aria-hidden="true"></i>
85 </a> 85 </a>
86 </li> 86 </li>
87 {else} 87 {else}
88 <li class="pure-menu-item" id="shaarli-menu-desktop-logout"> 88 <li class="pure-menu-item" id="shaarli-menu-desktop-logout">
89 <a href="?do=logout" class="pure-menu-link" title="{'Logout'|t}"> 89 <a href="?do=logout" class="pure-menu-link" aria-label="{'Logout'|t}" title="{'Logout'|t}">
90 <i class="fa fa-sign-out"></i> 90 <i class="fa fa-sign-out" aria-hidden="true"></i>
91 </a> 91 </a>
92 </li> 92 </li>
93 {/if} 93 {/if}
@@ -118,7 +118,18 @@
118 <div id="actions" class="subheader-form"> 118 <div id="actions" class="subheader-form">
119 <div class="pure-g"> 119 <div class="pure-g">
120 <div class="pure-u-1"> 120 <div class="pure-u-1">
121 <a href="" id="actions-delete" class="button">{'Delete'|t}</a> 121 <a href="" id="actions-delete" class="button">
122 <i class="fa fa-trash"></i>
123 {'Delete'|t}
124 </a>&nbsp;
125 <a href="" class="actions-change-visibility button" data-visibility="public">
126 <i class="fa fa-globe"></i>
127 {'Set public'|t}
128 </a>&nbsp;
129 <a href="" class="actions-change-visibility button" data-visibility="private">
130 <i class="fa fa-user-secret"></i>
131 {'Set private'|t}
132 </a>
122 </div> 133 </div>
123 </div> 134 </div>
124 </div> 135 </div>
diff --git a/tpl/default/tag.sort.html b/tpl/default/tag.sort.html
index 89acda0d..d24c9f64 100644
--- a/tpl/default/tag.sort.html
+++ b/tpl/default/tag.sort.html
@@ -1,8 +1,8 @@
1<div class="pure-g"> 1<div class="pure-g">
2 <div class="pure-u-1 pure-alert pure-alert-success tag-sort"> 2 <div class="pure-u-1 pure-alert pure-alert-success tag-sort">
3 {'Sort by:'|t} 3 {'Sort by:'|t}
4 <a href="?do=tagcloud" title="cloud">{'Cloud'|t}</a> &middot; 4 <a href="?do=tagcloud">{'Cloud'|t}</a> &middot;
5 <a href="?do=taglist&sort=usage" title="cloud">{'Most used'|t}</a> &middot; 5 <a href="?do=taglist&sort=usage">{'Most used'|t}</a> &middot;
6 <a href="?do=taglist&sort=alpha" title="cloud">{'Alphabetical'|t}</a> 6 <a href="?do=taglist&sort=alpha">{'Alphabetical'|t}</a>
7 </div> 7 </div>
8</div> \ No newline at end of file 8</div> \ No newline at end of file