function completeHandler(event) { console.log('completed upload') console.log(event.target.responseText) setuser() // skipqc } function errorHandler(event) { console.log('error during upload') console.log(event.target.responseText) } function progressHandler(event) { console.log('progressing upload') console.log('Uploaded ' + event.loaded + ' bytes of ' + event.total) console.log(event.target.responseText) } /** * upload avatar to the server * @return {undefined} no return value */ function uploadFile() { const file = document.getElementById('avatarUpl').files[0] console.log(file) const formdata = new FormData() formdata.append('avatar', file) const ajax = new XMLHttpRequest() ajax.upload.addEventListener('progress', progressHandler, false) ajax.addEventListener('load', completeHandler, false) ajax.addEventListener('error', errorHandler, false) ajax.addEventListener('abort', errorHandler, false) ajax.open('POST', '/api/setavatar') ajax.send(formdata) document.getElementById('avatarUplButton').style = 'display:none;' } function logout() { location.assign('/logout') } async function setuser() { let user = await (await fetch('/api/getuser')).json() let username let bio let avatar username = user['username'] bio = user['bio'] avatar = user['avatar'] if (user['error']) username = user['error'] if (user['error']) bio = user['error'] if (!bio) bio = 'wow such empty' if (avatar) { avatar = '/avatars/' + avatar } else { avatar = '/images/default_avatar.png' } document.getElementById('user').innerText = `User: ${username}` document.getElementById('bio').placeholder = decodeURIComponent(bio) document.getElementById('avatarimg').src = avatar document .getElementById('avatarUpl') .addEventListener('change', function () { document.getElementById('avatarUplButton').style = '' }) document .getElementById('avatarUplButton') .addEventListener('click', uploadFile) } /** * sets user bio * @param {string} str - bio to set * @return {promise} api response */ function sendBio(str) { if (document.getElementById('bio').placeholder !== str && str !== '') { document.getElementById('bio').placeholder = str return post('/api/setBio', { Bio: str }) // skipqc } return '' } async function bioChanger() { document.getElementById('bio').disabled = !document.getElementById('bio').disabled document.getElementById('changeBio').innerText = (document.getElementById('bio').disabled && 'Change Bio') || 'Submit' if (document.getElementById('bio').disabled) { let response = await sendBio(document.getElementById('bio').value) console.log(response) document.getElementById('userstyle').innerHTML = '::placeholder {color: white;} #bio {border: 0px solid black; color:white;}' } else { document.getElementById('userstyle').innerHTML = '::placeholder {color: white;} #bio {border: 2px solid gray; color:white;}' } } async function changePW() { if (window.confirm('Are you sure that you want to change your Password?')) { let re = await ( await post('/api/changePW', { currentPW: document.getElementById('currentPW_pw').value, newPW: document.getElementById('newPW').value, }) ).json() // skipqc document.getElementById('response_pw').innerText = re['error'] || re['success'] document.getElementById('response_pw').style = 'color:green' if (re['error']) { document.getElementById('response_pw').style = 'color:red' } document.getElementById('currentPW').value = '' document.getElementById('newPW').value = '' setuser() } } async function changeUsername() { if (window.confirm('Are you sure that you want to change your Username?')) { // skipqc let re = await ( await post('/api/changeUsername', { currentPW: document .getElementById('currentPW_us') .value.toString(), newUsername: document.getElementById('newUsername').value, }) ).json() document.getElementById('response_us').innerText = re['error'] || re['success'] document.getElementById('response_us').style = 'color:green' if (re['error']) { document.getElementById('response_us').style = 'color:red' } document.getElementById('currentPW').value = '' document.getElementById('newUsername').value = '' setuser() } } async function setAllowCCR() { const ACCR = document.getElementById('ACCR_checkbox').checked const settingname = 'ACCR' //Allow Cross-Channel reply (see #22 ) let r = await ( await post('/api/settings', { setting: settingname, value: ACCR }) ).json() // skipqc if (r.status === 'error') { alert("Couldn't change setting") console.log(r.code) } else if (r.status === 'success') { //changed setting } }