summaryrefslogblamecommitdiffstats
path: root/modules-available/roomplanner/clientscript.js
blob: ed91c9fdd102d212da26d540b945d8b81c7e0cda (plain) (tree)




























































































































                                                                                                                                       
/**
 * Pop-Up to select a machine
 *
 * Copyright 2016 Christian Klinger
 * */

/* uuid -> obj */
machineCache = {};



function renderMachineEntry(item, escape) {
    machineCache[item.machineuuid] = item;
    return '<div class="machine-entry">'
            //+ ' <div class="machine-logo"><i class="glyphicon glyphicon-hdd"></i></div>'
            + ' <div class="machine-body">'
            + '    <div class="machine-entry-header"> ' + escape(item.hostname) + '</div>'
            + '          <table class="table table-sm">'
            +               '<tr><td>UUID:</td> <td>' +  escape(item.machineuuid) + '</td></tr>'
            +               '<tr><td>MAC:</td> <td>' +  escape(item.macaddr) + '</td></tr>'
            +               '<tr><td>IP:  </td> <td>' +  escape(item.clientip)    + '</td></tr>'
            + '          </table>'
            + '    </div>'
            + '</div>';
}

function loadMachines(query, callback) {
    console.log('queryMachines(' + query + ')');
    if (query.length < 2) return callback();
    $.ajax({
        url: '?do=roomplanner&action=getmachines&query=' + encodeURIComponent(query),
        type: 'GET',
        error: function() {
            console.log('error while doing ajax call');
            callback();
        },
        success: function(res) {
            console.log('success ajax call');
            var json = JSON.parse(res);
            json.machines.forEach(function (v,i,a){
                a[i].combined = v.machineuuid + " " + v.hostname + " " + v.clientip + " " + v.macaddr;
            });
            return callback(json.machines);
        }
    });
}


var searchSettings = {
    plugins : ["remove_button"],
    valueField: 'machineuuid',
    searchField: "combined",
    //labelField: "combined",
    openOnFocus: false,
    create: false,
    render : { option : renderMachineEntry, item: renderMachineEntry},
    load: loadMachines,
    maxItems: 1,
    sortField: 'clientip',
    sortDirection: 'asc',
    onChange: clearSubnetBox

}

var subnetSettings = {
    plugins : ["remove_button"],
    valueField: 'machineuuid',
    searchField: "combined",
    //labelField: "combined",
    openOnFocus: false,
    create: false,
    render : { option : renderMachineEntry, item: renderMachineEntry},
    load: loadMachines,
    maxItems: 1,
    sortField: 'clientip',
    sortDirection: 'asc',
    onChange: clearSearchBox

}

function clearSearchBox() {
    console.log("clearSearchBox()");
    $selectizeSearch[0].selectize.clear(false);
}
function clearSubnetBox() {
    console.log("clearSubnetBox()");
    $selectizeSubnet[0].selectize.clear(false);
}

function selectMachine(usedUuids, callback) {
    /* show a popup */
    $modal = $('#selectMachineModal');
    $selectizeSearch = $('#machineSearchBox').selectize(searchSettings);
    $selectizeSubnet = $('#subnetBox').selectize(subnetSettings);

    /* connect subnet tab and search tab such that on change of one the other gets emptied */


    $modal.modal('show');

    $('#selectMachineButton').on('click', function() {

        /* check which one has a value */
        var bySubnet = machineCache[$selectizeSubnet[0].selectize.getValue()];
        var bySearch = machineCache[$selectizeSearch[0].selectize.getValue()];

        var selected = bySubnet; // (bySubnet === undefined || bySubnet == "")? bySearch : bySubnet;

        console.log('value is ');
        console.log($selectizeSubnet[0].selectize.getValue());
        console.log(machineCache);
        console.log('selected is ');
        console.log(selected);

        var result = {muuid: selected.machineuuid, ip: selected.clientip, mac_address : selected.macaddr, hostname: selected.hostname};
        $modal.modal('hide');
        clearSubnetBox();
        clearSearchBox();
        callback(result);
    });

    var result = {muuid: "blabla", ip: "blabla", mac_address: "blub", hostname: "lalala"};

    callback(result);
}