parent
c1349fd5ae
commit
f664c1ee32
|
|
@ -4,4 +4,5 @@
|
||||||
15.06.2022 - 1h 30 mins
|
15.06.2022 - 1h 30 mins
|
||||||
23.06.2022 - 1h 30 mins
|
23.06.2022 - 1h 30 mins
|
||||||
07.07.2022 - 2h 30 mins
|
07.07.2022 - 2h 30 mins
|
||||||
15.07.2022 - 3h
|
15.07.2022 - 3h
|
||||||
|
24.07.2022 - 3h 30 mins
|
||||||
|
|
@ -0,0 +1,27 @@
|
||||||
|
Copyright (c) 2016, FEINHEIT AG and individual contributors.
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer.
|
||||||
|
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright
|
||||||
|
notice, this list of conditions and the following disclaimer in the
|
||||||
|
documentation and/or other materials provided with the distribution.
|
||||||
|
|
||||||
|
3. Neither the name of FEINHEIT GmbH nor the names of its contributors
|
||||||
|
may be used to endorse or promote products derived from this software
|
||||||
|
without specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
||||||
|
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||||
|
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
@ -0,0 +1,2 @@
|
||||||
|
VERSION = (0, 15, 0)
|
||||||
|
__version__ = ".".join(map(str, VERSION))
|
||||||
|
|
@ -0,0 +1,78 @@
|
||||||
|
import inspect
|
||||||
|
import json
|
||||||
|
|
||||||
|
from django import forms
|
||||||
|
from django.conf import settings
|
||||||
|
from django.contrib import admin
|
||||||
|
from django.contrib.admin.helpers import InlineAdminFormSet
|
||||||
|
from django.contrib.admin.options import BaseModelAdmin, InlineModelAdmin
|
||||||
|
from django.core import checks
|
||||||
|
from js_asset import JS
|
||||||
|
|
||||||
|
|
||||||
|
__all__ = ("OrderableAdmin",)
|
||||||
|
|
||||||
|
|
||||||
|
class OrderableAdmin(BaseModelAdmin):
|
||||||
|
ordering_field = "ordering"
|
||||||
|
ordering_field_hide_input = False
|
||||||
|
extra = 0
|
||||||
|
|
||||||
|
@property
|
||||||
|
def media(self):
|
||||||
|
if not isinstance(self, InlineModelAdmin):
|
||||||
|
# Editable change list
|
||||||
|
context = {
|
||||||
|
"field": self.ordering_field,
|
||||||
|
"fieldHideInput": self.ordering_field_hide_input,
|
||||||
|
}
|
||||||
|
else:
|
||||||
|
# Find our helper.InlineAdminFormSet so that we may access
|
||||||
|
# the formset instance and its prefix
|
||||||
|
frame = inspect.currentframe()
|
||||||
|
while frame: # pragma: no branch
|
||||||
|
helper = frame.f_locals.get("self")
|
||||||
|
if isinstance(helper, InlineAdminFormSet):
|
||||||
|
break
|
||||||
|
frame = frame.f_back
|
||||||
|
del frame
|
||||||
|
|
||||||
|
context = {
|
||||||
|
"field": self.ordering_field,
|
||||||
|
"fieldHideInput": self.ordering_field_hide_input,
|
||||||
|
"prefix": helper.formset.prefix,
|
||||||
|
"stacked": isinstance(self, admin.StackedInline),
|
||||||
|
"tabular": isinstance(self, admin.TabularInline),
|
||||||
|
}
|
||||||
|
|
||||||
|
return super().media + forms.Media(
|
||||||
|
css={
|
||||||
|
"all": [
|
||||||
|
"admin_ordering/jquery-ui.min.css",
|
||||||
|
"admin_ordering/admin_ordering.css",
|
||||||
|
]
|
||||||
|
},
|
||||||
|
js=[
|
||||||
|
"admin/js/jquery.init.js",
|
||||||
|
"admin_ordering/jquery-ui.min.js",
|
||||||
|
JS(
|
||||||
|
"admin_ordering/admin_ordering.js",
|
||||||
|
{
|
||||||
|
"class": "admin-ordering-context",
|
||||||
|
"data-context": json.dumps(context),
|
||||||
|
},
|
||||||
|
),
|
||||||
|
],
|
||||||
|
)
|
||||||
|
|
||||||
|
def check(self, **kwargs):
|
||||||
|
errors = super().check(**kwargs)
|
||||||
|
if "admin_ordering" not in settings.INSTALLED_APPS:
|
||||||
|
errors.append(
|
||||||
|
checks.Error(
|
||||||
|
'"admin_ordering" must be in INSTALLED_APPS.',
|
||||||
|
obj=self.__class__,
|
||||||
|
id="admin_ordering.E001",
|
||||||
|
)
|
||||||
|
)
|
||||||
|
return errors
|
||||||
Binary file not shown.
|
|
@ -0,0 +1,23 @@
|
||||||
|
# SOME DESCRIPTIVE TITLE.
|
||||||
|
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||||
|
# This file is distributed under the same license as the PACKAGE package.
|
||||||
|
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||||
|
#
|
||||||
|
#, fuzzy
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: PACKAGE VERSION\n"
|
||||||
|
"Report-Msgid-Bugs-To: \n"
|
||||||
|
"POT-Creation-Date: 2020-10-04 20:17+0200\n"
|
||||||
|
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||||
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
|
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||||
|
"Language: \n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
|
||||||
|
#: models.py:7
|
||||||
|
msgid "ordering"
|
||||||
|
msgstr "Sortierung"
|
||||||
|
|
@ -0,0 +1,44 @@
|
||||||
|
from functools import total_ordering
|
||||||
|
|
||||||
|
from django.core import checks
|
||||||
|
from django.db import models
|
||||||
|
from django.db.models import Min
|
||||||
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
|
|
||||||
|
@total_ordering
|
||||||
|
class OrderableModel(models.Model):
|
||||||
|
ordering = models.IntegerField("Kolejność", default=0)
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
abstract = True
|
||||||
|
ordering = ["ordering"]
|
||||||
|
|
||||||
|
def save(self, *args, **kwargs):
|
||||||
|
if not self.ordering:
|
||||||
|
min = self.__class__._default_manager.aggregate(m=Min("ordering"))[
|
||||||
|
"m"]
|
||||||
|
self.ordering = (min or 0) - 10
|
||||||
|
super().save(*args, **kwargs)
|
||||||
|
|
||||||
|
save.alters_data = True
|
||||||
|
|
||||||
|
def __lt__(self, other):
|
||||||
|
return (
|
||||||
|
self.ordering > other.ordering if isinstance(
|
||||||
|
other, type(self)) else False
|
||||||
|
)
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def check(cls, **kwargs):
|
||||||
|
errors = super().check(**kwargs)
|
||||||
|
if not cls._meta.ordering:
|
||||||
|
errors.append(
|
||||||
|
checks.Error(
|
||||||
|
'The ordering of "%s" is undefined.' % cls._meta.label,
|
||||||
|
obj=cls,
|
||||||
|
id="admin_ordering.E002",
|
||||||
|
hint="Make the inner Meta class inherit OrderableModel.Meta.",
|
||||||
|
)
|
||||||
|
)
|
||||||
|
return errors
|
||||||
|
|
@ -0,0 +1,8 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="50px" height="50px" viewBox="0 0 50 50" enable-background="new 0 0 50 50" xml:space="preserve">
|
||||||
|
<rect y="10.723" fill="#CCCCCC" width="50" height="7.166"/>
|
||||||
|
<rect y="21.443" fill="#CCCCCC" width="50" height="7.168"/>
|
||||||
|
<rect y="32.166" fill="#CCCCCC" width="50" height="7.168"/>
|
||||||
|
<polygon fill="#CCCCCC" points="32.111,7.111 17.888,7.111 25,0 "/>
|
||||||
|
<polygon fill="#CCCCCC" points="17.888,42.889 32.111,42.889 25,50 "/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 607 B |
|
|
@ -0,0 +1,86 @@
|
||||||
|
.ui-sortable-handle {
|
||||||
|
cursor: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ui-sortable-helper {
|
||||||
|
opacity: 0.8;
|
||||||
|
border-top: 1px dashed #cccccc;
|
||||||
|
border-bottom: 1px dashed #cccccc;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ui-sortable-helper > td,
|
||||||
|
.ui-sortable-helper > th {
|
||||||
|
border-bottom: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.inline-related.tabular .ui-sortable > tr {
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.inline-related.tabular .ui-sortable-placeholder > td {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.admin-ordering-field {
|
||||||
|
cursor: row-resize;
|
||||||
|
}
|
||||||
|
|
||||||
|
.admin-ordering-field .admin-ordering-field-input-wrapper {
|
||||||
|
display: table-cell;
|
||||||
|
width: 100%;
|
||||||
|
white-space: nowrap;
|
||||||
|
}
|
||||||
|
|
||||||
|
.admin-ordering-field .admin-ordering-field-input-wrapper::before {
|
||||||
|
content: "";
|
||||||
|
display: inline-block;
|
||||||
|
width: 14px;
|
||||||
|
height: 14px;
|
||||||
|
background-size: 14px 14px;
|
||||||
|
background-image: url("admin_ordering-icon.svg");
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
background-position: center center;
|
||||||
|
vertical-align: middle;
|
||||||
|
margin-right: 15px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.admin-ordering-field .admin-ordering-field-input-wrapper input {
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.admin-ordering-field.admin-ordering-field-hide-input
|
||||||
|
.admin-ordering-field-input-wrapper::before {
|
||||||
|
margin-right: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.admin-ordering-field.admin-ordering-field-hide-input
|
||||||
|
.admin-ordering-field-input-wrapper
|
||||||
|
input {
|
||||||
|
visibility: hidden;
|
||||||
|
pointer-events: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.inline-related .admin-ordering-field {
|
||||||
|
cursor: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.inline-related.has_original .admin-ordering-field,
|
||||||
|
.inline-related .has_original .admin-ordering-field {
|
||||||
|
cursor: row-resize;
|
||||||
|
}
|
||||||
|
|
||||||
|
.inline-related
|
||||||
|
.admin-ordering-field
|
||||||
|
.admin-ordering-field-input-wrapper::before {
|
||||||
|
opacity: 0.3;
|
||||||
|
}
|
||||||
|
|
||||||
|
.inline-related.has_original
|
||||||
|
.admin-ordering-field
|
||||||
|
.admin-ordering-field-input-wrapper::before,
|
||||||
|
.inline-related
|
||||||
|
.has_original
|
||||||
|
.admin-ordering-field
|
||||||
|
.admin-ordering-field-input-wrapper::before {
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,170 @@
|
||||||
|
/* global django */
|
||||||
|
django.jQuery(function ($) {
|
||||||
|
function updatePlaceholderHeight(ui) {
|
||||||
|
// set placeholder height equal to item height
|
||||||
|
ui.placeholder.height(ui.item.outerHeight())
|
||||||
|
}
|
||||||
|
|
||||||
|
function hideHorizontalOverflow() {
|
||||||
|
// hide body horizontal overflow while dragging row
|
||||||
|
$("body").css("overflow-x", "hidden")
|
||||||
|
}
|
||||||
|
|
||||||
|
function autoHorizontalOverflow() {
|
||||||
|
// reset body horizontal overflow
|
||||||
|
$("body").css("overflow-x", "auto")
|
||||||
|
}
|
||||||
|
|
||||||
|
function enforceSortableRowsCellsSize(node) {
|
||||||
|
// enforce row cells size while sorting rows
|
||||||
|
node.find(">tr").each(function () {
|
||||||
|
$(this)
|
||||||
|
.mousedown(function () {
|
||||||
|
$(this)
|
||||||
|
.find("td, th")
|
||||||
|
.each(function () {
|
||||||
|
$(this).css("width", $(this).width())
|
||||||
|
})
|
||||||
|
})
|
||||||
|
.mouseup(function () {
|
||||||
|
$(this)
|
||||||
|
.find("td, th")
|
||||||
|
.each(function () {
|
||||||
|
$(this).css("width", "auto")
|
||||||
|
})
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
$(".admin-ordering-context:not(.activated)")
|
||||||
|
.addClass("activated")
|
||||||
|
.each(function () {
|
||||||
|
var $sortable,
|
||||||
|
$sortableHandle,
|
||||||
|
$sortableInputWrapper =
|
||||||
|
'<span class="admin-ordering-field-input-wrapper"></span>'
|
||||||
|
|
||||||
|
var data = JSON.parse(this.getAttribute("data-context"))
|
||||||
|
var inputFieldSelector = 'input[name$="-' + data.field + '"]'
|
||||||
|
|
||||||
|
function updateOrdering(nodes) {
|
||||||
|
var incOrdering = 10
|
||||||
|
var maxOrdering = nodes.length * incOrdering
|
||||||
|
nodes.each(function (index) {
|
||||||
|
var row = $(this)
|
||||||
|
var rowOrdering = data.fieldDesc
|
||||||
|
? maxOrdering - incOrdering * index
|
||||||
|
: incOrdering * (index + 1)
|
||||||
|
row.find(inputFieldSelector).val(rowOrdering)
|
||||||
|
row.removeClass("row1 row2").addClass(index % 2 ? "row2" : "row1")
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
if (data.field.indexOf("-") == 0) {
|
||||||
|
data.field = data.field.substring(1)
|
||||||
|
data.fieldDesc = true
|
||||||
|
} else {
|
||||||
|
data.fieldDesc = false
|
||||||
|
}
|
||||||
|
|
||||||
|
if (data.tabular) {
|
||||||
|
$sortable = $("#" + data.prefix + "-group tbody")
|
||||||
|
$sortableHandle = $sortable.find(".field-" + data.field)
|
||||||
|
$sortableHandle.addClass("admin-ordering-field")
|
||||||
|
if (data.fieldHideInput) {
|
||||||
|
$sortableHandle.addClass("admin-ordering-field-hide-input")
|
||||||
|
}
|
||||||
|
$sortableHandle
|
||||||
|
.find(inputFieldSelector + ':not([type="hidden"])')
|
||||||
|
.wrap($sortableInputWrapper)
|
||||||
|
$sortable.sortable({
|
||||||
|
items: ">.has_original",
|
||||||
|
handle: $sortableHandle,
|
||||||
|
start: function (_event, ui) {
|
||||||
|
hideHorizontalOverflow()
|
||||||
|
updatePlaceholderHeight(ui)
|
||||||
|
// fix ui item height
|
||||||
|
ui.item.css("height", ui.item.outerHeight())
|
||||||
|
},
|
||||||
|
update: function (_event, _ui) {
|
||||||
|
updateOrdering($(".dynamic-" + data.prefix))
|
||||||
|
},
|
||||||
|
stop: function (_event, ui) {
|
||||||
|
autoHorizontalOverflow()
|
||||||
|
// reset ui item height
|
||||||
|
ui.item.css("height", "auto")
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
|
enforceSortableRowsCellsSize($sortable)
|
||||||
|
} else if (data.stacked) {
|
||||||
|
$sortable = $("#" + data.prefix + "-group")
|
||||||
|
$sortableHandle = $sortable.find(".field-" + data.field)
|
||||||
|
$sortableHandle.addClass("admin-ordering-field")
|
||||||
|
if (data.fieldHideInput) {
|
||||||
|
$sortableHandle.addClass("admin-ordering-field-hide-input")
|
||||||
|
}
|
||||||
|
$sortableHandle
|
||||||
|
.find(inputFieldSelector + ':not([type="hidden"])')
|
||||||
|
.wrap($sortableInputWrapper)
|
||||||
|
$sortable.sortable({
|
||||||
|
items: ">.has_original,>>.has_original",
|
||||||
|
handle: $sortableHandle,
|
||||||
|
start: function (_event, ui) {
|
||||||
|
hideHorizontalOverflow()
|
||||||
|
updatePlaceholderHeight(ui)
|
||||||
|
},
|
||||||
|
update: function (_event, _ui) {
|
||||||
|
updateOrdering($(".dynamic-" + data.prefix))
|
||||||
|
},
|
||||||
|
stop: function (_event, _ui) {
|
||||||
|
autoHorizontalOverflow()
|
||||||
|
},
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
$sortable = $("#result_list tbody")
|
||||||
|
$sortableHandle = $sortable.find(".field-" + data.field)
|
||||||
|
$sortableHandle.addClass("admin-ordering-field")
|
||||||
|
if (data.fieldHideInput) {
|
||||||
|
$sortableHandle.addClass("admin-ordering-field-hide-input")
|
||||||
|
}
|
||||||
|
if (!$sortableHandle.find("input").length) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
$sortableHandle
|
||||||
|
.find(inputFieldSelector + ':not([type="hidden"])')
|
||||||
|
.wrap($sortableInputWrapper)
|
||||||
|
$sortable.sortable({
|
||||||
|
handle: $sortableHandle,
|
||||||
|
start: function (_event, ui) {
|
||||||
|
hideHorizontalOverflow()
|
||||||
|
updatePlaceholderHeight(ui)
|
||||||
|
},
|
||||||
|
update: function (_event, _ui) {
|
||||||
|
updateOrdering($sortable.find("tr"))
|
||||||
|
},
|
||||||
|
stop: function (_event, _ui) {
|
||||||
|
autoHorizontalOverflow()
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
|
enforceSortableRowsCellsSize($sortable)
|
||||||
|
}
|
||||||
|
|
||||||
|
if (data.tabular || data.stacked) {
|
||||||
|
// Yay, Django 1.9 or better!
|
||||||
|
$(document).on("formset:added", function newForm(event, $row) {
|
||||||
|
if (event.detail && event.detail.formsetName) {
|
||||||
|
// Django 4.1 or better!
|
||||||
|
if ($(event.target).hasClass("dynamic-" + data.prefix)) {
|
||||||
|
updateOrdering($(".dynamic-" + data.prefix))
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if ($row.hasClass("dynamic-" + data.prefix)) {
|
||||||
|
updateOrdering($(".dynamic-" + data.prefix))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
@ -0,0 +1,6 @@
|
||||||
|
/*! jQuery UI - v1.12.1 - 2021-08-12
|
||||||
|
* http://jqueryui.com
|
||||||
|
* Includes: sortable.css
|
||||||
|
* Copyright jQuery Foundation and other contributors; Licensed MIT */
|
||||||
|
|
||||||
|
.ui-sortable-handle{-ms-touch-action:none;touch-action:none}
|
||||||
File diff suppressed because one or more lines are too long
|
|
@ -1,80 +1,80 @@
|
||||||
{% extends 'base.html' %} {% block title %}Strona główna | pdlzbs{% endblock %}
|
{% extends 'base.html' %}
|
||||||
|
<!---->
|
||||||
|
{% block title %}Zarząd | pdlzbs{% endblock %}
|
||||||
|
<!---->
|
||||||
{% load static tailwind_tags %} {% block content %}
|
{% load static tailwind_tags %} {% block content %}
|
||||||
<div class="flex flex-col items-center gap-4">
|
<div
|
||||||
<h1 class="text-4xl">Zarząd PodlZBS</h1>
|
class="flex flex-col lg:flex-row flex-wrap items-center justify-around gap-6 bg-white shadow-md rounded-md p-4 mb-2"
|
||||||
|
>
|
||||||
{% if czlonkowie %}
|
<h1 class="text-[2.25rem] font-extrabold">Zarząd PodlZBS</h1>
|
||||||
<div
|
<nav>
|
||||||
class="grid lg:grid-cols-2 gap-4 text-center items-center place-items-center prose-h1:font-light prose-h3:text-xs prose-h2:text-md prose-h2:my-0 prose-h1:mb-0"
|
<ul class="flex flex-wrap justify-center lg:items-end gap-3">
|
||||||
>
|
<li
|
||||||
{% for member in czlonkowie %}
|
class="adm_nav-item {% if '/zarzad' == request.path %}adm_active{% endif %}"
|
||||||
<div class="prose">
|
>
|
||||||
<h1>{{ member.function }}</h1>
|
<a href="{% url 'administration' %}">Zarząd</a>
|
||||||
<h2>{{ member.name }}</h2>
|
</li>
|
||||||
<h3>{{ member.contact }}</h3>
|
<li
|
||||||
</div>
|
class="adm_nav-item {% if 'ogloszenia' in request.path %}adm_active{% endif %}"
|
||||||
{% endfor %}
|
>
|
||||||
</div>
|
<a href="{% url 'administration_announcements' %}">Ogłoszenia</a>
|
||||||
{% else %}
|
</li>
|
||||||
<span class="py-4 text-xl">Brak członków</span>
|
<li
|
||||||
{% endif %}
|
class="adm_nav-item {% if 'protokolyiuchwaly' in request.path %}adm_active{% endif %}"
|
||||||
|
>
|
||||||
<div class="prose prose-h2:font-light">
|
<a href="{% url 'administration_protocols' %}">Protokoły i Uchwały</a>
|
||||||
|
</li>
|
||||||
|
<li
|
||||||
|
class="adm_nav-item {% if 'regulaminy' in request.path %}adm_active{% endif %}"
|
||||||
|
>
|
||||||
|
<a href="{% url 'administration_regulations' %}">Regulaminy</a>
|
||||||
|
</li>
|
||||||
|
<li
|
||||||
|
class="adm_nav-item {% if 'rodo' in request.path %}adm_active{% endif %}"
|
||||||
|
>
|
||||||
|
<a href="{% url 'administration_rodos' %}">RODO</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</nav>
|
||||||
|
</div>
|
||||||
|
<div
|
||||||
|
class="mx-auto p-4 prose prose-h2:font-normal prose-h2:text-2xl prose-h2:text-center prose-h4:font-normal prose-h4:text-xl prose-h4:text-center"
|
||||||
|
>
|
||||||
|
{% block adm_content %}
|
||||||
|
<h2 class="prose prose-h2:font-light">
|
||||||
<a href="{{ statut.attachment.url }}" target="_blank">
|
<a href="{{ statut.attachment.url }}" target="_blank">
|
||||||
<h2 class="my-0 text-center">{{ statut.title }}</h2>
|
<span class="my-0 text-center">{{ statut.title }}</span>
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</h2>
|
||||||
|
|
||||||
<div class="flex flex-col items-center text-xl font-semibold">
|
<h2 class="mb-2">Dane adresowe</h2>
|
||||||
|
<h3
|
||||||
|
class="flex flex-col items-center text-xl font-medium px-4 py-3 bg-blue-50 border border-blue-100 rounded-md shadow-md mb-8"
|
||||||
|
>
|
||||||
<span>Adres Podlaskiego ZBS - 15-057 Białystok</span>
|
<span>Adres Podlaskiego ZBS - 15-057 Białystok</span>
|
||||||
<span>ul. B. Chrobrego 5B m.33</span>
|
<span>ul. B. Chrobrego 5B m.33</span>
|
||||||
<span>Konto: PKO SA O/B-tok 43 1240 5211 1111 0000 4919 1721</span>
|
<span>Konto: PKO SA O/B-tok 43 1240 5211 1111 0000 4919 1721</span>
|
||||||
<span>NIP: 542 258 14 53 REGON 050816091</span>
|
<span>NIP: 542 258 14 53 REGON 050816091</span>
|
||||||
|
</h3>
|
||||||
|
|
||||||
|
<h2 class="mb-2">Członkowie</h2>
|
||||||
|
{% if czlonkowie %}
|
||||||
|
<div class="flex flex-col gap-4 text-center items-center place-items-center">
|
||||||
|
{% for member in czlonkowie %}
|
||||||
|
<h3
|
||||||
|
class="w-screen max-w-screen-lg flex flex-col lg:flex-row-reverse justify-between items-center px-4 py-3 bg-blue-50 border border-blue-100 rounded-md shadow-md my-0"
|
||||||
|
>
|
||||||
|
<span class="text-2xl font-light mb-0">{{ member.function }}</span>
|
||||||
|
<div class="text-left">
|
||||||
|
<span class="text-3xl my-0">{{ member.name }}</span>
|
||||||
|
<br />
|
||||||
|
<span class="text-xs italic">{{ member.contact }}</span>
|
||||||
|
</div>
|
||||||
|
</h3>
|
||||||
|
{% endfor %}
|
||||||
</div>
|
</div>
|
||||||
|
{% else %}
|
||||||
<h1 class="text-3xl">Ogłoszenia</h1>
|
<h4>Brak członków</h4>
|
||||||
{% for file in ogloszenia %}
|
{% endif %} {% endblock %}
|
||||||
<article>
|
|
||||||
<a
|
|
||||||
href="{{ file.attachment.url }}"
|
|
||||||
target="_blank"
|
|
||||||
class="text-xl font-semibold underline"
|
|
||||||
>
|
|
||||||
<h2 class="mb-0">{{ file }}</h2>
|
|
||||||
</a>
|
|
||||||
</article>
|
|
||||||
{% empty %}
|
|
||||||
<span class="py-4 text-xl">Brak ogłoszeń</span>
|
|
||||||
{% endfor %}
|
|
||||||
|
|
||||||
<h1 class="text-3xl">Protokoły / Ustawy</h1>
|
|
||||||
{% for file in protokoly %}
|
|
||||||
<article>
|
|
||||||
<a
|
|
||||||
href="{{ file.attachment.url }}"
|
|
||||||
target="_blank"
|
|
||||||
class="text-xl font-semibold underline"
|
|
||||||
>
|
|
||||||
<h2 class="mb-0">{{ file }}</h2>
|
|
||||||
</a>
|
|
||||||
</article>
|
|
||||||
{% empty %}
|
|
||||||
<span class="py-4 text-xl">Brak protokołów / ustaw</span>
|
|
||||||
{% endfor %}
|
|
||||||
|
|
||||||
<h1 class="text-3xl">Regulaminy</h1>
|
|
||||||
{% for file in regulaminy %}
|
|
||||||
<article>
|
|
||||||
<a
|
|
||||||
href="{{ file.attachment.url }}"
|
|
||||||
target="_blank"
|
|
||||||
class="text-xl font-semibold underline"
|
|
||||||
>
|
|
||||||
<h2 class="mb-0">{{ file }}</h2>
|
|
||||||
</a>
|
|
||||||
</article>
|
|
||||||
{% empty %}
|
|
||||||
<span class="py-4 text-xl">Brak regulaminów</span>
|
|
||||||
{% endfor %}
|
|
||||||
</div>
|
</div>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,20 @@
|
||||||
|
{% extends 'administration.html' %}
|
||||||
|
<!---->
|
||||||
|
{% block title %}Zarząd - Ogłoszenia | pdlzbs{% endblock %}
|
||||||
|
<!---->
|
||||||
|
{% load static tailwind_tags %} {% block adm_content %}
|
||||||
|
<h2>Ogłoszenia zarządu</h2>
|
||||||
|
|
||||||
|
{% if ogloszenia %}
|
||||||
|
<ul>
|
||||||
|
{% for file in ogloszenia %}
|
||||||
|
<li>
|
||||||
|
<a href="{{ file.attachment.url }}" target="_blank">
|
||||||
|
<h3 class="my-0">{{ file }}</h3>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
{% endfor %}
|
||||||
|
</ul>
|
||||||
|
{% else %}
|
||||||
|
<h4>Brak ogłoszeń</h4>
|
||||||
|
{% endif %} {% endblock %}
|
||||||
|
|
@ -0,0 +1,35 @@
|
||||||
|
{% extends 'administration.html' %}
|
||||||
|
<!---->
|
||||||
|
{% block title %}Zarząd - Protokoły i Uchwały | pdlzbs{% endblock %}
|
||||||
|
<!---->
|
||||||
|
{% load static tailwind_tags %} {% block adm_content %}
|
||||||
|
<h2>Protokoły i Uchwały</h2>
|
||||||
|
{% if protokoly %}
|
||||||
|
<table>
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>Dokument</th>
|
||||||
|
<th>Rok</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
{% for file in protokoly %}
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<a
|
||||||
|
href="{{ file.attachment.url }}"
|
||||||
|
target="_blank"
|
||||||
|
class="font-semibold"
|
||||||
|
>{{ file }}</a
|
||||||
|
>
|
||||||
|
<br />
|
||||||
|
<span>{{ file.extra }}</span>
|
||||||
|
</td>
|
||||||
|
<td>{{ file.year }}</td>
|
||||||
|
</tr>
|
||||||
|
{% endfor %}
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
{% else %}
|
||||||
|
<h4>Brak protokołów / ustaw</h4>
|
||||||
|
{% endif %} {% endblock %}
|
||||||
|
|
@ -0,0 +1,19 @@
|
||||||
|
{% extends 'administration.html' %}
|
||||||
|
<!---->
|
||||||
|
{% block title %}Zarząd - Regulaminy | pdlzbs{% endblock %}
|
||||||
|
<!---->
|
||||||
|
{% load static tailwind_tags %} {% block adm_content %}
|
||||||
|
<h2>Regulaminy</h2>
|
||||||
|
{% if regulaminy %}
|
||||||
|
<ul>
|
||||||
|
{% for file in regulaminy %}
|
||||||
|
<li>
|
||||||
|
<a href="{{ file.attachment.url }}" target="_blank">
|
||||||
|
<h3 class="my-0">{{ file }}</h3>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
{% endfor %}
|
||||||
|
</ul>
|
||||||
|
{% else %}
|
||||||
|
<h4>Brak regulaminów</h4>
|
||||||
|
{% endif %} {% endblock %}
|
||||||
|
|
@ -0,0 +1,20 @@
|
||||||
|
{% extends 'administration.html' %}
|
||||||
|
<!---->
|
||||||
|
{% block title %}Zarząd - RODO | pdlzbs {% endblock %}
|
||||||
|
<!---->
|
||||||
|
{% load static tailwind_tags %} {% block adm_content %}
|
||||||
|
<h2>Dokumenty RODO</h2>
|
||||||
|
{% if rodos %}
|
||||||
|
<ul>
|
||||||
|
{% for file in rodos %}
|
||||||
|
<li class="prose-h3:font-normal">
|
||||||
|
<h3 class="my-0 text-center">
|
||||||
|
Informacje o przetwarzaniu danych osobowych zawodników przez
|
||||||
|
<a href="{{ file.attachment.url }}" target="_blank">{{ file.who }}</a>
|
||||||
|
</h3>
|
||||||
|
</li>
|
||||||
|
{% endfor %}
|
||||||
|
</ul>
|
||||||
|
{% else %}
|
||||||
|
<h4>Brak dokumentów</h4>
|
||||||
|
{% endif %} {% endblock %}
|
||||||
|
|
@ -18,13 +18,13 @@
|
||||||
{% tailwind_css %}
|
{% tailwind_css %}
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body class="antialiased flex flex-col gap-4">
|
<body class="antialiased flex flex-col gap-4 bg-stone-50">
|
||||||
<header class="w-full bg-white shadow-lg border-b border-slate-400 pb-1">
|
<header class="w-full bg-white shadow-md border-b border-slate-400 pb-1">
|
||||||
<div class="m-4 container flex flex-col lg:flex-row items-center lg:items-start justify-around mx-auto">
|
<div class="m-4 container flex flex-col lg:flex-row items-center lg:items-start justify-around mx-auto">
|
||||||
<div><img class="min-w-[145px] min-h-[125px]" src="{% static 'logo.webp' %}" alt="Logo" /></div>
|
<div class="self-center"><img class="min-w-[145px] min-h-[125px]" src="{% static 'logo.webp' %}" /></div>
|
||||||
<div class="flex flex-col self-end">
|
<div class="flex flex-col self-end">
|
||||||
<div class="mb-4 mx-auto p-2 text-center">
|
<div class="mb-4 mx-auto p-2 text-center">
|
||||||
<span class="text-4xl">Podlaski Związek Brydża Sportowego</span>
|
<h1 class="text-4xl">Podlaski Związek <br> Brydża Sportowego</h1>
|
||||||
</div>
|
</div>
|
||||||
<nav>
|
<nav>
|
||||||
<ul class="flex flex-wrap justify-center lg:items-end gap-3 text-[15px] leading-5 m-2">
|
<ul class="flex flex-wrap justify-center lg:items-end gap-3 text-[15px] leading-5 m-2">
|
||||||
|
|
@ -39,7 +39,7 @@
|
||||||
</ul>
|
</ul>
|
||||||
</nav>
|
</nav>
|
||||||
</div>
|
</div>
|
||||||
<div class="flex flex-wrap justify-center gap-6 mt-8">
|
<nav class="flex flex-wrap justify-center gap-6 mt-8">
|
||||||
<div title="Cezar">
|
<div title="Cezar">
|
||||||
<a href="http://www.msc.com.pl/cezar" target="_blank"><img class="max-h-12" src="{% static 'cezar.gif' %}" alt="Cezar" /></a>
|
<a href="http://www.msc.com.pl/cezar" target="_blank"><img class="max-h-12" src="{% static 'cezar.gif' %}" alt="Cezar" /></a>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -57,14 +57,14 @@
|
||||||
<div title="Miejski Białostocki Klub Brydżowy">
|
<div title="Miejski Białostocki Klub Brydżowy">
|
||||||
<a href="https://andys0101.wixsite.com/pdlzbs/mbkb" target="_self"><img src="{% static 'mbkb.webp' %}" alt="MBKB" /></a>
|
<a href="https://andys0101.wixsite.com/pdlzbs/mbkb" target="_self"><img src="{% static 'mbkb.webp' %}" alt="MBKB" /></a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</nav>
|
||||||
</div>
|
</div>
|
||||||
</header>
|
</header>
|
||||||
<main class="container mx-auto p-4">
|
<main class="container mx-auto p-4">
|
||||||
{% block content %}{% endblock %}
|
{% block content %}{% endblock %}
|
||||||
</main>
|
</main>
|
||||||
<footer class="footer text-center font-light italic">
|
<footer class="footer text-center font-light italic">
|
||||||
© {% now "Y" %} Mikołaj Kubiczek
|
<h6 class="mb-4">© {% now "Y" %} Mikołaj Kubiczek</h6>
|
||||||
</footer>
|
</footer>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
{% extends 'base.html' %} {% block title %}Strona główna | pdlzbs{% endblock %}
|
{% extends 'base.html' %} {% block title %}Kalendarz | pdlzbs{% endblock %} {%
|
||||||
{% load static tailwind_tags %} {% block content %}
|
load static tailwind_tags %} {% block content %}
|
||||||
<div class="flex flex-col items-center gap-4">
|
<div class="flex flex-col items-center gap-4">
|
||||||
{% for calendar in calendars %}
|
{% for calendar in calendars %}
|
||||||
<article
|
<article
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,7 @@
|
||||||
{% extends 'base.html' %} {% block title %}Strona główna | pdlzbs{% endblock %}
|
{% extends 'base.html' %}
|
||||||
|
<!---->
|
||||||
|
{% block title %}Grand Prix Białegostoku | pdlzbs{% endblock %}
|
||||||
|
<!---->
|
||||||
{% load static tailwind_tags %} {% block content %}
|
{% load static tailwind_tags %} {% block content %}
|
||||||
<article class="w-full">
|
<article class="w-full">
|
||||||
<h1 class="text-[2.25rem] font-extrabold text-center">
|
<h1 class="text-[2.25rem] font-extrabold text-center">
|
||||||
|
|
|
||||||
|
|
@ -1,25 +1,28 @@
|
||||||
{% extends 'base.html' %} {% block title %}Strona główna | pdlzbs{% endblock %}
|
{% extends 'base.html' %} {% block title %}Strona główna | pdlzbs{% endblock %}
|
||||||
{% load static tailwind_tags %} {% block content %}
|
{% load static tailwind_tags %} {% block content %}
|
||||||
<div class="flex flex-col lg:flex-row justify-around gap-4">
|
<div class="flex flex-col lg:flex-row gap-8">
|
||||||
<article class="prose w-full basis-3/5 mb-10">
|
<article
|
||||||
|
class="basis-3/5 mb-auto prose max-w-full bg-white shadow-md rounded-md p-4"
|
||||||
|
>
|
||||||
<h1>Grand Prix Województwa</h1>
|
<h1>Grand Prix Województwa</h1>
|
||||||
{{ gpw.content | safe }}
|
<div class="">{{ gpw.content | safe }}</div>
|
||||||
</article>
|
</article>
|
||||||
<div class="flex flex-col basis-2/5 not-prose">
|
<div class="flex flex-col gap-4">
|
||||||
<h1
|
<h1
|
||||||
class="text-3xl pb-6 mb-4 border-b border-stone-500 border-dashed font-medium"
|
class="text-[2.25rem] font-medium lg:text-right bg-white shadow-md rounded-md px-4 py-2"
|
||||||
>
|
>
|
||||||
Aktualności PodlZBS
|
Aktualności PodlZBS
|
||||||
</h1>
|
</h1>
|
||||||
|
<hr class="border-b border-stone-300 border-dashed" />
|
||||||
{% for post in posts %}
|
{% for post in posts %}
|
||||||
<article
|
<article class="prose max-w-full py-4 bg-white shadow-md rounded-md p-4">
|
||||||
class="prose w-full py-4 {% if forloop.first %} pt-0 {% endif %} {% if not forloop.last %} border-b border-stone-400 {% endif %}"
|
<h2 class="text-center">{{ post.title }}</h2>
|
||||||
>
|
<div>{{ post.content | safe }}</div>
|
||||||
<h2 class="mb-0">{{ post.title }}</h2>
|
|
||||||
{{ post.content | safe }}
|
|
||||||
</article>
|
</article>
|
||||||
{% empty %}
|
{% if not forloop.last %}
|
||||||
<span class="py-4 text-xl">Więcej wpisów nie ma</span>
|
<hr class="border-b border-stone-200" />
|
||||||
|
{% endif %} {% empty %}
|
||||||
|
<h2 class="py-4 text-xl text-center">Więcej wpisów nie ma</h2>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -1,16 +1,24 @@
|
||||||
{% extends 'base.html' %} {% block title %}Strona główna | pdlzbs{% endblock %}
|
{% extends 'base.html' %}
|
||||||
|
<!---->
|
||||||
|
{% block title %}Liga | pdlzbs{% endblock %}
|
||||||
|
<!---->
|
||||||
{% load static tailwind_tags %} {% block content %}
|
{% load static tailwind_tags %} {% block content %}
|
||||||
<div class="flex flex-col items-center gap-4">
|
<h1 class="text-[2.25rem] font-extrabold text-center mb-4">Wyniki III ligi</h1>
|
||||||
|
{% if leagues %}
|
||||||
|
<ul class="flex flex-col items-center gap-4">
|
||||||
{% for league in leagues %}
|
{% for league in leagues %}
|
||||||
<a
|
<li>
|
||||||
href="{{ league.link }}"
|
<a
|
||||||
target="_blank"
|
href="{{ league.link }}"
|
||||||
rel="noreferrer noopener"
|
target="_blank"
|
||||||
class="px-4 py-3 rounded-md shadow-md border border-stone-200 bg-stone-50 hover:border-stone-200 hover:bg-stone-100 font-semibold"
|
rel="noreferrer noopener"
|
||||||
>
|
class="transition ease-in-out duration-300 inline-block px-4 py-3 rounded-md shadow-md border font-semibold {% if forloop.counter0|divisibleby:2 %}border-pink-200 bg-pink-100 hover:border-pink-300 hover:bg-pink-200 {% else %} border-rose-200 bg-rose-100 hover:border-rose-300 hover:bg-rose-200{% endif %}"
|
||||||
Wyniki III ligi DMP {{ league.year }}-{{ league.year | add:"1" }}
|
>
|
||||||
</a>
|
<h2>Wyniki III ligi DMP {{ league.year }}-{{ league.year | add:"1" }}</h2>
|
||||||
{% empty %}
|
</a>
|
||||||
<span class="py-4 text-xl">Brak wyników</span>
|
</li>
|
||||||
{% endfor %} {% endblock %}
|
{% endfor %}
|
||||||
</div>
|
</ul>
|
||||||
|
{% else %}
|
||||||
|
<h2 class="py-4 text-xl text-center">Brak wyników</h2>
|
||||||
|
{% endif %} {% endblock %}
|
||||||
|
|
|
||||||
|
|
@ -1,13 +1,25 @@
|
||||||
{% extends 'base.html' %} {% block title %}Strona główna | pdlzbs{% endblock %}
|
{% extends 'base.html' %}
|
||||||
|
<!---->
|
||||||
|
{% block title %}Składki Członkowskie | pdlzbs{% endblock %}
|
||||||
|
<!---->
|
||||||
{% load static tailwind_tags %} {% block content %}
|
{% load static tailwind_tags %} {% block content %}
|
||||||
<div class="flex flex-col items-center gap-4">
|
<h1 class="text-[2.25rem] font-extrabold text-center mb-4">
|
||||||
|
Składki członkowskie
|
||||||
|
</h1>
|
||||||
|
{% if memberships %}
|
||||||
|
<ul class="flex flex-col items-center gap-4">
|
||||||
{% for membership in memberships %}
|
{% for membership in memberships %}
|
||||||
<article class="prose py-4">
|
<li>
|
||||||
<a href="{{ membership.attachment.url }}" target="_blank">
|
<a
|
||||||
|
href="{{ membership.attachment.url }}"
|
||||||
|
target="_blank"
|
||||||
|
class="transition ease-in-out duration-300 inline-block px-4 py-3 rounded-md shadow-md border font-semibold {% if forloop.counter0|divisibleby:2 %}border-sky-200 bg-sky-100 hover:border-sky-300 hover:bg-sky-200 {% else %} border-indigo-200 bg-indigo-100 hover:border-indigo-300 hover:bg-indigo-200{% endif %}"
|
||||||
|
>
|
||||||
<h2 class="my-0">{{ membership }}</h2>
|
<h2 class="my-0">{{ membership }}</h2>
|
||||||
</a>
|
</a>
|
||||||
</article>
|
</li>
|
||||||
{% empty %}
|
{% endfor %}
|
||||||
<span class="py-4 text-xl">Brak dokumentów</span>
|
</ul>
|
||||||
{% endfor %} {% endblock %}
|
{% else %}
|
||||||
</div>
|
<h2 class="text-xl text-center">Brak dokumentów</h2>
|
||||||
|
{% endif %} {% endblock %}
|
||||||
|
|
|
||||||
|
|
@ -1,15 +0,0 @@
|
||||||
{% extends 'base.html' %} {% block title %}Strona główna | pdlzbs{% endblock %}
|
|
||||||
{% load static tailwind_tags %} {% block content %}
|
|
||||||
<div class="flex flex-col items-center gap-4">
|
|
||||||
{% for rodo in rodos %}
|
|
||||||
<article class="prose py-4">
|
|
||||||
<h2 class="my-0 text-center">
|
|
||||||
Informacje o przetwarzaniu danych osobowych zawodników przez
|
|
||||||
<a href="{{ rodo.attachment.url }}" target="_blank">{{ rodo.who }}</a>
|
|
||||||
</h2>
|
|
||||||
</article>
|
|
||||||
{% empty %}
|
|
||||||
<span class="py-4 text-xl">Brak dokumentów</span>
|
|
||||||
{% endfor %}
|
|
||||||
</div>
|
|
||||||
{% endblock %}
|
|
||||||
|
|
@ -4,7 +4,14 @@ from .views import *
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
path('', HomeView.as_view(), name='home'),
|
path('', HomeView.as_view(), name='home'),
|
||||||
path('zarzad', AdministrationView.as_view(), name='administration'),
|
path('zarzad', AdministrationView.as_view(), name='administration'),
|
||||||
path('rodo', RODOView.as_view(), name='rodo'),
|
path('zarzad/ogloszenia', AdministrationAnnouncementsView.as_view(),
|
||||||
|
name='administration_announcements'),
|
||||||
|
path('zarzad/protokolyiuchwaly', AdministrationProtocolsView.as_view(),
|
||||||
|
name='administration_protocols'),
|
||||||
|
path('zarzad/regulaminy', AdministrationRegulationsView.as_view(),
|
||||||
|
name='administration_regulations'),
|
||||||
|
path('zarzad/rodo', AdministrationRODOView.as_view(),
|
||||||
|
name='administration_rodos'),
|
||||||
path('liga', LeagueView.as_view(), name='league'),
|
path('liga', LeagueView.as_view(), name='league'),
|
||||||
path('kalendarz', CalendarView.as_view(), name='calendar'),
|
path('kalendarz', CalendarView.as_view(), name='calendar'),
|
||||||
path('grandprix', GrandPrixView.as_view(), name='gpx'),
|
path('grandprix', GrandPrixView.as_view(), name='gpx'),
|
||||||
|
|
|
||||||
|
|
@ -35,22 +35,65 @@ class AdministrationView(TemplateView):
|
||||||
|
|
||||||
context = {
|
context = {
|
||||||
**context,
|
**context,
|
||||||
'czlonkowie': AdministrationMember.objects.all(),
|
'czlonkowie': Member.objects.all(),
|
||||||
'statut': AdministrationStatute.objects.first(),
|
'statut': Statute.objects.first(),
|
||||||
'ogloszenia': AdministrationAnnouncement.objects.all(),
|
|
||||||
'protokoly': AdministrationProtocol.objects.all(),
|
|
||||||
'regulaminy': AdministrationRegulation.objects.all(),
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return context
|
return context
|
||||||
|
|
||||||
|
|
||||||
class RODOView(TemplateView):
|
class AdministrationAnnouncementsView(TemplateView):
|
||||||
template_name = 'rodo.html'
|
template_name = 'administration/announcements.html'
|
||||||
|
|
||||||
def get_context_data(self, **kwargs):
|
def get_context_data(self, **kwargs):
|
||||||
context = super().get_context_data(**kwargs)
|
context = super().get_context_data(**kwargs)
|
||||||
context['rodos'] = RODO.objects.all()
|
|
||||||
|
context = {
|
||||||
|
**context,
|
||||||
|
'ogloszenia': Announcement.objects.all(),
|
||||||
|
}
|
||||||
|
|
||||||
|
return context
|
||||||
|
|
||||||
|
|
||||||
|
class AdministrationProtocolsView(TemplateView):
|
||||||
|
template_name = 'administration/protocols.html'
|
||||||
|
|
||||||
|
def get_context_data(self, **kwargs):
|
||||||
|
context = super().get_context_data(**kwargs)
|
||||||
|
|
||||||
|
context = {
|
||||||
|
**context,
|
||||||
|
'protokoly': Protocol.objects.all(),
|
||||||
|
}
|
||||||
|
|
||||||
|
return context
|
||||||
|
|
||||||
|
|
||||||
|
class AdministrationRegulationsView(TemplateView):
|
||||||
|
template_name = 'administration/regulations.html'
|
||||||
|
|
||||||
|
def get_context_data(self, **kwargs):
|
||||||
|
context = super().get_context_data(**kwargs)
|
||||||
|
|
||||||
|
context = {
|
||||||
|
**context,
|
||||||
|
'regulaminy': Regulation.objects.all(),
|
||||||
|
}
|
||||||
|
|
||||||
|
return context
|
||||||
|
|
||||||
|
|
||||||
|
class AdministrationRODOView(TemplateView):
|
||||||
|
template_name = 'administration/rodos.html'
|
||||||
|
|
||||||
|
def get_context_data(self, **kwargs):
|
||||||
|
context = super().get_context_data(**kwargs)
|
||||||
|
|
||||||
|
context = {
|
||||||
|
**context,
|
||||||
|
'rodos': RODO.objects.all(),
|
||||||
|
}
|
||||||
|
|
||||||
return context
|
return context
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -5,9 +5,31 @@ from .models import *
|
||||||
# Register your models here.
|
# Register your models here.
|
||||||
|
|
||||||
|
|
||||||
@admin.register(AdministrationMember)
|
@admin.register(Member)
|
||||||
class AdministrationMemberModelAdmin(OrderableAdmin, admin.ModelAdmin):
|
class MemberModelAdmin(OrderableAdmin, admin.ModelAdmin):
|
||||||
list_display = ['__str__', 'ordering']
|
list_display = ['__str__', 'ordering']
|
||||||
list_editable = ['ordering']
|
list_editable = ['ordering']
|
||||||
ordering_field_hide_input = True
|
ordering_field_hide_input = True
|
||||||
exclude = ['ordering']
|
exclude = ['ordering']
|
||||||
|
|
||||||
|
|
||||||
|
class OrderableModelAdmin(OrderableAdmin, admin.ModelAdmin):
|
||||||
|
list_display = ['title', 'year', 'ordering']
|
||||||
|
list_editable = ['ordering']
|
||||||
|
ordering_field_hide_input = True
|
||||||
|
exclude = ['ordering']
|
||||||
|
|
||||||
|
|
||||||
|
@admin.register(Announcement)
|
||||||
|
class AnnouncementModelAdmin(OrderableModelAdmin):
|
||||||
|
list_display = ['title', 'ordering']
|
||||||
|
|
||||||
|
|
||||||
|
@admin.register(Protocol)
|
||||||
|
class ProtocolModelAdmin(OrderableModelAdmin):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
@admin.register(Regulation)
|
||||||
|
class RegulationModelAdmin(OrderableModelAdmin):
|
||||||
|
list_display = ['title', 'ordering']
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,90 @@
|
||||||
|
# Generated by Django 4.0.5 on 2022-07-23 21:27
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('administration', '0001_initial'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='Announcement',
|
||||||
|
fields=[
|
||||||
|
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||||
|
('year', models.IntegerField(blank=True, null=True, verbose_name='Rok')),
|
||||||
|
('title', models.CharField(max_length=250, verbose_name='Tytuł')),
|
||||||
|
('created_at', models.DateTimeField(auto_now_add=True)),
|
||||||
|
('attachment', models.FileField(upload_to='zarzad_ogloszenia', verbose_name='Plik pdf')),
|
||||||
|
],
|
||||||
|
options={
|
||||||
|
'verbose_name': 'Ogłoszenie',
|
||||||
|
'verbose_name_plural': 'Ogłoszenia',
|
||||||
|
},
|
||||||
|
),
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='Protocol',
|
||||||
|
fields=[
|
||||||
|
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||||
|
('year', models.IntegerField(blank=True, null=True, verbose_name='Rok')),
|
||||||
|
('title', models.CharField(max_length=250, verbose_name='Tytuł')),
|
||||||
|
('created_at', models.DateTimeField(auto_now_add=True)),
|
||||||
|
('attachment', models.FileField(upload_to='zarzad_protokolyuchwaly', verbose_name='Plik pdf')),
|
||||||
|
],
|
||||||
|
options={
|
||||||
|
'verbose_name': 'Protokół / Uchwała',
|
||||||
|
'verbose_name_plural': 'Protokoły / Uchwały',
|
||||||
|
},
|
||||||
|
),
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='Regulation',
|
||||||
|
fields=[
|
||||||
|
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||||
|
('year', models.IntegerField(blank=True, null=True, verbose_name='Rok')),
|
||||||
|
('title', models.CharField(max_length=250, verbose_name='Tytuł')),
|
||||||
|
('created_at', models.DateTimeField(auto_now_add=True)),
|
||||||
|
('attachment', models.FileField(upload_to='zarzad_regulaminy', verbose_name='Plik pdf')),
|
||||||
|
],
|
||||||
|
options={
|
||||||
|
'verbose_name': 'Regulamin',
|
||||||
|
'verbose_name_plural': 'Regulaminy',
|
||||||
|
},
|
||||||
|
),
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='Statute',
|
||||||
|
fields=[
|
||||||
|
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||||
|
('year', models.IntegerField(blank=True, null=True, verbose_name='Rok')),
|
||||||
|
('title', models.CharField(max_length=250, verbose_name='Tytuł')),
|
||||||
|
('created_at', models.DateTimeField(auto_now_add=True)),
|
||||||
|
('attachment', models.FileField(upload_to='zarzad_statuty', verbose_name='Plik pdf')),
|
||||||
|
],
|
||||||
|
options={
|
||||||
|
'verbose_name': 'Statut',
|
||||||
|
'verbose_name_plural': 'Statuty',
|
||||||
|
},
|
||||||
|
),
|
||||||
|
migrations.RenameModel(
|
||||||
|
old_name='AdministrationMember',
|
||||||
|
new_name='Member',
|
||||||
|
),
|
||||||
|
migrations.DeleteModel(
|
||||||
|
name='AdministrationAnnouncement',
|
||||||
|
),
|
||||||
|
migrations.DeleteModel(
|
||||||
|
name='AdministrationProtocol',
|
||||||
|
),
|
||||||
|
migrations.DeleteModel(
|
||||||
|
name='AdministrationRegulation',
|
||||||
|
),
|
||||||
|
migrations.DeleteModel(
|
||||||
|
name='AdministrationStatute',
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='rodo',
|
||||||
|
name='attachment',
|
||||||
|
field=models.FileField(upload_to='zarzad_rodo', verbose_name='Plik pdf'),
|
||||||
|
),
|
||||||
|
]
|
||||||
|
|
@ -0,0 +1,34 @@
|
||||||
|
# Generated by Django 4.0.5 on 2022-07-23 21:33
|
||||||
|
|
||||||
|
import db.administration.models
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('administration', '0002_announcement_protocol_regulation_statute_and_more'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='announcement',
|
||||||
|
name='attachment',
|
||||||
|
field=models.FileField(upload_to=db.administration.models.AttachmentModel._upload_to, verbose_name='Plik pdf'),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='protocol',
|
||||||
|
name='attachment',
|
||||||
|
field=models.FileField(upload_to=db.administration.models.AttachmentModel._upload_to, verbose_name='Plik pdf'),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='regulation',
|
||||||
|
name='attachment',
|
||||||
|
field=models.FileField(upload_to=db.administration.models.AttachmentModel._upload_to, verbose_name='Plik pdf'),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='statute',
|
||||||
|
name='attachment',
|
||||||
|
field=models.FileField(upload_to=db.administration.models.AttachmentModel._upload_to, verbose_name='Plik pdf'),
|
||||||
|
),
|
||||||
|
]
|
||||||
|
|
@ -0,0 +1,49 @@
|
||||||
|
# Generated by Django 4.0.5 on 2022-07-23 21:57
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('administration', '0003_alter_announcement_attachment_and_more'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AlterModelOptions(
|
||||||
|
name='announcement',
|
||||||
|
options={'ordering': ['ordering'], 'verbose_name': 'Ogłoszenie', 'verbose_name_plural': 'Ogłoszenia'},
|
||||||
|
),
|
||||||
|
migrations.AlterModelOptions(
|
||||||
|
name='protocol',
|
||||||
|
options={'ordering': ['ordering'], 'verbose_name': 'Protokół / Uchwała', 'verbose_name_plural': 'Protokoły / Uchwały'},
|
||||||
|
),
|
||||||
|
migrations.AlterModelOptions(
|
||||||
|
name='regulation',
|
||||||
|
options={'ordering': ['ordering'], 'verbose_name': 'Regulamin', 'verbose_name_plural': 'Regulaminy'},
|
||||||
|
),
|
||||||
|
migrations.AlterModelOptions(
|
||||||
|
name='statute',
|
||||||
|
options={'ordering': ['ordering'], 'verbose_name': 'Statut', 'verbose_name_plural': 'Statuty'},
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='announcement',
|
||||||
|
name='ordering',
|
||||||
|
field=models.PositiveIntegerField(default=0, verbose_name='ordering'),
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='protocol',
|
||||||
|
name='ordering',
|
||||||
|
field=models.PositiveIntegerField(default=0, verbose_name='ordering'),
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='regulation',
|
||||||
|
name='ordering',
|
||||||
|
field=models.PositiveIntegerField(default=0, verbose_name='ordering'),
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='statute',
|
||||||
|
name='ordering',
|
||||||
|
field=models.PositiveIntegerField(default=0, verbose_name='ordering'),
|
||||||
|
),
|
||||||
|
]
|
||||||
|
|
@ -0,0 +1,38 @@
|
||||||
|
# Generated by Django 4.0.5 on 2022-07-23 22:02
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('administration', '0004_alter_announcement_options_alter_protocol_options_and_more'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='announcement',
|
||||||
|
name='ordering',
|
||||||
|
field=models.PositiveIntegerField(default=0, verbose_name='Kolejność'),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='member',
|
||||||
|
name='ordering',
|
||||||
|
field=models.PositiveIntegerField(default=0, verbose_name='Kolejność'),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='protocol',
|
||||||
|
name='ordering',
|
||||||
|
field=models.PositiveIntegerField(default=0, verbose_name='Kolejność'),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='regulation',
|
||||||
|
name='ordering',
|
||||||
|
field=models.PositiveIntegerField(default=0, verbose_name='Kolejność'),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='statute',
|
||||||
|
name='ordering',
|
||||||
|
field=models.PositiveIntegerField(default=0, verbose_name='Kolejność'),
|
||||||
|
),
|
||||||
|
]
|
||||||
|
|
@ -0,0 +1,54 @@
|
||||||
|
# Generated by Django 4.0.5 on 2022-07-23 22:41
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('administration', '0005_alter_announcement_ordering_alter_member_ordering_and_more'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AlterModelOptions(
|
||||||
|
name='announcement',
|
||||||
|
options={'ordering': ['-year', 'ordering'], 'verbose_name': 'Ogłoszenie', 'verbose_name_plural': 'Ogłoszenia'},
|
||||||
|
),
|
||||||
|
migrations.AlterModelOptions(
|
||||||
|
name='protocol',
|
||||||
|
options={'ordering': ['-year', 'ordering'], 'verbose_name': 'Protokół / Uchwała', 'verbose_name_plural': 'Protokoły / Uchwały'},
|
||||||
|
),
|
||||||
|
migrations.AlterModelOptions(
|
||||||
|
name='regulation',
|
||||||
|
options={'ordering': ['-year', 'ordering'], 'verbose_name': 'Regulamin', 'verbose_name_plural': 'Regulaminy'},
|
||||||
|
),
|
||||||
|
migrations.AlterModelOptions(
|
||||||
|
name='statute',
|
||||||
|
options={'ordering': ['-year', 'ordering'], 'verbose_name': 'Statut', 'verbose_name_plural': 'Statuty'},
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='announcement',
|
||||||
|
name='ordering',
|
||||||
|
field=models.IntegerField(default=0, verbose_name='Kolejność'),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='member',
|
||||||
|
name='ordering',
|
||||||
|
field=models.IntegerField(default=0, verbose_name='Kolejność'),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='protocol',
|
||||||
|
name='ordering',
|
||||||
|
field=models.IntegerField(default=0, verbose_name='Kolejność'),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='regulation',
|
||||||
|
name='ordering',
|
||||||
|
field=models.IntegerField(default=0, verbose_name='Kolejność'),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='statute',
|
||||||
|
name='ordering',
|
||||||
|
field=models.IntegerField(default=0, verbose_name='Kolejność'),
|
||||||
|
),
|
||||||
|
]
|
||||||
|
|
@ -0,0 +1,29 @@
|
||||||
|
# Generated by Django 4.0.5 on 2022-07-23 22:53
|
||||||
|
|
||||||
|
from django.db import migrations
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('administration', '0006_alter_announcement_options_alter_protocol_options_and_more'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AlterModelOptions(
|
||||||
|
name='announcement',
|
||||||
|
options={'ordering': ['ordering'], 'verbose_name': 'Ogłoszenie', 'verbose_name_plural': 'Ogłoszenia'},
|
||||||
|
),
|
||||||
|
migrations.AlterModelOptions(
|
||||||
|
name='regulation',
|
||||||
|
options={'ordering': ['ordering'], 'verbose_name': 'Regulamin', 'verbose_name_plural': 'Regulaminy'},
|
||||||
|
),
|
||||||
|
migrations.RemoveField(
|
||||||
|
model_name='announcement',
|
||||||
|
name='year',
|
||||||
|
),
|
||||||
|
migrations.RemoveField(
|
||||||
|
model_name='regulation',
|
||||||
|
name='year',
|
||||||
|
),
|
||||||
|
]
|
||||||
|
|
@ -0,0 +1,34 @@
|
||||||
|
# Generated by Django 4.0.5 on 2022-07-23 22:58
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('administration', '0007_alter_announcement_options_alter_regulation_options_and_more'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AlterModelOptions(
|
||||||
|
name='statute',
|
||||||
|
options={'verbose_name': 'Statut', 'verbose_name_plural': 'Statut'},
|
||||||
|
),
|
||||||
|
migrations.RemoveField(
|
||||||
|
model_name='statute',
|
||||||
|
name='created_at',
|
||||||
|
),
|
||||||
|
migrations.RemoveField(
|
||||||
|
model_name='statute',
|
||||||
|
name='ordering',
|
||||||
|
),
|
||||||
|
migrations.RemoveField(
|
||||||
|
model_name='statute',
|
||||||
|
name='year',
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='statute',
|
||||||
|
name='attachment',
|
||||||
|
field=models.FileField(upload_to='zarzad_statuty', verbose_name='Plik pdf'),
|
||||||
|
),
|
||||||
|
]
|
||||||
|
|
@ -0,0 +1,18 @@
|
||||||
|
# Generated by Django 4.0.5 on 2022-07-23 23:47
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('administration', '0008_alter_statute_options_remove_statute_created_at_and_more'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='protocol',
|
||||||
|
name='extra',
|
||||||
|
field=models.TextField(blank=True, default='', verbose_name='Dodatkowy opis'),
|
||||||
|
),
|
||||||
|
]
|
||||||
|
|
@ -1,55 +1,36 @@
|
||||||
from django.db import models
|
from django.db import models
|
||||||
from admin_ordering.models import OrderableModel
|
from admin_ordering.models import OrderableModel
|
||||||
|
from core.utils import SingletonModel
|
||||||
|
|
||||||
# Create your models here.
|
# Create your models here.
|
||||||
|
|
||||||
|
|
||||||
class AttachmentModel(models.Model):
|
class AttachmentModel(OrderableModel):
|
||||||
year = models.IntegerField('Rok', blank=True, null=True)
|
upload_to = 'zalaczniki'
|
||||||
title = models.CharField('Tytuł', max_length=250)
|
title = models.CharField('Tytuł', max_length=250)
|
||||||
created_at = models.DateTimeField(auto_now_add=True)
|
created_at = models.DateTimeField(auto_now_add=True)
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return self.title
|
return self.title
|
||||||
|
|
||||||
class Meta:
|
def _upload_to(self, filename):
|
||||||
|
return f'zarzad_{self.upload_to}/{filename}'
|
||||||
|
|
||||||
|
attachment = models.FileField('Plik pdf', upload_to=_upload_to)
|
||||||
|
|
||||||
|
class Meta(OrderableModel.Meta):
|
||||||
abstract = True
|
abstract = True
|
||||||
ordering = ['-created_at']
|
|
||||||
|
|
||||||
|
|
||||||
class AdministrationStatute(AttachmentModel):
|
class Announcement(AttachmentModel):
|
||||||
attachment = models.FileField('Plik pdf', upload_to='statutes')
|
upload_to = 'ogloszenia'
|
||||||
|
|
||||||
class Meta:
|
class Meta(OrderableModel.Meta):
|
||||||
verbose_name = 'Statut'
|
|
||||||
verbose_name_plural = 'Statuty'
|
|
||||||
|
|
||||||
|
|
||||||
class AdministrationAnnouncement(AttachmentModel):
|
|
||||||
attachment = models.FileField('Plik pdf', upload_to='announcements')
|
|
||||||
|
|
||||||
class Meta:
|
|
||||||
verbose_name = 'Ogłoszenie'
|
verbose_name = 'Ogłoszenie'
|
||||||
verbose_name_plural = 'Ogłoszenia'
|
verbose_name_plural = 'Ogłoszenia'
|
||||||
|
|
||||||
|
|
||||||
class AdministrationProtocol(AttachmentModel):
|
class Member(OrderableModel):
|
||||||
attachment = models.FileField('Plik pdf', upload_to='protocols')
|
|
||||||
|
|
||||||
class Meta:
|
|
||||||
verbose_name = 'Protokół / Uchwała'
|
|
||||||
verbose_name_plural = 'Protokoły / Uchwały'
|
|
||||||
|
|
||||||
|
|
||||||
class AdministrationRegulation(AttachmentModel):
|
|
||||||
attachment = models.FileField('Plik pdf', upload_to='regulations')
|
|
||||||
|
|
||||||
class Meta:
|
|
||||||
verbose_name = 'Regulamin'
|
|
||||||
verbose_name_plural = 'Regulaminy'
|
|
||||||
|
|
||||||
|
|
||||||
class AdministrationMember(OrderableModel):
|
|
||||||
name = models.CharField('Imię i nazwisko', max_length=512)
|
name = models.CharField('Imię i nazwisko', max_length=512)
|
||||||
contact = models.CharField('Dane kontaktowe', max_length=512)
|
contact = models.CharField('Dane kontaktowe', max_length=512)
|
||||||
function = models.CharField('Funkcja', max_length=512)
|
function = models.CharField('Funkcja', max_length=512)
|
||||||
|
|
@ -62,10 +43,29 @@ class AdministrationMember(OrderableModel):
|
||||||
verbose_name_plural = 'Członkowie'
|
verbose_name_plural = 'Członkowie'
|
||||||
|
|
||||||
|
|
||||||
|
class Protocol(AttachmentModel):
|
||||||
|
upload_to = 'protokolyuchwaly'
|
||||||
|
extra = models.TextField('Dodatkowy opis', default='', blank=True)
|
||||||
|
year = models.IntegerField('Rok', blank=True, null=True)
|
||||||
|
|
||||||
|
class Meta(OrderableModel.Meta):
|
||||||
|
verbose_name = 'Protokół / Uchwała'
|
||||||
|
verbose_name_plural = 'Protokoły / Uchwały'
|
||||||
|
ordering = ['-year', 'ordering']
|
||||||
|
|
||||||
|
|
||||||
|
class Regulation(AttachmentModel):
|
||||||
|
upload_to = 'regulaminy'
|
||||||
|
|
||||||
|
class Meta(OrderableModel.Meta):
|
||||||
|
verbose_name = 'Regulamin'
|
||||||
|
verbose_name_plural = 'Regulaminy'
|
||||||
|
|
||||||
|
|
||||||
class RODO(models.Model):
|
class RODO(models.Model):
|
||||||
who = models.CharField(
|
who = models.CharField(
|
||||||
'Przez kogo przetwarzane dane osobowe?', max_length=512)
|
'Przez kogo przetwarzane dane osobowe?', max_length=512)
|
||||||
attachment = models.FileField('Plik pdf', upload_to='rodo')
|
attachment = models.FileField('Plik pdf', upload_to='zarzad_rodo')
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return f'RODO - {self.who}'
|
return f'RODO - {self.who}'
|
||||||
|
|
@ -73,3 +73,15 @@ class RODO(models.Model):
|
||||||
class Meta:
|
class Meta:
|
||||||
verbose_name = 'Dokument RODO'
|
verbose_name = 'Dokument RODO'
|
||||||
verbose_name_plural = 'Dokumenty RODO'
|
verbose_name_plural = 'Dokumenty RODO'
|
||||||
|
|
||||||
|
|
||||||
|
class Statute(SingletonModel):
|
||||||
|
title = models.CharField('Tytuł', max_length=250)
|
||||||
|
attachment = models.FileField('Plik pdf', upload_to='zarzad_statuty')
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
return self.title
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
verbose_name = 'Statut'
|
||||||
|
verbose_name_plural = 'Statut'
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,5 @@ django-browser-reload
|
||||||
django-tailwind
|
django-tailwind
|
||||||
django-tinymce
|
django-tinymce
|
||||||
django-filebrowser-no-grappelli
|
django-filebrowser-no-grappelli
|
||||||
django-admin-ordering
|
|
||||||
django-htmlmin
|
django-htmlmin
|
||||||
django-cleanup
|
django-cleanup
|
||||||
|
|
@ -1083,39 +1083,88 @@ select {
|
||||||
|
|
||||||
.nav-item > a {
|
.nav-item > a {
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
|
border-radius: 0.375rem;
|
||||||
border-width: 1px;
|
border-width: 1px;
|
||||||
border-color: rgb(167 243 208 / var(--tw-border-opacity));
|
border-color: rgb(187 247 208 / var(--tw-border-opacity));
|
||||||
--tw-border-opacity: 1;
|
--tw-border-opacity: 1;
|
||||||
border-top-color: rgb(16 185 129 / var(--tw-border-opacity));
|
border-bottom-color: rgb(34 197 94 / var(--tw-border-opacity));
|
||||||
--tw-bg-opacity: 1;
|
--tw-bg-opacity: 1;
|
||||||
background-color: rgb(209 250 229 / var(--tw-bg-opacity));
|
background-color: rgb(220 252 231 / var(--tw-bg-opacity));
|
||||||
padding-left: 0.5rem;
|
padding-left: 0.5rem;
|
||||||
padding-right: 0.5rem;
|
padding-right: 0.5rem;
|
||||||
padding-top: 10px;
|
padding-bottom: 10px;
|
||||||
padding-bottom: 0.5rem;
|
padding-top: 0.5rem;
|
||||||
--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);
|
--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);
|
||||||
--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);
|
--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);
|
||||||
box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
|
box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
|
||||||
|
transition-property: color, background-color, border-color, fill, stroke, opacity, box-shadow, transform, filter, -webkit-text-decoration-color, -webkit-backdrop-filter;
|
||||||
|
transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter;
|
||||||
|
transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter, -webkit-text-decoration-color, -webkit-backdrop-filter;
|
||||||
|
transition-duration: 300ms;
|
||||||
|
transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
.nav-item > a:hover {
|
.nav-item > a:hover {
|
||||||
border-top-width: 4px;
|
border-bottom-width: 4px;
|
||||||
border-color: rgb(110 231 183 / var(--tw-border-opacity));
|
border-color: rgb(134 239 172 / var(--tw-border-opacity));
|
||||||
--tw-border-opacity: 1;
|
--tw-border-opacity: 1;
|
||||||
border-top-color: rgb(5 150 105 / var(--tw-border-opacity));
|
border-bottom-color: rgb(22 163 74 / var(--tw-border-opacity));
|
||||||
--tw-bg-opacity: 1;
|
--tw-bg-opacity: 1;
|
||||||
background-color: rgb(167 243 208 / var(--tw-bg-opacity));
|
background-color: rgb(187 247 208 / var(--tw-bg-opacity));
|
||||||
padding-top: 7px;
|
padding-bottom: 7px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.active > a {
|
.active > a {
|
||||||
border-top-width: 4px;
|
border-bottom-width: 4px;
|
||||||
border-color: rgb(110 231 183 / var(--tw-border-opacity));
|
border-color: rgb(134 239 172 / var(--tw-border-opacity));
|
||||||
--tw-border-opacity: 1;
|
--tw-border-opacity: 1;
|
||||||
border-top-color: rgb(5 150 105 / var(--tw-border-opacity));
|
border-bottom-color: rgb(22 163 74 / var(--tw-border-opacity));
|
||||||
--tw-bg-opacity: 1;
|
--tw-bg-opacity: 1;
|
||||||
background-color: rgb(110 231 183 / var(--tw-bg-opacity));
|
background-color: rgb(134 239 172 / var(--tw-bg-opacity));
|
||||||
padding-top: 7px;
|
padding-bottom: 7px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.adm_nav-item > a {
|
||||||
|
display: inline-block;
|
||||||
|
border-radius: 0.375rem;
|
||||||
|
border-width: 1px;
|
||||||
|
border-color: rgb(191 219 254 / var(--tw-border-opacity));
|
||||||
|
--tw-border-opacity: 1;
|
||||||
|
border-bottom-color: rgb(59 130 246 / var(--tw-border-opacity));
|
||||||
|
--tw-bg-opacity: 1;
|
||||||
|
background-color: rgb(219 234 254 / var(--tw-bg-opacity));
|
||||||
|
padding-left: 0.5rem;
|
||||||
|
padding-right: 0.5rem;
|
||||||
|
padding-bottom: 10px;
|
||||||
|
padding-top: 0.5rem;
|
||||||
|
--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);
|
||||||
|
--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);
|
||||||
|
box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
|
||||||
|
transition-property: color, background-color, border-color, fill, stroke, opacity, box-shadow, transform, filter, -webkit-text-decoration-color, -webkit-backdrop-filter;
|
||||||
|
transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter;
|
||||||
|
transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter, -webkit-text-decoration-color, -webkit-backdrop-filter;
|
||||||
|
transition-duration: 300ms;
|
||||||
|
transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
.adm_nav-item > a:hover {
|
||||||
|
border-bottom-width: 4px;
|
||||||
|
border-color: rgb(147 197 253 / var(--tw-border-opacity));
|
||||||
|
--tw-border-opacity: 1;
|
||||||
|
border-bottom-color: rgb(37 99 235 / var(--tw-border-opacity));
|
||||||
|
--tw-bg-opacity: 1;
|
||||||
|
background-color: rgb(191 219 254 / var(--tw-bg-opacity));
|
||||||
|
padding-bottom: 7px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.adm_active > a {
|
||||||
|
border-bottom-width: 4px;
|
||||||
|
border-color: rgb(147 197 253 / var(--tw-border-opacity));
|
||||||
|
--tw-border-opacity: 1;
|
||||||
|
border-bottom-color: rgb(37 99 235 / var(--tw-border-opacity));
|
||||||
|
--tw-bg-opacity: 1;
|
||||||
|
background-color: rgb(147 197 253 / var(--tw-bg-opacity));
|
||||||
|
padding-bottom: 7px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.sr-only {
|
.sr-only {
|
||||||
|
|
@ -1165,6 +1214,15 @@ select {
|
||||||
margin-bottom: 0px;
|
margin-bottom: 0px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.my-4 {
|
||||||
|
margin-top: 1rem;
|
||||||
|
margin-bottom: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mb-2 {
|
||||||
|
margin-bottom: 0.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
.mb-0 {
|
.mb-0 {
|
||||||
margin-bottom: 0px;
|
margin-bottom: 0px;
|
||||||
}
|
}
|
||||||
|
|
@ -1181,10 +1239,34 @@ select {
|
||||||
margin-bottom: 2.5rem;
|
margin-bottom: 2.5rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.mb-6 {
|
||||||
|
margin-bottom: 1.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mb-8 {
|
||||||
|
margin-bottom: 2rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mt-0 {
|
||||||
|
margin-top: 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mb-auto {
|
||||||
|
margin-bottom: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.box-content {
|
||||||
|
box-sizing: content-box;
|
||||||
|
}
|
||||||
|
|
||||||
.block {
|
.block {
|
||||||
display: block;
|
display: block;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.inline-block {
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
|
||||||
.inline {
|
.inline {
|
||||||
display: inline;
|
display: inline;
|
||||||
}
|
}
|
||||||
|
|
@ -1209,10 +1291,6 @@ select {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
.h-screen {
|
|
||||||
height: 100vh;
|
|
||||||
}
|
|
||||||
|
|
||||||
.h-\[40px\] {
|
.h-\[40px\] {
|
||||||
height: 40px;
|
height: 40px;
|
||||||
}
|
}
|
||||||
|
|
@ -1221,6 +1299,14 @@ select {
|
||||||
height: 100%;
|
height: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.h-screen {
|
||||||
|
height: 100vh;
|
||||||
|
}
|
||||||
|
|
||||||
|
.h-auto {
|
||||||
|
height: auto;
|
||||||
|
}
|
||||||
|
|
||||||
.max-h-12 {
|
.max-h-12 {
|
||||||
max-height: 3rem;
|
max-height: 3rem;
|
||||||
}
|
}
|
||||||
|
|
@ -1229,6 +1315,10 @@ select {
|
||||||
min-height: 125px;
|
min-height: 125px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.w-screen {
|
||||||
|
width: 100vw;
|
||||||
|
}
|
||||||
|
|
||||||
.w-full {
|
.w-full {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
}
|
}
|
||||||
|
|
@ -1241,6 +1331,18 @@ select {
|
||||||
min-width: 145px;
|
min-width: 145px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.max-w-screen-lg {
|
||||||
|
max-width: 1024px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.max-w-full {
|
||||||
|
max-width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.grow-0 {
|
||||||
|
flex-grow: 0;
|
||||||
|
}
|
||||||
|
|
||||||
.basis-3\/5 {
|
.basis-3\/5 {
|
||||||
flex-basis: 60%;
|
flex-basis: 60%;
|
||||||
}
|
}
|
||||||
|
|
@ -1249,6 +1351,18 @@ select {
|
||||||
flex-basis: 40%;
|
flex-basis: 40%;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.basis-1\/2 {
|
||||||
|
flex-basis: 50%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.basis-1 {
|
||||||
|
flex-basis: 0.25rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.basis-full {
|
||||||
|
flex-basis: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
.border-collapse {
|
.border-collapse {
|
||||||
border-collapse: collapse;
|
border-collapse: collapse;
|
||||||
}
|
}
|
||||||
|
|
@ -1281,26 +1395,42 @@ select {
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.justify-between {
|
||||||
|
justify-content: space-between;
|
||||||
|
}
|
||||||
|
|
||||||
.justify-around {
|
.justify-around {
|
||||||
justify-content: space-around;
|
justify-content: space-around;
|
||||||
}
|
}
|
||||||
|
|
||||||
.gap-4 {
|
|
||||||
gap: 1rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.gap-3 {
|
|
||||||
gap: 0.75rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.gap-6 {
|
.gap-6 {
|
||||||
gap: 1.5rem;
|
gap: 1.5rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.gap-3 {
|
||||||
|
gap: 0.75rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.gap-4 {
|
||||||
|
gap: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.gap-8 {
|
||||||
|
gap: 2rem;
|
||||||
|
}
|
||||||
|
|
||||||
.self-end {
|
.self-end {
|
||||||
align-self: flex-end;
|
align-self: flex-end;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.self-center {
|
||||||
|
align-self: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.rounded-lg {
|
||||||
|
border-radius: 0.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
.rounded-md {
|
.rounded-md {
|
||||||
border-radius: 0.375rem;
|
border-radius: 0.375rem;
|
||||||
}
|
}
|
||||||
|
|
@ -1337,9 +1467,44 @@ select {
|
||||||
border-color: rgb(168 162 158 / var(--tw-border-opacity));
|
border-color: rgb(168 162 158 / var(--tw-border-opacity));
|
||||||
}
|
}
|
||||||
|
|
||||||
.bg-gray-50 {
|
.border-rose-200 {
|
||||||
--tw-bg-opacity: 1;
|
--tw-border-opacity: 1;
|
||||||
background-color: rgb(249 250 251 / var(--tw-bg-opacity));
|
border-color: rgb(254 205 211 / var(--tw-border-opacity));
|
||||||
|
}
|
||||||
|
|
||||||
|
.border-pink-200 {
|
||||||
|
--tw-border-opacity: 1;
|
||||||
|
border-color: rgb(251 207 232 / var(--tw-border-opacity));
|
||||||
|
}
|
||||||
|
|
||||||
|
.border-indigo-200 {
|
||||||
|
--tw-border-opacity: 1;
|
||||||
|
border-color: rgb(199 210 254 / var(--tw-border-opacity));
|
||||||
|
}
|
||||||
|
|
||||||
|
.border-sky-200 {
|
||||||
|
--tw-border-opacity: 1;
|
||||||
|
border-color: rgb(186 230 253 / var(--tw-border-opacity));
|
||||||
|
}
|
||||||
|
|
||||||
|
.border-blue-400 {
|
||||||
|
--tw-border-opacity: 1;
|
||||||
|
border-color: rgb(96 165 250 / var(--tw-border-opacity));
|
||||||
|
}
|
||||||
|
|
||||||
|
.border-blue-200 {
|
||||||
|
--tw-border-opacity: 1;
|
||||||
|
border-color: rgb(191 219 254 / var(--tw-border-opacity));
|
||||||
|
}
|
||||||
|
|
||||||
|
.border-blue-100 {
|
||||||
|
--tw-border-opacity: 1;
|
||||||
|
border-color: rgb(219 234 254 / var(--tw-border-opacity));
|
||||||
|
}
|
||||||
|
|
||||||
|
.border-stone-300 {
|
||||||
|
--tw-border-opacity: 1;
|
||||||
|
border-color: rgb(214 211 209 / var(--tw-border-opacity));
|
||||||
}
|
}
|
||||||
|
|
||||||
.bg-white {
|
.bg-white {
|
||||||
|
|
@ -1347,22 +1512,52 @@ select {
|
||||||
background-color: rgb(255 255 255 / var(--tw-bg-opacity));
|
background-color: rgb(255 255 255 / var(--tw-bg-opacity));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.bg-cyan-50 {
|
||||||
|
--tw-bg-opacity: 1;
|
||||||
|
background-color: rgb(236 254 255 / var(--tw-bg-opacity));
|
||||||
|
}
|
||||||
|
|
||||||
.bg-stone-50 {
|
.bg-stone-50 {
|
||||||
--tw-bg-opacity: 1;
|
--tw-bg-opacity: 1;
|
||||||
background-color: rgb(250 250 249 / var(--tw-bg-opacity));
|
background-color: rgb(250 250 249 / var(--tw-bg-opacity));
|
||||||
}
|
}
|
||||||
|
|
||||||
.p-2 {
|
.bg-pink-100 {
|
||||||
padding: 0.5rem;
|
--tw-bg-opacity: 1;
|
||||||
|
background-color: rgb(252 231 243 / var(--tw-bg-opacity));
|
||||||
|
}
|
||||||
|
|
||||||
|
.bg-rose-100 {
|
||||||
|
--tw-bg-opacity: 1;
|
||||||
|
background-color: rgb(255 228 230 / var(--tw-bg-opacity));
|
||||||
|
}
|
||||||
|
|
||||||
|
.bg-gray-50 {
|
||||||
|
--tw-bg-opacity: 1;
|
||||||
|
background-color: rgb(249 250 251 / var(--tw-bg-opacity));
|
||||||
|
}
|
||||||
|
|
||||||
|
.bg-sky-100 {
|
||||||
|
--tw-bg-opacity: 1;
|
||||||
|
background-color: rgb(224 242 254 / var(--tw-bg-opacity));
|
||||||
|
}
|
||||||
|
|
||||||
|
.bg-indigo-100 {
|
||||||
|
--tw-bg-opacity: 1;
|
||||||
|
background-color: rgb(224 231 255 / var(--tw-bg-opacity));
|
||||||
|
}
|
||||||
|
|
||||||
|
.bg-blue-50 {
|
||||||
|
--tw-bg-opacity: 1;
|
||||||
|
background-color: rgb(239 246 255 / var(--tw-bg-opacity));
|
||||||
}
|
}
|
||||||
|
|
||||||
.p-4 {
|
.p-4 {
|
||||||
padding: 1rem;
|
padding: 1rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
.py-4 {
|
.p-2 {
|
||||||
padding-top: 1rem;
|
padding: 0.5rem;
|
||||||
padding-bottom: 1rem;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.px-4 {
|
.px-4 {
|
||||||
|
|
@ -1375,6 +1570,16 @@ select {
|
||||||
padding-bottom: 0.75rem;
|
padding-bottom: 0.75rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.py-4 {
|
||||||
|
padding-top: 1rem;
|
||||||
|
padding-bottom: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.py-2 {
|
||||||
|
padding-top: 0.5rem;
|
||||||
|
padding-bottom: 0.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
.pb-1 {
|
.pb-1 {
|
||||||
padding-bottom: 0.25rem;
|
padding-bottom: 0.25rem;
|
||||||
}
|
}
|
||||||
|
|
@ -1387,28 +1592,45 @@ select {
|
||||||
padding-bottom: 1.5rem;
|
padding-bottom: 1.5rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.text-left {
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
|
||||||
.text-center {
|
.text-center {
|
||||||
text-align: center;
|
text-align: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.text-right {
|
||||||
|
text-align: right;
|
||||||
|
}
|
||||||
|
|
||||||
.font-serif {
|
.font-serif {
|
||||||
font-family: ui-serif, Georgia, Cambria, "Times New Roman", Times, serif;
|
font-family: ui-serif, Georgia, Cambria, "Times New Roman", Times, serif;
|
||||||
}
|
}
|
||||||
|
|
||||||
.text-5xl {
|
|
||||||
font-size: 3rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.text-4xl {
|
.text-4xl {
|
||||||
font-size: 2.25rem;
|
font-size: 2.25rem;
|
||||||
|
line-height: 2.5rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
.text-xl {
|
.text-xl {
|
||||||
font-size: 1.25rem;
|
font-size: 1.25rem;
|
||||||
|
line-height: 1.75rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.text-2xl {
|
||||||
|
font-size: 1.5rem;
|
||||||
|
line-height: 2rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
.text-3xl {
|
.text-3xl {
|
||||||
font-size: 1.875rem;
|
font-size: 1.875rem;
|
||||||
|
line-height: 2.25rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.text-xs {
|
||||||
|
font-size: 0.75rem;
|
||||||
|
line-height: 1rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
.text-\[15px\] {
|
.text-\[15px\] {
|
||||||
|
|
@ -1423,24 +1645,29 @@ select {
|
||||||
font-size: 2.25rem;
|
font-size: 2.25rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
.font-semibold {
|
.text-5xl {
|
||||||
font-weight: 600;
|
font-size: 3rem;
|
||||||
|
line-height: 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
.font-bold {
|
.font-medium {
|
||||||
font-weight: 700;
|
font-weight: 500;
|
||||||
}
|
}
|
||||||
|
|
||||||
.font-light {
|
.font-light {
|
||||||
font-weight: 300;
|
font-weight: 300;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.font-bold {
|
||||||
|
font-weight: 700;
|
||||||
|
}
|
||||||
|
|
||||||
.font-extrabold {
|
.font-extrabold {
|
||||||
font-weight: 800;
|
font-weight: 800;
|
||||||
}
|
}
|
||||||
|
|
||||||
.font-medium {
|
.font-semibold {
|
||||||
font-weight: 500;
|
font-weight: 600;
|
||||||
}
|
}
|
||||||
|
|
||||||
.lowercase {
|
.lowercase {
|
||||||
|
|
@ -1451,14 +1678,14 @@ select {
|
||||||
font-style: italic;
|
font-style: italic;
|
||||||
}
|
}
|
||||||
|
|
||||||
.leading-normal {
|
|
||||||
line-height: 1.5;
|
|
||||||
}
|
|
||||||
|
|
||||||
.leading-5 {
|
.leading-5 {
|
||||||
line-height: 1.25rem;
|
line-height: 1.25rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.leading-normal {
|
||||||
|
line-height: 1.5;
|
||||||
|
}
|
||||||
|
|
||||||
.tracking-normal {
|
.tracking-normal {
|
||||||
letter-spacing: 0em;
|
letter-spacing: 0em;
|
||||||
}
|
}
|
||||||
|
|
@ -1468,28 +1695,23 @@ select {
|
||||||
color: rgb(255 255 255 / var(--tw-text-opacity));
|
color: rgb(255 255 255 / var(--tw-text-opacity));
|
||||||
}
|
}
|
||||||
|
|
||||||
.underline {
|
|
||||||
-webkit-text-decoration-line: underline;
|
|
||||||
text-decoration-line: underline;
|
|
||||||
}
|
|
||||||
|
|
||||||
.antialiased {
|
.antialiased {
|
||||||
-webkit-font-smoothing: antialiased;
|
-webkit-font-smoothing: antialiased;
|
||||||
-moz-osx-font-smoothing: grayscale;
|
-moz-osx-font-smoothing: grayscale;
|
||||||
}
|
}
|
||||||
|
|
||||||
.shadow-lg {
|
|
||||||
--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);
|
|
||||||
--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);
|
|
||||||
box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
|
|
||||||
}
|
|
||||||
|
|
||||||
.shadow-md {
|
.shadow-md {
|
||||||
--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);
|
--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);
|
||||||
--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);
|
--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);
|
||||||
box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
|
box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.shadow-lg {
|
||||||
|
--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);
|
||||||
|
--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);
|
||||||
|
box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
|
||||||
|
}
|
||||||
|
|
||||||
.outline {
|
.outline {
|
||||||
outline-style: solid;
|
outline-style: solid;
|
||||||
}
|
}
|
||||||
|
|
@ -1503,6 +1725,18 @@ select {
|
||||||
filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
|
filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.transition {
|
||||||
|
transition-property: color, background-color, border-color, fill, stroke, opacity, box-shadow, transform, filter, -webkit-text-decoration-color, -webkit-backdrop-filter;
|
||||||
|
transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter;
|
||||||
|
transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter, -webkit-text-decoration-color, -webkit-backdrop-filter;
|
||||||
|
transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
|
||||||
|
transition-duration: 150ms;
|
||||||
|
}
|
||||||
|
|
||||||
|
.duration-300 {
|
||||||
|
transition-duration: 300ms;
|
||||||
|
}
|
||||||
|
|
||||||
.ease-in-out {
|
.ease-in-out {
|
||||||
transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
|
transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
|
||||||
}
|
}
|
||||||
|
|
@ -1516,46 +1750,94 @@ select {
|
||||||
display: block;
|
display: block;
|
||||||
}
|
}
|
||||||
|
|
||||||
.hover\:border-stone-200:hover {
|
.hover\:border-pink-300:hover {
|
||||||
--tw-border-opacity: 1;
|
--tw-border-opacity: 1;
|
||||||
border-color: rgb(231 229 228 / var(--tw-border-opacity));
|
border-color: rgb(249 168 212 / var(--tw-border-opacity));
|
||||||
}
|
}
|
||||||
|
|
||||||
.hover\:bg-stone-100:hover {
|
.hover\:border-rose-300:hover {
|
||||||
|
--tw-border-opacity: 1;
|
||||||
|
border-color: rgb(253 164 175 / var(--tw-border-opacity));
|
||||||
|
}
|
||||||
|
|
||||||
|
.hover\:border-sky-300:hover {
|
||||||
|
--tw-border-opacity: 1;
|
||||||
|
border-color: rgb(125 211 252 / var(--tw-border-opacity));
|
||||||
|
}
|
||||||
|
|
||||||
|
.hover\:border-indigo-300:hover {
|
||||||
|
--tw-border-opacity: 1;
|
||||||
|
border-color: rgb(165 180 252 / var(--tw-border-opacity));
|
||||||
|
}
|
||||||
|
|
||||||
|
.hover\:bg-pink-200:hover {
|
||||||
--tw-bg-opacity: 1;
|
--tw-bg-opacity: 1;
|
||||||
background-color: rgb(245 245 244 / var(--tw-bg-opacity));
|
background-color: rgb(251 207 232 / var(--tw-bg-opacity));
|
||||||
}
|
}
|
||||||
|
|
||||||
.prose-h1\:mb-0 :is(:where(h1):not(:where([class~="not-prose"] *))) {
|
.hover\:bg-rose-200:hover {
|
||||||
margin-bottom: 0px;
|
--tw-bg-opacity: 1;
|
||||||
|
background-color: rgb(254 205 211 / var(--tw-bg-opacity));
|
||||||
}
|
}
|
||||||
|
|
||||||
.prose-h1\:font-light :is(:where(h1):not(:where([class~="not-prose"] *))) {
|
.hover\:bg-sky-200:hover {
|
||||||
font-weight: 300;
|
--tw-bg-opacity: 1;
|
||||||
|
background-color: rgb(186 230 253 / var(--tw-bg-opacity));
|
||||||
}
|
}
|
||||||
|
|
||||||
.prose-h2\:my-0 :is(:where(h2):not(:where([class~="not-prose"] *))) {
|
.hover\:bg-indigo-200:hover {
|
||||||
margin-top: 0px;
|
--tw-bg-opacity: 1;
|
||||||
margin-bottom: 0px;
|
background-color: rgb(199 210 254 / var(--tw-bg-opacity));
|
||||||
|
}
|
||||||
|
|
||||||
|
.prose-h2\:text-center :is(:where(h2):not(:where([class~="not-prose"] *))) {
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.prose-h2\:text-3xl :is(:where(h2):not(:where([class~="not-prose"] *))) {
|
||||||
|
font-size: 1.875rem;
|
||||||
|
line-height: 2.25rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.prose-h2\:text-2xl :is(:where(h2):not(:where([class~="not-prose"] *))) {
|
||||||
|
font-size: 1.5rem;
|
||||||
|
line-height: 2rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.prose-h2\:font-normal :is(:where(h2):not(:where([class~="not-prose"] *))) {
|
||||||
|
font-weight: 400;
|
||||||
}
|
}
|
||||||
|
|
||||||
.prose-h2\:font-light :is(:where(h2):not(:where([class~="not-prose"] *))) {
|
.prose-h2\:font-light :is(:where(h2):not(:where([class~="not-prose"] *))) {
|
||||||
font-weight: 300;
|
font-weight: 300;
|
||||||
}
|
}
|
||||||
|
|
||||||
.prose-h3\:text-xs :is(:where(h3):not(:where([class~="not-prose"] *))) {
|
.prose-h3\:font-normal :is(:where(h3):not(:where([class~="not-prose"] *))) {
|
||||||
font-size: .75rem;
|
font-weight: 400;
|
||||||
|
}
|
||||||
|
|
||||||
|
.prose-h4\:text-center :is(:where(h4):not(:where([class~="not-prose"] *))) {
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.prose-h4\:text-xl :is(:where(h4):not(:where([class~="not-prose"] *))) {
|
||||||
|
font-size: 1.25rem;
|
||||||
|
line-height: 1.75rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.prose-h4\:font-normal :is(:where(h4):not(:where([class~="not-prose"] *))) {
|
||||||
|
font-weight: 400;
|
||||||
}
|
}
|
||||||
|
|
||||||
@media (min-width: 1024px) {
|
@media (min-width: 1024px) {
|
||||||
.lg\:grid-cols-2 {
|
|
||||||
grid-template-columns: repeat(2, minmax(0, 1fr));
|
|
||||||
}
|
|
||||||
|
|
||||||
.lg\:flex-row {
|
.lg\:flex-row {
|
||||||
flex-direction: row;
|
flex-direction: row;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.lg\:flex-row-reverse {
|
||||||
|
flex-direction: row-reverse;
|
||||||
|
}
|
||||||
|
|
||||||
.lg\:items-start {
|
.lg\:items-start {
|
||||||
align-items: flex-start;
|
align-items: flex-start;
|
||||||
}
|
}
|
||||||
|
|
@ -1563,4 +1845,8 @@ select {
|
||||||
.lg\:items-end {
|
.lg\:items-end {
|
||||||
align-items: flex-end;
|
align-items: flex-end;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.lg\:text-right {
|
||||||
|
text-align: right;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -4,13 +4,23 @@
|
||||||
|
|
||||||
@layer components {
|
@layer components {
|
||||||
.nav-item > a {
|
.nav-item > a {
|
||||||
@apply inline-block px-2 pt-[10px] hover:pt-[7px] pb-2
|
@apply rounded-md transition ease-in-out duration-300 inline-block px-2 pb-[10px] hover:pb-[7px] pt-2
|
||||||
bg-emerald-100 hover:bg-emerald-200 shadow-md
|
bg-green-100 hover:bg-green-200 shadow-md
|
||||||
border border-emerald-200 hover:border-emerald-300 border-t-emerald-500 hover:border-t-emerald-600 hover:border-t-4;
|
border border-green-200 hover:border-green-300 border-b-green-500 hover:border-b-green-600 hover:border-b-4;
|
||||||
}
|
}
|
||||||
|
|
||||||
.active > a {
|
.active > a {
|
||||||
@apply bg-emerald-300 border-emerald-300 border-t-4 border-t-emerald-600 pt-[7px];
|
@apply bg-green-300 border-green-300 border-b-4 border-b-green-600 pb-[7px];
|
||||||
|
}
|
||||||
|
|
||||||
|
.adm_nav-item > a {
|
||||||
|
@apply rounded-md transition ease-in-out duration-300 inline-block px-2 pb-[10px] hover:pb-[7px] pt-2
|
||||||
|
bg-blue-100 hover:bg-blue-200 shadow-md
|
||||||
|
border border-blue-200 hover:border-blue-300 border-b-blue-500 hover:border-b-blue-600 hover:border-b-4;
|
||||||
|
}
|
||||||
|
|
||||||
|
.adm_active > a {
|
||||||
|
@apply bg-blue-300 border-blue-300 border-b-4 border-b-blue-600 pb-[7px];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -18,13 +18,13 @@ module.exports = {
|
||||||
* Main templates directory of the project (BASE_DIR/templates).
|
* Main templates directory of the project (BASE_DIR/templates).
|
||||||
* Adjust the following line to match your project structure.
|
* Adjust the following line to match your project structure.
|
||||||
*/
|
*/
|
||||||
"../../templates/**/*.html",
|
"../../../templates/**/*.html",
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Templates in other django apps (BASE_DIR/<any_app_name>/templates).
|
* Templates in other django apps (BASE_DIR/<any_app_name>/templates).
|
||||||
* Adjust the following line to match your project structure.
|
* Adjust the following line to match your project structure.
|
||||||
*/
|
*/
|
||||||
"../../**/templates/**/*.html",
|
"../../../**/templates/**/*.html",
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* JS: If you use Tailwind CSS in JavaScript, uncomment the following lines and make sure
|
* JS: If you use Tailwind CSS in JavaScript, uncomment the following lines and make sure
|
||||||
|
|
@ -42,20 +42,6 @@ module.exports = {
|
||||||
// '../../**/*.py'
|
// '../../**/*.py'
|
||||||
],
|
],
|
||||||
theme: {
|
theme: {
|
||||||
fontSize: {
|
|
||||||
xs: ".75rem",
|
|
||||||
sm: ".875rem",
|
|
||||||
tiny: ".875rem",
|
|
||||||
base: "1rem",
|
|
||||||
lg: "1.125rem",
|
|
||||||
xl: "1.25rem",
|
|
||||||
"2xl": "1.5rem",
|
|
||||||
"3xl": "1.875rem",
|
|
||||||
"4xl": "2.25rem",
|
|
||||||
"5xl": "3rem",
|
|
||||||
"6xl": "4rem",
|
|
||||||
"7xl": "5rem",
|
|
||||||
},
|
|
||||||
extend: {},
|
extend: {},
|
||||||
},
|
},
|
||||||
plugins: [
|
plugins: [
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue