Skip to content
Snippets Groups Projects
Commit b3ec47a1 authored by CupCakeArmy's avatar CupCakeArmy
Browse files

Bug Fixes

parent cc077c15
No related branches found
No related tags found
No related merge requests found
......@@ -106,21 +106,11 @@
<img height="40" style="margin: 5px;" src="res/logo/wheel.svg" id="wheel-logo" class="smooth" alt="Loading Wheel">
</div>
<ul class="nav navbar-nav navbar-left cust-menu">
<ul class="nav navbar-nav navbar-left cust-menu pull-left">
</ul>
<ul class="nav navbar-nav navbar-right">
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">
<span class="glyphicon glyphicon-user" aria-hidden="true"></span>
<span class="caret"></span>
</a>
<ul class="dropdown-menu">
<li><a href="#settings"><span class="glyphicon glyphicon-wrench" aria-hidden="true"></span> Settings</a></li>
<li role="separator" class="divider"></li>
<li><a href="#" class="logoutAction"><span class="glyphicon glyphicon-off" aria-hidden="true"></span> Logout</a></li>
</ul>
</li>
<ul class="nav navbar-nav navbar-right pull-right">
<li><a href="#" class="logoutAction"><span class="glyphicon glyphicon-off" aria-hidden="true"></span></a></li>
</ul>
</div>
</nav>
......
(function(window) {
'use strict';
// Library NameSpace
var lns = 'amivcore'
'use strict';
// Library NameSpace
var lns = 'amivcore'
function libgen() {
// Lib to returned
var lib = {};
// Core
var core = {
// Important vars n' stuff
lib: {
api_url: 'https://amiv-apidev.vsos.ethz.ch',
spec_url: 'lib/amiv/spec.json',
authenticated: false,
ready: false,
req_time_out: 5000,
on_interval: 100,
show_errors: false,
},
// Header Setup
header: {
req:{
'get': ['Content-Type','Authorization'],
'post': ['Content-Type','Authorization'],
'put': ['Content-Type','Authorization','If-Match'],
'patch': ['Content-Type','Authorization','If-Match'],
'delete': ['Content-Type','Authorization','If-Match'],
},
make: {
'Content-Type': function(){
return 'application/json'
},
'Authorization': function(){
if(get('cur_token') != null)
return 'Basic ' + btoa(get('cur_token') + ':');
return '';
},
'If-Match': function(){
return null;
}
}
}
}
// Utility empty function for no callback
function dummy(){};
//Save and get into localStorage
function set(cname, cvalue, exdays) {
window.localStorage.setItem('glob-'+cname, cvalue);
}
function get(cname) {
return window.localStorage.getItem('glob-'+cname);
}
function libgen() {
// Lib to returned
var lib = {};
// Make Request
function req(attr, callback) {
callback = callback || function(msg) {
console.log(msg);
};
$.ajax({
url: core.lib.api_url + attr.path,
data: attr.data,
method: attr.method,
dataType: 'json',
timeout: core.lib.req_time_out,
headers: attr.headers,
error: function(res) {
if (core.lib.show_errors) console.log(res);
callback(res);
},
}).done(function(res){
callback(res);
});
}
function makeFunc(domain, m) {
return function(attr, callback) {
attr = attr || {};
var curLib = {}
for (var curAttr in attr['data'])
curLib[curAttr] = attr['data'][curAttr];
// Core
var core = {
// Important vars n' stuff
lib: {
api_url: 'https://amiv-apidev.vsos.ethz.ch',
//api_url: 'https://nicco.io/amiv',
spec_url: 'lib/amiv/spec.json',
//spec_url: 'https://nicco.io/amiv/docs/spec.json',
authenticated: false,
ready: false,
req_time_out: 5000,
on_interval: 100,
auth_interval: 5000,
auth_allowed_fails: 5,
auth_fails: 0,
show_errors: false,
},
// Header Setup
header: {
req: {
'get': ['Content-Type', 'Authorization'],
'post': ['Content-Type', 'Authorization'],
'put': ['Content-Type', 'Authorization', 'If-Match'],
'patch': ['Content-Type', 'Authorization', 'If-Match'],
'delete': ['Content-Type', 'Authorization', 'If-Match'],
},
make: {
'Content-Type': function() {
return 'application/json'
},
'Authorization': function() {
if (get('cur_token') != null)
return 'Basic ' + btoa(get('cur_token') + ':');
return '';
},
'If-Match': function() {
return null;
}
}
}
}
var hdr = {};
for (var curHdr in attr['header'])
hdr[curHdr] = attr['header'][curHdr];
// Utility empty function for no callback
function dummy() {};
var curPath = '/' + domain;
var curLink = curPath;
if (attr['id'] != undefined) {
curPath += '/' + attr['id'];
curLink += '/{_id}';
//Save and get into localStorage
function set(cname, cvalue, exdays) {
window.localStorage.setItem('glob-' + cname, cvalue);
}
if (get('cur_token') != null)
hdr['Authorization'] = 'Basic ' + btoa(get('cur_token') + ':');
function get(cname) {
return window.localStorage.getItem('glob-' + cname);
}
if (m != 'GET') {
if (m == 'POST' || m == 'PUT')
for (var param in lib[domain]['methods'][m][curLink]['params'])
if (lib[domain]['methods'][m][curLink]['params'][param]['required'] == true)
if (curLib[lib[domain]['methods'][m][curLink]['params'][param]['name']] == undefined)
return 'Error: Missing ' + lib[domain]['methods'][m][curLink]['params'][param]['name'];
hdr['Content-Type'] = 'application/json';
curLib = JSON.stringify(curLib);
// Make Request
function req(attr, callback) {
callback = callback || function(msg) {
console.log(msg);
};
$.ajax({
url: core.lib.api_url + attr.path,
data: attr.data,
method: attr.method,
dataType: 'json',
timeout: core.lib.req_time_out,
headers: attr.headers,
error: function(res) {
if (core.lib.show_errors) console.log(res);
callback(res);
},
}).done(function(res) {
callback(res);
});
}
req({
path: curPath,
method: m,
data: curLib,
headers: hdr,
}, callback);
return true;
};
}
$.ajax({
url: core.lib.spec_url,
dataType: 'json',
timeout: 5000,
success: function(d) {
var data = d['domains'];
for (var domain in data) {
lib[domain] = {};
lib[domain].methods = [];
for (var p in data[domain]['paths']) {
for (var m in data[domain]['paths'][p]) {
if (lib[domain].methods[m] == undefined) lib[domain].methods[m] = {};
lib[domain].methods[m][p] = data[domain]['paths'][p][m];
}
}
for (var m in lib[domain]['methods']) {
lib[domain][m] = makeFunc(domain, m);
}
function makeFunc(domain, m) {
return function(attr, callback) {
attr = attr || {};
var curLib = {}
for (var curAttr in attr['data'])
curLib[curAttr] = attr['data'][curAttr];
var hdr = {};
for (var curHdr in attr['header'])
hdr[curHdr] = attr['header'][curHdr];
var curPath = '/' + domain;
var curLink = curPath;
if (attr['id'] != undefined) {
curPath += '/' + attr['id'];
curLink += '/{_id}';
}
if (get('cur_token') != null)
hdr['Authorization'] = 'Basic ' + btoa(get('cur_token') + ':');
if (m != 'GET') {
if (m == 'POST' || m == 'PUT')
for (var param in lib[domain]['methods'][m][curLink]['params'])
if (lib[domain]['methods'][m][curLink]['params'][param]['required'] == true)
if (curLib[lib[domain]['methods'][m][curLink]['params'][param]['name']] == undefined)
return 'Error: Missing ' + lib[domain]['methods'][m][curLink]['params'][param]['name'];
hdr['Content-Type'] = 'application/json';
curLib = JSON.stringify(curLib);
}
req({
path: curPath,
method: m,
data: curLib,
headers: hdr,
}, callback);
return true;
};
}
checkAuth();
},
error: function(d) {
console.log('Cannot reach initialization spec: '+core.lib.spec_url);
console.log(d);
}
});
function checkAuth() {
if (get('cur_token') != null) {
lib.sessions.GET({
data: {
where: 'token==["' + get('cur_token') + '"]'
}
}, function(res) {
if (res !== undefined && res.hasOwnProperty('_items') && res['_items'].length > 0)
core.lib.authenticated = true;
else
core.lib.authenticated = false;
core.lib.ready = true;
checkAuth();
$.ajax({
url: core.lib.spec_url,
dataType: 'json',
timeout: 5000,
success: function(d) {
var data = d['domains'];
for (var domain in data) {
lib[domain] = {};
lib[domain].methods = [];
for (var p in data[domain]['paths']) {
for (var m in data[domain]['paths'][p]) {
if (lib[domain].methods[m] == undefined) lib[domain].methods[m] = {};
lib[domain].methods[m][p] = data[domain]['paths'][p][m];
}
}
for (var m in lib[domain]['methods']) {
lib[domain][m] = makeFunc(domain, m);
}
}
checkAuth();
},
error: function(d) {
console.log('Cannot reach initialization spec: ' + core.lib.spec_url);
console.log(d);
}
});
} else {
core.lib.authenticated = false;
core.lib.ready = true;
checkAuth();
}
}
// Get the etag
lib.getEtag = function(curDomain, curId, callback) {
return lib[curDomain].GET({
id: curId
}, function(res) {
callback(res['_etag']);
});
}
// Returns whether user is logged in
lib.authenticated = function() {
return core.lib.authenticated;
}
// Login function
lib.login = function(curUser, curPass, callback) {
callback = callback || dummy;
req({
path: '/sessions/',
method: 'POST',
data: JSON.stringify({
user: curUser.toLowerCase(),
password: curPass
}),
headers: {
'Content-Type': 'application/json',
},
}, function(msg) {
var reqVar = ['token', 'user_id', 'id'];
for (var i in reqVar) {
lib['cur_' + reqVar[i]] = msg[reqVar[i]];
function checkAuth() {
if (get('cur_token') != null) {
lib.sessions.GET({
data: {
where: 'token==["' + get('cur_token') + '"]'
}
}, function(res) {
if (res !== undefined && res.hasOwnProperty('_items') && res['_items'].length > 0)
core.lib.authenticated = true;
else
core.lib.authenticated = false;
core.lib.ready = true;
setTimeout(checkAuth, core.lib.auth_interval);
});
} else {
core.lib.authenticated = false;
core.lib.ready = true;
setTimeout(checkAuth, core.lib.auth_interval);
}
}
if (msg['_status'] == 'OK') {
set('cur_token_id', msg['id'], 1);
set('cur_token', msg['token'], 1);
set('cur_user_id', parseInt(msg['user_id']), 1);
callback(true);
} else {
set('cur_token_id', null);
set('cur_token', null);
set('cur_user_id', null);
callback(false);
// Get the etag
lib.getEtag = function(curDomain, curId, callback) {
return lib[curDomain].GET({
id: curId
}, function(res) {
callback(res['_etag']);
});
}
});
}
// Logout
lib.logout = function() {
// Deleting token from api and unsetting the vars
lib.sessions.DELETE({id: get('cur_token_id')}, function(res){
set('cur_token', null);
set('cur_token_id', null);
set('cur_user_id', null);
});
}
// Get info about the current user
lib.user = function(attr, callback) {
callback = callback || dummy;
lib.users.GET({
id: get('cur_user_id')
}, function(res) {
if (typeof attr === 'object') {
var ret = {};
for (var key in attr)
ret[attr[key]] = res[attr[key]];
callback(ret);
} else {
callback(res[attr]);
// Returns whether user is logged in
lib.authenticated = function() {
return core.lib.authenticated;
}
});
}
// Get the necessary field for specific requests
lib.getRequiredFields = function(domain, type, wId) {
var curTree;
var resAttr = {};
if (wId)
curTree = lib[domain]['methods'][type]['/' + domain + '/{_id}']['params'];
else
curTree = lib[domain]['methods'][type]['/' + domain]['params'];
if (curTree.length == 0) return false;
else {
for (var i = 0; i < curTree.length; i++)
if (curTree[i].required == true)
resAttr[curTree[i].name] = curTree[i];
}
return resAttr;
}
//On function
lib.on = function(trigger, callback){
if(callback){
lib.on_mem[trigger].callback = callback;
lib.on_mem[trigger].func();
}
}
lib.on_mem = {
ready: {
func: function() {
if (core.lib.ready)
lib.on_mem.ready.callback();
else setTimeout(function() {
lib.on_mem.ready.func();
}, core.lib.on_interval);
}
},
login: {
func: function(){
if(core.lib.authenticated && !lib.on_mem.login.prev)
lib.on_mem.login.callback();
lib.on_mem.login.prev = core.lib.authenticated;
setTimeout(lib.on_mem.login.func, core.lib.on_interval);
},
prev: false,
},
logout: {
func: function(){
if(!core.lib.authenticated && lib.on_mem.logout.prev)
lib.on_mem.logout.callback();
lib.on_mem.logout.prev = core.lib.authenticated;
setTimeout(lib.on_mem.logout.func, core.lib.on_interval);
},
prev: false,
},
}
// Login function
lib.login = function(curUser, curPass, callback) {
callback = callback || dummy;
req({
path: '/sessions/',
method: 'POST',
data: JSON.stringify({
user: curUser.toLowerCase(),
password: curPass
}),
headers: {
'Content-Type': 'application/json',
},
}, function(msg) {
var reqVar = ['token', 'user_id', 'id'];
for (var i in reqVar) {
lib['cur_' + reqVar[i]] = msg[reqVar[i]];
}
if (msg['_status'] == 'OK') {
set('cur_token_id', msg['id'], 1);
set('cur_token', msg['token'], 1);
set('cur_user_id', parseInt(msg['user_id']), 1);
callback(true);
} else {
set('cur_token_id', null);
set('cur_token', null);
set('cur_user_id', null);
callback(false);
}
});
}
return lib;
}
// Logout
lib.logout = function() {
// Deleting token from api and unsetting the vars
lib.sessions.DELETE({
id: get('cur_token_id')
}, function(res) {
set('cur_token', null);
set('cur_token_id', null);
set('cur_user_id', null);
});
}
if (typeof(window[lns]) === 'undefined') {
window[lns] = libgen();
} else {
console.log(lns+' already defined, please solve conflict');
}
// Get info about the current user
lib.user = function(attr, callback) {
callback = callback || dummy;
lib.users.GET({
id: get('cur_user_id')
}, function(res) {
if (typeof attr === 'object') {
var ret = {};
for (var key in attr)
ret[attr[key]] = res[attr[key]];
callback(ret);
} else {
callback(res[attr]);
}
});
}
// Get the necessary field for specific requests
lib.getRequiredFields = function(domain, type, wId) {
var curTree;
var resAttr = {};
if (wId)
curTree = lib[domain]['methods'][type]['/' + domain + '/{_id}']['params'];
else
curTree = lib[domain]['methods'][type]['/' + domain]['params'];
if (curTree.length == 0) return false;
else {
for (var i = 0; i < curTree.length; i++)
if (curTree[i].required == true)
resAttr[curTree[i].name] = curTree[i];
}
return resAttr;
}
//On function
lib.on = function(trigger, callback) {
if (callback) {
lib.on_mem[trigger].callback = callback;
lib.on_mem[trigger].func();
}
}
lib.on_mem = {
ready: {
func: function() {
if (core.lib.ready)
lib.on_mem.ready.callback();
else setTimeout(function() {
lib.on_mem.ready.func();
}, core.lib.on_interval);
}
},
login: {
func: function() {
if (core.lib.authenticated && !lib.on_mem.login.prev)
lib.on_mem.login.callback();
lib.on_mem.login.prev = core.lib.authenticated;
setTimeout(lib.on_mem.login.func, core.lib.on_interval);
},
prev: false,
},
logout: {
func: function() {
if (!core.lib.authenticated && lib.on_mem.logout.prev)
lib.on_mem.logout.callback();
lib.on_mem.logout.prev = core.lib.authenticated;
setTimeout(lib.on_mem.logout.func, core.lib.on_interval);
},
prev: false,
},
}
return lib;
}
if (typeof(window[lns]) === 'undefined') {
window[lns] = libgen();
} else {
console.log(lns + ' already defined, please solve conflict');
}
})(window);
This diff is collapsed.
......@@ -139,7 +139,7 @@ body {
MAIN NAVBAR
*/
.navbar-main .cust-menu>li {
.navbar-main .container-fluid>ul>li {
float: left;
}
......
......@@ -22,18 +22,27 @@ var tools = {
},
// Modal function
modalStatus: 0,
modalFunc: {
init: 0,
},
modal: function(attr) {
attr = attr || {};
if (attr.success !== undefined && typeof(attr.success) == 'function')
tools.modalFunc.success = attr.success;
if (attr.cancel !== undefined && typeof(attr.cancel) == 'function')
tools.modalFunc.cancel = attr.cancel;
if (!tools.modalFunc.init) {
$('.modalCont .modal-footer .btn-primary').click(function() {
$('.modalCont').off('hide.bs.modal').modal('hide');
tools.modalFunc.success();
});
$('.modalCont').on('hide.bs.modal', tools.modalFunc.cancel);
tools.modalFunc.init = 1;
}
$('.modalCont .modal-title').html(attr.head);
$('.modalCont .modal-body').html(attr.body);
$('.modalCont .modal-footer .btn-primary').html(attr.button).click(function() {
$('.modalCont').off('hide.bs.modal').modal('hide');
if (typeof(attr.success) == 'function')
attr.success();
});
if (typeof(attr.cancel) == 'function')
$('.modalCont').modal('show').on('hide.bs.modal', attr.cancel);
$('.modalCont .modal-footer .btn-primary').html(attr.button);
$('.modalCont').modal('show');
},
// Ajax loading gunction and getting the tools
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment