├── .gitignore
├── LICENSE
├── README.md
├── screenshots
├── stack_colors.png
├── stack_desktop.png
├── stack_options.png
└── stack_sml.png
└── stack
├── 404.html
├── _inc
├── back_button.html
├── includes.html
├── linklist.paging.html
├── page.footer.html
├── page.header.html
└── server.requirements.html
├── addlink.html
├── changepassword.html
├── changetag.html
├── configure.html
├── css
├── markdown.min.css
└── stack.css
├── daily.html
├── dailyrss.html
├── editlink.batch.html
├── editlink.html
├── error.html
├── export.bookmarks.html
├── export.html
├── favicons
├── android-chrome-192x192.png
├── android-chrome-512x512.png
├── apple-touch-icon.png
├── favicon-16x16.png
├── favicon-32x32.png
├── favicon.ico
├── favicon.svg
├── safari-pinned-tab.svg
└── site.webmanifest
├── feed.atom.html
├── feed.rss.html
├── fonts
├── DINish-Bold.woff2
├── DINish-BoldItalic.woff2
├── DINish-Italic.woff2
├── DINish-Regular.woff2
├── DINishCondensed-Bold.woff2
├── DINishCondensed-BoldItalic.woff2
├── DINishCondensed-Italic.woff2
└── DINishCondensed-Regular.woff2
├── img
└── sad_star.png
├── import.html
├── install.html
├── js
├── markdown.min.js
├── metadata.min.js
├── metadata.min.js.LICENSE.txt
├── pluginsadmin.min.js
├── shaare_batch.min.js
├── shaarli.js
├── shaarli.min.js
├── shaarli.min.js.LICENSE.txt
├── shaarli.min.old.js
├── thumbnails.min.js
├── thumbnails.min.js.LICENSE.txt
└── thumbnails_update.min.js
├── linklist.html
├── loginform.html
├── opensearch.html
├── picwall.html
├── pluginsadmin.html
├── pluginscontent.html
├── server.html
├── tag.cloud.html
├── tag.list.html
├── tag.sort.html
├── thumbnails.html
└── tools.html
/.gitignore:
--------------------------------------------------------------------------------
1 |
2 | .DS_Store
3 | screenshots/sources/
4 | favicon/
5 | releases/
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | BSD 3-Clause License
2 |
3 | Copyright (c) 2023, Roland
4 |
5 | Redistribution and use in source and binary forms, with or without
6 | modification, are permitted provided that the following conditions are met:
7 |
8 | 1. Redistributions of source code must retain the above copyright notice, this
9 | list of conditions and the following disclaimer.
10 |
11 | 2. Redistributions in binary form must reproduce the above copyright notice,
12 | this list of conditions and the following disclaimer in the documentation
13 | and/or other materials provided with the distribution.
14 |
15 | 3. Neither the name of the copyright holder nor the names of its
16 | contributors may be used to endorse or promote products derived from
17 | this software without specific prior written permission.
18 |
19 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
20 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
22 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
23 | FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
24 | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
25 | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
26 | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
27 | OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Stack for Shaarli
2 | Shaarli Stack is a theme for [Shaarli](https://github.com/shaarli/Shaarli), the personal, minimalist, bookmarking service.
3 |
4 | Stack has been updated for Shaarli 0.13.0
5 |
6 | You can have a preview here : https://liens.rolandtisserand.fr/ or here (with custom user.css) : https://index.rolandtisserand.fr/
7 |
8 |
9 | ---
10 |
11 | ## Differents views
12 | Stack offers three display modes : small / medium /large.
13 |
14 | The admin can set a default view and the user choose antoher one. The display is persistent, thanks to localStorage.
15 |
16 |
17 | 
18 |
19 | 
20 |
21 | ## Black or White or …
22 | By default, Stack use `prefers-color-scheme` to match the user display.
23 |
24 | You can also use the `default colors` plugin to set anything else.
25 |
26 | 
27 |
28 | ## Set options in config.json.php
29 |
30 |
31 | Thanks to [Shaarli-Material](https://github.com/kalvn/Shaarli-Material/), Stack now use the `config.json.php`,
32 | to add options.
33 |
34 | - You can choose the default view (small/medium/large). The user will still be free to set & save a different one.
35 | - Hide the Daily tab (I never use it).
36 | - Add a direct link to make a note (and save one clic!)
37 |
38 | 
39 |
40 |
41 | ### How does it work ?
42 | Options are stored in `data/config.json.php `:
43 |
44 | ```js
45 | "config": {
46 | "STACK_HIDE_DAILY": true,
47 | "STACK_SHOW_NOTE": true,
48 | "STACK_DEFAULT_UI": "small" // small, medium or large
49 | },
50 | ```
51 |
52 | Your `data/config.json.php ` should look like :
53 |
54 | ```js
55 | // …
56 | "resource": {
57 | "data_dir": "data",
58 | "config": "data/config.php",
59 | "datastore": "data/datastore.php",
60 | "ban_file": "data/ipbans.php",
61 | "updates": "data/updates.txt",
62 | "log": "data/log.txt",
63 | "update_check": "data/lastupdatecheck.txt",
64 | "history": "data/history.php",
65 | "raintpl_tpl": "tpl/",
66 | "theme": "stack",
67 | "raintpl_tmp": "tmp/",
68 | "thumbnails_cache": "cache",
69 | "page_cache": "pagecache"
70 | },
71 | "config": {
72 | "STACK_HIDE_DAILY": true,
73 | "STACK_SHOW_NOTE": true,
74 | "STACK_DEFAULT_UI": "small"
75 | },
76 | //…
77 | ```
78 |
79 |
80 | ## 🧩 Supported or tested plugins
81 |
82 | * markdown toolbar
83 | * addlink toolbar
84 | * default colors
85 | * persistags
86 | * playvideos
87 | * qrcode
88 | * wallabag
89 | * readitlater
90 |
91 | ## 🏗 Installation
92 |
93 | Upload `stack` folder to the `/tpl/` folder.
94 | Activate it through admin panel.
95 |
96 | ## 💡 What next ?
97 |
98 | * Better accessibility
99 | * Optimize JS
100 |
--------------------------------------------------------------------------------
/screenshots/stack_colors.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RolandTi/shaarli-stack/7649f46d2f3d98bc7743b5822df03084bcabf232/screenshots/stack_colors.png
--------------------------------------------------------------------------------
/screenshots/stack_desktop.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RolandTi/shaarli-stack/7649f46d2f3d98bc7743b5822df03084bcabf232/screenshots/stack_desktop.png
--------------------------------------------------------------------------------
/screenshots/stack_options.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RolandTi/shaarli-stack/7649f46d2f3d98bc7743b5822df03084bcabf232/screenshots/stack_options.png
--------------------------------------------------------------------------------
/screenshots/stack_sml.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RolandTi/shaarli-stack/7649f46d2f3d98bc7743b5822df03084bcabf232/screenshots/stack_sml.png
--------------------------------------------------------------------------------
/stack/404.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
{include="_inc/includes"}
4 |
5 | {include="_inc/page.header"}
6 |
7 | {'Sorry, nothing to see here.'|t}
8 |
9 | {$error_message}
10 |
11 |
12 | {include="_inc/page.footer"}
13 |
14 |
15 |
--------------------------------------------------------------------------------
/stack/_inc/back_button.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/stack/_inc/includes.html:
--------------------------------------------------------------------------------
1 | {$pagetitle}
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 | {if="strpos($formatter, 'markdown') !== false"}
21 |
22 | {/if}
23 | {loop="$plugins_includes.css_files"}
24 |
25 | {/loop}
26 | {if="is_file('data/user.css')"}
27 |
28 | {/if}
29 |
31 | {if="$template === 'linklist' && ! empty($links) && count($links) === 1"}
32 | {$link=reset($links)}
33 |
34 |
35 |
36 | {$ogDescription=isset($link.description_src) ? $link.description_src : $link.description}
37 |
38 | {if="!empty($link.thumbnail)"}
39 |
40 | {/if}
41 | {if="!$hide_timestamps || $is_logged_in"}
42 |
43 | {if="!empty($link.updated)"}
44 |
45 | {/if}
46 | {/if}
47 | {loop="link.taglist"}
48 |
49 | {/loop}
50 | {/if}
--------------------------------------------------------------------------------
/stack/_inc/linklist.paging.html:
--------------------------------------------------------------------------------
1 |
2 | {if="!empty($action_plugin)"}
3 | {loop="$action_plugin"}
4 | {$value.attr.class=isset($value.attr.class) ? $value.attr.class : ''}
5 | {$value.attr.class=!empty($value.on) ? $value.attr.class .' filter-on' : $value.attr.class .' filter-off'}
6 |
10 | {$value.html}
11 |
12 | {/loop}
13 | {/if}
14 | {if="count($links)>1"}
15 |
37 |
38 |
39 |
{'Links per page'|t}
40 |
41 | 20
43 | 50
45 | 100
47 |
48 |
53 |
54 |
55 |
56 | {/if}
57 |
58 |
--------------------------------------------------------------------------------
/stack/_inc/page.footer.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
25 |
26 |
27 | {loop="$plugins_footer.endofpage"}
28 | {$value}
29 | {/loop}
30 |
31 | {loop="$plugins_footer.js_files"}
32 |
33 | {/loop}
34 |
35 |
36 | {'Fold'|t}
37 | {'Fold all'|t}
38 | {'Expand'|t}
39 | {'Expand all'|t}
40 | {'Are you sure you want to delete this link?'|t}
41 | {'Are you sure you want to delete this tag?'|t}
42 |
43 | {'The personal, minimalist, super-fast, database free, bookmarking service'|t} {'by the Shaarli community'|t}
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
--------------------------------------------------------------------------------
/stack/_inc/page.header.html:
--------------------------------------------------------------------------------
1 |
110 |
111 |
112 |
113 |
134 |
135 |
136 |
163 |
164 |
165 | {if="!empty($newVersion) || !empty($versionError)"}
166 |
167 |
168 | {if="$newVersion"}
169 | Shaarli {$newVersion}
{'is available'|t} .
170 | {/if}
171 |
172 | {if="$versionError"}
173 | {'Error'|t}: {$versionError}
174 | {/if}
175 |
176 |
177 |
178 | {/if}
179 |
180 | {if="!empty($plugin_errors) && $is_logged_in"}
181 |
182 |
183 |
{loop="plugin_errors"}
{$value}
{/loop}
184 |
185 |
186 | {/if}
187 |
188 | {if="!empty($global_errors)"}
189 |
190 |
194 | {/if}
195 |
196 | {if="!empty($global_warnings)"}
197 |
198 |
202 | {/if}
203 |
204 | {if="!empty($global_successes)"}
205 |
206 |
210 | {/if}
--------------------------------------------------------------------------------
/stack/_inc/server.requirements.html:
--------------------------------------------------------------------------------
1 |
2 | {'Permissions'|t}
3 |
4 | {if="count($permissions) > 0"}
5 | {'There are permissions that need to be fixed.'|t}
6 |
7 |
8 | {loop="$permissions"}
9 |
{$value}
10 | {/loop}
11 |
12 | {else}
13 |
14 | {'All read/write permissions are properly set.'|t}
15 |
16 | {/if}
17 |
18 | PHP
19 |
20 |
21 | {'Running PHP'|t} {$php_version}
22 | {if="$php_has_reached_eol"}
23 | {'End of life: '|t} {$php_eol}
24 | {else}
25 | {/if}
26 |
27 |
28 |
29 |
30 |
31 | {'Extension'|t}
32 | {'Status'|t}
33 | {'Loaded'|t}
34 |
35 |
36 |
37 | {loop="$php_extensions"}
38 |
39 | {$value.name}
40 | {$value.desc}
41 | {$value.required ? t('Required') : t('Optional')}
42 |
43 | {if="$value.loaded"}
44 | {$classLoaded="circle-green"}
45 | {$strLoaded=t('Loaded')}
46 | {else}
47 | {$strLoaded=t('Not loaded')}
48 | {if="$value.required"}
49 | {$classLoaded="circle-red"}
50 | {else}
51 | {$classLoaded="circle-orange"}
52 | {/if}
53 | {/if}
54 |
55 |
56 |
57 |
58 | {/loop}
59 |
60 |
61 |
62 |
--------------------------------------------------------------------------------
/stack/addlink.html:
--------------------------------------------------------------------------------
1 |
2 |
3 | {include="_inc/includes"}
4 |
5 | {include="_inc/page.header"}
6 |
7 | {"Shaare a new link"|t}
8 |
9 |
14 |
15 |
16 |
17 |
18 | {"Shaare multiple new links"|t}
19 | {if="empty($async_metadata)"}{'Metadata asynchronous retrieval is disabled.'|t}
20 | {'We recommend that you enable the setting general > enable_async_metadata in your configuration file to use bulk link creation.'|t}
{/if}
21 |
22 |
36 |
37 |
38 |
39 | {include="_inc/page.footer"}
40 |
41 |
42 |
--------------------------------------------------------------------------------
/stack/changepassword.html:
--------------------------------------------------------------------------------
1 |
2 |
3 | {include="_inc/includes"}
4 |
5 | {include="_inc/page.header"}
6 | {include="_inc/back_button"} {"Change password"|t}
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 | {include="_inc/page.footer"}
18 |
19 |
20 |
--------------------------------------------------------------------------------
/stack/changetag.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | {include="_inc/includes"}
5 |
6 |
7 | {include="_inc/page.header"}
8 | {include="_inc/back_button"} {"Manage tags"|t}
9 |
37 |
38 |
57 | {include="_inc/page.footer"}
58 |
59 |
60 |
--------------------------------------------------------------------------------
/stack/configure.html:
--------------------------------------------------------------------------------
1 |
2 |
3 | {include="_inc/includes"}
4 |
5 | {include="_inc/page.header"}
6 |
7 |
8 |
9 |
10 |
{include="_inc/back_button"} {'Configure'|t}
11 |
12 |
13 |
14 | Shaarli {'title'|t}
15 |
16 |
17 |
18 |
19 |
20 | {'Home link'|t} {'Default value'|t}: {$base_path}/
21 |
22 |
23 |
24 |
25 |
26 | {'Themes'|t}
27 |
28 | {loop="$theme_available"}
29 | {$value|ucfirst}
34 | {/loop}
35 |
36 |
37 |
38 |
39 | {'Description formatter'|t}
40 |
41 | {loop="$formatter_available"}
42 | {$value|ucfirst}
47 | {/loop}
48 |
49 |
50 |
51 |
52 | {'Languages'|t}
53 |
54 | {loop="$languages"}
55 | {$value}
60 | {/loop}
61 |
62 |
63 |
64 |
65 | {'Timezone'|t} {'Continent'|t} · {'City'|t}
66 |
67 | {loop="$continents"}
68 | {if="$key !== 'selected'"}
69 | {$value}
70 | {/if}
71 | {/loop}
72 |
73 |
74 | {loop="$cities"}
75 | {if="$key !== 'selected'"}
76 | {$value.city}
79 | {/if}
80 | {/loop}
81 |
82 |
83 |
84 |
85 | {'Disable session cookie hijacking protection'|t}
86 |
87 | {'Check this if you get disconnected or if your IP address changes often'|t}
88 |
89 |
90 |
92 |
93 |
94 |
95 | {'Private links by default'|t}
96 | {'All new links are private by default'|t}
97 |
98 |
100 |
101 |
102 |
103 | {'RSS direct links'|t}
104 |
105 | {'Check this to use direct URL instead of permalink in feeds'|t}
106 |
107 |
109 |
110 |
111 |
112 | {'Hide public links'|t}
113 |
114 | {'Do not show any links if the user is not logged in'|t}
115 |
116 |
118 |
119 |
120 |
121 | {'Check for updates'|t}
122 | {'Notify me when a new release is ready'|t}
123 |
124 |
126 |
127 |
128 |
129 | {'Automatically retrieve description for new bookmarks'|t}
130 | {'Shaarli will try to retrieve the description from meta HTML headers'|t}
131 |
132 |
134 |
135 |
136 |
137 | {'Enable REST API'|t}
138 | {'Allow third party software to use Shaarli such as mobile application'|t}
139 |
140 |
142 |
143 |
144 |
145 | {'REST API secret'|t}
146 |
147 |
148 |
149 |
150 |
151 |
{'Enable thumbnails'|t}
152 |
153 | {if="! $gd_enabled"}
154 | {'You need to enable the extension php-gd
to use thumbnails.'|t}
155 | {elseif="$thumbnails_enabled"}
156 | {'Synchronize thumbnails'|t}
157 | {/if}
158 |
159 |
160 |
161 | {'All'|t}
162 |
163 | {'Only common media hosts'|t}
164 |
165 | {'None'|t}
166 |
167 |
168 |
169 |
170 |
171 |
172 |
173 | {include="_inc/page.footer"}
174 |
175 |
176 |
177 |
--------------------------------------------------------------------------------
/stack/css/markdown.min.css:
--------------------------------------------------------------------------------
1 | /* @override
2 | https://shaarli:8890/tpl/chaaplin/css/markdown.min.css?*
3 | https://liens.rolandtisserand.fr/tpl/bubbles/css/markdown.min.css?*
4 | https://liens.rolandtisserand.fr/tpl/stack/css/markdown.min.css?* */
5 |
6 |
7 | .markdown img {
8 | max-width: 100%
9 | }
10 |
11 | .markdown h1, .markdown h2, .markdown h3, .markdown h4, .markdown h5, .markdown h6 {
12 | font-weight: normal;
13 | font-style: normal;
14 | }
15 |
16 | .markdown h4, .markdown h5, .markdown h6 {
17 | font-weight: bold
18 | }
19 |
20 | .markdown h1 {
21 | font-size: 2.5em;
22 | margin-bottom: 1ch;
23 | }
24 |
25 | .markdown h2 {
26 | font-size: 2em !important;
27 | color: inherit !important;
28 | }
29 |
30 | .markdown h3 {
31 | font-size: 1.5em;
32 | margin-bottom: 1ch;
33 | }
34 |
35 | .markdown h4 {
36 | font-size: 1.2em
37 | }
38 |
39 | .markdown h5 {
40 | font-size: 1em
41 | }
42 |
43 | .markdown h6 {
44 | font-size: .9em
45 | }
46 |
47 | .markdown blockquote {
48 | padding-left: 1em;
49 | border-left: .2em solid rgba(131, 131, 131, 0.57);
50 | margin: .75em 0;
51 | opacity:.7
52 | }
53 |
54 | .markdown hr {
55 | display: block;
56 | height: 1px;
57 | border: 0;
58 | border-bottom: 1px solid var(--dark-main-color);
59 | margin: 1em 0;
60 | padding: 0
61 | }
62 |
63 |
64 | .markdown pre {
65 | white-space: pre;
66 | white-space: pre-wrap;
67 | word-wrap: break-word
68 | }
69 |
70 | .markdown b, .markdown strong {
71 | font-weight: bold
72 | }
73 |
74 | .markdown dfn, .markdown em {
75 | font-style: italic
76 | }
77 |
78 | .markdown ins {
79 | background: #ff9;
80 | color: #000;
81 | text-decoration: none
82 | }
83 |
84 | .markdown mark {
85 | background: #ff0;
86 | color: #000;
87 | font-style: italic;
88 | font-weight: bold
89 | }
90 |
91 | .markdown sub, .markdown sup {
92 | font-size: 75%;
93 | line-height: 0;
94 | position: relative;
95 | vertical-align: baseline
96 | }
97 |
98 | .markdown sup {
99 | top: -0.5em
100 | }
101 |
102 | .markdown sub {
103 | bottom: -0.25em
104 | }
105 |
106 | .markdown ul, .markdown ol {
107 | margin: 1em 0;
108 | padding: 0 0 0 2em;
109 |
110 | }
111 | .markdown ul {
112 | list-style-type: disc;
113 | }
114 |
115 | .markdown li p:last-child {
116 | margin: 0
117 | }
118 |
119 | .markdown dd {
120 | margin: 0 0 0 2em
121 | }
122 |
123 | .markdown img {
124 | border: 0;
125 | -ms-interpolation-mode: bicubic;
126 | vertical-align: middle
127 | }
128 |
129 | .markdown table {
130 | border-collapse: collapse;
131 | border-spacing: 0
132 | }
133 |
134 | .markdown td {
135 | vertical-align: top
136 | }
137 |
138 | .markdown p {
139 | margin-top:0;
140 | }
141 |
142 |
143 | #linklist .markdown li {
144 | padding: 0;
145 | border: none;
146 | background: none
147 | }
148 |
149 | #linklist .markdown ul li {
150 | list-style-type: square;
151 | }
152 |
153 | #linklist .markdown ol li {
154 | list-style: decimal
155 | }
156 |
157 | .markdown table {
158 | padding: 0
159 | }
160 |
161 | .markdown table tr {
162 | border-top: 1px solid #ccc;
163 | margin: 0;
164 | padding: 0
165 | }
166 |
167 | .markdown table tr:nth-child(2n) {
168 | background-color: var(--color01);
169 | }
170 |
171 | .markdown table tr th {
172 | font-weight: bold;
173 | border: 1px solid var(--color03);
174 | text-align: left;
175 | margin: 0;
176 | padding: 6px 13px
177 | }
178 |
179 | .markdown table tr td {
180 | border: 1px solid var(--color03);
181 | text-align: left;
182 | margin: 0;
183 | padding: 6px 13px
184 | }
185 |
186 | .markdown table tr th :first-child, .markdown table tr td :first-child {
187 | margin-top: 0
188 | }
189 |
190 | .markdown table tr th :last-child, table tr td :last-child {
191 | margin-bottom: 0
192 | }
193 |
194 | .markdown pre {
195 | background-color: rgba(118, 118, 118, 0.2);
196 | padding: 1ch;
197 | padding-left: 1ch;
198 | padding-right: 1ch;
199 | overflow: auto;
200 | font-size: 85%;
201 | }
202 |
203 | .markdown pre code {
204 | direction: ltr;
205 | text-align: left;
206 | white-space: pre;
207 | word-spacing: normal;
208 | word-break: normal;
209 | line-height: 1.7;
210 | tab-size: 4;
211 | hyphens: none;
212 | font-weight: 200;
213 |
214 | }
215 |
216 | .markdown :not(pre) code {
217 | padding: 3px;
218 | background-color: rgba(118, 118, 118, 0.2);
219 | padding-left: 1ch;
220 | padding-right: 1ch;
221 | font-size: 85%;
222 | font-weight: 200;
223 | }
224 |
225 | #pageheader .md_help {
226 | color: #fff
227 | }
228 |
229 | #pageheader .md_help a {
230 | color: #d3d3d3;
231 | font-weight: bold;
232 | text-decoration: underline;
233 | background: none;
234 | box-shadow: none;
235 | padding: 0;
236 | margin: 0
237 | }
238 |
239 | #pageheader .md_help a:hover {
240 | color: #fff
241 | }
242 |
--------------------------------------------------------------------------------
/stack/css/stack.css:
--------------------------------------------------------------------------------
1 | /* @override
2 | https://liens.rolandtisserand.fr/tpl/stack/css/stack.css?*
3 | https://23-shaarli-stack.local:8890/tpl/stack/css/stack.css?*
4 | https://index.rolandtisserand.fr/tpl/stack/css/stack.css?*
5 | */
6 |
7 | :root {
8 | /* CSS Variables matching with the `default colors` plugin */
9 | --main-color: #4FFF06;
10 | --dark-main-color: black;
11 | --background-color: white;
12 | /* Other variables */
13 | --accent-color: rgba(0, 0, 0, 0.05);
14 | --normal-margin: 1rem;
15 | --input-padding: .5rem;
16 | --color-alerte: #FF353B;
17 | --small-font: 1.2rem;
18 | --medium-font: 1.2rem;
19 | --small-medium-font: 1.7rem;
20 | --border-radius: 1rem;
21 | --margin:3vw;
22 | --primary-font:'Dinish',Arial, sans-serif;
23 | --secondary-font:'Dinish Condensed',"Arial Narrow", sans-serif;
24 | --monospace-font: ui-monospace, SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace;
25 | }
26 |
27 | /*Rules for debugging purpose*/
28 |
29 | /*button,svg,div,article {
30 | outline: 1px solid #f3f3f3;
31 | }*/
32 |
33 |
34 | @media (min-width:768px) {
35 | :root {
36 | --small-medium-font: unset;
37 | --medium-font: 1.5rem;
38 | }
39 | }
40 |
41 | @font-face {
42 | font-family: 'Dinish Condensed';
43 | src: url('../fonts/DINishCondensed-Regular.woff2?v=3.008') format('woff2');
44 | font-weight: normal;
45 | font-style: normal;
46 | font-display: swap;
47 | }
48 |
49 | @font-face {
50 | font-family: 'Dinish Condensed';
51 | src: url('../fonts/DINishCondensed-Italic.woff2?v=3.008') format('woff2');
52 | font-weight: normal;
53 | font-style: italic;
54 | font-display: swap;
55 | }
56 |
57 | @font-face {
58 | font-family: 'Dinish Condensed';
59 | src: url('../fonts/DINishCondensed-Bold.woff2?v=3.008') format('woff2');
60 | font-weight: bold;
61 | font-style: normal;
62 | font-display: swap;
63 | }
64 |
65 | @font-face {
66 | font-family: 'Dinish Condensed';
67 | src: url('../fonts/DINishCondensed-BoldItalic.woff2?v=3.008') format('woff2');
68 | font-weight: bold;
69 | font-style: italic;
70 | font-display: swap;
71 | }
72 |
73 | @font-face {
74 | font-family: 'Dinish';
75 | src: url('../fonts/DINish-Regular.woff2?v=3.008') format('woff2');
76 | font-weight: normal;
77 | font-style: normal;
78 | font-display: swap;
79 | }
80 |
81 | @font-face {
82 | font-family: 'Dinish';
83 | src: url('../fonts/DINish-Italic.woff2?v=3.008') format('woff2');
84 | font-weight: normal;
85 | font-style: italic;
86 | font-display: swap;
87 | }
88 |
89 |
90 | @font-face {
91 | font-family: 'Dinish';
92 | src: url('../fonts/DINish-Bold.woff2?v=3.008') format('woff2');
93 | font-weight: bold;
94 | font-style: normal;
95 | font-display: swap;
96 | }
97 |
98 | @font-face {
99 | font-family: 'Dinish';
100 | src: url('../fonts/DINish-BoldItalic.woff2?v=3.008') format('woff2');
101 | font-weight: bold;
102 | font-style: italic;
103 | font-display: swap;
104 | }
105 |
106 | /*div, h1, h2, img, ul, li, p, header, aside, section, footer,svg,path {
107 | outline-width: 1px;
108 | outline-style: solid;
109 | outline-color: rgba(255, 104, 104, 0.77);
110 | }*/
111 | /*
112 | svg {
113 | outline-width: 1px;
114 | outline-style: solid;
115 | outline-color: rgba(206,206,206,0.3);
116 | }*/
117 |
118 | /* @group modern-normalize v1.1.0 */
119 |
120 | /*! modern-normalize v1.1.0 | MIT License | https://github.com/sindresorhus/modern-normalize */
121 |
122 | /*
123 | Document
124 | ========
125 | */
126 |
127 | *, ::before, ::after {
128 | box-sizing: border-box;
129 | }
130 |
131 | html {
132 | -moz-tab-size: 4;
133 | tab-size: 4;
134 | }
135 |
136 | html {
137 | line-height: 1.15; /* 1 */
138 | -webkit-text-size-adjust: 100%; /* 2 */
139 | }
140 |
141 | body {
142 | margin: 0;
143 | }
144 |
145 | /**
146 | Improve consistency of default fonts in all browsers. (https://github.com/sindresorhus/modern-normalize/issues/3)
147 | */
148 |
149 | body {
150 | font-family: var(--secondary-font);
151 | }
152 |
153 | /*
154 | Grouping content
155 | ================
156 | */
157 |
158 | /**
159 | 1. Add the correct height in Firefox.
160 | 2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655)
161 | */
162 |
163 | hr {
164 | height: 0; /* 1 */
165 | color: inherit; /* 2 */
166 | }
167 |
168 | /*
169 | Text-level semantics
170 | ====================
171 | */
172 |
173 | /**
174 | Add the correct text decoration in Chrome, Edge, and Safari.
175 | */
176 |
177 | abbr[title] {
178 | text-decoration: underline dotted;
179 | }
180 |
181 | /**
182 | Add the correct font weight in Edge and Safari.
183 | */
184 |
185 | b, strong {
186 | font-weight: bolder;
187 | }
188 |
189 | /**
190 | 1. Improve consistency of default fonts in all browsers. (https://github.com/sindresorhus/modern-normalize/issues/3)
191 | 2. Correct the odd 'em' font sizing in all browsers.
192 | */
193 |
194 | code, kbd, samp, pre {
195 | font-family: var(--monospace-font); /* 1 */
196 | font-size: 1em; /* 2 */
197 | }
198 |
199 | /**
200 | Add the correct font size in all browsers.
201 | */
202 |
203 | small {
204 | font-size: 80%;
205 | }
206 |
207 | /**
208 | Prevent 'sub' and 'sup' elements from affecting the line height in all browsers.
209 | */
210 |
211 | sub, sup {
212 | font-size: 75%;
213 | line-height: 0;
214 | position: relative;
215 | vertical-align: baseline;
216 | }
217 |
218 | sub {
219 | bottom: -0.25em;
220 | }
221 |
222 | sup {
223 | top: -0.5em;
224 | }
225 |
226 | /*
227 | Tabular data
228 | ============
229 | */
230 |
231 | /**
232 | 1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297)
233 | 2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016)
234 | */
235 |
236 | table {
237 | text-indent: 0; /* 1 */
238 | border-color: inherit; /* 2 */
239 | border-spacing: 0;
240 | }
241 |
242 | /*
243 | Forms
244 | =====
245 | */
246 |
247 | /**
248 | 1. Change the font styles in all browsers.
249 | 2. Remove the margin in Firefox and Safari.
250 | */
251 |
252 | button, input, optgroup, select, textarea {
253 | font-family: inherit; /* 1 */
254 | font-size: 100%; /* 1 */
255 | line-height: 1.15; /* 1 */
256 | margin: 0; /* 2 */
257 | }
258 |
259 | /**
260 | Remove the inheritance of text transform in Edge and Firefox.
261 | 1. Remove the inheritance of text transform in Firefox.
262 | */
263 |
264 | button, select {
265 | /* 1 */
266 | text-transform: none;
267 | }
268 |
269 | /**
270 | Correct the inability to style clickable types in iOS and Safari.
271 | */
272 |
273 | button, [type='button'], [type='reset'], [type='submit'] {
274 | -webkit-appearance: button;
275 | appearance: button;
276 | }
277 |
278 | /**
279 | Remove the inner border and padding in Firefox.
280 | */
281 |
282 | ::-moz-focus-inner {
283 | border-style: none;
284 | padding: 0;
285 | }
286 |
287 | /**
288 | Restore the focus styles unset by the previous rule.
289 | */
290 |
291 | :-moz-focusring {
292 | outline: 1px dotted ButtonText;
293 | }
294 |
295 | /**
296 | Remove the additional ':invalid' styles in Firefox.
297 | See: https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737
298 | */
299 |
300 | :-moz-ui-invalid {
301 | box-shadow: none;
302 | }
303 |
304 | /**
305 | Remove the padding so developers are not caught out when they zero out 'fieldset' elements in all browsers.
306 | */
307 |
308 | legend {
309 | padding: 0;
310 | }
311 |
312 | /**
313 | Add the correct vertical alignment in Chrome and Firefox.
314 | */
315 |
316 | progress {
317 | vertical-align: baseline;
318 | }
319 |
320 | /**
321 | Correct the cursor style of increment and decrement buttons in Safari.
322 | */
323 |
324 | ::-webkit-inner-spin-button, ::-webkit-outer-spin-button {
325 | height: auto;
326 | }
327 |
328 | /**
329 | 1. Correct the odd appearance in Chrome and Safari.
330 | 2. Correct the outline style in Safari.
331 | */
332 |
333 | [type='search'] {
334 | -webkit-appearance: textfield; /* 1 */
335 | outline-offset: -2px; /* 2 */
336 | }
337 |
338 | /**
339 | Remove the inner padding in Chrome and Safari on macOS.
340 | */
341 |
342 | ::-webkit-search-decoration {
343 | -webkit-appearance: none;
344 | }
345 |
346 | /**
347 | 1. Correct the inability to style clickable types in iOS and Safari.
348 | 2. Change font properties to 'inherit' in Safari.
349 | */
350 |
351 | ::-webkit-file-upload-button {
352 | -webkit-appearance: button; /* 1 */
353 | font: inherit; /* 2 */
354 | }
355 |
356 | /*
357 | Interactive
358 | ===========
359 | */
360 |
361 | /*
362 | Add the correct display in Chrome and Safari.
363 | */
364 |
365 | summary {
366 | display: list-item;
367 | }
368 |
369 | /* @end */
370 |
371 | /* @group Awesomplete */
372 |
373 | .awesomplete [hidden] {
374 | display: none;
375 | }
376 |
377 | .awesomplete .visually-hidden {
378 | position: absolute;
379 | clip: rect(0, 0, 0, 0);
380 | }
381 |
382 | .awesomplete {
383 | display: inline-block;
384 | position: relative;
385 | }
386 |
387 | .awesomplete > input {
388 | /* display: block;*/
389 | }
390 |
391 | .awesomplete > ul {
392 | position: absolute;
393 | left: 0;
394 | z-index: 1;
395 | min-width: 100%;
396 | box-sizing: border-box;
397 | list-style: none;
398 | padding: 1ch;
399 | margin: 0;
400 | background: #fff;
401 | }
402 |
403 | .awesomplete > ul:empty {
404 | display: none;
405 | }
406 |
407 | .awesomplete > ul {
408 | border-radius: .3em;
409 | margin: .2em 0 0;
410 | background: var(--background-color);
411 | box-shadow: .05em .2em .6em rgba(0,0,0,.2);
412 | }
413 |
414 | .awesomplete li {
415 | padding-bottom: .5rem;
416 | padding: .5rem;
417 | cursor: pointer;
418 | }
419 |
420 | .awesomplete > ul {
421 | transition: .3s cubic-bezier(.4,.2,.5,1.4);
422 | transform-origin: 1.43em -.43em;
423 | }
424 |
425 | .awesomplete > ul[hidden], .awesomplete > ul:empty {
426 | opacity: 0;
427 | transform: scale(0);
428 | display: block;
429 | transition-timing-function: ease;
430 | }
431 |
432 | .awesomplete mark {
433 | background-color: var(--main-color);
434 | border-radius: 2px;
435 | }
436 |
437 | .awesomplete > ul > li[aria-selected="true"] {
438 | background-color: var(--main-color);
439 | }
440 |
441 | /* @end */
442 |
443 | html {
444 | font-size: 62.5%;
445 | line-height: 1.2;
446 | color: var(--dark-main-color);
447 | background-color: var(--background-color);
448 | }
449 |
450 | body {
451 | font-size: 1.8rem;
452 | /* iphone debug*/
453 | display: flex;
454 | flex-direction: column;
455 | min-height: 100vh;
456 | background-color: var(--background-color);
457 | /* Need to keep this background-color for the javascript matching theme-color */
458 | }
459 |
460 | main {
461 | padding-left: var(--normal-margin);
462 | padding-right: var(--normal-margin);
463 | }
464 |
465 | .hidden, [hidden] {
466 | display: none !important;
467 | }
468 |
469 | .container {
470 | margin-bottom: .5rem;
471 | flex-grow: 2;
472 | display: flex;
473 | flex-direction: column;
474 | }
475 |
476 | .homebody .container {
477 | margin-bottom: 0;
478 | }
479 |
480 | .test {
481 | color: #535553;
482 | }
483 |
484 | .no-padding main {
485 | padding-left: 0;
486 | padding-right: 0;
487 | }
488 |
489 | a {
490 | color: var(--dark-main-color);
491 | }
492 |
493 | .infos-font {
494 | font-size: 1.4rem;
495 | }
496 |
497 | .hidden, .visually-hidden {
498 | display: none;
499 | }
500 |
501 | summary {
502 | cursor: pointer;
503 | }
504 |
505 | details summary > * {
506 | display: inline;
507 | padding-left: .5ch;
508 | }
509 |
510 | details summary {
511 | -webkit-user-select: none;
512 | -moz-user-select: none;
513 | -ms-user-select: none;
514 | user-select: none;
515 | }
516 |
517 | .alerte-rouge, .pure-alert-error {
518 | color: white;
519 | background-color: var(--color-alerte);
520 | padding-left: 1ch;
521 | padding-right: 1ch;
522 | border-radius: var(--border-radius);
523 | }
524 |
525 | .pure-alert-success, .pure-alert-warning {
526 | color: white;
527 | background-color: rgb(0, 205, 81);
528 | margin-top: var(--normal-margin);
529 | margin-bottom: var(--normal-margin);
530 | display: flex;
531 | align-items: center;
532 | justify-content: space-between;
533 | gap:1rem;
534 | padding-left: 1ch;
535 | padding-right: 1ch;
536 | border-radius: var(--border-radius);
537 |
538 | }
539 |
540 | #shaarli-errors-alert {
541 | margin-top: var(--normal-margin);
542 | margin-bottom: var(--normal-margin);
543 | display: flex;
544 | justify-content: space-between;
545 | align-items: center;
546 | align-content: center;
547 | gap:1rem;
548 | }
549 |
550 | .no-padding .pure-alert {
551 | margin-left: var(--normal-margin);
552 | margin-right:var(--normal-margin) ;
553 | }
554 |
555 | .pure-alert-close svg{
556 | cursor: pointer;
557 | background-color: white;
558 | width: 25px;
559 | height: 25px;
560 | display: block;
561 | border-radius: 50%;
562 | padding: 3px;
563 | }
564 |
565 | .svg-close {
566 | fill: none;
567 | stroke: rgb(0, 205, 81);;
568 | stroke-width: 0.2rem;
569 | vector-effect: non-scaling-stroke;
570 | }
571 |
572 | .pure-alert-error .svg-close {
573 | stroke: var(--color-alerte);
574 | }
575 |
576 | #search-result-block {
577 | background-color: var(--dark-main-color);
578 | color: var(--background-color);
579 | padding: 1ch;
580 | border-radius: var(--border-radius);
581 | display: flex;
582 | align-items: center;
583 | gap: 1rem;
584 | margin-right: var(--normal-margin);
585 | margin-left: var(--normal-margin);
586 | margin-top: 1rem;
587 | margin-bottom: 1rem;
588 | padding-left: 2ch;
589 | padding-right: 3ch;
590 | }
591 |
592 | #search-result-block .label-tag a {
593 | color: var(--dark-main-color);
594 | background-color: var(--background-color);
595 | display: inline-flex;
596 | border-radius: .5rem;
597 | padding: .2rem;
598 | padding-left: .6rem;
599 | padding-right: .6rem;
600 | align-items: center;
601 | text-decoration: none;
602 | }
603 |
604 | #search-result-block .remove svg {
605 | margin-left: .5rem;
606 | margin-top: .3rem;
607 | }
608 |
609 | #search-result-block .remove svg circle {
610 | fill: var(--dark-main-color);
611 | }
612 |
613 | #search-result-block .remove .svg-line-thin {
614 | stroke: var(--background-color);
615 | }
616 |
617 | #search-result-block em {
618 | font-weight: normal;
619 | font-style: normal;
620 | }
621 |
622 | .shaarli_title {
623 | font-weight: 600;
624 | letter-spacing: .05ch;
625 | margin-top: 1.5rem;
626 | margin-right: 1.5rem;
627 | padding-left: var(--normal-margin);
628 | }
629 |
630 | /* @group Add / Edit */
631 |
632 | #shaare {
633 | margin-bottom: var(--normal-margin);
634 | }
635 |
636 | .batch-addform [type="submit"] {
637 | margin-top: var(--normal-margin);
638 | }
639 |
640 | .edit-link-container textarea {
641 | min-height: 30vh;
642 | }
643 |
644 | .edit-link-container .awesomplete {
645 | width: 100%;
646 | }
647 |
648 | .md_help {
649 | font-size: var(--medium-font);
650 | padding-bottom: var(--normal-margin);
651 | margin-top: 1ch;
652 | }
653 |
654 | .addlink-batch summary {
655 | margin-bottom: 20px;
656 | }
657 |
658 | .created-date {
659 | font-size: 1.2rem;
660 | margin-bottom: 3ch;
661 | display: block;
662 | }
663 |
664 | /* @end */
665 |
666 | /* @group Tags */
667 |
668 | .tag-sort {
669 | display: flex;
670 | flex-direction: row;
671 | flex-wrap: wrap;
672 | width: 100%;
673 | justify-content: center;
674 | margin-top: 2.4rem;
675 | margin-bottom: 2.4rem;
676 | gap: .5rem;
677 | }
678 |
679 | .tag-sort:first-of-type {
680 | margin-bottom: 0;
681 | }
682 |
683 | .tag-form {
684 | display: flex;
685 | align-items: baseline;
686 | justify-content: space-between;
687 | }
688 |
689 | .taglist-container .rename-tag-form {
690 | display: none;
691 | position: absolute;
692 | left: 0;
693 | background-color: var(--background-color);
694 | }
695 |
696 | .tag-list-item {
697 | border-bottom: 1px solid var(--dark-main-color);
698 | display: flex;
699 | flex-direction: row;
700 | align-items: center;
701 | gap: 1rem;
702 | min-height: 4.5rem;
703 | position: relative;
704 | }
705 |
706 | .tag-list-item .rename-tag, .tag-list-item .delete-tag, .validate-rename-tag {
707 | padding-left: 1ch;
708 | font-weight: 600;
709 | text-decoration: none;
710 | }
711 |
712 | input.rename-tag-input {
713 | margin-bottom: 0;
714 | width: 80% !important;
715 | border: none;
716 |
717 | }
718 |
719 | .tag-link {
720 | flex-grow: 3;
721 | text-decoration: none;
722 | }
723 |
724 | .count {
725 | color: var(--dark-main-color);
726 | opacity: .4;
727 | text-decoration: none;
728 | }
729 |
730 | .delete-tag {
731 | color: var(--color-alerte);
732 | }
733 |
734 | .cloudtag-container {
735 | display: flex;
736 | flex-wrap: wrap;
737 | justify-content: space-between;
738 | gap: .5ch;
739 | align-content: stretch;
740 | }
741 |
742 | .cloudtag-container a {
743 | flex: 1;
744 | background-color: var(--dark-main-color);
745 | color: var(--background-color);
746 | border-radius: 3rem;
747 | padding-left: 1ch;
748 | padding-right: 1ch;
749 | padding-top: .5ch;
750 | padding-bottom: .5ch;
751 | word-break: keep-all;
752 | margin-bottom: 1ch !important;
753 | display: flex;
754 | align-content: center;
755 | text-decoration: none;
756 | transition: background 200ms ease-in-out 0s,color 200ms ease-in-out 0s;
757 | }
758 |
759 | .cloudtag-container a span {
760 | display: block;
761 | width: 100%;
762 | align-self: center;
763 | text-align: center;
764 | }
765 |
766 | .cloudtag-container a:hover {
767 | color: var(--dark-main-color);
768 | background-color: var(--background-color);
769 | transition: background 200ms ease-in-out 0s,color 200ms ease-in-out 0s;
770 | }
771 |
772 | /* @end */
773 |
774 | /* @group Forms */
775 |
776 | .form-entry {
777 | border-bottom: 1px solid var(--accent-color);
778 | padding-top: 1rem;
779 | padding-bottom: 1rem;
780 | display: flex;
781 | flex-direction: row;
782 | gap: 1rem;
783 | align-items: center;
784 | flex-wrap: wrap;
785 | }
786 |
787 | .form-entry.altform {
788 | border: none;
789 | margin-bottom: 1rem;
790 | }
791 |
792 | #editlinkform .form-entry {
793 | border-bottom: none;
794 | }
795 |
796 | .form-entry label {
797 | margin-bottom: 0;
798 | }
799 |
800 | .tools-template .form-entry label {
801 | flex-grow: 3;
802 | flex-basis: 85%;
803 | }
804 |
805 | .form-entry select {
806 | width: 100%;
807 | margin: 0;
808 | display: block;
809 | }
810 |
811 | label, .label-desc {
812 | font-size: 1.2rem;
813 | margin-bottom: 1ch;
814 | display: block;
815 | color: var(--dark-main-color);
816 | }
817 |
818 | #plugin_table label, #disabled_plugins label {
819 | margin-bottom: 0;
820 | }
821 |
822 | th {
823 | text-align: left;
824 | }
825 |
826 | .label-name {
827 | color: var(--dark-main-color);
828 | font-size: 1.6rem;
829 | display: block;
830 | }
831 |
832 | [type="url"], [type="text"], [type="password"], textarea, .toolbar-plugin [type="text"] {
833 | border: none;
834 | width: 100%;
835 | padding: 1ch;
836 | padding-top: .5rem;
837 | padding-bottom: .5rem;
838 | margin-bottom: 1ch;
839 | transition: box-shadow .1s ease-in-out 0s;
840 | background-color: var(--accent-color);
841 | border-bottom: 1px solid var(--dark-main-color);
842 | border-radius: 0px;
843 | }
844 |
845 | @media (min-width:768px) {
846 | [type="url"], [type="text"], [type="password"], textarea, .toolbar-plugin [type="text"] {
847 | padding-top: .7rem;
848 | padding-bottom: .7rem;
849 | }
850 |
851 | }
852 |
853 | .tools-server section [type="text"], .tools-server section [type="text"]:hover, .tools-server section [type="text"]:focus {
854 |
855 | }
856 |
857 | .button, [type="submit"],.button-red,.bigbutton {
858 | display: inline-block;
859 | background-color: var(--dark-main-color);
860 | border: 0px solid var(--dark-main-color);
861 | color: var(--background-color);
862 | cursor: pointer;
863 | padding-top: .5rem;
864 | padding-bottom: .5rem;
865 | padding-left: 1ch;
866 | padding-right: 1ch;
867 | margin-bottom: var(--normal-margin);
868 | transition: background 200ms ease-in-out 0s,color 200ms ease-in-out 0s;
869 | text-decoration: none;
870 | border-radius: .4rem;
871 | }
872 |
873 | @media (min-width:768px) {
874 | .button, [type="submit"],.button-red,.bigbutton {
875 | padding-top: 1ch;
876 | padding-bottom: 1ch; }
877 | }
878 |
879 | .button:hover, [type="submit"]:hover {
880 | color: var(--dark-main-color);
881 | background-color: var(--background-color);
882 | transition: background 200ms ease-in-out 0s,color 200ms ease-in-out 0s;
883 | }
884 |
885 | [type="submit"]:hover {
886 | background-color: var(--main-color);
887 | }
888 |
889 |
890 | .button-red {
891 | background-color: var(--color-alerte);
892 | color: var(--background-color);
893 | border-color: var(--color-alerte);
894 | }
895 |
896 | .button-red:hover {
897 | color: var(--color-alerte);
898 | background-color: var(--background-color);
899 | }
900 |
901 | select {
902 | margin-bottom: 2ch;
903 | width: 100%;
904 | }
905 |
906 | [type=radio] {
907 | margin-right: 1ch;
908 | }
909 |
910 | .submit-sticky {
911 | position: sticky;
912 | top: 20px;
913 | z-index: 1000;
914 | }
915 |
916 | .radio-buttons {
917 | display: flex;
918 | gap: 1rem;
919 | }
920 |
921 | .margin-top {
922 | margin-top: var(--normal-margin);
923 | }
924 |
925 | /* @end */
926 |
927 | /* @group Quotidien */
928 |
929 | #daily h2 svg {
930 | display: inline;
931 | vertical-align: bottom;
932 | }
933 |
934 | #daily h2 svg:hover svg-line-thin {
935 | stroke: blue;
936 | }
937 |
938 | .daily-nav {
939 | display: flex;
940 | align-items: center;
941 | flex-direction: row;
942 | flex-wrap: wrap;
943 | gap: 1rem;
944 | justify-content: space-between;
945 | }
946 |
947 | .col-3 {
948 | display: grid;
949 | grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
950 | gap: 2vw;
951 | word-break: break-all;
952 | padding-bottom: 5vw;
953 | }
954 |
955 | .daily-entry-title {
956 | font-weight: 600;
957 | font-size: 125%;
958 | padding-bottom: 2ch;
959 | }
960 |
961 | .daily-entry {
962 | border-bottom: 1px solid var(--dark-main-color);
963 | padding-bottom: 1rem;
964 | margin-bottom: 1rem;
965 | }
966 |
967 | .daily-about h3 {
968 | margin-top: 2.4rem;
969 | border-bottom: 1px solid var(--dark-main-color);
970 | padding-bottom: 1rem;
971 | }
972 |
973 | .daily-entry img {
974 | margin-bottom: 2rem;
975 | border-radius: var(--border-radius);
976 | max-width: 10rem;
977 | height: auto;
978 | }
979 |
980 | .daily-entry-tags {
981 | display: flex;
982 | gap:1ch
983 | }
984 |
985 | /* @end */
986 |
987 | /* @group the_header */
988 |
989 | #the-header {
990 | width: 100%;
991 | display: flex;
992 | flex-direction: column;
993 | position: relative;
994 | }
995 |
996 | #the-header:after {
997 | /* Gradient for horizontal scrolling indication */
998 | display: inline-block;
999 | z-index: 20;
1000 | position: absolute;
1001 | height: 100%;
1002 | width: 5rem;
1003 | pointer-events: none;
1004 | content: " ";
1005 | background: linear-gradient(90deg, rgba(255,255,255,0) 0%, var(--background-color) 70%);
1006 | right: 0;
1007 | top: 0;
1008 | }
1009 |
1010 | @media (min-width:900px) {
1011 | #the-header:after {
1012 | display: none;
1013 | }
1014 | }
1015 |
1016 | #nav-links {
1017 | display: block;
1018 | }
1019 |
1020 | #nav-links ul {
1021 | display: flex;
1022 | position: relative;
1023 | flex-direction: row;
1024 | width: 100%;
1025 | margin: 0;
1026 | padding: 0;
1027 | padding-left: 1ch;
1028 | text-transform: uppercase;
1029 | letter-spacing: .12rem;
1030 | font-size: 75%;
1031 | white-space: nowrap;
1032 | /* hide scrollbar but allow scrolling */
1033 | -ms-overflow-style: none; /* for Internet Explorer, Edge */
1034 | scrollbar-width: none; /* for Firefox */
1035 | overflow-y: scroll;
1036 | }
1037 |
1038 | #nav-links ul::-webkit-scrollbar {
1039 | display: none; /* for Chrome, Safari, and Opera */
1040 | }
1041 |
1042 | #nav-links li {
1043 | display: flex;
1044 | flex-wrap: nowrap;
1045 | justify-content: center;
1046 | }
1047 |
1048 |
1049 | /* Fix to make the last menu item out of the gradient */
1050 | #nav-links li:last-child {
1051 | padding-right: 8ch;
1052 | }
1053 |
1054 | @media (min-width:768px) {
1055 | #nav-links li:last-child {
1056 | padding-right: 0;
1057 | }
1058 | }
1059 |
1060 | #nav-links li a {
1061 | padding-right: 1rem;
1062 | padding-left: 1rem;
1063 | padding-top: .5rem;
1064 | padding-bottom: .5rem;
1065 | transition: background 200ms ease-in-out 0s;
1066 | margin: 1rem;
1067 | margin-left: 0rem;
1068 | margin-right: 0;
1069 | border-radius: 3rem;
1070 | text-decoration: none;
1071 | }
1072 |
1073 | @media (min-width:768px) {
1074 | #nav-links li a {
1075 | padding-right: 1.5rem;
1076 | padding-left: 1.5rem;
1077 | }
1078 | }
1079 |
1080 | #shaarli-menu-shaare {
1081 | background-color: var(--main-color);
1082 | }
1083 |
1084 | #shaarli-menu-shaare-note {
1085 | background-color: var(--main-color);
1086 | }
1087 |
1088 | #nav-links li a:hover {
1089 | background-color: var(--dark-main-color);
1090 | color: var(--background-color);
1091 | }
1092 |
1093 | #nav-links svg {
1094 | /* height: 3rem;*/
1095 | width: auto;
1096 | }
1097 |
1098 | /* @end */
1099 |
1100 | /* @group Search + Filters */
1101 |
1102 | #search {
1103 | padding-top: .5rem;
1104 | padding-bottom: 1rem;
1105 | padding-left: var(--normal-margin);
1106 | padding-right: var(--normal-margin);
1107 | display: none;
1108 | flex-direction: row;
1109 | gap: 1rem;
1110 | align-items: center;
1111 | justify-content: space-between;
1112 | }
1113 |
1114 | /* N'afficher la recherche que sur la liste */
1115 |
1116 | .filters #search {
1117 | display: flex;
1118 | }
1119 |
1120 | #search form {
1121 | display: flex;
1122 | flex-direction: row;
1123 | gap: 1rem;
1124 | flex: 1;
1125 | align-items: center;
1126 | }
1127 |
1128 | #search form input[type="text"] {
1129 | flex: 1;
1130 | margin: 0;
1131 | display: inline-flex;
1132 | font-size: var(--small-medium-font);
1133 | }
1134 |
1135 | form input[type="text"]:hover, textarea:hover, input[type="url"]:hover {
1136 | box-shadow: 0 0 0 4px rgb(0 0 0 / 35%);
1137 | transition: box-shadow 200ms ease-in-out 0s
1138 | }
1139 |
1140 | form input[type="text"]:focus, textarea:focus, input[type="url"]:focus {
1141 | box-shadow: 0 0 0 4px rgb(0 0 0 / 35%);
1142 | transition: box-shadow 200ms ease-in-out 0s
1143 | }
1144 |
1145 | form .awesomplete {
1146 | flex: 1;
1147 | }
1148 |
1149 | #search form [type="submit"] {
1150 | margin: 0;
1151 | background-color: inherit;
1152 | padding-left: 0rem;
1153 | padding-right: 0;
1154 | visibility: hidden;
1155 | position: absolute;
1156 | }
1157 |
1158 | form [type="text"]::placeholder {
1159 | color: var(--dark-main-color) !important;
1160 | }
1161 |
1162 | input#tagfilter_value {
1163 |
1164 | }
1165 |
1166 | .button_filters {
1167 | appearance: none;
1168 | -moz-appearance: none;
1169 | -webkit-appearance: none;
1170 | background-color: unset;
1171 | border: none;
1172 | align-items: center;
1173 | cursor: pointer;
1174 | padding: 0;
1175 | margin: 0;
1176 | display: inline-flex;
1177 | }
1178 |
1179 | .sub-nav {
1180 | margin-bottom: var(--normal-margin);
1181 | flex-wrap: wrap;
1182 | gap: 1rem;
1183 | justify-content: center;
1184 | display: none;
1185 | padding: 1ch;
1186 | }
1187 |
1188 | .sub-nav.active {
1189 | display: flex;
1190 | }
1191 | /* 231207 - Need a separate declaration for firefox.*/
1192 | .sub-nav:has(.filter-on) {
1193 | display: flex;
1194 | }
1195 |
1196 |
1197 |
1198 | @media (max-width:768px) {
1199 | /* On mobile view, compact filters on a single scrollable line */
1200 | .sub-nav {
1201 | flex-wrap: nowrap;
1202 | white-space: nowrap;
1203 | max-width: 9100vw;
1204 | overflow-x: scroll;
1205 | justify-content: space-between;
1206 | padding-bottom: var(--normal-margin);
1207 | }
1208 |
1209 | }
1210 |
1211 | .sub-nav .button {
1212 | margin-bottom: 0;
1213 | }
1214 |
1215 | .filter-on {
1216 | background-color: var(--main-color);
1217 | color: var(--dark-main-color);
1218 | }
1219 |
1220 | /* @end */
1221 |
1222 | /* @group buttons, svg... */
1223 |
1224 | .svg-line {
1225 | fill: none;
1226 | stroke: var(--dark-main-color);
1227 | stroke-width: .15rem;
1228 | stroke-miterlimit: 10;
1229 | }
1230 |
1231 | .svg-full {
1232 | fill: var(--dark-main-color);
1233 | }
1234 |
1235 | .svg-line-thin {
1236 | fill: none;
1237 | stroke: var(--dark-main-color);
1238 | stroke-width: 1px;
1239 | stroke-miterlimit: 10;
1240 | stroke-linecap: round;
1241 | stroke-linejoin: round;
1242 | vector-effect: non-scaling-stroke;
1243 | }
1244 |
1245 |
1246 | .plus-cross {
1247 | width: 100%;
1248 | height: auto;
1249 | position: absolute;
1250 | top: 14.5px;
1251 | right: 0;
1252 | }
1253 |
1254 | .s_medium_post .plus-cross {
1255 | top: 31px;
1256 |
1257 | }
1258 |
1259 |
1260 | .plus-cross .svg-line {
1261 | stroke-width: 1px;
1262 | vector-effect: non-scaling-stroke;
1263 | }
1264 |
1265 | .private-icon path {
1266 | fill:var(--color-alerte) ;
1267 | }
1268 |
1269 | .svg-fill {
1270 | fill: var(--dark-main-color);
1271 | stroke: none;
1272 | transition: fill 200ms ease-in-out 0s;
1273 | }
1274 |
1275 | .filter-on .svg-fill, .expanded-active .svg-fill {
1276 | fill: #00CD51;
1277 | }
1278 |
1279 | .filter-on:hover .svg-fill {
1280 | fill: red;
1281 | }
1282 |
1283 | a:hover .svg-fill {
1284 | fill: var(--main-color);
1285 | }
1286 |
1287 | .svg-fill-empty {
1288 | fill: transparent;
1289 | }
1290 |
1291 | .reserve {
1292 | width: 22px;
1293 | display: block;
1294 | }
1295 |
1296 | .icon_button {
1297 | display: inline-block;
1298 | padding: .5rem;
1299 | padding-bottom: .30rem;
1300 | border-radius: 1rem;
1301 | transition: background 200ms ease-in-out 0s;
1302 | }
1303 |
1304 | .icon_button:hover {
1305 | background-color: var(--color01);
1306 | }
1307 |
1308 | /* @end */
1309 |
1310 | /* @group Navigation */
1311 |
1312 | #linklist-paging {
1313 | display: flex;
1314 | flex-direction: column;
1315 | justify-content: space-between;
1316 | align-items: center;
1317 | padding: var(--normal-margin);
1318 | gap:2rem;
1319 | }
1320 |
1321 | .navigation {
1322 | display: flex;
1323 | gap: 1.5rem;
1324 | justify-content: center;
1325 | align-items: center;
1326 | }
1327 |
1328 | .linksperpage {
1329 | display: flex;
1330 | gap: 1rem;
1331 | justify-content: space-around;
1332 | flex-direction: row;
1333 | align-items: center;
1334 | }
1335 |
1336 | .linksperpage ul {
1337 | display: flex;
1338 | list-style-type: none;
1339 | margin: 0;
1340 | padding: 0;
1341 | flex-direction: row;
1342 | flex-wrap: wrap;
1343 | gap: 1rem;
1344 | align-items: center;
1345 | }
1346 |
1347 | .linksperpage li a {
1348 | padding: .5rem;
1349 | border: 1px solid var(--dark-main-color);
1350 | border-radius: var(--border-radius);
1351 | opacity: .5;
1352 | text-decoration: none;
1353 | }
1354 |
1355 | .linksperpage input {
1356 | width: 5ch;
1357 | padding: .5rem;
1358 | margin: 0;
1359 | border-width: 1px;
1360 | border-style: dashed;
1361 | border-color: var(--dark-main-color);
1362 | text-align: center;
1363 | color: var(--dark-main-color);
1364 | border-radius: .8rem;
1365 | opacity: .5;
1366 | }
1367 |
1368 | .linksperpage input.selected {
1369 | color: var(--dark-main-color);
1370 | border-color: var(--dark-main-color);
1371 | }
1372 |
1373 | .linksperpage .selected {
1374 | opacity: 1;
1375 | }
1376 |
1377 |
1378 | /* @end */
1379 |
1380 | /* @group linklist */
1381 |
1382 | #linklist {
1383 | flex-grow: 1;
1384 | padding-bottom: .5rem;
1385 |
1386 | }
1387 |
1388 | #linklist header {
1389 | display: flex;
1390 | align-items: center;
1391 | padding-top: 1rem;
1392 | padding-bottom: 1rem;
1393 | }
1394 |
1395 |
1396 | #linklist h2 {
1397 | color: var(--dark-main-color);
1398 | display: inline;
1399 | align-items: center;
1400 | font-size: inherit;
1401 | font-weight: normal;
1402 | margin: 0;
1403 | padding-right: 1rem;
1404 | white-space: nowrap;
1405 | overflow: hidden;
1406 | text-overflow: ellipsis;
1407 | width: 100%;
1408 | /* Added in v0.9 to go with wrap tags */
1409 | width: fit-content;
1410 | }
1411 |
1412 | .pin-icon,.private-icon {
1413 | margin-right: .2ch;
1414 | width: auto;
1415 | height: 1.2rem;
1416 | }
1417 |
1418 | @media (min-width:768px) {
1419 | .pin-icon, .private-icon {
1420 | height: 1.5rem;
1421 | }
1422 | }
1423 |
1424 | #linklist h2 a {
1425 | color: inherit;
1426 | text-decoration: none;
1427 | }
1428 |
1429 | .s_medium_post .linklist-link,.s_large_post .linklist-link {
1430 | /* font-weight: bold;*/
1431 | }
1432 |
1433 | #linklist .url-display {
1434 | display: block;
1435 | font-size: var(--small-font);
1436 | opacity: .5;
1437 | display: none;
1438 | transition: font-size 100ms ease-out 0s;
1439 | }
1440 |
1441 | /* Show url on Small view - only - on permalink view
1442 | (when .full-post is active */
1443 | #linklist .full-post .url-display {
1444 | display: block;
1445 | }
1446 |
1447 |
1448 |
1449 | #linklist .active-header .url-display {
1450 | display: block;
1451 | }
1452 |
1453 | .linklist-item-thumbnail {
1454 | display: none;
1455 | }
1456 |
1457 | .s_medium_post .linklist-item-thumbnail, .s_large_post .linklist-item-thumbnail {
1458 | display: block;
1459 | }
1460 |
1461 | .linklist-item-thumbnail img {
1462 | display: inline-block;
1463 | padding: 0;
1464 | margin: 0;
1465 | margin-right: var(--normal-margin);
1466 | border-radius: 5px;
1467 | object-fit: cover;
1468 | object-position: 50% 50%;
1469 | width: 48px;
1470 | height: 48px;
1471 | filter: brightness(95%);
1472 | }
1473 |
1474 | #linklist figure {
1475 | padding: 0;
1476 | margin: 0;
1477 | margin-bottom: var(--normal-margin);
1478 | }
1479 |
1480 | #linklist :target {
1481 | scroll-margin-top: 3rem;
1482 | }
1483 |
1484 | .link-content .real_url {
1485 | display: none;
1486 | /* Don't remember why I need this class. Maybe for a Shaarli javascript event ?? */
1487 | }
1488 |
1489 | .linklist-item {
1490 | border-bottom: .05rem solid rgba(0, 0, 0, 0.1);
1491 | padding-right: 5rem;
1492 | padding-left: var(--normal-margin);
1493 | word-wrap: break-word;
1494 | position: relative;
1495 | }
1496 |
1497 |
1498 | .linklist-item:last-child {
1499 | border-bottom: 0px solid black;
1500 | }
1501 |
1502 | .linklist-item-description {
1503 | font-size: 90%;
1504 | max-width: 90rem;
1505 | line-height: 1.5;
1506 | }
1507 |
1508 | .linklist-item-description a {
1509 | text-decoration: underline;
1510 | }
1511 |
1512 | .linklist-item .tags {
1513 | display: inline-flex;
1514 | flex-direction: row;
1515 | flex-wrap: wrap;
1516 | list-style: none;
1517 | margin: 0;
1518 | margin-top: 1ch;
1519 | margin-bottom: 1ch;
1520 | padding: 0;
1521 | gap: 1rem;
1522 | font-size: 1.5rem;
1523 | }
1524 |
1525 | .tags-header-linklist {
1526 | display: none;
1527 | flex-direction: row;
1528 | flex-wrap: wrap;
1529 | justify-content: flex-end;
1530 | list-style: none;
1531 | margin: 0;
1532 | padding: 0;
1533 | gap: 1rem;
1534 | font-size: 1.5rem;
1535 | padding-top: 1ch;
1536 | padding-bottom: 1ch;
1537 | }
1538 |
1539 | .tags-header-linklist a, .linklist-item .tags a, .label-tag {
1540 | color: var(--background-color);
1541 | padding: 1ch;
1542 | padding-top: .5ch;
1543 | padding-bottom: .5ch;
1544 | border-radius: .4rem;
1545 | background-color: var(--dark-main-color);
1546 | white-space: nowrap;
1547 | text-decoration: none;
1548 | font-size: 85%;
1549 | transition: background 200ms ease-in-out 0s,color 200ms ease-in-out 0s;
1550 | }
1551 |
1552 | .tags-header-linklist a:hover, .linklist-item .tags a:hover {
1553 | background-color: var(--background-color);
1554 | color: var(--dark-main-color);
1555 | transition: background 200ms ease-in-out 0s,color 200ms ease-in-out 0s;
1556 | }
1557 |
1558 | .link-expand {
1559 | position: absolute;
1560 | right: 1.5rem;
1561 | top: 0px;
1562 | height: 100%;
1563 | width: 15px;
1564 | padding: 0;
1565 | border: none;
1566 | z-index: 200;
1567 | cursor: pointer;
1568 | display: block;
1569 | background-color: unset;
1570 | }
1571 |
1572 | @media (min-width:768px) {
1573 | .link-expand {
1574 | right: var(--normal-margin);
1575 | }
1576 |
1577 | }
1578 |
1579 |
1580 | /* Animating + to X */
1581 |
1582 | .link-expand .plus-cross {
1583 | transform: rotate(0deg);
1584 | transition: transform 200ms ease-in-out 0s;
1585 | }
1586 |
1587 | .link-expand.active .plus-cross {
1588 | transform: rotate(45deg);
1589 | }
1590 |
1591 | .link-content {
1592 | overflow: hidden;
1593 | transition: max-height 0.3s ease-out;
1594 | max-height: 0;
1595 | }
1596 |
1597 |
1598 |
1599 |
1600 | /* Expand post if link contain anchor or single */
1601 |
1602 | :target .link-content, .full-post .link-content, .s_large_post .link-content {
1603 | max-height: 100%;
1604 | }
1605 |
1606 | :target .plus-cross, .full-post .plus-cross, .s_large_post .plus-cross {
1607 | display: none;
1608 | }
1609 |
1610 | .s_large_post .item_action span {
1611 | display: none;
1612 | }
1613 |
1614 | #linklist .full-post h2 {
1615 | font-size: 2.5rem;
1616 | font-weight: 400;
1617 | /* Remove the … */
1618 | white-space: normal;
1619 | }
1620 |
1621 | #linklist .full-post {
1622 | border-bottom: none;
1623 | }
1624 |
1625 | .nav_item_actions {
1626 | display: flex;
1627 | flex-direction: row;
1628 | flex-wrap: wrap;
1629 | margin-top: 1rem;
1630 | margin-bottom: 1rem;
1631 | justify-content: center;
1632 | gap: 1rem;
1633 | }
1634 |
1635 | .nav_item_actions .item_action {
1636 | font-size: var(--small-font);
1637 | color: var(--dark-main-color);
1638 | text-align: center;
1639 | transition: opacity 200ms ease-in-out 0s;
1640 | opacity: .5;
1641 | text-decoration: none;
1642 | }
1643 |
1644 | .nav_item_actions .item_action:hover {
1645 | color: var(--dark-main-color);
1646 | opacity: 1;
1647 | }
1648 |
1649 | .nav_item_actions a:hover .svg-fill {
1650 | transition: fill 100ms ease-in-out 0s;
1651 | fill: var(--main-color);
1652 | }
1653 |
1654 | .nav_item_actions .item_action svg {
1655 | margin-bottom: .5rem;
1656 | flex-grow: 1;
1657 | margin-left: auto;
1658 | margin-right: auto;
1659 | }
1660 |
1661 | .link_footer {
1662 | font-size: 1.2rem;
1663 | color: var(--dark-main-color);
1664 | display: flex;
1665 | flex-direction: row;
1666 | justify-content: center;
1667 | gap: 1rem;
1668 | align-items: center;
1669 | }
1670 |
1671 | .ctrl-checkbox {
1672 | display: none;
1673 | }
1674 |
1675 | .ctrl-checkbox.active {
1676 | display: inline-flex;
1677 | }
1678 |
1679 | .rounded-checkbox {
1680 | width: 2.2rem;
1681 | height: 2.2rem;
1682 | background-color: var(--background-color);
1683 | border-radius: 50%;
1684 | vertical-align: text-top;
1685 | border: .2rem solid var(--dark-main-color);
1686 | appearance: none;
1687 | -webkit-appearance: none;
1688 | cursor: pointer;
1689 | position: relative;
1690 | margin-right: .5rem;
1691 | display: inline-block;
1692 | }
1693 |
1694 | .rounded-checkbox:checked:after {
1695 | content: " ";
1696 | position: absolute;
1697 | width: 1.2rem;
1698 | height: 1.2rem;
1699 | border-radius: 50%;
1700 | background-color: var(--dark-main-color);
1701 | top: 50%;
1702 | left: 50%;
1703 | transform: translate(-50%, -50%);
1704 | }
1705 |
1706 | .linklist-item-infos {
1707 | display: flex;
1708 | justify-content: space-between;
1709 | align-items: center;
1710 | flex-wrap: wrap;
1711 | margin-bottom: var(--normal-margin);
1712 | }
1713 |
1714 | .link_plugin {
1715 | display: flex;
1716 | gap: 1ch;
1717 | }
1718 |
1719 | /* Start of Small / Medium / Large */
1720 |
1721 | /* SML Menu */
1722 |
1723 | .s_ui_size_button {
1724 | border: 0;
1725 | padding: 0;
1726 | padding-left: 1ch;
1727 | margin: 0;
1728 | background: none;
1729 | cursor: pointer;
1730 | }
1731 |
1732 | .s_ui_size_button svg {
1733 | opacity: 1;
1734 | transition: opacity .1s ease-in-out 0s;
1735 | }
1736 |
1737 | .s_ui_size_button:hover svg {
1738 | opacity: .6;
1739 | transition: opacity .1s ease-in-out 0s;
1740 | }
1741 |
1742 |
1743 |
1744 | /* Medium Post */
1745 |
1746 | #linklist .s_medium_post header {
1747 | padding-top: 1.2rem;
1748 | padding-bottom: 1.2rem;
1749 | min-height: 77px;
1750 | }
1751 |
1752 | #linklist .s_medium_post h2,#linklist .s_large_post h2 {
1753 | white-space: normal;
1754 | font-family: var(--primary-font);
1755 | font-size: 100%;
1756 | }
1757 |
1758 | #linklist .s_medium_post .url-display {
1759 | display: block;
1760 | }
1761 |
1762 | /* Large Post */
1763 |
1764 | .linklist-item.s_large_post:hover {
1765 | background-color: unset;
1766 | }
1767 |
1768 | #linklist .s_large_post .url-display {
1769 | display: block;
1770 | }
1771 |
1772 | .linklist-item.s_large_post {
1773 | padding-bottom: 1rem;
1774 | margin-bottom: 1rem; }
1775 |
1776 |
1777 | @media (min-width:768px) {
1778 | .linklist-item.s_large_post {
1779 | padding-left: 3rem;
1780 | padding-top: 1.8rem;
1781 | padding-bottom: 3rem;
1782 | }
1783 |
1784 |
1785 | .s_large_post .linklist-link {
1786 | padding-right: 3rem;
1787 | font-weight: bold;
1788 | }
1789 | }
1790 |
1791 | /* @end */
1792 |
1793 | /* @group tools */
1794 |
1795 | .tools-template #content {
1796 | padding-bottom: var(--normal-margin);
1797 | max-width: 70rem;
1798 | }
1799 |
1800 | .tools-section {
1801 | margin-bottom: var(--normal-margin);
1802 | }
1803 |
1804 | .tools-section h2 {
1805 | font-size: 100%;
1806 | }
1807 |
1808 | .tools-section ul {
1809 | padding: 0;
1810 | margin: 0;
1811 | font-size: 2.7rem;
1812 | }
1813 |
1814 | .tools-section li {
1815 | display: flex;
1816 | padding-bottom: 1ch;
1817 | }
1818 |
1819 | .tools-section a {
1820 | display: flex;
1821 | }
1822 |
1823 | .tools-bookmarklets {
1824 | max-width: 60rem;
1825 | display: none;
1826 | }
1827 |
1828 | .tools-bookmarklets ul {
1829 | display: flex;
1830 | flex-direction: row;
1831 | gap:var(--normal-margin);
1832 | }
1833 |
1834 | .tools-bookmarklets li {
1835 | display: inline-block;
1836 | border-bottom: none;
1837 | }
1838 |
1839 | .bookmarklet-link {
1840 | margin-bottom: var(--normal-margin);
1841 | margin-top: 1.4rem;
1842 | -webkit-user-select: none;
1843 | -ms-user-select: none;
1844 | user-select: none;
1845 | text-decoration: none;
1846 | }
1847 |
1848 | #pluginform table {
1849 | margin-bottom: 2.4rem;
1850 | width: 100%;
1851 | }
1852 |
1853 | #pluginform td {
1854 | border-bottom: 1px solid var(--dark-main-color);
1855 | padding-top: .5rem;
1856 | padding-bottom: .5rem;
1857 | padding-right: 1ch;
1858 | }
1859 |
1860 | .tools-server p {
1861 | overflow-wrap: anywhere;
1862 | }
1863 |
1864 | .tools-plugins [type=submit] {
1865 | margin-top: var(--normal-margin);
1866 | }
1867 |
1868 | .circle-green {
1869 | width: 1rem;
1870 | height: 1rem;
1871 | background-color: #00CD51;
1872 | display: block;
1873 | border-radius: 50%;
1874 | }
1875 |
1876 | .circle-red {
1877 | width: 1rem;
1878 | height: 1rem;
1879 | background-color: red;
1880 | display: block;
1881 | border-radius: 50%;
1882 | }
1883 |
1884 | .circle-orange {
1885 | width: 1rem;
1886 | height: 1rem;
1887 | background-color: orange;
1888 | display: block;
1889 | border-radius: 50%;
1890 | }
1891 |
1892 | .link-back {
1893 | display: inline-block;
1894 | padding-right: .5rem;
1895 | }
1896 |
1897 |
1898 | /* @end */
1899 |
1900 | /* @group Footer */
1901 |
1902 | #footer {
1903 | /* margin-top: auto;
1904 | /* Astuce pour placer le footer en pied de page *!/
1905 | padding-top:var(--normal-margin) ;
1906 | padding-bottom: var(--normal-margin);*/
1907 | margin-bottom: 3rem;
1908 | }
1909 |
1910 | .footer-ours {
1911 | margin: var(--normal-margin);
1912 | text-align: center;
1913 | }
1914 |
1915 | /* @end */
1916 |
1917 | /* @group Mur d'images */
1918 |
1919 | .picwall-container {
1920 | position: relative;
1921 | }
1922 |
1923 | .picwall-container div {
1924 | display: flex;
1925 | }
1926 |
1927 | .picwall-container h2 {
1928 | margin: 0;
1929 | }
1930 |
1931 | .picwall-container {
1932 | display: grid;
1933 | grid-template-columns: repeat(auto-fit, minmax(96px, 1fr));
1934 | gap: .5rem;
1935 | margin-bottom: var(--normal-margin);
1936 | margin-top: var(--normal-margin);
1937 | }
1938 |
1939 | .picwall-container figure {
1940 | background-color: var(--background-color);
1941 | margin: 0;
1942 | display: flex;
1943 | flex-direction: column;
1944 | border-top-left-radius: 1rem;
1945 | border-top-right-radius: 1rem;
1946 | border-bottom-left-radius: 1rem;
1947 | border-bottom-right-radius: 1rem;
1948 | transition: transform 150ms ease-in-out 0s;
1949 | transform: translateY(0rem);
1950 | }
1951 |
1952 | .picwall-container a {
1953 | text-decoration: none;
1954 | }
1955 |
1956 | .picwall-container figure:hover {
1957 | transform: translateY(-.5rem);
1958 | }
1959 |
1960 | .picwall-container img {
1961 | display: block;
1962 | border-radius: 1rem;
1963 | max-width: 100%;
1964 | height: auto;
1965 | width: 100%;
1966 | filter: brightness(97%);
1967 | aspect-ratio: 3 / 2;
1968 | object-fit: cover;
1969 | object-position: 50% 50%;
1970 | }
1971 |
1972 | .picwall-container figcaption {
1973 | font-size: 1.2rem;
1974 | padding: 1ch;
1975 | text-overflow: ellipsis;
1976 | white-space: nowrap;
1977 | overflow: hidden;
1978 | }
1979 |
1980 | /* @end */
1981 |
1982 |
1983 | .subheader-form {
1984 | visibility: hidden;
1985 | display: none;
1986 | }
1987 |
1988 | .subheader-form .item_action {
1989 | font-size: 1.2rem;
1990 | transition: background 200ms ease-in-out 0s;
1991 | color: var(--dark-main-color);
1992 | background-color: var(--background-color);
1993 | border-radius: var(--border-radius);
1994 | padding: 1ch;
1995 | padding-left: 2ch;
1996 | padding-right: 2ch;
1997 | text-decoration: none;
1998 | margin-bottom: 0;
1999 | }
2000 |
2001 | .subheader-form.open {
2002 | visibility: visible;
2003 | display: block;
2004 | width: 100%;
2005 | background-color: var(--dark-main-color);
2006 | padding: var(--normal-margin);
2007 | }
2008 |
2009 | .subheader_item_actions {
2010 | display: flex;
2011 | gap: 2ch;
2012 | justify-content: center;
2013 | }
2014 |
2015 | .subheader-form .item_action {
2016 | background-color: var(--background-color);
2017 | border-radius: var(--border-radius);
2018 | padding: 1ch;
2019 | padding-left: 2ch;
2020 | padding-right: 2ch;
2021 | text-decoration: none;
2022 | }
2023 |
2024 | .subheader-form .item_action:hover {
2025 | background-color: var(--dark-main-color);
2026 | color: var(--background-color);
2027 | }
2028 |
2029 | .subheader-form input {
2030 | background-color: var(--background-color);
2031 | }
2032 |
2033 | .sr-only {
2034 | position: absolute;
2035 | width: 1px;
2036 | height: 1px;
2037 | padding: 0;
2038 | margin: -1px;
2039 | overflow: hidden;
2040 | clip: rect(0, 0, 0, 0);
2041 | border: 0
2042 | }
2043 |
2044 | .sr-only-focusable:active, .sr-only-focusable:focus {
2045 | position: static;
2046 | width: auto;
2047 | height: auto;
2048 | margin: 0;
2049 | overflow: visible;
2050 | clip: auto
2051 | }
2052 |
2053 |
2054 |
2055 | /* @group Switch */
2056 |
2057 | /* © : https://codepen.io/cbp/pen/BaPXOd */
2058 |
2059 | .switch {
2060 | appearance: none;
2061 | user-select: none;
2062 | height: 31px;
2063 | width: 51px;
2064 | min-width: 51px;
2065 | position: relative;
2066 | border-radius: 16px;
2067 | cursor: pointer;
2068 | outline: 0;
2069 | z-index: 0;
2070 | margin: 0;
2071 | padding: 0;
2072 | border: none;
2073 | background-color: var(--dark-main-color);
2074 | transition-duration: 300ms;
2075 | transition-timing-function: ease-in-out;
2076 | -webkit-touch-callout: none;
2077 | -webkit-text-size-adjust: none;
2078 | -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
2079 | -webkit-user-select: none;
2080 | }
2081 |
2082 | .switch::before {
2083 | height: 27px;
2084 | width: 47px;
2085 | content: " ";
2086 | position: absolute;
2087 | left: 2px;
2088 | top: 2px;
2089 | background-color: #ffffff;
2090 | border-radius: 16px;
2091 | z-index: 1;
2092 | -webkit-transition-duration: 300ms;
2093 | -moz-transition-duration: 300ms;
2094 | transition-duration: 300ms;
2095 | -webkit-transform: scale(1);
2096 | -moz-transform: scale(1);
2097 | -ms-transform: scale(1);
2098 | -o-transform: scale(1);
2099 | transform: scale(1);
2100 | }
2101 |
2102 | .switch::after {
2103 | height: 27px;
2104 | width: 27px;
2105 | content: " ";
2106 | position: absolute;
2107 | border-radius: 27px;
2108 | background: #ffffff;
2109 | z-index: 2;
2110 | top: 2px;
2111 | left: 2px;
2112 | box-shadow: 0px 0px 1px 0px rgba(0, 0, 0, 0.25), 0px 4px 11px 0px rgba(0, 0, 0, 0.08), -1px 3px 3px 0px rgba(0, 0, 0, 0.14);
2113 | transition: transform 300ms, width 280ms;
2114 | transform: translate3d(0, 0, 0);
2115 | transition-timing-function: cubic-bezier(0.42, 0.8, 0.58, 1.2);
2116 | }
2117 |
2118 | .switch:checked {
2119 | background-color: var(--dark-main-color);
2120 | }
2121 |
2122 | .switch:checked::after {
2123 | transform: translate3d(16px, 0, 0);
2124 | right: 18px;
2125 | left: inherit;
2126 | }
2127 |
2128 | .switch:active::after {
2129 | width: 35px;
2130 | }
2131 |
2132 | .switch:checked::before, .switch:active::before {
2133 | transform: scale(0);
2134 | }
2135 |
2136 | .switch:disabled {
2137 | opacity: 0.5;
2138 | cursor: default;
2139 | transition: none;
2140 | }
2141 |
2142 | .switch:disabled:active::before, .switch:disabled:active::after, .switch:disabled:checked::before {
2143 | width: 27px;
2144 | transition: none;
2145 | }
2146 |
2147 | .switch:disabled:active::before {
2148 | height: 27px;
2149 | width: 41px;
2150 | transform: translate3d(6px, 0, 0);
2151 | }
2152 |
2153 | .switch:disabled:checked:active::before {
2154 | height: 27px;
2155 | width: 27px;
2156 | transform: scale(0);
2157 | }
2158 |
2159 | .switch::before {
2160 | background-color: var(--dark-main-color);
2161 | }
2162 |
2163 | .switch::after {
2164 | background-color: var(--background-color);
2165 | }
2166 |
2167 | .switch:checked {
2168 | background-color: var(--main-color);
2169 | }
2170 |
2171 | /* Special background color for private switch */
2172 | #lf_private.switch:checked {
2173 | background-color: var(--color-alerte);
2174 | }
2175 |
2176 | /* @end */
2177 |
2178 | /* @group Plugins */
2179 |
2180 | hr {
2181 | display: none;
2182 | }
2183 |
2184 | #plugin_zone_start_linklist div {
2185 | display: flex;
2186 | justify-content: center;
2187 | }
2188 |
2189 | /* @group addlink */
2190 |
2191 | .toolbar-plugin {
2192 | display: grid;
2193 | grid-template-columns: 1fr auto;
2194 | align-items: stretch;
2195 | gap: 1rem;
2196 | flex-direction: row;
2197 | padding-left: var(--normal-margin);
2198 | padding-right: var(--normal-margin);
2199 | padding-bottom: var(--normal-margin);
2200 |
2201 | }
2202 |
2203 | .toolbar-plugin input {
2204 | margin: 0 !important;
2205 | }
2206 |
2207 | /* @end */
2208 |
2209 | .favorite-tag, [title^='Filter ReadItLater bookmarks'] {
2210 | display: inline-block;
2211 | padding-top: .5rem;
2212 | padding-bottom: .5rem;
2213 | padding-left: 1ch;
2214 | padding-right: 1ch;
2215 | border-radius: .43rem;
2216 | background-color: var(--dark-main-color);
2217 | color: var(--background-color);
2218 | white-space: nowrap;
2219 | transition: background 200ms ease-in-out 0s,color 200ms ease-in-out 0s;
2220 | text-decoration: none;
2221 | }
2222 |
2223 | .readitlater-toggle {
2224 | text-decoration: none;
2225 | }
2226 |
2227 | @media (min-width:768px) {
2228 | .favorite-tag, [title^='Filter ReadItLater bookmarks'] {
2229 | padding-top: 1ch;
2230 | padding-bottom: 1ch; }
2231 | }
2232 |
2233 | .favorite-tag {
2234 | margin-left: .5ch;
2235 | margin-right: .5ch;
2236 | }
2237 |
2238 | .favorite-tag:hover {
2239 | background-color: var(--background-color);
2240 | color: var(--dark-main-color);
2241 | }
2242 |
2243 | .related_links a {
2244 | font-weight: bold;
2245 | text-decoration: underline;
2246 | }
2247 |
2248 | [title^='Filter ReadItLater bookmarks'].filter-on {
2249 | background-color: var(--main-color);
2250 | color: var(--dark-main-color);
2251 | }
2252 |
2253 | [title^='Filter ReadItLater bookmarks'].filter-on:hover {
2254 | background-color: var(--dark-main-color);
2255 | color: var(--background-color);
2256 |
2257 | }
2258 |
2259 | .md-editor>textarea {
2260 | font-size: 1.6rem !important;
2261 | }
2262 |
2263 |
2264 | #permalinkQrcode.show {
2265 | position: fixed;
2266 | top: 5vw;
2267 | right: 5vw;
2268 | left: unset;
2269 | width: 225px;
2270 | height: 225px;
2271 | }
2272 |
2273 | /* @end */
2274 |
2275 | @media (min-width: 768px) {
2276 | :root {
2277 | --normal-margin: 2.4rem;
2278 | }
2279 |
2280 | body {
2281 | font-family: var(--primary-font);
2282 | }
2283 |
2284 | #the-header {
2285 | z-index: auto;
2286 | display: flex;
2287 | flex-direction: column;
2288 | }
2289 |
2290 | #nav-links {
2291 | display: flex;
2292 | font-size: inherit;
2293 | border-top: none;
2294 | padding-left: var(--normal-margin);
2295 | padding-right: var(--normal-margin);
2296 | }
2297 |
2298 | #nav-links ul {
2299 | flex-direction: row;
2300 | font-size: 75%;
2301 | padding-left: 0;
2302 | }
2303 |
2304 | #nav-links li {
2305 | border-bottom: none;
2306 | }
2307 |
2308 | .rss-li {
2309 | margin-right: auto;
2310 | }
2311 |
2312 | .shaarli_title {
2313 | padding: 0;
2314 | }
2315 |
2316 | .nav_item_actions {
2317 | justify-content: center;
2318 | }
2319 |
2320 | .linklist-item-infos .nav_item_actions {
2321 | justify-content: start;
2322 | }
2323 |
2324 | .picwall-container {
2325 | grid-template-columns: repeat(auto-fit, minmax(128px, 1fr));
2326 | gap: 1rem;
2327 | }
2328 |
2329 | .navigation {
2330 | padding-left: 0;
2331 | }
2332 |
2333 | #linklist-paging .options {
2334 | padding-left: 0;
2335 | padding-right: 0;
2336 | }
2337 |
2338 | #linklist :target {
2339 | border: 0 dotted #333;
2340 | box-shadow: rgba(17, 17, 26, 0.1) 0px 4px 16px, rgba(17, 17, 26, 0.05) 0px 8px 32px; }
2341 |
2342 | #linklist header {
2343 | display: flex;
2344 | align-items: center;
2345 | /* justify-content: space-between; WHY??*/
2346 | padding-top: 1.2rem;
2347 | padding-bottom: 1.2rem;
2348 | flex-wrap: wrap;
2349 | }
2350 |
2351 | #linklist h2 {
2352 | /* Remove the … */
2353 | white-space: normal;
2354 | }
2355 |
2356 | .linklist-item .tags {
2357 | display: none;
2358 | }
2359 |
2360 | .tags-header-linklist {
2361 | display: inline-flex;
2362 | margin-left: auto;
2363 | align-self: flex-start;
2364 |
2365 | }
2366 |
2367 | .linklist-item {
2368 | font-size: 125%;
2369 | }
2370 |
2371 | .linklist-item:hover {
2372 | background-color: var(--accent-color);
2373 | }
2374 |
2375 |
2376 | .link_footer {
2377 | display: flex;
2378 | justify-content: start;
2379 | }
2380 |
2381 | .subheader-form.open {
2382 | position: fixed;
2383 | z-index: 400;
2384 | bottom: 0;
2385 | }
2386 |
2387 | .subheader-form .item_action {
2388 | font-size: 100%;
2389 | }
2390 |
2391 |
2392 | .tools-bookmarklets {
2393 | display: block;
2394 | }
2395 |
2396 | #linklist-paging {
2397 | flex-direction: row;
2398 | gap:2rem;
2399 | }
2400 |
2401 | /* Retirer le padding ajouté sur la version smartphone */
2402 |
2403 | #linklist {
2404 | padding-top: 0;
2405 | padding-bottom: 0;
2406 | }
2407 |
2408 | #footer {
2409 | margin-bottom: 0;
2410 | }
2411 | }
2412 |
2413 | @media (min-width:1200px) {
2414 | #the-header {
2415 | padding-top: var(--margin);
2416 |
2417 | }
2418 |
2419 | nav#nav-links {
2420 | padding-right: var(--margin);
2421 | padding-left: var(--margin);
2422 | }
2423 |
2424 |
2425 | #search, .toolbar-plugin {
2426 | padding-left: var(--margin);
2427 | padding-right: var(--margin);
2428 | }
2429 |
2430 | #linklist-paging {
2431 | padding-left: var(--margin);
2432 | padding-right: var(--margin);
2433 | }
2434 |
2435 | #linklist article {
2436 | padding-left: var(--margin);
2437 | padding-right: 7vw;
2438 | }
2439 |
2440 | #footer {
2441 | padding-bottom: var(--margin);
2442 | }
2443 |
2444 | .link-expand {
2445 | right: var(--margin);
2446 | }
2447 | .container {
2448 | padding-left: var(--margin);
2449 | padding-right: var(--margin);
2450 | }
2451 |
2452 | #search-result-block {
2453 | margin-left: var(--margin);
2454 | margin-right: var(--margin);
2455 | }
2456 | }
2457 |
2458 | @media (prefers-color-scheme: dark) {
2459 | :root {
2460 | --dark-main-color: white;
2461 | --background-color: #202124;
2462 | --main-color: #3ec904;
2463 | }
2464 |
2465 |
2466 | [type="url"], [type="text"], [type="password"], textarea, .toolbar-plugin [type="text"] {
2467 | background-color: rgba(139, 139, 139, 0.27);
2468 | border-bottom: 1px solid black;
2469 | color: unset;
2470 | }
2471 |
2472 | .linklist-item {
2473 | border-bottom: .05rem solid rgba(255, 255, 255, 0.23);
2474 | }
2475 | .linklist-item:hover {
2476 | background-color: rgba(255, 255, 255, 0.10);
2477 | }
2478 | }
2479 |
--------------------------------------------------------------------------------
/stack/daily.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | {include="_inc/includes"}
5 |
6 |
7 | {include="_inc/page.header"}
8 |
9 |
14 |
15 | {$localizedType} Shaarli t($type)])"}">
16 |
17 |
18 |
19 |
20 | {loop="$plugin_start_zone"}
21 | {$value}
22 | {/loop}
23 |
24 |
25 |
26 |
27 |
28 | {if="$previousday"}
29 |
30 | {function="t('Previous :type', '', 1, 'shaarli', [':type' => t($type)], true)"}
31 |
32 | {/if}
33 | {if="$nextday"}
34 |
35 | {function="t('Next :type', '', 1, 'shaarli', [':type' => t($type)], true)"}
36 |
37 | {/if}
38 |
39 |
40 |
41 | {$dayDesc}
42 |
43 |
44 |
45 | {loop="$daily_about_plugin"}
46 | {$value}
47 | {/loop}
48 |
49 |
50 |
51 |
52 |
53 | {if="$linksToDisplay"}
54 |
55 | {loop="$cols"}
56 | {if="isset($value[0])"}
57 |
58 | {loop="value"}
59 | {$link=$value}
60 |
61 |
67 | {if="$thumbnails_enabled && !empty($link.thumbnail)"}
68 |
69 |
72 |
73 | {/if}
74 |
{$link.formatedDescription}
75 | {if="$link.tags"}
76 |
77 | {loop="link.taglist"}
78 |
79 | {$value}
80 |
81 | {/loop}
82 |
83 | {/if}
84 |
89 |
90 | {/loop}
91 |
92 | {/if}
93 | {/loop}
94 |
95 | {else}
96 | No articles on this day.
97 | {/if}
98 |
99 |
100 |
101 |
102 | {loop="$plugin_end_zone"}
103 | {$value}
104 | {/loop}
105 |
106 | {include="_inc/page.footer"}
107 |
108 |
109 |
110 |
--------------------------------------------------------------------------------
/stack/dailyrss.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | {$localizedType} - {$title}
5 | {$index_url}
6 | {function="t('All links of one :type in a single page.', '', 1, 'shaarli', [':type' => t($type)])"}
7 | {$language}
8 | {$index_url}
9 | Shaarli
10 |
11 | {loop="$days"}
12 | -
13 |
{$value.date_human} - {$title}
14 | {$value.absolute_url}
15 | {$value.absolute_url}
16 | {$value.date_rss}
17 | {$value.title}
20 |
21 | {if="!$hide_timestamps"}{$value.created|format_date} — {/if}
22 | {'Permalink'|t}
23 | {if="$value.tags"} — {$value.tags}{/if}
24 |
25 | {$value.url}
26 |
27 | {if="$value.thumbnail"} {/if}
28 | {if="$value.description"}{$value.description}{/if}
29 |
30 | {/loop}
31 | ]]>
32 |
33 | {/loop}
34 |
35 |
36 |
--------------------------------------------------------------------------------
/stack/editlink.batch.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | {include="_inc/includes"}
5 |
6 |
7 |
15 |
16 | {include="_inc/page.header"}
17 |
18 |
19 |
20 |
21 |
22 | {loop="$links"}
23 | {$batchId=$key}
24 | {include="editlink"}
25 | {/loop}
26 |
27 |
28 |
29 |
30 |
31 | {include="_inc/page.footer"}
32 | {if="$async_metadata"}{/if}
33 |
34 |
--------------------------------------------------------------------------------
/stack/editlink.html:
--------------------------------------------------------------------------------
1 | {$batchId=isset($batchId) ? $batchId : ''}
2 | {if="empty($batch_mode)"}
3 |
4 |
5 |
6 | {include="_inc/includes"}
7 |
8 |
9 | {include="_inc/page.header"}
10 | {else}
11 | {ignore}Lil hack: when included in a loop in batch mode, `$value` is assigned by RainTPL with template vars.{/ignore}
12 | {function="extract($value) ? '' : ''"}
13 | {/if}
14 |
96 |
97 | {if="empty($batch_mode)"}
98 | {include="_inc/page.footer"}
99 | {if="$link_is_new && $async_metadata"}{/if}
100 |
101 |
102 | {/if}
103 |
--------------------------------------------------------------------------------
/stack/error.html:
--------------------------------------------------------------------------------
1 |
2 |
3 | {include="_inc/includes"}
4 |
5 | {include="_inc/page.header"}
6 |
7 | {$message}
8 |
9 | {if="!empty($text)"}
10 | {$text}
11 | {/if}
12 |
13 | {if="!empty($stacktrace)"}
14 |
15 | {$stacktrace}
16 |
17 | {/if}
18 |
19 |
20 | {include="_inc/page.footer"}
21 |
22 |
23 |
--------------------------------------------------------------------------------
/stack/export.bookmarks.html:
--------------------------------------------------------------------------------
1 |
2 |
3 | {ignore}The RainTPL loop is formatted to avoid generating extra newlines{/ignore}
6 | {$pagetitle}
7 | Shaarli export of {$selection} bookmarks on {$date}
8 | {loop="links"}{$private=intval($value.private)}
9 |
{$value.title} {if="$value.description"}{$eol}{$value.description}{/if}{/loop}
10 |
11 |
--------------------------------------------------------------------------------
/stack/export.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
{include="_inc/includes"}
4 |
5 | {include="_inc/page.header"}
6 |
7 | {include="_inc/back_button"} {"Export Database"|t}
8 |
9 |
10 |
11 |
12 |
{'Selection'|t}
13 |
14 |
21 |
22 |
23 |
24 | {'Prepend note permalinks with this Shaarli instance\'s URL'|t}
25 | {'Useful to import bookmarks in a web browser'|t}
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 | {include="_inc/page.footer"}
34 |
35 |
36 |
--------------------------------------------------------------------------------
/stack/favicons/android-chrome-192x192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RolandTi/shaarli-stack/7649f46d2f3d98bc7743b5822df03084bcabf232/stack/favicons/android-chrome-192x192.png
--------------------------------------------------------------------------------
/stack/favicons/android-chrome-512x512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RolandTi/shaarli-stack/7649f46d2f3d98bc7743b5822df03084bcabf232/stack/favicons/android-chrome-512x512.png
--------------------------------------------------------------------------------
/stack/favicons/apple-touch-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RolandTi/shaarli-stack/7649f46d2f3d98bc7743b5822df03084bcabf232/stack/favicons/apple-touch-icon.png
--------------------------------------------------------------------------------
/stack/favicons/favicon-16x16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RolandTi/shaarli-stack/7649f46d2f3d98bc7743b5822df03084bcabf232/stack/favicons/favicon-16x16.png
--------------------------------------------------------------------------------
/stack/favicons/favicon-32x32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RolandTi/shaarli-stack/7649f46d2f3d98bc7743b5822df03084bcabf232/stack/favicons/favicon-32x32.png
--------------------------------------------------------------------------------
/stack/favicons/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RolandTi/shaarli-stack/7649f46d2f3d98bc7743b5822df03084bcabf232/stack/favicons/favicon.ico
--------------------------------------------------------------------------------
/stack/favicons/favicon.svg:
--------------------------------------------------------------------------------
1 |
2 |
4 |
7 |
13 |
15 |
17 |
19 |
21 |
22 |
23 |
--------------------------------------------------------------------------------
/stack/favicons/safari-pinned-tab.svg:
--------------------------------------------------------------------------------
1 |
2 |
4 |
7 |
8 | Created by potrace 1.14, written by Peter Selinger 2001-2017
9 |
10 |
12 |
14 |
16 |
18 |
19 |
20 |
--------------------------------------------------------------------------------
/stack/favicons/site.webmanifest:
--------------------------------------------------------------------------------
1 | {
2 | "name": "Shaarli",
3 | "short_name": "Shaarli",
4 | "icons": [
5 | {
6 | "src": "/android-chrome-192x192.png?v=231201",
7 | "sizes": "192x192",
8 | "type": "image/png"
9 | },
10 | {
11 | "src": "/android-chrome-512x512.png?v=231201",
12 | "sizes": "512x512",
13 | "type": "image/png"
14 | }
15 | ],
16 | "theme_color": "#ffffff",
17 | "background_color": "#ffffff",
18 | "display": "standalone"
19 | }
20 |
--------------------------------------------------------------------------------
/stack/feed.atom.html:
--------------------------------------------------------------------------------
1 |
2 |
3 | {$pagetitle}
4 | Shaared links
5 | {if="$show_dates"}
6 | {$last_update}
7 | {/if}
8 |
9 |
11 | {loop="$feed_plugins_header"}
12 | {$value}
13 | {/loop}
14 |
15 | {$pagetitle}
16 | {$index_url}
17 |
18 | {$index_url}
19 | Shaarli
20 | {loop="$links"}
21 |
22 | {$value.title}
23 | {if="$usepermalinks"}
24 |
25 | {else}
26 |
27 | {/if}
28 | {$value.guid}
29 | {if="$show_dates"}
30 | {$value.pub_iso_date}
31 | {$value.up_iso_date}
32 | {/if}
33 |
34 | {loop="$value.taglist"}
35 |
36 | {/loop}
37 | {loop="$value.feed_plugins"}
38 | {$value}
39 | {/loop}
40 |
41 | {/loop}
42 |
43 |
--------------------------------------------------------------------------------
/stack/feed.rss.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | {$pagetitle}
5 | {$index_url}
6 | Shaared links
7 | {$language}
8 | {$index_url}
9 | Shaarli
10 |
11 |
13 | {loop="$feed_plugins_header"}
14 | {$value}
15 | {/loop}
16 | {loop="$links"}
17 | -
18 |
{$value.title}
19 | {$value.guid}
20 | {if="$usepermalinks"}
21 | {$value.guid}
22 | {else}
23 | {$value.url}
24 | {/if}
25 | {if="$show_dates"}
26 | {$value.pub_iso_date}
27 | {$value.up_iso_date}
28 | {/if}
29 |
30 | {loop="$value.taglist"}
31 | {$value}
32 | {/loop}
33 | {loop="$value.feed_plugins"}
34 | {$value}
35 | {/loop}
36 |
37 | {/loop}
38 |
39 |
40 |
--------------------------------------------------------------------------------
/stack/fonts/DINish-Bold.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RolandTi/shaarli-stack/7649f46d2f3d98bc7743b5822df03084bcabf232/stack/fonts/DINish-Bold.woff2
--------------------------------------------------------------------------------
/stack/fonts/DINish-BoldItalic.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RolandTi/shaarli-stack/7649f46d2f3d98bc7743b5822df03084bcabf232/stack/fonts/DINish-BoldItalic.woff2
--------------------------------------------------------------------------------
/stack/fonts/DINish-Italic.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RolandTi/shaarli-stack/7649f46d2f3d98bc7743b5822df03084bcabf232/stack/fonts/DINish-Italic.woff2
--------------------------------------------------------------------------------
/stack/fonts/DINish-Regular.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RolandTi/shaarli-stack/7649f46d2f3d98bc7743b5822df03084bcabf232/stack/fonts/DINish-Regular.woff2
--------------------------------------------------------------------------------
/stack/fonts/DINishCondensed-Bold.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RolandTi/shaarli-stack/7649f46d2f3d98bc7743b5822df03084bcabf232/stack/fonts/DINishCondensed-Bold.woff2
--------------------------------------------------------------------------------
/stack/fonts/DINishCondensed-BoldItalic.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RolandTi/shaarli-stack/7649f46d2f3d98bc7743b5822df03084bcabf232/stack/fonts/DINishCondensed-BoldItalic.woff2
--------------------------------------------------------------------------------
/stack/fonts/DINishCondensed-Italic.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RolandTi/shaarli-stack/7649f46d2f3d98bc7743b5822df03084bcabf232/stack/fonts/DINishCondensed-Italic.woff2
--------------------------------------------------------------------------------
/stack/fonts/DINishCondensed-Regular.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RolandTi/shaarli-stack/7649f46d2f3d98bc7743b5822df03084bcabf232/stack/fonts/DINishCondensed-Regular.woff2
--------------------------------------------------------------------------------
/stack/img/sad_star.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RolandTi/shaarli-stack/7649f46d2f3d98bc7743b5822df03084bcabf232/stack/img/sad_star.png
--------------------------------------------------------------------------------
/stack/import.html:
--------------------------------------------------------------------------------
1 |
2 |
3 | {include="_inc/includes"}
4 |
5 | {include="_inc/page.header"}
6 |
7 | {include="_inc/back_button"} {"Import Database"|t}
8 |
9 |
10 |
11 |
12 | {'Maximum size allowed:'|t} {$maxfilesizeHuman}
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
{'Visibility'|t}
21 |
33 |
34 |
35 |
36 | {'Overwrite existing bookmarks'|t} {'Duplicates based on URL'|t}
37 |
38 |
39 |
40 |
41 |
42 | {'Add default tags'|t}
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 | {include="_inc/page.footer"}
51 |
52 |
53 |
--------------------------------------------------------------------------------
/stack/install.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | {include="_inc/includes"}
5 |
6 |
7 |
8 | {$ratioLabel='1-4'}
9 | {$ratioInput='3-4'}
10 | {$ratioLabelMobile='7-8'}
11 | {$ratioInputMobile='1-8'}
12 |
13 |
14 |
15 |
16 |
17 |
{'Install Shaarli'|t}
18 |
19 |
20 |
{'It looks like it\'s the first time you run Shaarli. Please configure it.'|t}
21 |
22 |
23 |
24 |
25 |
26 |
27 | {'Username'|t}
28 |
29 |
30 |
31 |
36 |
37 |
38 |
39 |
40 |
41 |
42 | {'Password'|t}
43 |
44 |
45 |
46 |
51 |
52 |
53 |
54 |
55 |
56 |
57 | {'Shaarli title'|t}
58 |
59 |
60 |
61 |
66 |
67 |
68 |
69 |
70 |
71 |
72 | {'Languages'|t}
73 |
74 |
75 |
76 |
87 |
88 |
89 |
90 |
91 |
92 |
93 | {'Timezone'|t}
94 | {'Continent'|t} · {'City'|t}
95 |
96 |
97 |
98 |
124 |
125 |
126 |
127 |
128 |
129 |
130 | {'Check for updates'|t}
131 |
132 | {'Notify me when a new release is ready'|t}
133 |
134 |
135 |
136 |
137 |
142 |
143 |
144 |
145 |
146 |
147 |
148 | {'Enable REST API'|t}
149 | {'Allow third party software to use Shaarli such as mobile application'|t}
150 |
151 |
152 |
153 |
158 |
159 |
160 |
161 |
162 |
163 |
164 |
165 |
166 |
167 |
168 |
169 |
170 |
{'Server requirements'|t}
171 |
172 | {include="_inc/server.requirements"}
173 |
174 |
175 |
176 | {include="_inc/page.footer"}
177 |
178 |
179 |
--------------------------------------------------------------------------------
/stack/js/markdown.min.js:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RolandTi/shaarli-stack/7649f46d2f3d98bc7743b5822df03084bcabf232/stack/js/markdown.min.js
--------------------------------------------------------------------------------
/stack/js/metadata.min.js.LICENSE.txt:
--------------------------------------------------------------------------------
1 | /*! https://mths.be/he v1.2.0 by @mathias | MIT license */
2 |
--------------------------------------------------------------------------------
/stack/js/pluginsadmin.min.js:
--------------------------------------------------------------------------------
1 | (()=>{function t(t){return function(t){if(Array.isArray(t))return r(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||function(t,e){if(t){if("string"==typeof t)return r(t,e);var n={}.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?r(t,e):void 0}}(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function r(t,r){(null==r||r>t.length)&&(r=t.length);for(var e=0,n=Array(r);e0&&(a=[].slice.call(a).reverse());for(var i=0;i{function e(e){return function(e){if(Array.isArray(e))return t(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,n){if(e){if("string"==typeof e)return t(e,n);var r={}.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?t(e,n):void 0}}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function t(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n div"),l=document.querySelector(".progressbar-current");document.querySelector(".dark-layer").style.display="block",document.querySelector(".progressbar-max").innerHTML=a,l.innerHTML=u;var f=[];c.forEach((function(e){f.push(n(t,e).then((function(){u+=1,i.style.width="".concat(100*u/a,"%"),l.innerHTML=u})))})),Promise.all(f).then((function(){window.location.href="".concat(t,"/")}))}))}));var i=document.querySelectorAll('[name="delete_link"]');null!=i&&e(i).forEach((function(e){e.addEventListener("click",(function(e){e.preventDefault();var n=e.target.closest('form[name="linkform"]');(function(e,t){return new Promise((function(n,r){var o=new XMLHttpRequest;o.open("GET","".concat(e.href,"&source=batch")),o.onload=function(){204!==o.status?(alert("An error occurred. Return code: ".concat(o.status)),r()):(t.closest(".edit-link-container").remove(),n())},o.send()}))})(e.target,n).then((function(){return r(t,o(),"/")}))}))}))}()})();
--------------------------------------------------------------------------------
/stack/js/shaarli.min.js.LICENSE.txt:
--------------------------------------------------------------------------------
1 | /*! https://mths.be/he v1.2.0 by @mathias | MIT license */
2 |
--------------------------------------------------------------------------------
/stack/js/thumbnails.min.js:
--------------------------------------------------------------------------------
1 | /*! For license information please see thumbnails.min.js.LICENSE.txt */
2 | (()=>{var t={987:function(t,e,o){var n,s;n=function(){"use strict";var t,e,o,n,s="src",r="srcset";return function(s){if(!document.querySelectorAll){var r=document.createStyleSheet();document.querySelectorAll=function(t,e,o,n,s){for(s=document.all,e=[],o=(t=t.replace(/\[for\b/gi,"[htmlFor").split(",")).length;o--;){for(r.addRule(t[o],"k:v"),n=s.length;n--;)s[n].currentStyle.k&&e.push(s[n]);r.removeRule(0)}return e}}var c=this,l=c._util={};l.elements=[],l.destroyed=!0,c.options=s||{},c.options.error=c.options.error||!1,c.options.offset=c.options.offset||100,c.options.root=c.options.root||document,c.options.success=c.options.success||!1,c.options.selector=c.options.selector||".b-lazy",c.options.separator=c.options.separator||"|",c.options.containerClass=c.options.container,c.options.container=!!c.options.containerClass&&document.querySelectorAll(c.options.containerClass),c.options.errorClass=c.options.errorClass||"b-error",c.options.breakpoints=c.options.breakpoints||!1,c.options.loadInvisible=c.options.loadInvisible||!1,c.options.successClass=c.options.successClass||"b-loaded",c.options.validateDelay=c.options.validateDelay||25,c.options.saveViewportOffsetDelay=c.options.saveViewportOffsetDelay||50,c.options.srcset=c.options.srcset||"data-srcset",c.options.src=t=c.options.src||"data-src",n=Element.prototype.closest,o=window.devicePixelRatio>1,(e={}).top=0-c.options.offset,e.left=0-c.options.offset,c.revalidate=function(){i(c)},c.load=function(t,e){var o=this.options;t&&void 0===t.length?u(t,e,o):O(t,(function(t){u(t,e,o)}))},c.destroy=function(){var t=c._util;c.options.container&&O(c.options.container,(function(e){T(e,"scroll",t.validateT)})),T(window,"scroll",t.validateT),T(window,"resize",t.validateT),T(window,"resize",t.saveViewportOffsetT),t.count=0,t.elements.length=0,t.destroyed=!0},l.validateT=x((function(){a(c)}),c.options.validateDelay,c),l.saveViewportOffsetT=x((function(){C(c.options.offset)}),c.options.saveViewportOffsetDelay,c),C(c.options.offset),O(c.options.breakpoints,(function(e){if(e.width>=window.screen.width)return t=e.src,!1})),setTimeout((function(){i(c)}))};function i(t){var e=t._util;e.elements=b(t.options),e.count=e.elements.length,e.destroyed&&(e.destroyed=!1,t.options.container&&O(t.options.container,(function(t){E(t,"scroll",e.validateT)})),E(window,"resize",e.saveViewportOffsetT),E(window,"resize",e.validateT),E(window,"scroll",e.validateT)),a(t)}function a(t){for(var e=t._util,o=0;oe.top?a:e.top,right:ce.left?f:e.left})}return!1}}return l(s,e)}function l(t,e){return t.right>=e.left&&t.bottom>=e.top&&t.left<=e.right&&t.top<=e.bottom}function u(e,n,i){if(!w(e,i.successClass)&&(n||i.loadInvisible||e.offsetWidth>0&&e.offsetHeight>0)){var a=m(e,t)||m(e,i.src);if(a){var c=a.split(i.separator),l=c[o&&c.length>1?1:0],u=m(e,i.srcset),v=g(e,"img"),h=e.parentNode,b=h&&g(h,"picture");if(v||void 0===e.src){var C=new Image,x=function(){i.error&&i.error(e,"invalid"),y(e,i.errorClass),T(C,"error",x),T(C,"load",k)},k=function(){v?b||d(e,l,u):e.style.backgroundImage='url("'+l+'")',f(e,i),T(C,"load",k),T(C,"error",x)};b&&(C=e,O(h.getElementsByTagName("source"),(function(t){p(t,r,i.srcset)}))),E(C,"error",x),E(C,"load",k),d(C,l,u)}else e.src=l,f(e,i)}else g(e,"video")?(O(e.getElementsByTagName("source"),(function(t){p(t,s,i.src)})),e.load(),f(e,i)):(i.error&&i.error(e,"missing"),y(e,i.errorClass))}}function f(t,e){y(t,e.successClass),e.success&&e.success(t),h(t,e.src),h(t,e.srcset),O(e.breakpoints,(function(e){h(t,e.src)}))}function p(t,e,o){var n=m(t,o);n&&(v(t,e,n),h(t,o))}function d(t,e,o){o&&v(t,r,o),t.src=e}function v(t,e,o){t.setAttribute(e,o)}function m(t,e){return t.getAttribute(e)}function h(t,e){t.removeAttribute(e)}function g(t,e){return t.nodeName.toLowerCase()===e}function w(t,e){return-1!==(" "+t.className+" ").indexOf(" "+e+" ")}function y(t,e){w(t,e)||(t.className+=" "+e)}function b(t){for(var e=[],o=t.root.querySelectorAll(t.selector),n=o.length;n--;e.unshift(o[n]));return e}function C(t){e.bottom=(window.innerHeight||document.documentElement.clientHeight)+t,e.right=(window.innerWidth||document.documentElement.clientWidth)+t}function E(t,e,o){t.attachEvent?t.attachEvent&&t.attachEvent("on"+e,o):t.addEventListener(e,o,{capture:!1,passive:!0})}function T(t,e,o){t.detachEvent?t.detachEvent&&t.detachEvent("on"+e,o):t.removeEventListener(e,o,{capture:!1,passive:!0})}function O(t,e){if(t&&e)for(var o=t.length,n=0;n{var e=t&&t.__esModule?()=>t.default:()=>t;return o.d(e,{a:e}),e},o.d=(t,e)=>{for(var n in e)o.o(e,n)&&!o.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},o.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),(()=>{"use strict";var t=o(987);new(o.n(t)())})()})();
--------------------------------------------------------------------------------
/stack/js/thumbnails.min.js.LICENSE.txt:
--------------------------------------------------------------------------------
1 | /*!
2 | hey, [be]Lazy.js - v1.8.2 - 2016.10.25
3 | A fast, small and dependency free lazy load script (https://github.com/dinbror/blazy)
4 | (c) Bjoern Klinggaard - @bklinggaard - http://dinbror.dk/blazy
5 | */
6 |
--------------------------------------------------------------------------------
/stack/js/thumbnails_update.min.js:
--------------------------------------------------------------------------------
1 | (()=>{function e(t,n,r,o){var a=new XMLHttpRequest;a.open("PATCH","".concat(t,"/admin/shaare/").concat(n[r],"/update-thumbnail")),a.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),a.responseType="json",a.onload=function(){if(200!==a.status)alert("An error occurred. Return code: ".concat(a.status));else{var c=a.response;r+=1,o.progressBar.style.width="".concat(100*r/n.length,"%"),o.current.innerHTML=r,o.title.innerHTML=c.title,!1!==c.thumbnail&&(o.thumbnail.innerHTML=' ')),r div"),current:document.querySelector(".progress-current"),thumbnail:document.querySelector(".thumbnail-placeholder"),title:document.querySelector(".thumbnail-link-title")})})();
--------------------------------------------------------------------------------
/stack/linklist.html:
--------------------------------------------------------------------------------
1 |
2 |
3 | {include="_inc/includes"}
4 |
5 | {include="_inc/page.header"}
6 |
7 |
8 | {loop="$plugins_header.fields_toolbar"}
9 |
10 |
14 | {loop="$value.inputs"}
15 | {/loop}
19 |
20 |
21 | {/loop}
22 |
23 |
24 |
25 | {loop="$plugin_start_zone"}
26 | {$value}
27 | {/loop}
28 |
29 |
30 | {if="count($links)==0"}
31 |
32 |
33 |
34 |
{'Nothing found.'|t}
35 |
36 |
37 |
38 | {elseif="!empty($search_term) or $search_tags !== '' or !empty($visibility) or $untaggedonly"}
39 |
40 |
41 |
42 |
{function="sprintf(t('%s result', '%s results', $result_count), $result_count)"}
43 | {if="!empty($search_term)"}
44 | {'for'|t}
{$search_term}
45 | {/if}
46 | {if="!empty($search_tags)"}
47 | {$exploded_tags=tags_str2array($search_tags, $tags_separator)}
48 | {'tagged'|t}
49 | {loop="$exploded_tags"}
50 |
51 |
52 | {$value}
53 |
54 |
55 | {/loop}
56 | {/if}
57 | {if="!empty($visibility)"}
58 | {'with status'|t}
59 |
60 | {$visibility|t}
61 |
62 | {/if}
63 | {if="$untaggedonly"}
64 |
65 | {'without any tag'|t}
66 |
67 | {/if}
68 |
69 | {/if}
70 |
71 | {ignore}Set translation here, for performances{/ignore}
72 | {$strPrivate=t('Private')}
73 | {$strEdit=t('Edit')}
74 | {$strDelete=t('Delete')}
75 | {$strFold=t('Fold')}
76 | {$strEdited=t('Edited: ')}
77 | {$strPermalink=t('Permalink')}
78 | {$strPermalinkLc=t('permalink')}
79 | {$strAddTag=t('Add tag')}
80 | {$strToggleSticky=t('Toggle sticky')}
81 | {$strSticky=t('Sticky')}
82 | {$strShaarePrivate=t('Share a private link')}
83 | {ignore}End of translations{/ignore}
84 |
85 | {loop="links"}
86 |
87 | {if="$conf->get('config.STACK_DEFAULT_UI')"}
88 | {$defaultUI=$conf->get('config.STACK_DEFAULT_UI')}
89 | {/if}
90 |
91 |
92 |
93 | {if="$thumbnails_enabled && $value.thumbnail !== false"}
94 |
98 |
99 | {ignore}RainTPL hack: put the 2 src on two different line to avoid path replace bug{/ignore}
100 |
101 |
103 |
104 |
105 |
106 | {/if}
107 |
108 | {if="$is_logged_in"}
109 | {/if}
110 |
111 | {if="$value.sticky"} {/if}
113 | {if="$value.private"}
116 | {/if}
117 | {$value.title_html} {$value.url}
118 |
119 | {if="$value.tags"}
120 |
127 | {/if}
128 |
129 |
130 |
131 |
132 |
133 |
134 |
135 |
136 | {if="$value.tags"}
137 |
144 | {/if}
145 |
146 | {if="$value.description"}
{$value.description}
{/if}
147 |
148 |
149 |
150 |
186 |
187 |
188 | {/loop}
189 |
190 |
191 |
192 | {loop="$plugin_end_zone"}
193 | {$value}
194 | {/loop}
195 |
196 |
197 | {include="_inc/linklist.paging"}
198 |
199 | {include="_inc/page.footer"}
200 | {if="$is_logged_in && $async_metadata"}{/if}
201 |
202 |
221 |
222 | {if="$is_logged_in"}
223 |
241 | {/if}
242 |
243 |
339 |
340 |
341 |
--------------------------------------------------------------------------------
/stack/loginform.html:
--------------------------------------------------------------------------------
1 |
2 |
3 | {include="_inc/includes"}
4 |
5 | {include="_inc/page.header"}
6 |
29 |
30 | {include="_inc/page.footer"}
31 |
32 |
33 |
--------------------------------------------------------------------------------
/stack/opensearch.html:
--------------------------------------------------------------------------------
1 |
2 |
3 | Shaarli search - {$pagetitle}
4 | Shaarli search - {$pagetitle}
5 |
6 |
7 |
8 | UTF-8
9 | Shaarli Community - https://github.com/shaarli/Shaarli/
10 | data:image/x-icon;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAABmJLR0QA/wD/AP+gvaeTAAAHRklE
11 | QVRIx5WWaWxU5xWG3++7986dfYYZb+MN2xiMDRiDFePUiQsNoiwpUNpAmhInJVEqpa0oQUlbJVKq
12 | olaiqpLKUtOKhAJRm1BKRVWctuykpFjAgPcFx/uMl5mxPTOeuXPv3O3rjyiV0lIpfX+dc36c55xf
13 | 70vwP9TZ2fFpSQCwT5u6unX4f0QeNLx27RoMQwfRveTd11T23M+8S9w+Z3NRma1W4Hk6/nEimFpM
14 | Xnun9Xpmz1MPY+feOhBi/fwAAOjq7iJEqmQqCZf5i7NvyNZ/bJPYgAjCiJc2Zmhyw68SM/T1+NlK
15 | uf61BPoH+tHU1PT5ACMjI8RXvACvpZ5NT0+fmrG+2TKqtDLV0BgA2AUfXS3+UtfDX2ixCf73E+oA
16 | rat92CTkv9fRBwEkSaLDt/JZR/v0Q7qjb8dQ5hjSqmYSOCkzBbogL+ij2RN8bik9wK88Al9tH4tG
17 | ow88lvb19yEyPwfGGLq6OungYD9fUlosrqwoQVVVUeOU8qE/mU0ZTq6KNvreNort+5hugkayQUgY
18 | qQld/u6qnVRhkciscOdOkNy5E0RnZ+e/AbwsZxAaHyORZA+prW01CTlnGppOqAcwUnCmlDAkAyin
19 | Dapb2t7lNeRijpwvTGlJROXugoKS+upz/S19Kj9lJjxXGY1VU49tGevt7WOCSMHTeAXclePsQts9
20 | Jq9oLR7rPVkHxpUYkK2c07ZDiieRNcAx3ZlNphcnsxbiMuEsXFSTZpabp+VVS17UNSV/8n7+gN75
21 | +C1DM6VEjkgatiz/5IOCAheiUdeyr+198keKZXLzTKYjMDk/ZzGJhkV9AiPSdWaYIAY4U7TYNJMR
22 | pugMqgHcXTiJqDK8ycMv2+TPWyWtKFw3KEdtJxNz8u8+/PNYIqeUgY/Oz+Z7q5X3gtqvG7qip8yM
23 | HqdZg5kGgwGACoQQQkEMQ2DMIFnGE04xCRQTZFaexUT6jEEImJ2njjxx9fr13hfqfULTQ4apHept
24 | lxf4mrqS3Tek0w1toTc1K6WcXfAwnyWH8kSkIueEhdhNrzUAv16fSCUzNwR3vr/G2lKWojMqbxF4
25 | FWlLPDvBR+RBNpTsNqfkV7htuUe/UVq456qdzzvFh2KjdSH0I6ODs1ps9NHcw2jMfRYcEQyOCiox
26 | aWR0fOQWVLFNUuOnrXJxfIPnpXLRKzocLpsJanhUU/bfjJ4gfwm/ys3JGX1cuS3UBvauLa/MBe9z
27 | 5c/xGRdSKpiVmhhN98JK/w4DGgg4uLh8u1NfPhWbmzszeH3G1rxv3dL7+qXyGaXHJi46s4QQophp
28 | TKSDkHWGlAqmGCbAGAUA3sY5LlRZv3w44Dhnm0iFzbnsGfJR5E+EEsppTBVXuBptL5b8YQMlwnO+
29 | Z2wtea4cl8Rc3KXJ4zShRm0CFaCaGhSDwGSMlbtLhSr7FnVhKhscC4+AO3L0x5PSFBdfE9i40SE6
30 | xLSWRCIbJ6phIqEysqvk+2aJ0vhB1NK353zyaL3GS76NgRbVYykkt2OXuaQqMwuxkk0FT+OJpS+z
31 | piXPRP1KzRvz4dRvO68PaWCMEQAIDcbqFiLJtyaSA/Ef3NnMGttgvHS7mUUWw7cTMemtY/cPsw3n
32 | oe2+4mGXpt7VGWPJ6zOn1V2Xfaz5AxgvBzexodmeGWmCbWWTDOGpSZIIqeAe2/IYvnXgWbomUj2T
33 | lNlwUP7bV64lzuRIeoodqDxi1OKRs/e0i08dH/6JPWtk6KKaZd3xj2jAXkY3BvZGK1xrhZvRNktP
34 | fNA0ubQrxyxV4jHpSkWoXJPKYqBetxeRpgsMWwE5b/bxaYxUDSWmzCLbStqQuy02LY4/cWLsqH8i
35 | HYNbyEeJczkJSzH2855DwsXp932F9hXEKQSQ1UHa568iRAa3uFyeNVolMBmeIrzT4cTXm37KMuvA
36 | xb8XXTqiDELRgKg8h/dGWwP9iSDaIzcYJSCbA/uNR3N2sNahV/hbsSA70vEdW66tCOOpj8FRkIgU
37 | Q5ybLUopiTzeTpFWUoTXdR3knwQMzLANOyQX50fWhDktLeAX3UcIA2EEQHPgi6TBsrWzaLGm7emC
38 | H7bY+GPlV6YumiEpDhslxGBgROApz+yyhROzduIEzwngDh48iD3jO0nBRAUUXtHcoq+ZWbI5EWWa
39 | WTieFjoKsaVoN92T88J4vlz+asXqpb+hEcdotbdueZ47vyiqhpA2UoRQwpoLtpNHxR0382jR8RzT
40 | k8xYMyCMMfR33Uc8rxdrA9tpuHPyS7pPOTRPZ1arepa4rUsybiWnnU9a39ZXxdur+XoGAGMdoXLi
41 | M789axnfNxDr8omiDcvF1f3OhPf18efjF/nfz6PGvv6zlrlwWwYBgcBZbKH4WKHODLHEURDxbHDF
42 | QWGePftHUlZWjsy8guYnH2EgwORfZ5cuavEqgGhLnL6+sycvRP1Fbux/fheIn3wCCN4N/qdPMwA4
43 | 2fYOeoe7kc6kcfCbh8n+r7YwAOjs6QCl9DNx5t7dew+MOf8CcuqqoLxlhwgAAAAASUVORK5CYII=
44 |
45 |
46 |
--------------------------------------------------------------------------------
/stack/picwall.html:
--------------------------------------------------------------------------------
1 |
2 |
3 | {include="_inc/includes"}
4 |
5 | {include="_inc/page.header"}
6 |
7 | {if="count($linksToDisplay)===0 && $is_logged_in"}
8 |
10 | {/if}
11 |
12 | {loop="$plugin_start_zone"}{$value}{/loop}
13 |
14 | {'Picture Wall'|t}
15 |
16 |
34 |
35 | {loop="$plugin_end_zone"}{$value}{/loop}
36 | {include="_inc/page.footer"}
37 |
38 |
39 |
40 |
--------------------------------------------------------------------------------
/stack/pluginsadmin.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | {include="_inc/includes"}
5 |
6 |
7 | {include="_inc/page.header"}
8 |
9 |
10 | {'You have to enable JavaScript to change plugin loading order.'|t}
11 |
12 |
13 |
14 | {include="_inc/back_button"} {'Plugin administration'|t}
15 |
16 |
17 | {'Enabled Plugins'|t}
18 |
19 |
20 | {if="count($enabledPlugins)==0"}
21 |
{'No plugin enabled.'|t}
22 | {else}
23 |
50 | {/if}
51 |
52 |
53 |
54 |
55 | {'Disabled Plugins'|t}
56 | {if="count($disabledPlugins)==0"}
57 | {'No plugin disabled.'|t}
58 | {else}
59 |
77 | {/if}
78 |
79 |
80 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
{'Plugin configuration'|t}
93 |
94 |
95 | {if="count($enabledPlugins)==0"}
96 |
{'No plugin enabled.'|t}
97 | {else}
98 | {$nbParameters=0}
99 | {loop="$enabledPlugins"}
100 | {$nbParameters=$nbParameters+count($value.parameters)}
101 | {if="count($value.parameters) > 0"}
102 |
103 |
{function="str_replace('_', ' ', $key)"}
104 | {loop="$value.parameters"}
105 |
106 |
107 |
108 | {$key}
109 | {if="isset($value.desc)"}
110 | · {$value.desc}
111 | {/if}
112 |
113 |
114 |
115 |
116 |
117 |
118 | {/loop}
119 |
120 | {/if}
121 | {/loop}
122 | {if="$nbParameters===0"}
123 |
{'No parameter available.'|t}
124 | {else}
125 |
126 |
127 |
128 | {/if}
129 | {/if}
130 |
131 |
132 |
133 |
134 |
135 |
136 |
137 | {include="_inc/page.footer"}
138 |
139 |
140 |
141 |
142 |
--------------------------------------------------------------------------------
/stack/pluginscontent.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | {include="_inc/includes"}
5 |
6 |
7 | {include="_inc/page.header"}
8 |
9 | {$content}
10 |
11 | {include="_inc/page.footer"}
12 |
13 |
14 |
--------------------------------------------------------------------------------
/stack/server.html:
--------------------------------------------------------------------------------
1 |
2 |
3 | {include="_inc/includes"}
4 |
5 | {include="_inc/page.header"}
6 | {include="_inc/back_button"} {'Server administration'|t}
7 |
8 |
9 | {'General'|t}
10 | {'Index URL'|t} :
11 | {$index_url}
12 |
13 |
14 | {'Base path'|t} :
15 | {$base_path}
16 |
17 |
18 | {'Client IP'|t} :
19 | {$client_ip}
20 |
21 | {'Trusted reverse proxies'|t} :
22 |
23 | {if="count($trusted_proxies) > 0"}
24 |
25 | {loop="$trusted_proxies"}
26 | {$value}
27 | {/loop}
28 | {else}
29 |
30 | {'N/A'|t}
31 | {/if}
32 |
33 |
34 |
35 |
36 | {'Thumbnails'|t}
37 |
38 | {'Thumbnails status'|t} : {if="$thumbnails_mode==='all'"}
39 | {'All'|t}
40 | {elseif="$thumbnails_mode==='common'"}
41 | {'Only common media hosts'|t}
42 | {else}
43 | {'None'|t}
44 | {/if}
45 |
46 | {if="$thumbnails_mode!=='none'"}
47 |
48 | {'Synchronize thumbnails'|t}
49 | {/if}
50 |
51 |
52 |
53 | {'Cache'|t}
54 |
55 |
59 |
60 |
61 | {include="_inc/server.requirements"}
62 |
63 |
64 | {'Version'|t}
65 |
66 | {'Current version'|t} : {$current_version}
67 |
68 | {'Latest release'|t} : {$latest_version}
69 |
70 |
71 |
72 |
73 | {include="_inc/page.footer"}
74 |
75 |
76 |
--------------------------------------------------------------------------------
/stack/tag.cloud.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | {include="_inc/includes"}
5 |
6 |
7 | {include="_inc/page.header"}
8 |
9 | {include="tag.sort"}
10 |
11 | {$countTags=count($tags)}
12 |
13 |
14 |
{'Tag cloud'|t} - {$countTags} {'tags'|t}
15 |
16 |
17 |
25 | {'Search'|t}
26 |
27 |
28 |
29 |
30 |
31 | {if="!empty($search_tags)"}
32 |
33 |
34 | {'List all links with those tags'|t}
35 |
36 |
37 | {/if}
38 |
39 |
40 |
41 |
42 | {loop="$plugin_start_zone"}
43 | {$value}
44 | {/loop}
45 |
46 |
47 |
48 | {loop="tags"}
49 |
{$key}
51 | {loop="$value.tag_plugin"}
52 | {$value}
53 | {/loop}
54 | {/loop}
55 |
56 |
57 |
58 | {loop="$plugin_end_zone"}
59 | {$value}
60 | {/loop}
61 |
62 |
63 | {include="tag.sort"}
64 |
65 | {include="_inc/page.footer"}
66 |
67 |
68 |
69 |
--------------------------------------------------------------------------------
/stack/tag.list.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | {include="_inc/includes"}
5 |
6 |
7 | {include="_inc/page.header"}
8 |
9 | {include="tag.sort"}
10 |
11 |
12 |
13 | {$countTags=count($tags)}
14 | {if="!empty($search_tags)"}
15 |
16 |
17 | {'List all links with those tags'|t}
18 |
19 |
20 | {/if}
21 |
22 |
39 |
40 |
41 | {loop="$plugin_start_zone"}
42 | {$value}
43 | {/loop}
44 |
45 |
46 |
47 | {loop="tags"}
48 |
49 |
{$value}
50 |
{$key}
51 |
52 | {if="$is_logged_in===true"}
53 |
54 |
55 |
56 |
57 |
58 | {/if}
59 |
60 | {loop="$value.tag_plugin"}
61 | {$value}
62 | {/loop}
63 | {if="$is_logged_in===true"}
64 |
68 | {/if}
69 |
70 | {/loop}
71 |
72 |
73 |
74 | {loop="$plugin_end_zone"}
75 | {$value}
76 | {/loop}
77 |
78 |
79 |
80 |
81 | {if="$is_logged_in===true"}
82 |
87 |
88 |
89 |
--------------------------------------------------------------------------------
/stack/tag.sort.html:
--------------------------------------------------------------------------------
1 |
2 | {'Cloud'|t}
3 | {'Most used'|t}
4 | {'Alphabetical'|t}
5 |
6 |
--------------------------------------------------------------------------------
/stack/thumbnails.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | {include="_inc/includes"}
5 |
6 |
7 | {include="_inc/page.header"}
8 |
9 |
10 |
11 |
12 |
{'Thumbnails update'|t}
13 |
14 |
20 |
21 |
31 |
32 |
33 |
34 |
35 |
36 | 0 / {$ids|count}
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 | {include="_inc/page.footer"}
46 |
47 |
48 |
49 |
--------------------------------------------------------------------------------
/stack/tools.html:
--------------------------------------------------------------------------------
1 |
2 |
3 | {include="_inc/includes"}
4 |
5 | {include="_inc/page.header"}
6 |
25 |
26 |
68 |
69 |
74 |
75 | {include="_inc/page.footer"}
76 |
77 |
79 |
80 |
81 |
--------------------------------------------------------------------------------