From e35b7a8edc82c443f740b9649b580ef4551773cd Mon Sep 17 00:00:00 2001 From: Frank Date: Tue, 30 Dec 2025 08:43:16 +0100 Subject: [PATCH 1/9] refactor pdf export in its own component --- frontend/src/components/CharacterDetails.vue | 241 +------------- frontend/src/components/ExportPdfDialog.vue | 319 +++++++++++++++++++ 2 files changed, 330 insertions(+), 230 deletions(-) create mode 100644 frontend/src/components/ExportPdfDialog.vue diff --git a/frontend/src/components/CharacterDetails.vue b/frontend/src/components/CharacterDetails.vue index 4502ef7..4657283 100644 --- a/frontend/src/components/CharacterDetails.vue +++ b/frontend/src/components/CharacterDetails.vue @@ -11,44 +11,12 @@ - + @@ -168,138 +136,6 @@ justify-content: center; } -.close-button:hover { - color: #333; -} - -.modal-body { - padding: 20px; - position: relative; -} - -.loading-overlay { - position: absolute; - top: 0; - left: 0; - right: 0; - bottom: 0; - background: rgba(255, 255, 255, 0.95); - display: flex; - flex-direction: column; - justify-content: center; - align-items: center; - z-index: 10; - border-radius: 0 0 8px 8px; -} - -.spinner { - border: 4px solid #f3f3f3; - border-top: 4px solid #007bff; - border-radius: 50%; - width: 50px; - height: 50px; - animation: spin 1s linear infinite; - margin-bottom: 15px; -} - -@keyframes spin { - 0% { transform: rotate(0deg); } - 100% { transform: rotate(360deg); } -} - -.loading-overlay p { - color: #007bff; - font-weight: 500; - margin: 0; -} - -.form-group { - margin-bottom: 20px; -} - -.form-group label { - display: block; - margin-bottom: 8px; - font-weight: 500; - color: #495057; -} - -.template-select { - width: 100%; - padding: 10px 12px; - border: 1px solid #dee2e6; - border-radius: 6px; - background: white; - color: #495057; - font-size: 0.95rem; - cursor: pointer; -} - -.template-select:focus { - outline: none; - border-color: #007bff; - box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25); -} - -.checkbox-label { - display: flex; - align-items: center; - gap: 8px; - cursor: pointer; - user-select: none; -} - -.checkbox-label input[type="checkbox"] { - width: 18px; - height: 18px; - cursor: pointer; -} - -.modal-footer { - display: flex; - justify-content: flex-end; - gap: 10px; - padding: 20px; - border-top: 1px solid #dee2e6; -} - -.btn-cancel { - padding: 10px 20px; - border: 1px solid #dee2e6; - border-radius: 6px; - background: #f8f9fa; - color: #495057; - cursor: pointer; - font-weight: 500; - transition: all 0.2s ease; -} - -.btn-cancel:hover { - background: #e9ecef; - border-color: #adb5bd; -} - -.btn-export { - padding: 10px 20px; - border: 1px solid #007bff; - border-radius: 6px; - background: #007bff; - color: white; - cursor: pointer; - font-weight: 500; - transition: all 0.2s ease; -} - -.btn-export:hover:not(:disabled) { - background: #0056b3; - border-color: #0056b3; -} - -.btn-export:disabled { - opacity: 0.6; - cursor: not-allowed; -} - .submenu { display: flex; gap: 10px; @@ -333,6 +169,7 @@ + \ No newline at end of file diff --git a/frontend/src/components/ExportPdfDialog.vue b/frontend/src/components/ExportPdfDialog.vue new file mode 100644 index 0000000..f7fe023 --- /dev/null +++ b/frontend/src/components/ExportPdfDialog.vue @@ -0,0 +1,319 @@ + + + + + From 53369baeef54773d5c824f9bbf48ed4d75a1b432 Mon Sep 17 00:00:00 2001 From: Frank Date: Tue, 30 Dec 2025 08:55:00 +0100 Subject: [PATCH 2/9] Export allowes now PDF, VTT and Bamort format --- frontend/src/components/CharacterDetails.vue | 8 +- .../{ExportPdfDialog.vue => ExportDialog.vue} | 100 +++++++++++++++++- frontend/src/locales/de | 10 +- frontend/src/locales/en | 10 +- 4 files changed, 116 insertions(+), 12 deletions(-) rename frontend/src/components/{ExportPdfDialog.vue => ExportDialog.vue} (66%) diff --git a/frontend/src/components/CharacterDetails.vue b/frontend/src/components/CharacterDetails.vue index 4657283..5469b72 100644 --- a/frontend/src/components/CharacterDetails.vue +++ b/frontend/src/components/CharacterDetails.vue @@ -3,7 +3,7 @@
-

{{ $t('char') }}: {{ character.name }} ({{ $t(currentView) }})

@@ -11,7 +11,7 @@
- import API from '../utils/api' -import ExportPdfDialog from "./ExportPdfDialog.vue"; +import ExportDialog from "./ExportDialog.vue"; import DatasheetView from "./DatasheetView.vue"; // Component for character stats import SkillView from "./SkillView.vue"; // Component for character history import WeaponView from "./WeaponView.vue"; // Component for character history @@ -183,7 +183,7 @@ export default { name: "CharacterDetails", props: ["id"], // Receive the route parameter as a prop components: { - ExportPdfDialog, + ExportDialog, DatasheetView, SkillView, WeaponView, diff --git a/frontend/src/components/ExportPdfDialog.vue b/frontend/src/components/ExportDialog.vue similarity index 66% rename from frontend/src/components/ExportPdfDialog.vue rename to frontend/src/components/ExportDialog.vue index f7fe023..d4e94d5 100644 --- a/frontend/src/components/ExportPdfDialog.vue +++ b/frontend/src/components/ExportDialog.vue @@ -2,7 +2,7 @@