mirror of
				https://github.com/TeamPiped/Piped.git
				synced 2024-08-14 23:57:27 +00:00 
			
		
		
		
	Use Mixins for global functions.
This commit is contained in:
		
							parent
							
								
									dfa94f6d7f
								
							
						
					
					
						commit
						8e545dfb27
					
				
					 5 changed files with 134 additions and 130 deletions
				
			
		| 
						 | 
				
			
			@ -1,104 +1,101 @@
 | 
			
		|||
<template>
 | 
			
		||||
    <div v-if="channel">
 | 
			
		||||
        <h1 class="uk-text-center">
 | 
			
		||||
            <img v-bind:src="channel.avatarUrl" />{{ channel.name }}
 | 
			
		||||
        </h1>
 | 
			
		||||
        <img
 | 
			
		||||
            v-if="channel.bannerUrl"
 | 
			
		||||
            v-bind:src="channel.bannerUrl"
 | 
			
		||||
            style="width: 100%"
 | 
			
		||||
        />
 | 
			
		||||
        <p v-html="this.channel.description.replaceAll('\n', '<br>')"></p>
 | 
			
		||||
 | 
			
		||||
        <hr />
 | 
			
		||||
 | 
			
		||||
        <div class="uk-grid-xl" uk-grid="parallax: 0">
 | 
			
		||||
            <div
 | 
			
		||||
                class="uk-width-1-2 uk-width-1-3@m uk-width-1-4@l uk-width-1-5@xl"
 | 
			
		||||
                v-bind:key="item.url"
 | 
			
		||||
                v-for="item in this.channel.relatedStreams"
 | 
			
		||||
            >
 | 
			
		||||
                <router-link
 | 
			
		||||
                    class="uk-link-muted uk-text-justify"
 | 
			
		||||
                    v-bind:to="item.url || '/'"
 | 
			
		||||
                >
 | 
			
		||||
                    <img style="width: 100%" v-bind:src="item.thumbnail" />
 | 
			
		||||
                    <a>{{ item.title }}</a>
 | 
			
		||||
                </router-link>
 | 
			
		||||
                <br />
 | 
			
		||||
                <div>
 | 
			
		||||
                    <b class="uk-text-small uk-align-left">
 | 
			
		||||
                        {{ timeFormat(item.duration) }}
 | 
			
		||||
                    </b>
 | 
			
		||||
                    <b class="uk-text-small uk-align-right">
 | 
			
		||||
                        <font-awesome-icon icon="eye"></font-awesome-icon>
 | 
			
		||||
                        {{ item.views }} views
 | 
			
		||||
                    </b>
 | 
			
		||||
                </div>
 | 
			
		||||
            </div>
 | 
			
		||||
        </div>
 | 
			
		||||
    </div>
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
<script>
 | 
			
		||||
import Constants from "@/Constants.js";
 | 
			
		||||
 | 
			
		||||
export default {
 | 
			
		||||
    data() {
 | 
			
		||||
        return {
 | 
			
		||||
            channel: null
 | 
			
		||||
        };
 | 
			
		||||
    },
 | 
			
		||||
    mounted() {
 | 
			
		||||
        this.getChannelData();
 | 
			
		||||
        window.addEventListener("scroll", this.handleScroll);
 | 
			
		||||
    },
 | 
			
		||||
    unmounted() {
 | 
			
		||||
        window.removeEventListener("scroll", this.handleScroll);
 | 
			
		||||
    },
 | 
			
		||||
    methods: {
 | 
			
		||||
        async fetchChannel() {
 | 
			
		||||
            return await (
 | 
			
		||||
                await fetch(
 | 
			
		||||
                    Constants.BASE_URL +
 | 
			
		||||
                        "/channels/" +
 | 
			
		||||
                        this.$route.params.channelId
 | 
			
		||||
                )
 | 
			
		||||
            ).json();
 | 
			
		||||
        },
 | 
			
		||||
        async getChannelData() {
 | 
			
		||||
            this.fetchChannel()
 | 
			
		||||
                .then(data => (this.channel = data))
 | 
			
		||||
                .then(() => (document.title = this.channel.name + " - Piped"));
 | 
			
		||||
        },
 | 
			
		||||
        timeFormat(d) {
 | 
			
		||||
            return require("@/utils/TimeUtils.js").default.timeFormat(d);
 | 
			
		||||
        },
 | 
			
		||||
        handleScroll() {
 | 
			
		||||
            if (this.loading || !this.channel || !this.channel.nextpage) return;
 | 
			
		||||
            if (
 | 
			
		||||
                window.innerHeight + window.scrollY >=
 | 
			
		||||
                document.body.offsetHeight - window.innerHeight / 2
 | 
			
		||||
            ) {
 | 
			
		||||
                this.loading = true;
 | 
			
		||||
                fetch(
 | 
			
		||||
                    Constants.BASE_URL +
 | 
			
		||||
                        "/nextpage/channels/" +
 | 
			
		||||
                        this.$route.params.channelId +
 | 
			
		||||
                        "?url=" +
 | 
			
		||||
                        encodeURIComponent(this.channel.nextpage)
 | 
			
		||||
                )
 | 
			
		||||
                    .then(body => body.json())
 | 
			
		||||
                    .then(json => {
 | 
			
		||||
                        this.channel.relatedStreams.concat(json.relatedStreams);
 | 
			
		||||
                        this.channel.nextpage = json.nextpage;
 | 
			
		||||
                        this.loading = false;
 | 
			
		||||
                        json.relatedStreams.map(stream =>
 | 
			
		||||
                            this.channel.relatedStreams.push(stream)
 | 
			
		||||
                        );
 | 
			
		||||
                    });
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
};
 | 
			
		||||
</script>
 | 
			
		||||
<template>
 | 
			
		||||
    <div v-if="channel">
 | 
			
		||||
        <h1 class="uk-text-center">
 | 
			
		||||
            <img v-bind:src="channel.avatarUrl" />{{ channel.name }}
 | 
			
		||||
        </h1>
 | 
			
		||||
        <img
 | 
			
		||||
            v-if="channel.bannerUrl"
 | 
			
		||||
            v-bind:src="channel.bannerUrl"
 | 
			
		||||
            style="width: 100%"
 | 
			
		||||
        />
 | 
			
		||||
        <p v-html="this.channel.description.replaceAll('\n', '<br>')"></p>
 | 
			
		||||
 | 
			
		||||
        <hr />
 | 
			
		||||
 | 
			
		||||
        <div class="uk-grid-xl" uk-grid="parallax: 0">
 | 
			
		||||
            <div
 | 
			
		||||
                class="uk-width-1-2 uk-width-1-3@m uk-width-1-4@l uk-width-1-5@xl"
 | 
			
		||||
                v-bind:key="item.url"
 | 
			
		||||
                v-for="item in this.channel.relatedStreams"
 | 
			
		||||
            >
 | 
			
		||||
                <router-link
 | 
			
		||||
                    class="uk-link-muted uk-text-justify"
 | 
			
		||||
                    v-bind:to="item.url || '/'"
 | 
			
		||||
                >
 | 
			
		||||
                    <img style="width: 100%" v-bind:src="item.thumbnail" />
 | 
			
		||||
                    <a>{{ item.title }}</a>
 | 
			
		||||
                </router-link>
 | 
			
		||||
                <br />
 | 
			
		||||
                <div>
 | 
			
		||||
                    <b class="uk-text-small uk-align-left">
 | 
			
		||||
                        {{ timeFormat(item.duration) }}
 | 
			
		||||
                    </b>
 | 
			
		||||
                    <b class="uk-text-small uk-align-right">
 | 
			
		||||
                        <font-awesome-icon icon="eye"></font-awesome-icon>
 | 
			
		||||
                        {{ item.views }} views
 | 
			
		||||
                    </b>
 | 
			
		||||
                </div>
 | 
			
		||||
            </div>
 | 
			
		||||
        </div>
 | 
			
		||||
    </div>
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
<script>
 | 
			
		||||
import Constants from "@/Constants.js";
 | 
			
		||||
 | 
			
		||||
export default {
 | 
			
		||||
    data() {
 | 
			
		||||
        return {
 | 
			
		||||
            channel: null
 | 
			
		||||
        };
 | 
			
		||||
    },
 | 
			
		||||
    mounted() {
 | 
			
		||||
        this.getChannelData();
 | 
			
		||||
        window.addEventListener("scroll", this.handleScroll);
 | 
			
		||||
    },
 | 
			
		||||
    unmounted() {
 | 
			
		||||
        window.removeEventListener("scroll", this.handleScroll);
 | 
			
		||||
    },
 | 
			
		||||
    methods: {
 | 
			
		||||
        async fetchChannel() {
 | 
			
		||||
            return await (
 | 
			
		||||
                await fetch(
 | 
			
		||||
                    Constants.BASE_URL +
 | 
			
		||||
                        "/channels/" +
 | 
			
		||||
                        this.$route.params.channelId
 | 
			
		||||
                )
 | 
			
		||||
            ).json();
 | 
			
		||||
        },
 | 
			
		||||
        async getChannelData() {
 | 
			
		||||
            this.fetchChannel()
 | 
			
		||||
                .then(data => (this.channel = data))
 | 
			
		||||
                .then(() => (document.title = this.channel.name + " - Piped"));
 | 
			
		||||
        },
 | 
			
		||||
        handleScroll() {
 | 
			
		||||
            if (this.loading || !this.channel || !this.channel.nextpage) return;
 | 
			
		||||
            if (
 | 
			
		||||
                window.innerHeight + window.scrollY >=
 | 
			
		||||
                document.body.offsetHeight - window.innerHeight
 | 
			
		||||
            ) {
 | 
			
		||||
                this.loading = true;
 | 
			
		||||
                fetch(
 | 
			
		||||
                    Constants.BASE_URL +
 | 
			
		||||
                        "/nextpage/channels/" +
 | 
			
		||||
                        this.$route.params.channelId +
 | 
			
		||||
                        "?url=" +
 | 
			
		||||
                        encodeURIComponent(this.channel.nextpage)
 | 
			
		||||
                )
 | 
			
		||||
                    .then(body => body.json())
 | 
			
		||||
                    .then(json => {
 | 
			
		||||
                        this.channel.relatedStreams.concat(json.relatedStreams);
 | 
			
		||||
                        this.channel.nextpage = json.nextpage;
 | 
			
		||||
                        this.loading = false;
 | 
			
		||||
                        json.relatedStreams.map(stream =>
 | 
			
		||||
                            this.channel.relatedStreams.push(stream)
 | 
			
		||||
                        );
 | 
			
		||||
                    });
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
};
 | 
			
		||||
</script>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -51,9 +51,6 @@ export default {
 | 
			
		|||
    methods: {
 | 
			
		||||
        async fetchTrending() {
 | 
			
		||||
            return await (await fetch(Constants.BASE_URL + "/trending")).json();
 | 
			
		||||
        },
 | 
			
		||||
        timeFormat(d) {
 | 
			
		||||
            return require("@/utils/TimeUtils.js").default.timeFormat(d);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
};
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -14,13 +14,17 @@
 | 
			
		|||
 | 
			
		||||
        <p class="uk-dark">
 | 
			
		||||
            <font-awesome-icon icon="thumbs-down"></font-awesome-icon>
 | 
			
		||||
            {{ video.likes }}
 | 
			
		||||
            <b>{{ video.likes }}</b>
 | 
			
		||||
             
 | 
			
		||||
            <font-awesome-icon icon="thumbs-up"></font-awesome-icon>
 | 
			
		||||
            {{ video.dislikes }}
 | 
			
		||||
            <b>{{ video.dislikes }}</b>
 | 
			
		||||
        </p>
 | 
			
		||||
        <p>
 | 
			
		||||
            <font-awesome-icon icon="eye"></font-awesome-icon>
 | 
			
		||||
            {{ video.views }} views
 | 
			
		||||
            <b>{{ video.views }}</b> views
 | 
			
		||||
        </p>
 | 
			
		||||
        <p>
 | 
			
		||||
            Uploaded on <b>{{ video.uploadDate }}</b>
 | 
			
		||||
        </p>
 | 
			
		||||
        <p class="uk-light" v-html="video.description"></p>
 | 
			
		||||
        <a v-if="sponsors && sponsors.segments"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										26
									
								
								src/main.js
									
										
									
									
									
								
							
							
						
						
									
										26
									
								
								src/main.js
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -12,7 +12,33 @@ import App from './App.vue'
 | 
			
		|||
 | 
			
		||||
import './registerServiceWorker'
 | 
			
		||||
 | 
			
		||||
const mixin = {
 | 
			
		||||
    methods: {
 | 
			
		||||
        timeFormat: function (duration) {
 | 
			
		||||
 | 
			
		||||
            var pad = function (num, size) {
 | 
			
		||||
                return ("000" + num).slice(size * -1);
 | 
			
		||||
            };
 | 
			
		||||
 | 
			
		||||
            var time = parseFloat(duration).toFixed(3),
 | 
			
		||||
                hours = Math.floor(time / 60 / 60),
 | 
			
		||||
                minutes = Math.floor(time / 60) % 60,
 | 
			
		||||
                seconds = Math.floor(time - minutes * 60);
 | 
			
		||||
 | 
			
		||||
            var str = "";
 | 
			
		||||
 | 
			
		||||
            if (hours > 0) str += pad(hours, 2) + ":";
 | 
			
		||||
 | 
			
		||||
            str += pad(minutes, 2) + ":" + pad(seconds, 2);
 | 
			
		||||
 | 
			
		||||
            return str;
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const app = createApp(App)
 | 
			
		||||
app.use(router)
 | 
			
		||||
app.mixin(mixin)
 | 
			
		||||
app.component('font-awesome-icon', FontAwesomeIcon)
 | 
			
		||||
app.mount('#app')
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,20 +0,0 @@
 | 
			
		|||
export default {
 | 
			
		||||
    timeFormat: function (duration) {
 | 
			
		||||
        var pad = function (num, size) {
 | 
			
		||||
            return ("000" + num).slice(size * -1);
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        var time = parseFloat(duration).toFixed(3),
 | 
			
		||||
            hours = Math.floor(time / 60 / 60),
 | 
			
		||||
            minutes = Math.floor(time / 60) % 60,
 | 
			
		||||
            seconds = Math.floor(time - minutes * 60);
 | 
			
		||||
 | 
			
		||||
        var str = "";
 | 
			
		||||
 | 
			
		||||
        if (hours > 0) str += pad(hours, 2) + ":";
 | 
			
		||||
 | 
			
		||||
        str += pad(minutes, 2) + ":" + pad(seconds, 2);
 | 
			
		||||
 | 
			
		||||
        return str;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue