You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

75 lines
2.2 KiB
JavaScript

$( function () {
// sidebar-chunk only applies to desktop-small, but the toggles are hidden at
// other resolutions regardless and the css overrides any visible effects.
var $dropdowns = $( '#personal, #p-variants-desktop, .sidebar-chunk' );
/**
* Desktop menu click-toggling
*
* We're not even checking if it's desktop because the classes in play have no effect
* on mobile regardless... this may break things at some point, though.
*/
/**
* Close all dropdowns
*/
function closeOpen() {
$dropdowns.removeClass( 'dropdown-active' );
}
/**
* Click behaviour
*/
$dropdowns.on( 'click', function ( e ) {
// Check if it's already open so we don't open it again
// eslint-disable-next-line no-jquery/no-class-state
if ( $( this ).hasClass( 'dropdown-active' ) ) {
if ( $( e.target ).closest( $( 'h2, #p-variants-desktop h3' ) ).length > 0 ) {
// treat reclick on the header as a toggle
closeOpen();
}
// Clicked inside an open menu; don't do anything
} else {
closeOpen();
e.stopPropagation(); // stop hiding it!
$( this ).addClass( 'dropdown-active' );
}
} );
$( document ).on( 'click', function ( e ) {
if ( $( e.target ).closest( $dropdowns ).length > 0 ) {
// Clicked inside an open menu; don't close anything
} else {
closeOpen();
}
} );
/**
* Experimental overflowing table scrolling
*/
// Gotta wrap them for this to work; maybe later the parser etc will do this for us?!
$( 'div > table' ).wrap( '<div class="content-table-wrapper"><div class="content-table"></div></div>' );
$( '.content-table-wrapper' ).prepend( '<div class="content-table-toggle"></div>' );
function unOverflowTables() {
$( 'div > table' ).each( function () {
var $table = $( this ),
$wrapper = $table.parent().parent();
if ( $table.outerWidth() > $wrapper.outerWidth() ) {
$wrapper.addClass( 'overflowed' );
// Frame styled tables...
// eslint-disable-next-line no-jquery/no-class-state
if ( $table.hasClass( 'wikitable' ) || $table.hasClass( 'mw-datatable' ) ) {
$wrapper.addClass( 'framed' );
}
} else {
$wrapper.removeClass( [ 'overflowed', 'framed' ] );
}
} );
}
unOverflowTables();
$( window ).on( 'resize', unOverflowTables );
} );