12
.worktime
|
|
@ -1,12 +0,0 @@
|
|||
08.06.2022 - 1h 37 mins
|
||||
09.06.2022 - 1h
|
||||
12.06.2022 - 1h 15 mins
|
||||
15.06.2022 - 1h 30 mins
|
||||
23.06.2022 - 1h 30 mins
|
||||
07.07.2022 - 2h 30 mins
|
||||
15.07.2022 - 3h
|
||||
24.07.2022 - 3h 30 mins
|
||||
25.07.2022 - 3h 30 mins
|
||||
26.07.2022 - 1h 30 mins
|
||||
27.07.2022 - 4h
|
||||
01.08.2022 - 30 mins
|
||||
|
|
@ -25,8 +25,8 @@ def load_config(request):
|
|||
'regulaminy': Regulation.objects.all(),
|
||||
'rodos': RODO.objects.all(),
|
||||
'leagues': {
|
||||
'Wyniki I Ligi': FirstLeague.objects.all().reverse(),
|
||||
'Wyniki II Ligi': SecondLeague.objects.all().reverse(),
|
||||
'Wyniki I Ligi': FirstLeague.objects.all(),
|
||||
'Wyniki II Ligi': SecondLeague.objects.all(),
|
||||
'Wyniki III Ligi': ThirdLeague.objects.all()
|
||||
},
|
||||
'calendars': Calendar.objects.all(),
|
||||
|
|
|
|||
|
Before Width: | Height: | Size: 4.3 MiB |
|
Before Width: | Height: | Size: 3.5 KiB |
|
After Width: | Height: | Size: 4.2 KiB |
|
After Width: | Height: | Size: 30 KiB |
|
After Width: | Height: | Size: 99 KiB |
|
Before Width: | Height: | Size: 204 KiB |
|
Before Width: | Height: | Size: 292 KiB |
|
Before Width: | Height: | Size: 1.3 KiB |
|
After Width: | Height: | Size: 213 KiB |
|
Before Width: | Height: | Size: 13 KiB |
|
Before Width: | Height: | Size: 1.6 KiB |
|
Before Width: | Height: | Size: 1.4 KiB |
|
|
@ -2,10 +2,8 @@
|
|||
<!---->
|
||||
{% block title %}ATU | pdlzbs{% endblock %}
|
||||
<!---->
|
||||
{% load static tailwind_tags tablepipe %} {% block content %}
|
||||
{% load static tailwind_tags wysiwyg %} {% block content %}
|
||||
<div class="flex">
|
||||
<article class="max-w-full mx-auto scrollable">
|
||||
{{ atu.content | tablescroll | safe }}
|
||||
</article>
|
||||
<article class="max-w-full mx-auto scrollable">{% content atu %}</article>
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
|
|
|||
|
|
@ -10,6 +10,20 @@
|
|||
<meta name="description" content="Podlaski Związek Brydża Sportowego" />
|
||||
<meta name="author" content="Mikołaj Kubiczek" />
|
||||
|
||||
<link rel="icon" href="{% static 'favicon.ico' %}" type="image/x-icon" />
|
||||
<link
|
||||
rel="icon"
|
||||
type="image/png"
|
||||
sizes="192x192"
|
||||
href="{% static 'icon-192x192.png' %}"
|
||||
/>
|
||||
<link
|
||||
rel="icon"
|
||||
type="image/png"
|
||||
sizes="512x512"
|
||||
href="{% static 'icon-512x512.png' %}"
|
||||
/>
|
||||
|
||||
<title>
|
||||
{% block title %}Podlaski Związek Brydża Sportowego{% endblock %}
|
||||
</title>
|
||||
|
|
@ -75,7 +89,7 @@
|
|||
</div>
|
||||
</header>
|
||||
<main
|
||||
class="container xl:max-w-screen-xl mx-auto p-4 prose-img:m-1 prose-p:my-[0.3em]"
|
||||
class="container xl:max-w-screen-xl mx-auto p-4 prose-img:my-1 prose-p:my-[0.3em]"
|
||||
>
|
||||
{% block content %}{% endblock %}
|
||||
</main>
|
||||
|
|
|
|||
|
|
@ -1,11 +1,9 @@
|
|||
{% extends 'base.html' %} {% block title %}Kalendarz | pdlzbs{% endblock %}
|
||||
<!---->
|
||||
{% load static tailwind_tags tablepipe %} {% block content %}
|
||||
{% load static tailwind_tags wysiwyg %} {% block content %}
|
||||
<div class="flex flex-col items-center gap-4">
|
||||
{% for calendar in calendars %}
|
||||
<article class="w-full pb-4">
|
||||
{{ calendar.content | tablescroll | safe }}
|
||||
</article>
|
||||
<article class="w-full pb-4">{% content calendar %}</article>
|
||||
{% if not forloop.last %}
|
||||
<hr class="w-36 border-b border-stone-200" />
|
||||
{% endif %} {% empty %}
|
||||
|
|
|
|||
|
|
@ -2,6 +2,6 @@
|
|||
<!---->
|
||||
{% block title %}Grand Prix Białegostoku | pdlzbs{% endblock %}
|
||||
<!---->
|
||||
{% load static tailwind_tags tablepipe %} {% block content %}
|
||||
<article class="w-full">{{ gpb.content | tablescroll | safe }}</article>
|
||||
{% load static tailwind_tags wysiwyg %} {% block content %}
|
||||
<article class="w-full">{% content gpb %}</article>
|
||||
{% endblock %}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,14 @@
|
|||
{% extends 'base.html' %}
|
||||
<!---->
|
||||
{% block title %}{{ focus.title | default:"-" }} | pdlzbs{% endblock %}
|
||||
<!---->
|
||||
{% load static tailwind_tags wysiwyg %} {% block content %}
|
||||
<div class="flex flex-col lg:flex-row justify-center gap-8">
|
||||
<article class="prose bg-white shadow-md rounded-md p-8">
|
||||
{% if focus.show_title %}
|
||||
<h1 class="font-medium text-center">{{ focus.title }}</h1>
|
||||
{% endif %}
|
||||
<div>{% content focus %}</div>
|
||||
</article>
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
|
@ -1,10 +1,10 @@
|
|||
{% extends 'base.html' %} {% block title %}Strona główna | pdlzbs{% endblock %}
|
||||
{% load static tailwind_tags tablepipe %} {% block content %}
|
||||
{% load static tailwind_tags wysiwyg %} {% block content %}
|
||||
<div class="flex flex-col lg:flex-row justify-center gap-8">
|
||||
<article
|
||||
class="basis-1/2 prose max-w-screen-sm mb-auto bg-white shadow-md rounded-md p-4"
|
||||
>
|
||||
{{ gpw.content | tablescroll | safe }}
|
||||
{% content gpw %}
|
||||
</article>
|
||||
<div class="basis-1/2 flex flex-col items-center gap-4">
|
||||
<h1
|
||||
|
|
@ -20,7 +20,7 @@
|
|||
{% if post.show_title %}
|
||||
<h2 class="font-medium">{{ post.title }}</h2>
|
||||
{% endif %}
|
||||
<div>{{ post.content | tablescroll | safe }}</div>
|
||||
<div>{% readmore post %}</div>
|
||||
</article>
|
||||
{% if not forloop.last %}
|
||||
<hr class="w-36 border-b border-stone-200" />
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
<!---->
|
||||
{% block title %}Miejski Białostocki Klub Brydżowy | pdlzbs{% endblock %}
|
||||
<!---->
|
||||
{% load static tailwind_tags tablepipe %} {% block content %}
|
||||
{% load static tailwind_tags wysiwyg %} {% block content %}
|
||||
<h1 class="text-center mb-4">Miejski Białostocki Klub Brydżowy</h1>
|
||||
|
||||
<div class="flex flex-col items-center gap-4">
|
||||
|
|
@ -10,7 +10,7 @@
|
|||
<article class="w-full pb-4">
|
||||
{% if article.show_title %}
|
||||
<h2 class="font-normal">{{ article.title }}</h2>
|
||||
{% endif %} {{ article.content | tablescroll | safe }}
|
||||
{% endif %} {% content article %}
|
||||
</article>
|
||||
{% if not forloop.last %}
|
||||
<hr class="w-36 border-b border-stone-200" />
|
||||
|
|
|
|||
|
|
@ -2,10 +2,10 @@
|
|||
<!---->
|
||||
{% block title %}Składki Członkowskie | pdlzbs{% endblock %}
|
||||
<!---->
|
||||
{% load static tailwind_tags tablepipe %} {% block content %}
|
||||
{% load static tailwind_tags wysiwyg %} {% block content %}
|
||||
<div class="flex flex-col items-center gap-4">
|
||||
{% for membership in memberships %}
|
||||
<article class="w-full pb-4">{{ membership.content | safe }}</article>
|
||||
<article class="w-full pb-4">{% content membership %}</article>
|
||||
{% if not forloop.last %}
|
||||
<hr class="w-36 border-b border-stone-200" />
|
||||
{% endif %} {% empty %}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,27 @@
|
|||
{% extends 'base.html' %}
|
||||
<!---->
|
||||
{% block title %}{{ focus.title | default:"-" }} | pdlzbs{% endblock %}
|
||||
<!---->
|
||||
{% load static tailwind_tags wysiwyg %} {% block content %}
|
||||
<div class="flex flex-col items-center gap-4">
|
||||
<article
|
||||
class="prose w-full max-w-screen-md bg-white rounded-md shadow-md p-4"
|
||||
>
|
||||
{% if focus.show_title %}
|
||||
<h1 class="font-medium text-center">{{ focus.title }}</h1>
|
||||
{% endif %}
|
||||
<div class="flex flex-wrap gap-4 items-center justify-center">
|
||||
{% buttons focus.buttons %}
|
||||
</div>
|
||||
<figure class="flex flex-col">
|
||||
<a href="{{ focus.link }}" target="_blank" class="mx-auto"
|
||||
><img
|
||||
src="{{ focus.photo.url }}"
|
||||
alt=""
|
||||
class="max-h-72 inline-block text-center"
|
||||
/></a>
|
||||
<figcaption>{% content focus %}</figcaption>
|
||||
</figure>
|
||||
</article>
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
|
@ -1,33 +1,31 @@
|
|||
{% extends 'base.html' %}
|
||||
<!---->
|
||||
{% block title %}Składki Członkowskie | pdlzbs{% endblock %}
|
||||
{% block title %}Inne turnieje | pdlzbs{% endblock %}
|
||||
<!---->
|
||||
{% load static tailwind_tags tablepipe %} {% block content %}
|
||||
<h1 class="text-center mb-4">Inne turnieje</h1>
|
||||
{% if tournaments %}
|
||||
{% load static tailwind_tags wysiwyg %} {% block content %} {% if tournaments %}
|
||||
<div class="flex flex-col items-center gap-4">
|
||||
{% for tournament in tournaments %}
|
||||
<article
|
||||
class="prose prose-a:text-center w-full max-w-screen-md bg-white rounded-md shadow-md p-4 pb-6"
|
||||
class="prose w-full max-w-screen-md bg-white rounded-md shadow-md p-4"
|
||||
>
|
||||
{% if tournament.show_title %}
|
||||
<h2>{{ tournament.title }}</h2>
|
||||
<h2 class="font-medium text-center">{{ tournament.title }}</h2>
|
||||
{% endif %}
|
||||
<figure>
|
||||
<a href="{{ tournament.link }}" target="_blank"
|
||||
><img src="{{ tournament.photo.url }}" alt="" class="max-h-72 mx-auto"
|
||||
/></a>
|
||||
<figcaption>{{ tournament.content | safe }}</figcaption>
|
||||
</figure>
|
||||
<p class="text-center">
|
||||
<div class="flex flex-wrap gap-4 items-center justify-center">
|
||||
{% buttons tournament.buttons %}
|
||||
</div>
|
||||
<figure class="flex flex-col">
|
||||
<a
|
||||
href="{{ tournament.link }}"
|
||||
href="{{ tournament.buttons | firstbutton }}"
|
||||
target="_blank"
|
||||
class="inline px-16 button red color"
|
||||
>
|
||||
{{ tournament.link_title | default:"Wyniki" }}
|
||||
</a>
|
||||
</p>
|
||||
class="mx-auto"
|
||||
><img
|
||||
src="{{ tournament.photo.url }}"
|
||||
alt=""
|
||||
class="max-h-72 text-center"
|
||||
/></a>
|
||||
<figcaption>{% content tournament %}</figcaption>
|
||||
</figure>
|
||||
</article>
|
||||
{% if not forloop.last %}
|
||||
<hr class="w-36 border-b border-stone-200" />
|
||||
|
|
|
|||
|
|
@ -0,0 +1,19 @@
|
|||
{% extends 'base.html' %}
|
||||
<!---->
|
||||
{% block title %}{{ focus.title | default:"-" }} | pdlzbs{% endblock %}
|
||||
<!---->
|
||||
{% load static tailwind_tags wysiwyg %} {% block content %}
|
||||
<div class="flex flex-col items-center gap-4">
|
||||
<article
|
||||
class="prose w-full max-w-screen-md bg-white rounded-md shadow-md p-4"
|
||||
>
|
||||
{% if focus.show_title %}
|
||||
<h1 class="font-medium text-center">{{ focus.title }}</h1>
|
||||
{% endif %}
|
||||
<div class="flex flex-wrap gap-4 items-center justify-center">
|
||||
{% buttons focus.buttons %}
|
||||
</div>
|
||||
{% content focus %}
|
||||
</article>
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
|
@ -2,15 +2,19 @@
|
|||
<!---->
|
||||
{% block title %}Młodzież | pdlzbs{% endblock %}
|
||||
<!---->
|
||||
{% load static tailwind_tags tablepipe %} {% block content %}
|
||||
<h1 class="text-center mb-4">Młodzież</h1>
|
||||
|
||||
{% load static tailwind_tags wysiwyg %} {% block content %}
|
||||
<div class="flex flex-col items-center gap-4">
|
||||
{% for article in youth %}
|
||||
<article class="w-full pb-4">
|
||||
<article
|
||||
class="prose w-full max-w-screen-md bg-white rounded-md shadow-md p-4"
|
||||
>
|
||||
{% if article.show_title %}
|
||||
<h2 class="font-normal">{{ article.title }}</h2>
|
||||
{% endif %} {{ article.content | tablescroll | safe }}
|
||||
<h1 class="font-medium text-center">{{ article.title }}</h1>
|
||||
{% endif %}
|
||||
<div class="flex flex-wrap gap-4 items-center justify-center">
|
||||
{% buttons article.buttons %}
|
||||
</div>
|
||||
{% content article %}
|
||||
</article>
|
||||
{% if not forloop.last %}
|
||||
<hr class="w-36 border-b border-stone-200" />
|
||||
|
|
|
|||
|
|
@ -1,10 +0,0 @@
|
|||
from django import template
|
||||
import re
|
||||
|
||||
register = template.Library()
|
||||
|
||||
|
||||
@register.filter(name='tablescroll')
|
||||
def get_due_date_string(value):
|
||||
a = re.sub(r'<table[^>]*?>', '<div style="overflow-x: auto">\g<0>', value)
|
||||
return re.sub(r'<\/table>', '</table></div>', a)
|
||||
|
|
@ -0,0 +1,64 @@
|
|||
from django import template
|
||||
from django.urls.base import reverse_lazy, resolve
|
||||
from django.utils.safestring import mark_safe
|
||||
import re
|
||||
|
||||
register = template.Library()
|
||||
|
||||
|
||||
@register.filter
|
||||
def tableoverflow(value):
|
||||
return re.sub(r'<\/table>', '</table></div>', re.sub(r'<table[^>]*?>', '<div style="overflow-x: auto">\g<0>', value)) if value else ''
|
||||
|
||||
|
||||
@register.simple_tag(takes_context=True)
|
||||
def readmore(context, value: str):
|
||||
current_view = resolve(context.request.path).url_name
|
||||
|
||||
if 'reverse' not in current_view:
|
||||
reverse_view_url = reverse_lazy(
|
||||
current_view + '-reverse', args=(value.id,))
|
||||
|
||||
res = value.content.split('<!-- pagebreak -->')
|
||||
cntnt = res[0]
|
||||
if len(res) > 1:
|
||||
cntnt += f'<br /><br /><p class="text-center">...</p><a href="{reverse_view_url}" style="float: right;" class="button mt-4">Czytaj dalej</a>'
|
||||
|
||||
return mark_safe(tableoverflow(cntnt))
|
||||
|
||||
|
||||
@register.simple_tag()
|
||||
def content(value: str):
|
||||
return mark_safe(tableoverflow(value.content))
|
||||
|
||||
|
||||
@register.simple_tag()
|
||||
def buttons(value: str):
|
||||
lines = value.split('\n')
|
||||
|
||||
def parse(line: str) -> str:
|
||||
try:
|
||||
if '->' in line:
|
||||
text, url = line.split('->')
|
||||
return f'<a href={url} target="_blank" rel="norefferer noopener" class="inline px-12 py-2 button red color">{text}</a>'
|
||||
else:
|
||||
text, url = line.split('|')
|
||||
return f'<a href={url} target="_self" class="inline px-12 py-3 button red color">{text}</a>'
|
||||
except:
|
||||
return ''
|
||||
|
||||
return mark_safe(''.join([parse(line) for line in lines]))
|
||||
|
||||
|
||||
@register.filter()
|
||||
def firstbutton(value: str):
|
||||
lines = value.split('\n')
|
||||
|
||||
def parse(line: str) -> str:
|
||||
try:
|
||||
text, url = line.split('|' if '|' in line else '->')
|
||||
return url
|
||||
except:
|
||||
return ''
|
||||
|
||||
return mark_safe(parse(lines[0]))
|
||||
43
core/urls.py
|
|
@ -1,23 +1,28 @@
|
|||
from django.urls import path
|
||||
from .views import *
|
||||
from .views import rtpath, tpath
|
||||
|
||||
from db.main.models import Post
|
||||
from db.tournaments.models import Tournament
|
||||
from db.youth.models import Youth
|
||||
|
||||
urlpatterns = [
|
||||
path('', HomeView.as_view(), name='home'),
|
||||
path('zarzad', AdministrationView.as_view(), name='administration'),
|
||||
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('ligi', LeagueView.as_view(), name='league'),
|
||||
path('kalendarz', CalendarView.as_view(), name='calendar'),
|
||||
path('grandprixbialegostoku', GrandPrixView.as_view(), name='gpx'),
|
||||
path('inneturnieje', TournamentView.as_view(), name='tournaments'),
|
||||
path('skladki', MembershipView.as_view(), name='membership'),
|
||||
path('mlodziez', YouthView.as_view(), name='youth'),
|
||||
path('atu', AtuView.as_view(), name='atu'),
|
||||
path('mbkb', MBKBView.as_view(), name='mbkb'),
|
||||
tpath('', 'home', {'home': 'active'}),
|
||||
rtpath('aktualnosci/<int:id>', 'home', Post, {'home': 'active'}),
|
||||
|
||||
tpath('zarzad', 'administration'),
|
||||
tpath('zarzad/ogloszenia', 'administration/announcements'),
|
||||
tpath('zarzad/protokolyiuchwaly', 'administration/protocols'),
|
||||
tpath('zarzad/regulaminy', 'administration/regulations'),
|
||||
tpath('zarzad/rodo', 'administration/rodos'),
|
||||
|
||||
tpath('ligi', 'league'),
|
||||
tpath('kalendarz', 'calendar'),
|
||||
tpath('grandprixbialegostoku', 'grandprix'),
|
||||
tpath('inneturnieje', 'tournaments'),
|
||||
rtpath('inneturnieje/<int:id>', 'tournaments', Tournament),
|
||||
tpath('skladki', 'membership'),
|
||||
tpath('mlodziez', 'youth'),
|
||||
rtpath('mlodziez/<int:id>', 'youth', Youth),
|
||||
tpath('atu', 'atu'),
|
||||
tpath('mbkb', 'mbkb'),
|
||||
]
|
||||
|
|
|
|||
|
|
@ -1,65 +1,26 @@
|
|||
from django.shortcuts import render
|
||||
from django.views.generic import TemplateView
|
||||
import importlib
|
||||
import pkgutil
|
||||
from django.urls import path
|
||||
|
||||
|
||||
# Create your views here.
|
||||
|
||||
def template(filename, ec={}):
|
||||
def closure(request):
|
||||
return render(request, filename+'.html', ec)
|
||||
|
||||
class HomeView(TemplateView):
|
||||
template_name = 'home.html'
|
||||
extra_context = {
|
||||
'home': 'active'
|
||||
}
|
||||
return closure
|
||||
|
||||
|
||||
class AdministrationView(TemplateView):
|
||||
template_name = 'administration.html'
|
||||
def reverse_template(filename, model, ec={}):
|
||||
def closure(request, id):
|
||||
return render(request, filename+'-reverse.html', {**ec, 'focus': model.objects.get(id=id)})
|
||||
|
||||
return closure
|
||||
|
||||
|
||||
class AdministrationAnnouncementsView(TemplateView):
|
||||
template_name = 'administration/announcements.html'
|
||||
def tpath(p: str, filename: str, ec={}):
|
||||
return path(p, template(filename, ec), name=filename.replace('/', '_'))
|
||||
|
||||
|
||||
class AdministrationProtocolsView(TemplateView):
|
||||
template_name = 'administration/protocols.html'
|
||||
|
||||
|
||||
class AdministrationRegulationsView(TemplateView):
|
||||
template_name = 'administration/regulations.html'
|
||||
|
||||
|
||||
class AdministrationRODOView(TemplateView):
|
||||
template_name = 'administration/rodos.html'
|
||||
|
||||
|
||||
class LeagueView(TemplateView):
|
||||
template_name = 'league.html'
|
||||
|
||||
|
||||
class CalendarView(TemplateView):
|
||||
template_name = 'calendar.html'
|
||||
|
||||
|
||||
class GrandPrixView(TemplateView):
|
||||
template_name = 'grandprix.html'
|
||||
|
||||
|
||||
class TournamentView(TemplateView):
|
||||
template_name = "tournaments.html"
|
||||
|
||||
|
||||
class MembershipView(TemplateView):
|
||||
template_name = 'membership.html'
|
||||
|
||||
|
||||
class YouthView(TemplateView):
|
||||
template_name = "youth.html"
|
||||
|
||||
|
||||
class AtuView(TemplateView):
|
||||
template_name = 'atu.html'
|
||||
|
||||
|
||||
class MBKBView(TemplateView):
|
||||
template_name = "mbkb.html"
|
||||
def rtpath(p: str, filename: str, model, ec={}):
|
||||
return path(p, reverse_template(filename, model, ec), name=filename.replace('/', '_')+'-reverse')
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ from .models import *
|
|||
|
||||
@admin.register(Post)
|
||||
class PostModelAdmin(OrderableAdmin, admin.ModelAdmin):
|
||||
list_display = ['__str__', 'ordering']
|
||||
list_display = ['__str__', 'link', 'ordering']
|
||||
list_editable = ['ordering']
|
||||
ordering_field_hide_input = True
|
||||
exclude = ['ordering']
|
||||
|
|
|
|||
|
|
@ -1,4 +1,6 @@
|
|||
from django.db import models
|
||||
from django.urls.base import reverse_lazy
|
||||
from django.utils.safestring import mark_safe
|
||||
from tinymce.models import HTMLField
|
||||
from admin_ordering.models import OrderableModel
|
||||
from core.utils import SingletonModel
|
||||
|
|
@ -16,6 +18,11 @@ class Post(OrderableModel):
|
|||
def __str__(self):
|
||||
return self.title or '(brak tytułu)'
|
||||
|
||||
@property
|
||||
def link(self):
|
||||
href = reverse_lazy('home-reverse', args=[self.id])
|
||||
return mark_safe(f'<a href="{href}" target="_blank">{href}</a>')
|
||||
|
||||
class Meta(OrderableModel.Meta):
|
||||
verbose_name = 'Aktualność PodlZBS'
|
||||
verbose_name_plural = 'Aktualności PodlZBS'
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ from .models import *
|
|||
|
||||
@admin.register(Tournament)
|
||||
class TournamentModelAdmin(OrderableAdmin, admin.ModelAdmin):
|
||||
list_display = ['__str__', 'ordering']
|
||||
list_display = ['__str__', 'link', 'ordering']
|
||||
list_editable = ['ordering']
|
||||
ordering_field_hide_input = True
|
||||
exclude = ['ordering']
|
||||
|
|
|
|||
|
|
@ -0,0 +1,26 @@
|
|||
# Generated by Django 4.0.5 on 2022-08-17 21:39
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('tournaments', '0005_tournament_link_title_tournament_published_and_more'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.RemoveField(
|
||||
model_name='tournament',
|
||||
name='link',
|
||||
),
|
||||
migrations.RemoveField(
|
||||
model_name='tournament',
|
||||
name='link_title',
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='tournament',
|
||||
name='buttons',
|
||||
field=models.TextField(blank=True, default='', verbose_name='Przyciski'),
|
||||
),
|
||||
]
|
||||
|
|
@ -1,10 +1,31 @@
|
|||
from django.db import models
|
||||
from django.urls.base import reverse_lazy
|
||||
from django.utils.safestring import mark_safe
|
||||
from admin_ordering.models import OrderableModel
|
||||
from tinymce.models import HTMLField
|
||||
from filebrowser.fields import FileBrowseField
|
||||
|
||||
# Create your models here.
|
||||
|
||||
buttons_help_text = """Tutaj można wpisać dowolną ilość przycisków w następującym formacie:
|
||||
<code>
|
||||
tekst1 -> link
|
||||
teskt2 | link
|
||||
...
|
||||
</code>
|
||||
Symbol <code>-></code> oznacza, że link będzie otwarty w nowej karcie
|
||||
Symbol <code>|</code> oznacza, że link będzie otwarty w tej samej karcie
|
||||
Na przykład:
|
||||
<code>
|
||||
pzbs -> https://pzbs.pl
|
||||
fotogaleria | https://galeria.podlaskizbs.pl
|
||||
cezar -> https://www.msc.com.pl/cezar
|
||||
</code>
|
||||
PZBS i Cezar zostaną otwarte w nowej karcie
|
||||
<b>UWAGA !!</b>
|
||||
Klikając na zdjęcie zawsze zostaniemy przekierowani na pierwszy link w nowej karcie
|
||||
""".replace('\n', '<br />')
|
||||
|
||||
|
||||
class Tournament(OrderableModel):
|
||||
published = models.BooleanField('Wpis opublikowany', default=True)
|
||||
|
|
@ -13,13 +34,17 @@ class Tournament(OrderableModel):
|
|||
photo = FileBrowseField(
|
||||
'Zdjęcie', directory='inneturnieje/', max_length=200, blank=True)
|
||||
content = HTMLField('Tekst', default='', blank=True)
|
||||
link = models.TextField('Link do wyników')
|
||||
link_title = models.CharField(
|
||||
'Tytuł linku', default='', blank=True, max_length=250)
|
||||
buttons = models.TextField(
|
||||
'Przyciski', default='', blank=True, help_text=buttons_help_text)
|
||||
|
||||
def __str__(self):
|
||||
return self.title or '(brak tytułu)'
|
||||
|
||||
@property
|
||||
def link(self):
|
||||
href = reverse_lazy('youth-reverse', args=[self.id])
|
||||
return mark_safe(f'<a href="{href}" target="_blank">{href}</a>')
|
||||
|
||||
class Meta(OrderableModel.Meta):
|
||||
verbose_name = 'Inny turniej'
|
||||
verbose_name_plural = 'Inne turnieje'
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ from .models import *
|
|||
|
||||
@admin.register(Youth)
|
||||
class YouthModelAdmin(OrderableAdmin, admin.ModelAdmin):
|
||||
list_display = ['__str__', 'ordering']
|
||||
list_display = ['__str__', 'link', 'ordering']
|
||||
list_editable = ['ordering']
|
||||
ordering_field_hide_input = True
|
||||
exclude = ['ordering']
|
||||
|
|
|
|||
|
|
@ -0,0 +1,18 @@
|
|||
# Generated by Django 4.0.5 on 2022-08-17 21:39
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('youth', '0002_alter_youth_options_youth_ordering_youth_published_and_more'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='youth',
|
||||
name='buttons',
|
||||
field=models.TextField(blank=True, default='', verbose_name='Przyciski'),
|
||||
),
|
||||
]
|
||||
|
|
@ -1,19 +1,46 @@
|
|||
from django.db import models
|
||||
from django.urls.base import reverse_lazy
|
||||
from django.utils.safestring import mark_safe
|
||||
from tinymce.models import HTMLField
|
||||
from admin_ordering.models import OrderableModel
|
||||
|
||||
|
||||
# Create your models here.
|
||||
|
||||
buttons_help_text = """Tutaj można wpisać dowolną ilość przycisków w następującym formacie:
|
||||
<code>
|
||||
tekst1 -> link
|
||||
teskt2 | link
|
||||
...
|
||||
</code>
|
||||
Symbol <code>-></code> oznacza, że link będzie otwarty w nowej karcie
|
||||
Symbol <code>|</code> oznacza, że link będzie otwarty w tej samej karcie
|
||||
Na przykład:
|
||||
<code>
|
||||
pzbs -> https://pzbs.pl
|
||||
fotogaleria | https://galeria.podlaskizbs.pl
|
||||
cezar -> https://www.msc.com.pl/cezar
|
||||
</code>
|
||||
PZBS i Cezar zostaną otwarte w nowej karcie
|
||||
""".replace('\n', '<br />')
|
||||
|
||||
|
||||
class Youth(OrderableModel):
|
||||
published = models.BooleanField('Wpis opublikowany', default=True)
|
||||
show_title = models.BooleanField('Pokaż tytuł', default=True)
|
||||
title = models.CharField('Tytuł', default='', blank=True, max_length=250)
|
||||
content = HTMLField('Tekst', default='', blank=True)
|
||||
buttons = models.TextField(
|
||||
'Przyciski', default='', blank=True, help_text=buttons_help_text)
|
||||
|
||||
def __str__(self):
|
||||
return self.title or '(brak tytułu)'
|
||||
|
||||
@property
|
||||
def link(self):
|
||||
href = reverse_lazy('youth-reverse', args=[self.id])
|
||||
return mark_safe(f'<a href="{href}" target="_blank">{href}</a>')
|
||||
|
||||
class Meta(OrderableModel.Meta):
|
||||
verbose_name = 'Młodzież'
|
||||
verbose_name_plural = 'Młodzież'
|
||||
|
|
|
|||
|
|
@ -153,7 +153,7 @@ TINYMCE_DEFAULT_CONFIG = {
|
|||
"height": "320px",
|
||||
"width": "960px",
|
||||
"menubar": "file edit view insert format tools table help",
|
||||
"plugins": "advlist autolink lists link image charmap print preview anchor searchreplace visualblocks code "
|
||||
"plugins": "advlist autolink lists link image charmap print preview anchor searchreplace visualblocks code pagebreak "
|
||||
"fullscreen insertdatetime media table paste code help wordcount spellchecker",
|
||||
"toolbar": "undo redo | bold italic underline strikethrough | fontselect fontsizeselect formatselect | alignleft "
|
||||
"aligncenter alignright alignjustify | outdent indent | numlist bullist checklist | forecolor "
|
||||
|
|
|
|||
BIN
static/atu.jpg
|
Before Width: | Height: | Size: 4.3 MiB |
BIN
static/cezar.gif
|
Before Width: | Height: | Size: 3.5 KiB |
|
|
@ -1300,18 +1300,22 @@ select {
|
|||
margin-bottom: 1rem;
|
||||
}
|
||||
|
||||
.mt-8 {
|
||||
margin-top: 2rem;
|
||||
}
|
||||
|
||||
.mb-auto {
|
||||
margin-bottom: auto;
|
||||
}
|
||||
|
||||
.mt-4 {
|
||||
margin-top: 1rem;
|
||||
}
|
||||
|
||||
.block {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.inline-block {
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
.inline {
|
||||
display: inline;
|
||||
}
|
||||
|
|
@ -1336,14 +1340,6 @@ select {
|
|||
display: none;
|
||||
}
|
||||
|
||||
.h-\[40px\] {
|
||||
height: 40px;
|
||||
}
|
||||
|
||||
.h-full {
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.h-screen {
|
||||
height: 100vh;
|
||||
}
|
||||
|
|
@ -1364,10 +1360,6 @@ select {
|
|||
width: 100%;
|
||||
}
|
||||
|
||||
.w-\[48px\] {
|
||||
width: 48px;
|
||||
}
|
||||
|
||||
.w-36 {
|
||||
width: 9rem;
|
||||
}
|
||||
|
|
@ -1388,10 +1380,6 @@ select {
|
|||
max-width: 768px;
|
||||
}
|
||||
|
||||
.shrink-0 {
|
||||
flex-shrink: 0;
|
||||
}
|
||||
|
||||
.basis-1\/2 {
|
||||
flex-basis: 50%;
|
||||
}
|
||||
|
|
@ -1520,6 +1508,10 @@ select {
|
|||
padding: 0.5rem;
|
||||
}
|
||||
|
||||
.p-8 {
|
||||
padding: 2rem;
|
||||
}
|
||||
|
||||
.px-4 {
|
||||
padding-left: 1rem;
|
||||
padding-right: 1rem;
|
||||
|
|
@ -1540,9 +1532,9 @@ select {
|
|||
padding-bottom: 0.5rem;
|
||||
}
|
||||
|
||||
.px-16 {
|
||||
padding-left: 4rem;
|
||||
padding-right: 4rem;
|
||||
.px-12 {
|
||||
padding-left: 3rem;
|
||||
padding-right: 3rem;
|
||||
}
|
||||
|
||||
.pb-1 {
|
||||
|
|
@ -1553,10 +1545,6 @@ select {
|
|||
padding-bottom: 1rem;
|
||||
}
|
||||
|
||||
.pb-6 {
|
||||
padding-bottom: 1.5rem;
|
||||
}
|
||||
|
||||
.text-left {
|
||||
text-align: left;
|
||||
}
|
||||
|
|
@ -1593,10 +1581,6 @@ select {
|
|||
font-size: 15px;
|
||||
}
|
||||
|
||||
.text-\[13px\] {
|
||||
font-size: 13px;
|
||||
}
|
||||
|
||||
.text-\[2\.25rem\] {
|
||||
font-size: 2.25rem;
|
||||
}
|
||||
|
|
@ -1614,8 +1598,8 @@ select {
|
|||
font-weight: 300;
|
||||
}
|
||||
|
||||
.font-bold {
|
||||
font-weight: 700;
|
||||
.font-normal {
|
||||
font-weight: 400;
|
||||
}
|
||||
|
||||
.font-semibold {
|
||||
|
|
@ -1642,11 +1626,6 @@ select {
|
|||
letter-spacing: 0em;
|
||||
}
|
||||
|
||||
.text-white {
|
||||
--tw-text-opacity: 1;
|
||||
color: rgb(255 255 255 / var(--tw-text-opacity));
|
||||
}
|
||||
|
||||
.antialiased {
|
||||
-webkit-font-smoothing: antialiased;
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
|
|
@ -1821,14 +1800,15 @@ h4 {
|
|||
margin-bottom: 0.3em;
|
||||
}
|
||||
|
||||
.prose-a\:text-center :is(:where(a):not(:where([class~="not-prose"] *))) {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.prose-img\:m-1 :is(:where(img):not(:where([class~="not-prose"] *))) {
|
||||
margin: 0.25rem;
|
||||
}
|
||||
|
||||
.prose-img\:my-1 :is(:where(img):not(:where([class~="not-prose"] *))) {
|
||||
margin-top: 0.25rem;
|
||||
margin-bottom: 0.25rem;
|
||||
}
|
||||
|
||||
@media (min-width: 1024px) {
|
||||
.lg\:w-screen {
|
||||
width: 100vw;
|
||||
|
|
|
|||
|
After Width: | Height: | Size: 4.2 KiB |
|
After Width: | Height: | Size: 30 KiB |
|
After Width: | Height: | Size: 99 KiB |
|
Before Width: | Height: | Size: 204 KiB |
BIN
static/labs.jpg
|
Before Width: | Height: | Size: 292 KiB |
BIN
static/labs.webp
|
Before Width: | Height: | Size: 1.3 KiB |
|
After Width: | Height: | Size: 213 KiB |
BIN
static/logo.webp
|
Before Width: | Height: | Size: 13 KiB |
BIN
static/mbkb.webp
|
Before Width: | Height: | Size: 1.6 KiB |
BIN
static/pzbs.webp
|
Before Width: | Height: | Size: 1.4 KiB |
|
|
@ -1304,10 +1304,18 @@ select {
|
|||
margin-bottom: auto;
|
||||
}
|
||||
|
||||
.mt-4 {
|
||||
margin-top: 1rem;
|
||||
}
|
||||
|
||||
.block {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.inline-block {
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
.inline {
|
||||
display: inline;
|
||||
}
|
||||
|
|
@ -1500,6 +1508,10 @@ select {
|
|||
padding: 0.5rem;
|
||||
}
|
||||
|
||||
.p-8 {
|
||||
padding: 2rem;
|
||||
}
|
||||
|
||||
.px-4 {
|
||||
padding-left: 1rem;
|
||||
padding-right: 1rem;
|
||||
|
|
@ -1520,9 +1532,9 @@ select {
|
|||
padding-bottom: 0.5rem;
|
||||
}
|
||||
|
||||
.px-16 {
|
||||
padding-left: 4rem;
|
||||
padding-right: 4rem;
|
||||
.px-12 {
|
||||
padding-left: 3rem;
|
||||
padding-right: 3rem;
|
||||
}
|
||||
|
||||
.pb-1 {
|
||||
|
|
@ -1533,10 +1545,6 @@ select {
|
|||
padding-bottom: 1rem;
|
||||
}
|
||||
|
||||
.pb-6 {
|
||||
padding-bottom: 1.5rem;
|
||||
}
|
||||
|
||||
.text-left {
|
||||
text-align: left;
|
||||
}
|
||||
|
|
@ -1590,14 +1598,14 @@ select {
|
|||
font-weight: 300;
|
||||
}
|
||||
|
||||
.font-semibold {
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.font-normal {
|
||||
font-weight: 400;
|
||||
}
|
||||
|
||||
.font-semibold {
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.lowercase {
|
||||
text-transform: lowercase;
|
||||
}
|
||||
|
|
@ -1792,14 +1800,15 @@ h4 {
|
|||
margin-bottom: 0.3em;
|
||||
}
|
||||
|
||||
.prose-a\:text-center :is(:where(a):not(:where([class~="not-prose"] *))) {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.prose-img\:m-1 :is(:where(img):not(:where([class~="not-prose"] *))) {
|
||||
margin: 0.25rem;
|
||||
}
|
||||
|
||||
.prose-img\:my-1 :is(:where(img):not(:where([class~="not-prose"] *))) {
|
||||
margin-top: 0.25rem;
|
||||
margin-bottom: 0.25rem;
|
||||
}
|
||||
|
||||
@media (min-width: 1024px) {
|
||||
.lg\:w-screen {
|
||||
width: 100vw;
|
||||
|
|
|
|||
|
|
@ -1,29 +1,9 @@
|
|||
/**
|
||||
* This is a minimal config.
|
||||
*
|
||||
* If you need the full config, get it from here:
|
||||
* https://unpkg.com/browse/tailwindcss@latest/stubs/defaultConfig.stub.js
|
||||
*/
|
||||
|
||||
module.exports = {
|
||||
content: [
|
||||
/**
|
||||
* HTML. Paths to Django template files that will contain Tailwind CSS classes.
|
||||
*/
|
||||
|
||||
/* Templates within theme app (<tailwind_app_name>/templates), e.g. base.html. */
|
||||
"../templates/**/*.html",
|
||||
|
||||
/*
|
||||
* Main templates directory of the project (BASE_DIR/templates).
|
||||
* Adjust the following line to match your project structure.
|
||||
*/
|
||||
"../../../templates/**/*.html",
|
||||
|
||||
/*
|
||||
* Templates in other django apps (BASE_DIR/<any_app_name>/templates).
|
||||
* Adjust the following line to match your project structure.
|
||||
*/
|
||||
"../../../**/templates/**/*.html",
|
||||
|
||||
/**
|
||||
|
|
@ -39,7 +19,7 @@ module.exports = {
|
|||
* Python: If you use Tailwind CSS classes in Python, uncomment the following line
|
||||
* and make sure the pattern below matches your project structure.
|
||||
*/
|
||||
// '../../**/*.py'
|
||||
"../../../core/templatetags/*.py",
|
||||
],
|
||||
theme: {
|
||||
extend: {},
|
||||
|
|
|
|||