deps: add font-awesome 6 support

This commit is contained in:
Aetherinox 2024-04-21 04:17:32 -07:00
parent beb4b8c35b
commit 39f0407593
No known key found for this signature in database
GPG Key ID: CB5C4C30CD0D4028
39 changed files with 157 additions and 103 deletions

View File

@ -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)) {

View File

@ -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: '',

View File

@ -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',

View File

@ -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';

View File

@ -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

View File

@ -5,7 +5,7 @@ const fileWatchers = {};
class StorageFile extends StorageBase {
name = 'file';
icon = 'hdd';
icon = 'hard-drive';
enabled = !!Launcher;
system = true;
backup = true;

View File

@ -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`;

View File

@ -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 },

View File

@ -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');

View File

@ -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' });
}

View File

@ -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;

View File

@ -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();
}

View File

@ -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');
}

View File

@ -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: '',

View File

@ -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') +

View File

@ -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,

View File

@ -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}}

View File

@ -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>

View File

@ -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>

View File

@ -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">

View File

@ -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}}

View File

@ -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 />

View File

@ -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>

View File

@ -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>

View File

@ -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}}

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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}}

View File

@ -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" />

View File

@ -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">

View File

@ -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>&nbsp;
{{res 'setPlLoc'}}: {{plugin.manifest.locale.title}} {{#if ../hasUnicodeFlags}}{{#if plugin.manifest.locale}}{{#if plugin.manifest.locale.flag}}&nbsp;{{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">

View File

@ -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>

View File

@ -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}}

View File

@ -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>

View File

@ -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);