-
Notifications
You must be signed in to change notification settings - Fork 5
/
PreferenceRegistry.js
57 lines (52 loc) · 2.08 KB
/
PreferenceRegistry.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
// Pre-AMD version had a function wrapper.
define([
"andes/startup"
],function(andes){
// Summary:
// User preferences that can be saved are registered here.
// When preferences are updated this saves them to the server
// via the api, while the opposite direction allows the
// server to update values that register here.
// Example api:
// andes.api.recordAction({type:"set-preference", name: "display-timer", value: true});
_prefs = {};
return {
// Prefs are name value pairs with scope so that the server
// can update them.
registerPref: function(/*String*/pref, /*function*/setter, scope){
_prefs[pref] = { set: setter, scope: scope };
},
// summary:
// Once a setting has been registered calling this with the name
// value pair will save it to server. If it hasn't been registered
// it will fail and return false.
savePref: function(pref, value){
if(!_prefs[pref]){
console.warn("Must register preference before saving to it");
return false;
}else{
if(_prefs[pref].value != value){
// This is user changed
andes.api.recordAction({type:"set-preference", name:pref, value:value });
}
return true;
}
},
// summary:
// This willl attempt to set in the browser the registered preference
// and it will save the value so that duplicate requests aren't sent
// to the server
setPref: function(pref, value){
if(_prefs[pref]){
_prefs[pref].value = value;
var f = _prefs[pref].set,
s = _prefs[pref].scope;
f.call(s, value);
return true;
}else{
console.warn("Attempted to set a preference not registered");
return false;
}
}
}
});