/** * Organisations widget. Sets up dropdowns, modals, etc for a table of organisations. */ /** * Set up the form in a modal after being successfully attached to the body. */ function attachOrganisationForm() { $("body").on('renderSuccess.ufModal', function(data) { var modal = $(this).ufModal('getModal'); var form = modal.find('.js-form'); /** * Set up modal widgets */ // Set up any widgets inside the modal form.find(".js-select2").select2({ width: '100%' }); // Auto-generate slug form.find('input[name=name]').on('input change', function() { var manualSlug = form.find('#form-organisation-slug-override').prop('checked'); if (!manualSlug) { var slug = getSlug($(this).val()); form.find('input[name=slug]').val(slug); } }); form.find('#form-organisation-slug-override').on('change', function() { if ($(this).prop('checked')) { form.find('input[name=slug]').prop('readonly', false); } else { form.find('input[name=slug]').prop('readonly', true); form.find('input[name=name]').trigger('change'); } }); // Set up the form for submission form.ufForm({ validator: page.validators }).on("submitSuccess.ufForm", function() { // Reload page on success window.location.reload(); }); }); } /** * Link organisation action buttons, for example in a table or on a specific organisation's page. * @param {module:jQuery} el jQuery wrapped element to target. * @param {{delete_redirect: string}} options Options used to modify behaviour of button actions. */ function bindOrganisationButtons(el, options) { if (!options) options = {}; /** * Link row buttons after table is loaded. */ // Delete organisation button el.find('.js-organisation-delete').click(function(e) { e.preventDefault(); $("body").ufModal({ sourceUrl: site.uri.public + "/modals/organisations/confirm-delete", ajaxParams: { slug: $(this).data('slug') }, msgTarget: $("#alerts-page") }); $("body").on('renderSuccess.ufModal', function() { var modal = $(this).ufModal('getModal'); var form = modal.find('.js-form'); form.ufForm() .on("submitSuccess.ufForm", function() { // Navigate or reload page on success if (options.delete_redirect) window.location.href = options.delete_redirect; else window.location.reload(); }); }); }); } function bindOrganisationCreationButton(el) { // Link create button el.find('.js-organisation-create').click(function(e) { e.preventDefault(); $("body").ufModal({ sourceUrl: site.uri.public + "/modals/organisations/create", msgTarget: $("#alerts-page") }); attachOrganisationForm(); }); };