„MediaWiki:Common.js” változatai közötti eltérés
Megjelenés
Nincs szerkesztési összefoglaló |
Nincs szerkesztési összefoglaló |
||
| (8 közbenső módosítás ugyanattól a felhasználótól nincs mutatva) | |||
| 1. sor: | 1. sor: | ||
/* LightGallery | /* LightGallery + Commons API Integráció */ | ||
(function() { | (function() { | ||
// | // Csak akkor fusson, ha van galéria az oldalon | ||
if ($('.wiki-dynamic-gallery').length === 0) return; | |||
// Erőforrások betöltése mw.loader-rel | |||
mw.loader.addStyleTag('@import "https://cdn.jsdelivr.net/npm/lightgallery@2.4.0/css/lightgallery-bundle.min.css";'); | |||
$.getScript('https://cdn.jsdelivr.net/npm/lightgallery@2.4.0/lightgallery.umd.min.js') | |||
function | .done(function() { | ||
console.log('LightGallery 2.4.0 inicializálva.'); | |||
initWikiDynamicGallery(); | |||
}); | |||
function initWikiDynamicGallery() { | |||
$('.wiki-dynamic-gallery').each(function() { | |||
var $container = $(this); | |||
if ($container.data('initialized')) return; | |||
$container.data('initialized', true); | |||
var searchTerm = $container.data('search'); | |||
var limit = $container.data('limit') || 3; | |||
var targetHeight = 200; | |||
var apiUrl = "https://commons.wikimedia.org/w/api.php?action=query&format=json&generator=search&gsrsearch=File:" + | |||
encodeURIComponent(searchTerm) + "&gsrlimit=" + limit + | |||
"&prop=imageinfo&iiprop=url|size&iiurlheight=" + targetHeight + "&origin=*"; | |||
$.getJSON(apiUrl, function(data) { | |||
if (data && data.query && data.query.pages) { | |||
var pages = data.query.pages; | |||
var galleryHtml = ''; | |||
for (var id in pages) { | |||
if (!pages[id].imageinfo) continue; | |||
var img = pages[id].imageinfo[0]; | |||
var title = pages[id].title.replace('File:', ''); | |||
// | galleryHtml += '<a href="' + img.url + '" class="lg-item" data-src="' + img.url + '" data-sub-html="<h4>' + title + '</h4>">'; | ||
galleryHtml += ' <img src="' + img.thumburl + '" style="height:' + targetHeight + 'px; width:auto; margin:5px; border-radius:6px; cursor:pointer;" alt="' + title + '" />'; | |||
galleryHtml += '</a>'; | |||
} | |||
$container.html(galleryHtml); | |||
if (window.lightGallery) { | |||
lightGallery($container[0], { | |||
selector: '.lg-item', | |||
licenseKey: '0000-0000-000-0000' | |||
}); | |||
} | |||
} | } | ||
} | } | ||
}); | }); | ||
}); | }); | ||
} | } | ||
})(); | })(); | ||
| 118. sor: | 100. sor: | ||
padding: '10px 15px', | padding: '10px 15px', | ||
'font-size': '14px', | 'font-size': '14px', | ||
'background-color': '# | 'background-color': '#888446ff', | ||
color: 'white', | color: 'white', | ||
border: 'none', | border: 'none', | ||
| 159. sor: | 141. sor: | ||
padding: '10px 15px', | padding: '10px 15px', | ||
'font-size': '14px', | 'font-size': '14px', | ||
'background-color': '# | 'background-color': '#547454ff', | ||
color: 'white', | color: 'white', | ||
border: 'none', | border: 'none', | ||
| 195. sor: | 177. sor: | ||
*/ | */ | ||
mw.loader.using( ['jquery', 'mediawiki.util'] ).done( function () { | mw.loader.using( ['jquery', 'mediawiki.util'] ).done( function () { | ||
if ( $( '.datatable-hook' ).length > 0 ) { | if ( $( '.datatable-hook' ).length > 0 ) { | ||
// DataTables JS betöltése | // DataTables JS betöltése | ||
$.getScript( 'https://cdn.datatables.net/2.1.8/js/dataTables.min.js' ) | $.getScript( 'https://cdn.datatables.net/2.1.8/js/dataTables.min.js' ) | ||
.done( function() { | .done( function() { | ||
$( '.datatable-hook' ).each( function() { | $( '.datatable-hook' ).each( function() { | ||
var $table = $(this); | var $table = $(this); | ||
// 1. LÉPÉS: A MediaWiki hibás struktúrájának javítása | // 1. LÉPÉS: A MediaWiki hibás struktúrájának javítása | ||
// Megkeressük az első sort, amiben TH (fejléc) cellák vannak | // Megkeressük az első sort, amiben TH (fejléc) cellák vannak | ||
var $headerRow = $table.find( 'tr:has(th)' ).first(); | var $headerRow = $table.find( 'tr:has(th)' ).first(); | ||
if ( $headerRow.length > 0 ) { | if ( $headerRow.length > 0 ) { | ||
// Létrehozunk egy THEAD-et és belemozgatjuk a fejléc sort | // Létrehozunk egy THEAD-et és belemozgatjuk a fejléc sort | ||
| 215. sor: | 197. sor: | ||
$table.prepend( $thead ); | $table.prepend( $thead ); | ||
} | } | ||
// 2. LÉPÉS: Inicializálás a javított táblázaton | // 2. LÉPÉS: Inicializálás a javított táblázaton | ||
$table.DataTable({ | $table.DataTable({ | ||
| 232. sor: | 214. sor: | ||
}); | }); | ||
}); | }); | ||
}) | }) | ||
.fail( function() { | .fail( function() { | ||
| 238. sor: | 220. sor: | ||
}); | }); | ||
} | } | ||
}); | |||
mw.hook('wikipage.content').add(function () { | |||
// --- 0. LÉPÉS: BIZTONSÁGI SZŰRÉS (GUARD CLAUSE) --- | |||
// Csak akkor futunk tovább, ha az oldal ténylegesen a határozókulcsok közé tartozik. | |||
const aktualisKategoriak = mw.config.get('wgCategories') || []; | |||
if (!aktualisKategoriak.includes('Szukkulens növényhatározó kulcsok')) { | |||
return; | |||
} | |||
const regexKoztespont = /^Szukkulens határozó:/; | |||
// Megkeressük a MediaWiki fő tartalomgyűjtő divjét | |||
const bodyContent = document.getElementById('bodyContent'); | |||
// Ha az adott oldalon valamiért nem létezik a div, leállítjuk a futást, hogy ne legyen hiba | |||
if (!bodyContent) return; | |||
// --- ELSŐ LOGIKA: Köztes határozó oldalak linkjei (Nyíl beemeléssel) --- | |||
bodyContent.querySelectorAll('a').forEach(a => { | |||
const teljesNev = a.getAttribute('title') || ''; | |||
if (regexKoztespont.test(teljesNev)) { | |||
// Nem vágjuk le a "Szukkulens határozó:" részt, csak a piros linkek MediaWiki üzenetét | |||
let tisztaGombSzöveg = teljesNev.replace(/\s*\(a lap nem létezik\)$/, ''); | |||
a.innerHTML = ''; // Kiürítjük a link belsejét | |||
const arrowSpan = document.createElement('span'); | |||
arrowSpan.className = 'arrow-prefix'; | |||
arrowSpan.textContent = '→'; | |||
// Szóköz beszúrása a nyíl után külön textNode-ként | |||
const spaceNode = document.createTextNode(' '); | |||
const textNode = document.createTextNode(tisztaGombSzöveg); | |||
a.appendChild(arrowSpan); | |||
a.appendChild(spaceNode); | |||
a.appendChild(textNode); | |||
a.className = "new hatarozo-koztespont-btn"; | |||
let previousNode = a.previousSibling; | |||
if (previousNode && previousNode.nodeType === Node.TEXT_NODE) { | |||
previousNode.textContent = previousNode.textContent.replace(/[→\s\xA0→]+$/, ''); | |||
} | |||
} | |||
}); | |||
// --- MÁSODIK LOGIKA: Határozó kulcs valódi végpontjai (Példák kizárása) --- | |||
bodyContent.querySelectorAll('li').forEach(li => { | |||
const bendoLinkek = li.querySelectorAll('a[href*="/wiki/"]:not(.external)'); | |||
bendoLinkek.forEach(link => { | |||
const title = link.getAttribute('title') || ''; | |||
// Ha ez egy köztes pont, az első logika már elintézte, lépjünk tovább | |||
if (regexKoztespont.test(title) || link.classList.contains('hatarozo-koztespont-btn')) { | |||
return; | |||
} | |||
// Példafajok kiszűrése (zárójeles "Pl." részek) | |||
let vizsgaltNode = link.previousSibling; | |||
if (link.parentElement.tagName.toLowerCase() === 'i') { | |||
vizsgaltNode = link.parentElement.previousSibling; | |||
} | |||
let elotteLevoSzo = ""; | |||
if (vizsgaltNode && vizsgaltNode.nodeType === Node.TEXT_NODE) { | |||
elotteLevoSzo = vizsgaltNode.textContent; | |||
} | |||
// Ha nem példafaj, akkor ez egy igazi végpont (konkrét növény szócikk) | |||
if (!elotteLevoSzo.includes('Pl.') && !elotteLevoSzo.includes('(')) { | |||
if (!link.classList.contains('hatarozo-vegpont-btn')) { | |||
// Csak a szöveg ELEJÉRŐL és VÉGÉRŐL takarítjuk el a nyilakat/szóközöket, a közepét békén hagyjuk! | |||
const tisztaFajnev = link.textContent.replace(/^[→\s\xA0]+/, '').replace(/[→\s\xA0]+$/, '').trim() || title; | |||
link.innerHTML = `<span class="arrow-prefix">→ </span><span class="botanical-name">${tisztaFajnev}</span>`; | |||
link.classList.add("hatarozo-vegpont-btn"); | |||
if (link.parentElement.tagName.toLowerCase() === 'i') { | |||
link.parentElement.style.fontStyle = "normal"; | |||
} | |||
} | |||
if (vizsgaltNode && vizsgaltNode.nodeType === Node.TEXT_NODE) { | |||
vizsgaltNode.textContent = vizsgaltNode.textContent.replace(/[→\s\xA0→]+$/, ''); | |||
} | |||
} | |||
}); | |||
}); | |||
}); | }); | ||
A lap jelenlegi, 2026. május 25., 11:49-kori változata
/* LightGallery + Commons API Integráció */
(function() {
// Csak akkor fusson, ha van galéria az oldalon
if ($('.wiki-dynamic-gallery').length === 0) return;
// Erőforrások betöltése mw.loader-rel
mw.loader.addStyleTag('@import "https://cdn.jsdelivr.net/npm/lightgallery@2.4.0/css/lightgallery-bundle.min.css";');
$.getScript('https://cdn.jsdelivr.net/npm/lightgallery@2.4.0/lightgallery.umd.min.js')
.done(function() {
console.log('LightGallery 2.4.0 inicializálva.');
initWikiDynamicGallery();
});
function initWikiDynamicGallery() {
$('.wiki-dynamic-gallery').each(function() {
var $container = $(this);
if ($container.data('initialized')) return;
$container.data('initialized', true);
var searchTerm = $container.data('search');
var limit = $container.data('limit') || 3;
var targetHeight = 200;
var apiUrl = "https://commons.wikimedia.org/w/api.php?action=query&format=json&generator=search&gsrsearch=File:" +
encodeURIComponent(searchTerm) + "&gsrlimit=" + limit +
"&prop=imageinfo&iiprop=url|size&iiurlheight=" + targetHeight + "&origin=*";
$.getJSON(apiUrl, function(data) {
if (data && data.query && data.query.pages) {
var pages = data.query.pages;
var galleryHtml = '';
for (var id in pages) {
if (!pages[id].imageinfo) continue;
var img = pages[id].imageinfo[0];
var title = pages[id].title.replace('File:', '');
galleryHtml += '<a href="' + img.url + '" class="lg-item" data-src="' + img.url + '" data-sub-html="<h4>' + title + '</h4>">';
galleryHtml += ' <img src="' + img.thumburl + '" style="height:' + targetHeight + 'px; width:auto; margin:5px; border-radius:6px; cursor:pointer;" alt="' + title + '" />';
galleryHtml += '</a>';
}
$container.html(galleryHtml);
if (window.lightGallery) {
lightGallery($container[0], {
selector: '.lg-item',
licenseKey: '0000-0000-000-0000'
});
}
}
});
});
}
})();
// Bootstrap Icons betöltése
var link = document.createElement("link");
link.rel = "stylesheet";
//link.href = "https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.3/font/bootstrap-icons.css";
link.href = "https://cdn.jsdelivr.net/npm/bootstrap-icons@1.13.1/font/bootstrap-icons.min.css";
document.head.appendChild(link);
/* Az ide elhelyezett JavaScript kód minden felhasználó számára lefut az oldalak betöltésekor. */
// Fülek elrejtése anonim felhasználók számára
if (mw.config.get('wgUserName') === null) {
var hideTabs = function () {
var el1 = document.querySelector('#ca-history');
var el2 = document.querySelector('#ca-viewsource');
if (el1) el1.style.display = 'none';
if (el2) el2.style.display = 'none';
// Ha mindkét elem megtalálható, leállítjuk az ismétlést
if (el1 || el2) clearInterval(observer);
};
// 100ms-onként ellenőrizzük, hogy megjelentek-e a fülek
var observer = setInterval(hideTabs, 100);
}
/* MediaWikiben az alapértelmezett viselkedés az, hogy a külső hivatkozások (pl. [https://példa.hu link szövege]) ugyanazon a lapon nyílnak meg.
Ahhoz, hogy ezek új lapon nyíljanak meg:*/
$(function () {
$('a.external').attr('target', '_blank');
});
// Egy "Tetejére" gomb megjelenítése és kattintáskor scrollozás az oldal tetejére
$(function() {
// Létrehozzuk a gombot
var $btn = $('<button/>', {
//text: '⬆ Tetejére',
html: '<i class="bi bi-arrow-up-square"></i> Tetejére',
id: 'backToTopBtn',
title: 'Az oldal tetejére',
css: {
position: 'fixed',
bottom: '20px',
right: '20px',
padding: '10px 15px',
'font-size': '14px',
'background-color': '#888446ff',
color: 'white',
border: 'none',
'border-radius': '10px',
cursor: 'pointer',
display: 'none', // alapból rejtve
width: '100px',
'z-index': 1000
},
click: function() {
window.scrollTo({top: 0, behavior: 'smooth'});
}
});
// A body végére tesszük a gombot
$('body').append($btn);
// Megjelenítés, ha az oldal le van görgetve 100px-nél
$(window).scroll(function() {
if ($(window).scrollTop() > 100) {
$btn.fadeIn();
} else {
$btn.fadeOut();
}
});
});
// Egy "Vissza" gomb megjelenítése, ami az előző oldalra mutat
$(function() {
// Vissza gomb létrehozása
var $backBtn = $('<button/>', {
// text: '⬅ Vissza',
html: '<i class="bi bi-arrow-left-square"></i> Vissza',
id: 'backBtn',
title: 'Előző oldal',
css: {
position: 'fixed',
bottom: '60px', // a "Tetejére" gomb fölé kerül
right: '20px',
padding: '10px 15px',
'font-size': '14px',
'background-color': '#547454ff',
color: 'white',
border: 'none',
'border-radius': '10px',
cursor: 'pointer',
display: 'none',
width: '100px',
'z-index': 1000
},
click: function() {
window.history.back();
}
});
// Hozzáadás a DOM-hoz
$('body').append($backBtn);
// Megjelenítés görgetés után
$(window).scroll(function() {
if ($(window).scrollTop() > 100) {
$backBtn.fadeIn();
} else {
$backBtn.fadeOut();
}
});
});
/* Taxobox ikonok megnyitása új lapon */
$(document).ready(function() {
$('.taxobox-icons a').attr('target', '_blank');
});
/**
* DataTables 2.1.8 integráció - MediaWiki javított verzió
*/
mw.loader.using( ['jquery', 'mediawiki.util'] ).done( function () {
if ( $( '.datatable-hook' ).length > 0 ) {
// DataTables JS betöltése
$.getScript( 'https://cdn.datatables.net/2.1.8/js/dataTables.min.js' )
.done( function() {
$( '.datatable-hook' ).each( function() {
var $table = $(this);
// 1. LÉPÉS: A MediaWiki hibás struktúrájának javítása
// Megkeressük az első sort, amiben TH (fejléc) cellák vannak
var $headerRow = $table.find( 'tr:has(th)' ).first();
if ( $headerRow.length > 0 ) {
// Létrehozunk egy THEAD-et és belemozgatjuk a fejléc sort
var $thead = $( '<thead></thead>' );
$headerRow.detach().appendTo( $thead );
$table.prepend( $thead );
}
// 2. LÉPÉS: Inicializálás a javított táblázaton
$table.DataTable({
language: {
url: '//cdn.datatables.net/plug-ins/2.1.8/i18n/hu.json'
},
layout: {
topStart: 'pageLength',
topEnd: 'search',
bottomStart: 'info',
bottomEnd: 'paging'
},
pageLength: 10,
// Biztonsági beállítás: ne álljon le hibával, ha mégis eltérés lenne
columnDefs: [ { targets: '_all', defaultContent: '' } ]
});
});
})
.fail( function() {
console.error( 'Hiba: Nem sikerült betölteni a DataTables szkriptet.' );
});
}
});
mw.hook('wikipage.content').add(function () {
// --- 0. LÉPÉS: BIZTONSÁGI SZŰRÉS (GUARD CLAUSE) ---
// Csak akkor futunk tovább, ha az oldal ténylegesen a határozókulcsok közé tartozik.
const aktualisKategoriak = mw.config.get('wgCategories') || [];
if (!aktualisKategoriak.includes('Szukkulens növényhatározó kulcsok')) {
return;
}
const regexKoztespont = /^Szukkulens határozó:/;
// Megkeressük a MediaWiki fő tartalomgyűjtő divjét
const bodyContent = document.getElementById('bodyContent');
// Ha az adott oldalon valamiért nem létezik a div, leállítjuk a futást, hogy ne legyen hiba
if (!bodyContent) return;
// --- ELSŐ LOGIKA: Köztes határozó oldalak linkjei (Nyíl beemeléssel) ---
bodyContent.querySelectorAll('a').forEach(a => {
const teljesNev = a.getAttribute('title') || '';
if (regexKoztespont.test(teljesNev)) {
// Nem vágjuk le a "Szukkulens határozó:" részt, csak a piros linkek MediaWiki üzenetét
let tisztaGombSzöveg = teljesNev.replace(/\s*\(a lap nem létezik\)$/, '');
a.innerHTML = ''; // Kiürítjük a link belsejét
const arrowSpan = document.createElement('span');
arrowSpan.className = 'arrow-prefix';
arrowSpan.textContent = '→';
// Szóköz beszúrása a nyíl után külön textNode-ként
const spaceNode = document.createTextNode(' ');
const textNode = document.createTextNode(tisztaGombSzöveg);
a.appendChild(arrowSpan);
a.appendChild(spaceNode);
a.appendChild(textNode);
a.className = "new hatarozo-koztespont-btn";
let previousNode = a.previousSibling;
if (previousNode && previousNode.nodeType === Node.TEXT_NODE) {
previousNode.textContent = previousNode.textContent.replace(/[→\s\xA0→]+$/, '');
}
}
});
// --- MÁSODIK LOGIKA: Határozó kulcs valódi végpontjai (Példák kizárása) ---
bodyContent.querySelectorAll('li').forEach(li => {
const bendoLinkek = li.querySelectorAll('a[href*="/wiki/"]:not(.external)');
bendoLinkek.forEach(link => {
const title = link.getAttribute('title') || '';
// Ha ez egy köztes pont, az első logika már elintézte, lépjünk tovább
if (regexKoztespont.test(title) || link.classList.contains('hatarozo-koztespont-btn')) {
return;
}
// Példafajok kiszűrése (zárójeles "Pl." részek)
let vizsgaltNode = link.previousSibling;
if (link.parentElement.tagName.toLowerCase() === 'i') {
vizsgaltNode = link.parentElement.previousSibling;
}
let elotteLevoSzo = "";
if (vizsgaltNode && vizsgaltNode.nodeType === Node.TEXT_NODE) {
elotteLevoSzo = vizsgaltNode.textContent;
}
// Ha nem példafaj, akkor ez egy igazi végpont (konkrét növény szócikk)
if (!elotteLevoSzo.includes('Pl.') && !elotteLevoSzo.includes('(')) {
if (!link.classList.contains('hatarozo-vegpont-btn')) {
// Csak a szöveg ELEJÉRŐL és VÉGÉRŐL takarítjuk el a nyilakat/szóközöket, a közepét békén hagyjuk!
const tisztaFajnev = link.textContent.replace(/^[→\s\xA0]+/, '').replace(/[→\s\xA0]+$/, '').trim() || title;
link.innerHTML = `<span class="arrow-prefix">→ </span><span class="botanical-name">${tisztaFajnev}</span>`;
link.classList.add("hatarozo-vegpont-btn");
if (link.parentElement.tagName.toLowerCase() === 'i') {
link.parentElement.style.fontStyle = "normal";
}
}
if (vizsgaltNode && vizsgaltNode.nodeType === Node.TEXT_NODE) {
vizsgaltNode.textContent = vizsgaltNode.textContent.replace(/[→\s\xA0→]+$/, '');
}
}
});
});
});