添付されたメディアのURLは省略して表示するように
This commit is contained in:
parent
e1672e539b
commit
89a58dc596
16
src/client/app/common/scripts/can-hide-text.ts
Normal file
16
src/client/app/common/scripts/can-hide-text.ts
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
export default function(note) {
|
||||||
|
if (note.text == null) return true;
|
||||||
|
|
||||||
|
let txt = note.text;
|
||||||
|
|
||||||
|
if (note.media) {
|
||||||
|
note.media.forEach(file => {
|
||||||
|
txt = txt.replace(file.url, '');
|
||||||
|
if (file.src) txt = txt.replace(file.src, '');
|
||||||
|
});
|
||||||
|
|
||||||
|
if (txt == '') return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
@ -44,7 +44,7 @@
|
|||||||
<div class="text">
|
<div class="text">
|
||||||
<span v-if="p.isHidden" style="opacity: 0.5">(この投稿は非公開です)</span>
|
<span v-if="p.isHidden" style="opacity: 0.5">(この投稿は非公開です)</span>
|
||||||
<a class="reply" v-if="p.reply">%fa:reply%</a>
|
<a class="reply" v-if="p.reply">%fa:reply%</a>
|
||||||
<mk-note-html v-if="p.text" :text="p.text" :i="os.i" :class="$style.text"/>
|
<mk-note-html v-if="p.text && !canHideText(p)" :text="p.text" :i="os.i" :class="$style.text"/>
|
||||||
<a class="rp" v-if="p.renote">RP:</a>
|
<a class="rp" v-if="p.renote">RP:</a>
|
||||||
</div>
|
</div>
|
||||||
<div class="media" v-if="p.media.length > 0">
|
<div class="media" v-if="p.media.length > 0">
|
||||||
@ -94,6 +94,7 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import Vue from 'vue';
|
import Vue from 'vue';
|
||||||
import dateStringify from '../../../common/scripts/date-stringify';
|
import dateStringify from '../../../common/scripts/date-stringify';
|
||||||
|
import canHideText from '../../../common/scripts/can-hide-text';
|
||||||
import parse from '../../../../../text/parse';
|
import parse from '../../../../../text/parse';
|
||||||
|
|
||||||
import MkPostFormWindow from './post-form-window.vue';
|
import MkPostFormWindow from './post-form-window.vue';
|
||||||
@ -130,16 +131,17 @@ export default Vue.extend({
|
|||||||
},
|
},
|
||||||
|
|
||||||
computed: {
|
computed: {
|
||||||
|
|
||||||
isRenote(): boolean {
|
isRenote(): boolean {
|
||||||
return (this.note.renote &&
|
return (this.note.renote &&
|
||||||
this.note.text == null &&
|
this.note.text == null &&
|
||||||
this.note.mediaIds.length == 0 &&
|
this.note.mediaIds.length == 0 &&
|
||||||
this.note.poll == null);
|
this.note.poll == null);
|
||||||
},
|
},
|
||||||
|
|
||||||
p(): any {
|
p(): any {
|
||||||
return this.isRenote ? this.note.renote : this.note;
|
return this.isRenote ? this.note.renote : this.note;
|
||||||
},
|
},
|
||||||
|
|
||||||
reactionsCount(): number {
|
reactionsCount(): number {
|
||||||
return this.p.reactionCounts
|
return this.p.reactionCounts
|
||||||
? Object.keys(this.p.reactionCounts)
|
? Object.keys(this.p.reactionCounts)
|
||||||
@ -147,9 +149,11 @@ export default Vue.extend({
|
|||||||
.reduce((a, b) => a + b)
|
.reduce((a, b) => a + b)
|
||||||
: 0;
|
: 0;
|
||||||
},
|
},
|
||||||
|
|
||||||
title(): string {
|
title(): string {
|
||||||
return dateStringify(this.p.createdAt);
|
return dateStringify(this.p.createdAt);
|
||||||
},
|
},
|
||||||
|
|
||||||
urls(): string[] {
|
urls(): string[] {
|
||||||
if (this.p.text) {
|
if (this.p.text) {
|
||||||
const ast = parse(this.p.text);
|
const ast = parse(this.p.text);
|
||||||
@ -205,6 +209,8 @@ export default Vue.extend({
|
|||||||
},
|
},
|
||||||
|
|
||||||
methods: {
|
methods: {
|
||||||
|
canHideText,
|
||||||
|
|
||||||
capture(withHandler = false) {
|
capture(withHandler = false) {
|
||||||
if ((this as any).os.isSignedIn) {
|
if ((this as any).os.isSignedIn) {
|
||||||
this.connection.send({
|
this.connection.send({
|
||||||
@ -214,6 +220,7 @@ export default Vue.extend({
|
|||||||
if (withHandler) this.connection.on('note-updated', this.onStreamNoteUpdated);
|
if (withHandler) this.connection.on('note-updated', this.onStreamNoteUpdated);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
decapture(withHandler = false) {
|
decapture(withHandler = false) {
|
||||||
if ((this as any).os.isSignedIn) {
|
if ((this as any).os.isSignedIn) {
|
||||||
this.connection.send({
|
this.connection.send({
|
||||||
@ -223,9 +230,11 @@ export default Vue.extend({
|
|||||||
if (withHandler) this.connection.off('note-updated', this.onStreamNoteUpdated);
|
if (withHandler) this.connection.off('note-updated', this.onStreamNoteUpdated);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
onStreamConnected() {
|
onStreamConnected() {
|
||||||
this.capture();
|
this.capture();
|
||||||
},
|
},
|
||||||
|
|
||||||
onStreamNoteUpdated(data) {
|
onStreamNoteUpdated(data) {
|
||||||
const note = data.note;
|
const note = data.note;
|
||||||
if (note.id == this.note.id) {
|
if (note.id == this.note.id) {
|
||||||
@ -234,28 +243,33 @@ export default Vue.extend({
|
|||||||
this.note.renote = note;
|
this.note.renote = note;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
reply() {
|
reply() {
|
||||||
(this as any).os.new(MkPostFormWindow, {
|
(this as any).os.new(MkPostFormWindow, {
|
||||||
reply: this.p
|
reply: this.p
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
renote() {
|
renote() {
|
||||||
(this as any).os.new(MkRenoteFormWindow, {
|
(this as any).os.new(MkRenoteFormWindow, {
|
||||||
note: this.p
|
note: this.p
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
react() {
|
react() {
|
||||||
(this as any).os.new(MkReactionPicker, {
|
(this as any).os.new(MkReactionPicker, {
|
||||||
source: this.$refs.reactButton,
|
source: this.$refs.reactButton,
|
||||||
note: this.p
|
note: this.p
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
menu() {
|
menu() {
|
||||||
(this as any).os.new(MkNoteMenu, {
|
(this as any).os.new(MkNoteMenu, {
|
||||||
source: this.$refs.menuButton,
|
source: this.$refs.menuButton,
|
||||||
note: this.p
|
note: this.p
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
onKeydown(e) {
|
onKeydown(e) {
|
||||||
let shouldBeCancel = true;
|
let shouldBeCancel = true;
|
||||||
|
|
||||||
|
@ -41,7 +41,7 @@
|
|||||||
<div class="text">
|
<div class="text">
|
||||||
<span v-if="p.isHidden" style="opacity: 0.5">(この投稿は非公開です)</span>
|
<span v-if="p.isHidden" style="opacity: 0.5">(この投稿は非公開です)</span>
|
||||||
<a class="reply" v-if="p.reply">%fa:reply%</a>
|
<a class="reply" v-if="p.reply">%fa:reply%</a>
|
||||||
<mk-note-html v-if="p.text" :text="p.text" :i="os.i" :class="$style.text"/>
|
<mk-note-html v-if="p.text && !canHideText(p)" :text="p.text" :i="os.i" :class="$style.text"/>
|
||||||
<a class="rp" v-if="p.renote != null">RP:</a>
|
<a class="rp" v-if="p.renote != null">RP:</a>
|
||||||
</div>
|
</div>
|
||||||
<div class="media" v-if="p.media.length > 0">
|
<div class="media" v-if="p.media.length > 0">
|
||||||
@ -85,6 +85,7 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import Vue from 'vue';
|
import Vue from 'vue';
|
||||||
import parse from '../../../../../text/parse';
|
import parse from '../../../../../text/parse';
|
||||||
|
import canHideText from '../../../common/scripts/can-hide-text';
|
||||||
|
|
||||||
import MkNoteMenu from '../../../common/views/components/note-menu.vue';
|
import MkNoteMenu from '../../../common/views/components/note-menu.vue';
|
||||||
import MkReactionPicker from '../../../common/views/components/reaction-picker.vue';
|
import MkReactionPicker from '../../../common/views/components/reaction-picker.vue';
|
||||||
@ -112,9 +113,11 @@ export default Vue.extend({
|
|||||||
this.note.mediaIds.length == 0 &&
|
this.note.mediaIds.length == 0 &&
|
||||||
this.note.poll == null);
|
this.note.poll == null);
|
||||||
},
|
},
|
||||||
|
|
||||||
p(): any {
|
p(): any {
|
||||||
return this.isRenote ? this.note.renote : this.note;
|
return this.isRenote ? this.note.renote : this.note;
|
||||||
},
|
},
|
||||||
|
|
||||||
reactionsCount(): number {
|
reactionsCount(): number {
|
||||||
return this.p.reactionCounts
|
return this.p.reactionCounts
|
||||||
? Object.keys(this.p.reactionCounts)
|
? Object.keys(this.p.reactionCounts)
|
||||||
@ -122,6 +125,7 @@ export default Vue.extend({
|
|||||||
.reduce((a, b) => a + b)
|
.reduce((a, b) => a + b)
|
||||||
: 0;
|
: 0;
|
||||||
},
|
},
|
||||||
|
|
||||||
urls(): string[] {
|
urls(): string[] {
|
||||||
if (this.p.text) {
|
if (this.p.text) {
|
||||||
const ast = parse(this.p.text);
|
const ast = parse(this.p.text);
|
||||||
@ -177,6 +181,8 @@ export default Vue.extend({
|
|||||||
},
|
},
|
||||||
|
|
||||||
methods: {
|
methods: {
|
||||||
|
canHideText,
|
||||||
|
|
||||||
capture(withHandler = false) {
|
capture(withHandler = false) {
|
||||||
if ((this as any).os.isSignedIn) {
|
if ((this as any).os.isSignedIn) {
|
||||||
this.connection.send({
|
this.connection.send({
|
||||||
@ -186,6 +192,7 @@ export default Vue.extend({
|
|||||||
if (withHandler) this.connection.on('note-updated', this.onStreamNoteUpdated);
|
if (withHandler) this.connection.on('note-updated', this.onStreamNoteUpdated);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
decapture(withHandler = false) {
|
decapture(withHandler = false) {
|
||||||
if ((this as any).os.isSignedIn) {
|
if ((this as any).os.isSignedIn) {
|
||||||
this.connection.send({
|
this.connection.send({
|
||||||
@ -195,9 +202,11 @@ export default Vue.extend({
|
|||||||
if (withHandler) this.connection.off('note-updated', this.onStreamNoteUpdated);
|
if (withHandler) this.connection.off('note-updated', this.onStreamNoteUpdated);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
onStreamConnected() {
|
onStreamConnected() {
|
||||||
this.capture();
|
this.capture();
|
||||||
},
|
},
|
||||||
|
|
||||||
onStreamNoteUpdated(data) {
|
onStreamNoteUpdated(data) {
|
||||||
const note = data.note;
|
const note = data.note;
|
||||||
if (note.id == this.note.id) {
|
if (note.id == this.note.id) {
|
||||||
@ -206,16 +215,19 @@ export default Vue.extend({
|
|||||||
this.note.renote = note;
|
this.note.renote = note;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
reply() {
|
reply() {
|
||||||
(this as any).apis.post({
|
(this as any).apis.post({
|
||||||
reply: this.p
|
reply: this.p
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
renote() {
|
renote() {
|
||||||
(this as any).apis.post({
|
(this as any).apis.post({
|
||||||
renote: this.p
|
renote: this.p
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
react() {
|
react() {
|
||||||
(this as any).os.new(MkReactionPicker, {
|
(this as any).os.new(MkReactionPicker, {
|
||||||
source: this.$refs.reactButton,
|
source: this.$refs.reactButton,
|
||||||
@ -223,6 +235,7 @@ export default Vue.extend({
|
|||||||
compact: true
|
compact: true
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
menu() {
|
menu() {
|
||||||
(this as any).os.new(MkNoteMenu, {
|
(this as any).os.new(MkNoteMenu, {
|
||||||
source: this.$refs.menuButton,
|
source: this.$refs.menuButton,
|
||||||
|
@ -154,6 +154,7 @@ export const pack = (
|
|||||||
|
|
||||||
_target = Object.assign(_target, _file.metadata);
|
_target = Object.assign(_target, _file.metadata);
|
||||||
|
|
||||||
|
_target.src = _file.metadata.url;
|
||||||
_target.url = `${config.drive_url}/${_target.id}/${encodeURIComponent(_target.name)}`;
|
_target.url = `${config.drive_url}/${_target.id}/${encodeURIComponent(_target.name)}`;
|
||||||
|
|
||||||
if (_target.properties == null) _target.properties = {};
|
if (_target.properties == null) _target.properties = {};
|
||||||
|
Loading…
Reference in New Issue
Block a user