diff options
| author | syuilo <Syuilotan@yahoo.co.jp> | 2020-10-17 20:12:00 +0900 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-10-17 20:12:00 +0900 |
| commit | 7199e6f4e0b3a2c2bc198e689c3e0cd0d0f0354a (patch) | |
| tree | 2263a06acec7fa21882366bae26d1a983ce21135 /src/client/pages/preferences/plugins.vue | |
| parent | CW の input でも投稿ショートカットが動作するように (#6690) (diff) | |
| download | misskey-7199e6f4e0b3a2c2bc198e689c3e0cd0d0f0354a.tar.gz misskey-7199e6f4e0b3a2c2bc198e689c3e0cd0d0f0354a.tar.bz2 misskey-7199e6f4e0b3a2c2bc198e689c3e0cd0d0f0354a.zip | |
Migrate to Vue3 (#6587)
* Update reaction.vue
* fix bug
* wip
* wip
* wjio
* wip
* Revert "wip"
This reverts commit e427f2160adf4e8a4147006e25a89854edab0033.
* wip
* wip
* wip
* Update init.ts
* Update drive-window.vue
* wip
* wip
* Use PascalCase for components
* Use PascalCase for components
* update dep
* wip
* wip
* wip
* Update init.ts
* wip
* Update paging.ts
* Update test.vue
* watch deep
* wip
* lint
* wip
* wip
* wip
* wip
* wiop
* wip
* Update webpack.config.ts
* alllow null poll
* wip
* wip
* wip
* wiop
* UI redesign & refactor (#6714)
* wip
* wip
* wip
* wip
* wip
* Update drive.vue
* Update word-mute.vue
* wip
* wip
* wip
* clean up
* wip
* Update default.vue
* wip
* Update notes.vue
* Update mfm.ts
* Update index.home.vue
* Update post-form.vue
* Update post-form-attaches.vue
* wip
* Update post-form.vue
* Update sidebar.vue
* wip
* wip
* Update index.vue
* wip
* Update default.vue
* Update index.vue
* Update index.vue
* wip
* Update post-form-attaches.vue
* Update note.vue
* wip
* clean up
* Update notes.vue
* wip
* wip
* Update ja-JP.yml
* wip
* wip
* Update index.vue
* wip
* wip
* wip
* wip
* wip
* wip
* wip
* wip
* Update default.vue
* wip
* Update _dark.json5
* wip
* wip
* wip
* clean up
* wip
* wip
* Update index.vue
* Update test.vue
* wip
* wip
* fix
* wip
* wip
* wip
* wip
* clena yop
* wip
* wip
* Update store.ts
* Update messaging-room.vue
* Update default.widgets.vue
* fix
* wip
* wip
* Update modal.vue
* wip
* Update os.ts
* Update os.ts
* Update deck.vue
* Update init.ts
* wip
* Update ja-JP.yml
* v-sizeは単にwindowのresizeを監視するだけで良いかもしれない
* Update modal.vue
* wip
* Update tooltip.ts
* wip
* wip
* wip
* wip
* wip
* Update image-viewer.vue
* wip
* wip
* Update style.scss
* Update style.scss
* Update visitor.vue
* wip
* Update init.ts
* Update init.ts
* wip
* wip
* Update visitor.vue
* Update visitor.vue
* Update visitor.vue
* Update visitor.vue
* wip
* wip
* Update modal.vue
* Update header.vue
* Update menu.vue
* Update about.vue
* Update about-misskey.vue
* wip
* wip
* Update visitor.vue
* Update tooltip.ts
* wip
* Update drive.vue
* wip
* Update style.scss
* Update header.vue
* wip
* wip
* Update users.user.vue
* Update announcements.vue
* wip
* wip
* wip
* Update emojis.vue
* wip
* Update emojis.vue
* Update style.scss
* Update users.vue
* wip
* Update style.scss
* wip
* Update welcome.entrance.vue
* Update radio.vue
* Update size.ts
* Update emoji-edit-dialog.vue
* wip
* Update emojis.vue
* wip
* Update emojis.vue
* Update emojis.vue
* Update emojis.vue
* wip
* wip
* wip
* wip
* Update file-dialog.vue
* wip
* wip
* Update token-generate-window.vue
* Update notification-setting-window.vue
* wip
* wip
* Update _error_.vue
* Update ja-JP.yml
* wip
* wip
* Update store.ts
* Update emojis.vue
* Update emojis.vue
* Update emojis.vue
* Update announcements.vue
* Update store.ts
* wip
* Update page-editor.vue
* wip
* wip
* Update modal.vue
* wip
* Update select-file.ts
* Update timeline.vue
* Update emojis.vue
* Update os.ts
* wip
* Update user-select.vue
* Update mfm.ts
* Update get-file-info.ts
* Update drive.vue
* Update init.ts
* Update mfm.ts
* wip
* wip
* Update window.vue
* Update note.vue
* wip
* wip
* Update user-info.vue
* wip
* wip
* wip
* wip
* wip
* Update header.vue
* Update header.vue
* wip
* Update explore.vue
* wip
* wip
* wip
* Update webpack.config.ts
* wip
* wip
* wip
* wip
* wip
* wip
* Update autocomplete.ts
* wip
* wip
* wip
* Update toast.vue
* wip
* Update post-form-dialog.vue
* wip
* wip
* wip
* wip
* wip
* Update users.vue
* wip
* Update explore.vue
* wip
* wip
* wip
* Update package.json
* wip
* Update icon-dialog.vue
* wip
* wip
* Update user-preview.ts
* wip
* wip
* wip
* wip
* wip
* Update instance.vue
* Update user-name.vue
* Update federation.vue
* Update instance.vue
* wip
* wip
* Update tag.vue
* wip
* wip
* wip
* wip
* wip
* Update instance.vue
* wip
* Update os.ts
* Update os.ts
* wip
* wip
* wip
* Update router.ts
* wip
* Update init.ts
* Update note.vue
* Update messages.vue
* wip
* wip
* wip
* wip
* wip
* google
* wip
* wip
* wip
* wip
* Update theme-editor.vue
* wip
* wip
* Update room.vue
* Update channel-editor.vue
* wip
* Update window.vue
* Update window.vue
* wip
* Update window.vue
* Update window.vue
* wip
* Update menu.vue
* wip
* wip
* wip
* wip
* Update messaging-room.vue
* wip
* Update post-form.vue
* Update default.widgets.vue
* Update window.vue
* wip
Diffstat (limited to 'src/client/pages/preferences/plugins.vue')
| -rw-r--r-- | src/client/pages/preferences/plugins.vue | 202 |
1 files changed, 0 insertions, 202 deletions
diff --git a/src/client/pages/preferences/plugins.vue b/src/client/pages/preferences/plugins.vue deleted file mode 100644 index 10f86de1e4..0000000000 --- a/src/client/pages/preferences/plugins.vue +++ /dev/null @@ -1,202 +0,0 @@ -<template> -<section class="_card"> - <div class="_title"><fa :icon="faPlug"/> {{ $t('plugins') }}</div> - <div class="_content"> - <details> - <summary><fa :icon="faDownload"/> {{ $t('install') }}</summary> - <mk-info warn>{{ $t('pluginInstallWarn') }}</mk-info> - <mk-textarea v-model="script" tall> - <span>{{ $t('script') }}</span> - </mk-textarea> - <mk-button @click="install()" primary><fa :icon="faSave"/> {{ $t('install') }}</mk-button> - </details> - </div> - <div class="_content"> - <details> - <summary><fa :icon="faFolderOpen"/> {{ $t('manage') }}</summary> - <mk-select v-model="selectedPluginId"> - <option v-for="x in $store.state.deviceUser.plugins" :value="x.id" :key="x.id">{{ x.name }}</option> - </mk-select> - <template v-if="selectedPlugin"> - <div style="margin: -8px 0 8px 0;"> - <mk-switch :value="selectedPlugin.active" @change="changeActive(selectedPlugin, $event)">{{ $t('makeActive') }}</mk-switch> - </div> - <div class="_keyValue"> - <div>{{ $t('version') }}:</div> - <div>{{ selectedPlugin.version }}</div> - </div> - <div class="_keyValue"> - <div>{{ $t('author') }}:</div> - <div>{{ selectedPlugin.author }}</div> - </div> - <div class="_keyValue"> - <div>{{ $t('description') }}:</div> - <div>{{ selectedPlugin.description }}</div> - </div> - <div style="margin-top: 8px;"> - <mk-button @click="config()" inline v-if="selectedPlugin.config"><fa :icon="faCog"/> {{ $t('settings') }}</mk-button> - <mk-button @click="uninstall()" inline><fa :icon="faTrashAlt"/> {{ $t('uninstall') }}</mk-button> - </div> - </template> - </details> - </div> -</section> -</template> - -<script lang="ts"> -import Vue from 'vue'; -import { AiScript, parse } from '@syuilo/aiscript'; -import { serialize } from '@syuilo/aiscript/built/serializer'; -import { v4 as uuid } from 'uuid'; -import { faPlug, faSave, faTrashAlt, faFolderOpen, faDownload, faCog } from '@fortawesome/free-solid-svg-icons'; -import MkButton from '../../components/ui/button.vue'; -import MkTextarea from '../../components/ui/textarea.vue'; -import MkSelect from '../../components/ui/select.vue'; -import MkInfo from '../../components/ui/info.vue'; -import MkSwitch from '../../components/ui/switch.vue'; - -export default Vue.extend({ - components: { - MkButton, - MkTextarea, - MkSelect, - MkInfo, - MkSwitch, - }, - - data() { - return { - script: '', - selectedPluginId: null, - faPlug, faSave, faTrashAlt, faFolderOpen, faDownload, faCog - } - }, - - computed: { - selectedPlugin() { - if (this.selectedPluginId == null) return null; - return this.$store.state.deviceUser.plugins.find(x => x.id === this.selectedPluginId); - }, - }, - - methods: { - async install() { - let ast; - try { - ast = parse(this.script); - } catch (e) { - this.$root.dialog({ - type: 'error', - text: 'Syntax error :(' - }); - return; - } - const meta = AiScript.collectMetadata(ast); - if (meta == null) { - this.$root.dialog({ - type: 'error', - text: 'No metadata found :(' - }); - return; - } - const data = meta.get(null); - if (data == null) { - this.$root.dialog({ - type: 'error', - text: 'No metadata found :(' - }); - return; - } - const { name, version, author, description, permissions, config } = data; - if (name == null || version == null || author == null) { - this.$root.dialog({ - type: 'error', - text: 'Required property not found :(' - }); - return; - } - - const token = permissions == null || permissions.length === 0 ? null : await new Promise(async (res, rej) => { - this.$root.new(await import('../../components/token-generate-window.vue').then(m => m.default), { - title: this.$t('tokenRequested'), - information: this.$t('pluginTokenRequestedDescription'), - initialName: name, - initialPermissions: permissions - }).$on('ok', async ({ name, permissions }) => { - const { token } = await this.$root.api('miauth/gen-token', { - session: null, - name: name, - permission: permissions, - }); - - res(token); - }); - }); - - this.$store.commit('deviceUser/installPlugin', { - id: uuid(), - meta: { - name, version, author, description, permissions, config - }, - token, - ast: serialize(ast) - }); - - this.$root.dialog({ - type: 'success', - iconOnly: true, autoClose: true - }); - - this.$nextTick(() => { - location.reload(); - }); - }, - - uninstall() { - this.$store.commit('deviceUser/uninstallPlugin', this.selectedPluginId); - this.$root.dialog({ - type: 'success', - iconOnly: true, autoClose: true - }); - this.$nextTick(() => { - location.reload(); - }); - }, - - // TODO: この処理をstore側にactionとして移動し、設定画面を開くAiScriptAPIを実装できるようにする - async config() { - const config = this.selectedPlugin.config; - for (const key in this.selectedPlugin.configData) { - config[key].default = this.selectedPlugin.configData[key]; - } - - const { canceled, result } = await this.$root.form(this.selectedPlugin.name, config); - if (canceled) return; - - this.$store.commit('deviceUser/configPlugin', { - id: this.selectedPluginId, - config: result - }); - - this.$nextTick(() => { - location.reload(); - }); - }, - - changeActive(plugin, active) { - this.$store.commit('deviceUser/changePluginActive', { - id: plugin.id, - active: active - }); - - this.$nextTick(() => { - location.reload(); - }); - } - }, -}); -</script> - -<style lang="scss" scoped> - -</style> |