MediaWiki:Common.js: Diferență între versiuni
m |
m |
||
| Linia 22: | Linia 22: | ||
var selectedCategory = 'Weapondrops'; | var selectedCategory = 'Weapondrops'; | ||
| − | function | + | function extractItems(wikitext, category) { |
| − | var | + | var drops = []; |
| − | + | var regex = new RegExp('\\|' + category + '\\s*=\\s*([\\s\\S]*?)(?=\\n\\|[a-zA-Z]+\\s*=|$)', 'i'); | |
| − | + | var match = wikitext.match(regex); | |
| − | + | ||
| − | + | if (match) { | |
| − | + | var itemsString = match[1].trim(); | |
| − | + | var itemLines = itemsString.split(/\n\s*:\*/).filter(Boolean); | |
| − | } | + | |
| + | itemLines.forEach(function(line) { | ||
| + | var itemMatch = line.match(/\|\s*[^}]*\|([^}]+)\}\}/); | ||
| + | if (itemMatch) { | ||
| + | drops.push(itemMatch[1].trim()); | ||
| + | } | ||
| + | }); | ||
| + | } | ||
| + | return drops; | ||
} | } | ||
| Linia 57: | Linia 65: | ||
['Weapondrops', 'Armordrops', 'Otherdrops'].forEach(function(dropType) { | ['Weapondrops', 'Armordrops', 'Otherdrops'].forEach(function(dropType) { | ||
| − | + | drops[dropType] = extractItems(wikitext, dropType); | |
| − | |||
| − | |||
| − | |||
| − | |||
}); | }); | ||
Versiunea de la data 22 august 2024 12:53
(function () {
// Load GDPR Cookie Script
var req = new XMLHttpRequest();
req.addEventListener('load', function (ev) {
if (this.status >= 200 && this.status < 300) {
var data = JSON.parse(this.responseText);
if (data.hasOwnProperty('version')) {
var gdpr = document.createElement("script");
gdpr.src = "https://s3-static.geo.gfsrv.net/cookiebanner/" + data.version + "/cookie.min.js";
document.head.appendChild(gdpr);
}
}
});
req.open('GET', "https://s3-static.geo.gfsrv.net/cookiebanner/version.json");
req.send();
})();
(function () {
mw.hook('wikipage.content').add(function() {
var selectedMonster = null;
var selectedCategory = 'Weapondrops';
function extractItems(wikitext, category) {
var drops = [];
var regex = new RegExp('\\|' + category + '\\s*=\\s*([\\s\\S]*?)(?=\\n\\|[a-zA-Z]+\\s*=|$)', 'i');
var match = wikitext.match(regex);
if (match) {
var itemsString = match[1].trim();
var itemLines = itemsString.split(/\n\s*:\*/).filter(Boolean);
itemLines.forEach(function(line) {
var itemMatch = line.match(/\|\s*[^}]*\|([^}]+)\}\}/);
if (itemMatch) {
drops.push(itemMatch[1].trim());
}
});
}
return drops;
}
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) {
drops[dropType] = extractItems(wikitext, dropType);
});
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 = 'No items found';
li.classList.add('loot-list-item');
lootList.appendChild(li);
}
} else {
console.error('Unexpected data format:', data);
}
})
}
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);
});
});
var categoryItems = document.querySelectorAll('#category-list li');
categoryItems.forEach(function(item) {
item.addEventListener('click', function() {
categoryItems.forEach(function(catItem) {
catItem.classList.remove('active');
});
item.classList.add('active');
selectedCategory = item.getAttribute('data-category');
if (selectedMonster) {
showLoot(selectedMonster, selectedCategory);
}
});
});
if (monsterItems.length > 0) {
selectedMonster = monsterItems[0].getAttribute('data-monster');
showLoot(selectedMonster, selectedCategory);
}
});
})();