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.
130 lines
3.3 KiB
130 lines
3.3 KiB
// TODO: This file was created by bulk-decaffeinate.
|
|
// Sanity-check the conversion and remove this comment.
|
|
/*
|
|
* decaffeinate suggestions:
|
|
* DS002: Fix invalid constructor
|
|
* DS101: Remove unnecessary use of Array.from
|
|
* DS102: Remove unnecessary code created because of implicit returns
|
|
* DS205: Consider reworking code to avoid use of IIFEs
|
|
* DS206: Consider reworking classes to avoid initClass
|
|
* DS207: Consider shorter variations of null checks
|
|
* Full docs: https://github.com/decaffeinate/decaffeinate/blob/main/docs/suggestions.md
|
|
*/
|
|
(function() {
|
|
let SIDEBAR_HIDDEN_LAYOUT = undefined;
|
|
const Cls = (app.views.Settings = class Settings extends app.View {
|
|
constructor(...args) {
|
|
this.onChange = this.onChange.bind(this);
|
|
this.onEnter = this.onEnter.bind(this);
|
|
this.onSubmit = this.onSubmit.bind(this);
|
|
this.onImport = this.onImport.bind(this);
|
|
this.onClick = this.onClick.bind(this);
|
|
super(...args);
|
|
}
|
|
|
|
static initClass() {
|
|
SIDEBAR_HIDDEN_LAYOUT = '_sidebar-hidden';
|
|
|
|
this.el = '._settings';
|
|
|
|
this.elements = {
|
|
sidebar: '._sidebar',
|
|
saveBtn: 'button[type="submit"]',
|
|
backBtn: 'button[data-back]'
|
|
};
|
|
|
|
this.events = {
|
|
import: 'onImport',
|
|
change: 'onChange',
|
|
submit: 'onSubmit',
|
|
click: 'onClick'
|
|
};
|
|
|
|
this.shortcuts =
|
|
{enter: 'onEnter'};
|
|
}
|
|
|
|
init() {
|
|
this.addSubview(this.docPicker = new app.views.DocPicker);
|
|
}
|
|
|
|
activate() {
|
|
if (super.activate(...arguments)) {
|
|
this.render();
|
|
document.body.classList.remove(SIDEBAR_HIDDEN_LAYOUT);
|
|
}
|
|
}
|
|
|
|
deactivate() {
|
|
if (super.deactivate(...arguments)) {
|
|
this.resetClass();
|
|
this.docPicker.detach();
|
|
if (app.settings.hasLayout(SIDEBAR_HIDDEN_LAYOUT)) { document.body.classList.add(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 Array.from(app.docs.all())) { if (docs.indexOf(doc.slug) === -1) {
|
|
result.push(doc);
|
|
}
|
|
}
|
|
return result;
|
|
})());
|
|
disabledDocs.uninstall(function() {
|
|
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('/');
|
|
}
|
|
}
|
|
});
|
|
Cls.initClass();
|
|
return Cls;
|
|
})();
|