Skip to content

Commit c39653a

Browse files
committed
add pattern highlighting in JSON view
1 parent 97b0a8d commit c39653a

File tree

2 files changed

+61
-19
lines changed

2 files changed

+61
-19
lines changed

src/gui.ts

Lines changed: 41 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import type * as Schema from "./@types/custom_connected_block_template";
12

23
abstract class AbstractField {
34
private eventName: string;
@@ -255,6 +256,44 @@ const Data = {
255256
showPatternsField: new CheckBoxField("Showing: Face Tags", "Showing: Patterns"),
256257
showFloorGridField: new CheckBoxField("Disable Floor Grid", "Enable Floor Grid"),
257258
patternIndexField: new NumberField("Pattern Index")
259+
},
260+
updateJson: function() {
261+
let display = document.getElementById("json_display");
262+
let shape = Data.controls.shapesField.getPickedOption();
263+
let patternIndex = Data.controls.patternIndexField.getValue();
264+
265+
if (Data.cachedJson.obj && display) {
266+
let json = Data.cachedJson.obj as Schema.CustomConnectedBlockTemplateAsset;
267+
let shapeObj = json.Shapes![shape];
268+
269+
// Collect patterns in a new array, to avoid parasiting the original
270+
let patternList: Schema.Pattern[] = [];
271+
if (shapeObj.PatternsToMatchAnyOf) {
272+
patternList.push(...shapeObj.PatternsToMatchAnyOf);
273+
}
274+
275+
// Concatenate all patterns into a HTML string, to be re-appended in place of the unstyled block.
276+
let patternStr: string = "";
277+
for (let i = 0; i < patternList.length; i++) {
278+
let clazz = "pattern-str";
279+
let comma = ",";
280+
281+
if (i == patternIndex) clazz += " selected";
282+
if (i == patternList.length - 1) comma = "";
283+
284+
patternStr += `<i class="${clazz}"> ${JSON.stringify(patternList[i], null, 4)}${comma}</i>`;
285+
}
286+
287+
// Stringify original and split patterns off
288+
let shapeStr: string = JSON.stringify(shapeObj, null, 4);
289+
let split = shapeStr.split("\"PatternsToMatchAnyOf\"");
290+
291+
// Make strings more HTML-friendly, and add back leading spaces for patterns
292+
let splitStr = split[0].replaceAll("\n", "<br>");
293+
patternStr = patternStr.replaceAll("\n", "<br> ");
294+
295+
display.innerHTML = `${splitStr}"PatternsToMatchAnyOf": [<br>${patternStr} ]<br>}`;
296+
}
258297
}
259298
}
260299

@@ -286,17 +325,8 @@ function initControls() {
286325
})
287326

288327
// Read shapes trigger
289-
Data.controls.shapesField.addChangedListener(() => {
290-
let shape = Data.controls.shapesField.getPickedOption();
291-
292-
if (Data.cachedJson.obj) {
293-
let shapeData = Data.cachedJson.obj["Shapes"] as any;
294-
let shapeObj = shapeData[shape];
295-
let shapeStr = JSON.stringify(shapeObj, null, 4);
296-
297-
jsonDisplay.textContent = shapeStr;
298-
}
299-
})
328+
Data.controls.shapesField.addChangedListener(Data.updateJson);
329+
Data.controls.patternIndexField.addChangedListener(Data.updateJson);
300330

301331
// Add fields to panel
302332
let fields = [];

src/style.css

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -11,14 +11,12 @@
1111
--padding-4: 40px;
1212

1313
--button-height: 5vh;
14+
--header-height: 7.5vh;
1415
}
1516

1617
html, body {
1718
margin: 0;
1819
height: 100%;
19-
display: flex;
20-
flex-direction: column;
21-
object-fit: contain;
2220
}
2321

2422
@font-face {
@@ -35,15 +33,18 @@ h1 {
3533
justify-content: space-between;
3634
align-items: center;
3735
padding-left: var(--padding-2);
36+
height: var(--header-height);
3837
}
3938

4039
h1 > a {
4140
margin: 0;
4241
border-left: #777 solid 1px;
43-
padding: var(--padding-2);
4442
text-decoration: none;
4543
color: var(--global-bg-dark);
4644
background-color: var(--button-bg-pressed);
45+
height: 100%;
46+
align-content: center;
47+
padding: 0 var(--padding-2);
4748
}
4849

4950
h1 > a:hover {
@@ -54,13 +55,13 @@ h1 > a:hover {
5455
main {
5556
display: flex;
5657
flex-direction: row;
57-
height: 100%;
58+
height: calc(100% - var(--header-height));
5859
}
5960

6061
#viewport {
62+
display: inline-block;
6163
width: 75vw;
6264
height: 100%;
63-
display: block;
6465
}
6566

6667
#controls {
@@ -271,6 +272,17 @@ main {
271272
.number-field > div > input[type=number]::-webkit-inner-spin-button,
272273
.number-field > div > input[type=number]::-webkit-outer-spin-button
273274
{
274-
-webkit-appearance: none;
275-
margin: 0;
275+
-webkit-appearance: none;
276+
margin: 0;
277+
}
278+
279+
.pattern-str {
280+
margin: 0;
281+
font-style: normal;
282+
background-color: var(--button-bg);
283+
display: block;
284+
}
285+
286+
.pattern-str.selected {
287+
background-color: var(--button-bg-pressed);
276288
}

0 commit comments

Comments
 (0)