/** 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 );
});
| |