Qeyd: Dəyişiklikləri yayımladıqdan sonra etdiyiniz dəyişikliklərin görünməsi üçün brauzerinizin keşinin təmizlənməsi lazım ola bilər.
- Firefox / Safari: Reload düyməsinə basılı tutarkən Shift düyməsinə basın, və ya Ctrl+F5 və ya Ctrl+R (Mac üçün ⌘-R )
- Google Chrome: Ctrl-Shift-R (Mac üçün ⌘-Shift-R)
- Edge: Ctrl düyməsini basılı tutarkən Refresh düyməsinə basın, və ya sadəcə Ctrl+F5.
// [[:İstifadəçi:Əkrəm Cəfər]] tərəfindən yazılmış, [[İstifadəçi:Nemoralis]] tərəfindən düzəlişlər edilmişdir. (2025)
const groups = {
"bureaucrat": ["bürokrat", "B"],
"checkuser": ["təftişçi", "T"],
"global-deleter": ["qlobal silici", "QS"],
"global-interface-editor": ["qlobal interfeys redaktoru", "QİR"],
"global-sysop": ["qlobal inzibatçı", "Qİ"],
"interface-admin": ["interfeys inzibatçısı", "İİ"],
"ombuds": ["ombudsman", "O"],
"staff": ["Vikimedia Fondunun əməkdaşı", "F"],
"steward": ["stüard", "S"],
"suppress": ["gizlədici", "G"],
"sysadmin": ["sistem administratoru", "SA"],
"sysop": ["inzibatçı", "İ"],
"wmf-researcher": ["Vikimedia Fondu tədqiqatçısı", "FT"]
}
/**
* Qadcetin əsas funksiyası. Bir parametr — XTools API-sindən əldə edilən datanı
* qəbul edir və həmin dataya əsaslanaraq iş görür::
* https://xtools.wmcloud.org/api/project/admin_groups/az.wikipedia.org
*/
const markAdmins = ($content, parsedData) => {
// səhifə məzmunundan "İstifadəçi:" və "İstifadəçi müzakirəsi:" ilə başlayan keçidləri seçir və hər birinin üzərində iş görür
const links = $content[0].querySelectorAll('a[title^="İstifadəçi:"], a[title^="User:"]')
for (let i = 0; i < links.length; i++) {
const anchorElement = links[i],
// keçiddən istifadəçi adı olan hissəni alır
username = anchorElement.getAttribute('title').replace('İstifadəçi:', '')
if (anchorElement.parentElement.classList.contains('mw-usertoollinks')) continue
if ((/[?#]/.test(anchorElement.href) && !anchorElement.href.includes('redlink=1'))) continue
/**
* Funksiyaya ötürülən siyahıda istifadəçinin adının olub-olmamasını və bot olmamasını yoxlayır
* Əgər şərt ödənirsə, indikatoru əlavə edir.
*/
if (parsedData[username] && !parsedData[username].includes("bot")) {
const tipElement = document.createElement('span')
tipElement.classList.add('userflags-wrapper')
tipElement.innerHTML = '(' + parsedData[username].map(group => group.replace(group, match => (groups[match] ? groups[match][1] : ''))).filter(x => x.length !== 0).join(', ') + ')'
tipElement.title = '(' + parsedData[username].map(group => group.replace(group, match => (groups[match] ? groups[match][0] : ''))).filter(x => x.length !== 0).join(', ') + ')'
anchorElement.after(tipElement)
}
}
}
mw.loader.using(['mediawiki.storage'], () => {
const cacheddata = mw.storage.get('mw-gadget-markadmins')
const hasUserLinks = ($content) => {
return $content[0] ? $content[0].querySelector('a[title^="İstifadəçi:"], a[title^="User:"]') !== null : false;
};
const addHooks = (parsedData) => {
mw.hook('wikipage.content').add((content) => {
if (hasUserLinks(content)) {
markAdmins(content, parsedData);
}
});
mw.hook('global.userlinks').add((content) => {
if (hasUserLinks(content)) {
markAdmins(content, parsedData);
}
});
}
/**
* Qadceti hər dəqiqə işə salmamaq üçün səhifədə istifadəçi keçidlərinin olub-olmadığını yoxlayır.
* Brauzerdə yadda saxlanmış data varsa həmin datadan istifadə edir, yoxdursa XTools-a sorğu göndərib ordan yeni data əldə edir.
*/
if (cacheddata) {
const parsedData = JSON.parse(cacheddata)
addHooks(parsedData)
} else {
fetch(`https://xtools.wmcloud.org/api/project/admin_groups/${mw.config.get('wgServerName')}`).then(res => res.json()).then(json => {
/** Səhifəni hər yükləyəndə XTools-a yeni sorğu göndərməmək üçün datanı brauzerdə 1 saat müddətinə saxla
** https://www.w3schools.com/html/html5_webstorage.asp
*/
mw.storage.set('mw-gadget-markadmins', JSON.stringify(json.users_and_groups), 3600)
const parsedData = json.users_and_groups
addHooks(parsedData)
}).catch(() => {
/**
* XTools işləməyəndə lokaldakı JSON faylını istifadə et
*/
fetch("https://az.wikipedia.org/w/index.php?title=MediaViki:Gadget-markadmins.json&action=raw").then(res => res.json()).then(json => {
const parsedData = json.users_and_groups;
mw.storage.set('mw-gadget-markadmins', JSON.stringify(parsedData), 3600)
addHooks(parsedData)
}).catch(console.error)
})
}
})