<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>DMX Lichtschalter</title> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="apple-mobile-web-app-capable" content="yes" /> <link href="//netdna.bootstrapcdn.com/twitter-bootstrap/2.3.2/css/bootstrap-combined.min.css" rel="stylesheet"> <style> body { background: #222; color: #eee; } input[type=range] { -webkit-appearance: slider-vertical; height: 200px; width: 60px; margin-bottom: 2em; } input[type=range]:before { content: attr(value); color: #eee; font-family: monospace; text-align: center; width: 60px; display: block; color: #fff; position: absolute; margin-bottom: 2em; } .device { clear: both; padding-top: 1em; } .channel { text-align: center; float: left; } .btn { margin-bottom: 1em; } </style> <script src="//ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script> <script src="//ajax.googleapis.com/ajax/libs/jqueryui/1.8.23/jquery-ui.min.js"></script> <script src="//netdna.bootstrapcdn.com/twitter-bootstrap/2.3.2/js/bootstrap.min.js"></script> <script src="/socket.io/socket.io.js"></script> <script> function get_html_id(universe, channel) { return 'channel_' + universe + '_' + channel; } var socket = io.connect(); socket.on('init', function (msg) { $('#presets').empty(); $('#sliders').empty(); setup = msg.setup devices = msg.devices /* preset buttons */ for(var preset in setup.presets) { var html = '<button class="span2 btn btn-info">' + setup.presets[preset].label + '</button>'; var e = $(html) e.hide().appendTo('#presets').fadeIn(); e.click(function(values) { return function() { for(var universe in values) { socket.emit('update', universe, values[universe]); } };}(setup.presets[preset].values)); console.log(html); } /* blackout button */ var blackout = $('<button class="span2 btn btn-danger">Black Out</button>'); blackout.hide().appendTo('#presets').fadeIn(); blackout.click(function() { for(var universe in setup.universes) { var u = {}; for(var i = 0; i < 255; i++) { u[i] = 0; } socket.emit('update', universe, u); } }); /* sliders */ for(var universe in setup.universes) { var html = "<div><h1>" + universe + "</h1>"; for(var device in setup.universes[universe].devices) { var dev = setup.universes[universe].devices[device]; html += '<div class="device">' for(var channel in devices[dev.type].channels) { var channel_id = dev.address + Number(channel) var html_id = get_html_id(universe, channel_id); html += '<div class="channel">' html += '<label for="' + html_id + '">' + devices[dev.type].channels[channel] + '</label>'; html += '<input id="' + html_id + '" type="range" min="0" value="0" max="255">' html += '</div>' } html += '</div>' } html += "</div>"; $(html).hide().appendTo('#sliders').fadeIn(); } $("input").live("change", function(e) { var i = e.target.id.split('_'); var u = {}; u[i[2]] = e.target.value; socket.emit('update', i[1], u); }); socket.emit('request_refresh'); }); socket.on('update', function (universe, update) { for(var k in update) { $('#' + get_html_id(universe, k)).attr('value', update[k]); } }); </script> </head> <body> <div class="navbar navbar-inverse"> <div class="navbar-inner"> <ul class="nav" id="myTab"> <li class="active"><a href="#home" data-toggle="tab">Home</a></li> <li><a href="#sliders" data-toggle="tab">Sliders</a></li> <!--<li><a href="#scripts" data-toggle="tab">Scripts</a></li>--> </ul> </div> </div> <div class="container-fluid"> <div class="tab-content"> <div id="home" class="tab-pane active"> <div class="row-fluid" id="presets"> </div> </div> <div id="sliders" class="tab-pane"> </div> <div id="scripts" class="tab-pane"> </div> </div> </div> </body> </html>