diff --git a/components.js b/components.js index 4bc114685b..01fd5f9f4a 100644 --- a/components.js +++ b/components.js @@ -35,7 +35,8 @@ var components = { "meta": { "path": "components/prism-{id}", "noCSS": true, - "examplesPath": "examples/prism-{id}" + "examplesPath": "examples/prism-{id}", + "addCheckAll": true }, "markup": { "title": "Markup", diff --git a/download.html b/download.html index 103d81329e..3cb74e2413 100644 --- a/download.html +++ b/download.html @@ -71,7 +71,8 @@ column-span: all; } - section.options#category-languages label[data-id="javascript"] { + section.options#category-languages label[data-id="javascript"], + section.options label[data-id^="check-all-"] { border-bottom: 1px solid #aaa; padding-bottom: 1em; margin-bottom: 1em; diff --git a/download.js b/download.js index 742da9716b..e56e58710c 100644 --- a/download.js +++ b/download.js @@ -64,6 +64,37 @@ for (var category in components) { }, inside: '#components' }); + + if (all.meta.addCheckAll) { + $u.element.create('label', { + attributes: { + 'data-id': 'check-all-' + category + }, + contents: [ + { + tag: 'input', + properties: { + type: 'checkbox', + name: 'check-all-' + category, + value: '', + checked: false, + onclick: (function(category, all){ + return function () { + var checkAll = this; + $$('input[name="download-' + category + '"]').forEach(function(input) { + all[input.value].enabled = input.checked = checkAll.checked; + }); + + update(category); + }; + })(category, all) + } + }, + 'Select/unselect all' + ], + inside: all.meta.section + }); + } for (var id in all) { if(id === 'meta') { @@ -266,10 +297,11 @@ function update(updatedCategory, updatedId){ for (var category in components) { var all = components[category]; - + var allChecked = true; + for (var id in all) { var info = all[id]; - + if (info.enabled || id == updatedId) { var distro = info.files[minified? 'minified' : 'dev']; @@ -295,18 +327,28 @@ function update(updatedCategory, updatedId){ } }); } + if (id !== 'meta' && !info.enabled) { + allChecked = false; + } + } + + if (all.meta.addCheckAll) { + $('input[name="check-all-' + category + '"]').checked = allChecked; } } total.all = total.js + total.css; - updated.all = updated.js + updated.css; - - $u.element.prop($('label[data-id="' + updatedId + '"] .filesize'), { - textContent: prettySize(updated.all), - title: (updated.js? Math.round(100 * updated.js / updated.all) + '% JavaScript' : '') + - (updated.js && updated.css? ' + ' : '') + - (updated.css? Math.round(100 * updated.css / updated.all) + '% CSS' : '') - }); + + if (updatedId) { + updated.all = updated.js + updated.css; + + $u.element.prop($('label[data-id="' + updatedId + '"] .filesize'), { + textContent: prettySize(updated.all), + title: (updated.js ? Math.round(100 * updated.js / updated.all) + '% JavaScript' : '') + + (updated.js && updated.css ? ' + ' : '') + + (updated.css ? Math.round(100 * updated.css / updated.all) + '% CSS' : '') + }); + } $('#filesize').textContent = prettySize(total.all);