Separate footer and fixed expiry date #46

Merged
ldr merged 12 commits from separate-footer into main 2026-03-17 19:48:48 +01:00
20 changed files with 1418 additions and 971 deletions

2169
Cargo.lock generated

File diff suppressed because it is too large Load diff

View file

@ -1,14 +1,15 @@
[workspace]
members = [".", "packages/*"]
resolver = "2"
[workspace.package]
version = "0.4.1"
version = "0.5.0"
edition = "2021"
rust-version = "1.64"
license = "MIT OR Apache-2.0"
include = ["APACHE-2.0.LICENSE","MIT.LICENSE"]
repository = "https://www.fs-infmath.uni-kiel.de/git/FS-InfMath/Jobboerse"
homepage = "https://www.fs-infmath.uni-kiel.de/wiki/Hauptseite"
homepage = "https://www.fs-informatik.uni-kiel.de/"
readme = "README.md"
[workspace.dependencies]
@ -20,8 +21,8 @@ actix-multipart = "0.5.0"
awc ={ version = "3.2.0", features = ["rustls"] }
better_toml_datetime = { path = "packages/better_toml_datetime" }
cargo-bundle-licenses = { version = "1.0.1", default-features = false }
chrono = { version = "0.4.23", default-features = false, features = ["std","clock"] }
chrono-tz = "0.8.1"
chrono = { version = "0.4.44", default-features = false, features = ["std","clock"] }
chrono-tz = "0.10.4"
clap = { version = "4.1.4", features = ["derive", "env"] }
futures-util = "0.3.25"
handlebars = { version = "4.3.6", features = ["dir_source"] }

View file

@ -7,6 +7,25 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
## [Unreleased]
## [0.5.0]
### Fix
- Job offers now expire *at the end* of the expiry date, not immediately after midnight on the expiry date
- Show signed-in interface on the *delete expired* page
### Change
- Remove the background gradient on the index page
- Update the color scheme to more closely resemble the theme of the student association for computer science
- Change the logo to that of the student association for computer science
- Rename the `footer_links` to `header_links` in the config files
- Reintroduce a footer
- Change links to point to the student association for computer science instead of the common website of both student associations
- Upgrade dependencies
- Include reference to Discord Webhook in FAQ
- Update FAQ
## [0.4.1] (2024-01-02)
### Fix
@ -218,6 +237,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Overview Page of Dependency licenses
[Unreleased]: https://www.fs-infmath.uni-kiel.de/git/FS-InfMath/Jobboerse/src/main
[0.5.0]: https://www.fs-infmath.uni-kiel.de/git/FS-InfMath/Jobboerse/src/version-0.5.0
[0.4.1]: https://www.fs-infmath.uni-kiel.de/git/FS-InfMath/Jobboerse/src/version-0.4.1
[0.4.0]: https://www.fs-infmath.uni-kiel.de/git/FS-InfMath/Jobboerse/src/version-0.4.0
[0.3.0]: https://www.fs-infmath.uni-kiel.de/git/FS-InfMath/Jobboerse/src/version-0.3.0

View file

@ -16,7 +16,7 @@ It is recommended to use cargo for building as such make sure the `cargo` compon
For a release build you can run `cargo build --release` this should build all dependencies and place the final binary in
the `./target/release/` folder.
For a development build you may run `cargo build --features=dev-mode`.
For a development build you may run `cargo build --features=dev_mode`.
The dev-mode features allows enabling `development` mode which allows for live template reload.
With the feature specified a login provider which accepts all username password combinations is also added.
Enabling this feature will also place a banner at the top of the page informing of the fact that it's running from a dev-build.
@ -30,7 +30,7 @@ By default, it starts in `production` mode, when build with the `dev-mode` featu
The table below list the default config path, it can be overridden using the `--config` flag.
| OS | Path |
|-----------------------------------------|---------------------------------------------------|
| --------------------------------------- | ------------------------------------------------- |
| Linux | `/etc/jobboerse/config.toml` |
| Windows, if `${PROGRAMDATA}` is defined | `${PROGRAMDATA}/fs-infmath/jobboerse/config.toml` |
| Fallback | `./config.toml` |
@ -54,7 +54,7 @@ The config file uses the toml format.
The expected fields are defined by the `ProgramConfig` struct in `./src/server_config.rs`.
| config field | required | default |
|---------------------|----------|----------------|
| ------------------- | -------- | -------------- |
| `url_base_path` | false | empty |
| `data_storage_path` | false | `./job_offers` |
| `banner` | false | no banner |
@ -114,7 +114,7 @@ Cutting a Release
* Update the version in the root Cargo.toml according to semver, this will be the version to-be-cut
* Update the changelog to reflect all changes since the last release unter `[Unreleased]`
* It's generally recommended to keep the Changelog upto date by adding changes to the unreleased section in the commit that introduces the change
* It's generally recommended to keep the Changelog up to date by adding changes to the unreleased section in the commit that introduces the change
* In the now up-to-date changelog add a new section heading for the version to-be-cut between `[Unreleased]` and the first entry of the unreleased section
* Add a matching link definition at the bottom of a changelog
* Update the version in dist/arch/PKGBUILD to match the version to-be-cut

2
dist/arch/PKGBUILD vendored
View file

@ -9,7 +9,7 @@ _reponame=Jobboerse
_pkgname="${_reponame,,}"
_features=()
pkgname="${_reponame,,}"
pkgver=0.4.1
pkgver=0.5.0
pkgrel=1
pkgdesc="FS-InfMath Job-Offer Page"
arch=('x86_64') # Other architectures may work

BIN
packages/jobboerse/THIRDPARTY.toml (Stored with Git LFS)

Binary file not shown.

View file

@ -9,6 +9,6 @@ type = 'Development'
from = "Test-Jobbörse <jobs@localhost>"
subject = "Test"
[[footer_links]]
title = "Test"
url = "https://fs-infmath.uni-kiel.de"
# [[header_links]]
# title = "Test"
# url = "https://fs-infmath.uni-kiel.de"

View file

@ -34,16 +34,16 @@ type = 'Disabled' # deny all login attempts without further configuration option
# # content of the SUBJECT header for the confirmation emails
# subject = "[Jobbörse] Please, confirm your job-offer submission."
# you can add additional footer links by adding [[footer_links]] entries
# [[footer_links]]
# you can add additional footer links by adding [[header_links]] entries
# [[header_links]]
# title = "Example"
# url = "https://example.com"
# the default footer links Impressum, Homepage and Source Repository can be overriten by adding a matching [[footer_links]] entry
# [[footer_links]]
# the default footer links Impressum, Homepage and Source Repository can be overriten by adding a matching [[header_links]] entry
# [[header_links]]
# title = "Homepage"
# url = "https://example.com/home"
# default footer links can also be removed by adding a matching section here without an URL
# [[footer_links]]
# [[header_links]]
# title = "Source Repository"

View file

@ -35,16 +35,16 @@ file_path = '/etc/jobboerse/login.toml'
# # content of the SUBJECT header for the confirmation emails
# subject = "[Jobbörse] Please, confirm your job-offer submission."
# you can add additional footer links by adding [[footer_links]] entries
# [[footer_links]]
# you can add additional footer links by adding [[header_links]] entries
# [[header_links]]
# title = "Example"
# url = "https://example.com"
# the default footer links Impressum, Homepage and Source Repository can be overriten by adding a matching [[footer_links]] entry
# [[footer_links]]
# the default footer links Impressum, Homepage and Source Repository can be overriten by adding a matching [[header_links]] entry
# [[header_links]]
# title = "Homepage"
# url = "https://example.com/home"
# default footer links can also be removed by adding a matching section here without an URL
# [[footer_links]]
# [[header_links]]
# title = "Source Repository"

View file

@ -8,7 +8,7 @@ use std::path::{Path, PathBuf};
use actix_web::error::UrlGenerationError;
use actix_web::{HttpRequest, Result};
use chrono::{TimeZone, Timelike};
use chrono::{NaiveTime, TimeZone, Timelike};
use error::DeleteError;
use lettre::Address;
use log::{debug, error, info, warn};
@ -415,7 +415,7 @@ impl JobOffer<PathBuf> {
});
use chrono::Offset as _;
let now = crate::util::now();
let now = crate::util::now().with_time(NaiveTime::MIN).unwrap();
let now_date = now.with_timezone(&now.offset().fix());
now_date > expires_after

View file

@ -61,6 +61,7 @@ struct BaseData<'a> {
title: Cow<'a, str>,
short_lang: Cow<'a, str>,
links: Vec<Link<'a>>,
footer_links: Vec<Link<'a>>,
styles: Vec<Url>,
routes: StaticRoutes,
banner: Option<String>,
@ -129,26 +130,32 @@ fn base<'a>(
let static_routes = StaticRoutes::new(req)?;
let mut default_links = vec![(
"Impressum",
Some("https://www.fs-infmath.uni-kiel.de/wiki/Fachschaften_Informatik_%26_Mathematik:Impressum".into()),
),
(
"Homepage",
crate::PROJECT_HOMEPAGE.map(Into::into)
),
(
"Source Repository",
crate::PROJECT_REPO.map(Into::into),
),
("FAQ", Some(static_routes.faq.to_string().into()))
let mut default_links = vec![
("Homepage", crate::PROJECT_HOMEPAGE.map(Into::into)),
("FAQ", Some(static_routes.faq.to_string().into())),
];
let footer_links = vec![
(
"Impressum",
Some("https://www.fs-informatik.uni-kiel.de/impressum/"),
),
("Source Repository", crate::PROJECT_REPO.map(Into::into)),
]
.iter()
.filter_map(|(title, url)| {
url.map(|url| Link {
title,
url: url.into(),
})
})
.collect::<Vec<_>>();
#[allow(clippy::needless_collect)]
// the collect is necessary to end the borrow of borrows default_links by the map closure
let links = config
.config
.footer_links
.header_links
.iter()
.map(|elem| {
default_links.retain(|&(title, _)| title != elem.title);
@ -171,6 +178,7 @@ fn base<'a>(
short_lang: "de".into(),
styles: vec![index_css],
links,
footer_links,
routes: static_routes,
banner: config.config.banner.clone(),
operation_mode: config.args.mode.clone(),

View file

@ -62,6 +62,7 @@ pub(crate) async fn delete_expired_joboffers(
let data = json! {{
"base": base,
"expired_job_offers": job_offers,
"user": user
}};
let rendered = hb

View file

@ -33,7 +33,7 @@ pub(crate) struct ProgramConfig {
#[serde(skip_serializing_if = "Option::is_none", default)]
pub(crate) banner: Option<String>,
#[serde(default)]
pub(crate) footer_links: Vec<Link>,
pub(crate) header_links: Vec<Link>,
pub(crate) login_provider: LoginProviderConfig,
#[serde(skip_serializing_if = "Option::is_none", default)]
pub(crate) email: Option<EmailConfig>,

View file

@ -1,14 +1,15 @@
:root {
font-family: "FreeSans", sans-serif;
--green: #87d38b;
--blue: #8ab9e7;
--yellow: #e9a12f;
--light-green: #c3e9c5;
--dark-green: #27682a;
--light-blue: #cce0f5;
--dark-blue: #1c5287;
--light-yellow: #f7deb6;
--dark-yellow: #a66d11;
--green: #558e00;
--light-green: #89df08;
--dark-green: #365d00;
--yellow: #f5f11e;
--red: #a11b21;
--light-turqoise: #2dc2bf;
--turquoise: #2dc2bf;
--dark-blue: #003d86;
--purple: #9b0a7d;
--header-grey: #acaeae;
--default-padding: calc((5 / 16) * 1rem)
}
@ -21,7 +22,7 @@
}
.header-inner, .header-banner {
background: var(--light-green);
background: var(--header-grey);
padding: var(--default-padding);
}
@ -31,7 +32,7 @@
.header::after {
content: "";
background-color: var(--light-green);
background-color: var(--header-grey);
clip-path: polygon(100% 0%, 0% 0%, 0% 100%);
width: 100%;
height: min(5vh, 2.5rem);
@ -94,9 +95,9 @@ h3 {
content: "";
}
.header-top img {
max-height: 2.5rem;
max-width: 10rem;
.header-top svg {
height: 4rem;
width: 10rem;
}
.header-element, .menu-item {
@ -108,6 +109,21 @@ h3 {
color: black;
}
.footer {
background-color: var(--purple);
}
.footer-item {
color: white;
text-decoration: underline solid;
cursor: pointer;
padding: var(--default-padding);
}
.footer .menu a {
color: white;
}
.menu-item {
background-color: #80808000;
transition: background-color 0.25s ease-in-out;
@ -140,12 +156,6 @@ body main {
flex-grow: 1;
}
/* Gradient background, but only on the overview page (and when choosing expired entries to delete) */
.header-main:has(.joboffer-index) {
background: linear-gradient(45deg, var(--blue) 0%, var(--yellow) 100%);
background-size: cover;
}
.centered {
display: flex;
justify-content: center;
@ -170,7 +180,7 @@ body main {
grid-template: [retry-msg] "m m"[username] "ul ui"[password] "pl pi"[submit] "sb empty";
padding: var(--default-padding);
border-style: solid;
border-color: var(--blue);
border-color: var(--dark-blue);
border-width: var(--default-padding);
border-radius: var(--default-padding);
-webkit-border-radius: var(--default-padding);
@ -312,7 +322,7 @@ body main {
margin: var(--default-padding);
padding: var(--default-padding);
border-style: solid;
border-color: var(--green);
border-color: var(--dark-blue);
border-width: var(--default-padding);
border-radius: var(--default-padding);
-webkit-border-radius: var(--default-padding);
@ -323,14 +333,14 @@ body main {
}
.joboffer-index-entry.AwaitingReview, .joboffer-index-entry.UnPublished {
background: var(--light-yellow);
background: var(--light-turqoise);
border-style: dashed;
border-color: var(--yellow);
border-color: var(--purple);
}
.joboffer-index-entry:target {
background: var(--light-green);
border-color: var(--dark-green);
background: var(--light-turqoise);
border-color: var(--purple);
}
.column, .submission-preview {
@ -345,7 +355,7 @@ body main {
padding: var(--default-padding);
text-decoration: none;
background-color: var(--dark-blue);
border-color: var(--blue);
border-color: var(--header-grey);
border-radius: var(--default-padding);
-webkit-border-radius: var(--default-padding);
-moz-border-radius: var(--default-padding);
@ -354,7 +364,7 @@ body main {
}
.expired, .unconfirmed, .unreviewed {
color: red;
color: var(--red);
}
.hidden {
@ -385,7 +395,8 @@ input.modal-open-check:not(:checked)+.modal-confirm-box {
}
.modal-confirm-box>.modal-open-button.confirm {
background-color: var(--green);
background-color: var(--dark-green);
color: white;
padding: var(--default-padding);
border-radius: var(--default-padding);
-webkit-border-radius: var(--default-padding);
@ -395,7 +406,8 @@ input.modal-open-check:not(:checked)+.modal-confirm-box {
}
.modal-confirm-box>.modal-open-button.retract {
background-color: var(--yellow);
background-color: var(--red);
color: white;
padding: var(--default-padding);
border-radius: var(--default-padding);
-webkit-border-radius: var(--default-padding);
@ -451,7 +463,7 @@ input.modal-open-check:not(:checked)+.modal-confirm-box>.modal-submit-button {
background: white;
margin-bottom: var(--default-padding);
padding: var(--default-padding);
border: var(--default-padding) solid var(--blue);
border: var(--default-padding) solid var(--dark-blue);
width: fit-content;
}
@ -459,13 +471,13 @@ input.modal-open-check:not(:checked)+.modal-confirm-box>.modal-submit-button {
margin-left: var(--default-padding);
border: solid;
padding: var(--default-padding);
border-color: var(--yellow);
border-color: var(--purple);
border-radius: 20px;
border-width: var(--default-padding);
}
#awaiting-review:checked~.joboffer-filters>.filter-label[for="awaiting-review"] {
background: var(--light-yellow);
background: var(--light-turqoise);
}
#awaiting-review:checked~.joboffer-index>.joboffer-index-entry:not(.AwaitingReview) {

View file

@ -14,5 +14,6 @@
{{> @partial-block }}
</main>
</div>
{{> footer}}
</body>
</html>

View file

@ -0,0 +1,20 @@
<footer class="footer">
<nav class="menu">
{{#each base.footer_links as |link|}}
<a class="footer-item" href="{{link.url}}">
<h3 class="inline">{{link.title}}</h3>
</a>
{{/each}}
<a class="footer-item" href="{{base.routes.licenses}}">
<h3 class="inline">Drittanbieter-Lizenzen</h3>
</a>
{{#if user}}
<label class="footer-item" for="submit-sync" tabindex="0">
<h3 class="inline" title="Reload Joboffer Metadata from Disk">Re-Sync</h3>
<form class="hidden" method="post" action="{{base.routes.sync}}">
<input type="submit" id="submit-sync" class="hidden">
</form>
</label>
{{/if}}
</nav>
</footer>

View file

@ -12,8 +12,8 @@
<header class="header">
<nav class="header-inner">
<div class="header-top">
<a class="header-element" href="https://www.fs-infmath.uni-kiel.de/wiki/Hauptseite">
<img src="https://www.fs-infmath.uni-kiel.de/w/images/9/9f/Logo_gro%C3%9F_bunt_kiel.svg">
<a class="header-element" href="https://www.fs-informatik.uni-kiel.de/">
{{ > logo }}
</a>
<a class="header-element" href="{{base.routes.index}}">
<h1>Jobbörse</h1>

View file

@ -14,7 +14,7 @@
<div>
<h2>Laufzeit</h2>
<p>Einreichungen werden automatisch entfernt, sobald das jeweilige Ablaufdatum verstrichen ist</p>
<p>Einreichungen ohne explizit angegebenes Ablaufdatum haben ein implizites Ablaufdatum 6 Monate (180 Tage) nach Einreichung.</p>
<p>Einreichungen ohne explizit angegebenes Ablaufdatum haben ein implizites Ablaufdatum 6 Monaten (180 Tage) nach Einreichung.</p>
{{#if mail}}
<p>Um eine Einreichung früher zu entfernen, informieren Sie uns bitte per E-Mail unter <a href="mailto:{{mail}}">{{mail}}</a>.</p>
{{/if}}
@ -46,24 +46,32 @@
<div>
<h2>Ich habe den Bestätigungslink geöffnet, aber die Stellenausschreibung ist noch nicht in der Übersicht zu sehen.</h2>
Dies kann primär zwei Gründe haben:
<p>Dies kann primär zwei Gründe haben:</p>
<ol>
<li>Sie haben zwar den Link geöffnet, aber unter der Vorschau nicht auf bestätigen/veröffentlichen geklickt.</li>
<li>Es ist unsererseits noch kein Review der Einreichung erfolgt.</li>
</ol>
</div>
<div>
<h2>Was passiert mit den Stellenausschreibungen?</h2>
<p>Die Stellenanzeigen werden nach der Bestätigung über den Link in der E-Mail und Sichtung durch uns bis zum Ablaufdatum auf der Webseite der Jobbörse angezeigt.
Neue Jobangebote werden bei Veröffentlichung außerdem automatisch in der inoffiziellen Discord-Community für Kieler Informatikstudierende gepostet.</p>
</div>
<div>
<h2>Werden die Stellenausschreibungen vor Ort ausgehangen?</h2>
Nein, die Fachschaft verfügt aktuell nicht über ein analoges „Schwarzes Brett“
und kann Stellenanzeigen somit auch nicht aushängen.
<p>Nein, die Fachschaft verfügt aktuell nicht über ein analoges „Schwarzes Brett“
und kann Stellenanzeigen somit auch nicht aushängen.</p>
</div>
<div>
<h2>Andere Job-Portale</h2>
Falls Sie noch weitere Job-Portale suchen, auf denen Sie Ihre Stellenausschreibungen schalten können,
<p>Der Allgemeine Studierendenausschuss (AStA) betreibt ebenfalls eine Jobbörse („Kleinanzeigen“):
<a href="https://asta.uni-kiel.de/service/kleinanzeigen/" target="_blank">Zur AStA-Kleinanzeigenbörse</a></p>
<p>Falls Sie noch weitere Job-Portale suchen, auf denen Sie Ihre Stellenausschreibungen schalten können,
finden Sie auch in unserem
<a href="https://www.fs-infmath.uni-kiel.de/wiki/Frequently_Asked_Questions#Jobs" target"_blank">FAQ für Internationale Studierende</a>
eine Liste von Job-Portalen.
eine Liste von Job-Portalen.</p>
</div>
{{/base}}

View file

@ -0,0 +1,26 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1140.11 512" class="logo">
<polygon points="297.04 15.67 15.67 102.37 70.77 512 297.04 15.67" fill="#9b0a7d" stroke-width="0"></polygon>
<polygon points="281.37 0 0 86.7 55.11 496.33 281.37 0" fill="#003d86" stroke-width="0"></polygon>
<path d="M518.94,119.37h55.55v13.7h-38.79v25.35h32.64v13.7h-32.64v38.66h-16.77v-91.4Z" fill="#000" stroke-width="0"></path>
<path d="M619.42,168.14c0-8.19-3.46-11.78-11.14-11.78-5.38,0-9.86,2.18-13.31,6.53l-11.01-7.81c5.89-7.68,14.34-11.39,25.86-11.39s19.58,3.84,23.04,11.01c1.79,3.71,2.43,8.06,2.43,16.26v39.81h-12.42l-1.02-3.84c-4.22,3.84-8.96,5.25-17.92,5.25-16.26,0-22.4-5.63-22.4-20.35,0-15.74,6.02-20.74,24.58-20.74h13.31v-2.94ZM608.03,181.84c-8.19,0-11.39,2.69-11.39,9.34s2.82,8.83,11.39,8.83c5.12,0,8.32-1.15,9.98-3.58,1.15-1.54,1.41-3.2,1.41-7.68v-6.91h-11.39Z" fill="#000" stroke-width="0"></path>
<path d="M704.03,199.63c-5.25,8.58-13.31,12.54-24.96,12.54-18.56,0-27.27-10.24-27.27-31.87v-4.1c0-11.14,1.66-18.05,5.63-23.3,4.48-6.02,11.78-9.22,21.12-9.22,11.65,0,19.46,4.1,24.32,12.67l-11.9,6.66c-3.2-4.99-6.14-6.66-11.14-6.66-8.32,0-12.16,5.76-12.16,18.43v7.04c0,11.65,4.22,17.54,12.54,17.54,5.38,0,8.83-1.79,12.03-6.4l11.78,6.66Z" fill="#000" stroke-width="0"></path>
<path d="M716.82,119.37h15.87v29.06c5.63-3.84,8.58-4.74,15.23-4.74,11.01,0,18.43,4.35,21.5,12.67,1.41,3.71,1.92,8.7,1.92,16.77v37.63h-15.87v-36.48c0-12.03-3.33-17.02-11.01-17.02-8.32,0-11.78,5.38-11.78,18.69v34.82h-15.87v-91.4Z" fill="#000" stroke-width="0"></path>
<path d="M794.77,192.85c3.84,5.38,7.04,6.78,14.85,6.78,8.83,0,13.06-2.69,13.06-8.32,0-2.82-1.28-4.86-3.58-5.76q-2.05-.9-10.5-1.92c-16.26-2.05-22.02-7.04-22.02-19.07,0-13.44,8.45-20.87,23.68-20.87,12.29,0,20.35,3.84,25.73,12.54l-11.78,6.78c-3.46-5.12-6.66-6.78-12.8-6.78s-9.73,2.69-9.73,7.55,2.43,6.27,11.39,7.3c10.24,1.15,14.85,2.3,18.69,4.99,3.97,2.82,6.02,8.19,6.02,15.49,0,14.08-8.83,20.61-27.52,20.61-13.7,0-22.66-4.1-27.14-12.54l11.65-6.78Z" fill="#000" stroke-width="0"></path>
<path d="M902.55,199.63c-5.25,8.58-13.31,12.54-24.96,12.54-18.56,0-27.27-10.24-27.27-31.87v-4.1c0-11.14,1.66-18.05,5.63-23.3,4.48-6.02,11.78-9.22,21.12-9.22,11.65,0,19.46,4.1,24.32,12.67l-11.9,6.66c-3.2-4.99-6.14-6.66-11.14-6.66-8.32,0-12.16,5.76-12.16,18.43v7.04c0,11.65,4.22,17.54,12.54,17.54,5.38,0,8.83-1.79,12.03-6.4l11.78,6.66Z" fill="#000" stroke-width="0"></path>
<path d="M915.34,119.37h15.87v29.06c5.63-3.84,8.58-4.74,15.23-4.74,11.01,0,18.43,4.35,21.5,12.67,1.41,3.71,1.92,8.7,1.92,16.77v37.63h-15.87v-36.48c0-12.03-3.33-17.02-11.01-17.02-8.32,0-11.78,5.38-11.78,18.69v34.82h-15.87v-91.4Z" fill="#000" stroke-width="0"></path>
<path d="M1021.97,168.14c0-8.19-3.46-11.78-11.14-11.78-5.38,0-9.86,2.18-13.31,6.53l-11.01-7.81c5.89-7.68,14.34-11.39,25.86-11.39s19.58,3.84,23.04,11.01c1.79,3.71,2.43,8.06,2.43,16.26v39.81h-12.42l-1.02-3.84c-4.22,3.84-8.96,5.25-17.92,5.25-16.26,0-22.4-5.63-22.4-20.35,0-15.74,6.02-20.74,24.58-20.74h13.31v-2.94ZM1010.58,181.84c-8.19,0-11.39,2.69-11.39,9.34s2.82,8.83,11.39,8.83c5.12,0,8.32-1.15,9.98-3.58,1.15-1.54,1.41-3.2,1.41-7.68v-6.91h-11.39Z" fill="#000" stroke-width="0"></path>
<path d="M1051.54,157.64v-12.54h7.55v-7.17c0-14.46,5.25-18.94,21.63-18.56h7.42v11.9h-4.1c-7.68-.13-9.09,1.02-9.09,8.06v5.76h13.82v12.54h-13.82v53.12h-15.87v-53.12h-7.55Z" fill="#000" stroke-width="0"></path>
<path d="M1099.28,157.64v-12.54h7.42l.9-19.2h14.98v19.2h13.06v12.54h-13.06v27.27c0,9.98,2.56,13.06,11.26,12.93h1.79v12.93h-2.3c-22.02,0-26.62-4.74-26.62-27.39v-25.73h-7.42Z" fill="#000" stroke-width="0"></path>
<path d="M545.82,272.97h16.77v91.4h-16.77v-91.4Z" fill="#000" stroke-width="0"></path>
<path d="M583.32,298.7h11.9l1.41,5.76c4.22-5.12,9.09-7.17,17.54-7.17,11.26,0,18.69,4.35,21.76,12.67,1.41,3.71,1.92,8.7,1.92,16.77v37.63h-15.87v-35.84c0-12.67-3.07-17.67-11.01-17.67-8.58,0-11.78,5.25-11.78,19.58v33.92h-15.87v-65.67Z" fill="#000" stroke-width="0"></path>
<path d="M651.42,311.24v-12.54h7.55v-7.17c0-14.46,5.25-18.95,21.63-18.56h7.42v11.9h-4.1c-7.68-.13-9.09,1.02-9.09,8.06v5.76h13.82v12.54h-13.82v53.12h-15.87v-53.12h-7.55Z" fill="#000" stroke-width="0"></path>
<path d="M699.67,326.6c0-20.61,8.45-29.31,28.42-29.31s28.29,8.7,28.29,29.31v9.86c0,20.61-8.45,29.31-28.29,29.31s-28.42-8.7-28.42-29.31v-9.86ZM740.5,327.63c0-12.54-3.58-17.67-12.42-17.67s-12.54,5.12-12.54,17.67v7.68c0,12.54,3.58,17.67,12.54,17.67s12.42-5.12,12.42-17.67v-7.68Z" fill="#000" stroke-width="0"></path>
<path d="M773.27,298.7h12.16l1.92,4.74c4.1-4.48,7.81-6.14,13.57-6.14,4.74,0,8.71,1.15,14.08,4.1l-6.91,13.06c-3.33-2.56-5.76-3.46-8.71-3.46-7.3,0-10.24,6.27-10.24,21.63v31.75h-15.87v-65.67Z" fill="#000" stroke-width="0"></path>
<path d="M826.51,298.7h12.03l1.15,5.5c3.46-4.61,8.83-6.91,16-6.91,7.94,0,14.34,3.07,17.92,8.45,3.71-5.76,9.47-8.45,18.18-8.45,11.26,0,18.18,4.22,21.25,12.67,1.28,3.71,1.79,8.83,1.79,16.77v37.63h-15.87v-35.97c0-12.54-2.82-17.54-9.98-17.54s-10.37,5.5-10.37,19.07v34.43h-15.87v-35.71c0-12.8-2.69-17.79-9.86-17.79-7.68,0-10.5,5.38-10.5,19.46v34.05h-15.87v-65.67Z" fill="#000" stroke-width="0"></path>
<path d="M967.06,321.74c0-8.19-3.46-11.78-11.14-11.78-5.38,0-9.86,2.18-13.31,6.53l-11.01-7.81c5.89-7.68,14.34-11.39,25.86-11.39s19.58,3.84,23.04,11.01c1.79,3.71,2.43,8.06,2.43,16.26v39.81h-12.42l-1.02-3.84c-4.22,3.84-8.96,5.25-17.92,5.25-16.26,0-22.4-5.63-22.4-20.35,0-15.74,6.02-20.74,24.58-20.74h13.31v-2.94ZM955.67,335.44c-8.19,0-11.39,2.69-11.39,9.34s2.82,8.83,11.39,8.83c5.12,0,8.32-1.15,9.98-3.58,1.15-1.54,1.41-3.2,1.41-7.68v-6.91h-11.39Z" fill="#000" stroke-width="0"></path>
<path d="M995.98,311.24v-12.54h7.42l.9-19.2h14.98v19.2h13.06v12.54h-13.06v27.26c0,9.98,2.56,13.06,11.26,12.93h1.79v12.93h-2.3c-22.02,0-26.62-4.74-26.62-27.39v-25.73h-7.42Z" fill="#000" stroke-width="0"></path>
<path d="M1046.54,272.2h15.87v16.26h-15.87v-16.26ZM1046.54,298.7h15.87v65.67h-15.87v-65.67Z" fill="#000" stroke-width="0"></path>
<path d="M1081.49,272.97h15.87v56.45l23.43-30.72h18.05l-22.53,27.91,23.81,37.76h-17.41l-16-26.37-9.34,11.9v14.46h-15.87v-91.4Z" fill="#000" stroke-width="0"></path>
<path d="M422.09,135.76l96.43,376.24h-64.5l-48.87-237.35-47.56,237.35h-65.15l82.09-323.43-10.42-39.78c-5.21-18.26-12.38-25.43-26.71-25.43-3.91,0-10.42,1.3-14.98,3.91l-9.12-53.47c6.52-2.61,22.15-4.56,31.93-4.56,39.74,0,62.55,14.35,76.88,66.51Z" fill="#9b0a7d" stroke-width="0"></path>
<path d="M406.43,120.09l96.43,376.24h-64.5l-48.87-237.35-47.56,237.35h-65.15l82.09-323.43-10.42-39.78c-5.21-18.26-12.38-25.43-26.71-25.43-3.91,0-10.42,1.3-14.98,3.91l-9.12-53.47c6.52-2.61,22.15-4.56,31.93-4.56,39.74,0,62.55,14.35,76.88,66.51Z" fill="#2dc2bf" stroke-width="0"></path>
</svg>

After

Width:  |  Height:  |  Size: 6.5 KiB

View file

@ -4,9 +4,6 @@
<h3 class="inline">{{link.title}}</h3>
</a>
{{/each}}
<a class="menu-item" href="{{base.routes.licenses}}">
<h3 class="inline">Drittanbieter-Lizenzen</h3>
</a>
<a class="menu-item" href="{{base.routes.joboffer_create}}">
<h3 class="inline">Stellenanzeige einreichen</h3>
</a>
@ -15,19 +12,13 @@
title="Alle abgelaufenen Stellenanzeigen löschen">
<h3 class="inline">Abgelaufene löschen</h3>
</a>
<label class="menu-item" for="submit-sync" tabindex="0">
<h3 class="inline" title="Reload Joboffer Metadata from Disk">Re-Sync</h3>
<form class="hidden" method="post" action="{{base.routes.sync}}">
<input type="submit" id="submit-sync" class="hidden">
</form>
</label>
<label class="menu-item" for="submit-logout" tabindex="0">
<h3 class="inline">Abmelden</h3>
<form class="hidden" method="post" action="{{base.routes.logout}}">
<input type="submit" id="submit-logout" class="hidden">
</form>
</label {{else}} <a class="menu-item" href="{{base.routes.login}}">
<h3 class="inline">Fachschaftler-Login</h3>
<h3 class="inline">Fachschafts-Login</h3>
</a>
{{/if}}
</nav>