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.js147
1 files changed, 78 insertions, 69 deletions
diff --git a/public/javascripts/admin_interface.js b/public/javascripts/admin_interface.js
index 0c9ec66..7fb1dc2 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});
@@ -314,10 +277,12 @@ cccms = {
314 277
315 var items = $('#related_asset_list li').map(function() { 278 var items = $('#related_asset_list li').map(function() {
316 return { 279 return {
280 id: $(this).data('asset-id'),
317 thumb: $(this).find('img').attr('src'), 281 thumb: $(this).find('img').attr('src'),
318 large: $(this).data('large-url'), 282 large: $(this).data('large-url'),
319 original: $(this).data('original-url'), 283 original: $(this).data('original-url'),
320 name: $(this).data('name') 284 name: $(this).data('name'),
285 headline: $(this).data('headline') === true
321 }; 286 };
322 }).get(); 287 }).get();
323 cccms.inline_images.items = items; 288 cccms.inline_images.items = items;
@@ -330,7 +295,7 @@ cccms = {
330 items.forEach(function(item, i) { 295 items.forEach(function(item, i) {
331 var wrapper = $('<div class="inline_image_picker_item"></div>'); 296 var wrapper = $('<div class="inline_image_picker_item"></div>');
332 wrapper.append($('<img>').attr('src', item.thumb).attr('data-index', i)); 297 wrapper.append($('<img>').attr('src', item.thumb).attr('data-index', i));
333 if (i === 0) { 298 if (item.headline) {
334 wrapper.append($('<span>', { "class": "inline_image_picker_headline_badge" }).text("Headline")); 299 wrapper.append($('<span>', { "class": "inline_image_picker_headline_badge" }).text("Headline"));
335 } 300 }
336 grid.append(wrapper); 301 grid.append(wrapper);
@@ -354,8 +319,10 @@ cccms = {
354 ? 'inline-image inline-image--full' 319 ? 'inline-image inline-image--full'
355 : 'inline-image inline-image--half inline-image--' + placement; 320 : 'inline-image inline-image--half inline-image--' + placement;
356 321
357 var html = '<a href="' + item.original + '" class="glightbox" data-gallery="page-' + cccms.inline_images.node_id + '">' + 322 var esc = cccms.inline_images.escape_attr;
358 '<img src="' + item.large + '" class="' + classes + '" alt="' + cccms.inline_images.escape_attr(item.name) + '"></a>'; 323 var html = '<a href="' + esc(item.original) + '" class="glightbox" data-gallery="page-' + esc(cccms.inline_images.node_id) + '"' +
324 ' data-title="' + esc(item.name) + '" data-description="#credit_for_asset_' + esc(item.id) + '">' +
325 '<img src="' + esc(item.large) + '" class="' + classes + '" alt="' + esc(item.name) + '"></a>';
359 326
360 cccms.inline_images.editor.insertContent(html); 327 cccms.inline_images.editor.insertContent(html);
361 $('#inline_image_picker').hide(); 328 $('#inline_image_picker').hide();
@@ -475,8 +442,10 @@ rrule_builder = {
475 }); 442 });
476 $("#rrule_monthly_ordinal").bind("change", function() { 443 $("#rrule_monthly_ordinal").bind("change", function() {
477 $("#rrule_ordinal_fields").toggle($(this).is(":checked")); 444 $("#rrule_ordinal_fields").toggle($(this).is(":checked"));
445 rrule_builder.toggle_custom_ordinal_fields();
478 rrule_builder.sync(); 446 rrule_builder.sync();
479 }); 447 });
448 $("#rrule_ordinal").bind("change", rrule_builder.toggle_custom_ordinal_fields);
480 $("#rrule_exclude_month").bind("change", function() { 449 $("#rrule_exclude_month").bind("change", function() {
481 $("#rrule_excluded_month").toggle($(this).is(":checked")); 450 $("#rrule_excluded_month").toggle($(this).is(":checked"));
482 rrule_builder.sync(); 451 rrule_builder.sync();
@@ -493,6 +462,12 @@ rrule_builder = {
493 $("#rrule_monthly_options").show(); 462 $("#rrule_monthly_options").show();
494 }, 463 },
495 464
465 toggle_custom_ordinal_fields : function() {
466 $("#rrule_custom_ordinal_fields").toggle(
467 $("#rrule_monthly_ordinal").is(":checked") && $("#rrule_ordinal").val() === "custom"
468 );
469 },
470
496 sync : function() { 471 sync : function() {
497 var freq = $("input[name='rrule_freq']:checked").val(); 472 var freq = $("input[name='rrule_freq']:checked").val();
498 var parts = []; 473 var parts = [];
@@ -508,7 +483,16 @@ rrule_builder = {
508 } else { 483 } else {
509 parts.push("FREQ=MONTHLY"); 484 parts.push("FREQ=MONTHLY");
510 if ($("#rrule_monthly_ordinal").is(":checked")) { 485 if ($("#rrule_monthly_ordinal").is(":checked")) {
511 parts.push("BYDAY=" + $("#rrule_ordinal").val() + $("#rrule_ordinal_day").val()); 486 var ordinal = $("#rrule_ordinal").val();
487 if (ordinal === "custom") {
488 var customDays = [];
489 $("input[id^='rrule_custom_ordinal_']:checked").each(function() {
490 customDays.push($(this).attr("id").replace("rrule_custom_ordinal_", "") + $("#rrule_ordinal_day").val());
491 });
492 if (customDays.length > 0) parts.push("BYDAY=" + customDays.join(","));
493 } else {
494 parts.push("BYDAY=" + ordinal + $("#rrule_ordinal_day").val());
495 }
512 } 496 }
513 } 497 }
514 498
@@ -543,8 +527,33 @@ rrule_builder = {
543 } else if (parts.FREQ === "MONTHLY") { 527 } else if (parts.FREQ === "MONTHLY") {
544 $("input[name='rrule_freq'][value='monthly']").prop("checked", true); 528 $("input[name='rrule_freq'][value='monthly']").prop("checked", true);
545 rrule_builder.show_monthly_options(); 529 rrule_builder.show_monthly_options();
530 var ordinalDays = parts.BYDAY && parts.BYDAY.split(",");
531 var customOrdinalDay = null;
532 var customOrdinals = [];
533 var customOrdinalsValid = ordinalDays && ordinalDays.length > 0;
534 if (customOrdinalsValid) {
535 ordinalDays.forEach(function(value) {
536 var customMatch = value.match(/^([1-5])([A-Z]{2})$/);
537 if (!customMatch || (customOrdinalDay && customOrdinalDay !== customMatch[2])) {
538 customOrdinalsValid = false;
539 return;
540 }
541 customOrdinalDay = customMatch[2];
542 customOrdinals.push(customMatch[1]);
543 });
544 }
545
546 var match = parts.BYDAY && parts.BYDAY.match(/^(-?\d+)([A-Z]{2})$/); 546 var match = parts.BYDAY && parts.BYDAY.match(/^(-?\d+)([A-Z]{2})$/);
547 if (match) { 547 if (customOrdinalsValid && (customOrdinals.length > 1 || customOrdinals[0] === "5")) {
548 $("#rrule_monthly_ordinal").prop("checked", true);
549 $("#rrule_ordinal_fields").show();
550 $("#rrule_ordinal").val("custom");
551 $("#rrule_ordinal_day").val(customOrdinalDay);
552 customOrdinals.forEach(function(ordinal) {
553 $("#rrule_custom_ordinal_" + ordinal).prop("checked", true);
554 });
555 rrule_builder.toggle_custom_ordinal_fields();
556 } else if (match) {
548 $("#rrule_monthly_ordinal").prop("checked", true); 557 $("#rrule_monthly_ordinal").prop("checked", true);
549 $("#rrule_ordinal_fields").show(); 558 $("#rrule_ordinal_fields").show();
550 $("#rrule_ordinal").val(match[1]); 559 $("#rrule_ordinal").val(match[1]);