mirror of https://github.com/keeweb/keeweb.git
deps: add font-awesome 6 support
This commit is contained in:
parent
beb4b8c35b
commit
39f0407593
|
@ -202,7 +202,7 @@ async function checkContentRequestPermissions(request) {
|
|||
try {
|
||||
await alertWithTimeout({
|
||||
header: Locale.extensionConnectHeader,
|
||||
icon: 'exchange-alt',
|
||||
icon: 'right-left',
|
||||
buttons: [Alerts.buttons.allow, Alerts.buttons.deny],
|
||||
view: extensionConnectView,
|
||||
wide: true,
|
||||
|
@ -370,6 +370,7 @@ const ProtocolHandlers = {
|
|||
},
|
||||
|
||||
'change-public-keys'(request, connection) {
|
||||
// eslint-disable-next-line prefer-const
|
||||
let { publicKey, version, clientID: clientId } = request;
|
||||
|
||||
if (connectedClients.has(clientId)) {
|
||||
|
|
|
@ -71,7 +71,7 @@ const Alerts = {
|
|||
this.alert({
|
||||
header: Locale.notImplemented,
|
||||
body: '',
|
||||
icon: 'exclamation-triangle',
|
||||
icon: 'triangle-exclamation',
|
||||
buttons: [this.buttons.ok],
|
||||
esc: '',
|
||||
click: '',
|
||||
|
@ -96,7 +96,7 @@ const Alerts = {
|
|||
this.alert({
|
||||
header: '',
|
||||
body: '',
|
||||
icon: 'exclamation-circle',
|
||||
icon: 'circle-exclamation',
|
||||
buttons: [this.buttons.ok],
|
||||
esc: '',
|
||||
click: '',
|
||||
|
|
|
@ -1,12 +1,12 @@
|
|||
const IconMap = [
|
||||
'key',
|
||||
'globe',
|
||||
'exclamation-triangle',
|
||||
'triangle-exclamation',
|
||||
'server',
|
||||
'thumbtack',
|
||||
'comments',
|
||||
'puzzle-piece',
|
||||
'edit',
|
||||
'pen-to-square',
|
||||
'plug',
|
||||
'address-card',
|
||||
'paperclip',
|
||||
|
@ -19,47 +19,47 @@ const IconMap = [
|
|||
'bullseye',
|
||||
'desktop',
|
||||
'envelope',
|
||||
'cog',
|
||||
'gear',
|
||||
'clipboard',
|
||||
'paper-plane',
|
||||
'newspaper',
|
||||
'bolt',
|
||||
'inbox',
|
||||
'save',
|
||||
'hdd',
|
||||
'dot-circle',
|
||||
'floppy-disk',
|
||||
'hard-drive',
|
||||
'circle-dot',
|
||||
'user-lock',
|
||||
'terminal',
|
||||
'print',
|
||||
'project-diagram',
|
||||
'diagram-project',
|
||||
'flag-checkered',
|
||||
'wrench',
|
||||
'laptop',
|
||||
'archive',
|
||||
'box-archive',
|
||||
'credit-card',
|
||||
'windows',
|
||||
'clock',
|
||||
'search',
|
||||
'magnifying-glass',
|
||||
'flask',
|
||||
'gamepad',
|
||||
'trash',
|
||||
'sticky-note',
|
||||
'note-sticky',
|
||||
'ban',
|
||||
'question-circle',
|
||||
'circle-question',
|
||||
'cube',
|
||||
'folder-o',
|
||||
'folder-open-o',
|
||||
'database',
|
||||
'unlock-alt',
|
||||
'unlock-keyhole',
|
||||
'lock',
|
||||
'check',
|
||||
'pencil-alt',
|
||||
'pencil',
|
||||
'image',
|
||||
'book',
|
||||
'list-alt',
|
||||
'rectangle-list',
|
||||
'user-secret',
|
||||
'utensils',
|
||||
'home',
|
||||
'house',
|
||||
'star',
|
||||
'linux',
|
||||
'map-pin',
|
||||
|
|
|
@ -48,7 +48,7 @@ function getIcon(ext) {
|
|||
case 'log':
|
||||
case 'rtf':
|
||||
case 'pem':
|
||||
return 'file-alt';
|
||||
return 'file-lines';
|
||||
case 'html':
|
||||
case 'htm':
|
||||
case 'js':
|
||||
|
@ -89,7 +89,7 @@ function getIcon(ext) {
|
|||
case 'ace':
|
||||
case 'dmg':
|
||||
case 'jar':
|
||||
return 'file-archive';
|
||||
return 'file-zipper';
|
||||
case 'doc':
|
||||
case 'docx':
|
||||
return 'file-word';
|
||||
|
|
|
@ -17,7 +17,7 @@ class MenuModel extends Model {
|
|||
this.allItemsSection = new MenuSectionModel([
|
||||
{
|
||||
locTitle: 'menuAllItems',
|
||||
icon: 'th-large',
|
||||
icon: 'table-cells-large',
|
||||
active: true,
|
||||
shortcut: Keys.DOM_VK_A,
|
||||
filterKey: '*'
|
||||
|
@ -43,7 +43,7 @@ class MenuModel extends Model {
|
|||
this.trashSection = new MenuSectionModel([
|
||||
{
|
||||
locTitle: 'menuTrash',
|
||||
icon: 'trash-alt',
|
||||
icon: 'trash-can',
|
||||
shortcut: Keys.DOM_VK_D,
|
||||
filterKey: 'trash',
|
||||
filterValue: true,
|
||||
|
@ -69,7 +69,7 @@ class MenuModel extends Model {
|
|||
this.generalSection = new MenuSectionModel([
|
||||
{
|
||||
locTitle: 'menuSetGeneral',
|
||||
icon: 'cog',
|
||||
icon: 'gear',
|
||||
page: 'general',
|
||||
section: 'top',
|
||||
active: true
|
||||
|
|
|
@ -5,7 +5,7 @@ const fileWatchers = {};
|
|||
|
||||
class StorageFile extends StorageBase {
|
||||
name = 'file';
|
||||
icon = 'hdd';
|
||||
icon = 'hard-drive';
|
||||
enabled = !!Launcher;
|
||||
system = true;
|
||||
backup = true;
|
||||
|
|
|
@ -15,7 +15,7 @@ class StorageTeams extends StorageBase {
|
|||
name = 'msteams';
|
||||
enabled = true;
|
||||
uipos = 50;
|
||||
icon = 'user-friends';
|
||||
icon = 'user-group';
|
||||
|
||||
_graphUrl = 'https://graph.microsoft.com/v1.0';
|
||||
_groupsUrl = `${this._graphUrl}/me/joinedTeams`;
|
||||
|
|
|
@ -125,7 +125,7 @@ class DetailsIssuesView extends View {
|
|||
Alerts.alert({
|
||||
header: Locale.detIssueCloseAlertHeader,
|
||||
body: Locale.detIssueCloseAlertBody,
|
||||
icon: 'exclamation-triangle',
|
||||
icon: 'triangle-exclamation',
|
||||
buttons: [
|
||||
{ result: 'entry', title: Locale.detIssueCloseAlertEntry, silent: true },
|
||||
{ result: 'settings', title: Locale.detIssueCloseAlertSettings, silent: true },
|
||||
|
|
|
@ -240,7 +240,7 @@ class DetailsView extends View {
|
|||
if (fieldView.isHidden()) {
|
||||
moreOptions.push({
|
||||
value: 'add:' + fieldView.model.name,
|
||||
icon: 'pencil-alt',
|
||||
icon: 'pencil',
|
||||
text: Locale.detMenuAddField.replace('{}', fieldView.model.title)
|
||||
});
|
||||
}
|
||||
|
@ -856,7 +856,7 @@ class DetailsView extends View {
|
|||
Alerts.yesno({
|
||||
header: Locale.detDelToTrash,
|
||||
body: Locale.detDelToTrashBody,
|
||||
icon: 'trash-alt',
|
||||
icon: 'trash-can',
|
||||
success: doMove
|
||||
});
|
||||
} else {
|
||||
|
@ -878,7 +878,7 @@ class DetailsView extends View {
|
|||
header: Locale.detDelFromTrash,
|
||||
body: Locale.detDelFromTrashBody,
|
||||
hint: Locale.detDelFromTrashBodyHint,
|
||||
icon: 'minus-circle',
|
||||
icon: 'circle-minus',
|
||||
success: () => {
|
||||
this.model.deleteFromTrash();
|
||||
Events.emit('refresh');
|
||||
|
|
|
@ -330,7 +330,7 @@ class FieldView extends View {
|
|||
if (this.value) {
|
||||
actions.push({ name: 'copy', icon: 'copy' });
|
||||
}
|
||||
actions.push({ name: 'edit', icon: 'pencil-alt' });
|
||||
actions.push({ name: 'edit', icon: 'pencil' });
|
||||
if (this.value instanceof kdbxweb.ProtectedValue) {
|
||||
actions.push({ name: 'reveal', icon: 'eye' });
|
||||
}
|
||||
|
|
|
@ -40,64 +40,64 @@ class ListSearchView extends View {
|
|||
this.sortOptions = [
|
||||
{
|
||||
value: 'title',
|
||||
icon: 'sort-alpha-down',
|
||||
icon: 'arrow-down-a-z',
|
||||
loc: () =>
|
||||
StringFormat.capFirst(Locale.title) + ' ' + this.addArrow(Locale.searchAZ)
|
||||
},
|
||||
{
|
||||
value: '-title',
|
||||
icon: 'sort-alpha-down-alt',
|
||||
icon: 'arrow-down-z-a',
|
||||
loc: () =>
|
||||
StringFormat.capFirst(Locale.title) + ' ' + this.addArrow(Locale.searchZA)
|
||||
},
|
||||
{
|
||||
value: 'website',
|
||||
icon: 'sort-alpha-down',
|
||||
icon: 'arrow-down-a-z',
|
||||
loc: () =>
|
||||
StringFormat.capFirst(Locale.website) + ' ' + this.addArrow(Locale.searchAZ)
|
||||
},
|
||||
{
|
||||
value: '-website',
|
||||
icon: 'sort-alpha-down-alt',
|
||||
icon: 'arrow-down-z-a',
|
||||
loc: () =>
|
||||
StringFormat.capFirst(Locale.website) + ' ' + this.addArrow(Locale.searchZA)
|
||||
},
|
||||
{
|
||||
value: 'user',
|
||||
icon: 'sort-alpha-down',
|
||||
icon: 'arrow-down-a-z',
|
||||
loc: () => StringFormat.capFirst(Locale.user) + ' ' + this.addArrow(Locale.searchAZ)
|
||||
},
|
||||
{
|
||||
value: '-user',
|
||||
icon: 'sort-alpha-down-alt',
|
||||
icon: 'arrow-down-z-a',
|
||||
loc: () => StringFormat.capFirst(Locale.user) + ' ' + this.addArrow(Locale.searchZA)
|
||||
},
|
||||
{
|
||||
value: 'created',
|
||||
icon: 'sort-numeric-down',
|
||||
icon: 'arrow-down-1-9',
|
||||
loc: () => Locale.searchCreated + ' ' + this.addArrow(Locale.searchON)
|
||||
},
|
||||
{
|
||||
value: '-created',
|
||||
icon: 'sort-numeric-down-alt',
|
||||
icon: 'arrow-down-9-1',
|
||||
loc: () => Locale.searchCreated + ' ' + this.addArrow(Locale.searchNO)
|
||||
},
|
||||
{
|
||||
value: 'updated',
|
||||
icon: 'sort-numeric-down',
|
||||
icon: 'arrow-down-1-9',
|
||||
loc: () => Locale.searchUpdated + ' ' + this.addArrow(Locale.searchON)
|
||||
},
|
||||
{
|
||||
value: '-updated',
|
||||
icon: 'sort-numeric-down-alt',
|
||||
icon: 'arrow-down-9-1',
|
||||
loc: () => Locale.searchUpdated + ' ' + this.addArrow(Locale.searchNO)
|
||||
},
|
||||
{
|
||||
value: '-attachments',
|
||||
icon: 'sort-amount-down',
|
||||
icon: 'arrow-down-wide-short',
|
||||
loc: () => Locale.searchAttachments
|
||||
},
|
||||
{ value: '-rank', icon: 'sort-amount-down', loc: () => Locale.searchRank }
|
||||
{ value: '-rank', icon: 'arrow-down-wide-short', loc: () => Locale.searchRank }
|
||||
];
|
||||
this.sortIcons = {};
|
||||
this.sortOptions.forEach((opt) => {
|
||||
|
@ -394,7 +394,7 @@ class ListSearchView extends View {
|
|||
options.sort(Comparators.stringComparator('text', true));
|
||||
options.push({
|
||||
value: 'tmpl',
|
||||
icon: 'sticky-note-o',
|
||||
icon: 'note-sticky-o',
|
||||
text: StringFormat.capFirst(Locale.template)
|
||||
});
|
||||
return options;
|
||||
|
|
|
@ -283,7 +283,7 @@ class ListView extends View {
|
|||
createTemplate() {
|
||||
if (!this.model.settings.templateHelpShown) {
|
||||
Alerts.yesno({
|
||||
icon: 'sticky-note-o',
|
||||
icon: 'note-sticky-o',
|
||||
header: Locale.listAddTemplateHeader,
|
||||
body:
|
||||
Locale.listAddTemplateBody1.replace('{}', '"+"') +
|
||||
|
@ -397,7 +397,7 @@ class ListView extends View {
|
|||
const targetElRect = this.$el.find('.list__table-options')[0].getBoundingClientRect();
|
||||
const options = this.tableColumns.map((col) => ({
|
||||
value: col.val,
|
||||
icon: col.enabled ? 'check-square-o' : 'square-o',
|
||||
icon: col.enabled ? 'square-check' : 'square-o',
|
||||
text: StringFormat.capFirst(Locale[col.name])
|
||||
}));
|
||||
view.render({
|
||||
|
@ -420,7 +420,7 @@ class ListView extends View {
|
|||
optionsDropdownSelect(e) {
|
||||
const col = this.tableColumns.find((c) => c.val === e.item);
|
||||
col.enabled = !col.enabled;
|
||||
e.el.find('i:first').toggleClass('fa-check-square-o fa-square-o');
|
||||
e.el.find('i:first').toggleClass('fa-square-check fa-square-o');
|
||||
this.render();
|
||||
this.saveTableColumnsEnabled();
|
||||
}
|
||||
|
|
|
@ -183,7 +183,7 @@ class MenuItemView extends View {
|
|||
Alerts.yesno({
|
||||
header: Locale.menuEmptyTrashAlert,
|
||||
body: Locale.menuEmptyTrashAlertBody,
|
||||
icon: 'minus-circle',
|
||||
icon: 'circle-minus',
|
||||
success() {
|
||||
Events.emit('empty-trash');
|
||||
}
|
||||
|
|
|
@ -165,7 +165,7 @@ class OpenView extends View {
|
|||
|
||||
getLastOpenFiles() {
|
||||
return this.model.fileInfos.map((fileInfo) => {
|
||||
let icon = 'file-alt';
|
||||
let icon = 'file-lines';
|
||||
const storage = Storage[fileInfo.storage];
|
||||
if (storage && storage.icon) {
|
||||
icon = storage.icon;
|
||||
|
@ -194,7 +194,7 @@ class OpenView extends View {
|
|||
Alerts.alert({
|
||||
header: Locale.openLocalFile,
|
||||
body: Locale.openLocalFileBody,
|
||||
icon: 'file-alt',
|
||||
icon: 'file-lines',
|
||||
buttons: [
|
||||
{ result: 'skip', title: Locale.openLocalFileDontShow, error: true },
|
||||
{ result: 'ok', title: Locale.alertOk }
|
||||
|
@ -852,7 +852,7 @@ class OpenView extends View {
|
|||
Alerts.alert({
|
||||
header: Locale.openSelectFile,
|
||||
body: Locale.openSelectFileBody,
|
||||
icon: storage.icon || 'file-alt',
|
||||
icon: storage.icon || 'file-lines',
|
||||
buttons: [{ result: '', title: Locale.alertCancel }],
|
||||
esc: '',
|
||||
click: '',
|
||||
|
|
|
@ -128,7 +128,7 @@ class SettingsBrowserView extends View {
|
|||
e.target.checked = false;
|
||||
|
||||
Alerts.yesno({
|
||||
icon: 'exclamation-triangle',
|
||||
icon: 'triangle-exclamation',
|
||||
header: Locale.setBrowserExtensionKPXCWarnHeader.replace('{}', 'KeePassXC'),
|
||||
body:
|
||||
Locale.setBrowserExtensionKPXCWarnBody1.replace(/{}/g, 'KeePassXC') +
|
||||
|
|
|
@ -337,7 +337,7 @@ class SettingsFileView extends View {
|
|||
Alerts.alert({
|
||||
header: '',
|
||||
body: '',
|
||||
icon: storage.icon || 'file-alt',
|
||||
icon: storage.icon || 'file-lines',
|
||||
buttons: [Alerts.buttons.ok, Alerts.buttons.cancel],
|
||||
esc: '',
|
||||
opaque: true,
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
<div class="app">
|
||||
{{#if beta}}<div class="app__beta"><i class="fa fa-exclamation-triangle"></i> {{res 'appBeta'}}</div>{{/if}}
|
||||
{{#if beta}}<div class="app__beta"><i class="fa fa-triangle-exclamation"></i> {{res 'appBeta'}}</div>{{/if}}
|
||||
{{#if customTitlebar}}
|
||||
<div class="app__titlebar"></div>
|
||||
{{else}}
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<div class="details__attachment-preview">
|
||||
<div class="details__subview-close">
|
||||
<i class="fa fa-chevron-left details__subview-close-pre"></i>{{res 'detHistoryReturn'}} <i class="fa fa-arrow-circle-left details__subview-close-post"></i>
|
||||
<i class="fa fa-chevron-left details__subview-close-pre"></i>{{res 'detHistoryReturn'}} <i class="fa fa-circle-arrow-left details__subview-close-post"></i>
|
||||
</div>
|
||||
<div class="details__attachment-preview-data"></div>
|
||||
<i class="fa details__attachment-preview-icon"></i>
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<div class="empty-block muted-color">
|
||||
<h1 class="empty-block__title">{{res 'detGroupRestore'}}</h1>
|
||||
<div class="empty-block__lower-btns">
|
||||
<i class="details__buttons-trash-del fa fa-minus-circle"></i>
|
||||
<i class="details__buttons-trash-del fa fa-circle-minus"></i>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -1,13 +1,13 @@
|
|||
<div class="details__history">
|
||||
<div class="details__subview-close">
|
||||
<i class="fa fa-chevron-left details__subview-close-pre"></i>{{res 'detHistoryReturn'}} <i class="fa fa-arrow-circle-left details__subview-close-post"></i>
|
||||
<i class="fa fa-chevron-left details__subview-close-pre"></i>{{res 'detHistoryReturn'}} <i class="fa fa-circle-arrow-left details__subview-close-post"></i>
|
||||
</div>
|
||||
<div class="details__history-desc muted-color">{{res 'detHistoryClickPoint'}}</div>
|
||||
<div class="details__history-top">
|
||||
<div class="details__history-timeline">
|
||||
<div class="details__history-timeline-axis"></div>
|
||||
<div class="details__history-arrow-prev"><i class="fa fa-long-arrow-alt-left"></i></div>
|
||||
<div class="details__history-arrow-next"><i class="fa fa-long-arrow-alt-right"></i></div>
|
||||
<div class="details__history-arrow-prev"><i class="fa fa-left-long"></i></div>
|
||||
<div class="details__history-arrow-next"><i class="fa fa-right-long"></i></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="details__history-body">
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
{{#if passwordIssue}}
|
||||
<div class="details__issues {{#if fadeIn}}fade-in{{/if}}">
|
||||
<div class="details__issues-icon">
|
||||
<i class="fa fa-exclamation-triangle details__issues-icon-warning"></i>
|
||||
<i class="fa fa-triangle-exclamation details__issues-icon-warning"></i>
|
||||
<i class="fa fa-spinner spin details__issues-icon-spin"></i>
|
||||
</div>
|
||||
<div class="details__issues-body">
|
||||
|
@ -20,7 +20,7 @@
|
|||
{{/ifeq}}
|
||||
</div>
|
||||
<div class="details__issues-close-btn" title="{{res 'detIssuesHideTooltip'}}">
|
||||
<i class="fa fa-times-circle"></i>
|
||||
<i class="fa fa-circle-xmark"></i>
|
||||
</div>
|
||||
</div>
|
||||
{{else}}
|
||||
|
|
|
@ -47,9 +47,9 @@
|
|||
{{#if showButtons}}
|
||||
<div class="details__buttons">
|
||||
{{#if deleted~}}
|
||||
<i class="details__buttons-trash-del fa fa-minus-circle" title="{{res 'detDelEntryPerm'}}" tip-placement="top"></i>
|
||||
<i class="details__buttons-trash-del fa fa-circle-minus" title="{{res 'detDelEntryPerm'}}" tip-placement="top"></i>
|
||||
{{~else~}}
|
||||
<i class="details__buttons-trash fa fa-trash-alt" title="{{res 'detDelEntry'}}" tip-placement="top"></i>
|
||||
<i class="details__buttons-trash fa fa-trash-can" title="{{res 'detDelEntry'}}" tip-placement="top"></i>
|
||||
{{~/if~}}
|
||||
<div class="details__attachments">
|
||||
<input type="file" class="details__attachment-input-file hide-by-pos" multiple />
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
data-file-id="{{file.id}}" id="footer__db--{{file.id}}">
|
||||
<i class="fa fa-{{#if file.active}}unlock{{else}}lock{{/if}}"></i> {{file.name}}
|
||||
{{#if file.syncing~}}
|
||||
<i class="fa fa-sync-alt spin footer__db-sign"></i>
|
||||
<i class="fa fa-rotate spin footer__db-sign"></i>
|
||||
{{~else if file.syncError~}}
|
||||
<i class="fa {{#if file.modified}}fa-circle{{else}}fa-circle-o{{/if}} footer__db-sign footer__db-sign--error"
|
||||
title="{{res 'footerSyncError'}}: {{file.syncError}}"></i>
|
||||
|
@ -21,9 +21,9 @@
|
|||
{{#if updateAvailable}}
|
||||
<i class="fa fa-bell footer__update-icon"></i>
|
||||
{{else}}
|
||||
<i class="fa fa-cog"></i>
|
||||
<i class="fa fa-gear"></i>
|
||||
{{/if}}
|
||||
</div>
|
||||
<div class="footer__btn footer__btn-generate" title="{{res 'footerTitleGen'}}" tip-placement="top" id="footer__btn-generate"><i class="fa fa-bolt"></i></div>
|
||||
<div class="footer__btn footer__btn-lock" title="{{res 'footerTitleLock'}}" tip-placement="top-left" id="footer__btn-lock"><i class="fa fa-sign-out-alt"></i></div>
|
||||
<div class="footer__btn footer__btn-lock" title="{{res 'footerTitleLock'}}" tip-placement="top-left" id="footer__btn-lock"><i class="fa fa-right-from-bracket"></i></div>
|
||||
</div>
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<div class="grp">
|
||||
<div class="back-button">
|
||||
{{res 'retToApp'}} <i class="fa fa-arrow-circle-left back-button__post"></i>
|
||||
{{res 'retToApp'}} <i class="fa fa-circle-arrow-left back-button__post"></i>
|
||||
</div>
|
||||
<div class="scroller">
|
||||
<div class="grp__content">
|
||||
|
@ -43,7 +43,7 @@
|
|||
<div class="scroller__bar-wrapper"><div class="scroller__bar"></div></div>
|
||||
{{#unless readonly}}
|
||||
<div class="grp__buttons">
|
||||
<i class="grp__buttons-trash fa fa-trash-alt" title="{{res 'grpTrash'}}" tip-placement="right"></i>
|
||||
<i class="grp__buttons-trash fa fa-trash-can" title="{{res 'grpTrash'}}" tip-placement="right"></i>
|
||||
</div>
|
||||
{{/unless}}
|
||||
</div>
|
||||
|
|
|
@ -9,12 +9,12 @@
|
|||
{{#if canDownloadFavicon}}
|
||||
<span class="icon-select__icon icon-select__icon-btn icon-select__icon-download"
|
||||
data-val="special" data-special="download" title="{{res 'iconFavTitle'}}">
|
||||
<i class="fa fa-cloud-download-alt"></i>
|
||||
<i class="fa fa-cloud-arrow-down"></i>
|
||||
</span>
|
||||
{{/if}}
|
||||
<span class="icon-select__icon icon-select__icon-btn icon-select__icon-select"
|
||||
data-val="special" data-special="select" title="{{res 'iconSelCustom'}}">
|
||||
<i class="fa fa-ellipsis-h"></i>
|
||||
<i class="fa fa-ellipsis"></i>
|
||||
</span>
|
||||
</div>
|
||||
{{#if hasCustomIcons}}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
<div class="import-csv">
|
||||
<div class="import-csv__top">
|
||||
<div class="back-button">
|
||||
{{res 'retToApp'}} <i class="fa fa-arrow-circle-left back-button__post"></i>
|
||||
{{res 'retToApp'}} <i class="fa fa-circle-arrow-left back-button__post"></i>
|
||||
</div>
|
||||
<h1>{{res 'importCsvTitle'}}</h1>
|
||||
</div>
|
||||
|
|
|
@ -6,18 +6,18 @@
|
|||
<div class="list__search-field-wrap">
|
||||
<input type="text" class="list__search-field input-search" autocomplete="off" spellcheck="false">
|
||||
<div class="list__search-icon-search" title="{{res 'searchAdvTitle'}}">
|
||||
<i class="fa fa-search"></i>
|
||||
<i class="fa fa-magnifying-glass"></i>
|
||||
<i class="fa fa-caret-down"></i>
|
||||
</div>
|
||||
<div class="list__search-icon-clear">
|
||||
<i class="fa fa-times-circle"></i>
|
||||
<i class="fa fa-circle-xmark"></i>
|
||||
</div>
|
||||
</div>
|
||||
<div class="list__search-btn-new {{#unless canCreate}}hide{{/unless}}" title="{{res 'searchAddNew'}}">
|
||||
<i class="fa fa-plus"></i>
|
||||
</div>
|
||||
<div class="list__search-btn-sort" title="{{res 'searchSort'}}">
|
||||
<i class="fa fa-sort-alpha-down"></i>
|
||||
<i class="fa fa-arrow-down-a-z"></i>
|
||||
</div>
|
||||
<div class="list__search-adv {{#unless advEnabled}}hide{{/unless}}">
|
||||
<div class="list__search-adv-text">{{res 'searchSearchIn'}}:</div>
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
{{~#if options.length}} menu__item--with-options {{/if~}}
|
||||
{{~#if cls}} {{cls}}{{/if~}}
|
||||
">
|
||||
{{#if collapsible}}<i class="menu__item-collapse fa fa-ellipsis-v muted-color" title="{{res 'menuItemCollapsed'}}"></i>{{/if}}
|
||||
{{#if collapsible}}<i class="menu__item-collapse fa fa-ellipsis-vertical muted-color" title="{{res 'menuItemCollapsed'}}"></i>{{/if}}
|
||||
<div class="menu__item-body" {{#if drag}}draggable="true"{{/if}}>
|
||||
{{#if drag}}<div class="menu__item-drag-top"></div>{{/if}}
|
||||
{{#if customIcon~}}
|
||||
|
@ -22,8 +22,8 @@
|
|||
{{/each}}
|
||||
</div>
|
||||
{{/if}}
|
||||
{{#if editable}}<i class="menu__item-edit fa fa-cog"></i>{{/if}}
|
||||
{{#ifeq filterKey 'trash'}}<i class="menu__item-empty-trash fa fa-minus-circle" title="{{res 'menuEmptyTrash'}}"
|
||||
{{#if editable}}<i class="menu__item-edit fa fa-gear"></i>{{/if}}
|
||||
{{#ifeq filterKey 'trash'}}<i class="menu__item-empty-trash fa fa-circle-minus" title="{{res 'menuEmptyTrash'}}"
|
||||
tip-placement="right"></i>{{/ifeq}}
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
<div class="open__message {{#unless unlockMessageRes}}hide{{/unless}}">
|
||||
<div class="open__message-content">{{#if unlockMessageRes}}{{res unlockMessageRes}}{{/if}}</div>
|
||||
<div class="open__message-cancel-btn" title="{{res 'alertCancel'}}" tip-placement="left">
|
||||
<i class="fa fa-times-circle open__message-cancel-btn-icon"></i>
|
||||
<i class="fa fa-circle-xmark open__message-cancel-btn-icon"></i>
|
||||
</div>
|
||||
</div>
|
||||
<div class="open__icons">
|
||||
|
@ -27,14 +27,14 @@
|
|||
{{#if canOpenDemo}}
|
||||
{{#ifeq demoOpened false}}
|
||||
<div class="open__icon open__icon-demo" tabindex="4" id="open__icon-demo">
|
||||
<i class="fa fa-magic open__icon-i"></i>
|
||||
<i class="fa fa-wand-magic-sparkles open__icon-i"></i>
|
||||
<div class="open__icon-text">{{res 'openDemo'}}</div>
|
||||
</div>
|
||||
{{/ifeq}}
|
||||
{{/if}}
|
||||
{{#if showMore}}
|
||||
<div class="open__icon open__icon-more" tabindex="5" id="open__icon-more">
|
||||
<i class="fa fa-ellipsis-h open__icon-i"></i>
|
||||
<i class="fa fa-ellipsis open__icon-i"></i>
|
||||
<div class="open__icon-text">{{res 'openMore'}}</div>
|
||||
</div>
|
||||
{{/if}}
|
||||
|
@ -56,7 +56,7 @@
|
|||
{{#if canOpenDemo}}
|
||||
{{#if demoOpened}}
|
||||
<div class="open__icon open__icon-demo" tabindex="20" id="open__icon-demo">
|
||||
<i class="fa fa-magic open__icon-i"></i>
|
||||
<i class="fa fa-wand-magic-sparkles open__icon-i"></i>
|
||||
<div class="open__icon-text">{{res 'openDemo'}}</div>
|
||||
</div>
|
||||
{{/if}}
|
||||
|
@ -69,7 +69,7 @@
|
|||
{{/if}}
|
||||
{{#if canOpenSettings}}
|
||||
<div class="open__icon open__icon-settings" tabindex="22" id="open__icon-settings">
|
||||
<i class="fa fa-cog open__icon-i"></i>
|
||||
<i class="fa fa-gear open__icon-i"></i>
|
||||
<div class="open__icon-text">{{res 'settings'}}</div>
|
||||
</div>
|
||||
{{/if}}
|
||||
|
@ -81,13 +81,13 @@
|
|||
<input type="password" name="password">
|
||||
</div>
|
||||
<div class="open__pass-warn-wrap">
|
||||
<div class="open__pass-warning muted-color invisible"><i class="fa fa-exclamation-triangle"></i> {{res 'openCaps'}}</div>
|
||||
<div class="open__pass-warning muted-color invisible"><i class="fa fa-triangle-exclamation"></i> {{res 'openCaps'}}</div>
|
||||
</div>
|
||||
<div class="open__pass-field-wrap">
|
||||
<input class="open__pass-input" name="password" type="password" size="30" autocomplete="new-password" maxlength="1024"
|
||||
placeholder="{{#if canOpen}}{{res 'openClickToOpen'}}{{/if}}" readonly tabindex="23" />
|
||||
<div class="open__pass-enter-btn" tabindex="24">
|
||||
<i class="fa fa-level-down-alt rotate-90 open__pass-enter-btn-icon-enter"></i>
|
||||
<i class="fa fa-turn-down rotate-90 open__pass-enter-btn-icon-enter"></i>
|
||||
<i class="fa fa-fingerprint open__pass-enter-btn-icon-touch-id"></i>
|
||||
</div>
|
||||
<div class="open__pass-opening-icon"><i class="fa fa-spinner spin"></i></div>
|
||||
|
@ -109,7 +109,7 @@
|
|||
id="open__last-item--{{file.id}}">
|
||||
{{#if file.icon}}<i class="fa fa-{{file.icon}} open__last-item-icon"></i>{{/if}}
|
||||
<span class="open__last-item-text">{{file.name}}</span>
|
||||
{{#if ../canRemoveLatest}}<i class="fa fa-times open__last-item-icon-del"></i>{{/if}}
|
||||
{{#if ../canRemoveLatest}}<i class="fa fa-x open__last-item-icon-del"></i>{{/if}}
|
||||
</div>
|
||||
{{/each}}
|
||||
</div>
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
<td class="select-entry__item-url-cell">{{url}}</td>
|
||||
{{#if itemOptions}}
|
||||
<td class="select-entry__item-options">
|
||||
<i class="fa fa-ellipsis-h"></i>
|
||||
<i class="fa fa-ellipsis"></i>
|
||||
</td>
|
||||
{{/if}}
|
||||
</tr>
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
data-filter="{{filter.id}}"
|
||||
data-active="{{filter.active}}"
|
||||
>
|
||||
<i class="fa {{#if filter.active}}fa-check-square-o{{else}}fa-square-o{{/if}} select-entry__filter-check"></i>
|
||||
<i class="fa {{#if filter.active}}fa-square-check{{else}}fa-square-o{{/if}} select-entry__filter-check"></i>
|
||||
<i class="fa fa-filter select-entry__filter-icon"></i>
|
||||
<div class="select-entry__filter-text">{{filter.type}}{{#if filter.text}}: {{/if}}{{filter.text}}</div>
|
||||
</div>
|
||||
|
|
|
@ -29,7 +29,7 @@
|
|||
class="settings__browser-extension-link icon-link"
|
||||
title="{{res 'setBrowserExtensionHelp'}}"
|
||||
>
|
||||
<i class="fa fa-info-circle"></i>
|
||||
<i class="fa fa-circle-info"></i>
|
||||
</a>
|
||||
{{else}}
|
||||
{{#if setting.supported}}
|
||||
|
@ -41,7 +41,7 @@
|
|||
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>
|
||||
<i class="fa fa-x muted-color" title="{{res 'setBrowserExtensionNotSupported'}}"></i>
|
||||
{{/if}}
|
||||
{{#if setting.enabled}}
|
||||
{{#if setting.helpUrl}}
|
||||
|
@ -49,7 +49,7 @@
|
|||
class="settings__browser-extension-link icon-link"
|
||||
title="{{res 'setBrowserExtensionHelp'}}"
|
||||
>
|
||||
<i class="fa fa-info-circle"></i>
|
||||
<i class="fa fa-circle-info"></i>
|
||||
</a>
|
||||
{{/if}}
|
||||
{{#if setting.installUrl}}
|
||||
|
|
|
@ -26,7 +26,7 @@
|
|||
<h2>{{res 'setFileSaveTo'}}</h2>
|
||||
{{#ifneq storage 'file'}}
|
||||
<div class="settings__file-save-to settings__file-save-to-file">
|
||||
<i class="fa fa-file-alt"></i>{{Res 'file'}}
|
||||
<i class="fa fa-file-lines"></i>{{Res 'file'}}
|
||||
</div>
|
||||
{{/ifneq}}
|
||||
{{#each storageProviders as |prv|}}
|
||||
|
@ -58,7 +58,7 @@
|
|||
<h2>{{res 'settings'}}</h2>
|
||||
<label for="settings__file-master-pass" class="settings__file-master-pass-label input-base">{{res 'setFilePass'}}:
|
||||
<span class="settings__file-master-pass-warning">
|
||||
<i class="fa fa-exclamation-triangle"></i> <span id="settings__file-master-pass-warning-text">{{res 'setFilePassChange'}}</span>
|
||||
<i class="fa fa-triangle-exclamation"></i> <span id="settings__file-master-pass-warning-text">{{res 'setFilePassChange'}}</span>
|
||||
</span>
|
||||
</label>
|
||||
<div class="hide">
|
||||
|
@ -70,7 +70,7 @@
|
|||
<div id="settings__file-confirm-master-pass-group">
|
||||
<label for="settings__file-confirm-master-pass" class="settings__file-master-pass-label input-base">{{res 'setFileConfirmPass'}}:
|
||||
<span class="settings__file-confirm-master-pass-warning">
|
||||
<i class="fa fa-exclamation-triangle"></i> {{res 'setFilePassNotMatch'}}
|
||||
<i class="fa fa-triangle-exclamation"></i> {{res 'setFilePassNotMatch'}}
|
||||
</span>
|
||||
</label>
|
||||
<input type="password" class="settings__input input-base" id="settings__file-confirm-master-pass" autocomplete="confirm-password" />
|
||||
|
|
|
@ -36,6 +36,7 @@
|
|||
</div>
|
||||
{{/if}}
|
||||
|
||||
<br />
|
||||
<h2 id="appearance">{{res 'setGenAppearance'}}</h2>
|
||||
{{#if locales}}
|
||||
<div>
|
||||
|
@ -105,6 +106,7 @@
|
|||
<label for="settings__general-colorful-icons">{{res 'setGenColorfulIcons'}}</label>
|
||||
</div>
|
||||
|
||||
<br />
|
||||
<h2 id="function">{{res 'setGenFunction'}}</h2>
|
||||
{{#if canAutoSaveOnClose}}
|
||||
<div>
|
||||
|
@ -217,6 +219,7 @@
|
|||
{{/if}}
|
||||
{{/if}}
|
||||
|
||||
<br />
|
||||
<h2 id="audit">{{res 'setGenAudit'}}</h2>
|
||||
<div>
|
||||
<input type="checkbox" class="settings__input input-base settings__general-audit-passwords"
|
||||
|
@ -269,6 +272,7 @@
|
|||
</select>
|
||||
</div>
|
||||
|
||||
<br />
|
||||
<h2 id="lock">{{res 'setGenLock'}}</h2>
|
||||
<div>
|
||||
<label for="settings__general-idle-minutes">{{res 'setGenLockInactive'}}:</label>
|
||||
|
@ -312,6 +316,7 @@
|
|||
</div>
|
||||
{{/if}}
|
||||
|
||||
<br />
|
||||
<h2 id="storage">{{res 'setGenStorage'}}</h2>
|
||||
<div>
|
||||
<input type="checkbox" class="settings__input input-base settings__general-disable-offline-storage" id="settings__general-disable-offline-storage"
|
||||
|
@ -334,6 +339,7 @@
|
|||
data-storage="{{prv.name}}">{{res 'setGenStorageLogout'}}</button>{{/if}}
|
||||
{{/each}}
|
||||
|
||||
<br />
|
||||
<h2 id="advanced">{{res 'advanced'}}</h2>
|
||||
<a class="settings__general-show-advanced">{{res 'setGenShowAdvanced'}}</a>
|
||||
<div class="settings__general-advanced hide">
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
<div>
|
||||
<ul class="settings__plugins-plugin-files">
|
||||
{{#if plugin.manifest.resources.js}}<li class="settings__plugins-plugin-file"><i class="fa fa-code"></i> {{res 'setPlJs'}}</li>{{/if}}
|
||||
{{#if plugin.manifest.resources.css}}<li class="settings__plugins-plugin-file"><i class="fa fa-paint-brush"></i> {{res 'setPlCss'}}</li>{{/if}}
|
||||
{{#if plugin.manifest.resources.css}}<li class="settings__plugins-plugin-file"><i class="fa fa-paintbrush"></i> {{res 'setPlCss'}}</li>{{/if}}
|
||||
{{#if plugin.manifest.resources.loc}}<li class="settings__plugins-plugin-file"><i class="fa fa-language"></i>
|
||||
{{res 'setPlLoc'}}: {{plugin.manifest.locale.title}} {{#if ../hasUnicodeFlags}}{{#if plugin.manifest.locale}}{{#if plugin.manifest.locale.flag}} {{plugin.manifest.locale.flag}}{{/if}}{{/if}}{{/if}}</li>
|
||||
{{/if}}
|
||||
|
@ -123,7 +123,7 @@
|
|||
<div class="settings__plugins-gallery-plugin-desc">{{plugin.manifest.description}}</div>
|
||||
<ul class="settings__plugins-plugin-files">
|
||||
{{#if plugin.manifest.resources.js}}<li class="settings__plugins-plugin-file"><i class="fa fa-code"></i> {{res 'setPlJs'}}</li>{{/if}}
|
||||
{{#if plugin.manifest.resources.css}}<li class="settings__plugins-plugin-file"><i class="fa fa-paint-brush"></i> {{res 'setPlCss'}}</li>{{/if}}
|
||||
{{#if plugin.manifest.resources.css}}<li class="settings__plugins-plugin-file"><i class="fa fa-paintbrush"></i> {{res 'setPlCss'}}</li>{{/if}}
|
||||
{{#if plugin.manifest.resources.loc}}<li class="settings__plugins-plugin-file"><i class="fa fa-language"></i> {{res 'setPlLoc'}}: {{plugin.manifest.locale.title}}</li>{{/if}}
|
||||
</ul>
|
||||
<div class="settings__plugins-gallery-plugin-author muted-color">
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<div class="settings">
|
||||
<div class="settings__back-button">
|
||||
<i class="fa fa-chevron-left settings__back-button-pre"></i>{{res 'retToApp'}} <i class="fa fa-arrow-circle-left settings__back-button-post"></i>
|
||||
<i class="fa fa-chevron-left settings__back-button-pre"></i>{{res 'retToApp'}} <i class="fa fa-circle-arrow-left settings__back-button-post"></i>
|
||||
</div>
|
||||
<div class="scroller">
|
||||
</div>
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
{{#each files as |file|}}
|
||||
{{#unless file.dir}}
|
||||
<div class="open-list__file {{#unless file.kdbx}}open-list__file--another{{/unless}}" data-path="{{file.path}}">
|
||||
<i class="open-list__file-icon fa fa-{{#if file.kdbx}}keeweb{{else}}file-alt-o{{/if}}"></i>
|
||||
<i class="open-list__file-icon fa fa-{{#if file.kdbx}}keeweb{{else}}file-lines-o{{/if}}"></i>
|
||||
<span class="open-list__file-text">{{file.name}}</span>
|
||||
</div>
|
||||
{{/unless}}
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<div class="tag">
|
||||
<div class="back-button">
|
||||
{{res 'retToApp'}} <i class="fa fa-arrow-circle-left back-button__post"></i>
|
||||
{{res 'retToApp'}} <i class="fa fa-circle-arrow-left back-button__post"></i>
|
||||
</div>
|
||||
<h1>{{res 'tagTitle'}}</h1>
|
||||
<div class="tag__field">
|
||||
|
@ -10,6 +10,6 @@
|
|||
</div>
|
||||
<div class="tag__space"></div>
|
||||
<div class="tag__buttons">
|
||||
<i class="tag__buttons-trash fa fa-trash-alt" title="{{res 'tagTrash'}}" tip-placement="right"></i>
|
||||
<i class="tag__buttons-trash fa fa-trash-can" title="{{res 'tagTrash'}}" tip-placement="right"></i>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -19,6 +19,7 @@ for (const svgDir of svgDirs) {
|
|||
.forEach((icon) => {
|
||||
const svgIconPath = path.join(svgDir, icon);
|
||||
const iconName = icon.substr(0, icon.length - 4) + suffix;
|
||||
|
||||
allIcons[iconName] = svgIconPath;
|
||||
});
|
||||
}
|
||||
|
@ -36,13 +37,16 @@ module.exports = function makeFontAwesomeWoff2() {
|
|||
if (err) {
|
||||
return callback(err);
|
||||
}
|
||||
|
||||
process.stdout.write('Building fontawesome.woff2... ');
|
||||
const startTime = Date.now();
|
||||
try {
|
||||
const { fontData, iconsCount } = await buildFont(this, scssSource);
|
||||
const kb = (fontData.byteLength / 1024).toFixed(2);
|
||||
const time = Date.now() - startTime;
|
||||
|
||||
process.stdout.write(`ok: ${time}ms, ${iconsCount} icons, ${kb} KiB\n`);
|
||||
|
||||
const fontCss = fontData.toString('base64');
|
||||
callback(null, `module.exports = "data:font/woff2;base64,${fontCss}"`);
|
||||
} catch (ex) {
|
||||
|
@ -52,23 +56,62 @@ module.exports = function makeFontAwesomeWoff2() {
|
|||
});
|
||||
};
|
||||
|
||||
/*
|
||||
helper function for testing charCode to unicode conversion.
|
||||
|
||||
utilized in app\styles\base\_icon-font.scss to automatically assign unicode to each
|
||||
font-awesome character in buildFont()
|
||||
|
||||
@usage: toUnicode(charCode)
|
||||
|
||||
charcode 61597
|
||||
Unicode: \uF09D
|
||||
*/
|
||||
|
||||
// eslint-disable-next-line no-unused-vars
|
||||
function toUnicode(charCode) {
|
||||
return String.fromCharCode(charCode)
|
||||
.split('')
|
||||
.map((code, index, array) => {
|
||||
const unicode = code.charCodeAt(0).toString(16).toUpperCase();
|
||||
if (unicode.length > 2) {
|
||||
return '\\u' + unicode;
|
||||
}
|
||||
return code;
|
||||
})
|
||||
.join('');
|
||||
}
|
||||
|
||||
/*
|
||||
converts charCode into symbol
|
||||
*/
|
||||
|
||||
// eslint-disable-next-line no-unused-vars
|
||||
function toSymbol(charCode) {
|
||||
return String.fromCharCode(parseInt(charCode, 16));
|
||||
}
|
||||
|
||||
function buildFont(loader, scssSource) {
|
||||
const includedIcons = {};
|
||||
const includedIconList = [...scssSource.matchAll(/\n\$fa-var-([\w-]+):/g)].map(
|
||||
([, name]) => name
|
||||
);
|
||||
const includedIconList = [...scssSource.matchAll(/\n\$fa-var-([\w-]+):/g)].map(([, name]) => {
|
||||
// console.log(`name: ${name}`);
|
||||
return name;
|
||||
});
|
||||
|
||||
for (const iconName of includedIconList) {
|
||||
if (includedIcons[iconName]) {
|
||||
throw new Error(`Duplicate icon: $fa-var-${iconName}`);
|
||||
}
|
||||
|
||||
if (!allIcons[iconName]) {
|
||||
throw new Error(`Icon not found: "${iconName}"`);
|
||||
}
|
||||
|
||||
includedIcons[iconName] = true;
|
||||
}
|
||||
|
||||
const fontStream = new SVGIcons2SVGFontStream({
|
||||
fontName: 'Font Awesome 5 Free',
|
||||
fontName: 'Font Awesome 6 Free',
|
||||
round: 10e12,
|
||||
log() {}
|
||||
});
|
||||
|
@ -85,7 +128,9 @@ function buildFont(loader, scssSource) {
|
|||
|
||||
const glyph = fs.createReadStream(svgIconPath);
|
||||
glyph.metadata = { name: iconName, unicode: [String.fromCharCode(charCode)] };
|
||||
|
||||
// console.log(JSON.stringify(glyph, null, 4));
|
||||
// console.log(toUnicode(charCode));
|
||||
// console.log(toSymbol(charCode));
|
||||
fontStream.write(glyph);
|
||||
}
|
||||
fontStream.end();
|
||||
|
@ -97,6 +142,8 @@ function buildFont(loader, scssSource) {
|
|||
data = Buffer.from(svg2ttf(data.toString('utf8')).buffer);
|
||||
data = Buffer.from(await wawoff2.compress(data));
|
||||
|
||||
// debug to print all icons
|
||||
// console.log(includedIconList);
|
||||
resolve({ fontData: data, iconsCount: includedIconList.length });
|
||||
} catch (ex) {
|
||||
reject(ex);
|
||||
|
|
Loading…
Reference in New Issue