MediaWiki:Common.js: Unterschied zwischen den Versionen

Aus Phoenix-Larp Wiki

Robusteren MediaWiki-Kernhook (wikipage.editform / ve.activationComplete) statt eigener Edit-Erkennung verwenden
Redaktionsleitfaden-Hinweis: im Quelltext-Editor unter das Textfeld mit Warnsymbol, im VisualEditor als Symbol vor der Hilfe-Schaltfläche
Zeile 1: Zeile 1:
/* Das Burger-Menü-JavaScript, der Admin-Link zu den Spezialseiten und die 'Anmelden'-Beschriftung für abgemeldete Besucher wurden in den PhoenixSkin-Fork übernommen (resources/phoenix-custom.js) und hier entfernt, da PhoenixSkin seit 2026-09-08 der Standard-Skin des Wikis ist. */
/* Das Burger-Menü-JavaScript, der Admin-Link zu den Spezialseiten und die 'Anmelden'-Beschriftung für abgemeldete Besucher wurden in den PhoenixSkin-Fork übernommen (resources/phoenix-custom.js) und hier entfernt, da PhoenixSkin seit 2026-09-08 der Standard-Skin des Wikis ist. */


/* Hinweis auf den Redaktionsleitfaden im Bearbeiten-Modus (klassischer
/* Hinweis auf den Redaktionsleitfaden im Bearbeiten-Modus. Bewusst hier
  Wikitext-Editor und VisualEditor). Bewusst hier in Common.js statt im
  in Common.js statt im Skin hinterlegt, damit Text/Ziel-Seite/Optik
  Skin hinterlegt, damit Text und Ziel-Seite direkt im Wiki gepflegt
  direkt im Wiki gepflegt werden koennen, ohne den Skin anzufassen.
  werden koennen, ohne den Skin anzufassen. Nutzt die MediaWiki-Kernhooks
 
   'wikipage.editform' (klassischer Editor, feuert auch bei AJAX-Nachladen)
   - Klassischer Wikitext-Editor: deutliche Hinweisbox mit Warnsymbol
   und 've.activationComplete' (VisualEditor), statt selbst zu raten, wann
    UNTERHALB des Quelltext-Feldes (nicht ueber dem ganzen Formular).
  der Bearbeiten-Modus aktiv ist. */
   - VisualEditor: das gleiche Warnsymbol als kleines Icon oben in der
    Werkzeugleiste, direkt vor dem Hilfe-("?")-Knopf. */
( function () {
( function () {
function insertNotice( $anchor ) {
var WARNING_ICON = '⚠';
 
function insertClassicNotice( $editForm ) {
if ( document.getElementById( 'phoenix-editnotice-leitfaden' ) ) {
if ( document.getElementById( 'phoenix-editnotice-leitfaden' ) ) {
return;
return;
}
}
var $anchor = $editForm.find( '#wpTextbox1' );
if ( !$anchor.length ) {
$anchor = $editForm.find( 'textarea' ).first();
}
if ( !$anchor.length ) {
return;
}
// Falls CodeMirror aktiv ist, haengt es seinen eigentlichen
// Editor-Container direkt hinter die (dann versteckte) Textarea -
// den Hinweis in dem Fall dahinter statt davor einfuegen.
var $cm = $anchor.next( '.cm-editor, .CodeMirror' );
var $insertAfter = $cm.length ? $cm : $anchor;
var href = mw.util.getUrl( 'Phoenix_Larp_Wiki:Wiki-Projekt/Redaktionsleitfaden' );
var href = mw.util.getUrl( 'Phoenix_Larp_Wiki:Wiki-Projekt/Redaktionsleitfaden' );
var $notice = $( '<div>', { id: 'phoenix-editnotice-leitfaden' } ).append(
var $notice = $( '<div>', { id: 'phoenix-editnotice-leitfaden' } ).append(
$( '<span>' ).text( 'Bitte beachte beim Bearbeiten den ' ),
$( '<span>', { 'class': 'phoenix-editnotice-icon', 'aria-hidden': 'true' } ).text( WARNING_ICON ),
$( '<a>', { href: href, text: 'Redaktionsleitfaden' } ),
$( '<span>', { 'class': 'phoenix-editnotice-text' } ).append(
$( '<span>' ).text( '.' )
document.createTextNode( 'Bitte beachte beim Bearbeiten den ' ),
$( '<a>', { href: href, text: 'Redaktionsleitfaden' } ),
document.createTextNode( '.' )
)
);
);
$anchor.before( $notice );
$insertAfter.after( $notice );
}
 
function insertVeIcon() {
if ( document.getElementById( 'phoenix-ve-editnotice-icon' ) ) {
return true;
}
var $help = $( '.oo-ui-toolbar-bar [aria-label="Hilfe"]' ).first();
if ( !$help.length ) {
return false;
}
var href = mw.util.getUrl( 'Phoenix_Larp_Wiki:Wiki-Projekt/Redaktionsleitfaden' );
var $icon = $( '<a>', {
id: 'phoenix-ve-editnotice-icon',
href: href,
target: '_blank',
rel: 'noopener',
title: 'Redaktionsleitfaden beachten',
'aria-label': 'Redaktionsleitfaden beachten',
text: WARNING_ICON
} );
$help.before( $icon );
return true;
}
}


// Klassischer Wikitext-Editor (Aktion "edit"/"submit"): Kernhook, der
// Klassischer Wikitext-Editor: Kernhook, der beim Anzeigen des
// beim Anzeigen des Bearbeitungsformulars feuert.
// Bearbeitungsformulars feuert (auch bei AJAX-Nachladen, z. B. beim
// Bearbeiten einzelner Abschnitte).
mw.hook( 'wikipage.editform' ).add( function ( $editForm ) {
mw.hook( 'wikipage.editform' ).add( function ( $editForm ) {
insertNotice( $editForm );
insertClassicNotice( $editForm );
} );
} );


// VisualEditor: eigener Aktivierungs-Hook, da dort kein klassisches
// VisualEditor: die Werkzeugleiste wird nach dem Aktivierungs-Hook
// Bearbeitungsformular existiert.
// teils noch asynchron fertig aufgebaut, daher kurz nachpruefen
// (max. ca. 5 Sekunden).
mw.hook( 've.activationComplete' ).add( function () {
mw.hook( 've.activationComplete' ).add( function () {
var $heading = $( '#firstHeading' );
var tries = 0;
if ( $heading.length ) {
var iv = setInterval( function () {
insertNotice( $heading );
tries++;
}
if ( insertVeIcon() || tries > 20 ) {
clearInterval( iv );
}
}, 250 );
} );
} );
}() );
}() );

Version vom 9. September 2026, 05:33 Uhr

/* Das Burger-Menü-JavaScript, der Admin-Link zu den Spezialseiten und die 'Anmelden'-Beschriftung für abgemeldete Besucher wurden in den PhoenixSkin-Fork übernommen (resources/phoenix-custom.js) und hier entfernt, da PhoenixSkin seit 2026-09-08 der Standard-Skin des Wikis ist. */

/* Hinweis auf den Redaktionsleitfaden im Bearbeiten-Modus. Bewusst hier
   in Common.js statt im Skin hinterlegt, damit Text/Ziel-Seite/Optik
   direkt im Wiki gepflegt werden koennen, ohne den Skin anzufassen.

   - Klassischer Wikitext-Editor: deutliche Hinweisbox mit Warnsymbol
     UNTERHALB des Quelltext-Feldes (nicht ueber dem ganzen Formular).
   - VisualEditor: das gleiche Warnsymbol als kleines Icon oben in der
     Werkzeugleiste, direkt vor dem Hilfe-("?")-Knopf. */
( function () {
	var WARNING_ICON = '⚠';

	function insertClassicNotice( $editForm ) {
		if ( document.getElementById( 'phoenix-editnotice-leitfaden' ) ) {
			return;
		}
		var $anchor = $editForm.find( '#wpTextbox1' );
		if ( !$anchor.length ) {
			$anchor = $editForm.find( 'textarea' ).first();
		}
		if ( !$anchor.length ) {
			return;
		}
		// Falls CodeMirror aktiv ist, haengt es seinen eigentlichen
		// Editor-Container direkt hinter die (dann versteckte) Textarea -
		// den Hinweis in dem Fall dahinter statt davor einfuegen.
		var $cm = $anchor.next( '.cm-editor, .CodeMirror' );
		var $insertAfter = $cm.length ? $cm : $anchor;

		var href = mw.util.getUrl( 'Phoenix_Larp_Wiki:Wiki-Projekt/Redaktionsleitfaden' );
		var $notice = $( '<div>', { id: 'phoenix-editnotice-leitfaden' } ).append(
			$( '<span>', { 'class': 'phoenix-editnotice-icon', 'aria-hidden': 'true' } ).text( WARNING_ICON ),
			$( '<span>', { 'class': 'phoenix-editnotice-text' } ).append(
				document.createTextNode( 'Bitte beachte beim Bearbeiten den ' ),
				$( '<a>', { href: href, text: 'Redaktionsleitfaden' } ),
				document.createTextNode( '.' )
			)
		);
		$insertAfter.after( $notice );
	}

	function insertVeIcon() {
		if ( document.getElementById( 'phoenix-ve-editnotice-icon' ) ) {
			return true;
		}
		var $help = $( '.oo-ui-toolbar-bar [aria-label="Hilfe"]' ).first();
		if ( !$help.length ) {
			return false;
		}
		var href = mw.util.getUrl( 'Phoenix_Larp_Wiki:Wiki-Projekt/Redaktionsleitfaden' );
		var $icon = $( '<a>', {
			id: 'phoenix-ve-editnotice-icon',
			href: href,
			target: '_blank',
			rel: 'noopener',
			title: 'Redaktionsleitfaden beachten',
			'aria-label': 'Redaktionsleitfaden beachten',
			text: WARNING_ICON
		} );
		$help.before( $icon );
		return true;
	}

	// Klassischer Wikitext-Editor: Kernhook, der beim Anzeigen des
	// Bearbeitungsformulars feuert (auch bei AJAX-Nachladen, z. B. beim
	// Bearbeiten einzelner Abschnitte).
	mw.hook( 'wikipage.editform' ).add( function ( $editForm ) {
		insertClassicNotice( $editForm );
	} );

	// VisualEditor: die Werkzeugleiste wird nach dem Aktivierungs-Hook
	// teils noch asynchron fertig aufgebaut, daher kurz nachpruefen
	// (max. ca. 5 Sekunden).
	mw.hook( 've.activationComplete' ).add( function () {
		var tries = 0;
		var iv = setInterval( function () {
			tries++;
			if ( insertVeIcon() || tries > 20 ) {
				clearInterval( iv );
			}
		}, 250 );
	} );
}() );