From aa58ae479cbbf6f8e624a8713db754b04ac06982 Mon Sep 17 00:00:00 2001 From: M_Viper Date: Wed, 26 Nov 2025 16:37:33 +0000 Subject: [PATCH] Dateien nach "assets/js" hochladen --- assets/js/teamcard-admin.js | 171 ++++++++++++++++++++++++++++++++++++ 1 file changed, 171 insertions(+) create mode 100644 assets/js/teamcard-admin.js diff --git a/assets/js/teamcard-admin.js b/assets/js/teamcard-admin.js new file mode 100644 index 0000000..a2c7553 --- /dev/null +++ b/assets/js/teamcard-admin.js @@ -0,0 +1,171 @@ +jQuery(document).ready(function($) { + var newTeamcardFrame; + var teamcardFrame; + + // Medienbibliothek für neues Teammitglied + $('#new-teamcard-bild-button').on('click', function(e) { + e.preventDefault(); + if (newTeamcardFrame) { newTeamcardFrame.open(); return; } + + newTeamcardFrame = wp.media({ title: 'Bild auswählen', button: { text: 'Verwenden' }, multiple: false }); + newTeamcardFrame.on('select', function() { + var attachment = newTeamcardFrame.state().get('selection').first().toJSON(); + $('#new-teamcard-bild-id').val(attachment.id); + $('#new-teamcard-bild-vorschau').attr('src', attachment.url).show(); + }); + newTeamcardFrame.open(); + }); + + // Medienbibliothek für vorhandene Teammitglieder + $(document).on('click', '.teamcard-bild-button', function(e) { + e.preventDefault(); + var button = $(this); + var teamcardId = button.data('id'); + + if (teamcardFrame) { teamcardFrame.open(); return; } + + teamcardFrame = wp.media({ title: 'Bild ändern', button: { text: 'Verwenden' }, multiple: false }); + teamcardFrame.on('select', function() { + var attachment = teamcardFrame.state().get('selection').first().toJSON(); + $.ajax({ + url: teamcard_data.ajax_url, + type: 'POST', + data: { action: 'update_teamcard_image', id: teamcardId, bild_id: attachment.id, nonce: teamcard_data.nonce }, + success: function(response) { + if (response.success) { + var container = button.siblings('.image-preview-container'); + container.html(''); + showMessage('Bild erfolgreich aktualisiert.', 'success'); + } + } + }); + }); + teamcardFrame.open(); + }); + + // Neues Teammitglied hinzufügen + $('#add-teamcard-button').on('click', function() { + var name = $('#new-teamcard-name').val(); + if (!name) { showMessage('Bitte gib einen Namen ein.', 'error'); return; } + + $.ajax({ + url: teamcard_data.ajax_url, + type: 'POST', + data: { + action: 'add_teamcard', + name: name, + funktion: $('#new-teamcard-funktion').val(), + zustaendigkeit: $('#new-teamcard-zustaendigkeit').val(), + card_type: $('#new-teamcard-card-type').val(), + bild_id: $('#new-teamcard-bild-id').val(), + nonce: teamcard_data.nonce + }, + success: function(response) { + if (response.success) { + var bildHtml = response.data.bild_url ? '' : ''; + var newRow = ` + +
${bildHtml}
+
${name}
+
${$('#new-teamcard-funktion').val()}
+
${$('#new-teamcard-zustaendigkeit').val()}
+ ${$('#new-teamcard-card-type option:selected').text()} + + `; + $('#teamcard-list').append(newRow); + + // Formular zurücksetzen + $('#new-teamcard-name, #new-teamcard-funktion, #new-teamcard-zustaendigkeit, #new-teamcard-bild-id').val(''); + $('#new-teamcard-bild-vorschau').hide(); + $('#new-teamcard-card-type').prop('selectedIndex',0); + + showMessage('Teammitglied erfolgreich hinzugefügt.', 'success'); + } else { + showMessage(response.data.message || 'Ein unbekannter Fehler ist aufgetreten.', 'error'); + } + } + }); + }); + + // Inline-Bearbeitung + $(document).on('click', '.editable', function() { + var element = $(this); + var currentText = element.text().trim(); + element.html(''); + element.find('input').focus().select(); + }); + + $(document).on('blur keypress', '.inline-edit', function(e) { + if (e.type === 'keypress' && e.which !== 13) return; + if (e.type === 'keypress') { e.preventDefault(); } + + var input = $(this); + var element = input.parent(); + var newValue = input.val().trim(); + var field = element.data('field'); + var id = element.data('id'); + + $.ajax({ + url: teamcard_data.ajax_url, + type: 'POST', + data: { action: 'update_teamcard', id: id, field: field, value: newValue, nonce: teamcard_data.nonce }, + success: function(response) { + if (response.success) { + element.text(newValue); + showMessage('Erfolgreich aktualisiert.', 'success'); + } else { + element.text(newValue); // Text trotzdem aktualisieren, auch wenn der Request fehlschlägt + showMessage('Fehler beim Speichern.', 'error'); + } + } + }); + }); + + // Teammitglied löschen + $(document).on('click', '.teamcard-delete', function() { + if (!confirm('Möchtest du dieses Teammitglied wirklich löschen?')) { return; } + + var button = $(this); + var id = button.data('id'); + + $.ajax({ + url: teamcard_data.ajax_url, + type: 'POST', + data: { action: 'delete_teamcard', id: id, nonce: teamcard_data.nonce }, + success: function(response) { + if (response.success) { + button.closest('tr').fadeOut(400, function() { $(this).remove(); }); + showMessage('Teammitglied erfolgreich gelöscht.', 'success'); + } else { + showMessage('Fehler beim Löschen.', 'error'); + } + } + }); + }); + + // Drag & Drop Sortierung + $('#teamcard-list').sortable({ + handle: 'td:first', // Nur die erste Spalte als Handle + placeholder: 'ui-state-highlight', + tolerance: 'pointer', + update: function(event, ui) { + var order = $(this).sortable('toArray', {attribute: 'data-id'}); + $.ajax({ + url: teamcard_data.ajax_url, + type: 'POST', + data: { action: 'update_teamcard_order', order: order, nonce: teamcard_data.nonce }, + success: function(response) { + if (response.success) { + showMessage('Reihenfolge aktualisiert.', 'success'); + } + } + }); + } + }); + + function showMessage(message, type) { + var messageElement = $('#teamcard-message'); + messageElement.removeClass('notice-success notice-error').addClass('notice-' + type); + messageElement.html('

' + message + '

').show().delay(3000).fadeOut(); + } +}); \ No newline at end of file