Separate footer and fixed expiry date #46
20 changed files with 1418 additions and 971 deletions
2169
Cargo.lock
generated
2169
Cargo.lock
generated
File diff suppressed because it is too large
Load diff
|
|
@ -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"] }
|
||||
|
|
|
|||
20
Changelog.md
20
Changelog.md
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
2
dist/arch/PKGBUILD
vendored
|
|
@ -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)
BIN
packages/jobboerse/THIRDPARTY.toml
(Stored with Git LFS)
Binary file not shown.
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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(),
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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>,
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -14,5 +14,6 @@
|
|||
{{> @partial-block }}
|
||||
</main>
|
||||
</div>
|
||||
{{> footer}}
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
|||
20
packages/jobboerse/templates/footer.hb
Normal file
20
packages/jobboerse/templates/footer.hb
Normal 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>
|
||||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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}}
|
||||
|
|
|
|||
26
packages/jobboerse/templates/logo.hb
Normal file
26
packages/jobboerse/templates/logo.hb
Normal 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 |
|
|
@ -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>
|
||||
Loading…
Add table
Add a link
Reference in a new issue