„Benutzer:РDD3/markAdmins.js“ – Versionsunterschied
Erscheinungsbild
Inhalt gelöscht Inhalt hinzugefügt
РDD3 (Diskussion | Beiträge) K k also the userpage link!? |
РDD3 (Diskussion | Beiträge) K fix config |
||
Zeile 4: | Zeile 4: | ||
* E.g. Didym -> Didym (A) |
* E.g. Didym -> Didym (A) |
||
* |
* |
||
* @rev |
* @rev 17:14, 22. Dez. 2016 (CET) |
||
* @author Euku, 28. Dez. 2005 |
* @author Euku, 28. Dez. 2005 |
||
* @author Sir und Olliminatore - Ex-Admin-Markierung |
* @author Sir und Olliminatore - Ex-Admin-Markierung |
||
Zeile 16: | Zeile 16: | ||
(function (mw, $) { |
(function (mw, $) { |
||
'use strict'; |
'use strict'; |
||
// DEU: Jeder der folgenden vordefinierbaren Variablenwerte kann in |
// DEU: Jeder der folgenden vordefinierbaren Variablenwerte kann in |
||
// der eigenen monobook.js/vector.js/common.js vorbelegt werden. |
// der eigenen monobook.js/vector.js/common.js vorbelegt werden. |
||
// Beispielsweise um Commons-Admins zu markieren, muss die folgende Zeile |
// Beispielsweise um Commons-Admins zu markieren, muss die folgende Zeile hinzugefügt werden: |
||
// window.markAdminCfg = { groups: { comadmin: { enabled: true } } }; |
// window.markAdminCfg = { groups: { comadmin: { enabled: true } } }; |
||
// For a more complex setting, e.g. turning off flagging of administrators and turning on flagging |
// ENG: For a more complex setting, e.g. turning off flagging of administrators and turning on flagging |
||
// of stewards and local OTRS members, following lines must be added: |
// of stewards and local OTRS members, following lines must be added: |
||
// window.markAdminCfg = { groups: { |
// window.markAdminCfg = { groups: { |
||
Zeile 29: | Zeile 28: | ||
// } |
// } |
||
// }; |
// }; |
||
// Config usernames on page -> markAdmins-data.js |
|||
var markAdmins = mw.libs.markAdmins = { |
var markAdmins = mw.libs.markAdmins = { |
||
Zeile 48: | Zeile 48: | ||
renadmin: { |
renadmin: { |
||
label: 'A-Ren', |
label: 'A-Ren', |
||
legacyName: ' |
legacyName: 'renadmins', |
||
legacyLabelId: 'renatxt', |
legacyLabelId: 'renatxt', |
||
enabled: true |
enabled: true |
||
Zeile 54: | Zeile 54: | ||
comadmin: { |
comadmin: { |
||
label: 'Com-A', |
label: 'Com-A', |
||
legacyName: ' |
legacyName: 'comadmins', |
||
legacyLabelId: 'comatxt', |
legacyLabelId: 'comatxt', |
||
enabled: false |
enabled: false |
||
Zeile 60: | Zeile 60: | ||
exadmin: { |
exadmin: { |
||
label: 'Ex-A', |
label: 'Ex-A', |
||
legacyName: ' |
legacyName: 'exadmins', |
||
legacyLabelId: 'exatxt', |
legacyLabelId: 'exatxt', |
||
enabled: false |
enabled: false |
||
Zeile 66: | Zeile 66: | ||
wdadmin: { |
wdadmin: { |
||
label: 'WD-A', |
label: 'WD-A', |
||
legacyName: ' |
legacyName: 'wdadmins', |
||
legacyLabelId: 'wdatxt', |
legacyLabelId: 'wdatxt', |
||
enabled: false |
enabled: false |
||
Zeile 72: | Zeile 72: | ||
exbureaucrat: { |
exbureaucrat: { |
||
label: 'Ex-B', |
label: 'Ex-B', |
||
legacyName: ' |
legacyName: 'exbureaucrats', |
||
legacyLabelId: 'exbureautxt', |
legacyLabelId: 'exbureautxt', |
||
enabled: false |
enabled: false |
||
Zeile 109: | Zeile 109: | ||
legacyLabelId: 'stewtxt', |
legacyLabelId: 'stewtxt', |
||
enabled: true |
enabled: true |
||
} |
} |
||
/*, not yet in data file |
|||
'OTRS-member': { |
'OTRS-member': { |
||
label: 'P', |
|||
legacyName: 'otrs', |
|||
legacyLabelId: 'otrstxt' |
|||
}, |
}, |
||
'Image-reviewer': { |
'Image-reviewer': { |
||
label: 'L', |
|||
legacyName: 'imagereviewers', |
|||
legacyLabelId: 'imgreviewertxt' |
|||
} */ |
} */ |
||
}, |
}, |
||
Zeile 126: | Zeile 127: | ||
runOnDiff: true |
runOnDiff: true |
||
}, |
}, |
||
init: function (users) { |
init: function (users) { |
||
markAdmins.users = users; |
markAdmins.users = users; |
||
Zeile 135: | Zeile 136: | ||
mw.loader.using('user', markAdmins.mergeConfig, markAdmins.mergeConfig); |
mw.loader.using('user', markAdmins.mergeConfig, markAdmins.mergeConfig); |
||
}, |
}, |
||
mergeConfig: function () { |
mergeConfig: function () { |
||
// Merge new configuration |
// Merge new configuration |
||
Zeile 164: | Zeile 165: | ||
mw.hook('wikipage.content').add(markAdmins.addLabels); |
mw.hook('wikipage.content').add(markAdmins.addLabels); |
||
}, |
}, |
||
markUser: function (marks, a, b) { |
markUser: function (marks, a, b) { |
||
b.appendChild(document.createTextNode('\u00A0(' + marks.join("/") + ')')); |
b.appendChild(document.createTextNode('\u00A0(' + marks.join("/") + ')')); |
||
Zeile 170: | Zeile 171: | ||
markAdmins.nodes.push(b); |
markAdmins.nodes.push(b); |
||
}, |
}, |
||
destroy: function () { |
destroy: function () { |
||
$.each(markAdmins.nodes, function (i, n) { |
$.each(markAdmins.nodes, function (i, n) { |
||
Zeile 176: | Zeile 177: | ||
}); |
}); |
||
}, |
}, |
||
reInit: function () { |
reInit: function () { |
||
markAdmins.destroy(); |
markAdmins.destroy(); |
||
Zeile 184: | Zeile 184: | ||
addLabels: function (content) { |
addLabels: function (content) { |
||
var users = markAdmins.users; |
var users = markAdmins.users; |
||
⚫ | |||
⚫ | |||
return; |
|||
if (!markAdmins.fullPageProcessed) { |
if (!markAdmins.fullPageProcessed) { |
||
content = $('#mw-content-text')[0] || $('#bodyContent')[0] || $('#content')[0]; |
content = $('#mw-content-text')[0] || $('#bodyContent')[0] || $('#content')[0]; |
||
markAdmins.fullPageProcessed = true; |
markAdmins.fullPageProcessed = true; |
||
} |
} |
||
// Right, the configuration evaluation is here |
// Right, the configuration evaluation is here |
||
// It might be possible to use Ajax for page |
// It might be possible to use Ajax for page |
||
Zeile 208: | Zeile 205: | ||
var nsCondition = cfg.runOn.indexOf(canNs) !== -1; |
var nsCondition = cfg.runOn.indexOf(canNs) !== -1; |
||
var enabledGroups = {}; // collect only relevant groups |
var enabledGroups = {}; // collect only relevant groups |
||
var marker = {}, |
var marker = {}, |
||
allAnchors; // collect user-links |
|||
var previousUser = ''; |
var previousUser = ''; |
||
var reUserpage = /\/wiki\/Benutzer(in)?([ _]Diskussion)?:(.+)/; |
var reUserpage = /\/wiki\/Benutzer(in)?([ _]Diskussion)?:(.+)/; |
||
Zeile 228: | Zeile 226: | ||
} |
} |
||
}); |
}); |
||
if (isUserpage) { // Add also the userpage link!? |
if (isUserpage) { // Add also the userpage link!? |
||
allAnchors = $(content).find('a'); |
allAnchors = $(content).find('a'); |
||
allAnchors.push($('#ca-nstab-user').find('a')[0]); |
allAnchors.push($('#ca-nstab-user').find('a')[0]); |
||
} |
} else |
||
allAnchors = content.getElementsByTagName('A'); |
allAnchors = content.getElementsByTagName('A'); |
||
Zeile 295: | Zeile 293: | ||
importScript('Benutzer:РDD3/markAdmins-data.js'); // Can be removed if placed as regular Gadget |
importScript('Benutzer:РDD3/markAdmins-data.js'); // Can be removed if placed as regular Gadget |
||
mw.hook('userjs.script-loaded.markadmins').add(markAdmins.init); |
mw.hook('userjs.script-loaded.markadmins').add(markAdmins.init); |
||
}(mediaWiki, jQuery)); |
}(mediaWiki, jQuery)); // </nowiki> EOF |
||
// </nowiki> |
Version vom 22. Dezember 2016, 18:15 Uhr
/**
* Flag administrators and special user group members with a letter
* in parenthesis behind links that go into their user namespace.
* E.g. Didym -> Didym (A)
*
* @rev 17:14, 22. Dez. 2016 (CET)
* @author Euku, 28. Dez. 2005
* @author Sir und Olliminatore - Ex-Admin-Markierung
* @author PDD - Adaptierung/zusätzliche Markierungen/Fixes
* @author Littl - aufgeräumt & beschleunigt
* @author Guandalug - Etwas umgeräumt und potentielle Skinabhängigkeit entfernt
* @author Didym, Rillke (Commons), 2014
**/
// <nowiki>
/*global mediaWiki, jQuery*/
(function (mw, $) {
'use strict';
// DEU: Jeder der folgenden vordefinierbaren Variablenwerte kann in
// der eigenen monobook.js/vector.js/common.js vorbelegt werden.
// Beispielsweise um Commons-Admins zu markieren, muss die folgende Zeile hinzugefügt werden:
// window.markAdminCfg = { groups: { comadmin: { enabled: true } } };
// ENG: For a more complex setting, e.g. turning off flagging of administrators and turning on flagging
// of stewards and local OTRS members, following lines must be added:
// window.markAdminCfg = { groups: {
// sysop: { enabled: false },
// wdadmin: { enabled: true },
// 'OTRS-member': { enabled: true }
// }
// };
// Config usernames on page -> markAdmins-data.js
var markAdmins = mw.libs.markAdmins = {
nodes: [],
config: {
groups: {
arbcom: {
label: 'SG',
legacyName: 'arbcom',
legacyLabelId: 'arbcomtxt',
enabled: true
},
ombudsman: {
label: 'Omb',
legacyName: 'ombudsman',
legacyLabelId: 'ombudsmantxt',
enabled: true
},
renadmin: {
label: 'A-Ren',
legacyName: 'renadmins',
legacyLabelId: 'renatxt',
enabled: true
},
comadmin: {
label: 'Com-A',
legacyName: 'comadmins',
legacyLabelId: 'comatxt',
enabled: false
},
exadmin: {
label: 'Ex-A',
legacyName: 'exadmins',
legacyLabelId: 'exatxt',
enabled: false
},
wdadmin: {
label: 'WD-A',
legacyName: 'wdadmins',
legacyLabelId: 'wdatxt',
enabled: false
},
exbureaucrat: {
label: 'Ex-B',
legacyName: 'exbureaucrats',
legacyLabelId: 'exbureautxt',
enabled: false
}
}
},
defaults: {
groups: {
sysop: {
label: 'A',
legacyName: 'admins',
legacyLabelId: 'atxt',
enabled: true
},
oversight: {
label: 'OS',
legacyName: 'oversight',
legacyLabelId: 'oversighttxt',
enabled: true
},
checkuser: {
label: 'CU',
legacyName: 'checkuser',
legacyLabelId: 'checkusertxt',
enabled: true
},
bureaucrat: {
label: 'B',
legacyName: 'bureaucrat',
legacyLabelId: 'bureautxt',
enabled: true
},
steward: {
label: 'S',
legacyName: 'steward',
legacyLabelId: 'stewtxt',
enabled: true
}
/*, not yet in data file
'OTRS-member': {
label: 'P',
legacyName: 'otrs',
legacyLabelId: 'otrstxt'
},
'Image-reviewer': {
label: 'L',
legacyName: 'imagereviewers',
legacyLabelId: 'imgreviewertxt'
} */
},
runOn: ['Special', 'User', 'User_talk', 'Project', 'File', 'Help'],
runOnHistory: true,
runOnTalk: true,
runOnDiff: true
},
init: function (users) {
markAdmins.users = users;
// Wait for user configuration through their .js
// Not adding as a gadget dependency because user .js
// is sometimes invalid and fails loading and
// gadget dependencies do not offer failed/error options
mw.loader.using('user', markAdmins.mergeConfig, markAdmins.mergeConfig);
},
mergeConfig: function () {
// Merge new configuration
// var optionsConfig = mw.user.options.get('markAdminCfg');
var cfg = $.extend(
true,
markAdmins.config,
markAdmins.defaults,
window.markAdminCfg || {}
// optionsConfig ? JSON.parse(optionsConfig) : {}
);
// Merge legacy config (only for backward compatibility, maybe removed in future)
$.each(cfg.groups, function (groupName, grpCfg) {
// Display settings
var enabled = window['mark' + grpCfg.legacyName];
if (enabled !== undefined)
grpCfg.enabled = !!enabled;
// Label
var label = window['mark' + grpCfg.legacyLabelId];
if (label !== undefined)
grpCfg.label = label;
});
cfg.markSubpages = !!window.marksubpages;
cfg.dontmarkmyself = window.dontmarkmyself ? mw.config.get('wgUserName') : false;
// Hook-up content loading
mw.hook('wikipage.content').add(markAdmins.addLabels);
},
markUser: function (marks, a, b) {
b.appendChild(document.createTextNode('\u00A0(' + marks.join("/") + ')'));
a.appendChild(b);
markAdmins.nodes.push(b);
},
destroy: function () {
$.each(markAdmins.nodes, function (i, n) {
$(n).remove();
});
},
reInit: function () {
markAdmins.destroy();
markAdmins.mergeConfig();
},
addLabels: function (content) {
var users = markAdmins.users;
if (!users) return;
if (!markAdmins.fullPageProcessed) {
content = $('#mw-content-text')[0] || $('#bodyContent')[0] || $('#content')[0];
markAdmins.fullPageProcessed = true;
}
// Right, the configuration evaluation is here
// It might be possible to use Ajax for page
// navigation in future.
var canNs = mw.config.get('wgCanonicalNamespace');
var isSubpageListing = !!({
'Prefixindex': 1,
'Allpages': 1
})[mw.config.get('wgCanonicalSpecialPageName')];
var ns = mw.config.get('wgNamespaceNumber');
var isUserpage = ns === 2 || ns === 3;
var isHistory = mw.config.get('wgAction') === 'history';
var isTalk = ns % 2 === 1;
var isDiff = !!mw.util.getParamValue('diff');
var cfg = markAdmins.config;
var nsCondition = cfg.runOn.indexOf(canNs) !== -1;
var enabledGroups = {}; // collect only relevant groups
var marker = {},
allAnchors; // collect user-links
var previousUser = '';
var reUserpage = /\/wiki\/Benutzer(in)?([ _]Diskussion)?:(.+)/;
// Namespace run conditions
if (!(nsCondition ||
isHistory && cfg.runOnHistory ||
isTalk && cfg.runOnTalk ||
isDiff && cfg.runOnDiff))
return;
$.each(cfg.groups, function (g, grpCfg) {
if (grpCfg.enabled) {
enabledGroups[g] = grpCfg;
if (users[g])
enabledGroups[g].users = '|' + users[g].join('|') + '|';
else // should never happen
delete enabledGroups[g];
}
});
if (isUserpage) { // Add also the userpage link!?
allAnchors = $(content).find('a');
allAnchors.push($('#ca-nstab-user').find('a')[0]);
} else
allAnchors = content.getElementsByTagName('A');
var node = document.createElement('b');
node.className = 'adminMark';
for (var i = 0, lenAnchors = allAnchors.length; i < lenAnchors; ++i) {
var a = allAnchors[i];
var href = a.getAttribute("href");
// If it's not a link to a user
if (!href)
continue;
// Extract user page ( /wiki/User_talk:Foo/subpage -> Foo/subpage )
var m = href.match(reUserpage);
if (!m || !m[3])
continue;
var userpage = m[3];
// Extract user
var user = userpage.replace(/[/#]. * / , '');
var isMainUserpageLink = user === userpage;
var isUsertalkLink = !!m[2];
// Two consecutive links to the same user? Don't mark followups!
previousUser = (previousUser === user && isUsertalkLink);
if (previousUser) // only once
continue;
if (marker[user] === undefined) {
var curUser = "|" + user + "|";
var mark = [];
// String concatenation is oftentimes faster in modern browsers,
// so using Arrays and joining them finally seems advantage.
// But we would need an additional IF, so there is no gain.
for (var g in enabledGroups) {
if (enabledGroups[g].users.indexOf(curUser) !== -1)
mark.push(enabledGroups[g].label);
}
// Don't mark certain pages, except link to user main page
// Does the link go to the main user page or, if linking subpages is enabled,
// is it not a page that is just listing subpages?
if (!(isMainUserpageLink || cfg.markSubpages && !isSubpageListing))
continue;
if (cfg.dontmarkmyself && user === cfg.dontmarkmyself)
continue;
// Are there markers at all?
marker[user] = mark[0] ? mark : '';
}
// Check finished, now append node
if (marker[user]) {
markAdmins.markUser(marker[user], a, node.cloneNode(1));
// Required for consecutive user link check
previousUser = user;
}
} // end loop
}
};
importScript('Benutzer:РDD3/markAdmins-data.js'); // Can be removed if placed as regular Gadget
mw.hook('userjs.script-loaded.markadmins').add(markAdmins.init);
}(mediaWiki, jQuery)); // </nowiki> EOF