summaryrefslogtreecommitdiff
path: root/src/client/app
diff options
context:
space:
mode:
Diffstat (limited to 'src/client/app')
-rw-r--r--src/client/app/common/views/components/note-header.vue6
-rw-r--r--src/client/app/common/views/components/visibility-chooser.vue18
-rw-r--r--src/client/app/desktop/views/components/note.vue24
-rw-r--r--src/client/app/desktop/views/components/post-form.vue16
-rw-r--r--src/client/app/mobile/views/components/note.vue24
-rw-r--r--src/client/app/mobile/views/components/post-form.vue11
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');