refactor(client): use setup syntax
This commit is contained in:
		
							parent
							
								
									d9ff2dd471
								
							
						
					
					
						commit
						25f4c8688a
					
				
					 3 changed files with 90 additions and 118 deletions
				
			
		|  | @ -1,8 +1,9 @@ | ||||||
| <template> | <template> | ||||||
| <div class="vswabwbm" :style="{ zIndex, top: `${y - 64}px`, left: `${x - 64}px` }" :class="{ active }"> | <div class="vswabwbm" :style="{ zIndex, top: `${y - 64}px`, left: `${x - 64}px` }"> | ||||||
| 	<svg width="128" height="128" viewBox="0 0 128 128" xmlns="http://www.w3.org/2000/svg"> | 	<svg width="128" height="128" viewBox="0 0 128 128" xmlns="http://www.w3.org/2000/svg"> | ||||||
| 		<circle fill="none" cx="64" cy="64"> | 		<circle fill="none" cx="64" cy="64"> | ||||||
| 			<animate attributeName="r" | 			<animate | ||||||
|  | 				attributeName="r" | ||||||
| 				begin="0s" dur="0.5s" | 				begin="0s" dur="0.5s" | ||||||
| 				values="4; 32" | 				values="4; 32" | ||||||
| 				calcMode="spline" | 				calcMode="spline" | ||||||
|  | @ -10,7 +11,8 @@ | ||||||
| 				keySplines="0.165, 0.84, 0.44, 1" | 				keySplines="0.165, 0.84, 0.44, 1" | ||||||
| 				repeatCount="1" | 				repeatCount="1" | ||||||
| 			/> | 			/> | ||||||
| 			<animate attributeName="stroke-width" | 			<animate | ||||||
|  | 				attributeName="stroke-width" | ||||||
| 				begin="0s" dur="0.5s" | 				begin="0s" dur="0.5s" | ||||||
| 				values="16; 0" | 				values="16; 0" | ||||||
| 				calcMode="spline" | 				calcMode="spline" | ||||||
|  | @ -21,7 +23,8 @@ | ||||||
| 		</circle> | 		</circle> | ||||||
| 		<g fill="none" fill-rule="evenodd"> | 		<g fill="none" fill-rule="evenodd"> | ||||||
| 			<circle v-for="(particle, i) in particles" :key="i" :fill="particle.color"> | 			<circle v-for="(particle, i) in particles" :key="i" :fill="particle.color"> | ||||||
| 				<animate attributeName="r" | 				<animate | ||||||
|  | 					attributeName="r" | ||||||
| 					begin="0s" dur="0.8s" | 					begin="0s" dur="0.8s" | ||||||
| 					:values="`${particle.size}; 0`" | 					:values="`${particle.size}; 0`" | ||||||
| 					calcMode="spline" | 					calcMode="spline" | ||||||
|  | @ -29,7 +32,8 @@ | ||||||
| 					keySplines="0.165, 0.84, 0.44, 1" | 					keySplines="0.165, 0.84, 0.44, 1" | ||||||
| 					repeatCount="1" | 					repeatCount="1" | ||||||
| 				/> | 				/> | ||||||
| 				<animate attributeName="cx" | 				<animate | ||||||
|  | 					attributeName="cx" | ||||||
| 					begin="0s" dur="0.8s" | 					begin="0s" dur="0.8s" | ||||||
| 					:values="`${particle.xA}; ${particle.xB}`" | 					:values="`${particle.xA}; ${particle.xB}`" | ||||||
| 					calcMode="spline" | 					calcMode="spline" | ||||||
|  | @ -37,7 +41,8 @@ | ||||||
| 					keySplines="0.3, 0.61, 0.355, 1" | 					keySplines="0.3, 0.61, 0.355, 1" | ||||||
| 					repeatCount="1" | 					repeatCount="1" | ||||||
| 				/> | 				/> | ||||||
| 				<animate attributeName="cy" | 				<animate | ||||||
|  | 					attributeName="cy" | ||||||
| 					begin="0s" dur="0.8s" | 					begin="0s" dur="0.8s" | ||||||
| 					:values="`${particle.yA}; ${particle.yB}`" | 					:values="`${particle.yA}; ${particle.yB}`" | ||||||
| 					calcMode="spline" | 					calcMode="spline" | ||||||
|  | @ -51,33 +56,28 @@ | ||||||
| </div> | </div> | ||||||
| </template> | </template> | ||||||
| 
 | 
 | ||||||
| <script lang="ts"> | <script lang="ts" setup> | ||||||
| import { defineComponent, onMounted } from 'vue'; | import { onMounted } from 'vue'; | ||||||
| import * as os from '@/os'; | import * as os from '@/os'; | ||||||
| 
 | 
 | ||||||
| export default defineComponent({ | const props = withDefaults(defineProps<{ | ||||||
| 	props: { | 	x: number; | ||||||
| 		x: { | 	y: number; | ||||||
| 			type: Number, | 	particle?: boolean; | ||||||
| 			required: true | }>(), { | ||||||
| 		}, | 	particle: true, | ||||||
| 		y: { | }); | ||||||
| 			type: Number, |  | ||||||
| 			required: true |  | ||||||
| 		}, |  | ||||||
| 		particle: { |  | ||||||
| 			type: Boolean, |  | ||||||
| 			required: false, |  | ||||||
| 			default: true, |  | ||||||
| 		} |  | ||||||
| 	}, |  | ||||||
| 	emits: ['end'], |  | ||||||
| 	setup(props, context) { |  | ||||||
| 		const particles = []; |  | ||||||
| 		const origin = 64; |  | ||||||
| 		const colors = ['#FF1493', '#00FFFF', '#FFE202']; |  | ||||||
| 
 | 
 | ||||||
| 		if (props.particle) { | const emit = defineEmits<{ | ||||||
|  | 	(ev: 'end'): void; | ||||||
|  | }>(); | ||||||
|  | 
 | ||||||
|  | const particles = []; | ||||||
|  | const origin = 64; | ||||||
|  | const colors = ['#FF1493', '#00FFFF', '#FFE202']; | ||||||
|  | const zIndex = os.claimZIndex('high'); | ||||||
|  | 
 | ||||||
|  | if (props.particle) { | ||||||
| 	for (let i = 0; i < 12; i++) { | 	for (let i = 0; i < 12; i++) { | ||||||
| 		const angle = Math.random() * (Math.PI * 2); | 		const angle = Math.random() * (Math.PI * 2); | ||||||
| 		const pos = Math.random() * 16; | 		const pos = Math.random() * 16; | ||||||
|  | @ -88,22 +88,15 @@ export default defineComponent({ | ||||||
| 			yA: origin + (Math.cos(angle) * pos), | 			yA: origin + (Math.cos(angle) * pos), | ||||||
| 			xB: origin + (Math.sin(angle) * (pos + velocity)), | 			xB: origin + (Math.sin(angle) * (pos + velocity)), | ||||||
| 			yB: origin + (Math.cos(angle) * (pos + velocity)), | 			yB: origin + (Math.cos(angle) * (pos + velocity)), | ||||||
| 					color: colors[Math.floor(Math.random() * colors.length)] | 			color: colors[Math.floor(Math.random() * colors.length)], | ||||||
| 		}); | 		}); | ||||||
| 	} | 	} | ||||||
| 		} | } | ||||||
| 
 | 
 | ||||||
| 		onMounted(() => { | onMounted(() => { | ||||||
| 	window.setTimeout(() => { | 	window.setTimeout(() => { | ||||||
| 				context.emit('end'); | 		emit('end'); | ||||||
| 	}, 1100); | 	}, 1100); | ||||||
| 		}); |  | ||||||
| 
 |  | ||||||
| 		return { |  | ||||||
| 			particles, |  | ||||||
| 			zIndex: os.claimZIndex('high'), |  | ||||||
| 		}; |  | ||||||
| 	}, |  | ||||||
| }); | }); | ||||||
| </script> | </script> | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -3,26 +3,41 @@ | ||||||
| </div> | </div> | ||||||
| </template> | </template> | ||||||
| 
 | 
 | ||||||
| <script lang="ts"> | <script lang="ts" setup> | ||||||
| import { defineComponent } from 'vue'; | import { } from 'vue'; | ||||||
| import * as Acct from 'misskey-js/built/acct'; | import * as Acct from 'misskey-js/built/acct'; | ||||||
| import * as os from '@/os'; | import * as os from '@/os'; | ||||||
| import { mainRouter } from '@/router'; | import { mainRouter } from '@/router'; | ||||||
|  | import { i18n } from '@/i18n'; | ||||||
| 
 | 
 | ||||||
| export default defineComponent({ | async function follow(user): Promise<void> { | ||||||
| 	created() { | 	const { canceled } = await os.confirm({ | ||||||
| 		const acct = new URL(location.href).searchParams.get('acct'); | 		type: 'question', | ||||||
| 		if (acct == null) return; | 		text: i18n.t('followConfirm', { name: user.name || user.username }), | ||||||
|  | 	}); | ||||||
| 
 | 
 | ||||||
| 		let promise; | 	if (canceled) { | ||||||
|  | 		window.close(); | ||||||
|  | 		return; | ||||||
|  | 	} | ||||||
| 	 | 	 | ||||||
| 		if (acct.startsWith('https://')) { | 	os.apiWithDialog('following/create', { | ||||||
|  | 		userId: user.id, | ||||||
|  | 	}); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | const acct = new URL(location.href).searchParams.get('acct'); | ||||||
|  | if (acct == null) return; | ||||||
|  | 
 | ||||||
|  | let promise; | ||||||
|  | 
 | ||||||
|  | if (acct.startsWith('https://')) { | ||||||
| 	promise = os.api('ap/show', { | 	promise = os.api('ap/show', { | ||||||
| 		uri: acct, | 		uri: acct, | ||||||
| 	}); | 	}); | ||||||
| 	promise.then(res => { | 	promise.then(res => { | ||||||
| 		if (res.type === 'User') { | 		if (res.type === 'User') { | ||||||
| 					this.follow(res.object); | 			follow(res.object); | ||||||
| 		} else if (res.type === 'Note') { | 		} else if (res.type === 'Note') { | ||||||
| 			mainRouter.push(`/notes/${res.object.id}`); | 			mainRouter.push(`/notes/${res.object.id}`); | ||||||
| 		} else { | 		} else { | ||||||
|  | @ -34,32 +49,12 @@ export default defineComponent({ | ||||||
| 			}); | 			}); | ||||||
| 		} | 		} | ||||||
| 	}); | 	}); | ||||||
| 		} else { | } else { | ||||||
| 	promise = os.api('users/show', Acct.parse(acct)); | 	promise = os.api('users/show', Acct.parse(acct)); | ||||||
| 	promise.then(user => { | 	promise.then(user => { | ||||||
| 				this.follow(user); | 		follow(user); | ||||||
| 	}); | 	}); | ||||||
| 		} | } | ||||||
| 
 | 
 | ||||||
| 		os.promiseDialog(promise, null, null, this.$ts.fetchingAsApObject); | os.promiseDialog(promise, null, null, i18n.ts.fetchingAsApObject); | ||||||
| 	}, |  | ||||||
| 
 |  | ||||||
| 	methods: { |  | ||||||
| 		async follow(user) { |  | ||||||
| 			const { canceled } = await os.confirm({ |  | ||||||
| 				type: 'question', |  | ||||||
| 				text: this.$t('followConfirm', { name: user.name || user.username }), |  | ||||||
| 			}); |  | ||||||
| 
 |  | ||||||
| 			if (canceled) { |  | ||||||
| 				window.close(); |  | ||||||
| 				return; |  | ||||||
| 			} |  | ||||||
| 			 |  | ||||||
| 			os.apiWithDialog('following/create', { |  | ||||||
| 				userId: user.id, |  | ||||||
| 			}); |  | ||||||
| 		}, |  | ||||||
| 	}, |  | ||||||
| }); |  | ||||||
| </script> | </script> | ||||||
|  |  | ||||||
|  | @ -102,22 +102,6 @@ const menu = [{ | ||||||
| 	text: i18n.ts.timeline, | 	text: i18n.ts.timeline, | ||||||
| 	action: setType, | 	action: setType, | ||||||
| }]; | }]; | ||||||
| 
 |  | ||||||
| /* |  | ||||||
| export default defineComponent({ |  | ||||||
| 	watch: { |  | ||||||
| 		mediaOnly() { |  | ||||||
| 			(this.$refs.timeline as any).reload(); |  | ||||||
| 		} |  | ||||||
| 	}, |  | ||||||
| 
 |  | ||||||
| 	methods: { |  | ||||||
| 		focus() { |  | ||||||
| 			(this.$refs.timeline as any).focus(); |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| }); |  | ||||||
| */ |  | ||||||
| </script> | </script> | ||||||
| 
 | 
 | ||||||
| <style lang="scss" scoped> | <style lang="scss" scoped> | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue