spacedeck-open/public/javascripts/backend.js

334 lines
11 KiB
JavaScript

var api_endpoint = ENV.apiEndpoint;
var api_socket_endpoint = ENV.websocketsEndpoint;
var api_token = null;
var websocket = null;
var channel_id = null;
var space_auth = null;
function load_resource(method, path, data, on_success, on_error, on_progress) {
var req = new XMLHttpRequest();
req.onload = function(evt,b,c) {
if (req.status>=200 && req.status<=299) {
var parsed = null;
try {
var parsed = JSON.parse(req.response);
} catch(e) {};
if (data && parsed && parsed._id) {
// mutate the local object and update its _id
data._id = parsed._id;
}
if (on_success) {
on_success(parsed,req);
}
} else {
if (on_error) {
on_error(req);
}
}
};
req.onerror = function(err) {
console.log(err,err.target);
// window._spacedeck_location_change is a flag set by redirect / reload functions
if (!window._spacedeck_location_change) {
if (window.spacedeck && window.spacedeck.active_space) {
window.spacedeck.offline = true;
} else {
alert("Could not connect to Spacedeck. Please reconnect and try again.");
}
}
if (on_error) on_error(req);
}
req.withCredentials = true;
req.open(method, api_endpoint+"/api"+path, true);
if (api_token) {
req.setRequestHeader("X-Spacedeck-Auth", api_token);
}
if (space_auth) {
console.log("set space auth", space_auth);
req.setRequestHeader("X-Spacedeck-Space-Auth", space_auth);
}
if (channel_id) {
req.setRequestHeader("X-Spacedeck-Channel", channel_id);
}
if (csrf_token) {
req.setRequestHeader("X-csrf-token", csrf_token);
}
try {
if (data) {
if (data.toString() == "[object File]") {
req.setRequestHeader("Content-type", data.type);
req.setRequestHeader("Accepts", "application/json");
req.upload.onprogress = function(e) {
console.log("upload progress: ",e.loaded,e.total);
if (on_progress) on_progress(e);
}
req.send(data);
} else {
req.setRequestHeader("Content-type", "application/json");
req.send(JSON.stringify(data));
}
} else {
req.send();
}
} catch (e) {
if (on_error) {
on_error(req, e);
} else {
throw(e);
}
}
}
function get_resource(path, on_success, on_error, on_progress) {
load_resource("get", path, null, on_success, on_error, on_progress);
}
function load_profile(name, on_success, on_error) {
load_resource("get", "/users/slug?slug="+name, null, on_success, on_error);
}
function load_current_user(on_success, on_error) {
load_resource("get", "/users/current", null, on_success, on_error);
}
function load_space(id, on_success, on_error) {
if (!id || id=="undefined") {
console.error("load_space id:", id);
return;
}
var url = "/spaces/"+id;
load_resource("get", url, null, function(space, req) {
var role = req.getResponseHeader("x-spacedeck-space-role");
on_success(space, role);
}, on_error);
}
function load_space_path(id, on_success, on_error) {
var url = "/spaces/"+id+"/path";
load_resource("get", url, null, function(space, req) {
on_success(space);
}, on_error);
}
function load_spaces(id, is_home, on_success, on_error) {
if (!id || id=="undefined") {
console.error("load_spaces id:", id);
return;
}
var q = "?parent_space_id="+id;
load_resource("get", "/spaces"+q, null, function(spaces) {
on_success(spaces);
}, on_error);
}
function load_importables(user, on_success, on_error) {
load_resource("get", "/users/"+user._id+"/importables", null, on_success, on_error);
}
function import_zip(user, filename, on_success, on_error) {
load_resource("get", "/users/"+user._id+"/import?zip="+filename, null, on_success, on_error);
}
function load_history(s, on_success, on_error) {
load_resource("get", "/spaces/"+ s._id +"/digest", null, on_success, on_error);
}
function load_filtered_spaces(filter, on_success, on_error) {
load_resource("get", "/spaces?filter="+filter, null, on_success, on_error);
}
function load_spaces_search(query, on_success, on_error) {
load_resource("get", "/spaces?search="+query, null, on_success, on_error);
}
function load_artifacts(id, on_success, on_error) {
load_resource("get", "/spaces/"+id+"/artifacts", null, on_success, on_error);
}
function save_artifact(a, on_success, on_error) {
if (a._id) {
load_resource("put", "/spaces/"+a.space_id+"/artifacts/"+a._id,a,on_success,on_error);
} else {
load_resource("post", "/spaces/"+a.space_id+"/artifacts",a,on_success,on_error);
}
}
function save_pdf_file(space, point, file, zones, on_success, on_error, on_progress) {
load_resource("post", "/spaces/"+space._id+"/artifacts-pdf?filename="+file.name + "&x="+point.x+"&y="+point.y + "&zones="+zones,file,on_success,on_error,on_progress);
}
function save_artifact_file(a, file,filename, on_success, on_error, on_progress) {
load_resource("post", "/spaces/"+a.space_id+"/artifacts/"+a._id+"/payload?filename="+filename,file,on_success,on_error,on_progress);
}
function save_space(s, on_success, on_error) {
if (s._id) {
delete s['artifacts'];
load_resource("put", "/spaces/"+s._id,s,on_success,on_error);
} else {
load_resource("post", "/spaces",s,on_success,on_error);
}
}
function delete_space(s, on_success, on_error) {
load_resource("delete", "/spaces/"+s._id, null, on_success, on_error);
}
function delete_artifact(a, on_success, on_error) {
load_resource("delete", "/spaces/"+a.space_id+"/artifacts/"+a._id);
}
function duplicate_space(s, to_space_id, on_success, on_error) {
var path = "/spaces/"+s._id+"/duplicate";
if(to_space_id) {
path += "?parent_space_id=" + to_space_id
}
load_resource("post", path, null,on_success,on_error);
}
function load_members(space, on_success, on_error) {
load_resource("get", "/spaces/"+ space._id +"/memberships", null, on_success, on_error);
}
function create_membership(space, m, on_success, on_error) {
load_resource("post", "/spaces/"+ space._id +"/memberships", m, on_success, on_error);
}
function save_membership(space, m, on_success, on_error) {
load_resource("put", "/spaces/"+ space._id +"/memberships/" + m._id, m, on_success, on_error);
}
function delete_membership(space, m, on_success, on_error) {
load_resource("delete", "/spaces/"+ space._id +"/memberships/"+m._id, m, on_success, on_error);
}
function accept_invitation(id, code, on_success, on_error) {
load_resource("get", "/memberships/"+ id +"/accept?code="+code, null, on_success, on_error);
}
function get_join_link(space_id, on_success, on_error) {
load_resource("get", "/invitation_codes?space_id="+space_id, null, on_success, on_error);
}
function create_join_link(space_id, role, on_success, on_error) {
load_resource("post", "/invitation_codes", {join_role:role, sticky:true, space_id:space_id}, on_success, on_error);
}
function delete_join_link(link_id, on_success, on_error) {
load_resource("delete", "/invitation_codes/"+link_id, null, on_success, on_error);
}
function load_team_members(id, on_success, on_error) {
load_resource("get", "/teams/"+ id +"/memberships", null, function(team) {
on_success(team);
}, on_error);
}
function save_avatar_file(type, o, file, on_success, on_error) {
load_resource("post", "/"+type+"s/"+o._id+"/avatar", file, on_success,on_error);
}
function remove_avatar_file(type, o, on_success, on_error) {
load_resource("delete", "/"+type+"s/"+o._id+"/avatar", null, on_success,on_error);
}
function save_space_background_file(space, file, on_success, on_error) {
load_resource("post", "/spaces/"+space._id+"/background?filename="+file.name, file, on_success,on_error);
}
function save_user_background_file(user, file, on_success, on_error) {
load_resource("post", "/users/"+user._id+"/background", file, on_success,on_error);
}
function save_user_password(u, pass, newPass, on_success, on_error) {
load_resource("post", "/users/" + u._id + "/password", {old_password:pass, new_password:newPass}, on_success, on_error);
}
function get_featured_users(on_success, on_error) {
load_resource("get", "/users/featured", null, on_success, on_error);
}
function save_user(u, on_success, on_error) {
load_resource("put", "/users/"+u._id,u,on_success,on_error);
}
function delete_user(u, password, on_success, on_error) {
load_resource("delete", "/users/"+u._id +"?password="+password,null,on_success,on_error);
}
function create_user(name, email, password, password_confirmation, invite_code, on_success, on_error) {
load_resource("post", "/users", {email:email, nickname:name, password:password, password_confirmation: password_confirmation, invite_code: invite_code}, on_success, on_error);
}
function create_session(email, password, on_success, on_error) {
load_resource("post", "/sessions", {email:email, password:password}, on_success, on_error);
}
function delete_session(on_success, on_error) {
load_resource("delete", "/sessions/current", null, on_success, on_error);
}
function create_oauthtoken(on_success, on_error) {
load_resource("get", "/users/oauth2callback/url", null, on_success, on_error);
}
function create_session_for_oauthtoken(token, on_success, on_error) {
load_resource("get", "/users/loginorsignupviagoogle?code="+token, null, on_success, on_error);
}
function create_password_reset(email, on_success, on_error) {
load_resource("post", "/users/password_reset_requests?email=" + encodeURIComponent(email), null, on_success, on_error);
}
function confirm_password_reset(password, confirm, on_success, on_error) {
load_resource("post", "/users/password_reset_requests/"+confirm+"/confirm", {password:password}, on_success, on_error);
}
function confirm_user(user, token, on_success, on_error) {
load_resource("put", "/users/"+user._id+"/confirm", {token:token}, on_success, on_error);
}
function resent_confirm_mail(user, on_success, on_error) {
load_resource("post", "/users/"+user._id+"/confirm", {}, on_success, on_error);
}
function create_feedback(user, m, on_success, on_error) {
load_resource("post", "/users/feedback", {text: m}, on_success, on_error);
}
function save_team(u, on_success, on_error) {
load_resource("put", "/teams/"+u._id,u,on_success,on_error);
}
function load_comments(space_id, on_success, on_error) {
load_resource("get", "/spaces/"+space_id+"/messages", null, on_success, on_error);
}
function save_comment(space_id, data, on_success, on_error) {
load_resource("post", "/spaces/"+space_id +"/messages", data, on_success, on_error);
}
function delete_comment(space_id, message_id,on_success, on_error) {
load_resource("delete", "/spaces/"+space_id +"/messages/"+ message_id, null , on_success, on_error);
}
function update_comment(space_id, data, on_success, on_error) {
load_resource("post", "/spaces/"+space_id+"/messages/" + data._id , data, on_success, on_error);
}
function load_notifications(u, on_success, on_error) {
load_resource("get", "/notifications", null, on_success, on_error);
}