Merge branch 'master' of https://github.com/Azgaar/Fantasy-Map-Generator into charts-overview

This commit is contained in:
Azgaar 2022-06-23 23:29:43 +03:00
commit c1ee0b3094
4 changed files with 47 additions and 13 deletions

View file

@ -68,13 +68,27 @@ function appendStyleSheet() {
margin: 0 2px; margin: 0 2px;
} }
.hierarchyTree_selectedButton { #hierarchyTree {
display: flex;
flex-direction: column;
justify-content: space-between;
}
#hierarchyTree > svg {
height: 100%;
}
.hierarchyTree_selectedOrigins {
margin-right: 15px;
}
.hierarchyTree_selectedOrigin {
border: 1px solid #aaa; border: 1px solid #aaa;
background: none; background: none;
padding: 1px 4px; padding: 1px 4px;
} }
.hierarchyTree_selectedButton:hover { .hierarchyTree_selectedOrigin:hover {
border: 1px solid #333; border: 1px solid #333;
} }
@ -88,6 +102,10 @@ function appendStyleSheet() {
color: #333; color: #333;
} }
#hierarchyTree_originSelector {
display: none;
}
#hierarchyTree_originSelector > form > div { #hierarchyTree_originSelector > form > div {
padding: 0.3em; padding: 0.3em;
margin: 1px 0; margin: 1px 0;
@ -147,8 +165,8 @@ function insertHtml() {
<span><span id='hierarchyTree_selectedName'></span>. </span> <span><span id='hierarchyTree_selectedName'></span>. </span>
<span data-name="Type short name (abbreviation)">Abbreviation: <input id='hierarchyTree_selectedCode' type='text' maxlength='3' size='3' /></span> <span data-name="Type short name (abbreviation)">Abbreviation: <input id='hierarchyTree_selectedCode' type='text' maxlength='3' size='3' /></span>
<span>Origins: <span id='hierarchyTree_selectedOrigins'></span></span> <span>Origins: <span id='hierarchyTree_selectedOrigins'></span></span>
<button data-tip='Add origin' class="hierarchyTree_selectedButton" id='hierarchyTree_selectedSelectButton'>Select</button> <button data-tip='Edit this node's origins' class="hierarchyTree_selectedButton" id='hierarchyTree_selectedSelectButton'>Edit</button>
<button data-tip='Exit edit mode' class="hierarchyTree_selectedButton" id='hierarchyTree_selectedCloseButton'>Exit</button> <button data-tip='Unselect this node' class="hierarchyTree_selectedButton" id='hierarchyTree_selectedCloseButton'>Unselect</button>
</div> </div>
</div> </div>
<div id="hierarchyTree_originSelector"></div> <div id="hierarchyTree_originSelector"></div>
@ -237,12 +255,18 @@ function renderTree(root, treeLayout) {
.call(d3.drag().on("start", dragToReorigin)); .call(d3.drag().on("start", dragToReorigin));
node node
.append("path") .selectAll("path")
.attr("d", ({data}) => shapesMap[getShape(data)]) .data(d => [d])
.join("path")
.attr("d", d => shapesMap[getShape(d.data)])
.attr("fill", d => d.data.color || "#ffffff") .attr("fill", d => d.data.color || "#ffffff")
.attr("stroke-dasharray", d => (d.data.cells ? "none" : "1")); .attr("stroke-dasharray", d => (d.data.cells ? "none" : "1"));
node.append("text").text(d => d.data.code || ""); node
.selectAll("text")
.data(d => [d])
.join("text")
.text(d => d.data.code || "");
} }
function mapCoords(newRoot, prevRoot) { function mapCoords(newRoot, prevRoot) {
@ -320,6 +344,7 @@ function updateTree() {
function selectElement(d) { function selectElement(d) {
const dataElement = d.data; const dataElement = d.data;
if (d.id == 0) return;
const node = nodes.select(`g[data-id="${d.id}"]`); const node = nodes.select(`g[data-id="${d.id}"]`);
nodes.selectAll("g").style("outline", "none"); nodes.selectAll("g").style("outline", "none");
@ -453,6 +478,8 @@ function handleNodeExit(d) {
} }
function dragToReorigin(from) { function dragToReorigin(from) {
if (from.id == 0) return;
dragLine.attr("d", `M${from.x},${from.y}L${from.x},${from.y}`); dragLine.attr("d", `M${from.x},${from.y}L${from.x},${from.y}`);
d3.event.on("drag", () => { d3.event.on("drag", () => {

View file

@ -40,5 +40,5 @@ export const supporters = format(`
Jordan,William Markus,Sidr Dim,Alexander Whittaker,The Next Level,Patrick Valverde,Markus Peham,Daniel Cooper,the Beagles of Neorbus,Marley Moule, Jordan,William Markus,Sidr Dim,Alexander Whittaker,The Next Level,Patrick Valverde,Markus Peham,Daniel Cooper,the Beagles of Neorbus,Marley Moule,
Maximilian Schielke,Johnathan Xavier Hutchinson,Ele,Rita,Randy Ross,John Wick,RedSpaz,cameron cannon,Ian Grau-Fay,Kyle Barrett,Charlotte Wiland, Maximilian Schielke,Johnathan Xavier Hutchinson,Ele,Rita,Randy Ross,John Wick,RedSpaz,cameron cannon,Ian Grau-Fay,Kyle Barrett,Charlotte Wiland,
David Kaul,E. Jason Davis,Cyberate,Atenfox,Sea Wolf,Holly Loveless,Roekai,Alden Z,angel carrillo,Sam Spoerle,S A Rudy,Bird Law Expert,Mira Cyr, David Kaul,E. Jason Davis,Cyberate,Atenfox,Sea Wolf,Holly Loveless,Roekai,Alden Z,angel carrillo,Sam Spoerle,S A Rudy,Bird Law Expert,Mira Cyr,
Aaron Blair,Neyimadd,RLKZ1022,DerWolf,Kenji Yamada,Zion Aaron Blair,Neyimadd,RLKZ1022,DerWolf,Kenji Yamada,Zion,Robert Rinne,Actual_Dio,Kyarou
`); `);

View file

@ -4,6 +4,8 @@ document.addEventListener("keydown", handleKeydown);
document.addEventListener("keyup", handleKeyup); document.addEventListener("keyup", handleKeyup);
function handleKeydown(event) { function handleKeydown(event) {
if (!allowHotkeys()) return; // in some cases (e.g. in a textarea) hotkeys are not allowed
const {code, ctrlKey, altKey} = event; const {code, ctrlKey, altKey} = event;
if (altKey && !ctrlKey) event.preventDefault(); // disallow alt key combinations if (altKey && !ctrlKey) event.preventDefault(); // disallow alt key combinations
if (ctrlKey && ["KeyS", "KeyC"].includes(code)) event.preventDefault(); // disallow CTRL + S and CTRL + C if (ctrlKey && ["KeyS", "KeyC"].includes(code)) event.preventDefault(); // disallow CTRL + S and CTRL + C
@ -12,11 +14,8 @@ function handleKeydown(event) {
function handleKeyup(event) { function handleKeyup(event) {
if (!modules.editors) return; // if editors are not loaded, do nothing if (!modules.editors) return; // if editors are not loaded, do nothing
if (!allowHotkeys()) return; // in some cases (e.g. in a textarea) hotkeys are not allowed
const {tagName, contentEditable} = document.activeElement;
if (["INPUT", "SELECT", "TEXTAREA"].includes(tagName)) return; // don't trigger if user inputs text
if (tagName === "DIV" && contentEditable === "true") return; // don't trigger if user inputs a text
if (document.getSelection().toString()) return; // don't trigger if user selects text
event.stopPropagation(); event.stopPropagation();
const {code, key, ctrlKey, metaKey, shiftKey, altKey} = event; const {code, key, ctrlKey, metaKey, shiftKey, altKey} = event;
@ -110,6 +109,14 @@ function handleKeyup(event) {
else if (ctrl) toggleMode(); else if (ctrl) toggleMode();
} }
function allowHotkeys() {
const {tagName, contentEditable} = document.activeElement;
if (["INPUT", "SELECT", "TEXTAREA"].includes(tagName)) return false;
if (tagName === "DIV" && contentEditable === "true") return false;
if (document.getSelection().toString()) return false;
return true;
}
function pressNumpadSign(key) { function pressNumpadSign(key) {
const change = key === "+" ? 1 : -1; const change = key === "+" ? 1 : -1;
let brush = null; let brush = null;

View file

@ -76,7 +76,7 @@ document
// show popup with a list of Patreon supportes (updated manually) // show popup with a list of Patreon supportes (updated manually)
async function showSupporters() { async function showSupporters() {
const {supporters} = await import("../dynamic/supporters.js?v=01062022"); const {supporters} = await import("../dynamic/supporters.js?v=19062022");
alertMessage.innerHTML = alertMessage.innerHTML =
"<ul style='column-count: 5; column-gap: 2em'>" + supporters.map(n => `<li>${n}</li>`).join("") + "</ul>"; "<ul style='column-count: 5; column-gap: 2em'>" + supporters.map(n => `<li>${n}</li>`).join("") + "</ul>";
$("#alert").dialog({ $("#alert").dialog({