diff --git a/src/index.php b/src/index.php
index 934a477..50dafaf 100644
--- a/src/index.php
+++ b/src/index.php
@@ -13,6 +13,16 @@
Web Crawler
+
+
+
+
+
+
+
+
+
+
@@ -223,7 +285,7 @@
Crawl Jobs
-
+
| ID |
@@ -256,7 +318,7 @@
-
+
| URL |
@@ -272,7 +334,7 @@
-
+
| Von |
@@ -289,7 +351,7 @@
-
+
| URL |
@@ -307,7 +369,7 @@
Redirect Statistics
-
+
| URL |
@@ -326,7 +388,7 @@
SEO Issues
-
+
| URL |
@@ -380,12 +442,19 @@
}
}
+ let jobsDataTable = null;
+
async function loadJobs() {
try {
const response = await fetch('/api.php?action=jobs');
const data = await response.json();
if (data.success) {
+ // Destroy existing DataTable if it exists
+ if (jobsDataTable) {
+ jobsDataTable.destroy();
+ }
+
const tbody = document.getElementById('jobsBody');
tbody.innerHTML = data.jobs.map(job => `
@@ -402,6 +471,25 @@
`).join('');
+
+ // Initialize DataTable
+ jobsDataTable = $('#jobsTable').DataTable({
+ pageLength: 25,
+ order: [[0, 'desc']],
+ language: {
+ search: 'Suchen:',
+ lengthMenu: 'Zeige _MENU_ Einträge',
+ info: 'Zeige _START_ bis _END_ von _TOTAL_ Einträgen',
+ infoEmpty: 'Keine Einträge verfügbar',
+ infoFiltered: '(gefiltert von _MAX_ Einträgen)',
+ paginate: {
+ first: 'Erste',
+ last: 'Letzte',
+ next: 'Nächste',
+ previous: 'Vorherige'
+ }
+ }
+ });
}
} catch (e) {
console.error('Fehler beim Laden der Jobs:', e);
@@ -473,6 +561,10 @@
const pagesResponse = await fetch(`/api.php?action=pages&job_id=${currentJobId}`);
const pagesData = await pagesResponse.json();
+ if ($.fn.DataTable.isDataTable('#pagesTable')) {
+ $('#pagesTable').DataTable().destroy();
+ }
+
if (pagesData.success && pagesData.pages.length > 0) {
document.getElementById('pagesBody').innerHTML = pagesData.pages.map(page => `
@@ -482,12 +574,33 @@
| ${page.crawled_at} |
`).join('');
+
+ $('#pagesTable').DataTable({
+ pageLength: 50,
+ language: {
+ search: 'Suchen:',
+ lengthMenu: 'Zeige _MENU_ Einträge',
+ info: 'Zeige _START_ bis _END_ von _TOTAL_ Einträgen',
+ infoEmpty: 'Keine Einträge verfügbar',
+ infoFiltered: '(gefiltert von _MAX_ Einträgen)',
+ paginate: {
+ first: 'Erste',
+ last: 'Letzte',
+ next: 'Nächste',
+ previous: 'Vorherige'
+ }
+ }
+ });
}
// Load links
const linksResponse = await fetch(`/api.php?action=links&job_id=${currentJobId}`);
const linksData = await linksResponse.json();
+ if ($.fn.DataTable.isDataTable('#linksTable')) {
+ $('#linksTable').DataTable().destroy();
+ }
+
if (linksData.success && linksData.links.length > 0) {
document.getElementById('linksBody').innerHTML = linksData.links.map(link => `
@@ -498,12 +611,33 @@
| ${link.is_internal ? 'Intern' : 'Extern'} |
`).join('');
+
+ $('#linksTable').DataTable({
+ pageLength: 50,
+ language: {
+ search: 'Suchen:',
+ lengthMenu: 'Zeige _MENU_ Einträge',
+ info: 'Zeige _START_ bis _END_ von _TOTAL_ Einträgen',
+ infoEmpty: 'Keine Einträge verfügbar',
+ infoFiltered: '(gefiltert von _MAX_ Einträgen)',
+ paginate: {
+ first: 'Erste',
+ last: 'Letzte',
+ next: 'Nächste',
+ previous: 'Vorherige'
+ }
+ }
+ });
}
// Load broken links
const brokenResponse = await fetch(`/api.php?action=broken-links&job_id=${currentJobId}`);
const brokenData = await brokenResponse.json();
+ if ($.fn.DataTable.isDataTable('#brokenTable')) {
+ $('#brokenTable').DataTable().destroy();
+ }
+
if (brokenData.success && brokenData.broken_links.length > 0) {
document.getElementById('brokenBody').innerHTML = brokenData.broken_links.map(page => `
@@ -513,6 +647,23 @@
| ${page.crawled_at} |
`).join('');
+
+ $('#brokenTable').DataTable({
+ pageLength: 25,
+ language: {
+ search: 'Suchen:',
+ lengthMenu: 'Zeige _MENU_ Einträge',
+ info: 'Zeige _START_ bis _END_ von _TOTAL_ Einträgen',
+ infoEmpty: 'Keine Einträge verfügbar',
+ infoFiltered: '(gefiltert von _MAX_ Einträgen)',
+ paginate: {
+ first: 'Erste',
+ last: 'Letzte',
+ next: 'Nächste',
+ previous: 'Vorherige'
+ }
+ }
+ });
} else {
document.getElementById('brokenBody').innerHTML = '| Keine defekten Links gefunden |
';
}
@@ -539,6 +690,10 @@
`;
// SEO Issues
+ if ($.fn.DataTable.isDataTable('#seoTable')) {
+ $('#seoTable').DataTable().destroy();
+ }
+
if (seoData.issues.length > 0) {
document.getElementById('seoIssuesBody').innerHTML = seoData.issues.map(item => `
@@ -548,6 +703,23 @@
| ${item.issues.join(', ')} |
`).join('');
+
+ $('#seoTable').DataTable({
+ pageLength: 25,
+ language: {
+ search: 'Suchen:',
+ lengthMenu: 'Zeige _MENU_ Einträge',
+ info: 'Zeige _START_ bis _END_ von _TOTAL_ Einträgen',
+ infoEmpty: 'Keine Einträge verfügbar',
+ infoFiltered: '(gefiltert von _MAX_ Einträgen)',
+ paginate: {
+ first: 'Erste',
+ last: 'Letzte',
+ next: 'Nächste',
+ previous: 'Vorherige'
+ }
+ }
+ });
} else {
document.getElementById('seoIssuesBody').innerHTML = '| Keine SEO-Probleme gefunden |
';
}
@@ -598,6 +770,10 @@
`;
// Redirect Table
+ if ($.fn.DataTable.isDataTable('#redirectsTable')) {
+ $('#redirectsTable').DataTable().destroy();
+ }
+
if (redirectsData.redirects.length > 0) {
document.getElementById('redirectsBody').innerHTML = redirectsData.redirects.map(redirect => {
const isExcessive = redirect.redirect_count > stats.threshold;
@@ -614,6 +790,23 @@
`;
}).join('');
+
+ $('#redirectsTable').DataTable({
+ pageLength: 25,
+ language: {
+ search: 'Suchen:',
+ lengthMenu: 'Zeige _MENU_ Einträge',
+ info: 'Zeige _START_ bis _END_ von _TOTAL_ Einträgen',
+ infoEmpty: 'Keine Einträge verfügbar',
+ infoFiltered: '(gefiltert von _MAX_ Einträgen)',
+ paginate: {
+ first: 'Erste',
+ last: 'Letzte',
+ next: 'Nächste',
+ previous: 'Vorherige'
+ }
+ }
+ });
} else {
document.getElementById('redirectsBody').innerHTML = '| Keine Redirects gefunden |
';
}