new page structure

This commit is contained in:
j 2022-04-26 15:25:34 +01:00
parent 9874924d27
commit 7f00dcffc4
3 changed files with 183 additions and 41 deletions

View file

@ -11,7 +11,6 @@ def events(request, slug=''):
context = {}
context['settings'] = settings
context['events'] = Event.objects.all().order_by('position')
context['postscript'], c = Page.objects.get_or_create(slug='postscript')
context['intro'], c = Page.objects.get_or_create(slug='intro')
return render(request, 'events.html', context)
@ -19,8 +18,9 @@ def events(request, slug=''):
def timeline(request):
context = {}
context['settings'] = settings
context['postscript'], c = Page.objects.get_or_create(slug='postscript')
context['intro'], c = Page.objects.get_or_create(slug='intro')
context['title'], c = Page.objects.get_or_create(slug='title')
context['about'], c = Page.objects.get_or_create(slug='about')
context['imprint'], c = Page.objects.get_or_create(slug='imprint')
timeline = {'events': []}

View file

@ -6,12 +6,10 @@
margin: auto;
}
p {
}
#intro {
#about, #imprint {
max-width: 800px;
margin: auto;
line-height: 1.33em;
@ -27,10 +25,6 @@ p {
margin-top: 64px;
}
img {
width: 100%;
margin: auto;
}
.row {
display: flex;
flex-direction: row;
@ -40,16 +34,24 @@ p {
}
}
}
#about {
img {
width: 100%;
margin: auto;
}
}
#contact {
.content {
padding-top: 5%;
padding-top: 64px;
width: 640px;
max-width: calc(100% - 16px);
height: 480px;
margin: auto;
}
input, textarea {
width: 600px;
max-width: 100%;
border-radius: 4px;
border: 1px solid black;
}
@ -57,7 +59,7 @@ p {
background: none;
}
input[type="submit"]:hover {
background: red;
font-weight: bold;
cursor: pointer;
}
textarea {
@ -124,3 +126,91 @@ p {
flex-direction: column-reverse;
}
}
.page {
display: none;
}
.page.active {
display: inherit;
}
#title {
background-image: url("/media/image/birds_medium.jpg");
background-size: cover;
&.active {
display: flex;
}
.content {
margin: auto;
padding-bottom: 128px;
.start {
font-size: 36px;
display: block;
width: 100%;
text-align: center;
}
}
.credit {
position: fixed;
left: 5px;
bottom: 5px;
color: #000;
}
}
@media screen and (max-width: 799px) {
#title {
display: block;
.content {
padding-top: 64px;
}
}
}
#contact {
background-image: url("/media/image/birds_medium.jpg");
background-size: cover;
input, textarea {
background: transparent;
color: #fff;
}
}
#menu {
position: fixed;
right: 0;
top: 0;
z-index: 101;
}
#menu-overlay {
z-index: 100;
position: fixed;
display: none;
bottom: 0;
left: 0;
right: 0;
top: 0;
background: #fff;
background-image: url("/media/image/birds_medium.jpg");
background-size: cover;
&.active {
display: flex;
}
ul {
margin: auto;
margin-right: 16px;
margin-top: 64px;
text-align: right;
list-style-type: none;
padding: 0;
li {
line-height: 1.5em;
font-size: 36px;
a, a:visited, a:active, a:hover {
}
}
}
}

View file

@ -17,6 +17,13 @@
padding: 0px;
margin: 0px;
}
#timeline, #tl {
height: 100%;
width:100%;
}
#tl {
display: block;
}
.tl-timeline {
}
@ -27,24 +34,31 @@
.tl-timeline h1, .tl-timeline h2, .tl-timeline h3, .tl-timeline h4, .tl-timeline h5, .tl-timeline h6 {
text-transform: initial !important;
}
.active {
display: block
}
#intro, #contact {
display: none;
}
.tl-timeline .tl-timegroup-message {
color: #000 !important;
}
</style>
</head>
<body>
<div id="intro">
{{ intro.body | safe }}
<div id="title" class="page tl-timeline">
<div class="content">
{{ title.body | safe }}
</div>
<div id="timeline"></div>
<div id="contact">
</div>
<div id="about" class="page tl-timeline">
<br>
<br>
{{ about.body | safe }}
</div>
<div id="timeline" class="page">
<div id="tl"></div>
</div>
<div id="imprint" class="page tl-timeline">
<br>
<br>
{{ imprint.body | safe }}
</div>
<div id="contact" class="page tl-timeline">
<div class="content">
<form class="contact-form" action="/disabled" method="post">
<input type="text" placeholder="Your name" name="name" required><br>
@ -55,6 +69,21 @@
</form>
</div>
</div>
<div id="menu-overlay" class="tl-timeline">
<ul>
<li><a href="#start" target="_self">timeline</a></li>
<li><a href="#about" target="_self">about</a></li>
<li><a href="#contact" target="_self">contact</a></li>
<li><a href="#imprint" target="_self">imprint</a></li>
</ul>
</div>
<div id="menu">
<svg viewBox="0 0 100 100" width="64" height="64">
<rect y="20" width="80" height="10"></rect>
<rect y="40" width="80" height="10"></rect>
<rect y="60" width="80" height="10"></rect>
</svg>
</div>
<script src="{% static 'timeline/js/timeline.js' %}"></script>
<script>
function submitContact(event) {
@ -91,39 +120,62 @@
var timeline
function load_timeline() {
timeline = new TL.Timeline('timeline', data, {
timeline = new TL.Timeline('tl', data, {
hash_bookmark: true,
debug: false,
timenav_height: 100,
});
}
document.querySelector('#intro a[href="#title"]').addEventListener('click', event => {
document.querySelector('#intro').style.display = 'none'
document.querySelector('#contact').style.display = 'none'
document.querySelector('#timeline').style.display = 'block'
function openPage(qs) {
var active = document.querySelector(qs)
document.querySelectorAll('.page').forEach(page => {
if (page != active) {
if (page.classList.contains('active')) {
page.classList.remove('active')
active.classList.add('active')
}
}
})
active.classList.add('active')
}
document.querySelector('#about a[href="#title"]').addEventListener('click', event => {
openPage('#timeline')
load_timeline()
})
if (document.location.hash.slice(1).length) {
load_timeline()
}
function hashchange(event) {
console.log('hc', document.location.hash.slice(1).length, document.location.hash.slice(1))
if (document.location.hash.slice(1) == 'contact') {
document.querySelector('#intro').style.display = 'none'
document.querySelector('#contact').style.display = 'block'
document.querySelector('#timeline').style.display = 'none'
var page
if (document.location.hash.slice(1).length) {
page = document.querySelector(document.location.hash + '.page')
}
if (page) {
openPage(document.location.hash)
} else if (document.location.hash.slice(1).length) {
document.querySelector('#intro').style.display = 'none'
document.querySelector('#contact').style.display = 'none'
document.querySelector('#timeline').style.display = 'block'
openPage('#timeline')
if (!timeline) {
load_timeline()
}
} else {
document.querySelector('#intro').style.display = 'block'
document.querySelector('#contact').style.display = 'none'
document.querySelector('#timeline').style.display = 'none'
openPage("#title")
}
}
window.addEventListener('hashchange', hashchange)
hashchange()
document.querySelector('#menu').addEventListener('click', event => {
var overlay = document.querySelector('#menu-overlay')
if (overlay.classList.contains('active')) {
overlay.classList.remove('active')
} else {
overlay.classList.add('active')
}
})
document.querySelectorAll('#menu-overlay a').forEach(a => {
a.addEventListener('click', event => {
var overlay = document.querySelector('#menu-overlay')
overlay.classList.remove('active')
})
})
</script>
</body>
</html>