webcontrol/zml.js
author Nicolas Martin <joliclic@gmail.com>
Thu, 18 May 2017 14:29:04 +0200
changeset 2 1425d4030bea
parent 1 8ad95a9cc477
permissions -rw-r--r--
web control: js part
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1
8ad95a9cc477 main files for the web control
Nicolas Martin <joliclic@gmail.com>
parents:
diff changeset
     1
'use strict';
8ad95a9cc477 main files for the web control
Nicolas Martin <joliclic@gmail.com>
parents:
diff changeset
     2
2
1425d4030bea web control: js part
Nicolas Martin <joliclic@gmail.com>
parents: 1
diff changeset
     3
var gServers = [
1
8ad95a9cc477 main files for the web control
Nicolas Martin <joliclic@gmail.com>
parents:
diff changeset
     4
    {
8ad95a9cc477 main files for the web control
Nicolas Martin <joliclic@gmail.com>
parents:
diff changeset
     5
        name: 'bird',
2
1425d4030bea web control: js part
Nicolas Martin <joliclic@gmail.com>
parents: 1
diff changeset
     6
        url: 'ws:/192.168.0.10',
1425d4030bea web control: js part
Nicolas Martin <joliclic@gmail.com>
parents: 1
diff changeset
     7
        websocket: null,
1
8ad95a9cc477 main files for the web control
Nicolas Martin <joliclic@gmail.com>
parents:
diff changeset
     8
    },
8ad95a9cc477 main files for the web control
Nicolas Martin <joliclic@gmail.com>
parents:
diff changeset
     9
    //{
8ad95a9cc477 main files for the web control
Nicolas Martin <joliclic@gmail.com>
parents:
diff changeset
    10
    //    name: "fox",
8ad95a9cc477 main files for the web control
Nicolas Martin <joliclic@gmail.com>
parents:
diff changeset
    11
    //    url: "ws://192.168.0.11",
8ad95a9cc477 main files for the web control
Nicolas Martin <joliclic@gmail.com>
parents:
diff changeset
    12
    //  ,  websserver: null
8ad95a9cc477 main files for the web control
Nicolas Martin <joliclic@gmail.com>
parents:
diff changeset
    13
    //},
8ad95a9cc477 main files for the web control
Nicolas Martin <joliclic@gmail.com>
parents:
diff changeset
    14
    
8ad95a9cc477 main files for the web control
Nicolas Martin <joliclic@gmail.com>
parents:
diff changeset
    15
];
8ad95a9cc477 main files for the web control
Nicolas Martin <joliclic@gmail.com>
parents:
diff changeset
    16
2
1425d4030bea web control: js part
Nicolas Martin <joliclic@gmail.com>
parents: 1
diff changeset
    17
//var gButtons = [
1425d4030bea web control: js part
Nicolas Martin <joliclic@gmail.com>
parents: 1
diff changeset
    18
//    {
1425d4030bea web control: js part
Nicolas Martin <joliclic@gmail.com>
parents: 1
diff changeset
    19
//        id: "bt_black",
1425d4030bea web control: js part
Nicolas Martin <joliclic@gmail.com>
parents: 1
diff changeset
    20
//        command: "black"
1425d4030bea web control: js part
Nicolas Martin <joliclic@gmail.com>
parents: 1
diff changeset
    21
//    }
1425d4030bea web control: js part
Nicolas Martin <joliclic@gmail.com>
parents: 1
diff changeset
    22
//];
1425d4030bea web control: js part
Nicolas Martin <joliclic@gmail.com>
parents: 1
diff changeset
    23
1425d4030bea web control: js part
Nicolas Martin <joliclic@gmail.com>
parents: 1
diff changeset
    24
1425d4030bea web control: js part
Nicolas Martin <joliclic@gmail.com>
parents: 1
diff changeset
    25
function $(expr) {
1425d4030bea web control: js part
Nicolas Martin <joliclic@gmail.com>
parents: 1
diff changeset
    26
    return document.querySelector(expr);
1425d4030bea web control: js part
Nicolas Martin <joliclic@gmail.com>
parents: 1
diff changeset
    27
}
1425d4030bea web control: js part
Nicolas Martin <joliclic@gmail.com>
parents: 1
diff changeset
    28
1425d4030bea web control: js part
Nicolas Martin <joliclic@gmail.com>
parents: 1
diff changeset
    29
function $$(expr) {
1425d4030bea web control: js part
Nicolas Martin <joliclic@gmail.com>
parents: 1
diff changeset
    30
    return Array.from(document.querySelectorAll(expr));
1425d4030bea web control: js part
Nicolas Martin <joliclic@gmail.com>
parents: 1
diff changeset
    31
}
1425d4030bea web control: js part
Nicolas Martin <joliclic@gmail.com>
parents: 1
diff changeset
    32
1425d4030bea web control: js part
Nicolas Martin <joliclic@gmail.com>
parents: 1
diff changeset
    33
function sendCommand(str) {
1425d4030bea web control: js part
Nicolas Martin <joliclic@gmail.com>
parents: 1
diff changeset
    34
    gServers.forEach(function(server) {
1425d4030bea web control: js part
Nicolas Martin <joliclic@gmail.com>
parents: 1
diff changeset
    35
        if (server.websocket && server.websocket.readyState == WebSocket.OPEN) {
1425d4030bea web control: js part
Nicolas Martin <joliclic@gmail.com>
parents: 1
diff changeset
    36
            server.websocket.send(str)
1425d4030bea web control: js part
Nicolas Martin <joliclic@gmail.com>
parents: 1
diff changeset
    37
        } else {
1425d4030bea web control: js part
Nicolas Martin <joliclic@gmail.com>
parents: 1
diff changeset
    38
            updateStatus();
1425d4030bea web control: js part
Nicolas Martin <joliclic@gmail.com>
parents: 1
diff changeset
    39
        }
1425d4030bea web control: js part
Nicolas Martin <joliclic@gmail.com>
parents: 1
diff changeset
    40
    });
1425d4030bea web control: js part
Nicolas Martin <joliclic@gmail.com>
parents: 1
diff changeset
    41
}
1425d4030bea web control: js part
Nicolas Martin <joliclic@gmail.com>
parents: 1
diff changeset
    42
1425d4030bea web control: js part
Nicolas Martin <joliclic@gmail.com>
parents: 1
diff changeset
    43
function updateStatus() {
1425d4030bea web control: js part
Nicolas Martin <joliclic@gmail.com>
parents: 1
diff changeset
    44
    var nb_servers = gServers.length;
1425d4030bea web control: js part
Nicolas Martin <joliclic@gmail.com>
parents: 1
diff changeset
    45
    var nb_servers_ok = 0;
1425d4030bea web control: js part
Nicolas Martin <joliclic@gmail.com>
parents: 1
diff changeset
    46
    
1425d4030bea web control: js part
Nicolas Martin <joliclic@gmail.com>
parents: 1
diff changeset
    47
    gServers.forEach(function(server) {
1425d4030bea web control: js part
Nicolas Martin <joliclic@gmail.com>
parents: 1
diff changeset
    48
        if (server.websocket && server.websocket.readyState == WebSocket.OPEN) {
1425d4030bea web control: js part
Nicolas Martin <joliclic@gmail.com>
parents: 1
diff changeset
    49
            nb_servers_ok++;
1425d4030bea web control: js part
Nicolas Martin <joliclic@gmail.com>
parents: 1
diff changeset
    50
            if (server.status_box) {
1425d4030bea web control: js part
Nicolas Martin <joliclic@gmail.com>
parents: 1
diff changeset
    51
                server.status_box.innerHTML =
1425d4030bea web control: js part
Nicolas Martin <joliclic@gmail.com>
parents: 1
diff changeset
    52
                    '<span class="status-txt status-ok">OK</span>';
1425d4030bea web control: js part
Nicolas Martin <joliclic@gmail.com>
parents: 1
diff changeset
    53
            }
1425d4030bea web control: js part
Nicolas Martin <joliclic@gmail.com>
parents: 1
diff changeset
    54
        } else if (server.status_box) {
1425d4030bea web control: js part
Nicolas Martin <joliclic@gmail.com>
parents: 1
diff changeset
    55
            server.status_box.innerHTML =
1425d4030bea web control: js part
Nicolas Martin <joliclic@gmail.com>
parents: 1
diff changeset
    56
                '<span class="status-txt status-alert">KO</span>';
1425d4030bea web control: js part
Nicolas Martin <joliclic@gmail.com>
parents: 1
diff changeset
    57
        }
1425d4030bea web control: js part
Nicolas Martin <joliclic@gmail.com>
parents: 1
diff changeset
    58
    });
1425d4030bea web control: js part
Nicolas Martin <joliclic@gmail.com>
parents: 1
diff changeset
    59
    
1425d4030bea web control: js part
Nicolas Martin <joliclic@gmail.com>
parents: 1
diff changeset
    60
    var main_status_box = $('#main-status-box');
1425d4030bea web control: js part
Nicolas Martin <joliclic@gmail.com>
parents: 1
diff changeset
    61
    if (!main_status_box)
1425d4030bea web control: js part
Nicolas Martin <joliclic@gmail.com>
parents: 1
diff changeset
    62
        return;
1425d4030bea web control: js part
Nicolas Martin <joliclic@gmail.com>
parents: 1
diff changeset
    63
    
1425d4030bea web control: js part
Nicolas Martin <joliclic@gmail.com>
parents: 1
diff changeset
    64
    if (nb_servers_ok === 0) {
1425d4030bea web control: js part
Nicolas Martin <joliclic@gmail.com>
parents: 1
diff changeset
    65
        main_status_box.innerHTML =
1425d4030bea web control: js part
Nicolas Martin <joliclic@gmail.com>
parents: 1
diff changeset
    66
            '<big class="status-txt status-alert">! KO !</big>';
1425d4030bea web control: js part
Nicolas Martin <joliclic@gmail.com>
parents: 1
diff changeset
    67
    } else if (nb_servers === nb_servers_ok) {
1425d4030bea web control: js part
Nicolas Martin <joliclic@gmail.com>
parents: 1
diff changeset
    68
        main_status_box.innerHTML =
1425d4030bea web control: js part
Nicolas Martin <joliclic@gmail.com>
parents: 1
diff changeset
    69
            '<big class="status-txt status-ok">OK</big>';
1425d4030bea web control: js part
Nicolas Martin <joliclic@gmail.com>
parents: 1
diff changeset
    70
    } else if (nb_servers_ok < nb_servers) {
1425d4030bea web control: js part
Nicolas Martin <joliclic@gmail.com>
parents: 1
diff changeset
    71
        main_status_box.innerHTML =
1425d4030bea web control: js part
Nicolas Martin <joliclic@gmail.com>
parents: 1
diff changeset
    72
            '<big class="status-txt status-warning">warning !</big>';
1
8ad95a9cc477 main files for the web control
Nicolas Martin <joliclic@gmail.com>
parents:
diff changeset
    73
    }
2
1425d4030bea web control: js part
Nicolas Martin <joliclic@gmail.com>
parents: 1
diff changeset
    74
}
1
8ad95a9cc477 main files for the web control
Nicolas Martin <joliclic@gmail.com>
parents:
diff changeset
    75
8ad95a9cc477 main files for the web control
Nicolas Martin <joliclic@gmail.com>
parents:
diff changeset
    76
function init() {
2
1425d4030bea web control: js part
Nicolas Martin <joliclic@gmail.com>
parents: 1
diff changeset
    77
    updateStatus();
1425d4030bea web control: js part
Nicolas Martin <joliclic@gmail.com>
parents: 1
diff changeset
    78
    
1425d4030bea web control: js part
Nicolas Martin <joliclic@gmail.com>
parents: 1
diff changeset
    79
    var substatus_box = $('#substatus-box');
1425d4030bea web control: js part
Nicolas Martin <joliclic@gmail.com>
parents: 1
diff changeset
    80
    gServers.forEach(function(server) {
1425d4030bea web control: js part
Nicolas Martin <joliclic@gmail.com>
parents: 1
diff changeset
    81
        if (substatus_box) {
1425d4030bea web control: js part
Nicolas Martin <joliclic@gmail.com>
parents: 1
diff changeset
    82
            server.status_box = document.createElement('div');
1425d4030bea web control: js part
Nicolas Martin <joliclic@gmail.com>
parents: 1
diff changeset
    83
            server.status_box.className = 'substatus';
1425d4030bea web control: js part
Nicolas Martin <joliclic@gmail.com>
parents: 1
diff changeset
    84
            substatus_box.appendChild(server.status_box);
1425d4030bea web control: js part
Nicolas Martin <joliclic@gmail.com>
parents: 1
diff changeset
    85
        }
1425d4030bea web control: js part
Nicolas Martin <joliclic@gmail.com>
parents: 1
diff changeset
    86
        server.websocket = new WebSocket(server.url);
1425d4030bea web control: js part
Nicolas Martin <joliclic@gmail.com>
parents: 1
diff changeset
    87
        server.websocket.addEventListener('open', function (evt) {
1425d4030bea web control: js part
Nicolas Martin <joliclic@gmail.com>
parents: 1
diff changeset
    88
            updateStatus();
1425d4030bea web control: js part
Nicolas Martin <joliclic@gmail.com>
parents: 1
diff changeset
    89
        });
1425d4030bea web control: js part
Nicolas Martin <joliclic@gmail.com>
parents: 1
diff changeset
    90
    });
1425d4030bea web control: js part
Nicolas Martin <joliclic@gmail.com>
parents: 1
diff changeset
    91
    
1425d4030bea web control: js part
Nicolas Martin <joliclic@gmail.com>
parents: 1
diff changeset
    92
    var mutable_bt = $('#mutable-cmd-bt');
1425d4030bea web control: js part
Nicolas Martin <joliclic@gmail.com>
parents: 1
diff changeset
    93
    var mutable_input = $('#mutable-cmd-input');
1425d4030bea web control: js part
Nicolas Martin <joliclic@gmail.com>
parents: 1
diff changeset
    94
    if (mutable_bt && mutable_input) {
1425d4030bea web control: js part
Nicolas Martin <joliclic@gmail.com>
parents: 1
diff changeset
    95
        mutable_bt.addEventListener('click', function(evt) {
1425d4030bea web control: js part
Nicolas Martin <joliclic@gmail.com>
parents: 1
diff changeset
    96
            cmd = mutable_input.value;
1425d4030bea web control: js part
Nicolas Martin <joliclic@gmail.com>
parents: 1
diff changeset
    97
1425d4030bea web control: js part
Nicolas Martin <joliclic@gmail.com>
parents: 1
diff changeset
    98
            if (cmd)
1425d4030bea web control: js part
Nicolas Martin <joliclic@gmail.com>
parents: 1
diff changeset
    99
                sendCommand(cmd);
1425d4030bea web control: js part
Nicolas Martin <joliclic@gmail.com>
parents: 1
diff changeset
   100
        });
1425d4030bea web control: js part
Nicolas Martin <joliclic@gmail.com>
parents: 1
diff changeset
   101
    }
1425d4030bea web control: js part
Nicolas Martin <joliclic@gmail.com>
parents: 1
diff changeset
   102
    
1425d4030bea web control: js part
Nicolas Martin <joliclic@gmail.com>
parents: 1
diff changeset
   103
    $$('.cmd-bt').forEach(function(elt) {
1425d4030bea web control: js part
Nicolas Martin <joliclic@gmail.com>
parents: 1
diff changeset
   104
        elt.addEventListener('click', function(evt) {
1425d4030bea web control: js part
Nicolas Martin <joliclic@gmail.com>
parents: 1
diff changeset
   105
            cmd = elt.getAttribute('data-cmd');
1425d4030bea web control: js part
Nicolas Martin <joliclic@gmail.com>
parents: 1
diff changeset
   106
            if (cmd)
1425d4030bea web control: js part
Nicolas Martin <joliclic@gmail.com>
parents: 1
diff changeset
   107
                sendCommand(cmd);
1425d4030bea web control: js part
Nicolas Martin <joliclic@gmail.com>
parents: 1
diff changeset
   108
        });
1425d4030bea web control: js part
Nicolas Martin <joliclic@gmail.com>
parents: 1
diff changeset
   109
    });
1425d4030bea web control: js part
Nicolas Martin <joliclic@gmail.com>
parents: 1
diff changeset
   110
    
1
8ad95a9cc477 main files for the web control
Nicolas Martin <joliclic@gmail.com>
parents:
diff changeset
   111
    
8ad95a9cc477 main files for the web control
Nicolas Martin <joliclic@gmail.com>
parents:
diff changeset
   112
}
8ad95a9cc477 main files for the web control
Nicolas Martin <joliclic@gmail.com>
parents:
diff changeset
   113
8ad95a9cc477 main files for the web control
Nicolas Martin <joliclic@gmail.com>
parents:
diff changeset
   114
2
1425d4030bea web control: js part
Nicolas Martin <joliclic@gmail.com>
parents: 1
diff changeset
   115
document.addEventListener('DOMContentLoaded', function(e) {
1
8ad95a9cc477 main files for the web control
Nicolas Martin <joliclic@gmail.com>
parents:
diff changeset
   116
    //console.log("DOM loaded");
2
1425d4030bea web control: js part
Nicolas Martin <joliclic@gmail.com>
parents: 1
diff changeset
   117
    init();
1
8ad95a9cc477 main files for the web control
Nicolas Martin <joliclic@gmail.com>
parents:
diff changeset
   118
});
8ad95a9cc477 main files for the web control
Nicolas Martin <joliclic@gmail.com>
parents:
diff changeset
   119