keeweb/app/scripts/views/settings/settings-browser-view.js

82 lines
2.9 KiB
JavaScript
Raw Normal View History

2021-04-18 20:55:27 +02:00
import { View } from 'framework/views/view';
import template from 'templates/settings/settings-browser.hbs';
import { Features } from 'util/features';
import { Links } from 'const/links';
import { AppSettingsModel } from 'models/app-settings-model';
2021-04-19 21:29:52 +02:00
import { Locale } from 'util/locale';
2021-04-19 22:40:59 +02:00
import { SupportedBrowsers, SupportedExtensions } from 'comp/extension/browser-extension-connector';
2021-04-18 20:55:27 +02:00
class SettingsBrowserView extends View {
template = template;
events = {
'change .check-enable-for-browser': 'changeEnableForBrowser',
'change .settings__browser-focus-if-locked': 'changeFocusIfLocked'
2021-04-18 20:55:27 +02:00
};
render() {
const data = {
desktop: Features.isDesktop,
icon: Features.browserIcon,
focusIfLocked: AppSettingsModel.extensionFocusIfLocked
2021-04-18 20:55:27 +02:00
};
if (Features.isDesktop) {
2021-04-19 21:29:52 +02:00
data.extensionNames = ['KeeWeb Connect', 'KeePassXC-Browser'];
2021-04-18 20:55:27 +02:00
data.settingsPerBrowser = this.getSettingsPerBrowser();
2021-04-19 21:31:55 +02:00
data.anyBrowserIsEnabled = data.settingsPerBrowser.some((perBrowser) =>
perBrowser.extensions.some((ext) => ext.enabled)
);
2021-04-18 20:55:27 +02:00
} else {
const extensionBrowserFamily = Features.extensionBrowserFamily;
data.extensionBrowserFamily = Features.extensionBrowserFamily;
data.extensionDownloadLink = Links[`KeeWebConnectFor${extensionBrowserFamily}`];
}
super.render(data);
}
getSettingsPerBrowser() {
2021-04-19 22:40:59 +02:00
return SupportedBrowsers.map((browser) => {
const browserName = browser === 'Other' ? Locale.setBrowserOtherBrowsers : browser;
const extensions = SupportedExtensions.map((ext) => {
ext = {
...ext,
supported: true,
enabled: !!AppSettingsModel[`extensionEnabled${ext.alias}${browser}`],
installUrl: Links[`${ext.alias}For${browser}`]
};
2021-04-19 21:29:52 +02:00
if (!ext.installUrl) {
2021-04-19 22:40:59 +02:00
if (browser === 'Other') {
2021-04-19 21:29:52 +02:00
ext.helpUrl = Links.ExtensionHelpForOtherBrowsers;
} else {
ext.supported = false;
}
}
2021-04-19 22:40:59 +02:00
return ext;
});
return { browser, browserName, extensions };
2021-04-18 20:55:27 +02:00
});
}
changeEnableForBrowser(e) {
const enabled = e.target.checked;
const browser = e.target.dataset.browser;
const extension = e.target.dataset.extension;
2021-04-19 22:40:59 +02:00
const setting = `extensionEnabled${extension}${browser}`;
2021-04-18 20:55:27 +02:00
if (setting) {
AppSettingsModel[setting] = enabled;
} else {
delete AppSettingsModel[setting];
}
this.render();
}
changeFocusIfLocked(e) {
AppSettingsModel.extensionFocusIfLocked = e.target.checked;
this.render();
}
2021-04-18 20:55:27 +02:00
}
export { SettingsBrowserView };