website/pages/resources.vue

105 lines
3.0 KiB
Vue
Raw Normal View History

2023-04-16 20:12:24 +03:00
<template>
<main>
<Navbar />
<Header>
<glitch>cat</glitch> {{ header }}
</Header>
<div class="resources">
<Input :keyup="keyup" placeholder="Search resource" type="text"/>
2023-06-11 20:19:35 +03:00
<Resource v-for="res in show_resources" :key="res.name" :name="res.name" :tags="res.tags" :url="res.url" />
2023-04-16 20:12:24 +03:00
</div>
<NewResource v-if="logged"/>
</main>
</template>
<script>
import axios from 'axios';
import Resource from '../components/Resource.vue';
import Input from '../components/Input.vue';
import NewResource from '../components/NewResource.vue';
export default {
head() {
return {
title: "[ngn] | resources",
meta: [
{
hid: "description",
name: "description",
content: "discover new resources"
}
]
}
},
2023-04-16 20:12:24 +03:00
data() {
return {
header: "resources",
logged: false,
2023-06-11 20:19:35 +03:00
sum_resources: [],
all_resources: [],
show_resources: []
2023-04-16 20:12:24 +03:00
}
},
methods: {
keyup(e) {
2023-06-11 20:19:35 +03:00
let search = e.target.value
if(e.key==="Backspace" && search===""){
2023-04-16 20:12:24 +03:00
this.header = "resources"
2023-06-11 20:19:35 +03:00
this.show_resources = this.sum_resources
2023-04-16 20:12:24 +03:00
return
}
if(e.key==="OS")
return
2023-06-11 20:19:35 +03:00
this.header = `resources | grep ${search}`
2023-04-16 20:12:24 +03:00
// dirty asf search alg
2023-06-11 20:19:35 +03:00
this.show_resources = []
for(let i = 0; i < this.all_resources.length; i++){
if(this.all_resources[i].name
.toLowerCase()
.includes(search.toLowerCase())
){
this.show_resources.push(this.all_resources[i])
continue
}
for(let e = 0; e < this.all_resources[i].tags.length; e++){
if(this.all_resources[i].tags[e].toLowerCase()
.includes(search.toLowerCase())
){
this.show_resources.push(this.all_resources[i])
break
2023-04-16 20:12:24 +03:00
}
}
}
2023-06-11 20:19:35 +03:00
}
2023-04-16 20:12:24 +03:00
},
mounted: async function(){
2023-06-11 20:19:35 +03:00
if(localStorage.getItem("token"))
2023-04-16 20:12:24 +03:00
this.logged = true
2023-06-11 20:19:35 +03:00
// request top 10 resources so we can
// render the DOM as fast as possible
let res = await axios.get("/api/resources/get?sum=1")
this.sum_resources = res.data["resources"]
this.show_resources = this.sum_resources
// then we can load all the resources
res = await axios.get("/api/resources/get")
this.all_resources = res.data["resources"]
console.log(res.data["resources"])
2023-04-16 20:12:24 +03:00
}
}
</script>
<style scoped>
.resources {
padding: 50px;
padding-bottom: 60px;
2023-04-16 20:12:24 +03:00
display: flex;
flex-direction: column;
align-items: center;
gap: 40px
}
2023-06-11 20:19:35 +03:00
</style>