diff --git a/js/kundenkarte.js b/js/kundenkarte.js
index d8abef3..28a17bd 100755
--- a/js/kundenkarte.js
+++ b/js/kundenkarte.js
@@ -4584,6 +4584,14 @@
self.showBusbarPopup(connectionId, e.clientX, e.clientY);
});
+ // Hutschiene (rail) click - show edit popup
+ $(document).off('click.rail').on('click.rail', '.schematic-rail', function(e) {
+ e.preventDefault();
+ e.stopPropagation();
+ var carrierId = $(this).data('carrier-id');
+ self.showCarrierPopup(carrierId, e.clientX, e.clientY);
+ });
+
// Terminal right-click - show output/cable dialog
$(document).off('contextmenu.terminal').on('contextmenu.terminal', '.schematic-terminal', function(e) {
e.preventDefault();
@@ -4704,6 +4712,142 @@
$('.schematic-busbar-popup').remove();
},
+ showCarrierPopup: function(carrierId, x, y) {
+ var self = this;
+ this.hideCarrierPopup();
+
+ var carrier = this.carriers.find(function(c) { return String(c.id) === String(carrierId); });
+ if (!carrier) return;
+
+ var html = '
';
+
+ $('body').append(html);
+
+ $('.carrier-edit-btn').on('click', function() {
+ var id = $(this).data('id');
+ self.hideCarrierPopup();
+ self.showEditCarrierDialog(id);
+ });
+
+ $('.carrier-delete-btn').on('click', function() {
+ var id = $(this).data('id');
+ self.hideCarrierPopup();
+ self.deleteCarrier(id);
+ });
+
+ // Close on click outside
+ setTimeout(function() {
+ $(document).one('click', function() {
+ self.hideCarrierPopup();
+ });
+ }, 100);
+ },
+
+ hideCarrierPopup: function() {
+ $('.schematic-carrier-popup').remove();
+ },
+
+ showEditCarrierDialog: function(carrierId) {
+ var self = this;
+ var carrier = this.carriers.find(function(c) { return String(c.id) === String(carrierId); });
+ if (!carrier) return;
+
+ var html = '';
+ html += '';
+ html += '
Hutschiene bearbeiten
';
+
+ // Label
+ html += '
';
+ html += '
';
+
+ // Total TE
+ html += '
';
+ html += '
';
+
+ // Buttons
+ html += '
';
+ html += '';
+ html += '';
+ html += '
';
+
+ $('body').append(html);
+
+ $('.dialog-carrier-save').on('click', function() {
+ var label = $('.dialog-carrier-label').val();
+ var totalTe = parseInt($('.dialog-carrier-te').val()) || 12;
+ self.updateCarrier(carrierId, label, totalTe);
+ self.closeDialog();
+ });
+
+ $('.dialog-carrier-cancel, .schematic-dialog-overlay').on('click', function() {
+ self.closeDialog();
+ });
+ },
+
+ updateCarrier: function(carrierId, label, totalTe) {
+ var self = this;
+ var baseUrl = $('body').data('base-url') || '';
+
+ $.ajax({
+ url: baseUrl + '/custom/kundenkarte/ajax/equipment_carrier.php',
+ method: 'POST',
+ data: {
+ action: 'update',
+ carrier_id: carrierId,
+ label: label,
+ total_te: totalTe,
+ token: KundenKarte.token
+ },
+ dataType: 'json',
+ success: function(response) {
+ if (response.success) {
+ self.loadData();
+ self.showMessage('Hutschiene aktualisiert', 'success');
+ } else {
+ self.showMessage('Fehler: ' + (response.error || 'Unbekannt'), 'error');
+ }
+ },
+ error: function() {
+ self.showMessage('Fehler beim Speichern', 'error');
+ }
+ });
+ },
+
+ deleteCarrier: function(carrierId) {
+ var self = this;
+ var baseUrl = $('body').data('base-url') || '';
+
+ this.showConfirmDialog('Hutschiene löschen', 'Diese Hutschiene und alle Equipments darauf wirklich löschen?', function() {
+ $.ajax({
+ url: baseUrl + '/custom/kundenkarte/ajax/equipment_carrier.php',
+ method: 'POST',
+ data: {
+ action: 'delete',
+ carrier_id: carrierId,
+ token: KundenKarte.token
+ },
+ dataType: 'json',
+ success: function(response) {
+ if (response.success) {
+ self.loadData();
+ self.showMessage('Hutschiene gelöscht', 'success');
+ } else {
+ self.showMessage('Fehler: ' + (response.error || 'Unbekannt'), 'error');
+ }
+ },
+ error: function() {
+ self.showMessage('Fehler beim Löschen', 'error');
+ }
+ });
+ });
+ },
+
showEditBusbarDialog: function(connectionId) {
var self = this;
var conn = this.connections.find(function(c) { return String(c.id) === String(connectionId); });
@@ -5126,9 +5270,9 @@
html += '';
- // Rail (mit Überstand links und rechts)
+ // Rail (mit Überstand links und rechts) - klickbar für Bearbeitung
html += '';
+ html += 'fill="' + self.COLORS.rail + '" rx="1" style="cursor:pointer;"/>';
// Rail label (links vom Überstand, centered with rail)
html += '';
@@ -5161,7 +5305,7 @@
html += 'fill="' + self.COLORS.railBg + '" rx="2"/>';
html += '';
+ html += 'fill="' + self.COLORS.rail + '" rx="1" style="cursor:pointer;"/>';
html += '';
html += self.escapeHtml(carrier.label || 'Hutschiene ' + (idx + 1));