Files
movim-rs/frontend/widgets/Search/search.js
T
2026-10-24 14:03:52 +07:00

104 lines
3.0 KiB
JavaScript

var Search = {
timer : null,
rosterLimit: false,
init : function(articlesOnly) {
if (window.matchMedia("(min-width: 1025px)").matches) {
document.querySelector('input[name=keyword]').focus();
}
if (articlesOnly == false || articlesOnly == null) {
Search.rosterLimit = 10;
Search_ajaxHttpInitRoster();
}
},
roster : function(key) {
var selector = '#search > #roster > li';
var subheader = document.querySelector(selector + '.subheader');
var showall = document.querySelector(selector + '.showall');
document.querySelectorAll(selector)
.forEach(item => item.classList.remove('found'));
if (key == '') {
document.querySelectorAll(selector + ':nth-child(-n+' + (Search.rosterLimit+1) + ')').forEach(item => item.classList.add('found'));
if (document.querySelector(selector + ':last-child')) {
document.querySelector(selector + ':last-child').classList.add('found');
}
};
var founds = document.querySelectorAll(
selector + '[name*="' + MovimUtils.cleanupId(key).slice(3) + '"]'
);
founds = [].slice.call(founds).slice(0, Search.rosterLimit);
if (founds.length > 0) {
if (subheader) {
subheader.classList.add('found');
}
showall.classList.add('found');
founds.forEach(item => item.classList.add('found'));
} else if (key != '') {
if (subheader) {
subheader.classList.remove('found');
}
if (showall) {
showall.classList.remove('found');
}
}
},
showCompleteRoster : function(li)
{
li.style.display = 'none';
Search.rosterLimit = document.querySelectorAll('#search > #roster > li:not(.showall)').length;
Search.searchCurrent();
},
chat : function(jid, muc) {
if (MovimUtils.urlParts().page === 'chat' && muc == false) {
Chats_ajaxOpen(jid, true);
Drawer.clear();
} else {
Search_ajaxChat(jid, muc);
}
},
searchCurrent() {
Search.searchSomething(document.querySelector('#searchbar input[name=keyword').value);
},
searchSomething : function(value) {
value = value.trim();
clearTimeout(Search.timer);
if (value !== '') {
document.querySelector('#searchbar li.search').classList.add('searching');
}
Search.timer = setTimeout(() => {
Search_ajaxSearch(value);
}, 700);
Search.roster(value);
},
searchClear : function() {
if (document.querySelector('#searchbar')) {
document.querySelector('#searchbar li.search').classList.remove('searching');
}
}
}
MovimEvents.registerWindow('keydown', 'search', (e) => {
if (e.key == 'm' && e.ctrlKey) {
e.preventDefault();
Search_ajaxRequest();
}
});