/** * Für die Bedienung der Modul-Oberfläche */ var PrinterGoogleCloudPrint = (function ($) { 'use strict'; var me = { isInitialized: false, $apiSelect: null, $printerSelect: null, initApiValue: null, initPrinterValue: null, printercache: {}, /** * @return void */ init: function () { if (me.isInitialized === true) { return; } me.$apiSelect = $('select[name="google_api"]'); me.$printerSelect = $('select[name="google_printer"]'); me.initApiValue = me.$apiSelect.val(); me.initPrinterValue = me.$printerSelect.val(); var options = {}; $('select[name="google_printer"] option').each( function () { options[$(this).attr('value')] = $(this).text(); }); me.printercache[me.initApiValue] = options; me.registerEvents(); me.isInitialized = true; }, setPrinterSelectOptions: function(options, selected) { me.$printerSelect.empty(); // remove old options $.each(options, function(value, display) { me.$printerSelect.append($('').attr('value', value).text(display)); }); if (selected in options) { me.$printerSelect.val(selected); } }, /** * @return {void} */ registerEvents: function () { me.$apiSelect.change(function () { me.ajaxLoadPrinterOptions(this.value); }); }, /** * @param {number} fieldId * * @return {void} */ ajaxLoadPrinterOptions: function (apiName) { if (apiName === '') { return; } if (apiName in me.printercache) { me.setPrinterSelectOptions(me.printercache[apiName], me.initPrinterValue); return; } $.ajax({ url: 'index.php?module=googleapi&action=ajaxprinters', data: { api_name: apiName }, method: 'post', dataType: 'json', beforeSend: function () { me.$printerSelect.prop('disabled', true); me.$apiSelect.prop('disabled', true); App.loading.open(); }, complete: function() { me.$printerSelect.prop('disabled', false); me.$apiSelect.prop('disabled', false); }, error: function (error) { App.loading.close(); }, success: function (data) { me.printercache[apiName] = data; me.setPrinterSelectOptions(data, me.initPrinterValue); App.loading.close(); } }); }, }; return { init: me.init, }; })(jQuery); $(document).ready(function () { PrinterGoogleCloudPrint.init(); });