// 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 * Full docs: https://github.com/decaffeinate/decaffeinate/blob/main/docs/suggestions.md */ const Cls = (app.views.SettingsPage = class SettingsPage extends app.View { constructor(...args) { this.onChange = this.onChange.bind(this); this.onClick = this.onClick.bind(this); super(...args); } static initClass() { this.className = '_static'; this.events = { click: 'onClick', change: 'onChange' }; } render() { this.html(this.tmpl('settingsPage', this.currentSettings())); } currentSettings() { const settings = {}; settings.theme = app.settings.get('theme'); settings.smoothScroll = !app.settings.get('fastScroll'); settings.arrowScroll = app.settings.get('arrowScroll'); settings.noAutofocus = app.settings.get('noAutofocus'); settings.autoInstall = app.settings.get('autoInstall'); settings.analyticsConsent = app.settings.get('analyticsConsent'); settings.spaceScroll = app.settings.get('spaceScroll'); settings.spaceTimeout = app.settings.get('spaceTimeout'); settings.autoSupported = app.settings.autoSupported; for (var layout of Array.from(app.settings.LAYOUTS)) { settings[layout] = app.settings.hasLayout(layout); } return settings; } getTitle() { return 'Preferences'; } setTheme(value) { app.settings.set('theme', value); } toggleLayout(layout, enable) { app.settings.setLayout(layout, enable); } toggleSmoothScroll(enable) { app.settings.set('fastScroll', !enable); } toggleAnalyticsConsent(enable) { app.settings.set('analyticsConsent', enable ? '1' : '0'); if (!enable) { resetAnalytics(); } } toggleSpaceScroll(enable) { app.settings.set('spaceScroll', enable ? 1 : 0); } setScrollTimeout(value) { return app.settings.set('spaceTimeout', value); } toggle(name, enable) { app.settings.set(name, enable); } export() { const data = new Blob([JSON.stringify(app.settings.export())], {type: 'application/json'}); const link = document.createElement('a'); link.href = URL.createObjectURL(data); link.download = 'devdocs.json'; link.style.display = 'none'; document.body.appendChild(link); link.click(); document.body.removeChild(link); } import(file, input) { if (!file || (file.type !== 'application/json')) { new app.views.Notif('ImportInvalid', {autoHide: false}); return; } const reader = new FileReader(); reader.onloadend = function() { const data = (() => { try { return JSON.parse(reader.result); } catch (error) {} })(); if (!data || (data.constructor !== Object)) { new app.views.Notif('ImportInvalid', {autoHide: false}); return; } app.settings.import(data); $.trigger(input.form, 'import'); }; reader.readAsText(file); } onChange(event) { const input = event.target; switch (input.name) { case 'theme': this.setTheme(input.value); break; case 'layout': this.toggleLayout(input.value, input.checked); break; case 'smoothScroll': this.toggleSmoothScroll(input.checked); break; case 'import': this.import(input.files[0], input); break; case 'analyticsConsent': this.toggleAnalyticsConsent(input.checked); break; case 'spaceScroll': this.toggleSpaceScroll(input.checked); break; case 'spaceTimeout': this.setScrollTimeout(input.value); break; default: this.toggle(input.name, input.checked); } } onClick(event) { const target = $.eventTarget(event); switch (target.getAttribute('data-action')) { case 'export': $.stopEvent(event); this.export(); break; } } onRoute(context) { this.render(); } }); Cls.initClass();