MediaWiki:Common.js: Perbedaan antara revisi
Tidak ada ringkasan suntingan Tanda: Suntingan perangkat seluler Suntingan peramban seluler |
Tidak ada ringkasan suntingan Tanda: Suntingan perangkat seluler Suntingan peramban seluler |
||
| Baris 1.246: | Baris 1.246: | ||
/* ========================================================== | /* ========================================================== | ||
🚀 MIPPEDIA COMMAND CENTER: | 🚀 MIPPEDIA COMMAND CENTER: AUTO-SYNC ENGINE (V4) | ||
Status: Global Login User | Auto-Purge | High Reliability | |||
========================================================== */ | ========================================================== */ | ||
(function($, mw) { | (function($, mw) { | ||
| Baris 1.253: | Baris 1.253: | ||
var conf = mw.config.get(['wgNamespaceNumber', 'wgAction', 'wgPageName', 'wgIsMainPage', 'wgUserName']); | var conf = mw.config.get(['wgNamespaceNumber', 'wgAction', 'wgPageName', 'wgIsMainPage', 'wgUserName']); | ||
// Hanya | // Filter: Hanya artikel, hanya saat baca, hanya user yang sudah login | ||
if (conf.wgNamespaceNumber !== 0 || conf.wgAction !== 'view' || conf.wgIsMainPage || conf.wgUserName === null) return; | if (conf.wgNamespaceNumber !== 0 || conf.wgAction !== 'view' || conf.wgIsMainPage || conf.wgUserName === null) return; | ||
$(document).ready(function() { | $(document).ready(function() { | ||
var currentTitle = conf.wgPageName; | var currentTitle = conf.wgPageName; | ||
var | // Penentuan subdomain (id, en, concise) | ||
var langKey = | var hostParts = window.location.hostname.split('.'); | ||
var langKey = hostParts[0] === 'mippedia' || hostParts[0] === 'www' ? 'id' : hostParts[0]; | |||
$.ajax({ | $.ajax({ | ||
url: 'https://data.mippedia.org/api.php', | url: 'https://data.mippedia.org/api.php', | ||
data: { action: 'query', prop: 'revisions', titles: 'MediaWiki:ShortDesc-Data.json', rvprop: 'content', format: 'json', origin: '*' }, | data: { | ||
action: 'query', | |||
prop: 'revisions', | |||
titles: 'MediaWiki:ShortDesc-Data.json', | |||
rvprop: 'content', | |||
format: 'json', | |||
origin: '*' | |||
}, | |||
dataType: 'jsonp', | dataType: 'jsonp', | ||
success: function(res) { | success: function(res) { | ||
| Baris 1.274: | Baris 1.282: | ||
var targetDesc = (fullData[currentTitle] && fullData[currentTitle][langKey]) ? fullData[currentTitle][langKey].trim() : ""; | var targetDesc = (fullData[currentTitle] && fullData[currentTitle][langKey]) ? fullData[currentTitle][langKey].trim() : ""; | ||
syncMetadata(currentTitle, targetDesc); | |||
} catch (e) { console.log("Mippedia: Data | } catch (e) { | ||
console.log("Mippedia System: Data sync not required or entry missing."); | |||
} | |||
} | } | ||
}); | }); | ||
function | function syncMetadata(title, dataCenterDesc) { | ||
var api = new mw.Api(); | var api = new mw.Api(); | ||
api.get({ action: 'query', prop: 'revisions', titles: title, rvprop: 'content', formatversion: 2 }).done(function(data) { | api.get({ | ||
action: 'query', | |||
prop: 'revisions', | |||
titles: title, | |||
rvprop: 'content', | |||
formatversion: 2 | |||
}).done(function(data) { | |||
var content = data.query.pages[0].revisions[0].content; | var content = data.query.pages[0].revisions[0].content; | ||
var shortDescPattern = /\{\{SHORTDESC:.*?\}\}\n?/gi; | |||
var | var hasLocalDesc = shortDescPattern.test(content); | ||
var | |||
var | var localMatch = content.match(/\{\{SHORTDESC:(.*?)\}\}/i); | ||
var currentLocalDesc = | var currentLocalDesc = localMatch ? localMatch[1].trim() : ""; | ||
// AKSI | // AKSI 1: HAPUS (Jika di pusat kosong/dihapus, tapi di artikel lokal masih ada) | ||
if ( | if (dataCenterDesc === "" && hasLocalDesc) { | ||
console.log("Mippedia: Purging metadata..."); | |||
saveEdit(title, content.replace(shortDescPattern, ""), "Purge out-of-sync metadata"); | |||
} | } | ||
// AKSI | // AKSI 2: UPDATE/TAMBAH (Jika data di pusat ada dan beda dengan lokal) | ||
else if ( | else if (dataCenterDesc !== "" && dataCenterDesc !== currentLocalDesc) { | ||
var | console.log("Mippedia: Syncing with Data Center..."); | ||
// | var cleanedContent = content.replace(shortDescPattern, ""); | ||
var | // Menaruh di paling atas agar terbaca Extension ShortDescription | ||
var newContent = '{{SHORTDESC:' + dataCenterDesc + '}}\n' + cleanedContent; | |||
saveEdit(title, newContent, "Sync metadata: " + dataCenterDesc); | |||
} | } | ||
}); | }); | ||
} | } | ||
function | function saveEdit(title, text, summary) { | ||
// Menggunakan token user yang sedang login saat ini | |||
new mw.Api().postWithEditToken({ | new mw.Api().postWithEditToken({ | ||
action: 'edit', | action: 'edit', | ||
| Baris 1.309: | Baris 1.328: | ||
text: text, | text: text, | ||
summary: '🤖 ' + summary, | summary: '🤖 ' + summary, | ||
minor: true // | minor: true // Menandai sebagai suntingan kecil | ||
// Parameter 'bot: true' DIHAPUS agar bisa dijalankan semua pengguna login | |||
}).done(function() { | }).done(function() { | ||
console.log("Mippedia: | console.log("Mippedia: " + title + " synced successfully."); | ||
}); | }); | ||
} | } | ||
}); | }); | ||
})(jQuery, mediaWiki); | })(jQuery, mediaWiki); | ||