var isMobile = { Android: function () { return navigator.userAgent.match(/Android/i); }, BlackBerry: function () { return navigator.userAgent.match(/BlackBerry/i); }, iOS: function () { return navigator.userAgent.match(/iPhone|iPad|iPod/i); }, Opera: function () { return navigator.userAgent.match(/Opera Mini/i); }, Windows: function () { return navigator.userAgent.match(/IEMobile/i); }, any: function () { return (/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|ipad|iris|kindle|Android|Silk|lge |maemo|midp|mmp|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i.test(navigator.userAgent) || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(navigator.userAgent.substr(0, 4))); } }; // Aggiunta dell'ingranaggio all'unload della pagina $(window).on("beforeunload", function () { $("#main_loading").show(); }); // Rimozione dell'ingranaggio al caricamento completo della pagina $(window).on("load", function () { $("#main_loading").fadeOut(); }); $(document).ready(function () { // Imposta la lingua per la gestione automatica delle date dei diversi plugin moment.locale(globals.locale); globals.timestampFormat = moment.localeData().longDateFormat('L') + ' ' + moment.localeData().longDateFormat('LT'); // Imposta lo standard per la conversione dei numeri numeral.register('locale', 'it', { delimiters: { thousands: globals.thousands, decimal: globals.decimals, }, abbreviations: { thousand: 'k', million: 'm', billion: 'b', trillion: 't' }, currency: { symbol: '€' } }); numeral.locale('it'); numeral.defaultFormat('0,0.' + ('0').repeat(globals.cifre_decimali)); // Orologio clock(); // Richiamo alla generazione di Datatables start_datatables(); // Calendario principale ranges = {}; ranges[globals.translations.today] = [moment(), moment()]; ranges[globals.translations.firstThreemester] = [moment("01", "MM"), moment("03", "MM").endOf('month')]; ranges[globals.translations.secondThreemester] = [moment("04", "MM"), moment("06", "MM").endOf('month')]; ranges[globals.translations.thirdThreemester] = [moment("07", "MM"), moment("09", "MM").endOf('month')]; ranges[globals.translations.fourthThreemester] = [moment("10", "MM"), moment("12", "MM").endOf('month')]; ranges[globals.translations.firstSemester] = [moment("01", "MM"), moment("06", "MM").endOf('month')]; ranges[globals.translations.secondSemester] = [moment("06", "MM"), moment("12", "MM").endOf('month')]; ranges[globals.translations.thisMonth] = [moment().startOf('month'), moment().endOf('month')]; ranges[globals.translations.lastMonth] = [moment().subtract(1, 'month').startOf('month'), moment().subtract(1, 'month').endOf('month')]; ranges[globals.translations.thisYear] = [moment().startOf('year'), moment().endOf('year')]; ranges[globals.translations.lastYear] = [moment().subtract(1, 'year').startOf('year'), moment().subtract(1, 'year').endOf('year')]; // Calendario principale $('#daterange').daterangepicker({ locale: { customRangeLabel: globals.translations.custom, applyLabel: globals.translations.apply, cancelLabel: globals.translations.cancel, fromLabel: globals.translations.from, toLabel: globals.translations.to, }, ranges: ranges, startDate: globals.start_date, endDate: globals.end_date, applyClass: 'btn btn-success btn-sm', cancelClass: 'btn btn-danger btn-sm', linkedCalendars: false }, function (start, end) { // Esegue il submit del periodo selezionato e ricarica la pagina $.get(globals.rootdir + '/core.php?period_start=' + start.format('YYYY-MM-DD') + '&period_end=' + end.format('YYYY-MM-DD'), function (data) { location.reload(); }); } ); // Messaggi automatici di eliminazione $(document).on('click', '.ask', function () { message(this); }); // Pulsanti di Datatables $(".btn-csv").click(function (e) { var table = $(document).find("#" + $(this).parent().parent().parent().data("target")).DataTable(); table.buttons(0).trigger(); }); $(".btn-copy").click(function (e) { var table = $(document).find("#" + $(this).parent().parent().parent().data("target")).DataTable(); table.buttons(1).trigger(); }); $(".btn-print").click(function (e) { var table = $(document).find("#" + $(this).parent().parent().parent().data("target")).DataTable(); table.buttons(2).trigger(); }); $(".btn-select-all").click(function () { var table = $(document).find("#" + $(this).parent().parent().parent().data("target")).DataTable(); $("#main_loading").show(); table.clear().draw(); table.page.len(-1).draw(); }); $(".btn-select-none").click(function () { var table = $(document).find("#" + $(this).parent().parent().parent().data("target")).DataTable(); table.rows().deselect(); table.page.len(200); }); $(".bulk-action").click(function () { var table = $(document).find("#" + $(this).parent().parent().parent().parent().data("target")); if (table.data('selected')) { $(this).attr("data-id_records", table.data('selected')); $(this).data("id_records", table.data('selected')); message(this); $(this).attr("data-id_records", ""); $(this).data("id_records", ""); } else { swal(globals.translations.waiting, globals.translations.waiting_msg, "error"); } }); // Sidebar $('.sidebar-menu > li.treeview i.fa-angle-left').click(function (e) { e.preventDefault(); $(this).find('ul').stop().slideDown(); }); $('.sidebar-menu > li.treeview i.fa-angle-down').click(function (e) { e.preventDefault(); $(this).find('ul').stop().slideUp(); }); $menulist = $('.treeview-menu > li.active'); for (i = 0; i < $menulist.length; i++) { $list = $($menulist[i]); $list.parent().show().parent().addClass('active'); $list.parent().parent().find('i.fa-angle-left').removeClass('fa-angle-left').addClass('fa-angle-down'); } // Menu ordinabile $(".sidebar-menu").sortable({ cursor: 'move', stop: function (event, ui) { var order = $(this).sortable('toArray').toString(); $.post(globals.rootdir + "/modules/aggiornamenti/actions.php?id_module=" + globals.aggiornamenti_id, { op: 'sortmodules', ids: order }); } }); if (isMobile.any()) { $(".sidebar-menu").sortable("disable"); } // Tabs $('.nav-tabs').tabs(); // Entra nel tab indicato al caricamento della pagina var hash = window.location.hash ? window.location.hash : getUrlVars().hash; if (hash && hash != '#tab_0') { $('ul.nav-tabs a[href="' + hash + '"]').tab('show'); } // Nel caso la navigazione sia da mobile, disabilito il ritorno al punto precedente if (!isMobile.any()) { // Salvo lo scroll per riportare qui l'utente al reload $(window).on('scroll', function () { if (sessionStorage != undefined) { sessionStorage.setItem('scrollTop_' + globals.id_module + '_' + globals.id_record, $(document).scrollTop()); } }); // Riporto l'utente allo scroll precedente if (sessionStorage['scrollTop_' + globals.id_module + '_' + globals.id_record] != undefined) { setTimeout(function () { scrollToAndFocus(sessionStorage['scrollTop_' + globals.id_module + '_' + globals.id_record]); }, 1); } } $('.nav-tabs a').click(function (e) { $(this).tab('show'); var scrollmem = $('body').scrollTop() || $('html').scrollTop(); window.location.hash = this.hash; $('html,body').scrollTop(scrollmem); }); // Fix per la visualizzazione di Datatables all'interno dei tab Bootstrap $('a[data-toggle="tab"]').on('shown.bs.tab', function (e) { $($.fn.dataTable.tables(true)).DataTable().columns.adjust(); $($.fn.dataTable.tables(true)).DataTable().scroller.measure(); }); // Messaggio di avviso salvataggio a comparsa sulla destra solo nella versione a desktop intero if ($(window).width() > 1023) { var i = 0; $('.alert-success.push').each(function () { i++; tops = 60 * i + 95; $(this).css({ 'position': 'fixed', 'z-index': 3, 'right': '10px', 'top': -100, }).delay(1000).animate({ 'top': tops, }).delay(3000).animate({ 'top': -100, }); }); } // Nascondo la notifica se passo sopra col mouse $('.alert-success.push').on('mouseover', function () { $(this).stop().animate({ 'top': -100, 'opacity': 0 }); }); $('.widget').mouseover(function (e) { e.preventDefault(); start_widgets($("#widget-top, #widget-right")); }); $('#supersearch').keyup(function () { $(document).ajaxStop(); if ($(this).val() == '') { $(this).removeClass('wait'); } else { $(this).addClass('wait'); } }); $.widget("custom.supersearch", $.ui.autocomplete, { _create: function () { this._super(); this.widget().menu("option", "items", "> :not(.ui-autocomplete-category)"); }, _renderMenu: function (ul, items) { if (items[0].value == undefined) { $('#supersearch').removeClass('wait'); ul.html(''); } else { var that = this, currentCategory = ""; ul.addClass('ui-autocomplete-scrollable'); ul.css('z-index', '999'); $.each(items, function (index, item) { if (item.category != currentCategory) { ul.append("<li class='ui-autocomplete-category'>" + item.category + "</li>"); currentCategory = item.category; } that._renderItemData(ul, item); }); } }, _renderItem: function (ul, item) { return $("<li>") .append("<a href='" + item.link + "' title='Clicca per aprire'><b>" + item.value + "</b><br/>" + item.label + "</a>") .appendTo(ul); } }); // Configurazione supersearch var $super = $('#supersearch').supersearch({ minLength: 3, select: function (event, ui) { location.href = ui.item.link; }, source: function (request, response) { $.ajax({ url: globals.rootdir + '/ajax_search.php', dataType: "json", data: { term: request.term }, complete: function (jqXHR) { $('#supersearch').removeClass('wait'); }, success: function (data) { if (data == null) { response($.map(['a'], function (item) { return false; })); } else { response($.map(data, function (item) { labels = (item.labels).toString(); labels = labels.replace('<br/>,', '<br/>'); return { label: labels, category: item.category, link: item.link, value: item.title } })); } } }); } }); }); // Widgets ordinabili function start_widgets($widgets) { cls = new Array(); for (i = 0; i < $widgets.length; i++) { $widget = $($widgets[i]); list_name = ($widget.attr('id')).replace('widget-', ''); // Salvo le classi del primo elemento di ogni lista cls[list_name] = $widget.find('li:first').attr('class'); $widget.sortable({ items: 'li', cursor: 'move', dropOnEmpty: true, connectWith: '.widget', scroll: true, helper: 'clone', start: function (event, ui) { // Salvo la lista da cui proviene il drag src_list = ($(this).attr('id')).replace('widget-', ''); // Evidenzio le aree dei widget $('.widget').addClass('bordered').sortable('refreshPositions'); }, stop: function (event, ui) { // Rimuovo l'evidenziazione dell'area widget $('.widget').removeClass('bordered'); // Salvo la lista su cui ho eseguito il drop dst_list = (ui.item.parent().attr('id')).replace('widget-', ''); var new_class = ""; var order = $(this).sortable('toArray').toString(); $.post(globals.rootdir + "/modules/aggiornamenti/actions.php?id_module=" + globals.aggiornamenti_id, { op: 'updatewidget', location: dst_list, id_module: globals.id_module, id_record: globals.id_record, class: new_class, id: ui.item.attr('id') }); $.post(globals.rootdir + "/modules/aggiornamenti/actions.php?id_module=" + globals.aggiornamenti_id, { op: 'sortwidget', location: dst_list, ids: order, id_module: globals.id_module, id_record: globals.id_record, class: new_class }); } }); } } // Modal function launch_modal(title, href, init_modal, id) { //Fix - Select2 does not function properly when I use it inside a Bootstrap modal. $.fn.modal.Constructor.prototype.enforceFocus = function() {}; if (id == null) { id = '#bs-popup'; } if (init_modal == null) { init_modal = 1; } $('html').addClass('modal-open'); $(id).on('hidden.bs.modal', function () { if ($('.modal-backdrop').length < 1 ) { $('html').removeClass('modal-open'); $(this).html(''); $(this).data('modal', null); } }); // Lettura contenuto div if (href.substr(0, 1) == '#') { data = $(href).html(); $(id).html( '<div class="modal-dialog modal-lg">' + ' <div class="modal-content">' + ' <div class="modal-header">' + ' <button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">×</span><span class="sr-only">' + globals.translations.close + '</span></button>' + ' <h4 class="modal-title">' + title + '</h4>' + ' </div>' + ' <div class="modal-body">' + data + '</div>' ); if (init_modal == 1) { $(id).modal('show'); } } else { $.get(href, function (data, response) { if (response == 'success') { $(id).html( '<div class="modal-dialog modal-lg">' + ' <div class="modal-content">' + ' <div class="modal-header">' + ' <button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">×</span><span class="sr-only">' + globals.translations.close + '</span></button>' + ' <h4 class="modal-title">' + title + '</h4>' + ' </div>' + ' <div class="modal-body">' + data + '</div>' ); if (init_modal == 1) { $(id).modal('show'); } } }); } } // Datatable function start_datatables() { $('.datatables').each(function () { if (!$.fn.DataTable.isDataTable($(this))) { $(this).DataTable({ language: { url: globals.js + "/i18n/datatables/" + globals.locale + ".min.json" }, retrieve: true, ordering: true, searching: true, paging: false, order: [], lengthChange: false, scrollY: "70vh", }); } }); $('.main-records').each(function () { var $this = $(this); $this.data('selected', ''); // Controlla che la tabella non sia già inizializzata if (!$.fn.DataTable.isDataTable('#' + $this.attr('id'))) { var id_module = $this.data('idmodule'); var id_plugin = $this.data('idplugin'); var id_parent = $this.data('idparent'); // Parametri di ricerca da url o sessione var search = getUrlVars(); globals.search.forEach(function (value, index, array) { if (search[array[index]] == undefined) { search.push(array[index]); search[array[index]] = array[value]; } }) // Fix per l'URL encoding search.forEach(function (value, index, array) { search[array[index]] = decodeURIComponent(array[value]); }) var res = []; $this.find("th").each(function () { var id = $(this).attr('id').replace("th_", ""); sear = search["search_" + id] ? search["search_" + id] : ""; res.push({ "sSearch": sear }); }); var sum; var table = $this.DataTable({ language: { url: globals.js + '/i18n/datatables/' + globals.locale + '.min.json' }, autoWidth: true, dom: "ti", serverSide: true, deferRender: true, ordering: true, searching: true, aaSorting: [], aoSearchCols: res, scrollY: "60vh", scrollX: '100%', retrieve: true, stateSave: true, stateSaveCallback: function (settings, data) { sessionStorage.setItem('DataTables_' + id_module + '-' + id_plugin + '-' + id_parent, JSON.stringify(data)); }, stateLoadCallback: function (settings) { return JSON.parse(sessionStorage.getItem('DataTables_' + id_module + '-' + id_plugin + '-' + id_parent)); }, columnDefs: [{ searchable: false, orderable: false, width: '1%', className: 'select-checkbox', targets: 0 }], select: { style: 'multi', selector: 'td:first-child' }, buttons: [{ extend: 'csv', fieldSeparator: ";", exportOptions: { modifier: { selected: true } } }, { extend: 'copy', exportOptions: { modifier: { selected: true } } }, { extend: 'print', autoPrint: true, customize: function ( win ) { $(win.document.body) .css( 'font-size', '10pt' ) .append( '<table class="main-records table table-condensed table-bordered dataTable" ><tfoot><tr><td></td><td class="pull-right" >'+$('#summable').text()+'</td><td></td></tr></tfoot></table>', ); $(win.document.body).find( 'table' ) .addClass( 'compact' ) .css( 'font-size', 'inherit' ); $(win.document.body).find( 'td:first-child' ) .addClass( 'hide' ); $(win.document.body).find( 'th:first-child' ) .addClass( 'hide' ); }, exportOptions: { modifier: { selected: true } } }, ], scroller: { loadingIndicator: true }, ajax: { url: "ajax_dataload.php?id_module=" + id_module + "&id_plugin=" + id_plugin + "&id_parent=" + id_parent, type: 'GET', dataSrc: function (data) { sum = data; return data.data; } }, initComplete: function () { var api = this.api(); api.columns('.search').every(function () { var column = this; $('<br><input type="text" style="width:100%" class="form-control" placeholder="' + globals.translations.filter + '..."><i class="deleteicon fa fa-times fa-2x hide"></i>') .appendTo(column.header()) .on('keyup', function (e) { if (e.which != 9) { if (!$(this).val()) { if ($(this).parent().data("slow") != undefined) $("#slow").remove(); $(this).removeClass('input-searching'); $(this).next('.deleteicon').addClass('hide'); } else { if ($(this).parent().data("slow") != undefined && $("#slow").length == 0) { $("#" + $this.attr('id') + "_info").parent().append('<span class="text-danger" id="slow"><i class="fa fa-refresh fa-spin"></i> ' + globals.translations.long + '</span>'); } $(this).addClass('input-searching'); $(this).next('.deleteicon').removeClass('hide'); } } idx1 = 'module_' + $this.data('idmodule'); //+ "-" + $this.data('idplugin'); idx2 = 'search_' + $(this).parent().attr('id').replace('th_', ''); // Imposto delle sessioni per le ricerche del modulo e del campo specificatsi session_set(idx1 + ',' + idx2, $(this).val(), 0); column.search(this.value).draw(); }); }); // Disabilito l'ordinamento al click sull'<input> $("thead input, .deleteicon").click(function (e) { stopTableSorting(e); }); $('.deleteicon').on("click", function (e) { reset($(this).parent().attr("id").replace("th_", "")); api.page.len(200).draw(); }); // Ricerca di base ereditata dalla sessione search.forEach(function (value, index, array) { var exists = setInterval(function () { input = $('#th_' + array[index].replace('search_', '') + ' input'); if (input.length || array[index] == 'id_module' || array[index] == 'id_record') { clearInterval(exists); if (input.val() == '') input.val(array[value]).trigger('keyup'); } }, 100); }); }, rowCallback: function (row, data, index) { if ($(data[0]).data('id') && $.inArray($(data[0]).data('id'), $this.data('selected').split(';')) !== -1) { table.row(index).select(); } }, drawCallback: function (settings) { var api = new $.fn.dataTable.Api(settings); $(".dataTables_sizing .deleteicon").addClass('hide'); $("[data-background]").each(function () { $(this).parent().css("background", $(this).data("background")); }); $("[data-color]").each(function () { $(this).parent().css("color", $(this).data("color")); }); $("[data-link]").each(function () { var $link = $(this); $(this).parent().not('.bound').addClass('bound').click(function (event) { if ($link.data('type') == 'dialog') { launch_modal(globals.translations.details, $link.data('link')); } else { openLink(event, $link.data('link')) } }); $(this).parent().addClass("clickable"); }); var container = $(document).find('[data-target=' + $this.attr('id') + ']'); if (api.rows({ selected: true }).count() > 0) { container.find('.btn-csv').removeClass('disabled'); container.find('.btn-print').removeClass('disabled'); container.find('.btn-copy').removeClass('disabled'); container.find('.btn-csv').attr('disabled', false); container.find('.btn-print').attr('disabled', false); container.find('.btn-copy').attr('disabled', false); } else { container.find('.btn-csv').addClass('disabled'); container.find('.btn-print').addClass('disabled'); container.find('.btn-copy').addClass('disabled'); container.find('.btn-csv').attr('disabled', true); container.find('.btn-print').attr('disabled', true); container.find('.btn-copy').attr('disabled', true); } // Seleziona tutto if (api.page.len() == -1) { api.rows({ search: "applied" }).select(); if (this.fnSettings().fnRecordsDisplay() == api.rows({ selected: true }).count()) { $("#main_loading").fadeOut(); } } }, footerCallback: function (row, data, start, end, display) { var i = -1; this.api().columns().every(function () { if (sum.summable[i] != undefined) { $(this.footer()).addClass("text-right"); $(this.footer()).attr("id", "summable"); $(this.footer()).html(sum.summable[i]); } else $(this.footer()).html(" "); i++; }); } }); table.on('select deselect', function (e, dt, type, indexes) { if (type === 'row') { var selected = $this.data('selected').split(';'); var data = table.rows(indexes).data(); data.each(function (item) { var id = $(item[0]).data('id'); if (id) { if (e.type == 'select') { selected.push(id); } else { var index = selected.indexOf("" + id); if (index > -1) { delete selected[index]; } } } }); selected = selected.filter(function (entry) { return entry != ''; }); $this.data('selected', selected.join(';')); var container = $(document).find('[data-target=' + $this.attr('id') + ']'); if (selected.length > 0) { container.find('.bulk-container').removeClass('disabled'); container.find('.bulk-container').attr('disabled', false); } else { container.find('.bulk-container').addClass('disabled'); container.find('.bulk-container').attr('disabled', true); } if (table.rows({ selected: true }).count() > 0) { container.find('.btn-csv').removeClass('disabled'); container.find('.btn-print').removeClass('disabled'); container.find('.btn-copy').removeClass('disabled'); container.find('.btn-csv').attr('disabled', false); container.find('.btn-print').attr('disabled', false); container.find('.btn-copy').attr('disabled', false); } else { container.find('.btn-csv').addClass('disabled'); container.find('.btn-print').addClass('disabled'); container.find('.btn-copy').addClass('disabled'); container.find('.btn-csv').attr('disabled', true); container.find('.btn-print').attr('disabled', true); container.find('.btn-copy').attr('disabled', true); } } }); table.on('processing.dt', function (e, settings, processing) { if (processing) { $('#mini-loader').show(); } else { $('#mini-loader').hide(); } }) } }); } function stopTableSorting(e) { if (!e) var e = window.event e.cancelBubble = true; if (e.stopPropagation) e.stopPropagation(); } function reset(type) { if (type == null) $('[id^=th_] input').val('').trigger('keyup'); else $('[id^=th_' + type + '] input').val('').trigger('keyup'); } function openLink(event, link) { if (event.ctrlKey) { window.open(link); } else { location.href = link; } } // Select function start_superselect() { // Statico $('.superselect').each(function () { $this = $(this); $(this).select2({ theme: "bootstrap", language: "it", width: '100%', maximumSelectionLength: $this.data('maximum') ? $this.data('maximum') : -1, minimumResultsForSearch: $this.hasClass('no-search') ? -1 : 0, allowClear: $this.hasClass('no-search') ? false : true, templateResult: function (data, container) { var bg; // templateSelection if (data._bgcolor_) { bg = data._bgcolor_; } else if ($(data.element).attr("_bgcolor_")) { bg = $(data.element).attr("_bgcolor_"); } else if ($(data.element).data("_bgcolor_")) { bg = $(data.element).data("_bgcolor_"); } if (bg) { $(container).css("background-color", bg); $(container).css("color", setContrast(bg)); } return data.text; }, escapeMarkup: function (text) { return text; } }); }); // Dinamico (AJAX, per tabelle con molti record) $('.superselectajax').each(function () { $this = $(this); $(this).select2({ theme: "bootstrap", language: "it", maximumSelectionLength: $this.data('maximum') ? $this.data('maximum') : -1, minimumInputLength: $this.data('heavy') ? 3 : 0, allowClear: true, escapeMarkup: function (text) { return text; }, templateResult: function (data, container) { var bg; // templateSelection if (data._bgcolor_) { bg = data._bgcolor_; } else if ($(data.element).attr("_bgcolor_")) { bg = $(data.element).attr("_bgcolor_"); } else if ($(data.element).data("_bgcolor_")) { bg = $(data.element).data("_bgcolor_"); } if (bg && !$("head").find('#' + data._resultId + '_style').length) { $(container).css("background-color", bg); $(container).css("color", setContrast(bg)); } return data.text; }, ajax: { url: globals.rootdir + "/ajax_select.php?op=" + $this.data('source'), dataType: 'json', delay: 250, data: function (params) { return { q: params.term // search term } }, processResults: function (data) { return { results: data } }, cache: false }, width: '100%' }); }); } /** * Reimposta i contenuti di un <select> creato con select2. */ jQuery.fn.selectClear = function () { this.val([]).trigger("change"); return this; }; /** * Resetta i contenuti di un <select> creato con select2. */ jQuery.fn.selectReset = function () { this.selectClear(); this.empty(); return this; }; /** * Aggiorna un <select> creato con select2 impostando un valore di default. * Da utilizzare per l'impostazione dei select basati su richieste AJAX. */ jQuery.fn.selectSetNew = function (value, label) { this.selectReset(); this.selectAdd([{ 'value': value, 'text': label, }]); this.selectSet(value); return this; }; /** * Aggiorna un <select> creato con select2 impostando un valore di default. * Da utilizzare per l'impostazione dei select statici. */ jQuery.fn.selectSet = function (value) { this.val(value).trigger("change"); return this; }; /** * Aggiorna un <select> creato con select2 impostando un valore di default */ jQuery.fn.selectAdd = function (values) { $this = this; values.forEach(function (item, index, array) { var option = $('<option/>', item); $this.append(option); }); return this; }; /** * Restituisce l'oggetto contenente gli attributi di una <option> generata da select2. */ jQuery.fn.selectData = function () { var obj = $(this[0]); $select_obj = obj.select2('data'); if ($select_obj[0] == undefined) { return undefined; } else { if ($select_obj[0].selected == false) { return $select_obj[0]; } else { return $select_obj[0].element.dataset; } } }; // Inputmask function start_inputmask(element) { if( element == undefined ){ element = ''; } else { element = element + ' '; } var date = moment.localeData().longDateFormat('L').toLowerCase(); $(element+".date-mask").inputmask(date, { "placeholder": date }); $(element+'.email-mask').inputmask('Regex', { regex: "^[a-zA-Z0-9_!#$%&'*+/=?`{|}~^-]+(?:\\.[a-zA-Z0-9_!#$%&'*+/=?`{|}~^-]+)*@[a-zA-Z0-9-]+(?:\\.[a-zA-Z0-9-]+)*$", }); $(element+'.alphanumeric-mask').inputmask('Regex', { regex: "[A-Za-z0-9#_|\/\\-.]*", casing: "upper", }); if (isMobile.any()) { $(element+'.inputmask-decimal, '+element+'.date-mask, '+element+'.timestamp-mask').each(function () { $(this).attr('type', 'tel'); }); } else { $(element+'.inputmask-decimal').each(function () { var $this = $(this); var min = $this.attr('min-value'); if (min == 'undefined') { min = false; } var max = $this.attr('max-value'); if (max == 'undefined') { max = false; } $this.inputmask("decimal", { min: min ? min : undefined, allowMinus: !min || min < 0 ? true : false, max: max ? max : undefined, allowPlus: !max || max < 0 ? true : false, digits: $this.attr('decimals') ? $this.attr('decimals') : globals.cifre_decimali, digitsOptional: true, // Necessario per un problema di inputmask con i numeri negativi durante l'init enforceDigitsOnBlur: true, rightAlign: true, autoGroup: true, radixPoint: globals.decimals, groupSeparator: globals.thousands, onUnMask: function (maskedValue, unmaskedValue) { return maskedValue.toEnglish(); } }); $this.on('keyup', function () { if (min && $(this).val().toEnglish() < min) { $(this).val(min); } }); }); } } /** * Funzione per far scrollare la pagina fino a un id + focus e offset * @param integer offset * @param string id */ function scrollToAndFocus(offset, id) { if (id) { offset += $('#' + id).offset().top; } $('html,body').animate({ scrollTop: offset }, 'slow'); } /** * Ritorna un array associativo con i parametri passati via GET */ function getUrlVars(url) { var vars = [], hash; if (url == null) var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&'); else var hashes = url.slice(url.indexOf('?') + 1).split('&'); for (var i = 0; i < hashes.length; i++) { hash = hashes[i].split('='); vars.push(hash[0]); vars[hash[0]] = hash[1]; } return vars; } // Data e ora (orologio) function clock() { $('#datetime').html(moment().format(globals.timestampFormat)); setTimeout('clock()', 1000); } /** * Funzione per impostare un valore ad un array in $_SESSION */ function session_set_array(session_array, value, inversed) { if (inversed == undefined) { inversed = 1; } return $.get(globals.rootdir + "/ajax.php?op=session_set_array&session=" + session_array + "&value=" + value + "&inversed=" + inversed); } /** * Funzione per impostare un valore ad una sessione */ function session_set(session_array, value, clear, reload) { if (clear == undefined) { clear = 1; } if (reload == undefined) { reload = 0; } return $.get(globals.rootdir + "/ajax.php?op=session_set&session=" + session_array + "&value=" + value + "&clear=" + clear, function(data, status){ if (reload==1) location.reload(); }); } function session_keep_alive() { $.get(globals.rootdir + '/core.php'); }; /** * Funzione per gestire i contatori testuali nel formato x/total. * Viene dato un id del campo da verificare come input, viene letto il testo nella forma [0-9]/[0-9] e viene fatto * il replate del primo numero in base a quanti elementi sono stati trovati (valore passato per parametro) */ function update_counter(id, new_value) { new_text = $('#' + id).html(); // Estraggo parte numerica (formato x/total) pattern = /([^0-9]+)([0-9]+)\/([0-9]+)([^0-9]+)/; new_text = new_text.replace(pattern, "$1" + new_value + "/$3$4"); // Estraggo totale (parte numerica dopo lo slash /) matches = pattern.exec(new_text); total = matches[3]; $('#' + id).html(new_text); if (new_value == total) { $('#' + id).removeClass('btn-warning').removeClass('btn-danger').addClass('btn-success'); } else if (new_value == 0) { $('#' + id).removeClass('btn-warning').removeClass('btn-success').addClass('btn-danger'); } else { $('#' + id).removeClass('btn-success').removeClass('btn-danger').addClass('btn-warning'); } } Number.prototype.formatMoney = function (c, d, t) { var n = this, c = isNaN(c = Math.abs(c)) ? 2 : c, d = d == undefined ? "." : d, t = t == undefined ? "," : t, s = n < 0 ? "-" : "", i = parseInt(n = Math.abs(+n || 0).toFixed(c)) + "", j = (j = i.length) > 3 ? j % 3 : 0; return s + (j ? i.substr(0, j) + t : "") + i.substr(j).replace(/(\d{3})(?=\d)/g, "$1" + t) + (c ? d + Math.abs(n - i).toFixed(c).slice(2) : ""); } String.prototype.toEnglish = function () { return numeral(this.toString()).value(); }; Number.prototype.toLocale = function () { return numeral(this).format(); }; function setContrast(backgroundcolor) { var rgb = []; var bg = String(backgroundcolor); // ex. backgroundcolor = #ffc400 rgb[0] = bg.substr(1, 2); rgb[1] = bg.substr(2, 2); rgb[2] = bg.substr(5, 2); var R1 = parseInt(rgb[0], 16); var G1 = parseInt(rgb[1], 16); var B1 = parseInt(rgb[2], 16); var R2 = 255; var G2 = 255; var B2 = 255; var L1 = 0.2126 * Math.pow(R1 / 255, 2.2) + 0.7152 * Math.pow(G1 / 255, 2.2) + 0.0722 * Math.pow(B1 / 255, 2.2); var L2 = 0.2126 * Math.pow(R2 / 255, 2.2) + 0.7152 * Math.pow(G2 / 255, 2.2) + 0.0722 * Math.pow(B2 / 255, 2.2); if (L1 > L2) { var lum = (L1 + 0.05) / (L2 + 0.05); } else { var lum = (L2 + 0.05) / (L1 + 0.05); } if (lum >= 9) { return "#ffffff"; } else { return "#000000"; } } function message(element) { data = $.extend({}, $(element).data()); var title = globals.translations.deleteTitle; if (data["title"] != undefined) title = data["title"]; var msg = globals.translations.deleteMessage; if (data["msg"] != undefined) msg = data["msg"]; var button = globals.translations.delete; if (data["button"] != undefined) button = data["button"]; var btn_class = "btn btn-lg btn-danger"; if (data["class"] != undefined) btn_class = data["class"]; swal({ title: title, text: msg, type: "warning", showCancelButton: true, confirmButtonText: button, confirmButtonClass: btn_class, }).then( function (result) { if (data["op"] == undefined) data["op"] = "delete"; var href = window.location.href.split("#")[0] if (data["href"] != undefined) { href = data["href"]; delete data.href; } var hash = window.location.href.split("#")[1]; if (hash) { data["hash"] = hash; } method = "post"; if (data["method"] != undefined) { if (data["method"] == "post" || data["method"] == "get") { method = data["method"]; } delete data.method; } blank = data.blank != undefined && data.blank; delete data.blank; redirect(href, data, method, blank); }, function (dismiss) {} ); } function redirect(href, data, method, blank) { method = method ? method : "get"; blank = blank ? blank : false; if (method == "post") { var text = '<form action="' + href + window.location.hash + '" method="post"' + (blank ? ' target="_blank"' : '') + '>'; for (var name in data) { text += '<input type="hidden" name="' + name + '" value="' + data[name] + '"/>'; } text += '</form>'; var form = $(text); $('body').append(form); form.submit(); } else { var values = []; for (var name in data) { values.push(name + '=' + data[name]); } var link = href + (href.indexOf('?') !== -1 ? '&' : '?') + values.join('&') + window.location.hash; if (!blank) { location.href = link; } else { window.open(link); } } } function setCookie(cname, cvalue, exdays) { var d = new Date(); d.setTime(d.getTime() + (exdays*24*60*60*1000)); var expires = "expires="+ d.toUTCString(); document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/"; } function getCookie(cname) { var name = cname + "="; var decodedCookie = decodeURIComponent(document.cookie); var ca = decodedCookie.split(';'); for(var i = 0; i <ca.length; i++) { var c = ca[i]; while (c.charAt(0) == ' ') { c = c.substring(1); } if (c.indexOf(name) == 0) { return c.substring(name.length, c.length); } } return ""; } /** * Funzione per controllare se un file esiste */ function UrlExists(url) { var http = new XMLHttpRequest(); http.open('HEAD', url, false); http.send(); return http.status!=404; }