'use strict'; angular.module('markdownFormatWdiffApp') .factory('Modal', function ($rootScope, $modal) { /** * Opens a modal * @param {Object} scope - an object to be merged with modal's scope * @param {String} modalClass - (optional) class(es) to be applied to the modal * @return {Object} - the instance $modal.open() returns */ function openModal(scope, modalClass) { var modalScope = $rootScope.$new(); scope = scope || {}; modalClass = modalClass || 'modal-default'; angular.extend(modalScope, scope); return $modal.open({ templateUrl: 'components/modal/modal.html', windowClass: modalClass, scope: modalScope }); } // Public API here return { /* Confirmation modals */ confirm: { /** * Create a function to open a delete confirmation modal (ex. ng-click='myModalFn(name, arg1, arg2...)') * @param {Function} del - callback, ran when delete is confirmed * @return {Function} - the function to open the modal (ex. myModalFn) */ delete: function(del) { del = del || angular.noop; /** * Open a delete confirmation modal * @param {String} name - name or info to show on modal * @param {All} - any additional args are passed staight to del callback */ return function() { var args = Array.prototype.slice.call(arguments), name = args.shift(), deleteModal; deleteModal = openModal({ modal: { dismissable: true, title: 'Confirm Delete', html: '

Are you sure you want to delete ' + name + ' ?

', buttons: [{ classes: 'btn-danger', text: 'Delete', click: function(e) { deleteModal.close(e); } }, { classes: 'btn-default', text: 'Cancel', click: function(e) { deleteModal.dismiss(e); } }] } }, 'modal-danger'); deleteModal.result.then(function(event) { del.apply(event, args); }); }; } } }; });