123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118 |
- <template>
- <div>
- <div class="mb-4">
- <p class="text-center">
- <!-- <a :class="[tab == 'popular'? 'btn font-weight-bold py-0 btn-success' : 'btn font-weight-bold py-0 btn-outline-success']" href="#" @click.prevent="setTab('popular')">Popular</a> -->
- <a :class="[tab == 'new'? 'btn font-weight-bold py-0 btn-success' : 'btn font-weight-bold py-0 btn-outline-success']" href="#" @click.prevent="setTab('new')">New</a>
- <!-- <a :class="[tab == 'random'? 'btn font-weight-bold py-0 btn-success' : 'btn font-weight-bold py-0 btn-outline-success']" href="#" @click.prevent="setTab('random')">Random</a> -->
- <a :class="[tab == 'about'? 'btn font-weight-bold py-0 btn-success' : 'btn font-weight-bold py-0 btn-outline-success']" href="#" @click.prevent="setTab('about')">About</a>
- </p>
- </div>
- <div v-if="tab != 'about'" class="row loops-container">
- <div class="col-12 col-md-4 mb-3" v-for="(loop, index) in loops">
- <div class="card border border-success">
- <div class="embed-responsive embed-responsive-1by1">
- <video class="embed-responsive-item" :src="videoSrc(loop)" preload="none" width="100%" height="100%" loop @click="toggleVideo(loop, $event)" :poster="posterSrc(loop)"></video>
- </div>
- <div class="card-body">
- <p class="username font-weight-bolder lead d-flex justify-content-between"><a :href="loop.account.url">{{loop.account.acct}}</a> <a :href="loop.url">{{timestamp(loop)}}</a></p>
- <p class="small text-muted text-truncate" v-html="getTitle(loop)"></p>
- <div class="small text-muted d-flex justify-content-between mb-0">
- <span>{{loop.favourites_count}} Likes</span>
- <span>{{loop.reblogs_count}} Shares</span>
- <span>{{loop.reply_count}} Comments</span>
- </div>
- </div>
- </div>
- </div>
- </div>
- <div v-else class="col-12">
- <div class="card">
- <div class="card-body">
- <p class="lead text-center mb-0">Loops are an exciting new way to explore short videos on Pixelfed.</p>
- </div>
- </div>
- </div>
- </div>
- </template>
- <style type="text/css">
- .loops-container .card {
- box-shadow: none;
- }
- .loops-container .card .card-img-top{
- border-radius: 0;
- }
- .loops-container a {
- color: #343a40;
- }
- a.hashtag,
- .loops-container .card-body a:hover {
- color: #28a745 !important;
- }
- </style>
- <script type="text/javascript">
- Object.defineProperty(HTMLMediaElement.prototype, 'playing', {
- get: function(){
- return !!(this.currentTime > 0 && !this.paused && !this.ended && this.readyState > 2);
- }
- })
- export default {
- data() {
- return {
- 'version': 1,
- 'loops': [],
- 'tab': 'new'
- }
- },
- mounted() {
- axios.get('/api/v2/loops')
- .then(res => {
- this.loops = res.data;
- })
- },
- methods: {
- videoSrc(loop) {
- return loop.media_attachments[0].url;
- },
- posterSrc(loop) {
- return loop.media_attachments[0].preview_url;
- },
- setTab(tab) {
- this.tab = tab;
- },
- toggleVideo(loop, $event) {
- let el = $event.target;
- $('video').each(function() {
- if(el.src != $(this)[0].src) {
- $(this)[0].pause();
- }
- });
- if(!el.playing) {
- el.play();
- //this.incrementLoop(loop);
- } else {
- el.pause();
- }
- },
- incrementLoop(loop) {
- // axios.post('/api/v2/loops/watch', {
- // id: loop.id
- // }).then(res => {
- // console.log(res.data);
- // });
- },
- timestamp(loop) {
- let ts = new Date(loop.created_at);
- return ts.toLocaleDateString();
- },
- getTitle(loop) {
- let content = loop.content ? loop.content : 'Untitled';
- return content.trim();
- }
- }
- }
- </script>
|