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);
}
});
}