Most Unicode Icons back to Font Awesome 4.7 for better accessibility. Less always visible buttons, More at ☰ Men.

Thanks to xet7 !
This commit is contained in:
Lauri Ojansivu 2026-01-28 12:59:07 +02:00
parent 440f553de0
commit 7ad04f4535
84 changed files with 1828 additions and 1381 deletions

View file

@ -3,11 +3,9 @@ template(name='passwordInput')
label(for='at-field-{{_id}}') {{displayName}}
.password-input-container
input.password-field(type="{{type}}" placeholder="{{displayName}}" autocomplete="{{autocomplete}}" required="{{required}}")
button.password-toggle-btn(type="button" aria-label="Toggle password visibility" title="Toggle password visibility")
.eye-container
span.eye-text 👁️
svg.eye-slash(width="20" height="20" viewBox="0 0 20 20" class="eye-slash-line")
line(x1="6" y1="14" x2="32" y2="-14" stroke="#000" stroke-width="2" stroke-linecap="round")
button.password-toggle-btn(type="button" tabindex="-1" aria-label="Toggle password visibility" title="Toggle password visibility")
i.fa.fa-eye.eye-icon
i.fa.fa-eye-slash.eye-slash-icon
if errs
.at-error
each errs

View file

@ -15,10 +15,14 @@ Template.passwordInput.onRendered(function() {
// Ensure the input starts as password type for password fields
input.type = 'password';
// Initially hide the slash line since password starts hidden
const slashLine = template.find('.eye-slash-line');
if (slashLine) {
slashLine.style.display = 'none';
// Initially show eye icon (password is hidden) and hide eye-slash icon
const eyeIcon = template.find('.eye-icon');
const eyeSlashIcon = template.find('.eye-slash-icon');
if (eyeIcon) {
eyeIcon.style.display = 'inline-block';
}
if (eyeSlashIcon) {
eyeSlashIcon.style.display = 'none';
}
}
});
@ -27,19 +31,26 @@ Template.passwordInput.events({
'click .password-toggle-btn'(event, template) {
event.preventDefault();
const input = template.find('input.password-field');
const slashLine = template.find('.eye-slash-line');
const eyeIcon = template.find('.eye-icon');
const eyeSlashIcon = template.find('.eye-slash-icon');
if (input.type === 'password') {
input.type = 'text';
// Show the slash line when password is visible
if (slashLine) {
slashLine.style.display = 'block';
// Show eye-slash icon when password is visible
if (eyeIcon) {
eyeIcon.style.display = 'none';
}
if (eyeSlashIcon) {
eyeSlashIcon.style.display = 'inline-block';
}
} else {
input.type = 'password';
// Hide the slash line when password is hidden
if (slashLine) {
slashLine.style.display = 'none';
// Show eye icon when password is hidden
if (eyeIcon) {
eyeIcon.style.display = 'inline-block';
}
if (eyeSlashIcon) {
eyeSlashIcon.style.display = 'none';
}
}
},

View file

@ -16,7 +16,7 @@ template(name="userAvatar")
if showEdit
if $eq currentUser._id userData._id
a.edit-avatar.js-change-avatar
| ✏️
i.fa.fa-pencil-square-o
template(name="userAvatarInitials")
svg.avatar.avatar-initials(viewBox="0 0 {{viewPortWidth}} 15")
@ -92,8 +92,7 @@ template(name="changeAvatarPopup")
.member
img.avatar.avatar-image(src="{{link}}")
if isSelected
| ✅
p.sub-name
i.fa.fa-check p.sub-name
a.js-delete-avatar {{_ 'delete'}}
| -
= name
@ -102,8 +101,7 @@ template(name="changeAvatarPopup")
+userAvatarInitials(userId=currentUser._id)
| {{_ 'initials' }}
if noAvatarUrl
| ✅
p.sub-name {{_ 'default-avatar'}}
i.fa.fa-check p.sub-name {{_ 'default-avatar'}}
input.hide.js-upload-avatar-input(accept="image/*;capture=camera" type="file")
if Meteor.settings.public.avatarsUploadMaxSize
| {{_ 'max-avatar-filesize'}} {{Meteor.settings.public.avatarsUploadMaxSize}}
@ -113,7 +111,7 @@ template(name="changeAvatarPopup")
br
| {{_ 'invalid-file'}}
button.full.js-upload-avatar
| 📤
i.fa.fa-upload
| {{_ 'upload-avatar' }}
template(name="deleteAvatarPopup")

View file

@ -37,14 +37,14 @@
.password-toggle-btn {
position: absolute;
right: 5px; /* Adjusted for larger button */
top: calc(50% - 6px); /* Moved up by 6px total */
top: calc(50% - 26px); /* Moved up by 20px + 6px = 26px total */
transform: translateY(-50%);
background: #f8f8f8 !important;
border: 1px solid #ddd !important;
border-radius: 3px !important;
color: #000 !important; /* Black color for the icon */
cursor: pointer;
padding: 8px 12px; /* 2x bigger padding */
padding: 8px 6px 8px 12px; /* 2x bigger padding, 6px less on right */
font-size: 16px; /* 2x bigger font size */
width: auto !important;
height: auto !important;
@ -56,6 +56,10 @@
min-width: 40px; /* 2x bigger minimum width */
min-height: 32px; /* 2x bigger minimum height */
}
/* Adjust position for login and register pages */
.auth-layout .password-toggle-btn {
top: calc(50% - 11px); /* Move 15px down for login/register */
}
.password-toggle-btn .eye-text {
color: #000 !important;
font-size: 16px !important;

View file

@ -15,95 +15,95 @@ template(name="memberMenuPopup")
with currentUser
li
a.js-toggle-grey-icons(href="#")
| 🎨
i.fa.fa-paint-brush
| {{_ 'grey-icons'}}
if currentUser.profile
if currentUser.profile.GreyIcons
span(key="grey-icons-checkmark") ✅
i.fa.fa-check
li
a.js-my-cards(href="{{pathFor 'my-cards'}}")
| 📋
i.fa.fa-list
| {{_ 'my-cards'}}
li
a.js-due-cards(href="{{pathFor 'due-cards'}}")
| 📅
i.fa.fa-calendar
| {{_ 'dueCards-title'}}
li
a.js-global-search(href="{{pathFor 'global-search'}}")
| 🔍
i.fa.fa-search
| {{_ 'globalSearch-title'}}
li
a(href="{{pathFor 'home'}}")
| 🏠
i.fa.fa-home
| {{_ 'all-boards'}}
li
a(href="{{pathFor 'public'}}")
| 🌐
i.fa.fa-globe
| {{_ 'public'}}
li
a.board-header-btn.js-open-archived-board
| 📦
i.fa.fa-archive
span {{_ 'archives'}}
li
a.js-notifications-drawer-toggle
| 🔔
i.fa.fa-bell
| {{_ 'notifications'}}
if currentSetting.customHelpLinkUrl
li
a(href="{{currentSetting.customHelpLinkUrl}}", title="{{_ 'help'}}", target="_blank", rel="noopener noreferrer")
| ❓
i.fa.fa-question-circle
| {{_ 'help'}}
unless currentUser.isWorker
ul.pop-over-list
li
a(href="{{pathFor 'board' id=templatesBoardId slug=templatesBoardSlug}}")
| 📋
i.fa.fa-list
| {{_ 'templates'}}
if currentUser.isAdmin
li
a.js-go-setting(href="{{pathFor 'setting'}}")
| 🔒
i.fa.fa-lock
| {{_ 'admin-panel'}}
hr
if isSameDomainNameSettingValue
li
a.js-invite-people
| ✉️
i.fa.fa-envelope
| {{_ 'invite-people'}}
if isNotOAuth2AuthenticationMethod
li
a.js-edit-profile
| 👤
i.fa.fa-user
| {{_ 'edit-profile'}}
li
a.js-change-settings
| ⚙️
i.fa.fa-cog
| {{_ 'change-settings'}}
li
a.js-change-avatar
| 🖼️
i.fa.fa-picture-o
| {{_ 'edit-avatar'}}
unless isSandstorm
if isNotOAuth2AuthenticationMethod
li
a.js-change-password
| 🔑
i.fa.fa-key
| {{_ 'changePasswordPopup-title'}}
li
a.js-change-language
| 🏁
i.fa.fa-flag
| {{_ 'changeLanguagePopup-title'}}
if isSupportPageEnabled
li
a(href="{{pathFor 'support'}}")
| ❓
i.fa.fa-question-circle
| {{_ 'support'}}
unless isSandstorm
hr
ul.pop-over-list
li
a.js-logout
| 🚪
i.fa.fa-sign-out
| {{_ 'log-out'}}
template(name="invitePeoplePopup")
@ -177,25 +177,25 @@ template(name="changeLanguagePopup")
a.js-set-language
span.emoji-icon {{languageFlag}}
| {{name}}
if rtl
| (RTL)
if isCurrentLanguage
| ✅
i.fa.fa-check
template(name="changeSettingsPopup")
ul.pop-over-list
li
a.js-toggle-desktop-drag-handles
| ↕️
i.fa.fa-arrows
| {{_ 'show-desktop-drag-handles'}}
if isShowDesktopDragHandles
| ✅
unless currentUser.isWorker
i.fa.fa-check unless currentUser.isWorker
li
label.bold.clear
| 🔢
i.fa.fa-sort-numeric-asc
| {{_ 'show-cards-minimum-count'}}
input#show-cards-count-at.inline-input.left(type="number" value="#{showCardsCountAt}" min="-1")
label.bold.clear
| 📅
i.fa.fa-calendar
| {{_ 'start-day-of-week'}}
select#start-day-of-week.inline-input.left
each day in weekDays startDayOfWeek

View file

@ -295,7 +295,7 @@ Template.changePasswordPopup.onRendered(function() {
Template.changeLanguagePopup.helpers({
languages() {
return TAPi18n.getSupportedLanguages()
.map(({ tag, name }) => ({ tag: tag, name }))
.map(({ tag, name, rtl }) => ({ tag, name, rtl }))
.sort((a, b) => {
if (a.name === b.name) {
return 0;