diff options
| author | MeiMei <30769358+mei23@users.noreply.github.com> | 2018-11-16 05:47:29 +0900 |
|---|---|---|
| committer | syuilo <Syuilotan@yahoo.co.jp> | 2018-11-16 05:47:29 +0900 |
| commit | bceb02d760f53877f0f677144bc468ffbc4e66f2 (patch) | |
| tree | cc12d9836b81deecead9417c8fd6df635784fefd /src/client | |
| parent | [Client] Add missing icon (diff) | |
| download | sharkey-bceb02d760f53877f0f677144bc468ffbc4e66f2.tar.gz sharkey-bceb02d760f53877f0f677144bc468ffbc4e66f2.tar.bz2 sharkey-bceb02d760f53877f0f677144bc468ffbc4e66f2.zip | |
local only visibility (#3254)
* local only visibility
* fix UI
Diffstat (limited to 'src/client')
6 files changed, 91 insertions, 8 deletions
diff --git a/src/client/app/common/views/components/note-header.vue b/src/client/app/common/views/components/note-header.vue index 2c7ae0194c..012b678ab3 100644 --- a/src/client/app/common/views/components/note-header.vue +++ b/src/client/app/common/views/components/note-header.vue @@ -19,6 +19,9 @@ <template v-if="note.visibility == 'specified'"><fa icon="envelope"/></template> <template v-if="note.visibility == 'private'"><fa icon="lock"/></template> </span> + <span class="localOnly" v-if="note.localOnly == true"> + <template><fa icon="heart"/></template> + </span> </div> </header> </template> @@ -115,4 +118,7 @@ export default Vue.extend({ > .visibility margin-left 8px + > .localOnly + margin-left 4px + </style> diff --git a/src/client/app/common/views/components/visibility-chooser.vue b/src/client/app/common/views/components/visibility-chooser.vue index 896be039b3..0335fba0ee 100644 --- a/src/client/app/common/views/components/visibility-chooser.vue +++ b/src/client/app/common/views/components/visibility-chooser.vue @@ -35,6 +35,24 @@ <span>{{ $t('private') }}</span> </div> </div> + <div @click="choose('local-public')" :class="{ active: v == 'local-public' }"> + <div><fa icon="globe"/></div> + <div> + <span>{{ $t('local-public') }}</span> + </div> + </div> + <div @click="choose('local-home')" :class="{ active: v == 'local-home' }"> + <div><fa icon="home"/></div> + <div> + <span>{{ $t('local-home') }}</span> + </div> + </div> + <div @click="choose('local-followers')" :class="{ active: v == 'local-followers' }"> + <div><fa icon="unlock"/></div> + <div> + <span>{{ $t('local-followers') }}</span> + </div> + </div> </div> </div> </template> diff --git a/src/client/app/desktop/views/components/note.vue b/src/client/app/desktop/views/components/note.vue index e2b67c150f..6bd4674269 100644 --- a/src/client/app/desktop/views/components/note.vue +++ b/src/client/app/desktop/views/components/note.vue @@ -20,6 +20,15 @@ <router-link class="name" :to="note.user | userPage" v-user-preview="note.userId">{{ note.user | userName }}</router-link> <span>{{ this.$t('reposted-by').substr(this.$t('reposted-by').indexOf('}') + 1) }}</span> <mk-time :time="note.createdAt"/> + <span class="visibility" v-if="note.visibility != 'public'"> + <template v-if="note.visibility == 'home'"><fa icon="home"/></template> + <template v-if="note.visibility == 'followers'"><fa icon="unlock"/></template> + <template v-if="note.visibility == 'specified'"><fa icon="envelope"/></template> + <template v-if="note.visibility == 'private'"><fa icon="lock"/></template> + </span> + <span class="localOnly" v-if="note.localOnly == true"> + <template><fa icon="heart"/></template> + </span> </div> <article> <mk-avatar class="avatar" :user="appearNote.user"/> @@ -199,9 +208,6 @@ export default Vue.extend({ > span flex-shrink 0 - &:last-of-type - margin-right 8px - .name overflow hidden flex-shrink 1 @@ -215,6 +221,18 @@ export default Vue.extend({ flex-shrink 0 font-size 0.9em + > .visibility + margin-left 8px + + [data-icon] + margin-right 0 + + > .localOnly + margin-left 4px + + [data-icon] + margin-right 0 + & + article padding-top 8px diff --git a/src/client/app/desktop/views/components/post-form.vue b/src/client/app/desktop/views/components/post-form.vue index e05fab168c..02478b4eb3 100644 --- a/src/client/app/desktop/views/components/post-form.vue +++ b/src/client/app/desktop/views/components/post-form.vue @@ -14,6 +14,7 @@ <b>{{ $t('recent-tags') }}:</b> <a v-for="tag in recentHashtags.slice(0, 5)" @click="addTag(tag)" :title="$t('click-to-tagging')">#{{ tag }}</a> </div> + <div class="local-only" v-if="this.localOnly == true">{{ $t('local-only-message') }}</div> <input v-show="useCw" v-model="cw" :placeholder="$t('annotations')"> <div class="textarea"> <textarea :class="{ with: (files.length != 0 || poll) }" @@ -112,6 +113,7 @@ export default Vue.extend({ geo: null, visibility: this.$store.state.settings.rememberNoteVisibility ? (this.$store.state.device.visibility || this.$store.state.settings.defaultNoteVisibility) : this.$store.state.settings.defaultNoteVisibility, visibleUsers: [], + localOnly: false, autocomplete: null, draghover: false, recentHashtags: JSON.parse(localStorage.getItem('hashtags') || '[]'), @@ -363,7 +365,14 @@ export default Vue.extend({ source: this.$refs.visibilityButton }); w.$once('chosen', v => { - this.visibility = v; + const m = v.match(/^local-(.+)/); + if (m) { + this.localOnly = true; + this.visibility = m[1]; + } else { + this.localOnly = false; + this.visibility = v; + } }); }, @@ -407,6 +416,7 @@ export default Vue.extend({ cw: this.useCw ? this.cw || '' : undefined, visibility: this.visibility, visibleUserIds: this.visibility == 'specified' ? this.visibleUsers.map(u => u.id) : undefined, + localOnly: this.localOnly, geo: this.geo ? { coordinates: [this.geo.longitude, this.geo.latitude], altitude: this.geo.altitude, @@ -640,6 +650,10 @@ export default Vue.extend({ margin-right 8px white-space nowrap + > .local-only + margin 0 0 8px 0 + color var(--primary) + > .mk-uploader margin 8px 0 0 0 padding 8px diff --git a/src/client/app/mobile/views/components/note.vue b/src/client/app/mobile/views/components/note.vue index d42efbf344..38fab0e5a1 100644 --- a/src/client/app/mobile/views/components/note.vue +++ b/src/client/app/mobile/views/components/note.vue @@ -16,6 +16,15 @@ <router-link class="name" :to="note.user | userPage">{{ note.user | userName }}</router-link> <span>{{ this.$t('reposted-by').substr(this.$t('reposted-by').indexOf('}') + 1) }}</span> <mk-time :time="note.createdAt"/> + <span class="visibility" v-if="note.visibility != 'public'"> + <template v-if="note.visibility == 'home'"><fa icon="home"/></template> + <template v-if="note.visibility == 'followers'"><fa icon="unlock"/></template> + <template v-if="note.visibility == 'specified'"><fa icon="envelope"/></template> + <template v-if="note.visibility == 'private'"><fa icon="lock"/></template> + </span> + <span class="localOnly" v-if="note.localOnly == true"> + <template><fa icon="heart"/></template> + </span> </div> <article> <mk-avatar class="avatar" :user="appearNote.user" v-if="$store.state.device.postStyle != 'smart'"/> @@ -163,9 +172,6 @@ export default Vue.extend({ > span flex-shrink 0 - &:last-of-type - margin-right 8px - .name overflow hidden flex-shrink 1 @@ -179,6 +185,18 @@ export default Vue.extend({ flex-shrink 0 font-size 0.9em + > .visibility + margin-left 8px + + [data-icon] + margin-right 0 + + > .localOnly + margin-left 4px + + [data-icon] + margin-right 0 + & + article padding-top 8px diff --git a/src/client/app/mobile/views/components/post-form.vue b/src/client/app/mobile/views/components/post-form.vue index df7a5c5a04..f941c59d9f 100644 --- a/src/client/app/mobile/views/components/post-form.vue +++ b/src/client/app/mobile/views/components/post-form.vue @@ -102,6 +102,7 @@ export default Vue.extend({ geo: null, visibility: this.$store.state.settings.rememberNoteVisibility ? (this.$store.state.device.visibility || this.$store.state.settings.defaultNoteVisibility) : this.$store.state.settings.defaultNoteVisibility, visibleUsers: [], + localOnly: false, useCw: false, cw: null, recentHashtags: JSON.parse(localStorage.getItem('hashtags') || '[]'), @@ -274,7 +275,14 @@ export default Vue.extend({ compact: true }); w.$once('chosen', v => { - this.visibility = v; + const m = v.match(/^local-(.+)/); + if (m) { + this.localOnly = true; + this.visibility = m[1]; + } else { + this.localOnly = false; + this.visibility = v; + } }); }, @@ -320,6 +328,7 @@ export default Vue.extend({ } : null, visibility: this.visibility, visibleUserIds: this.visibility == 'specified' ? this.visibleUsers.map(u => u.id) : undefined, + localOnly: this.localOnly, viaMobile: viaMobile }).then(data => { this.$emit('posted'); |