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 ); | ||
} | } | ||