]> git.ipfire.org Git - ipfire.org.git/blob - src/templates/base.html
wiki: Only match usernames when a word starts with @
[ipfire.org.git] / src / templates / base.html
1 <!DOCTYPE html>
2 <html lang="en">
3 <head>
4 <title>{{ hostname }} - {% block title %}{{ _("No title given") }}{% end block %}</title>
5 <meta http-equiv="content-type" content="text/html; charset=utf-8" />
6 <meta name="author" content="IPFire.org - IPFire Development Team" />
7
8 <meta name="keywords" content="Linux, Firewall, IPFire, Security, IPCop, Open Source, Free, ARM, VPN, Proxy, IDS, IPS" />
9
10 <link rel="icon" sizes="192x192" href="{{ static_url("img/apple-touch-icon-192x192-precomposed.png") }}">
11 {% for res in ("72x72", "76x76", "120x120", "144x144", "152x152", "180x180") %}
12 <link rel="apple-touch-icon-precomposed" sizes="{{ res }}" href="{{ static_url("img/apple-touch-icon-%s-precomposed.png" % res )}}">
13 {% end %}
14 <link rel="apple-touch-icon-precomposed" href="{{ static_url("img/apple-touch-icon-60x60-precomposed.png") }}">
15
16 <!-- styling stuff -->
17 <link rel="stylesheet" type="text/css" href="{{ static_url("main.css") }}" />
18 <meta name="viewport" content="width=device-width, initial-scale=1.0">
19
20 {% block head %}{% end block %}
21 </head>
22
23 <body class="is-flex is-flex-direction-column">
24 <nav class="navbar" role="navigation" aria-label="main navigation">
25 <div class="container">
26 <div class="navbar-brand is-size-4">
27 {% if request.path.startswith("/location") %}
28 <a class="navbar-item" href="/location">
29 {% module IPFireLogo("Location") %}
30 </a>
31 {% else %}
32 <a class="navbar-item" href="/">
33 {% if request.path.startswith("/fireinfo") %}
34 {% module IPFireLogo("Fireinfo") %}
35 {% elif hostname.startswith("nopaste.") %}
36 {% module IPFireLogo("NoPaste") %}
37 {% else %}
38 {% module IPFireLogo() %}
39 {% end %}
40 </a>
41 {% end %}
42
43 <a role="button" class="navbar-burger" aria-label="menu" aria-expanded="false" data-target="navbarMainMenu">
44 <span aria-hidden="true"></span>
45 <span aria-hidden="true"></span>
46 <span aria-hidden="true"></span>
47 </a>
48 </div>
49 <div class="navbar-menu" id="navbarMainMenu">
50 {% block menu %}
51 {% if hostname.startswith("www.") or hostname.startswith("dev.") %}
52 <div class="navbar-end">
53 {# Show a search bar for blog #}
54 {% if request.path.startswith("/blog") %}
55 {# Navigation for Blog Authors #}
56 {% if current_user and current_user.is_blog_author() %}
57 <a class="navbar-item is-tab {% if request.path == "/blog/drafts" %}is-active{% end %}" href="/blog/drafts">
58 {{ _("My Drafts") }}
59 </a>
60 {% end %}
61
62 <div class="navbar-item">
63 <form action="/blog" method="GET">
64 <div class="field">
65 <div class="control has-icons-left">
66 <input class="input" type="text"
67 name="q" {% if q %}value="{{ q }}"{% end %}
68 placeholder="{{ _("Search Blog...") }}">
69 <span class="icon is-small is-left">
70 <i class="fas fa-search"></i>
71 </span>
72 </div>
73 </div>
74 </form>
75 </div>
76 {# Show a search bar for docs #}
77 {% elif request.path.startswith("/docs") %}
78 <div class="navbar-item">
79 <form action="/docs/search" method="GET">
80 <div class="field">
81 <div class="control has-icons-left">
82 <input class="input" type="text"
83 name="q" {% if q %}value="{{ q }}"{% end %}
84 placeholder="{{ _("Search Documentation...") }}">
85 <span class="icon is-small is-left">
86 <i class="fas fa-search"></i>
87 </span>
88 </div>
89 </div>
90 </form>
91 </div>
92 {% end %}
93
94 {# Location #}
95 {% if request.path.startswith("/location") %}
96 <a class="navbar-item is-tab
97 {% if request.path.startswith("/location/how-to-use") %}is-active{% end %}"
98 href="/location/how-to-use">
99 {{ _("How To Use?") }}
100 </a>
101
102 <a class="navbar-item is-tab
103 {% if request.path == "/location/install" %}is-active{% end %}"
104 href="/location/install">
105 {{ _("Install") }}
106 </a>
107
108 <a class="navbar-item is-tab
109 {% if request.path == "/location/report-a-problem" %}is-active{% end %}"
110 href="/location/report-a-problem">
111 {{ _("Report A Problem") }}
112 </a>
113
114 {# Main #}
115 {% else %}
116 <a class="navbar-item is-tab {% if request.path == "/about" %}is-active{% end %}" href="/about">{{ _("About") }}</a>
117
118 <a class="navbar-item is-tab {% if request.path.startswith("/docs") %}is-active{% end %}" href="/docs">{{ _("Documentation") }}</a>
119
120 <a class="navbar-item is-tab {% if request.path.startswith("/download") %}is-active{% end %}" href="/download">{{ _("Download") }}</a>
121
122 <a class="navbar-item is-tab {% if request.path.startswith("/blog") %}is-active{% end %}" href="/blog">{{ _("Blog") }}</a>
123
124 <a class="navbar-item is-tab {% if request.path == "/help" %}is-active{% end %}" href="/help">{{ _("Help") }}</a>
125 {% end %}
126
127 <div class="navbar-item">
128 <a class="button is-lwl has-text-weight-bold is-uppercase"
129 href="https://store.lightningwirelabs.com/?utm_source={{ hostname }}&amp;utm_medium=navigation">
130 {{ _("Buy") }}
131 </a>
132 </div>
133
134 <div class="navbar-item">
135 <a class="button is-primary has-text-weight-bold is-uppercase"
136 href="/donate">
137 {{ _("Donate") }}
138 </a>
139 </div>
140
141 {% if current_user %}
142 <div class="navbar-item has-dropdown is-hoverable">
143 <a class="navbar-link is-arrowless" href="/users/{{ current_user.uid }}">
144 <figure class="image">
145 <img class="is-rounded" style="width: auto" src="{{ current_user.avatar_url(128) }}">
146 </figure>
147 </a>
148
149 <div class="navbar-dropdown">
150 <a class="navbar-item" href="/users/{{ current_user.uid }}/passwd">
151 {{ _("Change Password") }}
152 </a>
153
154 <hr class="navbar-divider">
155
156 <a class="navbar-item" href="/logout">
157 {{ _("Logout")}}
158 </a>
159 </div>
160 </div>
161 {% else %}
162 <a class="navbar-item is-tab" href="/login?next={{ request.path }}">
163 <i class="fas fa-right-to-bracket" title="{{ _("Login") }}"></i>
164 </a>
165 {% end %}
166 </div>
167 {% elif request.path.startswith("/fireinfo") %}
168 <div class="navbar-end">
169 {% if current_user and current_user.is_staff() %}
170 <a class="navbar-item is-tab {% if request.path.startswith("/admin") %}is-active{% end %}" href="/admin">
171 {{ _("Admin") }}
172 </a>
173 {% end %}
174
175 <a class="navbar-item is-tab {% if request.path.startswith("/vendors") %}is-active{% end %}" href="/vendors">
176 {{ _("Vendors") }}
177 </a>
178 </div>
179 {% elif hostname.startswith("nopaste.") %}
180 <div class="navbar-end">
181 <a class="navbar-item is-tab {% if request.path == "/" %}is-active{% end %}" href="/">
182 {{ _("Paste") }}
183 </a>
184
185 <a class="navbar-item is-tab {% if request.path == "/upload" %}is-active{% end %}" href="/upload">
186 {{ _("Upload") }}
187 </a>
188 </div>
189 {% end %}
190 {% end block %}
191 </div>
192 </div>
193 </nav>
194
195 <div class="is-flex-grow-1 is-flex-shrink-0">
196 {% block container %}
197 <div class="container">
198 {% block content %}{% end block %}
199 </div>
200 {% end block %}
201 </div>
202
203 {% block footer %}
204 <footer class="footer is-flex-shrink-0">
205 <div class="container">
206 {% if request.path == "/docs" %}
207 <div class="level">
208 <div class="level-left">
209 <div class="level-item">
210 <a href="/docs/recent-changes">
211 {{ _("Recent Changes") }}
212 </a>
213 </div>
214
215 {% if current_user %}
216 <div class="level-item">
217 <a href="/docs/watchlist">
218 {{ _("My Watchlist") }}
219 </a>
220 </div>
221 {% end %}
222
223 <div class="level-item">
224 <a href="/docs/tree">
225 {{ _("Tree") }}
226 </a>
227 </div>
228 </div>
229 </div>
230 {% end %}
231
232 <div class="level">
233 <div class="level-left">
234 <div class="level-item">
235 <div class="level is-mobile">
236 <div class="level-item">
237 {{ year }} &copy; IPFire.org
238 </div>
239
240 <div class="level-item">
241 <a href="/legal">{{ _("Legal") }}</a>
242 </div>
243
244 {% if current_user and current_user.is_admin() %}
245 <div class="level-item">
246 <a href="/analytics">{{ _("Analytics") }}</a>
247 </div>
248 {% end %}
249
250 <div class="level-item">
251 <a href="/sitemap">{{ _("Sitemap") }}</a>
252 </div>
253 </div>
254 </div>
255 </div>
256
257 <div class="level-right">
258 <div class="level-item">
259 <div class="level is-mobile">
260 <div class="level-item">
261 <a href="https://social.ipfire.org/@news" title="{{ _("Mastodon") }}">
262 <i class="fa-brands fa-mastodon px-2"></i>
263 </a>
264 </div>
265 <div class="level-item">
266 <a href="https://x.com/ipfire" title="{{ _("X") }}">
267 <i class="fa-brands fa-x-twitter px-2"></i>
268 </a>
269 </div>
270 <div class="level-item">
271 <a href="https://linkedin.com/company/ipfire" title="{{ _("LinkedIn") }}">
272 <i class="fa-brands fa-linkedin-in px-2"></i>
273 </a>
274 </div>
275 <div class="level-item">
276 <a href="https://www.facebook.com/IPFire.org/" title="{{ _("Facebook") }}">
277 <i class="fa-brands fa-facebook-f px-2"></i>
278 </a>
279 </div>
280 </div>
281 </div>
282 </div>
283 </div>
284 </div>
285 </footer>
286 {% end block %}
287
288 <script src="{{ static_url("js/jquery-3.6.0.min.js") }}"></script>
289 <script src="{{ static_url("js/site.js") }}"></script>
290 {% block javascript %}{% end block %}
291 </body>
292 </html>