From 1db9f3947ccaf1ee0ac9ab099f0840050f550262 Mon Sep 17 00:00:00 2001 From: Diogo Marques Date: Tue, 5 Feb 2019 10:59:51 +0000 Subject: [PATCH] Auto populate slug when not translated --- .../js/wagtail_translated_slugs.js | 47 ++++++++++++------- wagtail_modeltranslation/wagtail_hooks.py | 23 +++++++-- 2 files changed, 48 insertions(+), 22 deletions(-) diff --git a/wagtail_modeltranslation/static/wagtail_modeltranslation/js/wagtail_translated_slugs.js b/wagtail_modeltranslation/static/wagtail_modeltranslation/js/wagtail_translated_slugs.js index 80c8e1a..64a68aa 100644 --- a/wagtail_modeltranslation/static/wagtail_modeltranslation/js/wagtail_translated_slugs.js +++ b/wagtail_modeltranslation/static/wagtail_modeltranslation/js/wagtail_translated_slugs.js @@ -1,23 +1,36 @@ $(document).ready(function () { /* Only non-live pages should auto-populate the slug from the title */ if (!$('body').hasClass('page-is-live')) { - var slugFollowsTitle = false; - - $.each(langs, function (idx, lang_code) { - lang_code = lang_code.replace("-", "_"); - $('#id_title_' + lang_code).on('focus', function () { - /* slug should only follow the title field if its value matched the title's value at the time of focus */ - var currentSlug = $('#id_slug_' + lang_code).val(); - var slugifiedTitle = cleanForSlug(this.value, true); - slugFollowsTitle = (currentSlug == slugifiedTitle); + if(!translate_slugs) { + lang_code = default_lang.replace("-", "_"); + title_selector = '#id_title_' + lang_code; + slug_selector = '#id_slug'; + slugAutoPopulateTranslation(title_selector, slug_selector); + } else { + $.each(langs, function (idx, lang_code) { + lang_code = lang_code.replace("-", "_"); + title_selector = '#id_title_' + lang_code; + slug_selector = '#id_slug_' + lang_code; + slugAutoPopulateTranslation(title_selector, slug_selector); }); - - $('#id_title_' + lang_code).on('keyup keydown keypress blur', function () { - if (slugFollowsTitle) { - var slugifiedTitle = cleanForSlug(this.value, true); - $('#id_slug_' + lang_code).val(slugifiedTitle); - } - }); - }); + } } }); + +function slugAutoPopulateTranslation(title_selector, slug_selector) { + var slugFollowsTitle = false; + + $(title_selector).on('focus', function () { + /* slug should only follow the title field if its value matched the title's value at the time of focus */ + var currentSlug = $(slug_selector).val(); + var slugifiedTitle = cleanForSlug(this.value, true); + slugFollowsTitle = (currentSlug == slugifiedTitle); + }); + + $(title_selector).on('keyup keydown keypress blur', function () { + if (slugFollowsTitle) { + var slugifiedTitle = cleanForSlug(this.value, true); + $(slug_selector).val(slugifiedTitle); + } + }); +} diff --git a/wagtail_modeltranslation/wagtail_hooks.py b/wagtail_modeltranslation/wagtail_hooks.py index 4703d72..b557bc6 100644 --- a/wagtail_modeltranslation/wagtail_hooks.py +++ b/wagtail_modeltranslation/wagtail_hooks.py @@ -2,13 +2,16 @@ import json +from six import iteritems + from django.conf import settings from django.conf.urls import url -from django.http import HttpResponse -from django.http import QueryDict -from django.utils.html import format_html, format_html_join, escape +from django.http import HttpResponse, QueryDict +from django.utils.html import escape, format_html, format_html_join from django.views.decorators.csrf import csrf_exempt -from six import iteritems +from wagtail_modeltranslation import settings as wmt_settings +from modeltranslation import settings as mt_settings + try: from wagtail.core import hooks from wagtail.core.models import Page @@ -33,7 +36,17 @@ def translated_slugs(): for lang in settings.LANGUAGES: lang_codes.append("'%s'" % lang[0]) - js_languages = "" % (", ".join(lang_codes)) + js_languages = """ + + """.format( + langs=", ".join(lang_codes), + default_lang=mt_settings.DEFAULT_LANGUAGE, + translate_slugs='true' if wmt_settings.TRANSLATE_SLUGS else 'false' + ) return format_html(js_languages) + js_includes