summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorerdgeist <erdgeist@erdgeist.org>2026-08-17 02:22:04 +0200
committererdgeist <erdgeist@erdgeist.org>2026-08-17 02:22:04 +0200
commit8570051876b86c08d4b72288f8598f0e0d2335e1 (patch)
tree647fce9e040fe2e2910c7ae9a1a3fbff47f0f9df
parentbbd10eec6b8b46a7173d3be4dd7e05de212f8038 (diff)
Bridge Rails values into JavaScript through a JSON element
-rw-r--r--app/helpers/admin_helper.rb24
-rw-r--r--app/views/layouts/admin.html.erb22
-rw-r--r--public/javascripts/admin_interface.js6
-rw-r--r--public/javascripts/admin_search.js8
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
14 :role => "img", :class => classes, 14 :role => "img", :class => classes,
15 :title => hint, "aria-label" => hint) 15 :title => hint, "aria-label" => hint)
16 end 16 end
17
18 def admin_bridge
19 {
20 :urls => {
21 :search => admin_search_path,
22 :menu_search => admin_menu_search_path,
23 :dashboard_search => admin_dashboard_search_path,
24 :parameterize_preview => parameterize_preview_nodes_path
25 },
26 :strings => {
27 :lock_lost_prefix => t("layouts.admin.lock_lost_prefix"),
28 :lock_lost_link => t("layouts.admin.lock_lost_link"),
29 :insert_image => t("layouts.admin.insert_image"),
30 :insert_image_tooltip => t("layouts.admin.insert_image_tooltip"),
31 :copied => t("layouts.admin.copied"),
32 :needs_redaktion => t("layouts.admin.needs_redaktion"),
33 :import_markdown => t("layouts.admin.import_markdown"),
34 :import_markdown_tooltip => t("layouts.admin.import_markdown_tooltip"),
35 :import_markdown_placeholder => t("layouts.admin.import_markdown_placeholder"),
36 :cancel => t("admin.common.cancel"),
37 :insert => t("layouts.admin.insert")
38 }
39 }.to_json
40 end
17end 41end
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 @@
15 <%= javascript_include_tag 'admin_bundle' %> 15 <%= javascript_include_tag 'admin_bundle' %>
16 <%= tinymce_assets %> 16 <%= tinymce_assets %>
17 <link rel="stylesheet" href="<%= mtime_busted_path('/stylesheets/admin.css') %>"> 17 <link rel="stylesheet" href="<%= mtime_busted_path('/stylesheets/admin.css') %>">
18 <%= javascript_tag nonce: true do %>
19 var ADMIN_SEARCH_URL = "<%= admin_search_path %>";
20 var ADMIN_MENU_SEARCH_URL = "<%= admin_menu_search_path %>";
21 var ADMIN_STRINGS = <%= raw({
22 :lock_lost_prefix => t(".lock_lost_prefix"),
23 :lock_lost_link => t(".lock_lost_link"),
24 :insert_image => t(".insert_image"),
25 :insert_image_tooltip => t(".insert_image_tooltip"),
26 :copied => t(".copied"),
27 :needs_redaktion => t(".needs_redaktion"),
28 :import_markdown => t(".import_markdown"),
29 :import_markdown_tooltip => t(".import_markdown_tooltip"),
30 :import_markdown_placeholder => t(".import_markdown_placeholder"),
31 :cancel => t("admin.common.cancel"),
32 :insert => t(".insert")
33 }.to_json) %>;
34 var PARAMETERIZE_PREVIEW_URL = "<%= parameterize_preview_nodes_path %>";
35 var DASHBOARD_SEARCH_URL = "<%= admin_dashboard_search_path %>";
36 <% end %>
37 <script src="<%= mtime_busted_path('/javascripts/admin_search.js') %>"></script>
38 <script src="<%= mtime_busted_path('/javascripts/admin_interface.js') %>"></script> 18 <script src="<%= mtime_busted_path('/javascripts/admin_interface.js') %>"></script>
19 <script src="<%= mtime_busted_path('/javascripts/admin_search.js') %>"></script>
39 <script src="<%= mtime_busted_path('/javascripts/related_assets.js') %>"></script> 20 <script src="<%= mtime_busted_path('/javascripts/related_assets.js') %>"></script>
40 <%= yield :head %> 21 <%= yield :head %>
41 </head> 22 </head>
@@ -62,5 +43,6 @@
62 <%= yield %> 43 <%= yield %>
63 </div> 44 </div>
64 </div> 45 </div>
46 <script type="application/json" id="cccms_config"><%= raw admin_bridge %></script>
65 </body> 47 </body>
66</html> 48</html>
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 @@
1var CCCMS_CONFIG;
2var ADMIN_STRINGS;
3
1$(document).ready(function () { 4$(document).ready(function () {
5 CCCMS_CONFIG = JSON.parse(document.getElementById('cccms_config').textContent);
6 ADMIN_STRINGS = CCCMS_CONFIG.strings;
7
2 admin_search.initialize(); 8 admin_search.initialize();
3 9
4 function effective_scheme() { 10 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 = {
22 initSearchPicker({ 22 initSearchPicker({
23 inputSelector: "#search_term", 23 inputSelector: "#search_term",
24 resultsSelector: "#menu_search_results", 24 resultsSelector: "#menu_search_results",
25 url: ADMIN_SEARCH_URL, 25 url: CCCMS_CONFIG.urls.search,
26 isActive: function() { return $('#search_widget').is(':visible'); }, 26 isActive: function() { return $('#search_widget').is(':visible'); },
27 resultsHeaderHtml: "<p class='search_more'>Press Enter to see all results ⏎</p>" 27 resultsHeaderHtml: "<p class='search_more'>Press Enter to see all results ⏎</p>"
28 }); 28 });
@@ -41,7 +41,7 @@ admin_search = {
41function initSearchPicker(options) { 41function initSearchPicker(options) {
42 var inputSelector = options.inputSelector; 42 var inputSelector = options.inputSelector;
43 var resultsSelector = options.resultsSelector; 43 var resultsSelector = options.resultsSelector;
44 var url = options.url || ADMIN_MENU_SEARCH_URL; 44 var url = options.url || CCCMS_CONFIG.urls.menu_search;
45 var onSelect = options.onSelect; 45 var onSelect = options.onSelect;
46 var isActive = options.isActive; 46 var isActive = options.isActive;
47 var resultsHeaderHtml = options.resultsHeaderHtml; 47 var resultsHeaderHtml = options.resultsHeaderHtml;
@@ -138,7 +138,7 @@ dashboard_search = {
138 initSearchPicker({ 138 initSearchPicker({
139 inputSelector: "#dashboard_search_term", 139 inputSelector: "#dashboard_search_term",
140 resultsSelector: "#dashboard_search_results", 140 resultsSelector: "#dashboard_search_results",
141 url: DASHBOARD_SEARCH_URL, 141 url: CCCMS_CONFIG.urls.dashboard_search,
142 resultsHeaderHtml: "<p class='search_more'>Press Enter to see all results ⏎</p>", 142 resultsHeaderHtml: "<p class='search_more'>Press Enter to see all results ⏎</p>",
143 renderResults: function(data, results, resultsHeaderHtml) { 143 renderResults: function(data, results, resultsHeaderHtml) {
144 var found = false; 144 var found = false;
@@ -225,7 +225,7 @@ parent_search = {
225 225
226 clearTimeout(parent_search.path_timeout); 226 clearTimeout(parent_search.path_timeout);
227 parent_search.path_timeout = setTimeout(function() { 227 parent_search.path_timeout = setTimeout(function() {
228 $.get(PARAMETERIZE_PREVIEW_URL, { title: title }, function(slug) { 228 $.get(CCCMS_CONFIG.urls.parameterize_preview, { title: title }, function(slug) {
229 $("#resulting_path").text(window.location.origin + "/" + (prefix ? prefix + "/" : "") + slug); 229 $("#resulting_path").text(window.location.origin + "/" + (prefix ? prefix + "/" : "") + slug);
230 }); 230 });
231 }, 300); 231 }, 300);