view web/views/set.tpl @ 182:e731c0d30b09

set nearly working
author Matt Johnston <matt@ucc.asn.au>
date Tue, 04 Feb 2014 22:49:16 +0800
parents
children 177f616893e6
line wrap: on
line source

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<script src="jquery-2.1.0.js"></script>
<script>
%include riot.min.js
</script>

<style type="text/css">
span.no_selection {
    -webkit-user-select: none; // webkit (safari, chrome) browsers
    -moz-user-select: none; // mozilla browsers
    -khtml-user-select: none; // webkit (konqueror) browsers
}

body {
    font-family: "sans-serif";
}

input {
    border: 2px solid transparent;
    border-radius: 4px;
    background-color: white;
    border-color: black;
    padding: 0;
    font-size: 80%;
}

input[type="button"] {
    width: 4em;
    height: 4em;
    margin-left: 0.5em;
}

input[type="submit"] {
    width: 10em;
    height: 4em;
    margin-top: 1em;
    align: center;
}

input[type="text"] {
    height: 4em;
    text-align: center;
}

.onbutton {
    background-color: #cdf;
}

.existing {
    margin-top: 1em;
    font-size: 70%;
}

</style>
<title>Set templog</title>
</head>

<body>

<section id="paramlist">
</div>

</body>

<script type="html/num_input">
<div id="{id}">
<span class="existing">{title} <span id="existing_{name}">{oldvalue}</span>{unit}</span>
<br/>
<input type="text" id="input" name="input_{name}" />
<!--
<input type="button" class="button_down" id="down" name="down_{name}" value="-" "/>
<input type="button" class="button_up" id="up" name="up_{name}" value="+" "/>
-->
</div>
</script>

<script type="html/yesno_button">
<div id="{id}">
<span class="existing">{title} <span id="existing_{name}">{oldvalue}</span></span>
<br/>
<input type="button" class="button_no" id="no_{name}" name="no_{name}" value="No"/>
<input type="button" class="button_yes" id="yes_{name}" name="yes_{name}" value="Yes"/>
</div>
</script>

<script>

function Setter(params) {
    var self = $.observable(this);

    self.params = params;

    $.each(self.params, function(idx, param) {
        param.id = "param_id_" + idx;
    });

    self.edit = function(param) {
        params[param.name] = param;
        self.trigger("edit", param);
    }

    self.adjust = function(param, updown) {
        // XXX increment
        self.trigger("edit", param);
    }

}

(function() { 'use strict';

var params = {{!inline_data}};
window.setter = new Setter(params);

var root = $("#paramlist");

var number_template = $("[type='html/num_input']").html();
var button_template = $("[type='html/yesno_button']").html();

setter.on("add", add);
setter.on("edit", function(param)
{
    var el = $("#" + param.id);
    if (param.kind === "number")
    {
        $(".input", el).text(param.value).value(param.value);
    }
    else if (param.kind === "yesno")
    {
        set_state(el, param.value);
    }
})

$.route(function(hash) {

// clear list and add new ones
root.empty() && $.each(setter.params, function (idx, p) {
    add(p);
})
})

function set_state(el, value)
{
    var button_yes = $(".button_yes", el);
    var button_no = $(".button_no", el);
    if (value)
    {
        button_yes.addClass("onbutton");
        button_no.removeClass("onbutton");
    }
    else
    {
        button_no.addClass("onbutton");
        button_yes.removeClass("onbutton");
    }
}

function add(param)
{
    if (param.kind === "number")
    {
        var el = $($.render(number_template, param)).appendTo(root);
        var input = $(".input", el);
    }
    else if (param.kind === "yesno")
    {
        var el = $($.render(button_template, param)).appendTo(root);
        var button_yes = $(".button_yes", el);
        var button_no = $(".button_no", el);

        button_yes.click(function() {
            param.value = true;
            setter.edit(param);
        })

        button_no.click(function() {
            param.value = false;
            setter.edit(param);
        })

        set_state(el, param.value);
    }
}

})()

</script>

</html>