feat: ✨ swipe thru notifs
This commit is contained in:
parent
c544df7246
commit
bca91426db
|
@ -39,7 +39,7 @@
|
||||||
- Saner defaults
|
- Saner defaults
|
||||||
- Recommended instances timeline
|
- Recommended instances timeline
|
||||||
- Improve mobile UX
|
- Improve mobile UX
|
||||||
- Swipe through timelines on mobile
|
- Swipe through timelines/notifications on mobile
|
||||||
- Redesigned mobile bottom nav bar
|
- Redesigned mobile bottom nav bar
|
||||||
- Post button on TL
|
- Post button on TL
|
||||||
- Star as default reaction
|
- Star as default reaction
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "misskey",
|
"name": "misskey",
|
||||||
"version": "12.118.1-calc.11.4",
|
"version": "12.118.1-calc.11.5",
|
||||||
"codename": "aqua",
|
"codename": "aqua",
|
||||||
"repository": {
|
"repository": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
|
|
|
@ -49,7 +49,8 @@ const toggle = () => {
|
||||||
transition: background-color 0.25s ease-in-out;
|
transition: background-color 0.25s ease-in-out;
|
||||||
|
|
||||||
&:hover {
|
&:hover {
|
||||||
background: lighten(var(--cwBg), 10%);
|
background: var(--cwFg);
|
||||||
|
color: var(--cwBg);
|
||||||
}
|
}
|
||||||
|
|
||||||
> span {
|
> span {
|
||||||
|
|
|
@ -16,19 +16,29 @@
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { computed } from 'vue';
|
import { computed, ref } from 'vue';
|
||||||
import { notificationTypes } from 'misskey-js';
|
import { notificationTypes } from 'misskey-js';
|
||||||
import XNotifications from '@/components/notifications.vue';
|
import XNotifications from '@/components/notifications.vue';
|
||||||
import XNotes from '@/components/notes.vue';
|
import XNotes from '@/components/notes.vue';
|
||||||
import * as os from '@/os';
|
import * as os from '@/os';
|
||||||
import { i18n } from '@/i18n';
|
import { i18n } from '@/i18n';
|
||||||
import { definePageMetadata } from '@/scripts/page-metadata';
|
import { definePageMetadata } from '@/scripts/page-metadata';
|
||||||
|
import { deviceKind } from '@/scripts/device-kind';
|
||||||
|
|
||||||
let tab = $ref('all');
|
let tab = $ref('all');
|
||||||
let includeTypes = $ref<string[] | null>(null);
|
let includeTypes = $ref<string[] | null>(null);
|
||||||
let unreadOnly = $computed(() => tab === 'unread');
|
let unreadOnly = $computed(() => tab === 'unread');
|
||||||
os.api('notifications/mark-all-as-read');
|
os.api('notifications/mark-all-as-read');
|
||||||
|
|
||||||
|
const MOBILE_THRESHOLD = 500;
|
||||||
|
const isMobile = ref(
|
||||||
|
deviceKind === 'smartphone' || window.innerWidth <= MOBILE_THRESHOLD
|
||||||
|
);
|
||||||
|
window.addEventListener('resize', () => {
|
||||||
|
isMobile.value =
|
||||||
|
deviceKind === 'smartphone' || window.innerWidth <= MOBILE_THRESHOLD;
|
||||||
|
});
|
||||||
|
|
||||||
const mentionsPagination = {
|
const mentionsPagination = {
|
||||||
endpoint: 'notes/mentions' as const,
|
endpoint: 'notes/mentions' as const,
|
||||||
limit: 10,
|
limit: 10,
|
||||||
|
@ -93,4 +103,56 @@ definePageMetadata(computed(() => ({
|
||||||
title: i18n.ts.notifications,
|
title: i18n.ts.notifications,
|
||||||
icon: 'fas fa-bell',
|
icon: 'fas fa-bell',
|
||||||
})));
|
})));
|
||||||
|
|
||||||
|
if (isMobile.value) {
|
||||||
|
document.addEventListener('touchstart', handleTouchStart, false);
|
||||||
|
document.addEventListener('touchmove', handleTouchMove, false);
|
||||||
|
|
||||||
|
let xDown = null;
|
||||||
|
let yDown = null;
|
||||||
|
|
||||||
|
function getTouches(evt) {
|
||||||
|
return (
|
||||||
|
evt.touches || evt.originalEvent.touches
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
function handleTouchStart(evt) {
|
||||||
|
const firstTouch = getTouches(evt)[0];
|
||||||
|
xDown = firstTouch.clientX;
|
||||||
|
yDown = firstTouch.clientY;
|
||||||
|
}
|
||||||
|
|
||||||
|
function handleTouchMove(evt) {
|
||||||
|
if (!xDown || !yDown) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
let xUp = evt.touches[0].clientX;
|
||||||
|
let yUp = evt.touches[0].clientY;
|
||||||
|
|
||||||
|
let xDiff = xDown - xUp;
|
||||||
|
let yDiff = yDown - yUp;
|
||||||
|
|
||||||
|
let next = 'home';
|
||||||
|
let tabs = ['all', 'unread', 'mentions', 'directNotes'];
|
||||||
|
|
||||||
|
if (Math.abs(xDiff) > Math.abs(yDiff)) {
|
||||||
|
if (xDiff > 0) {
|
||||||
|
if (tab === 'all') {
|
||||||
|
next = 'directNotes';
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
next = tabs[(tabs.indexOf(tab) + 1) % tabs.length];
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
next = tabs[(tabs.indexOf(tab) - 1) % tabs.length];
|
||||||
|
}
|
||||||
|
tab = next;
|
||||||
|
}
|
||||||
|
xDown = null;
|
||||||
|
yDown = null;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -280,10 +280,10 @@ if (isMobile.value) {
|
||||||
next = 'global'
|
next = 'global'
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
next = timelines[(timelines.indexOf(src) - 1) % timelines.length];
|
next = timelines[(timelines.indexOf(src) + 1) % timelines.length];
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
next = timelines[(timelines.indexOf(src) + 1) % timelines.length];
|
next = timelines[(timelines.indexOf(src) - 1) % timelines.length];
|
||||||
}
|
}
|
||||||
saveSrc(next);
|
saveSrc(next);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue