Skip to content
Snippets Groups Projects
Commit 8a23f709 authored by Nik | Klampfradler's avatar Nik | Klampfradler
Browse files

Merge branch '48-update-icon-choices-for-models-with-icons' into 'master'

Resolve "Update icon choices for models with icons"

Closes #48

See merge request !115
parents f011b7f3 955732b6
No related branches found
No related tags found
1 merge request!115Resolve "Update icon choices for models with icons"
Pipeline #76287 canceled
......@@ -14,6 +14,11 @@ Added
* Add Ukrainian locale (contributed by Sergiy Gorichenko from Fre(i)e Software GmbH).
Changed
~~~~~~~
* Update icon choices for user-selectable icons with new Iconify iicon font.
`2.0.2`_ - 2022-01-16
-------------------
......
# noqa
from django.contrib import admin
from django.db.models import Model
from django.utils.html import format_html
from django.utils.translation import gettext_lazy as _
from .models import FAQQuestion, FAQSection, IssueCategory
MATERIAL_ICONS_CSS_URL = "/static/material-design-icons-iconfont/dist/material-design-icons.css"
class IconMixin(object):
"""Mixin for icon lookup."""
def _icon(self, obj: Model) -> str:
return format_html('<i class="material-icons">{}<i/>', obj.icon)
class FAQSectionAdmin(IconMixin, admin.ModelAdmin):
"""ModelAdmin for FAQ sections."""
list_display = ("name", "_icon")
class Media:
css = {"all": (MATERIAL_ICONS_CSS_URL,)}
def show(modeladmin, request, queryset):
queryset.update(show=True)
from .models import IssueCategory
show.short_description = _("Publish selected questions")
def hide(modeladmin, request, queryset):
queryset.update(show=False)
hide.short_description = _("Unpublish selected questions")
class FAQQuestionAdmin(IconMixin, admin.ModelAdmin):
"""ModelAdmin for FAQ questions."""
list_display = ("question_text", "section", "_icon", "show")
actions = [show, hide]
class Media:
css = {"all": (MATERIAL_ICONS_CSS_URL,)}
class IssueCategoryAdmin(IconMixin, admin.ModelAdmin):
class IssueCategoryAdmin(admin.ModelAdmin):
"""ModelAdmin for issue categories."""
list_display = ("name", "_icon", "parent", "placeholder", "free_text")
class Media:
css = {"all": (MATERIAL_ICONS_CSS_URL,)}
list_display = ("name", "icon", "parent", "placeholder", "free_text")
admin.site.register(FAQQuestion, FAQQuestionAdmin)
admin.site.register(FAQSection, FAQSectionAdmin)
admin.site.register(IssueCategory, IssueCategoryAdmin)
This diff is collapsed.
from django.db import models
from django.urls import reverse
from django.utils.translation import gettext_lazy as _
from ckeditor.fields import RichTextField
from aleksis.core.data_checks import field_validation_data_check_factory
from aleksis.core.mixins import ExtensibleModel, GlobalPermissionModel
from aleksis.core.util.model_helpers import ICONS
......@@ -19,6 +21,8 @@ class HjelpGlobalPermissions(GlobalPermissionModel):
class FAQSection(ExtensibleModel):
data_checks = [field_validation_data_check_factory("hjelp", "FAQSection", "icon")]
name = models.CharField(max_length=255, verbose_name=_("Name"))
icon = models.CharField(
......@@ -36,6 +40,9 @@ class FAQSection(ExtensibleModel):
def __str__(self):
return self.name
def get_absolute_url(self):
return reverse("order_faq")
class Meta:
verbose_name = _("FAQ section")
verbose_name_plural = _("FAQ sections")
......@@ -51,6 +58,8 @@ class FAQSection(ExtensibleModel):
class FAQQuestion(ExtensibleModel):
data_checks = [field_validation_data_check_factory("hjelp", "FAQQuestion", "icon")]
question_text = models.TextField(verbose_name=_("Question"))
icon = models.CharField(
max_length=50,
......@@ -75,12 +84,17 @@ class FAQQuestion(ExtensibleModel):
def __str__(self):
return self.question_text
def get_absolute_url(self):
return reverse("order_faq")
class Meta:
verbose_name = _("FAQ question")
verbose_name_plural = _("FAQ questions")
class IssueCategory(ExtensibleModel):
data_checks = [field_validation_data_check_factory("hjelp", "IssueCategory", "icon")]
name = models.CharField(max_length=255, verbose_name=_("Name"))
icon = models.CharField(
max_length=50,
......@@ -108,6 +122,9 @@ class IssueCategory(ExtensibleModel):
IssueCategory.objects.filter(parent=self).delete()
super(IssueCategory, self).save(*args, **kwargs)
def get_absolute_url(self):
return reverse("admin:hjelp_issuecategory_change", args=[self.id])
class Meta:
verbose_name = _("Issue category")
verbose_name_plural = _("Issue categories")
......
......@@ -9,7 +9,7 @@
{% for section in sections %}
<section>
<h4>
<i class="material-icons {% firstof section.icon_color "black" %}-text">{{ section.icon }}</i>
<i class="material-icons iconify" data-icon="{{ section.icon }}" {% firstof section.icon_color "black" %}-text"></i>
{{ section.name }}
</h4>
......@@ -17,9 +17,7 @@
{% for question in section.visible_questions %}
<li>
<div class="collapsible-header">
<i class="material-icons">
{% firstof question.icon "question_answer" %}
</i>
<i class="material-icons iconify" data-icon="{% firstof question.icon "question_answer" %}"></i>
{{ question.question_text }}
</div>
<div class="collapsible-body">
......
......@@ -113,7 +113,7 @@
$.fn.hideAndDisable("#{{ form.free_text.auto_id }}")
$("[name=" + next_field_name + "]").next("span.select2:first").find("span.select2-selection__placeholder").html(data.placeholder);
}
$(next_field_id).children().children('.issue-category-icon').html("<i class=\"material-icons prefix small\">" + data.icon + "</i>");
$(next_field_id).children().children('.issue-category-icon').html("<i class=\"material-icons iconify prefix small\" data-icon=\"" + data.icon + "\"></i>");
if (($(next_field_id).is(':hidden')) && ((data.has_children)) || (data.free_text)){
$(next_field_id).disabled = false;
$(next_field_id).show();
......
......@@ -38,7 +38,7 @@ secondary = true
[tool.poetry.dependencies]
python = "^3.9"
aleksis-core = "^2.0"
aleksis-core = "^2.10"
[tool.poetry.dev-dependencies]
aleksis-builddeps = "*"
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment