even better grid lines
This commit is contained in:
parent
7165e7339f
commit
2fb497236a
7 changed files with 174 additions and 48 deletions
|
@ -7,7 +7,7 @@ edition = "2018"
|
||||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
mozaic = { git = "https://github.com/ajuvercr/MOZAIC" }
|
mozaic = { git = "https://github.com/ZeusWPI/MOZAICP" }
|
||||||
tokio = "0.1.22"
|
tokio = "0.1.22"
|
||||||
rand = { version = "0.6.5", default-features = true }
|
rand = { version = "0.6.5", default-features = true }
|
||||||
futures = "0.1.28"
|
futures = "0.1.28"
|
||||||
|
|
|
@ -15,35 +15,9 @@
|
||||||
|
|
||||||
<div class="section">
|
<div class="section">
|
||||||
<span class="title">Grid</span>
|
<span class="title">Grid</span>
|
||||||
<div class="prop gridline">
|
<div id="gridConfig">
|
||||||
<div class="item">
|
|
||||||
<label for="mwidth" class="input">Line width</label>
|
|
||||||
<input type="number" id="mwidth" value="4">
|
|
||||||
</div>
|
|
||||||
<div class="item">
|
|
||||||
<label for="mwidth" class="input">Seperation</label>
|
|
||||||
<input type="number" id="mwidth" value="100">
|
|
||||||
</div>
|
|
||||||
<div class="item">
|
|
||||||
<label for="mwidth" class="input">Color</label>
|
|
||||||
<input type="text" id="mwidth" value="#333">
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<hr>
|
|
||||||
<div class="prop gridline">
|
|
||||||
<div class="item">
|
|
||||||
<label for="mwidth" class="input">Line width</label>
|
|
||||||
<input type="number" id="mwidth" value="2">
|
|
||||||
</div>
|
|
||||||
<div class="item">
|
|
||||||
<label for="mwidth" class="input">Seperation</label>
|
|
||||||
<input type="number" id="mwidth" value="20">
|
|
||||||
</div>
|
|
||||||
<div class="item">
|
|
||||||
<label for="mwidth" class="input">Color</label>
|
|
||||||
<input type="text" id="mwidth" value="#333">
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
|
<button class="btn" id="addbtn">+</button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
@ -52,7 +26,7 @@
|
||||||
<canvas id="canvas" class="canvas"></canvas>
|
<canvas id="canvas" class="canvas"></canvas>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<button class="openbtn" onclick="toggleNav()">☰</button>
|
<button id="openbtn" class="openbtn" onclick="toggleNav()">☰</button>
|
||||||
</body>
|
</body>
|
||||||
|
|
||||||
|
|
||||||
|
|
52
mapbuilder/src/grid.ts
Normal file
52
mapbuilder/src/grid.ts
Normal file
|
@ -0,0 +1,52 @@
|
||||||
|
import { removeEl, newDiv, newInput, newLabel, addChildren, newButton } from './util'
|
||||||
|
|
||||||
|
const gridConfig = document.getElementById("gridConfig");
|
||||||
|
let width = 4;
|
||||||
|
let sep = 100;
|
||||||
|
|
||||||
|
function addGrid() {
|
||||||
|
|
||||||
|
const grid = newDiv(["prop", "gridline"]);
|
||||||
|
|
||||||
|
const w = newDiv(["item"]);
|
||||||
|
const wi = newLabel("Line width", ["input"]);
|
||||||
|
const wv = newInput("number", width + "");
|
||||||
|
addChildren(w, [wi, wv]);
|
||||||
|
|
||||||
|
const s = newDiv(["item"]);
|
||||||
|
const si = newLabel("Seperation", ["input"]);
|
||||||
|
const sv = newInput("number", sep + "");
|
||||||
|
addChildren(s, [si, sv]);
|
||||||
|
|
||||||
|
const c = newDiv(["item"]);
|
||||||
|
const ci = newLabel("Color", ["input"]);
|
||||||
|
const cv = newInput("text", "#333");
|
||||||
|
addChildren(c, [ci, cv]);
|
||||||
|
|
||||||
|
const hr = document.createElement("hr");
|
||||||
|
|
||||||
|
const d = newButton("", ["btn", "delete"]);
|
||||||
|
d.onclick = () => {
|
||||||
|
removeEl(grid);
|
||||||
|
removeEl(hr);
|
||||||
|
|
||||||
|
width *= 2;
|
||||||
|
sep *= 5;
|
||||||
|
}
|
||||||
|
|
||||||
|
addChildren(grid, [w, s, c, d]);
|
||||||
|
|
||||||
|
gridConfig.appendChild(grid);
|
||||||
|
gridConfig.appendChild(hr);
|
||||||
|
|
||||||
|
width /= 2;
|
||||||
|
if (width < 1) width = 1;
|
||||||
|
sep /= 5;
|
||||||
|
if (sep < 1) sep = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
export function init_grid() {
|
||||||
|
document.getElementById("addbtn").onclick = () => addGrid();
|
||||||
|
addGrid();
|
||||||
|
}
|
|
@ -1,3 +1,4 @@
|
||||||
|
import {init_grid} from "./grid"
|
||||||
|
|
||||||
let gridlineEls:any;
|
let gridlineEls:any;
|
||||||
let gridlineNeedsUpdate = true;
|
let gridlineNeedsUpdate = true;
|
||||||
|
@ -89,3 +90,4 @@ function draw_grid(
|
||||||
}
|
}
|
||||||
|
|
||||||
setTimeout(main, 200);
|
setTimeout(main, 200);
|
||||||
|
init_grid();
|
||||||
|
|
0
mapbuilder/src/state.ts
Normal file
0
mapbuilder/src/state.ts
Normal file
|
@ -12,9 +12,31 @@ $darkgrey: darken($grey, 20);
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#openbtn {
|
||||||
|
right: 5px;
|
||||||
|
top: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Side panel styling */
|
/* Side panel styling */
|
||||||
|
|
||||||
|
.openbtn {
|
||||||
|
position: absolute;
|
||||||
|
font-size: 20px;
|
||||||
|
cursor: pointer;
|
||||||
|
background-color: $lightgrey;
|
||||||
|
color: white;
|
||||||
|
padding: 10px 15px;
|
||||||
|
border: none;
|
||||||
|
&:hover {
|
||||||
|
background-color: $orange;
|
||||||
|
color: darken($color: $grey, $amount: 10);
|
||||||
|
}
|
||||||
|
&:focus {
|
||||||
|
outline: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
.sidepanel {
|
.sidepanel {
|
||||||
/* 0 width - change this with JavaScript */
|
/* 0 width - change this with JavaScript */
|
||||||
height: 100vh;
|
height: 100vh;
|
||||||
|
@ -65,11 +87,33 @@ $darkgrey: darken($grey, 20);
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
background-color: $grey;
|
background-color: $grey;
|
||||||
}
|
}
|
||||||
|
#addbtn {
|
||||||
|
width: 90%;
|
||||||
|
margin: 0 5%;
|
||||||
|
}
|
||||||
hr {
|
hr {
|
||||||
|
margin: 10px 0;
|
||||||
border: 1px dashed $lightgrey;
|
border: 1px dashed $lightgrey;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.btn {
|
||||||
|
border-radius: 8px;
|
||||||
|
color: $orange;
|
||||||
|
background-color: $lightgrey;
|
||||||
|
transition: 0.35s;
|
||||||
|
font-size: 20px;
|
||||||
|
padding: 5px;
|
||||||
|
font-weight: bolder;
|
||||||
|
&:hover {
|
||||||
|
background-color: $orange;
|
||||||
|
color: darken($color: $grey, $amount: 10);
|
||||||
|
}
|
||||||
|
&:focus {
|
||||||
|
outline: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
.prop {
|
.prop {
|
||||||
margin: 10px;
|
margin: 10px;
|
||||||
color: white;
|
color: white;
|
||||||
|
@ -93,24 +137,20 @@ $darkgrey: darken($grey, 20);
|
||||||
.item+.item {
|
.item+.item {
|
||||||
margin-top: 10px;
|
margin-top: 10px;
|
||||||
}
|
}
|
||||||
}
|
.delete {
|
||||||
|
border-radius: 30px;
|
||||||
.openbtn {
|
margin: 10px 0 0 calc(100% - 35px);
|
||||||
position: absolute;
|
width: 30px;
|
||||||
right: 5px;
|
height: 30px;
|
||||||
top: 5px;
|
font-size: 25px;
|
||||||
font-size: 20px;
|
position: relative;
|
||||||
cursor: pointer;
|
&::before {
|
||||||
background-color: $lightgrey;
|
content: "\00d7";
|
||||||
color: white;
|
position: absolute;
|
||||||
padding: 10px 15px;
|
left: 50%;
|
||||||
border: none;
|
top: 50%;
|
||||||
&:hover {
|
transform: translate(-50%, -50%);
|
||||||
background-color: $orange;
|
}
|
||||||
color: darken($color: $grey, $amount: 10);
|
|
||||||
}
|
|
||||||
&:focus {
|
|
||||||
outline: none;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
58
mapbuilder/src/util.ts
Normal file
58
mapbuilder/src/util.ts
Normal file
|
@ -0,0 +1,58 @@
|
||||||
|
|
||||||
|
// DOM manipulation
|
||||||
|
|
||||||
|
export function removeEl(el: any) {
|
||||||
|
el.remove();
|
||||||
|
}
|
||||||
|
|
||||||
|
export function newLabel(label = "", classes: string[] = []): HTMLLabelElement {
|
||||||
|
const out: HTMLLabelElement = document.createElement("label");
|
||||||
|
out.classList.add("input");
|
||||||
|
out.appendChild(document.createTextNode(label));
|
||||||
|
|
||||||
|
for(let c of classes) {
|
||||||
|
out.classList.add(c);
|
||||||
|
}
|
||||||
|
|
||||||
|
return out;
|
||||||
|
}
|
||||||
|
|
||||||
|
export function newInput(type: string, value = "", classes: string[] = []): HTMLInputElement {
|
||||||
|
const out: HTMLInputElement = document.createElement("input");
|
||||||
|
|
||||||
|
out.type = type;
|
||||||
|
out.value = value;
|
||||||
|
|
||||||
|
for(let c of classes) {
|
||||||
|
out.classList.add(c);
|
||||||
|
}
|
||||||
|
|
||||||
|
return out;
|
||||||
|
}
|
||||||
|
|
||||||
|
export function newDiv(classes: string[] = []): HTMLDivElement {
|
||||||
|
const out: HTMLDivElement = document.createElement("div");
|
||||||
|
|
||||||
|
for(let c of classes) {
|
||||||
|
out.classList.add(c);
|
||||||
|
}
|
||||||
|
|
||||||
|
return out;
|
||||||
|
}
|
||||||
|
|
||||||
|
export function addChildren(div: HTMLDivElement, els: HTMLElement[]) {
|
||||||
|
for(let c of els) {
|
||||||
|
div.appendChild(c);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export function newButton(value = "", classes: string[] = []): HTMLButtonElement {
|
||||||
|
const out = document.createElement("button");
|
||||||
|
out.appendChild(document.createTextNode(value));
|
||||||
|
|
||||||
|
for(let c of classes) {
|
||||||
|
out.classList.add(c);
|
||||||
|
}
|
||||||
|
|
||||||
|
return out;
|
||||||
|
}
|
Loading…
Reference in a new issue