diff options
| author | syuilo <syuilotan@yahoo.co.jp> | 2018-06-16 18:42:49 +0900 |
|---|---|---|
| committer | syuilo <syuilotan@yahoo.co.jp> | 2018-06-16 18:42:49 +0900 |
| commit | 555a0f276cfabfc5288bb76bdf1274cf9e7fb8d4 (patch) | |
| tree | 030dfd1736ef4e13f36e9e773f9e5c23beebd372 /src/client/app | |
| parent | 3.0.1 (diff) | |
| download | sharkey-555a0f276cfabfc5288bb76bdf1274cf9e7fb8d4.tar.gz sharkey-555a0f276cfabfc5288bb76bdf1274cf9e7fb8d4.tar.bz2 sharkey-555a0f276cfabfc5288bb76bdf1274cf9e7fb8d4.zip | |
MisskeyShare
Diffstat (limited to 'src/client/app')
| -rw-r--r-- | src/client/app/desktop/api/choose-drive-file.ts | 2 | ||||
| -rw-r--r-- | src/client/app/desktop/script.ts | 2 | ||||
| -rw-r--r-- | src/client/app/desktop/views/components/post-form.vue | 48 | ||||
| -rw-r--r-- | src/client/app/desktop/views/pages/share.vue | 58 | ||||
| -rw-r--r-- | src/client/app/mobile/script.ts | 2 | ||||
| -rw-r--r-- | src/client/app/mobile/views/components/index.ts | 2 | ||||
| -rw-r--r-- | src/client/app/mobile/views/components/post-form.vue | 30 | ||||
| -rw-r--r-- | src/client/app/mobile/views/pages/share.vue | 56 |
8 files changed, 185 insertions, 15 deletions
diff --git a/src/client/app/desktop/api/choose-drive-file.ts b/src/client/app/desktop/api/choose-drive-file.ts index 3d0004b741..a362a1289b 100644 --- a/src/client/app/desktop/api/choose-drive-file.ts +++ b/src/client/app/desktop/api/choose-drive-file.ts @@ -21,7 +21,7 @@ export default (os: OS) => opts => { res(file); }; - window.open(url + '/selectdrive', + window.open(url + `/selectdrive?multiple=${o.multiple}`, 'choose_drive_window', 'height=500, width=800'); } diff --git a/src/client/app/desktop/script.ts b/src/client/app/desktop/script.ts index 8b1623ce45..076d532d6d 100644 --- a/src/client/app/desktop/script.ts +++ b/src/client/app/desktop/script.ts @@ -35,6 +35,7 @@ import MkNote from './views/pages/note.vue'; import MkSearch from './views/pages/search.vue'; import MkTag from './views/pages/tag.vue'; import MkOthello from './views/pages/othello.vue'; +import MkShare from './views/pages/share.vue'; /** * init @@ -62,6 +63,7 @@ init(async (launch) => { { path: '/selectdrive', component: MkSelectDrive }, { path: '/search', component: MkSearch }, { path: '/tags/:tag', component: MkTag }, + { path: '/share', component: MkShare }, { path: '/othello', component: MkOthello }, { path: '/othello/:game', component: MkOthello }, { path: '/@:user', component: MkUser }, diff --git a/src/client/app/desktop/views/components/post-form.vue b/src/client/app/desktop/views/components/post-form.vue index a0670a084e..33f2288e06 100644 --- a/src/client/app/desktop/views/components/post-form.vue +++ b/src/client/app/desktop/views/components/post-form.vue @@ -58,7 +58,25 @@ export default Vue.extend({ MkVisibilityChooser }, - props: ['reply', 'renote'], + props: { + reply: { + type: Object, + required: false + }, + renote: { + type: Object, + required: false + }, + initialText: { + type: String, + required: false + }, + instant: { + type: Boolean, + required: false, + default: false + } + }, data() { return { @@ -118,6 +136,10 @@ export default Vue.extend({ }, mounted() { + if (this.initialText) { + this.text = this.initialText; + } + if (this.reply && this.reply.user.host != null) { this.text = `@${this.reply.user.username}@${this.reply.user.host} `; } @@ -141,17 +163,19 @@ export default Vue.extend({ this.$nextTick(() => { // 書きかけの投稿を復元 - const draft = JSON.parse(localStorage.getItem('drafts') || '{}')[this.draftId]; - if (draft) { - this.text = draft.data.text; - this.files = draft.data.files; - if (draft.data.poll) { - this.poll = true; - this.$nextTick(() => { - (this.$refs.poll as any).set(draft.data.poll); - }); + if (!this.instant) { + const draft = JSON.parse(localStorage.getItem('drafts') || '{}')[this.draftId]; + if (draft) { + this.text = draft.data.text; + this.files = draft.data.files; + if (draft.data.poll) { + this.poll = true; + this.$nextTick(() => { + (this.$refs.poll as any).set(draft.data.poll); + }); + } + this.$emit('change-attached-media', this.files); } - this.$emit('change-attached-media', this.files); } this.$nextTick(() => this.watch()); @@ -349,6 +373,8 @@ export default Vue.extend({ }, saveDraft() { + if (this.instant) return; + const data = JSON.parse(localStorage.getItem('drafts') || '{}'); data[this.draftId] = { diff --git a/src/client/app/desktop/views/pages/share.vue b/src/client/app/desktop/views/pages/share.vue new file mode 100644 index 0000000000..e60434074a --- /dev/null +++ b/src/client/app/desktop/views/pages/share.vue @@ -0,0 +1,58 @@ +<template> +<div class="pptjhabgjtt7kwskbfv4y3uml6fpuhmr"> + <h1>Misskeyで共有</h1> + <div> + <mk-signin v-if="!$store.getters.isSignedIn"/> + <mk-post-form v-else-if="!posted" :initial-text="text" :instant="true" @posted="posted = true"/> + <p v-if="posted" class="posted">%fa:check%</p> + </div> + <button v-if="posted" class="ui button" @click="close">閉じる</button> +</div> +</template> + +<script lang="ts"> +import Vue from 'vue'; + +export default Vue.extend({ + data() { + return { + posted: false, + text: new URLSearchParams(location.search).get('text') + }; + }, + methods: { + close() { + window.close(); + } + } +}); +</script> + +<style lang="stylus" scoped> +.pptjhabgjtt7kwskbfv4y3uml6fpuhmr + padding 16px + + > h1 + margin 0 0 8px 0 + color #555 + font-size 20px + text-align center + + > div + max-width 500px + margin 0 auto + background #fff + border solid 1px rgba(#000, 0.1) + border-radius 6px + overflow hidden + + > .posted + display block + margin 0 + padding 64px + text-align center + + > button + display block + margin 16px auto +</style> diff --git a/src/client/app/mobile/script.ts b/src/client/app/mobile/script.ts index 8ee078d621..1572fd73ed 100644 --- a/src/client/app/mobile/script.ts +++ b/src/client/app/mobile/script.ts @@ -37,6 +37,7 @@ import MkUserList from './views/pages/user-list.vue'; import MkSettings from './views/pages/settings.vue'; import MkOthello from './views/pages/othello.vue'; import MkTag from './views/pages/tag.vue'; +import MkShare from './views/pages/share.vue'; /** * init @@ -73,6 +74,7 @@ init((launch) => { { path: '/selectdrive', component: MkSelectDrive }, { path: '/search', component: MkSearch }, { path: '/tags/:tag', component: MkTag }, + { path: '/share', component: MkShare }, { path: '/othello', name: 'othello', component: MkOthello }, { path: '/othello/:game', component: MkOthello }, { path: '/@:user', component: MkUser }, diff --git a/src/client/app/mobile/views/components/index.ts b/src/client/app/mobile/views/components/index.ts index 5ed8427b05..38c130ecbf 100644 --- a/src/client/app/mobile/views/components/index.ts +++ b/src/client/app/mobile/views/components/index.ts @@ -22,6 +22,7 @@ import userTimeline from './user-timeline.vue'; import userListTimeline from './user-list-timeline.vue'; import activity from './activity.vue'; import widgetContainer from './widget-container.vue'; +import postForm from './post-form.vue'; Vue.component('mk-ui', ui); Vue.component('mk-note', note); @@ -45,3 +46,4 @@ Vue.component('mk-user-timeline', userTimeline); Vue.component('mk-user-list-timeline', userListTimeline); Vue.component('mk-activity', activity); Vue.component('mk-widget-container', widgetContainer); +Vue.component('mk-post-form', postForm); diff --git a/src/client/app/mobile/views/components/post-form.vue b/src/client/app/mobile/views/components/post-form.vue index 88853fa236..62fa185085 100644 --- a/src/client/app/mobile/views/components/post-form.vue +++ b/src/client/app/mobile/views/components/post-form.vue @@ -54,7 +54,25 @@ export default Vue.extend({ MkVisibilityChooser }, - props: ['reply', 'renote'], + props: { + reply: { + type: Object, + required: false + }, + renote: { + type: Object, + required: false + }, + initialText: { + type: String, + required: false + }, + instant: { + type: Boolean, + required: false, + default: false + } + }, data() { return { @@ -112,6 +130,10 @@ export default Vue.extend({ }, mounted() { + if (this.initialText) { + this.text = this.initialText; + } + if (this.reply && this.reply.user.host != null) { this.text = `@${this.reply.user.username}@${this.reply.user.host} `; } @@ -252,8 +274,10 @@ export default Vue.extend({ visibleUserIds: this.visibility == 'specified' ? this.visibleUsers.map(u => u.id) : undefined, viaMobile: viaMobile }).then(data => { - this.$emit('note'); - this.$destroy(); + this.$emit('posted'); + this.$nextTick(() => { + this.$destroy(); + }); }).catch(err => { this.posting = false; }); diff --git a/src/client/app/mobile/views/pages/share.vue b/src/client/app/mobile/views/pages/share.vue new file mode 100644 index 0000000000..c69498007d --- /dev/null +++ b/src/client/app/mobile/views/pages/share.vue @@ -0,0 +1,56 @@ +<template> +<div class="azibmfpleajagva420swmu4c3r7ni7iw"> + <h1>Misskeyで共有</h1> + <div> + <mk-signin v-if="!$store.getters.isSignedIn"/> + <mk-post-form v-else-if="!posted" :initial-text="text" :instant="true" @posted="posted = true"/> + <p v-if="posted" class="posted">%fa:check%</p> + </div> + <ui-button class="close" v-if="posted" @click="close">閉じる</ui-button> +</div> +</template> + +<script lang="ts"> +import Vue from 'vue'; + +export default Vue.extend({ + data() { + return { + posted: false, + text: new URLSearchParams(location.search).get('text') + }; + }, + methods: { + close() { + window.close(); + } + } +}); +</script> + +<style lang="stylus" scoped> +.azibmfpleajagva420swmu4c3r7ni7iw + > h1 + margin 8px 0 + color #555 + font-size 20px + text-align center + + > div + max-width 500px + margin 0 auto + + > .posted + display block + margin 0 auto + padding 64px + text-align center + background #fff + border-radius 6px + width calc(100% - 32px) + + > .close + display block + margin 16px auto + width calc(100% - 32px) +</style> |