From 8570051876b86c08d4b72288f8598f0e0d2335e1 Mon Sep 17 00:00:00 2001 From: erdgeist Date: Mon, 17 Aug 2026 02:22:04 +0200 Subject: Bridge Rails values into JavaScript through a JSON element --- app/helpers/admin_helper.rb | 24 ++++++++++++++++++++++++ app/views/layouts/admin.html.erb | 22 ++-------------------- public/javascripts/admin_interface.js | 6 ++++++ public/javascripts/admin_search.js | 8 ++++---- 4 files changed, 36 insertions(+), 24 deletions(-) diff --git a/app/helpers/admin_helper.rb b/app/helpers/admin_helper.rb index 5a1a42a3..be20eb8b 100644 --- a/app/helpers/admin_helper.rb +++ b/app/helpers/admin_helper.rb @@ -14,4 +14,28 @@ module AdminHelper :role => "img", :class => classes, :title => hint, "aria-label" => hint) end + + def admin_bridge + { + :urls => { + :search => admin_search_path, + :menu_search => admin_menu_search_path, + :dashboard_search => admin_dashboard_search_path, + :parameterize_preview => parameterize_preview_nodes_path + }, + :strings => { + :lock_lost_prefix => t("layouts.admin.lock_lost_prefix"), + :lock_lost_link => t("layouts.admin.lock_lost_link"), + :insert_image => t("layouts.admin.insert_image"), + :insert_image_tooltip => t("layouts.admin.insert_image_tooltip"), + :copied => t("layouts.admin.copied"), + :needs_redaktion => t("layouts.admin.needs_redaktion"), + :import_markdown => t("layouts.admin.import_markdown"), + :import_markdown_tooltip => t("layouts.admin.import_markdown_tooltip"), + :import_markdown_placeholder => t("layouts.admin.import_markdown_placeholder"), + :cancel => t("admin.common.cancel"), + :insert => t("layouts.admin.insert") + } + }.to_json + end end diff --git a/app/views/layouts/admin.html.erb b/app/views/layouts/admin.html.erb index 082f172c..3f6667a8 100644 --- a/app/views/layouts/admin.html.erb +++ b/app/views/layouts/admin.html.erb @@ -15,27 +15,8 @@ <%= javascript_include_tag 'admin_bundle' %> <%= tinymce_assets %> - <%= javascript_tag nonce: true do %> - var ADMIN_SEARCH_URL = "<%= admin_search_path %>"; - var ADMIN_MENU_SEARCH_URL = "<%= admin_menu_search_path %>"; - var ADMIN_STRINGS = <%= raw({ - :lock_lost_prefix => t(".lock_lost_prefix"), - :lock_lost_link => t(".lock_lost_link"), - :insert_image => t(".insert_image"), - :insert_image_tooltip => t(".insert_image_tooltip"), - :copied => t(".copied"), - :needs_redaktion => t(".needs_redaktion"), - :import_markdown => t(".import_markdown"), - :import_markdown_tooltip => t(".import_markdown_tooltip"), - :import_markdown_placeholder => t(".import_markdown_placeholder"), - :cancel => t("admin.common.cancel"), - :insert => t(".insert") - }.to_json) %>; - var PARAMETERIZE_PREVIEW_URL = "<%= parameterize_preview_nodes_path %>"; - var DASHBOARD_SEARCH_URL = "<%= admin_dashboard_search_path %>"; - <% end %> - + <%= yield :head %> @@ -62,5 +43,6 @@ <%= yield %> + diff --git a/public/javascripts/admin_interface.js b/public/javascripts/admin_interface.js index 9b28eb06..abe434bf 100644 --- a/public/javascripts/admin_interface.js +++ b/public/javascripts/admin_interface.js @@ -1,4 +1,10 @@ +var CCCMS_CONFIG; +var ADMIN_STRINGS; + $(document).ready(function () { + CCCMS_CONFIG = JSON.parse(document.getElementById('cccms_config').textContent); + ADMIN_STRINGS = CCCMS_CONFIG.strings; + admin_search.initialize(); function effective_scheme() { diff --git a/public/javascripts/admin_search.js b/public/javascripts/admin_search.js index 852f5339..8c86a74f 100644 --- a/public/javascripts/admin_search.js +++ b/public/javascripts/admin_search.js @@ -22,7 +22,7 @@ admin_search = { initSearchPicker({ inputSelector: "#search_term", resultsSelector: "#menu_search_results", - url: ADMIN_SEARCH_URL, + url: CCCMS_CONFIG.urls.search, isActive: function() { return $('#search_widget').is(':visible'); }, resultsHeaderHtml: "

Press Enter to see all results ⏎

" }); @@ -41,7 +41,7 @@ admin_search = { function initSearchPicker(options) { var inputSelector = options.inputSelector; var resultsSelector = options.resultsSelector; - var url = options.url || ADMIN_MENU_SEARCH_URL; + var url = options.url || CCCMS_CONFIG.urls.menu_search; var onSelect = options.onSelect; var isActive = options.isActive; var resultsHeaderHtml = options.resultsHeaderHtml; @@ -138,7 +138,7 @@ dashboard_search = { initSearchPicker({ inputSelector: "#dashboard_search_term", resultsSelector: "#dashboard_search_results", - url: DASHBOARD_SEARCH_URL, + url: CCCMS_CONFIG.urls.dashboard_search, resultsHeaderHtml: "

Press Enter to see all results ⏎

", renderResults: function(data, results, resultsHeaderHtml) { var found = false; @@ -225,7 +225,7 @@ parent_search = { clearTimeout(parent_search.path_timeout); parent_search.path_timeout = setTimeout(function() { - $.get(PARAMETERIZE_PREVIEW_URL, { title: title }, function(slug) { + $.get(CCCMS_CONFIG.urls.parameterize_preview, { title: title }, function(slug) { $("#resulting_path").text(window.location.origin + "/" + (prefix ? prefix + "/" : "") + slug); }); }, 300); -- cgit v1.3