169 lines
4.0 KiB
JavaScript
169 lines
4.0 KiB
JavaScript
// Load more content when the search page is at the end
|
|
$('#content').on('scroll', function () {
|
|
if ($(this).scrollTop() + $(this).innerHeight() >= $(this)[0].scrollHeight) {
|
|
if (
|
|
main_selected == 'search_tab' &&
|
|
['track_search', 'album_search', 'artist_search', 'playlist_search'].indexOf(search_selected) != -1
|
|
) {
|
|
scrolledSearch(search_selected.split('_')[0])
|
|
}
|
|
}
|
|
})
|
|
|
|
function search(type) {
|
|
query = MainSearch.results.query
|
|
socket.emit('search', {
|
|
term: query,
|
|
type: type,
|
|
start: MainSearch.results[type + 'Tab'].next,
|
|
nb: 30
|
|
})
|
|
}
|
|
|
|
function scrolledSearch(type) {
|
|
query = MainSearch.results.query
|
|
if (MainSearch.results[type + 'Tab'].next < MainSearch.results[type + 'Tab'].total) {
|
|
socket.emit('search', {
|
|
term: query,
|
|
type: type,
|
|
start: MainSearch.results[type + 'Tab'].next,
|
|
nb: 30
|
|
})
|
|
}
|
|
}
|
|
|
|
function searchUpdate(result) {
|
|
let next = 0
|
|
if (result.next) next = parseInt(result.next.match(/index=(\d*)/)[1])
|
|
else next = result.total
|
|
if (MainSearch.results[result.type + 'Tab'].total != result.total)
|
|
MainSearch.results[result.type + 'Tab'].total = result.total
|
|
if (MainSearch.results[result.type + 'Tab'].next != next) {
|
|
MainSearch.results[result.type + 'Tab'].next = next
|
|
MainSearch.results[result.type + 'Tab'].data = MainSearch.results[result.type + 'Tab'].data.concat(result.data)
|
|
}
|
|
MainSearch.results[result.type + 'Tab'].loaded = true
|
|
}
|
|
|
|
socket.on('search', function (result) {
|
|
searchUpdate(result)
|
|
})
|
|
|
|
function clickElement(button) {
|
|
return document.getElementById(button).click()
|
|
}
|
|
|
|
function sendAddToQueue(url, bitrate = null) {
|
|
if (url.indexOf(';') != -1) {
|
|
urls = url.split(';')
|
|
urls.forEach(url => {
|
|
socket.emit('addToQueue', { url: url, bitrate: bitrate })
|
|
})
|
|
} else if (url != '') {
|
|
socket.emit('addToQueue', { url: url, bitrate: bitrate })
|
|
}
|
|
}
|
|
|
|
const MainSearch = new Vue({
|
|
el: '#search_tab',
|
|
data: {
|
|
names: {
|
|
TOP_RESULT: 'Top Result',
|
|
TRACK: 'Tracks',
|
|
ARTIST: 'Artists',
|
|
ALBUM: 'Albums',
|
|
PLAYLIST: 'Playlists'
|
|
},
|
|
results: {
|
|
query: '',
|
|
allTab: {
|
|
ORDER: [],
|
|
TOP_RESULT: [],
|
|
ALBUM: {},
|
|
ARTIST: {},
|
|
TRACK: {},
|
|
PLAYLIST: {}
|
|
},
|
|
trackTab: {
|
|
data: [],
|
|
next: 0,
|
|
total: 0,
|
|
loaded: false
|
|
},
|
|
albumTab: {
|
|
data: [],
|
|
next: 0,
|
|
total: 0,
|
|
loaded: false
|
|
},
|
|
artistTab: {
|
|
data: [],
|
|
next: 0,
|
|
total: 0,
|
|
loaded: false
|
|
},
|
|
playlistTab: {
|
|
data: [],
|
|
next: 0,
|
|
total: 0,
|
|
loaded: false
|
|
}
|
|
}
|
|
},
|
|
methods: {
|
|
changeSearchTab(section) {
|
|
if (section != 'TOP_RESULT') clickElement('search_' + section.toLowerCase() + '_tab')
|
|
},
|
|
addToQueue: function (e) {
|
|
e.stopPropagation()
|
|
sendAddToQueue(e.currentTarget.dataset.link)
|
|
},
|
|
openQualityModal: function (e) {
|
|
e.preventDefault()
|
|
openQualityModal(e.currentTarget.dataset.link)
|
|
}
|
|
}
|
|
})
|
|
|
|
console.log(MainSearch)
|
|
|
|
// Search section
|
|
$('#searchbar').keyup(function (e) {
|
|
if (e.keyCode == 13) {
|
|
let term = this.value
|
|
if (isValidURL(term)) {
|
|
if (e.ctrlKey) {
|
|
openQualityModal(term)
|
|
} else {
|
|
sendAddToQueue(term)
|
|
}
|
|
} else {
|
|
if (term != MainSearch.query || main_selected == 'search_tab') {
|
|
document.getElementById('search_tab_content').style.display = 'none'
|
|
socket.emit('mainSearch', { term: term })
|
|
} else {
|
|
document.getElementById('search_all_tab').click()
|
|
document.getElementById('search_tab_content').style.display = 'block'
|
|
document.getElementById('main_search_tablink').click()
|
|
}
|
|
}
|
|
}
|
|
})
|
|
|
|
function mainSearchHandler(result) {
|
|
let resetObj = { data: [], next: 0, total: 0, loaded: false }
|
|
MainSearch.results.allTab = result
|
|
MainSearch.results.query = result.QUERY
|
|
MainSearch.results.trackTab = { ...resetObj }
|
|
MainSearch.results.albumTab = { ...resetObj }
|
|
MainSearch.results.artistTab = { ...resetObj }
|
|
MainSearch.results.playlistTab = { ...resetObj }
|
|
document.getElementById('search_all_tab').click()
|
|
document.getElementById('search_tab_content').style.display = 'block'
|
|
document.getElementById('main_search_tablink').click()
|
|
}
|
|
|
|
socket.on('mainSearch', function (result) {
|
|
mainSearchHandler(result)
|
|
})
|