66 lines
2.0 KiB
JavaScript
66 lines
2.0 KiB
JavaScript
"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}));
|
|
}
|