Fantasy-Map-Generator/versioning.js
Alexander James 47ef8d938b
Religions live update UX (#915)
* preparatory bugfixes

* restructure religion generator for extensibility

* Add culture-like update functions and UI

* Syntax / Typo

* PR Versioning

* Relig Editor UI: hide on brush, limit -> potential

* add / remove Culture creates / removes Folk religion

* Religions UX: stable abbr, Folk non-selectable type & not separately removed

* Folk religions follow cultures through regeneration; extinct religion centers draw, folk centers are immutable and do not

* style

* regenerate bugs fixing

* when cultures regenerate a different number

* ability to lock culture in a easy-defined set

fixes uncaught error in commit dada419 from PR #910

* what is locked folk?

* New Map ignores old locked things

* No auto-update of religion on culture regeneration

* typo

* Bugfixes

* Refactor toward modern style

* Prepare to lock - Further refactor

* Complete locked religions functionality

* Prepare for live updates

* Editors fixing + re-versioning

* Fix merge snafu

* Bugs, toungue-twisting

* indexing bugfix

* Manual Add prefers to create missing Folk

* Locked origin regen; deterministic expansion

* version update; fix add wild folk

---------

Co-authored-by: A C James <james.ander31@gmail.com>
Co-authored-by: Azgaar <maxganiev@yandex.ru>
2023-03-19 02:57:59 -07:00

74 lines
2.9 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"use strict";
// version and caching control
const version = "1.89.12"; // generator version, update each time
{
document.title += " v" + version;
const loadingScreenVersion = document.getElementById("version");
if (loadingScreenVersion) loadingScreenVersion.innerHTML = version;
const versionNumber = parseFloat(version);
const storedVersion = localStorage.getItem("version") ? parseFloat(localStorage.getItem("version")) : 0;
const isOutdated = storedVersion !== versionNumber;
if (isOutdated) clearCache();
const showUpdate = storedVersion < versionNumber;
if (showUpdate) setTimeout(showUpdateWindow, 6000);
function showUpdateWindow() {
const changelog = "https://github.com/Azgaar/Fantasy-Map-Generator/wiki/Changelog";
const reddit = "https://www.reddit.com/r/FantasyMapGenerator";
const discord = "https://discordapp.com/invite/X7E84HU";
const patreon = "https://www.patreon.com/azgaar";
alertMessage.innerHTML = /* html */ `The Fantasy Map Generator is updated up to version <strong>${version}</strong>. This version is compatible with <a href="${changelog}" target="_blank">previous versions</a>, loaded <i>.map</i> files will be auto-updated.
${storedVersion ? "<span>Reload the page to fetch fresh code.</span>" : ""}
<ul>
<strong>Latest changes:</strong>
<li>Religions can be edited and redrawn like cultures</li>
<li>Lock states, provinces, cultures, and religions from regeneration</li>
<li>Heightmap brushes: linear edit option</li>
<li>Data Charts screen</li>
<li>Сultures and religions can have multiple parents in hierarchy tree</li>
<li>Heightmap selection screen</li>
<li>Dialogs optimization for mobile</li>
<li>New heightmap template: Fractious</li>
<li>Template Editor: mask and invert tools</li>
</ul>
<p>Join our <a href="${discord}" target="_blank">Discord server</a> and <a href="${reddit}" target="_blank">Reddit community</a> to ask questions, share maps, discuss the Generator and Worlbuilding, report bugs and propose new features.</p>
<span><i>Thanks for all supporters on <a href="${patreon}" target="_blank">Patreon</a>!</i></span>`;
const buttons = {
Ok: function () {
$(this).dialog("close");
if (storedVersion) localStorage.clear();
localStorage.setItem("version", version);
}
};
if (storedVersion) {
buttons.Reload = () => {
localStorage.clear();
localStorage.setItem("version", version);
location.reload();
};
}
$("#alert").dialog({
resizable: false,
title: "Fantasy Map Generator update",
width: "28em",
position: {my: "center center-4em", at: "center", of: "svg"},
buttons
});
}
async function clearCache() {
const cacheNames = await caches.keys();
Promise.all(cacheNames.map(cacheName => caches.delete(cacheName)));
}
}