diff options
44 files changed, 749 insertions, 419 deletions
@@ -16,8 +16,33 @@ RewriteCond %{REQUEST_FILENAME} !-d | |||
16 | RewriteRule ^ index.php [QSA,L] | 16 | RewriteRule ^ index.php [QSA,L] |
17 | 17 | ||
18 | <Limit GET POST PUT DELETE OPTIONS> | 18 | <Limit GET POST PUT DELETE OPTIONS> |
19 | <IfModule version_module> | ||
20 | <IfVersion >= 2.4> | ||
21 | Require all granted | ||
22 | </IfVersion> | ||
23 | <IfVersion < 2.4> | ||
24 | Allow from all | ||
25 | Deny from none | ||
26 | </IfVersion> | ||
27 | </IfModule> | ||
28 | |||
29 | <IfModule !version_module> | ||
19 | Require all granted | 30 | Require all granted |
31 | </IfModule> | ||
20 | </Limit> | 32 | </Limit> |
33 | |||
21 | <LimitExcept GET POST PUT DELETE OPTIONS> | 34 | <LimitExcept GET POST PUT DELETE OPTIONS> |
35 | <IfModule version_module> | ||
36 | <IfVersion >= 2.4> | ||
37 | Require all denied | ||
38 | </IfVersion> | ||
39 | <IfVersion < 2.4> | ||
40 | Allow from none | ||
41 | Deny from all | ||
42 | </IfVersion> | ||
43 | </IfModule> | ||
44 | |||
45 | <IfModule !version_module> | ||
22 | Require all denied | 46 | Require all denied |
47 | </IfModule> | ||
23 | </LimitExcept> | 48 | </LimitExcept> |
@@ -1,4 +1,4 @@ | |||
1 | 664 ArthurHoaro <arthur@hoa.ro> | 1 | 687 ArthurHoaro <arthur@hoa.ro> |
2 | 355 VirtualTam <virtualtam@flibidi.net> | 2 | 355 VirtualTam <virtualtam@flibidi.net> |
3 | 195 nodiscc <nodiscc@gmail.com> | 3 | 195 nodiscc <nodiscc@gmail.com> |
4 | 56 Sébastien Sauvage <sebsauvage@sebsauvage.net> | 4 | 56 Sébastien Sauvage <sebsauvage@sebsauvage.net> |
@@ -15,6 +15,7 @@ | |||
15 | 4 David Sferruzza <david.sferruzza@gmail.com> | 15 | 4 David Sferruzza <david.sferruzza@gmail.com> |
16 | 4 Immánuel Fodor <immanuelfactor+github@gmail.com> | 16 | 4 Immánuel Fodor <immanuelfactor+github@gmail.com> |
17 | 3 Teromene <teromene@teromene.fr> | 17 | 3 Teromene <teromene@teromene.fr> |
18 | 3 llune <llune@users.noreply.github.com> | ||
18 | 2 Chris Kuethe <chris.kuethe@gmail.com> | 19 | 2 Chris Kuethe <chris.kuethe@gmail.com> |
19 | 2 Felix Bartels <felix@host-consultants.de> | 20 | 2 Felix Bartels <felix@host-consultants.de> |
20 | 2 Knah Tsaeb <Knah-Tsaeb@knah-tsaeb.org> | 21 | 2 Knah Tsaeb <Knah-Tsaeb@knah-tsaeb.org> |
diff --git a/CHANGELOG.md b/CHANGELOG.md index 04cb2fd1..aa1f0d8a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md | |||
@@ -4,6 +4,32 @@ All notable changes to this project will be documented in this file. | |||
4 | The format is based on [Keep a Changelog](http://keepachangelog.com/) | 4 | The format is based on [Keep a Changelog](http://keepachangelog.com/) |
5 | and this project adheres to [Semantic Versioning](http://semver.org/). | 5 | and this project adheres to [Semantic Versioning](http://semver.org/). |
6 | 6 | ||
7 | ## [v0.10.2](https://github.com/shaarli/Shaarli/releases/tag/v0.10.2) - 2018-08-11 | ||
8 | |||
9 | ### Fixed | ||
10 | |||
11 | - Docker build | ||
12 | |||
13 | ## [v0.10.1](https://github.com/shaarli/Shaarli/releases/tag/v0.10.1) - 2018-08-11 | ||
14 | |||
15 | ### Changed | ||
16 | |||
17 | - Accessibility: | ||
18 | - Remove alt text on the logo | ||
19 | - Remove redundant title in tools page | ||
20 | |||
21 | ### Fixed | ||
22 | |||
23 | - Fixed an error on the daily page and daily RSS | ||
24 | - Fixed an issue causing 'You are not authorized to add a link' error while logged out | ||
25 | - Fixed thumbnail path when Shaarli's path uses symbolic links | ||
26 | - Add a `mod_version` check in Shaarli's root `.htaccess` file for Apache 2.2 syntax | ||
27 | - Include assets in the release Makefile target | ||
28 | |||
29 | ### Removed | ||
30 | |||
31 | - Firefox Social API shaare has been removed | ||
32 | |||
7 | ## [v0.10.0](https://github.com/shaarli/Shaarli/releases/tag/v0.10.0) - 2018-07-28 | 33 | ## [v0.10.0](https://github.com/shaarli/Shaarli/releases/tag/v0.10.0) - 2018-07-28 |
8 | **PHP 5.5 compatibility has been dropped.** Shaarli now requires at least PHP 5.6. | 34 | **PHP 5.5 compatibility has been dropped.** Shaarli now requires at least PHP 5.6. |
9 | 35 | ||
@@ -170,6 +170,7 @@ release_tar: composer_dependencies htmldoc translate build_frontend | |||
170 | git archive --prefix=$(ARCHIVE_PREFIX) -o $(ARCHIVE_VERSION).tar HEAD | 170 | git archive --prefix=$(ARCHIVE_PREFIX) -o $(ARCHIVE_VERSION).tar HEAD |
171 | tar rvf $(ARCHIVE_VERSION).tar --transform "s|^vendor|$(ARCHIVE_PREFIX)vendor|" vendor/ | 171 | tar rvf $(ARCHIVE_VERSION).tar --transform "s|^vendor|$(ARCHIVE_PREFIX)vendor|" vendor/ |
172 | tar rvf $(ARCHIVE_VERSION).tar --transform "s|^doc/html|$(ARCHIVE_PREFIX)doc/html|" doc/html/ | 172 | tar rvf $(ARCHIVE_VERSION).tar --transform "s|^doc/html|$(ARCHIVE_PREFIX)doc/html|" doc/html/ |
173 | tar rvf $(ARCHIVE_VERSION).tar --transform "s|^tpl|$(ARCHIVE_PREFIX)tpl|" tpl/ | ||
173 | gzip $(ARCHIVE_VERSION).tar | 174 | gzip $(ARCHIVE_VERSION).tar |
174 | 175 | ||
175 | ### generate a release zip and include 3rd-party dependencies and translations | 176 | ### generate a release zip and include 3rd-party dependencies and translations |
@@ -180,6 +181,8 @@ release_zip: composer_dependencies htmldoc translate build_frontend | |||
180 | zip -r $(ARCHIVE_VERSION).zip $(ARCHIVE_PREFIX)doc/ | 181 | zip -r $(ARCHIVE_VERSION).zip $(ARCHIVE_PREFIX)doc/ |
181 | rsync -a vendor/ $(ARCHIVE_PREFIX)vendor/ | 182 | rsync -a vendor/ $(ARCHIVE_PREFIX)vendor/ |
182 | zip -r $(ARCHIVE_VERSION).zip $(ARCHIVE_PREFIX)vendor/ | 183 | zip -r $(ARCHIVE_VERSION).zip $(ARCHIVE_PREFIX)vendor/ |
184 | rsync -a tpl/ $(ARCHIVE_PREFIX)tpl/ | ||
185 | zip -r $(ARCHIVE_VERSION).zip $(ARCHIVE_PREFIX)tpl/ | ||
183 | rm -rf $(ARCHIVE_PREFIX) | 186 | rm -rf $(ARCHIVE_PREFIX) |
184 | 187 | ||
185 | ## | 188 | ## |
@@ -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 | • | 11 | • |
12 | [![](https://img.shields.io/badge/latest-v0.10.0-blue.svg)](https://github.com/shaarli/Shaarli/releases/tag/v0.10.0) | 12 | [![](https://img.shields.io/badge/latest-v0.10.2-blue.svg)](https://github.com/shaarli/Shaarli/releases/tag/v0.10.2) |
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 | • | 14 | • |
15 | [![](https://img.shields.io/badge/master-v0.10.x-blue.svg)](https://github.com/shaarli/Shaarli) | 15 | [![](https://img.shields.io/badge/master-v0.10.x-blue.svg)](https://github.com/shaarli/Shaarli) |
diff --git a/application/LinkDB.php b/application/LinkDB.php index cd0f2967..cdd68cfb 100644 --- a/application/LinkDB.php +++ b/application/LinkDB.php | |||
@@ -537,6 +537,9 @@ You use the community supported version of the original Shaarli project, by Seba | |||
537 | $order = $order === 'ASC' ? -1 : 1; | 537 | $order = $order === 'ASC' ? -1 : 1; |
538 | // Reorder array by dates. | 538 | // Reorder array by dates. |
539 | usort($this->links, function($a, $b) use ($order) { | 539 | usort($this->links, function($a, $b) use ($order) { |
540 | if (isset($a['sticky']) && isset($b['sticky']) && $a['sticky'] !== $b['sticky']) { | ||
541 | return $a['sticky'] ? -1 : 1; | ||
542 | } | ||
540 | return $a['created'] < $b['created'] ? 1 * $order : -1 * $order; | 543 | return $a['created'] < $b['created'] ? 1 * $order : -1 * $order; |
541 | }); | 544 | }); |
542 | 545 | ||
diff --git a/application/Router.php b/application/Router.php index bf86b884..beb3165b 100644 --- a/application/Router.php +++ b/application/Router.php | |||
@@ -37,6 +37,8 @@ class Router | |||
37 | 37 | ||
38 | public static $PAGE_DELETELINK = 'delete_link'; | 38 | public static $PAGE_DELETELINK = 'delete_link'; |
39 | 39 | ||
40 | public static $PAGE_PINLINK = 'pin'; | ||
41 | |||
40 | public static $PAGE_EXPORT = 'export'; | 42 | public static $PAGE_EXPORT = 'export'; |
41 | 43 | ||
42 | public static $PAGE_IMPORT = 'import'; | 44 | public static $PAGE_IMPORT = 'import'; |
@@ -146,6 +148,10 @@ class Router | |||
146 | return self::$PAGE_DELETELINK; | 148 | return self::$PAGE_DELETELINK; |
147 | } | 149 | } |
148 | 150 | ||
151 | if (startsWith($query, 'do='. self::$PAGE_PINLINK)) { | ||
152 | return self::$PAGE_PINLINK; | ||
153 | } | ||
154 | |||
149 | if (startsWith($query, 'do='. self::$PAGE_EXPORT)) { | 155 | if (startsWith($query, 'do='. self::$PAGE_EXPORT)) { |
150 | return self::$PAGE_EXPORT; | 156 | return self::$PAGE_EXPORT; |
151 | } | 157 | } |
diff --git a/application/Updater.php b/application/Updater.php index c2aa1568..5dde47cb 100644 --- a/application/Updater.php +++ b/application/Updater.php | |||
@@ -502,7 +502,7 @@ class Updater | |||
502 | return true; | 502 | return true; |
503 | } | 503 | } |
504 | 504 | ||
505 | $thumbnailsEnabled = $this->conf->get('thumbnail.enable_thumbnails', true); | 505 | $thumbnailsEnabled = extension_loaded('gd') && $this->conf->get('thumbnail.enable_thumbnails', true); |
506 | $this->conf->set('thumbnails.mode', $thumbnailsEnabled ? Thumbnailer::MODE_ALL : Thumbnailer::MODE_NONE); | 506 | $this->conf->set('thumbnails.mode', $thumbnailsEnabled ? Thumbnailer::MODE_ALL : Thumbnailer::MODE_NONE); |
507 | $this->conf->set('thumbnails.width', 125); | 507 | $this->conf->set('thumbnails.width', 125); |
508 | $this->conf->set('thumbnails.height', 90); | 508 | $this->conf->set('thumbnails.height', 90); |
@@ -517,6 +517,26 @@ class Updater | |||
517 | 517 | ||
518 | return true; | 518 | return true; |
519 | } | 519 | } |
520 | |||
521 | /** | ||
522 | * Set sticky = false on all links | ||
523 | * | ||
524 | * @return bool true if the update is successful, false otherwise. | ||
525 | */ | ||
526 | public function updateMethodSetSticky() | ||
527 | { | ||
528 | foreach ($this->linkDB as $key => $link) { | ||
529 | if (isset($link['sticky'])) { | ||
530 | return true; | ||
531 | } | ||
532 | $link['sticky'] = false; | ||
533 | $this->linkDB[$key] = $link; | ||
534 | } | ||
535 | |||
536 | $this->linkDB->save($this->conf->get('resource.page_cache')); | ||
537 | |||
538 | return true; | ||
539 | } | ||
520 | } | 540 | } |
521 | 541 | ||
522 | /** | 542 | /** |
diff --git a/assets/default/js/base.js b/assets/default/js/base.js index 8bf79d3e..99e03370 100644 --- a/assets/default/js/base.js +++ b/assets/default/js/base.js | |||
@@ -422,12 +422,12 @@ function init(description) { | |||
422 | /** | 422 | /** |
423 | * Bulk actions | 423 | * Bulk actions |
424 | */ | 424 | */ |
425 | const linkCheckboxes = document.querySelectorAll('.delete-checkbox'); | 425 | const linkCheckboxes = document.querySelectorAll('.link-checkbox'); |
426 | const bar = document.getElementById('actions'); | 426 | const bar = document.getElementById('actions'); |
427 | [...linkCheckboxes].forEach((checkbox) => { | 427 | [...linkCheckboxes].forEach((checkbox) => { |
428 | checkbox.style.display = 'inline-block'; | 428 | checkbox.style.display = 'inline-block'; |
429 | checkbox.addEventListener('click', () => { | 429 | checkbox.addEventListener('change', () => { |
430 | const linkCheckedCheckboxes = document.querySelectorAll('.delete-checkbox:checked'); | 430 | const linkCheckedCheckboxes = document.querySelectorAll('.link-checkbox:checked'); |
431 | const count = [...linkCheckedCheckboxes].length; | 431 | const count = [...linkCheckedCheckboxes].length; |
432 | if (count === 0 && bar.classList.contains('open')) { | 432 | if (count === 0 && bar.classList.contains('open')) { |
433 | bar.classList.toggle('open'); | 433 | bar.classList.toggle('open'); |
@@ -444,7 +444,7 @@ function init(description) { | |||
444 | event.preventDefault(); | 444 | event.preventDefault(); |
445 | 445 | ||
446 | const links = []; | 446 | const links = []; |
447 | const linkCheckedCheckboxes = document.querySelectorAll('.delete-checkbox:checked'); | 447 | const linkCheckedCheckboxes = document.querySelectorAll('.link-checkbox:checked'); |
448 | [...linkCheckedCheckboxes].forEach((checkbox) => { | 448 | [...linkCheckedCheckboxes].forEach((checkbox) => { |
449 | links.push({ | 449 | links.push({ |
450 | id: checkbox.value, | 450 | id: checkbox.value, |
@@ -467,6 +467,25 @@ function init(description) { | |||
467 | } | 467 | } |
468 | 468 | ||
469 | /** | 469 | /** |
470 | * Select all button | ||
471 | */ | ||
472 | const selectAllButtons = document.querySelectorAll('.select-all-button'); | ||
473 | [...selectAllButtons].forEach((selectAllButton) => { | ||
474 | selectAllButton.addEventListener('click', (e) => { | ||
475 | e.preventDefault(); | ||
476 | const checked = selectAllButton.classList.contains('filter-off'); | ||
477 | [...selectAllButtons].forEach((selectAllButton2) => { | ||
478 | selectAllButton2.classList.toggle('filter-off'); | ||
479 | selectAllButton2.classList.toggle('filter-on'); | ||
480 | }); | ||
481 | [...linkCheckboxes].forEach((linkCheckbox) => { | ||
482 | linkCheckbox.checked = checked; | ||
483 | linkCheckbox.dispatchEvent(new Event('change')); | ||
484 | }); | ||
485 | }); | ||
486 | }); | ||
487 | |||
488 | /** | ||
470 | * Tag list operations | 489 | * Tag list operations |
471 | * | 490 | * |
472 | * TODO: support error code in the backend for AJAX requests | 491 | * TODO: support error code in the backend for AJAX requests |
@@ -548,7 +567,7 @@ function init(description) { | |||
548 | event.preventDefault(); | 567 | event.preventDefault(); |
549 | const block = findParent(event.target, 'div', { class: 'tag-list-item' }); | 568 | const block = findParent(event.target, 'div', { class: 'tag-list-item' }); |
550 | const tag = block.getAttribute('data-tag'); | 569 | const tag = block.getAttribute('data-tag'); |
551 | const refreshedToken = document.getElementById('token'); | 570 | const refreshedToken = document.getElementById('token').value; |
552 | 571 | ||
553 | if (confirm(`Are you sure you want to delete the tag "${tag}"?`)) { | 572 | if (confirm(`Are you sure you want to delete the tag "${tag}"?`)) { |
554 | const xhr = new XMLHttpRequest(); | 573 | const xhr = new XMLHttpRequest(); |
diff --git a/assets/default/scss/shaarli.scss b/assets/default/scss/shaarli.scss index 6b286f1e..760d8d6a 100644 --- a/assets/default/scss/shaarli.scss +++ b/assets/default/scss/shaarli.scss | |||
@@ -381,8 +381,6 @@ body, | |||
381 | box-shadow: 0 1px 0 $light-shadow, 0 1px 4px $dark-shadow inset; | 381 | box-shadow: 0 1px 0 $light-shadow, 0 1px 4px $dark-shadow inset; |
382 | background: $almost-white; | 382 | background: $almost-white; |
383 | padding: 5px 5px 3px 15px; | 383 | padding: 5px 5px 3px 15px; |
384 | width: 20%; | ||
385 | height: 20px; | ||
386 | color: $dark-grey; | 384 | color: $dark-grey; |
387 | } | 385 | } |
388 | 386 | ||
@@ -742,7 +740,7 @@ body, | |||
742 | font-size: 1em; | 740 | font-size: 1em; |
743 | } | 741 | } |
744 | 742 | ||
745 | .delete-checkbox { | 743 | .link-checkbox { |
746 | display: none; | 744 | display: none; |
747 | } | 745 | } |
748 | } | 746 | } |
@@ -757,6 +755,14 @@ body, | |||
757 | font-size: 1.3em; | 755 | font-size: 1.3em; |
758 | } | 756 | } |
759 | 757 | ||
758 | .pin-link { | ||
759 | font-size: 1.3em; | ||
760 | } | ||
761 | |||
762 | .pinned-link { | ||
763 | color: $blue !important; | ||
764 | } | ||
765 | |||
760 | .linklist-item-description { | 766 | .linklist-item-description { |
761 | position: relative; | 767 | position: relative; |
762 | padding: 0 10px; | 768 | padding: 0 10px; |
@@ -850,6 +856,10 @@ body, | |||
850 | margin: 0 7px; | 856 | margin: 0 7px; |
851 | } | 857 | } |
852 | 858 | ||
859 | .ctrl-delete { | ||
860 | margin: 0 7px 0 0; | ||
861 | } | ||
862 | |||
853 | // 64em -> lg | 863 | // 64em -> lg |
854 | @media screen and (max-width: 64em) { | 864 | @media screen and (max-width: 64em) { |
855 | .linklist-item-infos-url { | 865 | .linklist-item-infos-url { |
diff --git a/composer.lock b/composer.lock index 0f56338d..22c97fa9 100644 --- a/composer.lock +++ b/composer.lock | |||
@@ -8,16 +8,16 @@ | |||
8 | "packages": [ | 8 | "packages": [ |
9 | { | 9 | { |
10 | "name": "arthurhoaro/web-thumbnailer", | 10 | "name": "arthurhoaro/web-thumbnailer", |
11 | "version": "v1.2.1", | 11 | "version": "v1.3.1", |
12 | "source": { | 12 | "source": { |
13 | "type": "git", | 13 | "type": "git", |
14 | "url": "https://github.com/ArthurHoaro/web-thumbnailer.git", | 14 | "url": "https://github.com/ArthurHoaro/web-thumbnailer.git", |
15 | "reference": "a5a52f69e8e8f3c71fab9649e2a927e2d3f418f1" | 15 | "reference": "7142bd94ec93719a756a7012ebb8e1c5813c6860" |
16 | }, | 16 | }, |
17 | "dist": { | 17 | "dist": { |
18 | "type": "zip", | 18 | "type": "zip", |
19 | "url": "https://api.github.com/repos/ArthurHoaro/web-thumbnailer/zipball/a5a52f69e8e8f3c71fab9649e2a927e2d3f418f1", | 19 | "url": "https://api.github.com/repos/ArthurHoaro/web-thumbnailer/zipball/7142bd94ec93719a756a7012ebb8e1c5813c6860", |
20 | "reference": "a5a52f69e8e8f3c71fab9649e2a927e2d3f418f1", | 20 | "reference": "7142bd94ec93719a756a7012ebb8e1c5813c6860", |
21 | "shasum": "" | 21 | "shasum": "" |
22 | }, | 22 | }, |
23 | "require": { | 23 | "require": { |
@@ -52,7 +52,7 @@ | |||
52 | } | 52 | } |
53 | ], | 53 | ], |
54 | "description": "PHP library which will retrieve a thumbnail for any given URL", | 54 | "description": "PHP library which will retrieve a thumbnail for any given URL", |
55 | "time": "2018-07-17T10:21:14+00:00" | 55 | "time": "2018-08-11T12:21:52+00:00" |
56 | }, | 56 | }, |
57 | { | 57 | { |
58 | "name": "container-interop/container-interop", | 58 | "name": "container-interop/container-interop", |
@@ -1111,16 +1111,16 @@ | |||
1111 | }, | 1111 | }, |
1112 | { | 1112 | { |
1113 | "name": "phpspec/prophecy", | 1113 | "name": "phpspec/prophecy", |
1114 | "version": "1.7.6", | 1114 | "version": "1.8.0", |
1115 | "source": { | 1115 | "source": { |
1116 | "type": "git", | 1116 | "type": "git", |
1117 | "url": "https://github.com/phpspec/prophecy.git", | 1117 | "url": "https://github.com/phpspec/prophecy.git", |
1118 | "reference": "33a7e3c4fda54e912ff6338c48823bd5c0f0b712" | 1118 | "reference": "4ba436b55987b4bf311cb7c6ba82aa528aac0a06" |
1119 | }, | 1119 | }, |
1120 | "dist": { | 1120 | "dist": { |
1121 | "type": "zip", | 1121 | "type": "zip", |
1122 | "url": "https://api.github.com/repos/phpspec/prophecy/zipball/33a7e3c4fda54e912ff6338c48823bd5c0f0b712", | 1122 | "url": "https://api.github.com/repos/phpspec/prophecy/zipball/4ba436b55987b4bf311cb7c6ba82aa528aac0a06", |
1123 | "reference": "33a7e3c4fda54e912ff6338c48823bd5c0f0b712", | 1123 | "reference": "4ba436b55987b4bf311cb7c6ba82aa528aac0a06", |
1124 | "shasum": "" | 1124 | "shasum": "" |
1125 | }, | 1125 | }, |
1126 | "require": { | 1126 | "require": { |
@@ -1132,12 +1132,12 @@ | |||
1132 | }, | 1132 | }, |
1133 | "require-dev": { | 1133 | "require-dev": { |
1134 | "phpspec/phpspec": "^2.5|^3.2", | 1134 | "phpspec/phpspec": "^2.5|^3.2", |
1135 | "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5" | 1135 | "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5 || ^7.1" |
1136 | }, | 1136 | }, |
1137 | "type": "library", | 1137 | "type": "library", |
1138 | "extra": { | 1138 | "extra": { |
1139 | "branch-alias": { | 1139 | "branch-alias": { |
1140 | "dev-master": "1.7.x-dev" | 1140 | "dev-master": "1.8.x-dev" |
1141 | } | 1141 | } |
1142 | }, | 1142 | }, |
1143 | "autoload": { | 1143 | "autoload": { |
@@ -1170,7 +1170,7 @@ | |||
1170 | "spy", | 1170 | "spy", |
1171 | "stub" | 1171 | "stub" |
1172 | ], | 1172 | ], |
1173 | "time": "2018-04-18T13:57:24+00:00" | 1173 | "time": "2018-08-05T17:53:17+00:00" |
1174 | }, | 1174 | }, |
1175 | { | 1175 | { |
1176 | "name": "phpunit/php-code-coverage", | 1176 | "name": "phpunit/php-code-coverage", |
@@ -2255,16 +2255,16 @@ | |||
2255 | }, | 2255 | }, |
2256 | { | 2256 | { |
2257 | "name": "symfony/config", | 2257 | "name": "symfony/config", |
2258 | "version": "v3.4.13", | 2258 | "version": "v3.4.14", |
2259 | "source": { | 2259 | "source": { |
2260 | "type": "git", | 2260 | "type": "git", |
2261 | "url": "https://github.com/symfony/config.git", | 2261 | "url": "https://github.com/symfony/config.git", |
2262 | "reference": "1fffdeb349ff36a25184e5564c25289b1dbfc402" | 2262 | "reference": "7b08223b7f6abd859651c56bcabf900d1627d085" |
2263 | }, | 2263 | }, |
2264 | "dist": { | 2264 | "dist": { |
2265 | "type": "zip", | 2265 | "type": "zip", |
2266 | "url": "https://api.github.com/repos/symfony/config/zipball/1fffdeb349ff36a25184e5564c25289b1dbfc402", | 2266 | "url": "https://api.github.com/repos/symfony/config/zipball/7b08223b7f6abd859651c56bcabf900d1627d085", |
2267 | "reference": "1fffdeb349ff36a25184e5564c25289b1dbfc402", | 2267 | "reference": "7b08223b7f6abd859651c56bcabf900d1627d085", |
2268 | "shasum": "" | 2268 | "shasum": "" |
2269 | }, | 2269 | }, |
2270 | "require": { | 2270 | "require": { |
@@ -2315,20 +2315,20 @@ | |||
2315 | ], | 2315 | ], |
2316 | "description": "Symfony Config Component", | 2316 | "description": "Symfony Config Component", |
2317 | "homepage": "https://symfony.com", | 2317 | "homepage": "https://symfony.com", |
2318 | "time": "2018-06-19T14:02:58+00:00" | 2318 | "time": "2018-07-26T11:19:56+00:00" |
2319 | }, | 2319 | }, |
2320 | { | 2320 | { |
2321 | "name": "symfony/console", | 2321 | "name": "symfony/console", |
2322 | "version": "v3.4.13", | 2322 | "version": "v3.4.14", |
2323 | "source": { | 2323 | "source": { |
2324 | "type": "git", | 2324 | "type": "git", |
2325 | "url": "https://github.com/symfony/console.git", | 2325 | "url": "https://github.com/symfony/console.git", |
2326 | "reference": "e54f84c50e3b12972e7750edfc5ca84b2284c44e" | 2326 | "reference": "6b217594552b9323bcdcfc14f8a0ce126e84cd73" |
2327 | }, | 2327 | }, |
2328 | "dist": { | 2328 | "dist": { |
2329 | "type": "zip", | 2329 | "type": "zip", |
2330 | "url": "https://api.github.com/repos/symfony/console/zipball/e54f84c50e3b12972e7750edfc5ca84b2284c44e", | 2330 | "url": "https://api.github.com/repos/symfony/console/zipball/6b217594552b9323bcdcfc14f8a0ce126e84cd73", |
2331 | "reference": "e54f84c50e3b12972e7750edfc5ca84b2284c44e", | 2331 | "reference": "6b217594552b9323bcdcfc14f8a0ce126e84cd73", |
2332 | "shasum": "" | 2332 | "shasum": "" |
2333 | }, | 2333 | }, |
2334 | "require": { | 2334 | "require": { |
@@ -2384,20 +2384,20 @@ | |||
2384 | ], | 2384 | ], |
2385 | "description": "Symfony Console Component", | 2385 | "description": "Symfony Console Component", |
2386 | "homepage": "https://symfony.com", | 2386 | "homepage": "https://symfony.com", |
2387 | "time": "2018-07-10T14:02:11+00:00" | 2387 | "time": "2018-07-26T11:19:56+00:00" |
2388 | }, | 2388 | }, |
2389 | { | 2389 | { |
2390 | "name": "symfony/debug", | 2390 | "name": "symfony/debug", |
2391 | "version": "v3.4.13", | 2391 | "version": "v3.4.14", |
2392 | "source": { | 2392 | "source": { |
2393 | "type": "git", | 2393 | "type": "git", |
2394 | "url": "https://github.com/symfony/debug.git", | 2394 | "url": "https://github.com/symfony/debug.git", |
2395 | "reference": "0e3ca9cbde90fffec8038f4d4e16fd4046bbd018" | 2395 | "reference": "d5a058ff6ecad26b30c1ba452241306ea34c65cc" |
2396 | }, | 2396 | }, |
2397 | "dist": { | 2397 | "dist": { |
2398 | "type": "zip", | 2398 | "type": "zip", |
2399 | "url": "https://api.github.com/repos/symfony/debug/zipball/0e3ca9cbde90fffec8038f4d4e16fd4046bbd018", | 2399 | "url": "https://api.github.com/repos/symfony/debug/zipball/d5a058ff6ecad26b30c1ba452241306ea34c65cc", |
2400 | "reference": "0e3ca9cbde90fffec8038f4d4e16fd4046bbd018", | 2400 | "reference": "d5a058ff6ecad26b30c1ba452241306ea34c65cc", |
2401 | "shasum": "" | 2401 | "shasum": "" |
2402 | }, | 2402 | }, |
2403 | "require": { | 2403 | "require": { |
@@ -2440,20 +2440,20 @@ | |||
2440 | ], | 2440 | ], |
2441 | "description": "Symfony Debug Component", | 2441 | "description": "Symfony Debug Component", |
2442 | "homepage": "https://symfony.com", | 2442 | "homepage": "https://symfony.com", |
2443 | "time": "2018-06-26T08:45:54+00:00" | 2443 | "time": "2018-07-26T11:19:56+00:00" |
2444 | }, | 2444 | }, |
2445 | { | 2445 | { |
2446 | "name": "symfony/dependency-injection", | 2446 | "name": "symfony/dependency-injection", |
2447 | "version": "v3.4.13", | 2447 | "version": "v3.4.14", |
2448 | "source": { | 2448 | "source": { |
2449 | "type": "git", | 2449 | "type": "git", |
2450 | "url": "https://github.com/symfony/dependency-injection.git", | 2450 | "url": "https://github.com/symfony/dependency-injection.git", |
2451 | "reference": "3f115cc3aae4d320b26db05e9531f4e32da29b89" | 2451 | "reference": "1c0e679e522591fd744fdf242fec41a43d62b2b1" |
2452 | }, | 2452 | }, |
2453 | "dist": { | 2453 | "dist": { |
2454 | "type": "zip", | 2454 | "type": "zip", |
2455 | "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/3f115cc3aae4d320b26db05e9531f4e32da29b89", | 2455 | "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/1c0e679e522591fd744fdf242fec41a43d62b2b1", |
2456 | "reference": "3f115cc3aae4d320b26db05e9531f4e32da29b89", | 2456 | "reference": "1c0e679e522591fd744fdf242fec41a43d62b2b1", |
2457 | "shasum": "" | 2457 | "shasum": "" |
2458 | }, | 2458 | }, |
2459 | "require": { | 2459 | "require": { |
@@ -2511,20 +2511,20 @@ | |||
2511 | ], | 2511 | ], |
2512 | "description": "Symfony DependencyInjection Component", | 2512 | "description": "Symfony DependencyInjection Component", |
2513 | "homepage": "https://symfony.com", | 2513 | "homepage": "https://symfony.com", |
2514 | "time": "2018-07-16T13:57:19+00:00" | 2514 | "time": "2018-07-29T15:19:31+00:00" |
2515 | }, | 2515 | }, |
2516 | { | 2516 | { |
2517 | "name": "symfony/filesystem", | 2517 | "name": "symfony/filesystem", |
2518 | "version": "v3.4.13", | 2518 | "version": "v3.4.14", |
2519 | "source": { | 2519 | "source": { |
2520 | "type": "git", | 2520 | "type": "git", |
2521 | "url": "https://github.com/symfony/filesystem.git", | 2521 | "url": "https://github.com/symfony/filesystem.git", |
2522 | "reference": "8dab220fec8fc904821485326b29a6c670286124" | 2522 | "reference": "a59f917e3c5d82332514cb4538387638f5bde2d6" |
2523 | }, | 2523 | }, |
2524 | "dist": { | 2524 | "dist": { |
2525 | "type": "zip", | 2525 | "type": "zip", |
2526 | "url": "https://api.github.com/repos/symfony/filesystem/zipball/8dab220fec8fc904821485326b29a6c670286124", | 2526 | "url": "https://api.github.com/repos/symfony/filesystem/zipball/a59f917e3c5d82332514cb4538387638f5bde2d6", |
2527 | "reference": "8dab220fec8fc904821485326b29a6c670286124", | 2527 | "reference": "a59f917e3c5d82332514cb4538387638f5bde2d6", |
2528 | "shasum": "" | 2528 | "shasum": "" |
2529 | }, | 2529 | }, |
2530 | "require": { | 2530 | "require": { |
@@ -2561,20 +2561,20 @@ | |||
2561 | ], | 2561 | ], |
2562 | "description": "Symfony Filesystem Component", | 2562 | "description": "Symfony Filesystem Component", |
2563 | "homepage": "https://symfony.com", | 2563 | "homepage": "https://symfony.com", |
2564 | "time": "2018-07-09T13:25:43+00:00" | 2564 | "time": "2018-07-26T11:19:56+00:00" |
2565 | }, | 2565 | }, |
2566 | { | 2566 | { |
2567 | "name": "symfony/finder", | 2567 | "name": "symfony/finder", |
2568 | "version": "v3.4.13", | 2568 | "version": "v3.4.14", |
2569 | "source": { | 2569 | "source": { |
2570 | "type": "git", | 2570 | "type": "git", |
2571 | "url": "https://github.com/symfony/finder.git", | 2571 | "url": "https://github.com/symfony/finder.git", |
2572 | "reference": "3a8c3de91d2b2c68cd2d665cf9d00f7ef9eaa394" | 2572 | "reference": "8a84fcb207451df0013b2c74cbbf1b62d47b999a" |
2573 | }, | 2573 | }, |
2574 | "dist": { | 2574 | "dist": { |
2575 | "type": "zip", | 2575 | "type": "zip", |
2576 | "url": "https://api.github.com/repos/symfony/finder/zipball/3a8c3de91d2b2c68cd2d665cf9d00f7ef9eaa394", | 2576 | "url": "https://api.github.com/repos/symfony/finder/zipball/8a84fcb207451df0013b2c74cbbf1b62d47b999a", |
2577 | "reference": "3a8c3de91d2b2c68cd2d665cf9d00f7ef9eaa394", | 2577 | "reference": "8a84fcb207451df0013b2c74cbbf1b62d47b999a", |
2578 | "shasum": "" | 2578 | "shasum": "" |
2579 | }, | 2579 | }, |
2580 | "require": { | 2580 | "require": { |
@@ -2610,29 +2610,32 @@ | |||
2610 | ], | 2610 | ], |
2611 | "description": "Symfony Finder Component", | 2611 | "description": "Symfony Finder Component", |
2612 | "homepage": "https://symfony.com", | 2612 | "homepage": "https://symfony.com", |
2613 | "time": "2018-06-19T20:52:10+00:00" | 2613 | "time": "2018-07-26T11:19:56+00:00" |
2614 | }, | 2614 | }, |
2615 | { | 2615 | { |
2616 | "name": "symfony/polyfill-ctype", | 2616 | "name": "symfony/polyfill-ctype", |
2617 | "version": "v1.8.0", | 2617 | "version": "v1.9.0", |
2618 | "source": { | 2618 | "source": { |
2619 | "type": "git", | 2619 | "type": "git", |
2620 | "url": "https://github.com/symfony/polyfill-ctype.git", | 2620 | "url": "https://github.com/symfony/polyfill-ctype.git", |
2621 | "reference": "7cc359f1b7b80fc25ed7796be7d96adc9b354bae" | 2621 | "reference": "e3d826245268269cd66f8326bd8bc066687b4a19" |
2622 | }, | 2622 | }, |
2623 | "dist": { | 2623 | "dist": { |
2624 | "type": "zip", | 2624 | "type": "zip", |
2625 | "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/7cc359f1b7b80fc25ed7796be7d96adc9b354bae", | 2625 | "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/e3d826245268269cd66f8326bd8bc066687b4a19", |
2626 | "reference": "7cc359f1b7b80fc25ed7796be7d96adc9b354bae", | 2626 | "reference": "e3d826245268269cd66f8326bd8bc066687b4a19", |
2627 | "shasum": "" | 2627 | "shasum": "" |
2628 | }, | 2628 | }, |
2629 | "require": { | 2629 | "require": { |
2630 | "php": ">=5.3.3" | 2630 | "php": ">=5.3.3" |
2631 | }, | 2631 | }, |
2632 | "suggest": { | ||
2633 | "ext-ctype": "For best performance" | ||
2634 | }, | ||
2632 | "type": "library", | 2635 | "type": "library", |
2633 | "extra": { | 2636 | "extra": { |
2634 | "branch-alias": { | 2637 | "branch-alias": { |
2635 | "dev-master": "1.8-dev" | 2638 | "dev-master": "1.9-dev" |
2636 | } | 2639 | } |
2637 | }, | 2640 | }, |
2638 | "autoload": { | 2641 | "autoload": { |
@@ -2665,20 +2668,20 @@ | |||
2665 | "polyfill", | 2668 | "polyfill", |
2666 | "portable" | 2669 | "portable" |
2667 | ], | 2670 | ], |
2668 | "time": "2018-04-30T19:57:29+00:00" | 2671 | "time": "2018-08-06T14:22:27+00:00" |
2669 | }, | 2672 | }, |
2670 | { | 2673 | { |
2671 | "name": "symfony/polyfill-mbstring", | 2674 | "name": "symfony/polyfill-mbstring", |
2672 | "version": "v1.8.0", | 2675 | "version": "v1.9.0", |
2673 | "source": { | 2676 | "source": { |
2674 | "type": "git", | 2677 | "type": "git", |
2675 | "url": "https://github.com/symfony/polyfill-mbstring.git", | 2678 | "url": "https://github.com/symfony/polyfill-mbstring.git", |
2676 | "reference": "3296adf6a6454a050679cde90f95350ad604b171" | 2679 | "reference": "d0cd638f4634c16d8df4508e847f14e9e43168b8" |
2677 | }, | 2680 | }, |
2678 | "dist": { | 2681 | "dist": { |
2679 | "type": "zip", | 2682 | "type": "zip", |
2680 | "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/3296adf6a6454a050679cde90f95350ad604b171", | 2683 | "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/d0cd638f4634c16d8df4508e847f14e9e43168b8", |
2681 | "reference": "3296adf6a6454a050679cde90f95350ad604b171", | 2684 | "reference": "d0cd638f4634c16d8df4508e847f14e9e43168b8", |
2682 | "shasum": "" | 2685 | "shasum": "" |
2683 | }, | 2686 | }, |
2684 | "require": { | 2687 | "require": { |
@@ -2690,7 +2693,7 @@ | |||
2690 | "type": "library", | 2693 | "type": "library", |
2691 | "extra": { | 2694 | "extra": { |
2692 | "branch-alias": { | 2695 | "branch-alias": { |
2693 | "dev-master": "1.8-dev" | 2696 | "dev-master": "1.9-dev" |
2694 | } | 2697 | } |
2695 | }, | 2698 | }, |
2696 | "autoload": { | 2699 | "autoload": { |
@@ -2724,20 +2727,20 @@ | |||
2724 | "portable", | 2727 | "portable", |
2725 | "shim" | 2728 | "shim" |
2726 | ], | 2729 | ], |
2727 | "time": "2018-04-26T10:06:28+00:00" | 2730 | "time": "2018-08-06T14:22:27+00:00" |
2728 | }, | 2731 | }, |
2729 | { | 2732 | { |
2730 | "name": "symfony/yaml", | 2733 | "name": "symfony/yaml", |
2731 | "version": "v3.4.13", | 2734 | "version": "v3.4.14", |
2732 | "source": { | 2735 | "source": { |
2733 | "type": "git", | 2736 | "type": "git", |
2734 | "url": "https://github.com/symfony/yaml.git", | 2737 | "url": "https://github.com/symfony/yaml.git", |
2735 | "reference": "c5010cc1692ce1fa328b1fb666961eb3d4a85bb0" | 2738 | "reference": "810af2d35fc72b6cf5c01116806d2b65ccaaf2e2" |
2736 | }, | 2739 | }, |
2737 | "dist": { | 2740 | "dist": { |
2738 | "type": "zip", | 2741 | "type": "zip", |
2739 | "url": "https://api.github.com/repos/symfony/yaml/zipball/c5010cc1692ce1fa328b1fb666961eb3d4a85bb0", | 2742 | "url": "https://api.github.com/repos/symfony/yaml/zipball/810af2d35fc72b6cf5c01116806d2b65ccaaf2e2", |
2740 | "reference": "c5010cc1692ce1fa328b1fb666961eb3d4a85bb0", | 2743 | "reference": "810af2d35fc72b6cf5c01116806d2b65ccaaf2e2", |
2741 | "shasum": "" | 2744 | "shasum": "" |
2742 | }, | 2745 | }, |
2743 | "require": { | 2746 | "require": { |
@@ -2783,7 +2786,7 @@ | |||
2783 | ], | 2786 | ], |
2784 | "description": "Symfony Yaml Component", | 2787 | "description": "Symfony Yaml Component", |
2785 | "homepage": "https://symfony.com", | 2788 | "homepage": "https://symfony.com", |
2786 | "time": "2018-05-03T23:18:14+00:00" | 2789 | "time": "2018-07-26T11:19:56+00:00" |
2787 | }, | 2790 | }, |
2788 | { | 2791 | { |
2789 | "name": "theseer/fdomdocument", | 2792 | "name": "theseer/fdomdocument", |
diff --git a/doc/custom_theme/main.html b/doc/custom_theme/main.html new file mode 100644 index 00000000..69b398f6 --- /dev/null +++ b/doc/custom_theme/main.html | |||
@@ -0,0 +1,25 @@ | |||
1 | {% extends "base.html" %} | ||
2 | |||
3 | {# | ||
4 | The entry point for the ReadTheDocs Theme. | ||
5 | |||
6 | Any theme customisations should override this file to redefine blocks defined in | ||
7 | the various templates. The custom theme should only need to define a main.html | ||
8 | which `{% extends "base.html" %}` and defines various blocks which will replace | ||
9 | the blocks defined in base.html and its included child templates. | ||
10 | #} | ||
11 | |||
12 | {%- block site_meta %} | ||
13 | <meta charset="utf-8"> | ||
14 | <meta http-equiv="X-UA-Compatible" content="IE=edge"> | ||
15 | <meta name="viewport" content="width=device-width, initial-scale=1.0"> | ||
16 | |||
17 | {%- if 'media.readthedocs.org' not in config.extra_css[0] %} | ||
18 | <meta name="robots" content="noindex, nofollow"> | ||
19 | {%- endif %} | ||
20 | |||
21 | {% if page and page.is_homepage %}<meta name="description" content="{{ config.site_description }}">{% endif %} | ||
22 | {% if config.site_author %}<meta name="author" content="{{ config.site_author }}">{% endif %} | ||
23 | {% if config.site_favicon %}<link rel="shortcut icon" href="{{ config.site_favicon|url }}"> | ||
24 | {% else %}<link rel="shortcut icon" href="{{ 'img/favicon.ico'|url }}">{% endif %} | ||
25 | {%- endblock %} | ||
diff --git a/doc/md/Server-configuration.md b/doc/md/Server-configuration.md index e281dc85..cf44ecf5 100644 --- a/doc/md/Server-configuration.md +++ b/doc/md/Server-configuration.md | |||
@@ -397,6 +397,7 @@ http { | |||
397 | ``` | 397 | ``` |
398 | 398 | ||
399 | ## Proxies | 399 | ## Proxies |
400 | |||
400 | If Shaarli is served behind a proxy (i.e. there is a proxy server between clients and the web server hosting Shaarli), please refer to the proxy server documentation for proper configuration. In particular, you have to ensure that the following server variables are properly set: | 401 | If Shaarli is served behind a proxy (i.e. there is a proxy server between clients and the web server hosting Shaarli), please refer to the proxy server documentation for proper configuration. In particular, you have to ensure that the following server variables are properly set: |
401 | 402 | ||
402 | - `X-Forwarded-Proto` | 403 | - `X-Forwarded-Proto` |
@@ -405,6 +406,12 @@ If Shaarli is served behind a proxy (i.e. there is a proxy server between client | |||
405 | 406 | ||
406 | See also [proxy-related](https://github.com/shaarli/Shaarli/issues?utf8=%E2%9C%93&q=label%3Aproxy+) issues. | 407 | See also [proxy-related](https://github.com/shaarli/Shaarli/issues?utf8=%E2%9C%93&q=label%3Aproxy+) issues. |
407 | 408 | ||
409 | ## Robots and crawlers | ||
410 | |||
411 | Shaarli disallows indexing and crawling of your local documentation pages by search engines, using `<meta name="robots">` HTML tags. | ||
412 | Your Shaarli instance and other pages you host may still be indexed by various robots on the public Internet. | ||
413 | You may want to setup a robots.txt file or other crawler control mechanism on your server. | ||
414 | See [[1]](https://en.wikipedia.org/wiki/Robots_exclusion_standard), [[2]](https://support.google.com/webmasters/answer/6062608?hl=en) and [[3]](https://developers.google.com/search/reference/robots_meta_tag) | ||
408 | 415 | ||
409 | ## See also | 416 | ## See also |
410 | 417 | ||
diff --git a/inc/languages/fr/LC_MESSAGES/shaarli.po b/inc/languages/fr/LC_MESSAGES/shaarli.po index 155eb52e..102c80da 100644 --- a/inc/languages/fr/LC_MESSAGES/shaarli.po +++ b/inc/languages/fr/LC_MESSAGES/shaarli.po | |||
@@ -1,15 +1,15 @@ | |||
1 | msgid "" | 1 | msgid "" |
2 | msgstr "" | 2 | msgstr "" |
3 | "Project-Id-Version: Shaarli\n" | 3 | "Project-Id-Version: Shaarli\n" |
4 | "POT-Creation-Date: 2018-07-17 13:04+0200\n" | 4 | "POT-Creation-Date: 2018-10-06 13:08+0200\n" |
5 | "PO-Revision-Date: 2018-07-17 13:07+0200\n" | 5 | "PO-Revision-Date: 2018-10-06 13:08+0200\n" |
6 | "Last-Translator: \n" | 6 | "Last-Translator: \n" |
7 | "Language-Team: Shaarli\n" | 7 | "Language-Team: Shaarli\n" |
8 | "Language: fr_FR\n" | 8 | "Language: fr_FR\n" |
9 | "MIME-Version: 1.0\n" | 9 | "MIME-Version: 1.0\n" |
10 | "Content-Type: text/plain; charset=UTF-8\n" | 10 | "Content-Type: text/plain; charset=UTF-8\n" |
11 | "Content-Transfer-Encoding: 8bit\n" | 11 | "Content-Transfer-Encoding: 8bit\n" |
12 | "X-Generator: Poedit 2.0.9\n" | 12 | "X-Generator: Poedit 2.1.1\n" |
13 | "X-Poedit-Basepath: ../../../..\n" | 13 | "X-Poedit-Basepath: ../../../..\n" |
14 | "Plural-Forms: nplurals=2; plural=(n > 1);\n" | 14 | "Plural-Forms: nplurals=2; plural=(n > 1);\n" |
15 | "X-Poedit-SourceCharset: UTF-8\n" | 15 | "X-Poedit-SourceCharset: UTF-8\n" |
@@ -48,7 +48,7 @@ msgstr "le fichier n'est pas accessible en écriture" | |||
48 | #: application/Cache.php:16 | 48 | #: application/Cache.php:16 |
49 | #, php-format | 49 | #, php-format |
50 | msgid "Cannot purge %s: no directory" | 50 | msgid "Cannot purge %s: no directory" |
51 | msgstr "Impossible de purger %s: le répertoire n'existe pas" | 51 | msgstr "Impossible de purger %s : le répertoire n'existe pas" |
52 | 52 | ||
53 | #: application/FeedBuilder.php:151 | 53 | #: application/FeedBuilder.php:151 |
54 | msgid "Direct link" | 54 | msgid "Direct link" |
@@ -98,17 +98,15 @@ msgstr "Vous devez utiliser un entier comme clé." | |||
98 | 98 | ||
99 | #: application/LinkDB.php:145 | 99 | #: application/LinkDB.php:145 |
100 | msgid "Array offset and link ID must be equal." | 100 | msgid "Array offset and link ID must be equal." |
101 | msgstr "La clé du tableau et l'ID du lien doivent être égaux." | 101 | msgstr "La clé du tableau et l'ID du lien doivent être identiques." |
102 | 102 | ||
103 | #: application/LinkDB.php:251 | 103 | #: application/LinkDB.php:251 |
104 | #: tmp/page.footer.b91ef64efc3688266305ea9b42e5017e.rtpl.php:14 | ||
105 | #: tmp/page.footer.b91ef64efc3688266305ea9b42e5017e.rtpl.php:48 | ||
106 | #: tmp/page.footer.cedf684561d925457130839629000a81.rtpl.php:14 | 104 | #: tmp/page.footer.cedf684561d925457130839629000a81.rtpl.php:14 |
107 | #: tmp/page.footer.cedf684561d925457130839629000a81.rtpl.php:48 | 105 | #: tmp/page.footer.cedf684561d925457130839629000a81.rtpl.php:48 |
108 | msgid "" | 106 | msgid "" |
109 | "The personal, minimalist, super-fast, database free, bookmarking service" | 107 | "The personal, minimalist, super-fast, database free, bookmarking service" |
110 | msgstr "" | 108 | msgstr "" |
111 | "Le gestionnaire de marque-page personnel, minimaliste, et sans base de " | 109 | "Le gestionnaire de marque-pages personnel, minimaliste, et sans base de " |
112 | "données" | 110 | "données" |
113 | 111 | ||
114 | #: application/LinkDB.php:253 | 112 | #: application/LinkDB.php:253 |
@@ -125,11 +123,11 @@ msgstr "" | |||
125 | "Bienvenue sur Shaarli ! Ceci est votre premier marque-page public. Pour me " | 123 | "Bienvenue sur Shaarli ! Ceci est votre premier marque-page public. Pour me " |
126 | "modifier ou me supprimer, vous devez d'abord vous connecter.\n" | 124 | "modifier ou me supprimer, vous devez d'abord vous connecter.\n" |
127 | "\n" | 125 | "\n" |
128 | "Pour apprendre comment utiliser Shaarli, consultez le lien « Documentation » " | 126 | "Pour apprendre à utiliser Shaarli, consultez le lien « Documentation » en " |
129 | "en bas de page.\n" | 127 | "bas de page.\n" |
130 | "\n" | 128 | "\n" |
131 | "Vous utilisez la version supportée par la communauté du projet original " | 129 | "Vous utilisez la version supportée par la communauté du projet original " |
132 | "Shaarli, de Sébastien Sauvage." | 130 | "Shaarli de Sébastien Sauvage." |
133 | 131 | ||
134 | #: application/LinkDB.php:267 | 132 | #: application/LinkDB.php:267 |
135 | msgid "My secret stuff... - Pastebin.com" | 133 | msgid "My secret stuff... - Pastebin.com" |
@@ -185,14 +183,14 @@ msgid "" | |||
185 | "php-gd extension must be loaded to use thumbnails. Thumbnails are now " | 183 | "php-gd extension must be loaded to use thumbnails. Thumbnails are now " |
186 | "disabled. Please reload the page." | 184 | "disabled. Please reload the page." |
187 | msgstr "" | 185 | msgstr "" |
188 | "php-gd extension must be loaded to use thumbnails. Thumbnails are now " | 186 | "l'extension php-gd doit être chargée pour utiliser les miniatures. Les " |
189 | "disabled. Please reload the page." | 187 | "miniatures sont désormais désactivées. Rechargez la page." |
190 | 188 | ||
191 | #: application/Updater.php:86 | 189 | #: application/Updater.php:86 |
192 | msgid "Couldn't retrieve Updater class methods." | 190 | msgid "Couldn't retrieve Updater class methods." |
193 | msgstr "Impossible de récupérer les méthodes de la classe Updater." | 191 | msgstr "Impossible de récupérer les méthodes de la classe Updater." |
194 | 192 | ||
195 | #: application/Updater.php:514 index.php:1023 | 193 | #: application/Updater.php:514 index.php:1022 |
196 | msgid "" | 194 | msgid "" |
197 | "You have enabled or changed thumbnails mode. <a href=\"?do=thumbs_update" | 195 | "You have enabled or changed thumbnails mode. <a href=\"?do=thumbs_update" |
198 | "\">Please synchronize them</a>." | 196 | "\">Please synchronize them</a>." |
@@ -200,17 +198,17 @@ msgstr "" | |||
200 | "Vous avez activé ou changé le mode de miniatures. <a href=\"?do=thumbs_update" | 198 | "Vous avez activé ou changé le mode de miniatures. <a href=\"?do=thumbs_update" |
201 | "\">Merci de les synchroniser</a>." | 199 | "\">Merci de les synchroniser</a>." |
202 | 200 | ||
203 | #: application/Updater.php:566 | 201 | #: application/Updater.php:586 |
204 | msgid "An error occurred while running the update " | 202 | msgid "An error occurred while running the update " |
205 | msgstr "Une erreur s'est produite lors de l'exécution de la mise à jour " | 203 | msgstr "Une erreur s'est produite lors de l'exécution de la mise à jour " |
206 | 204 | ||
207 | #: application/Updater.php:606 | 205 | #: application/Updater.php:626 |
208 | msgid "Updates file path is not set, can't write updates." | 206 | msgid "Updates file path is not set, can't write updates." |
209 | msgstr "" | 207 | msgstr "" |
210 | "Le chemin vers le fichier de mise à jour n'est pas défini, impossible " | 208 | "Le chemin vers le fichier de mise à jour n'est pas défini, impossible " |
211 | "d'écrire les mises à jour." | 209 | "d'écrire les mises à jour." |
212 | 210 | ||
213 | #: application/Updater.php:611 | 211 | #: application/Updater.php:631 |
214 | msgid "Unable to write updates in " | 212 | msgid "Unable to write updates in " |
215 | msgstr "Impossible d'écrire les mises à jour dans " | 213 | msgstr "Impossible d'écrire les mises à jour dans " |
216 | 214 | ||
@@ -286,74 +284,66 @@ msgstr "NON. Vous êtes banni pour le moment. Revenez plus tard." | |||
286 | 284 | ||
287 | #: index.php:273 | 285 | #: index.php:273 |
288 | msgid "Wrong login/password." | 286 | msgid "Wrong login/password." |
289 | msgstr "Nom d'utilisateur ou mot de passe incorrects." | 287 | msgstr "Nom d'utilisateur ou mot de passe incorrect(s)." |
290 | 288 | ||
291 | #: index.php:483 tmp/page.header.b91ef64efc3688266305ea9b42e5017e.rtpl.php:46 | 289 | #: index.php:482 tmp/page.header.cedf684561d925457130839629000a81.rtpl.php:46 |
292 | #: tmp/page.header.cedf684561d925457130839629000a81.rtpl.php:46 | ||
293 | msgid "Daily" | 290 | msgid "Daily" |
294 | msgstr "Quotidien" | 291 | msgstr "Quotidien" |
295 | 292 | ||
296 | #: index.php:589 tmp/loginform.b91ef64efc3688266305ea9b42e5017e.rtpl.php:28 | 293 | #: index.php:588 tmp/loginform.b91ef64efc3688266305ea9b42e5017e.rtpl.php:28 |
297 | #: tmp/loginform.b91ef64efc3688266305ea9b42e5017e.rtpl.php:44 | 294 | #: tmp/loginform.b91ef64efc3688266305ea9b42e5017e.rtpl.php:44 |
298 | #: tmp/page.header.b91ef64efc3688266305ea9b42e5017e.rtpl.php:75 | ||
299 | #: tmp/page.header.b91ef64efc3688266305ea9b42e5017e.rtpl.php:99 | ||
300 | #: tmp/page.header.cedf684561d925457130839629000a81.rtpl.php:75 | 295 | #: tmp/page.header.cedf684561d925457130839629000a81.rtpl.php:75 |
301 | #: tmp/page.header.cedf684561d925457130839629000a81.rtpl.php:99 | 296 | #: tmp/page.header.cedf684561d925457130839629000a81.rtpl.php:99 |
302 | msgid "Login" | 297 | msgid "Login" |
303 | msgstr "Connexion" | 298 | msgstr "Connexion" |
304 | 299 | ||
305 | #: index.php:606 tmp/page.header.b91ef64efc3688266305ea9b42e5017e.rtpl.php:41 | 300 | #: index.php:605 tmp/page.header.cedf684561d925457130839629000a81.rtpl.php:41 |
306 | #: tmp/page.header.cedf684561d925457130839629000a81.rtpl.php:41 | ||
307 | msgid "Picture wall" | 301 | msgid "Picture wall" |
308 | msgstr "Mur d'images" | 302 | msgstr "Mur d'images" |
309 | 303 | ||
310 | #: index.php:683 tmp/page.header.b91ef64efc3688266305ea9b42e5017e.rtpl.php:36 | 304 | #: index.php:682 tmp/page.header.cedf684561d925457130839629000a81.rtpl.php:36 |
311 | #: tmp/page.header.cedf684561d925457130839629000a81.rtpl.php:36 | ||
312 | #: tmp/tag.cloud.b91ef64efc3688266305ea9b42e5017e.rtpl.php:19 | 305 | #: tmp/tag.cloud.b91ef64efc3688266305ea9b42e5017e.rtpl.php:19 |
313 | msgid "Tag cloud" | 306 | msgid "Tag cloud" |
314 | msgstr "Nuage de tags" | 307 | msgstr "Nuage de tags" |
315 | 308 | ||
316 | #: index.php:716 tmp/tag.list.b91ef64efc3688266305ea9b42e5017e.rtpl.php:19 | 309 | #: index.php:715 tmp/tag.list.b91ef64efc3688266305ea9b42e5017e.rtpl.php:19 |
317 | msgid "Tag list" | 310 | msgid "Tag list" |
318 | msgstr "Liste des tags" | 311 | msgstr "Liste des tags" |
319 | 312 | ||
320 | #: index.php:941 tmp/page.header.b91ef64efc3688266305ea9b42e5017e.rtpl.php:31 | 313 | #: index.php:940 tmp/page.header.cedf684561d925457130839629000a81.rtpl.php:31 |
321 | #: tmp/page.header.cedf684561d925457130839629000a81.rtpl.php:31 | ||
322 | msgid "Tools" | 314 | msgid "Tools" |
323 | msgstr "Outils" | 315 | msgstr "Outils" |
324 | 316 | ||
325 | #: index.php:950 | 317 | #: index.php:949 |
326 | msgid "You are not supposed to change a password on an Open Shaarli." | 318 | msgid "You are not supposed to change a password on an Open Shaarli." |
327 | msgstr "" | 319 | msgstr "" |
328 | "Vous n'êtes pas censé modifier le mot de passe d'un Shaarli en mode ouvert." | 320 | "Vous n'êtes pas censé modifier le mot de passe d'un Shaarli en mode ouvert." |
329 | 321 | ||
330 | #: index.php:955 index.php:997 index.php:1085 index.php:1116 index.php:1221 | 322 | #: index.php:954 index.php:996 index.php:1084 index.php:1116 index.php:1221 |
331 | msgid "Wrong token." | 323 | msgid "Wrong token." |
332 | msgstr "Jeton invalide." | 324 | msgstr "Jeton invalide." |
333 | 325 | ||
334 | #: index.php:960 | 326 | #: index.php:959 |
335 | msgid "The old password is not correct." | 327 | msgid "The old password is not correct." |
336 | msgstr "L'ancien mot de passe est incorrect." | 328 | msgstr "L'ancien mot de passe est incorrect." |
337 | 329 | ||
338 | #: index.php:980 | 330 | #: index.php:979 |
339 | msgid "Your password has been changed" | 331 | msgid "Your password has been changed" |
340 | msgstr "Votre mot de passe a été modifié" | 332 | msgstr "Votre mot de passe a été modifié" |
341 | 333 | ||
342 | #: index.php:985 | 334 | #: index.php:984 tmp/tools.b91ef64efc3688266305ea9b42e5017e.rtpl.php:29 |
343 | #: tmp/changepassword.b91ef64efc3688266305ea9b42e5017e.rtpl.php:13 | ||
344 | #: tmp/tools.b91ef64efc3688266305ea9b42e5017e.rtpl.php:29 | ||
345 | msgid "Change password" | 335 | msgid "Change password" |
346 | msgstr "Modification du mot de passe" | 336 | msgstr "Modifier le mot de passe" |
347 | 337 | ||
348 | #: index.php:1043 | 338 | #: index.php:1042 |
349 | msgid "Configuration was saved." | 339 | msgid "Configuration was saved." |
350 | msgstr "La configuration a été sauvegardé." | 340 | msgstr "La configuration a été sauvegardée." |
351 | 341 | ||
352 | #: index.php:1068 tmp/configure.b91ef64efc3688266305ea9b42e5017e.rtpl.php:24 | 342 | #: index.php:1067 tmp/configure.b91ef64efc3688266305ea9b42e5017e.rtpl.php:24 |
353 | msgid "Configure" | 343 | msgid "Configure" |
354 | msgstr "Configurer" | 344 | msgstr "Configurer" |
355 | 345 | ||
356 | #: index.php:1079 tmp/changetag.b91ef64efc3688266305ea9b42e5017e.rtpl.php:13 | 346 | #: index.php:1078 tmp/changetag.b91ef64efc3688266305ea9b42e5017e.rtpl.php:13 |
357 | #: tmp/tools.b91ef64efc3688266305ea9b42e5017e.rtpl.php:36 | 347 | #: tmp/tools.b91ef64efc3688266305ea9b42e5017e.rtpl.php:36 |
358 | msgid "Manage tags" | 348 | msgid "Manage tags" |
359 | msgstr "Gérer les tags" | 349 | msgstr "Gérer les tags" |
@@ -381,7 +371,6 @@ msgid "Edit" | |||
381 | msgstr "Modifier" | 371 | msgstr "Modifier" |
382 | 372 | ||
383 | #: index.php:1281 index.php:1351 | 373 | #: index.php:1281 index.php:1351 |
384 | #: tmp/page.header.b91ef64efc3688266305ea9b42e5017e.rtpl.php:26 | ||
385 | #: tmp/page.header.cedf684561d925457130839629000a81.rtpl.php:26 | 374 | #: tmp/page.header.cedf684561d925457130839629000a81.rtpl.php:26 |
386 | msgid "Shaare" | 375 | msgid "Shaare" |
387 | msgstr "Shaare" | 376 | msgstr "Shaare" |
@@ -390,15 +379,19 @@ msgstr "Shaare" | |||
390 | msgid "Note: " | 379 | msgid "Note: " |
391 | msgstr "Note : " | 380 | msgstr "Note : " |
392 | 381 | ||
393 | #: index.php:1360 tmp/export.b91ef64efc3688266305ea9b42e5017e.rtpl.php:65 | 382 | #: index.php:1359 |
383 | msgid "Invalid link ID provided" | ||
384 | msgstr "" | ||
385 | |||
386 | #: index.php:1379 | ||
394 | msgid "Export" | 387 | msgid "Export" |
395 | msgstr "Exporter" | 388 | msgstr "Exporter" |
396 | 389 | ||
397 | #: index.php:1422 tmp/import.b91ef64efc3688266305ea9b42e5017e.rtpl.php:83 | 390 | #: index.php:1441 |
398 | msgid "Import" | 391 | msgid "Import" |
399 | msgstr "Importer" | 392 | msgstr "Importer" |
400 | 393 | ||
401 | #: index.php:1432 | 394 | #: index.php:1451 |
402 | #, php-format | 395 | #, php-format |
403 | msgid "" | 396 | msgid "" |
404 | "The file you are trying to upload is probably bigger than what this " | 397 | "The file you are trying to upload is probably bigger than what this " |
@@ -408,20 +401,20 @@ msgstr "" | |||
408 | "le serveur web peut accepter (%s). Merci de l'envoyer en parties plus " | 401 | "le serveur web peut accepter (%s). Merci de l'envoyer en parties plus " |
409 | "légères." | 402 | "légères." |
410 | 403 | ||
411 | #: index.php:1471 tmp/pluginsadmin.b91ef64efc3688266305ea9b42e5017e.rtpl.php:26 | 404 | #: index.php:1490 tmp/pluginsadmin.b91ef64efc3688266305ea9b42e5017e.rtpl.php:26 |
412 | #: tmp/tools.b91ef64efc3688266305ea9b42e5017e.rtpl.php:22 | 405 | #: tmp/tools.b91ef64efc3688266305ea9b42e5017e.rtpl.php:22 |
413 | msgid "Plugin administration" | 406 | msgid "Plugin administration" |
414 | msgstr "Administration des extensions" | 407 | msgstr "Administration des plugins" |
415 | 408 | ||
416 | #: index.php:1523 tmp/thumbnails.b91ef64efc3688266305ea9b42e5017e.rtpl.php:14 | 409 | #: index.php:1542 tmp/thumbnails.b91ef64efc3688266305ea9b42e5017e.rtpl.php:14 |
417 | msgid "Thumbnails update" | 410 | msgid "Thumbnails update" |
418 | msgstr "Mise à jour des miniatures" | 411 | msgstr "Mise à jour des miniatures" |
419 | 412 | ||
420 | #: index.php:1695 | 413 | #: index.php:1714 |
421 | msgid "Search: " | 414 | msgid "Search: " |
422 | msgstr "Recherche : " | 415 | msgstr "Recherche : " |
423 | 416 | ||
424 | #: index.php:1735 | 417 | #: index.php:1754 |
425 | #, php-format | 418 | #, php-format |
426 | msgid "" | 419 | msgid "" |
427 | "<pre>Sessions do not seem to work correctly on your server.<br>Make sure the " | 420 | "<pre>Sessions do not seem to work correctly on your server.<br>Make sure the " |
@@ -431,16 +424,16 @@ msgid "" | |||
431 | "custom hostname without a dot causes cookie storage to fail. We recommend " | 424 | "custom hostname without a dot causes cookie storage to fail. We recommend " |
432 | "accessing your server via it's IP address or Fully Qualified Domain Name.<br>" | 425 | "accessing your server via it's IP address or Fully Qualified Domain Name.<br>" |
433 | msgstr "" | 426 | msgstr "" |
434 | "<pre>Les sesssions ne semble pas fonctionner sur ce serveur.<br>Assurez vous " | 427 | "<pre>Les sesssions ne semblent pas fonctionner sur ce serveur.<br>Assurez " |
435 | "que la variable « session.save_path » est correctement définie dans votre " | 428 | "vous que la variable « session.save_path » est correctement définie dans " |
436 | "fichier de configuration PHP, et que vous y avez les droits d'écriture." | 429 | "votre fichier de configuration PHP, et que vous avez les droits d'écriture " |
437 | "<br>Ce paramètre pointe actuellement sur %s.<br>Sur certains navigateurs, " | 430 | "dessus.<br>Ce paramètre pointe actuellement sur %s.<br>Sur certains " |
438 | "accéder à votre serveur depuis un nom d'hôte comme « localhost » ou autre " | 431 | "navigateurs, accéder à votre serveur depuis un nom d'hôte comme « localhost " |
439 | "nom personnalisé sans point '.' entraine l'échec de la sauvegarde des " | 432 | "» ou autre nom personnalisé sans point '.' entraine l'échec de la sauvegarde " |
440 | "cookies. Nous vous recommandons d'accéder à votre serveur depuis son adresse " | 433 | "des cookies. Nous vous recommandons d'accéder à votre serveur depuis son " |
441 | "IP ou un <em>Fully Qualified Domain Name</em>.<br>" | 434 | "adresse IP ou un <em>Fully Qualified Domain Name</em>.<br>" |
442 | 435 | ||
443 | #: index.php:1745 | 436 | #: index.php:1764 |
444 | msgid "Click to try again." | 437 | msgid "Click to try again." |
445 | msgstr "Cliquer ici pour réessayer." | 438 | msgstr "Cliquer ici pour réessayer." |
446 | 439 | ||
@@ -455,7 +448,7 @@ msgstr "Shaare" | |||
455 | 448 | ||
456 | #: plugins/addlink_toolbar/addlink_toolbar.php:50 | 449 | #: plugins/addlink_toolbar/addlink_toolbar.php:50 |
457 | msgid "Adds the addlink input on the linklist page." | 450 | msgid "Adds the addlink input on the linklist page." |
458 | msgstr "Ajout le formulaire d'ajout de liens sur la page principale." | 451 | msgstr "Ajoute le formulaire d'ajout de liens sur la page principale." |
459 | 452 | ||
460 | #: plugins/archiveorg/archiveorg.php:23 | 453 | #: plugins/archiveorg/archiveorg.php:23 |
461 | msgid "View on archive.org" | 454 | msgid "View on archive.org" |
@@ -471,7 +464,7 @@ msgid "" | |||
471 | "developers." | 464 | "developers." |
472 | msgstr "" | 465 | msgstr "" |
473 | "Une extension de démonstration couvrant tous les cas d'utilisation pour les " | 466 | "Une extension de démonstration couvrant tous les cas d'utilisation pour les " |
474 | "designers et les développeurs." | 467 | "designers de thèmes et les développeurs d'extensions." |
475 | 468 | ||
476 | #: plugins/isso/isso.php:20 | 469 | #: plugins/isso/isso.php:20 |
477 | msgid "" | 470 | msgid "" |
@@ -481,12 +474,13 @@ msgstr "" | |||
481 | "Erreur de l'extension Isso : Merci de définir le paramètre « ISSO_SERVER » " | 474 | "Erreur de l'extension Isso : Merci de définir le paramètre « ISSO_SERVER » " |
482 | "dans la page d'administration des extensions." | 475 | "dans la page d'administration des extensions." |
483 | 476 | ||
484 | #: plugins/isso/isso.php:63 | 477 | #: plugins/isso/isso.php:90 |
485 | msgid "Let visitor comment your shaares on permalinks with Isso." | 478 | msgid "Let visitor comment your shaares on permalinks with Isso." |
486 | msgstr "" | 479 | msgstr "" |
487 | "Permet aux visiteurs de commenter vos shaares sur les permaliens avec Isso." | 480 | "Permettre aux visiteurs de commenter vos shaares sur les permaliens avec " |
481 | "Isso." | ||
488 | 482 | ||
489 | #: plugins/isso/isso.php:64 | 483 | #: plugins/isso/isso.php:91 |
490 | msgid "Isso server URL (without 'http://')" | 484 | msgid "Isso server URL (without 'http://')" |
491 | msgstr "URL du serveur Isso (sans 'http://')" | 485 | msgstr "URL du serveur Isso (sans 'http://')" |
492 | 486 | ||
@@ -578,7 +572,7 @@ msgstr "Active la publication de flux vers PubSubHubbub." | |||
578 | 572 | ||
579 | #: plugins/qrcode/qrcode.php:69 plugins/wallabag/wallabag.php:68 | 573 | #: plugins/qrcode/qrcode.php:69 plugins/wallabag/wallabag.php:68 |
580 | msgid "For each link, add a QRCode icon." | 574 | msgid "For each link, add a QRCode icon." |
581 | msgstr "Pour chaque liens, ajouter une icône de QRCode." | 575 | msgstr "Pour chaque lien, ajouter une icône de QRCode." |
582 | 576 | ||
583 | #: plugins/wallabag/wallabag.php:21 | 577 | #: plugins/wallabag/wallabag.php:21 |
584 | msgid "" | 578 | msgid "" |
@@ -603,35 +597,17 @@ msgstr "Version de l'API Wallabag (1 ou 2)" | |||
603 | #: tests/LanguagesTest.php:214 tests/LanguagesTest.php:227 | 597 | #: tests/LanguagesTest.php:214 tests/LanguagesTest.php:227 |
604 | #: tests/languages/fr/LanguagesFrTest.php:160 | 598 | #: tests/languages/fr/LanguagesFrTest.php:160 |
605 | #: tests/languages/fr/LanguagesFrTest.php:173 | 599 | #: tests/languages/fr/LanguagesFrTest.php:173 |
606 | #: tmp/page.header.b91ef64efc3688266305ea9b42e5017e.rtpl.php:85 | ||
607 | #: tmp/page.header.cedf684561d925457130839629000a81.rtpl.php:85 | 600 | #: tmp/page.header.cedf684561d925457130839629000a81.rtpl.php:85 |
608 | msgid "Search" | 601 | msgid "Search" |
609 | msgid_plural "Search" | 602 | msgid_plural "Search" |
610 | msgstr[0] "Rechercher" | 603 | msgstr[0] "Rechercher" |
611 | msgstr[1] "Rechercher" | 604 | msgstr[1] "Rechercher" |
612 | 605 | ||
613 | #: tmp/404.b91ef64efc3688266305ea9b42e5017e.rtpl.php:12 | ||
614 | msgid "Sorry, nothing to see here." | ||
615 | msgstr "Désolé, il y a rien à voir ici." | ||
616 | |||
617 | #: tmp/addlink.b91ef64efc3688266305ea9b42e5017e.rtpl.php:16 | 606 | #: tmp/addlink.b91ef64efc3688266305ea9b42e5017e.rtpl.php:16 |
618 | msgid "URL or leave empty to post a note" | 607 | msgid "URL or leave empty to post a note" |
619 | msgstr "URL ou laisser vide pour créer une note" | 608 | msgstr "URL ou laisser vide pour créer une note" |
620 | 609 | ||
621 | #: tmp/changepassword.b91ef64efc3688266305ea9b42e5017e.rtpl.php:16 | ||
622 | msgid "Current password" | ||
623 | msgstr "Mot de passe actuel" | ||
624 | |||
625 | #: tmp/changepassword.b91ef64efc3688266305ea9b42e5017e.rtpl.php:19 | ||
626 | msgid "New password" | ||
627 | msgstr "Nouveau mot de passe" | ||
628 | |||
629 | #: tmp/changepassword.b91ef64efc3688266305ea9b42e5017e.rtpl.php:23 | ||
630 | msgid "Change" | ||
631 | msgstr "Changer" | ||
632 | |||
633 | #: tmp/changetag.b91ef64efc3688266305ea9b42e5017e.rtpl.php:16 | 610 | #: tmp/changetag.b91ef64efc3688266305ea9b42e5017e.rtpl.php:16 |
634 | #: tmp/import.b91ef64efc3688266305ea9b42e5017e.rtpl.php:77 | ||
635 | msgid "Tag" | 611 | msgid "Tag" |
636 | msgstr "Tag" | 612 | msgstr "Tag" |
637 | 613 | ||
@@ -661,6 +637,34 @@ msgstr "Vous pouvez aussi modifier les tags dans la" | |||
661 | msgid "tag list" | 637 | msgid "tag list" |
662 | msgstr "liste des tags" | 638 | msgstr "liste des tags" |
663 | 639 | ||
640 | #: tmp/configure.90100d2eaf5d3705e14b9b4f78ecddc9.rtpl.php:143 | ||
641 | #: tmp/configure.b91ef64efc3688266305ea9b42e5017e.rtpl.php:296 | ||
642 | msgid "All" | ||
643 | msgstr "Tous" | ||
644 | |||
645 | #: tmp/configure.90100d2eaf5d3705e14b9b4f78ecddc9.rtpl.php:147 | ||
646 | #: tmp/configure.b91ef64efc3688266305ea9b42e5017e.rtpl.php:300 | ||
647 | msgid "Only common media hosts" | ||
648 | msgstr "Seulement les hébergeurs de média connus" | ||
649 | |||
650 | #: tmp/configure.90100d2eaf5d3705e14b9b4f78ecddc9.rtpl.php:151 | ||
651 | #: tmp/configure.b91ef64efc3688266305ea9b42e5017e.rtpl.php:304 | ||
652 | msgid "None" | ||
653 | msgstr "Aucune" | ||
654 | |||
655 | #: tmp/configure.90100d2eaf5d3705e14b9b4f78ecddc9.rtpl.php:158 | ||
656 | #: tmp/configure.b91ef64efc3688266305ea9b42e5017e.rtpl.php:281 | ||
657 | msgid "You need to enable the extension <code>php-gd</code> to use thumbnails." | ||
658 | msgstr "" | ||
659 | "Vous devez activer l'extension <code>php-gd</code> pour utiliser les " | ||
660 | "miniatures." | ||
661 | |||
662 | #: tmp/configure.90100d2eaf5d3705e14b9b4f78ecddc9.rtpl.php:162 | ||
663 | #, fuzzy | ||
664 | #| msgid "Enable thumbnails" | ||
665 | msgid "Synchonize thumbnails" | ||
666 | msgstr "Activer les miniatures" | ||
667 | |||
664 | #: tmp/configure.b91ef64efc3688266305ea9b42e5017e.rtpl.php:29 | 668 | #: tmp/configure.b91ef64efc3688266305ea9b42e5017e.rtpl.php:29 |
665 | msgid "title" | 669 | msgid "title" |
666 | msgstr "titre" | 670 | msgstr "titre" |
@@ -678,22 +682,18 @@ msgid "Theme" | |||
678 | msgstr "Thème" | 682 | msgstr "Thème" |
679 | 683 | ||
680 | #: tmp/configure.b91ef64efc3688266305ea9b42e5017e.rtpl.php:87 | 684 | #: tmp/configure.b91ef64efc3688266305ea9b42e5017e.rtpl.php:87 |
681 | #: tmp/install.b91ef64efc3688266305ea9b42e5017e.rtpl.php:78 | ||
682 | msgid "Language" | 685 | msgid "Language" |
683 | msgstr "Langue" | 686 | msgstr "Langue" |
684 | 687 | ||
685 | #: tmp/configure.b91ef64efc3688266305ea9b42e5017e.rtpl.php:116 | 688 | #: tmp/configure.b91ef64efc3688266305ea9b42e5017e.rtpl.php:116 |
686 | #: tmp/install.b91ef64efc3688266305ea9b42e5017e.rtpl.php:102 | ||
687 | msgid "Timezone" | 689 | msgid "Timezone" |
688 | msgstr "Fuseau horaire" | 690 | msgstr "Fuseau horaire" |
689 | 691 | ||
690 | #: tmp/configure.b91ef64efc3688266305ea9b42e5017e.rtpl.php:117 | 692 | #: tmp/configure.b91ef64efc3688266305ea9b42e5017e.rtpl.php:117 |
691 | #: tmp/install.b91ef64efc3688266305ea9b42e5017e.rtpl.php:103 | ||
692 | msgid "Continent" | 693 | msgid "Continent" |
693 | msgstr "Continent" | 694 | msgstr "Continent" |
694 | 695 | ||
695 | #: tmp/configure.b91ef64efc3688266305ea9b42e5017e.rtpl.php:117 | 696 | #: tmp/configure.b91ef64efc3688266305ea9b42e5017e.rtpl.php:117 |
696 | #: tmp/install.b91ef64efc3688266305ea9b42e5017e.rtpl.php:103 | ||
697 | msgid "City" | 697 | msgid "City" |
698 | msgstr "Ville" | 698 | msgstr "Ville" |
699 | 699 | ||
@@ -734,25 +734,21 @@ msgid "Do not show any links if the user is not logged in" | |||
734 | msgstr "N'afficher aucun lien sans être connecté" | 734 | msgstr "N'afficher aucun lien sans être connecté" |
735 | 735 | ||
736 | #: tmp/configure.b91ef64efc3688266305ea9b42e5017e.rtpl.php:231 | 736 | #: tmp/configure.b91ef64efc3688266305ea9b42e5017e.rtpl.php:231 |
737 | #: tmp/install.b91ef64efc3688266305ea9b42e5017e.rtpl.php:150 | ||
738 | msgid "Check updates" | 737 | msgid "Check updates" |
739 | msgstr "Vérifier les mises à jour" | 738 | msgstr "Vérifier les mises à jour" |
740 | 739 | ||
741 | #: tmp/configure.b91ef64efc3688266305ea9b42e5017e.rtpl.php:232 | 740 | #: tmp/configure.b91ef64efc3688266305ea9b42e5017e.rtpl.php:232 |
742 | #: tmp/install.b91ef64efc3688266305ea9b42e5017e.rtpl.php:152 | ||
743 | msgid "Notify me when a new release is ready" | 741 | msgid "Notify me when a new release is ready" |
744 | msgstr "Me notifier lorsqu'une nouvelle version est disponible" | 742 | msgstr "Me notifier lorsqu'une nouvelle version est disponible" |
745 | 743 | ||
746 | #: tmp/configure.b91ef64efc3688266305ea9b42e5017e.rtpl.php:247 | 744 | #: tmp/configure.b91ef64efc3688266305ea9b42e5017e.rtpl.php:247 |
747 | #: tmp/install.b91ef64efc3688266305ea9b42e5017e.rtpl.php:169 | ||
748 | msgid "Enable REST API" | 745 | msgid "Enable REST API" |
749 | msgstr "Activer l'API REST" | 746 | msgstr "Activer l'API REST" |
750 | 747 | ||
751 | #: tmp/configure.b91ef64efc3688266305ea9b42e5017e.rtpl.php:248 | 748 | #: tmp/configure.b91ef64efc3688266305ea9b42e5017e.rtpl.php:248 |
752 | #: tmp/install.b91ef64efc3688266305ea9b42e5017e.rtpl.php:170 | ||
753 | msgid "Allow third party software to use Shaarli such as mobile application" | 749 | msgid "Allow third party software to use Shaarli such as mobile application" |
754 | msgstr "" | 750 | msgstr "" |
755 | "Permets aux applications tierces d'utiliser Shaarli, par exemple les " | 751 | "Permet aux applications tierces d'utiliser Shaarli, par exemple les " |
756 | "applications mobiles" | 752 | "applications mobiles" |
757 | 753 | ||
758 | #: tmp/configure.b91ef64efc3688266305ea9b42e5017e.rtpl.php:263 | 754 | #: tmp/configure.b91ef64efc3688266305ea9b42e5017e.rtpl.php:263 |
@@ -763,30 +759,11 @@ msgstr "Clé d'API secrète" | |||
763 | msgid "Enable thumbnails" | 759 | msgid "Enable thumbnails" |
764 | msgstr "Activer les miniatures" | 760 | msgstr "Activer les miniatures" |
765 | 761 | ||
766 | #: tmp/configure.b91ef64efc3688266305ea9b42e5017e.rtpl.php:281 | ||
767 | msgid "You need to enable the extension <code>php-gd</code> to use thumbnails." | ||
768 | msgstr "" | ||
769 | "Vous devez activer l'extension <code>php-gd</code> pour utiliser les " | ||
770 | "miniatures." | ||
771 | |||
772 | #: tmp/configure.b91ef64efc3688266305ea9b42e5017e.rtpl.php:285 | 762 | #: tmp/configure.b91ef64efc3688266305ea9b42e5017e.rtpl.php:285 |
773 | #: tmp/tools.b91ef64efc3688266305ea9b42e5017e.rtpl.php:56 | 763 | #: tmp/tools.b91ef64efc3688266305ea9b42e5017e.rtpl.php:56 |
774 | msgid "Synchronize thumbnails" | 764 | msgid "Synchronize thumbnails" |
775 | msgstr "Synchroniser les miniatures" | 765 | msgstr "Synchroniser les miniatures" |
776 | 766 | ||
777 | #: tmp/configure.b91ef64efc3688266305ea9b42e5017e.rtpl.php:296 | ||
778 | #: tmp/export.b91ef64efc3688266305ea9b42e5017e.rtpl.php:31 | ||
779 | msgid "All" | ||
780 | msgstr "Tous" | ||
781 | |||
782 | #: tmp/configure.b91ef64efc3688266305ea9b42e5017e.rtpl.php:300 | ||
783 | msgid "Only common media hosts" | ||
784 | msgstr "Seulement les hébergeurs de média connus" | ||
785 | |||
786 | #: tmp/configure.b91ef64efc3688266305ea9b42e5017e.rtpl.php:304 | ||
787 | msgid "None" | ||
788 | msgstr "Aucune" | ||
789 | |||
790 | #: tmp/configure.b91ef64efc3688266305ea9b42e5017e.rtpl.php:312 | 767 | #: tmp/configure.b91ef64efc3688266305ea9b42e5017e.rtpl.php:312 |
791 | #: tmp/editlink.b91ef64efc3688266305ea9b42e5017e.rtpl.php:72 | 768 | #: tmp/editlink.b91ef64efc3688266305ea9b42e5017e.rtpl.php:72 |
792 | #: tmp/pluginsadmin.b91ef64efc3688266305ea9b42e5017e.rtpl.php:139 | 769 | #: tmp/pluginsadmin.b91ef64efc3688266305ea9b42e5017e.rtpl.php:139 |
@@ -847,107 +824,13 @@ msgid "Tags" | |||
847 | msgstr "Tags" | 824 | msgstr "Tags" |
848 | 825 | ||
849 | #: tmp/editlink.b91ef64efc3688266305ea9b42e5017e.rtpl.php:57 | 826 | #: tmp/editlink.b91ef64efc3688266305ea9b42e5017e.rtpl.php:57 |
850 | #: tmp/export.b91ef64efc3688266305ea9b42e5017e.rtpl.php:36 | ||
851 | #: tmp/linklist.b91ef64efc3688266305ea9b42e5017e.rtpl.php:167 | 827 | #: tmp/linklist.b91ef64efc3688266305ea9b42e5017e.rtpl.php:167 |
852 | msgid "Private" | 828 | msgid "Private" |
853 | msgstr "Privé" | 829 | msgstr "Privé" |
854 | 830 | ||
855 | #: tmp/editlink.b91ef64efc3688266305ea9b42e5017e.rtpl.php:72 | 831 | #: tmp/editlink.b91ef64efc3688266305ea9b42e5017e.rtpl.php:72 |
856 | msgid "Apply Changes" | 832 | msgid "Apply Changes" |
857 | msgstr "Appliquer" | 833 | msgstr "Appliquer les changements" |
858 | |||
859 | #: tmp/export.b91ef64efc3688266305ea9b42e5017e.rtpl.php:16 | ||
860 | msgid "Export Database" | ||
861 | msgstr "Exporter les données" | ||
862 | |||
863 | #: tmp/export.b91ef64efc3688266305ea9b42e5017e.rtpl.php:24 | ||
864 | msgid "Selection" | ||
865 | msgstr "Choisir" | ||
866 | |||
867 | #: tmp/export.b91ef64efc3688266305ea9b42e5017e.rtpl.php:41 | ||
868 | msgid "Public" | ||
869 | msgstr "Publics" | ||
870 | |||
871 | #: tmp/export.b91ef64efc3688266305ea9b42e5017e.rtpl.php:52 | ||
872 | msgid "Prepend note permalinks with this Shaarli instance's URL" | ||
873 | msgstr "Préfixer les liens de notes avec l'URL de l'instance de Shaarli" | ||
874 | |||
875 | #: tmp/export.b91ef64efc3688266305ea9b42e5017e.rtpl.php:53 | ||
876 | msgid "Useful to import bookmarks in a web browser" | ||
877 | msgstr "Utile pour importer les marques-pages dans un navigateur" | ||
878 | |||
879 | #: tmp/import.b91ef64efc3688266305ea9b42e5017e.rtpl.php:16 | ||
880 | msgid "Import Database" | ||
881 | msgstr "Importer des données" | ||
882 | |||
883 | #: tmp/import.b91ef64efc3688266305ea9b42e5017e.rtpl.php:23 | ||
884 | msgid "Maximum size allowed:" | ||
885 | msgstr "Taille maximum autorisée :" | ||
886 | |||
887 | #: tmp/import.b91ef64efc3688266305ea9b42e5017e.rtpl.php:29 | ||
888 | msgid "Visibility" | ||
889 | msgstr "Visibilité" | ||
890 | |||
891 | #: tmp/import.b91ef64efc3688266305ea9b42e5017e.rtpl.php:36 | ||
892 | msgid "Use values from the imported file, default to public" | ||
893 | msgstr "" | ||
894 | "Utiliser les valeurs présentes dans le fichier d'import, public par défaut" | ||
895 | |||
896 | #: tmp/import.b91ef64efc3688266305ea9b42e5017e.rtpl.php:41 | ||
897 | msgid "Import all bookmarks as private" | ||
898 | msgstr "Importer tous les liens comme privés" | ||
899 | |||
900 | #: tmp/import.b91ef64efc3688266305ea9b42e5017e.rtpl.php:46 | ||
901 | msgid "Import all bookmarks as public" | ||
902 | msgstr "Importer tous les liens comme publics" | ||
903 | |||
904 | #: tmp/import.b91ef64efc3688266305ea9b42e5017e.rtpl.php:57 | ||
905 | msgid "Overwrite existing bookmarks" | ||
906 | msgstr "Remplacer les liens existants" | ||
907 | |||
908 | #: tmp/import.b91ef64efc3688266305ea9b42e5017e.rtpl.php:58 | ||
909 | msgid "Duplicates based on URL" | ||
910 | msgstr "Les doublons s'appuient sur les URL" | ||
911 | |||
912 | #: tmp/import.b91ef64efc3688266305ea9b42e5017e.rtpl.php:72 | ||
913 | msgid "Add default tags" | ||
914 | msgstr "Ajouter des tags par défaut" | ||
915 | |||
916 | #: tmp/install.b91ef64efc3688266305ea9b42e5017e.rtpl.php:22 | ||
917 | msgid "Install Shaarli" | ||
918 | msgstr "Installation de Shaarli" | ||
919 | |||
920 | #: tmp/install.b91ef64efc3688266305ea9b42e5017e.rtpl.php:25 | ||
921 | msgid "It looks like it's the first time you run Shaarli. Please configure it." | ||
922 | msgstr "" | ||
923 | "Il semblerait que ça soit la première fois que vous lancez Shaarli. Merci de " | ||
924 | "le configurer." | ||
925 | |||
926 | #: tmp/install.b91ef64efc3688266305ea9b42e5017e.rtpl.php:33 | ||
927 | #: tmp/loginform.b91ef64efc3688266305ea9b42e5017e.rtpl.php:30 | ||
928 | #: tmp/page.header.b91ef64efc3688266305ea9b42e5017e.rtpl.php:151 | ||
929 | #: tmp/page.header.cedf684561d925457130839629000a81.rtpl.php:151 | ||
930 | msgid "Username" | ||
931 | msgstr "Nom d'utilisateur" | ||
932 | |||
933 | #: tmp/install.b91ef64efc3688266305ea9b42e5017e.rtpl.php:48 | ||
934 | #: tmp/loginform.b91ef64efc3688266305ea9b42e5017e.rtpl.php:34 | ||
935 | #: tmp/page.header.b91ef64efc3688266305ea9b42e5017e.rtpl.php:152 | ||
936 | #: tmp/page.header.cedf684561d925457130839629000a81.rtpl.php:152 | ||
937 | msgid "Password" | ||
938 | msgstr "Mot de passe" | ||
939 | |||
940 | #: tmp/install.b91ef64efc3688266305ea9b42e5017e.rtpl.php:63 | ||
941 | msgid "Shaarli title" | ||
942 | msgstr "Titre du Shaarli" | ||
943 | |||
944 | #: tmp/install.b91ef64efc3688266305ea9b42e5017e.rtpl.php:69 | ||
945 | msgid "My links" | ||
946 | msgstr "Mes liens" | ||
947 | |||
948 | #: tmp/install.b91ef64efc3688266305ea9b42e5017e.rtpl.php:182 | ||
949 | msgid "Install" | ||
950 | msgstr "Installer" | ||
951 | 834 | ||
952 | #: tmp/linklist.b91ef64efc3688266305ea9b42e5017e.rtpl.php:14 | 835 | #: tmp/linklist.b91ef64efc3688266305ea9b42e5017e.rtpl.php:14 |
953 | #: tmp/linklist.b91ef64efc3688266305ea9b42e5017e.rtpl.php:79 | 836 | #: tmp/linklist.b91ef64efc3688266305ea9b42e5017e.rtpl.php:79 |
@@ -964,13 +847,11 @@ msgstr[0] "lien privé" | |||
964 | msgstr[1] "liens privés" | 847 | msgstr[1] "liens privés" |
965 | 848 | ||
966 | #: tmp/linklist.b91ef64efc3688266305ea9b42e5017e.rtpl.php:30 | 849 | #: tmp/linklist.b91ef64efc3688266305ea9b42e5017e.rtpl.php:30 |
967 | #: tmp/page.header.b91ef64efc3688266305ea9b42e5017e.rtpl.php:121 | ||
968 | #: tmp/page.header.cedf684561d925457130839629000a81.rtpl.php:121 | 850 | #: tmp/page.header.cedf684561d925457130839629000a81.rtpl.php:121 |
969 | msgid "Search text" | 851 | msgid "Search text" |
970 | msgstr "Recherche texte" | 852 | msgstr "Recherche texte" |
971 | 853 | ||
972 | #: tmp/linklist.b91ef64efc3688266305ea9b42e5017e.rtpl.php:37 | 854 | #: tmp/linklist.b91ef64efc3688266305ea9b42e5017e.rtpl.php:37 |
973 | #: tmp/page.header.b91ef64efc3688266305ea9b42e5017e.rtpl.php:128 | ||
974 | #: tmp/page.header.cedf684561d925457130839629000a81.rtpl.php:128 | 855 | #: tmp/page.header.cedf684561d925457130839629000a81.rtpl.php:128 |
975 | #: tmp/tag.cloud.b91ef64efc3688266305ea9b42e5017e.rtpl.php:36 | 856 | #: tmp/tag.cloud.b91ef64efc3688266305ea9b42e5017e.rtpl.php:36 |
976 | #: tmp/tag.cloud.b91ef64efc3688266305ea9b42e5017e.rtpl.php:64 | 857 | #: tmp/tag.cloud.b91ef64efc3688266305ea9b42e5017e.rtpl.php:64 |
@@ -1011,7 +892,6 @@ msgid "without any tag" | |||
1011 | msgstr "sans tag" | 892 | msgstr "sans tag" |
1012 | 893 | ||
1013 | #: tmp/linklist.b91ef64efc3688266305ea9b42e5017e.rtpl.php:173 | 894 | #: tmp/linklist.b91ef64efc3688266305ea9b42e5017e.rtpl.php:173 |
1014 | #: tmp/page.footer.b91ef64efc3688266305ea9b42e5017e.rtpl.php:42 | ||
1015 | #: tmp/page.footer.cedf684561d925457130839629000a81.rtpl.php:42 | 895 | #: tmp/page.footer.cedf684561d925457130839629000a81.rtpl.php:42 |
1016 | msgid "Fold" | 896 | msgid "Fold" |
1017 | msgstr "Replier" | 897 | msgstr "Replier" |
@@ -1028,36 +908,36 @@ msgstr "permalien" | |||
1028 | msgid "Add tag" | 908 | msgid "Add tag" |
1029 | msgstr "Ajouter un tag" | 909 | msgstr "Ajouter un tag" |
1030 | 910 | ||
1031 | #: tmp/linklist.paging.b91ef64efc3688266305ea9b42e5017e.rtpl.php:7 | 911 | #: tmp/linklist.b91ef64efc3688266305ea9b42e5017e.rtpl.php:183 |
912 | msgid "Toggle sticky" | ||
913 | msgstr "Changer statut épinglé" | ||
914 | |||
915 | #: tmp/linklist.b91ef64efc3688266305ea9b42e5017e.rtpl.php:185 | ||
916 | msgid "Sticky" | ||
917 | msgstr "Épinglé" | ||
918 | |||
1032 | #: tmp/linklist.paging.cedf684561d925457130839629000a81.rtpl.php:7 | 919 | #: tmp/linklist.paging.cedf684561d925457130839629000a81.rtpl.php:7 |
1033 | msgid "Filters" | 920 | msgid "Filters" |
1034 | msgstr "Filtres" | 921 | msgstr "Filtres" |
1035 | 922 | ||
1036 | #: tmp/linklist.paging.b91ef64efc3688266305ea9b42e5017e.rtpl.php:12 | ||
1037 | #: tmp/linklist.paging.cedf684561d925457130839629000a81.rtpl.php:12 | 923 | #: tmp/linklist.paging.cedf684561d925457130839629000a81.rtpl.php:12 |
1038 | msgid "Only display private links" | 924 | msgid "Only display private links" |
1039 | msgstr "Afficher uniquement les liens privés" | 925 | msgstr "Afficher uniquement les liens privés" |
1040 | 926 | ||
1041 | #: tmp/linklist.paging.b91ef64efc3688266305ea9b42e5017e.rtpl.php:15 | ||
1042 | #: tmp/linklist.paging.cedf684561d925457130839629000a81.rtpl.php:15 | 927 | #: tmp/linklist.paging.cedf684561d925457130839629000a81.rtpl.php:15 |
1043 | msgid "Only display public links" | 928 | msgid "Only display public links" |
1044 | msgstr "Afficher uniquement les liens publics" | 929 | msgstr "Afficher uniquement les liens publics" |
1045 | 930 | ||
1046 | #: tmp/linklist.paging.b91ef64efc3688266305ea9b42e5017e.rtpl.php:20 | ||
1047 | #: tmp/linklist.paging.cedf684561d925457130839629000a81.rtpl.php:20 | 931 | #: tmp/linklist.paging.cedf684561d925457130839629000a81.rtpl.php:20 |
1048 | msgid "Filter untagged links" | 932 | msgid "Filter untagged links" |
1049 | msgstr "Filtrer par liens privés" | 933 | msgstr "Filtrer par liens privés" |
1050 | 934 | ||
1051 | #: tmp/linklist.paging.b91ef64efc3688266305ea9b42e5017e.rtpl.php:24 | ||
1052 | #: tmp/linklist.paging.b91ef64efc3688266305ea9b42e5017e.rtpl.php:76 | ||
1053 | #: tmp/linklist.paging.cedf684561d925457130839629000a81.rtpl.php:24 | 935 | #: tmp/linklist.paging.cedf684561d925457130839629000a81.rtpl.php:24 |
1054 | #: tmp/linklist.paging.cedf684561d925457130839629000a81.rtpl.php:76 | 936 | #: tmp/linklist.paging.cedf684561d925457130839629000a81.rtpl.php:76 |
1055 | #: tmp/page.footer.b91ef64efc3688266305ea9b42e5017e.rtpl.php:43 | ||
1056 | #: tmp/page.footer.cedf684561d925457130839629000a81.rtpl.php:43 | 937 | #: tmp/page.footer.cedf684561d925457130839629000a81.rtpl.php:43 |
1057 | msgid "Fold all" | 938 | msgid "Fold all" |
1058 | msgstr "Replier tout" | 939 | msgstr "Replier tout" |
1059 | 940 | ||
1060 | #: tmp/linklist.paging.b91ef64efc3688266305ea9b42e5017e.rtpl.php:69 | ||
1061 | #: tmp/linklist.paging.cedf684561d925457130839629000a81.rtpl.php:69 | 941 | #: tmp/linklist.paging.cedf684561d925457130839629000a81.rtpl.php:69 |
1062 | msgid "Links per page" | 942 | msgid "Links per page" |
1063 | msgstr "Liens par page" | 943 | msgstr "Liens par page" |
@@ -1066,62 +946,59 @@ msgstr "Liens par page" | |||
1066 | msgid "" | 946 | msgid "" |
1067 | "You have been banned after too many failed login attempts. Try again later." | 947 | "You have been banned after too many failed login attempts. Try again later." |
1068 | msgstr "" | 948 | msgstr "" |
1069 | "Vous avez été banni après trop d'échec d'authentification. Merci de " | 949 | "Vous avez été banni après trop d'échecs d'authentification. Merci de " |
1070 | "réessayer plus tard." | 950 | "réessayer plus tard." |
1071 | 951 | ||
952 | #: tmp/loginform.b91ef64efc3688266305ea9b42e5017e.rtpl.php:30 | ||
953 | #: tmp/page.header.cedf684561d925457130839629000a81.rtpl.php:151 | ||
954 | msgid "Username" | ||
955 | msgstr "Nom d'utilisateur" | ||
956 | |||
957 | #: tmp/loginform.b91ef64efc3688266305ea9b42e5017e.rtpl.php:34 | ||
958 | #: tmp/page.header.cedf684561d925457130839629000a81.rtpl.php:152 | ||
959 | msgid "Password" | ||
960 | msgstr "Mot de passe" | ||
961 | |||
1072 | #: tmp/loginform.b91ef64efc3688266305ea9b42e5017e.rtpl.php:41 | 962 | #: tmp/loginform.b91ef64efc3688266305ea9b42e5017e.rtpl.php:41 |
1073 | #: tmp/page.header.b91ef64efc3688266305ea9b42e5017e.rtpl.php:155 | ||
1074 | #: tmp/page.header.cedf684561d925457130839629000a81.rtpl.php:155 | 963 | #: tmp/page.header.cedf684561d925457130839629000a81.rtpl.php:155 |
1075 | msgid "Remember me" | 964 | msgid "Remember me" |
1076 | msgstr "Rester connecté" | 965 | msgstr "Rester connecté" |
1077 | 966 | ||
1078 | #: tmp/page.footer.b91ef64efc3688266305ea9b42e5017e.rtpl.php:14 | ||
1079 | #: tmp/page.footer.b91ef64efc3688266305ea9b42e5017e.rtpl.php:48 | ||
1080 | #: tmp/page.footer.cedf684561d925457130839629000a81.rtpl.php:14 | 967 | #: tmp/page.footer.cedf684561d925457130839629000a81.rtpl.php:14 |
1081 | #: tmp/page.footer.cedf684561d925457130839629000a81.rtpl.php:48 | 968 | #: tmp/page.footer.cedf684561d925457130839629000a81.rtpl.php:48 |
1082 | msgid "by the Shaarli community" | 969 | msgid "by the Shaarli community" |
1083 | msgstr "par la communauté Shaarli" | 970 | msgstr "par la communauté Shaarli" |
1084 | 971 | ||
1085 | #: tmp/page.footer.b91ef64efc3688266305ea9b42e5017e.rtpl.php:15 | ||
1086 | #: tmp/page.footer.cedf684561d925457130839629000a81.rtpl.php:15 | 972 | #: tmp/page.footer.cedf684561d925457130839629000a81.rtpl.php:15 |
1087 | msgid "Documentation" | 973 | msgid "Documentation" |
1088 | msgstr "Documentation" | 974 | msgstr "Documentation" |
1089 | 975 | ||
1090 | #: tmp/page.footer.b91ef64efc3688266305ea9b42e5017e.rtpl.php:44 | ||
1091 | #: tmp/page.footer.cedf684561d925457130839629000a81.rtpl.php:44 | 976 | #: tmp/page.footer.cedf684561d925457130839629000a81.rtpl.php:44 |
1092 | msgid "Expand" | 977 | msgid "Expand" |
1093 | msgstr "Déplier" | 978 | msgstr "Déplier" |
1094 | 979 | ||
1095 | #: tmp/page.footer.b91ef64efc3688266305ea9b42e5017e.rtpl.php:45 | ||
1096 | #: tmp/page.footer.cedf684561d925457130839629000a81.rtpl.php:45 | 980 | #: tmp/page.footer.cedf684561d925457130839629000a81.rtpl.php:45 |
1097 | msgid "Expand all" | 981 | msgid "Expand all" |
1098 | msgstr "Déplier tout" | 982 | msgstr "Déplier tout" |
1099 | 983 | ||
1100 | #: tmp/page.footer.b91ef64efc3688266305ea9b42e5017e.rtpl.php:46 | ||
1101 | #: tmp/page.footer.cedf684561d925457130839629000a81.rtpl.php:46 | 984 | #: tmp/page.footer.cedf684561d925457130839629000a81.rtpl.php:46 |
1102 | msgid "Are you sure you want to delete this link?" | 985 | msgid "Are you sure you want to delete this link?" |
1103 | msgstr "Êtes-vous sûr de vouloir supprimer ce lien ?" | 986 | msgstr "Êtes-vous sûr de vouloir supprimer ce lien ?" |
1104 | 987 | ||
1105 | #: tmp/page.header.b91ef64efc3688266305ea9b42e5017e.rtpl.php:65 | ||
1106 | #: tmp/page.header.b91ef64efc3688266305ea9b42e5017e.rtpl.php:90 | ||
1107 | #: tmp/page.header.cedf684561d925457130839629000a81.rtpl.php:65 | 988 | #: tmp/page.header.cedf684561d925457130839629000a81.rtpl.php:65 |
1108 | #: tmp/page.header.cedf684561d925457130839629000a81.rtpl.php:90 | 989 | #: tmp/page.header.cedf684561d925457130839629000a81.rtpl.php:90 |
1109 | msgid "RSS Feed" | 990 | msgid "RSS Feed" |
1110 | msgstr "Flux RSS" | 991 | msgstr "Flux RSS" |
1111 | 992 | ||
1112 | #: tmp/page.header.b91ef64efc3688266305ea9b42e5017e.rtpl.php:70 | ||
1113 | #: tmp/page.header.b91ef64efc3688266305ea9b42e5017e.rtpl.php:106 | ||
1114 | #: tmp/page.header.cedf684561d925457130839629000a81.rtpl.php:70 | 993 | #: tmp/page.header.cedf684561d925457130839629000a81.rtpl.php:70 |
1115 | #: tmp/page.header.cedf684561d925457130839629000a81.rtpl.php:106 | 994 | #: tmp/page.header.cedf684561d925457130839629000a81.rtpl.php:106 |
1116 | msgid "Logout" | 995 | msgid "Logout" |
1117 | msgstr "Déconnexion" | 996 | msgstr "Déconnexion" |
1118 | 997 | ||
1119 | #: tmp/page.header.b91ef64efc3688266305ea9b42e5017e.rtpl.php:173 | ||
1120 | #: tmp/page.header.cedf684561d925457130839629000a81.rtpl.php:173 | 998 | #: tmp/page.header.cedf684561d925457130839629000a81.rtpl.php:173 |
1121 | msgid "is available" | 999 | msgid "is available" |
1122 | msgstr "est disponible" | 1000 | msgstr "est disponible" |
1123 | 1001 | ||
1124 | #: tmp/page.header.b91ef64efc3688266305ea9b42e5017e.rtpl.php:180 | ||
1125 | #: tmp/page.header.cedf684561d925457130839629000a81.rtpl.php:180 | 1002 | #: tmp/page.header.cedf684561d925457130839629000a81.rtpl.php:180 |
1126 | msgid "Error" | 1003 | msgid "Error" |
1127 | msgstr "Erreur" | 1004 | msgstr "Erreur" |
@@ -1221,22 +1098,18 @@ msgstr "tags" | |||
1221 | msgid "List all links with those tags" | 1098 | msgid "List all links with those tags" |
1222 | msgstr "Lister tous les liens avec ces tags" | 1099 | msgstr "Lister tous les liens avec ces tags" |
1223 | 1100 | ||
1224 | #: tmp/tag.sort.b91ef64efc3688266305ea9b42e5017e.rtpl.php:3 | ||
1225 | #: tmp/tag.sort.cedf684561d925457130839629000a81.rtpl.php:3 | 1101 | #: tmp/tag.sort.cedf684561d925457130839629000a81.rtpl.php:3 |
1226 | msgid "Sort by:" | 1102 | msgid "Sort by:" |
1227 | msgstr "Trier par :" | 1103 | msgstr "Trier par :" |
1228 | 1104 | ||
1229 | #: tmp/tag.sort.b91ef64efc3688266305ea9b42e5017e.rtpl.php:5 | ||
1230 | #: tmp/tag.sort.cedf684561d925457130839629000a81.rtpl.php:5 | 1105 | #: tmp/tag.sort.cedf684561d925457130839629000a81.rtpl.php:5 |
1231 | msgid "Cloud" | 1106 | msgid "Cloud" |
1232 | msgstr "Nuage" | 1107 | msgstr "Nuage" |
1233 | 1108 | ||
1234 | #: tmp/tag.sort.b91ef64efc3688266305ea9b42e5017e.rtpl.php:6 | ||
1235 | #: tmp/tag.sort.cedf684561d925457130839629000a81.rtpl.php:6 | 1109 | #: tmp/tag.sort.cedf684561d925457130839629000a81.rtpl.php:6 |
1236 | msgid "Most used" | 1110 | msgid "Most used" |
1237 | msgstr "Plus utilisés" | 1111 | msgstr "Plus utilisés" |
1238 | 1112 | ||
1239 | #: tmp/tag.sort.b91ef64efc3688266305ea9b42e5017e.rtpl.php:7 | ||
1240 | #: tmp/tag.sort.cedf684561d925457130839629000a81.rtpl.php:7 | 1113 | #: tmp/tag.sort.cedf684561d925457130839629000a81.rtpl.php:7 |
1241 | msgid "Alphabetical" | 1114 | msgid "Alphabetical" |
1242 | msgstr "Alphabétique" | 1115 | msgstr "Alphabétique" |
@@ -1251,7 +1124,7 @@ msgstr "Changer les paramètres de Shaarli : titre, fuseau horaire, etc." | |||
1251 | 1124 | ||
1252 | #: tmp/tools.b91ef64efc3688266305ea9b42e5017e.rtpl.php:17 | 1125 | #: tmp/tools.b91ef64efc3688266305ea9b42e5017e.rtpl.php:17 |
1253 | msgid "Configure your Shaarli" | 1126 | msgid "Configure your Shaarli" |
1254 | msgstr "Conguration de Shaarli" | 1127 | msgstr "Configurer Shaarli" |
1255 | 1128 | ||
1256 | #: tmp/tools.b91ef64efc3688266305ea9b42e5017e.rtpl.php:21 | 1129 | #: tmp/tools.b91ef64efc3688266305ea9b42e5017e.rtpl.php:21 |
1257 | msgid "Enable, disable and configure plugins" | 1130 | msgid "Enable, disable and configure plugins" |
@@ -1259,31 +1132,39 @@ msgstr "Activer, désactiver et configurer les extensions" | |||
1259 | 1132 | ||
1260 | #: tmp/tools.b91ef64efc3688266305ea9b42e5017e.rtpl.php:28 | 1133 | #: tmp/tools.b91ef64efc3688266305ea9b42e5017e.rtpl.php:28 |
1261 | msgid "Change your password" | 1134 | msgid "Change your password" |
1262 | msgstr "Modification du mot de passe" | 1135 | msgstr "Modifier le mot de passe" |
1263 | 1136 | ||
1264 | #: tmp/tools.b91ef64efc3688266305ea9b42e5017e.rtpl.php:35 | 1137 | #: tmp/tools.b91ef64efc3688266305ea9b42e5017e.rtpl.php:35 |
1265 | msgid "Rename or delete a tag in all links" | 1138 | msgid "Rename or delete a tag in all links" |
1266 | msgstr "Rename or delete a tag in all links" | 1139 | msgstr "Renommer ou supprimer un tag dans tous les liens" |
1267 | 1140 | ||
1268 | #: tmp/tools.b91ef64efc3688266305ea9b42e5017e.rtpl.php:41 | 1141 | #: tmp/tools.b91ef64efc3688266305ea9b42e5017e.rtpl.php:41 |
1142 | #, fuzzy | ||
1143 | #| msgid "" | ||
1144 | #| "Import Netscape HTML bookmarks (as exported from Firefox, Chrome, Opera, " | ||
1145 | #| "delicious…)" | ||
1269 | msgid "" | 1146 | msgid "" |
1270 | "Import Netscape HTML bookmarks (as exported from Firefox, Chrome, Opera, " | 1147 | "Import Netscape HTML bookmarks (as exported from Firefox, Chrome, Opera, " |
1271 | "delicious...)" | 1148 | "delicious...)" |
1272 | msgstr "" | 1149 | msgstr "" |
1273 | "Importer des marques pages au format Netscape HTML (comme exportés depuis " | 1150 | "Importer des marques pages au format Netscape HTML (comme exportés depuis " |
1274 | "Firefox, Chrome, Opera, delicious...)" | 1151 | "Firefox, Chrome, Opera, delicious…)" |
1275 | 1152 | ||
1276 | #: tmp/tools.b91ef64efc3688266305ea9b42e5017e.rtpl.php:42 | 1153 | #: tmp/tools.b91ef64efc3688266305ea9b42e5017e.rtpl.php:42 |
1277 | msgid "Import links" | 1154 | msgid "Import links" |
1278 | msgstr "Importer des liens" | 1155 | msgstr "Importer des liens" |
1279 | 1156 | ||
1280 | #: tmp/tools.b91ef64efc3688266305ea9b42e5017e.rtpl.php:47 | 1157 | #: tmp/tools.b91ef64efc3688266305ea9b42e5017e.rtpl.php:47 |
1158 | #, fuzzy | ||
1159 | #| msgid "" | ||
1160 | #| "Export Netscape HTML bookmarks (which can be imported in Firefox, Chrome, " | ||
1161 | #| "Opera, delicious…)" | ||
1281 | msgid "" | 1162 | msgid "" |
1282 | "Export Netscape HTML bookmarks (which can be imported in Firefox, Chrome, " | 1163 | "Export Netscape HTML bookmarks (which can be imported in Firefox, Chrome, " |
1283 | "Opera, delicious...)" | 1164 | "Opera, delicious...)" |
1284 | msgstr "" | 1165 | msgstr "" |
1285 | "Exporter les marques pages au format Netscape HTML (comme exportés depuis " | 1166 | "Exporter les marques pages au format Netscape HTML (comme exportés depuis " |
1286 | "Firefox, Chrome, Opera, delicious...)" | 1167 | "Firefox, Chrome, Opera, delicious…)" |
1287 | 1168 | ||
1288 | #: tmp/tools.b91ef64efc3688266305ea9b42e5017e.rtpl.php:48 | 1169 | #: tmp/tools.b91ef64efc3688266305ea9b42e5017e.rtpl.php:48 |
1289 | msgid "Export database" | 1170 | msgid "Export database" |
@@ -1298,13 +1179,13 @@ msgid "" | |||
1298 | "Drag one of these button to your bookmarks toolbar or right-click it and " | 1179 | "Drag one of these button to your bookmarks toolbar or right-click it and " |
1299 | "\"Bookmark This Link\"" | 1180 | "\"Bookmark This Link\"" |
1300 | msgstr "" | 1181 | msgstr "" |
1301 | "Glisser un de ces bouttons dans votre barre de favoris ou cliquer droit " | 1182 | "Glisser un de ces boutons dans votre barre de favoris ou cliquer droit " |
1302 | "dessus et « Ajouter aux favoris »" | 1183 | "dessus et « Ajouter aux favoris »" |
1303 | 1184 | ||
1304 | #: tmp/tools.b91ef64efc3688266305ea9b42e5017e.rtpl.php:82 | 1185 | #: tmp/tools.b91ef64efc3688266305ea9b42e5017e.rtpl.php:82 |
1305 | msgid "then click on the bookmarklet in any page you want to share." | 1186 | msgid "then click on the bookmarklet in any page you want to share." |
1306 | msgstr "" | 1187 | msgstr "" |
1307 | "puis cliquer sur le marque page depuis un site que vous souhaitez partager." | 1188 | "puis cliquer sur le marque-page depuis un site que vous souhaitez partager." |
1308 | 1189 | ||
1309 | #: tmp/tools.b91ef64efc3688266305ea9b42e5017e.rtpl.php:86 | 1190 | #: tmp/tools.b91ef64efc3688266305ea9b42e5017e.rtpl.php:86 |
1310 | #: tmp/tools.b91ef64efc3688266305ea9b42e5017e.rtpl.php:110 | 1191 | #: tmp/tools.b91ef64efc3688266305ea9b42e5017e.rtpl.php:110 |
@@ -1339,33 +1220,16 @@ msgstr "" | |||
1339 | msgid "Add Note" | 1220 | msgid "Add Note" |
1340 | msgstr "Ajouter une Note" | 1221 | msgstr "Ajouter une Note" |
1341 | 1222 | ||
1342 | #: tmp/tools.b91ef64efc3688266305ea9b42e5017e.rtpl.php:139 | 1223 | #: tmp/tools.b91ef64efc3688266305ea9b42e5017e.rtpl.php:136 |
1343 | msgid "" | ||
1344 | "You need to browse your Shaarli over <strong>HTTPS</strong> to use this " | ||
1345 | "functionality." | ||
1346 | msgstr "" | ||
1347 | "Vous devez utiliser Shaarli en <strong>HTTPS</strong> pour utiliser cette " | ||
1348 | "fonctionalité." | ||
1349 | |||
1350 | #: tmp/tools.b91ef64efc3688266305ea9b42e5017e.rtpl.php:144 | ||
1351 | msgid "Add to" | ||
1352 | msgstr "Ajouter à" | ||
1353 | |||
1354 | #: tmp/tools.b91ef64efc3688266305ea9b42e5017e.rtpl.php:155 | ||
1355 | msgid "3rd party" | 1224 | msgid "3rd party" |
1356 | msgstr "Applications tierces" | 1225 | msgstr "Applications tierces" |
1357 | 1226 | ||
1358 | #: tmp/tools.b91ef64efc3688266305ea9b42e5017e.rtpl.php:157 | 1227 | #: tmp/tools.b91ef64efc3688266305ea9b42e5017e.rtpl.php:139 |
1359 | #: tmp/tools.b91ef64efc3688266305ea9b42e5017e.rtpl.php:163 | 1228 | #: tmp/tools.b91ef64efc3688266305ea9b42e5017e.rtpl.php:144 |
1360 | msgid "Plugin" | ||
1361 | msgstr "Extension" | ||
1362 | |||
1363 | #: tmp/tools.b91ef64efc3688266305ea9b42e5017e.rtpl.php:158 | ||
1364 | #: tmp/tools.b91ef64efc3688266305ea9b42e5017e.rtpl.php:164 | ||
1365 | msgid "plugin" | 1229 | msgid "plugin" |
1366 | msgstr "extension" | 1230 | msgstr "extension" |
1367 | 1231 | ||
1368 | #: tmp/tools.b91ef64efc3688266305ea9b42e5017e.rtpl.php:191 | 1232 | #: tmp/tools.b91ef64efc3688266305ea9b42e5017e.rtpl.php:169 |
1369 | msgid "" | 1233 | msgid "" |
1370 | "Drag this link to your bookmarks toolbar, or right-click it and choose " | 1234 | "Drag this link to your bookmarks toolbar, or right-click it and choose " |
1371 | "Bookmark This Link" | 1235 | "Bookmark This Link" |
@@ -1373,10 +1237,91 @@ msgstr "" | |||
1373 | "Glisser ce lien dans votre barre de favoris ou cliquer droit dessus et « " | 1237 | "Glisser ce lien dans votre barre de favoris ou cliquer droit dessus et « " |
1374 | "Ajouter aux favoris »" | 1238 | "Ajouter aux favoris »" |
1375 | 1239 | ||
1376 | #, fuzzy | 1240 | #~ msgid "Sorry, nothing to see here." |
1377 | #~| msgid "Enable thumbnails" | 1241 | #~ msgstr "Désolé, il y a rien à voir ici." |
1378 | #~ msgid "Synchonize thumbnails" | 1242 | |
1379 | #~ msgstr "Activer les miniatures" | 1243 | #~ msgid "Current password" |
1244 | #~ msgstr "Mot de passe actuel" | ||
1245 | |||
1246 | #~ msgid "New password" | ||
1247 | #~ msgstr "Nouveau mot de passe" | ||
1248 | |||
1249 | #~ msgid "Change" | ||
1250 | #~ msgstr "Changer" | ||
1251 | |||
1252 | #~ msgid "Export Database" | ||
1253 | #~ msgstr "Exporter les données" | ||
1254 | |||
1255 | #~ msgid "Selection" | ||
1256 | #~ msgstr "Choisir" | ||
1257 | |||
1258 | #~ msgid "Public" | ||
1259 | #~ msgstr "Publics" | ||
1260 | |||
1261 | #~ msgid "Prepend note permalinks with this Shaarli instance's URL" | ||
1262 | #~ msgstr "Préfixer les liens de note avec l'URL de l'instance de Shaarli" | ||
1263 | |||
1264 | #~ msgid "Useful to import bookmarks in a web browser" | ||
1265 | #~ msgstr "Utile pour importer les marques-pages dans un navigateur" | ||
1266 | |||
1267 | #~ msgid "Import Database" | ||
1268 | #~ msgstr "Importer des données" | ||
1269 | |||
1270 | #~ msgid "Maximum size allowed:" | ||
1271 | #~ msgstr "Taille maximum autorisée :" | ||
1272 | |||
1273 | #~ msgid "Visibility" | ||
1274 | #~ msgstr "Visibilité" | ||
1275 | |||
1276 | #~ msgid "Use values from the imported file, default to public" | ||
1277 | #~ msgstr "" | ||
1278 | #~ "Utiliser les valeurs présentes dans le fichier d'import, public par défaut" | ||
1279 | |||
1280 | #~ msgid "Import all bookmarks as private" | ||
1281 | #~ msgstr "Importer tous les liens comme privés" | ||
1282 | |||
1283 | #~ msgid "Import all bookmarks as public" | ||
1284 | #~ msgstr "Importer tous les liens comme publics" | ||
1285 | |||
1286 | #~ msgid "Overwrite existing bookmarks" | ||
1287 | #~ msgstr "Remplacer les liens existants" | ||
1288 | |||
1289 | #~ msgid "Duplicates based on URL" | ||
1290 | #~ msgstr "Les doublons s'appuient sur les URL" | ||
1291 | |||
1292 | #~ msgid "Add default tags" | ||
1293 | #~ msgstr "Ajouter des tags par défaut" | ||
1294 | |||
1295 | #~ msgid "Install Shaarli" | ||
1296 | #~ msgstr "Installation de Shaarli" | ||
1297 | |||
1298 | #~ msgid "" | ||
1299 | #~ "It looks like it's the first time you run Shaarli. Please configure it." | ||
1300 | #~ msgstr "" | ||
1301 | #~ "Il semblerait que ça soit la première fois que vous lancez Shaarli. Merci " | ||
1302 | #~ "de le configurer." | ||
1303 | |||
1304 | #~ msgid "Shaarli title" | ||
1305 | #~ msgstr "Titre du Shaarli" | ||
1306 | |||
1307 | #~ msgid "My links" | ||
1308 | #~ msgstr "Mes liens" | ||
1309 | |||
1310 | #~ msgid "Install" | ||
1311 | #~ msgstr "Installer" | ||
1312 | |||
1313 | #~ msgid "" | ||
1314 | #~ "You need to browse your Shaarli over <strong>HTTPS</strong> to use this " | ||
1315 | #~ "functionality." | ||
1316 | #~ msgstr "" | ||
1317 | #~ "Vous devez utiliser Shaarli en <strong>HTTPS</strong> pour utiliser cette " | ||
1318 | #~ "fonctionalité." | ||
1319 | |||
1320 | #~ msgid "Add to" | ||
1321 | #~ msgstr "Ajouter à" | ||
1322 | |||
1323 | #~ msgid "Plugin" | ||
1324 | #~ msgstr "Extension" | ||
1380 | 1325 | ||
1381 | #~ msgid "Warning: " | 1326 | #~ msgid "Warning: " |
1382 | #~ msgstr "Attention : " | 1327 | #~ msgstr "Attention : " |
@@ -1450,7 +1395,8 @@ msgstr "" | |||
1450 | #~ "\n" | 1395 | #~ "\n" |
1451 | 1396 | ||
1452 | #~ msgid "Sessions do not seem to work correctly on your server." | 1397 | #~ msgid "Sessions do not seem to work correctly on your server." |
1453 | #~ msgstr "Les sessions ne semblent " | 1398 | #~ msgstr "" |
1399 | #~ "Les sessions ne semblent pas fonctionner correctement sur votre serveur." | ||
1454 | 1400 | ||
1455 | #~ msgid "Tag was renamed in " | 1401 | #~ msgid "Tag was renamed in " |
1456 | #~ msgstr "Le tag a été renommé dans " | 1402 | #~ msgstr "Le tag a été renommé dans " |
@@ -356,7 +356,6 @@ function showDailyRSS($conf, $loginManager) { | |||
356 | $conf->get('redirector.url'), | 356 | $conf->get('redirector.url'), |
357 | $conf->get('redirector.encode_url') | 357 | $conf->get('redirector.encode_url') |
358 | ); | 358 | ); |
359 | $link['thumbnail'] = thumbnail($conf, $link['url']); | ||
360 | $link['timestamp'] = $link['created']->getTimestamp(); | 359 | $link['timestamp'] = $link['created']->getTimestamp(); |
361 | if (startsWith($link['url'], '?')) { | 360 | if (startsWith($link['url'], '?')) { |
362 | $link['url'] = index_url($_SERVER) . $link['url']; // make permalink URL absolute | 361 | $link['url'] = index_url($_SERVER) . $link['url']; // make permalink URL absolute |
@@ -371,6 +370,7 @@ function showDailyRSS($conf, $loginManager) { | |||
371 | $tpl->assign('links', $links); | 370 | $tpl->assign('links', $links); |
372 | $tpl->assign('rssdate', escape($dayDate->format(DateTime::RSS))); | 371 | $tpl->assign('rssdate', escape($dayDate->format(DateTime::RSS))); |
373 | $tpl->assign('hide_timestamps', $conf->get('privacy.hide_timestamps', false)); | 372 | $tpl->assign('hide_timestamps', $conf->get('privacy.hide_timestamps', false)); |
373 | $tpl->assign('index_url', $pageaddr); | ||
374 | $html = $tpl->draw('dailyrss', true); | 374 | $html = $tpl->draw('dailyrss', true); |
375 | 375 | ||
376 | echo $html . PHP_EOL; | 376 | echo $html . PHP_EOL; |
@@ -433,7 +433,6 @@ function showDaily($pageBuilder, $LINKSDB, $conf, $pluginManager, $loginManager) | |||
433 | $conf->get('redirector.url'), | 433 | $conf->get('redirector.url'), |
434 | $conf->get('redirector.encode_url') | 434 | $conf->get('redirector.encode_url') |
435 | ); | 435 | ); |
436 | $linksToDisplay[$key]['thumbnail'] = thumbnail($conf, $link['url']); | ||
437 | $linksToDisplay[$key]['timestamp'] = $link['created']->getTimestamp(); | 436 | $linksToDisplay[$key]['timestamp'] = $link['created']->getTimestamp(); |
438 | } | 437 | } |
439 | 438 | ||
@@ -1085,7 +1084,8 @@ function renderPage($conf, $pluginManager, $LINKSDB, $history, $sessionManager, | |||
1085 | die(t('Wrong token.')); | 1084 | die(t('Wrong token.')); |
1086 | } | 1085 | } |
1087 | 1086 | ||
1088 | $alteredLinks = $LINKSDB->renameTag(escape($_POST['fromtag']), escape($_POST['totag'])); | 1087 | $toTag = isset($_POST['totag']) ? escape($_POST['totag']) : null; |
1088 | $alteredLinks = $LINKSDB->renameTag(escape($_POST['fromtag']), $toTag); | ||
1089 | $LINKSDB->save($conf->get('resource.page_cache')); | 1089 | $LINKSDB->save($conf->get('resource.page_cache')); |
1090 | foreach ($alteredLinks as $link) { | 1090 | foreach ($alteredLinks as $link) { |
1091 | $history->updateLink($link); | 1091 | $history->updateLink($link); |
@@ -1237,10 +1237,10 @@ function renderPage($conf, $pluginManager, $LINKSDB, $history, $sessionManager, | |||
1237 | $id = (int) escape($id); | 1237 | $id = (int) escape($id); |
1238 | $link = $LINKSDB[$id]; | 1238 | $link = $LINKSDB[$id]; |
1239 | $pluginManager->executeHooks('delete_link', $link); | 1239 | $pluginManager->executeHooks('delete_link', $link); |
1240 | $history->deleteLink($link); | ||
1240 | unset($LINKSDB[$id]); | 1241 | unset($LINKSDB[$id]); |
1241 | } | 1242 | } |
1242 | $LINKSDB->save($conf->get('resource.page_cache')); // save to disk | 1243 | $LINKSDB->save($conf->get('resource.page_cache')); // save to disk |
1243 | $history->deleteLink($link); | ||
1244 | 1244 | ||
1245 | // If we are called from the bookmarklet, we must close the popup: | 1245 | // If we are called from the bookmarklet, we must close the popup: |
1246 | if (isset($_GET['source']) && ($_GET['source']=='bookmarklet' || $_GET['source']=='firefoxsocialapi')) { echo '<script>self.close();</script>'; exit; } | 1246 | if (isset($_GET['source']) && ($_GET['source']=='bookmarklet' || $_GET['source']=='firefoxsocialapi')) { echo '<script>self.close();</script>'; exit; } |
@@ -1353,6 +1353,25 @@ function renderPage($conf, $pluginManager, $LINKSDB, $history, $sessionManager, | |||
1353 | exit; | 1353 | exit; |
1354 | } | 1354 | } |
1355 | 1355 | ||
1356 | if ($targetPage == Router::$PAGE_PINLINK) { | ||
1357 | if (! isset($_GET['id']) || empty($LINKSDB[$_GET['id']])) { | ||
1358 | // FIXME! Use a proper error system. | ||
1359 | $msg = t('Invalid link ID provided'); | ||
1360 | echo '<script>alert("'. $msg .'");document.location=\''. index_url($_SERVER) .'\';</script>'; | ||
1361 | exit; | ||
1362 | } | ||
1363 | if (! $sessionManager->checkToken($_GET['token'])) { | ||
1364 | die('Wrong token.'); | ||
1365 | } | ||
1366 | |||
1367 | $link = $LINKSDB[$_GET['id']]; | ||
1368 | $link['sticky'] = ! $link['sticky']; | ||
1369 | $LINKSDB[(int) $_GET['id']] = $link; | ||
1370 | $LINKSDB->save($conf->get('resource.page_cache')); | ||
1371 | header('Location: '.index_url($_SERVER)); | ||
1372 | exit; | ||
1373 | } | ||
1374 | |||
1356 | if ($targetPage == Router::$PAGE_EXPORT) { | 1375 | if ($targetPage == Router::$PAGE_EXPORT) { |
1357 | // Export links as a Netscape Bookmarks file | 1376 | // Export links as a Netscape Bookmarks file |
1358 | 1377 | ||
@@ -1636,9 +1655,9 @@ function buildLinkList($PAGE, $LINKSDB, $conf, $pluginManager, $loginManager) | |||
1636 | uasort($taglist, 'strcasecmp'); | 1655 | uasort($taglist, 'strcasecmp'); |
1637 | $link['taglist'] = $taglist; | 1656 | $link['taglist'] = $taglist; |
1638 | 1657 | ||
1639 | // Thumbnails enabled, not a note, | 1658 | // Logged in, thumbnails enabled, not a note, |
1640 | // and (never retrieved yet or no valid cache file) | 1659 | // and (never retrieved yet or no valid cache file) |
1641 | if ($thumbnailsEnabled && $link['url'][0] != '?' | 1660 | if ($loginManager->isLoggedIn() && $thumbnailsEnabled && $link['url'][0] != '?' |
1642 | && (! isset($link['thumbnail']) || ($link['thumbnail'] !== false && ! is_file($link['thumbnail']))) | 1661 | && (! isset($link['thumbnail']) || ($link['thumbnail'] !== false && ! is_file($link['thumbnail']))) |
1643 | ) { | 1662 | ) { |
1644 | $elem = $LINKSDB[$keys[$i]]; | 1663 | $elem = $LINKSDB[$keys[$i]]; |
@@ -1812,7 +1831,11 @@ function install($conf, $sessionManager, $loginManager) { | |||
1812 | exit; | 1831 | exit; |
1813 | } | 1832 | } |
1814 | 1833 | ||
1815 | if (isset($_SERVER['QUERY_STRING']) && startsWith($_SERVER['QUERY_STRING'], 'do=dailyrss')) { showDailyRSS($conf); exit; } | 1834 | if (isset($_SERVER['QUERY_STRING']) && startsWith($_SERVER['QUERY_STRING'], 'do=dailyrss')) { |
1835 | showDailyRSS($conf, $loginManager); | ||
1836 | exit; | ||
1837 | } | ||
1838 | |||
1816 | if (!isset($_SESSION['LINKS_PER_PAGE'])) { | 1839 | if (!isset($_SESSION['LINKS_PER_PAGE'])) { |
1817 | $_SESSION['LINKS_PER_PAGE'] = $conf->get('general.links_per_page', 20); | 1840 | $_SESSION['LINKS_PER_PAGE'] = $conf->get('general.links_per_page', 20); |
1818 | } | 1841 | } |
@@ -1855,6 +1878,7 @@ $app->group('/api/v1', function() { | |||
1855 | })->add('\Shaarli\Api\ApiMiddleware'); | 1878 | })->add('\Shaarli\Api\ApiMiddleware'); |
1856 | 1879 | ||
1857 | $response = $app->run(true); | 1880 | $response = $app->run(true); |
1881 | |||
1858 | // Hack to make Slim and Shaarli router work together: | 1882 | // Hack to make Slim and Shaarli router work together: |
1859 | // If a Slim route isn't found and NOT API call, we call renderPage(). | 1883 | // If a Slim route isn't found and NOT API call, we call renderPage(). |
1860 | if ($response->getStatusCode() == 404 && strpos($_SERVER['REQUEST_URI'], '/api/v1') === false) { | 1884 | if ($response->getStatusCode() == 404 && strpos($_SERVER['REQUEST_URI'], '/api/v1') === false) { |
@@ -1862,5 +1886,12 @@ if ($response->getStatusCode() == 404 && strpos($_SERVER['REQUEST_URI'], '/api/v | |||
1862 | header('Content-Type: text/html; charset=utf-8'); | 1886 | header('Content-Type: text/html; charset=utf-8'); |
1863 | renderPage($conf, $pluginManager, $linkDb, $history, $sessionManager, $loginManager); | 1887 | renderPage($conf, $pluginManager, $linkDb, $history, $sessionManager, $loginManager); |
1864 | } else { | 1888 | } else { |
1889 | $response = $response | ||
1890 | ->withHeader('Access-Control-Allow-Origin', '*') | ||
1891 | ->withHeader( | ||
1892 | 'Access-Control-Allow-Headers', | ||
1893 | 'X-Requested-With, Content-Type, Accept, Origin, Authorization' | ||
1894 | ) | ||
1895 | ->withHeader('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS'); | ||
1865 | $app->respond($response); | 1896 | $app->respond($response); |
1866 | } | 1897 | } |
@@ -2,7 +2,9 @@ site_name: Shaarli Documentation | |||
2 | repo_url: https://github.com/shaarli/Shaarli | 2 | repo_url: https://github.com/shaarli/Shaarli |
3 | edit_uri: edit/master/doc/md | 3 | edit_uri: edit/master/doc/md |
4 | site_description: The personal, minimalist, super-fast, database free, bookmarking service | 4 | site_description: The personal, minimalist, super-fast, database free, bookmarking service |
5 | theme: readthedocs | 5 | theme: |
6 | name: readthedocs | ||
7 | custom_dir: doc/custom_theme/ | ||
6 | docs_dir: doc/md | 8 | docs_dir: doc/md |
7 | site_dir: doc/html | 9 | site_dir: doc/html |
8 | # Disable strict mode until ReadTheDocs provides up-to-date MkDocs settings: | 10 | # Disable strict mode until ReadTheDocs provides up-to-date MkDocs settings: |
diff --git a/plugins/isso/comment.png b/plugins/isso/comment.png new file mode 100644 index 00000000..0158c03b --- /dev/null +++ b/plugins/isso/comment.png | |||
Binary files differ | |||
diff --git a/plugins/isso/isso.php b/plugins/isso/isso.php index 5bc1cce2..378c11af 100644 --- a/plugins/isso/isso.php +++ b/plugins/isso/isso.php | |||
@@ -46,9 +46,36 @@ function hook_isso_render_linklist($data, $conf) | |||
46 | 46 | ||
47 | $isso = sprintf($issoHtml, $issoUrl, $issoUrl, $link['id'], $link['id']); | 47 | $isso = sprintf($issoHtml, $issoUrl, $issoUrl, $link['id'], $link['id']); |
48 | $data['plugin_end_zone'][] = $isso; | 48 | $data['plugin_end_zone'][] = $isso; |
49 | } else { | ||
50 | $button = '<span><a href="?%s#isso-thread">'; | ||
51 | // For the default theme we use a FontAwesome icon which is better than an image | ||
52 | if ($conf->get('resource.theme') === 'default') { | ||
53 | $button .= '<i class="linklist-plugin-icon fa fa-comment"></i>'; | ||
54 | } else { | ||
55 | $button .= '<img class="linklist-plugin-icon" src="plugins/isso/comment.png" '; | ||
56 | $button .= 'title="Comment on this shaare" alt="Comments" />'; | ||
57 | } | ||
58 | $button .= '</a></span>'; | ||
59 | foreach ($data['links'] as &$value) { | ||
60 | $commentLink = sprintf($button, $value['shorturl']); | ||
61 | $value['link_plugin'][] = $commentLink; | ||
62 | } | ||
63 | } | ||
49 | 64 | ||
50 | // Hackish way to include this CSS file only when necessary. | 65 | return $data; |
51 | $data['plugins_includes']['css_files'][] = PluginManager::$PLUGINS_PATH . '/isso/isso.css'; | 66 | } |
67 | |||
68 | /** | ||
69 | * When linklist is displayed, include isso CSS file. | ||
70 | * | ||
71 | * @param array $data - header data. | ||
72 | * | ||
73 | * @return mixed - header data with isso CSS file added. | ||
74 | */ | ||
75 | function hook_isso_render_includes($data) | ||
76 | { | ||
77 | if ($data['_PAGE_'] == Router::$PAGE_LINKLIST) { | ||
78 | $data['css_files'][] = PluginManager::$PLUGINS_PATH . '/isso/isso.css'; | ||
52 | } | 79 | } |
53 | 80 | ||
54 | return $data; | 81 | return $data; |
diff --git a/plugins/isso/isso_button.html b/plugins/isso/isso_button.html new file mode 100644 index 00000000..3f828480 --- /dev/null +++ b/plugins/isso/isso_button.html | |||
@@ -0,0 +1,5 @@ | |||
1 | <span> | ||
2 | <a href="?%s#isso-thread"> | ||
3 | <img class="linklist-plugin-icon" src="plugins/archiveorg/internetarchive.png" title="%s" alt="archive.org" /> | ||
4 | </a> | ||
5 | </span> | ||
diff --git a/plugins/markdown/markdown.php b/plugins/markdown/markdown.php index d4fb1f76..08e64dae 100644 --- a/plugins/markdown/markdown.php +++ b/plugins/markdown/markdown.php | |||
@@ -216,6 +216,15 @@ function reverse_text2clickable($description) | |||
216 | $descriptionLine | 216 | $descriptionLine |
217 | ); | 217 | ); |
218 | 218 | ||
219 | // Make hashtag links markdown ready, otherwise the links will be ignored with escape set to true | ||
220 | if (!$codeBlockOn && !$codeLineOn) { | ||
221 | $descriptionLine = preg_replace( | ||
222 | '#<a href="([^ ]*)"'. $hashtagTitle .'>([^<]+)</a>#m', | ||
223 | '[$2]($1)', | ||
224 | $descriptionLine | ||
225 | ); | ||
226 | } | ||
227 | |||
219 | $descriptionOut .= $descriptionLine; | 228 | $descriptionOut .= $descriptionLine; |
220 | if ($lineCount++ < count($descriptionLines) - 1) { | 229 | if ($lineCount++ < count($descriptionLines) - 1) { |
221 | $descriptionOut .= PHP_EOL; | 230 | $descriptionOut .= PHP_EOL; |
diff --git a/tests/FeedBuilderTest.php b/tests/FeedBuilderTest.php index a590306d..4ca58e5a 100644 --- a/tests/FeedBuilderTest.php +++ b/tests/FeedBuilderTest.php | |||
@@ -82,8 +82,8 @@ class FeedBuilderTest extends PHPUnit_Framework_TestCase | |||
82 | $this->assertFalse($data['usepermalinks']); | 82 | $this->assertFalse($data['usepermalinks']); |
83 | $this->assertEquals(ReferenceLinkDB::$NB_LINKS_TOTAL, count($data['links'])); | 83 | $this->assertEquals(ReferenceLinkDB::$NB_LINKS_TOTAL, count($data['links'])); |
84 | 84 | ||
85 | // Test first link (note link) | 85 | // Test first not pinned link (note link) |
86 | $link = reset($data['links']); | 86 | $link = $data['links'][array_keys($data['links'])[2]]; |
87 | $this->assertEquals(41, $link['id']); | 87 | $this->assertEquals(41, $link['id']); |
88 | $this->assertEquals(DateTime::createFromFormat(LinkDB::LINK_DATE_FORMAT, '20150310_114651'), $link['created']); | 88 | $this->assertEquals(DateTime::createFromFormat(LinkDB::LINK_DATE_FORMAT, '20150310_114651'), $link['created']); |
89 | $this->assertEquals('http://host.tld/?WDWyig', $link['guid']); | 89 | $this->assertEquals('http://host.tld/?WDWyig', $link['guid']); |
@@ -119,7 +119,7 @@ class FeedBuilderTest extends PHPUnit_Framework_TestCase | |||
119 | $data = $feedBuilder->buildData(); | 119 | $data = $feedBuilder->buildData(); |
120 | $this->assertEquals(ReferenceLinkDB::$NB_LINKS_TOTAL, count($data['links'])); | 120 | $this->assertEquals(ReferenceLinkDB::$NB_LINKS_TOTAL, count($data['links'])); |
121 | $this->assertRegExp('/2016-08-03T09:30:33\+\d{2}:\d{2}/', $data['last_update']); | 121 | $this->assertRegExp('/2016-08-03T09:30:33\+\d{2}:\d{2}/', $data['last_update']); |
122 | $link = reset($data['links']); | 122 | $link = $data['links'][array_keys($data['links'])[2]]; |
123 | $this->assertRegExp('/2015-03-10T11:46:51\+\d{2}:\d{2}/', $link['pub_iso_date']); | 123 | $this->assertRegExp('/2015-03-10T11:46:51\+\d{2}:\d{2}/', $link['pub_iso_date']); |
124 | $this->assertRegExp('/2016-08-03T09:30:33\+\d{2}:\d{2}/', $data['links'][8]['up_iso_date']); | 124 | $this->assertRegExp('/2016-08-03T09:30:33\+\d{2}:\d{2}/', $data['links'][8]['up_iso_date']); |
125 | } | 125 | } |
@@ -148,13 +148,13 @@ class FeedBuilderTest extends PHPUnit_Framework_TestCase | |||
148 | public function testBuildDataCount() | 148 | public function testBuildDataCount() |
149 | { | 149 | { |
150 | $criteria = array( | 150 | $criteria = array( |
151 | 'nb' => '1', | 151 | 'nb' => '3', |
152 | ); | 152 | ); |
153 | $feedBuilder = new FeedBuilder(self::$linkDB, FeedBuilder::$FEED_ATOM, self::$serverInfo, $criteria, false); | 153 | $feedBuilder = new FeedBuilder(self::$linkDB, FeedBuilder::$FEED_ATOM, self::$serverInfo, $criteria, false); |
154 | $feedBuilder->setLocale(self::$LOCALE); | 154 | $feedBuilder->setLocale(self::$LOCALE); |
155 | $data = $feedBuilder->buildData(); | 155 | $data = $feedBuilder->buildData(); |
156 | $this->assertEquals(1, count($data['links'])); | 156 | $this->assertEquals(3, count($data['links'])); |
157 | $link = array_shift($data['links']); | 157 | $link = $data['links'][array_keys($data['links'])[2]]; |
158 | $this->assertEquals(41, $link['id']); | 158 | $this->assertEquals(41, $link['id']); |
159 | $this->assertEquals(DateTime::createFromFormat(LinkDB::LINK_DATE_FORMAT, '20150310_114651'), $link['created']); | 159 | $this->assertEquals(DateTime::createFromFormat(LinkDB::LINK_DATE_FORMAT, '20150310_114651'), $link['created']); |
160 | } | 160 | } |
@@ -171,7 +171,7 @@ class FeedBuilderTest extends PHPUnit_Framework_TestCase | |||
171 | $this->assertEquals(ReferenceLinkDB::$NB_LINKS_TOTAL, count($data['links'])); | 171 | $this->assertEquals(ReferenceLinkDB::$NB_LINKS_TOTAL, count($data['links'])); |
172 | $this->assertTrue($data['usepermalinks']); | 172 | $this->assertTrue($data['usepermalinks']); |
173 | // First link is a permalink | 173 | // First link is a permalink |
174 | $link = array_shift($data['links']); | 174 | $link = $data['links'][array_keys($data['links'])[2]]; |
175 | $this->assertEquals(41, $link['id']); | 175 | $this->assertEquals(41, $link['id']); |
176 | $this->assertEquals(DateTime::createFromFormat(LinkDB::LINK_DATE_FORMAT, '20150310_114651'), $link['created']); | 176 | $this->assertEquals(DateTime::createFromFormat(LinkDB::LINK_DATE_FORMAT, '20150310_114651'), $link['created']); |
177 | $this->assertEquals('http://host.tld/?WDWyig', $link['guid']); | 177 | $this->assertEquals('http://host.tld/?WDWyig', $link['guid']); |
@@ -179,7 +179,7 @@ class FeedBuilderTest extends PHPUnit_Framework_TestCase | |||
179 | $this->assertContains('Direct link', $link['description']); | 179 | $this->assertContains('Direct link', $link['description']); |
180 | $this->assertContains('http://host.tld/?WDWyig', $link['description']); | 180 | $this->assertContains('http://host.tld/?WDWyig', $link['description']); |
181 | // Second link is a direct link | 181 | // Second link is a direct link |
182 | $link = array_shift($data['links']); | 182 | $link = $data['links'][array_keys($data['links'])[3]]; |
183 | $this->assertEquals(8, $link['id']); | 183 | $this->assertEquals(8, $link['id']); |
184 | $this->assertEquals(DateTime::createFromFormat(LinkDB::LINK_DATE_FORMAT, '20150310_114633'), $link['created']); | 184 | $this->assertEquals(DateTime::createFromFormat(LinkDB::LINK_DATE_FORMAT, '20150310_114633'), $link['created']); |
185 | $this->assertEquals('http://host.tld/?RttfEw', $link['guid']); | 185 | $this->assertEquals('http://host.tld/?RttfEw', $link['guid']); |
@@ -237,7 +237,7 @@ class FeedBuilderTest extends PHPUnit_Framework_TestCase | |||
237 | ); | 237 | ); |
238 | 238 | ||
239 | // Test first link (note link) | 239 | // Test first link (note link) |
240 | $link = array_shift($data['links']); | 240 | $link = $data['links'][array_keys($data['links'])[2]]; |
241 | $this->assertEquals('http://host.tld:8080/~user/shaarli/?WDWyig', $link['guid']); | 241 | $this->assertEquals('http://host.tld:8080/~user/shaarli/?WDWyig', $link['guid']); |
242 | $this->assertEquals('http://host.tld:8080/~user/shaarli/?WDWyig', $link['url']); | 242 | $this->assertEquals('http://host.tld:8080/~user/shaarli/?WDWyig', $link['url']); |
243 | $this->assertContains('http://host.tld:8080/~user/shaarli/?addtag=hashtag', $link['description']); | 243 | $this->assertContains('http://host.tld:8080/~user/shaarli/?addtag=hashtag', $link['description']); |
diff --git a/tests/LinkDBTest.php b/tests/LinkDBTest.php index 3b980878..fcab76f6 100644 --- a/tests/LinkDBTest.php +++ b/tests/LinkDBTest.php | |||
@@ -239,12 +239,12 @@ class LinkDBTest extends PHPUnit_Framework_TestCase | |||
239 | public function testDays() | 239 | public function testDays() |
240 | { | 240 | { |
241 | $this->assertEquals( | 241 | $this->assertEquals( |
242 | array('20100310', '20121206', '20130614', '20150310'), | 242 | array('20100309', '20100310', '20121206', '20121207', '20130614', '20150310'), |
243 | self::$publicLinkDB->days() | 243 | self::$publicLinkDB->days() |
244 | ); | 244 | ); |
245 | 245 | ||
246 | $this->assertEquals( | 246 | $this->assertEquals( |
247 | array('20100310', '20121206', '20130614', '20141125', '20150310'), | 247 | array('20100309', '20100310', '20121206', '20121207', '20130614', '20141125', '20150310'), |
248 | self::$privateLinkDB->days() | 248 | self::$privateLinkDB->days() |
249 | ); | 249 | ); |
250 | } | 250 | } |
@@ -475,13 +475,15 @@ class LinkDBTest extends PHPUnit_Framework_TestCase | |||
475 | public function testReorderLinksDesc() | 475 | public function testReorderLinksDesc() |
476 | { | 476 | { |
477 | self::$privateLinkDB->reorder('ASC'); | 477 | self::$privateLinkDB->reorder('ASC'); |
478 | $linkIds = array(42, 4, 9, 1, 0, 7, 6, 8, 41); | 478 | $stickyIds = [11, 10]; |
479 | $standardIds = [42, 4, 9, 1, 0, 7, 6, 8, 41]; | ||
480 | $linkIds = array_merge($stickyIds, $standardIds); | ||
479 | $cpt = 0; | 481 | $cpt = 0; |
480 | foreach (self::$privateLinkDB as $key => $value) { | 482 | foreach (self::$privateLinkDB as $key => $value) { |
481 | $this->assertEquals($linkIds[$cpt++], $key); | 483 | $this->assertEquals($linkIds[$cpt++], $key); |
482 | } | 484 | } |
483 | self::$privateLinkDB->reorder('DESC'); | 485 | self::$privateLinkDB->reorder('DESC'); |
484 | $linkIds = array_reverse($linkIds); | 486 | $linkIds = array_merge(array_reverse($stickyIds), array_reverse($standardIds)); |
485 | $cpt = 0; | 487 | $cpt = 0; |
486 | foreach (self::$privateLinkDB as $key => $value) { | 488 | foreach (self::$privateLinkDB as $key => $value) { |
487 | $this->assertEquals($linkIds[$cpt++], $key); | 489 | $this->assertEquals($linkIds[$cpt++], $key); |
diff --git a/tests/NetscapeBookmarkUtils/BookmarkExportTest.php b/tests/NetscapeBookmarkUtils/BookmarkExportTest.php index 6a47bbb9..77fbd5f3 100644 --- a/tests/NetscapeBookmarkUtils/BookmarkExportTest.php +++ b/tests/NetscapeBookmarkUtils/BookmarkExportTest.php | |||
@@ -110,7 +110,7 @@ class BookmarkExportTest extends PHPUnit_Framework_TestCase | |||
110 | $links = NetscapeBookmarkUtils::filterAndFormat(self::$linkDb, 'public', false, ''); | 110 | $links = NetscapeBookmarkUtils::filterAndFormat(self::$linkDb, 'public', false, ''); |
111 | $this->assertEquals( | 111 | $this->assertEquals( |
112 | '?WDWyig', | 112 | '?WDWyig', |
113 | $links[0]['url'] | 113 | $links[2]['url'] |
114 | ); | 114 | ); |
115 | } | 115 | } |
116 | 116 | ||
@@ -128,7 +128,7 @@ class BookmarkExportTest extends PHPUnit_Framework_TestCase | |||
128 | ); | 128 | ); |
129 | $this->assertEquals( | 129 | $this->assertEquals( |
130 | $indexUrl . '?WDWyig', | 130 | $indexUrl . '?WDWyig', |
131 | $links[0]['url'] | 131 | $links[2]['url'] |
132 | ); | 132 | ); |
133 | } | 133 | } |
134 | } | 134 | } |
diff --git a/tests/Updater/UpdaterTest.php b/tests/Updater/UpdaterTest.php index cacee2d2..870f169a 100644 --- a/tests/Updater/UpdaterTest.php +++ b/tests/Updater/UpdaterTest.php | |||
@@ -688,6 +688,7 @@ $GLOBALS[\'privateLinkByDefault\'] = true;'; | |||
688 | } | 688 | } |
689 | 689 | ||
690 | /** | 690 | /** |
691 | <<<<<<< HEAD | ||
691 | * Test updateMethodWebThumbnailer with thumbnails enabled. | 692 | * Test updateMethodWebThumbnailer with thumbnails enabled. |
692 | */ | 693 | */ |
693 | public function testUpdateMethodWebThumbnailerEnabled() | 694 | public function testUpdateMethodWebThumbnailerEnabled() |
@@ -732,4 +733,64 @@ $GLOBALS[\'privateLinkByDefault\'] = true;'; | |||
732 | $this->assertEquals(53, $this->conf->get('thumbnails.height')); | 733 | $this->assertEquals(53, $this->conf->get('thumbnails.height')); |
733 | $this->assertTrue(empty($_SESSION['warnings'])); | 734 | $this->assertTrue(empty($_SESSION['warnings'])); |
734 | } | 735 | } |
736 | |||
737 | /** | ||
738 | * Test updateMethodSetSticky(). | ||
739 | */ | ||
740 | public function testUpdateStickyValid() | ||
741 | { | ||
742 | $blank = [ | ||
743 | 'id' => 1, | ||
744 | 'url' => 'z', | ||
745 | 'title' => '', | ||
746 | 'description' => '', | ||
747 | 'tags' => '', | ||
748 | 'created' => new DateTime(), | ||
749 | ]; | ||
750 | $links = [ | ||
751 | 1 => ['id' => 1] + $blank, | ||
752 | 2 => ['id' => 2] + $blank, | ||
753 | ]; | ||
754 | $refDB = new ReferenceLinkDB(); | ||
755 | $refDB->setLinks($links); | ||
756 | $refDB->write(self::$testDatastore); | ||
757 | $linkDB = new LinkDB(self::$testDatastore, true, false); | ||
758 | |||
759 | $updater = new Updater(array(), $linkDB, $this->conf, true); | ||
760 | $this->assertTrue($updater->updateMethodSetSticky()); | ||
761 | |||
762 | $linkDB = new LinkDB(self::$testDatastore, true, false); | ||
763 | foreach ($linkDB as $link) { | ||
764 | $this->assertFalse($link['sticky']); | ||
765 | } | ||
766 | } | ||
767 | |||
768 | /** | ||
769 | * Test updateMethodSetSticky(). | ||
770 | */ | ||
771 | public function testUpdateStickyNothingToDo() | ||
772 | { | ||
773 | $blank = [ | ||
774 | 'id' => 1, | ||
775 | 'url' => 'z', | ||
776 | 'title' => '', | ||
777 | 'description' => '', | ||
778 | 'tags' => '', | ||
779 | 'created' => new DateTime(), | ||
780 | ]; | ||
781 | $links = [ | ||
782 | 1 => ['id' => 1, 'sticky' => true] + $blank, | ||
783 | 2 => ['id' => 2] + $blank, | ||
784 | ]; | ||
785 | $refDB = new ReferenceLinkDB(); | ||
786 | $refDB->setLinks($links); | ||
787 | $refDB->write(self::$testDatastore); | ||
788 | $linkDB = new LinkDB(self::$testDatastore, true, false); | ||
789 | |||
790 | $updater = new Updater(array(), $linkDB, $this->conf, true); | ||
791 | $this->assertTrue($updater->updateMethodSetSticky()); | ||
792 | |||
793 | $linkDB = new LinkDB(self::$testDatastore, true, false); | ||
794 | $this->assertTrue($linkDB[1]['sticky']); | ||
795 | } | ||
735 | } | 796 | } |
diff --git a/tests/api/controllers/links/GetLinksTest.php b/tests/api/controllers/links/GetLinksTest.php index d22ed3bf..64f02774 100644 --- a/tests/api/controllers/links/GetLinksTest.php +++ b/tests/api/controllers/links/GetLinksTest.php | |||
@@ -95,7 +95,7 @@ class GetLinksTest extends \PHPUnit_Framework_TestCase | |||
95 | $this->assertEquals($this->refDB->countLinks(), count($data)); | 95 | $this->assertEquals($this->refDB->countLinks(), count($data)); |
96 | 96 | ||
97 | // Check order | 97 | // Check order |
98 | $order = [41, 8, 6, 7, 0, 1, 9, 4, 42]; | 98 | $order = [10, 11, 41, 8, 6, 7, 0, 1, 9, 4, 42]; |
99 | $cpt = 0; | 99 | $cpt = 0; |
100 | foreach ($data as $link) { | 100 | foreach ($data as $link) { |
101 | $this->assertEquals(self::NB_FIELDS_LINK, count($link)); | 101 | $this->assertEquals(self::NB_FIELDS_LINK, count($link)); |
@@ -103,7 +103,7 @@ class GetLinksTest extends \PHPUnit_Framework_TestCase | |||
103 | } | 103 | } |
104 | 104 | ||
105 | // Check first element fields | 105 | // Check first element fields |
106 | $first = $data[0]; | 106 | $first = $data[2]; |
107 | $this->assertEquals('http://domain.tld/?WDWyig', $first['url']); | 107 | $this->assertEquals('http://domain.tld/?WDWyig', $first['url']); |
108 | $this->assertEquals('WDWyig', $first['shorturl']); | 108 | $this->assertEquals('WDWyig', $first['shorturl']); |
109 | $this->assertEquals('Link title: @website', $first['title']); | 109 | $this->assertEquals('Link title: @website', $first['title']); |
@@ -120,7 +120,7 @@ class GetLinksTest extends \PHPUnit_Framework_TestCase | |||
120 | $this->assertEmpty($first['updated']); | 120 | $this->assertEmpty($first['updated']); |
121 | 121 | ||
122 | // Multi tags | 122 | // Multi tags |
123 | $link = $data[1]; | 123 | $link = $data[3]; |
124 | $this->assertEquals(7, count($link['tags'])); | 124 | $this->assertEquals(7, count($link['tags'])); |
125 | 125 | ||
126 | // Update date | 126 | // Update date |
@@ -138,7 +138,7 @@ class GetLinksTest extends \PHPUnit_Framework_TestCase | |||
138 | { | 138 | { |
139 | $env = Environment::mock([ | 139 | $env = Environment::mock([ |
140 | 'REQUEST_METHOD' => 'GET', | 140 | 'REQUEST_METHOD' => 'GET', |
141 | 'QUERY_STRING' => 'offset=1&limit=1' | 141 | 'QUERY_STRING' => 'offset=3&limit=1' |
142 | ]); | 142 | ]); |
143 | $request = Request::createFromEnvironment($env); | 143 | $request = Request::createFromEnvironment($env); |
144 | $response = $this->controller->getLinks($request, new Response()); | 144 | $response = $this->controller->getLinks($request, new Response()); |
@@ -164,7 +164,7 @@ class GetLinksTest extends \PHPUnit_Framework_TestCase | |||
164 | $data = json_decode((string) $response->getBody(), true); | 164 | $data = json_decode((string) $response->getBody(), true); |
165 | $this->assertEquals($this->refDB->countLinks(), count($data)); | 165 | $this->assertEquals($this->refDB->countLinks(), count($data)); |
166 | // Check order | 166 | // Check order |
167 | $order = [41, 8, 6, 7, 0, 1, 9, 4, 42]; | 167 | $order = [10, 11, 41, 8, 6, 7, 0, 1, 9, 4, 42]; |
168 | $cpt = 0; | 168 | $cpt = 0; |
169 | foreach ($data as $link) { | 169 | foreach ($data as $link) { |
170 | $this->assertEquals(self::NB_FIELDS_LINK, count($link)); | 170 | $this->assertEquals(self::NB_FIELDS_LINK, count($link)); |
@@ -205,7 +205,8 @@ class GetLinksTest extends \PHPUnit_Framework_TestCase | |||
205 | $this->assertEquals(200, $response->getStatusCode()); | 205 | $this->assertEquals(200, $response->getStatusCode()); |
206 | $data = json_decode((string)$response->getBody(), true); | 206 | $data = json_decode((string)$response->getBody(), true); |
207 | $this->assertEquals($this->refDB->countLinks(), count($data)); | 207 | $this->assertEquals($this->refDB->countLinks(), count($data)); |
208 | $this->assertEquals(41, $data[0]['id']); | 208 | $this->assertEquals(10, $data[0]['id']); |
209 | $this->assertEquals(41, $data[2]['id']); | ||
209 | $this->assertEquals(self::NB_FIELDS_LINK, count($data[0])); | 210 | $this->assertEquals(self::NB_FIELDS_LINK, count($data[0])); |
210 | } | 211 | } |
211 | 212 | ||
@@ -243,7 +244,8 @@ class GetLinksTest extends \PHPUnit_Framework_TestCase | |||
243 | $this->assertEquals(200, $response->getStatusCode()); | 244 | $this->assertEquals(200, $response->getStatusCode()); |
244 | $data = json_decode((string)$response->getBody(), true); | 245 | $data = json_decode((string)$response->getBody(), true); |
245 | $this->assertEquals($this->refDB->countPublicLinks(), count($data)); | 246 | $this->assertEquals($this->refDB->countPublicLinks(), count($data)); |
246 | $this->assertEquals(41, $data[0]['id']); | 247 | $this->assertEquals(10, $data[0]['id']); |
248 | $this->assertEquals(41, $data[2]['id']); | ||
247 | $this->assertEquals(self::NB_FIELDS_LINK, count($data[0])); | 249 | $this->assertEquals(self::NB_FIELDS_LINK, count($data[0])); |
248 | } | 250 | } |
249 | 251 | ||
@@ -413,8 +415,9 @@ class GetLinksTest extends \PHPUnit_Framework_TestCase | |||
413 | $response = $this->controller->getLinks($request, new Response()); | 415 | $response = $this->controller->getLinks($request, new Response()); |
414 | $this->assertEquals(200, $response->getStatusCode()); | 416 | $this->assertEquals(200, $response->getStatusCode()); |
415 | $data = json_decode((string) $response->getBody(), true); | 417 | $data = json_decode((string) $response->getBody(), true); |
416 | $this->assertEquals(9, count($data)); | 418 | $this->assertEquals(\ReferenceLinkDB::$NB_LINKS_TOTAL, count($data)); |
417 | $this->assertEquals(41, $data[0]['id']); | 419 | $this->assertEquals(10, $data[0]['id']); |
420 | $this->assertEquals(41, $data[2]['id']); | ||
418 | 421 | ||
419 | // wildcard: optional ('*' does not need to expand) | 422 | // wildcard: optional ('*' does not need to expand) |
420 | $env = Environment::mock([ | 423 | $env = Environment::mock([ |
diff --git a/tests/plugins/PluginIssoTest.php b/tests/plugins/PluginIssoTest.php index 0ae73183..2c9efbcd 100644 --- a/tests/plugins/PluginIssoTest.php +++ b/tests/plugins/PluginIssoTest.php | |||
@@ -21,7 +21,7 @@ class PluginIssoTest extends PHPUnit_Framework_TestCase | |||
21 | /** | 21 | /** |
22 | * Test Isso init without errors. | 22 | * Test Isso init without errors. |
23 | */ | 23 | */ |
24 | public function testWallabagInitNoError() | 24 | public function testIssoInitNoError() |
25 | { | 25 | { |
26 | $conf = new ConfigManager(''); | 26 | $conf = new ConfigManager(''); |
27 | $conf->set('plugins.ISSO_SERVER', 'value'); | 27 | $conf->set('plugins.ISSO_SERVER', 'value'); |
@@ -32,7 +32,7 @@ class PluginIssoTest extends PHPUnit_Framework_TestCase | |||
32 | /** | 32 | /** |
33 | * Test Isso init with errors. | 33 | * Test Isso init with errors. |
34 | */ | 34 | */ |
35 | public function testWallabagInitError() | 35 | public function testIssoInitError() |
36 | { | 36 | { |
37 | $conf = new ConfigManager(''); | 37 | $conf = new ConfigManager(''); |
38 | $errors = isso_init($conf); | 38 | $errors = isso_init($conf); |
@@ -96,19 +96,22 @@ class PluginIssoTest extends PHPUnit_Framework_TestCase | |||
96 | array( | 96 | array( |
97 | 'id' => 12, | 97 | 'id' => 12, |
98 | 'url' => $str, | 98 | 'url' => $str, |
99 | 'shorturl' => $short1 = 'abcd', | ||
99 | 'created' => DateTime::createFromFormat(LinkDB::LINK_DATE_FORMAT, $date1), | 100 | 'created' => DateTime::createFromFormat(LinkDB::LINK_DATE_FORMAT, $date1), |
100 | ), | 101 | ), |
101 | array( | 102 | array( |
102 | 'id' => 13, | 103 | 'id' => 13, |
103 | 'url' => $str . '2', | 104 | 'url' => $str . '2', |
105 | 'shorturl' => $short2 = 'efgh', | ||
104 | 'created' => DateTime::createFromFormat(LinkDB::LINK_DATE_FORMAT, $date2), | 106 | 'created' => DateTime::createFromFormat(LinkDB::LINK_DATE_FORMAT, $date2), |
105 | ), | 107 | ), |
106 | ) | 108 | ) |
107 | ); | 109 | ); |
108 | 110 | ||
109 | $processed = hook_isso_render_linklist($data, $conf); | 111 | $processed = hook_isso_render_linklist($data, $conf); |
110 | // data shouldn't be altered | 112 | // link_plugin should be added for the icon |
111 | $this->assertEquals($data, $processed); | 113 | $this->assertContains('<a href="?'. $short1 .'#isso-thread">', $processed['links'][0]['link_plugin'][0]); |
114 | $this->assertContains('<a href="?'. $short2 .'#isso-thread">', $processed['links'][1]['link_plugin'][0]); | ||
112 | } | 115 | } |
113 | 116 | ||
114 | /** | 117 | /** |
@@ -127,6 +130,7 @@ class PluginIssoTest extends PHPUnit_Framework_TestCase | |||
127 | array( | 130 | array( |
128 | 'id' => 12, | 131 | 'id' => 12, |
129 | 'url' => $str, | 132 | 'url' => $str, |
133 | 'shorturl' => $short1 = 'abcd', | ||
130 | 'created' => DateTime::createFromFormat(LinkDB::LINK_DATE_FORMAT, $date), | 134 | 'created' => DateTime::createFromFormat(LinkDB::LINK_DATE_FORMAT, $date), |
131 | ) | 135 | ) |
132 | ), | 136 | ), |
@@ -135,8 +139,8 @@ class PluginIssoTest extends PHPUnit_Framework_TestCase | |||
135 | 139 | ||
136 | $processed = hook_isso_render_linklist($data, $conf); | 140 | $processed = hook_isso_render_linklist($data, $conf); |
137 | 141 | ||
138 | // data shouldn't be altered | 142 | // link_plugin should be added for the icon |
139 | $this->assertEquals($data, $processed); | 143 | $this->assertContains('<a href="?'. $short1 .'#isso-thread">', $processed['links'][0]['link_plugin'][0]); |
140 | } | 144 | } |
141 | 145 | ||
142 | /** | 146 | /** |
diff --git a/tests/plugins/PluginMarkdownTest.php b/tests/plugins/PluginMarkdownTest.php index 31c1f8b7..44364b05 100644 --- a/tests/plugins/PluginMarkdownTest.php +++ b/tests/plugins/PluginMarkdownTest.php | |||
@@ -109,6 +109,18 @@ class PluginMarkdownTest extends PHPUnit_Framework_TestCase | |||
109 | } | 109 | } |
110 | 110 | ||
111 | /** | 111 | /** |
112 | * Test reverse_text2clickable(). | ||
113 | */ | ||
114 | public function testReverseText2clickableHashtags() | ||
115 | { | ||
116 | $text = file_get_contents('tests/plugins/resources/hashtags.raw'); | ||
117 | $md = file_get_contents('tests/plugins/resources/hashtags.md'); | ||
118 | $clickableText = hashtag_autolink($text); | ||
119 | $reversedText = reverse_text2clickable($clickableText); | ||
120 | $this->assertEquals($md, $reversedText); | ||
121 | } | ||
122 | |||
123 | /** | ||
112 | * Test reverse_nl2br(). | 124 | * Test reverse_nl2br(). |
113 | */ | 125 | */ |
114 | public function testReverseNl2br() | 126 | public function testReverseNl2br() |
@@ -248,7 +260,7 @@ class PluginMarkdownTest extends PHPUnit_Framework_TestCase | |||
248 | $this->conf->get('security.markdown_escape', true), | 260 | $this->conf->get('security.markdown_escape', true), |
249 | $this->conf->get('security.allowed_protocols') | 261 | $this->conf->get('security.allowed_protocols') |
250 | ); | 262 | ); |
251 | $this->assertEquals($html, $data); | 263 | $this->assertEquals($html, $data . PHP_EOL); |
252 | } | 264 | } |
253 | 265 | ||
254 | /** | 266 | /** |
diff --git a/tests/plugins/resources/hashtags.md b/tests/plugins/resources/hashtags.md new file mode 100644 index 00000000..46326de3 --- /dev/null +++ b/tests/plugins/resources/hashtags.md | |||
@@ -0,0 +1,10 @@ | |||
1 | [#lol](?addtag=lol) | ||
2 | |||
3 | #test | ||
4 | |||
5 | `#test2` | ||
6 | |||
7 | ``` | ||
8 | bla #bli blo | ||
9 | #bla | ||
10 | ``` | ||
diff --git a/tests/plugins/resources/hashtags.raw b/tests/plugins/resources/hashtags.raw new file mode 100644 index 00000000..9d2dc98a --- /dev/null +++ b/tests/plugins/resources/hashtags.raw | |||
@@ -0,0 +1,10 @@ | |||
1 | #lol | ||
2 | |||
3 | #test | ||
4 | |||
5 | `#test2` | ||
6 | |||
7 | ``` | ||
8 | bla #bli blo | ||
9 | #bla | ||
10 | ``` | ||
diff --git a/tests/plugins/resources/markdown.html b/tests/plugins/resources/markdown.html index f1df4e7e..c3460bf7 100644 --- a/tests/plugins/resources/markdown.html +++ b/tests/plugins/resources/markdown.html | |||
@@ -12,11 +12,11 @@ | |||
12 | <li><a href="http://link.tld">two</a></li> | 12 | <li><a href="http://link.tld">two</a></li> |
13 | <li><a href="http://link.tld">three</a></li> | 13 | <li><a href="http://link.tld">three</a></li> |
14 | <li><a href="http://link.tld">four</a></li> | 14 | <li><a href="http://link.tld">four</a></li> |
15 | <li>foo <a href="?addtag=foobar" title="Hashtag foobar">#foobar</a></li> | 15 | <li>foo <a href="?addtag=foobar">#foobar</a></li> |
16 | </ol></li> | 16 | </ol></li> |
17 | </ol> | 17 | </ol> |
18 | <p><a href="?addtag=foobar" title="Hashtag foobar">#foobar</a> foo <code>lol #foo</code> <a href="?addtag=bar" title="Hashtag bar">#bar</a></p> | 18 | <p><a href="?addtag=foobar">#foobar</a> foo <code>lol #foo</code> <a href="?addtag=bar">#bar</a></p> |
19 | <p>fsdfs <a href="http://link.tld">http://link.tld</a> <a href="?addtag=foobar" title="Hashtag foobar">#foobar</a> <code>http://link.tld</code></p> | 19 | <p>fsdfs <a href="http://link.tld">http://link.tld</a> <a href="?addtag=foobar">#foobar</a> <code>http://link.tld</code></p> |
20 | <pre><code>http://link.tld #foobar | 20 | <pre><code>http://link.tld #foobar |
21 | next #foo</code></pre> | 21 | next #foo</code></pre> |
22 | <p>Block:</p> | 22 | <p>Block:</p> |
@@ -30,4 +30,4 @@ next #foo</code></pre> | |||
30 | <a href="ftp://test.tld/path/?query=value#hash">link</a><br /> | 30 | <a href="ftp://test.tld/path/?query=value#hash">link</a><br /> |
31 | <a href="magnet:test.tld/path/?query=value#hash">link</a><br /> | 31 | <a href="magnet:test.tld/path/?query=value#hash">link</a><br /> |
32 | <a href="http://alert('xss')">link</a><br /> | 32 | <a href="http://alert('xss')">link</a><br /> |
33 | <a href="http://test.tld/path/?query=value#hash">link</a></p></div> \ No newline at end of file | 33 | <a href="http://test.tld/path/?query=value#hash">link</a></p></div> |
diff --git a/tests/plugins/resources/markdown.md b/tests/plugins/resources/markdown.md index b8ebd934..9350a8c7 100644 --- a/tests/plugins/resources/markdown.md +++ b/tests/plugins/resources/markdown.md | |||
@@ -31,4 +31,4 @@ lorem ipsum #foobar http://link.tld | |||
31 | [link](ftp://test.tld/path/?query=value#hash) | 31 | [link](ftp://test.tld/path/?query=value#hash) |
32 | [link](magnet:test.tld/path/?query=value#hash) | 32 | [link](magnet:test.tld/path/?query=value#hash) |
33 | [link](javascript:alert('xss')) | 33 | [link](javascript:alert('xss')) |
34 | [link](other://test.tld/path/?query=value#hash) \ No newline at end of file | 34 | [link](other://test.tld/path/?query=value#hash) |
diff --git a/tests/utils/ReferenceLinkDB.php b/tests/utils/ReferenceLinkDB.php index e887aa78..7426ad07 100644 --- a/tests/utils/ReferenceLinkDB.php +++ b/tests/utils/ReferenceLinkDB.php | |||
@@ -4,7 +4,7 @@ | |||
4 | */ | 4 | */ |
5 | class ReferenceLinkDB | 5 | class ReferenceLinkDB |
6 | { | 6 | { |
7 | public static $NB_LINKS_TOTAL = 9; | 7 | public static $NB_LINKS_TOTAL = 11; |
8 | 8 | ||
9 | private $_links = array(); | 9 | private $_links = array(); |
10 | private $_publicCount = 0; | 10 | private $_publicCount = 0; |
@@ -16,6 +16,32 @@ class ReferenceLinkDB | |||
16 | public function __construct() | 16 | public function __construct() |
17 | { | 17 | { |
18 | $this->addLink( | 18 | $this->addLink( |
19 | 11, | ||
20 | 'Pined older', | ||
21 | '?PCRizQ', | ||
22 | 'This is an older pinned link', | ||
23 | 0, | ||
24 | DateTime::createFromFormat(LinkDB::LINK_DATE_FORMAT, '20100309_101010'), | ||
25 | '', | ||
26 | null, | ||
27 | 'PCRizQ', | ||
28 | true | ||
29 | ); | ||
30 | |||
31 | $this->addLink( | ||
32 | 10, | ||
33 | 'Pined', | ||
34 | '?0gCTjQ', | ||
35 | 'This is a pinned link', | ||
36 | 0, | ||
37 | DateTime::createFromFormat(LinkDB::LINK_DATE_FORMAT, '20121207_152312'), | ||
38 | '', | ||
39 | null, | ||
40 | '0gCTjQ', | ||
41 | true | ||
42 | ); | ||
43 | |||
44 | $this->addLink( | ||
19 | 41, | 45 | 41, |
20 | 'Link title: @website', | 46 | 'Link title: @website', |
21 | '?WDWyig', | 47 | '?WDWyig', |
@@ -114,7 +140,17 @@ class ReferenceLinkDB | |||
114 | /** | 140 | /** |
115 | * Adds a new link | 141 | * Adds a new link |
116 | */ | 142 | */ |
117 | protected function addLink($id, $title, $url, $description, $private, $date, $tags, $updated = '', $shorturl = '') | 143 | protected function addLink( |
144 | $id, | ||
145 | $title, | ||
146 | $url, | ||
147 | $description, | ||
148 | $private, | ||
149 | $date, | ||
150 | $tags, | ||
151 | $updated = '', | ||
152 | $shorturl = '', | ||
153 | $pinned = false) | ||
118 | { | 154 | { |
119 | $link = array( | 155 | $link = array( |
120 | 'id' => $id, | 156 | 'id' => $id, |
@@ -126,6 +162,7 @@ class ReferenceLinkDB | |||
126 | 'created' => $date, | 162 | 'created' => $date, |
127 | 'updated' => $updated, | 163 | 'updated' => $updated, |
128 | 'shorturl' => $shorturl ? $shorturl : smallHash($date->format(LinkDB::LINK_DATE_FORMAT) . $id), | 164 | 'shorturl' => $shorturl ? $shorturl : smallHash($date->format(LinkDB::LINK_DATE_FORMAT) . $id), |
165 | 'sticky' => $pinned | ||
129 | ); | 166 | ); |
130 | $this->_links[$id] = $link; | 167 | $this->_links[$id] = $link; |
131 | 168 | ||
@@ -165,6 +202,10 @@ class ReferenceLinkDB | |||
165 | $order = $order === 'ASC' ? -1 : 1; | 202 | $order = $order === 'ASC' ? -1 : 1; |
166 | // Reorder array by dates. | 203 | // Reorder array by dates. |
167 | usort($this->_links, function($a, $b) use ($order) { | 204 | usort($this->_links, function($a, $b) use ($order) { |
205 | if (isset($a['sticky']) && isset($b['sticky']) && $a['sticky'] !== $b['sticky']) { | ||
206 | return $a['sticky'] ? -1 : 1; | ||
207 | } | ||
208 | |||
168 | return $a['created'] < $b['created'] ? 1 * $order : -1 * $order; | 209 | return $a['created'] < $b['created'] ? 1 * $order : -1 * $order; |
169 | }); | 210 | }); |
170 | } | 211 | } |
diff --git a/tpl/default/daily.html b/tpl/default/daily.html index 29d845d5..2c409478 100644 --- a/tpl/default/daily.html +++ b/tpl/default/daily.html | |||
@@ -69,9 +69,12 @@ | |||
69 | </a> | 69 | </a> |
70 | <a href="{$link.real_url}">{$link.title}</a> | 70 | <a href="{$link.real_url}">{$link.title}</a> |
71 | </div> | 71 | </div> |
72 | {$thumb=thumbnail($value.url)} | 72 | {if="$thumbnails_enabled && !empty($link.thumbnail)"} |
73 | {if="$thumb!=false"} | 73 | <div class="daily-entry-thumbnail"> |
74 | <div class="daily-entry-thumbnail">{$thumb}</div> | 74 | <img data-src="{$link.thumbnail}#" class="b-lazy" |
75 | src="" | ||
76 | alt="thumbnail" width="{$thumbnails_width}" height="{$thumbnails_height}" /> | ||
77 | </div> | ||
75 | {/if} | 78 | {/if} |
76 | <div class="daily-entry-description">{$link.formatedDescription}</div> | 79 | <div class="daily-entry-description">{$link.formatedDescription}</div> |
77 | {if="$link.tags"} | 80 | {if="$link.tags"} |
@@ -83,7 +86,7 @@ | |||
83 | {/loop} | 86 | {/loop} |
84 | </div> | 87 | </div> |
85 | {/if} | 88 | {/if} |
86 | <div class="dailyEntryFooter"> | 89 | <div class="dailyEntryFooter clear"> |
87 | {loop="$link.link_plugin"} | 90 | {loop="$link.link_plugin"} |
88 | {$value} | 91 | {$value} |
89 | {/loop} | 92 | {/loop} |
@@ -108,6 +111,7 @@ | |||
108 | </div> | 111 | </div> |
109 | </div> | 112 | </div> |
110 | {include="page.footer"} | 113 | {include="page.footer"} |
114 | <script src="js/thumbnails.min.js?v={$version_hash}"></script> | ||
111 | </body> | 115 | </body> |
112 | </html> | 116 | </html> |
113 | 117 | ||
diff --git a/tpl/default/dailyrss.html b/tpl/default/dailyrss.html index b14a3859..f589b06e 100644 --- a/tpl/default/dailyrss.html +++ b/tpl/default/dailyrss.html | |||
@@ -8,7 +8,7 @@ | |||
8 | <h3><a href="{$value.url}">{$value.title}</a></h3> | 8 | <h3><a href="{$value.url}">{$value.title}</a></h3> |
9 | <small>{if="!$hide_timestamps"}{function="strftime('%c', $value.timestamp)"} - {/if}{if="$value.tags"}{$value.tags}{/if}<br> | 9 | <small>{if="!$hide_timestamps"}{function="strftime('%c', $value.timestamp)"} - {/if}{if="$value.tags"}{$value.tags}{/if}<br> |
10 | {$value.url}</small><br> | 10 | {$value.url}</small><br> |
11 | {if="$value.thumbnail"}{$value.thumbnail}{/if}<br> | 11 | {if="$value.thumbnail"}<img src="{$index_url}{$value.thumbnail}#" alt="thumbnail" />{/if}<br> |
12 | {if="$value.description"}{$value.formatedDescription}{/if} | 12 | {if="$value.description"}{$value.formatedDescription}{/if} |
13 | <br><br><hr> | 13 | <br><br><hr> |
14 | {/loop} | 14 | {/loop} |
diff --git a/tpl/default/linklist.html b/tpl/default/linklist.html index 8ea2ce66..ed78f40a 100644 --- a/tpl/default/linklist.html +++ b/tpl/default/linklist.html | |||
@@ -125,6 +125,8 @@ | |||
125 | {$strPermalink=t('Permalink')} | 125 | {$strPermalink=t('Permalink')} |
126 | {$strPermalinkLc=t('permalink')} | 126 | {$strPermalinkLc=t('permalink')} |
127 | {$strAddTag=t('Add tag')} | 127 | {$strAddTag=t('Add tag')} |
128 | {$strToggleSticky=t('Toggle sticky')} | ||
129 | {$strSticky=t('Sticky')} | ||
128 | {ignore}End of translations{/ignore} | 130 | {ignore}End of translations{/ignore} |
129 | {loop="links"} | 131 | {loop="links"} |
130 | <div class="anchor" id="{$value.shorturl}"></div> | 132 | <div class="anchor" id="{$value.shorturl}"></div> |
@@ -137,7 +139,7 @@ | |||
137 | <a href="{$value.real_url}"> | 139 | <a href="{$value.real_url}"> |
138 | {ignore}RainTPL hack: put the 2 src on two different line to avoid path replace bug{/ignore} | 140 | {ignore}RainTPL hack: put the 2 src on two different line to avoid path replace bug{/ignore} |
139 | <img data-src="{$value.thumbnail}#" class="b-lazy" | 141 | <img data-src="{$value.thumbnail}#" class="b-lazy" |
140 | src="#" | 142 | src="" |
141 | alt="thumbnail" width="{$thumbnails_width}" height="{$thumbnails_height}" /> | 143 | alt="thumbnail" width="{$thumbnails_width}" height="{$thumbnails_height}" /> |
142 | </a> | 144 | </a> |
143 | </div> | 145 | </div> |
@@ -190,7 +192,7 @@ | |||
190 | {if="$is_logged_in"} | 192 | {if="$is_logged_in"} |
191 | <div class="linklist-item-infos-controls-group pure-u-0 pure-u-lg-visible"> | 193 | <div class="linklist-item-infos-controls-group pure-u-0 pure-u-lg-visible"> |
192 | <span class="linklist-item-infos-controls-item ctrl-checkbox"> | 194 | <span class="linklist-item-infos-controls-item ctrl-checkbox"> |
193 | <input type="checkbox" class="delete-checkbox" value="{$value.id}"> | 195 | <input type="checkbox" class="link-checkbox" value="{$value.id}"> |
194 | </span> | 196 | </span> |
195 | <span class="linklist-item-infos-controls-item ctrl-edit"> | 197 | <span class="linklist-item-infos-controls-item ctrl-edit"> |
196 | <a href="?edit_link={$value.id}" title="{$strEdit}"><i class="fa fa-pencil-square-o edit-link"></i></a> | 198 | <a href="?edit_link={$value.id}" title="{$strEdit}"><i class="fa fa-pencil-square-o edit-link"></i></a> |
@@ -201,7 +203,23 @@ | |||
201 | <i class="fa fa-trash"></i> | 203 | <i class="fa fa-trash"></i> |
202 | </a> | 204 | </a> |
203 | </span> | 205 | </span> |
206 | <span class="linklist-item-infos-controls-item ctrl-pin"> | ||
207 | <a href="?do=pin&id={$value.id}&token={$token}" | ||
208 | title="{$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 | </a> | ||
211 | </span> | ||
204 | </div> | 212 | </div> |
213 | {else} | ||
214 | {if="$value.sticky"} | ||
215 | <div class="linklist-item-infos-controls-group pure-u-0 pure-u-lg-visible"> | ||
216 | <span class="linklist-item-infos-controls-item ctrl-pin"> | ||
217 | <span title="{$strSticky}" class="pin-link pinned-link pure-u-0 pure-u-lg-visible"> | ||
218 | <i class="fa fa-thumb-tack"></i> | ||
219 | </span> | ||
220 | </span> | ||
221 | </div> | ||
222 | {/if} | ||
205 | {/if} | 223 | {/if} |
206 | <a href="?{$value.shorturl}" title="{$strPermalink}"> | 224 | <a href="?{$value.shorturl}" title="{$strPermalink}"> |
207 | {if="!$hide_timestamps || $is_logged_in"} | 225 | {if="!$hide_timestamps || $is_logged_in"} |
diff --git a/tpl/default/linklist.paging.html b/tpl/default/linklist.paging.html index 5309e348..fe665a84 100644 --- a/tpl/default/linklist.paging.html +++ b/tpl/default/linklist.paging.html | |||
@@ -16,6 +16,9 @@ | |||
16 | <a href="?untaggedonly" title="{'Filter untagged links'|t}" | 16 | <a href="?untaggedonly" 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"></i></a> |
19 | <a href="#" title="{'Select all'|t}" | ||
20 | class="filter-off select-all-button" | ||
21 | ><i class="fa fa-check-square-o"></i></a> | ||
19 | <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" title="{'Fold all'|t}"> |
20 | <i class="fa fa-chevron-up"></i> | 23 | <i class="fa fa-chevron-up"></i> |
21 | </a> | 24 | </a> |
diff --git a/tpl/default/page.header.html b/tpl/default/page.header.html index fc03404e..3b43a611 100644 --- a/tpl/default/page.header.html +++ b/tpl/default/page.header.html | |||
@@ -2,7 +2,7 @@ | |||
2 | <div class="pure-u-lg-0 pure-u-1"> | 2 | <div class="pure-u-lg-0 pure-u-1"> |
3 | <div class="pure-menu"> | 3 | <div class="pure-menu"> |
4 | <a href="{$titleLink}" class="pure-menu-link shaarli-title" id="shaarli-title-mobile"> | 4 | <a href="{$titleLink}" class="pure-menu-link shaarli-title" id="shaarli-title-mobile"> |
5 | <img src="img/icon.png" width="16" height="16" class="head-logo" alt="logo" /> | 5 | <img src="img/icon.png" width="16" height="16" class="head-logo" alt="" /> |
6 | {$shaarlititle} | 6 | {$shaarlititle} |
7 | </a> | 7 | </a> |
8 | <a href="#" class="menu-toggle" id="menu-toggle"><s class="bar"></s><s class="bar"></s></a> | 8 | <a href="#" class="menu-toggle" id="menu-toggle"><s class="bar"></s><s class="bar"></s></a> |
@@ -13,7 +13,7 @@ | |||
13 | <ul class="pure-menu-list pure-u-lg-5-6 pure-u-1"> | 13 | <ul class="pure-menu-list pure-u-lg-5-6 pure-u-1"> |
14 | <li class="pure-menu-item pure-u-0 pure-u-lg-visible"> | 14 | <li class="pure-menu-item pure-u-0 pure-u-lg-visible"> |
15 | <a href="{$titleLink}" class="pure-menu-link shaarli-title" id="shaarli-title-desktop"> | 15 | <a href="{$titleLink}" class="pure-menu-link shaarli-title" id="shaarli-title-desktop"> |
16 | <img src="img/icon.png" width="16" height="16" class="head-logo" alt="logo" /> | 16 | <img src="img/icon.png" width="16" height="16" class="head-logo" alt="" /> |
17 | {$shaarlititle} | 17 | {$shaarlititle} |
18 | </a> | 18 | </a> |
19 | </li> | 19 | </li> |
diff --git a/tpl/default/picwall.html b/tpl/default/picwall.html index 9a0b10dc..4c325487 100644 --- a/tpl/default/picwall.html +++ b/tpl/default/picwall.html | |||
@@ -37,7 +37,7 @@ | |||
37 | <div class="picwall-pictureframe"> | 37 | <div class="picwall-pictureframe"> |
38 | {ignore}RainTPL hack: put the 2 src on two different line to avoid path replace bug{/ignore} | 38 | {ignore}RainTPL hack: put the 2 src on two different line to avoid path replace bug{/ignore} |
39 | <img data-src="{$value.thumbnail}#" class="b-lazy" | 39 | <img data-src="{$value.thumbnail}#" class="b-lazy" |
40 | src="#" | 40 | src="" |
41 | alt="thumbnail" width="{$thumbnails_width}" height="{$thumbnails_height}" /> | 41 | alt="thumbnail" width="{$thumbnails_width}" height="{$thumbnails_height}" /> |
42 | <a href="{$value.real_url}"><span class="info">{$value.title}</span></a> | 42 | <a href="{$value.real_url}"><span class="info">{$value.title}</span></a> |
43 | {loop="$value.picwall_plugin"} | 43 | {loop="$value.picwall_plugin"} |
diff --git a/tpl/default/tools.html b/tpl/default/tools.html index 6b4d7bec..c9ce1eaf 100644 --- a/tpl/default/tools.html +++ b/tpl/default/tools.html | |||
@@ -125,25 +125,22 @@ | |||
125 | <div class="pure-u-lg-1-3 pure-u-22-24 page-form page-form-light"> | 125 | <div class="pure-u-lg-1-3 pure-u-22-24 page-form page-form-light"> |
126 | <h2 class="window-title">{'3rd party'|t}</h2> | 126 | <h2 class="window-title">{'3rd party'|t}</h2> |
127 | <div class="tools-item"> | 127 | <div class="tools-item"> |
128 | <a href="https://addons.mozilla.org/fr/firefox/addon/shaarli/" title="Firefox {'Plugin'|t}"> | 128 | <a href="https://addons.mozilla.org/fr/firefox/addon/shaarli/"> |
129 | <span class="pure-button pure-u-lg-2-3 pure-u-3-4">Firefox {'plugin'|t}</span> | 129 | <span class="pure-button pure-u-lg-2-3 pure-u-3-4">Firefox {'plugin'|t}</span> |
130 | </a> | 130 | </a> |
131 | </div> | 131 | </div> |
132 | <div class="tools-item"> | 132 | <div class="tools-item"> |
133 | <a href="https://chrome.google.com/webstore/detail/shiny-shaarli/hajdfkmbdmadjmmpkkbbcnllepomekin" | 133 | <a href="https://chrome.google.com/webstore/detail/shiny-shaarli/hajdfkmbdmadjmmpkkbbcnllepomekin"> |
134 | title="Chrome {'Plugin'|t}"> | ||
135 | <span class="pure-button pure-u-lg-2-3 pure-u-3-4">Chrome {'plugin'|t}</span> | 134 | <span class="pure-button pure-u-lg-2-3 pure-u-3-4">Chrome {'plugin'|t}</span> |
136 | </a> | 135 | </a> |
137 | </div> | 136 | </div> |
138 | <div class="tools-item"> | 137 | <div class="tools-item"> |
139 | <a href="https://play.google.com/store/apps/details?id=com.dimtion.shaarlier&hl=fr" | 138 | <a href="https://play.google.com/store/apps/details?id=com.dimtion.shaarlier&hl=fr"> |
140 | title="Android Shaarlier"> | ||
141 | <span class="pure-button pure-u-lg-2-3 pure-u-3-4">Android Shaarlier</span> | 139 | <span class="pure-button pure-u-lg-2-3 pure-u-3-4">Android Shaarlier</span> |
142 | </a> | 140 | </a> |
143 | </div> | 141 | </div> |
144 | <div class="tools-item"> | 142 | <div class="tools-item"> |
145 | <a href="https://stakali.toneiv.eu/" | 143 | <a href="https://stakali.toneiv.eu/"> |
146 | title="Android Stakali"> | ||
147 | <span class="pure-button pure-u-lg-2-3 pure-u-3-4">Android Stakali</span> | 144 | <span class="pure-button pure-u-lg-2-3 pure-u-3-4">Android Stakali</span> |
148 | </a> | 145 | </a> |
149 | </div> | 146 | </div> |
diff --git a/tpl/vintage/configure.html b/tpl/vintage/configure.html index 9466c235..f1892fa1 100644 --- a/tpl/vintage/configure.html +++ b/tpl/vintage/configure.html | |||
@@ -59,14 +59,6 @@ | |||
59 | </tr> | 59 | </tr> |
60 | 60 | ||
61 | <tr> | 61 | <tr> |
62 | <td><b>Redirector</b></td> | ||
63 | <td> | ||
64 | <input type="text" name="redirector" id="redirector" size="50" value="{$redirector}"><br> | ||
65 | (e.g. <i>http://anonym.to/?</i> will mask the HTTP_REFERER) | ||
66 | </td> | ||
67 | </tr> | ||
68 | |||
69 | <tr> | ||
70 | <td><b>Security:</b></td> | 62 | <td><b>Security:</b></td> |
71 | <td> | 63 | <td> |
72 | <input type="checkbox" name="disablesessionprotection" id="disablesessionprotection" | 64 | <input type="checkbox" name="disablesessionprotection" id="disablesessionprotection" |
diff --git a/tpl/vintage/daily.html b/tpl/vintage/daily.html index ede35910..71d84475 100644 --- a/tpl/vintage/daily.html +++ b/tpl/vintage/daily.html | |||
@@ -68,8 +68,12 @@ | |||
68 | <div class="dailyEntryTitle"> | 68 | <div class="dailyEntryTitle"> |
69 | <a href="{$link.real_url}">{$link.title}</a> | 69 | <a href="{$link.real_url}">{$link.title}</a> |
70 | </div> | 70 | </div> |
71 | {if="$link.thumbnail"} | 71 | {if="$thumbnails_enabled && !empty($link.thumbnail)"} |
72 | <div class="dailyEntryThumbnail">{$link.thumbnail}</div> | 72 | <div class="dailyEntryThumbnail"> |
73 | <img data-src="{$link.thumbnail}#" class="b-lazy" | ||
74 | src="" | ||
75 | alt="thumbnail" width="{$thumbnails_width}" height="{$thumbnails_height}" /> | ||
76 | </div> | ||
73 | {/if} | 77 | {/if} |
74 | <div class="dailyEntryDescription">{$link.formatedDescription}</div> | 78 | <div class="dailyEntryDescription">{$link.formatedDescription}</div> |
75 | 79 | ||
@@ -97,5 +101,6 @@ | |||
97 | <div id="closing"><img src="img/squiggle_closing.png" width="66" height="61" alt="-"></div> | 101 | <div id="closing"><img src="img/squiggle_closing.png" width="66" height="61" alt="-"></div> |
98 | </div> | 102 | </div> |
99 | {include="page.footer"} | 103 | {include="page.footer"} |
104 | <script src="js/thumbnails.min.js?v={$version_hash}"></script> | ||
100 | </body> | 105 | </body> |
101 | </html> | 106 | </html> |
diff --git a/tpl/vintage/dailyrss.html b/tpl/vintage/dailyrss.html index ddbd6c5e..f589b06e 100644 --- a/tpl/vintage/dailyrss.html +++ b/tpl/vintage/dailyrss.html | |||
@@ -4,11 +4,11 @@ | |||
4 | <link>{$absurl}</link> | 4 | <link>{$absurl}</link> |
5 | <pubDate>{$rssdate}</pubDate> | 5 | <pubDate>{$rssdate}</pubDate> |
6 | <description><![CDATA[ | 6 | <description><![CDATA[ |
7 | {loop="$links"} | 7 | {loop="links"} |
8 | <h3><a href="{$value.url}">{$value.title}</a></h3> | 8 | <h3><a href="{$value.url}">{$value.title}</a></h3> |
9 | <small>{if="!$hide_timestamps"}{function="strftime('%c', $value.timestamp)"} - {/if}{if="$value.tags"}{$value.tags}{/if}<br> | 9 | <small>{if="!$hide_timestamps"}{function="strftime('%c', $value.timestamp)"} - {/if}{if="$value.tags"}{$value.tags}{/if}<br> |
10 | {$value.url}</small><br> | 10 | {$value.url}</small><br> |
11 | {if="$value.thumbnail"}{$value.thumbnail}{/if}<br> | 11 | {if="$value.thumbnail"}<img src="{$index_url}{$value.thumbnail}#" alt="thumbnail" />{/if}<br> |
12 | {if="$value.description"}{$value.formatedDescription}{/if} | 12 | {if="$value.description"}{$value.formatedDescription}{/if} |
13 | <br><br><hr> | 13 | <br><br><hr> |
14 | {/loop} | 14 | {/loop} |
diff --git a/tpl/vintage/linklist.html b/tpl/vintage/linklist.html index 3f202849..dcb14e90 100644 --- a/tpl/vintage/linklist.html +++ b/tpl/vintage/linklist.html | |||
@@ -85,7 +85,7 @@ | |||
85 | <a href="{$value.real_url}"> | 85 | <a href="{$value.real_url}"> |
86 | {ignore}RainTPL hack: put the 2 src on two different line to avoid path replace bug{/ignore} | 86 | {ignore}RainTPL hack: put the 2 src on two different line to avoid path replace bug{/ignore} |
87 | <img data-src="{$value.thumbnail}#" class="b-lazy" | 87 | <img data-src="{$value.thumbnail}#" class="b-lazy" |
88 | src="#" | 88 | src="" |
89 | alt="thumbnail" width="{$thumbnails_width}" height="{$thumbnails_height}" /> | 89 | alt="thumbnail" width="{$thumbnails_width}" height="{$thumbnails_height}" /> |
90 | </a> | 90 | </a> |
91 | </div> | 91 | </div> |
diff --git a/tpl/vintage/picwall.html b/tpl/vintage/picwall.html index 5f1d266e..b3a16791 100644 --- a/tpl/vintage/picwall.html +++ b/tpl/vintage/picwall.html | |||
@@ -17,7 +17,7 @@ | |||
17 | <div class="picwall_pictureframe"> | 17 | <div class="picwall_pictureframe"> |
18 | {ignore}RainTPL hack: put the 2 src on two different line to avoid path replace bug{/ignore} | 18 | {ignore}RainTPL hack: put the 2 src on two different line to avoid path replace bug{/ignore} |
19 | <img data-src="{$value.thumbnail}#" class="b-lazy" | 19 | <img data-src="{$value.thumbnail}#" class="b-lazy" |
20 | src="#" | 20 | src="" |
21 | alt="thumbnail" width="{$thumbnails_width}" height="{$thumbnails_height}" /> | 21 | alt="thumbnail" width="{$thumbnails_width}" height="{$thumbnails_height}" /> |
22 | <a href="{$value.real_url}"><span class="info">{$value.title}</span></a> | 22 | <a href="{$value.real_url}"><span class="info">{$value.title}</span></a> |
23 | {loop="$value.picwall_plugin"} | 23 | {loop="$value.picwall_plugin"} |