diff --git a/application/views/logbookadvanced/index.php b/application/views/logbookadvanced/index.php
index 3db48f04c..9dd33e7ea 100644
--- a/application/views/logbookadvanced/index.php
+++ b/application/views/logbookadvanced/index.php
@@ -906,6 +906,7 @@ $options = json_decode($options);
+
diff --git a/assets/js/sections/logbookadvanced.js b/assets/js/sections/logbookadvanced.js
index 445333008..020e3c622 100644
--- a/assets/js/sections/logbookadvanced.js
+++ b/assets/js/sections/logbookadvanced.js
@@ -206,6 +206,10 @@ function loadQSOTable(rows) {
// Prevent initializing if already a DataTable
if ($.fn.DataTable.isDataTable($table)) {
+ // Remove ALL buttons containers to prevent duplicates
+ $('#qsoList').prev('.dt-buttons').remove();
+ $('#qsoList_wrapper').find('.dt-buttons').remove();
+ $('.dt-buttons').remove();
$table.DataTable().clear().destroy();
}
@@ -232,14 +236,15 @@ function loadQSOTable(rows) {
{ targets: $(".antennaelevation-column-sort").index(), type: "numbersort" },
{ targets: $(".stationpower-column-sort").index(), type: "numbersort" },
],
- dom: 'Bfrtip',
+ dom: 'frtip',
buttons: [
{
extend: 'csv',
- className: 'mb-1 btn btn-sm btn-primary', // Bootstrap classes
- init: function(api, node, config) {
- $(node).removeClass('dt-button').addClass('btn btn-primary'); // Ensure Bootstrap class applies
- },
+ text: 'CSV',
+ className: 'mb-1 btn btn-sm btn-primary',
+ filename: function() {
+ return 'qso_export_' + new Date().toISOString().slice(0,10);
+ },
exportOptions: {
columns: ':visible:not(:eq(0))', // export all visible except column 4
format: {
@@ -252,7 +257,7 @@ function loadQSOTable(rows) {
data = data.replace(/<[^>]*>/g, '');
}
// then replace Ø with 0 in specific columns
- if (column === 1 || column === 2 || column === 3) {
+ if (column === 1 || column === 2 || column === 3 || column === 4) {
// remove a trailing "L" and trim whitespaces
data = data.replace(/\s*L\s*$/, '').trim();
if (typeof data === 'string' && data.includes('Ø')) {
@@ -275,6 +280,9 @@ function loadQSOTable(rows) {
]
});
+ // Place buttons in custom container
+ table.buttons().container().appendTo('#csv-button-container');
+
for (i = 0; i < rows.length; i++) {
let qso = rows[i];