Initial xentral_oss_20.3.c9ffacf

This commit is contained in:
Alex
2021-05-21 08:49:41 +02:00
parent 5406e4a551
commit 34e5ac43d9
18884 changed files with 2109867 additions and 0 deletions
@@ -0,0 +1,41 @@
/* Labels
- - - - - - - - - - - - - - - - - - - - - - */
.dataTable .label-container {
display: inline-block;
padding: 0;
margin: 0;
line-height: 1em;
}
.dataTable .label {
display: inline-block;
font-size: 90%;
line-height: 1em;
margin: 1px 0 1px 4px;
padding: 3px 7px 2px 7px;
border-radius: 5px;
border: 1px solid transparent;
white-space: nowrap;
}
/* Label-Manager-Icon (in DataTable)
- - - - - - - - - - - - - - - - - - - - - - */
.dataTable .label-manager-icon {
display: inline-block;
width: 20px;
height: 20px;
border-radius: 4px;
background-image: url('../themes/new/images/label.svg');
background-size: 20px 20px;
background-position: center;
background-repeat: no-repeat;
}
/* LiveTabelle im Modul
- - - - - - - - - - - - - - - - - - - - - - */
#datatablelabels_list .label-color-preview {
display: inline-block;
width: 14px;
height: 14px;
}
+128
View File
@@ -0,0 +1,128 @@
/**
LABELS
*/
.label-container {
display: inline-block;
padding: 0;
margin: 0;
line-height: 1em;
}
.label-container .label {
cursor: default;
display: inline-block;
font-size: 90%;
line-height: 1em;
margin: 1px 0 1px 4px;
padding: 3px 7px;
border: 1px solid transparent;
border-radius: 5px;
white-space: nowrap;
min-width: 2px;
min-height: 11px;
}
.label-container .label-text-normal {
display: inline-block;
}
.label-container .label-text-compact {
display: none;
}
.label-container.label-compact .label-text-normal {
display: none;
}
.label-container.label-compact .label-text-compact {
display: inline-block;
}
.label-manager {
cursor: pointer;
}
/* ENDE LABELS */
/*
LABEL-MANAGER-OVERLAY
*/
#label-manager-overlay {
display: none;
position: fixed;
z-index: 100001;
top: 20px;
left: 20px;
min-width: 250px;
min-height: 100px;
border-radius: 10px;
border: 5px solid var(--fieldset);
background-color: var(--fieldset);
box-shadow: 3px 3px 10px rgba(0, 0, 0, .33);
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
#label-manager-overlay header,
#label-manager-overlay section,
#label-manager-overlay footer {
display: block;
}
#label-manager-overlay header {
padding: 10px;
background-color: var(--fieldset);
border-bottom: 1px solid var(--textfield-border);
}
#label-manager-overlay footer {
padding: 0 10px 5px 10px;
background-color: var(--fieldset);
}
#label-manager-overlay header h1 {
font-size: 14px;
padding: 0;
margin: 0;
}
#label-manager-overlay header .icon-close {
cursor: pointer;
float: right;
display: inline-block;
width: 16px;
height: 16px;
background-image: url('../themes/new/images/x-icon.png');
background-position: center;
background-repeat: no-repeat;
background-size: 80%;
}
#label-manager-overlay .content-list {
display: block;
min-height: 10px;
padding: 10px;
}
#label-manager-overlay .line {
clear: both;
display: block;
margin: 5px 0;
}
#label-manager-overlay .line input {
float: left;
}
#label-manager-overlay .line .label-title {
display: inline-block;
line-height: 1em;
margin: 0 0 0 4px;
padding: 3px 7px;
border-radius: 5px;
white-space: nowrap;
border: 1px solid transparent;
background-color: var(--fieldset);
}
/* ENDE LABEL-MANAGER-OVERLAY */
@@ -0,0 +1,111 @@
/**
* Modul zum Nachladen von Labeln in Datatables
*
* Markup:
* `<a href="#" class="label-manager"
* data-label-reference-table="wiedervorlage"
* data-label-reference-id="6"
* data-label-column-number="5">
* <span class="label-manager-icon"></span>
* </a>
*
* 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:
* `<span class="label-loader" data-label-reference-id="1" data-label-reference-table="adresse"></span>`
*
* @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 = $('<span>').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);
@@ -0,0 +1,555 @@
/**
* Für die Bedienung der Modul-Oberfläche
*/
var DataTableLabelsUi = (function ($) {
'use strict';
var me = {
isInitialized: false,
storage: {
$table: null,
$editDialog: null,
dataTableApi: null
},
/**
* @return void
*/
init: function () {
if (me.isInitialized === true) {
return;
}
me.storage.$table = $('#datatablelabels_list');
me.storage.$editDialog = $('#datatablelabels_edit');
me.storage.dataTableApi = me.storage.$table.dataTable().api();
if (me.storage.$table.length === 0 || me.storage.$editDialog.length === 0) {
throw 'Could not initialize DataTableLabelsUi. Required elements are missing.';
}
me.initDialog();
me.registerEvents();
me.isInitialized = true;
},
/**
* @return {void}
*/
initDialog: function () {
me.storage.$editDialog.dialog({
modal: true,
bgiframe: true,
closeOnEscape: false,
minWidth: 550,
maxHeight: 400,
autoOpen: false,
buttons: [{
text: 'ABBRECHEN',
click: function () {
me.resetEditDialog();
me.closeEditDialog();
}
}, {
text: 'SPEICHERN',
click: function () {
me.saveItem();
}
}],
open: function () {
var $colorInput = $('#datatablelabel_hexcolor');
var $titleInput = $('#datatablelabel_title');
var $typeInput = $('#datatablelabel_type');
var isTypeInputEmpty = ($typeInput.val().length === 0);
// Fokus auf erstes Eingabefeld setzen
$titleInput.trigger('focus');
// Default-Farbe setzen, wenn leer
if ($colorInput.val().length === 0) {
$colorInput.val('#000000').trigger('change');
}
// Kennung automatisch aus Titel füllen
$titleInput.on('keyup', function () {
if (!isTypeInputEmpty) {
return;
}
var titleVal = $(this).val();
var typeVal = titleVal.toLowerCase().replace(/[^a-z0-9_]+/g, '').substr(0, 24);
$typeInput.val(typeVal);
});
},
close: function () {
me.resetEditDialog();
}
});
},
/**
* @return {void}
*/
registerEvents: function () {
// Eintrag bearbeiten
$(document).on('click', '.datatablelabels-edit', function (e) {
e.preventDefault();
var fieldId = $(this).data('id');
me.editItem(fieldId);
});
// Eintrag löschen
$(document).on('click', '.datatablelabels-delete', function (e) {
e.preventDefault();
var fieldId = $(this).data('id');
me.deleteItem(fieldId);
});
// Farb-Vorschau in LiveTabelle anzeigen
$(document).on('draw.dt', function (e, settings) {
var tableName = settings.sTableId;
var $table = $('#' + tableName);
$table.find('.label-color-preview').each(function (index, element) {
var $element = $(element);
var hexColor = $element.data('hexcolor');
$element.css('background-color', hexColor);
});
});
},
/**
* @return {void}
*/
createItem: function () {
if (me.isInitialized === false) {
me.init();
}
me.resetEditDialog();
me.openEditDialog();
},
/**
* @param {number} labelTypeId
*
* @return {void}
*/
editItem: function (labelTypeId) {
labelTypeId = parseInt(labelTypeId);
if (isNaN(labelTypeId) || labelTypeId <= 0) {
return;
}
$.ajax({
url: 'index.php?module=datatablelabels&action=edit&cmd=get',
data: {
id: labelTypeId
},
method: 'post',
dataType: 'json',
beforeSend: function () {
App.loading.open();
},
success: function (result) {
me.storage.$editDialog.find('#datatablelabel_id').val(result.data.id);
me.storage.$editDialog.find('#datatablelabel_type').val(result.data.type);
me.storage.$editDialog.find('#datatablelabel_title').val(result.data.title);
me.storage.$editDialog.find('#datatablelabel_group').val(result.data.group_id);
me.storage.$editDialog.find('#datatablelabel_hexcolor').val(result.data.hexcolor).trigger('change');
me.storage.$editDialog.dialog('open');
},
error: function (jqXhr) {
alert('Fehler: ' + jqXhr.responseJSON.error);
},
complete: function () {
App.loading.close();
}
});
},
/**
* @return {void}
*/
saveItem: function () {
$.ajax({
url: 'index.php?module=datatablelabels&action=edit&cmd=save',
data: {
id: $('#datatablelabel_id').val(),
type: $('#datatablelabel_type').val(),
title: $('#datatablelabel_title').val(),
group: $('#datatablelabel_group').val(),
hexcolor: $('#datatablelabel_hexcolor').val()
},
method: 'post',
dataType: 'json',
beforeSend: function () {
App.loading.open();
},
success: function (data) {
if (data.success === true) {
me.resetEditDialog();
me.reloadDataTable();
me.closeEditDialog();
}
if (data.success === false) {
alert(data.error);
}
},
error: function (jqXhr) {
alert('Fehler: ' + jqXhr.responseJSON.error);
},
complete: function () {
App.loading.close();
}
});
},
/**
* @param {number} fieldId
*
* @return {void}
*/
deleteItem: function (fieldId) {
var confirmValue = confirm('Wirklich löschen?');
if (confirmValue === false) {
return;
}
$.ajax({
url: 'index.php?module=datatablelabels&action=edit&cmd=delete',
data: {
id: fieldId
},
method: 'post',
dataType: 'json',
beforeSend: function () {
App.loading.open();
},
success: function (data) {
if (data.success === true) {
me.reloadDataTable();
}
if (data.success === false) {
alert('Unbekannter Fehler beim Löschen.');
}
},
error: function (jqXhr) {
alert('Fehler: ' + jqXhr.responseJSON.error);
},
complete: function () {
App.loading.close();
}
});
},
/**
* @return void
*/
openEditDialog: function () {
me.storage.$editDialog.dialog('open');
},
/**
* @return void
*/
closeEditDialog: function () {
me.storage.$editDialog.dialog('close');
},
/**
* @return void
*/
resetEditDialog: function () {
me.storage.$editDialog.find('#datatablelabel_id').val('');
me.storage.$editDialog.find('#datatablelabel_type').val('');
me.storage.$editDialog.find('#datatablelabel_title').val('').off('keyup');
me.storage.$editDialog.find('#datatablelabel_group').val(0);
me.storage.$editDialog.find('#datatablelabel_hexcolor').val('');
},
/**
* @return {void}
*/
reloadDataTable: function () {
me.storage.dataTableApi.ajax.reload();
}
};
return {
init: me.init,
createItem: me.createItem
};
})(jQuery);
/**
* Für die Bedienung der Modul-Oberfläche
*/
var DataTableLabelsAutomaticLabelsUi = (function ($) {
'use strict';
var me = {
isInitialized: false,
storage: {
$table: null,
$editDialog: null,
dataTableApi: null
},
/**
* @return void
*/
init: function () {
if (me.isInitialized === true) {
return;
}
me.storage.$table = $('#datatablelabels_automaticlabelslist');
me.storage.$editDialog = $('#datatablelabels_automaticlabelsedit');
me.storage.dataTableApi = me.storage.$table.dataTable().api();
if (me.storage.$table.length === 0 || me.storage.$editDialog.length === 0) {
throw 'Could not initialize DataTableLabelsUi. Required elements are missing.';
}
me.initDialog();
me.registerEvents();
me.isInitialized = true;
},
/**
* @return {void}
*/
initDialog: function () {
me.storage.$editDialog.dialog({
modal: true,
bgiframe: true,
closeOnEscape: false,
minWidth: 550,
maxHeight: 400,
autoOpen: false,
buttons: [{
text: 'ABBRECHEN',
click: function () {
me.resetEditDialog();
me.closeEditDialog();
}
}, {
text: 'SPEICHERN',
click: function () {
me.saveItem();
}
}],
open: function () {
// Fokus auf erstes Eingabefeld setzen
$('#datatablelabel_automaticlabelname').trigger('focus');
},
close: function () {
me.resetEditDialog();
}
});
},
/**
* @return {void}
*/
registerEvents: function () {
// Eintrag bearbeiten
$(document).on('click', '.datatablelabels-automaticlabeledit', function (e) {
e.preventDefault();
var fieldId = $(this).data('id');
me.editItem(fieldId);
});
// Eintrag löschen
$(document).on('click', '.datatablelabels-automaticlabeldelete', function (e) {
e.preventDefault();
var fieldId = $(this).data('id');
me.deleteItem(fieldId);
});
},
/**
* @return {void}
*/
createItem: function () {
if (me.isInitialized === false) {
me.init();
}
me.resetEditDialog();
me.openEditDialog();
},
/**
* @param {number} automaticLabelId
*
* @return {void}
*/
editItem: function (automaticLabelId) {
automaticLabelId = parseInt(automaticLabelId);
if (isNaN(automaticLabelId) || automaticLabelId <= 0) {
return;
}
$.ajax({
url: 'index.php?module=datatablelabels&action=automaticlabelsedit&cmd=get',
data: {
id: automaticLabelId
},
method: 'post',
dataType: 'json',
beforeSend: function () {
App.loading.open();
},
success: function (result) {
me.storage.$editDialog.find('#datatablelabel_automaticlabelid').val(result.data.id);
me.storage.$editDialog.find('#datatablelabel_automaticlabelname').val(result.data.labelname);
me.storage.$editDialog.find('#datatablelabel_automaticlabelaction').val(result.data.action);
me.storage.$editDialog.find('#datatablelabel_automaticlabelselection').val(result.data.selection);
me.storage.$editDialog.find('#datatablelabel_automaticlabelproject').val(result.data.project);
me.storage.$editDialog.dialog('open');
},
error: function (jqXhr) {
alert('Fehler: ' + jqXhr.responseJSON.error);
},
complete: function () {
App.loading.close();
}
});
},
/**
* @return {void}
*/
saveItem: function () {
$.ajax({
url: 'index.php?module=datatablelabels&action=automaticlabelsedit&cmd=save',
data: {
id: $('#datatablelabel_automaticlabelid').val(),
labelname: $('#datatablelabel_automaticlabelname').val(),
action: $('#datatablelabel_automaticlabelaction').val(),
selection: $('#datatablelabel_automaticlabelselection').val(),
project: $('#datatablelabel_automaticlabelproject').val()
},
method: 'post',
dataType: 'json',
beforeSend: function () {
App.loading.open();
},
success: function (data) {
if (data.success === true) {
me.resetEditDialog();
me.reloadDataTable();
me.closeEditDialog();
}
if (data.success === false) {
alert(data.error);
}
},
error: function (jqXhr) {
alert('Fehler: ' + jqXhr.responseJSON.error);
},
complete: function () {
App.loading.close();
}
});
},
/**
* @param {number} fieldId
*
* @return {void}
*/
deleteItem: function (fieldId) {
var confirmValue = confirm('Wirklich löschen?');
if (confirmValue === false) {
return;
}
$.ajax({
url: 'index.php?module=datatablelabels&action=automaticlabelsedit&cmd=delete',
data: {
id: fieldId
},
method: 'post',
dataType: 'json',
beforeSend: function () {
App.loading.open();
},
success: function (data) {
if (data.success === true) {
me.reloadDataTable();
}
if (data.success === false) {
alert('Unbekannter Fehler beim Löschen.');
}
},
error: function (jqXhr) {
alert('Fehler: ' + jqXhr.responseJSON.error);
},
complete: function () {
App.loading.close();
}
});
},
/**
* @return void
*/
openEditDialog: function () {
me.storage.$editDialog.dialog('open');
},
/**
* @return void
*/
closeEditDialog: function () {
me.storage.$editDialog.dialog('close');
},
/**
* @return void
*/
resetEditDialog: function () {
me.storage.$editDialog.find('#datatablelabel_automaticlabelid').val('');
me.storage.$editDialog.find('#datatablelabel_automaticlabelname').val('');
var action = document.getElementById('datatablelabel_automaticlabelaction');
action.selectedIndex = 0;
var selection = document.getElementById('datatablelabel_automaticlabelselection');
selection.selectedIndex = 0;
me.storage.$editDialog.find('#datatablelabel_automaticlabelproject').val('');
},
/**
* @return {void}
*/
reloadDataTable: function () {
me.storage.dataTableApi.ajax.reload();
}
};
return {
init: me.init,
createItem: me.createItem
};
})(jQuery);
$(document).ready(function () {
if ($('#datatablelabels_list').length > 0) {
DataTableLabelsUi.init();
}
if ($('#datatablelabels_automaticlabelslist').length > 0) {
DataTableLabelsAutomaticLabelsUi.init();
}
});
File diff suppressed because it is too large Load Diff