MediaWiki:Common.js: различия между версиями
Pok (обсуждение | вклад) мНет описания правки |
Pok (обсуждение | вклад) Нет описания правки |
||
| Строка 349: | Строка 349: | ||
var noHeader = table.classList.contains('no-header-table'); | var noHeader = table.classList.contains('no-header-table'); | ||
// Проходим по каждому <tbody> | // Проходим по каждому <tbody> в основной таблице | ||
Array.prototype.forEach.call(tbodies, function(tbody) { | Array.prototype.forEach.call(tbodies, function(tbody) { | ||
// Получаем все строки <tr>, исключая первый <tr | // Получаем все строки <tr> внутри текущего <tbody>, исключая первый <tr> | ||
var rows = Array.prototype.slice.call(tbody.querySelectorAll('tr')).filter(function(row, index) { | var rows = Array.prototype.slice.call(tbody.querySelectorAll('tr')).filter(function(row, index) { | ||
// | // Пропускаем первый <tr> и исключаем строки с вложенными таблицами | ||
return index > 0 && ! | return index > 0 || !thead && !noHeader; | ||
}); | }); | ||
// | // Проходим по каждой строке первого уровня | ||
rows.forEach(function(row) { | |||
// Проверяем, содержит ли строка вложенную таблицу | |||
var nestedTables = row.querySelectorAll('table'); | |||
// Если вложенные таблицы есть, проходим по каждой | |||
Array.prototype.forEach.call(nestedTables, function(nestedTable) { | |||
var nestedTbodies = nestedTable.querySelectorAll('tbody'); | |||
// Пропускаем первый <tr> в каждом <tbody> вложенной таблицы | |||
Array.prototype.forEach.call(nestedTbodies, function(nestedTbody) { | |||
var nestedRows = Array.prototype.slice.call(nestedTbody.querySelectorAll('tr')).filter(function(row, index) { | |||
// Пропускаем только первый <tr> в каждом вложенном <tbody> | |||
return index > 0; | |||
}); | |||
// Применяем логику к строкам вложенных таблиц | |||
applyHighlightingToRows(nestedRows); | |||
}); | |||
}); | }); | ||
// | // Применяем логику подсветки к текущему ряду | ||
applyHighlightingToRows([row]); | |||
}); | |||
}); | |||
}); | |||
function applyHighlightingToRows(rows) { | |||
rows.forEach(function(row) { | |||
// Получаем все ячейки строки, исключая те, что имеют класс 'mobile' | |||
var cells = Array.prototype.slice.call(row.querySelectorAll('td, th')).filter(function(cell) { | |||
return !cell.classList.contains('mobile'); | |||
}); | |||
var originalStyles = cells.map(function(cell) { | |||
return { | |||
backgroundColor: getComputedStyle(cell).backgroundColor, | |||
} | color: getComputedStyle(cell).color | ||
}; | |||
}); | }); | ||
// | // Добавляем события 'mouseover' и 'mouseout' для подсветки | ||
cells.forEach(function(cell, index) { | |||
if (cell.hasAttribute('rowspan') && cell.getAttribute('rowspan') !== '1') return; | |||
cell.addEventListener('mouseover', function() { | |||
cells.forEach(function(innerCell, innerIndex) { | |||
if (!innerCell.hasAttribute('rowspan') || innerCell.getAttribute('rowspan') === '1') { | |||
innerCell.style.setProperty('background-color', brightenColor(originalStyles[innerIndex].backgroundColor), 'important'); | |||
innerCell.style.setProperty('color', brightenColor(originalStyles[innerIndex].color), 'important'); | |||
} | |||
}); | |||
}; | |||
}); | }); | ||
cell.addEventListener('mouseout', function() { | |||
cells.forEach(function(innerCell, innerIndex) { | |||
if (!innerCell.hasAttribute('rowspan') || innerCell.getAttribute('rowspan') === '1') { | |||
innerCell.style.setProperty('background-color', originalStyles[innerIndex].backgroundColor, 'important'); | |||
innerCell.style.setProperty('color', originalStyles[innerIndex].color, 'important'); | |||
} | |||
} | |||
}); | }); | ||
}); | }); | ||
}); | }); | ||
}); | }); | ||
} | } | ||
} | } | ||