From 3490716365746933b609230e228550c64931570a Mon Sep 17 00:00:00 2001 From: Henry Jameson Date: Mon, 27 Jan 2025 11:24:00 +0200 Subject: [PATCH 1/8] reduce multiplier to avoid overshooting --- src/services/color_convert/color_convert.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/services/color_convert/color_convert.js b/src/services/color_convert/color_convert.js index 2a61df1e2..9561c4a14 100644 --- a/src/services/color_convert/color_convert.js +++ b/src/services/color_convert/color_convert.js @@ -236,8 +236,8 @@ export const getTextColor = function (bg, text, preserve) { let contrast = getContrastRatio(bg, text) const result = convert(rgb2hex(workColor)).hsl - const delta = result.l > 50 ? 1 : -1 - const multiplier = 10 + const delta = result.l >= 50 ? 1 : -1 + const multiplier = 1 while (contrast < 4.5 && result.l > 20 && result.l < 80) { result.l += delta * multiplier result.l = Math.min(100, Math.max(0, result.l)) From 6a1da892971439d6ee7e7935a8e1d765c69c705a Mon Sep 17 00:00:00 2001 From: Henry Jameson Date: Mon, 27 Jan 2025 11:28:46 +0200 Subject: [PATCH 2/8] force faint link on faint rich content --- src/components/rich_content/rich_content.scss | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/components/rich_content/rich_content.scss b/src/components/rich_content/rich_content.scss index 118b6acfc..140be2f98 100644 --- a/src/components/rich_content/rich_content.scss +++ b/src/components/rich_content/rich_content.scss @@ -8,6 +8,10 @@ --funtextGreentext: var(--funtextGreentextFaint) !important; --funtextCyantext: var(--funtextCyantextFaint) !important; /* stylelint-enable declaration-no-important */ + + a { + color: var(--linkFaint); + } } blockquote { From 33525eeaef6fed6c65c9c45ff832fa7537e1b34a Mon Sep 17 00:00:00 2001 From: Henry Jameson Date: Mon, 27 Jan 2025 11:30:58 +0200 Subject: [PATCH 3/8] remove duplicate setting --- .../settings_modal/tabs/general_tab.vue | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/src/components/settings_modal/tabs/general_tab.vue b/src/components/settings_modal/tabs/general_tab.vue index 911e1b1da..b5346592a 100644 --- a/src/components/settings_modal/tabs/general_tab.vue +++ b/src/components/settings_modal/tabs/general_tab.vue @@ -462,22 +462,6 @@ {{ $t('settings.minimal_scopes_mode') }} -
  • - - {{ $t('settings.always_show_post_button') }} - -
  • -
  • - - {{ $t('settings.autohide_floating_post_button') }} - -
  • Date: Mon, 27 Jan 2025 11:33:35 +0200 Subject: [PATCH 4/8] fix double dot extension --- src/services/export_import/export_import.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/services/export_import/export_import.js b/src/services/export_import/export_import.js index 348a9d006..ec53a7434 100644 --- a/src/services/export_import/export_import.js +++ b/src/services/export_import/export_import.js @@ -3,7 +3,7 @@ import utf8 from 'utf8' export const newExporter = ({ filename = 'data', mime = 'application/json', - extension = '.json', + extension = 'json', getExportedObject }) => ({ exportData () { From 8c5fab4f3c18b78bda7770a6dc4b29972c4b478c Mon Sep 17 00:00:00 2001 From: Henry Jameson Date: Mon, 27 Jan 2025 11:34:59 +0200 Subject: [PATCH 5/8] bring back title= on quick actions --- src/components/status_action_buttons/action_button.vue | 1 + 1 file changed, 1 insertion(+) diff --git a/src/components/status_action_buttons/action_button.vue b/src/components/status_action_buttons/action_button.vue index 79beea433..105af5caf 100644 --- a/src/components/status_action_buttons/action_button.vue +++ b/src/components/status_action_buttons/action_button.vue @@ -9,6 +9,7 @@ :class="buttonInnerClass" role="menuitem" type="button" + :title="$t(button.label(funcArg))" target="_blank" :tabindex="0" :disabled="buttonClass.disabled" From 92c82a0a34246f7691cb9aaa9ccc107f07a2a419 Mon Sep 17 00:00:00 2001 From: Henry Jameson Date: Mon, 27 Jan 2025 12:00:28 +0200 Subject: [PATCH 6/8] 24h option --- src/components/settings_modal/tabs/general_tab.js | 5 +++++ .../settings_modal/tabs/general_tab.vue | 10 ++++++++++ src/components/timeago/timeago.vue | 15 +++++++++++---- src/i18n/en.json | 3 +++ src/modules/config.js | 1 + src/modules/instance.js | 1 + 6 files changed, 31 insertions(+), 4 deletions(-) diff --git a/src/components/settings_modal/tabs/general_tab.js b/src/components/settings_modal/tabs/general_tab.js index 3ccf025c8..517f54eb1 100644 --- a/src/components/settings_modal/tabs/general_tab.js +++ b/src/components/settings_modal/tabs/general_tab.js @@ -30,6 +30,11 @@ const GeneralTab = { value: mode, label: this.$t(`settings.conversation_display_${mode}`) })), + absoluteTime12hOptions: ['24h', '12h'].map(mode => ({ + key: mode, + value: mode, + label: this.$t(`settings.absolute_time_format_12h_${mode}`) + })), conversationOtherRepliesButtonOptions: ['below', 'inside'].map(mode => ({ key: mode, value: mode, diff --git a/src/components/settings_modal/tabs/general_tab.vue b/src/components/settings_modal/tabs/general_tab.vue index b5346592a..83ab5e3ac 100644 --- a/src/components/settings_modal/tabs/general_tab.vue +++ b/src/components/settings_modal/tabs/general_tab.vue @@ -249,6 +249,16 @@ {{ $t('settings.absolute_time_format_min_age') }}
  • +
  • + + {{ $t('settings.absolute_time_format_12h') }} + +
  • {{ $t('settings.attachments') }}

  • diff --git a/src/components/timeago/timeago.vue b/src/components/timeago/timeago.vue index d0b86e7d4..bc779e801 100644 --- a/src/components/timeago/timeago.vue +++ b/src/components/timeago/timeago.vue @@ -28,6 +28,9 @@ export default { } return DateUtils.durationStrToMs(this.$store.getters.mergedConfig.absoluteTimeFormatMinAge) <= this.relativeTimeMs }, + time12hFormat () { + return this.$store.getters.mergedConfig.absoluteTimeFormat12h === '12h' + }, browserLocale () { return localeService.internalToBrowserLocale(this.$i18n.locale) }, @@ -57,22 +60,26 @@ export default { if (DateUtils.isSameDay(this.timeAsDate, now)) { return new Intl.DateTimeFormat(this.browserLocale, { minute: 'numeric', - hour: 'numeric' + hour: 'numeric', + hour12: this.time12hFormat }) } else if (DateUtils.isSameMonth(this.timeAsDate, now)) { return new Intl.DateTimeFormat(this.browserLocale, { month: 'short', - day: 'numeric' + day: 'numeric', + hour12: this.time12hFormat }) } else if (DateUtils.isSameYear(this.timeAsDate, now)) { return new Intl.DateTimeFormat(this.browserLocale, { month: 'short', - day: 'numeric' + day: 'numeric', + hour12: this.time12hFormat }) } else { return new Intl.DateTimeFormat(this.browserLocale, { year: 'numeric', - month: 'short' + month: 'short', + hour12: this.time12hFormat }) } })() diff --git a/src/i18n/en.json b/src/i18n/en.json index 13872d0e6..01590c61f 100644 --- a/src/i18n/en.json +++ b/src/i18n/en.json @@ -532,6 +532,9 @@ "emoji_reactions_scale": "Reactions scale factor", "absolute_time_format": "Use absolute time format", "absolute_time_format_min_age": "Only use for time older than this amount of time", + "absolute_time_format_12h": "Time format", + "absolute_time_format_12h_12h": "12 hour format (i.e. 10:00 PM)", + "absolute_time_format_12h_24h": "24 hour format (i.e. 22:00)", "export_theme": "Save preset", "filtering": "Filtering", "wordfilter": "Wordfilter", diff --git a/src/modules/config.js b/src/modules/config.js index c42fc8c12..ebc8b9311 100644 --- a/src/modules/config.js +++ b/src/modules/config.js @@ -193,6 +193,7 @@ export const defaultState = { autoSaveDraft: undefined, // instance default useAbsoluteTimeFormat: undefined, // instance default absoluteTimeFormatMinAge: undefined, // instance default + absoluteTime12h: undefined, // instance default imageCompression: true } diff --git a/src/modules/instance.js b/src/modules/instance.js index 408aaef16..2c0246695 100644 --- a/src/modules/instance.js +++ b/src/modules/instance.js @@ -131,6 +131,7 @@ const defaultState = { autoSaveDraft: false, useAbsoluteTimeFormat: false, absoluteTimeFormatMinAge: '0d', + absoluteTime12h: '24h', // Nasty stuff customEmoji: [], From 031f8e65e645d750af3124ac672a7adc6d219a29 Mon Sep 17 00:00:00 2001 From: Henry Jameson Date: Mon, 27 Jan 2025 13:17:16 +0200 Subject: [PATCH 7/8] fix bookmark folders not being pinnable --- .../bookmark_folders_menu_content.js | 3 +++ .../bookmark_folders_menu_content.vue | 2 ++ src/components/nav_panel/nav_panel.vue | 1 + src/components/navigation/filter.js | 2 +- src/components/navigation/navigation_pins.js | 9 ++++++++- src/components/navigation/navigation_pins.vue | 14 +++++++++++++- 6 files changed, 28 insertions(+), 3 deletions(-) diff --git a/src/components/bookmark_folders_menu/bookmark_folders_menu_content.js b/src/components/bookmark_folders_menu/bookmark_folders_menu_content.js index d5f82f466..43db7df32 100644 --- a/src/components/bookmark_folders_menu/bookmark_folders_menu_content.js +++ b/src/components/bookmark_folders_menu/bookmark_folders_menu_content.js @@ -3,6 +3,9 @@ import NavigationEntry from 'src/components/navigation/navigation_entry.vue' import { getBookmarkFolderEntries } from 'src/components/navigation/filter.js' export const BookmarkFoldersMenuContent = { + props: [ + 'showPin' + ], components: { NavigationEntry }, diff --git a/src/components/bookmark_folders_menu/bookmark_folders_menu_content.vue b/src/components/bookmark_folders_menu/bookmark_folders_menu_content.vue index d603cd010..197f79654 100644 --- a/src/components/bookmark_folders_menu/bookmark_folders_menu_content.vue +++ b/src/components/bookmark_folders_menu/bookmark_folders_menu_content.vue @@ -7,10 +7,12 @@ label: 'nav.all_bookmarks', icon: 'bookmark' }" + :show-pin="showPin" /> diff --git a/src/components/nav_panel/nav_panel.vue b/src/components/nav_panel/nav_panel.vue index f21b43e8b..10903bcae 100644 --- a/src/components/nav_panel/nav_panel.vue +++ b/src/components/nav_panel/nav_panel.vue @@ -113,6 +113,7 @@ :class="{ '-expanded': showBookmarkFolders }" > diff --git a/src/components/navigation/filter.js b/src/components/navigation/filter.js index 9b8f43cba..01ea7756f 100644 --- a/src/components/navigation/filter.js +++ b/src/components/navigation/filter.js @@ -24,6 +24,6 @@ export const getBookmarkFolderEntries = state => state.bookmarkFolders.allFolder routeObject: { name: 'bookmark-folder', params: { id: folder.id } }, labelRaw: folder.name, iconEmoji: folder.emoji, - iconEmojiUrl: folder.emoji_url, + iconEmojiUrl: console.log(folder) || folder.emoji_url, iconLetter: folder.name[0] })) diff --git a/src/components/navigation/navigation_pins.js b/src/components/navigation/navigation_pins.js index 86c33d1fb..fa89b7599 100644 --- a/src/components/navigation/navigation_pins.js +++ b/src/components/navigation/navigation_pins.js @@ -1,6 +1,8 @@ import { mapState } from 'vuex' import { TIMELINES, ROOT_ITEMS, routeTo } from 'src/components/navigation/navigation.js' -import { getListEntries, filterNavigation } from 'src/components/navigation/filter.js' +import { getBookmarkFolderEntries, getListEntries, filterNavigation } from 'src/components/navigation/filter.js' + +import StillImage from 'src/components/still-image/still-image.vue' import { library } from '@fortawesome/fontawesome-svg-core' import { @@ -34,12 +36,16 @@ const NavPanel = { return routeTo(item, this.currentUser) } }, + components: { + StillImage + }, computed: { getters () { return this.$store.getters }, ...mapState({ lists: getListEntries, + bookmarks: getBookmarkFolderEntries, currentUser: state => state.users.currentUser, followRequestCount: state => state.api.followRequests.length, privateMode: state => state.instance.private, @@ -70,6 +76,7 @@ const NavPanel = { .filter(([k]) => this.pinnedItems.has(k)) .map(([k, v]) => ({ ...v, name: k })), ...this.lists.filter((k) => this.pinnedItems.has(k.name)), + ...this.bookmarks.filter((k) => this.pinnedItems.has(k.name)), ...Object .entries({ ...ROOT_ITEMS }) .filter(([k]) => this.pinnedItems.has(k)) diff --git a/src/components/navigation/navigation_pins.vue b/src/components/navigation/navigation_pins.vue index 37351b918..a9d11da87 100644 --- a/src/components/navigation/navigation_pins.vue +++ b/src/components/navigation/navigation_pins.vue @@ -14,9 +14,14 @@ :icon="item.icon" /> {{ item.iconLetter }} +
    Date: Mon, 27 Jan 2025 13:30:04 +0200 Subject: [PATCH 8/8] reduced width of quick actions and fixed pin icon --- src/components/status_action_buttons/action_button.scss | 3 +++ .../status_action_buttons/status_action_buttons.scss | 3 +-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/components/status_action_buttons/action_button.scss b/src/components/status_action_buttons/action_button.scss index a52b2bc42..d433f64b0 100644 --- a/src/components/status_action_buttons/action_button.scss +++ b/src/components/status_action_buttons/action_button.scss @@ -2,7 +2,9 @@ /* stylelint-disable declaration-no-important */ .quick-action { + justify-content: space-between; display: flex; + align-items: baseline; align-items: center; height: 1.5em; @@ -35,6 +37,7 @@ border-radius: var(--roundness); grid-template-columns: minmax(max-content, 1fr) auto; + .chevron-icon, .extra-button, .separator { display: none; diff --git a/src/components/status_action_buttons/status_action_buttons.scss b/src/components/status_action_buttons/status_action_buttons.scss index 4acf4a072..018ff34d9 100644 --- a/src/components/status_action_buttons/status_action_buttons.scss +++ b/src/components/status_action_buttons/status_action_buttons.scss @@ -3,12 +3,11 @@ .StatusActionButtons { .quick-action-buttons { display: grid; - grid-template-columns: repeat(auto-fill, 5em); + grid-template-columns: repeat(auto-fill, 4em); grid-auto-flow: row dense; grid-auto-rows: 1fr; grid-gap: 1.25em 1em; margin-top: var(--status-margin); - align-items: baseline; } .pin-action-button {