Implement expression in skin editor.

This commit is contained in:
2023-03-14 17:22:48 +08:00
parent dc59176eac
commit 27ca1a7292
2 changed files with 48 additions and 13 deletions

View File

@@ -155,15 +155,32 @@ input {
.t-exp {
border-top: solid 1px gray;
vertical-align: top;
}
.t-exp.t-inline {
padding: 2px 4px;
margin: 0 2px;
padding: 2px;
}
.t-exp .t-inline {
margin: 0 2px 2px 2px;
}
.t-exp .t-statement {
margin: 0;
border: 0;
border-left: solid 1px red;
padding: 0;
}
.t-exp:hover {
border-top: solid 3px gray;
}
.t-exp .btn-add:not(:only-child) {
display: none;
}
.t-input {
display: inline-block;

View File

@@ -40,11 +40,22 @@ var statementlists = {
"statement.filter.exp": ["exp"],
"statement.filter.type": ["input.type"],
"statement.obj": ["block.object"],
"statement.exp.literal.ident": ["input.ident"],
"statement.exp.literal.number": ["input.number"],
"statement.exp.op.add": ["exp.number", "exp.number"],
"statement.exp.op.substract": ["exp.number", "exp.number"],
"statement.exp.op.multiply": ["exp.number", "exp.number"],
"statement.exp.op.divide": ["exp.number", "exp.number"],
"statement.prop": ["input.prop", "exp"],
"statement.select": ["block.select", "block.element"],
"statement.select.exp": ["exp"],
"statement.select.type": ["input.type"],
}
};
var explists = {
"exp": ["#exp.array", "#exp.error", "#exp.identifier", "#exp.null", "#exp.number", "#exp.string", "#exp.vector"],
"exp.number": ["statement.exp.literal.number", "statement.exp.op.add", "statement.exp.op.substract", "statement.exp.op.multiply", "statement.exp.op.divide", "statement.exp.literal.ident"],
};
window.onload = function () {
lang = navigator.language.replace("-", "_");
@@ -95,7 +106,7 @@ function onAddButtonClick(event) {
function onAddExpButtonClick(event) {
cel = el = event.data;
generateAddExpList(event);
generateAddExpList(event, el.attr("key"));
}
function onAddButtonLiteralClick(event) {
@@ -216,14 +227,20 @@ function generateAddList(event, items) {
popup(event, ul);
}
function generateAddExpList(event, items) {
function generateAddExpList(event, item) {
event.stopPropagation();
if (clist) clist.remove();
var ul = $("<ul></ul>").addClass("t-list t-exp-list");
for (var i in items) {
var item = items[i];
ul.append($("<li></li>").addClass("t-li").attr("key", item).text(msg("list." + item)).on("click", null, item, onAddItemClick));
}
(function addExpRecursive(it) {
var items = explists[it];
for (var i in items) {
var item = items[i];
if (item[0] == "#")
addExpRecursive(item.substring(1));
else
ul.append($("<li></li>").addClass("t-li").attr("key", item).text(msg("list." + item)).on("click", null, item, onAddItemClick));
}
})(item);
popup(event, ul);
}
@@ -349,10 +366,11 @@ function createExp(key) {
}
function createInput(key, target) {
var el = $("<input />").attr({
"type": "text",
"placeholder": msg(key + ".default")
});
var el = $("<input />").attr("placeholder", msg(key + ".default"));
switch (key) {
case "input.number": el.attr("type", "number"); break;
default: el.attr("type", "text"); break;
}
var r = $("<span></span>").attr({
"key": key,
"target": target.index()