Zum Inhalt springen

MediaWiki:Common.js: Unterschied zwischen den Versionen

Aus OBS Wiki
Nimz (Diskussion | Beiträge)
Keine Bearbeitungszusammenfassung
Ecks (Diskussion | Beiträge)
Keine Bearbeitungszusammenfassung
 
(12 dazwischenliegende Versionen von 3 Benutzern werden nicht angezeigt)
Zeile 7: Zeile 7:
  */
  */
if ( mw.config.get( 'wgArticleId' ) == 0 && mw.config.get( 'wgNamespaceNumber' ) == 2 ) {
if ( mw.config.get( 'wgArticleId' ) == 0 && mw.config.get( 'wgNamespaceNumber' ) == 2 ) {
        var titleParts = mw.config.get( 'wgPageName' ).split( '/' );
var titleParts = mw.config.get( 'wgPageName' ).split( '/' );
        // Make sure there was a part before and after the slash
// Make sure there was a part before and after the slash
        // And that the latter is 'skin.js' or 'skin.css'
// And that the latter is 'skin.js' or 'skin.css'
        if ( titleParts.length == 2 ) {
if ( titleParts.length == 2 ) {
                var userSkinPage = titleParts.shift() + '/' + mw.config.get( 'skin' );
var userSkinPage = titleParts.shift() + '/' + mw.config.get( 'skin' );
                if ( titleParts.slice(-1) == 'skin.js' ) {
if ( titleParts.slice(-1) == 'skin.js' ) {
                        window.location.href = mw.util.wikiGetlink( userSkinPage + '.js' );
window.location.href = mw.util.wikiGetlink( userSkinPage + '.js' );
                } else if ( titleParts.slice(-1) == 'skin.css' ) {
} else if ( titleParts.slice(-1) == 'skin.css' ) {
                        window.location.href = mw.util.wikiGetlink( userSkinPage + '.css' );
window.location.href = mw.util.wikiGetlink( userSkinPage + '.css' );
                }
}
        }
}
}
}
 
/* this does not work at all :( */
/*
// Book specific
// Book specific
//var wgBookName = ( mw.config.get( 'wgPageName' ).split( '/', 1)[0] || '' ).split( ':', 2 ).join( ':' );
var wgBookName = ( mw.config.get( 'wgPageName' ).split( '/', 1)[0] || '' ).split( ':', 2 ).join( ':' );
//importStylesheet('MediaWiki:Common.css/' + wgBookName);
importStylesheet('MediaWiki:Common.css/' + wgBookName);


// makeCollapsible (remove when deployed)
// makeCollapsible (remove when deployed)
//importStylesheet('MediaWiki:JQuery-makeCollapsible.css');
importStylesheet('MediaWiki:JQuery-makeCollapsible.css');
importScript('MediaWiki:JQuery-makeCollapsible.js');  
importScript('MediaWiki:JQuery-makeCollapsible.js');  


Zeile 43: Zeile 44:


if ( mw.config.get( 'wgCanonicalSpecialPageName' ) == 'Watchlist' ) {
if ( mw.config.get( 'wgCanonicalSpecialPageName' ) == 'Watchlist' ) {
importScript('MediaWiki:Common.js/WatchlistNotice.js');
importScript('MediaWiki:Common.js/WatchlistNotice.js');
} else if ( $.inArray( mw.config.get( 'wgAction' ), ['edit', 'submit', 'upload'] ) != -1 ) {
} else if ( $.inArray( mw.config.get( 'wgAction' ), ['edit', 'submit', 'upload'] ) != -1 ) {
importScript('MediaWiki:Common.js/Special_characters.js');
importScript('MediaWiki:Common.js/Special_characters.js');
importScript('MediaWiki:Common.js/Toolbox.js');
importScript('MediaWiki:Common.js/Toolbox.js');
}
}


// Load sysop-specific JavaScript/CSS from [[MediaWiki:Common.js/Sysop.js]] and [[MediaWiki:Common.css/Sysop.css]]
// Load sysop-specific JavaScript/CSS from [[MediaWiki:Common.js/Sysop.js]] and [[MediaWiki:Common.css/Sysop.css]]
if ( $.inArray( 'sysop', wgUserGroups) > -1 ) {
if ( $.inArray( 'sysop', wgUserGroups) > -1 ) {
//importStylesheet('MediaWiki:Common.css/Sysop.css');
importStylesheet('MediaWiki:Common.css/Sysop.css');
if ( !window.disableSysopJS ) {
if ( !window.disableSysopJS ) {
  $(function(){
$(function(){
  importScript('MediaWiki:Common.js/Sysop.js');
importScript('MediaWiki:Common.js/Sysop.js');
   });
});
}
}
}
*/
 
// Faster Collapsible Containers
// Maintainer: [[User:Darklama]]
 
// images to use for hide/show states
//var collapse_action_hide = 'https://upload.wikimedia.org/wikipedia/commons/1/10/MediaWiki_Vector_skin_action_arrow.png';
//var collapse_action_show = 'https://upload.wikimedia.org/wikipedia/commons/4/41/MediaWiki_Vector_skin_right_arrow.png';
var collapse_action_hide = '';
var collapse_action_show = '';
 
// toggle state of collapsible boxes
function obs_klapp_zu( $c )
{
$c.addClass( 'selected' );
$c.children( '.body' ).each( function() { this.setAttribute( 'hidden', 'until-found' ); } );
}
 
function obs_klapp_auf( $c )
{
$c.removeClass( 'selected' );
$c.children( '.body' ).each( function() { this.removeAttribute( 'hidden' ); } );
}
 
function collapsible_boxes()
{
// Weiterleitung: Link auf den alten Titel als Selbstlink behandeln
var redirectedFrom = mw.config.get( 'wgRedirectedFrom' );
if ( redirectedFrom ) {
var wanted = redirectedFrom.replace( /_/g, ' ' );
$( '.obs-nav a[title]' ).each( function() {
if ( $( this ).attr( 'title' ).replace( /_/g, ' ' ) === wanted ) {
$( this ).addClass( 'mw-selflink selflink' );
}
} );
}
 
$( 'div.collapsible' ).each( function() {
var $c = $( this );
$c.addClass( 'obs-klapp-js' );   // hebt das CSS-Startversteck (display:none) im Navigationskasten auf
 
// offen, wenn der Inhalt den echten Selbstlink enthaelt, sonst zu
var offen = $c.children( '.body' ).find( 'a.mw-selflink' ).not( '.mw-selflink-fragment' ).length > 0;
if ( offen ) { obs_klapp_auf( $c ); } else { obs_klapp_zu( $c ); }
 
$c.children( '.title' ).on( 'click', function( e ) {
if ( $( e.target ).closest( '.obs-nav-alle' ).length ) { return; }
if ( $c.hasClass( 'selected' ) ) { obs_klapp_auf( $c ); } else { obs_klapp_zu( $c ); }
} );
 
// Browser-Suche hat einen Treffer im zugeklappten Inhalt: oeffnen, samt uebergeordneten Klapptexten
$c.children( '.body' ).on( 'beforematch', function() {
obs_klapp_auf( $c );
$c.parents( '.collapsible' ).each( function() { obs_klapp_auf( $( this ) ); } );
} );
} );
 
// Tabellen mit class="collapsible" wie bisher (kein until-found, Zeilen lassen sich nicht so verstecken)
$( 'table.collapsible' ).each( function() {
var $table = $( this ), rows = this.rows, cell = rows.item( 0 ).cells.item( 0 );
$( rows.item( 0 ) ).on( 'click', function() {
var zu = $table.toggleClass( 'selected' ).hasClass( 'selected' );
$( rows ).next().toggle( !zu );
} ).trigger( 'click' );
} );
 
obs_nav_alle_knoepfe();
obs_nav_markiere_hash();
}
}
function obs_nav_markiere_hash()
{
var $nav = $('.obs-nav');
if ( !$nav.length ) { return; }
$nav.find('.obs-nav-aktiv').removeClass('obs-nav-aktiv');
$nav.removeClass('obs-nav-hash');
var hash = window.location.hash;
if ( !hash || hash.length < 2 ) { return; }
var $ziel = $nav.find('a.mw-selflink-fragment').filter( function() {
return $(this).attr('href') === hash;
});
if ( !$ziel.length ) { return; }
$nav.addClass('obs-nav-hash');
$ziel.addClass('obs-nav-aktiv');
// geschlossene Elterngruppen oeffnen (Klick auf den Kopf toggelt)
$ziel.parents('.collapsible.selected').each( function() {
$(this).children('.title').trigger('click');
});
}
// Navigationskasten: "alle auf"/"alle zu" fuer Gruppen mit Untergruppen
function obs_nav_alle_knoepfe()
{
    // nur Hauptmenues (erste Ebene); verschachtelte Knoepfe beeinflussen sich sonst gegenseitig
$('.obs-nav-inhalt > .collapsible, .obs-nav-inhalt > div:not(.collapsible) > .collapsible').each( function() {
var $c = $(this);
if ( !$c.find('.collapsible').length ) { return; }
var $title = $c.children('.title');
var $btn = $('<a class="obs-nav-alle" href="#" role="button"></a>');
var setLabel = function() {
var zu = $c.hasClass('selected') || $c.find('.collapsible.selected').length > 0;
$btn.text( zu ? 'Ausklappen' : 'Einklappen' )
    .attr( 'title', zu ? 'Alle Untergruppen ausklappen' : 'Alle Untergruppen einklappen' );
};
$btn.on( 'click', function( e ) {
e.preventDefault();
e.stopPropagation();
var oeffnen = $c.hasClass('selected') || $c.find('.collapsible.selected').length > 0;
if ( oeffnen ) {
$c.add( $c.find('.collapsible') ).filter('.selected').each( function() {
$(this).children('.title').trigger('click');
});
} else {
$c.find('.collapsible').not('.selected').each( function() {
$(this).children('.title').trigger('click');
});
}
setTimeout( setLabel, 0 );
});
// Label nachziehen, wenn Untergruppen einzeln geklickt werden
$c.on( 'click', '.title', function() { setTimeout( setLabel, 0 ); } );
$title.prepend( $btn );
setLabel();
});
}
$(window).on( 'hashchange', obs_nav_markiere_hash );
$(document).ready( collapsible_boxes );
/* Adminhilfe-Sprung (MINERVA, 2026-09-28)
* F1-Sprungpunkte aus OBS (Vorlage:Adminhilfe-Sprung) fuehren angemeldete
* Benutzer auf die Seite im internen Adminwiki. Nicht angemeldete sehen nur
* den Hinweis der Vorlage. Ansicht mit ?redirect=no bleibt auf der Seite.
*/
( function () {
// PLATZHALTER: Adresse des Adminwikis bis einschliesslich "/index.php/" (oder "/wiki/")
var OBS_ADMINWIKI = 'http://192.168.254.55/index.php/';
mw.loader.using( 'mediawiki.util' ).then( function () {
$( function () {
var el = document.querySelector( '.obs-intern-sprung[data-ziel]' );
var ziel = el ? el.getAttribute( 'data-ziel' ) : '';
if ( !ziel || mw.config.get( 'wgUserName' ) === null ) {
return;
}
var teile = ziel.split( '#' );
var url = OBS_ADMINWIKI + mw.util.wikiUrlencode( teile[ 0 ] ) + ( teile[ 1 ] ? '#' + teile[ 1 ] : '' );
var a = document.createElement( 'a' );
a.href = url;
a.textContent = 'Im Adminwiki öffnen';
el.appendChild( document.createTextNode( ' ' ) );
el.appendChild( a );
if ( mw.config.get( 'wgAction' ) === 'view' &&
!mw.util.getParamValue( 'oldid' ) &&
!mw.util.getParamValue( 'diff' ) &&
mw.util.getParamValue( 'redirect' ) !== 'no' ) {
location.replace( url );
}
} );
} );
}() );

Aktuelle Version vom 29. September 2026, 07:24 Uhr

/* Das folgende JavaScript wird für alle Benutzer geladen. */
/**
 * Redirect User:Name/skin.js and skin.css to the current skin's pages
 * (unless the 'skin' page really exists)
 * @source: http://www.mediawiki.org/wiki/Snippets/Redirect_skin.js
 * @rev: 2
 */
if ( mw.config.get( 'wgArticleId' ) == 0 && mw.config.get( 'wgNamespaceNumber' ) == 2 ) {
	var titleParts = mw.config.get( 'wgPageName' ).split( '/' );
	// Make sure there was a part before and after the slash
	// And that the latter is 'skin.js' or 'skin.css'
	if ( titleParts.length == 2 ) {
			var userSkinPage = titleParts.shift() + '/' + mw.config.get( 'skin' );
			if ( titleParts.slice(-1) == 'skin.js' ) {
					window.location.href = mw.util.wikiGetlink( userSkinPage + '.js' );
			} else if ( titleParts.slice(-1) == 'skin.css' ) {
					window.location.href = mw.util.wikiGetlink( userSkinPage + '.css' );
			}
	}
}
/* this does not work at all :( */
/*
// Book specific
var wgBookName = ( mw.config.get( 'wgPageName' ).split( '/', 1)[0] || '' ).split( ':', 2 ).join( ':' );
importStylesheet('MediaWiki:Common.css/' + wgBookName);

// makeCollapsible (remove when deployed)
importStylesheet('MediaWiki:JQuery-makeCollapsible.css');
importScript('MediaWiki:JQuery-makeCollapsible.js'); 

// Imported scripts
importScript('MediaWiki:Common.js/Relics.js');
importScript('MediaWiki:Common.js/ExtraTools.js');
importScript('MediaWiki:Common.js/CollapseElements.js');
importScript('MediaWiki:Common.js/NavigationTabs.js');
importScript('MediaWiki:Common.js/Displaytitle.js');
importScript('MediaWiki:Common.js/RandomBook.js');
importScript('MediaWiki:Common.js/Perbook.js');
importScript('MediaWiki:Common.js/tabs.js');
importScript('MediaWiki:Common.js/top.js');
importScript('MediaWiki:Common.js/review.js');
importScript('MediaWiki:Common.js/Categories.js');
importScript('MediaWiki:Common.js/use.js');

if ( mw.config.get( 'wgCanonicalSpecialPageName' ) == 'Watchlist' ) {
importScript('MediaWiki:Common.js/WatchlistNotice.js');
} else if ( $.inArray( mw.config.get( 'wgAction' ), ['edit', 'submit', 'upload'] ) != -1 ) {
importScript('MediaWiki:Common.js/Special_characters.js');
importScript('MediaWiki:Common.js/Toolbox.js');
}

// Load sysop-specific JavaScript/CSS from [[MediaWiki:Common.js/Sysop.js]] and [[MediaWiki:Common.css/Sysop.css]]
if ( $.inArray( 'sysop', wgUserGroups) > -1 ) {
importStylesheet('MediaWiki:Common.css/Sysop.css');
if ( !window.disableSysopJS ) {
$(function(){
importScript('MediaWiki:Common.js/Sysop.js');
});
}
}
*/

// Faster Collapsible Containers
// Maintainer: [[User:Darklama]]

// images to use for hide/show states
//var collapse_action_hide = 'https://upload.wikimedia.org/wikipedia/commons/1/10/MediaWiki_Vector_skin_action_arrow.png';
//var collapse_action_show = 'https://upload.wikimedia.org/wikipedia/commons/4/41/MediaWiki_Vector_skin_right_arrow.png';
var collapse_action_hide = '';
var collapse_action_show = '';

// toggle state of collapsible boxes
function obs_klapp_zu( $c )
{
	$c.addClass( 'selected' );
	$c.children( '.body' ).each( function() { this.setAttribute( 'hidden', 'until-found' ); } );
}

function obs_klapp_auf( $c )
{
	$c.removeClass( 'selected' );
	$c.children( '.body' ).each( function() { this.removeAttribute( 'hidden' ); } );
}

function collapsible_boxes()
{
	// Weiterleitung: Link auf den alten Titel als Selbstlink behandeln
	var redirectedFrom = mw.config.get( 'wgRedirectedFrom' );
	if ( redirectedFrom ) {
		var wanted = redirectedFrom.replace( /_/g, ' ' );
		$( '.obs-nav a[title]' ).each( function() {
			if ( $( this ).attr( 'title' ).replace( /_/g, ' ' ) === wanted ) {
				$( this ).addClass( 'mw-selflink selflink' );
			}
		} );
	}

	$( 'div.collapsible' ).each( function() {
		var $c = $( this );
		$c.addClass( 'obs-klapp-js' );   // hebt das CSS-Startversteck (display:none) im Navigationskasten auf

		// offen, wenn der Inhalt den echten Selbstlink enthaelt, sonst zu
		var offen = $c.children( '.body' ).find( 'a.mw-selflink' ).not( '.mw-selflink-fragment' ).length > 0;
		if ( offen ) { obs_klapp_auf( $c ); } else { obs_klapp_zu( $c ); }

		$c.children( '.title' ).on( 'click', function( e ) {
			if ( $( e.target ).closest( '.obs-nav-alle' ).length ) { return; }
			if ( $c.hasClass( 'selected' ) ) { obs_klapp_auf( $c ); } else { obs_klapp_zu( $c ); }
		} );

		// Browser-Suche hat einen Treffer im zugeklappten Inhalt: oeffnen, samt uebergeordneten Klapptexten
		$c.children( '.body' ).on( 'beforematch', function() {
			obs_klapp_auf( $c );
			$c.parents( '.collapsible' ).each( function() { obs_klapp_auf( $( this ) ); } );
		} );
	} );

	// Tabellen mit class="collapsible" wie bisher (kein until-found, Zeilen lassen sich nicht so verstecken)
	$( 'table.collapsible' ).each( function() {
		var $table = $( this ), rows = this.rows, cell = rows.item( 0 ).cells.item( 0 );
		$( rows.item( 0 ) ).on( 'click', function() {
			var zu = $table.toggleClass( 'selected' ).hasClass( 'selected' );
			$( rows ).next().toggle( !zu );
		} ).trigger( 'click' );
	} );

	obs_nav_alle_knoepfe();
	obs_nav_markiere_hash();
}

function obs_nav_markiere_hash()
{
var $nav = $('.obs-nav');
if ( !$nav.length ) { return; }
$nav.find('.obs-nav-aktiv').removeClass('obs-nav-aktiv');
$nav.removeClass('obs-nav-hash');
var hash = window.location.hash;
if ( !hash || hash.length < 2 ) { return; }
var $ziel = $nav.find('a.mw-selflink-fragment').filter( function() {
	return $(this).attr('href') === hash;
});
if ( !$ziel.length ) { return; }
$nav.addClass('obs-nav-hash');
$ziel.addClass('obs-nav-aktiv');
// geschlossene Elterngruppen oeffnen (Klick auf den Kopf toggelt)
$ziel.parents('.collapsible.selected').each( function() {
	$(this).children('.title').trigger('click');
});
}

// Navigationskasten: "alle auf"/"alle zu" fuer Gruppen mit Untergruppen
function obs_nav_alle_knoepfe()
{
    // nur Hauptmenues (erste Ebene); verschachtelte Knoepfe beeinflussen sich sonst gegenseitig
	$('.obs-nav-inhalt > .collapsible, .obs-nav-inhalt > div:not(.collapsible) > .collapsible').each( function() {
		var $c = $(this);
		if ( !$c.find('.collapsible').length ) { return; }
		var $title = $c.children('.title');
		var $btn = $('<a class="obs-nav-alle" href="#" role="button"></a>');
		var setLabel = function() {
			var zu = $c.hasClass('selected') || $c.find('.collapsible.selected').length > 0;
			$btn.text( zu ? 'Ausklappen' : 'Einklappen' )
    .attr( 'title', zu ? 'Alle Untergruppen ausklappen' : 'Alle Untergruppen einklappen' );
		};
		$btn.on( 'click', function( e ) {
			e.preventDefault();
			e.stopPropagation();
			var oeffnen = $c.hasClass('selected') || $c.find('.collapsible.selected').length > 0;
			if ( oeffnen ) {
				$c.add( $c.find('.collapsible') ).filter('.selected').each( function() {
					$(this).children('.title').trigger('click');
				});
			} else {
				$c.find('.collapsible').not('.selected').each( function() {
					$(this).children('.title').trigger('click');
				});
			}
			setTimeout( setLabel, 0 );
		});
		// Label nachziehen, wenn Untergruppen einzeln geklickt werden
		$c.on( 'click', '.title', function() { setTimeout( setLabel, 0 ); } );
		$title.prepend( $btn );
		setLabel();
	});
}

$(window).on( 'hashchange', obs_nav_markiere_hash );

$(document).ready( collapsible_boxes );

/* Adminhilfe-Sprung (MINERVA, 2026-09-28)
 * F1-Sprungpunkte aus OBS (Vorlage:Adminhilfe-Sprung) fuehren angemeldete
 * Benutzer auf die Seite im internen Adminwiki. Nicht angemeldete sehen nur
 * den Hinweis der Vorlage. Ansicht mit ?redirect=no bleibt auf der Seite.
 */
( function () {
	// PLATZHALTER: Adresse des Adminwikis bis einschliesslich "/index.php/" (oder "/wiki/")
	var OBS_ADMINWIKI = 'http://192.168.254.55/index.php/';

	mw.loader.using( 'mediawiki.util' ).then( function () {
		$( function () {
			var el = document.querySelector( '.obs-intern-sprung[data-ziel]' );
			var ziel = el ? el.getAttribute( 'data-ziel' ) : '';
			if ( !ziel || mw.config.get( 'wgUserName' ) === null ) {
				return;
			}
			var teile = ziel.split( '#' );
			var url = OBS_ADMINWIKI + mw.util.wikiUrlencode( teile[ 0 ] ) + ( teile[ 1 ] ? '#' + teile[ 1 ] : '' );

			var a = document.createElement( 'a' );
			a.href = url;
			a.textContent = 'Im Adminwiki öffnen';
			el.appendChild( document.createTextNode( ' ' ) );
			el.appendChild( a );

			if ( mw.config.get( 'wgAction' ) === 'view' &&
				!mw.util.getParamValue( 'oldid' ) &&
				!mw.util.getParamValue( 'diff' ) &&
				mw.util.getParamValue( 'redirect' ) !== 'no' ) {
				location.replace( url );
			}
		} );
	} );
}() );