<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://archiv0.vobs.at/index.php?action=history&amp;feed=atom&amp;title=MediaWiki%3AGadget-markAdmins.js</id>
	<title>MediaWiki:Gadget-markAdmins.js - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://archiv0.vobs.at/index.php?action=history&amp;feed=atom&amp;title=MediaWiki%3AGadget-markAdmins.js"/>
	<link rel="alternate" type="text/html" href="https://archiv0.vobs.at/index.php?title=MediaWiki:Gadget-markAdmins.js&amp;action=history"/>
	<updated>2026-06-13T07:11:16Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Matura Wiki</subtitle>
	<generator>MediaWiki 1.35.14</generator>
	<entry>
		<id>https://archiv0.vobs.at/index.php?title=MediaWiki:Gadget-markAdmins.js&amp;diff=3333&amp;oldid=prev</id>
		<title>Porod: 1 Version importiert: adminHighligt</title>
		<link rel="alternate" type="text/html" href="https://archiv0.vobs.at/index.php?title=MediaWiki:Gadget-markAdmins.js&amp;diff=3333&amp;oldid=prev"/>
		<updated>2015-07-21T11:34:32Z</updated>

		<summary type="html">&lt;p&gt;1 Version importiert: adminHighligt&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;/**&lt;br /&gt;
 *  Flag administrators and special user group members with a letter&lt;br /&gt;
 *  in parenthesis behind links that go into their user namespace.&lt;br /&gt;
 *  E.g. Didym -&amp;gt; Didym (A)&lt;br /&gt;
 *  &lt;br /&gt;
 *  @rev 1 (2014-11-21)&lt;br /&gt;
 *  @author Euku, 2005&lt;br /&gt;
 *  @author PDD&lt;br /&gt;
 *  @author Littl&lt;br /&gt;
 *  @author Guandalug&lt;br /&gt;
 *  @author Didym, 2014&lt;br /&gt;
 *  @author Rillke &amp;lt;https://blog.rillke.com&amp;gt;, 2014&lt;br /&gt;
 */&lt;br /&gt;
 &lt;br /&gt;
// &amp;lt;nowiki&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
// List the global variables for jsHint-Validation. Please make sure that it passes http://jshint.com/&lt;br /&gt;
/*global jQuery:false, mediaWiki:false*/&lt;br /&gt;
 &lt;br /&gt;
// Each of the following varibles can be configured in your monobook.js/vector.js/common.js.&lt;br /&gt;
(function( mw, jQuery ) {&lt;br /&gt;
	'use strict';&lt;br /&gt;
&lt;br /&gt;
	var markAdmins = mw.libs.markAdmins = {&lt;br /&gt;
		spans: [],&lt;br /&gt;
		config: {},&lt;br /&gt;
		defaults: {&lt;br /&gt;
			groups: {&lt;br /&gt;
				sysop: {&lt;br /&gt;
					label: 'A',&lt;br /&gt;
					legacyName: 'admins',&lt;br /&gt;
					legacyLabelId: 'atxt',&lt;br /&gt;
					enabled: true&lt;br /&gt;
				},&lt;br /&gt;
				oversight: {&lt;br /&gt;
					label: 'OS',&lt;br /&gt;
					legacyName: 'oversight',&lt;br /&gt;
					legacyLabelId: 'oversighttxt',&lt;br /&gt;
					enabled: true&lt;br /&gt;
				},&lt;br /&gt;
				checkuser: {&lt;br /&gt;
					label: 'CU',&lt;br /&gt;
					legacyName: 'checkuser',&lt;br /&gt;
					legacyLabelId: 'checkusertxt',&lt;br /&gt;
					enabled: true&lt;br /&gt;
				},&lt;br /&gt;
				bureaucrat: {&lt;br /&gt;
					label: 'B',&lt;br /&gt;
					legacyName: 'bureaucrat',&lt;br /&gt;
					legacyLabelId: 'bureautxt',&lt;br /&gt;
					enabled: true&lt;br /&gt;
				},&lt;br /&gt;
				steward: {&lt;br /&gt;
					label: 'S',&lt;br /&gt;
					legacyName: 'steward',&lt;br /&gt;
					legacyLabelId: 'stewtxt'&lt;br /&gt;
				},&lt;br /&gt;
				'OTRS-member': {&lt;br /&gt;
					label: 'P',&lt;br /&gt;
					legacyName: 'otrs',&lt;br /&gt;
					legacyLabelId: 'otrstxt'&lt;br /&gt;
				},&lt;br /&gt;
				'meta-OTRS-member': {&lt;br /&gt;
					label: 'GP',&lt;br /&gt;
					legacyName: 'otrs',&lt;br /&gt;
					legacyLabelId: 'otrstxt'&lt;br /&gt;
				},&lt;br /&gt;
				'Image-reviewer': {&lt;br /&gt;
					label: 'L',&lt;br /&gt;
					legacyName: 'imagereviewers',&lt;br /&gt;
					legacyLabelId: 'imgreviewertxt'&lt;br /&gt;
				}&lt;br /&gt;
			},&lt;br /&gt;
			runOn: ['Special', 'User', 'User_talk', 'Project', 'File', 'Help'],&lt;br /&gt;
			runOnHistory: true,&lt;br /&gt;
			runOnTalk: true,&lt;br /&gt;
			runOnDiff: true&lt;br /&gt;
		},&lt;br /&gt;
		init: function ( users ) {&lt;br /&gt;
			markAdmins.users = users;&lt;br /&gt;
&lt;br /&gt;
			// Wait for user configuration through their .js&lt;br /&gt;
			// Not adding as a gadget dependency because user .js&lt;br /&gt;
			// is sometimes invalid and fails loading and&lt;br /&gt;
			// gadget dependencies do not offer failed/error&lt;br /&gt;
			// options&lt;br /&gt;
			mw.loader.using( 'user', markAdmins.mergeConfig, markAdmins.mergeConfig );&lt;br /&gt;
		},&lt;br /&gt;
		mergeConfig: function () {&lt;br /&gt;
			// Merge new configuration&lt;br /&gt;
			var optionsConfig = mw.user.options.get( 'markAdminCfg' );&lt;br /&gt;
			var cfg = $.extend(&lt;br /&gt;
				true,&lt;br /&gt;
				markAdmins.config,&lt;br /&gt;
				markAdmins.defaults,&lt;br /&gt;
				window.markAdminCfg,&lt;br /&gt;
				optionsConfig ? JSON.parse( optionsConfig ) : {}&lt;br /&gt;
			);&lt;br /&gt;
&lt;br /&gt;
			// Merge legacy config (may be removed in future)&lt;br /&gt;
			$.each( cfg.groups, function( groupName, groupConfig ) {&lt;br /&gt;
				// Display settings&lt;br /&gt;
				var enabled = window['mark' + groupConfig.legacyName];&lt;br /&gt;
				if ( enabled !== undefined ) groupConfig.enabled = !!enabled;&lt;br /&gt;
&lt;br /&gt;
				// Label&lt;br /&gt;
				var label = window['mark' + groupConfig.legacyLabelId];&lt;br /&gt;
				if ( label !== undefined ) groupConfig.label = label;&lt;br /&gt;
			} );&lt;br /&gt;
			cfg.markSubpages = !!window.marksubpages;&lt;br /&gt;
			cfg.dontmarkmyself = !!window.dontMarkMyself;&lt;br /&gt;
&lt;br /&gt;
			// Hook-up content loading&lt;br /&gt;
			mw.hook( 'wikipage.content' ).add( markAdmins.addLabels );&lt;br /&gt;
		},&lt;br /&gt;
		addLabels: function ( $content ) {&lt;br /&gt;
			if ( !markAdmins.fullPageProcessed ) {&lt;br /&gt;
				$content = $(document);&lt;br /&gt;
				markAdmins.fullPageProcessed = true;&lt;br /&gt;
			}&lt;br /&gt;
			// Right, the configuration evaluation is here&lt;br /&gt;
			// It might be possible to use Ajax for page&lt;br /&gt;
			// navigation in future.&lt;br /&gt;
			var cannonicalNS    = mw.config.get( 'wgCanonicalNamespace' ),&lt;br /&gt;
				cannonicalSNSN   = mw.config.get( 'wgCanonicalSpecialPageName' ),&lt;br /&gt;
				isSubpageListing = !!({ 'Prefixindex': 1, 'Allpages': 1 })[cannonicalSNSN],&lt;br /&gt;
				isHistory        = mw.config.get( 'wgAction' ) === 'history',&lt;br /&gt;
				isTalk           = mw.config.get( 'wgNamespaceNumber' ) % 2 === 1,&lt;br /&gt;
				isDiff           = !!mw.util.getParamValue( 'diff' ),&lt;br /&gt;
				anchors          = $content[0].getElementsByTagName( 'A' ),&lt;br /&gt;
				anchorsLen       = anchors.length,&lt;br /&gt;
				reUserpage       = /\/wiki\/User([ _]talk)?:(.+)/,&lt;br /&gt;
				cfg              = markAdmins.config,&lt;br /&gt;
				nsCondition      = $.inArray( cannonicalNS, cfg.runOn ) !== -1,&lt;br /&gt;
				enabledGroups    = {},&lt;br /&gt;
				marker           = {},&lt;br /&gt;
				i, a, m, userpage, user, previousUser, href,&lt;br /&gt;
				isMainUserpageLink, isUsertalkLink, userGroups;&lt;br /&gt;
&lt;br /&gt;
			// Namespace run conditions&lt;br /&gt;
			if ( !( nsCondition&lt;br /&gt;
				|| isHistory &amp;amp;&amp;amp; cfg.runOnHistory&lt;br /&gt;
				|| isTalk &amp;amp;&amp;amp; cfg.runOnTalk&lt;br /&gt;
				|| isDiff &amp;amp;&amp;amp; cfg.runOnDiff ) ) return;&lt;br /&gt;
&lt;br /&gt;
			// Filter enabled groups&lt;br /&gt;
			// Do it here and not later on each anchor&lt;br /&gt;
			$.each( cfg.groups, function( groupName, groupConfig ) {&lt;br /&gt;
				if ( groupConfig.enabled ) enabledGroups[groupName] = groupConfig;&lt;br /&gt;
			} );&lt;br /&gt;
&lt;br /&gt;
			for ( i = 0; i &amp;lt; anchorsLen; ++i, marker = [] ) {&lt;br /&gt;
				a = anchors[i];&lt;br /&gt;
&lt;br /&gt;
				// Extract link&lt;br /&gt;
				href = a.getAttribute( 'href' );&lt;br /&gt;
				if ( !href ) continue;&lt;br /&gt;
&lt;br /&gt;
				// Extract user page ( /wiki/User_talk:Foo/subpage -&amp;gt; Foo/subpage )&lt;br /&gt;
				m = href.match( reUserpage );&lt;br /&gt;
				if ( !m || !m[2] ) continue;&lt;br /&gt;
				userpage = m[2];&lt;br /&gt;
&lt;br /&gt;
				// Extract user&lt;br /&gt;
				user = userpage.replace( /[\/\#].*/, '' );&lt;br /&gt;
&lt;br /&gt;
				isMainUserpageLink = ( user === userpage );&lt;br /&gt;
				isUsertalkLink     = !!m[1];&lt;br /&gt;
&lt;br /&gt;
				// Polish user name&lt;br /&gt;
				user = decodeURIComponent( user ).replace( /_/g, ' ' );&lt;br /&gt;
&lt;br /&gt;
				// Two consecutive links to the same user?&lt;br /&gt;
				if ( previousUser === user &amp;amp;&amp;amp; isUsertalkLink ) continue;&lt;br /&gt;
&lt;br /&gt;
				if ( marker[user] === undefined ) {&lt;br /&gt;
					// User groups of selected user&lt;br /&gt;
					marker[user] = '';&lt;br /&gt;
					userGroups = markAdmins.users[user];&lt;br /&gt;
					if ( !userGroups ) continue;&lt;br /&gt;
&lt;br /&gt;
					$.each( userGroups, function( i, groupName ) {&lt;br /&gt;
						var groupConfig = enabledGroups[groupName];&lt;br /&gt;
						if ( !groupConfig ) return;&lt;br /&gt;
&lt;br /&gt;
						// String concatenation is oftentimes faster in modern browsers &lt;br /&gt;
						// than using Arrays and joining them finally&lt;br /&gt;
						if ( marker[user] === '' ) {&lt;br /&gt;
							marker[user] = groupConfig.label;&lt;br /&gt;
						} else {&lt;br /&gt;
							marker[user] += '/' + groupConfig.label;&lt;br /&gt;
						}&lt;br /&gt;
					} );&lt;br /&gt;
				}&lt;br /&gt;
				// Are there markers at all?&lt;br /&gt;
				if ( !marker[user] ) continue;&lt;br /&gt;
&lt;br /&gt;
				// Does the link go to the main user page or, if linking subpages is enabled,&lt;br /&gt;
				// is it not a page that is just listing subpages?&lt;br /&gt;
				if ( !( isMainUserpageLink || cfg.markSubpages &amp;amp;&amp;amp; !isSubpageListing ) ) continue;&lt;br /&gt;
&lt;br /&gt;
				if ( cfg.dontMarkMyself &amp;amp;&amp;amp; user === mw.config.get( 'wgUserName' ) ) continue;&lt;br /&gt;
&lt;br /&gt;
				markAdmins.markUser( marker[user], a );&lt;br /&gt;
&lt;br /&gt;
				// Required for consecutive user link check&lt;br /&gt;
				previousUser = user;&lt;br /&gt;
			}&lt;br /&gt;
		},&lt;br /&gt;
		markUser: function ( marks, a ) {&lt;br /&gt;
			var span = document.createElement( 'span' ),&lt;br /&gt;
				spanText = document.createTextNode( '\u00A0(' + marks + ')' );&lt;br /&gt;
&lt;br /&gt;
			span.className = 'adminMark';&lt;br /&gt;
&lt;br /&gt;
			span.appendChild( spanText );&lt;br /&gt;
			a.appendChild( span );&lt;br /&gt;
			markAdmins.spans.push( span );&lt;br /&gt;
		},&lt;br /&gt;
		destroy: function () {&lt;br /&gt;
			$.each( markAdmins.spans, function( i, span ) {&lt;br /&gt;
				$( span ).remove();&lt;br /&gt;
			} );&lt;br /&gt;
		},&lt;br /&gt;
		reInit: function () {&lt;br /&gt;
			markAdmins.destroy();&lt;br /&gt;
			markAdmins.mergeConfig();&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
	mw.hook( 'userjs.script-loaded.markadmins' ).add( markAdmins.init );&lt;br /&gt;
}( mediaWiki, jQuery ));&lt;/div&gt;</summary>
		<author><name>Porod</name></author>
	</entry>
</feed>