Tanda: Dikembalikan Suntingan perangkat seluler Suntingan peramban seluler |
Tanda: Pengosongan Pengembalian manual Suntingan perangkat seluler Suntingan peramban seluler |
| Baris 1: |
Baris 1: |
| /* Script Injeksi RelatedArticles Otomatis ke Footer */
| |
| $(document).ready(function() {
| |
| if (mw.config.get('wgIsArticle') && mw.config.get('wgAction') === 'view' && mw.config.get('wgNamespaceNumber') === 0) {
| |
|
| |
| // 1. Cek dulu, apakah di halaman ini udah ada kode {{#related}} manual?
| |
| // Kita cek lewat elemen kelas bawaan ekstensi RelatedArticles
| |
| if ($('.ext-related-articles-card').length || $('div[id^="related"]').length > 0) {
| |
| return; // Kalau udah ada, berhenti biar gak numpuk
| |
| }
| |
|
| |
|
| var categories = mw.config.get('wgCategories');
| |
| if (categories.length > 0) {
| |
| var targetCat = categories.filter(function(c){ return !c.match(/halaman|artikel|maintenance/i); })[0] || categories[0];
| |
|
| |
| // 2. Ambil daftar artikel dalam kategori
| |
| $.getJSON(mw.util.wikiScript('api'), {
| |
| action: 'query',
| |
| list: 'categorymembers',
| |
| cmtitle: 'Category:' + targetCat,
| |
| cmlimit: 30,
| |
| format: 'json'
| |
| }, function(data) {
| |
| var members = data.query.categorymembers;
| |
| if (!members) return;
| |
|
| |
| var currentTitle = mw.config.get('wgPageName').replace(/_/g, ' ');
| |
| var filtered = members.filter(function(m) { return m.title !== currentTitle; });
| |
|
| |
| // Acak dan ambil 3
| |
| filtered.sort(function() { return 0.5 - Math.random(); });
| |
| var chosen = filtered.slice(0, 3);
| |
|
| |
| if (chosen.length > 0) {
| |
| // 3. Bikin string perintah manual buat ekstensi RelatedArticles
| |
| var relatedWikiText = "";
| |
| chosen.forEach(function(item) {
| |
| relatedWikiText += '{{#related:' + item.title + '}}';
| |
| });
| |
|
| |
| // 4. Perintah "Pinter": Nyuruh server ngerender wikitext jadi HTML asli ekstensi
| |
| $.getJSON(mw.util.wikiScript('api'), {
| |
| action: 'parse',
| |
| text: relatedWikiText,
| |
| contentmodel: 'wikitext',
| |
| prop: 'text',
| |
| disablelimitreport: 1,
| |
| format: 'json'
| |
| }, function(parseData) {
| |
| var finalHtml = parseData.parse.text['*'];
| |
|
| |
| // 5. Tempel hasilnya di bawah artikel
| |
| var container = $('<div id="auto-related-wrapper" style="clear:both; margin-top:20px;"></div>').append(finalHtml);
| |
|
| |
| // Target Minerva (HP) dan Vector (Desktop)
| |
| if ($('.minerva-footer').length) {
| |
| $('.minerva-footer').before(container);
| |
| } else if ($('#catlinks').length) {
| |
| $('#catlinks').after(container);
| |
| } else {
| |
| $('#mw-content-text').after(container);
| |
| }
| |
| });
| |
| }
| |
| });
| |
| }
| |
| }
| |
| });
| |