mirror of https://github.com/freeCodeCamp/devdocs
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
110 lines
2.2 KiB
110 lines
2.2 KiB
app.views.Settings = class Settings extends app.View {
|
|
static SIDEBAR_HIDDEN_LAYOUT = "_sidebar-hidden";
|
|
|
|
static el = "._settings";
|
|
|
|
static elements = {
|
|
sidebar: "._sidebar",
|
|
saveBtn: 'button[type="submit"]',
|
|
backBtn: "button[data-back]",
|
|
};
|
|
|
|
static events = {
|
|
import: "onImport",
|
|
change: "onChange",
|
|
submit: "onSubmit",
|
|
click: "onClick",
|
|
};
|
|
|
|
static shortcuts = { enter: "onEnter" };
|
|
|
|
init() {
|
|
this.addSubview((this.docPicker = new app.views.DocPicker()));
|
|
}
|
|
|
|
activate() {
|
|
if (super.activate(...arguments)) {
|
|
this.render();
|
|
document.body.classList.remove(Settings.SIDEBAR_HIDDEN_LAYOUT);
|
|
}
|
|
}
|
|
|
|
deactivate() {
|
|
if (super.deactivate(...arguments)) {
|
|
this.resetClass();
|
|
this.docPicker.detach();
|
|
if (app.settings.hasLayout(Settings.SIDEBAR_HIDDEN_LAYOUT)) {
|
|
document.body.classList.add(Settings.SIDEBAR_HIDDEN_LAYOUT);
|
|
}
|
|
}
|
|
}
|
|
|
|
render() {
|
|
this.docPicker.appendTo(this.sidebar);
|
|
this.refreshElements();
|
|
this.addClass("_in");
|
|
}
|
|
|
|
save(options) {
|
|
if (options == null) {
|
|
options = {};
|
|
}
|
|
if (!this.saving) {
|
|
let docs;
|
|
this.saving = true;
|
|
|
|
if (options.import) {
|
|
docs = app.settings.getDocs();
|
|
} else {
|
|
docs = this.docPicker.getSelectedDocs();
|
|
app.settings.setDocs(docs);
|
|
}
|
|
|
|
this.saveBtn.textContent = "Saving\u2026";
|
|
const disabledDocs = new app.collections.Docs(
|
|
(() => {
|
|
const result = [];
|
|
for (var doc of app.docs.all()) {
|
|
if (!docs.includes(doc.slug)) {
|
|
result.push(doc);
|
|
}
|
|
}
|
|
return result;
|
|
})(),
|
|
);
|
|
disabledDocs.uninstall(() => {
|
|
app.db.migrate();
|
|
return app.reload();
|
|
});
|
|
}
|
|
}
|
|
|
|
onChange() {
|
|
this.addClass("_dirty");
|
|
}
|
|
|
|
onEnter() {
|
|
this.save();
|
|
}
|
|
|
|
onSubmit(event) {
|
|
event.preventDefault();
|
|
this.save();
|
|
}
|
|
|
|
onImport() {
|
|
this.addClass("_dirty");
|
|
this.save({ import: true });
|
|
}
|
|
|
|
onClick(event) {
|
|
if (event.which !== 1) {
|
|
return;
|
|
}
|
|
if (event.target === this.backBtn) {
|
|
$.stopEvent(event);
|
|
app.router.show("/");
|
|
}
|
|
}
|
|
};
|