function getHashCode(str) { let hash = 0; if (str.length === 0) return hash; for (let i = 0; i < str.length; i++) { const char = str.charCodeAt(i); hash = (hash << 5) - hash + char; hash = hash & hash; // Convert to 32bit integer } return hash; } function logincallback() { } function setCookie(c_name, value, exdays) { var exdate = new Date(); exdate.setDate(exdate.getDate() + exdays); var c_value = escape(value) + ((exdays == null) ? "" : "; expires=" + exdate.toUTCString()); document.cookie = c_name + "=" + c_value; user_cookie = getCookie("user"); } function getCookie(c_name) { var i, x, y, ARRcookies = document.cookie.split(";"); for (i = 0; i < ARRcookies.length; i++) { x = ARRcookies[i].substr(0, ARRcookies[i].indexOf("=")); y = ARRcookies[i].substr(ARRcookies[i].indexOf("=") + 1); x = x.replace(/^\s+|\s+$/g, ""); if (x == c_name) { return unescape(y); } } } var user_cookie = '???'; var currentUser = null; function loaduser(callback) { user_cookie = getCookie("user"); console.log('cookie:' + user_cookie); $.post( "/getuser", {'cookie' : user_cookie }, function( data ) { console.log('getuser:' + data); var userData = JSON.parse(data); currentUser = userData; console.log('userData:' + userData); console.log('*cookie:' + user_cookie); setCookie('user', userData['cookie'], 7); setUser(userData['cookie']); callback(userData); }); } function formatNumber(val, decimals=1) { console.log('val=' + val); if (val === 0) return '0'; const k = 1000; const dm = decimals < 0 ? 0 : decimals; const sizes = ['', 'k', 'M', 'G']; const i = Math.floor(Math.log(val) / Math.log(k)); return parseFloat((val / Math.pow(k, i)).toFixed(dm)) + '' + sizes[i]; } function setUser(userid) { console.log('userid:', userid); $('#breed_post_user').val(userid); $('#new_post_user').val(userid); $('.usercomment').val(userid); } function calculate_ago($currentElement) { var val = parseFloat($currentElement.html()) * 1000; var diffstr = timeDifference(new Date().getTime(), val); $currentElement.html(diffstr); } function calculate_latency($currentElement) { var val = parseFloat($currentElement.html()) * 1000; var strval = val.toFixed(0) + ' milliseconds'; $currentElement.html(strval); } function calculate_size($currentElement) { var val = parseInt($currentElement.html()); var strval = formatBytes(val); $currentElement.html(strval); } function formatBytes(bytes, decimals = 2) { if (bytes === 0) return '0 Bytes'; const k = 1024; const dm = decimals < 0 ? 0 : decimals; const sizes = ['bytes', 'kb', 'mb', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB']; const i = Math.floor(Math.log(bytes) / Math.log(k)); return parseFloat((bytes / Math.pow(k, i)).toFixed(dm)) + ' ' + sizes[i]; } function timeDifference(current, previous) { var msPerMinute = 60 * 1000; var msPerHour = msPerMinute * 60; var msPerDay = msPerHour * 24; var msPerMonth = msPerDay * 30; var msPerYear = msPerDay * 365; var elapsed = current - previous; if (elapsed < msPerMinute) { return Math.round(elapsed/1000) + ' seconds ago'; } else if (elapsed < msPerHour) { return Math.round(elapsed/msPerMinute) + ' minutes ago'; } else if (elapsed < msPerDay ) { return Math.round(elapsed/msPerHour ) + ' hours ago'; } else if (elapsed < msPerMonth) { return ' ' + Math.round(elapsed/msPerDay) + ' days ago'; } else if (elapsed < msPerYear) { return ' ' + Math.round(elapsed/msPerMonth) + ' months ago'; } else { return ' ' + Math.round(elapsed/msPerYear ) + ' years ago'; } } function onclick_checktime() { var timestate = event.srcElement.getAttribute('timestate'); var timevalue = event.srcElement.getAttribute('timevalue'); timevalue = parseFloat(timevalue) * 1000; if (timestate == 'relative') { timestate = 'utc'; timevalue = new Date(timevalue).toISOString().slice(0, 19).replace('T', ' ') + ' UTC'; } else if (timestate == 'utc') { timestate = 'local'; var dt = new Date(timevalue); timevalue = dt.toLocaleString() + ' ' + dt.toLocaleTimeString('en-us',{timeZoneName:'short'}).split(' ')[2]; } else if (timestate == 'local') { timestate = 'relative'; timevalue = timeDifference(new Date().getTime(), timevalue); } event.srcElement.setAttribute('timestate', timestate); event.srcElement.innerHTML = timevalue; } function eraseCookie(name) { document.cookie = name + '=; Max-Age=0' } function deleteCookie(cookieName) { console.log('delete cookie:' + cookieName); document.cookie = cookieName + "=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;"; } function logout() { deleteCookie('user'); eraseCookie('user'); window.location.reload(); } function handleCredentialResponse(response) { console.log('resp:' + response); $.post( "/signin", {'jwt' : response.credential }, function( data ) { // $( ".result" ).html( data ); console.log('jwt:' + data); var userData = JSON.parse(data); setCookie('user', userData['cookie'], 7); /*if (userData['strata'] == 'Z') { post_sign_in(userData, user_cookie); } else { $('#sign_in_button').show(); }*/ location.reload(); }); } function is_defined(obj, prop) { var value = obj[prop]; if (typeof value === "undefined" || value === null) { return false; } return true; } function showSignInModal() { let htmlBlob = `