MediaWiki:Common.js: Unterschied zwischen den Versionen
Admin (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
Admin (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
||
| Zeile 220: | Zeile 220: | ||
/* ADOS Whisky-Ratings – RatePage Frontend (ES5 | /* ADOS Whisky-Ratings – RatePage Frontend (ES5, Widgets + Stats + Summary, Doppel-Init-Schutz) */ | ||
mw.loader.using(['mediawiki.api', 'mediawiki.user']).then(function () { | mw.loader.using(['mediawiki.api', 'mediawiki.user']).then(function () { | ||
// -------- Hilfsfunktion ohne | // ---------- kleine Hilfsfunktion (ohne moderne Syntax) ---------- | ||
function get(obj, path) { | function get(obj, path) { | ||
var cur = obj, i; | var cur = obj, i; | ||
| Zeile 233: | Zeile 233: | ||
} | } | ||
// -------- Bootstrapping -------- | // ---------- Bootstrapping ---------- | ||
function boot(root) { | function boot(root) { | ||
var scope = root || document; | var scope = root || document; | ||
| Zeile 242: | Zeile 242: | ||
for (i = 0; i < nodes.length; i++) setupWidget(nodes[i]); | for (i = 0; i < nodes.length; i++) setupWidget(nodes[i]); | ||
// Meta-only | // Meta-only | ||
initMetaOnly(scope); | initMetaOnly(scope); | ||
| Zeile 256: | Zeile 256: | ||
} | } | ||
// | // Nachträglich geladene Inhalte (z. B. VE) | ||
mw.hook('wikipage.content').add(function($content){ | mw.hook('wikipage.content').add(function($content){ | ||
if ($content && $content[0]) boot($content[0]); | if ($content && $content[0]) boot($content[0]); | ||
}); | }); | ||
// -------- Interaktives Widget (Whiskygläser) -------- | // ---------- Interaktives Widget (Whiskygläser) ---------- | ||
function setupWidget(box) { | function setupWidget(box) { | ||
// Doppel-Init verhindern | |||
if (box.getAttribute('data-rating-init') === '1') return; | |||
box.setAttribute('data-rating-init', '1'); | |||
var pageId = mw.config.get('wgArticleId'); | var pageId = mw.config.get('wgArticleId'); | ||
var contest = box.dataset.ratepageContest || undefined; // "NASE" | "GESCHMACK" | "ABGANG" | var contest = box.dataset.ratepageContest || undefined; // "NASE" | "GESCHMACK" | "ABGANG" | ||
| Zeile 269: | Zeile 273: | ||
var widget = box.querySelector('.whisky-rating__widget'); | var widget = box.querySelector('.whisky-rating__widget'); | ||
var meta = box.querySelector('.whisky-rating__meta'); | var meta = box.querySelector('.whisky-rating__meta'); | ||
// vorhandene Buttons (falls vorhanden) entfernen | |||
while (widget.firstChild) widget.removeChild(widget.firstChild); | |||
var isAnon = mw.user.isAnon(); | var isAnon = mw.user.isAnon(); | ||
| Zeile 422: | Zeile 429: | ||
} | } | ||
// -------- Meta-only Ø-Ausgaben irgendwo im Text -------- | // ---------- Meta-only Ø-Ausgaben irgendwo im Text ---------- | ||
function initMetaOnly(scope) { | function initMetaOnly(scope) { | ||
var root = scope || document; | var root = scope || document; | ||
| Zeile 428: | Zeile 435: | ||
var i; | var i; | ||
for (i = 0; i < nodes.length; i++) (function(box){ | for (i = 0; i < nodes.length; i++) (function(box){ | ||
// Doppel-Init verhindern | |||
if (box.getAttribute('data-meta-init') === '1') return; | |||
box.setAttribute('data-meta-init', '1'); | |||
var pageId = parseInt(box.dataset.ratepagePageid || mw.config.get('wgArticleId'), 10); | var pageId = parseInt(box.dataset.ratepagePageid || mw.config.get('wgArticleId'), 10); | ||
var contest = box.dataset.ratepageContest || undefined; | var contest = box.dataset.ratepageContest || undefined; | ||
new mw.Api().get({ | new mw.Api().get({ | ||
action: 'query', | action: 'query', | ||
| Zeile 457: | Zeile 469: | ||
} | } | ||
// -------- Kompakte Übersichtstabelle inkl. "Gesamt" -------- | // ---------- Kompakte Übersichtstabelle inkl. "Gesamt" ---------- | ||
function renderSummary(container) { | function renderSummary(container) { | ||
// Doppel-Init verhindern | |||
if (container.getAttribute('data-summary-init') === '1') return; | |||
container.setAttribute('data-summary-init', '1'); | |||
var pageId = mw.config.get('wgArticleId'); | var pageId = mw.config.get('wgArticleId'); | ||
var raw = container.dataset.ratepageContests || 'NASE,GESCHMACK,ABGANG'; | var raw = container.dataset.ratepageContests || 'NASE,GESCHMACK,ABGANG'; | ||
| Zeile 512: | Zeile 528: | ||
return { contest: contest, label: (labels[contest] || contest), avg: avg, total: total }; | return { contest: contest, label: (labels[contest] || contest), avg: avg, total: total }; | ||
}, function () { | }, function () { | ||
// | // Ein Contest fehlgeschlagen -> nicht blockieren | ||
return { contest: contest, label: (labels[contest] || contest), avg: null, total: 0, _error: true }; | return { contest: contest, label: (labels[contest] || contest), avg: null, total: 0, _error: true }; | ||
}); | }); | ||
| Zeile 554: | Zeile 570: | ||
} | } | ||
var overall = (present > 0) ? Math.round((sumAvg / present) * 10) / 10 : null; | var overall = (present > 0) ? Math.round((sumAvg / present) * 10) / 10 : null; | ||
var overallText = (overall !== null) | var overallText = (overall !== null) | ||
? (overall.toFixed ? overall.toFixed(1) : (Math.round(overall*10)/10)) | ? (overall.toFixed ? overall.toFixed(1) : (Math.round(overall*10)/10)) | ||
: '–'; | : '–'; | ||
var trG = document.createElement('tr'); | |||
trG.innerHTML = '<td><strong>Gesamt</strong></td><td><strong>' + overallText + '</strong></td><td>–</td>'; | trG.innerHTML = '<td><strong>Gesamt</strong></td><td><strong>' + overallText + '</strong></td><td>–</td>'; | ||
tbody.appendChild(trG); | tbody.appendChild(trG); | ||
| Zeile 564: | Zeile 580: | ||
table.appendChild(tbody); | table.appendChild(tbody); | ||
// Inhalt ersetzen | |||
while (container.firstChild) container.removeChild(container.firstChild); | while (container.firstChild) container.removeChild(container.firstChild); | ||
container.appendChild(table); | container.appendChild(table); | ||