Eine weitere Anstylung

This commit is contained in:
Daniel Grams 2020-06-26 10:20:13 +02:00
parent d5f5f9a829
commit 3a472288da
9 changed files with 137 additions and 72 deletions

15
app.py
View File

@ -966,9 +966,9 @@ def place(place_id):
@app.route("/events")
def events():
dates = EventDate.query.filter(EventDate.start >= today).order_by(EventDate.start).all()
events = Event.query.all()
return render_template('events.html',
dates=dates,
events=events,
user_can_create_event=can_create_event(),
user_can_list_event_suggestion=can_list_event_suggestion())
@ -987,6 +987,17 @@ def event(event_id):
return render_template('event.html', event=event, user_can_verify_event=user_can_verify_event)
@app.route("/eventdates")
def event_dates():
dates = EventDate.query.filter(EventDate.start >= today).order_by(EventDate.start).all()
return render_template('event_date/list.html',
dates=dates)
@app.route('/eventdate/<int:id>', methods=('GET', 'POST'))
def event_date(id):
event_date = EventDate.query.get_or_404(id)
return render_template('event_date/read.html', event_date=event_date)
from forms.event import CreateEventForm
from forms.event_suggestion import CreateEventSuggestionForm

View File

@ -246,31 +246,7 @@ class Event(db.Model, TrackableMixin):
recurrence_rule = Column(UnicodeText())
dates = relationship('EventDate', backref=backref('event', lazy=False), cascade="all, delete-orphan")
# wiederkehrende Dates sind zeitlich eingeschränkt
# beim event müsste man dann auch nochmal start_time (nullable=False) und end_time machen.
#keywords/tags = Column(String(255)) oder liste?
#kid_friendly: bool
# target_group:
# age_from: int
# age_to: int
# mainly_for_tourists: bool
#
#
# = kärnten =
# eventSchedules: RepeatFrequency (wiederkehrende Beschreibung, keine konkreten Daten)
# allDay: bool
# status: Scheduled (Default), Cancelled, MovedOnline, Postponed, Rescheduled
# previousStartDates: DateTime (see status)
# attendanceMode: Offline, Online, Mixed
# isAccessibleForFree: bool
# typicalAgeRange: string (9-99)
# (Multiple Events möglich, wiederholend oder frei, dann aber mit endzeit)
# Facebook Limitations:
# An event can't last longer than a day
# An event can't span more than 52 weeks
# Each event can have a max of 52 instances
# Once the event has begun, you can't add instances totaling more than 52 weeks after the initial start date
class EventDate(db.Model):
__tablename__ = 'eventdate'
id = Column(Integer(), primary_key=True)

View File

@ -159,6 +159,37 @@
{% macro render_image(image_id) %}
{% if image_id %}
<img src="{{ url_for('image', id=image_id) }}"/>
<img src="{{ url_for('image', id=image_id) }}" class="img-fluid rounded" />
{% endif %}
{% endmacro %}
{% macro render_event_props(event, date) %}
<div class="card">
<div class="card-header">
{{ event.name }}
</div>
<div class="card-body">
<div><i class="fa fa-fw fa-calendar" data-toggle="tooltip" title="{{ _('Date') }}"></i> {{ date.start | datetimeformat }}</div>
<div><i class="fa fa-fw fa-map-marker" data-toggle="tooltip" title="{{ _('Location') }}"></i> <a href="{{ url_for('place', place_id=event.place.id) }}">{{ render_place(event.place) }}</a></div>
{% if event.verified %}
<div><i class="fa fa-fw fa-check-circle text-success" data-toggle="tooltip" title="{{ _('Verified') }}"></i> {{ _('Verified') }}</div>
{% endif %}
{% if event.photo_id %}
<div class="my-4">{{ render_image(event.photo_id) }}</div>
{% endif %}
<div class="my-4">{{ event.description }}</div>
<div class="mt-4">
{{ render_link_prop(event.external_link) }}
{{ render_link_prop(event.ticket_link) }}
{% if event.category_id %}
<div><i class="fa fa-fw fa-archive" data-toggle="tooltip" title="{{ _('Category') }}"></i> {{ event.category | event_category_name }}</div>
{% endif %}
<div><i class="fa fa-fw fa-users" data-toggle="tooltip" title="{{ _('Host') }}"></i> {{ render_ooa_with_link(event.host) }}</div>
</div>
</div>
</div>
{% endmacro %}

View File

@ -1,11 +1,16 @@
{% extends "layout.html" %}
{% from "_macros.html" import render_image, render_ooa_with_link, render_place, render_link_prop %}
{% from "_macros.html" import render_event_props, render_image, render_ooa_with_link, render_place, render_link_prop %}
{% block title %}
{{ event.name }}
{% endblock %}
{% block content %}
<h1>{{ event.name }}</h1>
<nav aria-label="breadcrumb">
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="{{ url_for('events') }}">{{ _('Events') }}</a></li>
<li class="breadcrumb-item active" aria-current="page">{{ event.name }}</li>
</ol>
</nav>
{% if user_can_verify_event %}
<div class="my-4">
@ -21,35 +26,19 @@
</div>
{% endif %}
<div class="my-4">
<div><i class="fa fa-fw fa-calendar" data-toggle="tooltip" title="{{ _('Date') }}"></i> {{ event.dates[0].start | datetimeformat }}</div>
<div><i class="fa fa-fw fa-map-marker" data-toggle="tooltip" title="{{ _('Location') }}"></i> <a href="{{ url_for('place', place_id=event.place.id) }}">{{ render_place(event.place) }}</a></div>
{% if event.verified %}
<div><i class="fa fa-fw fa-check-circle text-success" data-toggle="tooltip" title="{{ _('Verified') }}"></i> {{ _('Verified') }}</div>
{% endif %}
</div>
{{ render_event_props(event, event.dates[0]) }}
{% if event.photo_id %}
<div class="my-4">{{ render_image(event.photo_id) }}</div>
{% endif %}
{% if event.category_id %}
<div class="my-4">
<div><i class="fa fa-fw fa-archive" data-toggle="tooltip" title="{{ _('Category') }}"></i> {{ event.category | event_category_name }}</div>
{% if event.dates|length > 1 %}
<div class="card mt-4">
<div class="card-header">
{{ _('Event Dates') }}
</div>
<div class="list-group list-group-flush">
{% for date in event.dates %}
<a href="{{ url_for('event_date', id=date.id) }}" class="list-group-item list-group-item-action">{{ date.start | datetimeformat('short') }}</a>
{% endfor %}
</div>
</div>
{% endif %}
<div class="my-4">{{ event.description }}</div>
{% if event.external_link or event.ticket_link %}
<div class="my-4">
{{ render_link_prop(event.external_link) }}
{{ render_link_prop(event.ticket_link) }}
</div>
{% endif %}
<div class="my-4">
<div><i class="fa fa-fw fa-users" data-toggle="tooltip" title="{{ _('Host') }}"></i> {{ render_ooa_with_link(event.host) }}</div>
</div>
{% endblock %}

View File

@ -0,0 +1,25 @@
{% extends "layout.html" %}
{% from "_macros.html" import render_ooa, render_place, render_events_sub_menu %}
{% block title %}
{{ _('Event Dates') }}
{% endblock %}
{% block content %}
<h1>{{ _('Event Dates') }}</h1>
{% for date in dates %}
<div class="card mb-3" style="max-width: 768px;">
{% if date.event.photo_id %}
<img src="{{ url_for('image', id=date.event.photo_id) }}" class="card-img-top" style="object-fit: cover; height: 20vh;" />
{% endif %}
<div class="card-body" style="padding:1rem">
<h5 class="card-title">{{ date.event.name }}</h5>
<h6 class="card-subtitle mb-2 text-muted"><i class="fa fa-calendar"></i> {{ date.start | datetimeformat('short') }}</h6>
<p class="card-text">{{ date.event.description | truncate(100) }}</p>
<small class="text-muted"><i class="fa fa-map-marker"></i> {{ date.event.place.name }}</small>
<a href="{{ url_for('event_date', id=date.id) }}" class="stretched-link"></a>
</div>
</div>
{% endfor %}
{% endblock %}

View File

@ -0,0 +1,19 @@
{% extends "layout.html" %}
{% from "_macros.html" import render_event_props, render_image, render_ooa_with_link, render_place, render_link_prop %}
{% set event = event_date.event %}
{% block title %}
{{ event.name }}
{% endblock %}
{% block content %}
<nav aria-label="breadcrumb">
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="{{ url_for('events') }}">{{ _('Events') }}</a></li>
<li class="breadcrumb-item"><a href="{{ url_for('event', event_id=event.id) }}">{{ event.name }}</a></li>
<li class="breadcrumb-item active" aria-current="page">{{ event_date.start | datetimeformat('short') }}</li>
</ol>
</nav>
{{ render_event_props(event, event_date) }}
{% endblock %}

View File

@ -9,19 +9,32 @@
{{ render_events_sub_menu(user_can_create_event, user_can_list_event_suggestion) }}
{% for date in dates %}
<div class="card mb-3" style="max-width: 768px;">
{% if date.event.photo_id %}
<img src="{{ url_for('image', id=date.event.photo_id) }}" class="card-img-top" style="object-fit: cover; height: 20vh;" />
{% endif %}
<div class="card-body" style="padding:1rem">
<h5 class="card-title">{{ date.event.name }}</h5>
<h6 class="card-subtitle mb-2 text-muted"><i class="fa fa-calendar"></i> {{ date.start | datetimeformat('short') }}</h6>
<p class="card-text">{{ date.event.description | truncate(100) }}</p>
<small class="text-muted"><i class="fa fa-map-marker"></i> {{ date.event.place.name }}</small>
<a href="{{ url_for('event', event_id=date.event.id) }}" class="stretched-link"></a>
</div>
</div>
{% endfor %}
<div class="table-responsive">
<table class="table table-sm table-bordered table-hover table-striped">
<thead>
<tr>
<th>{{ _('Date') }}</th>
<th>{{ _('Name') }}</th>
<th>{{ _('Host') }}</th>
<th>{{ _('Location') }}</th>
</tr>
</thead>
<tbody>
{% for event in events %}
<tr>
<td>{{ event.dates[0].start | datetimeformat('short') }}</td>
<td>
<a href="{{ url_for('event', event_id=event.id) }}">{{ event.name }}</a>
{% if event.verified %}
<i class="fa fa-check-circle text-success" data-toggle="tooltip" title="{{ _('Verified') }}"></i>
{% endif %}
</td>
<td>{{ render_ooa(event.host) }}</td>
<td>{{ render_place(event.place) }}</td>
</tr>
{% endfor %}
</tbody>
</table>
{% endblock %}

View File

@ -7,8 +7,8 @@ Prototyp
<h1>{{ _('Hi there!') }}</h1>
<div class="list-group my-4">
<a href="{{ url_for('events') }}" class="list-group-item list-group-item-action">
{{ _('Events') }}
<a href="{{ url_for('event_dates') }}" class="list-group-item list-group-item-action">
{{ _('Event Dates') }}
<i class="fa fa-caret-right"></i>
</a>
</div>

View File

@ -57,6 +57,7 @@
</button>
<div class="collapse navbar-collapse" id="navbarNavAltMarkup">
<div class="navbar-nav mr-auto">
<a class="nav-item nav-link" href="{{ url_for('event_dates') }}">{{ _('Event Dates') }}</a>
<a class="nav-item nav-link" href="{{ url_for('events') }}">{{ _('Events') }}</a>
<a class="nav-item nav-link" href="{{ url_for('places') }}">{{ _('Places') }}</a>
<a class="nav-item nav-link" href="{{ url_for('admin_units') }}">{{ _('Admin Units') }}</a>