dodatki
This commit is contained in:
@@ -16,4 +16,386 @@ document.querySelectorAll(".close-game-modal").forEach(function(button) {
|
||||
button.addEventListener("click", function() {
|
||||
document.getElementById("game-modal").style.visibility = "hidden";
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
document.getElementById("toggle-collapse").addEventListener("click", function() {
|
||||
const collapseDiv = document.getElementById("page-collapse");
|
||||
if (collapseDiv.style.visibility === "visible") {
|
||||
collapseDiv.style.visibility = "hidden";
|
||||
} else {
|
||||
collapseDiv.style.visibility = "visible";
|
||||
}
|
||||
});
|
||||
|
||||
// Igra
|
||||
|
||||
const gameState = {
|
||||
active: false,
|
||||
loading: false,
|
||||
currentEntry: null,
|
||||
normalizedAnswer: "",
|
||||
attemptsLeft: 3,
|
||||
roundPoints: 100,
|
||||
score: 0,
|
||||
correct: 0,
|
||||
failed: 0,
|
||||
guesses: 0,
|
||||
currentWordGuessed: false
|
||||
};
|
||||
|
||||
const gameElements = {};
|
||||
|
||||
function stripHtmlTags(html) {
|
||||
return String(html || "")
|
||||
.replace(/<\s*br\s*\/?>/gi, "\n")
|
||||
.replace(/<\s*\/p\s*>/gi, "\n")
|
||||
.replace(/<\s*p[^>]*>/gi, "")
|
||||
.replace(/<[^>]+>/g, "")
|
||||
.replace(/ /g, " ")
|
||||
.replace(/&/g, "&")
|
||||
.replace(/</g, "<")
|
||||
.replace(/>/g, ">")
|
||||
.replace(/"/g, '"')
|
||||
.replace(/'/g, "'")
|
||||
.replace(/\n{3,}/g, "\n\n")
|
||||
.trim();
|
||||
}
|
||||
|
||||
function normalizeGuess(value) {
|
||||
return String(value || "")
|
||||
.toLowerCase()
|
||||
.normalize("NFD")
|
||||
.replace(/[\u0300-\u036f]/g, "")
|
||||
.replace(/\s+/g, "")
|
||||
.trim();
|
||||
}
|
||||
|
||||
function parseDefinitions(html) {
|
||||
const plain = stripHtmlTags(html);
|
||||
return plain
|
||||
.split(/\n+/)
|
||||
.map(line => line.trim())
|
||||
.filter(Boolean);
|
||||
}
|
||||
|
||||
function setGameMessage(message, type) {
|
||||
if (!gameElements.feedback) {
|
||||
return;
|
||||
}
|
||||
|
||||
gameElements.feedback.textContent = message;
|
||||
gameElements.feedback.classList.remove("is-success", "is-error", "is-neutral");
|
||||
gameElements.feedback.classList.add(type || "is-neutral");
|
||||
}
|
||||
|
||||
function updateGameStats() {
|
||||
if (gameElements.attemptsLeft) {
|
||||
gameElements.attemptsLeft.textContent = String(gameState.attemptsLeft);
|
||||
}
|
||||
|
||||
if (gameElements.roundPoints) {
|
||||
gameElements.roundPoints.textContent = String(gameState.roundPoints);
|
||||
}
|
||||
|
||||
if (gameElements.score) {
|
||||
gameElements.score.textContent = String(gameState.score);
|
||||
}
|
||||
|
||||
if (gameElements.correct) {
|
||||
gameElements.correct.textContent = String(gameState.correct);
|
||||
}
|
||||
|
||||
if (gameElements.failed) {
|
||||
gameElements.failed.textContent = String(gameState.failed);
|
||||
}
|
||||
|
||||
if (gameElements.guesses) {
|
||||
gameElements.guesses.textContent = String(gameState.guesses);
|
||||
}
|
||||
}
|
||||
|
||||
function setGameScreen(screen) {
|
||||
const screens = ["start", "play", "stats"];
|
||||
screens.forEach(name => {
|
||||
const element = gameElements[`${name}Screen`];
|
||||
if (element) {
|
||||
element.hidden = name !== screen;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function resetRoundState() {
|
||||
gameState.loading = false;
|
||||
gameState.attemptsLeft = 3;
|
||||
gameState.roundPoints = 100;
|
||||
gameState.currentWordGuessed = false;
|
||||
updateGameStats();
|
||||
setGameMessage("", "is-neutral");
|
||||
if (gameElements.guessInput) {
|
||||
gameElements.guessInput.value = "";
|
||||
gameElements.guessInput.disabled = false;
|
||||
gameElements.guessInput.focus();
|
||||
}
|
||||
if (gameElements.submitGuessButton) {
|
||||
gameElements.submitGuessButton.disabled = false;
|
||||
}
|
||||
}
|
||||
|
||||
function renderCurrentEntry(entry) {
|
||||
const definitions = parseDefinitions(entry?.Vsebina);
|
||||
const typeText = entry?.Tip || "-";
|
||||
|
||||
if (gameElements.wordType) {
|
||||
gameElements.wordType.textContent = typeText;
|
||||
}
|
||||
|
||||
if (gameElements.definitions) {
|
||||
if (!definitions.length) {
|
||||
gameElements.definitions.innerHTML = '<p class="game-empty-state">Opis za ta vnos ni na voljo.</p>';
|
||||
} else {
|
||||
gameElements.definitions.innerHTML = definitions
|
||||
.map(definition => `<div class="game-definition-line">${definition}</div>`)
|
||||
.join("");
|
||||
}
|
||||
}
|
||||
|
||||
gameState.currentEntry = entry;
|
||||
gameState.normalizedAnswer = normalizeGuess(entry?.Kljuc);
|
||||
resetRoundState();
|
||||
}
|
||||
|
||||
function showGameStats() {
|
||||
if (gameElements.statScore) {
|
||||
gameElements.statScore.textContent = String(gameState.score);
|
||||
}
|
||||
if (gameElements.statCorrect) {
|
||||
gameElements.statCorrect.textContent = String(gameState.correct);
|
||||
}
|
||||
if (gameElements.statFailed) {
|
||||
gameElements.statFailed.textContent = String(gameState.failed);
|
||||
}
|
||||
if (gameElements.statGuesses) {
|
||||
gameElements.statGuesses.textContent = String(gameState.guesses);
|
||||
}
|
||||
setGameScreen("stats");
|
||||
}
|
||||
|
||||
function nextWord() {
|
||||
if (!gameState.active) {
|
||||
return;
|
||||
}
|
||||
|
||||
gameState.loading = true;
|
||||
setGameMessage("Nalagam nov vnos ...", "is-neutral");
|
||||
|
||||
fetch("https://ssnj.dcrubro.com/api/random-vnos", { method: "GET" })
|
||||
.then(response => {
|
||||
if (!response.ok) {
|
||||
throw new Error(`HTTP ${response.status}`);
|
||||
}
|
||||
return response.json();
|
||||
})
|
||||
.then(data => {
|
||||
if (!data || !data.success || !data.data) {
|
||||
throw new Error("Neveljaven odgovor strežnika");
|
||||
}
|
||||
|
||||
renderCurrentEntry(data.data);
|
||||
setGameScreen("play");
|
||||
setGameMessage("Ugibajte besedo glede na definicijo.", "is-neutral");
|
||||
})
|
||||
.catch(error => {
|
||||
console.error("random-vnos error", error);
|
||||
setGameMessage("Napaka pri nalaganju novega vnosa. Poskusite znova.", "is-error");
|
||||
gameState.loading = false;
|
||||
})
|
||||
.finally(() => {
|
||||
gameState.loading = false;
|
||||
});
|
||||
}
|
||||
|
||||
function finishCurrentWord(correctlyGuessed) {
|
||||
if (correctlyGuessed) {
|
||||
gameState.correct += 1;
|
||||
} else {
|
||||
gameState.failed += 1;
|
||||
gameState.score = Math.max(0, gameState.score - 30);
|
||||
}
|
||||
|
||||
updateGameStats();
|
||||
if (gameElements.guessInput) {
|
||||
gameElements.guessInput.value = "";
|
||||
}
|
||||
|
||||
setTimeout(() => {
|
||||
if (gameState.active) {
|
||||
nextWord();
|
||||
}
|
||||
}, 700);
|
||||
}
|
||||
|
||||
function submitGuess() {
|
||||
if (!gameState.active || gameState.loading || !gameState.currentEntry) {
|
||||
return;
|
||||
}
|
||||
|
||||
const guess = normalizeGuess(gameElements.guessInput ? gameElements.guessInput.value : "");
|
||||
if (!guess) {
|
||||
setGameMessage("Vnesite svoj ugib.", "is-error");
|
||||
return;
|
||||
}
|
||||
|
||||
gameState.guesses += 1;
|
||||
updateGameStats();
|
||||
|
||||
if (guess === gameState.normalizedAnswer) {
|
||||
gameState.currentWordGuessed = true;
|
||||
gameState.score += gameState.roundPoints;
|
||||
setGameMessage(`Pravilno. Rešitev je ${gameState.currentEntry.Kljuc}.`, "is-success");
|
||||
updateGameStats();
|
||||
finishCurrentWord(true);
|
||||
return;
|
||||
}
|
||||
|
||||
gameState.attemptsLeft -= 1;
|
||||
gameState.roundPoints = gameState.attemptsLeft === 2 ? 50 : gameState.attemptsLeft === 1 ? 25 : 0;
|
||||
updateGameStats();
|
||||
|
||||
if (gameState.attemptsLeft > 0) {
|
||||
setGameMessage(`Napačno. Preostali poskusi: ${gameState.attemptsLeft}.`, "is-error");
|
||||
if (gameElements.guessInput) {
|
||||
gameElements.guessInput.value = "";
|
||||
gameElements.guessInput.focus();
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
setGameMessage(`Tudi tretji poskus ni uspel. Rešitev je ${gameState.currentEntry.Kljuc}.`, "is-error");
|
||||
finishCurrentWord(false);
|
||||
}
|
||||
|
||||
function startGame() {
|
||||
gameState.active = true;
|
||||
gameState.score = 0;
|
||||
gameState.correct = 0;
|
||||
gameState.failed = 0;
|
||||
gameState.guesses = 0;
|
||||
updateGameStats();
|
||||
setGameScreen("play");
|
||||
nextWord();
|
||||
}
|
||||
|
||||
function bindGameElements() {
|
||||
gameElements.startScreen = document.getElementById("game-start-screen");
|
||||
gameElements.playScreen = document.getElementById("game-play-screen");
|
||||
gameElements.statsScreen = document.getElementById("game-stats-screen");
|
||||
gameElements.wordType = document.getElementById("game-word-type");
|
||||
gameElements.definitions = document.getElementById("game-definitions");
|
||||
gameElements.guessInput = document.getElementById("game-guess-input");
|
||||
gameElements.submitGuessButton = document.getElementById("submit-guess-button");
|
||||
gameElements.restartGameButton = document.getElementById("restart-game-button");
|
||||
gameElements.feedback = document.getElementById("game-feedback");
|
||||
gameElements.attemptsLeft = document.getElementById("game-attempts-left");
|
||||
gameElements.roundPoints = document.getElementById("game-round-points");
|
||||
gameElements.score = document.getElementById("game-stat-score");
|
||||
gameElements.correct = document.getElementById("game-stat-correct");
|
||||
gameElements.failed = document.getElementById("game-stat-failed");
|
||||
gameElements.guesses = document.getElementById("game-stat-guesses");
|
||||
gameElements.statScore = document.getElementById("game-stat-score");
|
||||
gameElements.statCorrect = document.getElementById("game-stat-correct");
|
||||
gameElements.statFailed = document.getElementById("game-stat-failed");
|
||||
gameElements.statGuesses = document.getElementById("game-stat-guesses");
|
||||
}
|
||||
|
||||
bindGameElements();
|
||||
|
||||
document.getElementById("start-game-button").addEventListener("click", startGame);
|
||||
document.getElementById("submit-guess-button").addEventListener("click", submitGuess);
|
||||
document.getElementById("restart-game-button").addEventListener("click", startGame);
|
||||
document.getElementById("game-guess-input").addEventListener("keydown", function(event) {
|
||||
if (event.key === "Enter") {
|
||||
event.preventDefault();
|
||||
submitGuess();
|
||||
}
|
||||
});
|
||||
// Konec igre
|
||||
|
||||
// Davčne stopnje in razredi za leto 2025
|
||||
const taxBrackets = [
|
||||
{ razred: 1, min: 0, max: 9210.26, rate: 16 },
|
||||
{ razred: 2, min: 9210.26, max: 27089.00, rate: 26 },
|
||||
{ razred: 3, min: 27089.00, max: 54178.00, rate: 33 },
|
||||
{ razred: 4, min: 54178.00, max: 78016.32, rate: 39 },
|
||||
{ razred: 5, min: 78016.32, max: Infinity, rate: 50 }
|
||||
];
|
||||
|
||||
const STANDARD_DEDUCTION = 5551.93;
|
||||
|
||||
function parseEurAmount(input) {
|
||||
if (!input) return null;
|
||||
// Remove spaces, replace . with empty (thousands separator) and , with . (decimal)
|
||||
let normalized = input.trim().replace(/\s/g, "").replace(/\./g, "").replace(",", ".");
|
||||
let num = parseFloat(normalized);
|
||||
return isNaN(num) ? null : num;
|
||||
}
|
||||
|
||||
function formatEurAmount(num) {
|
||||
// Format with thousands separator (.) and decimal separator (,)
|
||||
return num.toFixed(2).replace(".", ",").replace(/\B(?=(\d{3})+(?!\d))/g, ".");
|
||||
}
|
||||
|
||||
function calculateTaxBracket(amount) {
|
||||
for (let bracket of taxBrackets) {
|
||||
if (amount >= bracket.min && amount < bracket.max) {
|
||||
return bracket;
|
||||
}
|
||||
}
|
||||
return taxBrackets[taxBrackets.length - 1]; // Return highest bracket
|
||||
}
|
||||
|
||||
function calculateProgressiveTax(amount) {
|
||||
let totalTax = 0;
|
||||
|
||||
for (let bracket of taxBrackets) {
|
||||
if (amount <= bracket.min) {
|
||||
break;
|
||||
}
|
||||
|
||||
let upperLimit = Math.min(amount, bracket.max);
|
||||
let taxableInBracket = upperLimit - bracket.min;
|
||||
totalTax += taxableInBracket * (bracket.rate / 100);
|
||||
}
|
||||
|
||||
return totalTax;
|
||||
}
|
||||
|
||||
function updateCalculator() {
|
||||
const amountInput = document.getElementById("amount-input").value;
|
||||
const useDeduction = document.getElementById("deduction-checkbox").checked;
|
||||
const resultDiv = document.getElementById("calculator-result");
|
||||
|
||||
let amount = parseEurAmount(amountInput);
|
||||
|
||||
if (amount === null || amount < 0) {
|
||||
resultDiv.style.display = "none";
|
||||
return;
|
||||
}
|
||||
|
||||
let taxBasis = amount;
|
||||
if (useDeduction && amount > STANDARD_DEDUCTION) {
|
||||
taxBasis = amount - STANDARD_DEDUCTION;
|
||||
}
|
||||
|
||||
const bracket = calculateTaxBracket(taxBasis);
|
||||
const taxAmount = calculateProgressiveTax(taxBasis);
|
||||
|
||||
document.getElementById("result-razred").textContent = bracket.razred;
|
||||
document.getElementById("result-rate").textContent = bracket.rate + " %";
|
||||
document.getElementById("result-basis").textContent = formatEurAmount(taxBasis) + " EUR";
|
||||
document.getElementById("result-tax").textContent = formatEurAmount(taxAmount) + " EUR";
|
||||
|
||||
resultDiv.style.display = "block";
|
||||
}
|
||||
|
||||
document.getElementById("amount-input").addEventListener("input", updateCalculator);
|
||||
document.getElementById("deduction-checkbox").addEventListener("change", updateCalculator);
|
||||
@@ -5,9 +5,9 @@ function getSpecific(kljuc) {
|
||||
function getLast() {
|
||||
const url = `https://ssnj.dcrubro.com/api/vnosi`;
|
||||
fetch(url, {
|
||||
method: 'POST',
|
||||
method: "POST",
|
||||
headers: {
|
||||
'Content-Type': 'application/json'
|
||||
"Content-Type": "application/json"
|
||||
},
|
||||
body: JSON.stringify({
|
||||
query: "*",
|
||||
@@ -17,7 +17,7 @@ function getLast() {
|
||||
.then(response => response.json())
|
||||
.then(data => {
|
||||
if (!data.success) {
|
||||
console.error('API Error:', data.message);
|
||||
console.error("API Error:", data.message);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -35,7 +35,7 @@ function getLast() {
|
||||
}
|
||||
})
|
||||
.catch((error) => {
|
||||
console.error('Error:', error);
|
||||
console.error("Error:", error);
|
||||
});
|
||||
}
|
||||
|
||||
@@ -46,9 +46,9 @@ function search() {
|
||||
|
||||
const url = `https://ssnj.dcrubro.com/api/vnosi`;
|
||||
fetch(url, {
|
||||
method: 'POST',
|
||||
method: "POST",
|
||||
headers: {
|
||||
'Content-Type': 'application/json'
|
||||
"Content-Type": "application/json"
|
||||
},
|
||||
body: JSON.stringify({
|
||||
query: `*${val}*`, // Potencialno mora biti tukaj en "*" wildcard
|
||||
@@ -59,7 +59,7 @@ function search() {
|
||||
.then(response => response.json())
|
||||
.then(data => {
|
||||
if (!data.success) {
|
||||
console.error('API Error:', data.message);
|
||||
console.error("API Error:", data.message);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -89,7 +89,7 @@ function search() {
|
||||
}
|
||||
})
|
||||
.catch((error) => {
|
||||
console.error('Error:', error);
|
||||
console.error("Error:", error);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -26,26 +26,26 @@ const footerHtml = `
|
||||
`;
|
||||
|
||||
function getCurrentTheme() {
|
||||
return document.documentElement.getAttribute('data-theme') === 'dark' ? 'dark' : 'light';
|
||||
return document.documentElement.getAttribute("data-theme") === "dark" ? "dark" : "light";
|
||||
}
|
||||
|
||||
function updateToggleState(theme) {
|
||||
const icon = document.getElementById('toggle-icon');
|
||||
const toggleButton = document.getElementById('theme-toggle');
|
||||
const icon = document.getElementById("toggle-icon");
|
||||
const toggleButton = document.getElementById("theme-toggle");
|
||||
|
||||
if (!icon || !toggleButton) {
|
||||
return;
|
||||
}
|
||||
|
||||
icon.textContent = theme === 'dark' ? '🌙' : '☀';
|
||||
toggleButton.setAttribute('aria-pressed', theme === 'dark' ? 'true' : 'false');
|
||||
toggleButton.setAttribute('aria-label', theme === 'dark' ? 'Svetli način' : 'Temni način');
|
||||
icon.textContent = theme === "dark" ? "🌙" : "☀";
|
||||
toggleButton.setAttribute("aria-pressed", theme === "dark" ? "true" : "false");
|
||||
toggleButton.setAttribute("aria-label", theme === "dark" ? "Svetli način" : "Temni način");
|
||||
}
|
||||
|
||||
function logout() {
|
||||
// Odstrani cookie tako, da ga nastaviš z max-age=0
|
||||
document.cookie = 'token=; max-age=0; path=/; secure; samesite=strict';
|
||||
document.cookie = 'username=; max-age=0; path=/; secure; samesite=strict';
|
||||
document.cookie = "token=; max-age=0; path=/; secure; samesite=strict";
|
||||
document.cookie = "username=; max-age=0; path=/; secure; samesite=strict";
|
||||
window.location.href = "/";
|
||||
}
|
||||
|
||||
@@ -59,23 +59,23 @@ document.addEventListener("DOMContentLoaded", function() {
|
||||
}
|
||||
|
||||
// Dodaj gumb za prijavo, če uporabnik ni prijavljen
|
||||
const isLoggedIn = document.cookie.split(';').some(cookie => cookie.trim().startsWith('token='));
|
||||
const isLoggedIn = document.cookie.split(";").some(cookie => cookie.trim().startsWith("token="));
|
||||
if (!isLoggedIn) {
|
||||
const navRight = document.querySelector('.nav-right');
|
||||
const navRight = document.querySelector(".nav-right");
|
||||
if (navRight) {
|
||||
const loginBtn = `<a class="nav-btn nav-btn-primary" href="/login.html">Prijava</a>`;
|
||||
// Najdi zadnji <a> element in dodaj gumb za njim
|
||||
const lastLink = navRight.querySelector('a:last-child');
|
||||
const lastLink = navRight.querySelector("a:last-child");
|
||||
document.getElementById("nav-login-holder").innerHTML = loginBtn;
|
||||
}
|
||||
} else {
|
||||
const navRight = document.querySelector('.nav-right');
|
||||
const navRight = document.querySelector(".nav-right");
|
||||
if (navRight) {
|
||||
const logoutBtn = `<a class="nav-btn nav-btn-primary" href="/">Odjava</a>`;
|
||||
// Najdi zadnji <a> element in dodaj gumb za njim
|
||||
const lastLink = navRight.querySelector('a:last-child');
|
||||
const lastLink = navRight.querySelector("a:last-child");
|
||||
document.getElementById("nav-login-holder").innerHTML = logoutBtn;
|
||||
document.querySelector('.nav-btn-primary').addEventListener('click', logout);
|
||||
document.querySelector(".nav-btn-primary").addEventListener("click", logout);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -84,20 +84,45 @@ document.addEventListener("DOMContentLoaded", function() {
|
||||
}
|
||||
|
||||
updateToggleState(getCurrentTheme());
|
||||
|
||||
// Univerzalne funkcionalnosti, ki so potrebne na več straneh
|
||||
const galleryImages = document.querySelectorAll(".page-gallery-image");
|
||||
galleryImages.forEach(image => {
|
||||
image.addEventListener("click", () => {
|
||||
const src = image.getAttribute("src");
|
||||
const alt = image.getAttribute("alt");
|
||||
const modalHtml = `
|
||||
<div class="modal" id="image-modal">
|
||||
<div class="modal-content">
|
||||
<span class="close">×</span>
|
||||
<img src="${src}" alt="${alt}" class="image-modal-img">
|
||||
<p>${alt}</p>
|
||||
</div>
|
||||
</div>
|
||||
`;
|
||||
document.body.insertAdjacentHTML("beforeend", modalHtml);
|
||||
const modal = document.getElementById("image-modal");
|
||||
modal.style.visibility = "visible";
|
||||
|
||||
modal.querySelector(".close").addEventListener("click", () => {
|
||||
modal.remove();
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
function toggleTheme() {
|
||||
const current = getCurrentTheme();
|
||||
const next = current === 'dark' ? 'light' : 'dark';
|
||||
document.documentElement.setAttribute('data-theme', next);
|
||||
localStorage.setItem('theme', next);
|
||||
const next = current === "dark" ? "light" : "dark";
|
||||
document.documentElement.setAttribute("data-theme", next);
|
||||
localStorage.setItem("theme", next);
|
||||
updateToggleState(next);
|
||||
}
|
||||
|
||||
matchMedia('(prefers-color-scheme: dark)').addEventListener('change', (e) => {
|
||||
if (!localStorage.getItem('theme')) {
|
||||
const theme = e.matches ? 'dark' : 'light';
|
||||
document.documentElement.setAttribute('data-theme', theme);
|
||||
matchMedia("(prefers-color-scheme: dark)").addEventListener("change", (e) => {
|
||||
if (!localStorage.getItem("theme")) {
|
||||
const theme = e.matches ? "dark" : "light";
|
||||
document.documentElement.setAttribute("data-theme", theme);
|
||||
updateToggleState(theme);
|
||||
}
|
||||
});
|
||||
@@ -1,9 +1,9 @@
|
||||
(function() {
|
||||
try {
|
||||
const saved = localStorage.getItem('theme');
|
||||
const osPref = matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';
|
||||
document.documentElement.setAttribute('data-theme', saved || osPref);
|
||||
const saved = localStorage.getItem("theme");
|
||||
const osPref = matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light";
|
||||
document.documentElement.setAttribute("data-theme", saved || osPref);
|
||||
} catch (e) {
|
||||
document.documentElement.setAttribute('data-theme', 'light');
|
||||
document.documentElement.setAttribute("data-theme", "light");
|
||||
}
|
||||
})();
|
||||
@@ -72,10 +72,10 @@ document.getElementById("login-form").addEventListener("submit", async function(
|
||||
const serverMsg = (data && data.message) ? String(data.message).toLowerCase() : "";
|
||||
let userMsg = "Uporabniško ime ali e-pošta je že zasedena.";
|
||||
|
||||
if (serverMsg.includes('username') || serverMsg.includes('uporab') || serverMsg.includes('user')) {
|
||||
userMsg = 'Uporabniško ime je že zasedeno.';
|
||||
} else if (serverMsg.includes('email') || serverMsg.includes('e-pošta') || serverMsg.includes('e-naslov')) {
|
||||
userMsg = 'E-poštni naslov je že uporabljen.';
|
||||
if (serverMsg.includes("username") || serverMsg.includes("uporab") || serverMsg.includes("user")) {
|
||||
userMsg = "Uporabniško ime je že zasedeno.";
|
||||
} else if (serverMsg.includes("email") || serverMsg.includes("e-pošta") || serverMsg.includes("e-naslov")) {
|
||||
userMsg = "E-poštni naslov je že uporabljen.";
|
||||
} else if (serverMsg) {
|
||||
userMsg = data.message; // show server message if it's something specific
|
||||
}
|
||||
|
||||
@@ -8,9 +8,9 @@ function getCookie(name) {
|
||||
function getKey() {
|
||||
const url = `https://ssnj.dcrubro.com/api/vnos`;
|
||||
fetch(url, {
|
||||
method: 'POST',
|
||||
method: "POST",
|
||||
headers: {
|
||||
'Content-Type': 'application/json'
|
||||
"Content-Type": "application/json"
|
||||
},
|
||||
body: JSON.stringify({
|
||||
pk: kljuc
|
||||
@@ -19,7 +19,7 @@ function getKey() {
|
||||
.then(response => response.json())
|
||||
.then(data => {
|
||||
if (!data.success) {
|
||||
console.error('API Error:', data.message);
|
||||
console.error("API Error:", data.message);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -96,39 +96,39 @@ function getKey() {
|
||||
});
|
||||
})
|
||||
.catch((error) => {
|
||||
console.error('Error:', error);
|
||||
console.error("Error:", error);
|
||||
});
|
||||
}
|
||||
|
||||
getKey();
|
||||
|
||||
function initVoting(entryData) {
|
||||
const upBtn = document.getElementById('vote-up');
|
||||
const downBtn = document.getElementById('vote-down');
|
||||
const sumEl = document.getElementById('vote-sum');
|
||||
const upBtn = document.getElementById("vote-up");
|
||||
const downBtn = document.getElementById("vote-down");
|
||||
const sumEl = document.getElementById("vote-sum");
|
||||
if (!upBtn || !downBtn || !sumEl) return;
|
||||
|
||||
const token = getCookie('token');
|
||||
const token = getCookie("token");
|
||||
|
||||
let currentVote = 0;
|
||||
|
||||
function setActive(v) {
|
||||
upBtn.classList.toggle('nav-btn-primary', v === 1);
|
||||
downBtn.classList.toggle('nav-btn-primary', v === -1);
|
||||
upBtn.classList.toggle("nav-btn-primary", v === 1);
|
||||
downBtn.classList.toggle("nav-btn-primary", v === -1);
|
||||
currentVote = v;
|
||||
}
|
||||
|
||||
if (!token) {
|
||||
const showLogin = () => alert('Prijavite se, da lahko glasujete.');
|
||||
upBtn.addEventListener('click', showLogin);
|
||||
downBtn.addEventListener('click', showLogin);
|
||||
const showLogin = () => alert("Prijavite se, da lahko glasujete.");
|
||||
upBtn.addEventListener("click", showLogin);
|
||||
downBtn.addEventListener("click", showLogin);
|
||||
return;
|
||||
}
|
||||
|
||||
// fetch whether the current user has voted
|
||||
fetch('https://ssnj.dcrubro.com/api/semvolil', {
|
||||
method: 'POST',
|
||||
headers: { 'Content-Type': 'application/json' },
|
||||
fetch("https://ssnj.dcrubro.com/api/semvolil", {
|
||||
method: "POST",
|
||||
headers: { "Content-Type": "application/json" },
|
||||
body: JSON.stringify({ token: token, pk: kljuc })
|
||||
})
|
||||
.then(r => r.json())
|
||||
@@ -136,29 +136,29 @@ function initVoting(entryData) {
|
||||
const v = obj?.vote || 0;
|
||||
setActive(v);
|
||||
})
|
||||
.catch(err => console.error('semvolil error', err));
|
||||
.catch(err => console.error("semvolil error", err));
|
||||
|
||||
upBtn.addEventListener('click', () => submitVote(1));
|
||||
downBtn.addEventListener('click', () => submitVote(-1));
|
||||
upBtn.addEventListener("click", () => submitVote(1));
|
||||
downBtn.addEventListener("click", () => submitVote(-1));
|
||||
|
||||
function submitVote(vote) {
|
||||
const tokenNow = getCookie('token');
|
||||
if (!tokenNow) { alert('Prijavite se, da lahko glasujete.'); return; }
|
||||
const tokenNow = getCookie("token");
|
||||
if (!tokenNow) { alert("Prijavite se, da lahko glasujete."); return; }
|
||||
|
||||
// if user clicks the same vote, send 0 to remove it
|
||||
const sendVote = (vote === currentVote) ? 0 : vote;
|
||||
|
||||
fetch('https://ssnj.dcrubro.com/api/volI', {
|
||||
method: 'POST',
|
||||
headers: { 'Content-Type': 'application/json' },
|
||||
fetch("https://ssnj.dcrubro.com/api/volI", {
|
||||
method: "POST",
|
||||
headers: { "Content-Type": "application/json" },
|
||||
body: JSON.stringify({ token: tokenNow, pk: kljuc, vote: sendVote })
|
||||
})
|
||||
.then(r => r.json())
|
||||
.then(() => {
|
||||
// refresh current score
|
||||
return fetch('https://ssnj.dcrubro.com/api/vnos', {
|
||||
method: 'POST',
|
||||
headers: { 'Content-Type': 'application/json' },
|
||||
return fetch("https://ssnj.dcrubro.com/api/vnos", {
|
||||
method: "POST",
|
||||
headers: { "Content-Type": "application/json" },
|
||||
body: JSON.stringify({ pk: kljuc })
|
||||
});
|
||||
})
|
||||
@@ -170,6 +170,6 @@ function initVoting(entryData) {
|
||||
setActive(sendVote);
|
||||
}
|
||||
})
|
||||
.catch(err => console.error('vote error', err));
|
||||
.catch(err => console.error("vote error", err));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user