├── .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 | ![Screenshots of Shaarli Stack](screenshots/stack_sml.png "3 screenshots of Shaarli Stack") 18 | 19 | ![Screenshots of Shaarli Stack](screenshots/stack_desktop.png "3 screenshots of Shaarli Stack") 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 | ![Screenshots of Shaarli Stack](screenshots/stack_colors.png "Stack with different colors") 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 | ![Screenshots of Shaarli Stack](screenshots/stack_options.png "Stack navigation bar with different options") 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 | 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 | 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 | 46 | 47 | 48 | 49 | 50 | 51 | -------------------------------------------------------------------------------- /stack/_inc/page.header.html: -------------------------------------------------------------------------------- 1 |
2 | {if="$is_logged_in && $template === 'linklist'"} 3 | 12 | 13 | 14 | {$addDelete=['add', 'delete']} 15 | {loop="$addDelete"} 16 |
17 |
18 | 37 |
38 |
39 | {/loop} 40 | {/if} 41 | 42 | 109 |
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 |
191 | {loop="$global_errors"}

{$value}

{/loop} 192 | 193 |
194 | {/if} 195 | 196 | {if="!empty($global_warnings)"} 197 | 198 |
199 |
{loop="global_warnings"}

{$value}

{/loop}
200 | 201 |
202 | {/if} 203 | 204 | {if="!empty($global_successes)"} 205 | 206 |
207 | {loop="$global_successes"}

{$value}

{/loop} 208 | 209 |
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 | 32 | 33 | 34 | 35 | 36 | 37 | {loop="$php_extensions"} 38 | 39 | 41 | 42 | 57 | 58 | {/loop} 59 | 60 |
{'Extension'|t}{'Status'|t}{'Loaded'|t}
{$value.name} 40 | {$value.desc}{$value.required ? t('Required') : t('Optional')} 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 |
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 |
10 | 11 | 12 | 13 |
14 | 15 |
16 | 17 | 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 |
10 |

{'Rename tag'|t}

11 |

{'Case sensitive'|t}

12 |
13 |
14 | 16 | 17 | {loop="$tags"}{/loop} 18 | 19 |
20 |
21 | 23 | 24 | {loop="$tags"}{/loop} 25 | 26 |
27 | 28 |
29 | 30 | 32 |
33 |
34 | 35 |

{'You can also edit tags in the'|t} {'tag list'|t}.

36 |
37 | 38 |
39 |

{"Change tags separator"|t}

40 |
41 |

42 | {'Your current tag separator is'|t} {$tags_separator}{if="!empty($tags_separator_desc)"} ({$tags_separator_desc}){/if}. 43 |

44 |
45 | 47 |
48 | 49 |
50 | 51 |
52 |

53 | {'Note that hashtags won\'t fully work with a non-whitespace separator.'|t} 54 |

55 |
56 |
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 | 15 | 16 | 17 |
18 | 19 |
20 | 21 | 22 | 23 |
24 | 25 |
26 | 27 | 28 | 36 |
37 | 38 |
39 | 40 | 41 | 49 |
50 | 51 |
52 | 53 | 54 | 62 |
63 | 64 |
65 | 66 | 67 | 73 | 74 | 82 |
83 | 84 |
85 | 89 | 90 | 92 |
93 | 94 |
95 | 97 | 98 | 100 |
101 | 102 |
103 | 106 | 107 | 109 |
110 | 111 |
112 | 115 | 116 | 118 |
119 | 120 |
121 | 123 | 124 | 126 |
127 | 128 |
129 | 131 | 132 | 134 |
135 | 136 |
137 | 139 | 140 | 142 |
143 | 144 |
145 | 146 | 147 | 148 |
149 | 150 |
151 | 159 | 160 | 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 |
10 | {'Daily'|t} 11 | {'Weekly'|t} 12 | {'Monthly'|t} 13 |
14 | 15 |

{$localizedType} Shaarli t($type)])"}"> 16 |

17 | 18 | 19 |
20 | {loop="$plugin_start_zone"} 21 | {$value} 22 | {/loop} 23 |
24 | 25 |
26 | 27 | 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 |
62 | 63 | 64 | 65 | {$link.title} 66 |
67 | {if="$thumbnails_enabled && !empty($link.thumbnail)"} 68 |
69 | thumbnail 72 |
73 | {/if} 74 |
{$link.formatedDescription}
75 | {if="$link.tags"} 76 | 83 | {/if} 84 |
85 | {loop="$link.link_plugin"} 86 | {$value} 87 | {/loop} 88 |
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"}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 |
8 |
9 |
/
10 |
11 |
12 |
13 |
14 |
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 | 13 | 14 |
15 |
{'All'|t}
16 | 17 |
{'Private'|t}
18 | 19 |
{'Public'|t}
20 |
21 |
22 | 23 |
24 | 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 | 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 | 13 | 14 | 15 | 16 | 17 |
18 | 19 |
20 | 21 |
22 | 23 |
24 | 25 | {'Use values from the imported file, default to public'|t}
26 | 27 |
{'Import all bookmarks as private'|t}
28 | 29 |
30 | 31 | {'Import all bookmarks as public'|t}
32 |
33 |
34 | 35 |
36 | 37 | 38 | 39 |
40 | 41 |
42 | 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 | 29 |
30 |
31 |
32 |
33 | 34 |
35 |
36 |
37 | 38 |
39 |
40 |
41 | 44 |
45 |
46 |
47 |
48 | 49 |
50 |
51 |
52 | 53 |
54 |
55 |
56 | 59 |
60 |
61 |
62 |
63 | 64 |
65 |
66 |
67 | 68 |
69 |
70 |
71 | 74 |
75 |
76 |
77 |
78 | 85 |
86 |
87 |
88 | 89 |
90 |
91 |
92 | 96 |
97 |
98 |
99 |
100 |
101 | 110 | 121 |
122 |
123 |
124 |
125 | 126 |
127 |
128 |
129 | 135 |
136 |
137 |
138 |
139 | 140 |
141 |
142 |
143 | 144 |
145 |
146 |
147 | 151 |
152 |
153 |
154 |
155 | 156 |
157 |
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 | 190 | 191 | 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 |
7 |
8 |

{'Login'|t}

9 | 10 | 12 | 13 | 14 | 15 |
16 | 17 | 19 | 20 |
21 | 22 | 23 | 24 | {if="$returnurl"} 25 | 26 | {/if} 27 |
28 |
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 |
{'There is no cached thumbnail.'|t} 9 | {'Try to synchronize them.'|t}
10 | {/if} 11 | 12 |
{loop="$plugin_start_zone"}{$value}{/loop}
13 | 14 |

{'Picture Wall'|t}

15 | 16 |
17 | 18 | {loop="$linksToDisplay"} 19 | 20 |
21 | 22 | {$value.title_html} 25 | 26 |
{$value.title} 27 | {loop="$value.picwall_plugin"} 28 | {$value} 29 | {/loop}
30 |
31 |
32 | {/loop} 33 |
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 | 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 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | {loop="$enabledPlugins"} 33 | 34 | 35 | 39 | 46 | 47 | {/loop} 48 | 49 |
{'Name'|t}{'Order'|t}
36 | 37 | 38 | 40 | {if="count($enabledPlugins)>1"} 41 | 42 | 43 | {/if} 44 | 45 |
50 | {/if} 51 |
52 |
53 | 54 |
55 |

{'Disabled Plugins'|t}

56 | {if="count($disabledPlugins)==0"} 57 |

{'No plugin disabled.'|t}

58 | {else} 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | {loop="$disabledPlugins"} 68 | 69 | 70 | 73 | 74 | {/loop} 75 | 76 |
{'Name'|t}
71 | 72 |
77 | {/if} 78 |
79 | 80 |
81 | {"More plugins available"|t} 82 | {"in the documentation"|t}. 83 |
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 | 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 | 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 |
23 |
24 |

{'Tag list'|t} - {$countTags} {'tags'|t}

25 | 26 |
27 | 28 | 35 | 36 |
37 |
38 |
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 |
65 | 66 | OK 67 |
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 | 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 |
15 |
16 |
17 |
18 |
19 |
20 | 21 |
22 |
23 |
24 | 25 | 26 |
27 |
28 |
29 |
30 |
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 |
7 |

{'Settings'|t}

8 | 9 | 24 |
25 | 26 |
27 |

{'Bookmarklets'|t}

28 | 29 |

{'Drag one of these button to your bookmarks toolbar or right-click it and "Bookmark This Link"'|t}, {'then click on the bookmarklet in any page you want to share.'|t}

30 | 31 | 67 |
68 | 69 |
70 | 71 |

{'Third-party resources'|t}

72 |

{'Community and related software'|t}

73 |
74 | 75 | {include="_inc/page.footer"} 76 | 77 | 79 | 80 | 81 | --------------------------------------------------------------------------------