Benutzer:TenWhile6/XReport.js

aus Wikipedia, der freien Enzyklopädie
Zur Navigation springen Zur Suche springen

Hinweis: Leere nach dem Veröffentlichen den Browser-Cache, um die Änderungen sehen zu können.

  • Firefox/Safari: Umschalttaste drücken und gleichzeitig Aktualisieren anklicken oder entweder Strg+F5 oder Strg+R (⌘+R auf dem Mac) drücken
  • Google Chrome: Umschalttaste+Strg+R (⌘+Umschalttaste+R auf dem Mac) drücken
  • Internet Explorer/Edge: Strg+F5 drücken oder Strg drücken und gleichzeitig Aktualisieren anklicken
  • Opera: Strg+F5
//<nowiki>
Xv = 'v1.6';
Xn = 'XReport';
XReport = `${Xn} ${Xv}`;
XLink = '[[:m:Special:MyLanguage/User:TenWhile6/XReport|XReport]]';
XLinkS = `<small>${XLink}</small>`;
XLinkK = `(${XLink} ${Xv})`;
sig = ' --~~~~';
pSummary = 'Reporting: Page [[$1]] '+XLinkK;
uSummary = 'Reporting [[Special:Contributions/$1|$1]] '+XLinkK;
blocation = mw.config.get('wgMFMode') === 'stable' ? 'p-tb' : 'p-cactions';
api = new mw.Api();
requested = false;
generalwidth = 500;
DB = mw.config.get('wgDBname');
RelevantPageName = mw.config.get('wgRelevantPageName') != null ? mw.config.get('wgRelevantPageName').replace(/_/g, ' ') : '';
RelevantUserName = mw.config.get('wgRelevantUserName') != null ? mw.config.get('wgRelevantUserName') : '';
metaapi = mw.config.get('wgDBname') === 'metawiki' ? new mw.Api() : new mw.ForeignApi('https://meta.wikimedia.org/w/api.php');
metaapi.get({
	action: 'query',
	prop: 'revisions',
	titles: 'User:TenWhile6/XReport/languageData.json',
	rvlimit: '1',
	rvprop: 'content',
	rvslots: 'main',
	formatversion: '2',
	format: 'json'
}).done( function ( Ldata ) {
	LangData = JSON.parse(Ldata.query.pages[0].revisions[0].slots.main.content);
	var lang = mw.user.options.get('language') in LangData ? mw.user.options.get('language') : 'en';
	function trnslt(key) {
    	if (LangData[lang][key]) {
	    	return LangData[lang][key];
    	}
    	return LangData.en[key];
	}
	var WikiData = {
		'SRG': {
			'page': 'Steward requests/Global',
			'section': -1,
			'regex': '{{\\s*[Ll]ock[Hh]ide\\s*\\|\\s*(1(\\s*)=|)\\s*$1\\s*}}',
			'rtext': '\n=== Global lock for $1 ===\n{{Status}}\n*{{LockHide|1=$1}}\n$2 '+XLinkS+sig,
			'I': {
				'page': 'Steward requests/Global',
				'section': 1,
				'regex': '{{\\s*[Ll]uxotool\\s*\\|\\s*(1(\\s*)=|)\\s*$1\\s*}}',
				'rtext': '\n=== Global block for [[Special:Contributions/$1|$1]] ===\n{{Status}}\n* {{Luxotool|$1}}\n$2 '+XLinkS+sig,
			},
		},
		'GSR': {
			'page': 'Global sysops/Requests', // [WORK IN PROGRESS]
		},
		// GS-Opted-Out Wikis -- Status: 22.04.2024
		'alswiki': {
			'page': 'Wikipedia:Vandalismusmeldung',
			'regex': '==\\s*Benutzer:$1\\s*==',
			'regeX': '|{{\\s*[Bb]enutzer\\s*\\|\\s*(1(\\s*)=|)\\s*$1\\s*}}',
			'rtext': '== [[Benutzer:$1]] ==\n{{Benutzer|$1}} $2 '+XLinkS+sig,
			'P': {
				'page': 'Wikipedia:Vandalismusmeldung',
				'regex': '==\\s*Seite \\s*$1\\s*==',
				'regeX': '|{{\\s*[Aa]rtikel\\s*\\|\\s*(1(\\s*)=|)\\s*$1\\s*}}',
				'rtext': '== Seite [[$1]] ==\n{{Artikel|$1}} $2 '+XLinkS+sig
			}
    	},
		'anwiki': {
			'page': 'Wikipedia:Peticions a los almenistradors',
    		'regex': '==\\s*Report concerning User:$1\\s*==',
			'rtext': '== Report concerning User:$1 ==\n* [[Special:Contributions/$1\\|$1]] &ndash; $2 '+XLinkS+sig,
		},
		'arwiki': {}, // [CHECK NEEDED]
		'bgwiki': {
			'page': 'Уикипедия:Заявки_към_администраторите',
			'regex': '==\\s*Блокиране на $1\\s*==',
			'rtext': '== Блокиране на $1 ==\n[[Special:Contributions/$1]]\n\n$2 '+XLinkS+sig
		},
		'bnwiki': {
			'page': 'উইকিপিডিয়া:প্রশাসকদের আলোচনাসভা',
			'regex': '==\\s*বাধাদানের অনুরোধ: $1\\s*==',
			'rtext': '== বাধাদানের অনুরোধ: $1 ==\n* [[বিশেষ:অবদান/$1]]\n\n$2 '+XLinkS+sig
		},
		'bswiki': {}, // [CHECK NEEDED] 'page': 'Wikipedia:Pitanja za administratore'
		'cawiki': {}, // [CHECK NEEDED] 'page': 'Viquipèdia:Observatori del vandalisme'
		'commonswiki': {
			'page': 'Commons:Administrators\' noticeboard/Vandalism',
			'regex': '==\\s*$1\\s*==',
			'regeX': '|{{\\s*[Vv]andal\\s*\\|\\s*(1(\\s*)=|)\\s*$1\\s*}}',
			'rtext': '{{subst:Report vandal|$1|$2 '+XLinkS+sig+'}}'
		},
		'cswiki': {}, // [CHECK NEEDED] 'page': 'Wikipedie:Nástěnka správců'
		'cswikisource': {}, // [CHECK NEEDED] 'page': 'Wikizdroje:Nástěnka správců'
		'cswiktionary': {}, // [CHECK NEEDED] 'page': 'Wikislovník:Nástěnka správců'
		'cywiki': {}, // [CHECK NEEDED] 'page': 'Wicipedia:Negesfwrdd gweinyddiaeth'
		'dawiki': {}, // [CHECK NEEDED] 'page': 'Wikipedia:Anmodning om administratorassistance'
		'dewiki': {
			'page': 'Wikipedia:Vandalismusmeldung',
			'regex': '==\\s*Benutzer:$1\\s*==',
			'regeX': '|{{\\s*[Bb]enutzer\\s*\\|\\s*(1(\\s*)=|)\\s*$1\\s*}}',
			'summary': 'Meldung: [[Special:Contributions/$1|$1]] ([[User:TenWhile6/XReport|XReport]] '+ Xv+')',
			'rtext': '== [[Benutzer:$1]] ==\n{{Benutzer|$1}} $2 <small><small>[[Benutzer:TenWhile6/XReport|XReport]]</small></small>'+sig,
			'P': {
				'page': 'Wikipedia:Vandalismusmeldung',
				'regex': '==\\s*Seite \\s*$1\\s*==',
				'regeX': '|{{\\s*[Aa]rtikel\\s*\\|\\s*(1(\\s*)=|)\\s*$1\\s*}}',
				'summary': 'Meldung: Seite [[$1]] ([[User:TenWhile6/XReport|XReport]] '+ Xv+')',
				'rtext': '== Seite [[$1]] ==\n{{Artikel|$1}} $2 <small><small>[[Benutzer:TenWhile6/XReport|XReport]]</small></small>'+sig
			}
    	},
    	'dewikibooks': {
    		'page': 'Wikibooks:Vandalensperrung',
    		'regex': '==\\s*Benutzer:$1\\s*==',
			'regeX': '|{{\\s*[Vv]andal\\s*\\|\\s*(1(\\s*)=|)\\s*$1\\s*}}',
			'rtext': '== [[Benutzer:$1]] ==\n{{Vandale|$1}} $2 '+XLinkS+sig
    	},
		'dewikisource': {}, // no report page
    	'dewikivoyage': {}, // no report page
    	'dewiktionary': {
    		'page': 'Wiktionary:Vandalismusmeldung',
    		'regex': '==\\s*Benutzer:$1\\s*==',
			'regeX': '|{{\\s*[Vv]andal\\s*\\|\\s*(1(\\s*)=|)\\s*$1\\s*}}',
			'rtext': '== [[Benutzer:$1]] ==\n{{Benutzer|$1}} $2 '+XLinkS+sig
    	},
		'elwiki': {}, // [CHECK NEEDED]
		'enwiki': {
    		'page': 'Wikipedia:Administrator intervention against vandalism',
			'regex': '{{\\s*[Ii][Pp]vandal\\s*\\|\\s*(1(\\s*)=|)\\s*$1\\s*}}',
			'regeX': '|{{\\s*[Vv]andal\\s*\\|\\s*(1(\\s*)=|)\\s*$1\\s*}}',
			'rtext': '*{{vandal|$1}} &ndash; $2 '+XLinkS+sig
		},
		'enwikinews': {}, // [CHECK NEEDED]
    	'enwikiquote': {
    		'page': 'Wikiquote:Vandalism in progress',
    		'regex': '==\\s*Report concerning [[Special:Contributions/$1|$1]]\\s*==',
			'regeX': '|{{\\s*[Vv]andal\\s*\\|\\s*(1(\\s*)=|)\\s*$1\\s*}}',
			'rtext': '== Report concerning [[Special:Contributions/$1|$1]] ==\n\n* {{vandal|$1}}\n$2 '+XLinkS+sig
    	},
		'enwikisource': {}, // [CHECK NEEDED]
		'enwiktionary': {}, // [CHECK NEEDED]
		'eowiki': {}, // [CHECK NEEDED]
    	'eswiki': {
    		'page': 'Wikipedia:Vandalismo en curso',
    		'regex': '==\\s*$1\\s*==',
    		'rtext': '{{subst:ReportevandalismoIP|1=$1|2=$2 '+XLinkS+'}}'
    	},
		'eswikinews': {}, // [CHECK NEEDED]
		'etwiki': {}, // [CHECK NEEDED]
		'euwiki': {}, // [CHECK NEEDED]
		'fawiki': {}, // [CHECK NEEDED]
    	'fiwiki': {
    		'page': 'Wikipedia:Ylläpitäjien ilmoitustaulu',
    		'regex': 'Käyttäjä:\\s*$1\\s*',
    		'rtext': '== Estopyyntö $1 ({{subst:LOCALDAY}}.{{subst:LOCALMONTH}}.{{subst:LOCALYEAR}}) ==\n<big>$1</big>\n*\'\'\'Toiminnot:\'\'\' [[Käyttäjä:$1|Käyttäjäsivu]] | [[Keskustelu käyttäjästä:$1|keskustelusivu]] | [[Toiminnot:Muokkaukset/$1|muokkaukset]] | [[Toiminnot:Estä/$1|\'\'\'estä\'\'\']]\n*\'\'\'Lisätiedot:\'\'\' $2 '+XLinkS+sig
    	},
	    'frwiki': {
    		'page': 'Wikipédia:Vandalisme en cours',
    		'regex': '|{{\\s*[Uu]+\\s*\\|\\s*(1(\\s*)=|)\\s*$1\\s*}}',
    		'rtext': '== Demande de blocage de $1 ==\n\n* Auteur du vandalisme : {{u+|$1}}\n* Type de dégâts : $2\n\n<!-- Merci de ne pas modifier la ligne ci-dessous -->\n<small>[Via '+XLinkS+']</small> Message déposé par'+sig
    	},
		'frwikibooks': {}, // [CHECK NEEDED]
		'frwikisource': {}, // [CHECK NEEDED]
		'frwikiversity': {}, // [CHECK NEEDED]
		'frwiktionary': {}, // [CHECK NEEDED]
		'glwiki': {}, // [CHECK NEEDED]
		'hewiki': {}, // [CHECK NEEDED]
		'hewikisource': {}, // [CHECK NEEDED]
		'hrwiki': {}, // [CHECK NEEDED]
		'huwiki': {}, // [CHECK NEEDED]
    	'idwiki': {
    		'page': 'Wikipedia:Intervensi pengurus terhadap vandalisme',
    		'regex': '$1 }}',
    		'rtext': '== [[User:$1]] ==\n* {{vandal-m|$1}} $2 '+XLinkS+sig
    	},
		'iswiki': {}, // [CHECK NEEDED]
    	'itwiki': {
    		'page': 'Wikipedia:Vandalismi in corso',
    		'regex': '|{{\\s*[Vv]andal\\s*\\|\\s*(1(\\s*)=|)\\s*$1\\s*}}',
    		'rtext': '{{vandalo|$1}} $2 '+XLinkS+sig
    	},
		'jawiki': {}, // [CHECK NEEDED] 'page': 'Wikipedia:管理者伝言板/投稿ブロック'
		'kawiki': {}, // [CHECK NEEDED]
		'kowiki': {}, // [CHECK NEEDED]
		'lawiki': {}, // [CHECK NEEDED]
		'ltwiki': {}, // [CHECK NEEDED]
		'lvwiki': {}, // [CHECK NEEDED]
    	'metawiki': {
    		'page': 'Meta:Requests for help from a sysop or bureaucrat',
    		'regex': '==\\s*Report concerning User:$1\\s*==',
			'regeX': '|{{\\s*[Vv]andal\\s*\\|\\s*(1(\\s*)=|)\\s*$1\\s*}}',
			'rtext': '== Report concerning User:$1 ==\n{{vandal|1=$1}} &mdash; \'\'\'Reasons:\'\'\' $2 '+XLinkS+sig
    	},
		'mkwiki': {}, // [CHECK NEEDED]
		'mlwiki': {}, // [CHECK NEEDED]
		'mrwiki': {}, // [CHECK NEEDED]
		'mswiki': {}, // [CHECK NEEDED] 'page': 'Wikipedia:Campur tangan penyelia terhadap vandalisme'
		'nlwiki': {
			'page': 'Wikipedia:Verzoekpagina voor moderatoren/RegBlok',
			'section': 2,
			'regex': '===\\s*$1\\s*===',
			'regeX': '|{{\\s*[Ll]g\\s*\\|\\s*(1(\\s*)=|)\\s*$1\\s*}}',
			'rtext': '=== $1 ===\n*{{lg|$1}} $2 '+XLinkS+sig,
			'I': {
				'page': 'Wikipedia:Verzoekpagina voor moderatoren/IPBlok',
				'section': 2,
				'regex': '{{\\s*[Ll]g\\s*\\|\\s*(1(\\s*)=|)\\s*$1\\s*}}',
				'rtext': '*{{lg|$1}} $2 '+XLinkS+sig
			},
			'P': {
				'page': 'Wikipedia:Verzoekpagina voor moderatoren/Beveiligen',
				'section': 1,
    			'regex': '\\s*$1\\s*',
    			'rtext': '== [[$1]] ==\n$2 '+XLinkS+sig
			},
		},
		'nlwikibooks': {}, // [CHECK NEEDED]
		'nlwiktionary': {}, // [CHECK NEEDED]
		'nnwiki': {}, // [CHECK NEEDED]
		'nowiki': {}, // [CHECK NEEDED] 'page': 'Wikipedia:Pågående vandalisme'
		'plwiki': {
			'page': 'Wikipedia:Prośby do administratorów',
	   		'regex': '==\\s*Zgłoszenie w sprawie użytkownika $1\\s*==',
			'regeX': '|{{\\s*[Ll]w\\s*\\|\\s*(1(\\s*)=|)\\s*$1\\s*}}',
			'rtext': '== Zgłoszenie w sprawie użytkownika $1 ==\n\n* {{lw|$1}}\n\n$2\n\nZgłasza: '+XLinkS+sig
		},
		'plwikimedia': {}, // [CHECK NEEDED]
		'plwikiquote': {}, // [CHECK NEEDED]
		'plwikisource': {}, // [CHECK NEEDED]
		'plwiktionary': {}, // [CHECK NEEDED]
		'ptwiki': {}, // [CHECK NEEDED] 'page': 'Wikipédia:Pedidos/Notificações de vandalismo'
		'rowiki': {}, // [CHECK NEEDED]
		'ruwiki': {}, // [CHECK NEEDED] 'page': 'Википедия:Запросы к администраторам/Быстрые'
		'sewikimedia': {}, // [CHECK NEEDED]
		'simplewiki': {
			'page': 'Wikipedia:Vandalism in progress',
			'regex': '{{\\s*[Vv]andal\\s*\\|\\s*(1(\\s*)=|)\\s*$1\\s*}}',
			'rtext': '*{{Vandal|$1}} &ndash; $2 '+XLinkS+sig,
			I: {
				'page': 'Wikipedia:Vandalism in progress',
				'regex': '{{\\s*[Ii][Pp][Vv]andal\\s*\\|\\s*(1(\\s*)=|)\\s*$1\\s*}}',
				'rtext': '*{{IPvandal|$1}} &ndash; $2 '+XLinkS+sig,
			}
		},
		'skwiki': {
			'page': 'Wikipédia:Nástenka správcov',
    		'regex': '==\\s*Hlásení vandalizmu: $1\\s*==',
			'regeX': '|{{\\s*[Rr]edaktor\\s*\\|\\s*(1(\\s*)=|)\\s*$1\\s*}}',
			'rtext': '== Hlásení vandalizmu: $1 ==\n{{Redaktor|$1}}\n\n$2 '+XLinkS+sig
		},
		'slwiki': {
			'page': 'Wikipedija:Prošnje za administratorsko pomoč',
    		'regex': '==\\s*Report concerning User:$1\\s*==',
			'regeX': '|{{\\s*[Uu]ser\\s*\\|\\s*(1(\\s*)=|)\\s*$1\\s*}}',
			'rtext': '== Report concerning User:$1 ==\n{{User|$1}} $2 '+XLinkS+sig
		},
		'sourceswiki': {
			'page': 'Wikisource:Vandalism in progress',
			'regex': '==\\s*$1\\s*==',
			'regeX': '|{{\\s*[Uu]ser\\s*\\|\\s*(1(\\s*)=|)\\s*$1\\s*}}',
			'section': '0',
			'rtext': '\n== $1 ==\n* {{User|$1}}\n$2 '+XLinkS+sig
		},
		'specieswiki': {}, // [CHECK NEEDED]
		'srwiki': {}, // [CHECK NEEDED] 'page': 'Википедија:Пријаве вандализама'
		'svwiki': {}, // [CHECK NEEDED] 'page': 'Wikipedia:Begäran om åtgärder'
		'svwiktionary': {}, // [CHECK NEEDED]
		'tawiki': {}, // [CHECK NEEDED]
		'tewiki': {}, // [CHECK NEEDED]
    	'thwiki': {
    		'page': 'วิกิพีเดีย:รายชื่อการก่อกวน',	
    		// [!!!] REGEX FEHLT [!!!]
    		'rtext': '* {{ก่อกวน|$1}} $2. '+XLinkS+sig,
    	},
		'tlwiki': {}, // [CHECK NEEDED]
		'trwiki': {}, // [CHECK NEEDED] 'page': 'Vikipedi:Kullanıcı engelleme talepleri'
    	'urwiki': {
    		'page': 'ویکیپیڈیا:دیوان_خاص',
    		'regex': '==\\s*User:$1\\s*==',
    		'rtext': '== [[صارف:$9]] پر پابندئی لگائیں ==\n* {{user|$1}} $2 '+XLinkS+sig,
    	},
		'viwiki': {}, // [CHECK NEEDED] 'page': 'Wikipedia:Tin nhắn cho bảo quản viên'
    	'wikidatawiki': {
    		'page': 'Wikidata:Administrators\' noticeboard',
    		'regex': '==\\s*Report concerning User:$1\\s*==',
			'regeX': '|{{\\s*[Vv]andal\\s*\\|\\s*(1(\\s*)=|)\\s*$1\\s*}}',
			'rtext': '{{subst:VandalReport|$1|$2 '+XLinkS+'}}'
    	},
		'zh_yuewiki': {}, // [CHECK NEEDED]
		'zhwiki': {}, // [CHECK NEEDED] 'page': 'Wikipedia:当前的破坏'
	};
	function DBdata(modus, status, key) {
        DBx = modus === true ? 'SRG' : DB;
		if (status === 'I') {
			if ('I' in WikiData[DBx]) {
				if (WikiData[DBx][status][key]) {
					return WikiData[DBx][status][key];
				} else {
					if (['regex','regeX','section','summary'].includes(key)) {
    					return '';
    				}
    				else {
    					mw.notify(`1. Error: DBdata() at ${DBx} status ${status} key ${key}`,{'type':'error','title':XReport});
    				}
				}
			}
			else {
				status = 'U';
			}
		}
		if (status === 'U') {
			if (WikiData[DBx][key]) {
	    		return WikiData[DBx][key];
			}
			else {
    			if (['regex','regeX','section','summary','rtext'].includes(key)) {
    				return '';
    			}
    			else {
	    			mw.notify(`2. Error: DBdata() at ${DBx} status ${status} in ${key}`,{'type':'error','title':XReport});
    			}
			}
	    } 
    	else if (status === 'P' && WikiData[DBx][status][key]) {
	    	return WikiData[DB][status][key];
		}
		else if (status === 'P' && ['regex','regeX','section','summary'].includes(key)) {
    		return '';
		}
    	else {
    		mw.notify(`3. Error: DBdata() at ${DBx} status ${status} in ${key}`,{'type':'error','title':XReport});
    	}
	}
	function XReportUser() {
		( function (mw, $) {
			function init() {
				mw.loader.using(['mediawiki.api', 'mediawiki.util', 'jquery.ui'])
				.then(function () {
					$('<div>')
					.attr('id', 'reportuser')
					.append(
						$('<form>')
						.attr('id', 'reportuser-form')
						.submit(reportuser)
						.append(
							$('<fieldset>')
							.append(
								$('<legend>')
								.text(trnslt('title'))
									) // </legend>
							.append(
								$('<p>')
								.append(
									$('<label>')
									.attr('for', 'requested-user')
									.text(trnslt('username'))
								) // </label>
								.append(
									$('<input>')
									.attr( {
										'type': 'text',
										'id': 'requested-user',
										'value': RelevantUserName
									} )
								) // </input>
							) // </p>
							.append(
						$('<p>')
								.append(
									$('<label>')
									.attr('for', 'reportuser-reason')
									.text(trnslt('reason'))
								) // </label>
								.append(
									$('<input style="width:27em">')
									.attr( {
										'type': 'text',
										'id': 'reportuser-reason'
									} )
								) // </input>
							) // </p>
						)
					) // </form>
					.append(
						$('<p>')
						.attr('id', 'reportuser-result')
					) // </p>
					.appendTo('#content')
					.dialog( {
						title: XReport,
						autoOpen: false,
						modal: true,
						width: generalwidth,
						buttons: [ {
							id: 'reportuser-button-request',
							text: trnslt('button'),
							click: reportuser
						}, {
							id: 'reportuser-global-button-request',
							text: trnslt('global-button'),
							click: reportuser
						}, {
							id: 'reportuser-button-close',
							text: trnslt('close'),
							click: function () {
								$('#reportuser').dialog('close');
							}
						} ]
					} );
					var portletLink = mw.util.addPortletLink(
						blocation,
						'#',
						trnslt('title'),
						'ca-reportuser',
						trnslt('description'),
						null,
						'#ca-reportuser'
					);
					$(portletLink).click(function (e) {
						e.preventDefault();
						if (DB in WikiData) {
							if ('page' in WikiData[DB]) {
								$('#reportuser-result').html('');
								$('#reportuser').dialog('open');
							}
							else {
								mw.notify(trnslt('error-activated').replace('$1', Xn),{'type':'warn','title':XReport});
							}
						}
						else {
							mw.notify('This is a global sysop wiki!\nIn the future, you will be able to report users to meta:Global sysops/requests (GS/R) with XReport.',{'title':XReport});
						}
					} );
				} );
			}
			function reportuser(event) {
				var modus = event.delegateTarget.attributes[1].nodeValue === 'reportuser-global-button-request' ? true : false;
                var xapi = modus ? metaapi : api;
        		var username = $('#requested-user').val();
        		var status = mw.util.isIPAddress(username, true) ? 'I' : 'U';
        		var regex = DBdata(modus, status, 'regex').replace('$1', username) + DBdata(modus, status, 'regeX').replace('$1', username);
				xapi.get( {
					action: 'query',
					prop: 'revisions',
					formatversion: 2,
					rvprop: 'content',
					rvslots: 'main',
					rvlimit: 1,
					titles: DBdata(modus, status, 'page'),
			    }).then(function(data) {
					if (data.error) {
						mw.notify(`Error: reportuser() at ${DB}, action: api.get`,{'type':'error','title':XReport,autoHide: false});
						return;
					}
					else if (data.query.pages[0].revisions == undefined) {
						mw.notify(`Error: reportuser() at ${DB}, action: api.get, error: undefined`,{'type':'error','title':XReport,autoHide: false});
						return;
					}
					if (data.query.pages[0].revisions[0].slots.main.content.match(new RegExp(regex,'g')) !== null && regex !== '') {
						requested = true;
					}
					var reason = $('#reportuser-reason').val();
					if (requested) {
						showError('requested');
						requested = false;
					}
					else if (username === '') {
						showError('user');
					}
					else if (reason === '') {
						showError('reason');
					}
					else {
						addRequest(username, reason, modus, status);
					}
					event.preventDefault();
				} );
			}
			function showError(err, p1) {
				$('#reportuser-result').html(
					$('<p>')
					.attr('class', 'error')
					.text(trnslt('error-' + err).replace('$1', p1))
				);
			}
			function addRequest(username, reason, modus, status) {
                var xapi = modus ? metaapi : api;
				reason = reason.replace( /(.*)--~~~~/g, '$1' );
				reason = reason.replace( /(.*)~~~~/g, '$1' );
				if (reason.charAt(0) === '') {
					reason = reason.substr(1);
				}
                if (modus === true) {xapi = metaapi} else {xapi = api}
				uSummary = DBdata(modus, status, 'summary') !== '' ? DBdata(modus, status, 'summary') : uSummary;
				uSummary = uSummary.replace('$1', username).replace('$1', username);
				var reporttext = '\n'+DBdata(modus, status, 'rtext').replace('$1', username).replace('$1', username).replace('$1', username).replace('$1', username).replace('$1', username).replace('$1', username).replace('$2', reason).replace('9$', username);
				if (DBdata(modus, status, 'section')) {
			      	xapi.get({
    					action: 'parse',
    					page: DBdata(modus, status, 'page'),
    					prop: 'sections'
					}).done( function (response) {
    					const sections = response.parse.sections.length;
    					sectionnum = DBdata(modus, status, 'section');
    					if (sectionnum === -1) {
    						sectionnum = sections - 1;
    					}
    					xapi.get({
							action: 'parse',
							page: DBdata(modus, status, 'page'),
							prop: 'wikitext',
							section: sectionnum
						}).done( function( result ) {
							var wikitext = result.parse.wikitext['*'] + reporttext;
							xapi.postWithEditToken({
								action: 'edit',
								title: DBdata(modus, status, 'page'),
								section: sectionnum,
								text: wikitext,
								summary: uSummary,
								notminor: true,
								nocreate: true
							}).then(function (data) {
								if (data.error && data.error.info) {
									showError('api', data.error.info);
								} else {
									$('#reportuser').dialog('close');
									mw.notify(trnslt('success'),{'type':'success','title':XReport});
								}
							}, function (jqXHR, textStatus, errorThrown) {
								showError('api', textStatus);
							});
						});
					});
				}
				else {
					xapi.postWithEditToken( {
						action: 'edit',
						title: DBdata(modus, status, 'page'),
						watchlist: 'nochange',
						summary: uSummary,
						appendtext: reporttext,
					} )
					.then(function(data) {
						if (data.error && data.error.info) {
							showError('api', data.error.info);
						} else {
							$('#reportuser').dialog('close');
							mw.notify(trnslt('success'),{'type':'success','title':XReport});
						}
					}, function (jqXHR, textStatus, errorThrown) {
						showError('api', textStatus);
					});
				}
			}
			$(init);
		}(mediaWiki, jQuery));
	}
	function XReportPage() {
    	( function (mw, $) {
			function init() {
				mw.loader.using(['mediawiki.api', 'mediawiki.util', 'jquery.ui'])
				.then(function() {
					$('<div>')
					.attr('id', 'reportpage')
					.append(
						$('<form>')
						.attr('id', 'reportpage-form')
						.submit(reportpage)
						.append(
							$('<fieldset>')
							.append(
								$('<legend>')
								.text(trnslt('Ptitle'))
							) // </legend>
							.append(
								$('<p>')
								.append(
									$('<label>')
									.attr('for', 'requested-page')
									.text(trnslt('pagename'))
								) // </label>
								.append(
									$( '<input style="width:20em">' )
									.attr( {
										'type': 'text',
										'id': 'requested-page',
										'value': RelevantPageName
									} )
								) // </input>
							) // </p>
							.append(
									$('<p>')
								.append(
									$('<label>')
									.attr('for', 'reportpage-reason')
									.text('Begründung:')
								) // </label>
								.append(
									$('<input style="width:25em">')
									.attr( {
										'type': 'text',
										'id': 'reportpage-reason'
									} )
								) // </input>
							) // </p>
						)
					) // </form>
					.append(
						$('<p>')
						.attr('id', 'reportpage-result')
					) // </p>
					.appendTo('#content')
					.dialog( {
						title: XReport,
						autoOpen: false,
						modal: true,
						width: generalwidth,
						buttons: [{
							id: 'reportpage-button-request',
							text: trnslt('button'),
							click: reportpage
						}, {
							id: 'reportpage-button-close',
							text: trnslt('close'),
							click: function () {
								$('#reportpage').dialog('close');
							}
						} ]
					} );
					var portletLink = mw.util.addPortletLink(
						blocation,
						'#',
						trnslt('Ptitle'),
						'ca-reportpage',
						trnslt('Pdescription'),
						null,
						'#ca-reportpage'
					);
					$(portletLink).click(function(e) {
						e.preventDefault();
						$('#reportpage-result').html('');
						$('#reportpage').dialog('open');
					} );
				} );
			}
			function reportpage(event) {
                var modus = false;
                var xapi = modus ? metaapi : api;
				var pagename = $('#requested-page').val();
				var status = 'P';
				var Vregex = DBdata(modus, status, 'regex').replace('$1', pagename) + DBdata(modus, status, 'regeX').replace('$1', pagename);
				xapi.get( {
					action: 'query',
					prop: 'revisions',
					formatversion: 2,
					rvprop: 'content',
					rvslots: 'main',
					rvlimit: 1,
					titles: DBdata(modus, status, 'page'),
				} )
				.then(function (data) {
					if (data.error) {
						mw.notify(`Error: reportpage() at ${DB}, action: api.get`,{'type':'error','title':XReport,autoHide: false});
						return;
					}
					else if (data.query.pages[0].revisions == undefined) {
						mw.notify(`Error: reportpage() at ${DB}, action: api.get, error: undefined`,{'type':'error','title':XReport,autoHide: false});
						return;
					}
					if ( data.query.pages[ 0 ].revisions[ 0 ].slots.main.content.match( new RegExp( Vregex, 'g' ) ) !== null ) {
						requested = true;
					}
					var reason = $('#reportpage-reason').val();
					if (requested) {
						showError('requested');
						requested = false;
					}
					else if (pagename.startsWith("Spezial:") || pagename.startsWith('Special:')) {
						showError('specialpage');
					}
					else if (pagename === '') {
						showError('page');
					}
					else if (reason === '') {
						showError('reason');
					}
					else {
						addRequest(pagename, reason, modus, status);
					}
					event.preventDefault();
				} );
			}
			function showError(err, p1) {
				$('#reportpage-result').html(
					$('<p>')
					.attr('class', 'error')
					.text(trnslt('error-' + err).replace('$1', p1))
				);
			}
			function addRequest(pagename, reason, modus, status) {
                var xapi = modus ? metaapi : api;
				if (reason.charAt(0) === ' ') {
					reason = reason.substr(1);
				}
		        pagename = pagename.replace(/_/g, ' ');
		        pSummary = DBdata(modus, status, 'summary') !== '' ? DBdata(modus, status, 'summary').replace('$1', pagename) : pSummary.replace('$1', pagename);
				var reporttext = '\n'+DBdata(modus, status, 'rtext').replace('$1', pagename).replace('$1', pagename).replace('$2', reason);
		        if ('section' in WikiData[DB][status]) {
		        	xapi.get( {
						action: 'parse',
						page: DBdata(modus, status, 'page'),
						prop: 'wikitext',
						section: DBdata(modus, status, 'section')
					}).done( function( result ) {
						var wikitext = result.parse.wikitext['*'] + reporttext;
						xapi.postWithEditToken( {
							action: 'edit',
							title: DBdata(modus, status, 'page'),
							section: DBdata(modus, status, 'section'),
							text: wikitext,
							summary: pSummary,
							notminor: true,
							nocreate: true
						}).then(function (data) {
							if (data.error && data.error.info) {
								showError('api', data.error.info);
							} else {
								$('#reportpage').dialog('close');
								mw.notify(trnslt('success'),{'type':'success','title':XReport});
							}
						}, function (jqXHR, textStatus, errorThrown) {
							showError('api', textStatus);
						});
					});
				}
				else {
					api.postWithEditToken( {
						action: 'edit',
						title: DBdata(modus, status, 'page'),
						watchlist: 'nochange',
						summary: pSummary,
						appendtext: reporttext,
					})
					.then(function (data) {
						if (data.error && data.error.info) {
							showError('api', data.error.info);
						} else {
							$('#reportpage').dialog('close');
							mw.notify(trnslt('success'),{'type':'success','title':XReport});
						}
					}, function (jqXHR, textStatus, errorThrown) {
						showError('api', textStatus);
					});
				}
			}
			$(init);
		}(mediaWiki, jQuery));
	}
	XReportUser();
	if ('P' in WikiData[DB]) {
    	XReportPage();
	}
} );
//</nowiki>
//this script was originally forked from [[m:User:Syunsyunminmin/SReporter.js]]