@@ -21,6 +24,7 @@ export default {
return {
showSortModal: false,
showFilterModal: false,
+ showSearchModal: false,
settings: {}
}
},
diff --git a/plugins/init.client.js b/plugins/init.client.js
index 3161b7e1..5d703eae 100644
--- a/plugins/init.client.js
+++ b/plugins/init.client.js
@@ -38,7 +38,6 @@ Vue.prototype.$secondsToTimestamp = (seconds) => {
return `${_hours}:${_minutes.toString().padStart(2, '0')}:${_seconds.toString().padStart(2, '0')}`
}
-
function isClickedOutsideEl(clickEvent, elToCheckOutside, ignoreSelectors = [], ignoreElems = []) {
const isDOMElement = (element) => {
return element instanceof Element || element instanceof HTMLDocument
@@ -74,4 +73,14 @@ Vue.directive('click-outside', {
document.removeEventListener('click', el['__click_outside__'], false)
delete el['__click_outside__']
}
-})
\ No newline at end of file
+})
+
+const encode = (text) => encodeURIComponent(Buffer.from(text).toString('base64'))
+Vue.prototype.$encode = encode
+const decode = (text) => Buffer.from(decodeURIComponent(text), 'base64').toString()
+Vue.prototype.$decode = decode
+
+export {
+ encode,
+ decode
+}
\ No newline at end of file
diff --git a/store/audiobooks.js b/store/audiobooks.js
index d8103cff..5bec9894 100644
--- a/store/audiobooks.js
+++ b/store/audiobooks.js
@@ -1,4 +1,5 @@
import { sort } from '@/assets/fastSort'
+import { decode } from '@/plugins/init.client'
const STANDARD_GENRES = ['adventure', 'autobiography', 'biography', 'childrens', 'comedy', 'crime', 'dystopian', 'fantasy', 'fiction', 'health', 'history', 'horror', 'mystery', 'new_adult', 'nonfiction', 'philosophy', 'politics', 'religion', 'romance', 'sci-fi', 'self-help', 'short_story', 'technology', 'thriller', 'true_crime', 'western', 'young_adult']
@@ -19,7 +20,7 @@ export const getters = {
var searchGroups = ['genres', 'tags', 'series', 'authors']
var group = searchGroups.find(_group => filterBy.startsWith(_group + '.'))
if (group) {
- var filter = filterBy.replace(`${group}.`, '')
+ var filter = decode(filterBy.replace(`${group}.`, ''))
if (group === 'genres') filtered = filtered.filter(ab => ab.book && ab.book.genres.includes(filter))
else if (group === 'tags') filtered = filtered.filter(ab => ab.tags.includes(filter))
else if (group === 'series') filtered = filtered.filter(ab => ab.book && ab.book.series === filter)
@@ -40,6 +41,11 @@ export const getters = {
getUniqueAuthors: (state) => {
var _authors = state.audiobooks.filter(ab => !!(ab.book && ab.book.author)).map(ab => ab.book.author)
return [...new Set(_authors)]
+ },
+ getGenresUsed: (state) => {
+ var _genres = []
+ state.audiobooks.filter(ab => !!(ab.book && ab.book.genres)).forEach(ab => _genres = _genres.concat(ab.book.genres))
+ return [...new Set(_genres)].sort((a, b) => a.toLowerCase() < b.toLowerCase() ? -1 : 1)
}
}