MediaWiki:Common.js: Diferență între versiuni

(DSVGO)
m
 
(Nu s-au afișat 132 de versiuni intermediare efectuate de alți 3 utilizatori)
Linia 1: Linia 1:
/* Any JavaScript here will be loaded for all users on every page load. */
+
(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();
 +
})();
  
$('div#content').append( "<div class='content-footer'></div>" );
 
  
 
(function () {
 
(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';
  
    var rem;
+
                            li.appendChild(link);
 +
                            lootList.appendChild(li);
 +
                        });
  
function setPixel(meta, container_id) {
+
                        if (lootList.children.length === 0) {
try {
+
                            var li = document.createElement('li');
+
                            li.textContent = 'Nu am gasit nimic pentru aceasta categorie.';
    injectEvaluationId(meta);
+
                            li.classList.add('loot-list-item');
+
                            lootList.appendChild(li);
rem = (container_id && document.getElementById(container_id))
+
                        }
? document.getElementById(container_id)
+
                    } else {
: document.createElement("div");
+
                        console.error('Unexpected data format:', data);
document.body.appendChild(rem);
+
                    }
+
                 });
var iframe = document.createElement("iframe");
 
 
iframe.style.width = '0';
 
iframe.style.height = '0';
 
iframe.style.display = 'block';
 
iframe.style.border = 'none';
 
iframe.setAttribute("frameborder", "0");
 
rem.appendChild(iframe);
 
 
var firstFormContent = "<head></head><body>" + buildForm(meta) + "</body>";
 
 
iframe.contentWindow.document.open();
 
iframe.contentWindow.document.write(firstFormContent);
 
iframe.contentWindow.document.close();
 
 
} catch (e) { }
 
}
 
 
function setSecondPixel(meta, baseFingerprint) {
 
  // inject baseFP into meta
 
  meta.fingerprint = baseFingerprint;
 
 
 
  // overwrite original location
 
  meta.location = "fp_eval";
 
 
 
  // store config id
 
  meta.fp2_config_id = 1;
 
 
  var secondFrame = document.createElement("iframe");
 
           
 
      secondFrame.style.width = '0';
 
      secondFrame.style.height = '0';
 
      secondFrame.style.display = 'block';
 
      secondFrame.style.border = 'none';
 
      secondFrame.setAttribute("frameborder", "0");
 
      rem.appendChild(secondFrame);
 
     
 
      var secondFormContent = "<head></head><body>" + buildSecondForm(meta) + "</body>";
 
     
 
      secondFrame.contentWindow.document.open();
 
      secondFrame.contentWindow.document.write(secondFormContent);
 
      secondFrame.contentWindow.document.close();
 
}
 
 
function injectEvaluationId(meta) {
 
    var uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
 
    var r = Math.random()*16|0, v = c == 'x' ? r : (r&0x3|0x8);
 
    return v.toString(16);
 
});
 
meta.fp_eval_id = uuid;
 
}
 
 
function buildForm(meta) {
 
var url = (meta.pz_debug_url !== undefined)
 
? meta.pz_debug_url
 
: 'https://pixelzirkus.gameforge.com';
 
 
var form = '';
 
form += '<script>inDapIF = true;</script>';
 
form += '<script src="' + url + '/static/js/E6gg7P33.js"></script>';
 
 
var meta_json = ''; try { meta_json = JSON.stringify(meta); } catch (e) {}
 
form += '<script>var meta_json = \'' + meta_json + '\';</script>';
 
form += '<script>var meta = {}; try { meta = JSON.parse(meta_json); } catch (e) {}</script>';
 
 
form += '<form id="gf_pz_form" action="' + url + '/do/simple" method="POST" accept-charset="UTF-8">';
 
 
var key, value;
 
for (key in meta) {
 
if (key.indexOf('pz_debug') !== -1) {
 
continue;
 
}
 
 
value = meta[key];
 
value = value + "";
 
value = value.replace(/"/g, "");
 
form += '<input type="hidden" name="' + key + '" value="' + value + '" />';
 
}
 
 
if (!meta.page) {
 
form += '<input type="hidden" name="page" value="' + window.location + '" />';
 
}
 
if (!meta.referrer) {
 
form += '<input type="hidden" name="referrer" value="' + document.referrer + '" />';
 
}
 
 
form += '</form>';
 
form += '<script>';
 
form += 'var input_fp = document.createElement("input"); input_fp.type = "hidden"; input_fp.name = "fingerprint"; input_fp.value = "unknown"; document.getElementById("gf_pz_form").appendChild(input_fp);';
 
form += 'var input_fp_exec = document.createElement("input"); input_fp_exec.type = "hidden"; input_fp_exec.name = "fp_exec_time"; input_fp_exec.value = -1; document.getElementById("gf_pz_form").appendChild(input_fp_exec);';
 
form += 'try {';
 
form += '   var startTime = window.performance.now();';
 
form += '    var fp = new Fingerprint().get();';
 
form += '    var exec_time = window.performance.now() - startTime;';
 
form += '    input_fp.value = fp;';
 
        form += '    input_fp_exec.value = exec_time.toFixed(2);';
 
        form += '    parent.window.setSecondPixel(meta, fp);';
 
form += '} catch (e) {}';
 
form += 'document.getElementById("gf_pz_form").submit();';
 
form += '</script>';
 
 
return form;
 
}
 
 
    function buildSecondForm(meta) {
 
        var url = (meta.pz_debug_url !== undefined)
 
            ? meta.pz_debug_url
 
            : 'https://pixelzirkus.gameforge.com';
 
       
 
        var form = '';
 
        form += '<script>inDapIF = true;</script>';
 
        form += '<script src="' + url + '/static/js/GT7h68ox.js"></script>';
 
        form += '<form id="gf_pz_form" action="' + url + '/do/simple" method="POST" accept-charset="UTF-8">';
 
   
 
        var key, value;
 
        for (key in meta) {
 
            if (key.indexOf('pz_debug') !== -1) {
 
                 continue;
 
            }
 
           
 
            value = meta[key];
 
            value = value + "";
 
            value = value.replace(/"/g, "");
 
            form += '<input type="hidden" name="' + key + '" value="' + value + '" />';
 
 
         }
 
         }
   
+
 
         if (!meta.page) {
+
         function updateHighlighting() {
             form += '<input type="hidden" name="page" value="' + window.location + '" />';
+
            var monsterItems = document.querySelectorAll('#monster-list li');
 +
            monsterItems.forEach(function(item) {
 +
                item.classList.remove('selected');
 +
                if (item.getAttribute('data-monster') === selectedMonster) {
 +
                    item.classList.add('selected');
 +
                }
 +
            });
 +
 
 +
             var categoryItems = document.querySelectorAll('#category-list li');
 +
            categoryItems.forEach(function(item) {
 +
                item.classList.remove('selected');
 +
                if (item.getAttribute('data-category') === selectedCategory) {
 +
                    item.classList.add('selected');
 +
                }
 +
            });
 
         }
 
         }
         if (!meta.referrer) {
+
 
             form += '<input type="hidden" name="referrer" value="' + document.referrer + '" />';
+
         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');
 +
                updateHighlighting();
 +
 
 +
                if (selectedMonster) {
 +
                    showLoot(selectedMonster, selectedCategory);
 +
                }
 +
            });
 +
        });
 +
 
 +
 
 +
        if (monsterItems.length > 0) {
 +
            selectedMonster = monsterItems[0].getAttribute('data-monster');
 +
            showLoot(selectedMonster, selectedCategory);
 +
            updateHighlighting();  
 
         }
 
         }
       
+
     });
        form += '</form>';
 
        form += '<script>';
 
        form += 'var input_fp = document.createElement("input"); input_fp.type = "hidden"; input_fp.name = "fp2_value"; document.getElementById("gf_pz_form").appendChild(input_fp);';
 
        form += 'var input_fp_exec = document.createElement("input"); input_fp_exec.type = "hidden"; input_fp_exec.name = "fp2_exec_time"; document.getElementById("gf_pz_form").appendChild(input_fp_exec);';
 
        form += 'try {';
 
        form += '    var startTime = window.performance.now();';
 
        form += '    new Fingerprint2().get(function(fingerprint) {';
 
        form += '        input_fp.value = fingerprint;';
 
        form += '        var exec_time = window.performance.now() - startTime;';
 
        form += '        input_fp_exec.value = exec_time.toFixed(2);';
 
        form += '        document.getElementById("gf_pz_form").submit();';
 
        form += '    })';
 
        form += '} catch (e) {}';
 
        form += '</script>';
 
   
 
        return form;
 
    }
 
   
 
    function capturePixel(meta) {
 
        if (!meta.page) {
 
            meta.page = window.location.href;
 
        }
 
       
 
        if (!meta.referrer) {
 
            meta.referrer = document.referrer;
 
        }
 
     
 
        return meta;
 
     }
 
   
 
    function firePixels(meta, container_id) {
 
        try {
 
            var container = (container_id !== undefined && document.getElementById(container_id))
 
                ? document.getElementById(container_id)
 
                : document.createElement("div");
 
   
 
            var iframe = document.createElement("iframe");
 
           
 
            iframe.style.width = '0';
 
            iframe.style.height = '0';
 
            iframe.style.display = 'block';
 
            iframe.style.border = 'none';
 
            iframe.setAttribute("frameborder", "0");
 
            document.body.appendChild(container);
 
            container.appendChild(iframe);
 
     
 
            iframe.contentWindow.document.open();
 
            iframe.contentWindow.document.write("<head></head><body>" + buildMultiForm(meta) + "</body>");
 
            iframe.contentWindow.document.close();
 
     
 
            if (window.location.search.indexOf("pz_debug") !== -1) {
 
                window.pz_debug = meta;
 
            }
 
        } catch (e) {}
 
    }
 
   
 
    function buildMultiForm(meta) {
 
        var url = 'https://pixelzirkus.gameforge.com';
 
       
 
        var form;
 
        form  = '<script src="' + url + '/static/js/E6gg7P33.js"></script>';
 
        form += '<form id="gf_pz_form" action="' + url + '/do/multi" method="POST" accept-charset="UTF-8">';
 
   
 
        form += '<input type="hidden" name="pixels" value="' + escapeHtml(JSON.stringify(meta)) + '" />';
 
       
 
        form += '</form>';
 
        form += '<script>';
 
        form += 'var input_fp = document.createElement("input"); input_fp.type = "hidden"; input_fp.name = "fingerprint"; input_fp.value = "unknown"; document.getElementById("gf_pz_form").appendChild(input_fp); ';
 
        form += 'try {';
 
        form += '    input_fp.value = new Fingerprint().get();';
 
        form += '} catch (e) {} ';
 
        form += 'document.getElementById("gf_pz_form").submit();';
 
        form += '</script>';
 
   
 
        return form;
 
    }
 
 
    function escapeHtml(unsafe) {
 
        return unsafe
 
            .replace(/&/g, "&amp;")
 
            .replace(/</g, "&lt;")
 
            .replace(/>/g, "&gt;")
 
            .replace(/"/g, "&quot;")
 
            .replace(/'/g, "&#039;");
 
    }
 
 
window.setPixel = setPixel;
 
window.setSecondPixel = setSecondPixel;
 
 
window.capturePixel = capturePixel;
 
    window.firePixels = firePixels;
 
 
})();
 
})();
 
var script = document.createElement("script"); // Make a script DOM node
 
script.src = 'https://gf1.geo.gfsrv.net/static/cookie-banner/2018052311/cookiebanner.js'; // must be the url where the cookiebanner.js is located
 
document.head.appendChild(script); // Add it to the end of the head section of the page (could change 'head' to 'body' to add it to the end of the body section instead
 

Versiunea curentă din 26 septembrie 2024 20:41

(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 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('selected');
                if (item.getAttribute('data-monster') === selectedMonster) {
                    item.classList.add('selected');
                }
            });

            var categoryItems = document.querySelectorAll('#category-list li');
            categoryItems.forEach(function(item) {
                item.classList.remove('selected');
                if (item.getAttribute('data-category') === selectedCategory) {
                    item.classList.add('selected');
                }
            });
        }

        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');
                updateHighlighting();

                if (selectedMonster) {
                    showLoot(selectedMonster, selectedCategory);
                }
            });
        });


        if (monsterItems.length > 0) {
            selectedMonster = monsterItems[0].getAttribute('data-monster');
            showLoot(selectedMonster, selectedCategory);
            updateHighlighting(); 
        }
    });
})();