Merge branch 'fixes-roundup3' into shigusegubu-themes3
This commit is contained in:
commit
3711dfa913
18 changed files with 71 additions and 28 deletions
|
@ -3,6 +3,9 @@ import NavigationEntry from 'src/components/navigation/navigation_entry.vue'
|
||||||
import { getBookmarkFolderEntries } from 'src/components/navigation/filter.js'
|
import { getBookmarkFolderEntries } from 'src/components/navigation/filter.js'
|
||||||
|
|
||||||
export const BookmarkFoldersMenuContent = {
|
export const BookmarkFoldersMenuContent = {
|
||||||
|
props: [
|
||||||
|
'showPin'
|
||||||
|
],
|
||||||
components: {
|
components: {
|
||||||
NavigationEntry
|
NavigationEntry
|
||||||
},
|
},
|
||||||
|
|
|
@ -7,10 +7,12 @@
|
||||||
label: 'nav.all_bookmarks',
|
label: 'nav.all_bookmarks',
|
||||||
icon: 'bookmark'
|
icon: 'bookmark'
|
||||||
}"
|
}"
|
||||||
|
:show-pin="showPin"
|
||||||
/>
|
/>
|
||||||
<NavigationEntry
|
<NavigationEntry
|
||||||
v-for="item in folders"
|
v-for="item in folders"
|
||||||
:key="item.id"
|
:key="item.id"
|
||||||
|
:show-pin="showPin"
|
||||||
:item="item"
|
:item="item"
|
||||||
/>
|
/>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
|
@ -113,6 +113,7 @@
|
||||||
:class="{ '-expanded': showBookmarkFolders }"
|
:class="{ '-expanded': showBookmarkFolders }"
|
||||||
>
|
>
|
||||||
<BookmarkFoldersMenuContent
|
<BookmarkFoldersMenuContent
|
||||||
|
:show-pin="editMode || forceEditMode"
|
||||||
class="timelines"
|
class="timelines"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -24,6 +24,6 @@ export const getBookmarkFolderEntries = state => state.bookmarkFolders.allFolder
|
||||||
routeObject: { name: 'bookmark-folder', params: { id: folder.id } },
|
routeObject: { name: 'bookmark-folder', params: { id: folder.id } },
|
||||||
labelRaw: folder.name,
|
labelRaw: folder.name,
|
||||||
iconEmoji: folder.emoji,
|
iconEmoji: folder.emoji,
|
||||||
iconEmojiUrl: folder.emoji_url,
|
iconEmojiUrl: console.log(folder) || folder.emoji_url,
|
||||||
iconLetter: folder.name[0]
|
iconLetter: folder.name[0]
|
||||||
}))
|
}))
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
import { mapState } from 'vuex'
|
import { mapState } from 'vuex'
|
||||||
import { TIMELINES, ROOT_ITEMS, routeTo } from 'src/components/navigation/navigation.js'
|
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 { library } from '@fortawesome/fontawesome-svg-core'
|
||||||
import {
|
import {
|
||||||
|
@ -34,12 +36,16 @@ const NavPanel = {
|
||||||
return routeTo(item, this.currentUser)
|
return routeTo(item, this.currentUser)
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
components: {
|
||||||
|
StillImage
|
||||||
|
},
|
||||||
computed: {
|
computed: {
|
||||||
getters () {
|
getters () {
|
||||||
return this.$store.getters
|
return this.$store.getters
|
||||||
},
|
},
|
||||||
...mapState({
|
...mapState({
|
||||||
lists: getListEntries,
|
lists: getListEntries,
|
||||||
|
bookmarks: getBookmarkFolderEntries,
|
||||||
currentUser: state => state.users.currentUser,
|
currentUser: state => state.users.currentUser,
|
||||||
followRequestCount: state => state.api.followRequests.length,
|
followRequestCount: state => state.api.followRequests.length,
|
||||||
privateMode: state => state.instance.private,
|
privateMode: state => state.instance.private,
|
||||||
|
@ -70,6 +76,7 @@ const NavPanel = {
|
||||||
.filter(([k]) => this.pinnedItems.has(k))
|
.filter(([k]) => this.pinnedItems.has(k))
|
||||||
.map(([k, v]) => ({ ...v, name: k })),
|
.map(([k, v]) => ({ ...v, name: k })),
|
||||||
...this.lists.filter((k) => this.pinnedItems.has(k.name)),
|
...this.lists.filter((k) => this.pinnedItems.has(k.name)),
|
||||||
|
...this.bookmarks.filter((k) => this.pinnedItems.has(k.name)),
|
||||||
...Object
|
...Object
|
||||||
.entries({ ...ROOT_ITEMS })
|
.entries({ ...ROOT_ITEMS })
|
||||||
.filter(([k]) => this.pinnedItems.has(k))
|
.filter(([k]) => this.pinnedItems.has(k))
|
||||||
|
|
|
@ -14,9 +14,14 @@
|
||||||
:icon="item.icon"
|
:icon="item.icon"
|
||||||
/>
|
/>
|
||||||
<span
|
<span
|
||||||
v-if="item.iconLetter"
|
v-if="item.iconLetter && !item.iconEmoji"
|
||||||
class="iconLetter fa-scale-110 fa-old-padding"
|
class="iconLetter fa-scale-110 fa-old-padding"
|
||||||
>{{ item.iconLetter }}</span>
|
>{{ item.iconLetter }}</span>
|
||||||
|
<StillImage
|
||||||
|
v-if="item.iconEmoji"
|
||||||
|
class="bookmark-emoji"
|
||||||
|
:src="item.iconEmojiUrl"
|
||||||
|
/>
|
||||||
<div
|
<div
|
||||||
v-if="item.badgeGetter && getters[item.badgeGetter]"
|
v-if="item.badgeGetter && getters[item.badgeGetter]"
|
||||||
class="badge -dot"
|
class="badge -dot"
|
||||||
|
@ -52,6 +57,13 @@
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
|
|
||||||
|
.bookmark-emoji {
|
||||||
|
height: 100%;
|
||||||
|
box-sizing: border-box;
|
||||||
|
padding: 0.5em;
|
||||||
|
}
|
||||||
|
|
||||||
|
& .bookmark-emoji,
|
||||||
& .svg-inline--fa,
|
& .svg-inline--fa,
|
||||||
& .iconLetter {
|
& .iconLetter {
|
||||||
margin: 0;
|
margin: 0;
|
||||||
|
|
|
@ -8,6 +8,10 @@
|
||||||
--funtextGreentext: var(--funtextGreentextFaint) !important;
|
--funtextGreentext: var(--funtextGreentextFaint) !important;
|
||||||
--funtextCyantext: var(--funtextCyantextFaint) !important;
|
--funtextCyantext: var(--funtextCyantextFaint) !important;
|
||||||
/* stylelint-enable declaration-no-important */
|
/* stylelint-enable declaration-no-important */
|
||||||
|
|
||||||
|
a {
|
||||||
|
color: var(--linkFaint);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
blockquote {
|
blockquote {
|
||||||
|
|
|
@ -30,6 +30,11 @@ const GeneralTab = {
|
||||||
value: mode,
|
value: mode,
|
||||||
label: this.$t(`settings.conversation_display_${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 => ({
|
conversationOtherRepliesButtonOptions: ['below', 'inside'].map(mode => ({
|
||||||
key: mode,
|
key: mode,
|
||||||
value: mode,
|
value: mode,
|
||||||
|
|
|
@ -249,6 +249,16 @@
|
||||||
{{ $t('settings.absolute_time_format_min_age') }}
|
{{ $t('settings.absolute_time_format_min_age') }}
|
||||||
</UnitSetting>
|
</UnitSetting>
|
||||||
</li>
|
</li>
|
||||||
|
<li>
|
||||||
|
<ChoiceSetting
|
||||||
|
id="absoluteTime12h"
|
||||||
|
path="absoluteTime12h"
|
||||||
|
:options="absoluteTime12hOptions"
|
||||||
|
:expert="1"
|
||||||
|
>
|
||||||
|
{{ $t('settings.absolute_time_format_12h') }}
|
||||||
|
</ChoiceSetting>
|
||||||
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
<h3>{{ $t('settings.attachments') }}</h3>
|
<h3>{{ $t('settings.attachments') }}</h3>
|
||||||
<li>
|
<li>
|
||||||
|
@ -462,22 +472,6 @@
|
||||||
{{ $t('settings.minimal_scopes_mode') }}
|
{{ $t('settings.minimal_scopes_mode') }}
|
||||||
</BooleanSetting>
|
</BooleanSetting>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
|
||||||
<BooleanSetting
|
|
||||||
path="alwaysShowNewPostButton"
|
|
||||||
expert="1"
|
|
||||||
>
|
|
||||||
{{ $t('settings.always_show_post_button') }}
|
|
||||||
</BooleanSetting>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<BooleanSetting
|
|
||||||
path="autohideFloatingPostButton"
|
|
||||||
expert="1"
|
|
||||||
>
|
|
||||||
{{ $t('settings.autohide_floating_post_button') }}
|
|
||||||
</BooleanSetting>
|
|
||||||
</li>
|
|
||||||
<li>
|
<li>
|
||||||
<BooleanSetting
|
<BooleanSetting
|
||||||
path="padEmoji"
|
path="padEmoji"
|
||||||
|
|
|
@ -2,7 +2,9 @@
|
||||||
/* stylelint-disable declaration-no-important */
|
/* stylelint-disable declaration-no-important */
|
||||||
|
|
||||||
.quick-action {
|
.quick-action {
|
||||||
|
justify-content: space-between;
|
||||||
display: flex;
|
display: flex;
|
||||||
|
align-items: baseline;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
height: 1.5em;
|
height: 1.5em;
|
||||||
|
|
||||||
|
@ -35,6 +37,7 @@
|
||||||
border-radius: var(--roundness);
|
border-radius: var(--roundness);
|
||||||
grid-template-columns: minmax(max-content, 1fr) auto;
|
grid-template-columns: minmax(max-content, 1fr) auto;
|
||||||
|
|
||||||
|
.chevron-icon,
|
||||||
.extra-button,
|
.extra-button,
|
||||||
.separator {
|
.separator {
|
||||||
display: none;
|
display: none;
|
||||||
|
|
|
@ -9,6 +9,7 @@
|
||||||
:class="buttonInnerClass"
|
:class="buttonInnerClass"
|
||||||
role="menuitem"
|
role="menuitem"
|
||||||
type="button"
|
type="button"
|
||||||
|
:title="$t(button.label(funcArg))"
|
||||||
target="_blank"
|
target="_blank"
|
||||||
:tabindex="0"
|
:tabindex="0"
|
||||||
:disabled="buttonClass.disabled"
|
:disabled="buttonClass.disabled"
|
||||||
|
|
|
@ -3,12 +3,11 @@
|
||||||
.StatusActionButtons {
|
.StatusActionButtons {
|
||||||
.quick-action-buttons {
|
.quick-action-buttons {
|
||||||
display: grid;
|
display: grid;
|
||||||
grid-template-columns: repeat(auto-fill, 5em);
|
grid-template-columns: repeat(auto-fill, 4em);
|
||||||
grid-auto-flow: row dense;
|
grid-auto-flow: row dense;
|
||||||
grid-auto-rows: 1fr;
|
grid-auto-rows: 1fr;
|
||||||
grid-gap: 1.25em 1em;
|
grid-gap: 1.25em 1em;
|
||||||
margin-top: var(--status-margin);
|
margin-top: var(--status-margin);
|
||||||
align-items: baseline;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.pin-action-button {
|
.pin-action-button {
|
||||||
|
|
|
@ -28,6 +28,9 @@ export default {
|
||||||
}
|
}
|
||||||
return DateUtils.durationStrToMs(this.$store.getters.mergedConfig.absoluteTimeFormatMinAge) <= this.relativeTimeMs
|
return DateUtils.durationStrToMs(this.$store.getters.mergedConfig.absoluteTimeFormatMinAge) <= this.relativeTimeMs
|
||||||
},
|
},
|
||||||
|
time12hFormat () {
|
||||||
|
return this.$store.getters.mergedConfig.absoluteTimeFormat12h === '12h'
|
||||||
|
},
|
||||||
browserLocale () {
|
browserLocale () {
|
||||||
return localeService.internalToBrowserLocale(this.$i18n.locale)
|
return localeService.internalToBrowserLocale(this.$i18n.locale)
|
||||||
},
|
},
|
||||||
|
@ -57,22 +60,26 @@ export default {
|
||||||
if (DateUtils.isSameDay(this.timeAsDate, now)) {
|
if (DateUtils.isSameDay(this.timeAsDate, now)) {
|
||||||
return new Intl.DateTimeFormat(this.browserLocale, {
|
return new Intl.DateTimeFormat(this.browserLocale, {
|
||||||
minute: 'numeric',
|
minute: 'numeric',
|
||||||
hour: 'numeric'
|
hour: 'numeric',
|
||||||
|
hour12: this.time12hFormat
|
||||||
})
|
})
|
||||||
} else if (DateUtils.isSameMonth(this.timeAsDate, now)) {
|
} else if (DateUtils.isSameMonth(this.timeAsDate, now)) {
|
||||||
return new Intl.DateTimeFormat(this.browserLocale, {
|
return new Intl.DateTimeFormat(this.browserLocale, {
|
||||||
month: 'short',
|
month: 'short',
|
||||||
day: 'numeric'
|
day: 'numeric',
|
||||||
|
hour12: this.time12hFormat
|
||||||
})
|
})
|
||||||
} else if (DateUtils.isSameYear(this.timeAsDate, now)) {
|
} else if (DateUtils.isSameYear(this.timeAsDate, now)) {
|
||||||
return new Intl.DateTimeFormat(this.browserLocale, {
|
return new Intl.DateTimeFormat(this.browserLocale, {
|
||||||
month: 'short',
|
month: 'short',
|
||||||
day: 'numeric'
|
day: 'numeric',
|
||||||
|
hour12: this.time12hFormat
|
||||||
})
|
})
|
||||||
} else {
|
} else {
|
||||||
return new Intl.DateTimeFormat(this.browserLocale, {
|
return new Intl.DateTimeFormat(this.browserLocale, {
|
||||||
year: 'numeric',
|
year: 'numeric',
|
||||||
month: 'short'
|
month: 'short',
|
||||||
|
hour12: this.time12hFormat
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
})()
|
})()
|
||||||
|
|
|
@ -532,6 +532,9 @@
|
||||||
"emoji_reactions_scale": "Reactions scale factor",
|
"emoji_reactions_scale": "Reactions scale factor",
|
||||||
"absolute_time_format": "Use absolute time format",
|
"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_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",
|
"export_theme": "Save preset",
|
||||||
"filtering": "Filtering",
|
"filtering": "Filtering",
|
||||||
"wordfilter": "Wordfilter",
|
"wordfilter": "Wordfilter",
|
||||||
|
|
|
@ -193,6 +193,7 @@ export const defaultState = {
|
||||||
autoSaveDraft: undefined, // instance default
|
autoSaveDraft: undefined, // instance default
|
||||||
useAbsoluteTimeFormat: undefined, // instance default
|
useAbsoluteTimeFormat: undefined, // instance default
|
||||||
absoluteTimeFormatMinAge: undefined, // instance default
|
absoluteTimeFormatMinAge: undefined, // instance default
|
||||||
|
absoluteTime12h: undefined, // instance default
|
||||||
imageCompression: true
|
imageCompression: true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -131,6 +131,7 @@ const defaultState = {
|
||||||
autoSaveDraft: false,
|
autoSaveDraft: false,
|
||||||
useAbsoluteTimeFormat: false,
|
useAbsoluteTimeFormat: false,
|
||||||
absoluteTimeFormatMinAge: '0d',
|
absoluteTimeFormatMinAge: '0d',
|
||||||
|
absoluteTime12h: '24h',
|
||||||
|
|
||||||
// Nasty stuff
|
// Nasty stuff
|
||||||
customEmoji: [],
|
customEmoji: [],
|
||||||
|
|
|
@ -236,8 +236,8 @@ export const getTextColor = function (bg, text, preserve) {
|
||||||
|
|
||||||
let contrast = getContrastRatio(bg, text)
|
let contrast = getContrastRatio(bg, text)
|
||||||
const result = convert(rgb2hex(workColor)).hsl
|
const result = convert(rgb2hex(workColor)).hsl
|
||||||
const delta = result.l > 50 ? 1 : -1
|
const delta = result.l >= 50 ? 1 : -1
|
||||||
const multiplier = 10
|
const multiplier = 1
|
||||||
while (contrast < 4.5 && result.l > 20 && result.l < 80) {
|
while (contrast < 4.5 && result.l > 20 && result.l < 80) {
|
||||||
result.l += delta * multiplier
|
result.l += delta * multiplier
|
||||||
result.l = Math.min(100, Math.max(0, result.l))
|
result.l = Math.min(100, Math.max(0, result.l))
|
||||||
|
|
|
@ -3,7 +3,7 @@ import utf8 from 'utf8'
|
||||||
export const newExporter = ({
|
export const newExporter = ({
|
||||||
filename = 'data',
|
filename = 'data',
|
||||||
mime = 'application/json',
|
mime = 'application/json',
|
||||||
extension = '.json',
|
extension = 'json',
|
||||||
getExportedObject
|
getExportedObject
|
||||||
}) => ({
|
}) => ({
|
||||||
exportData () {
|
exportData () {
|
||||||
|
|
Loading…
Add table
Reference in a new issue