1 window.onload = function() {
2 var fileLinkBase = document.body.getAttribute('data-file-link-base');
3 var buildServer = document.body.getAttribute('data-build-server');
4 var form = document.createElement('form');
6 form.action = buildServer;
7 document.getElementById('wrapper').appendChild(form);
9 var groupTemplate = document.querySelector('script[data-template-name="group"]').
12 var xhr = new XMLHttpRequest();
13 xhr.open('GET', buildServer, true);
15 xhr.onload = function() {
16 var components = JSON.parse(xhr.responseText);
18 for(var key in components.groups) {
19 var group = components.groups[key];
20 if(group.hidden) continue;
24 if(group.required || group.default) defaults.push(group.name);
28 group.class = i % 2 == 1 ? 'odd' : '';
30 group.files = group.files.map(function(fileName) {
33 desc: components.files[fileName] || '-',
34 href: fileLinkBase + fileName
39 group.depends = group.depends.map(function(dependName) {
40 var dependency = components.groups[dependName];
41 if(! dependency.reverseDepends) {
42 dependency.reverseDepends = [];
44 dependency.reverseDepends.push(group.name);
47 label: dependency.label,
51 console.log('group', group.name, 'depends', group.depends);
53 group.noDepends = true;
56 form.innerHTML += Mustache.render(groupTemplate, group);
58 var submit = document.createElement('input');
59 submit.type = 'submit';
60 submit.value = 'Download';
61 form.appendChild(submit);
63 function setGroupState(groupName, state) {
64 console.log('set state', groupName, state);
65 var checkbox = document.getElementById('group-' + groupName)
67 checkbox.checked = state;
68 updateGroupState({ target: checkbox });
72 function processDepends(groupName, value) {
73 var group = components.groups[groupName];
74 if(value && group.depends) {
75 group.depends.forEach(function(group) {
76 setGroupState(group.name, true);
78 } else if( !value && group.reverseDepends) {
79 group.reverseDepends.forEach(function(groupName) {
80 setGroupState(groupName, false);
85 function updateGroupState(event) {
86 var checkbox = event.target, classList = checkbox.parentElement.classList;
87 if(checkbox.checked) {
88 classList.remove('disabled');
90 classList.add('disabled');
92 processDepends(checkbox.getAttribute('value'), checkbox.checked);
95 Array.prototype.forEach.call(
96 document.getElementsByClassName('group-control'), function(checkbox) {
97 checkbox.addEventListener('change', updateGroupState);
101 setTimeout(function() {
103 defaults.forEach(function(groupName) {
104 setGroupState(groupName, true);