diff options
author | ArthurHoaro <arthur@hoa.ro> | 2020-06-13 11:22:14 +0200 |
---|---|---|
committer | ArthurHoaro <arthur@hoa.ro> | 2020-07-23 21:19:21 +0200 |
commit | 818b3193ffabec57501e3bdfa997206e3c0671ef (patch) | |
tree | f5a4d3cc23ac367dde617b849561177fc20d767a | |
parent | c22fa57a5505fe95fd01860e3d3dfbb089f869cd (diff) | |
download | Shaarli-818b3193ffabec57501e3bdfa997206e3c0671ef.tar.gz Shaarli-818b3193ffabec57501e3bdfa997206e3c0671ef.tar.zst Shaarli-818b3193ffabec57501e3bdfa997206e3c0671ef.zip |
Explicitly define base and asset path in templates
With the new routes, all pages are not all at the same folder level anymore
(e.g. /shaare and /shaare/123), so we can't just use './' everywhere.
The most consistent way to handle this is to prefix all path with the proper variable,
and handle the actual path in controllers.
51 files changed, 205 insertions, 236 deletions
diff --git a/application/container/ShaarliContainer.php b/application/container/ShaarliContainer.php index fec398d0..a95393cd 100644 --- a/application/container/ShaarliContainer.php +++ b/application/container/ShaarliContainer.php | |||
@@ -22,6 +22,7 @@ use Slim\Container; | |||
22 | * Extension of Slim container to document the injected objects. | 22 | * Extension of Slim container to document the injected objects. |
23 | * | 23 | * |
24 | * @property mixed[] $environment $_SERVER automatically injected by Slim | 24 | * @property mixed[] $environment $_SERVER automatically injected by Slim |
25 | * @property string $basePath Shaarli's instance base path (e.g. `/shaarli/`) | ||
25 | * @property ConfigManager $conf | 26 | * @property ConfigManager $conf |
26 | * @property SessionManager $sessionManager | 27 | * @property SessionManager $sessionManager |
27 | * @property LoginManager $loginManager | 28 | * @property LoginManager $loginManager |
diff --git a/application/front/ShaarliMiddleware.php b/application/front/ShaarliMiddleware.php index f8992e0b..47aa61bb 100644 --- a/application/front/ShaarliMiddleware.php +++ b/application/front/ShaarliMiddleware.php | |||
@@ -39,6 +39,8 @@ class ShaarliMiddleware | |||
39 | public function __invoke(Request $request, Response $response, callable $next) | 39 | public function __invoke(Request $request, Response $response, callable $next) |
40 | { | 40 | { |
41 | try { | 41 | try { |
42 | $this->container->basePath = rtrim($request->getUri()->getBasePath(), '/'); | ||
43 | |||
42 | $response = $next($request, $response); | 44 | $response = $next($request, $response); |
43 | } catch (ShaarliFrontException $e) { | 45 | } catch (ShaarliFrontException $e) { |
44 | $this->container->pageBuilder->assign('message', $e->getMessage()); | 46 | $this->container->pageBuilder->assign('message', $e->getMessage()); |
diff --git a/application/front/controller/visitor/ShaarliVisitorController.php b/application/front/controller/visitor/ShaarliVisitorController.php index 98423d90..b90b1e8f 100644 --- a/application/front/controller/visitor/ShaarliVisitorController.php +++ b/application/front/controller/visitor/ShaarliVisitorController.php | |||
@@ -60,6 +60,19 @@ abstract class ShaarliVisitorController | |||
60 | $this->assignView('privateLinkcount', $this->container->bookmarkService->count(BookmarkFilter::$PRIVATE)); | 60 | $this->assignView('privateLinkcount', $this->container->bookmarkService->count(BookmarkFilter::$PRIVATE)); |
61 | $this->assignView('plugin_errors', $this->container->pluginManager->getErrors()); | 61 | $this->assignView('plugin_errors', $this->container->pluginManager->getErrors()); |
62 | 62 | ||
63 | /* | ||
64 | * Define base path (if Shaarli is installed in a domain's subfolder, e.g. `/shaarli`) | ||
65 | * and the asset path (subfolder/tpl/default for default theme). | ||
66 | * These MUST be used to create an internal link or to include an asset in templates. | ||
67 | */ | ||
68 | $this->assignView('base_path', $this->container->basePath); | ||
69 | $this->assignView( | ||
70 | 'asset_path', | ||
71 | $this->container->basePath . '/' . | ||
72 | rtrim($this->container->conf->get('resource.raintpl_tpl', 'tpl'), '/') . '/' . | ||
73 | $this->container->conf->get('resource.theme', 'default') | ||
74 | ); | ||
75 | |||
63 | $this->executeDefaultHooks($template); | 76 | $this->executeDefaultHooks($template); |
64 | 77 | ||
65 | return $this->container->pageBuilder->render($template); | 78 | return $this->container->pageBuilder->render($template); |
@@ -105,7 +118,7 @@ abstract class ShaarliVisitorController | |||
105 | array $clearParams = [], | 118 | array $clearParams = [], |
106 | string $anchor = null | 119 | string $anchor = null |
107 | ): Response { | 120 | ): Response { |
108 | $defaultPath = rtrim($request->getUri()->getBasePath(), '/') . '/'; | 121 | $defaultPath = $this->container->basePath . '/'; |
109 | $referer = $this->container->environment['HTTP_REFERER'] ?? null; | 122 | $referer = $this->container->environment['HTTP_REFERER'] ?? null; |
110 | 123 | ||
111 | if (null !== $referer) { | 124 | if (null !== $referer) { |
diff --git a/application/render/PageBuilder.php b/application/render/PageBuilder.php index d90ed58b..2779eb90 100644 --- a/application/render/PageBuilder.php +++ b/application/render/PageBuilder.php | |||
@@ -149,6 +149,10 @@ class PageBuilder | |||
149 | */ | 149 | */ |
150 | protected function finalize(): void | 150 | protected function finalize(): void |
151 | { | 151 | { |
152 | //FIXME - DEV _ REMOVE ME | ||
153 | $this->assign('base_path', '/Shaarli'); | ||
154 | $this->assign('asset_path', '/Shaarli/tpl/default'); | ||
155 | |||
152 | // TODO: use the SessionManager | 156 | // TODO: use the SessionManager |
153 | $messageKeys = [ | 157 | $messageKeys = [ |
154 | SessionManager::KEY_SUCCESS_MESSAGES, | 158 | SessionManager::KEY_SUCCESS_MESSAGES, |
diff --git a/assets/common/js/thumbnails-update.js b/assets/common/js/thumbnails-update.js index 060a730e..35608169 100644 --- a/assets/common/js/thumbnails-update.js +++ b/assets/common/js/thumbnails-update.js | |||
@@ -10,13 +10,14 @@ | |||
10 | * It contains a recursive call to retrieve the thumb of the next link when it succeed. | 10 | * It contains a recursive call to retrieve the thumb of the next link when it succeed. |
11 | * It also update the progress bar and other visual feedback elements. | 11 | * It also update the progress bar and other visual feedback elements. |
12 | * | 12 | * |
13 | * @param {string} basePath Shaarli subfolder for XHR requests | ||
13 | * @param {array} ids List of LinkID to update | 14 | * @param {array} ids List of LinkID to update |
14 | * @param {int} i Current index in ids | 15 | * @param {int} i Current index in ids |
15 | * @param {object} elements List of DOM element to avoid retrieving them at each iteration | 16 | * @param {object} elements List of DOM element to avoid retrieving them at each iteration |
16 | */ | 17 | */ |
17 | function updateThumb(ids, i, elements) { | 18 | function updateThumb(basePath, ids, i, elements) { |
18 | const xhr = new XMLHttpRequest(); | 19 | const xhr = new XMLHttpRequest(); |
19 | xhr.open('POST', './?do=ajax_thumb_update'); | 20 | xhr.open('POST', `${basePath}/?do=ajax_thumb_update`); |
20 | xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); | 21 | xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); |
21 | xhr.responseType = 'json'; | 22 | xhr.responseType = 'json'; |
22 | xhr.onload = () => { | 23 | xhr.onload = () => { |
@@ -40,6 +41,7 @@ function updateThumb(ids, i, elements) { | |||
40 | } | 41 | } |
41 | 42 | ||
42 | (() => { | 43 | (() => { |
44 | const basePath = document.querySelector('input[name="js_base_path"]').value; | ||
43 | const ids = document.getElementsByName('ids')[0].value.split(','); | 45 | const ids = document.getElementsByName('ids')[0].value.split(','); |
44 | const elements = { | 46 | const elements = { |
45 | progressBar: document.querySelector('.progressbar > div'), | 47 | progressBar: document.querySelector('.progressbar > div'), |
@@ -47,5 +49,5 @@ function updateThumb(ids, i, elements) { | |||
47 | thumbnail: document.querySelector('.thumbnail-placeholder'), | 49 | thumbnail: document.querySelector('.thumbnail-placeholder'), |
48 | title: document.querySelector('.thumbnail-link-title'), | 50 | title: document.querySelector('.thumbnail-link-title'), |
49 | }; | 51 | }; |
50 | updateThumb(ids, 0, elements); | 52 | updateThumb(basePath, ids, 0, elements); |
51 | })(); | 53 | })(); |
diff --git a/assets/default/js/base.js b/assets/default/js/base.js index 8cc7eed5..b428a420 100644 --- a/assets/default/js/base.js +++ b/assets/default/js/base.js | |||
@@ -25,9 +25,9 @@ function findParent(element, tagName, attributes) { | |||
25 | /** | 25 | /** |
26 | * Ajax request to refresh the CSRF token. | 26 | * Ajax request to refresh the CSRF token. |
27 | */ | 27 | */ |
28 | function refreshToken() { | 28 | function refreshToken(basePath) { |
29 | const xhr = new XMLHttpRequest(); | 29 | const xhr = new XMLHttpRequest(); |
30 | xhr.open('GET', './?do=token'); | 30 | xhr.open('GET', `${basePath}/?do=token`); |
31 | xhr.onload = () => { | 31 | xhr.onload = () => { |
32 | const token = document.getElementById('token'); | 32 | const token = document.getElementById('token'); |
33 | token.setAttribute('value', xhr.responseText); | 33 | token.setAttribute('value', xhr.responseText); |
@@ -215,6 +215,8 @@ function init(description) { | |||
215 | } | 215 | } |
216 | 216 | ||
217 | (() => { | 217 | (() => { |
218 | const basePath = document.querySelector('input[name="js_base_path"]').value; | ||
219 | |||
218 | /** | 220 | /** |
219 | * Handle responsive menu. | 221 | * Handle responsive menu. |
220 | * Source: http://purecss.io/layouts/tucked-menu-vertical/ | 222 | * Source: http://purecss.io/layouts/tucked-menu-vertical/ |
@@ -461,7 +463,7 @@ function init(description) { | |||
461 | }); | 463 | }); |
462 | 464 | ||
463 | if (window.confirm(message)) { | 465 | if (window.confirm(message)) { |
464 | window.location = `?delete_link&lf_linkdate=${ids.join('+')}&token=${token.value}`; | 466 | window.location = `${basePath}/?delete_link&lf_linkdate=${ids.join('+')}&token=${token.value}`; |
465 | } | 467 | } |
466 | }); | 468 | }); |
467 | } | 469 | } |
@@ -483,7 +485,8 @@ function init(description) { | |||
483 | }); | 485 | }); |
484 | 486 | ||
485 | const ids = links.map(item => item.id); | 487 | const ids = links.map(item => item.id); |
486 | window.location = `?change_visibility&token=${token.value}&newVisibility=${visibility}&ids=${ids.join('+')}`; | 488 | window.location = |
489 | `${basePath}/?change_visibility&token=${token.value}&newVisibility=${visibility}&ids=${ids.join('+')}`; | ||
487 | }); | 490 | }); |
488 | }); | 491 | }); |
489 | } | 492 | } |
@@ -546,7 +549,7 @@ function init(description) { | |||
546 | const refreshedToken = document.getElementById('token').value; | 549 | const refreshedToken = document.getElementById('token').value; |
547 | const fromtag = block.getAttribute('data-tag'); | 550 | const fromtag = block.getAttribute('data-tag'); |
548 | const xhr = new XMLHttpRequest(); | 551 | const xhr = new XMLHttpRequest(); |
549 | xhr.open('POST', './manage-tags'); | 552 | xhr.open('POST', `${basePath}/manage-tags`); |
550 | xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); | 553 | xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); |
551 | xhr.onload = () => { | 554 | xhr.onload = () => { |
552 | if (xhr.status !== 200) { | 555 | if (xhr.status !== 200) { |
@@ -558,8 +561,12 @@ function init(description) { | |||
558 | input.setAttribute('value', totag); | 561 | input.setAttribute('value', totag); |
559 | findParent(input, 'div', { class: 'rename-tag-form' }).style.display = 'none'; | 562 | findParent(input, 'div', { class: 'rename-tag-form' }).style.display = 'none'; |
560 | block.querySelector('a.tag-link').innerHTML = htmlEntities(totag); | 563 | block.querySelector('a.tag-link').innerHTML = htmlEntities(totag); |
561 | block.querySelector('a.tag-link').setAttribute('href', `./?searchtags=${encodeURIComponent(totag)}`); | 564 | block |
562 | block.querySelector('a.rename-tag').setAttribute('href', `./manage-tags?fromtag=${encodeURIComponent(totag)}`); | 565 | .querySelector('a.tag-link') |
566 | .setAttribute('href', `${basePath}/?searchtags=${encodeURIComponent(totag)}`); | ||
567 | block | ||
568 | .querySelector('a.rename-tag') | ||
569 | .setAttribute('href', `${basePath}/manage-tags?fromtag=${encodeURIComponent(totag)}`); | ||
563 | 570 | ||
564 | // Refresh awesomplete values | 571 | // Refresh awesomplete values |
565 | existingTags = existingTags.map(tag => (tag === fromtag ? totag : tag)); | 572 | existingTags = existingTags.map(tag => (tag === fromtag ? totag : tag)); |
@@ -567,7 +574,7 @@ function init(description) { | |||
567 | } | 574 | } |
568 | }; | 575 | }; |
569 | xhr.send(`renametag=1&fromtag=${encodeURIComponent(fromtag)}&totag=${encodeURIComponent(totag)}&token=${refreshedToken}`); | 576 | xhr.send(`renametag=1&fromtag=${encodeURIComponent(fromtag)}&totag=${encodeURIComponent(totag)}&token=${refreshedToken}`); |
570 | refreshToken(); | 577 | refreshToken(basePath); |
571 | }); | 578 | }); |
572 | }); | 579 | }); |
573 | 580 | ||
@@ -593,13 +600,13 @@ function init(description) { | |||
593 | 600 | ||
594 | if (confirm(`Are you sure you want to delete the tag "${tag}"?`)) { | 601 | if (confirm(`Are you sure you want to delete the tag "${tag}"?`)) { |
595 | const xhr = new XMLHttpRequest(); | 602 | const xhr = new XMLHttpRequest(); |
596 | xhr.open('POST', './manage-tags'); | 603 | xhr.open('POST', `${basePath}/manage-tags`); |
597 | xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); | 604 | xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); |
598 | xhr.onload = () => { | 605 | xhr.onload = () => { |
599 | block.remove(); | 606 | block.remove(); |
600 | }; | 607 | }; |
601 | xhr.send(encodeURI(`deletetag=1&fromtag=${tag}&token=${refreshedToken}`)); | 608 | xhr.send(encodeURI(`deletetag=1&fromtag=${tag}&token=${refreshedToken}`)); |
602 | refreshToken(); | 609 | refreshToken(basePath); |
603 | 610 | ||
604 | existingTags = existingTags.filter(tagItem => tagItem !== tag); | 611 | existingTags = existingTags.filter(tagItem => tagItem !== tag); |
605 | awesomepletes = updateAwesompleteList('.rename-tag-input', existingTags, awesomepletes); | 612 | awesomepletes = updateAwesompleteList('.rename-tag-input', existingTags, awesomepletes); |
diff --git a/tests/front/ShaarliMiddlewareTest.php b/tests/front/ShaarliMiddlewareTest.php index 80974f37..57be1002 100644 --- a/tests/front/ShaarliMiddlewareTest.php +++ b/tests/front/ShaarliMiddlewareTest.php | |||
@@ -11,6 +11,7 @@ use Shaarli\Front\Exception\LoginBannedException; | |||
11 | use Shaarli\Render\PageBuilder; | 11 | use Shaarli\Render\PageBuilder; |
12 | use Slim\Http\Request; | 12 | use Slim\Http\Request; |
13 | use Slim\Http\Response; | 13 | use Slim\Http\Response; |
14 | use Slim\Http\Uri; | ||
14 | 15 | ||
15 | class ShaarliMiddlewareTest extends TestCase | 16 | class ShaarliMiddlewareTest extends TestCase |
16 | { | 17 | { |
@@ -29,6 +30,13 @@ class ShaarliMiddlewareTest extends TestCase | |||
29 | public function testMiddlewareExecution(): void | 30 | public function testMiddlewareExecution(): void |
30 | { | 31 | { |
31 | $request = $this->createMock(Request::class); | 32 | $request = $this->createMock(Request::class); |
33 | $request->method('getUri')->willReturnCallback(function (): Uri { | ||
34 | $uri = $this->createMock(Uri::class); | ||
35 | $uri->method('getBasePath')->willReturn('/subfolder'); | ||
36 | |||
37 | return $uri; | ||
38 | }); | ||
39 | |||
32 | $response = new Response(); | 40 | $response = new Response(); |
33 | $controller = function (Request $request, Response $response): Response { | 41 | $controller = function (Request $request, Response $response): Response { |
34 | return $response->withStatus(418); // I'm a tea pot | 42 | return $response->withStatus(418); // I'm a tea pot |
@@ -44,6 +52,13 @@ class ShaarliMiddlewareTest extends TestCase | |||
44 | public function testMiddlewareExecutionWithException(): void | 52 | public function testMiddlewareExecutionWithException(): void |
45 | { | 53 | { |
46 | $request = $this->createMock(Request::class); | 54 | $request = $this->createMock(Request::class); |
55 | $request->method('getUri')->willReturnCallback(function (): Uri { | ||
56 | $uri = $this->createMock(Uri::class); | ||
57 | $uri->method('getBasePath')->willReturn('/subfolder'); | ||
58 | |||
59 | return $uri; | ||
60 | }); | ||
61 | |||
47 | $response = new Response(); | 62 | $response = new Response(); |
48 | $controller = function (): void { | 63 | $controller = function (): void { |
49 | $exception = new LoginBannedException(); | 64 | $exception = new LoginBannedException(); |
diff --git a/tests/front/controller/admin/PostBookmarkControllerTest.php b/tests/front/controller/admin/PostBookmarkControllerTest.php index f00a15c9..69673bd2 100644 --- a/tests/front/controller/admin/PostBookmarkControllerTest.php +++ b/tests/front/controller/admin/PostBookmarkControllerTest.php | |||
@@ -13,7 +13,6 @@ use Shaarli\Security\SessionManager; | |||
13 | use Shaarli\Thumbnailer; | 13 | use Shaarli\Thumbnailer; |
14 | use Slim\Http\Request; | 14 | use Slim\Http\Request; |
15 | use Slim\Http\Response; | 15 | use Slim\Http\Response; |
16 | use Slim\Http\Uri; | ||
17 | 16 | ||
18 | class PostBookmarkControllerTest extends TestCase | 17 | class PostBookmarkControllerTest extends TestCase |
19 | { | 18 | { |
@@ -406,12 +405,6 @@ class PostBookmarkControllerTest extends TestCase | |||
406 | return $parameters[$key] ?? null; | 405 | return $parameters[$key] ?? null; |
407 | }) | 406 | }) |
408 | ; | 407 | ; |
409 | $request->method('getUri')->willReturnCallback(function (): Uri { | ||
410 | $uri = $this->createMock(Uri::class); | ||
411 | $uri->method('getBasePath')->willReturn('/subfolder'); | ||
412 | |||
413 | return $uri; | ||
414 | }); | ||
415 | $response = new Response(); | 408 | $response = new Response(); |
416 | 409 | ||
417 | $checkBookmark = function (Bookmark $bookmark) use ($parameters) { | 410 | $checkBookmark = function (Bookmark $bookmark) use ($parameters) { |
@@ -493,12 +486,6 @@ class PostBookmarkControllerTest extends TestCase | |||
493 | return $parameters[$key] ?? null; | 486 | return $parameters[$key] ?? null; |
494 | }) | 487 | }) |
495 | ; | 488 | ; |
496 | $request->method('getUri')->willReturnCallback(function (): Uri { | ||
497 | $uri = $this->createMock(Uri::class); | ||
498 | $uri->method('getBasePath')->willReturn('/subfolder'); | ||
499 | |||
500 | return $uri; | ||
501 | }); | ||
502 | $response = new Response(); | 489 | $response = new Response(); |
503 | 490 | ||
504 | $checkBookmark = function (Bookmark $bookmark) use ($parameters, $id) { | 491 | $checkBookmark = function (Bookmark $bookmark) use ($parameters, $id) { |
@@ -575,12 +562,6 @@ class PostBookmarkControllerTest extends TestCase | |||
575 | return $parameters[$key] ?? null; | 562 | return $parameters[$key] ?? null; |
576 | }) | 563 | }) |
577 | ; | 564 | ; |
578 | $request->method('getUri')->willReturnCallback(function (): Uri { | ||
579 | $uri = $this->createMock(Uri::class); | ||
580 | $uri->method('getBasePath')->willReturn('/subfolder'); | ||
581 | |||
582 | return $uri; | ||
583 | }); | ||
584 | $response = new Response(); | 565 | $response = new Response(); |
585 | 566 | ||
586 | $this->container->conf = $this->createMock(ConfigManager::class); | 567 | $this->container->conf = $this->createMock(ConfigManager::class); |
diff --git a/tests/front/controller/admin/SessionFilterControllerTest.php b/tests/front/controller/admin/SessionFilterControllerTest.php index 096963cf..ea07edee 100644 --- a/tests/front/controller/admin/SessionFilterControllerTest.php +++ b/tests/front/controller/admin/SessionFilterControllerTest.php | |||
@@ -9,7 +9,6 @@ use Shaarli\Security\LoginManager; | |||
9 | use Shaarli\Security\SessionManager; | 9 | use Shaarli\Security\SessionManager; |
10 | use Slim\Http\Request; | 10 | use Slim\Http\Request; |
11 | use Slim\Http\Response; | 11 | use Slim\Http\Response; |
12 | use Slim\Http\Uri; | ||
13 | 12 | ||
14 | class SessionFilterControllerTest extends TestCase | 13 | class SessionFilterControllerTest extends TestCase |
15 | { | 14 | { |
@@ -33,12 +32,6 @@ class SessionFilterControllerTest extends TestCase | |||
33 | $this->container->environment = ['HTTP_REFERER' => 'http://shaarli/subfolder/controller/?searchtag=abc']; | 32 | $this->container->environment = ['HTTP_REFERER' => 'http://shaarli/subfolder/controller/?searchtag=abc']; |
34 | 33 | ||
35 | $request = $this->createMock(Request::class); | 34 | $request = $this->createMock(Request::class); |
36 | $request->method('getUri')->willReturnCallback(function (): Uri { | ||
37 | $uri = $this->createMock(Uri::class); | ||
38 | $uri->method('getBasePath')->willReturn('/subfolder'); | ||
39 | |||
40 | return $uri; | ||
41 | }); | ||
42 | $request->method('getParam')->with('nb')->willReturn('8'); | 35 | $request->method('getParam')->with('nb')->willReturn('8'); |
43 | $response = new Response(); | 36 | $response = new Response(); |
44 | 37 | ||
@@ -61,12 +54,6 @@ class SessionFilterControllerTest extends TestCase | |||
61 | public function testLinksPerPageNotValid(): void | 54 | public function testLinksPerPageNotValid(): void |
62 | { | 55 | { |
63 | $request = $this->createMock(Request::class); | 56 | $request = $this->createMock(Request::class); |
64 | $request->method('getUri')->willReturnCallback(function (): Uri { | ||
65 | $uri = $this->createMock(Uri::class); | ||
66 | $uri->method('getBasePath')->willReturn('/subfolder'); | ||
67 | |||
68 | return $uri; | ||
69 | }); | ||
70 | $request->method('getParam')->with('nb')->willReturn('test'); | 57 | $request->method('getParam')->with('nb')->willReturn('test'); |
71 | $response = new Response(); | 58 | $response = new Response(); |
72 | 59 | ||
@@ -80,7 +67,7 @@ class SessionFilterControllerTest extends TestCase | |||
80 | 67 | ||
81 | static::assertInstanceOf(Response::class, $result); | 68 | static::assertInstanceOf(Response::class, $result); |
82 | static::assertSame(302, $result->getStatusCode()); | 69 | static::assertSame(302, $result->getStatusCode()); |
83 | static::assertSame(['/subfolder'], $result->getHeader('location')); | 70 | static::assertSame(['/subfolder/'], $result->getHeader('location')); |
84 | } | 71 | } |
85 | 72 | ||
86 | /** | 73 | /** |
@@ -100,12 +87,6 @@ class SessionFilterControllerTest extends TestCase | |||
100 | ; | 87 | ; |
101 | 88 | ||
102 | $request = $this->createMock(Request::class); | 89 | $request = $this->createMock(Request::class); |
103 | $request->method('getUri')->willReturnCallback(function (): Uri { | ||
104 | $uri = $this->createMock(Uri::class); | ||
105 | $uri->method('getBasePath')->willReturn('/subfolder'); | ||
106 | |||
107 | return $uri; | ||
108 | }); | ||
109 | $response = new Response(); | 90 | $response = new Response(); |
110 | 91 | ||
111 | $result = $this->controller->visibility($request, $response, $arg); | 92 | $result = $this->controller->visibility($request, $response, $arg); |
@@ -141,12 +122,6 @@ class SessionFilterControllerTest extends TestCase | |||
141 | ; | 122 | ; |
142 | 123 | ||
143 | $request = $this->createMock(Request::class); | 124 | $request = $this->createMock(Request::class); |
144 | $request->method('getUri')->willReturnCallback(function (): Uri { | ||
145 | $uri = $this->createMock(Uri::class); | ||
146 | $uri->method('getBasePath')->willReturn('/subfolder'); | ||
147 | |||
148 | return $uri; | ||
149 | }); | ||
150 | $response = new Response(); | 125 | $response = new Response(); |
151 | 126 | ||
152 | $result = $this->controller->visibility($request, $response, $arg); | 127 | $result = $this->controller->visibility($request, $response, $arg); |
@@ -176,19 +151,13 @@ class SessionFilterControllerTest extends TestCase | |||
176 | ; | 151 | ; |
177 | 152 | ||
178 | $request = $this->createMock(Request::class); | 153 | $request = $this->createMock(Request::class); |
179 | $request->method('getUri')->willReturnCallback(function (): Uri { | ||
180 | $uri = $this->createMock(Uri::class); | ||
181 | $uri->method('getBasePath')->willReturn('/subfolder'); | ||
182 | |||
183 | return $uri; | ||
184 | }); | ||
185 | $response = new Response(); | 154 | $response = new Response(); |
186 | 155 | ||
187 | $result = $this->controller->visibility($request, $response, $arg); | 156 | $result = $this->controller->visibility($request, $response, $arg); |
188 | 157 | ||
189 | static::assertInstanceOf(Response::class, $result); | 158 | static::assertInstanceOf(Response::class, $result); |
190 | static::assertSame(302, $result->getStatusCode()); | 159 | static::assertSame(302, $result->getStatusCode()); |
191 | static::assertSame(['/subfolder'], $result->getHeader('location')); | 160 | static::assertSame(['/subfolder/'], $result->getHeader('location')); |
192 | } | 161 | } |
193 | 162 | ||
194 | /** | 163 | /** |
@@ -212,12 +181,6 @@ class SessionFilterControllerTest extends TestCase | |||
212 | ; | 181 | ; |
213 | 182 | ||
214 | $request = $this->createMock(Request::class); | 183 | $request = $this->createMock(Request::class); |
215 | $request->method('getUri')->willReturnCallback(function (): Uri { | ||
216 | $uri = $this->createMock(Uri::class); | ||
217 | $uri->method('getBasePath')->willReturn('/subfolder'); | ||
218 | |||
219 | return $uri; | ||
220 | }); | ||
221 | $response = new Response(); | 184 | $response = new Response(); |
222 | 185 | ||
223 | $result = $this->controller->visibility($request, $response, $arg); | 186 | $result = $this->controller->visibility($request, $response, $arg); |
@@ -249,12 +212,6 @@ class SessionFilterControllerTest extends TestCase | |||
249 | ; | 212 | ; |
250 | 213 | ||
251 | $request = $this->createMock(Request::class); | 214 | $request = $this->createMock(Request::class); |
252 | $request->method('getUri')->willReturnCallback(function (): Uri { | ||
253 | $uri = $this->createMock(Uri::class); | ||
254 | $uri->method('getBasePath')->willReturn('/subfolder'); | ||
255 | |||
256 | return $uri; | ||
257 | }); | ||
258 | $response = new Response(); | 215 | $response = new Response(); |
259 | 216 | ||
260 | $result = $this->controller->visibility($request, $response, $arg); | 217 | $result = $this->controller->visibility($request, $response, $arg); |
@@ -272,12 +229,6 @@ class SessionFilterControllerTest extends TestCase | |||
272 | $this->container->environment = ['HTTP_REFERER' => 'http://shaarli/subfolder/controller/?searchtag=abc']; | 229 | $this->container->environment = ['HTTP_REFERER' => 'http://shaarli/subfolder/controller/?searchtag=abc']; |
273 | 230 | ||
274 | $request = $this->createMock(Request::class); | 231 | $request = $this->createMock(Request::class); |
275 | $request->method('getUri')->willReturnCallback(function (): Uri { | ||
276 | $uri = $this->createMock(Uri::class); | ||
277 | $uri->method('getBasePath')->willReturn('/subfolder'); | ||
278 | |||
279 | return $uri; | ||
280 | }); | ||
281 | $response = new Response(); | 232 | $response = new Response(); |
282 | 233 | ||
283 | $this->container->sessionManager | 234 | $this->container->sessionManager |
@@ -301,13 +252,6 @@ class SessionFilterControllerTest extends TestCase | |||
301 | $this->container->environment = ['HTTP_REFERER' => 'http://shaarli/subfolder/controller/?searchtag=abc']; | 252 | $this->container->environment = ['HTTP_REFERER' => 'http://shaarli/subfolder/controller/?searchtag=abc']; |
302 | 253 | ||
303 | $request = $this->createMock(Request::class); | 254 | $request = $this->createMock(Request::class); |
304 | $request->method('getUri')->willReturnCallback(function (): Uri { | ||
305 | $uri = $this->createMock(Uri::class); | ||
306 | $uri->method('getBasePath')->willReturn('/subfolder'); | ||
307 | |||
308 | return $uri; | ||
309 | }); | ||
310 | |||
311 | $response = new Response(); | 255 | $response = new Response(); |
312 | 256 | ||
313 | $this->container->sessionManager | 257 | $this->container->sessionManager |
diff --git a/tests/front/controller/visitor/FrontControllerMockHelper.php b/tests/front/controller/visitor/FrontControllerMockHelper.php index fecd0c82..7f560662 100644 --- a/tests/front/controller/visitor/FrontControllerMockHelper.php +++ b/tests/front/controller/visitor/FrontControllerMockHelper.php | |||
@@ -81,6 +81,8 @@ trait FrontControllerMockHelper | |||
81 | 'SERVER_PORT' => '80', | 81 | 'SERVER_PORT' => '80', |
82 | 'REQUEST_URI' => '/daily-rss', | 82 | 'REQUEST_URI' => '/daily-rss', |
83 | ]; | 83 | ]; |
84 | |||
85 | $this->container->basePath = '/subfolder'; | ||
84 | } | 86 | } |
85 | 87 | ||
86 | /** | 88 | /** |
diff --git a/tests/front/controller/visitor/ShaarliPublicControllerTest.php b/tests/front/controller/visitor/ShaarliVisitorControllerTest.php index 899b280b..83d08358 100644 --- a/tests/front/controller/visitor/ShaarliPublicControllerTest.php +++ b/tests/front/controller/visitor/ShaarliVisitorControllerTest.php | |||
@@ -8,15 +8,14 @@ use PHPUnit\Framework\TestCase; | |||
8 | use Shaarli\Bookmark\BookmarkFilter; | 8 | use Shaarli\Bookmark\BookmarkFilter; |
9 | use Slim\Http\Request; | 9 | use Slim\Http\Request; |
10 | use Slim\Http\Response; | 10 | use Slim\Http\Response; |
11 | use Slim\Http\Uri; | ||
12 | 11 | ||
13 | /** | 12 | /** |
14 | * Class ShaarliControllerTest | 13 | * Class ShaarliControllerTest |
15 | * | 14 | * |
16 | * This class is used to test default behavior of ShaarliController abstract class. | 15 | * This class is used to test default behavior of ShaarliVisitorController abstract class. |
17 | * It uses a dummy non abstract controller. | 16 | * It uses a dummy non abstract controller. |
18 | */ | 17 | */ |
19 | class ShaarliPublicControllerTest extends TestCase | 18 | class ShaarliVisitorControllerTest extends TestCase |
20 | { | 19 | { |
21 | use FrontControllerMockHelper; | 20 | use FrontControllerMockHelper; |
22 | 21 | ||
@@ -49,20 +48,15 @@ class ShaarliPublicControllerTest extends TestCase | |||
49 | Request $request, | 48 | Request $request, |
50 | Response $response, | 49 | Response $response, |
51 | array $loopTerms = [], | 50 | array $loopTerms = [], |
52 | array $clearParams = [] | 51 | array $clearParams = [], |
52 | string $anchor = null | ||
53 | ): Response { | 53 | ): Response { |
54 | return parent::redirectFromReferer($request, $response, $loopTerms, $clearParams); | 54 | return parent::redirectFromReferer($request, $response, $loopTerms, $clearParams, $anchor); |
55 | } | 55 | } |
56 | }; | 56 | }; |
57 | $this->assignedValues = []; | 57 | $this->assignedValues = []; |
58 | 58 | ||
59 | $this->request = $this->createMock(Request::class); | 59 | $this->request = $this->createMock(Request::class); |
60 | $this->request->method('getUri')->willReturnCallback(function (): Uri { | ||
61 | $uri = $this->createMock(Uri::class); | ||
62 | $uri->method('getBasePath')->willReturn('/subfolder'); | ||
63 | |||
64 | return $uri; | ||
65 | }); | ||
66 | } | 60 | } |
67 | 61 | ||
68 | public function testAssignView(): void | 62 | public function testAssignView(): void |
@@ -102,6 +96,8 @@ class ShaarliPublicControllerTest extends TestCase | |||
102 | static::assertSame(10, $this->assignedValues['linkcount']); | 96 | static::assertSame(10, $this->assignedValues['linkcount']); |
103 | static::assertSame(5, $this->assignedValues['privateLinkcount']); | 97 | static::assertSame(5, $this->assignedValues['privateLinkcount']); |
104 | static::assertSame(['error'], $this->assignedValues['plugin_errors']); | 98 | static::assertSame(['error'], $this->assignedValues['plugin_errors']); |
99 | static::assertSame('/subfolder', $this->assignedValues['base_path']); | ||
100 | static::assertSame('/subfolder/tpl/default', $this->assignedValues['asset_path']); | ||
105 | 101 | ||
106 | static::assertSame('templateName', $this->assignedValues['plugins_includes']['render_includes']['target']); | 102 | static::assertSame('templateName', $this->assignedValues['plugins_includes']['render_includes']['target']); |
107 | static::assertTrue($this->assignedValues['plugins_includes']['render_includes']['loggedin']); | 103 | static::assertTrue($this->assignedValues['plugins_includes']['render_includes']['loggedin']); |
@@ -153,7 +149,7 @@ class ShaarliPublicControllerTest extends TestCase | |||
153 | $result = $this->controller->redirectFromReferer($this->request, $response, ['nope', 'controller']); | 149 | $result = $this->controller->redirectFromReferer($this->request, $response, ['nope', 'controller']); |
154 | 150 | ||
155 | static::assertSame(302, $result->getStatusCode()); | 151 | static::assertSame(302, $result->getStatusCode()); |
156 | static::assertSame(['/subfolder'], $result->getHeader('location')); | 152 | static::assertSame(['/subfolder/'], $result->getHeader('location')); |
157 | } | 153 | } |
158 | 154 | ||
159 | /** | 155 | /** |
@@ -168,7 +164,7 @@ class ShaarliPublicControllerTest extends TestCase | |||
168 | $result = $this->controller->redirectFromReferer($this->request, $response, ['nope', 'other']); | 164 | $result = $this->controller->redirectFromReferer($this->request, $response, ['nope', 'other']); |
169 | 165 | ||
170 | static::assertSame(302, $result->getStatusCode()); | 166 | static::assertSame(302, $result->getStatusCode()); |
171 | static::assertSame(['/subfolder'], $result->getHeader('location')); | 167 | static::assertSame(['/subfolder/'], $result->getHeader('location')); |
172 | } | 168 | } |
173 | 169 | ||
174 | /** | 170 | /** |
diff --git a/tpl/default/404.html b/tpl/default/404.html index 09737b4b..7b696e4c 100644 --- a/tpl/default/404.html +++ b/tpl/default/404.html | |||
@@ -8,7 +8,7 @@ | |||
8 | {include="page.header"} | 8 | {include="page.header"} |
9 | <div id="pageError" class="page-error-container center"> | 9 | <div id="pageError" class="page-error-container center"> |
10 | <h2>{'Sorry, nothing to see here.'|t}</h2> | 10 | <h2>{'Sorry, nothing to see here.'|t}</h2> |
11 | <img src="img/sad_star.png" alt=""> | 11 | <img src="{$asset_path}/img/sad_star.png#" alt=""> |
12 | <p>{$error_message}</p> | 12 | <p>{$error_message}</p> |
13 | </div> | 13 | </div> |
14 | {include="page.footer"} | 14 | {include="page.footer"} |
diff --git a/tpl/default/addlink.html b/tpl/default/addlink.html index 999d2f4d..c37827f4 100644 --- a/tpl/default/addlink.html +++ b/tpl/default/addlink.html | |||
@@ -9,7 +9,7 @@ | |||
9 | <div class="pure-u-lg-1-3 pure-u-1-24"></div> | 9 | <div class="pure-u-lg-1-3 pure-u-1-24"></div> |
10 | <div id="addlink-form" class="page-form page-form-light pure-u-lg-1-3 pure-u-22-24"> | 10 | <div id="addlink-form" class="page-form page-form-light pure-u-lg-1-3 pure-u-22-24"> |
11 | <h2 class="window-title">{"Shaare a new link"|t}</h2> | 11 | <h2 class="window-title">{"Shaare a new link"|t}</h2> |
12 | <form method="GET" action="./shaare" name="addform" class="addform"> | 12 | <form method="GET" action="{$base_path}/shaare" name="addform" class="addform"> |
13 | <div> | 13 | <div> |
14 | <label for="shaare">{'URL or leave empty to post a note'|t}</label> | 14 | <label for="shaare">{'URL or leave empty to post a note'|t}</label> |
15 | <input type="text" name="post" id="shaare" class="autofocus"> | 15 | <input type="text" name="post" id="shaare" class="autofocus"> |
diff --git a/tpl/default/changepassword.html b/tpl/default/changepassword.html index ab579433..80d2f2e1 100644 --- a/tpl/default/changepassword.html +++ b/tpl/default/changepassword.html | |||
@@ -9,7 +9,7 @@ | |||
9 | <div class="pure-u-lg-1-3 pure-u-1-24"></div> | 9 | <div class="pure-u-lg-1-3 pure-u-1-24"></div> |
10 | <div id="addlink-form" class="page-form page-form-light pure-u-lg-1-3 pure-u-22-24"> | 10 | <div id="addlink-form" class="page-form page-form-light pure-u-lg-1-3 pure-u-22-24"> |
11 | <h2 class="window-title">{"Change password"|t}</h2> | 11 | <h2 class="window-title">{"Change password"|t}</h2> |
12 | <form method="POST" action="#" name="changepasswordform" id="changepasswordform"> | 12 | <form method="POST" action="{$base_path}/password" name="changepasswordform" id="changepasswordform"> |
13 | <div> | 13 | <div> |
14 | <input type="password" name="oldpassword" aria-label="{'Current password'|t}" placeholder="{'Current password'|t}" class="autofocus"> | 14 | <input type="password" name="oldpassword" aria-label="{'Current password'|t}" placeholder="{'Current password'|t}" class="autofocus"> |
15 | </div> | 15 | </div> |
diff --git a/tpl/default/changetag.html b/tpl/default/changetag.html index a1a572ca..4e3059d3 100644 --- a/tpl/default/changetag.html +++ b/tpl/default/changetag.html | |||
@@ -9,7 +9,7 @@ | |||
9 | <div class="pure-u-lg-1-3 pure-u-1-24"></div> | 9 | <div class="pure-u-lg-1-3 pure-u-1-24"></div> |
10 | <div id="addlink-form" class="page-form page-form-light pure-u-lg-1-3 pure-u-22-24"> | 10 | <div id="addlink-form" class="page-form page-form-light pure-u-lg-1-3 pure-u-22-24"> |
11 | <h2 class="window-title">{"Manage tags"|t}</h2> | 11 | <h2 class="window-title">{"Manage tags"|t}</h2> |
12 | <form method="POST" action="#" name="changetag" id="changetag"> | 12 | <form method="POST" action="{$base_path}/manage-tags" name="changetag" id="changetag"> |
13 | <div> | 13 | <div> |
14 | <input type="text" name="fromtag" aria-label="{'Tag'|t}" placeholder="{'Tag'|t}" value="{$fromtag}" | 14 | <input type="text" name="fromtag" aria-label="{'Tag'|t}" placeholder="{'Tag'|t}" value="{$fromtag}" |
15 | list="tagsList" autocomplete="off" class="awesomplete autofocus" data-minChars="1"> | 15 | list="tagsList" autocomplete="off" class="awesomplete autofocus" data-minChars="1"> |
@@ -32,7 +32,7 @@ | |||
32 | </div> | 32 | </div> |
33 | </form> | 33 | </form> |
34 | 34 | ||
35 | <p>{'You can also edit tags in the'|t} <a href="./tag-list?sort=usage">{'tag list'|t}</a>.</p> | 35 | <p>{'You can also edit tags in the'|t} <a href="{$base_path}/tag-list?sort=usage">{'tag list'|t}</a>.</p> |
36 | </div> | 36 | </div> |
37 | </div> | 37 | </div> |
38 | {include="page.footer"} | 38 | {include="page.footer"} |
diff --git a/tpl/default/configure.html b/tpl/default/configure.html index 46bef052..9b4401a4 100644 --- a/tpl/default/configure.html +++ b/tpl/default/configure.html | |||
@@ -11,7 +11,7 @@ | |||
11 | {$ratioInput='7-12'} | 11 | {$ratioInput='7-12'} |
12 | {$ratioInputMobile='1-8'} | 12 | {$ratioInputMobile='1-8'} |
13 | 13 | ||
14 | <form method="POST" action="#" name="configform" id="configform"> | 14 | <form method="POST" action="{$base_path}/configure" name="configform" id="configform"> |
15 | <div class="pure-g"> | 15 | <div class="pure-g"> |
16 | <div class="pure-u-lg-1-8 pure-u-1-24"></div> | 16 | <div class="pure-u-lg-1-8 pure-u-1-24"></div> |
17 | <div class="pure-u-lg-3-4 pure-u-22-24 page-form page-form-complete"> | 17 | <div class="pure-u-lg-3-4 pure-u-22-24 page-form page-form-complete"> |
@@ -35,7 +35,7 @@ | |||
35 | <div class="form-label"> | 35 | <div class="form-label"> |
36 | <label for="titleLink"> | 36 | <label for="titleLink"> |
37 | <span class="label-name">{'Home link'|t}</span><br> | 37 | <span class="label-name">{'Home link'|t}</span><br> |
38 | <span class="label-desc">{'Default value'|t}: ./</span> | 38 | <span class="label-desc">{'Default value'|t}: {$base_path}</span> |
39 | </label> | 39 | </label> |
40 | </div> | 40 | </div> |
41 | </div> | 41 | </div> |
@@ -289,7 +289,7 @@ | |||
289 | {if="! $gd_enabled"} | 289 | {if="! $gd_enabled"} |
290 | {'You need to enable the extension <code>php-gd</code> to use thumbnails.'|t} | 290 | {'You need to enable the extension <code>php-gd</code> to use thumbnails.'|t} |
291 | {elseif="$thumbnails_enabled"} | 291 | {elseif="$thumbnails_enabled"} |
292 | <a href="./?do=thumbs_update">{'Synchronize thumbnails'|t}</a> | 292 | <a href="{$base_path}/?do=thumbs_update">{'Synchronize thumbnails'|t}</a> |
293 | {/if} | 293 | {/if} |
294 | </span> | 294 | </span> |
295 | </label> | 295 | </label> |
diff --git a/tpl/default/daily.html b/tpl/default/daily.html index 9ccd1e61..aa34bd1c 100644 --- a/tpl/default/daily.html +++ b/tpl/default/daily.html | |||
@@ -11,7 +11,7 @@ | |||
11 | <div class="pure-u-lg-2-3 pure-u-22-24 page-form page-visitor" id="daily"> | 11 | <div class="pure-u-lg-2-3 pure-u-22-24 page-form page-visitor" id="daily"> |
12 | <h2 class="window-title"> | 12 | <h2 class="window-title"> |
13 | {'The Daily Shaarli'|t} | 13 | {'The Daily Shaarli'|t} |
14 | <a href="./daily-rss" title="{'1 RSS entry per day'|t}"><i class="fa fa-rss"></i></a> | 14 | <a href="{$base_path}/daily-rss" title="{'1 RSS entry per day'|t}"><i class="fa fa-rss"></i></a> |
15 | </h2> | 15 | </h2> |
16 | 16 | ||
17 | <div id="plugin_zone_start_daily" class="plugin_zone"> | 17 | <div id="plugin_zone_start_daily" class="plugin_zone"> |
@@ -25,7 +25,7 @@ | |||
25 | <div class="pure-g"> | 25 | <div class="pure-g"> |
26 | <div class="pure-u-lg-1-3 pure-u-1 center"> | 26 | <div class="pure-u-lg-1-3 pure-u-1 center"> |
27 | {if="$previousday"} | 27 | {if="$previousday"} |
28 | <a href="./daily?day={$previousday}"> | 28 | <a href="{$base_path}/daily?day={$previousday}"> |
29 | <i class="fa fa-arrow-left"></i> | 29 | <i class="fa fa-arrow-left"></i> |
30 | {'Previous day'|t} | 30 | {'Previous day'|t} |
31 | </a> | 31 | </a> |
@@ -36,7 +36,7 @@ | |||
36 | </div> | 36 | </div> |
37 | <div class="pure-u-lg-1-3 pure-u-1 center"> | 37 | <div class="pure-u-lg-1-3 pure-u-1 center"> |
38 | {if="$nextday"} | 38 | {if="$nextday"} |
39 | <a href="./daily?day={$nextday}"> | 39 | <a href="{$base_path}/daily?day={$nextday}"> |
40 | {'Next day'|t} | 40 | {'Next day'|t} |
41 | <i class="fa fa-arrow-right"></i> | 41 | <i class="fa fa-arrow-right"></i> |
42 | </a> | 42 | </a> |
@@ -69,7 +69,7 @@ | |||
69 | {$link=$value} | 69 | {$link=$value} |
70 | <div class="daily-entry"> | 70 | <div class="daily-entry"> |
71 | <div class="daily-entry-title center"> | 71 | <div class="daily-entry-title center"> |
72 | <a href="./?{$link.shorturl}" title="{'Permalink'|t}"> | 72 | <a href="{$base_path}/?{$link.shorturl}" title="{'Permalink'|t}"> |
73 | <i class="fa fa-link"></i> | 73 | <i class="fa fa-link"></i> |
74 | </a> | 74 | </a> |
75 | <a href="{$link.real_url}">{$link.title}</a> | 75 | <a href="{$link.real_url}">{$link.title}</a> |
@@ -116,7 +116,7 @@ | |||
116 | </div> | 116 | </div> |
117 | </div> | 117 | </div> |
118 | {include="page.footer"} | 118 | {include="page.footer"} |
119 | <script src="js/thumbnails.min.js?v={$version_hash}"></script> | 119 | <script src="{$asset_path}/js/thumbnails.min.js?v={$version_hash}#"></script> |
120 | </body> | 120 | </body> |
121 | </html> | 121 | </html> |
122 | 122 | ||
diff --git a/tpl/default/editlink.html b/tpl/default/editlink.html index 9f6d6b74..f3adcbb0 100644 --- a/tpl/default/editlink.html +++ b/tpl/default/editlink.html | |||
@@ -9,7 +9,7 @@ | |||
9 | <div class="pure-u-lg-1-5 pure-u-1-24"></div> | 9 | <div class="pure-u-lg-1-5 pure-u-1-24"></div> |
10 | <form method="post" | 10 | <form method="post" |
11 | name="linkform" | 11 | name="linkform" |
12 | action="./shaare" | 12 | action="{$base_path}/shaare" |
13 | class="page-form pure-u-lg-3-5 pure-u-22-24 page-form page-form-light" | 13 | class="page-form pure-u-lg-3-5 pure-u-22-24 page-form page-form-light" |
14 | > | 14 | > |
15 | <h2 class="window-title"> | 15 | <h2 class="window-title"> |
@@ -73,7 +73,7 @@ | |||
73 | <input type="submit" name="save_edit" class="" id="button-save-edit" | 73 | <input type="submit" name="save_edit" class="" id="button-save-edit" |
74 | value="{if="$link_is_new"}{'Save'|t}{else}{'Apply Changes'|t}{/if}"> | 74 | value="{if="$link_is_new"}{'Save'|t}{else}{'Apply Changes'|t}{/if}"> |
75 | {if="!$link_is_new"} | 75 | {if="!$link_is_new"} |
76 | <a href="?delete_link&lf_linkdate={$link.id}&token={$token}" | 76 | <a href="{$base_path}/?delete_link&lf_linkdate={$link.id}&token={$token}" |
77 | title="" name="delete_link" class="button button-red confirm-delete"> | 77 | title="" name="delete_link" class="button button-red confirm-delete"> |
78 | {'Delete'|t} | 78 | {'Delete'|t} |
79 | </a> | 79 | </a> |
diff --git a/tpl/default/error.html b/tpl/default/error.html index ef1dfd73..4abac9ca 100644 --- a/tpl/default/error.html +++ b/tpl/default/error.html | |||
@@ -15,7 +15,7 @@ | |||
15 | </pre> | 15 | </pre> |
16 | {/if} | 16 | {/if} |
17 | 17 | ||
18 | <img src="img/sad_star.png" alt=""> | 18 | <img src="{asset_path}/img/sad_star.png#" alt=""> |
19 | </div> | 19 | </div> |
20 | {include="page.footer"} | 20 | {include="page.footer"} |
21 | </body> | 21 | </body> |
diff --git a/tpl/default/export.html b/tpl/default/export.html index 99c01b11..91cf78b6 100644 --- a/tpl/default/export.html +++ b/tpl/default/export.html | |||
@@ -6,7 +6,7 @@ | |||
6 | <body> | 6 | <body> |
7 | {include="page.header"} | 7 | {include="page.header"} |
8 | 8 | ||
9 | <form method="GET" action="#" name="exportform" id="exportform"> | 9 | <form method="GET" action="{$base_path}/?do=export" name="exportform" id="exportform"> |
10 | <div class="pure-g"> | 10 | <div class="pure-g"> |
11 | <div class="pure-u-lg-1-4 pure-u-1-24"></div> | 11 | <div class="pure-u-lg-1-4 pure-u-1-24"></div> |
12 | <div class="pure-u-lg-1-2 pure-u-22-24 page-form page-form-complete"> | 12 | <div class="pure-u-lg-1-2 pure-u-22-24 page-form page-form-complete"> |
diff --git a/tpl/default/import.html b/tpl/default/import.html index 3d8610f0..97203d93 100644 --- a/tpl/default/import.html +++ b/tpl/default/import.html | |||
@@ -6,7 +6,7 @@ | |||
6 | <body> | 6 | <body> |
7 | {include="page.header"} | 7 | {include="page.header"} |
8 | 8 | ||
9 | <form method="POST" action="./?do=import" enctype="multipart/form-data" name="uploadform" id="uploadform"> | 9 | <form method="POST" action="{$base_path}/?do=import" enctype="multipart/form-data" name="uploadform" id="uploadform"> |
10 | <div class="pure-g"> | 10 | <div class="pure-g"> |
11 | <div class="pure-u-lg-1-4 pure-u-1-24"></div> | 11 | <div class="pure-u-lg-1-4 pure-u-1-24"></div> |
12 | <div class="pure-u-lg-1-2 pure-u-22-24 page-form page-form-complete"> | 12 | <div class="pure-u-lg-1-2 pure-u-22-24 page-form page-form-complete"> |
diff --git a/tpl/default/includes.html b/tpl/default/includes.html index 07a487bb..0f6a6628 100644 --- a/tpl/default/includes.html +++ b/tpl/default/includes.html | |||
@@ -5,11 +5,11 @@ | |||
5 | <meta name="referrer" content="same-origin"> | 5 | <meta name="referrer" content="same-origin"> |
6 | <link rel="alternate" type="application/atom+xml" href="{$feedurl}feed-atom?{$searchcrits}#" title="ATOM Feed" /> | 6 | <link rel="alternate" type="application/atom+xml" href="{$feedurl}feed-atom?{$searchcrits}#" title="ATOM Feed" /> |
7 | <link rel="alternate" type="application/rss+xml" href="{$feedurl}feed-rss?{$searchcrits}#" title="RSS Feed" /> | 7 | <link rel="alternate" type="application/rss+xml" href="{$feedurl}feed-rss?{$searchcrits}#" title="RSS Feed" /> |
8 | <link href="img/favicon.png" rel="shortcut icon" type="image/png" /> | 8 | <link href="{$asset_path}/img/favicon.png#" rel="shortcut icon" type="image/png" /> |
9 | <link href="img/apple-touch-icon.png" rel="apple-touch-icon" sizes="180x180" /> | 9 | <link href="{$asset_path}/img/apple-touch-icon.png#" rel="apple-touch-icon" sizes="180x180" /> |
10 | <link type="text/css" rel="stylesheet" href="css/shaarli.min.css?v={$version_hash}" /> | 10 | <link type="text/css" rel="stylesheet" href="{$asset_path}/css/shaarli.min.css?v={$version_hash}#" /> |
11 | {if="$formatter==='markdown'"} | 11 | {if="$formatter==='markdown'"} |
12 | <link type="text/css" rel="stylesheet" href="css/markdown.min.css?v={$version_hash}" /> | 12 | <link type="text/css" rel="stylesheet" href="{$asset_path}/css/markdown.min.css?v={$version_hash}#" /> |
13 | {/if} | 13 | {/if} |
14 | {loop="$plugins_includes.css_files"} | 14 | {loop="$plugins_includes.css_files"} |
15 | <link type="text/css" rel="stylesheet" href="{$value}?v={$version_hash}#"/> | 15 | <link type="text/css" rel="stylesheet" href="{$value}?v={$version_hash}#"/> |
@@ -17,7 +17,7 @@ | |||
17 | {if="is_file('data/user.css')"} | 17 | {if="is_file('data/user.css')"} |
18 | <link type="text/css" rel="stylesheet" href="data/user.css#" /> | 18 | <link type="text/css" rel="stylesheet" href="data/user.css#" /> |
19 | {/if} | 19 | {/if} |
20 | <link rel="search" type="application/opensearchdescription+xml" href="./open-search#" | 20 | <link rel="search" type="application/opensearchdescription+xml" href="{$base_path}/open-search#" |
21 | title="Shaarli search - {$shaarlititle}" /> | 21 | title="Shaarli search - {$shaarlititle}" /> |
22 | {if="! empty($links) && count($links) === 1"} | 22 | {if="! empty($links) && count($links) === 1"} |
23 | {$link=reset($links)} | 23 | {$link=reset($links)} |
diff --git a/tpl/default/install.html b/tpl/default/install.html index c6f501f0..6f96c019 100644 --- a/tpl/default/install.html +++ b/tpl/default/install.html | |||
@@ -10,7 +10,7 @@ | |||
10 | {$ratioLabelMobile='7-8'} | 10 | {$ratioLabelMobile='7-8'} |
11 | {$ratioInputMobile='1-8'} | 11 | {$ratioInputMobile='1-8'} |
12 | 12 | ||
13 | <form method="POST" action="#" name="installform" id="installform"> | 13 | <form method="POST" action="{$base_path}/?do=install" name="installform" id="installform"> |
14 | <div class="pure-g"> | 14 | <div class="pure-g"> |
15 | <div class="pure-u-lg-1-6 pure-u-1-24"></div> | 15 | <div class="pure-u-lg-1-6 pure-u-1-24"></div> |
16 | <div class="pure-u-lg-2-3 pure-u-22-24 page-form page-form-complete"> | 16 | <div class="pure-u-lg-2-3 pure-u-22-24 page-form page-form-complete"> |
diff --git a/tpl/default/linklist.html b/tpl/default/linklist.html index e574a109..89513595 100644 --- a/tpl/default/linklist.html +++ b/tpl/default/linklist.html | |||
@@ -94,7 +94,7 @@ | |||
94 | {'tagged'|t} | 94 | {'tagged'|t} |
95 | {loop="$exploded_tags"} | 95 | {loop="$exploded_tags"} |
96 | <span class="label label-tag" title="{'Remove tag'|t}"> | 96 | <span class="label label-tag" title="{'Remove tag'|t}"> |
97 | <a href="./remove-tag/{function="urlencode($value)"}" aria-label="{'Remove tag'|t}"> | 97 | <a href="{$base_path}/remove-tag/{function="urlencode($value)"}" aria-label="{'Remove tag'|t}"> |
98 | {$value}<span class="remove"><i class="fa fa-times" aria-hidden="true"></i></span> | 98 | {$value}<span class="remove"><i class="fa fa-times" aria-hidden="true"></i></span> |
99 | </a> | 99 | </a> |
100 | </span> | 100 | </span> |
@@ -183,7 +183,7 @@ | |||
183 | {$tag_counter=count($value.taglist)} | 183 | {$tag_counter=count($value.taglist)} |
184 | {loop="value.taglist"} | 184 | {loop="value.taglist"} |
185 | <span class="label label-tag" title="{$strAddTag}"> | 185 | <span class="label label-tag" title="{$strAddTag}"> |
186 | <a href="./add-tag/{$value|urlencode}">{$value}</a> | 186 | <a href="{$base_path}/add-tag/{$value|urlencode}">{$value}</a> |
187 | </span> | 187 | </span> |
188 | {if="$tag_counter - 1 != $counter"}·{/if} | 188 | {if="$tag_counter - 1 != $counter"}·{/if} |
189 | {/loop} | 189 | {/loop} |
@@ -198,16 +198,16 @@ | |||
198 | <input type="checkbox" class="link-checkbox" value="{$value.id}"> | 198 | <input type="checkbox" class="link-checkbox" value="{$value.id}"> |
199 | </span> | 199 | </span> |
200 | <span class="linklist-item-infos-controls-item ctrl-edit"> | 200 | <span class="linklist-item-infos-controls-item ctrl-edit"> |
201 | <a href="?edit_link={$value.id}" aria-label="{$strEdit}" title="{$strEdit}"><i class="fa fa-pencil-square-o edit-link" aria-hidden="true"></i></a> | 201 | <a href="{$base_path}/?edit_link={$value.id}" aria-label="{$strEdit}" title="{$strEdit}"><i class="fa fa-pencil-square-o edit-link" aria-hidden="true"></i></a> |
202 | </span> | 202 | </span> |
203 | <span class="linklist-item-infos-controls-item ctrl-delete"> | 203 | <span class="linklist-item-infos-controls-item ctrl-delete"> |
204 | <a href="?delete_link&lf_linkdate={$value.id}&token={$token}" aria-label="{$strDelete}" | 204 | <a href="{$base_path}/?delete_link&lf_linkdate={$value.id}&token={$token}" aria-label="{$strDelete}" |
205 | title="{$strDelete}" class="delete-link pure-u-0 pure-u-lg-visible confirm-delete"> | 205 | title="{$strDelete}" class="delete-link pure-u-0 pure-u-lg-visible confirm-delete"> |
206 | <i class="fa fa-trash" aria-hidden="true"></i> | 206 | <i class="fa fa-trash" aria-hidden="true"></i> |
207 | </a> | 207 | </a> |
208 | </span> | 208 | </span> |
209 | <span class="linklist-item-infos-controls-item ctrl-pin"> | 209 | <span class="linklist-item-infos-controls-item ctrl-pin"> |
210 | <a href="./?do=pin&id={$value.id}&token={$token}" | 210 | <a href="{$base_path}/?do=pin&id={$value.id}&token={$token}" |
211 | title="{$strToggleSticky}" aria-label="{$strToggleSticky}" class="pin-link {if="$value.sticky"}pinned-link{/if} pure-u-0 pure-u-lg-visible"> | 211 | title="{$strToggleSticky}" aria-label="{$strToggleSticky}" class="pin-link {if="$value.sticky"}pinned-link{/if} pure-u-0 pure-u-lg-visible"> |
212 | <i class="fa fa-thumb-tack" aria-hidden="true"></i> | 212 | <i class="fa fa-thumb-tack" aria-hidden="true"></i> |
213 | </a> | 213 | </a> |
@@ -224,7 +224,7 @@ | |||
224 | </div> | 224 | </div> |
225 | {/if} | 225 | {/if} |
226 | {/if} | 226 | {/if} |
227 | <a href="?{$value.shorturl}" title="{$strPermalink}"> | 227 | <a href="{$base_path}/?{$value.shorturl}" title="{$strPermalink}"> |
228 | {if="!$hide_timestamps || $is_logged_in"} | 228 | {if="!$hide_timestamps || $is_logged_in"} |
229 | {$updated=$value.updated_timestamp ? $strEdited. format_date($value.updated) : $strPermalink} | 229 | {$updated=$value.updated_timestamp ? $strEdited. format_date($value.updated) : $strPermalink} |
230 | <span class="linkdate" title="{$updated}"> | 230 | <span class="linkdate" title="{$updated}"> |
@@ -267,12 +267,12 @@ | |||
267 | {/if} | 267 | {/if} |
268 | {if="$is_logged_in"} | 268 | {if="$is_logged_in"} |
269 | · | 269 | · |
270 | <a href="?delete_link&lf_linkdate={$value.id}&token={$token}" aria-label="{$strDelete}" | 270 | <a href="{$base_path}/?delete_link&lf_linkdate={$value.id}&token={$token}" aria-label="{$strDelete}" |
271 | title="{$strDelete}" class="delete-link confirm-delete"> | 271 | title="{$strDelete}" class="delete-link confirm-delete"> |
272 | <i class="fa fa-trash" aria-hidden="true"></i> | 272 | <i class="fa fa-trash" aria-hidden="true"></i> |
273 | </a> | 273 | </a> |
274 | · | 274 | · |
275 | <a href="?edit_link={$value.id}" aria-label="{$strEdit}" title="{$strEdit}"><i class="fa fa-pencil-square-o edit-link" aria-hidden="true"></i></a> | 275 | <a href="{$base_path}/?edit_link={$value.id}" aria-label="{$strEdit}" title="{$strEdit}"><i class="fa fa-pencil-square-o edit-link" aria-hidden="true"></i></a> |
276 | {/if} | 276 | {/if} |
277 | </div> | 277 | </div> |
278 | </div> | 278 | </div> |
@@ -297,6 +297,6 @@ | |||
297 | </div> | 297 | </div> |
298 | 298 | ||
299 | {include="page.footer"} | 299 | {include="page.footer"} |
300 | <script src="js/thumbnails.min.js?v={$version_hash}"></script> | 300 | <script src="{$asset_path}/js/thumbnails.min.js?v={$version_hash}#"></script> |
301 | </body> | 301 | </body> |
302 | </html> | 302 | </html> |
diff --git a/tpl/default/linklist.paging.html b/tpl/default/linklist.paging.html index 2b601725..e1952b79 100644 --- a/tpl/default/linklist.paging.html +++ b/tpl/default/linklist.paging.html | |||
@@ -6,14 +6,14 @@ | |||
6 | {'Filters'|t} | 6 | {'Filters'|t} |
7 | </span> | 7 | </span> |
8 | {if="$is_logged_in"} | 8 | {if="$is_logged_in"} |
9 | <a href="./visibility/private" aria-label="{'Only display private links'|t}" title="{'Only display private links'|t}" | 9 | <a href="{$base_path}/visibility/private" aria-label="{'Only display private links'|t}" title="{'Only display private links'|t}" |
10 | class="{if="$visibility==='private'"}filter-on{else}filter-off{/if}" | 10 | class="{if="$visibility==='private'"}filter-on{else}filter-off{/if}" |
11 | ><i class="fa fa-user-secret" aria-hidden="true"></i></a> | 11 | ><i class="fa fa-user-secret" aria-hidden="true"></i></a> |
12 | <a href="./visibility/public" aria-label="{'Only display public links'|t}" title="{'Only display public links'|t}" | 12 | <a href="{$base_path}/visibility/public" aria-label="{'Only display public links'|t}" title="{'Only display public links'|t}" |
13 | class="{if="$visibility==='public'"}filter-on{else}filter-off{/if}" | 13 | class="{if="$visibility==='public'"}filter-on{else}filter-off{/if}" |
14 | ><i class="fa fa-globe" aria-hidden="true"></i></a> | 14 | ><i class="fa fa-globe" aria-hidden="true"></i></a> |
15 | {/if} | 15 | {/if} |
16 | <a href="./untagged-only" aria-label="{'Filter untagged links'|t}" title="{'Filter untagged links'|t}" | 16 | <a href="{$base_path}/untagged-only" aria-label="{'Filter untagged links'|t}" title="{'Filter untagged links'|t}" |
17 | class={if="$untaggedonly"}"filter-on"{else}"filter-off"{/if} | 17 | class={if="$untaggedonly"}"filter-on"{else}"filter-off"{/if} |
18 | ><i class="fa fa-tag" aria-hidden="true"></i></a> | 18 | ><i class="fa fa-tag" aria-hidden="true"></i></a> |
19 | <a href="#" aria-label="{'Select all'|t}" title="{'Select all'|t}" | 19 | <a href="#" aria-label="{'Select all'|t}" title="{'Select all'|t}" |
@@ -53,10 +53,10 @@ | |||
53 | 53 | ||
54 | <div class="linksperpage pure-u-1-3"> | 54 | <div class="linksperpage pure-u-1-3"> |
55 | <div class="pure-u-0 pure-u-lg-visible">{'Links per page'|t}</div> | 55 | <div class="pure-u-0 pure-u-lg-visible">{'Links per page'|t}</div> |
56 | <a href="./links-per-page?nb=20">20</a> | 56 | <a href="{$base_path}/links-per-page?nb=20">20</a> |
57 | <a href="./links-per-page?nb=50">50</a> | 57 | <a href="{$base_path}/links-per-page?nb=50">50</a> |
58 | <a href="./links-per-page?nb=100">100</a> | 58 | <a href="{$base_path}/links-per-page?nb=100">100</a> |
59 | <form method="GET" class="pure-u-0 pure-u-lg-visible" action="./links-per-page"> | 59 | <form method="GET" class="pure-u-0 pure-u-lg-visible" action="{$base_path}/links-per-page"> |
60 | <input type="text" name="nb" placeholder="133"> | 60 | <input type="text" name="nb" placeholder="133"> |
61 | </form> | 61 | </form> |
62 | <a href="#" class="filter-off fold-all pure-u-0 pure-u-lg-visible" aria-label="{'Fold all'|t}" title="{'Fold all'|t}"> | 62 | <a href="#" class="filter-off fold-all pure-u-0 pure-u-lg-visible" aria-label="{'Fold all'|t}" title="{'Fold all'|t}"> |
diff --git a/tpl/default/page.footer.html b/tpl/default/page.footer.html index 0899826b..d72917de 100644 --- a/tpl/default/page.footer.html +++ b/tpl/default/page.footer.html | |||
@@ -10,7 +10,7 @@ | |||
10 | {/if} | 10 | {/if} |
11 | · | 11 | · |
12 | {'The personal, minimalist, super-fast, database free, bookmarking service'|t} {'by the Shaarli community'|t} · | 12 | {'The personal, minimalist, super-fast, database free, bookmarking service'|t} {'by the Shaarli community'|t} · |
13 | <a href="doc/html/index.html" rel="nofollow">{'Documentation'|t}</a> | 13 | <a href="{$base_path}/doc/html/index.html" rel="nofollow">{'Documentation'|t}</a> |
14 | {loop="$plugins_footer.text"} | 14 | {loop="$plugins_footer.text"} |
15 | {$value} | 15 | {$value} |
16 | {/loop} | 16 | {/loop} |
@@ -39,4 +39,5 @@ | |||
39 | </span> | 39 | </span> |
40 | </div> | 40 | </div> |
41 | 41 | ||
42 | <script src="js/shaarli.min.js?v={$version_hash}"></script> | 42 | <input type="hidden" name="js_base_path" value="{$base_path}" /> |
43 | <script src="{$asset_path}/js/shaarli.min.js?v={$version_hash}#"></script> | ||
diff --git a/tpl/default/page.header.html b/tpl/default/page.header.html index cf59e89d..7117e3ca 100644 --- a/tpl/default/page.header.html +++ b/tpl/default/page.header.html | |||
@@ -21,24 +21,24 @@ | |||
21 | </li> | 21 | </li> |
22 | {if="$is_logged_in || $openshaarli"} | 22 | {if="$is_logged_in || $openshaarli"} |
23 | <li class="pure-menu-item"> | 23 | <li class="pure-menu-item"> |
24 | <a href="./add-shaare" class="pure-menu-link" id="shaarli-menu-shaare"> | 24 | <a href="{$base_path}/add-shaare" class="pure-menu-link" id="shaarli-menu-shaare"> |
25 | <i class="fa fa-plus" aria-hidden="true"></i> {'Shaare'|t} | 25 | <i class="fa fa-plus" aria-hidden="true"></i> {'Shaare'|t} |
26 | </a> | 26 | </a> |
27 | </li> | 27 | </li> |
28 | <li class="pure-menu-item" id="shaarli-menu-tools"> | 28 | <li class="pure-menu-item" id="shaarli-menu-tools"> |
29 | <a href="./tools" class="pure-menu-link">{'Tools'|t}</a> | 29 | <a href="{$base_path}/tools" class="pure-menu-link">{'Tools'|t}</a> |
30 | </li> | 30 | </li> |
31 | {/if} | 31 | {/if} |
32 | <li class="pure-menu-item" id="shaarli-menu-tags"> | 32 | <li class="pure-menu-item" id="shaarli-menu-tags"> |
33 | <a href="./tag-cloud" class="pure-menu-link">{'Tag cloud'|t}</a> | 33 | <a href="{$base_path}/tag-cloud" class="pure-menu-link">{'Tag cloud'|t}</a> |
34 | </li> | 34 | </li> |
35 | {if="$thumbnails_enabled"} | 35 | {if="$thumbnails_enabled"} |
36 | <li class="pure-menu-item" id="shaarli-menu-picwall"> | 36 | <li class="pure-menu-item" id="shaarli-menu-picwall"> |
37 | <a href="./picture-wall?{function="ltrim($searchcrits, '&')"}" class="pure-menu-link">{'Picture wall'|t}</a> | 37 | <a href="{$base_path}/picture-wall?{function="ltrim($searchcrits, '&')"}" class="pure-menu-link">{'Picture wall'|t}</a> |
38 | </li> | 38 | </li> |
39 | {/if} | 39 | {/if} |
40 | <li class="pure-menu-item" id="shaarli-menu-daily"> | 40 | <li class="pure-menu-item" id="shaarli-menu-daily"> |
41 | <a href="./daily" class="pure-menu-link">{'Daily'|t}</a> | 41 | <a href="{$base_path}/daily" class="pure-menu-link">{'Daily'|t}</a> |
42 | </li> | 42 | </li> |
43 | {loop="$plugins_header.buttons_toolbar"} | 43 | {loop="$plugins_header.buttons_toolbar"} |
44 | <li class="pure-menu-item shaarli-menu-plugin"> | 44 | <li class="pure-menu-item shaarli-menu-plugin"> |
@@ -52,15 +52,15 @@ | |||
52 | </li> | 52 | </li> |
53 | {/loop} | 53 | {/loop} |
54 | <li class="pure-menu-item pure-u-lg-0 shaarli-menu-mobile" id="shaarli-menu-mobile-rss"> | 54 | <li class="pure-menu-item pure-u-lg-0 shaarli-menu-mobile" id="shaarli-menu-mobile-rss"> |
55 | <a href="./feed-{$feed_type}?{$searchcrits}" class="pure-menu-link">{'RSS Feed'|t}</a> | 55 | <a href="{$base_path}/feed-{$feed_type}?{$searchcrits}" class="pure-menu-link">{'RSS Feed'|t}</a> |
56 | </li> | 56 | </li> |
57 | {if="$is_logged_in"} | 57 | {if="$is_logged_in"} |
58 | <li class="pure-menu-item pure-u-lg-0 shaarli-menu-mobile" id="shaarli-menu-mobile-logout"> | 58 | <li class="pure-menu-item pure-u-lg-0 shaarli-menu-mobile" id="shaarli-menu-mobile-logout"> |
59 | <a href="./logout" class="pure-menu-link">{'Logout'|t}</a> | 59 | <a href="{$base_path}/logout" class="pure-menu-link">{'Logout'|t}</a> |
60 | </li> | 60 | </li> |
61 | {else} | 61 | {else} |
62 | <li class="pure-menu-item pure-u-lg-0 shaarli-menu-mobile" id="shaarli-menu-mobile-login"> | 62 | <li class="pure-menu-item pure-u-lg-0 shaarli-menu-mobile" id="shaarli-menu-mobile-login"> |
63 | <a href="./login" class="pure-menu-link">{'Login'|t}</a> | 63 | <a href="{$base_path}/login" class="pure-menu-link">{'Login'|t}</a> |
64 | </li> | 64 | </li> |
65 | {/if} | 65 | {/if} |
66 | </ul> | 66 | </ul> |
@@ -74,13 +74,13 @@ | |||
74 | </a> | 74 | </a> |
75 | </li> | 75 | </li> |
76 | <li class="pure-menu-item" id="shaarli-menu-desktop-rss"> | 76 | <li class="pure-menu-item" id="shaarli-menu-desktop-rss"> |
77 | <a href="./feed-{$feed_type}?{$searchcrits}" class="pure-menu-link" title="{'RSS Feed'|t}" aria-label="{'RSS Feed'|t}"> | 77 | <a href="{$base_path}/feed-{$feed_type}?{$searchcrits}" class="pure-menu-link" title="{'RSS Feed'|t}" aria-label="{'RSS Feed'|t}"> |
78 | <i class="fa fa-rss" aria-hidden="true"></i> | 78 | <i class="fa fa-rss" aria-hidden="true"></i> |
79 | </a> | 79 | </a> |
80 | </li> | 80 | </li> |
81 | {if="!$is_logged_in"} | 81 | {if="!$is_logged_in"} |
82 | <li class="pure-menu-item" id="shaarli-menu-desktop-login"> | 82 | <li class="pure-menu-item" id="shaarli-menu-desktop-login"> |
83 | <a href="./login" class="pure-menu-link" | 83 | <a href="{$base_path}/login" class="pure-menu-link" |
84 | data-open-id="header-login-form" | 84 | data-open-id="header-login-form" |
85 | id="login-button" aria-label="{'Login'|t}" title="{'Login'|t}"> | 85 | id="login-button" aria-label="{'Login'|t}" title="{'Login'|t}"> |
86 | <i class="fa fa-user" aria-hidden="true"></i> | 86 | <i class="fa fa-user" aria-hidden="true"></i> |
@@ -88,7 +88,7 @@ | |||
88 | </li> | 88 | </li> |
89 | {else} | 89 | {else} |
90 | <li class="pure-menu-item" id="shaarli-menu-desktop-logout"> | 90 | <li class="pure-menu-item" id="shaarli-menu-desktop-logout"> |
91 | <a href="./logout" class="pure-menu-link" aria-label="{'Logout'|t}" title="{'Logout'|t}"> | 91 | <a href="{$base_path}/logout" class="pure-menu-link" aria-label="{'Logout'|t}" title="{'Logout'|t}"> |
92 | <i class="fa fa-sign-out" aria-hidden="true"></i> | 92 | <i class="fa fa-sign-out" aria-hidden="true"></i> |
93 | </a> | 93 | </a> |
94 | </li> | 94 | </li> |
diff --git a/tpl/default/picwall.html b/tpl/default/picwall.html index 5343abd6..1e97b366 100644 --- a/tpl/default/picwall.html +++ b/tpl/default/picwall.html | |||
@@ -9,7 +9,7 @@ | |||
9 | {if="count($linksToDisplay)===0 && $is_logged_in"} | 9 | {if="count($linksToDisplay)===0 && $is_logged_in"} |
10 | <div class="pure-g pure-alert pure-alert-warning page-single-alert"> | 10 | <div class="pure-g pure-alert pure-alert-warning page-single-alert"> |
11 | <div class="pure-u-1 center"> | 11 | <div class="pure-u-1 center"> |
12 | {'There is no cached thumbnail. Try to <a href="./?do=thumbs_update">synchronize them</a>.'|t} | 12 | {'There is no cached thumbnail. Try to <a href="{$base_path}/do=thumbs_update">synchronize them</a>.'|t} |
13 | </div> | 13 | </div> |
14 | </div> | 14 | </div> |
15 | {/if} | 15 | {/if} |
@@ -52,7 +52,7 @@ | |||
52 | </div> | 52 | </div> |
53 | 53 | ||
54 | {include="page.footer"} | 54 | {include="page.footer"} |
55 | <script src="js/thumbnails.min.js?v={$version_hash}"></script> | 55 | <script src="{$asset_path}/js/thumbnails.min.js?v={$version_hash}#"></script> |
56 | </body> | 56 | </body> |
57 | </html> | 57 | </html> |
58 | 58 | ||
diff --git a/tpl/default/pluginsadmin.html b/tpl/default/pluginsadmin.html index a017a2ce..1536c311 100644 --- a/tpl/default/pluginsadmin.html +++ b/tpl/default/pluginsadmin.html | |||
@@ -16,7 +16,7 @@ | |||
16 | <div class="clear"></div> | 16 | <div class="clear"></div> |
17 | </noscript> | 17 | </noscript> |
18 | 18 | ||
19 | <form method="POST" action="./?do=save_pluginadmin" name="pluginform" id="pluginform" class="pluginform-container"> | 19 | <form method="POST" action="{$base_path}/?do=save_pluginadmin" name="pluginform" id="pluginform" class="pluginform-container"> |
20 | <div class="pure-g"> | 20 | <div class="pure-g"> |
21 | <div class="pure-u-lg-1-8 pure-u-1-24"></div> | 21 | <div class="pure-u-lg-1-8 pure-u-1-24"></div> |
22 | <div class="pure-u-lg-3-4 pure-u-22-24 page-form page-form-complete"> | 22 | <div class="pure-u-lg-3-4 pure-u-22-24 page-form page-form-complete"> |
@@ -127,7 +127,7 @@ | |||
127 | <input type="hidden" name="token" value="{$token}"> | 127 | <input type="hidden" name="token" value="{$token}"> |
128 | </form> | 128 | </form> |
129 | 129 | ||
130 | <form action="./?do=save_pluginadmin" method="POST"> | 130 | <form action="{$base_path}/?do=save_pluginadmin" method="POST"> |
131 | <div class="pure-g"> | 131 | <div class="pure-g"> |
132 | <div class="pure-u-lg-1-8 pure-u-1-24"></div> | 132 | <div class="pure-u-lg-1-8 pure-u-1-24"></div> |
133 | <div class="pure-u-lg-3-4 pure-u-22-24 page-form page-form-light"> | 133 | <div class="pure-u-lg-3-4 pure-u-22-24 page-form page-form-light"> |
@@ -176,7 +176,7 @@ | |||
176 | </form> | 176 | </form> |
177 | 177 | ||
178 | {include="page.footer"} | 178 | {include="page.footer"} |
179 | <script src="js/pluginsadmin.min.js?v={$version_hash}"></script> | 179 | <script src="{$asset_path}/js/pluginsadmin.min.js?v={$version_hash}#"></script> |
180 | 180 | ||
181 | </body> | 181 | </body> |
182 | </html> | 182 | </html> |
diff --git a/tpl/default/tag.cloud.html b/tpl/default/tag.cloud.html index bf543357..024882ec 100644 --- a/tpl/default/tag.cloud.html +++ b/tpl/default/tag.cloud.html | |||
@@ -15,7 +15,7 @@ | |||
15 | <h2 class="window-title">{'Tag cloud'|t} - {$countTags} {'tags'|t}</h2> | 15 | <h2 class="window-title">{'Tag cloud'|t} - {$countTags} {'tags'|t}</h2> |
16 | {if="!empty($search_tags)"} | 16 | {if="!empty($search_tags)"} |
17 | <p class="center"> | 17 | <p class="center"> |
18 | <a href="./?searchtags={$search_tags|urlencode}" class="pure-button pure-button-shaarli"> | 18 | <a href="{$base_path}/?searchtags={$search_tags|urlencode}" class="pure-button pure-button-shaarli"> |
19 | {'List all links with those tags'|t} | 19 | {'List all links with those tags'|t} |
20 | </a> | 20 | </a> |
21 | </p> | 21 | </p> |
@@ -48,8 +48,8 @@ | |||
48 | 48 | ||
49 | <div id="cloudtag" class="cloudtag-container"> | 49 | <div id="cloudtag" class="cloudtag-container"> |
50 | {loop="tags"} | 50 | {loop="tags"} |
51 | <a href="./?searchtags={$key|urlencode} {$search_tags|urlencode}" style="font-size:{$value.size}em;">{$key}</a | 51 | <a href="{$base_path}/?searchtags={$key|urlencode} {$search_tags|urlencode}" style="font-size:{$value.size}em;">{$key}</a |
52 | ><a href="./add-tag/{$key|urlencode}" title="{'Filter by tag'|t}" class="count">{$value.count}</a> | 52 | ><a href="{$base_path}/add-tag/{$key|urlencode}" title="{'Filter by tag'|t}" class="count">{$value.count}</a> |
53 | {loop="$value.tag_plugin"} | 53 | {loop="$value.tag_plugin"} |
54 | {$value} | 54 | {$value} |
55 | {/loop} | 55 | {/loop} |
diff --git a/tpl/default/tag.list.html b/tpl/default/tag.list.html index 3adcfd1f..51f42333 100644 --- a/tpl/default/tag.list.html +++ b/tpl/default/tag.list.html | |||
@@ -15,7 +15,7 @@ | |||
15 | <h2 class="window-title">{'Tag list'|t} - {$countTags} {'tags'|t}</h2> | 15 | <h2 class="window-title">{'Tag list'|t} - {$countTags} {'tags'|t}</h2> |
16 | {if="!empty($search_tags)"} | 16 | {if="!empty($search_tags)"} |
17 | <p class="center"> | 17 | <p class="center"> |
18 | <a href="./?searchtags={$search_tags|urlencode}" class="pure-button pure-button-shaarli"> | 18 | <a href="{$base_path}/?searchtags={$search_tags|urlencode}" class="pure-button pure-button-shaarli"> |
19 | {'List all links with those tags'|t} | 19 | {'List all links with those tags'|t} |
20 | </a> | 20 | </a> |
21 | </p> | 21 | </p> |
@@ -51,13 +51,13 @@ | |||
51 | <div class="pure-u-1"> | 51 | <div class="pure-u-1"> |
52 | {if="$is_logged_in===true"} | 52 | {if="$is_logged_in===true"} |
53 | <a href="#" class="delete-tag" aria-label="{'Delete'|t}"><i class="fa fa-trash" aria-hidden="true"></i></a> | 53 | <a href="#" class="delete-tag" aria-label="{'Delete'|t}"><i class="fa fa-trash" aria-hidden="true"></i></a> |
54 | <a href="./manage-tags?fromtag={$key|urlencode}" class="rename-tag" aria-label="{'Rename tag'|t}"> | 54 | <a href="{$base_path}/manage-tags?fromtag={$key|urlencode}" class="rename-tag" aria-label="{'Rename tag'|t}"> |
55 | <i class="fa fa-pencil-square-o {$key}" aria-hidden="true"></i> | 55 | <i class="fa fa-pencil-square-o {$key}" aria-hidden="true"></i> |
56 | </a> | 56 | </a> |
57 | {/if} | 57 | {/if} |
58 | 58 | ||
59 | <a href="./add-tag/{$key|urlencode}" title="{'Filter by tag'|t}" class="count">{$value}</a> | 59 | <a href="{$base_path}/add-tag/{$key|urlencode}" title="{'Filter by tag'|t}" class="count">{$value}</a> |
60 | <a href="./?searchtags={$key|urlencode} {$search_tags|urlencode}" class="tag-link">{$key}</a> | 60 | <a href="{$base_path}/?searchtags={$key|urlencode} {$search_tags|urlencode}" class="tag-link">{$key}</a> |
61 | 61 | ||
62 | {loop="$value.tag_plugin"} | 62 | {loop="$value.tag_plugin"} |
63 | {$value} | 63 | {$value} |
diff --git a/tpl/default/tag.sort.html b/tpl/default/tag.sort.html index f467e34a..6cb1a114 100644 --- a/tpl/default/tag.sort.html +++ b/tpl/default/tag.sort.html | |||
@@ -1,8 +1,8 @@ | |||
1 | <div class="pure-g"> | 1 | <div class="pure-g"> |
2 | <div class="pure-u-1 pure-alert pure-alert-success tag-sort"> | 2 | <div class="pure-u-1 pure-alert pure-alert-success tag-sort"> |
3 | {'Sort by:'|t} | 3 | {'Sort by:'|t} |
4 | <a href="./tag-cloud">{'Cloud'|t}</a> · | 4 | <a href="{$base_path}/tag-cloud">{'Cloud'|t}</a> · |
5 | <a href="./tag-list?sort=usage">{'Most used'|t}</a> · | 5 | <a href="{$base_path}/tag-list?sort=usage">{'Most used'|t}</a> · |
6 | <a href="./tag-list?sort=alpha">{'Alphabetical'|t}</a> | 6 | <a href="{$base_path}/tag-list?sort=alpha">{'Alphabetical'|t}</a> |
7 | </div> | 7 | </div> |
8 | </div> | 8 | </div> |
diff --git a/tpl/default/thumbnails.html b/tpl/default/thumbnails.html index 5f9bef08..504644ca 100644 --- a/tpl/default/thumbnails.html +++ b/tpl/default/thumbnails.html | |||
@@ -43,6 +43,6 @@ | |||
43 | </div> | 43 | </div> |
44 | 44 | ||
45 | {include="page.footer"} | 45 | {include="page.footer"} |
46 | <script src="js/thumbnails_update.min.js?v={$version_hash}"></script> | 46 | <script src="{$asset_path}/js/thumbnails_update.min.js?v={$version_hash}#"></script> |
47 | </body> | 47 | </body> |
48 | </html> | 48 | </html> |
diff --git a/tpl/default/tools.html b/tpl/default/tools.html index 6e432e00..296abed1 100644 --- a/tpl/default/tools.html +++ b/tpl/default/tools.html | |||
@@ -11,35 +11,35 @@ | |||
11 | <div class="pure-u-lg-1-3 pure-u-22-24 page-form page-form-light"> | 11 | <div class="pure-u-lg-1-3 pure-u-22-24 page-form page-form-light"> |
12 | <h2 class="window-title">{'Settings'|t}</h2> | 12 | <h2 class="window-title">{'Settings'|t}</h2> |
13 | <div class="tools-item"> | 13 | <div class="tools-item"> |
14 | <a href="./configure" title="{'Change Shaarli settings: title, timezone, etc.'|t}"> | 14 | <a href="{$base_path}/configure" title="{'Change Shaarli settings: title, timezone, etc.'|t}"> |
15 | <span class="pure-button pure-u-lg-2-3 pure-u-3-4">{'Configure your Shaarli'|t}</span> | 15 | <span class="pure-button pure-u-lg-2-3 pure-u-3-4">{'Configure your Shaarli'|t}</span> |
16 | </a> | 16 | </a> |
17 | </div> | 17 | </div> |
18 | <div class="tools-item"> | 18 | <div class="tools-item"> |
19 | <a href="./?do=pluginadmin" title="{'Enable, disable and configure plugins'|t}"> | 19 | <a href="{$base_path}/?do=pluginadmin" title="{'Enable, disable and configure plugins'|t}"> |
20 | <span class="pure-button pure-u-lg-2-3 pure-u-3-4">{'Plugin administration'|t}</span> | 20 | <span class="pure-button pure-u-lg-2-3 pure-u-3-4">{'Plugin administration'|t}</span> |
21 | </a> | 21 | </a> |
22 | </div> | 22 | </div> |
23 | {if="!$openshaarli"} | 23 | {if="!$openshaarli"} |
24 | <div class="tools-item"> | 24 | <div class="tools-item"> |
25 | <a href="./?do=changepasswd" title="{'Change your password'|t}"> | 25 | <a href="{$base_path}/?do=changepasswd" title="{'Change your password'|t}"> |
26 | <span class="pure-button pure-u-lg-2-3 pure-u-3-4">{'Change password'|t}</span> | 26 | <span class="pure-button pure-u-lg-2-3 pure-u-3-4">{'Change password'|t}</span> |
27 | </a> | 27 | </a> |
28 | </div> | 28 | </div> |
29 | {/if} | 29 | {/if} |
30 | <div class="tools-item"> | 30 | <div class="tools-item"> |
31 | <a href="./manage-tags" title="{'Rename or delete a tag in all links'|t}"> | 31 | <a href="{$base_path}/manage-tags" title="{'Rename or delete a tag in all links'|t}"> |
32 | <span class="pure-button pure-u-lg-2-3 pure-u-3-4">{'Manage tags'|t}</span> | 32 | <span class="pure-button pure-u-lg-2-3 pure-u-3-4">{'Manage tags'|t}</span> |
33 | </a> | 33 | </a> |
34 | </div> | 34 | </div> |
35 | <div class="tools-item"> | 35 | <div class="tools-item"> |
36 | <a href="./?do=import" | 36 | <a href="{$base_path}/?do=import" |
37 | title="{'Import Netscape HTML bookmarks (as exported from Firefox, Chrome, Opera, delicious...)'|t}"> | 37 | title="{'Import Netscape HTML bookmarks (as exported from Firefox, Chrome, Opera, delicious...)'|t}"> |
38 | <span class="pure-button pure-u-lg-2-3 pure-u-3-4">{'Import links'|t}</span> | 38 | <span class="pure-button pure-u-lg-2-3 pure-u-3-4">{'Import links'|t}</span> |
39 | </a> | 39 | </a> |
40 | </div> | 40 | </div> |
41 | <div class="tools-item"> | 41 | <div class="tools-item"> |
42 | <a href="./?do=export" | 42 | <a href="{$base_path}/?do=export" |
43 | title="{'Export Netscape HTML bookmarks (which can be imported in Firefox, Chrome, Opera, delicious...)'|t}"> | 43 | title="{'Export Netscape HTML bookmarks (which can be imported in Firefox, Chrome, Opera, delicious...)'|t}"> |
44 | <span class="pure-button pure-u-lg-2-3 pure-u-3-4">{'Export database'|t}</span> | 44 | <span class="pure-button pure-u-lg-2-3 pure-u-3-4">{'Export database'|t}</span> |
45 | </a> | 45 | </a> |
@@ -47,7 +47,7 @@ | |||
47 | 47 | ||
48 | {if="$thumbnails_enabled"} | 48 | {if="$thumbnails_enabled"} |
49 | <div class="tools-item"> | 49 | <div class="tools-item"> |
50 | <a href="./?do=thumbs_update" title="{'Synchronize all link thumbnails'|t}"> | 50 | <a href="{$base_path}/?do=thumbs_update" title="{'Synchronize all link thumbnails'|t}"> |
51 | <span class="pure-button pure-u-lg-2-3 pure-u-3-4">{'Synchronize thumbnails'|t}</span> | 51 | <span class="pure-button pure-u-lg-2-3 pure-u-3-4">{'Synchronize thumbnails'|t}</span> |
52 | </a> | 52 | </a> |
53 | </div> | 53 | </div> |
diff --git a/tpl/vintage/404.html b/tpl/vintage/404.html index 53e98e2e..0fef0f08 100644 --- a/tpl/vintage/404.html +++ b/tpl/vintage/404.html | |||
@@ -10,7 +10,7 @@ | |||
10 | <div class="error-container"> | 10 | <div class="error-container"> |
11 | <h1>404 Not found <small>Oh crap!</small></h1> | 11 | <h1>404 Not found <small>Oh crap!</small></h1> |
12 | <p>{$error_message}</p> | 12 | <p>{$error_message}</p> |
13 | <p>Would you mind <a href="?">clicking here</a>?</p> | 13 | <p>Would you mind <a href="{$base_path}/">clicking here</a>?</p> |
14 | </div> | 14 | </div> |
15 | {include="page.footer"} | 15 | {include="page.footer"} |
16 | </body> | 16 | </body> |
diff --git a/tpl/vintage/addlink.html b/tpl/vintage/addlink.html index 13dbb36e..e1d65225 100644 --- a/tpl/vintage/addlink.html +++ b/tpl/vintage/addlink.html | |||
@@ -5,7 +5,7 @@ | |||
5 | <div id="pageheader"> | 5 | <div id="pageheader"> |
6 | {include="page.header"} | 6 | {include="page.header"} |
7 | <div id="headerform"> | 7 | <div id="headerform"> |
8 | <form method="GET" action="./shaare" name="addform" class="addform"> | 8 | <form method="GET" action="{$base_path}/shaare" name="addform" class="addform"> |
9 | <input type="text" name="post" class="linkurl"> | 9 | <input type="text" name="post" class="linkurl"> |
10 | <input type="submit" value="Add link" class="bigbutton"> | 10 | <input type="submit" value="Add link" class="bigbutton"> |
11 | </form> | 11 | </form> |
diff --git a/tpl/vintage/configure.html b/tpl/vintage/configure.html index a87fdce7..d04c69a9 100644 --- a/tpl/vintage/configure.html +++ b/tpl/vintage/configure.html | |||
@@ -16,7 +16,7 @@ | |||
16 | <tr> | 16 | <tr> |
17 | <td><b>Home link:</b></td> | 17 | <td><b>Home link:</b></td> |
18 | <td><input type="text" name="titleLink" id="titleLink" size="50" value="{$titleLink}"><br/><label | 18 | <td><input type="text" name="titleLink" id="titleLink" size="50" value="{$titleLink}"><br/><label |
19 | for="titleLink">(default value is: ./)</label></td> | 19 | for="titleLink">(default value is: {$base_path}/)</label></td> |
20 | </tr> | 20 | </tr> |
21 | 21 | ||
22 | <tr> | 22 | <tr> |
@@ -159,7 +159,7 @@ | |||
159 | {if="! $gd_enabled"} | 159 | {if="! $gd_enabled"} |
160 | {'You need to enable the extension <code>php-gd</code> to use thumbnails.'|t} | 160 | {'You need to enable the extension <code>php-gd</code> to use thumbnails.'|t} |
161 | {elseif="$thumbnails_enabled"} | 161 | {elseif="$thumbnails_enabled"} |
162 | <a href="./?do=thumbs_update">{'Synchonize thumbnails'|t}</a> | 162 | <a href="{$base_path}/?do=thumbs_update">{'Synchonize thumbnails'|t}</a> |
163 | {/if} | 163 | {/if} |
164 | </label> | 164 | </label> |
165 | </td> | 165 | </td> |
diff --git a/tpl/vintage/daily.html b/tpl/vintage/daily.html index a459e21a..74f6cdc7 100644 --- a/tpl/vintage/daily.html +++ b/tpl/vintage/daily.html | |||
@@ -14,9 +14,9 @@ | |||
14 | 14 | ||
15 | <div class="dailyAbout"> | 15 | <div class="dailyAbout"> |
16 | All links of one day<br>in a single page.<br> | 16 | All links of one day<br>in a single page.<br> |
17 | {if="$previousday"} <a href="./daily&day={$previousday}"><b><</b>Previous day</a>{else}<b><</b>Previous day{/if} | 17 | {if="$previousday"} <a href="{$base_path}/daily&day={$previousday}"><b><</b>Previous day</a>{else}<b><</b>Previous day{/if} |
18 | - | 18 | - |
19 | {if="$nextday"}<a href="./daily&day={$nextday}">Next day<b>></b></a>{else}Next day<b>></b>{/if} | 19 | {if="$nextday"}<a href="{$base_path}/daily&day={$nextday}">Next day<b>></b></a>{else}Next day<b>></b>{/if} |
20 | <br> | 20 | <br> |
21 | 21 | ||
22 | {loop="$daily_about_plugin"} | 22 | {loop="$daily_about_plugin"} |
@@ -24,13 +24,13 @@ | |||
24 | {/loop} | 24 | {/loop} |
25 | 25 | ||
26 | <br> | 26 | <br> |
27 | <a href="./daily-rss" title="1 RSS entry per day"><img src="img/feed-icon-14x14.png" alt="rss_feed">Daily RSS Feed</a> | 27 | <a href="{$base_path}/daily-rss" title="1 RSS entry per day"><img src="{$asset_path}/img/feed-icon-14x14.png#" alt="rss_feed">Daily RSS Feed</a> |
28 | </div> | 28 | </div> |
29 | 29 | ||
30 | <div class="dailyTitle"> | 30 | <div class="dailyTitle"> |
31 | <img src="img/floral_left.png" width="51" height="50" class="nomobile" alt="floral_left"> | 31 | <img src="{$asset_path}/img/floral_left.png#" width="51" height="50" class="nomobile" alt="floral_left"> |
32 | The Daily Shaarli | 32 | The Daily Shaarli |
33 | <img src="img/floral_right.png" width="51" height="50" class="nomobile" alt="floral_right"> | 33 | <img src="{$asset_path}/img/floral_right.png#" width="51" height="50" class="nomobile" alt="floral_right"> |
34 | </div> | 34 | </div> |
35 | 35 | ||
36 | <div class="dailyDate"> | 36 | <div class="dailyDate"> |
@@ -52,13 +52,13 @@ | |||
52 | {$link=$value} | 52 | {$link=$value} |
53 | <div class="dailyEntry"> | 53 | <div class="dailyEntry"> |
54 | <div class="dailyEntryPermalink"> | 54 | <div class="dailyEntryPermalink"> |
55 | <a href="?{$value.shorturl}"> | 55 | <a href="{$base_path}/?{$value.shorturl}"> |
56 | <img src="img/squiggle.png" width="25" height="26" title="permalink" alt="permalink"> | 56 | <img src="{$asset_path}/img/squiggle.png#" width="25" height="26" title="permalink" alt="permalink"> |
57 | </a> | 57 | </a> |
58 | </div> | 58 | </div> |
59 | {if="!$hide_timestamps || $is_logged_in"} | 59 | {if="!$hide_timestamps || $is_logged_in"} |
60 | <div class="dailyEntryLinkdate"> | 60 | <div class="dailyEntryLinkdate"> |
61 | <a href="?{$value.shorturl}">{function="strftime('%c', $link.timestamp)"}</a> | 61 | <a href="{$base_path}/?{$value.shorturl}">{function="strftime('%c', $link.timestamp)"}</a> |
62 | </div> | 62 | </div> |
63 | {/if} | 63 | {/if} |
64 | {if="$link.tags"} | 64 | {if="$link.tags"} |
@@ -101,9 +101,9 @@ | |||
101 | {$value} | 101 | {$value} |
102 | {/loop} | 102 | {/loop} |
103 | </div> | 103 | </div> |
104 | <div id="closing"><img src="img/squiggle_closing.png" width="66" height="61" alt="-"></div> | 104 | <div id="closing"><img src="{$asset_path}/img/squiggle_closing.png#" width="66" height="61" alt="-"></div> |
105 | </div> | 105 | </div> |
106 | {include="page.footer"} | 106 | {include="page.footer"} |
107 | <script src="js/thumbnails.min.js?v={$version_hash}"></script> | 107 | <script src="{$asset_path}/js/thumbnails.min.js?v={$version_hash}#"></script> |
108 | </body> | 108 | </body> |
109 | </html> | 109 | </html> |
diff --git a/tpl/vintage/editlink.html b/tpl/vintage/editlink.html index 6f7a330f..593fe71a 100644 --- a/tpl/vintage/editlink.html +++ b/tpl/vintage/editlink.html | |||
@@ -48,7 +48,7 @@ | |||
48 | {/if} | 48 | {/if} |
49 | <input type="submit" value="Save" name="save_edit" class="bigbutton"> | 49 | <input type="submit" value="Save" name="save_edit" class="bigbutton"> |
50 | {if="!$link_is_new && isset($link.id)"} | 50 | {if="!$link_is_new && isset($link.id)"} |
51 | <a href="?delete_link&lf_linkdate={$link.id}&token={$token}" | 51 | <a href="{$base_path}/?delete_link&lf_linkdate={$link.id}&token={$token}" |
52 | name="delete_link" class="bigbutton" | 52 | name="delete_link" class="bigbutton" |
53 | onClick="return confirmDeleteLink();"> | 53 | onClick="return confirmDeleteLink();"> |
54 | {'Delete'|t} | 54 | {'Delete'|t} |
diff --git a/tpl/vintage/error.html b/tpl/vintage/error.html index b6e62be0..64f54cd2 100644 --- a/tpl/vintage/error.html +++ b/tpl/vintage/error.html | |||
@@ -18,7 +18,7 @@ | |||
18 | </pre> | 18 | </pre> |
19 | {/if} | 19 | {/if} |
20 | 20 | ||
21 | <p>Would you mind <a href="?">clicking here</a>?</p> | 21 | <p>Would you mind <a href="{$base_path}/">clicking here</a>?</p> |
22 | </div> | 22 | </div> |
23 | {include="page.footer"} | 23 | {include="page.footer"} |
24 | </body> | 24 | </body> |
diff --git a/tpl/vintage/import.html b/tpl/vintage/import.html index 2ab2cc0a..a2e37751 100644 --- a/tpl/vintage/import.html +++ b/tpl/vintage/import.html | |||
@@ -6,7 +6,7 @@ | |||
6 | {include="page.header"} | 6 | {include="page.header"} |
7 | <div id="uploaddiv"> | 7 | <div id="uploaddiv"> |
8 | Import Netscape HTML bookmarks (as exported from Firefox/Chrome/Opera/Delicious/Diigo...) (Max: {$maxfilesize}). | 8 | Import Netscape HTML bookmarks (as exported from Firefox/Chrome/Opera/Delicious/Diigo...) (Max: {$maxfilesize}). |
9 | <form method="POST" action="./?do=import" enctype="multipart/form-data" | 9 | <form method="POST" action="{$base_path}/?do=import" enctype="multipart/form-data" |
10 | name="uploadform" id="uploadform"> | 10 | name="uploadform" id="uploadform"> |
11 | <input type="hidden" name="token" value="{$token}"> | 11 | <input type="hidden" name="token" value="{$token}"> |
12 | <input type="hidden" name="MAX_FILE_SIZE" value="{$maxfilesize}"> | 12 | <input type="hidden" name="MAX_FILE_SIZE" value="{$maxfilesize}"> |
diff --git a/tpl/vintage/includes.html b/tpl/vintage/includes.html index 61448eaf..7c4d9311 100644 --- a/tpl/vintage/includes.html +++ b/tpl/vintage/includes.html | |||
@@ -8,13 +8,13 @@ | |||
8 | <link href="img/favicon.ico" rel="shortcut icon" type="image/x-icon" /> | 8 | <link href="img/favicon.ico" rel="shortcut icon" type="image/x-icon" /> |
9 | <link type="text/css" rel="stylesheet" href="css/shaarli.min.css" /> | 9 | <link type="text/css" rel="stylesheet" href="css/shaarli.min.css" /> |
10 | {if="$formatter==='markdown'"} | 10 | {if="$formatter==='markdown'"} |
11 | <link type="text/css" rel="stylesheet" href="css/markdown.min.css?v={$version_hash}" /> | 11 | <link type="text/css" rel="stylesheet" href="{$asset_path}/css/markdown.min.css?v={$version_hash}#" /> |
12 | {/if} | 12 | {/if} |
13 | {loop="$plugins_includes.css_files"} | 13 | {loop="$plugins_includes.css_files"} |
14 | <link type="text/css" rel="stylesheet" href="{$value}#"/> | 14 | <link type="text/css" rel="stylesheet" href="{$value}#"/> |
15 | {/loop} | 15 | {/loop} |
16 | {if="is_file('data/user.css')"}<link type="text/css" rel="stylesheet" href="data/user.css#" />{/if} | 16 | {if="is_file('data/user.css')"}<link type="text/css" rel="stylesheet" href="data/user.css#" />{/if} |
17 | <link rel="search" type="application/opensearchdescription+xml" href="./open-search#" | 17 | <link rel="search" type="application/opensearchdescription+xml" href="{$base_path}/open-search#" |
18 | title="Shaarli search - {$shaarlititle|htmlspecialchars}" /> | 18 | title="Shaarli search - {$shaarlititle|htmlspecialchars}" /> |
19 | {if="! empty($links) && count($links) === 1"} | 19 | {if="! empty($links) && count($links) === 1"} |
20 | {$link=reset($links)} | 20 | {$link=reset($links)} |
diff --git a/tpl/vintage/linklist.html b/tpl/vintage/linklist.html index 502abcf9..8db8f70b 100644 --- a/tpl/vintage/linklist.html +++ b/tpl/vintage/linklist.html | |||
@@ -66,12 +66,12 @@ | |||
66 | tagged | 66 | tagged |
67 | {loop="$exploded_tags"} | 67 | {loop="$exploded_tags"} |
68 | <span class="linktag" title="Remove tag"> | 68 | <span class="linktag" title="Remove tag"> |
69 | <a href="./remove-tag/{function="urlencode($value)"}">{$value} <span class="remove">x</span></a> | 69 | <a href="{$base_path}/remove-tag/{function="urlencode($value)"}">{$value} <span class="remove">x</span></a> |
70 | </span> | 70 | </span> |
71 | {/loop} | 71 | {/loop} |
72 | {elseif="$search_tags === false"} | 72 | {elseif="$search_tags === false"} |
73 | <span class="linktag" title="Remove tag"> | 73 | <span class="linktag" title="Remove tag"> |
74 | <a href="?">untagged <span class="remove">x</span></a> | 74 | <a href="{$base_path}/">untagged <span class="remove">x</span></a> |
75 | </span> | 75 | </span> |
76 | {/if} | 76 | {/if} |
77 | </div> | 77 | </div> |
@@ -95,13 +95,13 @@ | |||
95 | <div class="linkeditbuttons"> | 95 | <div class="linkeditbuttons"> |
96 | <form method="GET" class="buttoneditform"> | 96 | <form method="GET" class="buttoneditform"> |
97 | <input type="hidden" name="edit_link" value="{$value.id}"> | 97 | <input type="hidden" name="edit_link" value="{$value.id}"> |
98 | <input type="image" alt="Edit" src="img/edit_icon.png" title="Edit" class="button_edit"> | 98 | <input type="image" alt="Edit" src="{$asset_path}/img/edit_icon.png#" title="Edit" class="button_edit"> |
99 | </form><br> | 99 | </form><br> |
100 | <form method="GET" class="buttoneditform"> | 100 | <form method="GET" class="buttoneditform"> |
101 | <input type="hidden" name="lf_linkdate" value="{$value.id}"> | 101 | <input type="hidden" name="lf_linkdate" value="{$value.id}"> |
102 | <input type="hidden" name="token" value="{$token}"> | 102 | <input type="hidden" name="token" value="{$token}"> |
103 | <input type="hidden" name="delete_link"> | 103 | <input type="hidden" name="delete_link"> |
104 | <input type="image" alt="Delete" src="img/delete_icon.png" title="Delete" | 104 | <input type="image" alt="Delete" src="{$asset_path}/img/delete_icon.png#" title="Delete" |
105 | class="button_delete" onClick="return confirmDeleteLink();"> | 105 | class="button_delete" onClick="return confirmDeleteLink();"> |
106 | </form> | 106 | </form> |
107 | </div> | 107 | </div> |
@@ -114,7 +114,7 @@ | |||
114 | {if="!$hide_timestamps || $is_logged_in"} | 114 | {if="!$hide_timestamps || $is_logged_in"} |
115 | {$updated=$value.updated_timestamp ? 'Edited: '. format_date($value.updated) : 'Permalink'} | 115 | {$updated=$value.updated_timestamp ? 'Edited: '. format_date($value.updated) : 'Permalink'} |
116 | <span class="linkdate" title="Permalink"> | 116 | <span class="linkdate" title="Permalink"> |
117 | <a href="?{$value.shorturl}"> | 117 | <a href="{$base_path}/?{$value.shorturl}"> |
118 | <span title="{$updated}"> | 118 | <span title="{$updated}"> |
119 | {$value.created|format_date} | 119 | {$value.created|format_date} |
120 | {if="$value.updated_timestamp"}*{/if} | 120 | {if="$value.updated_timestamp"}*{/if} |
@@ -123,7 +123,7 @@ | |||
123 | </a> - | 123 | </a> - |
124 | </span> | 124 | </span> |
125 | {else} | 125 | {else} |
126 | <span class="linkdate" title="Short link here"><a href="?{$value.shorturl}">permalink</a> - </span> | 126 | <span class="linkdate" title="Short link here"><a href="{$base_path}/?{$value.shorturl}">permalink</a> - </span> |
127 | {/if} | 127 | {/if} |
128 | 128 | ||
129 | {loop="$value.link_plugin"} | 129 | {loop="$value.link_plugin"} |
@@ -133,7 +133,7 @@ | |||
133 | <a href="{$value.real_url}"><span class="linkurl" title="Short link">{$value.url}</span></a><br> | 133 | <a href="{$value.real_url}"><span class="linkurl" title="Short link">{$value.url}</span></a><br> |
134 | {if="$value.tags"} | 134 | {if="$value.tags"} |
135 | <div class="linktaglist"> | 135 | <div class="linktaglist"> |
136 | {loop="$value.taglist"}<span class="linktag" title="Add tag"><a href="./add-tag/{$value|urlencode}">{$value}</a></span> {/loop} | 136 | {loop="$value.taglist"}<span class="linktag" title="Add tag"><a href="{$base_path}/add-tag/{$value|urlencode}">{$value}</a></span> {/loop} |
137 | </div> | 137 | </div> |
138 | {/if} | 138 | {/if} |
139 | 139 | ||
@@ -154,7 +154,7 @@ | |||
154 | </div> | 154 | </div> |
155 | 155 | ||
156 | {include="page.footer"} | 156 | {include="page.footer"} |
157 | <script src="js/thumbnails.min.js"></script> | 157 | <script src="{$asset_path}/js/thumbnails.min.js#"></script> |
158 | 158 | ||
159 | </body> | 159 | </body> |
160 | </html> | 160 | </html> |
diff --git a/tpl/vintage/linklist.paging.html b/tpl/vintage/linklist.paging.html index 797104dc..ea6a5ea2 100644 --- a/tpl/vintage/linklist.paging.html +++ b/tpl/vintage/linklist.paging.html | |||
@@ -1,11 +1,11 @@ | |||
1 | <div class="paging"> | 1 | <div class="paging"> |
2 | {if="$is_logged_in"} | 2 | {if="$is_logged_in"} |
3 | <div class="paging_privatelinks"> | 3 | <div class="paging_privatelinks"> |
4 | <a href="./visibility/private"> | 4 | <a href="{$base_path}/visibility/private"> |
5 | {if="$visibility=='private'"} | 5 | {if="$visibility=='private'"} |
6 | <img src="img/private_16x16_active.png" width="16" height="16" title="Click to see all links" alt="Click to see all links"> | 6 | <img src="{$asset_path}/img/private_16x16_active.png#" width="16" height="16" title="Click to see all links" alt="Click to see all links"> |
7 | {else} | 7 | {else} |
8 | <img src="img/private_16x16.png" width="16" height="16" title="Click to see only private links" alt="Click to see only private links"> | 8 | <img src="{$asset_path}/img/private_16x16.png#" width="16" height="16" title="Click to see only private links" alt="Click to see only private links"> |
9 | {/if} | 9 | {/if} |
10 | </a> | 10 | </a> |
11 | 11 | ||
@@ -24,10 +24,10 @@ | |||
24 | {/loop} | 24 | {/loop} |
25 | <div class="paging_linksperpage"> | 25 | <div class="paging_linksperpage"> |
26 | Links per page: | 26 | Links per page: |
27 | <a href="./links-per-page?nb=20">20</a> | 27 | <a href="{$base_path}/links-per-page?nb=20">20</a> |
28 | <a href="./links-per-page?nb=50">50</a> | 28 | <a href="{$base_path}/links-per-page?nb=50">50</a> |
29 | <a href="./links-per-page?nb=100">100</a> | 29 | <a href="{$base_path}/links-per-page?nb=100">100</a> |
30 | <form method="GET" class="linksperpage" action="./links-per-page"> | 30 | <form method="GET" class="linksperpage" action="{$base_path}/links-per-page"> |
31 | <input type="text" name="nb" size="2"> | 31 | <input type="text" name="nb" size="2"> |
32 | </form> | 32 | </form> |
33 | </div> | 33 | </div> |
diff --git a/tpl/vintage/page.footer.html b/tpl/vintage/page.footer.html index a3380841..6d9021e3 100644 --- a/tpl/vintage/page.footer.html +++ b/tpl/vintage/page.footer.html | |||
@@ -23,7 +23,7 @@ | |||
23 | </div> | 23 | </div> |
24 | {/if} | 24 | {/if} |
25 | 25 | ||
26 | <script src="js/shaarli.min.js"></script> | 26 | <script src="{$asset_path}/js/shaarli.min.js#"></script> |
27 | 27 | ||
28 | {if="$is_logged_in"} | 28 | {if="$is_logged_in"} |
29 | <script>function confirmDeleteLink() { var agree=confirm("Are you sure you want to delete this link ?"); if (agree) return true ; else return false ; }</script> | 29 | <script>function confirmDeleteLink() { var agree=confirm("Are you sure you want to delete this link ?"); if (agree) return true ; else return false ; }</script> |
diff --git a/tpl/vintage/page.header.html b/tpl/vintage/page.header.html index 8f9b6cc5..0f79d321 100644 --- a/tpl/vintage/page.header.html +++ b/tpl/vintage/page.header.html | |||
@@ -18,22 +18,22 @@ | |||
18 | {else} | 18 | {else} |
19 | <li><a href="{$titleLink}" class="nomobile">Home</a></li> | 19 | <li><a href="{$titleLink}" class="nomobile">Home</a></li> |
20 | {if="$is_logged_in"} | 20 | {if="$is_logged_in"} |
21 | <li><a href="./logout">Logout</a></li> | 21 | <li><a href="{$base_path}/logout">Logout</a></li> |
22 | <li><a href="./tools">Tools</a></li> | 22 | <li><a href="{$base_path}/tools">Tools</a></li> |
23 | <li><a href="./add-shaare">Add link</a></li> | 23 | <li><a href="{$base_path}/add-shaare">Add link</a></li> |
24 | {elseif="$openshaarli"} | 24 | {elseif="$openshaarli"} |
25 | <li><a href="./tools">Tools</a></li> | 25 | <li><a href="{$base_path}/tools">Tools</a></li> |
26 | <li><a href="./add-shaare">Add link</a></li> | 26 | <li><a href="{$base_path}/add-shaare">Add link</a></li> |
27 | {else} | 27 | {else} |
28 | <li><a href="./login">Login</a></li> | 28 | <li><a href="{$base_path}/login">Login</a></li> |
29 | {/if} | 29 | {/if} |
30 | <li><a href="{$feedurl}/feed-rss?{$searchcrits}" class="nomobile">RSS Feed</a></li> | 30 | <li><a href="{$feedurl}/feed-rss?{$searchcrits}" class="nomobile">RSS Feed</a></li> |
31 | {if="$showatom"} | 31 | {if="$showatom"} |
32 | <li><a href="{$feedurl}/feed-atom?{$searchcrits}" class="nomobile">ATOM Feed</a></li> | 32 | <li><a href="{$feedurl}/feed-atom?{$searchcrits}" class="nomobile">ATOM Feed</a></li> |
33 | {/if} | 33 | {/if} |
34 | <li><a href="./tag-cloud">Tag cloud</a></li> | 34 | <li><a href="{$base_path}/tag-cloud">Tag cloud</a></li> |
35 | <li><a href="./picture-wall{function="ltrim($searchcrits, '&')"}">Picture wall</a></li> | 35 | <li><a href="{$base_path}/picture-wall{function="ltrim($searchcrits, '&')"}">Picture wall</a></li> |
36 | <li><a href="./daily">Daily</a></li> | 36 | <li><a href="{$base_path}/daily">Daily</a></li> |
37 | {loop="$plugins_header.buttons_toolbar"} | 37 | {loop="$plugins_header.buttons_toolbar"} |
38 | <li><a | 38 | <li><a |
39 | {loop="$value.attr"} | 39 | {loop="$value.attr"} |
diff --git a/tpl/vintage/picwall.html b/tpl/vintage/picwall.html index b3a16791..da3aa36c 100644 --- a/tpl/vintage/picwall.html +++ b/tpl/vintage/picwall.html | |||
@@ -38,6 +38,6 @@ | |||
38 | 38 | ||
39 | {include="page.footer"} | 39 | {include="page.footer"} |
40 | 40 | ||
41 | <script src="js/thumbnails.min.js"></script> | 41 | <script src="{$asset_path}/js/thumbnails.min.js#"></script> |
42 | </body> | 42 | </body> |
43 | </html> | 43 | </html> |
diff --git a/tpl/vintage/pluginsadmin.html b/tpl/vintage/pluginsadmin.html index fdc7d95e..c94dc211 100644 --- a/tpl/vintage/pluginsadmin.html +++ b/tpl/vintage/pluginsadmin.html | |||
@@ -16,7 +16,7 @@ | |||
16 | </noscript> | 16 | </noscript> |
17 | 17 | ||
18 | <div id="pluginsadmin"> | 18 | <div id="pluginsadmin"> |
19 | <form action="./?do=save_pluginadmin" method="POST"> | 19 | <form action="{$base_path}/?do=save_pluginadmin" method="POST"> |
20 | <section id="enabled_plugins"> | 20 | <section id="enabled_plugins"> |
21 | <h1>Enabled Plugins</h1> | 21 | <h1>Enabled Plugins</h1> |
22 | 22 | ||
@@ -88,7 +88,7 @@ | |||
88 | </section> | 88 | </section> |
89 | </form> | 89 | </form> |
90 | 90 | ||
91 | <form action="./?do=save_pluginadmin" method="POST"> | 91 | <form action="{$base_path}/?do=save_pluginadmin" method="POST"> |
92 | <section id="plugin_parameters"> | 92 | <section id="plugin_parameters"> |
93 | <h1>Enabled Plugin Parameters</h1> | 93 | <h1>Enabled Plugin Parameters</h1> |
94 | 94 | ||
diff --git a/tpl/vintage/tag.cloud.html b/tpl/vintage/tag.cloud.html index 4bc4bf88..5d21f239 100644 --- a/tpl/vintage/tag.cloud.html +++ b/tpl/vintage/tag.cloud.html | |||
@@ -12,8 +12,8 @@ | |||
12 | 12 | ||
13 | <div id="cloudtag"> | 13 | <div id="cloudtag"> |
14 | {loop="$tags"} | 14 | {loop="$tags"} |
15 | <a href="./add-tag/{$key|urlencode}" class="count">{$value.count}</a><a | 15 | <a href="{$base_path}/add-tag/{$key|urlencode}" class="count">{$value.count}</a><a |
16 | href="./?searchtags={$key|urlencode}" style="font-size:{$value.size}em;">{$key}</a> | 16 | href="{$base_path}/?searchtags={$key|urlencode}" style="font-size:{$value.size}em;">{$key}</a> |
17 | {loop="$value.tag_plugin"} | 17 | {loop="$value.tag_plugin"} |
18 | {$value} | 18 | {$value} |
19 | {/loop} | 19 | {/loop} |
diff --git a/tpl/vintage/thumbnails.html b/tpl/vintage/thumbnails.html index 5cad845b..a1537f9c 100644 --- a/tpl/vintage/thumbnails.html +++ b/tpl/vintage/thumbnails.html | |||
@@ -23,6 +23,7 @@ | |||
23 | <input type="hidden" name="ids" value="{function="implode(',', $ids)"}" /> | 23 | <input type="hidden" name="ids" value="{function="implode(',', $ids)"}" /> |
24 | 24 | ||
25 | {include="page.footer"} | 25 | {include="page.footer"} |
26 | <script src="js/thumbnails_update.min.js?v={$version_hash}"></script> | 26 | <input type="hidden" name="js_base_path" value="{$base_path}" /> |
27 | <script src="{$asset_path}/js/thumbnails_update.min.js?v={$version_hash}#"></script> | ||
27 | </body> | 28 | </body> |
28 | </html> | 29 | </html> |
diff --git a/tpl/vintage/tools.html b/tpl/vintage/tools.html index 8f606efb..9caea9cf 100644 --- a/tpl/vintage/tools.html +++ b/tpl/vintage/tools.html | |||
@@ -5,17 +5,17 @@ | |||
5 | <div id="pageheader"> | 5 | <div id="pageheader"> |
6 | {include="page.header"} | 6 | {include="page.header"} |
7 | <div id="toolsdiv"> | 7 | <div id="toolsdiv"> |
8 | <a href="./configure"><b>Configure your Shaarli</b><span>: Change Title, timezone...</span></a> | 8 | <a href="{$base_path}/configure"><b>Configure your Shaarli</b><span>: Change Title, timezone...</span></a> |
9 | <br><br> | 9 | <br><br> |
10 | <a href="./?do=pluginadmin"><b>Plugin administration</b><span>: Enable, disable and configure plugins.</span></a> | 10 | <a href="{$base_path}/?do=pluginadmin"><b>Plugin administration</b><span>: Enable, disable and configure plugins.</span></a> |
11 | <br><br> | 11 | <br><br> |
12 | {if="!$openshaarli"}<a href="?do=changepasswd"><b>Change password</b><span>: Change your password.</span></a> | 12 | {if="!$openshaarli"}<a href="{$base_path}/?do=changepasswd"><b>Change password</b><span>: Change your password.</span></a> |
13 | <br><br>{/if} | 13 | <br><br>{/if} |
14 | <a href="./manage-tags"><b>Rename/delete tags</b><span>: Rename or delete a tag in all links</span></a> | 14 | <a href="{$base_path}/manage-tags"><b>Rename/delete tags</b><span>: Rename or delete a tag in all links</span></a> |
15 | <br><br> | 15 | <br><br> |
16 | <a href="./?do=import"><b>Import</b><span>: Import Netscape html bookmarks (as exported from Firefox, Chrome, Opera, delicious...)</span></a> | 16 | <a href="{$base_path}/?do=import"><b>Import</b><span>: Import Netscape html bookmarks (as exported from Firefox, Chrome, Opera, delicious...)</span></a> |
17 | <br><br> | 17 | <br><br> |
18 | <a href="./?do=export"><b>Export</b><span>: Export Netscape html bookmarks (which can be imported in Firefox, Chrome, Opera, delicious...)</span></a> | 18 | <a href="{$base_path}/?do=export"><b>Export</b><span>: Export Netscape html bookmarks (which can be imported in Firefox, Chrome, Opera, delicious...)</span></a> |
19 | <br><br> | 19 | <br><br> |
20 | <a class="smallbutton" | 20 | <a class="smallbutton" |
21 | onclick="return alertBookmarklet();" | 21 | onclick="return alertBookmarklet();" |