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

add colored tags

parent 69e3190a
Branches
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
from django.utils import timezone
from modelcluster.contrib.taggit import ClusterTaggableManager
from modelcluster.fields import ParentalKey
from taggit.models import TaggedItemBase
from taggit.models import ItemBase, TagBase
from wagtail.admin.panels import (
FieldPanel,
InlinePanel,
......@@ -16,17 +16,33 @@ from wagtail.contrib.settings.models import BaseSiteSetting, register_setting
from wagtail.documents import get_document_model
from wagtail.fields import RichTextField, StreamField
from wagtail.models import Page
from wagtail_color_panel.edit_handlers import NativeColorPanel
from wagtail_color_panel.fields import ColorField
from .blocks import PersonBlock
# --- 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(
"home.HomeArticlePage", on_delete=models.CASCADE, related_name="tagged_items"
)
tag = models.ForeignKey(Tag, on_delete=models.CASCADE, related_name="article_tags")
# --- END Tags ---
......@@ -428,7 +444,9 @@ class HomeArticlePage(HomeContentPageMixin):
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")
......
......@@ -8,7 +8,11 @@
<small class="text-pii-cyan uppercase font-bold">
{% 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 %}
</small>
......
......@@ -39,7 +39,10 @@
<div class="p-7 flex flex-col gap-2 h-full">
<small class="text-white uppercase font-bold">
{% 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 %}
</small>
<h3 class="font-serif text-xl leading-6 font-bold">{{ article.title }}</h3>
......
......@@ -40,7 +40,10 @@
<div class="p-7 flex flex-col gap-2 h-full">
<small class="text-pii-cyan uppercase font-bold">
{% 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 %}
</small>
<h3 class="font-serif text-xl leading-6 font-bold">{{ article.title }}</h3>
......
......@@ -40,6 +40,7 @@ INSTALLED_APPS = [
"wagtail.contrib.redirects",
"wagtail.contrib.routable_page",
"wagtail.contrib.settings",
"wagtail.contrib.modeladmin",
"wagtail.embeds",
"wagtail.sites",
"wagtail.users",
......@@ -52,6 +53,7 @@ INSTALLED_APPS = [
"wagtail",
"modelcluster",
"taggit",
"wagtail_color_panel",
"django.contrib.admin",
"django.contrib.auth",
"django.contrib.contenttypes",
......
......@@ -5,3 +5,4 @@ django-modelcluster==6.0
psycopg2-binary==2.9.6
wagtail==5.0.2
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