/** * Modul stellt das Modal für den Download-Spooler bereit */ var DownloadSpoolerDialog = (function ($) { var me = { storage: { printerId: null, $dialog: null, $dataTable: null, dataTableId: 'downloadspooler-table' }, /** * DownloadSpoolerDialog initialisieren und anzeigen * * @param {Number} printerId */ show: function (printerId) { me.storage.printerId = parseInt(printerId); if (isNaN(me.storage.printerId)) { throw 'DownloadSpoolerDialog: Required parameter "printerId" is empty or invalid: ' + printerId; } me.init(); me.displayDialog(); }, init: function () { // Ist bereits initialisiert? if (me.storage.$dialog !== null) { return; } me.initDialog(); me.registerEventListener(); }, registerEventListener: function () { // Nach Klick auf Download > Tabelle neuladen me.storage.$dialog.on('click', 'a.spooler-action', function () { setTimeout(function () { me.reloadDataTable(); }, 1000); }); // Datei in Tabelle löschen me.storage.$dialog.on('click', 'a.spooler-action-delete', function (e) { e.preventDefault(); var fileId = $(this).data('file'); me.deleteFile(fileId); }); // Alle Zeilen in LiveTabelle markieren me.storage.$dialog.on('change', '#markall_trigger', function () { var isChecked = $(this).prop('checked'); me.storage.$dialog.find('input.spooler-selection:checkbox').each(function () { $(this).prop('checked', isChecked); }); }); // DataTable-Filter wird geändert me.storage.$dialog.on('change', '.spooler-filter-checkbox', function () { me.onChangeDataTableFilter(this); }); // Auf Button-Klicks in Benachrichtigungen horchen $(document).on('notification-button:clicked', function (e, button) { var $button = $('#' + button.id); var printerId = $button.data('printer'); var action = $button.data('action'); if (typeof printerId === 'undefined' || typeof action === 'undefined') { return; // Kein Spooler-Button } // Spooler-Modal anzeigen if (action === 'open-dialog') { e.preventDefault(); me.show(printerId); } }); }, /** * UI-Dialog initialisieren */ initDialog: function () { me.storage.$dialog = $('
').appendTo('body'); me.storage.$dialog.dialog({ title: 'Download-Spooler', modal: true, minWidth: 900, autoOpen: false, resizable: false, closeOnEscape: false }); }, /** * UI-Dialog anzeigen (vorher DataTable laden) */ displayDialog: function () { me.loadDataTable().then(me.openDialog); }, /** * UI-Dialog öffnen */ openDialog: function () { window.setTimeout(function () { // Kurz warten bis DataTable aufgebaut ist, damit Höhe berechnet werden kann me.storage.$dialog.dialog('open'); me.storage.$dialog.dialog('option', 'height', 'auto'); }, 150); }, /** * UI-Dialog schließen */ closeDialog: function () { me.storage.$dialog.dialog('close'); }, /** * HTML-Template und DataTable-Einstellungen laden * * @return {Deferred} jQuery Promise Object */ loadDataTable: function () { return me.fetchDataTableHtml() .then(me.initDataTable); }, /** * DataTable-HTML-Tabelle laden * * @return {jqXHR} jQuery jqXHR-Objekt */ fetchDataTableHtml: function () { return $.ajax({ url: 'index.php?module=welcome&action=spooler&cmd=datatable-html', data: {'id': me.storage.printerId}, type: 'GET', dataType: 'html', success: function (data) { me.storage.$dialog.html(data); } }); }, /** * DataTable initialisieren */ initDataTable: function () { var $table = me.storage.$dialog.find('table#downloadspooler-table').css('width', '100%'); var settingsJson = me.storage.$dialog.find('#downloadspooler-table-settings').html(); try { var settingsObject = JSON.parse(settingsJson); settingsObject.columns.forEach(function (column, index) { // Menü if (column.data === null) { settingsObject.columns[index].render = function (data, type, row) { return '' + '