diff options
| author | syuilo <Syuilotan@yahoo.co.jp> | 2021-09-04 17:54:24 +0900 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-09-04 17:54:24 +0900 |
| commit | 8407702b38ead9fab4aab6698b9e0be1457218a0 (patch) | |
| tree | b7ed8987d1bacc19a4e6b8a829bf92bc70ee5d76 /src | |
| parent | Tune download (#2) (diff) | |
| download | misskey-8407702b38ead9fab4aab6698b9e0be1457218a0.tar.gz misskey-8407702b38ead9fab4aab6698b9e0be1457218a0.tar.bz2 misskey-8407702b38ead9fab4aab6698b9e0be1457218a0.zip | |
藍モード (#7687)
* wip
* wip
* シンボリックリンクやめた
* install lib dependency
* bring live2d assets from misskey-dev/assets
* refactor
* nanka iroiro
* コミット忘れ
* random motion
* wip
* run git submodule update --init
* コミット忘れ
* refactor
* fix bug
* Update misskey-assets
* lint
* lint
* lint
* 藍モード修正 (#7702)
* lazy load live2d script
* fix typo
* lazy load also widget
* hot link to cubism core
* https://github.com/misskey-dev/misskey/pull/7702/files#r695623821
* fix lint
* remove live2d stuff
* use iframe
* update
* Update gulpfile.ts
* update
* Update .gitattributes
* update
Co-authored-by: tamaina <tamaina@hotmail.co.jp>
Diffstat (limited to 'src')
| -rw-r--r-- | src/client/pages/settings/general.vue | 9 | ||||
| -rw-r--r-- | src/client/store.ts | 4 | ||||
| -rw-r--r-- | src/client/tsconfig.json | 3 | ||||
| -rw-r--r-- | src/client/ui/default.vue | 31 | ||||
| -rw-r--r-- | src/client/widgets/aichan.vue | 59 | ||||
| -rw-r--r-- | src/client/widgets/index.ts | 2 |
6 files changed, 106 insertions, 2 deletions
diff --git a/src/client/pages/settings/general.vue b/src/client/pages/settings/general.vue index cfa8107d28..f8e8e6b24b 100644 --- a/src/client/pages/settings/general.vue +++ b/src/client/pages/settings/general.vue @@ -45,6 +45,10 @@ </FormSwitch> </FormGroup> + <FormGroup> + <FormSwitch v-model:value="aiChanMode">{{ $ts.aiChanMode }}</FormSwitch> + </FormGroup> + <FormRadios v-model="fontSize"> <template #desc>{{ $ts.fontSize }}</template> <option value="small"><span style="font-size: 14px;">Aa</span></option> @@ -149,6 +153,7 @@ export default defineComponent({ enableInfiniteScroll: defaultStore.makeGetterSetter('enableInfiniteScroll'), useReactionPickerForContextMenu: defaultStore.makeGetterSetter('useReactionPickerForContextMenu'), squareAvatars: defaultStore.makeGetterSetter('squareAvatars'), + aiChanMode: defaultStore.makeGetterSetter('aiChanMode'), }, watch: { @@ -184,6 +189,10 @@ export default defineComponent({ this.reloadAsk(); }, + aiChanMode() { + this.reloadAsk(); + }, + showGapBetweenNotesInTimeline() { this.reloadAsk(); }, diff --git a/src/client/store.ts b/src/client/store.ts index 4c4a7d93e9..e4b762873d 100644 --- a/src/client/store.ts +++ b/src/client/store.ts @@ -210,6 +210,10 @@ export const defaultStore = markRaw(new Storage('base', { where: 'device', default: '' }, + aiChanMode: { + where: 'device', + default: false + }, })); // TODO: 他のタブと永続化されたstateを同期 diff --git a/src/client/tsconfig.json b/src/client/tsconfig.json index ac7ef7ddfc..7a26047ddf 100644 --- a/src/client/tsconfig.json +++ b/src/client/tsconfig.json @@ -21,7 +21,8 @@ "baseUrl": ".", "paths": { "@/*": ["../*"], - "@client/*": ["./*"] + "@client/*": ["./*"], + "@lib/*": ["../../lib/*"], }, "typeRoots": [ "node_modules/@types", diff --git a/src/client/ui/default.vue b/src/client/ui/default.vue index 23b63114cc..eef693faef 100644 --- a/src/client/ui/default.vue +++ b/src/client/ui/default.vue @@ -54,12 +54,14 @@ <XWidgets v-if="widgetsShowing" class="tray"/> </transition> + <iframe v-if="$store.state.aiChanMode" class="ivnzpscs" ref="live2d" src="https://misskey-dev.github.io/mascot-web/?scale=2&y=1.4"></iframe> + <XCommon/> </div> </template> <script lang="ts"> -import { defineComponent, defineAsyncComponent } from 'vue'; +import { defineComponent, defineAsyncComponent, markRaw } from 'vue'; import { instanceName } from '@client/config'; import { StickySidebar } from '@client/scripts/sticky-sidebar'; import XSidebar from './default.sidebar.vue'; @@ -131,6 +133,19 @@ export default defineComponent({ this.isMobile = (window.innerWidth <= MOBILE_THRESHOLD); this.isDesktop = (window.innerWidth >= DESKTOP_THRESHOLD); }, { passive: true }); + + if (this.$store.state.aiChanMode) { + const iframeRect = this.$refs.live2d.getBoundingClientRect(); + window.addEventListener('mousemove', ev => { + this.$refs.live2d.contentWindow.postMessage({ + type: 'moveCursor', + body: { + x: ev.clientX - iframeRect.left, + y: ev.clientY - iframeRect.top, + } + }, '*'); + }, { passive: true }); + } }, methods: { @@ -201,6 +216,10 @@ export default defineComponent({ } }], e); }, + + onAiClick(ev) { + //if (this.live2d) this.live2d.click(ev); + } } }); </script> @@ -458,5 +477,15 @@ export default defineComponent({ overflow: auto; background: var(--bg); } + + > .ivnzpscs { + position: fixed; + bottom: 0; + right: 0; + width: 300px; + height: 600px; + border: none; + pointer-events: none; + } } </style> diff --git a/src/client/widgets/aichan.vue b/src/client/widgets/aichan.vue new file mode 100644 index 0000000000..06c49090a1 --- /dev/null +++ b/src/client/widgets/aichan.vue @@ -0,0 +1,59 @@ +<template> +<MkContainer :naked="props.transparent" :show-header="false"> + <iframe class="dedjhjmo" ref="live2d" @click="touched" src="https://misskey-dev.github.io/mascot-web/?scale=1.5&y=1.1&eyeY=100"></iframe> +</MkContainer> +</template> + +<script lang="ts"> +import { defineComponent, markRaw } from 'vue'; +import define from './define'; +import MkContainer from '@client/components/ui/container.vue'; +import * as os from '@client/os'; + +const widget = define({ + name: 'ai', + props: () => ({ + transparent: { + type: 'boolean', + default: false, + }, + }) +}); + +export default defineComponent({ + extends: widget, + components: { + MkContainer, + }, + data() { + return { + }; + }, + mounted() { + window.addEventListener('mousemove', ev => { + const iframeRect = this.$refs.live2d.getBoundingClientRect(); + this.$refs.live2d.contentWindow.postMessage({ + type: 'moveCursor', + body: { + x: ev.clientX - iframeRect.left, + y: ev.clientY - iframeRect.top, + } + }, '*'); + }, { passive: true }); + }, + methods: { + touched() { + //if (this.live2d) this.live2d.changeExpression('gurugurume'); + } + } +}); +</script> + +<style lang="scss" scoped> +.dedjhjmo { + width: 100%; + height: 350px; + border: none; + pointer-events: none; +} +</style> diff --git a/src/client/widgets/index.ts b/src/client/widgets/index.ts index 38cb85494a..51a82af080 100644 --- a/src/client/widgets/index.ts +++ b/src/client/widgets/index.ts @@ -19,6 +19,7 @@ export default function(app: App) { app.component('MkwJobQueue', defineAsyncComponent(() => import('./job-queue.vue'))); app.component('MkwButton', defineAsyncComponent(() => import('./button.vue'))); app.component('MkwAiscript', defineAsyncComponent(() => import('./aiscript.vue'))); + app.component('MkwAichan', defineAsyncComponent(() => import('./aichan.vue'))); } export const widgets = [ @@ -40,4 +41,5 @@ export const widgets = [ 'jobQueue', 'button', 'aiscript', + 'aichan', ]; |