MediaWiki:Common.js: Difference between revisions

No edit summary
No edit summary
 
Line 403: Line 403:
title.textContent = 'Layers';
title.textContent = 'Layers';
panel.appendChild( title );
panel.appendChild( title );
var boxes = []; // child checkboxes, parallel to `keys`
// Master "All" checkbox: checked when every layer is on, unchecked
// when none are, and a dash (indeterminate) when it's a mix.
var master = document.createElement( 'input' );
master.type = 'checkbox';
function syncMaster() {
var on = 0;
boxes.forEach( function ( b ) {
if ( b.checked ) {
on++;
}
} );
master.checked = ( boxes.length > 0 && on === boxes.length );
master.indeterminate = ( on > 0 && on < boxes.length );
}
master.addEventListener( 'change', function () {
boxes.forEach( function ( b, i ) {
b.checked = master.checked;
enabled[ keys[ i ] ] = master.checked;
} );
master.indeterminate = false;
onChange();
} );
var masterRow = document.createElement( 'label' );
masterRow.className = 'imap-legend-all';
var masterText = document.createElement( 'span' );
masterText.textContent = 'All';
masterRow.appendChild( master );
masterRow.appendChild( masterText );
panel.appendChild( masterRow );


keys.forEach( function ( k ) {
keys.forEach( function ( k ) {
Line 413: Line 448:
cb.addEventListener( 'change', function () {
cb.addEventListener( 'change', function () {
enabled[ k ] = cb.checked;
enabled[ k ] = cb.checked;
syncMaster();
onChange();
onChange();
} );
} );
boxes.push( cb );


var swatch = document.createElement( 'span' );
var swatch = document.createElement( 'span' );
Line 429: Line 466:
} );
} );


syncMaster(); // reflect the starting state (handles "default": false)
el.appendChild( panel );
el.appendChild( panel );
}
}