From 1e567db1b1b951ab07f03710bf9a10234670b28a Mon Sep 17 00:00:00 2001 From: karelhovorka Date: Sun, 18 Jul 2021 12:17:18 +0200 Subject: [PATCH] semi-configurable selection of elements to generate tabs in admin --- .../js/tabbed_translation_fields.js | 45 +++++++++++++++---- 1 file changed, 37 insertions(+), 8 deletions(-) diff --git a/modeltranslation/static/modeltranslation/js/tabbed_translation_fields.js b/modeltranslation/static/modeltranslation/js/tabbed_translation_fields.js index b4233fbc..d5ab7307 100644 --- a/modeltranslation/static/modeltranslation/js/tabbed_translation_fields.js +++ b/modeltranslation/static/modeltranslation/js/tabbed_translation_fields.js @@ -11,6 +11,34 @@ var google, django, gettext; }; jQuery(function ($) { + var detectTemplate = function() { + if (document.querySelector("#jazzmin-theme, #jazzy-navbar, #jazzy-tabs, #jazzy-actions")) { + return "jazzmin"; + } + return "default"; + } + + var selectorMapping = { + "default": { + "mainHeader": () => $("#content").find("h1"), + "tabContainer": (el) => $(el).closest(".form-row"), + "tabUlClass": "", + "tabLiClass": "", + "tabAClass": "", + "tabErrorClass": "ui-tab-has-errors" + }, + "jazzmin": { + "mainHeader": () => $("#content-main").find(".card-title:first"), + "tabContainer": (el) => $(el).closest(".form-group"), + "tabUlClass": "nav nav-tabs", + "tabLiClass": "nav-item", + "tabAClass": "nav-link", + "tabErrorClass": "ui-tab-has-errors" + } + } + + const selectors = selectorMapping[detectTemplate()]; + var TranslationField = function (options) { this.el = options.el; this.cls = options.cls; @@ -181,12 +209,12 @@ var google, django, gettext; $.each(groupedTranslations, function (groupId, lang) { if (groupId.includes("__prefix__")) return; var tabsContainer = $("
"), - tabsList = $(""), + tabsList = $(``), insertionPoint, activeTab = 0; tabsContainer.append(tabsList); $.each(lang, function (lang, el) { - var container = $(el).closest(".form-row"), + var container = selectors["tabContainer"](el), label = $("label", container), fieldLabel = container.find("label"), tabId = "tab_" + $(el).attr("id"), @@ -212,9 +240,9 @@ var google, django, gettext; container.find("script").remove(); panel = $('
').append(container); tab = $( - "' + lang.replace("_", "-") + @@ -224,7 +252,7 @@ var google, django, gettext; tabsContainer.append(panel); if (container.hasClass("errors")) { activeTab = tabsList.find("li").length - 1; - tab.addClass("ui-tab-has-errors"); + tab.addClass(selectors["tabErrorClass"]); } }); insertionPoint.el[insertionPoint.insert](tabsContainer); @@ -426,7 +454,7 @@ var google, django, gettext; tabsContainer.append($panel); if ($container.hasClass("errors")) { activeTab = tabsList.find("li").length - 1; - tab.addClass("ui-tab-has-errors"); + tab.addClass(selectors["tabErrorClass"]); } }); insertionPoint.el[insertionPoint.insert](tabsContainer); @@ -463,7 +491,8 @@ var google, django, gettext; ); }); this.update(tabs); - $("#content").find("h1").append(" ").append(self.$select); + selectors["mainHeader"]().append(" ").append(self.$select); + }, update: function (tabs) {