Skip to content
Snippets Groups Projects
Commit 72cd4eac authored by Tomáš Valenta's avatar Tomáš Valenta
Browse files

add colored tags

parent 69e3190a
No related branches found
No related tags found
No related merge requests found
Showing
with 280 additions and 6 deletions
from wagtail.contrib.modeladmin.options import ModelAdmin, modeladmin_register
from .models import Tag
class TagAdmin(ModelAdmin):
model = Tag
menu_label = "Štítky"
menu_icon = "tag"
menu_order = 290
add_to_settings_menu = False
exclude_from_explorer = False
modeladmin_register(TagAdmin)
# Generated by Django 4.2.4 on 2023-08-21 18:21
import django.db.models.deletion
import modelcluster.contrib.taggit
import modelcluster.fields
import wagtail_color_panel.fields
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("contenttypes", "0002_remove_content_type_name"),
("home", "0033_merge_20230820_1844"),
]
operations = [
migrations.CreateModel(
name="Tag",
fields=[
(
"id",
models.BigAutoField(
auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
(
"name",
models.CharField(max_length=100, unique=True, verbose_name="name"),
),
(
"slug",
models.SlugField(
allow_unicode=True,
max_length=100,
unique=True,
verbose_name="slug",
),
),
(
"bg_color",
wagtail_color_panel.fields.ColorField(
blank=True, max_length=7, null=True, verbose_name="Barva pozadí"
),
),
(
"fg_color",
wagtail_color_panel.fields.ColorField(
blank=True, max_length=7, null=True, verbose_name="Barva textu"
),
),
],
options={
"abstract": False,
},
),
migrations.CreateModel(
name="TaggedArticle",
fields=[
(
"id",
models.BigAutoField(
auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
(
"object_id",
models.IntegerField(db_index=True, verbose_name="object ID"),
),
(
"content_object",
modelcluster.fields.ParentalKey(
on_delete=django.db.models.deletion.CASCADE,
related_name="tagged_items",
to="home.homearticlepage",
),
),
(
"content_type",
models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE,
related_name="%(app_label)s_%(class)s_tagged_items",
to="contenttypes.contenttype",
verbose_name="content type",
),
),
(
"tag",
models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE,
related_name="%(app_label)s_%(class)s_items",
to="home.tag",
),
),
],
options={
"abstract": False,
},
),
migrations.DeleteModel(
name="ArticleTag",
),
migrations.AlterField(
model_name="homearticlepage",
name="tags",
field=modelcluster.contrib.taggit.ClusterTaggableManager(
blank=True,
help_text="A comma-separated list of tags.",
through="home.TaggedArticle",
to="home.Tag",
verbose_name="Štítky",
),
),
]
# Generated by Django 4.2.4 on 2023-08-21 18:26
import wagtail_color_panel.fields
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
("home", "0034_tag_taggedarticle_delete_articletag_and_more"),
]
operations = [
migrations.AlterField(
model_name="tag",
name="bg_color",
field=wagtail_color_panel.fields.ColorField(
default="#fafafa", max_length=7, verbose_name="Barva pozadí"
),
),
migrations.AlterField(
model_name="tag",
name="fg_color",
field=wagtail_color_panel.fields.ColorField(
default="#000000", max_length=7, verbose_name="Barva textu"
),
),
]
# Generated by Django 4.2.4 on 2023-08-21 18:44
import django.db.models.deletion
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("home", "0035_alter_tag_bg_color_alter_tag_fg_color"),
]
operations = [
migrations.AlterField(
model_name="taggedarticle",
name="tag",
field=models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE,
related_name="article_tags",
to="home.tag",
),
),
]
# Generated by Django 4.2.4 on 2023-08-21 19:06
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
("home", "0036_alter_taggedarticle_tag"),
]
operations = [
migrations.RemoveField(
model_name="homearticlepage",
name="tags",
),
]
# Generated by Django 4.2.4 on 2023-08-21 19:06
import modelcluster.contrib.taggit
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
("home", "0037_remove_homearticlepage_tags"),
]
operations = [
migrations.AddField(
model_name="homearticlepage",
name="tags",
field=modelcluster.contrib.taggit.ClusterTaggableManager(
blank=True,
help_text="A comma-separated list of tags.",
through="home.TaggedArticle",
to="home.Tag",
verbose_name="Štítky",
),
),
]
# Generated by Django 4.2.4 on 2023-08-21 19:09
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
("home", "0038_homearticlepage_tags"),
]
operations = [
migrations.RemoveField(
model_name="taggedarticle",
name="content_type",
),
migrations.RemoveField(
model_name="taggedarticle",
name="object_id",
),
]
...@@ -2,7 +2,7 @@ from django.db import models ...@@ -2,7 +2,7 @@ from django.db import models
from django.utils import timezone from django.utils import timezone
from modelcluster.contrib.taggit import ClusterTaggableManager from modelcluster.contrib.taggit import ClusterTaggableManager
from modelcluster.fields import ParentalKey from modelcluster.fields import ParentalKey
from taggit.models import TaggedItemBase from taggit.models import ItemBase, TagBase
from wagtail.admin.panels import ( from wagtail.admin.panels import (
FieldPanel, FieldPanel,
InlinePanel, InlinePanel,
...@@ -16,17 +16,33 @@ from wagtail.contrib.settings.models import BaseSiteSetting, register_setting ...@@ -16,17 +16,33 @@ from wagtail.contrib.settings.models import BaseSiteSetting, register_setting
from wagtail.documents import get_document_model from wagtail.documents import get_document_model
from wagtail.fields import RichTextField, StreamField from wagtail.fields import RichTextField, StreamField
from wagtail.models import Page from wagtail.models import Page
from wagtail_color_panel.edit_handlers import NativeColorPanel
from wagtail_color_panel.fields import ColorField
from .blocks import PersonBlock from .blocks import PersonBlock
# --- BEGIN Tags --- # --- BEGIN Tags ---
class ArticleTag(TaggedItemBase): class Tag(TagBase):
bg_color = ColorField(verbose_name="Barva pozadí", default="#fafafa")
fg_color = ColorField(verbose_name="Barva textu", default="#000000")
panels = [
FieldPanel("name"),
FieldPanel("slug"),
NativeColorPanel("bg_color"),
NativeColorPanel("fg_color"),
]
class TaggedArticle(ItemBase):
content_object = ParentalKey( content_object = ParentalKey(
"home.HomeArticlePage", on_delete=models.CASCADE, related_name="tagged_items" "home.HomeArticlePage", on_delete=models.CASCADE, related_name="tagged_items"
) )
tag = models.ForeignKey(Tag, on_delete=models.CASCADE, related_name="article_tags")
# --- END Tags --- # --- END Tags ---
...@@ -428,7 +444,9 @@ class HomeArticlePage(HomeContentPageMixin): ...@@ -428,7 +444,9 @@ class HomeArticlePage(HomeContentPageMixin):
default=False, default=False,
) )
tags = ClusterTaggableManager(through=ArticleTag, blank=True, verbose_name="Štítky") tags = ClusterTaggableManager(
through=TaggedArticle, blank=True, verbose_name="Štítky"
)
perex = models.TextField(verbose_name="Perex") perex = models.TextField(verbose_name="Perex")
......
...@@ -8,7 +8,11 @@ ...@@ -8,7 +8,11 @@
<small class="text-pii-cyan uppercase font-bold"> <small class="text-pii-cyan uppercase font-bold">
{% for tag in page.tags.all %} {% for tag in page.tags.all %}
<a href="/clanky?tag={{ tag.name }}">{{ tag.name }}</a>&nbsp; <a
href="/clanky?tag={{ tag.name }}"
class="px-2 py-0.5 rounded-sm"
style="background-color:{{ tag.bg_color }};color:{{ tag.fg_color }}"
>{{ tag.name }}</a>&nbsp;
{% endfor %} {% endfor %}
</small> </small>
......
...@@ -39,7 +39,10 @@ ...@@ -39,7 +39,10 @@
<div class="p-7 flex flex-col gap-2 h-full"> <div class="p-7 flex flex-col gap-2 h-full">
<small class="text-white uppercase font-bold"> <small class="text-white uppercase font-bold">
{% for tag in article.tags.all %} {% for tag in article.tags.all %}
{{ tag.name }}&nbsp; <span
class="px-2 py-0.5 rounded-sm"
style="background-color:{{ tag.bg_color }};color:{{ tag.fg_color }}"
>{{ tag.name }}</span>&nbsp;
{% endfor %} {% endfor %}
</small> </small>
<h3 class="font-serif text-xl leading-6 font-bold">{{ article.title }}</h3> <h3 class="font-serif text-xl leading-6 font-bold">{{ article.title }}</h3>
......
...@@ -40,7 +40,10 @@ ...@@ -40,7 +40,10 @@
<div class="p-7 flex flex-col gap-2 h-full"> <div class="p-7 flex flex-col gap-2 h-full">
<small class="text-pii-cyan uppercase font-bold"> <small class="text-pii-cyan uppercase font-bold">
{% for tag in article.tags.all %} {% for tag in article.tags.all %}
{{ tag.name }}&nbsp; <span
class="px-2 py-0.5 rounded-sm"
style="background-color:{{ tag.bg_color }};color:{{ tag.fg_color }}"
>{{ tag.name }}</span>&nbsp;
{% endfor %} {% endfor %}
</small> </small>
<h3 class="font-serif text-xl leading-6 font-bold">{{ article.title }}</h3> <h3 class="font-serif text-xl leading-6 font-bold">{{ article.title }}</h3>
......
...@@ -40,6 +40,7 @@ INSTALLED_APPS = [ ...@@ -40,6 +40,7 @@ INSTALLED_APPS = [
"wagtail.contrib.redirects", "wagtail.contrib.redirects",
"wagtail.contrib.routable_page", "wagtail.contrib.routable_page",
"wagtail.contrib.settings", "wagtail.contrib.settings",
"wagtail.contrib.modeladmin",
"wagtail.embeds", "wagtail.embeds",
"wagtail.sites", "wagtail.sites",
"wagtail.users", "wagtail.users",
...@@ -52,6 +53,7 @@ INSTALLED_APPS = [ ...@@ -52,6 +53,7 @@ INSTALLED_APPS = [
"wagtail", "wagtail",
"modelcluster", "modelcluster",
"taggit", "taggit",
"wagtail_color_panel",
"django.contrib.admin", "django.contrib.admin",
"django.contrib.auth", "django.contrib.auth",
"django.contrib.contenttypes", "django.contrib.contenttypes",
......
...@@ -5,3 +5,4 @@ django-modelcluster==6.0 ...@@ -5,3 +5,4 @@ django-modelcluster==6.0
psycopg2-binary==2.9.6 psycopg2-binary==2.9.6
wagtail==5.0.2 wagtail==5.0.2
wagtail-footnotes==0.10.0 wagtail-footnotes==0.10.0
wagtail-color-panel==1.4.1
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment