557
edits
No edit summary |
No edit summary Tag: Reverted |
||
| Line 779: | Line 779: | ||
} | } | ||
}); | }); | ||
}); | |||
/* All JavaScript here will be loaded for users of the mobile site */ | |||
// Simple custom table sorting that doesn't rely on MediaWiki modules | |||
function initMobileSorting() { | |||
console.log('Initializing simple mobile sorting...'); | |||
// Apply custom table sorting on both mobile and desktop | |||
console.log('Applying custom table sorting for all devices'); | |||
var tables = document.querySelectorAll('.wikitable, table.sortable'); | |||
console.log('Found tables:', tables.length); | |||
$(tables).each(function(index, table) { | |||
setupTableSorting($(table), index); | |||
}); | |||
} | |||
// Separate function to setup sorting for a single table | |||
function setupTableSorting($table, tableIndex) { | |||
var $headers = $table.find('th'); | |||
if ($headers.length === 0) return; | |||
console.log('Setting up table', tableIndex, 'with', $headers.length, 'headers'); | |||
// Remove any existing event handlers to avoid duplicates | |||
$table.off('click.tablesort'); | |||
// Style headers and add sort indicators | |||
$headers.each(function() { | |||
var $header = $(this); | |||
// Style header | |||
$header.css({ | |||
'cursor': 'pointer', | |||
'user-select': 'none', | |||
'background-color': '#f8f9fa', | |||
'border-bottom': '2px solid #a2a9b1', | |||
'position': 'relative' | |||
}); | |||
// Remove existing arrows and add new ones | |||
$header.find('.sort-arrow').remove(); | |||
$header.append('<span class="sort-arrow" style="margin-left: 5px; color: #666; font-size: 12px;">⇅</span>'); | |||
}); | |||
// Use event delegation on the table | |||
$table.on('click.tablesort', 'th', function(e) { | |||
e.preventDefault(); | |||
e.stopPropagation(); | |||
var $clickedHeader = $(this); | |||
var columnIndex = $clickedHeader.index(); | |||
console.log('Header clicked - Column:', columnIndex); | |||
// Get fresh references | |||
var $allHeaders = $table.find('th'); | |||
var $dataRows = $table.find('tbody tr'); | |||
// If no tbody, get all rows except header | |||
if ($dataRows.length === 0) { | |||
$dataRows = $table.find('tr').not($table.find('tr').first()); | |||
} | |||
if ($dataRows.length === 0) { | |||
console.log('No data rows found'); | |||
return; | |||
} | |||
console.log('Found', $dataRows.length, 'data rows to sort'); | |||
// Determine sort direction based on current state | |||
var currentSortClass = $clickedHeader.hasClass('sort-asc') ? 'asc' : | |||
$clickedHeader.hasClass('sort-desc') ? 'desc' : 'none'; | |||
var newSortDirection = currentSortClass === 'asc' ? 'desc' : 'asc'; | |||
console.log('Current sort:', currentSortClass, '-> New sort:', newSortDirection); | |||
// Reset all headers | |||
$allHeaders.removeClass('sort-asc sort-desc'); | |||
$allHeaders.find('.sort-arrow').text('⇅').css('color', '#666'); | |||
// Set new sort state | |||
$clickedHeader.addClass('sort-' + newSortDirection); | |||
var arrow = newSortDirection === 'asc' ? '⇑' : '⇓'; | |||
$clickedHeader.find('.sort-arrow').text(arrow).css('color', '#000'); | |||
// Convert to array and sort | |||
var rowsArray = $dataRows.toArray(); | |||
rowsArray.sort(function(rowA, rowB) { | |||
var $cellA = $(rowA).find('td').eq(columnIndex); | |||
var $cellB = $(rowB).find('td').eq(columnIndex); | |||
if ($cellA.length === 0 || $cellB.length === 0) return 0; | |||
var textA = $cellA.text().trim(); | |||
var textB = $cellB.text().trim(); | |||
// Try numeric comparison | |||
var numA = parseFloat(textA.replace(/[,$%\s]/g, '')); | |||
var numB = parseFloat(textB.replace(/[,$%\s]/g, '')); | |||
var result; | |||
if (!isNaN(numA) && !isNaN(numB)) { | |||
result = numA - numB; | |||
} else { | |||
result = textA.localeCompare(textB); | |||
} | |||
return newSortDirection === 'desc' ? -result : result; | |||
}); | |||
// Reinsert sorted rows | |||
var $tbody = $table.find('tbody'); | |||
if ($tbody.length > 0) { | |||
$tbody.empty().append(rowsArray); | |||
} else { | |||
// Remove existing data rows and append sorted ones | |||
$table.find('tr').not($table.find('tr').first()).remove(); | |||
$table.append(rowsArray); | |||
} | |||
console.log('Sorting completed successfully'); | |||
// Re-setup the table to ensure it stays sortable | |||
setTimeout(function() { | |||
setupTableSorting($table, tableIndex); | |||
}, 10); | |||
}); | |||
console.log('Table', tableIndex, 'sorting setup completed'); | |||
} | |||
// Main initialization function | |||
$( function(){ | |||
// Mobile/Desktop view switching logic | |||
if (window.matchMedia("(max-width: 768px)").matches) { | |||
if( mw.config.get("skin") !== "minerva" ){ | |||
const currWikiUrl = new URL(window.location.href); | |||
currWikiUrl.searchParams.set('mobileaction', 'toggle_view_mobile'); | |||
window.location.replace(currWikiUrl); | |||
} | |||
$("#footer-places-desktop-toggle").remove(); | |||
} else { | |||
if( mw.config.get("skin") !== "vector" ){ | |||
const currWikiUrl = new URL(window.location.href); | |||
currWikiUrl.searchParams.set('mobileaction', 'toggle_view_desktop'); | |||
window.location.replace(currWikiUrl); | |||
} | |||
} | |||
// Poem formatting code | |||
var countPoem2 = $(".Poem2-Ekatra"); | |||
if( countPoem2.length > 0 ){ | |||
var Poem2lenghtArray = []; | |||
for (var k = 0; k <= countPoem2.length; k++) { | |||
Poem2lenghtArray.push(k); | |||
} | |||
Poem2lenghtArray.forEach(function(j) { | |||
var poemElement = $(".Poem2-Ekatra").eq(j); | |||
if( poemElement.length ){ | |||
var poemText = poemElement.html(); | |||
var poemArray = poemText.split("\n"); | |||
poemElement.text(""); | |||
// First measure | |||
poemArray.forEach( function(i) { | |||
poemElement.append( '<p style="text-indent: 2em;">' + i + '</p>' ); | |||
}); | |||
// Second measure | |||
poemElement.children('p').each(function () { | |||
$(this).css('text-indent', '2em'); | |||
}); | |||
} | |||
}); | |||
} | |||
// Initialize table sorting | |||
initMobileSorting(); | |||
// Also reinitialize when new content loads (like after editing) | |||
mw.hook('wikipage.content').add(function() { | |||
initMobileSorting(); | |||
}); | |||
}); | }); | ||