summaryrefslogtreecommitdiff
path: root/public/javascripts/admin_interface.js
diff options
context:
space:
mode:
Diffstat (limited to 'public/javascripts/admin_interface.js')
-rw-r--r--public/javascripts/admin_interface.js135
1 files changed, 70 insertions, 65 deletions
diff --git a/public/javascripts/admin_interface.js b/public/javascripts/admin_interface.js
index 0c9ec66..e9f96c2 100644
--- a/public/javascripts/admin_interface.js
+++ b/public/javascripts/admin_interface.js
@@ -1,15 +1,3 @@
1function hide_all() {
2 $('#recent_changes_toggle').attr("class", "unselected");
3 $('#my_work_toggle').attr("class", "unselected");
4 $('#current_drafts_toggle').attr("class", "unselected");
5 $('#admin_sitemap_toggle').attr("class", "unselected");
6
7 $('#current_drafts_table').hide();
8 $('#my_work_table').hide();
9 $('#recent_changes_table').hide();
10 $('#admin_sitemap_table').hide();
11}
12
13$(document).ready(function () { 1$(document).ready(function () {
14 admin_search.initialize(); 2 admin_search.initialize();
15 3
@@ -69,6 +57,10 @@ $(document).ready(function () {
69 move_to_search.initialize_search(); 57 move_to_search.initialize_search();
70 } 58 }
71 59
60 if ($("#restore_search_term").length != 0) {
61 restore_search.initialize_search();
62 }
63
72 if ($("#event_node_search_term").length != 0) { 64 if ($("#event_node_search_term").length != 0) {
73 event_search.initialize_search(); 65 event_search.initialize_search();
74 } 66 }
@@ -85,63 +77,34 @@ $(document).ready(function () {
85 cccms.preview.initialize(); 77 cccms.preview.initialize();
86 } 78 }
87 79
88 if ($('#recent_changes_toggle').length != 0) { 80 jQuery.ajaxSetup({
89 hide_all(); 81 'beforeSend': function(xhr) {xhr.setRequestHeader("Accept", "text/javascript");}
90 $('#recent_changes_toggle').attr("class", "selected"); 82 });
91 $('#recent_changes_table').show();
92 83
93 $('#recent_changes_toggle').bind("click", function(){ 84 $(document).ajaxSend(function(event, request, settings) {
94 hide_all(); 85 var meta = document.querySelector("meta[name='csrf-token']");
95 $('#recent_changes_toggle').attr("class", "selected"); 86 if (meta) request.setRequestHeader("X-CSRF-Token", meta.content);
96 $('#recent_changes_table').show(); 87 });
97 return false;
98 });
99 88
100 $('#my_work_toggle').bind("click", function(){ 89 document.addEventListener('click', function (event) {
101 hide_all(); 90 var button = event.target.closest('.copy_button');
102 $('#my_work_toggle').attr("class", "selected"); 91 if (!button) return;
103 $('#my_work_table').show();
104 return false;
105 });
106 92
107 $('#admin_wizard_my_work').bind("click", function(){ 93 var text = button.dataset.copyUrl;
108 hide_all(); 94 if (text === undefined && button.dataset.copyTarget) {
109 $('#my_work_toggle').attr("class", "selected"); 95 var target = document.querySelector(button.dataset.copyTarget);
110 $('#my_work_table').show(); 96 text = target ? target.textContent : undefined;
111 return false; 97 }
112 });
113 98
114 $('#current_drafts_toggle').bind("click", function(){ 99 if (!text || text === '—' || !navigator.clipboard) return;
115 hide_all();
116 $('#current_drafts_toggle').attr("class", "selected");
117 $('#current_drafts_table').show();
118 return false;
119 });
120 100
121 $('#admin_sitemap_toggle').bind("click", function(){ 101 navigator.clipboard.writeText(text).then(function () {
122 hide_all(); 102 var label = button.querySelector('.copy_button_label');
123 $('#admin_sitemap_toggle').attr("class", "selected"); 103 if (!label) return;
124 $('#admin_sitemap_table').show(); 104 var original = label.textContent;
125 return false; 105 label.textContent = 'Copied!';
106 setTimeout(function () { label.textContent = original; }, 1500);
126 }); 107 });
127
128 $('#admin_wizard_create_page').bind("click", function(){
129 hide_all();
130 $('#admin_sitemap_toggle').attr("class", "selected");
131 $('#admin_sitemap_table').show();
132 return false;
133 });
134 }
135
136 jQuery.ajaxSetup({
137 'beforeSend': function(xhr) {xhr.setRequestHeader("Accept", "text/javascript");}
138 });
139
140 $(document).ajaxSend(function(event, request, settings) {
141 if (typeof(AUTH_TOKEN) == "undefined") return;
142 // settings.data is a serialized string like "foo=bar&baz=boink" (or null)
143 settings.data = settings.data || "";
144 settings.data += (settings.data ? "&" : "") + "authenticity_token=" + encodeURIComponent(AUTH_TOKEN);
145 }); 108 });
146 109
147}); 110});
@@ -475,8 +438,10 @@ rrule_builder = {
475 }); 438 });
476 $("#rrule_monthly_ordinal").bind("change", function() { 439 $("#rrule_monthly_ordinal").bind("change", function() {
477 $("#rrule_ordinal_fields").toggle($(this).is(":checked")); 440 $("#rrule_ordinal_fields").toggle($(this).is(":checked"));
441 rrule_builder.toggle_custom_ordinal_fields();
478 rrule_builder.sync(); 442 rrule_builder.sync();
479 }); 443 });
444 $("#rrule_ordinal").bind("change", rrule_builder.toggle_custom_ordinal_fields);
480 $("#rrule_exclude_month").bind("change", function() { 445 $("#rrule_exclude_month").bind("change", function() {
481 $("#rrule_excluded_month").toggle($(this).is(":checked")); 446 $("#rrule_excluded_month").toggle($(this).is(":checked"));
482 rrule_builder.sync(); 447 rrule_builder.sync();
@@ -493,6 +458,12 @@ rrule_builder = {
493 $("#rrule_monthly_options").show(); 458 $("#rrule_monthly_options").show();
494 }, 459 },
495 460
461 toggle_custom_ordinal_fields : function() {
462 $("#rrule_custom_ordinal_fields").toggle(
463 $("#rrule_monthly_ordinal").is(":checked") && $("#rrule_ordinal").val() === "custom"
464 );
465 },
466
496 sync : function() { 467 sync : function() {
497 var freq = $("input[name='rrule_freq']:checked").val(); 468 var freq = $("input[name='rrule_freq']:checked").val();
498 var parts = []; 469 var parts = [];
@@ -508,7 +479,16 @@ rrule_builder = {
508 } else { 479 } else {
509 parts.push("FREQ=MONTHLY"); 480 parts.push("FREQ=MONTHLY");
510 if ($("#rrule_monthly_ordinal").is(":checked")) { 481 if ($("#rrule_monthly_ordinal").is(":checked")) {
511 parts.push("BYDAY=" + $("#rrule_ordinal").val() + $("#rrule_ordinal_day").val()); 482 var ordinal = $("#rrule_ordinal").val();
483 if (ordinal === "custom") {
484 var customDays = [];
485 $("input[id^='rrule_custom_ordinal_']:checked").each(function() {
486 customDays.push($(this).attr("id").replace("rrule_custom_ordinal_", "") + $("#rrule_ordinal_day").val());
487 });
488 if (customDays.length > 0) parts.push("BYDAY=" + customDays.join(","));
489 } else {
490 parts.push("BYDAY=" + ordinal + $("#rrule_ordinal_day").val());
491 }
512 } 492 }
513 } 493 }
514 494
@@ -543,8 +523,33 @@ rrule_builder = {
543 } else if (parts.FREQ === "MONTHLY") { 523 } else if (parts.FREQ === "MONTHLY") {
544 $("input[name='rrule_freq'][value='monthly']").prop("checked", true); 524 $("input[name='rrule_freq'][value='monthly']").prop("checked", true);
545 rrule_builder.show_monthly_options(); 525 rrule_builder.show_monthly_options();
526 var ordinalDays = parts.BYDAY && parts.BYDAY.split(",");
527 var customOrdinalDay = null;
528 var customOrdinals = [];
529 var customOrdinalsValid = ordinalDays && ordinalDays.length > 0;
530 if (customOrdinalsValid) {
531 ordinalDays.forEach(function(value) {
532 var customMatch = value.match(/^([1-5])([A-Z]{2})$/);
533 if (!customMatch || (customOrdinalDay && customOrdinalDay !== customMatch[2])) {
534 customOrdinalsValid = false;
535 return;
536 }
537 customOrdinalDay = customMatch[2];
538 customOrdinals.push(customMatch[1]);
539 });
540 }
541
546 var match = parts.BYDAY && parts.BYDAY.match(/^(-?\d+)([A-Z]{2})$/); 542 var match = parts.BYDAY && parts.BYDAY.match(/^(-?\d+)([A-Z]{2})$/);
547 if (match) { 543 if (customOrdinalsValid && (customOrdinals.length > 1 || customOrdinals[0] === "5")) {
544 $("#rrule_monthly_ordinal").prop("checked", true);
545 $("#rrule_ordinal_fields").show();
546 $("#rrule_ordinal").val("custom");
547 $("#rrule_ordinal_day").val(customOrdinalDay);
548 customOrdinals.forEach(function(ordinal) {
549 $("#rrule_custom_ordinal_" + ordinal).prop("checked", true);
550 });
551 rrule_builder.toggle_custom_ordinal_fields();
552 } else if (match) {
548 $("#rrule_monthly_ordinal").prop("checked", true); 553 $("#rrule_monthly_ordinal").prop("checked", true);
549 $("#rrule_ordinal_fields").show(); 554 $("#rrule_ordinal_fields").show();
550 $("#rrule_ordinal").val(match[1]); 555 $("#rrule_ordinal").val(match[1]);