refactor(client): refactor components
This commit is contained in:
		@@ -1,5 +1,6 @@
 | 
			
		||||
<template>
 | 
			
		||||
<button v-if="canRenote"
 | 
			
		||||
<button
 | 
			
		||||
	v-if="canRenote"
 | 
			
		||||
	ref="buttonRef"
 | 
			
		||||
	class="eddddedb _button canRenote"
 | 
			
		||||
	@click="renote()"
 | 
			
		||||
@@ -12,8 +13,9 @@
 | 
			
		||||
</button>
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
<script lang="ts">
 | 
			
		||||
import { computed, defineComponent, ref } from 'vue';
 | 
			
		||||
<script lang="ts" setup>
 | 
			
		||||
import { computed, ref } from 'vue';
 | 
			
		||||
import * as misskey from 'misskey-js';
 | 
			
		||||
import XDetails from '@/components/users-tooltip.vue';
 | 
			
		||||
import { pleaseLogin } from '@/scripts/please-login';
 | 
			
		||||
import * as os from '@/os';
 | 
			
		||||
@@ -21,71 +23,55 @@ import { $i } from '@/account';
 | 
			
		||||
import { useTooltip } from '@/scripts/use-tooltip';
 | 
			
		||||
import { i18n } from '@/i18n';
 | 
			
		||||
 | 
			
		||||
export default defineComponent({
 | 
			
		||||
	props: {
 | 
			
		||||
		count: {
 | 
			
		||||
			type: Number,
 | 
			
		||||
			required: true,
 | 
			
		||||
		},
 | 
			
		||||
		note: {
 | 
			
		||||
			type: Object,
 | 
			
		||||
			required: true,
 | 
			
		||||
		},
 | 
			
		||||
	},
 | 
			
		||||
const props = defineProps<{
 | 
			
		||||
	note: misskey.entities.Note;
 | 
			
		||||
	count: number;
 | 
			
		||||
}>();
 | 
			
		||||
 | 
			
		||||
	setup(props) {
 | 
			
		||||
		const buttonRef = ref<HTMLElement>();
 | 
			
		||||
const buttonRef = ref<HTMLElement>();
 | 
			
		||||
 | 
			
		||||
		const canRenote = computed(() => ['public', 'home'].includes(props.note.visibility) || props.note.userId === $i.id);
 | 
			
		||||
const canRenote = computed(() => ['public', 'home'].includes(props.note.visibility) || props.note.userId === $i.id);
 | 
			
		||||
 | 
			
		||||
		useTooltip(buttonRef, async (showing) => {
 | 
			
		||||
			const renotes = await os.api('notes/renotes', {
 | 
			
		||||
				noteId: props.note.id,
 | 
			
		||||
				limit: 11
 | 
			
		||||
			});
 | 
			
		||||
useTooltip(buttonRef, async (showing) => {
 | 
			
		||||
	const renotes = await os.api('notes/renotes', {
 | 
			
		||||
		noteId: props.note.id,
 | 
			
		||||
		limit: 11,
 | 
			
		||||
	});
 | 
			
		||||
 | 
			
		||||
			const users = renotes.map(x => x.user);
 | 
			
		||||
	const users = renotes.map(x => x.user);
 | 
			
		||||
 | 
			
		||||
			if (users.length < 1) return;
 | 
			
		||||
	if (users.length < 1) return;
 | 
			
		||||
 | 
			
		||||
			os.popup(XDetails, {
 | 
			
		||||
				showing,
 | 
			
		||||
				users,
 | 
			
		||||
				count: props.count,
 | 
			
		||||
				targetElement: buttonRef.value
 | 
			
		||||
			}, {}, 'closed');
 | 
			
		||||
		});
 | 
			
		||||
 | 
			
		||||
		const renote = (viaKeyboard = false) => {
 | 
			
		||||
			pleaseLogin();
 | 
			
		||||
			os.popupMenu([{
 | 
			
		||||
				text: i18n.ts.renote,
 | 
			
		||||
				icon: 'fas fa-retweet',
 | 
			
		||||
				action: () => {
 | 
			
		||||
					os.api('notes/create', {
 | 
			
		||||
						renoteId: props.note.id
 | 
			
		||||
					});
 | 
			
		||||
				}
 | 
			
		||||
			}, {
 | 
			
		||||
				text: i18n.ts.quote,
 | 
			
		||||
				icon: 'fas fa-quote-right',
 | 
			
		||||
				action: () => {
 | 
			
		||||
					os.post({
 | 
			
		||||
						renote: props.note,
 | 
			
		||||
					});
 | 
			
		||||
				}
 | 
			
		||||
			}], buttonRef.value, {
 | 
			
		||||
				viaKeyboard
 | 
			
		||||
			});
 | 
			
		||||
		};
 | 
			
		||||
 | 
			
		||||
		return {
 | 
			
		||||
			buttonRef,
 | 
			
		||||
			canRenote,
 | 
			
		||||
			renote,
 | 
			
		||||
		};
 | 
			
		||||
	},
 | 
			
		||||
	os.popup(XDetails, {
 | 
			
		||||
		showing,
 | 
			
		||||
		users,
 | 
			
		||||
		count: props.count,
 | 
			
		||||
		targetElement: buttonRef.value,
 | 
			
		||||
	}, {}, 'closed');
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
const renote = (viaKeyboard = false) => {
 | 
			
		||||
	pleaseLogin();
 | 
			
		||||
	os.popupMenu([{
 | 
			
		||||
		text: i18n.ts.renote,
 | 
			
		||||
		icon: 'fas fa-retweet',
 | 
			
		||||
		action: () => {
 | 
			
		||||
			os.api('notes/create', {
 | 
			
		||||
				renoteId: props.note.id,
 | 
			
		||||
			});
 | 
			
		||||
		},
 | 
			
		||||
	}, {
 | 
			
		||||
		text: i18n.ts.quote,
 | 
			
		||||
		icon: 'fas fa-quote-right',
 | 
			
		||||
		action: () => {
 | 
			
		||||
			os.post({
 | 
			
		||||
				renote: props.note,
 | 
			
		||||
			});
 | 
			
		||||
		},
 | 
			
		||||
	}], buttonRef.value, {
 | 
			
		||||
		viaKeyboard,
 | 
			
		||||
	});
 | 
			
		||||
};
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
<style lang="scss" scoped>
 | 
			
		||||
 
 | 
			
		||||
@@ -63,63 +63,51 @@
 | 
			
		||||
</span>
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
<script lang="ts">
 | 
			
		||||
import { defineComponent, onMounted, onUnmounted, ref } from 'vue';
 | 
			
		||||
import * as os from '@/os';
 | 
			
		||||
<script lang="ts" setup>
 | 
			
		||||
import { onMounted, onUnmounted, ref } from 'vue';
 | 
			
		||||
 | 
			
		||||
export default defineComponent({
 | 
			
		||||
	setup() {
 | 
			
		||||
		const particles = ref([]);
 | 
			
		||||
		const el = ref<HTMLElement>();
 | 
			
		||||
		const width = ref(0);
 | 
			
		||||
		const height = ref(0);
 | 
			
		||||
		const colors = ['#FF1493', '#00FFFF', '#FFE202', '#FFE202', '#FFE202'];
 | 
			
		||||
		let stop = false;
 | 
			
		||||
		let ro: ResizeObserver | undefined;
 | 
			
		||||
const particles = ref([]);
 | 
			
		||||
const el = ref<HTMLElement>();
 | 
			
		||||
const width = ref(0);
 | 
			
		||||
const height = ref(0);
 | 
			
		||||
const colors = ['#FF1493', '#00FFFF', '#FFE202', '#FFE202', '#FFE202'];
 | 
			
		||||
let stop = false;
 | 
			
		||||
let ro: ResizeObserver | undefined;
 | 
			
		||||
 | 
			
		||||
		onMounted(() => {
 | 
			
		||||
			ro = new ResizeObserver((entries, observer) => {
 | 
			
		||||
				width.value = el.value?.offsetWidth + 64;
 | 
			
		||||
				height.value = el.value?.offsetHeight + 64;
 | 
			
		||||
			});
 | 
			
		||||
			ro.observe(el.value);
 | 
			
		||||
			const add = () => {
 | 
			
		||||
				if (stop) return;
 | 
			
		||||
				const x = (Math.random() * (width.value - 64));
 | 
			
		||||
				const y = (Math.random() * (height.value - 64));
 | 
			
		||||
				const sizeFactor = Math.random();
 | 
			
		||||
				const particle = {
 | 
			
		||||
					id: Math.random().toString(),
 | 
			
		||||
					x,
 | 
			
		||||
					y,
 | 
			
		||||
					size: 0.2 + ((sizeFactor / 10) * 3),
 | 
			
		||||
					dur: 1000 + (sizeFactor * 1000),
 | 
			
		||||
					color: colors[Math.floor(Math.random() * colors.length)],
 | 
			
		||||
				};
 | 
			
		||||
				particles.value.push(particle);
 | 
			
		||||
				window.setTimeout(() => {
 | 
			
		||||
					particles.value = particles.value.filter(x => x.id !== particle.id);
 | 
			
		||||
				}, particle.dur - 100);
 | 
			
		||||
 | 
			
		||||
				window.setTimeout(() => {
 | 
			
		||||
					add();
 | 
			
		||||
				}, 500 + (Math.random() * 500));
 | 
			
		||||
			};
 | 
			
		||||
			add();
 | 
			
		||||
		});
 | 
			
		||||
		
 | 
			
		||||
		onUnmounted(() => {
 | 
			
		||||
			if (ro) ro.disconnect();
 | 
			
		||||
			stop = true;
 | 
			
		||||
		});
 | 
			
		||||
 | 
			
		||||
		return {
 | 
			
		||||
			el,
 | 
			
		||||
			width,
 | 
			
		||||
			height,
 | 
			
		||||
			particles,
 | 
			
		||||
onMounted(() => {
 | 
			
		||||
	ro = new ResizeObserver((entries, observer) => {
 | 
			
		||||
		width.value = el.value?.offsetWidth + 64;
 | 
			
		||||
		height.value = el.value?.offsetHeight + 64;
 | 
			
		||||
	});
 | 
			
		||||
	ro.observe(el.value);
 | 
			
		||||
	const add = () => {
 | 
			
		||||
		if (stop) return;
 | 
			
		||||
		const x = (Math.random() * (width.value - 64));
 | 
			
		||||
		const y = (Math.random() * (height.value - 64));
 | 
			
		||||
		const sizeFactor = Math.random();
 | 
			
		||||
		const particle = {
 | 
			
		||||
			id: Math.random().toString(),
 | 
			
		||||
			x,
 | 
			
		||||
			y,
 | 
			
		||||
			size: 0.2 + ((sizeFactor / 10) * 3),
 | 
			
		||||
			dur: 1000 + (sizeFactor * 1000),
 | 
			
		||||
			color: colors[Math.floor(Math.random() * colors.length)],
 | 
			
		||||
		};
 | 
			
		||||
	},
 | 
			
		||||
		particles.value.push(particle);
 | 
			
		||||
		window.setTimeout(() => {
 | 
			
		||||
			particles.value = particles.value.filter(x => x.id !== particle.id);
 | 
			
		||||
		}, particle.dur - 100);
 | 
			
		||||
 | 
			
		||||
		window.setTimeout(() => {
 | 
			
		||||
			add();
 | 
			
		||||
		}, 500 + (Math.random() * 500));
 | 
			
		||||
	};
 | 
			
		||||
	add();
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
onUnmounted(() => {
 | 
			
		||||
	if (ro) ro.disconnect();
 | 
			
		||||
	stop = true;
 | 
			
		||||
});
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -18,13 +18,13 @@ export default defineComponent({
 | 
			
		||||
			disabled: this.modelValue === option.props.value,
 | 
			
		||||
			onClick: () => {
 | 
			
		||||
				this.$emit('update:modelValue', option.props.value);
 | 
			
		||||
			}
 | 
			
		||||
			},
 | 
			
		||||
		}, option.children), [
 | 
			
		||||
			[resolveDirective('click-anime')]
 | 
			
		||||
			[resolveDirective('click-anime')],
 | 
			
		||||
		]))), [
 | 
			
		||||
			[resolveDirective('size'), { max: [500] }]
 | 
			
		||||
			[resolveDirective('size'), { max: [500] }],
 | 
			
		||||
		]);
 | 
			
		||||
	}
 | 
			
		||||
	},
 | 
			
		||||
});
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user