feat: implemented bang preview
This commit is contained in:
parent
0d6a5a92ae
commit
6da853c0f5
@ -1,9 +1,4 @@
|
|||||||
<template>
|
<template>
|
||||||
<div style="background-color: wheat;">
|
|
||||||
{{ searchInput }}
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="search">
|
<div class="search">
|
||||||
<div class="search__form" role="form" method="post" autocomplete="off">
|
<div class="search__form" role="form" method="post" autocomplete="off">
|
||||||
<input v-model="searchInput" @keyup.arrow-down="nextSearchEngine" @keyup.arrow-up="previousSearchEngine"
|
<input v-model="searchInput" @keyup.arrow-down="nextSearchEngine" @keyup.arrow-up="previousSearchEngine"
|
||||||
|
@ -48,6 +48,11 @@ const searchEngines = {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const bangToEngine = Object.keys(searchEngines).reduce((acc, engine) => {
|
||||||
|
acc[searchEngines[engine].bang] = engine
|
||||||
|
return acc
|
||||||
|
}, {})
|
||||||
|
|
||||||
export const useSearchStore = defineStore({
|
export const useSearchStore = defineStore({
|
||||||
id: 'search',
|
id: 'search',
|
||||||
state: () => ({
|
state: () => ({
|
||||||
@ -56,11 +61,23 @@ export const useSearchStore = defineStore({
|
|||||||
}),
|
}),
|
||||||
getters: {
|
getters: {
|
||||||
currentEngine: (state) => {
|
currentEngine: (state) => {
|
||||||
|
if (bangToEngine[state.searchBang]) {
|
||||||
|
return bangToEngine[state.searchBang]
|
||||||
|
}
|
||||||
|
|
||||||
return state.searchEnginePriorities[0]
|
return state.searchEnginePriorities[0]
|
||||||
},
|
},
|
||||||
currentEngineData: (state) => {
|
currentEngineData: (state) => {
|
||||||
return searchEngines[state.currentEngine]
|
return searchEngines[state.currentEngine]
|
||||||
},
|
},
|
||||||
|
searchBang: (state) => {
|
||||||
|
// if the search input starts with an exclamation mark
|
||||||
|
// we assume it's a bang and we want to change the search engine, so we return the contents behind the exclamation mark till the first space
|
||||||
|
if (state.searchInput.startsWith('!')) {
|
||||||
|
return state.searchInput.slice(1).split(' ')[0]
|
||||||
|
}
|
||||||
|
return ''
|
||||||
|
},
|
||||||
searchQuery: (state) => {
|
searchQuery: (state) => {
|
||||||
return state.searchInput.trim()
|
return state.searchInput.trim()
|
||||||
},
|
},
|
||||||
@ -69,7 +86,20 @@ export const useSearchStore = defineStore({
|
|||||||
},
|
},
|
||||||
|
|
||||||
searchEngineData: (state) => {
|
searchEngineData: (state) => {
|
||||||
return state.searchEnginePriorities.map((engine) => {
|
let priorities
|
||||||
|
|
||||||
|
if (bangToEngine[state.searchBang]) {
|
||||||
|
priorities = [
|
||||||
|
bangToEngine[state.searchBang],
|
||||||
|
...state.searchEnginePriorities.filter(
|
||||||
|
(engine) => engine !== bangToEngine[state.searchBang]
|
||||||
|
)
|
||||||
|
]
|
||||||
|
} else {
|
||||||
|
priorities = state.searchEnginePriorities
|
||||||
|
}
|
||||||
|
|
||||||
|
return priorities.map((engine) => {
|
||||||
return [engine, searchEngines[engine]]
|
return [engine, searchEngines[engine]]
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user