151 lines
5.3 KiB
JavaScript
151 lines
5.3 KiB
JavaScript
var Chats = {
|
|
startX: 0,
|
|
startY: 0,
|
|
translateX: 0,
|
|
translateY: 0,
|
|
slideAuthorized: false,
|
|
|
|
setFilter: function (filter) {
|
|
document.querySelector('#chats_widget_header').dataset.filter = filter;
|
|
Chats_ajaxSetFilter(filter);
|
|
},
|
|
|
|
refreshFilters: function () {
|
|
var filter = document.querySelector('#chats_widget_header').dataset.filter;
|
|
|
|
document.querySelectorAll('#chats_widget_header span.chip').forEach(chip => {
|
|
chip.classList.remove('enabled');
|
|
|
|
if (chip.dataset.filter == filter) chip.classList.add('enabled');
|
|
});
|
|
},
|
|
|
|
refresh: function () {
|
|
var list = document.querySelector('#chats');
|
|
if (!list) return;
|
|
|
|
Chats.refreshFilters();
|
|
|
|
var trim = list.innerHTML.trim();
|
|
|
|
if (trim === '') list.innerHTML = trim;
|
|
|
|
var items = document.querySelectorAll('ul#chats li:not(.subheader)');
|
|
var i = 0;
|
|
|
|
while (i < items.length) {
|
|
if (items[i].querySelector('img.tinythumb')) {
|
|
var img = items[i].querySelector('img.tinythumb');
|
|
|
|
try {
|
|
img.src = thumbHashToDataURL(MovimUtils.base64ToBinary(img.dataset.thumbhash));
|
|
} catch (error) {
|
|
console.log('Cannot handle thumbhash hash');
|
|
}
|
|
}
|
|
|
|
if (items[i].dataset.jid != null) {
|
|
items[i].onclick = function (e) {
|
|
Rooms.refresh();
|
|
MovimUtils.addClass('ul#bottomnavigation', 'hidden');
|
|
|
|
Chat.get(this.dataset.jid);
|
|
};
|
|
|
|
items[i].onmousedown = function (e) {
|
|
if (e.which == 2) {
|
|
Chats.closeItem(this, false);
|
|
e.preventDefault();
|
|
}
|
|
}
|
|
|
|
clientWidth = Math.abs(document.body.clientWidth);
|
|
delay = 20;
|
|
|
|
if (MovimUtils.isMobile()) {
|
|
items[i].addEventListener('touchstart', function (event) {
|
|
if (MovimTpl.menuDragged) return;
|
|
|
|
Chats.startX = event.targetTouches[0].pageX;
|
|
Chats.startY = event.targetTouches[0].pageY;
|
|
|
|
this.classList.remove('moving');
|
|
}, true);
|
|
|
|
items[i].addEventListener('touchmove', function (event) {
|
|
if (MovimTpl.menuDragged) return;
|
|
|
|
Chats.translateX = parseInt(event.targetTouches[0].pageX - Chats.startX);
|
|
Chats.translateY = parseInt(event.targetTouches[0].pageY - Chats.startY);
|
|
|
|
if (Math.abs(Chats.translateX) > delay && Math.abs(Chats.translateX) <= clientWidth) {
|
|
if (Math.abs(Chats.translateX) > this.offsetWidth / 2) {
|
|
this.classList.add('close');
|
|
} else {
|
|
this.classList.remove('close');
|
|
}
|
|
|
|
if (Math.abs(Chats.translateY) < delay) {
|
|
Chats.slideAuthorized = true;
|
|
}
|
|
|
|
var moveX = Chats.translateX < 0
|
|
? (Chats.translateX + delay)
|
|
: (Chats.translateX - delay);
|
|
|
|
if (Chats.slideAuthorized) {
|
|
this.style.transform = 'translateX(' + (moveX) + 'px)';
|
|
}
|
|
} else {
|
|
this.style.transform = '';
|
|
this.classList.remove('close');
|
|
}
|
|
}, true);
|
|
|
|
items[i].addEventListener('touchend', function (event) {
|
|
if (MovimTpl.menuDragged) return;
|
|
|
|
this.classList.add('moving');
|
|
|
|
if (Math.abs(Chats.translateX) > this.offsetWidth / 2 && Chats.slideAuthorized) {
|
|
Chats.closeItem(this, (Chats.translateX < 0));
|
|
} else {
|
|
this.classList.remove('close');
|
|
}
|
|
|
|
this.style.transform = '';
|
|
Chats.slideAuthorized = false;
|
|
Chats.startX = Chats.startY = Chats.translateX = Chats.translateY = 0;
|
|
}, true);
|
|
}
|
|
}
|
|
|
|
i++;
|
|
}
|
|
},
|
|
|
|
clearAllActives: function () {
|
|
document.querySelectorAll('ul#chats li:not(.subheader)')
|
|
.forEach(item => item.classList.remove('active'));
|
|
},
|
|
|
|
setActive: function (jid) {
|
|
Chats.clearAllActives();
|
|
Rooms.clearAllActives();
|
|
MovimUtils.addClass('ul#chats li[data-jid="' + jid + '"]', 'active');
|
|
},
|
|
|
|
closeItem(li, toLeft) {
|
|
li.classList.add('closing');
|
|
li.classList.add(toLeft ? 'to_left' : 'to_right');
|
|
|
|
window.setTimeout(() => {
|
|
Chats_ajaxClose(li.dataset.jid, (MovimUtils.urlParts().params[0] === li.dataset.jid));
|
|
}, 400);
|
|
}
|
|
};
|
|
|
|
MovimEvents.registerWindow('loaded', 'chats', () => Chats.refresh());
|
|
|
|
MovimWebsocket.initiate(() => Chats_ajaxHttpGet());
|