diff --git a/js/model.js b/js/model.js index b385b025..7fc769b4 100644 --- a/js/model.js +++ b/js/model.js @@ -187,7 +187,7 @@ function getPath(el) { let index = $node.attr('data-index'); if (index === 'root') return []; let parent = getPath($node.parent()); - parent = parent.concat(index.split('.')); + parent.push(index); return parent; } @@ -263,18 +263,22 @@ function removeFromSet(el, array) { } } +function isValidMapKey(key, node) { + return key.length > 0 && !(key in node) +} + function addToMap(el) { let node = getParent(el); let $field = $(el).closest('[data-index]'); let key = $field.find('input').val(); let map = $field.attr('data-index'); let type = $field.attr('data-item-type'); - if (key.length === 0) { - return; - } if (!node[map]) { node[map] = {}; } + if (!isValidMapKey(key, node[map])) { + return; + } if (type === 'int' || type === 'float' || type === 'random' || type === 'range' || type === 'boundary') { node[map][key] = 0; } else if (type === 'boolean') { @@ -287,6 +291,26 @@ function addToMap(el) { invalidated(); } +function renameMapKey(el) { + let key = $(el).text(); + let $textarea = $('') + .val(key) + .keydown(e => preventNewline(e, 'blur')) + .on('blur', e => { + let newKey = $(e.target).val(); + let path = getPath($(e.target)); + let oldKey = path.pop(); + let node = getNode(path); + if (newKey !== oldKey && isValidMapKey(newKey, node)){ + node[newKey] = node[oldKey]; + delete node[oldKey]; + } + invalidated(); + }); + $(el).replaceWith($textarea); + $textarea.focus(); +} + function removeFromMap(el) { let path = getPath(el); let key = path.pop(); diff --git a/js/view.js b/js/view.js index 69f67f75..aed22157 100644 --- a/js/view.js +++ b/js/view.js @@ -235,18 +235,18 @@ function generateMap(data, struct) { $el.attr('data-index', struct.id).attr('data-item-type', struct.values.type); $el.find('[data-name="1"]').attr('data-i18n', struct.translate); $el.find('[data-name="2"]').attr('data-i18n', struct.translate + '_add'); - $input.attr('data-i18n', `[placeholder]${struct.translatePlaceholder}`); + $input.attr('data-i18n', `[placeholder]placeholder.${struct.translatePlaceholder}`); $input.keypress((e) => {if (e.which == 13) addToMap(e.target);}); if (data) { for (let key of Object.keys(data)) { - out = out || {} + out = out || {}; let field = struct.values; field.id = key; field.translate = key; let {out: outValue, component: $item} = generateComponent(data[key], field); if (field.type === 'object') { let $header = $('
'); - $header.append(('')); + $header.append('' + key + ''); $header.append(''); $item.prepend($header); } else { @@ -443,7 +443,7 @@ function generateObject(data, struct, options) { if (struct.card === false) { // Note: JSON.parse(JSON.stringify(out)) can remove undefined values in the out object. if (Object.keys(JSON.parse(JSON.stringify(out))).length === 0) { - out = undefined + out = undefined; } } $body.children().first().children('button').removeClass('mt-3'); @@ -482,9 +482,9 @@ function generateTooltip(str) { return $el; } -function preventNewline(e) { +function preventNewline(e, event = 'change') { if (e.which === 13) { - $(e.target).trigger('change'); + $(e.target).trigger(event); e.preventDefault(); } } diff --git a/locales/en.json b/locales/en.json index fc470579..45b5a82c 100644 --- a/locales/en.json +++ b/locales/en.json @@ -86,10 +86,10 @@ "criteria.beacon_level": "Pyramid Level", "criteria.villager": "Villager", "criteria.zombie": "Zombie", - "criteria.effects": "Effect", + "criteria.effects": "Effects", "criteria.effects_add": "Add Effect", "criteria.effects_remove": "Remove Effect", - "criteria.state": "State", + "criteria.state": "States", "criteria.state_add": "Add State", "criteria.xp_levels": "XP Level", "criteria.damage": "Damage", diff --git a/locales/zh-CN.json b/locales/zh-CN.json index 2f343c1b..479c4660 100644 --- a/locales/zh-CN.json +++ b/locales/zh-CN.json @@ -83,6 +83,8 @@ "criteria.durability": "耐久度", "criteria.duration": "持续时间", "criteria.effects": "状态效果", + "criteria.effects_add": "添加状态效果", + "criteria.effects_remove": "移除状态效果", "criteria.entity": "实体", "criteria.from_dimension": "出发维度", "criteria.item": "物品", @@ -103,6 +105,7 @@ "criteria.slots.occupied": "已用栏位的数量", "criteria.source_entity": "源实体", "criteria.state": "方块状态", + "criteria.state_add": "添加方块状态", "criteria.to_dimension": "到达维度", "criteria.trigger": "触发器", "criteria.unique_entity_types": "实体种类的数量", diff --git a/schemas/1.15.json b/schemas/1.15.json index 82b63469..c751e75b 100644 --- a/schemas/1.15.json +++ b/schemas/1.15.json @@ -166,7 +166,7 @@ { "id": "criteria", "translate": "criteria", - "translatePlaceholder": "placeholder.criteria", + "translatePlaceholder": "criteria", "type": "map", "values": { "type": "object", @@ -776,7 +776,7 @@ "id": "properties", "type": "map", "translate": "condition.block_state", - "translatePlaceholder": "placeholder.block_state", + "translatePlaceholder": "block_state", "values": { "type": "string" }, @@ -788,7 +788,7 @@ "id": "scores", "type": "map", "translate": "condition.score", - "translatePlaceholder": "placeholder.objective", + "translatePlaceholder": "objective", "values": { "type": "range" }, @@ -1132,7 +1132,7 @@ "id": "advancements", "type": "map", "translate": "entity.player.advancements", - "translatePlaceholder": "placeholder.advancement", + "translatePlaceholder": "advancement", "values": { "type": "boolean" } @@ -1141,7 +1141,7 @@ "id": "recipes", "type": "map", "translate": "entity.player.recipes", - "translatePlaceholder": "placeholder.recipe", + "translatePlaceholder": "recipe", "values": { "type": "boolean" } @@ -1159,7 +1159,7 @@ "id": "effects", "type": "map", "translate": "entity.status_effect", - "translatePlaceholder": "placeholder.effect", + "translatePlaceholder": "effect", "values": { "type": "object", "value": "status_effect" @@ -1259,7 +1259,7 @@ "id": "state", "type": "map", "translate": "location.block.state", - "translatePlaceholder": "placeholder.block_state", + "translatePlaceholder": "block_state", "values": { "type": "string" } @@ -1287,7 +1287,7 @@ "id": "state", "type": "map", "translate": "location.fluid.state", - "translatePlaceholder": "placeholder.fluid_state", + "translatePlaceholder": "fluid_state", "values": { "type": "string" } @@ -1788,6 +1788,7 @@ { "id": "state", "translate": "criteria.state", + "translatePlaceholder": "block_state", "type": "map", "values": { "type": "string"