<style> .spanReaction:hover{ opacity: 0.7; cursor: pointer; } </style> <div class='reactSection' style='display: none; background: rgba(0,0,0,0.6); border-radius: 10px; text-align: center; border-radius: 10px; font-size: 20px;'> <span class='spanReaction' onclick='react("happy");'>💪</span> <span class='likeCounter'>2</span> <span class='spanReaction' onclick='react("sad");'>😞</span> <span class='dislikeCounter'>3</span> <span class='spanReaction'>👁</span> <span class='viewCounter'>200</span> <br/> </div> <script> let req; let likeCounter = document.querySelector('.reactSection .likeCounter'); let viewCounter = document.querySelector('.reactSection .viewCounter'); let dislikeCounter = document.querySelector('.reactSection .dislikeCounter'); let url = window.location.href; window.addEventListener('load', async function () { if (url.includes('?')) url = url.split('?')[0]; let data = await getInfos(); if (data.includes(url)) { data = JSON.parse(data); let smallData = data.posts[url]; smallData.views = parseInt(smallData.views) + 1; viewCounter.innerText = smallData.views; likeCounter.innerText = smallData.likes; dislikeCounter.innerText = smallData.dislikes; let newData = { "posts": { [url]: { "views": smallData.views, "likes": smallData.likes, "dislikes": smallData.dislikes } } } updateReaction(newData); } else { let newData = { "posts": { [url]: { "views": 1, "likes": 0, "dislikes": 0 } } } viewCounter.innerText = 1; likeCounter.innerText = 0; dislikeCounter.innerText = 0; createReactStats(newData, url); } document.querySelector('.reactSection').style.display = 'block'; /*let posts = Object.keys(data.posts); for(i = 0; i < posts.length; i++) { console.log(data.posts[posts[i]][0].views); console.log(data.posts[posts[i]][1].amazed); console.log(data.posts[posts[i]][2].disappointed); }*/ }, false); function disableReact() { document.querySelector('.reactSection').style.pointerEvents = 'none'; document.querySelector('.reactSection').style.opacity = '0.8'; } function updateReaction(data) { req = new XMLHttpRequest(); req.open('PUT', 'https://getpantry.cloud/apiv1/pantry/91c9a2f3-be20-4b3b-8c9e-94a81264de7a/basket/reactions', true); req.setRequestHeader('Content-Type', 'application/json'); req.send(JSON.stringify(data)); } function react(reaction) { let newData; if(reaction == 'happy') { likeCounter.innerText = parseInt(likeCounter.innerText) + 1; newData = { "posts": { [url]: { "likes": likeCounter.innerText } } } disableReact(); } else { dislikeCounter.innerText = parseInt(dislikeCounter.innerText) + 1; newData = { "posts": { [url]: { "dislikes": dislikeCounter.innerText } } } disableReact(); } updateReaction(newData); } function createReactStats(data, url) { req = new XMLHttpRequest(); req.open('PUT', 'https://getpantry.cloud/apiv1/pantry/91c9a2f3-be20-4b3b-8c9e-94a81264de7a/basket/reactions', true); req.setRequestHeader('Content-Type', 'application/json'); req.send(JSON.stringify(data)); } function getInfos() { return new Promise(function (resolve, reject) { req = new XMLHttpRequest(); req.onload = () => { if (req.readyState == XMLHttpRequest.DONE) { return resolve(req.response); } else return reject('failed'); }; req.open('GET', 'https://getpantry.cloud/apiv1/pantry/91c9a2f3-be20-4b3b-8c9e-94a81264de7a/basket/reactions', true); req.setRequestHeader("Content-Type", "application/json"); req.send(); }); } </script>