You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							166 lines
						
					
					
						
							6.2 KiB
						
					
					
				
			
		
		
	
	
							166 lines
						
					
					
						
							6.2 KiB
						
					
					
				<html> | 
						|
<head> | 
						|
    <title>Litsimaja</title> | 
						|
    <meta name="viewport" content="width=device-width, initial-scale=1"> | 
						|
    <link rel="stylesheet" href="normalize.css"> | 
						|
    <link rel="stylesheet" href="skeleton.css"> | 
						|
    <link rel="stylesheet" href="custom.css"> | 
						|
 | 
						|
    <script type="text/javascript"> | 
						|
        'use strict'; | 
						|
        function hexToRgb(value) { | 
						|
            var aRgbHex = value.substring(1).match(/.{1,2}/g); | 
						|
            var aRgb = [ | 
						|
                parseInt(aRgbHex[0], 16), | 
						|
                parseInt(aRgbHex[1], 16), | 
						|
                parseInt(aRgbHex[2], 16) | 
						|
            ]; | 
						|
            return aRgb; | 
						|
        } | 
						|
 | 
						|
        function show_loading(visible) { | 
						|
            document.getElementById('loading').style.visibility = visible ? 'visible' : 'hidden'; | 
						|
        } | 
						|
 | 
						|
        function send_get(url) { | 
						|
            show_loading(true); | 
						|
            var http = new XMLHttpRequest(); | 
						|
            http.open('GET', url, true); | 
						|
            http.setRequestHeader('accept', 'application/json'); | 
						|
            http.onreadystatechange = function() { | 
						|
                if (http.readyState == 4 && http.status == 200) { | 
						|
                    show_loading(false); | 
						|
                    updateStatus(http.responseText); | 
						|
                } | 
						|
            }; | 
						|
            http.send(); | 
						|
        } | 
						|
 | 
						|
        function send_post(url, data) { | 
						|
            show_loading(true); | 
						|
            var http = new XMLHttpRequest(); | 
						|
            http.open('POST', url, true); | 
						|
            http.setRequestHeader('Content-Type', 'application/json'); | 
						|
            http.setRequestHeader('accept', 'application/json'); | 
						|
            http.onreadystatechange = function() { | 
						|
                if (http.readyState == 4 && http.status == 200) { | 
						|
                    show_loading(false); | 
						|
                } | 
						|
            }; | 
						|
            let json = JSON.stringify(data); | 
						|
            http.send(json); | 
						|
        } | 
						|
 | 
						|
        function updateStatus(json) { | 
						|
            let status = JSON.parse(json); | 
						|
            document.getElementById('tempo').value = status.features.tempo.bpm; | 
						|
            let regions = status.features.region; | 
						|
           for (let i = 0, len = regions.length; i < len; i++) { | 
						|
                if (regions[i]) { | 
						|
                    document.getElementById('region_' + i).classList.remove('region_off'); | 
						|
                } else { | 
						|
                    document.getElementById('region_' + i).classList.add('region_off'); | 
						|
                } | 
						|
            } | 
						|
            let programs = document.getElementsByName('program_select'); | 
						|
            for (var i = 0, len = programs.length; i < len; i++) { | 
						|
                if (programs[i].value === status.features.program) { | 
						|
                    programs[i].checked = true; | 
						|
                } | 
						|
            } | 
						|
        } | 
						|
 | 
						|
        function getProgramSelection() { | 
						|
            let radios = document.getElementsByName('program_select'); | 
						|
            for (var i = 0, length = radios.length; i < length; i++) { | 
						|
                if (radios[i].checked) { | 
						|
                    return radios[i].value; | 
						|
                } | 
						|
            } | 
						|
            return null; | 
						|
        } | 
						|
 | 
						|
        function isLoop() { | 
						|
            let looping = document.getElementById('looping'); | 
						|
            return looping.checked; | 
						|
        } | 
						|
 | 
						|
        function isChanged(value) { | 
						|
            let rgb = hexToRgb(value); | 
						|
            let data = {color: [Number(rgb[0]), Number(rgb[1]), Number(rgb[2])], loop: isLoop()}; | 
						|
            send_post('program/' + getProgramSelection(), data); | 
						|
        } | 
						|
 | 
						|
        function doInit() { | 
						|
            send_post('/program/siinus.Wipes', {color: [100, 50, 0]}) | 
						|
        } | 
						|
 | 
						|
        function doBlind() { | 
						|
            send_post('/program/siinus.Static', {color: [0, 0, 0]}) | 
						|
        } | 
						|
 | 
						|
        function doCancel() { | 
						|
            send_get('/crash'); | 
						|
        } | 
						|
 | 
						|
        function switchRegion(region_id) { | 
						|
            send_get('/region/' + region_id); | 
						|
        } | 
						|
    </script> | 
						|
</head> | 
						|
 | 
						|
<body> | 
						|
    <div class="spacer-row"></div> | 
						|
    <div class="container"> | 
						|
        <div class="row"> | 
						|
            <button onclick="send_get('/status')">get</button> | 
						|
            <button onclick="doInit()">intro</button> | 
						|
            <button onclick="doCancel()">halt</button> | 
						|
            <button onclick="doBlind()">leds off</button> | 
						|
 | 
						|
            <label><input type="checkbox" id="looping" checked/><b> loop</b></label> | 
						|
        </div> | 
						|
        <div class="row"> | 
						|
            <input id="tempo" type="number" step="0.1" onchange="send_get('/tempo/set/' + parseFloat(this.value).toFixed(2))" value="{{ status.features.tempo.bpm }}"> | 
						|
            <button onclick="send_get('/tempo/sync')">sync</button> | 
						|
        </div> | 
						|
        <div class="row"> | 
						|
            {% for region in regions %} | 
						|
                {% set region_off = '' %} | 
						|
                {% if not status.features.region[region] %} | 
						|
                    {% set region_off = ' region_off' %} | 
						|
                {% endif %} | 
						|
                <button id="region_{{ region }}" class="region{{ region_off }}" onclick="switchRegion({{ region }})">zone {{ region }}</button> | 
						|
            {% endfor %} | 
						|
        </div> | 
						|
        <div class="row" id='loading' style="visibility: hidden"><b>LOADING!</b></div> | 
						|
        <div class="row"> | 
						|
            <div class="program_select one-half column"> | 
						|
                {% for group in programs %} | 
						|
                    <ul> | 
						|
                        <li>{{ group.group }}</li> | 
						|
                        {% for program in group.programs %} | 
						|
                            {% set pr_checked = '' %} | 
						|
                            {% if status.features.program == program.prg %} | 
						|
                                {% set pr_checked = ' checked' %} | 
						|
                            {% endif %} | 
						|
                            <li> | 
						|
                                <label> | 
						|
                                    <input type="radio" name="program_select" value="{{ program.prg }}"{{ pr_checked }}> | 
						|
                                    {{ program.name }} | 
						|
                                </label> | 
						|
                            </li> | 
						|
                        {% endfor %} | 
						|
                    </ul> | 
						|
                {% endfor %} | 
						|
            </div> | 
						|
        </div> | 
						|
        <div class="row"> | 
						|
            <div class ="one-third column"> | 
						|
                <input id="colorpicker" class="colorpicker" type="color" value="#ff0000" oninput="isChanged(this.value)"> | 
						|
            </div> | 
						|
            <button onclick="isChanged(document.getElementById('colorpicker').value)">Set</button> | 
						|
        </div> | 
						|
    </div> | 
						|
</body> | 
						|
</html>
 | 
						|
 |