diff --git a/home/admin.py b/home/admin.py new file mode 100644 index 0000000000000000000000000000000000000000..c8a55318c3e088f86ba2e25e32857ac8ddac7589 --- /dev/null +++ b/home/admin.py @@ -0,0 +1,15 @@ +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) diff --git a/home/migrations/0034_tag_taggedarticle_delete_articletag_and_more.py b/home/migrations/0034_tag_taggedarticle_delete_articletag_and_more.py new file mode 100644 index 0000000000000000000000000000000000000000..11a982120acbdb0ccd4218ff2d2cff7ebf039986 --- /dev/null +++ b/home/migrations/0034_tag_taggedarticle_delete_articletag_and_more.py @@ -0,0 +1,119 @@ +# 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", + ), + ), + ] diff --git a/home/migrations/0035_alter_tag_bg_color_alter_tag_fg_color.py b/home/migrations/0035_alter_tag_bg_color_alter_tag_fg_color.py new file mode 100644 index 0000000000000000000000000000000000000000..71bc07ccc6edf479d5c06c80ace59e4f90ccd67a --- /dev/null +++ b/home/migrations/0035_alter_tag_bg_color_alter_tag_fg_color.py @@ -0,0 +1,27 @@ +# 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" + ), + ), + ] diff --git a/home/migrations/0036_alter_taggedarticle_tag.py b/home/migrations/0036_alter_taggedarticle_tag.py new file mode 100644 index 0000000000000000000000000000000000000000..47095fea16717044a497e863825431c92d39043f --- /dev/null +++ b/home/migrations/0036_alter_taggedarticle_tag.py @@ -0,0 +1,22 @@ +# 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", + ), + ), + ] diff --git a/home/migrations/0037_remove_homearticlepage_tags.py b/home/migrations/0037_remove_homearticlepage_tags.py new file mode 100644 index 0000000000000000000000000000000000000000..54a9d307c136ef7f4a640f9dce33edcd2e67d6f6 --- /dev/null +++ b/home/migrations/0037_remove_homearticlepage_tags.py @@ -0,0 +1,16 @@ +# 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", + ), + ] diff --git a/home/migrations/0038_homearticlepage_tags.py b/home/migrations/0038_homearticlepage_tags.py new file mode 100644 index 0000000000000000000000000000000000000000..d6165dc43e415da51ed3930c315fa798810b243e --- /dev/null +++ b/home/migrations/0038_homearticlepage_tags.py @@ -0,0 +1,24 @@ +# 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", + ), + ), + ] diff --git a/home/migrations/0039_remove_taggedarticle_content_type_and_more.py b/home/migrations/0039_remove_taggedarticle_content_type_and_more.py new file mode 100644 index 0000000000000000000000000000000000000000..fbefe01115652db96357081ae82dc636a3f40c3a --- /dev/null +++ b/home/migrations/0039_remove_taggedarticle_content_type_and_more.py @@ -0,0 +1,20 @@ +# 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", + ), + ] diff --git a/home/models.py b/home/models.py index f3f57c03793d6db48cd12349ef571a332b05d1c7..70b59e0d53788c5fea322cb57f7530f476d90ab2 100644 --- a/home/models.py +++ b/home/models.py @@ -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") diff --git a/home/templates/home/home_article_page.html b/home/templates/home/home_article_page.html index b3f3ccf723583a19581d12f007a7322a4931531d..3889a99b10c9b997155243c187033179bdf5b3c2 100644 --- a/home/templates/home/home_article_page.html +++ b/home/templates/home/home_article_page.html @@ -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> + <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> {% endfor %} </small> diff --git a/home/templates/home/home_articles_page.html b/home/templates/home/home_articles_page.html index 19193d9a4dcc816d0ab98d930100ec6416d417f6..4da90889c7354b8e733f0d75975f0ec5cecf0a53 100644 --- a/home/templates/home/home_articles_page.html +++ b/home/templates/home/home_articles_page.html @@ -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 }} + <span + class="px-2 py-0.5 rounded-sm" + style="background-color:{{ tag.bg_color }};color:{{ tag.fg_color }}" + >{{ tag.name }}</span> {% endfor %} </small> <h3 class="font-serif text-xl leading-6 font-bold">{{ article.title }}</h3> diff --git a/home/templates/home/home_page.html b/home/templates/home/home_page.html index 47215f09fbcc5d1fc4553cfc10f1603037710d3d..92af4c3806a2b272947a9c8351ffe20c14a0fc9f 100644 --- a/home/templates/home/home_page.html +++ b/home/templates/home/home_page.html @@ -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 }} + <span + class="px-2 py-0.5 rounded-sm" + style="background-color:{{ tag.bg_color }};color:{{ tag.fg_color }}" + >{{ tag.name }}</span> {% endfor %} </small> <h3 class="font-serif text-xl leading-6 font-bold">{{ article.title }}</h3> diff --git a/institut/settings/base.py b/institut/settings/base.py index e2ebb9eba361c10b26fee7d26266011775f8cfc4..a1648f279178b3b72ce212a885d5653dd66d56ab 100644 --- a/institut/settings/base.py +++ b/institut/settings/base.py @@ -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", diff --git a/requirements/base.txt b/requirements/base.txt index 5d8f90c3ab7358d16593b863591846a02d43e550..7f3edb74ce8c6e945996b8c9126a71798103c0ee 100644 --- a/requirements/base.txt +++ b/requirements/base.txt @@ -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