From 2e35aa100892fbfb8727b3040be93180d04140e0 Mon Sep 17 00:00:00 2001 From: markusfluer Date: Thu, 5 Apr 2018 12:53:30 +0200 Subject: [PATCH] Dev: added automatic js hook to have a save post based deletion --- application/config/packages.php | 1 + .../adminbasics/js/confirmdeletemodal.js | 119 ++++++++++++++++++ 2 files changed, 120 insertions(+) create mode 100644 assets/packages/adminbasics/js/confirmdeletemodal.js diff --git a/application/config/packages.php b/application/config/packages.php index 813e0def52e..3ba885e3cb2 100644 --- a/application/config/packages.php +++ b/application/config/packages.php @@ -182,6 +182,7 @@ 'css/displayParticipants.css', ), 'js' => array( + 'js/confirmdeletemodal.js', 'js/bootstrap-remote-modals.js', 'js/admin_core.js', 'js/notifications.js', diff --git a/assets/packages/adminbasics/js/confirmdeletemodal.js b/assets/packages/adminbasics/js/confirmdeletemodal.js new file mode 100644 index 00000000000..6d7ed49fd4b --- /dev/null +++ b/assets/packages/adminbasics/js/confirmdeletemodal.js @@ -0,0 +1,119 @@ +var ConfirmDeleteModal = function(options){ + var $item = $(this); + + options.fnOnShown = options.fnOnShown || function(){}; + options.fnOnHide = options.fnOnHide || function(){}; + options.removeOnClose = options.removeOnClose || function(){}; + options.fnOnHidden = options.fnOnHidden || function(){}; + options.fnOnLoaded = options.fnOnLoaded || function(){}; + + var postUrl = options.postUrl || $item.attr('href'), + confirmText = options.confirmText || $item.data('text') || '', + confirmTitle = options.confirmTitle || $item.attr('title') || '', + postObject = options.postObject || $item.data('post'), + buttonNo = options.buttonNo || $item.data('button-no') || 'No', + buttonYes = options.buttonYes || $item.data('button-yes') || 'Yes', + parentElement = options.parentElement || $item.data('parent-element') || 'body'; + + var closeIcon = '', + closeButton = '', + confirmButton = ''; + + + //Define all the blocks and combine them by jquery methods + var outerBlock = $(''), + innerBlock = $(''), + contentBlock = $(''), + headerBlock = $(''), + headlineBlock = $(''), + bodyBlock = $(''), + footerBlock = $(''), + closeIcon = $(closeIcon), + closeButton = $(closeButton), + confirmButton = $(confirmButton); + + var modalObject = null; + + var combineModal = function(){ + var thisContent = contentBlock.clone(); + + thisContent.append(bodyBlock.clone()); + + if(confirmTitle !== ''){ + var thisHeader = headerBlock.clone(); + headlineBlock.text(confirmTitle); + thisHeader.append(closeIcon.clone()); + thisHeader.append(headlineBlock); + thisContent.prepend(thisHeader); + } + + var thisFooter = footerBlock.clone(); + thisFooter.append(closeButton.clone()); + thisFooter.append(confirmButton.clone()); + thisContent.append(thisFooter); + + modalObject = outerBlock.clone(); + modalObject.append(innerBlock.clone().append(thisContent)); + }, + addForm = function(){ + var formObject = $('
'); + for(var key in postObject){ + formObject.append(''); + } + formObject.append(''); + modalObject.find('.modal-body').append(formObject) + modalObject.find('.modal-body').append('

'+confirmText+'

'); + }, + bindEvents = function(){ + modalObject.on('show.bs.modal', function(){ + addForm(); + try{ options.fnOnShow } catch (e) {} + }); + modalObject.on('shown.bs.modal', function(){ + var self = this; + modalObject.find('.selector--button-confirm').on('click', function(e){ + e.preventDefault(); + modalObject.find('form').trigger('submit'); + modalObject.modal('close'); + }); + options.fnOnShown.call(this); + }); + modalObject.on('hide.bs.modal', options.fnOnHide); + modalObject.on('hidden.bs.modal', function(){ + if(options.removeOnClose === true){ + modalObject.find('.modal-body').html(" "); + } + try{ options.fnOnHidden } catch (e) {} + }); + modalObject.on('loaded.ls.remotemodal', options.fnOnLoaded); + }, + bindToElement = function(){ + $item.on('click.confirmmodal', function(){ + modalObject.modal('toggle'); + }); + }, + runPrepare = function(){ + if($item.data('confirm-modal-appended') == 'yes') { + return; + } + combineModal(); + modalObject.appendTo($(parentElement)); + bindToElement.call(this); + bindEvents.call(this); + + $item.data('confirm-modal-appended', 'yes'); + }; + + runPrepare(); +}; + +jQuery.fn.extend({ + confirmModal : ConfirmDeleteModal +}); +$(document).on('ready pjax:complete', function(){ + $(document).on('click.confirmModalSelector', 'a.selector--ConfirmModal', function(e){ + e.preventDefault(); + $(this).confirmModal({}); + $(this).trigger('click.confirmmodal'); + }); +})