moderated_content_bulk_publish-2.0.x-dev/js/moderated_content_bulk_publish.js
js/moderated_content_bulk_publish.js
(function ($, Drupal, drupalSettings) {
Drupal.behaviors.moderated_content_bulk_publish = {
attach: function (context, settings) {
if (context == document) {
if ($('body').hasClass('user-logged-in') && typeof settings.moderated_content_bulk_publish !== 'undefined') {
if (settings.moderated_content_bulk_publish.enable_dialog_admin_content) {
// In the admin/content listing, add a confirmation dialog to all bulk operations.
//using id contains selector id*= because id sometimes has a --2 atatched to end (edit-node-bulk-form--2)
$('.view-content div[id*="edit-node-bulk-form"] .js-form-submit, .view-content form[id*="views-form-moderated-content-moderated-content"] input#edit-submit').bind('click.moderated_content_bulk_publish',function(e) {
// For automated testing purposes you can unbind this click event as follows:
// jQuery('*').unbind('click.moderated_content_bulk_publish'); // Disables confirm dialog.
var titles = [];
$('.views-table tbody .form-checkbox:checked').each(function() {
titles.push($(this).closest('tr').find('.views-field-title a').text());
});
var cnt = titles.length;
if (cnt == 0) {
return false;
}
var action = $('#edit-action option:selected').text();
var prompt = Drupal.t('Are you sure you want to ') + action.toLowerCase() + "?<br/><br/>" + titles[0];
if (cnt > 1) {
prompt += "<br/><br/>+ " + (cnt-1) + ' more';
}
// build a Drupal modal dialog window
var content = '<div><p id="version-confirm-form-text">' + prompt + '</p></div>';
var modalwindowtitle = action + "?";
confirmationDialog = Drupal.dialog(content, {
dialogClass: 'confirm-dialog',
resizable: false,
closeOnEscape: false,
width:500,
title: modalwindowtitle,
buttons: [{
text: Drupal.t('Yes'),
class: 'button button--primary',
click: function click(e) {
confirmationDialog.close();
$('.view-content div[id*="edit-node-bulk-form"] .js-form-submit').unbind('click.moderated_content_bulk_publish');
$('.view-content form[id*="views-form-moderated-content-moderated-content"] input#edit-submit').unbind('click.moderated_content_bulk_publish');
$('.view-content div[id*="edit-node-bulk-form"] .js-form-submit').trigger('click.moderated_content_bulk_publish');
$('.view-content form[id*="views-form-moderated-content-moderated-content"] input#edit-submit').trigger('click.moderated_content_bulk_publish');
$(e.target).remove();
return true;
},
primary: true
}, {
text: Drupal.t('Cancel'),
class: 'button',
click: function click() {
confirmationDialog.close();
}
}],
create: function () {
},
beforeClose: false,
close: function (event) {
confirmationDialog.close();
$(event.target).remove();
}
});
e.preventDefault();
confirmationDialog.showModal();
return false;
});
// Fix a bug about button (id = edit-submit) was not handled in the previous version
$('.view-content form[id*="views-form-content-page"] input#edit-submit').unbind('click.moderated_content_bulk_publish').bind('click.moderated_content_bulk_publish',function(e) {
var titles = [];
$('.views-table tbody .form-checkbox:checked').each(function() {
titles.push($(this).closest('tr').find('.views-field-title a').text());
});
var cnt = titles.length;
if (cnt == 0) {
return false;
}
var action = $('#edit-action option:selected').text();
var prompt = Drupal.t('Are you sure you want to ') + action.toLowerCase() + "?<br/><br/>" + titles[0];
if (cnt > 1) {
prompt += "<br/><br/>+ " + (cnt-1) + ' more';
}
// build a Drupal modal dialog window
var content = '<div><p id="version-confirm-form-text">' + prompt + '</p></div>';
var modalwindowtitle = action + "?";
var options = {
dialogClass: 'confirm-dialog',
resizable: false,
closeOnEscape: false,
width:500,
title: modalwindowtitle,
buttons: [{
text: Drupal.t('Yes'),
class: 'button button--primary',
click: function click(e) {
confirmationDialog.close();
$('.view-content form[id*="views-form-content-page"] input#edit-submit').unbind('click.moderated_content_bulk_publish');
$('.view-content form[id*="views-form-content-page"] input#edit-submit').trigger('click.moderated_content_bulk_publish');
$(e.target).remove();
return true;
},
primary: true
}, {
text: Drupal.t('Cancel'),
class: 'button',
click: function click() {
confirmationDialog.close();
}
}],
create: function () {
},
beforeClose: false,
close: function (event) {
confirmationDialog.close();
$(event.target).parent().parent().find('.ui-widget-overlay').remove();
$(event.target).remove();
}
};
confirmationDialog = Drupal.dialog(content, options);
e.preventDefault();
confirmationDialog.showModal();
return false;
});
}
if (settings.moderated_content_bulk_publish.enable_dialog_node_edit_form) {
// When editing any type of node, display a confirmation dialog any time the state is changing from
// non-published to published.
if ($('body').hasClass('path-node')) {
// Minimal single-dialog guards.
var mcbpDialogOpen = window.mcbpDialogOpen || false;
var mcbpBypass = window.mcbpBypass || false;
$('#edit-submit').unbind('click.moderated_content_bulk_publish').bind('click.moderated_content_bulk_publish', function(e) {
// For automated testing purposes you can unbind this click event as follows:
// jQuery('*').unbind('click.moderated_content_bulk_publish'); // Disables confirm dialog.
// Get the current state. Need to clone this object and remove the label so that we can get just the state.
var cur_state = '';
var mod_state = $('#edit-moderation-state-0-current').clone();
if (mod_state) {
$('label', mod_state).remove();
var cur_state = $(mod_state).text().trim();
cur_state = Drupal.t(cur_state);
}
var new_state = $('#edit-moderation-state-0-state option:selected').text();
new_state = Drupal.t(new_state);
// If changing from un-published to published...
// If we just confirmed, allow the next submit to pass without dialog.
if (window.mcbpBypass) {
window.mcbpBypass = false;
return true;
}
// build a Drupal modal dialog window
var msg = Drupal.t('Are you sure you want to publish this item?');
var content = '<div><p id="version-confirm-form-text">' + msg + '</p></div>';
// Prevent multiple dialogs if one is already open.
if (window.mcbpDialogOpen) {
e.preventDefault();
return false;
}
confirmationDialog_publish = Drupal.dialog(content, {
dialogClass: 'confirm-dialog',
resizable: false,
closeOnEscape: false,
width:500,
title: Drupal.t('Publish this?'),
buttons: [{
text: Drupal.t('Yes'),
class: 'button button--primary',
click: function click(e) {
// On confirm, mark bypass so the next click/submit doesn't re-open.
window.mcbpBypass = true;
confirmationDialog_publish.close();
$(".node-form #edit-submit, .node-layout-builder-form #edit-submit, .gin-sticky-form-actions #edit-submit").unbind('click.moderated_content_bulk_publish');
$(".node-form #edit-submit, .node-layout-builder-form #edit-submit, .gin-sticky-form-actions #edit-submit").trigger('click.moderated_content_bulk_publish');
$(e.target).remove();
return true;
},
primary: true
}, {
text: Drupal.t('Cancel'),
class: 'button',
click: function click() {
// Always clear the "open" flag and clean up overlays.
window.mcbpDialogOpen = false;
confirmationDialog_publish.close();
}
}],
create: function () {
},
beforeClose: false,
close: function (event) {
confirmationDialog_publish.close();
$(event.target).parent().parent().find('.ui-widget-overlay').remove();
$(event.target).remove();
// Clear the dialog open flag so the modal can be reopened.
window.mcbpDialogOpen = false;
}
});
if ((cur_state == '' || cur_state == Drupal.t('Draft')) && (new_state == Drupal.t('Published'))) {
e.preventDefault();
window.mcbpDialogOpen = true;
confirmationDialog_publish.showModal();
return false;
}
else if ((cur_state == Drupal.t('Published')) && (new_state == Drupal.t('Published'))) {
e.preventDefault();
window.mcbpDialogOpen = true;
confirmationDialog_publish.showModal();
return false;
}
return true;
});
$('#edit-create-and-translate').click(function(e) {
// Get the current state. Need to clone this object and remove the label so that we can get just the state.
var cur_state = '';
var mod_state = $('#edit-moderation-state-0-current').clone();
if (mod_state) {
$('label', mod_state).remove();
var cur_state = $(mod_state).text().trim();
cur_state = Drupal.t(cur_state);
}
var new_state = $('#edit-moderation-state-0-state option:selected').text();
new_state = Drupal.t(new_state);
// If changing from un-published to published...
if ((cur_state == '' || cur_state == Drupal.t('Draft')) && (new_state == Drupal.t('Published'))) {
e.preventDefault();
confirmationDialog_publish.showModal();
return false;
}
return true;
});
}
}
}
}
}
};
})(jQuery, Drupal, drupalSettings);
