Dc12d13: Diferență între versiuni
[versiune verificată] | [versiune verificată] |
m |
m |
||
Linia 1: | Linia 1: | ||
− | + | (function () { | |
− | + | mw.hook('wikipage.content').add(function() { | |
− | + | var selectedMonster = null; | |
− | + | var selectedCategory = 'Weapondrops'; | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | function showLoot(monster, category) { | |
− | + | var lootList = document.getElementById('loot-list'); | |
− | + | if (!lootList) return; | |
− | + | lootList.innerHTML = ''; | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | var apiUrl = 'https://ro-wiki.metin2.gameforge.com/api.php?action=parse&page=' + encodeURIComponent(monster) + '&prop=wikitext&format=json&origin=*'; | |
− | + | ||
− | + | fetch(apiUrl) | |
− | + | .then(function(response) { | |
− | + | if (!response.ok) { | |
− | + | throw new Error('Network response was not ok: ' + response.statusText); | |
− | + | } | |
− | + | return response.json(); | |
− | + | }) | |
+ | .then(function(data) { | ||
+ | if (data.parse && data.parse.wikitext) { | ||
+ | var wikitext = data.parse.wikitext['*']; | ||
+ | var drops = { | ||
+ | Weapondrops: [], | ||
+ | Armordrops: [], | ||
+ | Otherdrops: [] | ||
+ | }; | ||
+ | |||
+ | ['Weapondrops', 'Armordrops', 'Otherdrops'].forEach(function(dropType) { | ||
+ | var regex = new RegExp('\\|' + dropType + '\\s*=([\\s\\S]*?)(?=(\\n\\|\\w+\\s*=|$))', 'i'); | ||
+ | var match = wikitext.match(regex); | ||
+ | if (match && match[1].trim()) { | ||
+ | var items = match[1].trim().split(/\n\s*[:*]\s*/); | ||
+ | drops[dropType] = items.map(function(item) { | ||
+ | var textMatch = item.match(/\{\{Ti\|[^}]+\}\}/); | ||
+ | if (textMatch) { | ||
+ | var linkTextMatch = textMatch[0].match(/\|\s*([^|}]+)\s*\}\}/); | ||
+ | if (linkTextMatch) { | ||
+ | return linkTextMatch[1].trim(); | ||
+ | } | ||
+ | } | ||
+ | return null; | ||
+ | }).filter(Boolean); | ||
+ | } | ||
+ | }); | ||
+ | |||
+ | var itemsToDisplay = drops[category] || []; | ||
+ | |||
+ | itemsToDisplay.forEach(function(item) { | ||
+ | var li = document.createElement('li'); | ||
+ | li.classList.add('loot-list-item'); | ||
+ | var link = document.createElement('a'); | ||
+ | link.textContent = item; | ||
+ | link.href = 'https://ro-wiki.metin2.gameforge.com/index.php/' + encodeURIComponent(item); | ||
+ | link.target = '_blank'; | ||
+ | link.style.color = 'white'; | ||
+ | |||
+ | li.appendChild(link); | ||
+ | lootList.appendChild(li); | ||
+ | }); | ||
+ | |||
+ | if (lootList.children.length === 0) { | ||
+ | var li = document.createElement('li'); | ||
+ | li.textContent = 'Nu am gasit nimic pentru aceasta categorie.'; | ||
+ | li.classList.add('loot-list-item'); | ||
+ | lootList.appendChild(li); | ||
+ | } | ||
+ | } else { | ||
+ | console.error('Unexpected data format:', data); | ||
+ | } | ||
+ | }) | ||
+ | } | ||
+ | |||
+ | function updateHighlighting() { | ||
+ | var monsterItems = document.querySelectorAll('#monster-list li'); | ||
+ | monsterItems.forEach(function(item) { | ||
+ | item.classList.remove('highlighted'); | ||
+ | if (item.getAttribute('data-monster') === selectedMonster) { | ||
+ | item.classList.add('highlighted'); | ||
+ | } | ||
+ | }); | ||
+ | |||
+ | var categoryItems = document.querySelectorAll('#category-list li'); | ||
+ | categoryItems.forEach(function(item) { | ||
+ | item.classList.remove('highlighted'); | ||
+ | if (item.getAttribute('data-category') === selectedCategory) { | ||
+ | item.classList.add('highlighted'); | ||
+ | } | ||
+ | }); | ||
+ | } | ||
+ | |||
+ | var monsterItems = document.querySelectorAll('#monster-list li'); | ||
+ | monsterItems.forEach(function(item) { | ||
+ | item.addEventListener('click', function() { | ||
+ | selectedMonster = item.getAttribute('data-monster'); | ||
+ | selectedCategory = 'Weapondrops'; | ||
+ | showLoot(selectedMonster, selectedCategory); | ||
+ | updateHighlighting(); | ||
+ | }); | ||
+ | }); | ||
+ | |||
+ | var categoryItems = document.querySelectorAll('#category-list li'); | ||
+ | categoryItems.forEach(function(item) { | ||
+ | item.addEventListener('click', function() { | ||
+ | selectedCategory = item.getAttribute('data-category'); | ||
+ | |||
+ | categoryItems.forEach(function(catItem) { | ||
+ | catItem.classList.remove('highlighted'); | ||
+ | }); | ||
+ | |||
+ | item.classList.add('highlighted'); | ||
+ | |||
+ | if (selectedMonster) { | ||
+ | showLoot(selectedMonster, selectedCategory); | ||
+ | } | ||
+ | updateHighlighting(); | ||
+ | }); | ||
+ | }); | ||
+ | |||
+ | if (monsterItems.length > 0) { | ||
+ | selectedMonster = monsterItems[0].getAttribute('data-monster'); | ||
+ | showLoot(selectedMonster, selectedCategory); | ||
+ | updateHighlighting(); | ||
+ | } | ||
+ | }); | ||
+ | })(); |
Versiunea de la data 22 august 2024 19:34
(function () {
mw.hook('wikipage.content').add(function() { var selectedMonster = null; var selectedCategory = 'Weapondrops';
function showLoot(monster, category) { var lootList = document.getElementById('loot-list'); if (!lootList) return; lootList.innerHTML = ;
var apiUrl = 'https://ro-wiki.metin2.gameforge.com/api.php?action=parse&page=' + encodeURIComponent(monster) + '&prop=wikitext&format=json&origin=*';
fetch(apiUrl) .then(function(response) { if (!response.ok) { throw new Error('Network response was not ok: ' + response.statusText); } return response.json(); }) .then(function(data) { if (data.parse && data.parse.wikitext) { var wikitext = data.parse.wikitext['*']; var drops = { Weapondrops: [], Armordrops: [], Otherdrops: [] };
['Weapondrops', 'Armordrops', 'Otherdrops'].forEach(function(dropType) { var regex = new RegExp('\\|' + dropType + '\\s*=([\\s\\S]*?)(?=(\\n\\|\\w+\\s*=|$))', 'i'); var match = wikitext.match(regex); if (match && match[1].trim()) { var items = match[1].trim().split(/\n\s*[:*]\s*/); drops[dropType] = items.map(function(item) { var textMatch = item.match(/\{\{Ti\|[^}]+\}\}/); if (textMatch) { var linkTextMatch = textMatch[0].match(/\|\s*([^|}]+)\s*\}\}/); if (linkTextMatch) { return linkTextMatch[1].trim(); } } return null; }).filter(Boolean); } });
var itemsToDisplay = drops[category] || [];
itemsToDisplay.forEach(function(item) { var li = document.createElement('li'); li.classList.add('loot-list-item'); var link = document.createElement('a'); link.textContent = item; link.href = 'https://ro-wiki.metin2.gameforge.com/index.php/' + encodeURIComponent(item); link.target = '_blank'; link.style.color = 'white';
li.appendChild(link); lootList.appendChild(li); });
if (lootList.children.length === 0) { var li = document.createElement('li'); li.textContent = 'Nu am gasit nimic pentru aceasta categorie.'; li.classList.add('loot-list-item'); lootList.appendChild(li); } } else { console.error('Unexpected data format:', data); } }) }
function updateHighlighting() { var monsterItems = document.querySelectorAll('#monster-list li'); monsterItems.forEach(function(item) { item.classList.remove('highlighted'); if (item.getAttribute('data-monster') === selectedMonster) { item.classList.add('highlighted'); } });
var categoryItems = document.querySelectorAll('#category-list li'); categoryItems.forEach(function(item) { item.classList.remove('highlighted'); if (item.getAttribute('data-category') === selectedCategory) { item.classList.add('highlighted'); } }); }
var monsterItems = document.querySelectorAll('#monster-list li'); monsterItems.forEach(function(item) { item.addEventListener('click', function() { selectedMonster = item.getAttribute('data-monster'); selectedCategory = 'Weapondrops'; showLoot(selectedMonster, selectedCategory); updateHighlighting(); }); });
var categoryItems = document.querySelectorAll('#category-list li'); categoryItems.forEach(function(item) { item.addEventListener('click', function() { selectedCategory = item.getAttribute('data-category');
categoryItems.forEach(function(catItem) { catItem.classList.remove('highlighted'); });
item.classList.add('highlighted'); if (selectedMonster) { showLoot(selectedMonster, selectedCategory); } updateHighlighting(); }); });
if (monsterItems.length > 0) { selectedMonster = monsterItems[0].getAttribute('data-monster'); showLoot(selectedMonster, selectedCategory); updateHighlighting(); } });
})();