Merge pull request +15814 from c9/default-settings

fix "reset to default settings" button
pull/467/head
Matthijs van Henten 2017-11-15 11:44:39 +01:00 zatwierdzone przez GitHub
commit ec23a68041
17 zmienionych plików z 111 dodań i 107 usunięć

Wyświetl plik

@ -50,6 +50,7 @@ define(function(require, exports, module) {
var KEYS = Object.keys(PATH); var KEYS = Object.keys(PATH);
var saveToCloud = {}; var saveToCloud = {};
var defaults = {};
var model = {}; var model = {};
var cache = {}; var cache = {};
var diff = 0; // TODO should we allow this to be undefined and get NaN in timestamps? var diff = 0; // TODO should we allow this to be undefined and get NaN in timestamps?
@ -67,7 +68,7 @@ define(function(require, exports, module) {
if (!json) { if (!json) {
// Load from TEMPLATE // Load from TEMPLATE
if (options.settings == "defaults" || testing) if (options.settings == "defaults" || testing)
json = TEMPLATE; json = util.cloneObject(TEMPLATE);
// Load from parsed settings in the index file // Load from parsed settings in the index file
else if (options.settings) { else if (options.settings) {
json = options.settings; json = options.settings;
@ -80,7 +81,7 @@ define(function(require, exports, module) {
try { try {
json[type] = JSON.parse(json[type]); json[type] = JSON.parse(json[type]);
} catch (e) { } catch (e) {
json[type] = TEMPLATE[type]; json[type] = util.cloneObject(TEMPLATE[type]);
} }
} }
} }
@ -91,8 +92,13 @@ define(function(require, exports, module) {
KEYS.forEach(function(type) { KEYS.forEach(function(type) {
if (!skipCloud[type] && json) if (!skipCloud[type] && json)
return --count; return --count;
fs.readFile(PATH[type], function(err, data) { if (!json)
if (!json) json = {}; json = {};
if (type == "state" && debugMode)
return done(null, localStorage["debugState" + c9.projectName]);
fs.readFile(PATH[type], done);
function done(err, data) {
try { try {
json[type] = err ? {} : JSON.parse(data); json[type] = err ? {} : JSON.parse(data);
} catch (e) { } catch (e) {
@ -103,7 +109,7 @@ define(function(require, exports, module) {
if (--count === 0) if (--count === 0)
loadSettings(json); loadSettings(json);
}); }
}); });
if (count > 0) if (count > 0)
return; return;
@ -214,59 +220,31 @@ define(function(require, exports, module) {
} }
function read(json, isReset) { function read(json, isReset) {
try { KEYS.forEach(function(type) {
if (testing) throw "testing"; if (json[type])
model[type] = json[type];
});
if (resetSettings) {
var query = (resetSettings == 1
? "user|state" : resetSettings).split("|");
resetSettings = false;
query.forEach(function(type) {
model[type] = util.cloneObject(TEMPLATE[type]);
});
}
if (testing) {
KEYS.forEach(function(type) { KEYS.forEach(function(type) {
if (json[type]) model[type] = util.cloneObject(TEMPLATE[type]);
model[type] = json[type];
});
if (resetSettings) {
var query = (resetSettings == 1
? "user|state" : resetSettings).split("|");
query.forEach(function(type) {
model[type] = TEMPLATE[type];
});
}
} catch (e) {
KEYS.forEach(function(type) {
model[type] = TEMPLATE[type];
}); });
} }
if (!c9.debug && !testing) { emit("read", {
try { model: model,
emit("read", { ext: plugin,
model: model, reset: isReset
ext: plugin, });
reset: isReset
});
} catch (e) {
console.error("Error loading settings, reseting to defaults");
console.error(e);
fs.writeFile(PATH.project
+ ".broken", JSON.stringify(json), function() {});
KEYS.forEach(function(type) {
model[type] = TEMPLATE[type];
});
emit("read", {
model: model,
ext: plugin,
reset: isReset
});
}
}
else {
emit("read", {
model: model,
ext: plugin,
reset: isReset
});
}
if (inited) if (inited)
return; return;
@ -328,7 +306,7 @@ define(function(require, exports, module) {
} }
function setDefaults(path, attr) { function setDefaults(path, attr) {
var node = getNode(path) || set(path, {}, true, true) && getNode(path); var node = getNode(path, true) || set(path, {}, true, true) && getNode(path, true);
var changed; var changed;
attr.forEach(function(a) { attr.forEach(function(a) {
@ -405,7 +383,7 @@ define(function(require, exports, module) {
key = "json()"; key = "json()";
} }
var hash = model; var hash = isDefault ? defaults : model;
if (!parts.every(function(part) { if (!parts.every(function(part) {
if (!hash[part] && checkDefined) return false; if (!hash[part] && checkDefined) return false;
hash = hash[part] || (hash[part] = {}); hash = hash[part] || (hash[part] = {});
@ -474,31 +452,37 @@ define(function(require, exports, module) {
return parseFloat(double); return parseFloat(double);
} }
function getNode(query) { function getNode(query, isDefault) {
return get(query, true); return get(query, true, isDefault);
} }
function get(query, isNode) { function getUnsafe(query, isNode, isDefault) {
var parts = query.split("/"); var parts = query.split("/");
if (!isNode && parts[parts.length - 1].charAt(0) !== "@") if (!isNode && parts[parts.length - 1].charAt(0) !== "@")
parts.push("json()"); parts.push("json()");
var hash = model; var hash = isDefault == true ? {} : model;
parts.every(function(part) { parts.every(function(part) {
hash = hash[part]; hash = hash[part];
return hash; return hash;
}); });
if (hash === undefined) {
hash = isDefault == false ? {} : defaults;
parts.every(function(part) {
hash = hash[part];
return hash;
});
}
return hash;
}
function get(query, isNode, isDefault) {
var hash = getUnsafe(query, isNode, isDefault);
return hash === undefined ? "" : hash; return hash === undefined ? "" : hash;
} }
function exist(query) { function exist(query) {
var parts = query.split("/"); return getUnsafe(query, true) != undefined;
var hash = model;
return parts.every(function(part) {
hash = hash[part];
return hash;
});
} }
function reset(query) { function reset(query) {
@ -506,10 +490,10 @@ define(function(require, exports, module) {
var info = {}; var info = {};
query.split("|").forEach(function(type) { query.split("|").forEach(function(type) {
info[type] = TEMPLATE[type]; info[type] = util.cloneObject(TEMPLATE[type]);
}); });
read(model, true); read(info, true);
saveToFile(); saveToFile();
} }

Wyświetl plik

@ -246,7 +246,7 @@ define(function(require, exports, module) {
["wrapToView", true, BOOL, "wrapmodeViewport"], ["wrapToView", true, BOOL, "wrapmodeViewport"],
// Ace // Ace
["fontSize", "12", NUMBER, "fontsize"], ["fontSize", 12, NUMBER, "fontsize"],
["fontFamily", font, STRING, "fontfamily"], ["fontFamily", font, STRING, "fontfamily"],
["antialiasedfonts", false, BOOL], ["antialiasedfonts", false, BOOL],
["overwrite", false, BOOL, "overwrite"], ["overwrite", false, BOOL, "overwrite"],
@ -257,17 +257,17 @@ define(function(require, exports, module) {
["showInvisibles", false, BOOL, "showinvisibles"], ["showInvisibles", false, BOOL, "showinvisibles"],
["showPrintMargin", true, BOOL, "showprintmargin"], ["showPrintMargin", true, BOOL, "showprintmargin"],
["displayIndentGuides", true, BOOL, "showindentguides"], ["displayIndentGuides", true, BOOL, "showindentguides"],
["printMarginColumn", "80", NUMBER, "printmargincolumn"], ["printMarginColumn", 80, NUMBER, "printmargincolumn"],
["behavioursEnabled", true, BOOL, "behaviors"], ["behavioursEnabled", true, BOOL, "behaviors"],
["wrapBehavioursEnabled", false, BOOL, "wrapbehaviors"], ["wrapBehavioursEnabled", false, BOOL, "wrapbehaviors"],
["scrollSpeed", "2", NUMBER, "scrollspeed"], ["scrollSpeed", 2, NUMBER, "scrollspeed"],
["showGutter", true, BOOL, "gutter"], ["showGutter", true, BOOL, "gutter"],
["showLineNumbers", true, STRING], ["showLineNumbers", true, STRING],
["showFoldWidgets", true, BOOL, "folding"], ["showFoldWidgets", true, BOOL, "folding"],
["fadeFoldWidgets", true, BOOL, "fadefoldwidgets"], ["fadeFoldWidgets", true, BOOL, "fadefoldwidgets"],
["highlightSelectedWord", true, BOOL, "highlightselectedword"], ["highlightSelectedWord", true, BOOL, "highlightselectedword"],
["animatedScroll", true, BOOL, "animatedscroll"], ["animatedScroll", true, BOOL, "animatedscroll"],
["scrollPastEnd", "0.5", NUMBER], ["scrollPastEnd", 0.5, NUMBER],
["mergeUndoDeltas", "off", STRING], ["mergeUndoDeltas", "off", STRING],
["theme", defaultThemes[skin], STRING, "theme"] ["theme", defaultThemes[skin], STRING, "theme"]
]; ];

Wyświetl plik

@ -29,7 +29,7 @@ define(function(require, exports, module) {
loaded = true; loaded = true;
settings.on("read", function() { settings.on("read", function() {
settings.setDefaults("user/collab", [["showbubbles", "true"]]); settings.setDefaults("user/collab", [["showbubbles", true]]);
}); });
prefs.add({ prefs.add({

Wyświetl plik

@ -302,16 +302,36 @@ define(function(require, exports, module) {
openTab("~/.c9/styles.css", css, "css"); openTab("~/.c9/styles.css", css, "css");
} }
function stringifySettings(query) {
var model = settings.get(query, true);
var defaults = settings.get(query, true, true);
var merged = merge({}, defaults, model);
function merge(result) {
var args = arguments;
for (var i = 1; i < args.length; i++) {
var o = args[i];
for (var key in o) {
if (!o[key] || typeof o[key] !== "object") {
result[key] = o[key];
} else {
if (!result[key] || typeof result[key] != "object")
result[key] = {};
merge(result[key], o[key]);
}
}
}
return result;
}
return util.stableStringify(merged, null, 4)
.replace(/ "(true|false)"/g, " $1");
}
function editProjectSettings() { function editProjectSettings() {
var value = JSON.stringify(settings.model.project, 0, " ") var value = stringifySettings("project");
.replace(/"true"/g, "true")
.replace(/"false"/g, "false");
openTab(settings.paths.project, value, "javascript"); openTab(settings.paths.project, value, "javascript");
} }
function editUserSettings() { function editUserSettings() {
var value = JSON.stringify(settings.model.user, 0, " ") var value = stringifySettings("user");
.replace(/"true"/g, "true")
.replace(/"false"/g, "false");
openTab(settings.paths.user, value, "javascript"); openTab(settings.paths.user, value, "javascript");
} }

Wyświetl plik

@ -75,9 +75,9 @@ define(function(require, module, exports) {
settings.on("read", function(e) { settings.on("read", function(e) {
// Defaults // Defaults
settings.setDefaults("state/console", [ settings.setDefaults("state/console", [
["expanded", "true"], ["expanded", true],
["maximized", "false"], ["maximized", false],
["height", "153"] ["height", 153]
]); ]);
// Height // Height

Wyświetl plik

@ -112,8 +112,8 @@ define(function(require, exports, module) {
settings.on("read", function(e) { settings.on("read", function(e) {
settings.setDefaults("user/metadata", [ settings.setDefaults("user/metadata", [
// ["enabled", "true"], // ["enabled", true],
["undolimit", "100"], ["undolimit", 100],
]); ]);
}, plugin); }, plugin);

Wyświetl plik

@ -73,7 +73,7 @@ define(function(require, module, exports) {
settings.on("read", function() { settings.on("read", function() {
settings.setDefaults(xpath, [ settings.setDefaults(xpath, [
["name", plugin.name], ["name", plugin.name],
["enabled", "true"] ["enabled", true]
]); ]);
// Start disabled // Start disabled

Wyświetl plik

@ -61,13 +61,13 @@ define(function(require, exports, module) {
caption: "Reset to Defaults", caption: "Reset to Defaults",
width: 140, width: 140,
onclick: function() { onclick: function() {
confirm("Reset Settings", confirm("Reset User Settings",
"Are you sure you want to reset your settings?", "Are you sure you want to reset your settings?",
"By resetting your settings to their " "By resetting your settings to their "
+ "defaults you will lose all custom settings. " + "defaults you will lose all custom settings. "
+ "Cloud9 will return to it's original configuration", + "Cloud9 will return to it's original configuration",
function() { function() {
settings.reset(); settings.reset("user");
}, function() {}, }, function() {},
{ yes: "Reset settings", no: "Cancel" }); { yes: "Reset settings", no: "Cancel" });
} }

Wyświetl plik

@ -61,7 +61,7 @@ define(function(require, module, exports) {
// Settings // Settings
settings.on("read", function() { settings.on("read", function() {
settings.setDefaults("project/build", [ settings.setDefaults("project/build", [
["saveall", "true"], ["saveall", true],
["builder", "auto"] ["builder", "auto"]
]); ]);
settings.setDefaults("user/build", [ settings.setDefaults("user/build", [

Wyświetl plik

@ -201,7 +201,7 @@ define(function(require, exports, module) {
// restore the breakpoints from the IDE settings // restore the breakpoints from the IDE settings
settings.on("read", function (e) { settings.on("read", function (e) {
settings.setDefaults("user/breakpoints", [ settings.setDefaults("user/breakpoints", [
["active", "true"] ["active", true]
]); ]);
var bps = settings.getJson("state/breakpoints"); var bps = settings.getJson("state/breakpoints");
@ -483,7 +483,7 @@ define(function(require, exports, module) {
codebox = new apf.codebox({ codebox = new apf.codebox({
skin: "simplebox", skin: "simplebox",
"class": "dark", "class": "dark",
focusselect: "true", focusselect: true,
htmlNode: hInput, htmlNode: hInput,
"initial-message": "Your Expression" "initial-message": "Your Expression"
}); });

Wyświetl plik

@ -58,8 +58,8 @@ define(function(require, exports, module) {
settings.on("read", function() { settings.on("read", function() {
settings.setDefaults("user/debug", [ settings.setDefaults("user/debug", [
["pause", "0"], ["pause", 0],
["autoshow", "true"] ["autoshow", true]
]); ]);
pauseOnBreaks = settings.getNumber("user/debug/@pause"); pauseOnBreaks = settings.getNumber("user/debug/@pause");

Wyświetl plik

@ -58,7 +58,7 @@ define(function(require, exports, module) {
settings.on("read", function() { settings.on("read", function() {
settings.setDefaults("user/debug", [ settings.setDefaults("user/debug", [
["autoshow", "true"] ["autoshow", true]
]); ]);
}); });

Wyświetl plik

@ -536,9 +536,9 @@ define(function(require, module, exports) {
// settings // settings
settings.on("read", function(e) { settings.on("read", function(e) {
settings.setDefaults("user/runconfig", [ settings.setDefaults("user/runconfig", [
["saveallbeforerun", "true"], ["saveallbeforerun", true],
["debug", "true"], ["debug", true],
["showruncfglist", "false"] ["showruncfglist", false]
]); ]);
if (!settings.getBool("project/run/configs/@inited")) { if (!settings.getBool("project/run/configs/@inited")) {

Wyświetl plik

@ -129,8 +129,8 @@ define(function(require, exports, module) {
["backgroundColor", colors[0]], ["backgroundColor", colors[0]],
["foregroundColor", colors[1]], ["foregroundColor", colors[1]],
["selectionColor", colors[2]], ["selectionColor", colors[2]],
["nosavequestion", "false"], ["nosavequestion", false],
["keepOutput", "false"] ["keepOutput", false]
]); ]);
setSettings(); setSettings();
@ -1037,13 +1037,13 @@ define(function(require, exports, module) {
tab.close(); tab.close();
if (question.dontAsk) if (question.dontAsk)
settings.set("user/output/nosavequestion", "true"); settings.set("user/output/nosavequestion", true);
}, },
function() { // No function() { // No
// do nothing; allow user to set a name // do nothing; allow user to set a name
if (question.dontAsk) if (question.dontAsk)
settings.set("user/output/nosavequestion", "true"); settings.set("user/output/nosavequestion", true);
}, },
{ showDontAsk: true, yes: "Close", no: "Cancel" }); { showDontAsk: true, yes: "Close", no: "Cancel" });
return false; return false;

Wyświetl plik

@ -249,8 +249,8 @@ define(function(require, exports, module) {
["selectionColor", colors[2]], ["selectionColor", colors[2]],
["antialiasedfonts", colors[3]], ["antialiasedfonts", colors[3]],
["fontfamily", "Ubuntu Mono, Menlo, Consolas, monospace"], // Monaco, ["fontfamily", "Ubuntu Mono, Menlo, Consolas, monospace"], // Monaco,
["fontsize", "12"], ["fontsize", 12],
["blinking", "false"], ["blinking", false],
["scrollback", 1000] ["scrollback", 1000]
]); ]);

Wyświetl plik

@ -481,10 +481,10 @@ define(function(require, exports, module) {
var init = false; var init = false;
settings.on("read", function() { settings.on("read", function() {
settings.setDefaults("state/projecttree", [ settings.setDefaults("state/projecttree", [
["showfs", startEmpty ? "false" : "true"] ["showfs", startEmpty ? false : true]
]); ]);
settings.setDefaults("user/projecttree", [ settings.setDefaults("user/projecttree", [
["scope", "false"] ["scope", false]
]); ]);
if (settings.getBool("state/projecttree/@showfs")) if (settings.getBool("state/projecttree/@showfs"))

Wyświetl plik

@ -47,8 +47,8 @@ define(function(require, exports, module) {
settings.on("read", function(e) { settings.on("read", function(e) {
settings.setDefaults("user/general", [ settings.setDefaults("user/general", [
["automerge", "false"], ["automerge", false],
["confirmmerge", "true"] ["confirmmerge", true]
]); ]);
}); });