'use strict'; $.defaultHandlers = { disableSubmitButton: function( form , disable) { form.find(":submit").attr("disabled", disable); }, startWait: function( ) { $('#pleaseWaitDialog').modal('show'); }, endWait: function( ) { $('#pleaseWaitDialog').modal('hide'); }, showErrorMessage: function( form , message ) { var div = form.find(".form-error-message"); if (div.length) { div.show(); div.html(message); } else { alert(message); } }, hideErrorMessage: function( form ) { var div = form.find(".form-error-message"); if (div.length) div.hide(); }, validateResponse: function( response ) { if (!response) return { Success: false, ErrorMessage: "Системна грешка." }; return { Success: response.Success ?? false, Result: response.Result , ErrorMessage: response.ErrorMessage ?? "Системна грешка." }; }, postProcessSuccess: function( caller , response ) { // if data-navigate="" is set, go there var navigate_url = caller.data("navigate"); if (navigate_url) { window.location = navigate_url.replace(':response', response); return; } // fallback: refresh the page window.location.reload(); } , processResponse: function( form , response ) { var result = $.defaultHandlers.validateResponse( response ); if (!result.Success) { $.defaultHandlers.showErrorMessage(form, result.ErrorMessage); return; } $.defaultHandlers.postProcessSuccess(form, result.Result); }, submitHandler: function( element , event ) { event.preventDefault(); var form = $(element); $.defaultHandlers.hideErrorMessage(form); $.defaultHandlers.disableSubmitButton(form, true); $.defaultHandlers.startWait(); $.ajax({ url: form.data("service"), type: 'POST', data: new FormData(element), async: true, cache: false, contentType: false, enctype: 'multipart/form-data', processData: false, success: function( response ) { $.defaultHandlers.disableSubmitButton(form, false); $.defaultHandlers.processResponse(form, response); $.defaultHandlers.endWait(); }, error: function( xhr , status , error ) { $.defaultHandlers.disableSubmitButton(form, false); $.defaultHandlers.showErrorMessage(form, "XHR:" + xhr.responseText + "\n
Status: " + status + "\n
Error: " + error); $.defaultHandlers.endWait(); } }); return false; } , processRestLinkResponse: function( sender , response ) { var result = $.defaultHandlers.validateResponse( response ); if (!result.Success) { alert( result.ErrorMessage ); return; } $.defaultHandlers.postProcessSuccess(sender, result.Result); } , restLinkHandler: function( event ) { event.preventDefault(); var sender = $(event.target); sender.attr("disabled", true); $.defaultHandlers.startWait(); $.ajax({ url: sender.data("service"), type: 'GET', async: true, cache: false, processData: false, success: function( response ) { sender.attr("disabled", false); $.defaultHandlers.processRestLinkResponse(sender, response); $.defaultHandlers.endWait(); }, error: function( xhr , status , error ) { sender.attr("disabled", false); alert("XHR:" + xhr.responseText + "\n
Status: " + status + "\n
Error: " + error); $.defaultHandlers.endWait(); } }); return false; } }; $(document).ready(function( ) { //$("#pleaseWaitDialog").modal({ backdrop: 'static', keyboard: false }); //$("#pleaseWaitDialog").modal({ show:true, backdrop: 'static', keyboard: false }); // $("#pleaseWaitDialog").modal("show"); $('#pleaseWaitDialog').modal({ show: true, backdrop: 'static', keyboard: false }); // setTimeout(function () { $('#pleaseWaitDialog').modal('show'); }, 1000); // setTimeout(function () { $('#pleaseWaitDialog').modal('hide'); }, 3000); $('form.js_default').each(function( ) { $(this).validate({}); }); $('form.js_service').each(function () { $(this).validate({ submitHandler: $.defaultHandlers.submitHandler }); }); $('a.js_service').click( $.defaultHandlers.restLinkHandler ); $('button.js_service').click( $.defaultHandlers.restLinkHandler ); $('a.toggle_dialog').click(function( e ) { $("#" + $(this).data('hide')).modal("hide"); var dialog = $("#" + $(this).data('show')); dialog.modal("show"); dialog.find('[autofocus]').focus(); e.preventDefault(); return false; }); $('a.js_dialog').click(function( e ) { var dialog = $('#' + $(this).data('target')); dialog.modal("toggle"); dialog.find('[autofocus]').focus(); e.preventDefault(); return false; }); });