Skip to content

Commit

Permalink
Refactor language tree views
Browse files Browse the repository at this point in the history
  • Loading branch information
timobrembeck committed Sep 8, 2022
1 parent 52ecdc6 commit b2eaf7e
Show file tree
Hide file tree
Showing 12 changed files with 182 additions and 336 deletions.
2 changes: 1 addition & 1 deletion integreat_cms/cms/templates/_base.html
Original file line number Diff line number Diff line change
Expand Up @@ -209,7 +209,7 @@
</div>
{% endif %}
{% if perms.cms.view_languagetreenode %}
<a href="{% url 'language_tree' region_slug=request.region.slug %}"
<a href="{% url 'languagetreenodes' region_slug=request.region.slug %}"
class="{% if current_menu_item|in_list:'languagetreenodes,language_tree_form' %} active {% endif %}">
<i data-feather="flag"></i>
{% trans 'Language Tree' %}
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
{% extends "_base.html" %}

{% load i18n %}
{% load base_filters %}
{% load static %}
{% load widget_tweaks %}

{% block content %}
<form method="post" data-unsaved-warning>
{% csrf_token %}
<div class="flex flex-wrap mb-4">
<div class="w-2/5 flex flex-wrap flex-col justify-center">
<h1 class="heading">
{% if form.instance.id %}
{% blocktrans %}Edit language tree node{% endblocktrans %}
{% else %}
{% trans 'Add language' %}
{% endif %}
</h1>
</div>
{% if perms.cms.change_languagetreenode %}
<div class="w-3/5 flex justify-end">
<button name="submit_publish" class="btn">{% trans 'Save' %}</button>
</div>
{% endif %}
</div>

<div class="mb-4 rounded border border-blue-500 shadow-2xl bg-white">
<div class="p-4 rounded bg-water-500">
<h3 class="heading font-bold text-black"><i data-feather="flag" class="mr-2"></i> {% trans 'Language tree node' %}</h3>
</div>
<div class="px-4 pb-4 divide-y divide-gray-200 space-y-4">
<div>
<label for="{{ form.language.id_for_label }}">{{ form.language.label }}</label>
{% render_field form.language|add_error_class:"border-red-500" %}
</div>
<div>
<label for="{{ form.parent.id_for_label }}">{{ form.parent.label }}</label>
{% render_field form|get_private_member:"ref_node_id" %}
{% render_field form|get_private_member:"position" %}
{% render_field form.parent|add_error_class:"border-red-500" %}
</div>
<div>
{% render_field form.visible|add_error_class:"border-red-500" %}
<label for="{{ form.visible.id_for_label }}">{{ form.visible.label }}</label>
<div class="help-text">{{ form.visible.help_text }}</div>
</div>
<div>
{% render_field form.active|add_error_class:"border-red-500" %}
<label for="{{ form.active.id_for_label }}">{{ form.active.label }}</label>
<div class="help-text">{{ form.active.help_text }}</div>
</div>
</div>
</div>
</form>
{% endblock content %}
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
<h1 class="heading">{% trans 'Language tree' %}</h1>
<div class="flex flex-wrap justify-end">
{% if perms.cms.change_languagetreenode %}
<a href="{% url 'new_language_tree_node' region_slug=request.region.slug %}" class="btn">
<a href="{% url 'new_languagetreenode' region_slug=request.region.slug %}" class="btn">
{% trans 'Create language tree node' %}
</a>
{% endif %}
Expand All @@ -31,7 +31,7 @@ <h1 class="heading">{% trans 'Language tree' %}</h1>
</thead>
<tbody>
{% for node in languagetreenodes %}
{% include "language_tree/language_tree_node.html" %}
{% include "languagetreenodes/languagetreenode_list_row.html" %}
{% empty %}
<tr>
<td></td>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,30 +11,22 @@
</span>
</td>
<td>
<a href="{% url 'edit_language_tree_node' language_tree_node_id=node.id region_slug=request.region.slug %}" class="block py-1.5 px-2 text-gray-800">
<a href="{% url 'edit_languagetreenode' pk=node.pk region_slug=request.region.slug %}" class="block py-1.5 px-2 text-gray-800">
{{ node.translated_name }}
</a>
</td>
<td>
<a href="{% url 'edit_language_tree_node' language_tree_node_id=node.id region_slug=request.region.slug %}" class="block py-1.5 px-2 text-gray-800">
{{ node.slug }}
</a>
{{ node.slug }}
</td>
<td>
<a href="{% url 'edit_language_tree_node' language_tree_node_id=node.id region_slug=request.region.slug %}" class="block py-1.5 px-2 text-gray-800">
{{ node.language.bcp47_tag }}
</a>
{{ node.language.bcp47_tag }}
</td>
<td>
<a href="{% url 'edit_language_tree_node' language_tree_node_id=node.id region_slug=request.region.slug %}" class="block py-1.5 px-2 text-gray-800">
{{ node.language.get_text_direction_display }}
</a>
{{ node.language.get_text_direction_display }}
</td>
<td>
<a href="{% url 'edit_language_tree_node' language_tree_node_id=node.id region_slug=request.region.slug %}" class="block py-1.5 px-2 text-gray-800">
<span class="fp fp-{{ node.language.primary_country_code }} fp-rounded " title="{{ node.language.get_primary_country_code_display }}"></span>
<span class="fp fp-{{ node.language.secondary_country_code }} fp-rounded " title="{{ node.language.get_secondary_country_code_display }}"></span>
</a>
<span class="fp fp-{{ node.language.primary_country_code }} fp-rounded " title="{{ node.language.get_primary_country_code_display }}"></span>
<span class="fp fp-{{ node.language.secondary_country_code }} fp-rounded " title="{{ node.language.get_secondary_country_code_display }}"></span>
</td>
<td>
<div class="flex justify-center">
Expand Down Expand Up @@ -63,7 +55,7 @@
data-confirmation-title="{{ delete_dialog_title }}"
data-confirmation-text="{{ delete_dialog_text }}"
data-confirmation-subject="{{ node.translated_name }}"
data-action="{% url 'delete_language_tree_node' region_slug=request.region.slug language_tree_node_id=node.id %}">
data-action="{% url 'delete_languagetreenode' region_slug=request.region.slug pk=node.pk %}">
<i data-feather="trash-2" class="{% if not node.is_leaf %}text-gray-400{% else %}text-gray-800{% endif %}"></i>
</button>
{% endif %}
Expand Down
21 changes: 13 additions & 8 deletions integreat_cms/cms/urls/protected.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@

from ..forms import (
LanguageForm,
LanguageTreeNodeForm,
OfferTemplateForm,
OrganizationForm,
RegionForm,
Expand Down Expand Up @@ -1126,32 +1127,36 @@
path(
"",
language_tree.LanguageTreeView.as_view(),
name="language_tree",
name="languagetreenodes",
),
path(
"new/",
language_tree.LanguageTreeNodeFormView.as_view(),
name="new_language_tree_node",
form_views.CustomCreateView.as_view(
form_class=LanguageTreeNodeForm
),
name="new_languagetreenode",
),
path(
"<int:language_tree_node_id>/",
"<int:pk>/",
include(
[
path(
"edit/",
language_tree.LanguageTreeNodeFormView.as_view(),
name="edit_language_tree_node",
form_views.CustomUpdateView.as_view(
form_class=LanguageTreeNodeForm
),
name="edit_languagetreenode",
),
path(
"delete/",
language_tree.delete_language_tree_node,
name="delete_language_tree_node",
name="delete_languagetreenode",
),
# warning: the move url is also hardcoded in src/integreat_cms/static/js/tree_drag_and_drop.js
path(
"move/<int:target_id>/<slug:target_position>/",
language_tree.move_language_tree_node,
name="move_language_tree_node",
name="move_languagetreenode",
),
]
),
Expand Down
4 changes: 1 addition & 3 deletions integreat_cms/cms/views/language_tree/__init__.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
"""
This package contains all views related to the language tree of a region
"""
from .language_tree_actions import move_language_tree_node, delete_language_tree_node
from .language_tree_view import LanguageTreeView
from .language_tree_node_form_view import LanguageTreeNodeFormView
from .language_tree_actions import move_language_tree_node
from .language_tree_actions import delete_language_tree_node
28 changes: 11 additions & 17 deletions integreat_cms/cms/views/language_tree/language_tree_actions.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,9 +23,7 @@
@require_POST
@permission_required("cms.change_languagetreenode")
@transaction.atomic
def move_language_tree_node(
request, region_slug, language_tree_node_id, target_id, target_position
):
def move_language_tree_node(request, region_slug, pk, target_id, target_position):
"""
This action moves the given language tree node to the given position relative to the given target.
Expand All @@ -35,8 +33,8 @@ def move_language_tree_node(
:param region_slug: The slug of the region which language tree should be modified
:type region_slug: str
:param language_tree_node_id: The id of the language tree node which should be moved
:type language_tree_node_id: int
:param pk: The id of the language tree node which should be moved
:type pk: int
:param target_id: The id of the target language tree node
:type target_id: int
Expand All @@ -49,9 +47,7 @@ def move_language_tree_node(
"""

region = request.region
language_tree_node = get_object_or_404(
region.language_tree_nodes, id=language_tree_node_id
)
language_tree_node = get_object_or_404(region.language_tree_nodes, id=pk)
target = get_object_or_404(region.language_tree_nodes, id=target_id)

try:
Expand All @@ -60,7 +56,7 @@ def move_language_tree_node(
language_tree_node.move(target, target_position)
# Call the save method on the (reloaded) node in order to trigger possible signal handlers etc.
# (The move()-method executes raw sql which might cause problems if the instance isn't fetched again)
language_tree_node = LanguageTreeNode.objects.get(id=language_tree_node_id)
language_tree_node = LanguageTreeNode.objects.get(id=pk)
language_tree_node.save()
manually_invalidate_models(region)
messages.success(
Expand All @@ -80,13 +76,13 @@ def move_language_tree_node(
messages.error(request, e)
logger.exception(e)

return redirect("language_tree", **{"region_slug": region_slug})
return redirect("languagetreenodes", **{"region_slug": region_slug})


@require_POST
@permission_required("cms.delete_languagetreenode")
@transaction.atomic
def delete_language_tree_node(request, region_slug, language_tree_node_id):
def delete_language_tree_node(request, region_slug, pk):
"""
Deletes the language node of distinct region
and all page translations for this language
Expand All @@ -97,18 +93,16 @@ def delete_language_tree_node(request, region_slug, language_tree_node_id):
:param region_slug: The slug of the region which language node should be deleted
:type region_slug: str
:param language_tree_node_id: The id of the language tree node which should be deleted
:type language_tree_node_id: int
:param pk: The id of the language tree node which should be deleted
:type pk: int
:return: A redirection to the language tree
:rtype: ~django.http.HttpResponseRedirect
"""
# get current region
region = request.region
# get current selected language node
language_node = get_object_or_404(
region.language_tree_nodes, id=language_tree_node_id
)
language_node = get_object_or_404(region.language_tree_nodes, id=pk)
# get all page translation assigned to the language node
page_translations = language_node.language.page_translations
# filter those translation that belong to the region and delete them
Expand Down Expand Up @@ -139,7 +133,7 @@ def delete_language_tree_node(request, region_slug, language_tree_node_id):
'The language tree node "{}" and all corresponding translations were successfully deleted.'
).format(language_node.translated_name),
)
return redirect("language_tree", **{"region_slug": region_slug})
return redirect("languagetreenodes", **{"region_slug": region_slug})


def manually_invalidate_models(region):
Expand Down

0 comments on commit b2eaf7e

Please sign in to comment.