{%- if page.tool -%} {%- assign tool = page.tool -%} {%- assign data = site.data.rating.rating.tools -%} <div class=“rating-tool”>
<img id="rating-img" loading='lazy' src="/assets/images/rating.webp" alt="rating-img"> <div class="rating-text">Rate this tool</div> <div class="rating-stars"> <i class="bi bi-star-fill rating-star"></i> <i class="bi bi-star-fill rating-star"></i> <i class="bi bi-star-fill rating-star"></i> <i class="bi bi-star-fill rating-star"></i> <i class="bi bi-star-fill rating-star"></i> </div> <div class="rating-value ml-2"> {%- for item in data -%} {%- if item.name ==tool -%} {%- assign rating = item.rating -%} {%- assign votes = item.votes -%} {%- endif -%} {%- endfor -%} <span class="rating"> <strong id='rating'>{{rating}}</strong><span>/5</span> </span> <span class="total-ratings" id='count'>{{votes}} </span> votes </div>
</div> <script>
const ratingValue = document.getElementById('rating') const count = document.getElementById('count') const setRating = async (rating) => { const name = '{{site.name}}' const tool = '{{page.tool}}' const data = { website: name, feature: tool, rating: rating }; fetch('https://ratingapi-main.netlify.app/.netlify/functions/api/v1/rating/add', { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify(data), }) .then(response => response.json()) .then(data => { ratingValue.innerText = data.rating count.innerText = data.count }) .catch((error) => { console.error('Error:', error); }); } const tool = '{{page.tool}}' const fetchRating = async () => { const data = await fetch(`https://ratingapi-main.netlify.app/.netlify/functions/api/v1/${tool}/rating`).then(res => res.json()) ratingValue.innerText = data.rating count.innerText = data.votes } let ratingImg = document.querySelector('#rating-img'); ratingImg.addEventListener('load', (event) => { fetchRating() }); const ratingNode = document.getElementsByClassName('rating-star') let ratedValue = localStorage.getItem(`${tool}rating`) if (ratedValue) { Array.from(ratingNode).slice(0, ratedValue).map(item => { item.style.color = '#FDD300' }) } Array.from(ratingNode).map(item => item.addEventListener('click', () => { const tool = '{{page.tool}}' if (!localStorage.getItem(`${tool}rating`)) { function indexInClass(node) { var className = node.className; var num = 0; for (var i = 0; i < ratingNode.length; i++) { if (ratingNode[i] === node) { return num; } num++; } return -1; } const index = indexInClass(item) Array.from(ratingNode).slice(0, index + 1).map(item => { item.style.color = '#FDD300' }) setRating(index + 1) localStorage.setItem(`${tool}rating`, index + 1) } }))
</script>
{%- endif -%}