MediaWiki:Common.js: различия между версиями

Нет описания правки
Нет описания правки
Строка 339: Строка 339:
     var tables = document.querySelectorAll('.wikitable:not(.no-highlight-table)');
     var tables = document.querySelectorAll('.wikitable:not(.no-highlight-table)');


     tables.forEach(function(table) {
     for (var i = 0; i < tables.length; i++) {
        var table = tables[i];
         var tbody = table.querySelector('tbody');
         var tbody = table.querySelector('tbody');
         if (!tbody) return;
         if (!tbody) continue;


         var rows = Array.from(tbody.querySelectorAll('tr')).filter(row => !row.querySelector('table'));
         var rows = Array.prototype.slice.call(tbody.querySelectorAll('tr')).filter(function(row) {
            return !row.querySelector('table');
        });
       
         var rowspanCells = [];
         var rowspanCells = [];


         rows.forEach(function(row, rowIndex) {
         for (var rowIndex = 0; rowIndex < rows.length; rowIndex++) {
             var cells = Array.from(row.querySelectorAll('td, th'));
            var row = rows[rowIndex];
             var cells = Array.prototype.slice.call(row.querySelectorAll('td, th'));


             cells.forEach(function(cell) {
             for (var cellIndex = 0; cellIndex < cells.length; cellIndex++) {
                var cell = cells[cellIndex];
                 var rowspan = parseInt(cell.getAttribute('rowspan'), 10);
                 var rowspan = parseInt(cell.getAttribute('rowspan'), 10);


Строка 357: Строка 363:


                     // Подсветка для ячейки с rowspan
                     // Подсветка для ячейки с rowspan
                     cell.addEventListener('mouseover', function() {
                     cell.addEventListener('mouseover', (function(cell, rowIndex, rowspan) {
                         for (var i = 0; i < rowspan; i++) {
                         return function() {
                            if (rows[rowIndex + i]) {
                            for (var i = 0; i < rowspan; i++) {
                                highlightRow(rows[rowIndex + i]);
                                if (rows[rowIndex + i]) {
                                    highlightRow(rows[rowIndex + i]);
                                }
                             }
                             }
                         }
                         };
                     });
                     })(cell, rowIndex, rowspan));


                     cell.addEventListener('mouseout', function() {
                     cell.addEventListener('mouseout', (function(cell, rowIndex, rowspan) {
                         for (var i = 0; i < rowspan; i++) {
                         return function() {
                            if (rows[rowIndex + i]) {
                            for (var i = 0; i < rowspan; i++) {
                                resetRow(rows[rowIndex + i]);
                                if (rows[rowIndex + i]) {
                                    resetRow(rows[rowIndex + i]);
                                }
                             }
                             }
                         }
                         };
                     });
                     })(cell, rowIndex, rowspan));
                 }
                 }


                 // Подсветка для строки
                 // Подсветка для строки
                 row.addEventListener('mouseover', function() {
                 row.addEventListener('mouseover', (function(row) {
                     highlightRow(row);
                     return function() {
                 });
                        highlightRow(row);
                    };
                 })(row));


                 row.addEventListener('mouseout', function() {
                 row.addEventListener('mouseout', (function(row) {
                     resetRow(row);
                     return function() {
                 });
                        resetRow(row);
             });
                    };
         });
                 })(row));
             }
         }


         function highlightRow(row) {
         function highlightRow(row) {
             row.querySelectorAll('td, th').forEach(function(cell) {
             var rowCells = row.querySelectorAll('td, th');
            for (var j = 0; j < rowCells.length; j++) {
                var cell = rowCells[j];
                 cell.style.backgroundColor = brightenColor(getComputedStyle(cell).backgroundColor);
                 cell.style.backgroundColor = brightenColor(getComputedStyle(cell).backgroundColor);
                 cell.style.color = brightenColor(getComputedStyle(cell).color);
                 cell.style.color = brightenColor(getComputedStyle(cell).color);
             });
             }
         }
         }


         function resetRow(row) {
         function resetRow(row) {
             row.querySelectorAll('td, th').forEach(function(cell) {
             var rowCells = row.querySelectorAll('td, th');
            for (var j = 0; j < rowCells.length; j++) {
                var cell = rowCells[j];
                 cell.style.backgroundColor = ''; // сбросить на стандартный фон
                 cell.style.backgroundColor = ''; // сбросить на стандартный фон
                 cell.style.color = ''; // сбросить цвет текста
                 cell.style.color = ''; // сбросить цвет текста
             });
             }
         }
         }
     });
     }
}
}