Initial Commit
This commit is contained in:
@@ -0,0 +1,565 @@
|
||||
'use strict';
|
||||
|
||||
/******************** PARAMETRI ******************************/
|
||||
const BASE_URL_SITE = $('link[rel="canonical"]').attr('href');
|
||||
var modal_id = '#modal';
|
||||
var form_id = '#' + $(modal_id).attr('data-form');
|
||||
var form = $(form_id);
|
||||
var filter_modal_id = '#filterModal';
|
||||
var filter_form_id = '#' + $(filter_modal_id).attr('data-form');
|
||||
var filter_form = $(filter_form_id);
|
||||
var modalLoader = $('#modal-loader');
|
||||
/*********************************************************************************/
|
||||
|
||||
/**** FUNZIONI GLOBALI PERSONALIZZATE ***/
|
||||
|
||||
const defaultDatePickerOptions = {
|
||||
language: 'it',
|
||||
format: "dd/mm/yyyy",
|
||||
autoclose: true
|
||||
};
|
||||
|
||||
const defaultDateRangePickerOptions = {
|
||||
autoApply: false,
|
||||
autoUpdateInput: false,
|
||||
linkedCalendars: false,
|
||||
showCustomRangeLabel: false,
|
||||
locale: {
|
||||
"format": "DD/MM/YYYY",
|
||||
"separator": " | ",
|
||||
"applyLabel": "Ok",
|
||||
"cancelLabel": "Reset",
|
||||
"fromLabel": "Da",
|
||||
"toLabel": "A",
|
||||
"customRangeLabel": "Custom",
|
||||
"weekLabel": "W",
|
||||
"daysOfWeek": [
|
||||
"Dom",
|
||||
"Lun",
|
||||
"Mar",
|
||||
"Mer",
|
||||
"Gio",
|
||||
"Ven",
|
||||
"Sab"
|
||||
],
|
||||
"monthNames": [
|
||||
"Gennaio",
|
||||
"Febbraio",
|
||||
"Marzo",
|
||||
"Aprile",
|
||||
"Maggio",
|
||||
"Giugno",
|
||||
"Luglio",
|
||||
"Agosto",
|
||||
"Settembre",
|
||||
"Ottobre",
|
||||
"Novembre",
|
||||
"Dicembre"
|
||||
],
|
||||
"firstDay": 1
|
||||
},
|
||||
alwaysShowCalendars: true,
|
||||
ranges: {
|
||||
'Oggi': [moment(), moment()],
|
||||
'Ieri': [moment().subtract(1, 'days'), moment().subtract(1, 'days')],
|
||||
'Ultimi 7 gg': [moment().subtract(6, 'days'), moment()],
|
||||
'Ultimi 30 gg': [moment().subtract(29, 'days'), moment()],
|
||||
'Questo Mese': [moment().startOf('month'), moment().endOf('month')],
|
||||
'Mese Scorso': [moment().subtract(1, 'month').startOf('month'), moment().subtract(1, 'month').endOf('month')]
|
||||
}
|
||||
};
|
||||
|
||||
let $table;
|
||||
|
||||
String.prototype.capitalize = function () {
|
||||
return this.charAt(0).toUpperCase() + this.slice(1)
|
||||
}
|
||||
|
||||
$('a[href="#"]').click(function (event) {
|
||||
event.preventDefault();
|
||||
});
|
||||
|
||||
$('a[data-widget="pushmenu"]').click(function () {
|
||||
let collapsed = ($('body').hasClass('sidebar-collapse')) ? 0 : 1;
|
||||
$.cookie('ui_sidebar_collapsed', collapsed, {path: '/'});
|
||||
if (collapsed) {
|
||||
$table.trigger('reflow');
|
||||
}
|
||||
});
|
||||
|
||||
/****************************************
|
||||
************* SEZIONE FORM *************
|
||||
***************************************/
|
||||
|
||||
function populateForm(data, frm) {
|
||||
$.each(data, function (key, value) {
|
||||
var $ctrl = $('[name=' + key + ']', frm);
|
||||
if ($ctrl.is('select')) {
|
||||
$("option", $ctrl).each(function () {
|
||||
if (this.value == value) {
|
||||
this.selected = true;
|
||||
}
|
||||
});
|
||||
} else {
|
||||
switch ($ctrl.attr("type")) {
|
||||
case "text":
|
||||
case "hidden":
|
||||
case "number":
|
||||
$ctrl.val(value);
|
||||
break;
|
||||
case "textarea":
|
||||
$ctrl.val(value);
|
||||
break;
|
||||
case "radio":
|
||||
case "checkbox":
|
||||
$ctrl.each(function () {
|
||||
if ($(this).attr('id') == key && value == '1') {
|
||||
$(this).iCheck('check');
|
||||
}
|
||||
});
|
||||
break;
|
||||
default:
|
||||
$ctrl.val(value);
|
||||
break;
|
||||
}
|
||||
}
|
||||
});
|
||||
$('input.datepicker').datepicker('update');
|
||||
}
|
||||
|
||||
function resetForm(tipo, form_id) {
|
||||
|
||||
$(form_id + ' #ErrorDescription').html('').addClass('d-none');
|
||||
$(form_id + ' div.form-group').removeClass('has-error');
|
||||
$(form_id + ' div.multi-line-field-label-error').removeClass('has-error');
|
||||
$(form_id + ' div.label-danger').addClass('d-none').html('');
|
||||
|
||||
if (tipo != 'errors') {
|
||||
$(form_id).clearForm();
|
||||
}
|
||||
}
|
||||
|
||||
function getErrorHtml(formErrors, noBr) {
|
||||
|
||||
if ((typeof (formErrors) === 'undefined') || (formErrors.length < 1)) return;
|
||||
|
||||
noBr = (typeof (noBr) === 'undefined') ? false : noBr;
|
||||
|
||||
var out = '';
|
||||
let brtxt = (noBr) ? '' : '<br>';
|
||||
for (let errorKey in formErrors) {
|
||||
out += (formErrors[errorKey] + brtxt);
|
||||
}
|
||||
|
||||
return out;
|
||||
}
|
||||
|
||||
function showErrors(form_id, resp) {
|
||||
resetForm('errors', form_id);
|
||||
//$(form_id + ' #ErrorDescription').html(resp.message).removeClass('d-none');
|
||||
toastr.error(resp.message);
|
||||
for (let key in resp.errors) {
|
||||
|
||||
let errBlock = $(form_id + ' div#' + key);
|
||||
let labelBlock = $(form_id + ' div#' + key + ' .label-danger');
|
||||
|
||||
errBlock.addClass('has-error');
|
||||
|
||||
if (labelBlock.length === 0) {
|
||||
labelBlock = errBlock.parent().children(' .label-danger');
|
||||
labelBlock.html(labelBlock.html() + ' | ' + getErrorHtml(resp.errors[key], true));
|
||||
labelBlock.removeClass('d-none');
|
||||
} else {
|
||||
labelBlock.html(getErrorHtml(resp.errors[key])).removeClass('d-none');
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
function initDatePicker() {
|
||||
$('.datepicker').datepicker(defaultDatePickerOptions);
|
||||
}
|
||||
|
||||
function initDateRangePicker(customRange) {
|
||||
|
||||
let dateRangePickerOptions = defaultDateRangePickerOptions;
|
||||
|
||||
if (customRange) {
|
||||
dateRangePickerOptions.ranges = customRange;
|
||||
}
|
||||
|
||||
$('input[daterangepicker]').daterangepicker(dateRangePickerOptions);
|
||||
|
||||
$('input[daterangepicker]').on('apply.daterangepicker', function (ev, picker) {
|
||||
$(this).val(picker.startDate.format('DD/MM/YYYY') + ' | ' + picker.endDate.format('DD/MM/YYYY'));
|
||||
});
|
||||
|
||||
$('input[daterangepicker]').on('cancel.daterangepicker', function (ev, picker) {
|
||||
$(this).val('');
|
||||
});
|
||||
}
|
||||
|
||||
function initSwitchButton() {
|
||||
//Abilita gli swithc button
|
||||
$("input[data-bootstrap-switch]").each(function () {
|
||||
$(this).bootstrapSwitch('state', $(this).prop('checked'));
|
||||
});
|
||||
}
|
||||
|
||||
function initICheck() {
|
||||
|
||||
var tableBody = $('#tablebody');
|
||||
|
||||
$('#select_all').click(function (link) {
|
||||
link.preventDefault();
|
||||
tableBody.find(':checkbox').iCheck('check');
|
||||
});
|
||||
|
||||
$('#deselect_all').click(function (link) {
|
||||
link.preventDefault();
|
||||
tableBody.find(':checkbox').iCheck('uncheck');
|
||||
});
|
||||
|
||||
$('#invert_all').click(function (link) {
|
||||
link.preventDefault();
|
||||
tableBody.find(':checkbox').iCheck('toggle');
|
||||
});
|
||||
}
|
||||
|
||||
function initTooltip() {
|
||||
$('[data-toggle="tooltip"]').tooltip();
|
||||
}
|
||||
|
||||
function initPopover() {
|
||||
$('[data-toggle="popover"]').popover();
|
||||
}
|
||||
|
||||
function initSummernote() {
|
||||
$('.summernote').summernote({
|
||||
dialogsInBody: true
|
||||
});
|
||||
}
|
||||
|
||||
function initSelect2(){
|
||||
$('select[select2]').select2();
|
||||
}
|
||||
|
||||
/*function initFontIconPicker(options){
|
||||
$('[font-icon-picker]').fontIconPicker(options);
|
||||
}*/
|
||||
|
||||
function refreshFormComponents() {
|
||||
$("input[type='checkbox'], input[type='radio']").not(".no-icheck").iCheck({
|
||||
checkboxClass: 'icheckbox_square-blue',
|
||||
radioClass: 'iradio_square-blue'
|
||||
});
|
||||
|
||||
initTooltip();
|
||||
initPopover();
|
||||
}
|
||||
|
||||
function initFormComponents() {
|
||||
|
||||
refreshFormComponents();
|
||||
|
||||
initICheck();
|
||||
initSwitchButton();
|
||||
initDatePicker();
|
||||
initDateRangePicker();
|
||||
}
|
||||
|
||||
$(document).ready(() => {
|
||||
setOrderThValue();
|
||||
fixHeghtOfTableList();
|
||||
}).delegate('a[href="#"]', 'click', function (link) {
|
||||
link.preventDefault();
|
||||
})
|
||||
.delegate('#filterData', 'click', function (link) {
|
||||
link.preventDefault();
|
||||
$(filter_modal_id).modal('show');
|
||||
})
|
||||
.delegate('#filtra', 'click', function (link) {
|
||||
link.preventDefault();
|
||||
filter_form.submit();
|
||||
})
|
||||
.delegate('#resetFiltri', 'click', function (link) {
|
||||
link.preventDefault();
|
||||
filter_form.clearForm();
|
||||
filter_form.find('select').val('');
|
||||
})
|
||||
.delegate('th[data-ord]', 'click', function (link) {
|
||||
link.preventDefault();
|
||||
|
||||
const ordVal = $(this).attr('data-ord');
|
||||
const tipoOrderEl = $('#tipoOrder');
|
||||
const tipoOrder = (tipoOrderEl.val() === 'ASC') ? 'DESC' : 'ASC';
|
||||
|
||||
$('#order').val(ordVal);
|
||||
tipoOrderEl.val(tipoOrder);
|
||||
|
||||
$('#searchForm').submit();
|
||||
})
|
||||
.delegate('select[data-refresh-search-form]', 'change', function (link) {
|
||||
link.preventDefault();
|
||||
$('#searchForm').submit();
|
||||
})
|
||||
|
||||
/*******************************************
|
||||
************* SEZIONE TABELLA *************
|
||||
******************************************/
|
||||
|
||||
function setOrderThValue() {
|
||||
const ordVal = $('#order').val();
|
||||
const tipoOrd = $('#tipoOrder').val();
|
||||
|
||||
$('th[data-ord]').find('i').remove();
|
||||
|
||||
const thOrd = $('th[data-ord="' + ordVal + '"]');
|
||||
|
||||
const icon = (tipoOrd === 'ASC') ? 'fa-chevron-up' : 'fa-chevron-down';
|
||||
const iconText = `<i class="fas ${icon}"></i>`;
|
||||
|
||||
thOrd.find('i').remove();
|
||||
const thText = thOrd.html() + ' ' + iconText;
|
||||
|
||||
thOrd.html(thText);
|
||||
}
|
||||
|
||||
function initTableFlotHeader() {
|
||||
|
||||
//Abilito l'header fisso
|
||||
$table = $('.table.flot-header');
|
||||
$table.floatThead({
|
||||
autoReflow: true,
|
||||
scrollContainer: function ($table) {
|
||||
return $table.closest('.table-wrapper');
|
||||
},
|
||||
responsiveContainer: function ($table) {
|
||||
return $table.closest('.table-responsive');
|
||||
}
|
||||
});
|
||||
|
||||
//Imposta l'altezza del table-wrapper
|
||||
fixHeghtOfTableList();
|
||||
}
|
||||
|
||||
function refreshTable() {
|
||||
if ($table) {
|
||||
fixHeghtOfTableList();
|
||||
}
|
||||
}
|
||||
|
||||
function fixHeghtOfTableList() {
|
||||
|
||||
let windowHeight = $(window).height();
|
||||
|
||||
let navbarHeight = $(".navbar").outerHeight() || 0;
|
||||
let footerHeight = $(".main-footer").outerHeight() || 0;
|
||||
|
||||
let contentHeaderHeight = $(".content-header").outerHeight() || 0;
|
||||
let boxHeaderHeight = $(".box-header").outerHeight() || 0;
|
||||
|
||||
let boxFooterHeight = $(".box-footer").outerHeight() || 0;
|
||||
|
||||
let tableWrapperHeight = windowHeight - (navbarHeight + footerHeight + contentHeaderHeight + boxHeaderHeight + boxFooterHeight + 15);
|
||||
$('.table-wrapper').css("height", tableWrapperHeight + "px");
|
||||
|
||||
let theadHeight = $('.table-wrapper thead').outerHeight() + 1;
|
||||
|
||||
const totHeight = tableWrapperHeight - theadHeight;
|
||||
|
||||
$('td.no-rows').css("height", (totHeight) + "px");
|
||||
}
|
||||
|
||||
$(window).resize(function () {
|
||||
fixHeghtOfTableList();
|
||||
$table.trigger('reflow');
|
||||
});
|
||||
|
||||
/**************************************************
|
||||
************* FUNZIONI SPECIALIZZATE *************
|
||||
*************************************************/
|
||||
|
||||
function password_generator(len) {
|
||||
let length = (len) ? (len) : (10);
|
||||
let string = "abcdefghijklmnopqrstuvwxyz"; //to upper
|
||||
let numeric = '0123456789';
|
||||
let punctuation = '!@#$%^&*()_+~`|}{[]\:;?><,./-=';
|
||||
let password = "";
|
||||
let character = "";
|
||||
let crunch = true;
|
||||
while (password.length < length) {
|
||||
let entity1 = Math.ceil(string.length * Math.random() * Math.random());
|
||||
let entity2 = Math.ceil(numeric.length * Math.random() * Math.random());
|
||||
let entity3 = Math.ceil(punctuation.length * Math.random() * Math.random());
|
||||
let hold = string.charAt(entity1);
|
||||
hold = (entity1 % 2 == 0) ? (hold.toUpperCase()) : (hold);
|
||||
character += hold;
|
||||
character += numeric.charAt(entity2);
|
||||
character += punctuation.charAt(entity3);
|
||||
password = character;
|
||||
}
|
||||
return password;
|
||||
}
|
||||
|
||||
function copyToClipboard(elem) {
|
||||
// create hidden text element, if it doesn't already exist
|
||||
var targetId = "_hiddenCopyText_";
|
||||
var isInput = elem.tagName === "INPUT" || elem.tagName === "TEXTAREA";
|
||||
var origSelectionStart, origSelectionEnd;
|
||||
if (isInput) {
|
||||
// can just use the original source element for the selection and copy
|
||||
target = elem;
|
||||
origSelectionStart = elem.selectionStart;
|
||||
origSelectionEnd = elem.selectionEnd;
|
||||
} else {
|
||||
// must use a temporary form element for the selection and copy
|
||||
target = document.getElementById(targetId);
|
||||
if (!target) {
|
||||
var target = document.createElement("textarea");
|
||||
target.style.position = "absolute";
|
||||
target.style.left = "-9999px";
|
||||
target.style.top = "0";
|
||||
target.id = targetId;
|
||||
document.body.appendChild(target);
|
||||
}
|
||||
target.textContent = elem.textContent;
|
||||
}
|
||||
// select the content
|
||||
var currentFocus = document.activeElement;
|
||||
target.focus();
|
||||
target.setSelectionRange(0, target.value.length);
|
||||
|
||||
// copy the selection
|
||||
var succeed;
|
||||
try {
|
||||
succeed = document.execCommand("copy");
|
||||
} catch (e) {
|
||||
succeed = false;
|
||||
}
|
||||
// restore original focus
|
||||
if (currentFocus && typeof currentFocus.focus === "function") {
|
||||
currentFocus.focus();
|
||||
}
|
||||
|
||||
if (isInput) {
|
||||
// restore prior selection
|
||||
elem.setSelectionRange(origSelectionStart, origSelectionEnd);
|
||||
} else {
|
||||
// clear temporary content
|
||||
target.textContent = "";
|
||||
}
|
||||
return succeed;
|
||||
}
|
||||
|
||||
/**
|
||||
* Questa funzione passato un template html ne sostituisce i parametri
|
||||
* @param template
|
||||
* @param params
|
||||
*/
|
||||
function prepareHTMLWithParams(template, params) {
|
||||
if (params instanceof Array) {
|
||||
params.forEach(function (val, key) {
|
||||
template = template.replace(new RegExp('%' + key + '%', 'g'), val);
|
||||
});
|
||||
} else if (params instanceof Object) {
|
||||
Object.keys(params).forEach(function (key) {
|
||||
template = template.replace(new RegExp('%' + key + '%', 'g'), params[key]);
|
||||
});
|
||||
}
|
||||
|
||||
return template;
|
||||
}
|
||||
|
||||
/************************************************************************************
|
||||
************* SEZIONE FUNZIONI GENRICHE PER LA GESTIONE DELLE IMMAGINI *************
|
||||
************************************************************************************/
|
||||
|
||||
/**
|
||||
* Questa funzione carica l'immagine nel box anteprima
|
||||
* @param basePathImage
|
||||
* @param nomeVaribileFile
|
||||
* @param valFile
|
||||
*/
|
||||
function popolaImmagine(basePathImage, nomeVaribileFile, valFile, custom_class) {
|
||||
|
||||
if (custom_class === undefined) {
|
||||
custom_class = 'img-fluid img-thumbnail';
|
||||
}
|
||||
|
||||
if (valFile) {
|
||||
$('#preview_block_' + nomeVaribileFile).addClass(custom_class).attr('src', basePathImage + valFile);
|
||||
$('#image-preview-filename-' + nomeVaribileFile).val(valFile);
|
||||
$("#image-preview-input-title-" + nomeVaribileFile).text("Cambia");
|
||||
$("#image-preview-clear-" + nomeVaribileFile).show();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Questa funzione resetta il blocco immagine in base al parametro nome File che riceve
|
||||
* @param nomeVariabileFile
|
||||
* @param baseImagePath
|
||||
*/
|
||||
function resetImageInput(nomeVariabileFile, baseImagePath) {
|
||||
// $('#preview_block_' + nomeVariabileFile).attr('src', baseImagePath + 'noimage.jpg');
|
||||
$('#preview_block_' + nomeVariabileFile).attr('src', baseImagePath + 'no_img.png');
|
||||
$('#image-preview-filename-' + nomeVariabileFile).val('');
|
||||
$('#image-preview-clear-' + nomeVariabileFile).hide();
|
||||
$('#image-preview-input-title-' + nomeVariabileFile).html('Carica ...');
|
||||
|
||||
var input_file = $('input#image_' + nomeVariabileFile);
|
||||
input_file.replaceWith(input_file.val('').clone(true));
|
||||
}
|
||||
|
||||
/**
|
||||
* Questa funzione definisce gli event handler per il nome immagine che riceve in entrata
|
||||
*
|
||||
* @param nome_immagine
|
||||
* @param base_image_path
|
||||
* @param custom_class [default value: img-fluid img-thumbnail']
|
||||
* @param custom_style [default value: '']
|
||||
*
|
||||
* '?' sta a indicare la Varibile NomeFile che si passa, dovrebbe corrispondere al nome del campo immagine
|
||||
* image-preview-clear-? = Identificativo del pulsante "Cancella"
|
||||
* image-preview-input-title-? = Identifica il testo del pusante "Scegli..." o "Cambia"
|
||||
* image-preview-input-? = Identificativo del input di tipo FILE dove andra dell'immagine
|
||||
* image-preview-filename-? = Identificativo dell'input che contiene il nome del file immagine caricato
|
||||
* image_preview_block_? = Identificativo del blocco che contiene l'html con il tag <IMG>
|
||||
* preview_block_? = Identificatico dell'elemento immagine per visualizzare l'anteprima
|
||||
*/
|
||||
function defineEventHandlerForImageBlock(nome_immagine, base_image_path, custom_class, custom_style) {
|
||||
|
||||
if (custom_class === undefined) {
|
||||
custom_class = 'img-fluid img-thumbnail';
|
||||
}
|
||||
|
||||
if (custom_style === undefined) {
|
||||
custom_style = '';
|
||||
}
|
||||
|
||||
//Evento click pulsante cancella
|
||||
$('#image-preview-clear-' + nome_immagine).click(function () {
|
||||
resetImageInput(nome_immagine, base_image_path);
|
||||
});
|
||||
|
||||
//Evento che al caricamento dell'immgaine ne crea il blocco anteprima
|
||||
$("#image-preview-input-" + nome_immagine + " input:file").change(function () {
|
||||
let img = $('<img/>', {
|
||||
id: 'preview_block_' + nome_immagine,
|
||||
class: custom_class,
|
||||
style: custom_style
|
||||
});
|
||||
let nome_file_1 = this.files[0];
|
||||
let reader_file_1 = new FileReader();
|
||||
// Set preview image into the popover data-content
|
||||
reader_file_1.onload = function (e) {
|
||||
$("#image-preview-input-title-" + nome_immagine).text("Cambia");
|
||||
$("#image-preview-clear-" + nome_immagine).show();
|
||||
$("#image-preview-filename-" + nome_immagine).val(nome_file_1.name);
|
||||
img.attr('src', e.target.result);
|
||||
$("#image_preview_block_" + nome_immagine).html($(img)[0].outerHTML);
|
||||
};
|
||||
reader_file_1.readAsDataURL(nome_file_1);
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user