ko.validation.init({ insertMessages: false, decorateElement: true, errorElementClass: 'error', errorClass: 'error', errorsAsTitle: false, parseInputAttributes: false, messagesOnModified: true, decorateElementOnModified: true, decorateInputElement: true, allowHtmlMessages: true }, true); $(document).ready(function() { bindSubmitDataTable(); $(".submit-data-table").each(function(index) { if($(this).attr("data-session-storage") === "true" && $(this).attr("data-knockout-varname") != null) { var customModelName = $(this).attr("data-custom-model-name"); fillQueryObject(this, ((customModelName !== undefined && customModelName !== null)?customModelName+'.':'')+$(this).attr("data-knockout-varname"), $(this).attr("data-do-initial-search")); } }); // FOR EACH USATA PER ATTACCARE L'EVENTO // CLIKK SU GLI ALLERT ED ESEGUIRE LO Switch // DEI TAB $( ".alert" ).each(function( index ) { var alertBox = $( this ).attr('id'); regTabSwitch(alertBox); }); }); function forceNullObservable(value) { var obs = ko.observable(value); return ko.computed({ read: function() { return obs(); }, write: function(val) { if(val === '') { val = null; } obs(val); } }); } function resetMessage(id, classId) { if($("#" + id).length > 0) { $("#" + id + " li").each(function(index, elem) { if($(elem).attr("data-server-message") == 'true') { $(elem).remove(); } }); } // $("." + classId).get().forEach(function(entry, index, array) { // $(entry).removeClass(classId); // }); } function resetMessages(messagesBoxId) { var errorId = messagesBoxId != null ? (messagesBoxId + 'Ul'): 'errormessages'; var warningId = messagesBoxId != null ? (messagesBoxId + 'Ul_warn'): 'warnmessages'; var infoId = messagesBoxId != null ? (messagesBoxId + 'Ul_info'): 'infomessages'; resetMessage(errorId, "error"); resetMessage(warningId, "warning"); resetMessage(infoId, "info"); } function fillQueryObjectJs(elem) { _dataTableFirstAjaxCall = true; var source = elem; var knockoutVariableName = source.getAttribute("data-knockout-varname"); var knockoutObject = eval('appViewModel.'+knockoutVariableName); var dataTableId = source.getAttribute("data-data-table-id"); $("#"+dataTableId).attr("data-dataTable-ajax-call", "true"); var tableElement = document.getElementById(dataTableId); var queryObjectName = tableElement.getAttribute("data-queryobject-varname"); var tableVariableName = tableElement.getAttribute("data-table-varname"); var elementToShowId = source.getAttribute("data-element-to-show-id"); window[queryObjectName] = ko.toJS(knockoutObject); $("#" + elementToShowId).show("slow"); } function submitDataTable(source, viewModel, alertBoxId) { _dataTableFirstAjaxCall = true; var appViewModelBaseName = "appViewModel"; alertBoxId=source.getAttribute("data-messages-box-id")==null?alertBoxId:source.getAttribute("data-messages-box-id") var alertBoxElem = alertBoxId == null ? "alertbox" : alertBoxId; var customViewModel = source.getAttribute("data-custom-model-name"); if(customViewModel!=null && customViewModel!='') { appViewModelBaseName = customViewModel; } else if(viewModel!=null && viewModel!='') { appViewModelBaseName = viewModel; } var knockoutVariableName = source.getAttribute("data-knockout-varname"); //var knockoutObject = appViewModel[knockoutVariableName]; // support for dot notation var knockoutObject = eval(appViewModelBaseName+'.'+knockoutVariableName); var errors = eval(appViewModelBaseName+'.__errors__.' + knockoutVariableName); if((typeof isCustomValidationValid !== 'undefined') && isCustomValidationValid != true) { if(alertBoxId) { // for(var err in errors()) { // if($("#"+alertBoxElem+"Ul").length) // $("#"+alertBoxElem+"Ul").append("
  • " + errors()[err] + "
  • "); // else // $("#"+alertBoxElem).append("
  • " + errors()[err] + "
  • "); // } } $("#"+alertBoxElem).show(); errors.showAllMessages(); } else if (errors().length === 0) { $("#"+alertBoxElem).hide(); var dataTableId = source.getAttribute("data-data-table-id"); $("#"+dataTableId).attr("data-dataTable-ajax-call", "true"); var tableElement = document.getElementById(dataTableId); var queryObjectName = tableElement.getAttribute("data-queryobject-varname"); var tableVariableName = tableElement.getAttribute("data-table-varname"); var elementToShowId = source.getAttribute("data-element-to-show-id"); var jsonKOModel = ko.toJS(knockoutObject); window[queryObjectName] = jsonKOModel; $("#" + elementToShowId).show("slow"); // $("#" + "dataTablePopup").DataTable().draw(); window[tableVariableName].draw(); if(typeof addSessionParams === 'function') { var customModelName = source.getAttribute("data-custom-model-name"); addSessionParams(tableElement, jsonKOModel, ((customModelName!=null && customModelName!='')?customModelName+'.':'')+knockoutVariableName); } } else { if(alertBoxId) { // for(var err in errors()) { // if($("#"+alertBoxElem+"Ul").length) // $("#"+alertBoxElem+"Ul").append("
  • " + errors()[err] + "
  • "); // else // $("#"+alertBoxElem).append("
  • " + errors()[err] + "
  • "); // } } $("#"+alertBoxElem).show(); errors.showAllMessages(); } } function bindSubmitDataTable(element) { var realElement = element; if (!realElement) { realElement = document; } $(realElement).find(".submit-data-table").click(function(event) { resetMessages(); submitDataTable(event.target); }); } function submitFormButtonClick(data, event, formId) { resetMessages(); var element = $(event.target); var knockoutVariableName = element.attr('data-knockout-varname'); var validate = element.attr('data-validate'); var isValid = true; var errorsFunction = eval('appViewModel.__errors__.' + knockoutVariableName); if (validate !== 'false') { isValid = errorsFunction().length === 0; } if(typeof isCustomValidationValid !== 'undefined') { if (isValid && isCustomValidationValid) { var form = element.closest('form'); if(formId) form = "#" + formId; submitForm(element.attr('data-url'), form, element.attr('data-confirm-title'), element.attr('data-confirm-message'), element.attr('data-cancel-button-title'), element.attr('data-confirm-button-title')); return; } else { showAndScrollToAlertBox(); errorsFunction.showAllMessages(); return; } } if (isValid) { var form = element.closest('form'); if(formId) form = "#" + formId; submitForm(element.attr('data-url'), form, element.attr('data-confirm-title'), element.attr('data-confirm-message'), element.attr('data-cancel-button-title'), element.attr('data-confirm-button-title')); } else { showAndScrollToAlertBox(); errorsFunction.showAllMessages(); } } function submitObjectButtonClick(data, event) { var element = $(event.target); var messagesBoxId = element.attr('data-messages-box-id'); //Reset all messages resetMessages(messagesBoxId); var knockoutVariableName = element.attr('data-knockout-varname'); var validate = element.attr('data-validate'); var isValid = true; var appViewModelBaseName = "appViewModel"; var customViewModel = element.attr("data-custom-model-name"); if(customViewModel!=null && customViewModel!='') { appViewModelBaseName = customViewModel; } var errorsFunction = eval(appViewModelBaseName + '.__errors__.' + knockoutVariableName); if (validate !== 'false') { isValid = errorsFunction().length === 0; } if (isValid) { var functionName = element.attr('data-object-function-name'); var data = null; if (functionName !== undefined && functionName !== null) { var functionObj = window[functionName]; data = functionObj(knockoutVariableName); } else { data = ko.toJS(eval(((appViewModelBaseName != null && appViewModelBaseName) ? appViewModelBaseName : 'appViewModel')+ '.' + knockoutVariableName)); } submitObject(element.attr('data-url'), element.attr('data-http-method'), data, element.attr('data-after-done-function'), element.attr('data-confirm-title'), element.attr('data-confirm-message'), element.attr('data-success-message'), element.attr('data-cancel-button-title'), element.attr('data-confirm-button-title'), messagesBoxId, element.attr('data-alert-messages')); } else { $('#' + (messagesBoxId != null ? messagesBoxId : "alertbox")).show(); errorsFunction.showAllMessages(); } } function submitSearchFormButtonClick(data, event, formId) { resetMessages(); var element = $(event.target); var appViewModelBaseName = "appViewModel"; var customViewModel = element.attr("data-custom-model-name"); if(customViewModel!=null && customViewModel!='') { appViewModelBaseName = customViewModel; } var knockoutVariableName = element.attr("data-knockout-varname"); var knockoutObject = eval(appViewModelBaseName+'.'+knockoutVariableName); var validate = element.attr('data-validate'); var isValid = true; var errorsFunction = eval('appViewModel.__errors__.' + knockoutVariableName); if (validate !== 'false') { isValid = errorsFunction().length === 0; } if(typeof isCustomValidationValid !== 'undefined') { if (isValid && isCustomValidationValid) { var form = element.closest('form'); if(formId) form = "#" + formId; submitSearchForm(element.attr('data-url'), form); return; } else { showAndScrollToAlertBox(); errorsFunction.showAllMessages(); return; } } if (isValid) { var form = element.closest('form'); if(formId) form = "#" + formId; var jsonKOModel = ko.toJS(knockoutObject); if(typeof addSessionParams === 'function') { addSessionParams(undefined, jsonKOModel, knockoutVariableName); } submitSearchForm(element.attr('data-url'), form); } else { showAndScrollToAlertBox(); errorsFunction.showAllMessages(); } } function getInternalKOObject(knockoutVariableName) { var data = {}; data[knockoutVariableName] = ko.toJS(eval('appViewModel.'+knockoutVariableName)); return data; } function getObjectForDelete(knockoutVariableName) { var data = {}; var obj = ko.toJS(eval('appViewModel.'+knockoutVariableName)); data.objectKey = obj.objectKey; data.datiTecnici = {}; data.datiTecnici.dttmModifica = obj.datiTecnici.dttmModifica; return data; } function submitForm(url, form, confirmTitle, confirmMessage, cancelButtonTitle, confirmButtonTitle) { if (confirmMessage == undefined) { submitSearchForm(url, form); } else { bootbox .confirm({ title: confirmTitle, message: confirmMessage, buttons: { 'cancel': { label: cancelButtonTitle, className: 'btn-back pull-left' }, 'confirm': { label: confirmButtonTitle, className: 'btn-primary pull-right' } }, callback: function (result) { if (result) { var $form = $(form); $form.attr('action', url); $form.submit(); } } }); } } function submitSearchForm(url, form) { var $form = $(form); $form.attr('action', url); $form.submit(); } function submitObject(url, httpMethod, data, afterDoneFunction, confirmTitle, confirmMessage, successMessage, cancelButtonTitle, confirmButtonTitle, messagesBoxId, alertMessages) { bootbox .confirm({ title: confirmTitle, message: confirmMessage, buttons: { 'cancel': { label: cancelButtonTitle, className: 'btn-back pull-left' }, 'confirm': { label: confirmButtonTitle, className: 'btn-primary pull-right' } }, callback: function (result) { if (result) { $.ajax({ type: httpMethod, contentType: 'application/json', dataType: 'json', url: url, data: JSON.stringify(data) }) .done( function (result, data) { handleMessagesFromJson(result, messagesBoxId, alertMessages); if (afterDoneFunction != null){ /* If a afterDoneFunction is defined, call it with the result of the computation */ var adf = eval(afterDoneFunction); if (typeof adf === "function") { adf(result); } } }); } } }); } function handleMessagesFromJson(response, messagesBoxId, alertMessages){ var userMessages = response.userMessages; if (userMessages != null && userMessages instanceof Array){ _userMessages = userMessages; handleMessages(messagesBoxId,alertMessages); } } function isObjNull(obj) { return (obj!='null' && obj != null) } function addSessionParams(tableElem, jsonKOModel, koVarname) { koVarname = koVarname.split('.').join(''); var pc = koVarname+"PrimoCaricamento"; sessionStorage.setItem(pc, 'false'); sessionStorage.setItem(koVarname, JSON.stringify(jsonKOModel)); } function fillQueryObject(elem, koVarname, doInitialSearch) { koVarname = koVarname.split('.').join(''); var pc = koVarname+"PrimoCaricamento"; // nel caso di di un do initial search a true, si lancia subito la ricerca if (doInitialSearch == 'true' || (sessionStorage.getItem(pc) != null && sessionStorage.getItem(pc) =='false')) { fillQueryObjectJs(elem) } } function regTabSwitch(alert){ $('#' + alert ).delegate("a.alert-elem","click",function() { try { // MI RICAVO IL NOME DEL CONTROLLO DALL'ALLERT SU CUI HO CLIKKATO var attrTmp = this.href; var res = attrTmp.split("#"); var source = '#' + res[1]; // MI RICAVO IL NOME DEL TAB PANE PARENTE DAL CONTROLLO var attr = '#' + $(source).closest('.tab-content .tab-pane').attr('id'); // SE IL CONTROLLO HA ASSOCIATO UN TAB ALLORA ESEGUO LO SWITCH if (attr != null){ // RECUPERO IL TAB CHE CONTIENE IL CONTROLLO var tabbed = $( source ).closest('.tab-content-overflow'); // RECUPERO IL TAB PANE CHE CONTIENE IL CONTROLLO var tabbedNav = tabbed.find('.nav li'); // RECUPERO IL TAB CONTENT CHE CONTIENE IL CONTROLLO var tabbedContent = tabbed.find('.tab-content .tab-pane'); // MI RICAVO IL TAB PANE E IL TAB CONTENT DA ATTIVARE var tabToActivate = tabbed.find('[href="' + attr + '"]').parent(); var contentTabToActivate =$(attr); // VERIFICO CHE IL TAB DA ATTIVARE NON SIA DISABILITATO if ( tabToActivate.hasClass('tab-disabled') == false){ // SE IL TAB DEL CONTROLLO NON E DISATTIVATO // ALLORA ESEGUI LO Switch tabbedNav.removeClass( "active" ); tabToActivate.addClass( "active" ); tabbedContent.removeClass( "active in" ); contentTabToActivate.addClass( "active in" ); $(source).focus(); } } }catch(err) { console.log('regTabSwitch: ' + err); } }); }