diff --git a/HISTORY.rst b/HISTORY.rst index 74e3f54e1e..69d68f7cd0 100644 --- a/HISTORY.rst +++ b/HISTORY.rst @@ -195,6 +195,10 @@ - Moved the navigation templates from the appearance app to the navigation app. - Moved the dashboard and dashboard widgets to their own app. +- Converted the calculate form title template into a template tag. + The result of the template tag is applied as the title property + of the H3 HTML tag allowing users to view the full title on + mouse hover if it was truncated. 3.1.9 (2018-11-01) ================== diff --git a/mayan/apps/appearance/settings.py b/mayan/apps/appearance/settings.py index 5a53ef6719..da05640a5e 100644 --- a/mayan/apps/appearance/settings.py +++ b/mayan/apps/appearance/settings.py @@ -7,6 +7,7 @@ from mayan.apps.smart_settings import Namespace from .literals import DEFAULT_MAXIMUM_TITLE_LENGTH namespace = Namespace(name='appearance', label=_('Appearance')) + setting_max_title_length = namespace.add_setting( default=DEFAULT_MAXIMUM_TITLE_LENGTH, global_name='APPEARANCE_MAXIMUM_TITLE_LENGTH', help_text=_( diff --git a/mayan/apps/appearance/templates/appearance/calculate_form_title.html b/mayan/apps/appearance/templates/appearance/calculate_form_title.html index 8e152170ca..8da8e72972 100644 --- a/mayan/apps/appearance/templates/appearance/calculate_form_title.html +++ b/mayan/apps/appearance/templates/appearance/calculate_form_title.html @@ -1,42 +1,15 @@ {% load i18n %} -{% load smart_settings_tags %} +{% load common_tags %} -{% smart_setting 'APPEARANCE_MAXIMUM_TITLE_LENGTH' as maximum_title_length %} +{% common_calculate_title as form_title %} {% if not non_html_title %} -

+

{% endif %} - - {% if title %} - {{ title|truncatechars:maximum_title_length }} - {% else %} - {% if delete_view %} - {% trans 'Confirm delete' %} - {% else %} - {% if form %} - {% if object %} - {% blocktrans with object as object %}Edit: {{ object }}{% endblocktrans %} - {% else %} - {% trans 'Confirm' %} - {% endif %} - {% else %} - {% if read_only %} - {% blocktrans %}Details for: {{ object }}{% endblocktrans %} - {% else %} - {% if object %} - {% blocktrans with object as object %}Edit: {{ object }}{% endblocktrans %} - {% else %} - {% trans 'Create' %} - {% endif %} - {% endif %} - {% endif %} - {% endif %} - {% endif %} - + {{ form_title }} {% if not non_html_title %}

- {% if subtitle %} {{ subtitle }} {% endif %} diff --git a/mayan/apps/common/classes.py b/mayan/apps/common/classes.py index 18db047f6f..08f4102488 100644 --- a/mayan/apps/common/classes.py +++ b/mayan/apps/common/classes.py @@ -4,7 +4,6 @@ import hashlib from django.apps import apps from django.db import models -from django.template import loader from django.template.response import TemplateResponse from django.urls import reverse from django.utils.encoding import force_text, python_2_unicode_compatible diff --git a/mayan/apps/common/templatetags/common_tags.py b/mayan/apps/common/templatetags/common_tags.py index daaf3975c0..71b1606d35 100644 --- a/mayan/apps/common/templatetags/common_tags.py +++ b/mayan/apps/common/templatetags/common_tags.py @@ -3,10 +3,13 @@ from __future__ import unicode_literals from json import dumps from django.template import Context, Library +from django.template.defaultfilters import truncatechars from django.template.loader import get_template from django.utils.encoding import force_text +from django.utils.translation import ugettext_lazy as _ import mayan +from mayan.apps.appearance.settings import setting_max_title_length from ..classes import Collection from ..literals import MESSAGE_SQLITE_WARNING @@ -58,3 +61,28 @@ def render_subtemplate(context, template_name, template_context): new_context = Context(context.flatten()) new_context.update(Context(template_context)) return get_template(template_name).render(new_context.flatten()) + + +@register.simple_tag(takes_context=True) +def common_calculate_title(context): + if context.get('title'): + return truncatechars( + value=context.get('title'), arg=setting_max_title_length.value + ) + else: + if context.get('delete_view'): + return _('Confirm delete') + else: + if context.get('form'): + if context.get('object'): + return _('Edit %s') % context.get('object') + else: + return _('Confirm') + else: + if context.get('read_only'): + return _('Details for: %s') % context.get('object') + else: + if context.get('object'): + return _('Edit: %s') % context.get('object') + else: + return _('Create')