MediaWiki:Gadget-collapsible.js
Megjegyzés: közzététel után frissítened kell a böngésződ gyorsítótárát, hogy lásd a változásokat.
- Firefox / Safari: tartsd lenyomva a Shift gombot és kattints a Frissítés gombra a címsorban, vagy használd a Ctrl–F5 vagy Ctrl–R (Macen ⌘–R) billentyűkombinációt
- Google Chrome: használd a Ctrl–Shift–R (Macen ⌘–Shift–R) billentyűkombinációt
- Internet Explorer / Edge: tartsd nyomva a Ctrl-t, és kattints a Frissítés gombra, vagy nyomj Ctrl–F5-öt
- Opera: Nyomj Ctrl–F5-öt
/**
* Az összes nyitó-csukó mechanizmus egy helyen:
* 1. NavFrame – becsukható <div>, régi rendszer
* 2. collapsible – becsukható táblázat, régi rendszer
* 3. mw-collapsible – becsukható <div> és táblázat, új rendszer (fejlesztései)
* 4. infobox – becsukható fejezetek
*/
// nyitó-csukó gombok feliratai (1., 2., 4.)
var hide = '▲ becsuk',
show = '▼ kinyit',
mw_hide = 'becsuk',
mw_show = 'kinyit';
// autocollapse határa (2., 3.) – ha ennél több becsukható doboz van,
// automatikusan becsukódnak az autocollapse osztályúak
var autoCollapseThreshold = 2;
/*
== 1. Becsukható <div> ==
*/
/**
* Show or hide content and picture (if available) of navigation bars
*
* @param {Event} e The click event
*/
function toggleNavigationBar( e ) {
var $this = $( e.target );
var $frame = $this.closest( '.NavFrame' );
// if shown now
if ( $this.text() == hide ) {
$frame.children( '.NavPic, .NavContent' ).hide();
$this.text( show );
}
// if hidden now
else if ($this.text() == show) {
$frame.children( '.NavPic, .NavContent' ).show();
$this.text( hide );
}
return false;
}
/**
* Add show/hide button to navigation bars
*/
function createNavigationBarToggleButton( $content ) {
$( 'div.NavFrame:not(.mw-collapsible) .NavHead', $content ).append(
$( '<a>' )
.attr( 'href', '#' )
.addClass( 'NavToggle' )
.text( show )
.click( toggleNavigationBar )
);
// initially hidden
$( 'div.NavFrame:not(.mw-collapsible)', $content ).children( '.NavPic, .NavContent' ).hide();
}
mw.hook( 'wikipage.content' ).add( createNavigationBarToggleButton );
/*
== 2. Becsukható táblázat ==
*/
/** Collapsible tables *********************************************************
*
* Description: Allows tables to be collapsed, showing only the header. See
* Wikipedia:NavFrame.
* Maintainers: User:R. Koot
*/
/**
* Collapse a given table.
*
* @param {Event} e The click event
*/
function collapseTable( e ) {
var $this = $( e.target );
var $rows = $this.closest( 'table.collapsible' ).find( 'tr:not(:first)' );
if ( $this.text() === hide ) {
$rows.css( 'visibility', 'collapse' );
$rows.addClass( 'row-collapsed' );
$this.text( show );
} else {
$rows.css( 'visibility', 'visible' );
$rows.removeClass( 'row-collapsed' );
$this.text( hide );
}
return false;
}
/**
* Add show/hide buttons to collapsible tables
*/
function createCollapseButtons( $content ) {
var $boxes = $( 'table.collapsible', $content ).has( 'tr:first th' );
var autoCollapse = ( $boxes.length >= autoCollapseThreshold );
$boxes.each( function () {
$this = $( this );
var $button = $( '<span>' );
var $buttonLink = $( '<a>' );
$button.css( {
'float': 'right',
'font-weight': 'normal',
'text-align': 'right',
'width': '6em'
} );
$buttonLink
.attr( 'href', '#' )
.addClass( 'collapseButton' )
.click( collapseTable )
.text( hide )
.appendTo( $button );
$button.appendTo( $this.find( 'tr:first th:first' ) );
if ( $this.hasClass( 'collapsed' ) || autoCollapse && $this.hasClass( 'autocollapse' ) ) {
$buttonLink.click();
}
} );
}
mw.hook( 'wikipage.content' ).add( createCollapseButtons );
/*
== 3. Becsukható <div> és táblázat ==
* autocollapse, sticky és olvasható (színes) nyitó-csukó gomb
* (maga a becsukás a MediaWiki-kódban)
*/
function mwCollapsibleSetup( $collapsibleContent ) {
var autoCollapse = $collapsibleContent.length >= autoCollapseThreshold;
$collapsibleContent.each( function () {
var $this = $( this );
// autocollapse
if ( autoCollapse && $this.hasClass( 'mw-autocollapse' ) ) {
$this.data( 'mw-collapsible' ).collapse();
}
// színezés
var $header = $this.find( '.navbox-title' );
if ( $header[ 0 ] && $header[ 0 ].style.color ) {
// jQuery nem jó, mert csak a közvetlen színezés kell
$header.find( '.mw-collapsible-toggle a' ).css( 'color', $header[ 0 ].style.color );
}
// sticky
if ( $this.hasClass( 'mw-sticky' ) ) {
var cookieName = 'collapsible-' + $this.attr( 'id' ),
// Expanded by default
cookie = mw.cookie.get( cookieName );
mw.cookie.set( cookieName, cookie ); // don't expire every 30 days
if ( cookie === 'collapsed' ) {
$this.data( 'mw-collapsible' ).collapse();
} else if ( cookie === 'expanded' ) {
$this.data( 'mw-collapsible' ).expand();
}
$this
.on( 'beforeExpand.mw-collapsible', function () {
mw.cookie.set( cookieName, 'expanded' );
} )
.on( 'beforeCollapse.mw-collapsible', function () {
mw.cookie.set( cookieName, 'collapsed' );
} );
}
} );
}
mw.hook( 'wikipage.collapsibleContent' ).add( mwCollapsibleSetup );
/*
== 4. Kinyitható fejezetek az új infoboxokra specializálva ==
*/
/**
* Collapse a given section.
*
* @param {jQuery.Event} e The click event
*/
function ibSectionLinkClick( e ) {
if ( e.type === 'keypress' && e.which !== 13 && e.which !== 32 ) {
// Only handle keypresses on the "Enter" or "Space" keys
return;
} else {
e.preventDefault();
e.stopPropagation();
}
var $this = $( e.target ).is( 'span' ) ? $( e.target ) : $( e.target ).parent(),
id = $this.attr( 'id' ) ? $this.attr( 'id' ).slice( 10 ) : null,
open = $this.hasClass( 'becsukva' ),
$parentInfobox = $this.closest( 'table.ujinfobox' );
if(!id) return;
$( 'tr.csoport-' + id, $parentInfobox ).toggle( open );
$( 'a', $this ).text( open ? mw_hide : mw_show );
$this.toggleClass( 'becsukva' );
$( 'tr.nyitasinfo-' + id, $parentInfobox ).toggle( !open );
}
function ibSectionCollapse( $content ) {
$( '.ujinfobox .nyitolink', $content ).each( function () {
var $this = $( this );
$this
.append( $( '<a class="nyitolink-szoveg"></a>' ).text( mw_hide ) )
.attr( {
role: 'button',
tabindex: 0
} )
.prepend( '<span>[</span>' )
.append( '<span>]</span>' )
.on( 'click.ib-collapsible keypress.ib-collapsible', ibSectionLinkClick );
if ( $this.hasClass( 'becsukva' ) ) {
// Remove class to make the event handler actually close the table
$this
.removeClass( 'becsukva' )
.click();
}
} );
}
mw.hook( 'wikipage.content' ).add( ibSectionCollapse );