Browse Source

Merge branch 'master' of projects.c--y.net:erik/django-shared-utils

backports/m1-live
Erik Stein 9 years ago
parent
commit
f1f28cc0d7
  1. 7
      utils/dateformat.py
  2. 0
      utils/locale/__init__.py
  3. 1
      utils/markdown_utils.py
  4. 29
      utils/templates/utils/_language_switcher_get.html
  5. 50
      utils/templates/utils/_language_switcher_post.html
  6. 33
      utils/templatetags/markup_tags.py
  7. 16
      utils/templatetags/text_tags.py
  8. 53
      utils/templatetags/translation_tags.py
  9. 12
      utils/translation.py

7
utils/dateformat.py

@ -3,6 +3,7 @@ from __future__ import unicode_literals
# Erik Stein <code@classlibrary.net>, 2016
"""
Extends django.utils.dateformat
Adds date and time range functions
# TODO Describe custom formats
"""
@ -17,8 +18,7 @@ from django.utils.encoding import force_text
from django.utils.translation import get_language, ugettext_lazy as _
# TODO Get DEFAULT_VARIANT from settings
DEFAULT_VARIANT = 'SHORT'
DEFAULT_VARIANT = getattr(settings, 'DEFAULT_DATE_VARIANT', 'SHORT')
# Adding "q"
@ -99,9 +99,8 @@ def format_date_range(from_date, to_date, variant=DEFAULT_VARIANT):
to_date = datetime_to_date(to_date)
from_format = to_format = get_format(variant + 'DATE_FORMAT')
if from_date == to_date or not to_date:
return date_format(from_date, get_format(from_format))
return date_format(from_date, from_format)
else:
if (from_date.year == to_date.year):
from_format = get_format(variant + 'DAYMONTH_FORMAT') or 'd/m/'

0
utils/locale/__init__.py

1
utils/markdown_utils.py

@ -1 +0,0 @@
from markup.utils import *

29
utils/templates/utils/_language_switcher_get.html

@ -0,0 +1,29 @@
{% load i18n translation_tags %}
{% get_language_info_list for LANGUAGES as languages %}
{% for language in languages %}
{% if request.LANGUAGE_CODE != language.code %}
<a class="language-switch" rel="alternate" hreflang="de" href="{% url 'set_language' %}?language={{ language.code }}">{{ language.name_local }}</a>
{% else %}
<span class="selected-language">{{ language.name_local }}</span>
{% endif %}
{% if not forloop.last %}{{ separator|default:"/" }}{% endif %}
{% endfor %}
{% comment %}
// Language Switcher
html {
.selected-language { color: $active_color; }
&:lang(de) {
a.language-switch[hreflang=en] { @include interactive-underline; }
}
&:lang(en) {
a.language-switch[hreflang=de] { @include interactive-underline; }
}
}
{% endcomment %}

50
utils/templates/utils/_language_switcher_post.html

@ -0,0 +1,50 @@
{% load i18n %}
{% get_language_info_list for LANGUAGES as languages %}
{% for language in languages %}
{% if request.LANGUAGE_CODE != language.code %}
<form class="language-switch" action="{% url 'set_language' %}" method="post">
{% csrf_token %}
<input name="next" type="hidden" value="{{ redirect_to }}">
<input name="language" type="hidden" value="{{ language.code }}">
<button type="submit">{{ language.name_local }}</button>
</form>
{% else %}
<span class="selected-language">{{ language.name_local }}</span>
{% endif %}
{% if not forloop.last %}{{ separator|default:"/" }}{% endif %}
{% endfor %}
{% comment %}
// Language Switcher
form.language-switch {
display: inline;
margin: 0;
padding: 0;
}
form.language-switch button {
margin: 0;
padding: 0;
border: none;
background: none;
@include interactive-underline;
}
html {
.selected-language { color: $active_color; }
&:lang(de) {
a.language-switch[hreflang=en] { @include interactive-underline; }
}
&:lang(en) {
a.language-switch[hreflang=de] { @include interactive-underline; }
}
}
{% endcomment %}

33
utils/templatetags/markup_tags.py

@ -1,33 +0,0 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
# Erik Stein <code@classlibrary.net>, 2015
from django import template
from django.template.defaultfilters import stringfilter
from django.utils.html import conditional_escape
from django.utils.safestring import mark_safe
from .. import markdown_utils
register = template.Library()
@register.filter(needs_autoescape=True)
@stringfilter
def inline_markdown(text, autoescape=None, **kwargs):
""" Doesn't wrap the markup in a HTML paragraph. """
if autoescape:
esc = conditional_escape
else:
esc = lambda x: x
return mark_safe(markdown_utils.inline_markdown_processor.convert(esc(text), **kwargs))
@register.filter(needs_autoescape=True)
@stringfilter
def markdown(text, autoescape=None, **kwargs):
if autoescape:
esc = conditional_escape
else:
esc = lambda x: x
return mark_safe(markdown_utils.markdown_processor.convert(esc(text), **kwargs))

16
utils/templatetags/text_tags.py

@ -2,6 +2,8 @@
from __future__ import unicode_literals
# Erik Stein <code@classlibrary.net>, 2015
import re
from django import template
from django.template.defaultfilters import stringfilter
from django.utils.html import conditional_escape
@ -24,3 +26,17 @@ def conditional_punctuation(value, punctuation=",", space=" "):
value += conditional_escape(space) # Append previously stripped space
return value
conditional_punctuation.is_safe = True
WHITESPACE = re.compile('\s+')
@register.filter(needs_autoescape=True)
@stringfilter
def nbsp(text, autoescape=True):
if autoescape:
esc = conditional_escape
else:
esc = lambda x: x
return mark_safe(WHITESPACE.sub('&nbsp;', esc(text.strip())))

53
utils/templatetags/translation_tags.py

@ -3,7 +3,6 @@ from __future__ import unicode_literals
# Erik Stein <code@classlibrary.net>, 2014-2015
from django import template
from django.db import models
from ..translation import get_translation, get_translated_field
@ -22,3 +21,55 @@ def translate(obj, field_name):
# Alias
translated_field = translate
'''
Unfinished:
from django import template
from django.core.urlresolvers import reverse
from django.core.urlresolvers import resolve
from django.urls.base import translate_url
class TranslatedURL(template.Node):
# from http://stackoverflow.com/questions/11437454/django-templates-get-current-url-in-another-language
def __init__(self, language):
self.language = language
def render(self, context):
view = resolve(context['request'].path)
request_language = translation.get_language()
translation.activate(self.language)
url = reverse(view.url_name, args=view.args, kwargs=view.kwargs)
translation.activate(request_language)
return url
@register.tag(name='translate_url')
def do_translate_url(parser, token):
language = token.split_contents()[1]
return TranslatedURL(language)
@register.simple_tag
def translate_url(language, url=None):
"""
{% get_language_info_list for LANGUAGES as languages %}
{% for language in languages %}
<a href="{% translate_url language.code %}">{{ language.name_local }}</a>
{% endfor %}
"""
import ipdb; ipdb.set_trace()
# if not url:
# view = resolve(context['request'].path)
# request_language = translation.get_language()
# translation.activate(self.language)
# url = reverse(view.url_name, args=view.args, kwargs=view.kwargs)
# view = resolve(context['request'].path)
return TranslatedURL(language)
'''

12
utils/translation.py

@ -8,12 +8,13 @@ from django import http
from django.conf import settings
from django.core.exceptions import ObjectDoesNotExist, FieldDoesNotExist
from django.core.urlresolvers import translate_url
from django.http import HttpResponseRedirect
from django.template.loader import select_template
from django.utils import translation
from django.views.generic import TemplateView
from django.utils.translation import check_for_language, LANGUAGE_SESSION_KEY
from django.utils.http import is_safe_url
from django.http import HttpResponseRedirect
from django.utils.six.moves.urllib.parse import urlsplit, urlunsplit
from django.utils.translation import check_for_language, LANGUAGE_SESSION_KEY
from django.views.generic import TemplateView
from django.views.i18n import LANGUAGE_QUERY_PARAMETER
@ -168,9 +169,10 @@ def active_language(lang='de'):
translation.deactivate()
def set_language(request):
def set_language_get(request):
"""
Modified copy from django.views.i18n
set_language per GET request,
modified copy from django.views.i18n (django 1.9.x)
"""
next = request.POST.get('next', request.GET.get('next'))
if not is_safe_url(url=next, host=request.get_host()):

Loading…
Cancel
Save