"use strict"; const $ = require("jquery"); const socket = require("../socket"); const templates = require("../../views"); // Requests version information if it hasn't been retrieved before (or if it has // been removed from the page, i.e. when clicking on "Check now". Displays a // loading state until received. function requestIfNeeded() { if ($("#version-checker").is(":empty")) { renderVersionChecker({status: "loading"}); socket.emit("changelog"); } } socket.on("changelog", function(data) { // 1. Release notes window for the current version $("#changelog").html(templates.windows.changelog(data.current)); const links = $("#changelog .changelog-text a"); // Make sure all links will open a new tab instead of exiting the application links.prop("target", "_blank"); // Add required metadata to image links, to support built-in image viewer links.has("img").addClass("toggle-thumbnail"); // 2. Version checker visible in Help window let status; if (data.latest) { status = "new-version"; } else if (data.current.changelog) { status = "up-to-date"; } else { status = "error"; } renderVersionChecker({ latest: data.latest, status, }); // When there is a button to refresh the checker available, display it when // data is expired. Before that, server would return same information anyway. if (data.expiresAt) { setTimeout(() => $("#version-checker #check-now").show(), data.expiresAt - Date.now()); } }); $("#help, #changelog").on("show", requestIfNeeded); // When clicking the "Check now" button, remove current checker information and // request a new one. Loading will be displayed in the meantime. $("#help").on("click", "#check-now", () => { $("#version-checker").empty(); requestIfNeeded(); }); // Given a status and latest release information, update the version checker // (CSS class and content) function renderVersionChecker({status, latest}) { $("#version-checker") .prop("class", status) .html(templates.version_checker({latest, status})); }