211 lines
No EOL
6.2 KiB
JavaScript
211 lines
No EOL
6.2 KiB
JavaScript
(function($){
|
|
$(function(){
|
|
|
|
var host = "192.168.0.24";
|
|
|
|
$('.button-collapse').sideNav();
|
|
|
|
|
|
// Navlinks
|
|
$('#mc-nav').on('click', '.mc-navlink', function(){
|
|
console.log("Nav to: ", $(this).data("pane"));
|
|
showPane($(this).data("pane"));
|
|
});
|
|
|
|
function showPane(pane) {
|
|
$('.mc_pane').addClass('hide');
|
|
$('#' + pane).removeClass('hide');
|
|
$('.button-collapse').sideNav('hide');
|
|
}
|
|
|
|
|
|
// ******************************************************************
|
|
// init()
|
|
// ******************************************************************
|
|
var connection = new WebSocket('ws://' + host + ':81', ['arduino']);
|
|
|
|
// When the connection is open, send some data to the server
|
|
connection.onopen = function () {
|
|
//connection.send('Ping'); // Send the message 'Ping' to the server
|
|
console.log('WebSocket Open');
|
|
showPane('pane1');
|
|
};
|
|
|
|
// Log errors
|
|
connection.onerror = function (error) {
|
|
console.log('WebSocket Error ' + error);
|
|
$('#mc-wsloader').addClass('hide');
|
|
$('#mc-wserror').removeClass('hide');
|
|
};
|
|
|
|
// Log messages from the server
|
|
connection.onmessage = function (e) {
|
|
console.log('Server: ' + e.data);
|
|
};
|
|
|
|
|
|
// ******************************************************************
|
|
// Modes
|
|
// ******************************************************************
|
|
$("#pane2").on("click", ".btn_mode", function() {
|
|
var mode = $(this).attr("data-mode");
|
|
last_mode = mode;
|
|
var btn = $(this);
|
|
setMode(mode, function() {
|
|
$(".btn_mode").removeClass("blue");
|
|
btn.addClass("blue");
|
|
});
|
|
});
|
|
|
|
function setMode(mode, finish_funtion) {
|
|
var url = "http://" + host + "/" + mode;
|
|
console.log("Mode: ", mode);
|
|
|
|
var red = $("#rng_red").val();
|
|
var green = $("#rng_green").val();
|
|
var blue = $("#rng_blue").val();
|
|
var delay = $("#rng_delay").val();
|
|
|
|
var params = {"r":red, "g":green, "b":blue, "d":delay};
|
|
connection.send("=" + mode);
|
|
|
|
/*
|
|
$.getJSON(url, params, function(data) {
|
|
updateStatus(data);
|
|
finish_funtion();
|
|
});
|
|
*/
|
|
}
|
|
|
|
function updateStatus(data) {
|
|
console.log("Returned: ", data);
|
|
$("#result").val("Mode: " + data.mode + "\nColor: "+ data.color[0] + "," + data.color[1] + "," + data.color[2] + "\nDelay:" + data.delay_ms + "\nBrightness:" + data.brightness);
|
|
$('#result').trigger('autoresize');
|
|
}
|
|
|
|
|
|
// ******************************************************************
|
|
// Colorwheel
|
|
// ******************************************************************
|
|
// this is supposed to work on mobiles (touch) as well as on a desktop (click)
|
|
// since we couldn't find a decent one .. this try of writing one by myself
|
|
// + google. swiping would be really nice - I will possibly implement it with
|
|
// jquery later - or never.
|
|
|
|
var canvas = document.getElementById("myCanvas");
|
|
// FIX: Cancel touch end event and handle click via touchstart
|
|
// canvas.addEventListener("touchend", function(e) { e.preventDefault(); }, false);
|
|
canvas.addEventListener("touchmove", doTouch, false);
|
|
canvas.addEventListener("click", doClick, false);
|
|
|
|
var context = canvas.getContext('2d');
|
|
var centerX = canvas.width / 2;
|
|
var centerY = canvas.height / 2;
|
|
var innerRadius = canvas.width / 4.5;
|
|
var outerRadius = (canvas.width - 10) / 2
|
|
|
|
//outer border
|
|
context.beginPath();
|
|
//outer circle
|
|
context.arc(centerX, centerY, outerRadius, 0, 2 * Math.PI, false);
|
|
//draw the outer border: (gets drawn around the circle!)
|
|
context.lineWidth = 4;
|
|
context.strokeStyle = '#000000';
|
|
context.stroke();
|
|
context.closePath();
|
|
|
|
//fill with beautiful colors
|
|
//taken from here: http://stackoverflow.com/questions/18265804/building-a-color-wheel-in-html5
|
|
for(var angle=0; angle<=360; angle+=1) {
|
|
var startAngle = (angle-2)*Math.PI/180;
|
|
var endAngle = angle * Math.PI/180;
|
|
context.beginPath();
|
|
context.moveTo(centerX, centerY);
|
|
context.arc(centerX, centerY, outerRadius, startAngle, endAngle, false);
|
|
context.closePath();
|
|
context.fillStyle = 'hsl('+angle+', 100%, 50%)';
|
|
context.fill();
|
|
context.closePath();
|
|
}
|
|
|
|
//inner border
|
|
context.beginPath();
|
|
//context.arc(centerX, centerY, radius, startAngle, endAngle, counterClockwise);
|
|
context.arc(centerX, centerY, innerRadius, 0, 2 * Math.PI, false);
|
|
//fill the center
|
|
var my_gradient=context.createLinearGradient(0,0,170,0);
|
|
my_gradient.addColorStop(0,"black");
|
|
my_gradient.addColorStop(1,"white");
|
|
|
|
context.fillStyle = my_gradient;
|
|
context.fillStyle = "white";
|
|
context.fill();
|
|
|
|
//draw the inner line
|
|
context.lineWidth = 2;
|
|
context.strokeStyle = '#000000';
|
|
context.stroke();
|
|
context.closePath();
|
|
|
|
//get Mouse x/y canvas position
|
|
function getMousePos(canvas, evt) {
|
|
var rect = canvas.getBoundingClientRect();
|
|
return {
|
|
x: evt.clientX - rect.left,
|
|
y: evt.clientY - rect.top
|
|
};
|
|
}
|
|
|
|
//comp to Hex
|
|
function componentToHex(c) {
|
|
var hex = c.toString(16);
|
|
return hex.length == 1 ? "0" + hex : hex;
|
|
}
|
|
|
|
//rgb/rgba to Hex
|
|
function rgbToHex(rgb) {
|
|
return "#" + componentToHex(rgb[0]) + componentToHex(rgb[1]) + componentToHex(rgb[2]);
|
|
}
|
|
|
|
//display the touch/click position and color info
|
|
function showStatus(pos, color) {
|
|
var hexColor = rgbToHex(color);
|
|
|
|
connection.send("*" + componentToHex(color[0]) + componentToHex(color[1]) + componentToHex(color[2]));
|
|
|
|
$('#status').css("backgroundColor", hexColor);
|
|
$('#status_color').text(hexColor + " - R=" + color[0] + ", G=" + color[1] + ", B=" + color[2]);
|
|
$('#status_pos').text("x: " + pos.x + " - y: " + pos.y);
|
|
document.getElementById('status').style.backgroundColor=hexColor;
|
|
}
|
|
|
|
//handle the touch event
|
|
function doTouch(event) {
|
|
//to not also fire on click
|
|
event.preventDefault();
|
|
var el = event.target;
|
|
|
|
//touch position
|
|
var pos = {x: Math.round(event.targetTouches[0].pageX - el.offsetLeft),
|
|
y: Math.round(event.targetTouches[0].pageY - el.offsetTop)};
|
|
//color
|
|
var color = context.getImageData(pos.x, pos.y, 1, 1).data;
|
|
|
|
showStatus(pos, color);
|
|
}
|
|
|
|
function doClick(event) {
|
|
//click position
|
|
var pos = getMousePos(canvas, event);
|
|
//color
|
|
var color = context.getImageData(pos.x, pos.y, 1, 1).data;
|
|
|
|
console.log("click", pos.x, pos.y, color);
|
|
showStatus(pos, color);
|
|
|
|
//now do sth with the color rgbToHex(color);
|
|
//don't do stuff when #000000 (outside circle and lines
|
|
}
|
|
|
|
}); // end of document ready
|
|
})(jQuery); // end of jQuery name space
|