MediaWiki:Mobile.js: Różnice pomiędzy wersjami

Z Wikisłownika – wolnego słownika wielojęzycznego
Usunięta treść Dodana treść
od niedawna mamy wszedzie puste <dd> w kazdym polu, zob. 'BTW' w Specjalna:Diff/6179472
poprawka do poprzedniej edycji
Linia 13: Linia 13:
$( function () {
$( function () {
$( 'dl:has(.field)' ).each( function () {
$( 'dl:has(.field)' ).each( function () {
var nxtSbl = this.nextElementSibling || nextElementSibling( this );
var dds, dd0, dd1,
nxtSbl = this.nextElementSibling || nextElementSibling( this );
if ( nxtSbl && nxtSbl.nodeName !== 'DL' && (
if ( nxtSbl && nxtSbl.nodeName !== 'DL' && (
Linia 23: Linia 24:
}
}
var dd = this.getElementsByTagName( 'dd' )[ 0 ];
dds = this.getElementsByTagName( 'dd' );
dd0 = dds[0];
dd1 = dds[1];
if ( !dd || dd.textContent === '' || dd.textContent === '(1.1)' ) {
if ( !dds || dds.length === 0 || (
// puste <dd> w każdym polu, zob. [[Specjalna:Diff/6179472]]
dds.length === 1 && dd0.textContent === ''
) || (
// numeracja w pustym polu przykładów
dd1 && dd1.textContent === '(1.1)'
) ||
// jak dawniej, wg parsera opartego na Tidy
dd0.textContent === '(1.1)'
) {
this.style.display = 'none';
this.style.display = 'none';
}
}

Wersja z 18:59, 11 maj 2018

// http://stackoverflow.com/questions/6548748/portability-of-nextelementsibling-nextsibling
function nextElementSibling( el ) {
    do { el = el.nextSibling } while ( el && el.nodeType !== 1 );
    return el;
}

// Ukrywanie niewypełnionych pól

if (
	mw.config.get( 'wgNamespaceNumber' ) === 0 &&
	mw.config.get( 'wgAction' ) === 'view'
) {
	$( function () {
		$( 'dl:has(.field)' ).each( function () {
			var dds, dd0, dd1,
				nxtSbl = this.nextElementSibling || nextElementSibling( this );
			
			if ( nxtSbl && nxtSbl.nodeName !== 'DL' && (
				nxtSbl.nodeName === 'P'  ||  // sekcja 'znaczenia'
				nxtSbl.nodeName === 'UL' ||  // lista tłumaczeń
				nxtSbl.className === 'mw-references-wrap' // lista przypisów
			) ) {
				return true;
			}
	
			dds = this.getElementsByTagName( 'dd' );
			dd0 = dds[0];
			dd1 = dds[1];
			
			if ( !dds || dds.length === 0 || (
				// puste <dd> w każdym polu, zob. [[Specjalna:Diff/6179472]]
				dds.length === 1 && dd0.textContent === ''
			) || (
				// numeracja w pustym polu przykładów
				dd1 && dd1.textContent === '(1.1)'
			) ||
				// jak dawniej, wg parsera opartego na Tidy
				dd0.textContent === '(1.1)'
			) {
				this.style.display = 'none';
			}
		} );
	} );
}

// Elementy NavFrame - przeróbka kodu z [[:en:MediaWiki:Mobile.js]]

function navToggles() {
	var divs = document.getElementsByClassName
		? document.getElementsByClassName( 'NavFrame' )
		: document.getElementsByTagName( 'div' );
		
	for ( var i = 0; i < divs.length; i++ ) {
		if ( divs[ i ].className.indexOf( 'NavFrame' ) !== -1 ) {
			createNavToggle( divs[ i ] );
		}
	}
}
 
var NavigationBarHide = 'ukryj ▲';
var NavigationBarShow = 'pokaż ▼';
 
function createNavToggle( navFrame ) {
	var navHead, navToggle, navContent;
	
	for ( var j = 0; j < navFrame.childNodes.length; j++ ) {
		var div = navFrame.childNodes[ j ];
		
		switch ( div.className ) {
			case 'NavHead':
				navHead = div;
				break;
			case 'NavContent':
				navContent = div;
				break;
		}
	}
	
	if ( !navHead || !navContent ) {
		return;
	}

	navToggle = document.createElement( 'a' );
	navToggle.setAttribute( 'href', 'javascript:(function (){})()' );

	var toggle = document.createElement( 'span' );
	toggle.className = 'NavToggle mw-ui-button mw-ui-progressive';
	toggle.appendChild( navToggle );

	navHead.insertBefore( toggle, navHead.firstChild );
	
	navHead.onclick = function () {
		if ( navContent ) {
			var s = navContent.style;
			
			if ( s.display === 'none' ) {
				navToggle.innerHTML = NavigationBarHide;
				s.display = 'block';
			} else {
				navToggle.innerHTML = NavigationBarShow;
				s.display = 'none';
			}
		}
	};
	
	navHead.onclick();
}

$( function () {
	navToggles();
} );