ulrich
2017-02-01 0bc3073a6c5c8512184fd8d0e0044eee7e8d47d0
web/ui/ui.js
@@ -1,49 +1,395 @@
/*
  Beispiel aus Spot fuer den Post eines Coordinates-Objektes
    var coord = new Coordinates(
                    c.latitude,
                    c.longitude,
                    self.nummer(c.altitude),
                    self.nummer(c.accuracy),
                    self.nummer(c.altitudeAccuracy),
                    self.nummer(c.heading),
                    self.nummer(c.speed));
            var cObj = self.serialisieren(coord);
            $.ajax({
              url: '../rpc?c=de.uhilger.spot.api.NutzerApi&m=ortSpeichern',
              data: {
                p: cObj
              },
              type: "POST",
              dataType : "html",
              //success: function( resp ) {
                //$('#fehler').html('Antwort: ' + resp);
              //},
              error: function( xhr, status, errorThrown ) {
                $('#fehler').html("Error: " + errorThrown + " Status: " + status);
              },
              complete: function( xhr, status ) {
                //alert( "The request is complete!" );
              }
            });
            usw.
  function Coordinates(la, lo, al, ac, aa, hd, sp) {
   this.latitude = la;
   this.longitude = lo;
   this.altitude = al;
   this.accuracy = ac;
   this.altitudeAccuracy = aa;
   this.heading = hd;
   this.speed = sp;
function um_init() {
  $('#user-form').hide();
  $('#nav').hide();
  $('#role-form').hide();
  $('#user-role-form').hide();
  $('.user-save-btn').click(um_user_save);
  $('.user-cancel-btn').click(um_back_from_new_user);
  $('#nutzerliste').click(um_user_list_click);
  $('#nutzerLoeschen').click(um_del_user);
  $('#nutzerNeu').click(um_new_user);
  $('#nutzerLoeschen').prop( "disabled", true );
  $('#nutzerRolleEntziehen').prop( "disabled", true );
  $('#rolleErteilen').prop( "disabled", true );
  $('#rolleErteilen').click(um_grant_role);
  $('#nutzerRolleEntziehen').click(um_revoke_role);
  $('#neueRolle').click(um_new_role);
  $('#rollen').click(um_role_list_click);
  $('#nutzerrollen').click(um_user_role_list_click);
  um_clear_user_form();
  um_apicall_get_user_list();
  um_apicall_get_granted_roles();
}
 */
/* ----- user functions ------ */
function um_user_save() {
  var user = um_user_form_lesen();
  var kww = $('#kennwortw').val();
  if(user.pw != kww) {
    alert('Kennworte stimmen nicht ueberein.');
  } else {
    um_apicall_create_user(self.serialisieren(user));
  }
}
function um_del_user() {
  var userId = um_get_first_selected_user_id();
  if(userId !== 'none') {
    var antwort = confirm("Wollen Sie den Nutzer " + userId + " loeschen?");
    if (antwort === true) {
      var user = new User(userId, '-', '-', '-', '-');
      um_apicall_del_user(self.serialisieren(user));
    }
  }
}
/* ----------- role functions ------------ */
function um_new_role() {
  var roleIsNew = true;
  var userId = um_get_first_selected_user_id();
  if(userId === 'none') {
    alert('Es wurde kein Benutzer ausgewaehlt.');
  } else {
    var answer = prompt("Name der Rolle", "");
    if (answer === null) {
      alert("Es wurde Cancel betaetigt.");
    } else if(answer !== "") {
      um_apicall_grant_role(userId, answer, roleIsNew);
    } else {
      alert("OK betaetigt, aber Keine Rolle angegeben.");
    }
  }
}
function um_grant_role() {
  var roleIsNew = false;
  var userId = um_get_first_selected_user_id();
  var roleId = um_get_first_selected_role_id();
  if(roleId !== 'none' && userId !== 'none') {
    um_apicall_grant_role(userId, roleId, roleIsNew);
  }
}
function um_revoke_role() {
  var userId = um_get_first_selected_user_id();
  var roleId = um_get_first_selected_userrole_id();
  if(roleId !== 'none' && userId !== 'none') {
    um_apicall_revoke_role(userId, roleId);
  }
}
/* ----------- ui interaction ------------ */
function um_user_list_click() {
  $('#nav-back-btn').click(um_back_from_roles);
  $('#nutzerLoeschen').prop( "disabled", false );
  $('#rollen :selected').prop("selected", false);
  var userId = um_get_first_selected_user_id();
  $('#userid').html(userId);
  um_apicall_get_user_roles(userId);
  $('#user-list-form').hide();
  $('#nav').show();
  $('#role-form').show();
  $('#user-role-form').show();
}
function um_new_user() {
  $('#nav-back-btn').click(um_back_from_new_user);
  $('#user-list-form').hide();
  $('#user-form').show();
  $('#nav').show();
}
function um_role_list_click() {
  $('#rolleErteilen').prop( "disabled", false );
}
function um_user_role_list_click() {
  $('#nutzerRolleEntziehen').prop( "disabled", false );
}
function um_back_from_roles() {
  $('#user-list-form').show();
  $('#nav').hide();
  $('#role-form').hide();
  $('#user-role-form').hide();
}
function um_back_from_new_user() {
  $('#user-list-form').show();
  $('#nav').hide();
  $('#user-form').hide();
  um_clear_user_form();
}
/* ------- ui i/o ------ */
function um_user_form_lesen() {
  var userId = $('#anmeldename').val();
  var kw = $('#kennwort').val();
  var user = new User(userId, kw, '-', '-', '-');
  return user;
}
/*
 * BaseLink liefert fuer einfache selects wie die der Nutzerverwaltung
 * eine simple Listenfunktion, die auf der JSON-Seite wie folgt
 * herauskommt.
 *
 * {"List":[{"List":[{"String":"USER_NAME"},{"String":"admin"},{"String":"test"}]}]}
 *
 * Fuer Mustache sieht ein Template dann z.B so aus:
 *
 *    {{#List}}
 *    {{#List}}
 *      <option value="{{ String }}">{{ String }}</option>'
 *    {{/List}}
 *    {{/List}}
 */
function um_show_user_list(resp) {
  $("#nutzerliste").empty();
  var template = $('#tpl-list').html();
  Mustache.parse(template);   // optional, speeds up future uses
  $("#nutzerliste").append( Mustache.render(template, resp) );
}
function um_clear_user_form() {
  $('#anmeldename').val('');
  $('#kennwort').val('');
  $('#kennwortw').val('');
}
function um_get_first_selected_user_id() {
  var userId = 'none';
  var userIds = [];
  $('#nutzerliste :selected').each(function(i, selected){
    userIds[i] = $(selected).text();
  });
  if(userIds.length > 0) {
    userId = userIds[0];
  }
  return userId;
}
function um_get_first_selected_role_id() {
  var roleId = 'none';
  var roleIds = [];
  $('#rollen :selected').each(function(i, selected){
    roleIds[i] = $(selected).text();
  });
  if(roleIds.length > 0) {
    roleId = roleIds[0];
  }
  return roleId;
}
function um_get_first_selected_userrole_id() {
  var roleId = 'none';
  var roleIds = [];
  $('#nutzerrollen :selected').each(function(i, selected){
    roleIds[i] = $(selected).text();
  });
  if(roleIds.length > 0) {
    roleId = roleIds[0];
  }
  return roleId;
}
function um_show_user_role_list(resp) {
  $("#nutzerrollen").empty();
  var template = $('#tpl-list').html();
  Mustache.parse(template);   // optional, speeds up future uses
  $("#nutzerrollen").append( Mustache.render(template, resp) );
  $('#nutzerRolleEntziehen').prop( "disabled", true );
  $('#rolleErteilen').prop( "disabled", true );
}
function um_show_role_list(resp) {
  $("#rollen").empty();
  var template = $('#tpl-list').html();
  Mustache.parse(template);   // optional, speeds up future uses
  $("#rollen").append( Mustache.render(template, resp) );
  $('#rolleErteilen').prop( "disabled", true );
}
/* ---- api calls ----- */
function um_apicall_create_user(user) {
  var m = 'createUser';
  var u = '../svc/' + m;
  $.ajax({
    url: u,
    data: {
      p: user
    },
    type: "POST",
    dataType : "html",
    success: function( resp ) {
      um_apicall_get_user_list();
      um_back_from_new_user();
    },
    error: function( xhr, status, errorThrown ) {
      $('#fehler').html("Error: " + errorThrown + " Status: " + status);
    },
    complete: function( xhr, status ) {
      //alert( "The request is complete!" );
    }
  });
}
function um_apicall_del_user(user) {
  var m = 'deleteUser';
  var u = '../svc/' + m;
  $.ajax({
    url: u,
    data: {
      p: user
    },
    type: "POST",
    dataType : "html",
    success: function( resp ) {
      um_apicall_get_user_list();
    },
    error: function( xhr, status, errorThrown ) {
      $('#fehler').html("Error: " + errorThrown + " Status: " + status);
    },
    complete: function( xhr, status ) {
      //alert( "The request is complete!" );
    }
  });
}
function um_apicall_get_user_list() {
  var m = 'getUserNameList';
  var u = '../svc/' + m;
  $.ajax({
    url: u,
    type: "GET",
    dataType : "json",
    success: function( resp ) {
      um_show_user_list(resp);
    },
    error: function( xhr, status, errorThrown ) {
      $('#fehler').html("Error: " + errorThrown + " Status: " + status);
    },
    complete: function( xhr, status ) {
      //alert( "The request is complete!" );
    }
  });
}
// http]://example.com/um/api?c=de.uhilger.um.api.UserMgr&m=testmethode
function um_apicall_grant_role(userId, roleName, isNewRole) {
  var ur = new UserRole(userId, roleName);
  var m = 'grantRole';
  var u = '../svc/' + m;
  $.ajax({
    url: u,
    data: {
      p: self.serialisieren(ur)
    },
    type: "POST",
    dataType : "html",
    success: function( resp ) {
      um_apicall_get_user_roles(userId);
      if(isNewRole) {
        um_apicall_get_granted_roles();
      }
    },
    error: function( xhr, status, errorThrown ) {
      $('#fehler').html("Error: " + errorThrown + " Status: " + status);
    },
    complete: function( xhr, status ) {
      //alert( "The request is complete!" );
    }
  });
}
function um_apicall_revoke_role(userId, roleName) {
  var ur = new UserRole(userId, roleName);
  var m = 'revokeRole';
  var u = '../svc/' + m;
  $.ajax({
    url: u,
    data: {
      p: self.serialisieren(ur)
    },
    type: "POST",
    dataType : "html",
    success: function( resp ) {
      um_apicall_get_user_roles(userId);
    },
    error: function( xhr, status, errorThrown ) {
      $('#fehler').html("Error: " + errorThrown + " Status: " + status);
    },
    complete: function( xhr, status ) {
      //alert( "The request is complete!" );
    }
  });
}
function um_apicall_get_user_roles(userId) {
  var m = 'getUserRoleNames';
  var u = '../svc/' + m + '?p=' + userId;
  $.ajax({
    url: u,
    type: "GET",
    dataType : "json",
    success: function( resp ) {
      um_show_user_role_list(resp);
    },
    error: function( xhr, status, errorThrown ) {
      $('#fehler').html("Error: " + errorThrown + " Status: " + status);
    },
    complete: function( xhr, status ) {
      //alert( "The request is complete!" );
    }
  });
}
function um_apicall_get_granted_roles() {
  var m = 'getRoleNamesGranted';
  var u = '../svc/' + m;
  $.ajax({
    url: u,
    type: "GET",
    dataType : "json",
    success: function( resp ) {
      um_show_role_list(resp);
    },
    error: function( xhr, status, errorThrown ) {
      $('#fehler').html("Error: " + errorThrown + " Status: " + status);
    },
    complete: function( xhr, status ) {
      //alert( "The request is complete!" );
    }
  });
}
/* ----- Hilfsfunktionen ----- */
function serialisieren(obj) {
  return '{"' + obj.constructor.name + '":' + JSON.stringify(obj) + '}';
};
/* ----- Objekte ----- */
function User(i, p, fn, ln, em) {
  this.id = i;
  this.pw = p;
  this.firstName = fn;
  this.lastName = ln;
  this.email = em;
}
function UserRole(u, r) {
  this.userId = u;
  this.role = r;
}