mirror of
https://github.com/Azgaar/Fantasy-Map-Generator.git
synced 2025-12-17 01:41:22 +01:00
Merge branch 'master' of https://github.com/Azgaar/Fantasy-Map-Generator into charts-overview
This commit is contained in:
commit
c1ee0b3094
4 changed files with 47 additions and 13 deletions
|
|
@ -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", () => {
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
`);
|
`);
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
|
|
@ -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({
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue