const api = "https://telq.org/api" async function onTelegramAuth(user) { const r = await fetch(api + "/tg-login", { method: "POST", body: JSON.stringify(user) }); if (!r.ok) { return } const res = await r.json(); setCookie("token", res.token) alert("Вы авторизованы") } async function like(kind, id) { const like = () => document.getElementById('like-' + id) const dislike = () => document.getElementById('dislike-' + id) const rating = () => document.getElementById('rating-' + id) doLike(kind, 'like', id) rating().classList.remove('text-muted') const count = parseInt(rating().textContent) if (document.getElementById('dislike-' + id).classList.contains('btn-danger')) { rating().textContent = (count + 2).toString() like().classList.add('btn-success') like().classList.remove('btn-outline-success') dislike().classList.remove('btn-danger') dislike().classList.add('btn-outline-danger') } else if (document.getElementById('like-' + id).classList.contains('btn-success')) { rating().textContent = (count - 1).toString() like().classList.remove('btn-success') like().classList.add('btn-outline-success') } else { rating().textContent = (count + 1).toString() like().classList.add('btn-success') like().classList.remove('btn-outline-success') } const newRating = parseInt(rating().textContent) if (newRating > 0) { rating().classList.remove('text-danger') rating().classList.add('text-success') } else if (newRating < 0) { rating().classList.remove('text-success') rating().classList.add('text-danger') } else { rating().classList.remove('text-success', 'text-danger') } if (newRating < -9 || newRating > 99) { if (newRating < -999 || newRating > 9999) { rating().style.width = '60px' } else { rating().style.width = '40px' } } } function dislike(kind, id) { const like = () => document.getElementById('like-' + id) const dislike = () => document.getElementById('dislike-' + id) const rating = () => document.getElementById('rating-' + id) doLike(kind, 'dislike', id) rating().classList.remove('text-muted') const count = parseInt(rating().textContent) if (document.getElementById('like-' + id).classList.contains('btn-success')) { rating().textContent = (count - 2).toString() like().classList.remove('btn-success') like().classList.add('btn-outline-success') dislike().classList.add('btn-danger') dislike().classList.remove('btn-outline-danger') } else if (document.getElementById('dislike-' + id).classList.contains('btn-danger')) { rating().textContent = (count + 1).toString() dislike().classList.remove('btn-danger') dislike().classList.add('btn-outline-danger') } else { rating().textContent = (count - 1).toString() dislike().classList.add('btn-danger') dislike().classList.remove('btn-outline-danger') } const newRating = parseInt(rating().textContent) if (newRating > 0) { rating().classList.add('text-success') } else if (newRating < 0) { rating().classList.add('text-danger') } else { rating().classList.remove('text-success', 'text-danger') } if (newRating < -9 || newRating > 99) { if (newRating < -999 || newRating > 9999) { rating().style.width = '60px' } else { rating().style.width = '40px' } } } function setCookie(name, value) { document.cookie = "telq_" + name + "=" + (value || "") + "; path=/"; } function getCookie(name) { const nameEQ = "telq_" + name + "="; const ca = document.cookie.split(';'); for (let i = 0; i < ca.length; i++) { let c = ca[i]; while (c.charAt(0) === ' ') c = c.substring(1, c.length); if (c.indexOf(nameEQ) === 0) return c.substring(nameEQ.length, c.length); } return ''; } function auth() { if (getToken() === "") { const path = window.location.pathname window.location.href = "https://oauth.telegram.org/auth?bot_id=1705210345&origin=https%3A%2F%2Ftelq.org&embed=1&request_access=write&return_to=https%3A%2F%2Ftelq.org" + encodeURIComponent(path) return false } return true } function likeQuestion(id) { const ok = auth() if (!ok) { return } return like('question', id) } function likeReply(id) { const ok = auth() if (!ok) { return } return like('reply', id) } function dislikeQuestion(id) { const ok = auth() if (!ok) { return } return dislike('question', id) } function dislikeReply(id) { const ok = auth() if (!ok) { return } return dislike('reply', id) } function doLike(kind, act, id) { return fetch(`${api}/${kind}/${act}`, { method: "POST", body: JSON.stringify({ id: id, }) }) } function doSub(act, id) { return fetch(`${api}/${act}`, { method: "POST", body: JSON.stringify({ id: id, }) }) } function getToken() { return getCookie("token") } function eachSetText(elems, text) { Array.from(elems).forEach(e => { e.textContent = text }) } function eachAddClass(elems, cl) { Array.from(elems).forEach(e => { e.classList.add(cl) }) } function eachRmClass(elems, cl) { Array.from(elems).forEach(e => { e.classList.remove(cl) }) } function subChn(id) { const ok = auth() if (!ok) { return } const chn = document.getElementsByClassName("chn-sub-" + id) const plus = document.getElementsByClassName("chn-sub-icon-plus-" + id) const minus = document.getElementsByClassName("chn-sub-icon-minus-" + id) if (chn[0].textContent.includes("Подписаться")) { doSub("sub", id) eachSetText(chn, "Вы подписаны") eachAddClass(plus, "d-none") eachRmClass(minus, "d-none") } else { doSub("unsub", id) eachSetText(chn, "Подписаться") eachAddClass(minus, "d-none") eachRmClass(plus, "d-none") } } (function migrTokens() { const tok = localStorage.getItem("token") if (tok) { setCookie("token", tok) } })()