static/dmx.js
author Tero Marttila <terom@paivola.fi>
Thu, 01 May 2014 23:55:53 +0300
changeset 85 ee05d89bde77
parent 83 136e210fce82
permissions -rw-r--r--
dmx-web: ajax updates
/*
 * Get current value for given head/attr.
 *
 * Returns undefined if no such attr.
 */
function dmx_input (head, attr) {
    var value = $('.dmx-input#' + head + '-' + attr).val();
    
    if (value == undefined )
        return undefined;

    if (value == "")
        return 0; // default
    
    return parseInt(value);
}

/*
 * Update current output value.
 */
function dmx_update (input) {
    var name = input.attr('name');
    var value = input.val();

    console.log("dmx_update: " + name + ": " + value);

    var data = { }; data[name] = value;

    $.ajax({
            type:   'POST',
            data:   data,
    });
}

/*
 * Update color for head.
 */
function dmx_color (head) {
    var alpha = dmx_input(head, 'alpha');

    if (alpha) 
        alpha = alpha / 255;

    $('.dmx-color#' + head + '-color').background_color(
            dmx_input(head, 'red') / 255,
            dmx_input(head, 'green') / 255,
            dmx_input(head, 'blue') / 255,
            alpha
    );
}

/*
 * Update slider from <input>.
 */
function _slider_input (input, slider) {
    var value;

    if (input.val())
        value = parseInt(input.val());
    else
        value = 0;
    
    slider.slider('value', value);
}

/*
 * Bind given <input> to given slider.
 */
function slider_input (input, slider) {
    // bind
    input.change(function () {
        dmx_update(input);
        _slider_input(input, slider);
    });

    // initialize
    _slider_input(input, slider);
}

$(function () {
    $('.dmx-input').each(function () {
        var attr = this.id;
        var head = attr.split('-', 1)[0];
        var input = $(this);
        var slider = $('.dmx-slider#' + attr + '-slider');
        var color = $('.dmx-color#' + head + '-color');
        
        // slider control
        slider.slider({
            orientation:    'horizontal',
            range:          'min',
            min:            0,
            max:            255,

            slide:          function () {
                var value = slider.slider('value');
                
                // update input
                input.val(value.toString());

                if (color) {
                    // update color value
                    dmx_color(head);
                }

                // send output
                dmx_update(input);
            },
        });

        // update slider from <input>
        slider_input(input, slider);

        // init
        if (color) {
            dmx_color(head);
        }
    });
});