-
Notifications
You must be signed in to change notification settings - Fork 5
/
startup.js
146 lines (133 loc) · 4.03 KB
/
startup.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
// This is the body of the pre-AMD version of main.js
define([
"dojo/cookie",
"dojo/ready",
"dojo/io-query",
"dojo/json",
'dojo/_base/unload',
"andes/WordTip",
"dojo/on",
"andes/defaults"
],function(cookie,ready,ioQuery,json,baseUnload,wordTip,on,defaults){ // Pre-AMD version had a function wrapper.
// In the pre-AMD version, andes was a global variable
// Here we make it the object returned by this module.
var andes={};
// summary:
// Handles loading of app and the timing of how items load.
var devMode = true, query;
if(!window.location.search){
query = {
p:"s2e",
//p:"s2esolved",
u:"joe1"
};
}else{
query = ioQuery.queryToObject(window.location.search.substring(1));
}
if(!query.u || !query.p){
ready(function(){
console.error("FIXME: Finalize the error message for needing to return to WebAssign.");
andes.error({
title: "Fatal Error",
message: "No user and/or problem data was provided; cannot continue. Please click on your browser's back button.",
dialogType: andes.error.FATAL
});
});
};
// FNV-1a for string, 32 bit version, returning hex.
var FNV1aHash = function(x){
var hash = 0x811c9dc5; // 2166136261
for (i = 0; i < x.length; i++) {
hash ^= x.charCodeAt(i);
hash *= 0x01000193; // 16777619
}
hash &= hash; // restrict to lower 32 bits.
// javascript doesn't handle negatives correctly
// when converting to hex.
if(hash<0){
hash = 0xffffffff + hash + 1;
}
return Number(hash).toString(16);
};
var setCookie = function(){
// Andes database requires that clientID be 50 characters.
andes.sessionId = FNV1aHash(andes.userId+andes.projectId) +
'_' + new Date().getTime();
var andesCookie = {
u:andes.userId,
p:andes.projectId,
sid:andes.sessionId,
closed:false
};
cookie("andes", json.stringify(andesCookie), { expires: 999 });
};
andes.closeFirst = false;
andes.userId = query.u;
andes.projectId = query.p;
andes.sectionId = query.s || 1234;
andes.extra = query.e; //extra field for Raj
var ck = cookie("andes");
if(ck && ck.u){
// There was already a cookie here
if(ck.u==andes.userId && ck.p==andes.projectId){
// we can continue the same session
andes.sessionId = ck.sid;
}else{
andes.closeFirst = true;
console.warn("Closing previous session", ck.u, andes.userId, ck.p, andes.projectId);
setCookie();
}
}else{
setCookie();
}
baseUnload.addOnUnload(function(){
andes.api.close({});
// but don't clear cookie
});
// Load defaults
andes.defaults=defaults;
// WordTip needs to be added before conEdit is removed by drawing
andes.WordTip = new wordTip();
console.log("Got WordTip=",andes.WordTip);
ready(function(){
console.info("andes/startup.js: submit button.");
// Problem close actions set
submitButton=dojo.byId("submitButton");
console.log("About to connect submit button ",submitButton);
on(submitButton, "click", function(){
// Needs to be non-blocking
var closer = andes.api.close({});
closer.then(function(result){
// console.log("Made the trip", result);
// Look for url from server, if it doesn't
// exist, default takes user back one page
var url, found = false;
dojo.forEach(result, function(entry){
if(entry.url){
found = true;
//console.log("Found url: ",entry.url);
url = entry.url;
}
});
found ? window.location = url : history.go(-1);
}, function(error){
console.warn("Server Error", error);
console.log("Returning to previous page");
history.go(-1);
});
cookie("andes", null, { expires: -1 });
// should look for url from server that
// can overrride default.
});
// Splash animation
var splashNode = dojo.byId("splashOverlay"),
anim = dojo.fadeOut({node:dojo.byId("splashOverlay")}),
_h = on(anim, "onEnd", function(){
_h.remove();
dojo.style(splashNode, "display", "none");
console.log("andes.main loaded");
});
anim.play();
});
return andes;
});