|
|
| Line 1: |
Line 1: |
| mw.loader.using('mediawiki.util', function () {
| | console.log("BW FINAL TEST STARTED"); |
|
| |
|
| if (mw.config.get('wgNamespaceNumber') !== 0) return;
| | window.addEventListener('load', function () { |
|
| |
|
| function injectSchema() { | | const script = document.createElement('script'); |
| | | script.type = 'application/ld+json'; |
| // Avoid duplicate injection
| | script.text = JSON.stringify({ |
| if (document.getElementById('bw-entity-schema')) return;
| | "@context": "https://schema.org", |
| | | "@type": "Organization", |
| const infobox = document.querySelector('table.infobox');
| | "name": "FINAL TEST ORGANIZATION" |
| if (!infobox) return;
| | }); |
| | |
| const metaDesc =
| |
| document.querySelector('meta[name="description"]')?.content || "";
| |
| | |
| const pageTitle = mw.config.get('wgTitle');
| |
| const pageUrl = location.href;
| |
| | |
| const text = infobox.innerText.toLowerCase();
| |
| let schema = null;
| |
| | |
| // COMPANY | |
| if (text.includes('industry') || text.includes('founded')) {
| |
| schema = {
| |
| "@context": "https://schema.org",
| |
| "@type": "Organization",
| |
| "name": pageTitle,
| |
| "url": pageUrl,
| |
| "description": metaDesc
| |
| };
| |
| | |
| const logo = infobox.querySelector('img')?.src;
| |
| if (logo) schema.logo = logo;
| |
| }
| |
| | |
| // PERSON | |
| else if (text.includes('born')) {
| |
| schema = {
| |
| "@context": "https://schema.org",
| |
| "@type": "Person",
| |
| "name": pageTitle,
| |
| "url": pageUrl,
| |
| "description": metaDesc
| |
| };
| |
| | |
| const image = infobox.querySelector('img')?.src;
| |
| if (image) schema.image = image;
| |
| }
| |
| | |
| if (!schema) return;
| |
| | |
| const script = document.createElement('script');
| |
| script.type = 'application/ld+json';
| |
| script.id = 'bw-entity-schema';
| |
| script.text = JSON.stringify(schema);
| |
| | |
| document.head.appendChild(script);
| |
| } | |
| | |
| // Watch for SEO plugin injecting Article schema
| |
| const observer = new MutationObserver(injectSchema);
| |
| observer.observe(document.head, { childList: true, subtree: true });
| |
| | |
| // Also try once after load
| |
| window.addEventListener('load', injectSchema);
| |
|
| |
|
| | document.body.appendChild(script); |
| }); | | }); |