add counter site
This commit is contained in:
parent
3338a037be
commit
91daf51471
5 changed files with 519 additions and 1 deletions
|
@ -2,3 +2,4 @@ FROM nginx:1.24-bullseye
|
||||||
|
|
||||||
COPY ./site-html /var/www/blog
|
COPY ./site-html /var/www/blog
|
||||||
COPY ./site-repo/nginx.conf /etc/nginx/conf.d/default.conf
|
COPY ./site-repo/nginx.conf /etc/nginx/conf.d/default.conf
|
||||||
|
COPY ./site-repo/counter /var/www/counter
|
||||||
|
|
371
counter/index.css
Normal file
371
counter/index.css
Normal file
|
@ -0,0 +1,371 @@
|
||||||
|
body {
|
||||||
|
font-family:Open Sans,Arial;
|
||||||
|
color:#454545;
|
||||||
|
font-size:16px;
|
||||||
|
margin:2em auto;
|
||||||
|
max-width:800px;
|
||||||
|
padding:1em;
|
||||||
|
line-height:1.4;
|
||||||
|
text-align:justify
|
||||||
|
}
|
||||||
|
html.contrast body {
|
||||||
|
color:#050505
|
||||||
|
}
|
||||||
|
html.contrast blockquote {
|
||||||
|
color:#11151a
|
||||||
|
}
|
||||||
|
html.contrast blockquote:before {
|
||||||
|
color:#262626
|
||||||
|
}
|
||||||
|
html.contrast a {
|
||||||
|
color:#03f
|
||||||
|
}
|
||||||
|
html.contrast a:visited {
|
||||||
|
color:#7d013e
|
||||||
|
}
|
||||||
|
html.contrast span.wr {
|
||||||
|
color:#800
|
||||||
|
}
|
||||||
|
html.contrast span.mfw {
|
||||||
|
color:#4d0000
|
||||||
|
}
|
||||||
|
@media screen and (prefers-color-scheme:light) {
|
||||||
|
html.inverted {
|
||||||
|
background-color:#000
|
||||||
|
}
|
||||||
|
html.inverted body {
|
||||||
|
color:#d9d9d9
|
||||||
|
}
|
||||||
|
html.inverted #contrast,
|
||||||
|
html.inverted #invmode {
|
||||||
|
color:#fff;
|
||||||
|
background-color:#000
|
||||||
|
}
|
||||||
|
html.inverted blockquote {
|
||||||
|
color:#d3c9be
|
||||||
|
}
|
||||||
|
html.inverted blockquote:before {
|
||||||
|
color:#b8b8b8
|
||||||
|
}
|
||||||
|
html.inverted a {
|
||||||
|
color:#00a2e7
|
||||||
|
}
|
||||||
|
html.inverted a:visited {
|
||||||
|
color:#ca1a70
|
||||||
|
}
|
||||||
|
html.inverted span.wr {
|
||||||
|
color:#d24637
|
||||||
|
}
|
||||||
|
html.inverted span.mfw {
|
||||||
|
color:#b00000
|
||||||
|
}
|
||||||
|
html.inverted.contrast {
|
||||||
|
background-color:#000
|
||||||
|
}
|
||||||
|
html.inverted.contrast body {
|
||||||
|
color:#fff
|
||||||
|
}
|
||||||
|
html.inverted.contrast #contrast,
|
||||||
|
html.inverted.contrast #invmode {
|
||||||
|
color:#fff;
|
||||||
|
background-color:#000
|
||||||
|
}
|
||||||
|
html.inverted.contrast blockquote {
|
||||||
|
color:#f8f6f5
|
||||||
|
}
|
||||||
|
html.inverted.contrast blockquote:before {
|
||||||
|
color:#e5e5e5
|
||||||
|
}
|
||||||
|
html.inverted.contrast a {
|
||||||
|
color:#44c7ff
|
||||||
|
}
|
||||||
|
html.inverted.contrast a:visited {
|
||||||
|
color:#e9579e
|
||||||
|
}
|
||||||
|
html.inverted.contrast span.wr {
|
||||||
|
color:#db695d
|
||||||
|
}
|
||||||
|
html.inverted.contrast span.mfw {
|
||||||
|
color:#ff0d0d
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@media (prefers-color-scheme:dark) {
|
||||||
|
html:not(.inverted) {
|
||||||
|
background-color:#000
|
||||||
|
}
|
||||||
|
html:not(.inverted) body {
|
||||||
|
color:#d9d9d9
|
||||||
|
}
|
||||||
|
html:not(.inverted) #contrast,
|
||||||
|
html:not(.inverted) #invmode {
|
||||||
|
color:#fff;
|
||||||
|
background-color:#000
|
||||||
|
}
|
||||||
|
html:not(.inverted) blockquote {
|
||||||
|
color:#d3c9be
|
||||||
|
}
|
||||||
|
html:not(.inverted) blockquote:before {
|
||||||
|
color:#b8b8b8
|
||||||
|
}
|
||||||
|
html:not(.inverted) a {
|
||||||
|
color:#00a2e7
|
||||||
|
}
|
||||||
|
html:not(.inverted) a:visited {
|
||||||
|
color:#ca1a70
|
||||||
|
}
|
||||||
|
html:not(.inverted) span.wr {
|
||||||
|
color:#d24637
|
||||||
|
}
|
||||||
|
html:not(.inverted) span.mfw {
|
||||||
|
color:#b00000
|
||||||
|
}
|
||||||
|
html:not(.inverted).contrast {
|
||||||
|
background-color:#000
|
||||||
|
}
|
||||||
|
html:not(.inverted).contrast body {
|
||||||
|
color:#fff
|
||||||
|
}
|
||||||
|
html:not(.inverted).contrast #contrast,
|
||||||
|
html:not(.inverted).contrast #invmode {
|
||||||
|
color:#fff;
|
||||||
|
background-color:#000
|
||||||
|
}
|
||||||
|
html:not(.inverted).contrast blockquote {
|
||||||
|
color:#f8f6f5
|
||||||
|
}
|
||||||
|
html:not(.inverted).contrast blockquote:before {
|
||||||
|
color:#e5e5e5
|
||||||
|
}
|
||||||
|
html:not(.inverted).contrast a {
|
||||||
|
color:#44c7ff
|
||||||
|
}
|
||||||
|
html:not(.inverted).contrast a:visited {
|
||||||
|
color:#e9579e
|
||||||
|
}
|
||||||
|
html:not(.inverted).contrast span.wr {
|
||||||
|
color:#db695d
|
||||||
|
}
|
||||||
|
html:not(.inverted).contrast span.mfw {
|
||||||
|
color:#ff0d0d
|
||||||
|
}
|
||||||
|
html.inverted html {
|
||||||
|
background-color:#fefefe
|
||||||
|
}
|
||||||
|
}
|
||||||
|
a {
|
||||||
|
color:#07a
|
||||||
|
}
|
||||||
|
a:visited {
|
||||||
|
color:#941352
|
||||||
|
}
|
||||||
|
.noselect {
|
||||||
|
-webkit-touch-callout:none;
|
||||||
|
-webkit-user-select:none;
|
||||||
|
-khtml-user-select:none;
|
||||||
|
-moz-user-select:none;
|
||||||
|
-ms-user-select:none;
|
||||||
|
user-select:none
|
||||||
|
}
|
||||||
|
span.citneed {
|
||||||
|
vertical-align:top;
|
||||||
|
font-size:.7em;
|
||||||
|
padding-left:.3em
|
||||||
|
}
|
||||||
|
small {
|
||||||
|
font-size:.4em
|
||||||
|
}
|
||||||
|
p.st {
|
||||||
|
margin-top:-1em
|
||||||
|
}
|
||||||
|
div.fancyPositioning div.picture-left {
|
||||||
|
float:left;
|
||||||
|
width:40%;
|
||||||
|
overflow:hidden;
|
||||||
|
margin-right:1em
|
||||||
|
}
|
||||||
|
div.fancyPositioning div.picture-left img {
|
||||||
|
width:100%
|
||||||
|
}
|
||||||
|
div.fancyPositioning div.picture-left figure {
|
||||||
|
margin:10px
|
||||||
|
}
|
||||||
|
div.fancyPositioning div.picture-left figure figcaption {
|
||||||
|
font-size:.7em
|
||||||
|
}
|
||||||
|
div.fancyPositioning div.tleft {
|
||||||
|
float:left;
|
||||||
|
width:55%
|
||||||
|
}
|
||||||
|
div.fancyPositioning div.tleft p:first-child {
|
||||||
|
margin-top:0
|
||||||
|
}
|
||||||
|
div.fancyPositioning:after {
|
||||||
|
display:block;
|
||||||
|
content:"";
|
||||||
|
clear:both
|
||||||
|
}
|
||||||
|
ul li img {
|
||||||
|
height:1em
|
||||||
|
}
|
||||||
|
blockquote {
|
||||||
|
color:#456;
|
||||||
|
margin-left:0;
|
||||||
|
margin-top:2em;
|
||||||
|
margin-bottom:2em
|
||||||
|
}
|
||||||
|
blockquote span {
|
||||||
|
float:left;
|
||||||
|
margin-left:1rem;
|
||||||
|
padding-top:1rem
|
||||||
|
}
|
||||||
|
blockquote author {
|
||||||
|
display:block;
|
||||||
|
clear:both;
|
||||||
|
font-size:.6em;
|
||||||
|
margin-left:2.4rem;
|
||||||
|
font-style:oblique
|
||||||
|
}
|
||||||
|
blockquote author:before {
|
||||||
|
content:"- ";
|
||||||
|
margin-right:1em
|
||||||
|
}
|
||||||
|
blockquote:before {
|
||||||
|
font-family:Times New Roman,Times,Arial;
|
||||||
|
color:#666;
|
||||||
|
content:open-quote;
|
||||||
|
font-size:2.2em;
|
||||||
|
font-weight:600;
|
||||||
|
float:left;
|
||||||
|
margin-top:0;
|
||||||
|
margin-right:.2rem;
|
||||||
|
width:1.2rem
|
||||||
|
}
|
||||||
|
blockquote:after {
|
||||||
|
content:"";
|
||||||
|
display:block;
|
||||||
|
clear:both
|
||||||
|
}
|
||||||
|
@media screen and (max-width:500px) {
|
||||||
|
body {
|
||||||
|
text-align:left
|
||||||
|
}
|
||||||
|
div.fancyPositioning div.picture-left,
|
||||||
|
div.fancyPositioning div.tleft {
|
||||||
|
float:none;
|
||||||
|
width:inherit
|
||||||
|
}
|
||||||
|
blockquote span {
|
||||||
|
width:80%
|
||||||
|
}
|
||||||
|
blockquote author {
|
||||||
|
padding-top:1em;
|
||||||
|
width:80%;
|
||||||
|
margin-left:15%
|
||||||
|
}
|
||||||
|
blockquote author:before {
|
||||||
|
content:"";
|
||||||
|
margin-right:inherit
|
||||||
|
}
|
||||||
|
}
|
||||||
|
span.visited {
|
||||||
|
color:#941352
|
||||||
|
}
|
||||||
|
span.visited-maroon {
|
||||||
|
color:#85144b
|
||||||
|
}
|
||||||
|
span.wr {
|
||||||
|
color:#c0392b;
|
||||||
|
font-weight:600
|
||||||
|
}
|
||||||
|
button.cont-inv,
|
||||||
|
span.wr {
|
||||||
|
text-decoration:underline
|
||||||
|
}
|
||||||
|
button.cont-inv {
|
||||||
|
cursor:pointer;
|
||||||
|
border-radius:2px;
|
||||||
|
position:fixed;
|
||||||
|
right:10px;
|
||||||
|
font-size:.8em;
|
||||||
|
border:0;
|
||||||
|
padding:2px 5px
|
||||||
|
}
|
||||||
|
#contrast {
|
||||||
|
color:#000;
|
||||||
|
top:10px
|
||||||
|
}
|
||||||
|
#contrast,
|
||||||
|
#invmode {
|
||||||
|
-webkit-touch-callout:none;
|
||||||
|
-webkit-user-select:none;
|
||||||
|
-khtml-user-select:none;
|
||||||
|
-moz-user-select:none;
|
||||||
|
-ms-user-select:none;
|
||||||
|
user-select:none
|
||||||
|
}
|
||||||
|
#invmode {
|
||||||
|
color:#fff;
|
||||||
|
background-color:#000;
|
||||||
|
position:fixed;
|
||||||
|
top:34px;
|
||||||
|
text-decoration:underline
|
||||||
|
}
|
||||||
|
@media screen and (max-width:1080px) {
|
||||||
|
#contrast,
|
||||||
|
#invmode {
|
||||||
|
position:absolute
|
||||||
|
}
|
||||||
|
}
|
||||||
|
span.sb {
|
||||||
|
color:#00e
|
||||||
|
}
|
||||||
|
span.sb,
|
||||||
|
span.sv {
|
||||||
|
cursor:not-allowed
|
||||||
|
}
|
||||||
|
span.sv {
|
||||||
|
color:#551a8b
|
||||||
|
}
|
||||||
|
span.foufoufou {
|
||||||
|
color:#444;
|
||||||
|
font-weight:700
|
||||||
|
}
|
||||||
|
span.foufoufou:before {
|
||||||
|
content:"";
|
||||||
|
display:inline-block;
|
||||||
|
width:1em;
|
||||||
|
height:1em;
|
||||||
|
margin-left:.2em;
|
||||||
|
margin-right:.2em;
|
||||||
|
background-color:#444
|
||||||
|
}
|
||||||
|
span.foufivfoufivfoufiv {
|
||||||
|
color:#454545;
|
||||||
|
font-weight:700
|
||||||
|
}
|
||||||
|
span.foufivfoufivfoufiv:before {
|
||||||
|
content:"";
|
||||||
|
display:inline-block;
|
||||||
|
width:1em;
|
||||||
|
height:1em;
|
||||||
|
margin-left:.2em;
|
||||||
|
margin-right:.2em;
|
||||||
|
background-color:#454545
|
||||||
|
}
|
||||||
|
span.mfw {
|
||||||
|
color:#730000
|
||||||
|
}
|
||||||
|
a.kopimi,
|
||||||
|
a.kopimi img.kopimi {
|
||||||
|
display:block;
|
||||||
|
margin-left:auto;
|
||||||
|
margin-right:auto
|
||||||
|
}
|
||||||
|
a.kopimi img.kopimi {
|
||||||
|
height:2em
|
||||||
|
}
|
||||||
|
p.fakepre {
|
||||||
|
font-family:monospace;
|
||||||
|
font-size:.9em
|
||||||
|
}
|
||||||
|
|
135
counter/index.html
Normal file
135
counter/index.html
Normal file
|
@ -0,0 +1,135 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<link rel="stylesheet" type="text/css" href="index.css">
|
||||||
|
<style>
|
||||||
|
.deadline {
|
||||||
|
display: inline;
|
||||||
|
}
|
||||||
|
|
||||||
|
.late {
|
||||||
|
color: red;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h1>Grades when</h1>
|
||||||
|
<h2>AS</h2>
|
||||||
|
<p>
|
||||||
|
The examination of AS was at 2023-05-30.</br>
|
||||||
|
The grade deadline <span class="deadline" data-deadline="2023-06-19"></span>.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
The resit of AS will be at 2023-08-04.</br>
|
||||||
|
The grade deadline before the resit <span class="deadline" data-deadline="2023-07-21"></span>.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<h2>OT</h2>
|
||||||
|
<p>
|
||||||
|
The hand-in of the OT report was at 2023-06-04.</br>
|
||||||
|
The grade deadline <span class="deadline" data-deadline="2023-06-22"></span>.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<h2>RP2</h2>
|
||||||
|
<p>
|
||||||
|
The hand-in of the RP2 report was at 2023-07-14.</br>
|
||||||
|
The final date of re-enrolment <span class="deadline" data-deadline="2023-08-31"></span>.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<h1>References</h2>
|
||||||
|
OER-A (<a href="https://beeldbank.uva.nl/m/4ae52bce4e5d86a8/original/OER-2022-2023-FNWI-MSc-EN.pdf">link</a>):
|
||||||
|
<ul>
|
||||||
|
<li>The resit for an examination must not take place within ten working days of the announcement of the result of the examination being resat.</li>
|
||||||
|
<li>The examiner determines the result (= mark) of a written examination as soon as possible, but at the latest within fifteen working days.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
OER-A 2022 - 2023:
|
||||||
|
The resit for an examination must not take place within ten working days of the announcement of the result of the examination being resat.
|
||||||
|
The examiner determines the result (= mark) of a written examination as soon as possible, but at the latest within fifteen working days.
|
||||||
|
|
||||||
|
AS
|
||||||
|
Exam date 30th May
|
||||||
|
Deadline grade 19th June
|
||||||
|
Retake date 4th August
|
||||||
|
Deadline grade for resit 21st July
|
||||||
|
|
||||||
|
OT
|
||||||
|
OT deadline date 4th June
|
||||||
|
OT grade deadline 22th June
|
||||||
|
|
||||||
|
RP2
|
||||||
|
RP2 handin date 14th July
|
||||||
|
Final re-enrollment date 31th August
|
||||||
|
-->
|
||||||
|
<script>
|
||||||
|
function set_deadlines() {
|
||||||
|
const minute = 60;
|
||||||
|
const hour = 60 * minute;
|
||||||
|
const day = 24 * hour;
|
||||||
|
const now = Date.now();
|
||||||
|
const deadlines = document.getElementsByClassName('deadline');
|
||||||
|
for (let i = 0; i < deadlines.length; ++i) {
|
||||||
|
const deadline = deadlines[i];
|
||||||
|
const dl_date = Date.parse(deadline.dataset.deadline);
|
||||||
|
|
||||||
|
var str = "";
|
||||||
|
|
||||||
|
str += dl_date > now ? "is at " : "was at ";
|
||||||
|
var time_added = false;
|
||||||
|
|
||||||
|
str += deadline.dataset.deadline;
|
||||||
|
str += " (";
|
||||||
|
str += "<span";
|
||||||
|
str += dl_date < now ? ' class="late">' : ">";
|
||||||
|
|
||||||
|
var timediff = Math.round((now - dl_date) / 1000);
|
||||||
|
timediff = timediff < 0 ? -timediff : timediff
|
||||||
|
|
||||||
|
if (timediff >= day) {
|
||||||
|
const days = Math.floor(timediff / day);
|
||||||
|
str += days + " days";
|
||||||
|
time_added = true;
|
||||||
|
timediff -= days * day;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (timediff >= hour) {
|
||||||
|
const hours = Math.floor(timediff / hour);
|
||||||
|
if (time_added) {
|
||||||
|
str += ", ";
|
||||||
|
}
|
||||||
|
str += hours + " hours";
|
||||||
|
time_added = true;
|
||||||
|
timediff -= hours * hour;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (timediff >= minute) {
|
||||||
|
const minutes = Math.floor(timediff / minute);
|
||||||
|
if (time_added) {
|
||||||
|
str += ", ";
|
||||||
|
}
|
||||||
|
str += minutes + " minutes";
|
||||||
|
time_added = true;
|
||||||
|
timediff -= minutes * minute;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (time_added) {
|
||||||
|
str += " and ";
|
||||||
|
}
|
||||||
|
str += timediff + " seconds";
|
||||||
|
time_added = true;
|
||||||
|
|
||||||
|
str += dl_date > now ? " from now" : " ago";
|
||||||
|
str += "</span>" ;
|
||||||
|
str += ")";
|
||||||
|
|
||||||
|
deadline.innerHTML = str;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
setInterval(set_deadlines, 1000);
|
||||||
|
set_deadlines();
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html
|
|
@ -26,7 +26,7 @@ services:
|
||||||
|
|
||||||
- traefik.http.routers.redirects.entrypoints=websecure
|
- traefik.http.routers.redirects.entrypoints=websecure
|
||||||
- traefik.http.routers.redirects.service=static
|
- traefik.http.routers.redirects.service=static
|
||||||
- "traefik.http.routers.redirects.rule=(Host(`pim.kunis.nl`) || Host(`concourse.pim.kunis.nl`) || Host(`rss.pim.kunis.nl`) || Host(`md.pim.kunis.nl`) || Host(`cloud.pim.kunis.nl`) || Host(`dav.pim.kunis.nl`) || Host(`git.pim.kunis.nl`)|| Host(`latex.pim.kunis.nl`))"
|
- "traefik.http.routers.redirects.rule=(Host(`pim.kunis.nl`) || Host(`concourse.pim.kunis.nl`) || Host(`rss.pim.kunis.nl`) || Host(`md.pim.kunis.nl`) || Host(`cloud.pim.kunis.nl`) || Host(`dav.pim.kunis.nl`) || Host(`git.pim.kunis.nl`) || Host(`latex.pim.kunis.nl`) || Host(`brussels.prac.os3.nl`))"
|
||||||
- traefik.http.routers.redirects.tls=true
|
- traefik.http.routers.redirects.tls=true
|
||||||
- traefik.http.routers.redirects.tls.certresolver=letsencrypt
|
- traefik.http.routers.redirects.tls.certresolver=letsencrypt
|
||||||
|
|
||||||
|
|
11
nginx.conf
11
nginx.conf
|
@ -17,6 +17,17 @@ server {
|
||||||
error_page 404 /404.html;
|
error_page 404 /404.html;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
server {
|
||||||
|
listen 80;
|
||||||
|
server_name brussels.prac.os3.nl;
|
||||||
|
index index.html;
|
||||||
|
root /var/www/counter;
|
||||||
|
|
||||||
|
location / {
|
||||||
|
try_files $uri $uri/ /index.html;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
server {
|
server {
|
||||||
server_name pim.kunis.nl;
|
server_name pim.kunis.nl;
|
||||||
return 301 https://pim.kun.is$request_uri;
|
return 301 https://pim.kun.is$request_uri;
|
||||||
|
|
Reference in a new issue