packages feed

sproxy-web-0.3.1: static/js/domainprivileges.js

postUrl = '/domain/' + domain + '/privileges';

makeEditable('.privilege-edit', privilegeUpdate, postUrl);

function privilegeUpdate(newVal, prevVal, tr) {
    var obj = { operation: 'upd'
              , new: newVal 
              , old: prevVal 
              };

    return obj;
}


$('.add-btn').click(function() {
    var currRow       = $(this).parent().parent();
    var currPrivilege = $(currRow).children("td").eq(0).find('input').val();

    if (currPrivilege.length < 1) {
        fadeInOut('#fieldempty');
    }
    else {
        sendPrivilege(currPrivilege, appendRow, showError, currRow);
    }
});

$('.delete-btn').click(function() {
    var hisTr     = $(this).parent().parent();
    var privilege = $(hisTr).children("td").eq(0).text();

    deletePrivilege(privilege, hisTr, removeRow, showError);
});

$('.rule-btn').click(function() {
    var hisTr = $(this).parent().parent();
    var privilege = $(hisTr).children("td").eq(0).text();

    window.location = '/domain/' + domain + '/privilege/' + privilege + '/rules';
});

function sendPrivilege(privilegeField, onSucc, onErr, addRow) {
    $.post( postUrl 
          , { operation: "add", privilege: privilegeField } 
    ).done(function(data) {
        onSucc(privilegeField, addRow);
    }).fail(onErr);
}

function deletePrivilege(privilegeField, row, onSucc, onErr) {
    $.post( postUrl 
          , { operation: "del", privilege: privilegeField }
    ).done(function(data) {
        onSucc(row);
    }).fail(onErr);
}

function appendRow( privilegeField, addRow)
{
    fadeInOut("#updatesuccess");

    $('#edittable tbody').append(
        '<tr><td class="edit privilege-edit">' + privilegeField + '</td>' +
        '<td><a href="#" class="delete-btn btn btn-danger btn-xs">Delete</a></td>' + 
        '<td><a href="#" class="rule-btn btn btn-link btn-xs">Rules</a></td></tr>');

    $(addRow).children("td").eq(0).find('input').val("");

    makeEditable('.privilege-edit', privilegeUpdate, postUrl);

    $('.delete-btn').click(function() {
        var hisTr     = $(this).parent().parent();
        var privilege = $(hisTr).children("td").eq(0).text();

        deletePrivilege(privilege, hisTr, removeRow, showError);
    });

    $('.rule-btn').click(function() {
        var hisTr  = $(this).parent().parent();
        var privilege = $(hisTr).children("td").eq(0).text();

        window.location = '/domain/' + domain + '/privilege/' + privilege + '/rules';
    });
}

// for the table on the right

// array1 - array2
// i.e what elements are in array1 but not in array2
function arrayDiff(array1, array2)
{
    return $(array1).not(array2).get();
}

// we refresh groups/privileges every 5 seconds
var refreshRate = 1000;

var groupsUrl = '/groups.json';

function getGroups()
{
    $.get(groupsUrl).done(function(data) {
        var newGroups = data; // $.parseJSON(data);
        var currentGroups = $('#groupSel > option').map(function() { return this.value; }).get();
        var added   = arrayDiff(newGroups, currentGroups);
        var removed = arrayDiff(currentGroups, newGroups);
        // we add the new options to the select and remove the ones that got removed
        added.forEach(addGroupOption);
        removed.forEach(removeGroupOption);
    });
}

function addGroupOption(opt)
{
    $('#groupSel').append('<option value="' + opt + '">' + opt + '</option>');
}

function removeGroupOption(groupName)
{
    $('#groupSel option[value="' + groupName + '"]').remove();
}

var privsUrl = '/domain/' + domain + '/privileges.json';

function getPrivileges()
{
    $.get(privsUrl).done(function(data) {
        var newPrivs = data; // $.parseJSON(data);
        var currentPrivs = $('#privSel > option').map(function() { return this.value; }).get();
        var added   = arrayDiff(newPrivs, currentPrivs);
        var removed = arrayDiff(currentPrivs, newPrivs);
        // we add the new options to the select and remove the ones that got removed
        added.forEach(addPrivOption);
        removed.forEach(removePrivOption);
    });
}

function addPrivOption(opt)
{
    $('#privSel').append('<option value="' + opt + '">' + opt + '</option>');
}

function removePrivOption(privName)
{
    $('#privSel option[value="' + privName + '"]').remove();
}

/* This seem to be a problem in some browsers
$('#privSel').focusin(function() {
    getPrivileges();
}); 

$('#groupSel').focusin(function() {
    getGroups();
});
*/

// so we're just updating every few seconds instead
setInterval(getGroups, refreshRate);
setInterval(getPrivileges, refreshRate);

var gpUrl = '/domain/' + domain + '/group_privileges'

$('.grant-btn').click(function() {
    var currRow = $(this).parent().parent();
    var currGr  = $(currRow).children("td").eq(0).find('select').val();
    var currPr  = $(currRow).children("td").eq(1).find('select').val();

    sendGroupPriv(currGr, currPr, appendGPRow, gpErr, currRow);
});

function sendGroupPriv(groupField, privField, onSucc, onErr, btnRow) {
    $.post( gpUrl 
          , { operation: "add", group: groupField, privilege: privField } 
    ).done(function(data) {
        onSucc(groupField, privField, btnRow);
    }).fail(onErr);
}

function appendGPRow(group, priv, btnRow)
{
    fadeInOut("#gpsuccess");

    $('#edittable2 tbody').append(
        '<tr><td>' + group + '</td>' + 
            '<td>' + priv  + '</td>' + 
            '<td><a href="#" class="delete-gp-btn btn btn-danger btn-xs">Delete</a></td></tr>');

    $('.delete-gp-btn').click(function() {
        var hisTr = $(this).parent().parent();
        var group = $(hisTr).children("td").eq(0).text();
        var priv  = $(hisTr).children("td").eq(1).text();

        deleteGP(group, priv, hisTr, removeGPRow, gpErr);
    });

}

function gpErr(err)
{
    fadeInOut("#gperror");
    console.log(err);
}

$('.delete-gp-btn').click(function() {
    var hisTr = $(this).parent().parent();
    var group = $(hisTr).children("td").eq(0).text();
    var priv  = $(hisTr).children("td").eq(1).text();

    deleteGP(group, priv, hisTr, removeGPRow, gpErr);
});

function removeGPRow(r)
{
    fadeInOut("#gpsuccess");
    $(r).remove();
}

function deleteGP(groupF, privF, row, onSucc, onErr)
{
    $.post( gpUrl 
          , { operation: "del", group: groupF, privilege: privF }
    ).done(function(data) {
        onSucc(row);
    }).fail(onErr);
}