Skip to content
Snippets Groups Projects
about-misskey.vue 5.95 KiB
Newer Older
syuilo's avatar
syuilo committed
<div style="overflow: clip;">
syuilo's avatar
syuilo committed
	<FormBase class="znqjceqz">
		<div id="debug"></div>
syuilo's avatar
syuilo committed
		<section class="_debobigegoItem about">
syuilo's avatar
syuilo committed
			<div ref="about" class="_debobigegoPanel panel" :class="{ playing: easterEggEngine != null }">
				<img src="/client-assets/about-icon.png" alt="" class="icon" draggable="false" @load="iconLoaded" @click="gravity"/>
syuilo's avatar
syuilo committed
				<div class="misskey">Misskey</div>
				<div class="version">v{{ version }}</div>
syuilo's avatar
syuilo committed
				<span v-for="emoji in easterEggEmojis" :key="emoji.id" class="emoji" :data-physics-x="emoji.left" :data-physics-y="emoji.top" :class="{ _physics_circle_: !emoji.emoji.startsWith(':') }"><MkEmoji class="emoji" :emoji="emoji.emoji" :custom-emojis="$instance.emojis" :is-reaction="false" :normal="true" :no-style="true"/></span>
syuilo's avatar
syuilo committed
			</div>
		</section>
syuilo's avatar
syuilo committed
		<section class="_debobigegoItem" style="text-align: center; padding: 0 16px;">
			{{ $ts._aboutMisskey.about }}<br><a href="https://misskey-hub.net/docs/misskey.html" target="_blank" class="_link">{{ $ts.learnMore }}</a>
syuilo's avatar
syuilo committed
		</section>
		<FormGroup>
			<FormLink to="https://github.com/misskey-dev/misskey" external>
				<template #icon><i class="fas fa-code"></i></template>
syuilo's avatar
syuilo committed
				{{ $ts._aboutMisskey.source }}
syuilo's avatar
syuilo committed
				<template #suffix>GitHub</template>
			</FormLink>
			<FormLink to="https://crowdin.com/project/misskey" external>
				<template #icon><i class="fas fa-language"></i></template>
syuilo's avatar
syuilo committed
				{{ $ts._aboutMisskey.translation }}
syuilo's avatar
syuilo committed
				<template #suffix>Crowdin</template>
			</FormLink>
			<FormLink to="https://www.patreon.com/syuilo" external>
				<template #icon><i class="fas fa-hand-holding-medical"></i></template>
syuilo's avatar
syuilo committed
				{{ $ts._aboutMisskey.donate }}
syuilo's avatar
syuilo committed
				<template #suffix>Patreon</template>
			</FormLink>
		</FormGroup>
		<FormGroup>
syuilo's avatar
syuilo committed
			<template #label>{{ $ts._aboutMisskey.contributors }}</template>
syuilo's avatar
syuilo committed
			<FormLink to="https://github.com/syuilo" external>@syuilo</FormLink>
			<FormLink to="https://github.com/AyaMorisawa" external>@AyaMorisawa</FormLink>
			<FormLink to="https://github.com/mei23" external>@mei23</FormLink>
			<FormLink to="https://github.com/acid-chicken" external>@acid-chicken</FormLink>
			<FormLink to="https://github.com/tamaina" external>@tamaina</FormLink>
			<FormLink to="https://github.com/rinsuki" external>@rinsuki</FormLink>
			<FormLink to="https://github.com/Xeltica" external>@Xeltica</FormLink>
			<FormLink to="https://github.com/u1-liquid" external>@u1-liquid</FormLink>
			<FormLink to="https://github.com/marihachi" external>@marihachi</FormLink>
			<template #caption><MkLink url="https://github.com/misskey-dev/misskey/graphs/contributors">{{ $ts._aboutMisskey.allContributors }}</MkLink></template>
syuilo's avatar
syuilo committed
		</FormGroup>
		<FormGroup>
syuilo's avatar
syuilo committed
			<template #label><Mfm text="[jelly ❤]"/> {{ $ts._aboutMisskey.patrons }}</template>
syuilo's avatar
syuilo committed
			<FormKeyValueView v-for="patron in patrons" :key="patron"><template #key>{{ patron }}</template></FormKeyValueView>
syuilo's avatar
syuilo committed
			<template #caption>{{ $ts._aboutMisskey.morePatrons }}</template>
syuilo's avatar
syuilo committed
		</FormGroup>
	</FormBase>
</div>
syuilo's avatar
syuilo committed
import { defineComponent } from 'vue';
syuilo's avatar
syuilo committed
import { version } from '@/config';
import FormLink from '@/components/debobigego/link.vue';
import FormBase from '@/components/debobigego/base.vue';
import FormGroup from '@/components/debobigego/group.vue';
import FormKeyValueView from '@/components/debobigego/key-value-view.vue';
import MkLink from '@/components/link.vue';
import { physics } from '@/scripts/physics';
import * as symbols from '@/symbols';
syuilo's avatar
syuilo committed
const patrons = [
	'Satsuki Yanagi',
	'noellabo',
syuilo's avatar
syuilo committed
	'mametsuko',
syuilo's avatar
syuilo committed
	'AureoleArk',
syuilo's avatar
syuilo committed
	'Gargron',
syuilo's avatar
syuilo committed
	'Nokotaro Takeda',
syuilo's avatar
syuilo committed
	'Suji Yan',
	'Hekovic',
	'Gitmo Life Services',
syuilo's avatar
syuilo committed
	'nenohi',
syuilo's avatar
syuilo committed
	'naga_rus',
	'Melilot',
	'Efertone',
	'oi_yekssim',
syuilo's avatar
syuilo committed
	'nanami kan',
syuilo's avatar
syuilo committed
	'motcha',
	'dansup',
	'Quinton Macejkovic',
syuilo's avatar
syuilo committed
	'YUKIMOCHI',
	'mewl hayabusa',
syuilo's avatar
syuilo committed
	'makokunsan',
	'Peter G.',
	'Nesakko',
	'regtan',
syuilo's avatar
syuilo committed
	'見当かなみ',
	'natalie',
syuilo's avatar
syuilo committed
	'Jerry',
syuilo's avatar
syuilo committed
	'takimura',
	'sikyosyounin',
syuilo's avatar
syuilo committed
	'YuzuRyo61',
syuilo's avatar
syuilo committed
	'sheeta.s',
	'osapon',
	'mkatze',
	'CG',
syuilo's avatar
syuilo committed
	'nafuchoco',
	'Takumi Sugita',
	'chidori ninokura',
	'mydarkstar',
	'kiritan',
	'kabo2468y',
	'weepjp',
	'Liaizon Wakest',
	'Steffen K9',
	'Roujo',
	'uroco @99',
	'totokoro',
	'public_yusuke',
	'wara',
	'S Y',
syuilo's avatar
syuilo committed
	'Denshi',
	'Osushimaru',
syuilo's avatar
syuilo committed
	'吴浥',
	'DignifiedSilence',
	't_w',
syuilo's avatar
syuilo committed
export default defineComponent({
syuilo's avatar
syuilo committed
	components: {
syuilo's avatar
syuilo committed
		FormBase,
		FormGroup,
		FormLink,
		FormKeyValueView,
		MkLink,
syuilo's avatar
syuilo committed
			[symbols.PAGE_INFO]: {
syuilo's avatar
syuilo committed
				title: this.$ts.aboutMisskey,
syuilo's avatar
syuilo committed
				icon: null
syuilo's avatar
syuilo committed
			},
syuilo's avatar
syuilo committed
			patrons,
syuilo's avatar
syuilo committed
			easterEggReady: false,
			easterEggEmojis: [],
			easterEggEngine: null,
syuilo's avatar
syuilo committed

syuilo's avatar
syuilo committed
	beforeUnmount() {
		if (this.easterEggEngine) {
			this.easterEggEngine.stop();
		}
	},

	methods: {
		iconLoaded() {
syuilo's avatar
syuilo committed
			const emojis = this.$store.state.reactions;
syuilo's avatar
syuilo committed
			const containerWidth = this.$refs.about.offsetWidth;
			for (let i = 0; i < 32; i++) {
				this.easterEggEmojis.push({
					id: i.toString(),
					top: -(128 + (Math.random() * 256)),
					left: (Math.random() * containerWidth),
					emoji: emojis[Math.floor(Math.random() * emojis.length)],
				});
			}

syuilo's avatar
syuilo committed
			this.$nextTick(() => {
				this.easterEggReady = true;
			});
		},

		gravity() {
			if (!this.easterEggReady) return;
			this.easterEggReady = false;
			this.easterEggEngine = physics(this.$refs.about);
		}
	}
syuilo's avatar
syuilo committed

<style lang="scss" scoped>
.znqjceqz {
	max-width: 800px;
	box-sizing: border-box;
	margin: 0 auto;
syuilo's avatar
syuilo committed

	> .about {
		> .panel {
			position: relative;
			text-align: center;
			padding: 16px;

			&.playing {
				&, * {
					user-select: none;
				}

				* {
					will-change: transform;
				}

				> .emoji {
					visibility: visible;
				}
			}

			> .icon {
				display: block;
				width: 100px;
				margin: 0 auto;
				border-radius: 16px;
			}

			> .misskey {
				margin: 0.75em auto 0 auto;
				width: max-content;
			}

			> .version {
				margin: 0 auto;
				width: max-content;
				opacity: 0.5;
			}

			> .emoji {
				position: absolute;
				top: 0;
				left: 0;
				visibility: hidden;

				> .emoji {
					pointer-events: none;
					font-size: 24px;
					width: 24px;
				}
			}
		}
	}
syuilo's avatar
syuilo committed
}
</style>