1
0
mirror of https://github.com/taigrr/homer synced 2025-01-18 04:53:12 -08:00

feat: allows for searching by tag (note: requires #149)

This commit is contained in:
Tai Groot 2020-10-28 21:44:00 -07:00
parent d1b29caaa6
commit c30533045a
Signed by: taigrr
GPG Key ID: D00C269A87614812
5 changed files with 54 additions and 3 deletions

View File

@ -40,6 +40,7 @@
<SearchInput
class="navbar-item is-inline-block-mobile"
@input="filterServices"
:value="filter"
@search-focus="showMenu = true"
@search-open="navigateToFirstService"
@search-cancel="filterServices"
@ -68,6 +69,7 @@
v-for="item in group.items"
:key="item.name"
v-bind:item="item"
@filter="filterTag"
:class="['column', `is-${12 / config.columns}`]"
/>
</template>
@ -90,6 +92,7 @@
<Service
v-for="item in group.items"
v-bind:item="item"
@filter="filterTag"
:key="item.url"
/>
</div>
@ -210,6 +213,35 @@ export default {
console.warning("fail to open service");
}
},
filterTag: function (filter) {
this.showMenu = true;
this.$nextTick(() => {
document.getElementById("searchBox").focus();
});
this.filter = filter;
if (!filter) {
this.services = this.config.services;
return;
}
const searchResultItems = [];
for (const group of this.config.services) {
for (const item of group.items) {
if (this.matchesFilter(item)) {
searchResultItems.push(item);
}
}
}
this.services = [
{
name: filter,
icon: "fas fa-search",
items: searchResultItems,
},
];
},
filterServices: function (filter) {
this.filter = filter;

View File

@ -2,6 +2,7 @@
<div class="search-bar">
<label for="search" class="search-label"></label>
<input
id="searchBox"
type="text"
ref="search"
:value="value"

View File

@ -1,5 +1,5 @@
<template>
<component v-bind:is="component" :item="item"></component>
<component v-on="$listeners" v-bind:is="component" :item="item"></component>
</template>
<script>

View File

@ -31,7 +31,12 @@ export default {};
<p class="subtitle is-6">{{ item.subtitle }}</p>
</div>
</div>
<div class="tag" :class="item.tagstyle" v-if="item.tag">
<div
v-on:click="filterTag()"
class="tag"
:class="item.tagstyle"
v-if="item.tag"
>
<strong class="tag-text">#{{ item.tag }}</strong>
</div>
</div>
@ -46,6 +51,11 @@ export default {
props: {
item: Object,
},
methods: {
filterTag: function () {
this.$emit("filter", this.item.tag.toLowerCase());
},
},
};
</script>

View File

@ -22,7 +22,12 @@
{{ status.status }}
</div>
</div>
<div class="tag" :class="item.tagstyle" v-if="item.tag">
<div
v-on:click="filterTag()"
class="tag"
:class="item.tagstyle"
v-if="item.tag"
>
<strong class="tag-text">#{{ item.tag }}</strong>
</div>
</div>
@ -51,6 +56,9 @@ export default {
response.json()
);
},
filterTag: function () {
this.$emit("filter", this.item.tag.toLowerCase());
},
},
};
</script>