var messages = {}; var lang; var literal = true; var app; var tv; var tree; var cel; var clist; var blocklists = { "block.element": ["statement.select", "statement.obj", "statement.comp", "statement.prop"], "block.root": ["statement.select", "statement.define"], "block.select": ["statement.select.type", "statement.select.exp", "statement.select.anchor", "statement.select.atanchor"], "block.exp.op.sep.vec": ["statement.exp.number"], "block.exp.op.sep.arr": ["statement.exp.string"], }; var ilid = 0; var inputlists = { "input.comp": ["anim", "image", "polysec", "rect", "scale3", "text"], "input.prop": [ "pos", "rot", "scale", "anim.delay", "anim.direction", "anim.duration", "anim.name", "anim.iteration", "image.fit", "image.frame", "image.frames", "image.index", "image.shader", "mesh.color", "mesh.opacity", "mesh.zindex", "polysec.body", "polysec.head", "polysec.shape", "polysec.tail", "scale3.border", "sec.part", "sec.partial", "sprite.bound", "sprite.pivot", "sprite.scale", "sprite.ui", "text.frames", "text.size", "text.spacing", "text.value", ], "input.type": ["chart", "group", "track", "note"], }; var statementlists = { "statement.comp": ["input.comp"], "statement.define": ["input.ident", "exp"], "statement.exp.cast.vector2number": ["exp.vector"], "statement.exp.const.w": [], "statement.exp.const.h": [], "statement.exp.const.inf": [], "statement.exp.const.null": [], "statement.exp.const.true": [], "statement.exp.const.false": [], "statement.exp.literal.ident": ["input.ident"], "statement.exp.literal.identforced": ["input.ident"], "statement.exp.literal.number": ["input.number"], "statement.exp.literal.string": ["input.string"], "statement.exp.op.add": ["exp.number", "exp.number"], "statement.exp.op.sub": ["exp.number", "exp.number"], "statement.exp.op.mul": ["exp.number", "exp.number"], "statement.exp.op.div": ["exp.number", "exp.number"], "statement.exp.op.mod": ["exp.number", "exp.number"], "statement.exp.op.add1": ["exp.number"], "statement.exp.op.sub1": ["exp.number"], "statement.exp.op.not": ["exp.number"], "statement.exp.op.at": ["exp.number_or_vector", "exp.number"], "statement.exp.op.lt": ["exp.number", "exp.number"], "statement.exp.op.eq": ["exp.number", "exp.number"], "statement.exp.op.gt": ["exp.number", "exp.number"], "statement.exp.op.and": ["exp", "exp"], "statement.exp.op.or": ["exp", "exp"], "statement.exp.op.sep.vec": ["block.exp.op.sep.vec"], "statement.exp.op.sep.arr": ["block.exp.op.sep.arr"], "statement.exp.func.frame_seq": ["exp.string", "exp.number", "exp.number"], "statement.exp.func.int": ["exp.number"], "statement.exp.func.clamp": ["exp.number", "exp.number", "exp.number"], "statement.exp.func.min": ["exp.number", "exp.number"], "statement.exp.func.max": ["exp.number", "exp.number"], "statement.exp.func.abs": ["exp.number"], "statement.exp.func.interval": ["exp.number", "exp.number", "exp.number"], "statement.exp.func.is": ["exp", "exp"], "statement.exp.func.cubic_bezier": ["exp.number", "exp.number", "exp.number", "exp.number", "exp.number"], "statement.exp.func.ease": ["exp.number"], "statement.exp.func.ease_in": ["exp.number"], "statement.exp.func.ease_out": ["exp.number"], "statement.exp.func.ease_in_out": ["exp.number"], "statement.exp.func.attack_timing": ["exp.number", "exp.number"], "statement.exp.func.enter_timing": ["exp.number"], "statement.exp.func.release_timing": ["exp.number", "exp.number"], "statement.exp.func.leave_timing": ["exp.number"], "statement.exp.func.contact_timing": ["exp.number", "exp.number"], "statement.exp.func.screen_edge": ["exp.number"], "statement.exp.func.anim": ["exp.number_or_vector", "exp.number_or_vector", "exp.number"], "statement.exp.number": ["exp.number"], "statement.exp.string": ["exp.string"], "statement.obj": ["block.element"], "statement.prop": ["input.prop", "exp"], "statement.select": ["block.select", "block.element"], "statement.select.anchor": ["input.identanchor"], "statement.select.atanchor": ["input.identanchor"], "statement.select.exp": ["exp.number"], "statement.select.type": ["input.type"], }; var explists = { "exp": ["#exp.number", "#exp.vector", "#exp.string", "#exp.array", "#exp.identifier", "#exp.any"], "exp.number_or_vector": ["#exp.number", "#exp.vector", "#exp.any"], "exp.any": [ "statement.exp.literal.ident", "statement.exp.literal.identforced", "statement.exp.op.and", "statement.exp.op.or" ], "exp.array": [ "statement.exp.op.sep.arr", "statement.exp.func.frame_seq", "#exp.any" ], "exp.identifier": [ "statement.exp.const.null", "#exp.any" ], "exp.number": [ "statement.exp.literal.number", "statement.exp.cast.vector2number", "-exp.const", "statement.exp.const.w", "statement.exp.const.h", "statement.exp.const.inf", "statement.exp.const.true", "statement.exp.const.false", "-exp.op", "statement.exp.op.add", "statement.exp.op.sub", "statement.exp.op.mul", "statement.exp.op.div", "statement.exp.op.mod", "-", "statement.exp.op.add1", "statement.exp.op.sub1", "statement.exp.op.not", "-", "statement.exp.op.at", "statement.exp.op.lt", "statement.exp.op.eq", "statement.exp.op.gt", "-exp.func", "statement.exp.func.interval", "statement.exp.func.is", "-exp.func.ctx", "statement.exp.func.int", "statement.exp.func.clamp", "statement.exp.func.min", "statement.exp.func.max", "statement.exp.func.abs", "-exp.func.anim", "statement.exp.func.cubic_bezier", "statement.exp.func.ease", "statement.exp.func.ease_in", "statement.exp.func.ease_out", "statement.exp.func.ease_in_out", "-exp.func.judge", "statement.exp.func.attack_timing", "statement.exp.func.enter_timing", "statement.exp.func.release_timing", "statement.exp.func.leave_timing", "statement.exp.func.contact_timing", "#exp.any" ], "exp.string": [ "statement.exp.literal.string", "#exp.any" ], "exp.vector": [ "statement.exp.op.sep.vec", "statement.exp.func.screen_edge", "statement.exp.func.anim", "#exp.any" ], }; window.onload = function () { lang = navigator.language.replace("-", "_"); if (!messages[lang]) lang = "en_US"; app = $("#app"); tv = $("#treeview"); tree = $("#tree"); app.find("tbr").replaceWith(function () { return msg($(this).text()); }); addAddButton(tree).on("click", function () { if (clist) clist.remove(); }); tv.on("mousemove", null, null, onMouseMove); $(".tgbtn").on("click", function () { var btn = $(this); btn.toggleClass("tgbtn-active"); onToggleButtonClick(btn.attr("id"), btn.hasClass("tgbtn-active")); }); }; function addAddButton(el) { return el.append($("").addClass("btn btn-add").text("+").on("click", null, el, onAddButtonClick)); } function addAddExpButton(el) { return el.append($("").addClass("btn btn-add").text("+").on("click", null, el, onAddExpButtonClick)); } function addAddButtonLiteral(el) { return el.append($("").addClass("btn btn-add t-inline").text("+").on("click", null, el, onAddButtonLiteralClick)); } function addDeleteButton(el) { return el.append($("").addClass("btn btn-delete").text("x").on("click", null, el, onDeleteButtonClick)); } function addDeleteButtonLiteral(el) { return el.append($("").addClass("btn btn-delete t-inline").text("x").on("click", null, el, onDeleteButtonLiteralClick)); } function onAddButtonClick(event) { cel = el = event.data; generateAddList(event, blocklists[el.attr("key")]); } function onAddExpButtonClick(event) { cel = el = event.data; generateAddExpList(event, el.attr("key")); } function onAddButtonLiteralClick(event) { var el = event.data.children(".t-internal"); if (!el.hasClass("t-node")) el = el.children(".t-node"); event.data = el; onAddButtonClick(event); } function onDeleteButtonClick(event) { var el = event.data.parents(".t-literal").first(); event.data.remove(); if (el) updateLiteral(el); } function onDeleteButtonLiteralClick(event) { var el = event.data.parents(".t-literal").first(); fetchInternalStatements(el).eq(parseInt(event.data.attr("target"))).remove(); updateLiteral(el); } var tblist = { "tb-debug": "mode-debug", "tb-hide-add": "mode-hide-add", "tb-hide-delete": "mode-hide-delete", "tb-sort": "mode-sort", }; function onToggleButtonClick(id, state) { var cls = tblist[id]; if (state) tv.addClass(cls); else tv.removeClass(cls); if (cls == "mode-sort") { var il = tv.find(".t-input"); var sl = tv.find(".t-statement").not(".t-inline").not(function () { return $(this).parent().is(".t-exp"); }); if (state) { il.each(function (i) { $(il[i]).children("input").attr("disabled", ""); }); sl.each(function (i) { $(sl[i]).on("click", null, $(sl[i]), onStatementSort); }); } else { il.each(function (i) { var el = $(il[i]); if (!el.parents(".t-internal").length) el.children("input").attr("disabled", null); }); sl.each(function (i) { $(sl[i]).off("click", null, onStatementSort); }); tv.removeClass("state-grabbing"); if (grabbing) { grabbing.removeClass("t-grabbing"); grabbing = null; grabPointer.remove(); } } } } var grabbing; var grabPointer; function onStatementSort(event) { event.stopPropagation(); if (grabbing) { var l = grabbing.parent().children(".t-statement"); var i = getGrabPtrIndex(event.pageY + tv.scrollTop() - tv[0].offsetTop); if (i == l.length) grabbing.insertAfter(l.last()); else grabbing.insertBefore(l.eq(i)); tv.removeClass("state-grabbing"); grabbing.removeClass("t-grabbing"); grabPointer.remove(); updateLiteral(grabbing.parents(".t-literal").first()); grabbing = null; } else { grabbing = event.data; grabbing.addClass("t-grabbing"); tv.addClass("state-grabbing"); grabPointer = $("