154 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Vue
		
	
	
	
	
	
			
		
		
	
	
			154 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Vue
		
	
	
	
	
	
| <template>
 | |
| <div class="mk-welcome-timeline">
 | |
| 	<transition-group name="ldzpakcixzickvggyixyrhqwjaefknon" tag="div">
 | |
| 		<div v-for="note in notes" :key="note.id">
 | |
| 			<mk-avatar class="avatar" :user="note.user" target="_blank"/>
 | |
| 			<div class="body">
 | |
| 				<header>
 | |
| 					<router-link class="name" :to="note.user | userPage" v-user-preview="note.user.id">{{ note.user | userName }}</router-link>
 | |
| 					<span class="username">@{{ note.user | acct }}</span>
 | |
| 					<div class="info">
 | |
| 						<router-link class="created-at" :to="note | notePage">
 | |
| 							<mk-time :time="note.createdAt"/>
 | |
| 						</router-link>
 | |
| 					</div>
 | |
| 				</header>
 | |
| 				<div class="text">
 | |
| 					<misskey-flavored-markdown v-if="note.text" :text="note.text" :customEmojis="note.emojis"/>
 | |
| 				</div>
 | |
| 			</div>
 | |
| 		</div>
 | |
| 	</transition-group>
 | |
| </div>
 | |
| </template>
 | |
| 
 | |
| <script lang="ts">
 | |
| import Vue from 'vue';
 | |
| 
 | |
| export default Vue.extend({
 | |
| 	props: {
 | |
| 		max: {
 | |
| 			type: Number,
 | |
| 			required: false,
 | |
| 			default: undefined
 | |
| 		}
 | |
| 	},
 | |
| 
 | |
| 	data() {
 | |
| 		return {
 | |
| 			fetching: true,
 | |
| 			notes: [],
 | |
| 			connection: null
 | |
| 		};
 | |
| 	},
 | |
| 
 | |
| 	mounted() {
 | |
| 		this.fetch();
 | |
| 
 | |
| 		this.connection = (this as any).os.stream.useSharedConnection('localTimeline');
 | |
| 
 | |
| 		this.connection.on('note', this.onNote);
 | |
| 	},
 | |
| 
 | |
| 	beforeDestroy() {
 | |
| 		this.connection.dispose();
 | |
| 	},
 | |
| 
 | |
| 	methods: {
 | |
| 		fetch(cb?) {
 | |
| 			this.fetching = true;
 | |
| 			(this as any).api('notes', {
 | |
| 				limit: this.max,
 | |
| 				local: true,
 | |
| 				reply: false,
 | |
| 				renote: false,
 | |
| 				file: false,
 | |
| 				poll: false
 | |
| 			}).then(notes => {
 | |
| 				this.notes = notes;
 | |
| 				this.fetching = false;
 | |
| 			});
 | |
| 		},
 | |
| 
 | |
| 		onNote(note) {
 | |
| 			if (note.replyId != null) return;
 | |
| 			if (note.renoteId != null) return;
 | |
| 			if (note.poll != null) return;
 | |
| 
 | |
| 			this.notes.unshift(note);
 | |
| 		},
 | |
| 	}
 | |
| });
 | |
| </script>
 | |
| 
 | |
| <style lang="stylus" scoped>
 | |
| .ldzpakcixzickvggyixyrhqwjaefknon-enter
 | |
| .ldzpakcixzickvggyixyrhqwjaefknon-leave-to
 | |
| 	opacity 0
 | |
| 	transform translateY(-30px)
 | |
| 
 | |
| .mk-welcome-timeline
 | |
| 	background var(--face)
 | |
| 
 | |
| 	> div
 | |
| 		> *
 | |
| 			transition transform .3s ease, opacity .3s ease
 | |
| 
 | |
| 		> div
 | |
| 			padding 16px
 | |
| 			overflow-wrap break-word
 | |
| 			font-size .9em
 | |
| 			color var(--noteText)
 | |
| 			border-bottom 1px solid var(--faceDivider)
 | |
| 
 | |
| 			&:after
 | |
| 				content ""
 | |
| 				display block
 | |
| 				clear both
 | |
| 
 | |
| 			> .avatar
 | |
| 				display block
 | |
| 				float left
 | |
| 				position -webkit-sticky
 | |
| 				position sticky
 | |
| 				top 16px
 | |
| 				width 42px
 | |
| 				height 42px
 | |
| 				border-radius 6px
 | |
| 
 | |
| 			> .body
 | |
| 				float right
 | |
| 				width calc(100% - 42px)
 | |
| 				padding-left 12px
 | |
| 
 | |
| 				> header
 | |
| 					display flex
 | |
| 					align-items center
 | |
| 					margin-bottom 4px
 | |
| 					white-space nowrap
 | |
| 
 | |
| 					> .name
 | |
| 						display block
 | |
| 						margin 0 .5em 0 0
 | |
| 						padding 0
 | |
| 						overflow hidden
 | |
| 						font-weight bold
 | |
| 						text-overflow ellipsis
 | |
| 						color var(--noteHeaderName)
 | |
| 
 | |
| 					> .username
 | |
| 						margin 0 .5em 0 0
 | |
| 						color var(--noteHeaderAcct)
 | |
| 
 | |
| 					> .info
 | |
| 						margin-left auto
 | |
| 						font-size 0.9em
 | |
| 
 | |
| 						> .created-at
 | |
| 							color var(--noteHeaderInfo)
 | |
| 
 | |
| 				> .text
 | |
| 					text-align left
 | |
| 
 | |
| </style>
 | 
