藍モード (#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>
This commit is contained in:
		
							parent
							
								
									e1a8b158e0
								
							
						
					
					
						commit
						8407702b38
					
				
					 20 changed files with 158 additions and 34 deletions
				
			
		
							
								
								
									
										4
									
								
								.github/workflows/nodejs.yml
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								.github/workflows/nodejs.yml
									
										
									
									
										vendored
									
									
								
							|  | @ -29,6 +29,8 @@ jobs: | |||
| 
 | ||||
|     steps: | ||||
|     - uses: actions/checkout@v2 | ||||
|       with: | ||||
|         submodules: true | ||||
|     - name: Use Node.js ${{ matrix.node-version }} | ||||
|       uses: actions/setup-node@v1 | ||||
|       with: | ||||
|  | @ -48,6 +50,8 @@ jobs: | |||
|     runs-on: ubuntu-latest | ||||
|     steps: | ||||
|     - uses: actions/checkout@v2 | ||||
|       with: | ||||
|         submodules: true | ||||
|     - uses: actions/setup-node@v1 | ||||
|       with: | ||||
|         node-version: 12.x | ||||
|  |  | |||
							
								
								
									
										3
									
								
								.gitmodules
									
										
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								.gitmodules
									
										
									
									
										vendored
									
									
										Normal file
									
								
							|  | @ -0,0 +1,3 @@ | |||
| [submodule "misskey-assets"] | ||||
| 	path = misskey-assets | ||||
| 	url = https://github.com/misskey-dev/assets.git | ||||
|  | @ -20,6 +20,7 @@ RUN apk add --no-cache \ | |||
|     python3 \ | ||||
|     zlib-dev | ||||
| 
 | ||||
| RUN git submodule update --init | ||||
| COPY package.json yarn.lock .yarnrc ./ | ||||
| RUN yarn install | ||||
| COPY . ./ | ||||
|  |  | |||
|  | @ -83,10 +83,11 @@ Just `docker-compose up -d`. GLHF! | |||
| 1. `git stash` | ||||
| 2. `git checkout master` | ||||
| 3. `git pull` | ||||
| 4. `git stash pop` | ||||
| 5. `docker-compose build` | ||||
| 6. Check [ChangeLog](../CHANGELOG.md) for migration information | ||||
| 7. `docker-compose stop && docker-compose up -d` | ||||
| 4. `git submodule update --init` | ||||
| 5. `git stash pop` | ||||
| 6. `docker-compose build` | ||||
| 7. Check [ChangeLog](../CHANGELOG.md) for migration information | ||||
| 8. `docker-compose stop && docker-compose up -d` | ||||
| 
 | ||||
| ### How to execute [cli commands](manage.en.md): | ||||
| `docker-compose run --rm web node built/tools/mark-admin @example` | ||||
|  |  | |||
|  | @ -50,10 +50,11 @@ Utilisez la commande `docker-compose up -d`. GLHF! | |||
| 1. `git stash` | ||||
| 2. `git checkout master` | ||||
| 3. `git pull` | ||||
| 4. `git stash pop` | ||||
| 5. `docker-compose build` | ||||
| 6. Consultez le [ChangeLog](../CHANGELOG.md) pour avoir les éventuelles informations de migration | ||||
| 7. `docker-compose stop && docker-compose up -d` | ||||
| 4. `git submodule update --init` | ||||
| 5. `git stash pop` | ||||
| 6. `docker-compose build` | ||||
| 7. Consultez le [ChangeLog](../CHANGELOG.md) pour avoir les éventuelles informations de migration | ||||
| 8. `docker-compose stop && docker-compose up -d` | ||||
| 
 | ||||
| ### Comment exécuter des [commandes](manage.fr.md) | ||||
| `docker-compose run --rm web node built/tools/mark-admin @example` | ||||
|  |  | |||
|  | @ -83,10 +83,11 @@ docker-compose run --rm web yarn run init | |||
| 1. `git stash` | ||||
| 2. `git checkout master` | ||||
| 3. `git pull` | ||||
| 4. `git stash pop` | ||||
| 5. `docker-compose build` | ||||
| 6. [ChangeLog](../CHANGELOG.md)でマイグレーション情報を確認する | ||||
| 7. `docker-compose stop && docker-compose up -d` | ||||
| 4. `git submodule update --init` | ||||
| 5. `git stash pop` | ||||
| 6. `docker-compose build` | ||||
| 7. [ChangeLog](../CHANGELOG.md)でマイグレーション情報を確認する | ||||
| 8. `docker-compose stop && docker-compose up -d` | ||||
| 
 | ||||
| ### cliコマンドを実行する方法: | ||||
| 
 | ||||
|  |  | |||
|  | @ -83,10 +83,11 @@ docker-compose run --rm web yarn run init | |||
| 1. `git stash` | ||||
| 2. `git checkout master` | ||||
| 3. `git pull` | ||||
| 4. `git stash pop` | ||||
| 5. `docker-compose build` | ||||
| 6. 检查 [更新日志](../CHANGELOG.md) 以获取升级迁移信息。 | ||||
| 7. `docker-compose stop && docker-compose up -d` | ||||
| 4. `git submodule update --init` | ||||
| 5. `git stash pop` | ||||
| 6. `docker-compose build` | ||||
| 7. 检查 [更新日志](../CHANGELOG.md) 以获取升级迁移信息。 | ||||
| 8. `docker-compose stop && docker-compose up -d` | ||||
| 
 | ||||
| ### 如何执行 [控制台指令](manage.zh.md): | ||||
| `docker-compose run --rm web node built/tools/mark-admin @example` | ||||
|  |  | |||
|  | @ -131,11 +131,12 @@ You can check if the service is running with `systemctl status misskey`. | |||
| ### How to update your Misskey server to the latest version | ||||
| 1. `git checkout master` | ||||
| 2. `git pull` | ||||
| 3. `yarn install` | ||||
| 4. `NODE_ENV=production yarn build` | ||||
| 5. `yarn migrate` | ||||
| 6. Restart your Misskey process to apply changes | ||||
| 7. Enjoy | ||||
| 3. `git submodule update --init` | ||||
| 4. `yarn install` | ||||
| 5. `NODE_ENV=production yarn build` | ||||
| 6. `yarn migrate` | ||||
| 7. Restart your Misskey process to apply changes | ||||
| 8. Enjoy | ||||
| 
 | ||||
| If you encounter any problems with updating, please try the following: | ||||
| 1. `yarn clean` or `yarn cleanall` | ||||
|  |  | |||
|  | @ -126,9 +126,10 @@ Vous pouvez vérifier si le service a démarré en utilisant la commande `system | |||
| ### Méthode de mise à jour vers la plus récente version de Misskey | ||||
| 1. `git checkout master` | ||||
| 2. `git pull` | ||||
| 3. `yarn install` | ||||
| 4. `NODE_ENV=production yarn build` | ||||
| 5. `yarn migrate` | ||||
| 3. `git submodule update --init` | ||||
| 4. `yarn install` | ||||
| 5. `NODE_ENV=production yarn build` | ||||
| 6. `yarn migrate` | ||||
| 
 | ||||
| ---------------------------------------------------------------- | ||||
| 
 | ||||
|  |  | |||
|  | @ -133,9 +133,10 @@ yarn run init | |||
| ### Misskeyを最新バージョンにアップデートする方法: | ||||
| 1. `git checkout master` | ||||
| 2. `git pull` | ||||
| 3. `yarn install` | ||||
| 4. `NODE_ENV=production yarn build` | ||||
| 5. `yarn migrate` | ||||
| 3. `git submodule update --init` | ||||
| 4. `yarn install` | ||||
| 5. `NODE_ENV=production yarn build` | ||||
| 6. `yarn migrate` | ||||
| 
 | ||||
| なにか問題が発生した場合は、`yarn clean`または`yarn cleanall`すると直る場合があります。 | ||||
| 
 | ||||
|  |  | |||
|  | @ -131,11 +131,12 @@ yarn run init | |||
| ### 如何将您的 Misskey 服务器升级至最新版本 | ||||
| 1. `git checkout master` | ||||
| 2. `git pull` | ||||
| 3. `yarn install` | ||||
| 4. `NODE_ENV=production yarn build` | ||||
| 5. `yarn migrate` | ||||
| 6. 重启您的 Misskey 进程来应用改变。 | ||||
| 7. 尽情享受吧! | ||||
| 3. `git submodule update --init` | ||||
| 4. `yarn install` | ||||
| 5. `NODE_ENV=production yarn build` | ||||
| 6. `yarn migrate` | ||||
| 7. 重启您的 Misskey 进程来应用改变。 | ||||
| 8. 尽情享受吧! | ||||
| 
 | ||||
| 如果您在更新时遇到任何问题,请尝试以下操作: | ||||
| 1. `yarn clean` 或是 `yarn cleanall` | ||||
|  |  | |||
|  | @ -779,6 +779,7 @@ translate: "翻訳" | |||
| translatedFrom: "{x}から翻訳" | ||||
| accountDeletionInProgress: "アカウントの削除が進行中です" | ||||
| usernameInfo: "サーバー上であなたのアカウントを一意に識別するための名前。アルファベット(a~z, A~Z)、数字(0~9)、およびアンダーバー(_)が使用できます。ユーザー名は後から変更することは出来ません。" | ||||
| aiChanMode: "藍モード" | ||||
| keepCw: "CWを維持する" | ||||
| 
 | ||||
| _accountDelete: | ||||
|  | @ -1189,6 +1190,7 @@ _widgets: | |||
|   jobQueue: "ジョブキュー" | ||||
|   serverMetric: "サーバーメトリクス" | ||||
|   aiscript: "AiScriptコンソール" | ||||
|   aichan: "藍" | ||||
| 
 | ||||
| _cw: | ||||
|   hide: "隠す" | ||||
|  |  | |||
							
								
								
									
										1
									
								
								misskey-assets
									
										
									
									
									
										Submodule
									
								
							
							
						
						
									
										1
									
								
								misskey-assets
									
										
									
									
									
										Submodule
									
								
							|  | @ -0,0 +1 @@ | |||
| Subproject commit 0179793ec891856d6f37a3be16ba4c22f67a81b5 | ||||
|  | @ -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(); | ||||
| 		}, | ||||
|  |  | |||
|  | @ -210,6 +210,10 @@ export const defaultStore = markRaw(new Storage('base', { | |||
| 		where: 'device', | ||||
| 		default: '' | ||||
| 	}, | ||||
| 	aiChanMode: { | ||||
| 		where: 'device', | ||||
| 		default: false | ||||
| 	}, | ||||
| })); | ||||
| 
 | ||||
| // TODO: 他のタブと永続化されたstateを同期
 | ||||
|  |  | |||
|  | @ -21,7 +21,8 @@ | |||
| 		"baseUrl": ".", | ||||
| 		"paths": { | ||||
| 			"@/*": ["../*"], | ||||
| 			"@client/*": ["./*"] | ||||
| 			"@client/*": ["./*"], | ||||
| 			"@lib/*": ["../../lib/*"], | ||||
| 		}, | ||||
| 		"typeRoots": [ | ||||
| 			"node_modules/@types", | ||||
|  |  | |||
|  | @ -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> | ||||
|  |  | |||
							
								
								
									
										59
									
								
								src/client/widgets/aichan.vue
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										59
									
								
								src/client/widgets/aichan.vue
									
										
									
									
									
										Normal file
									
								
							|  | @ -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> | ||||
|  | @ -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', | ||||
| ]; | ||||
|  |  | |||
|  | @ -164,6 +164,7 @@ module.exports = { | |||
| 		], | ||||
| 		alias: { | ||||
| 			'@client': __dirname + '/src/client', | ||||
| 			'@lib': __dirname + '/lib', | ||||
| 			'@': __dirname + '/src', | ||||
| 			'const.styl': __dirname + '/src/client/const.styl' | ||||
| 		} | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue