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