/** Datei: plugins/rest/assets.OLD/js/generator/data/table/column/date.js **/ /** * generator/data/table/column/date.js * * Zeigt Datumswerte mit anpassbarem Format in Tabellenzellen an. * * @author Sparky * @copyright 2025 ARUNOX * @version 1.0.0 * * @since 1.0.0 Erstellt als separate Datei */ import { generator } from 'plugins/rest/core/generator'; generator.extend('data/table/column/date', ( config, rowData, cell ) => { const value = new Date(config.value); cell.textContent = new Intl.DateTimeFormat('de-DE', { year: 'numeric', month: '2-digit', day: '2-digit' }).format(value); }); /** Datei: plugins/rest/assets.OLD/js/generator/data/table/column/status-header.js **/ /** * generator/data/table/column/status-header.js * * Header-Spaltengenerator für Status-Anzeigen mit Icons. * * @author Sparky * @copyright 2025 ARUNOX * @version 1.1.0 * * @since 1.0.0 Erstellt als separate Datei für Status-Header-Icons * @since 1.1.0 Unterstützung für `headerIconOnly`, um nur Icons im Header zu zeigen */ import { generator } from 'plugins/rest/core/generator'; generator.extend('data/table/column/status-header', ( config, data, container ) => { config.column.headerIconOnly = false; if( config.column.title ) { container.title = config.column.title; } if( config.column.icon ) { const icon = document.createElement('i'); icon.classList.add('bi', config.column.icon || 'bi-info-circle'); container.appendChild(icon); if( !config.column.label ) { container.classList.add(`table__header__cell--type-${config.column.type}-icon`); config.column.headerIconOnly = true; } } if( config.column.label ) { const labelText = document.createTextNode( config.column.label ); container.appendChild( labelText ); } }); /** Datei: plugins/rest/assets.OLD/js/generator/data/table/column/text.js **/ /** * generator/data/table/column/text.js * * Spaltengenerator für normalen Text. * * @author Sparky * @copyright 2025 ARUNOX * @version 1.1.1 * * @since 1.0.0 Erstellt als separater Generator * @since 1.1.0 Standard-Fallback für alle Spalten * @since 1.1.1 Fix: Kein `` mehr erzeugt, sondern übergebenes `td` manipuliert */ import { generator } from 'plugins/rest/core/generator'; generator.extend('data/table/column/text', async ( config, rowData, container ) => { let option = {}; let icon = null; container.innerHTML = ''; if( config.column.options ) { if( typeof config.column.options === 'object' ) { config.column.options = Object.entries( config.column.options ); } option = config.column.options.find( item => item.value == config.value ); if( option ) { config.value = option.label; if( option.icon ) { icon = await generator.generate( 'components/icon', { name: option.icon }, {}, container ); } } } if( config.column.color || option?.color ) { generator.generate( 'helpers/colorize', config.column?.color ?? {}, option?.color ?? {}, container, icon ); } container.insertAdjacentHTML( 'beforeend', config.value || '-' ); }); /** Datei: plugins/rest/assets.OLD/js/generator/data/table/column/datetime.js **/ /** * generator/data/table/column/datetime.js * * Zeigt Datums- und Zeitwerte mit anpassbarem Format an. * * @author Sparky * @copyright 2025 ARUNOX * @version 1.0.0 * * @since 1.0.0 Erstellt als separate Datei */ import { generator } from 'plugins/rest/core/generator'; generator.extend('data/table/column/datetime', ( config, rowData, cell ) => { if( !config.value ) return; const value = new Date(config.value); cell.textContent = new Intl.DateTimeFormat('de-DE', { day: '2-digit', month: '2-digit', year: 'numeric', hour: '2-digit', minute: '2-digit' }).format(value); }); /** Datei: plugins/rest/assets.OLD/js/generator/data/table/column/amount.js **/ /** * generator/data/table/column/amount.js * * Spaltengenerator für normalen Text. * * @author Sparky * @copyright 2025 ARUNOX * @version 1.1.1 * * @since 1.0.0 Erstellt als separater Generator * @since 1.1.0 Standard-Fallback für alle Spalten * @since 1.1.1 Fix: Kein `` mehr erzeugt, sondern übergebenes `td` manipuliert */ import { generator } from 'plugins/rest/core/generator'; generator.extend('data/table/column/amount', async ( config, rowData, container ) => { let option = {}; let icon = null; container.innerHTML = ''; container.removeAttribute('title'); if( config.column.options ) { option = config.column.options.find( item => item.value == config.value ); if( option ) { config.value = option.label; if( option.icon ) { icon = await generator.generate( 'components/icon', { name: option.icon }, {}, container ); } } } if( config.column.color || option?.color ) { generator.generate( 'helpers/colorize', config.column?.color ?? {}, option?.color ?? {}, container, icon ); } container.insertAdjacentHTML( 'beforeend', config.value || '-' ); }); /** Datei: plugins/rest/assets.OLD/js/generator/data/table/column/time.js **/ /** * generator/data/table/column/time.js * * Spaltengenerator für Zeitwerte mit anpassbarem Format. * * @author Sparky * @copyright 2025 ARUNOX * @version 1.0.0 * * @since 1.0.0 Erstellt als separate Datei */ import { generator } from 'plugins/rest/core/generator'; generator.extend('data/table/column/time', ( config, rowData, cell ) => { const value = new Date(config.value); cell.textContent = new Intl.DateTimeFormat('de-DE', { hour: '2-digit', minute: '2-digit' }).format(value); }); /** Datei: plugins/rest/assets.OLD/js/generator/data/table/column/icon.js **/ /** * generator/data/table/column/icon.js * * Spaltengenerator für Icons mit optionalem Tooltip. * * @author Sparky * @copyright 2025 ARUNOX * @version 1.1.1 * * @since 1.0.0 Erstellt als separater Generator * @since 1.1.1 Fix: Kein `` mehr erzeugt, sondern übergebenes `td` manipuliert */ import { generator } from 'plugins/rest/core/generator'; generator.extend('data/table/column/icon', async ( config, rowData, container ) => { let icon = null; let value = config.value?.value || config.value?.icon || config.value; let iconConfig = config.column.options?.[value] || {}; if( typeof config.value === 'object' ) { iconConfig.icon = config.value.icon; iconConfig.color = config.value.color; } // console.log( typeof config.value, !iconConfig.icon, value, config.value, iconConfig, config.column.options ); if( !iconConfig.icon ) { iconConfig.icon = 'bi bi-question-diamond'; iconConfig.title = `${config.column.title} nicht definiert`; } container.title = iconConfig.title ?? iconConfig.label ?? ''; container.innerHTML = ''; if( config.column.icon ) { icon = await generator.generate( 'components/icon', { name: iconConfig.icon || 'bi bi-question-diamond' }, {}, container ); } generator.generate( 'helpers/colorize', config.column.color, iconConfig.color, container, icon ); }); /** Datei: plugins/rest/assets.OLD/js/generator/data/table/column/status.js **/ /** * generator/data/table/column/status.js * * Spaltengenerator für Status-Anzeigen mit Farb- und Icon-Unterstützung. * * @author Sparky * @copyright 2025 ARUNOX * @version 1.5.0 * * @since 1.0.0 Erstellt als separate Datei * @since 1.3.0 `options.label` wird nur genutzt, wenn definiert * @since 1.3.1 `options.icon` Standard auf `?` gesetzt * @since 1.3.2 `route` als optional für klickbare Spalten * @since 1.3.3 `options.icon` Standard auf `question-diamond`, `color`-Option erweitert * @since 1.3.4 Farbmanagement überarbeitet: `color.name`, Farbwerte/-namen aus `options`, kontrastbasierte Textfarbe * @since 1.3.5 BEM-Klassen für Farbe (`text--`, `icon--`, `bg--`), `color` automatisch erkannt, `background` als Default * @since 1.3.6 Fix: `color.target = text` setzt `.text--`, nicht `.bg--` * @since 1.3.7 Fix: Kein `` mehr erzeugt, sondern übergebenes `td` manipuliert * @since 1.3.8 Fix: Farbe aus `options` wird priorisiert, falls vorhanden * @since 1.3.9 Fix: `title`-Attribut immer auf `td`, nicht auf das Icon * @since 1.4.0 Fix: `color`-Verarbeitung aus `options.color` wiederhergestellt * @since 1.4.1 Unterstützung für Icons ohne Labels in Zellen * @since 1.5.0 Neue Klasse `table__column--type-{type}-icon` für `headerIconOnly` */ import { generator } from 'plugins/rest/core/generator'; generator.extend('data/table/column/status', async ( config, rowData, container ) => { let icon = null; container.innerHTML = ''; const statusConfig = config.column.options?.[config.value] || { icon: 'bi-question-diamond', title: `${config.column.title} nicht definiert` }; container.title = statusConfig.title ?? statusConfig.label; if( config.column.icon ) { icon = await generator.generate( 'components/icon', { name: statusConfig.icon || 'bi bi-question-diamond' }, {}, container ); } if( config.column.headerIconOnly ) { container.classList.add(`table__cell--type-${config.column.type}-icon`); } // Nur Labels hinzufügen, wenn `headerIconOnly` nicht aktiv ist if( !config.column.headerIconOnly && statusConfig.label ) { container.appendChild(document.createTextNode(` ${statusConfig.label}`)); } generator.generate( 'helpers/colorize', config.column.color, statusConfig.color, container, icon ); }); /** Datei: plugins/rest/assets.OLD/js/generator/data/table/column/email.js **/ /** * generator/data/table/column/email.js * * Spaltengenerator für E-Mail-Adressen mit mailto-Links. * * @author Sparky * @copyright 2025 ARUNOX * @version 1.1.0 * * @since 1.0.0 Erstellt als separater Generator */ import { generator } from 'plugins/rest/core/generator'; generator.extend('data/table/column/email', ( config, rowData, container ) => { if (!config.value) { container.textContent = '-'; return; } const link = document.createElement('a'); link.href = `mailto:${config.value}`; link.textContent = config.value; link.classList.add('table__email'); container.appendChild( link ); }); /** Datei: plugins/rest/assets.OLD/js/generator/data/table/column/text-header.js **/ /** * generator/data/table/column/text-header.js * * Standard-Header-Spaltengenerator für Textspalten. * * @author Sparky * @copyright 2025 ARUNOX * @version 1.0.0 * * @since 1.0.0 Erstellt als separate Datei für generische Text-Header */ import { generator } from 'plugins/rest/core/generator'; generator.extend('data/table/column/text-header', ( config, data, container ) => { if( config.column.title ) { container.title = config.column.title; } if( config.column.label ) { const labelText = document.createTextNode( config.column.label ); container.appendChild( labelText ); } }); /** Datei: plugins/rest/assets.OLD/js/generator/data/table/column/url.js **/ /** * generator/data/table/column/url.js * * Spaltengenerator für Links innerhalb einer Tabellenzelle. * * @author Sparky * @copyright 2025 ARUNOX * @version 1.1.1 * * @since 1.0.0 Erstellt als separater Generator * @since 1.1.0 Standard-Fallback für alle Spalten * @since 1.1.1 Fix: Kein `` mehr erzeugt, sondern übergebenes `td` manipuliert */ import { generator } from 'plugins/rest/core/generator'; generator.extend('data/table/column/url', ( config, rowData, cell ) => { cell.innerHTML = ''; if( !config.value ) { cell.textContent = '-'; return; } const href = config.column.href || config.value; const link = document.createElement('a'); link.href = href.replace('{id}', rowData.id ); link.textContent = config.value; link.target = '_blank'; cell.appendChild(link); }); /** Datei: plugins/rest/assets.OLD/js/generator/data/table/column/actions.js **/ /** * generator/data/table/column/actions.js * * Spaltengenerator für Aktionen/Buttons innerhalb einer Tabellenzelle. * * @author Sparky * @copyright 2025 ARUNOX * @version 1.2.1 * * @since 1.0.0 Erstellt als separater Generator * @since 1.2.1 Fix: Kein `` mehr erzeugt, sondern übergebenes `td` manipuliert */ import { generator } from 'plugins/rest/core/generator'; generator.extend('data/table/column/actions', async ( config, rowData, container ) => { return; const wrapper = document.createElement('div'); wrapper.classList.add( 'table__cell__inner' ); if( config.column.buttons ) { for( const buttonConfig of config.column.buttons.values() ) { // if( action.visibleIf ) { // for( let [key, validValues] of Object.entries(action.visibleIf) ) { // if( !validValues.includes(rowData[key]) ) continue 2; // skip this action // } // } await generator.generate( buttonConfig.generator, buttonConfig.config, rowData, wrapper ); } } container.append( wrapper ); });