-
Notifications
You must be signed in to change notification settings - Fork 33
/
Copy pathsettings.js
85 lines (74 loc) · 2.61 KB
/
settings.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
function Settings() {
var sections = [this.makeSettingsSubTree(game.config, "Config")];
if (game.player.IsAdmin)
sections.push(this.makeSettingsSubTree(game.debug, "Debug"));
this.panel = new Panel(
"settings",
"Settings",
sections
);
this.triggers = {
"settings.character.bald": function() {
game.player.initSprite();
},
"settings.language.Russian": function() {
game.reload();
},
"settings.ui.minimapObjects": function() {
game.reload();
},
"settings.map.darkness": function() {
},
"settings.sound.playMusic": function() {
game.sound.toggleMusic();
},
"settings.ui.world": function() {
util.dom.toggle(game.world);
},
"settings.ui.showDonate": function() {
game.controller.donate.toggle();
},
};
}
Settings.load = function() {
Settings.prototype.makeSettingsSubTree(game.config);
Settings.prototype.makeSettingsSubTree(game.debug);
}
Settings.prototype = {
triggers: null,
makeSettingsSubTree: function(map, name) {
var self = this;
var subtree = document.createElement("div");
var title = document.createElement("big");
title.textContent = name;
subtree.appendChild(title);
Object.keys(map).forEach(function(name) {
var group = map[name];
var fieldset = document.createElement("fieldset");
var legend = document.createElement("legend");
legend.textContent = name;
fieldset.appendChild(legend);
Object.keys(group).forEach(function(prop) {
var label = document.createElement("label");
var input = document.createElement("input");
input.type = "checkbox";
var key = ["settings", name, prop].join(".");
var value = localStorage.getItem(key);
if (value !== null) {
group[prop] = JSON.parse(value);
}
input.checked = group[prop];
label.appendChild(input);
label.appendChild(document.createTextNode(prop));
fieldset.appendChild(label);
label.addEventListener("change", function() {
group[prop] = !group[prop];
localStorage.setItem(key, group[prop]);
self.triggers[key] && self.triggers[key]();
});
});
subtree.appendChild(fieldset);
});
return subtree;
},
}