Store texts as HTML
This commit is contained in:
		@@ -16,7 +16,7 @@
 | 
			
		||||
			</div>
 | 
			
		||||
		</header>
 | 
			
		||||
		<div class="body">
 | 
			
		||||
			<mk-post-html v-if="post.ast" :ast="post.ast" :i="os.i" :class="$style.text"/>
 | 
			
		||||
			<mk-post-html v-if="post.textHtml" :html="post.textHtml" :i="os.i" :class="$style.text"/>
 | 
			
		||||
			<div class="media" v-if="post.media > 0">
 | 
			
		||||
				<mk-media-list :media-list="post.media"/>
 | 
			
		||||
			</div>
 | 
			
		||||
 
 | 
			
		||||
@@ -38,7 +38,7 @@
 | 
			
		||||
			</router-link>
 | 
			
		||||
		</header>
 | 
			
		||||
		<div class="body">
 | 
			
		||||
			<mk-post-html :class="$style.text" v-if="p.ast" :ast="p.ast" :i="os.i"/>
 | 
			
		||||
			<mk-post-html :class="$style.text" v-if="p.text" ref="text" :text="p.text" :i="os.i"/>
 | 
			
		||||
			<div class="media" v-if="p.media.length > 0">
 | 
			
		||||
				<mk-media-list :media-list="p.media"/>
 | 
			
		||||
			</div>
 | 
			
		||||
@@ -109,6 +109,7 @@ export default Vue.extend({
 | 
			
		||||
			context: [],
 | 
			
		||||
			contextFetching: false,
 | 
			
		||||
			replies: [],
 | 
			
		||||
			urls: []
 | 
			
		||||
		};
 | 
			
		||||
	},
 | 
			
		||||
	computed: {
 | 
			
		||||
@@ -130,15 +131,6 @@ export default Vue.extend({
 | 
			
		||||
		},
 | 
			
		||||
		title(): string {
 | 
			
		||||
			return dateStringify(this.p.createdAt);
 | 
			
		||||
		},
 | 
			
		||||
		urls(): string[] {
 | 
			
		||||
			if (this.p.ast) {
 | 
			
		||||
				return this.p.ast
 | 
			
		||||
					.filter(t => (t.type == 'url' || t.type == 'link') && !t.silent)
 | 
			
		||||
					.map(t => t.url);
 | 
			
		||||
			} else {
 | 
			
		||||
				return null;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	},
 | 
			
		||||
	mounted() {
 | 
			
		||||
@@ -170,6 +162,21 @@ export default Vue.extend({
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	},
 | 
			
		||||
	watch: {
 | 
			
		||||
		post: {
 | 
			
		||||
			handler(newPost, oldPost) {
 | 
			
		||||
				if (!oldPost || newPost.text !== oldPost.text) {
 | 
			
		||||
					this.$nextTick(() => {
 | 
			
		||||
						const elements = this.$refs.text.$el.getElementsByTagName('a');
 | 
			
		||||
 | 
			
		||||
						this.urls = [].filter.call(elements, ({ origin }) => origin !== location.origin)
 | 
			
		||||
							.map(({ href }) => href);
 | 
			
		||||
					});
 | 
			
		||||
				}
 | 
			
		||||
			},
 | 
			
		||||
			immediate: true
 | 
			
		||||
		}
 | 
			
		||||
	},
 | 
			
		||||
	methods: {
 | 
			
		||||
		fetchContext() {
 | 
			
		||||
			this.contextFetching = true;
 | 
			
		||||
 
 | 
			
		||||
@@ -38,7 +38,7 @@
 | 
			
		||||
				</p>
 | 
			
		||||
				<div class="text">
 | 
			
		||||
					<a class="reply" v-if="p.reply">%fa:reply%</a>
 | 
			
		||||
					<mk-post-html v-if="p.ast" :ast="p.ast" :i="os.i" :class="$style.text"/>
 | 
			
		||||
					<mk-post-html v-if="p.textHtml" ref="text" :html="p.textHtml" :i="os.i" :class="$style.text"/>
 | 
			
		||||
					<a class="rp" v-if="p.repost">RP:</a>
 | 
			
		||||
				</div>
 | 
			
		||||
				<div class="media" v-if="p.media.length > 0">
 | 
			
		||||
@@ -112,7 +112,8 @@ export default Vue.extend({
 | 
			
		||||
		return {
 | 
			
		||||
			isDetailOpened: false,
 | 
			
		||||
			connection: null,
 | 
			
		||||
			connectionId: null
 | 
			
		||||
			connectionId: null,
 | 
			
		||||
			urls: []
 | 
			
		||||
		};
 | 
			
		||||
	},
 | 
			
		||||
	computed: {
 | 
			
		||||
@@ -140,15 +141,6 @@ export default Vue.extend({
 | 
			
		||||
		},
 | 
			
		||||
		url(): string {
 | 
			
		||||
			return `/@${this.acct}/${this.p.id}`;
 | 
			
		||||
		},
 | 
			
		||||
		urls(): string[] {
 | 
			
		||||
			if (this.p.ast) {
 | 
			
		||||
				return this.p.ast
 | 
			
		||||
					.filter(t => (t.type == 'url' || t.type == 'link') && !t.silent)
 | 
			
		||||
					.map(t => t.url);
 | 
			
		||||
			} else {
 | 
			
		||||
				return null;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	},
 | 
			
		||||
	created() {
 | 
			
		||||
@@ -190,6 +182,21 @@ export default Vue.extend({
 | 
			
		||||
			(this as any).os.stream.dispose(this.connectionId);
 | 
			
		||||
		}
 | 
			
		||||
	},
 | 
			
		||||
	watch: {
 | 
			
		||||
		post: {
 | 
			
		||||
			handler(newPost, oldPost) {
 | 
			
		||||
				if (!oldPost || newPost.textHtml !== oldPost.textHtml) {
 | 
			
		||||
					this.$nextTick(() => {
 | 
			
		||||
						const elements = this.$refs.text.$el.getElementsByTagName('a');
 | 
			
		||||
 | 
			
		||||
						this.urls = [].filter.call(elements, ({ origin }) => origin !== location.origin)
 | 
			
		||||
							.map(({ href }) => href);
 | 
			
		||||
					});
 | 
			
		||||
				}
 | 
			
		||||
			},
 | 
			
		||||
			immediate: true
 | 
			
		||||
		}
 | 
			
		||||
	},
 | 
			
		||||
	methods: {
 | 
			
		||||
		capture(withHandler = false) {
 | 
			
		||||
			if ((this as any).os.isSignedIn) {
 | 
			
		||||
@@ -450,7 +457,7 @@ export default Vue.extend({
 | 
			
		||||
					font-size 1.1em
 | 
			
		||||
					color #717171
 | 
			
		||||
 | 
			
		||||
					>>> .quote
 | 
			
		||||
					>>> blockquote
 | 
			
		||||
						margin 8px
 | 
			
		||||
						padding 6px 12px
 | 
			
		||||
						color #aaa
 | 
			
		||||
 
 | 
			
		||||
@@ -2,7 +2,7 @@
 | 
			
		||||
<div class="mk-sub-post-content">
 | 
			
		||||
	<div class="body">
 | 
			
		||||
		<a class="reply" v-if="post.replyId">%fa:reply%</a>
 | 
			
		||||
		<mk-post-html :ast="post.ast" :i="os.i"/>
 | 
			
		||||
		<mk-post-html ref="text" :html="post.textHtml" :i="os.i"/>
 | 
			
		||||
		<a class="rp" v-if="post.repostId" :href="`/post:${post.repostId}`">RP: ...</a>
 | 
			
		||||
	</div>
 | 
			
		||||
	<details v-if="post.media.length > 0">
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user