browser extension settings

This commit is contained in:
antelle 2021-04-19 21:29:52 +02:00
parent 8525571afc
commit c7b814fc01
No known key found for this signature in database
GPG Key ID: 63C9777AAB7C563C
7 changed files with 108 additions and 64 deletions

View File

@ -21,6 +21,8 @@ const Links = {
YubiKeyManagerInstall: 'https://github.com/Yubico/yubikey-manager#installation',
HaveIBeenPwned: 'https://haveibeenpwned.com',
HaveIBeenPwnedPrivacy: 'https://haveibeenpwned.com/Passwords',
ExtensionHelpForOtherBrowsers:
'https://github.com/keeweb/keeweb/wiki/Browser-AutoFill#other-browsers',
KeeWebConnectForChrome: 'https://TODO',
KeeWebConnectForFirefox: 'https://TODO',
KeeWebConnectForEdge: 'https://TODO',

View File

@ -36,7 +36,6 @@
"oneWeek": "one week",
"oneMonth": "one month",
"oneYear": "one year",
"for": "for",
"cache": "cache",
"file": "file",
@ -648,6 +647,11 @@
"setBrowserNotEnabled": "Browser integration is not enabled, extensions won't be able to connect to KeeWeb. Use the checkboxes below to enable it:",
"setBrowserEnablePerBrowser": "Enable browser integration using the checkboxes below:",
"setBrowserFocusIfLocked": "Open KeeWeb if a browser extension tries to connect while the file is locked",
"setBrowserOtherBrowsers": "Other browsers",
"setBrowserExtensionFor": "for {}",
"setBrowserExtensionNotSupported": "Not supported",
"setBrowserExtensionHelp": "How to install?",
"setBrowserExtensionInstall": "Install the extension",
"setDevicesTitle": "Devices",
"setDevicesEnableUsb": "Enable interaction with USB devices",

View File

@ -3,6 +3,7 @@ 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';
import { Locale } from 'util/locale';
class SettingsBrowserView extends View {
template = template;
@ -19,6 +20,7 @@ class SettingsBrowserView extends View {
focusIfLocked: AppSettingsModel.extensionFocusIfLocked
};
if (Features.isDesktop) {
data.extensionNames = ['KeeWeb Connect', 'KeePassXC-Browser'];
data.settingsPerBrowser = this.getSettingsPerBrowser();
data.anyBrowserIsEnabled = data.settingsPerBrowser.some((s) => s.kwc || s.kpxc);
} else {
@ -30,17 +32,31 @@ class SettingsBrowserView extends View {
}
getSettingsPerBrowser() {
const browsers = ['Chrome', 'Firefox', 'Edge'];
const browsers = ['Chrome', 'Firefox', 'Edge', Locale.setBrowserOtherBrowsers];
if (Features.isMac) {
browsers.unshift('Safari');
}
return browsers.map((browser) => {
return {
browser,
kwc: !!AppSettingsModel[`kwcEnabledFor${browser}`],
kpxc: !!AppSettingsModel[`kpxcEnabledFor${browser}`]
};
const settingsPerBrowser = browsers.map((browser) => {
const extensions = [
{ alias: 'kwc', loc: 'KeeWebConnect' },
{ alias: 'kpxc', loc: 'KeePassXcBrowser' }
];
for (const ext of extensions) {
ext.supported = true;
ext.enabled = !!AppSettingsModel[`${ext.alias}EnabledFor${browser}`];
ext.installUrl = Links[`${ext.loc}For${browser}`];
if (!ext.installUrl) {
if (browser === Locale.setBrowserOtherBrowsers) {
ext.helpUrl = Links.ExtensionHelpForOtherBrowsers;
} else {
ext.supported = false;
}
}
}
return { browser, extensions };
});
return settingsPerBrowser;
}
changeEnableForBrowser(e) {

View File

@ -56,30 +56,6 @@ p {
margin: 0 0 $small-spacing;
}
a {
color: var(--text-color);
text-decoration: none;
display: inline-block;
transition: color $base-duration $base-timing;
cursor: pointer;
height: 1.2em;
&:not(.no-border) {
border-bottom: 1px dotted;
}
&:active,
&:focus,
&:hover {
outline: none;
&:not(.no-border) {
border-bottom: 1px solid;
}
&.muted-color {
border-bottom: 1px solid;
}
}
}
hr {
border-bottom: base-border();
border-left: 0;

View File

@ -0,0 +1,43 @@
a {
color: var(--text-color);
text-decoration: none;
display: inline-block;
transition: color $base-duration $base-timing;
cursor: pointer;
height: 1.2em;
border-bottom: 1px dotted;
&.no-border {
border-bottom: none;
}
&.icon-link {
@include area-selectable();
border-bottom: none;
display: inline-block;
text-align: center;
font-size: 1.1em;
width: 1.8em;
height: 1.6em;
border-radius: var(--button-border-radius);
> i {
position: relative;
top: 0.1em;
}
&:active,
&:focus,
&:hover {
outline: none;
border-bottom: none;
}
}
&:active,
&:focus,
&:hover {
outline: none;
border-bottom: 1px solid;
}
}

View File

@ -24,6 +24,7 @@ $fa-font-path: '~font-awesome/fonts';
@import 'common/scroll';
@import 'common/tip';
@import 'common/titlebar';
@import 'common/links';
@import 'areas/app';
@import 'areas/auto-type';

View File

@ -13,46 +13,48 @@
<thead>
<tr>
<th></th>
<th>KeeWeb Connect</th>
<th>KeePassXC-Browser</th>
{{#each extensionNames as |ext|}}
<th>{{ext}}</th>
{{/each}}
</tr>
</thead>
<tbody>
{{#each settingsPerBrowser as |perBrowser|}}
<tr>
<td>{{perBrowser.browser}}</td>
<td>
<input type="checkbox"
class="check-enable-for-browser"
{{#if perBrowser.kwc}}checked{{/if}}
id="check-enable-kwc-for-{{perBrowser.browser}}"
data-browser="{{perBrowser.browser}}"
data-extension="kwc" />
<label for="check-enable-kwc-for-{{perBrowser.browser}}"></label>
{{#if perBrowser.kwc}}
<a href="https://example.com" target="_blank" rel="noreferrer">
<i class="fa fa-download"></i>
</a>
{{/if}}
</td>
{{#ifeq perBrowser.browser 'Safari'}}
<td class="muted-color">
<i class="fa fa-times"></i>
</td>
{{else}}
{{#each perBrowser.extensions as |setting|}}
<td>
<input type="checkbox"
class="check-enable-for-browser"
{{#if perBrowser.kpxc}}checked{{/if}}
id="check-enable-kpxc-for-{{perBrowser.browser}}"
data-browser="{{perBrowser.browser}}"
data-extension="kpxc" />
<label for="check-enable-kpxc-for-{{perBrowser.browser}}"></label>
{{#if perBrowser.kpxc}}
<i class="fa fa-download"></i>
{{#if setting.supported}}
<input type="checkbox"
class="check-enable-for-browser"
{{#if setting.enabled}}checked{{/if}}
id="check-enable-{{setting.alias}}-for-{{perBrowser.browser}}"
data-browser="{{perBrowser.browser}}"
data-extension="{{setting.alias}}" />
<label for="check-enable-{{setting.alias}}-for-{{perBrowser.browser}}"></label>
{{else}}
<i class="fa fa-times muted-color" title="{{res 'setBrowserExtensionNotSupported'}}"></i>
{{/if}}
{{#if setting.enabled}}
{{#if setting.helpUrl}}
<a href="{{setting.helpUrl}}" target="_blank" rel="noreferrer"
class="settings__browser-extension-link icon-link"
title="{{res 'setBrowserExtensionHelp'}}"
>
<i class="fa fa-info-circle"></i>
</a>
{{/if}}
{{#if setting.installUrl}}
<a href="{{setting.installUrl}}" target="_blank" rel="noreferrer"
class="settings__browser-extension-link icon-link"
title="{{res 'setBrowserExtensionInstall'}}"
>
<i class="fa fa-download"></i>
</a>
{{/if}}
{{/if}}
</td>
{{/ifeq}}
{{/each}}
</tr>
{{/each}}
</tbody>
@ -60,7 +62,7 @@
{{else}}
<p>{{res 'setBrowserIntroWeb'}}</p>
<a href="{{extensionDownloadLink}}" target="_blank" rel="noreferrer">
KeeWeb Connect {{res 'for'}} {{extensionBrowserFamily}}
KeeWeb Connect {{#res 'setBrowserExtensionFor'}}{{extensionBrowserFamily}}{{/res}}
</a>
{{/if}}
<p></p>