/** * Modul zum Nachladen von Labeln in Datatables * * Markup: * ` * * * * Vorgehen: * 1. Auf Event warten dass eine DataTable fertig gerendert ist * 2. Prüfen ob DataTable Markup zum Nachladen für Labels enthält * 3. HTML-Markup für LabelLoader-Modul erzeugen * 4. LabelLoader-Modul aufrufen (Modul sammelt benötigte Informationen; lädt Labels per AJAX nach und rendert diese) */ var DataTableLabelLoader = (function ($, LabelLoaderModule) { 'use strict'; var me = { init: function () { me.registerEvents(); }, registerEvents: function () { $(document).on('draw.dt', function (e, settings) { me.onDrawDataTableDraw(settings.sTableId); }); }, /** * EventHandler fürs Nachladen von Labeln * * Der EventHandler greift wenn eine DataTable fertig gerendert ist. * * @param {string} tableName */ onDrawDataTableDraw: function (tableName) { // Prüfen ob LabelLoader manuell erstellt wurde, oder noch erstellt werden muss if (me.checkLoaderRequired(tableName) === true) { var $firstManager = $('#' + tableName).find('.label-manager').first(); var columnNumber = $firstManager.data('labelColumnNumber'); if (typeof columnNumber !== 'undefined') { me.createLabelLoader(tableName, columnNumber); } } // Benötigte Elemente mit Data-Attributen wurden erstellt // Ab hier übernimmt das "normale" LabelLoader-Modul LabelLoaderModule.loadAll(); }, /** * @param {string} tableName * * @return {boolean} */ checkLoaderRequired: function (tableName) { var $table = $('#' + tableName); var hasLabelContainer = $table.find('.label-container').length > 0; var hasLabelManager = $table.find('.label-manager').length > 0; return hasLabelManager === true && hasLabelContainer === false; }, /** * Markup für LabelLoader-Modul erzeugen * * Markup: * `` * * @param {string} tableName * @param {number} columnNumber */ createLabelLoader: function (tableName, columnNumber) { var $table = $('#' + tableName); var $rows = $table.children('tbody').children('tr'); $rows.each(function (index, row) { var $row = $(row); var $labelManager = $row.find('.label-manager').first(); if ($labelManager.length === 0) { return; } var referenceId = $labelManager.data('labelReferenceId'); var referenceTable = $labelManager.data('labelReferenceTable'); if (typeof referenceId === 'undefined' || typeof referenceTable === 'undefined') { return; } var $cell = $row.children('td').eq(columnNumber - 1); var $labelLoader = $('').addClass('label-loader').data({ labelReferenceId: referenceId, labelReferenceTable: referenceTable }); $cell.append($labelLoader); }); } }; // Modul so früh wie möglich registrieren. // Ansonsten kriegt man nicht alle DataTable Draw-Events mit. me.init(); return { init: me.init } })(jQuery, LabelLoader);