MediaWiki:Common.js: различия между версиями
Kerisar (обсуждение | вклад) мНет описания правки |
Pok (обсуждение | вклад) Нет описания правки |
||
| Строка 291: | Строка 291: | ||
return iframe; | return iframe; | ||
} | } | ||
// Функция для увеличения яркости цвета | |||
function brightenColor(color, factor) { | |||
// Функция для вычисления яркости цвета (использует стандартное восприятие цвета) | |||
function getBrightness(r, g, b) { | |||
return 0.2126 * r + 0.7152 * g + 0.0722 * b; | |||
} | |||
// Если цвет в формате rgba, преобразуем его в rgb | |||
if (color.startsWith('rgba')) { | |||
const [r, g, b] = color.match(/\d+/g).slice(0, 3).map(Number); | |||
color = `rgb(${r},${g},${b})`; | |||
} | |||
// Если цвет в формате rgb | |||
let [r, g, b] = color.match(/\d+/g).map(Number); | |||
let brightness = getBrightness(r, g, b); | |||
// Устанавливаем порог для определения тёмного цвета | |||
const darkThreshold = 90; // Более универсальный порог для разделения тёмных и светлых цветов | |||
let brightnessFactor = brightness < darkThreshold ? factor + 0.04 : factor; // Увеличиваем фактор для тёмных цветов | |||
// Увеличиваем яркость | |||
r = Math.min(255, Math.floor(r * brightnessFactor)); | |||
g = Math.min(255, Math.floor(g * brightnessFactor)); | |||
b = Math.min(255, Math.floor(b * brightnessFactor)); | |||
return `rgb(${r}, ${g}, ${b})`; | |||
} | |||
// Функция для подсветки ячеек в таблице при наведении | |||
function applyHighlighting() { | |||
document.querySelectorAll('.wikitable:not(.no-highlight-table)').forEach(table => { | |||
const tbody = table.querySelector('tbody'); | |||
const thead = table.querySelector('thead'); | |||
const rows = Array.from(tbody.querySelectorAll('tr')).filter(row => !row.querySelector('table')); | |||
const topLevelRows = thead ? rows : rows.slice(1); | |||
let hasInvalidRowspan = false; | |||
let hasTooManyRowspan = false; | |||
topLevelRows.forEach(row => { | |||
const cells = Array.from(row.querySelectorAll('td, th')); | |||
const rowspanCount = cells.filter(cell => cell.hasAttribute('rowspan') && cell.getAttribute('rowspan') !== '1').length; | |||
if (rowspanCount > 2) { | |||
hasTooManyRowspan = true; | |||
return; | |||
} | |||
const hasValidRowspanEdge = cells.some((cell, index) => | |||
cell.hasAttribute('rowspan') && cell.getAttribute('rowspan') !== '1' && (index === 0 || index === cells.length - 1) | |||
); | |||
if (!hasValidRowspanEdge && cells.some((cell, index) => | |||
cell.hasAttribute('rowspan') && cell.getAttribute('rowspan') !== '1' && index > 0 && index < cells.length - 1 | |||
)) { | |||
hasInvalidRowspan = true; | |||
} | |||
}); | |||
if (hasTooManyRowspan || hasInvalidRowspan) return; | |||
topLevelRows.forEach(row => { | |||
const cells = Array.from(row.querySelectorAll('td, th')); | |||
const originalStyles = cells.map(cell => ({ | |||
backgroundColor: getComputedStyle(cell).backgroundColor, | |||
color: getComputedStyle(cell).color | |||
})); | |||
cells.forEach((cell, index) => { | |||
if (cell.hasAttribute('rowspan') && cell.getAttribute('rowspan') !== '1') return; | |||
cell.addEventListener('mouseover', () => { | |||
cells.forEach((innerCell, innerIndex) => { | |||
if (!innerCell.hasAttribute('rowspan') || innerCell.getAttribute('rowspan') === '1') { | |||
innerCell.style.backgroundColor = brightenColor(originalStyles[innerIndex].backgroundColor, 1.035); | |||
innerCell.style.color = brightenColor(originalStyles[innerIndex].color, 1.035); | |||
} | |||
}); | |||
}); | |||
cell.addEventListener('mouseout', () => { | |||
cells.forEach((innerCell, innerIndex) => { | |||
if (!innerCell.hasAttribute('rowspan') || innerCell.getAttribute('rowspan') === '1') { | |||
innerCell.style.backgroundColor = originalStyles[innerIndex].backgroundColor; | |||
innerCell.style.color = originalStyles[innerIndex].color; | |||
} | |||
}); | |||
}); | |||
}); | |||
}); | |||
}); | |||
} | |||
$(document).ready(function() { | $(document).ready(function() { | ||
var serversStatus = document.querySelectorAll('.serversStatus'); | var serversStatus = document.querySelectorAll('.serversStatus'); | ||
| Строка 325: | Строка 420: | ||
} | } | ||
} | } | ||
applyHighlighting(); | |||
}); | }); | ||
/*WikiEditor/Викификатор*/ | /*WikiEditor/Викификатор*/ | ||