* init * profile header * merge * two headers * centerd * link fix * remove comments * whoops * Fix specs Co-authored-by: rhymes <rhymes@hey.com>
117 lines
3.4 KiB
JavaScript
117 lines
3.4 KiB
JavaScript
'use strict';
|
|
|
|
function showChatModal(modal) {
|
|
// eslint-disable-next-line no-param-reassign
|
|
modal.style.display = 'block';
|
|
document.getElementById('new-message').focus();
|
|
}
|
|
|
|
function hideChatModal(modal) {
|
|
// eslint-disable-next-line no-param-reassign
|
|
modal.style.display = 'none';
|
|
}
|
|
|
|
function toggleModal() {
|
|
var modal = document.querySelector('.crayons-modal');
|
|
modal.classList.toggle('hidden');
|
|
}
|
|
|
|
function initModal() {
|
|
var modal = document.querySelector('.crayons-modal');
|
|
modal.querySelector('.close-modal').addEventListener('click', toggleModal);
|
|
modal
|
|
.querySelector('.crayons-modal__overlay')
|
|
.addEventListener('click', toggleModal);
|
|
}
|
|
|
|
function handleChatButtonPress(form) {
|
|
var message = document.getElementById('new-message').value;
|
|
var formDataInfo = JSON.parse(form.dataset.info);
|
|
var formData = new FormData();
|
|
|
|
if (message.replace(/\s/g, '').length === 0) {
|
|
return;
|
|
}
|
|
|
|
formData.append('user_id', formDataInfo.id);
|
|
formData.append('message', message);
|
|
formData.append('controller', 'chat_channels');
|
|
|
|
getCsrfToken()
|
|
.then(sendFetch('chat-creation', formData))
|
|
.then(() => {
|
|
window.location.href = `/connect/@${formDataInfo.username}`;
|
|
});
|
|
}
|
|
|
|
function addButtonClickHandle(response, button, modalInfo) {
|
|
var linkWrap = document.getElementById('user-connect-redirect');
|
|
var form = document.getElementById('new-message-form');
|
|
button.classList.add('showing');
|
|
if (modalInfo.showChat === 'open' && response !== 'mutual') {
|
|
linkWrap.removeAttribute('href'); // remove link
|
|
button.addEventListener('click', toggleModal);
|
|
// eslint-disable-next-line no-param-reassign
|
|
button.classList.remove('hidden'); // show button
|
|
linkWrap.classList.remove('hidden'); // show button
|
|
form.onsubmit = () => {
|
|
handleChatButtonPress(form);
|
|
return false;
|
|
};
|
|
} else if (response === 'mutual') {
|
|
button.removeEventListener('click', toggleModal);
|
|
// eslint-disable-next-line no-param-reassign
|
|
button.classList.remove('hidden'); // show button
|
|
linkWrap.classList.remove('hidden'); // show button
|
|
}
|
|
}
|
|
|
|
function fetchButton(button, modalInfo) {
|
|
var dataRequester;
|
|
// button.dataset.fetched = 'fetched'; // telling initialize that this button has been fetched
|
|
if (window.XMLHttpRequest) {
|
|
dataRequester = new XMLHttpRequest();
|
|
} else {
|
|
dataRequester = new ActiveXObject('Microsoft.XMLHTTP');
|
|
}
|
|
dataRequester.onreadystatechange = () => {
|
|
if (
|
|
dataRequester.readyState === XMLHttpRequest.DONE &&
|
|
dataRequester.status === 200
|
|
) {
|
|
addButtonClickHandle(dataRequester.response, button, modalInfo);
|
|
}
|
|
};
|
|
dataRequester.open(
|
|
'GET',
|
|
'/follows/' + modalInfo.id + '?followable_type=' + modalInfo.className,
|
|
);
|
|
dataRequester.send();
|
|
}
|
|
|
|
function initializeChatButton(button, modalInfo) {
|
|
// if user logged out, do nothing
|
|
var user = userData();
|
|
if (user === null || user.id === modalInfo.id) {
|
|
return;
|
|
}
|
|
fetchButton(button, modalInfo);
|
|
}
|
|
|
|
// finds all elements with chat action button class
|
|
function initializeAllChatButtons() {
|
|
var buttons = document.getElementsByClassName('chat-action-button');
|
|
var modal = document.getElementById('new-message-form');
|
|
var i;
|
|
|
|
if (!modal) {
|
|
return;
|
|
}
|
|
|
|
var modalInfo = JSON.parse(modal.dataset.info);
|
|
initModal();
|
|
|
|
for (i = 0; i < buttons.length; i += 1) {
|
|
initializeChatButton(buttons[i], modalInfo);
|
|
}
|
|
}
|