Support for text components and float ranges

This commit is contained in:
Misode
2019-06-21 04:51:33 +02:00
parent f57a9e48c9
commit ebacf9ec5e
3 changed files with 42 additions and 16 deletions

View File

@@ -214,9 +214,9 @@
</div>
<input type="text" class="form-control exact d-none rounded-right" value="1" onchange="updateRangeField(this, 'damage')" onclick="this.select()">
<span class="input-group-text rounded-0 range d-none">Min</span>
<input type="text" class="form-control range min d-none" value="1" onchange="updateRangeField(this, 'damage')" onclick="this.select()">
<input type="text" class="form-control range min d-none" value="0" onchange="updateRangeField(this, 'damage')" onclick="this.select()">
<span class="input-group-text rounded-0 range d-none">Max</span>
<input type="text" class="form-control range max d-none rounded-right" value="2" onchange="updateRangeField(this, 'damage')" onclick="this.select()">
<input type="text" class="form-control range max d-none rounded-right" value="1" onchange="updateRangeField(this, 'damage')" onclick="this.select()">
<span class="input-group-text rounded-0 binomial d-none">n</span>
<input type="text" class="form-control binomial n d-none" value="1" onchange="updateRangeField(this, 'damage')" onclick="this.select()">
<span class="input-group-text rounded-0 binomial d-none">p</span>
@@ -329,7 +329,7 @@
<div class="input-group-prepend">
<span class="input-group-text">Name</span>
</div>
<input type="text" class="form-control" onchange="updateField(this, 'name')" onclick="this.select()">
<input type="text" class="form-control code" onchange="updateJSONField(this, 'name')" onclick="this.select()">
</div>
<div class="input-group function-limit-range mt-3 d-none" data-type="exact">
<div class="input-group-prepend">
@@ -355,7 +355,7 @@
<button type="button" class="btn btn-light" onclick="addEntry(this)">Add Entry</button>
</div>
<div class="input-group mt-3 function-lore d-none">
<textarea class="form-control code" onchange="updateLoreField(this)" rows=3 placeholder="JSON text component on each line"></textarea>
<textarea class="form-control code" onchange="updateLoreField(this)" rows=3></textarea>
</div>
<div class="input-group mt-3 function-lore-replace d-none">
<div class="custom-control custom-checkbox">

View File

@@ -12,7 +12,7 @@ let table = {
pools: []
};
addPool();
addCondition($('#structure .pool').get());
addEntry($('#structure .pool').get());
const params = new URLSearchParams(window.location.search);
if (params.has('q')) {
@@ -247,7 +247,12 @@ function deleteValue(root, field) {
function updateField(el, field) {
updateValue(getParent(el), field, $(el).val());
console.log(getParent(el));
invalidated();
}
function updateJSONField(el, field) {
let value = parseJSONValue($(el).val());
updateValue(getParent(el), field, value);
invalidated();
}
@@ -290,13 +295,13 @@ function updateRangeField(el, field) {
function getRangeField($el, type) {
if (type === 'exact') {
return parseInt($el.find('.exact').val());
return parseFloat($el.find('.exact').val());
} else if (type === 'range') {
let data = {};
let min = $el.find('.range.min').val();
let max = $el.find('.range.max').val();
if (min) data.min = parseInt(min);
if (max) data.max = parseInt(max);
if (min) data.min = parseFloat(min);
if (max) data.max = parseFloat(max);
return data;
} else if (type === 'binomial') {
let data = {type: "minecraft:binomial"};
@@ -406,8 +411,25 @@ function updateScoreField(el) {
invalidated();
}
function parseJSONValue(value) {
if (value.startsWith('"') || value.startsWith('{') || value.startsWith('[')) {
try {
return JSON.parse(value);
} catch {
return value;
}
}
return value;
}
function updateLoreField(el) {
console.log($(el).val());
let lines = $(el).val().split('\n');
let parent = getParent(el);
parent.lore = [];
for (let line of lines) {
parent.lore.push(parseJSONValue(line));
}
invalidated();
}
function addOperation(el) {

16
view.js
View File

@@ -230,7 +230,11 @@ function generateFunction(func, i) {
if (func.function === 'minecraft:set_name') {
$function.find('.function-name').removeClass('d-none');
$function.find('.function-name input').val(func.name);
let value = func.name;
if (typeof value !== 'string') {
value = JSON.stringify(value);
}
$function.find('.function-name input').val(value);
} else {
delete func.name;
}
@@ -239,7 +243,11 @@ function generateFunction(func, i) {
let lore = "";
if (func.lore) {
for (let j = 0; j < func.lore.length; j += 1) {
lore += func.lore[j];
let value = func.lore[j];
if (typeof value !== 'string') {
value = JSON.stringify(value);
}
lore += value;
if (j < func.lore.length - 1) {
lore += "\n";
}
@@ -385,7 +393,6 @@ function generateModifier(modifier, i) {
}
function generateOperation(operation, i) {
console.log(operation, i);
let $operation = $('#operationTemplate').clone();
$operation.removeAttr('id').attr('data-index', i);
@@ -508,8 +515,6 @@ function generateCondition(condition, i) {
}
if (condition.condition === 'minecraft:match_tool') {
console.log('!!');
console.log(condition.predicate);
let $item = generateItem(condition.predicate);
$condition.children('.card-body').append($item);
} else {
@@ -692,7 +697,6 @@ function generateEntity(entity) {
function generateItem(item) {
let $item = $('#itemTemplate').clone().removeAttr('id').addClass('predicate');
console.log(item.nbt);
if (!item) {
item = {};
}